我正在尝试用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循环,但我认为我不需要它。非常感谢帮助。谢谢!
答案 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)
来摆脱它)。但是,重复项被定义为相同的单词,而不区分大小写。