Python:在文件中查找相同的单词?

时间:2013-03-04 00:55:48

标签: python copy boolean duplicates

我正在尝试用Python创建一个程序来检查文本文件中是否有重复的单词。 (反过来,如果有或没有,则返回一个布尔值)

例如,我有一个名为“copy”的文本文件。在该文本文件中是一行句子。 “那里没有副本”(句子中有两个)

在另一个文件“nocopy”中,它将是一行,“没有副本”。 (只有一个)

到目前为止,我已经构建了我的Python程序:

def duplicate(fname):
 '(file.txt) ==> (Boolean) Returns True if there are duplicate words'
 infile = open(fname, 'r')
 l = infile.read()
 infile.close
 #Missing code here

我无法弄清楚下一步该做什么。我的想法是嵌套for循环,但我认为我不需要它。非常感谢帮助。谢谢!

4 个答案:

答案 0 :(得分:3)

如果你想查看文件中是否有任何重复的单词,那么我会这样做:

def duplicates(fname):
    with open(fname) as f:
        words = f.read().split()
    return len(set(words)) != len(words)

这将检查所有单词的集合数(即每个唯一单词)是否等于有多少单词。

答案 1 :(得分:1)

我想你想要这个:

def duplicate(fname):
    infile = open(fname, 'r')
    for line in infile.readlines():
        for a in line.split(' '):
                line=line.replace(a,"",1)
                if a in line:
                        return True

如果您想尝试一下:

def duplicate(fname):
    infile = open(fname, 'r')
    for line in infile.readlines():
                for a in line.split(' '):
                        line=line.replace(a,"",1)
                        if a in line:
                                return True






if(duplicate('fname.txt')):
        print "yes"

如果duplicate返回true,则会打印yes。

答案 2 :(得分:0)

我认为你正在寻找彼此相邻的重复词。例如,你不想消除“那里有漂亮的房子”中的“那里”。非常简单的选择是将行拆分为列表,然后比较连续元素,删除副本。然后,这将是迭代列表并相应地用空格打印每个值的问题。 如果您只对大小感兴趣,可以随时将单词列表转换为一组单词,然后检查它们的大小是否仍然相同。

答案 3 :(得分:0)

def duplicate(fname):
    '(file.txt) ==> (Boolean) Returns True if there are duplicate words'
    infile = open(fname, 'r')
    fLines = []
    for line in infile:
        l = line.split(' ')
        fLines += [i.lower().rstrip('\n') for i in l]
    infile.close()
    nLines = list(set(fLines))
    for l in nLines:
        if fLines.count(l) > 1: return True
    return False

我建议使用一个集合,因为它会删除重复项,因此它会限制所需的迭代次数。请注意,这不会考虑标点符号(只需使用s.strip(punctuation)来摆脱它)。但是,重复项被定义为相同的单词,而不区分大小写。