对于在文本内搜索单词的快速python软件包,是否推荐使用任何建议?

时间:2018-08-07 22:20:02

标签: python text nlp packages words

我正在寻找一个Python软件包,该软件包将获取单词列表,而不是根据提供给它的单词列表在文本中搜索单词。

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

因此,我建立了一个类,该类从文件code: keyword_processor.add_keyword(word)中添加了关键字

而不是使用code: keyword_processor.extract_keywords(text)

在文本中搜索关键字

但是我也得到了部分单词,例如,我有一个“关键字”(希伯来语):גיל

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

单词“בגילה”作为发现的关键字出现,因为它的内部包含גיל,所以对我不利...

这里的任何人都有使用其他Python软件包的经验,这些软件包正在执行我在此处描述的操作,并且不会返回“部分关键字”? 也许和flashtext一样快,从我参加的测试中来看,速度非常快。

1 个答案:

答案 0 :(得分:2)

为什么不使用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)

将返回['se', 'fes', 'se'],即 words中找到的s中的单词,顺序是找到它们的顺序,包括重复项。

正则表达式的含义:

  • 一个单词要么以字符串开头,要么以空格开头:(?:^|\s+)
  • 一个单词要么以字符串结尾,要么后跟一个空格:(?:$|\s+)
  • 我们不在乎单词(?:...)
  • 之前或之后的含义
  • |为“或”:我们需要以下单词之一:'|'.join(words)
  • 我们要捕获找到的单词:({})

随时在单词之前或之后添加更多可接受的字符(我想到的是,.,...)。


或者,如果您正在寻找文本中的单词,那么查找者将要返回的是您已经拥有的单词。如果这样做的目的是检查单词是否在文本中,则可以使用in

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

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