对在文本中搜索单词的快速 python 包有什么建议吗?

Any recommendations for fast python package that search a word inside a text?

我正在寻找一个 Python 包,它将获取单词列表,然后根据给定的单词列表在文本中搜索单词。

我尝试使用 FlashText (http://flashtext.readthedocs.io/en/latest/)

所以我构建了一个 class 从文件 code: keyword_processor.add_keyword(word)

添加关键字

然后使用 code: keyword_processor.extract_keywords(text)

在文本中搜索关键字

但我也得到部分单词,例如我有一个 "keyword"(希伯来语):גיל

还有一个句子:האישה בגילה הלכה לפארק

单词“בגילה”作为找到的关键字出现,因为它包含 גיל 在里面,所以它对我不利...

这里有没有人有使用不同的 Python 软件包的经验,该软件包正在执行我在此处描述的操作,但不会 return "partial keywords"? 也许和 flashtext 一样快,从我进行的测试来看,它非常快。

为什么不使用 re

import re

s = 'asef se fese fes fse se'
words = ['se', 'fes', 'foo']
words_re = '(?:^|\s+)({})(?:$|\s+)'.format('|'.join(words))
re.findall(words_re, s)

将 return ['se', 'fes', 'se'] 来自 words 的单词在 s 中找到的顺序找到并包括重复项。

正则表达式含义:

  • 字符串的开头或前面有一个空格:(?:^|\s+)
  • 一个词要么结束字符串,要么后跟一个空格:(?:$|\s+)
  • 我们不关心单词之前或之后的内容:(?:...)
  • | 是 "OR":我们想要其中一个词:'|'.join(words)
  • 我们要捕获找到的单词:({})

欢迎在单词前后添加更多可接受的字符(我正在考虑 ,.、...)。


或者,如果您要在文本中查找单词,那么您的查找器将 return 提供给您的是您已经拥有的单词。如果你这样做的原因是检查文本中是否有这个词,你可以使用 in:

text = '...' # your input text
words = ['foo', 'bar']

words_in_text = [word for word in words if word in text]