我正在尝试从文本文件中读取引文,并找到彼此相邻的任何重复单词。以下是引用:
"He that would make his own liberty liberty secure,
must guard even his enemy from oppression;
for for if he violates this duty, he
he establishes a precedent that will reach to himself."
-- Thomas Paine
输出应如下:
找到第1行的“自由”字样
在第3行找到了单词:“for”
在第4行发现了一句话:“他”
我已经编写了从文件中读取文本的代码,但我无法使用代码来识别重复项。我已经尝试枚举文件中的每个单词,并检查一个索引处的单词是否等于以下索引处的单词。但是,我收到索引错误,因为循环继续在索引范围之外。这是我到目前为止所提出的:
import string
file_str = input("Enter file name: ")
input_file = open(file_str, 'r')
word_list = []
duplicates = []
for line in input_file:
line_list = line_str.split()
for word in line_list:
if word != "--":
word_list.append(word)
for idx, word in enumerate(word_list):
print(idx, word)
if word_list[idx] == word_list[idx + 1]:
duplicates.append(word)
对我正在尝试的当前方法的任何帮助将不胜感激,或建议另一种方法。
答案 0 :(得分:1)
当您录制word_list
时,您将丢失有关该单词所在行的信息。
或许更好的方法是在阅读行时确定重复项。
line_number = 1
for line in input_file:
line_list = line_str.split()
previous_word = None
for word in line_list:
if word != "--":
word_list.append(word)
if word == previous_word:
duplicates.append([word, line_number])
previous_word = word
line_number += 1
答案 1 :(得分:0)
这应该做的技巧OP。在单词列表中的for循环中,它现在只到达倒数第二个元素。这不会跟踪行数,但我会使用Phillip Martin的解决方案。
import string
file_str = input("Enter file name: ")
input_file = open(file_str, 'r')
word_list = []
duplicates = []
for line in input_file:
line_list = line.split()
for word in line_list:
if word != "--":
word_list.append(word)
#Here is the change I made > <
for idx, word in enumerate(word_list[:-1]):
print(idx, word)
if word_list[idx] == word_list[idx + 1]:
duplicates.append(word)
print duplicates
答案 2 :(得分:0)
这是另一种方法。
from itertools import tee, izip
from collections import defaultdict
dups = defaultdict(set)
with open('file.txt') as f:
for no, line in enumerate(f, 1):
it1, it2 = tee(line.split())
next(it2, None)
for word, follower in izip(it1, it2):
if word != '--' and word == follower:
dups[no].add(word)
产生
>>> dups
defaultdict(<type 'set'>, {1: set(['liberty']), 3: set(['for'])})
这是一个字典,它为每一行保存一组配对重复,例如
>>> dups[3]
set(['for'])
(我不知道你为什么期望在第四行找到“他”,你的样本文件肯定不会加倍。)