繁体   English   中英

Python:在文本中查找单词列表并返回其索引

[英]Python: Find a list of words in a text and return its index

我必须处理纯文本文档,查找单词列表,并在找到的每个单词周围返回一个文本窗口。 我正在使用NLTK

我在Stack Overflow上找到了帖子,他们在其中使用正则表达式来查找单词,但没有获取它们的索引,而只是打印它们。 我不认为使用RE是对的,因为我必须找到具体的单词。

这就是你要找的东西:

  • 您可以使用str.index或str.find:

文件内容:

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。

希望能帮助到你 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM