我必须以纯文本处理文档,查找单词列表并在找到的每个单词周围返回一个文本窗口。我正在使用NLTK。
我在Stack Overflow上发现帖子,他们使用正则表达式来查找单词,但没有得到索引,只需打印它们。我不认为使用RE是对的,因为我必须找到特定的词。
答案 0 :(得分:4)
这就是你要找的东西:
档案内容:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi sollicitudin tortor et velit venenatis molestie. Morbi non nibh magna, quis tempor metus.
Vivamus vehicula velit sit amet neque posuere id hendrerit sem venenatis. Nam vitae felis sem. Mauris ultricies congue mi, eu ornare massa convallis nec.
Donec volutpat molestie velit, scelerisque porttitor dui suscipit vel. Etiam feugiat feugiat nisl, vitae commodo ligula tristique nec. Fusce bibendum fermentum rutrum.
>>>a = open("file.txt").read()
>>>print a.index("vitae")
232
>>> print a.find("vitae")
232
好的,如果你在多个索引中有相同的单词,请尝试使用生成器,
def all_occurences(file, str):
initial = 0
while True:
initial = file.find(str, initial)
if initial == -1: return
yield initial
initial += len(str)
>>>print list(all_occurences(open("file.txt").read(),"vitae"))
[232, 408]
答案 1 :(得分:1)
如果我理解得很好,建立一个位置索引就是你想要的
from collections import defaultdict
text = "your text goes here"
pos_index = defaultdict(list)
for pos, term in enumerate(text.split()):
pos_index[term].append(pos)
现在你有一个每个单词位置的索引。只需按术语查询..
答案 2 :(得分:1)
试试这个,其中log
是txt,word_search
是您尝试在log
[i for i, item in enumerate(log) if item == word_search]
答案 3 :(得分:1)
自您提出问题以来,我知道已经有一段时间了,但是由于您已经在使用nltk,因此我建议您使用其工具word_tokenize:
text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
for index, word in enumerate(nltk.word_tokenize(text)):
print(index, word)
结果将是:
0传说 1 ipsum 2个 3坐 4 amet 5, 6个私房 7个贴士 8个精英 9。
希望它会有所帮助:)