1

我正在尝试用 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

4 回答 4

3

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

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

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

于 2013-03-04T01:14:17.243 回答
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"

如果重复返回 true,它将打印是。

于 2013-03-04T01:13:56.013 回答
0

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

于 2013-03-04T01:03:55.260 回答
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)用来摆脱它)。但是,重复项被定义为相同的单词,不区分大小写。

于 2013-03-04T02:32:42.230 回答