我必须以纯文本形式处理文档,查找单词列表并在找到的每个单词周围返回一个文本窗口。我正在使用NLTK。
我在 Stack Overflow 上找到了帖子,他们使用正则表达式来查找单词,但没有获取索引,只是打印它们。我不认为使用 RE 是正确的,因为我必须找到特定的词。
这就是您要查找的内容:
文件内容:
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]
如果我理解得很好,建立一个位置索引就是你想要的
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)
现在你有了一个包含每个单词位置的索引。只需按术语查询..
试试这个,log
txt在哪里,是word_search
你要索引的词log
[i for i, item in enumerate(log) if item == word_search]
我知道你问这个问题已经有一段时间了,但既然你已经在使用 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 Lorem 1 ipsum 2 dolor 3 坐 4 amet 5 , 6 consectetur 7 adipiscing 8 elit 9.
希望能帮助到你 :)