我正在寻找一个Python软件包,该软件包将获取单词列表,而不是根据提供给它的单词列表在文本中搜索单词。
我尝试使用FlashText(http://flashtext.readthedocs.io/en/latest/)
因此,我建立了一个类,该类从文件code: keyword_processor.add_keyword(word)
中添加了关键字
而不是使用code: keyword_processor.extract_keywords(text)
但是我也得到了部分单词,例如,我有一个“关键字”(希伯来语):גיל
还有一个句子:האישהבגילההלכהלפארק
单词“בגילה”作为发现的关键字出现,因为它的内部包含גיל,所以对我不利...
这里的任何人都有使用其他Python软件包的经验,这些软件包正在执行我在此处描述的操作,并且不会返回“部分关键字”? 也许和flashtext一样快,从我参加的测试中来看,速度非常快。
答案 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]