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

Python:查找文本中的单词列表并返回其索引,python,text,word,nltk,Python,Text,Word,Nltk,我必须处理一个纯文本文档,查找单词列表,并在找到的每个单词周围返回一个文本窗口。我正在使用 我在Stack Overflow上找到了帖子,他们使用正则表达式查找单词,但没有得到索引,只是打印它们。我不认为使用RE是正确的,因为我必须找到特定的词。这就是您要寻找的: 您可以使用str.index或str.find: 文件内容: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi sollicitudin tortor e

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


我在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\u 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勒姆 1同侧 2多洛 3坐 4艾米特 5. 6圣斗士 7.告别 8精英 九,


希望有帮助:)

你应该使用正则表达式..>我不认为使用RE是正确的,因为我必须找到特定的单词。您不必使用正则表达式查找特定的单词。。。。通常,在解析文本时,您可以使用正则表达式查找任何内容。你应该坚持使用正则表达式。另外,请给出一个你试图编写的实际代码的例子,或者你想在你搜索的文本中找到的东西。你试过什么?对不起,不清楚,这是我的第一条信息。我用str.find找到了一个单词,然后轻松地打开了窗口。但我有很多话可以重复。所以,一旦我找到了一个单词的第一个匹配项,我如何在不修改文本的情况下找到第二个匹配项?你可以将它作为一个组捕获,设置一个变量,然后搜索它。如何找到vitae的第二个匹配项?谢谢。我将研究这种可能性,但我会尽量在课文中找到几个词。我可能解释得不好,我可以像你一样编一本字典,但要注意文本中某些单词的出现,而不是文本中的所有单词。