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

2024-06-16 11:21:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

因此,我构建了一个类,该类添加了来自文件code: keyword_processor.add_keyword(word)的关键字

然后用code: keyword_processor.extract_keywords(text)在文本中搜索关键字

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

还有一句话:האשככי𤩌𤩌פאק

单词“בכי㪡ה”作为一个found关键字出现,因为其中包含כי㪡,所以对我不好

这里是否有人有过使用不同Python包的经验,该包正在执行我在这里描述的操作,并且不会返回“部分关键字”? 也许和flashtext一样快,我参加的测试速度非常快


Tags: 文件io文本http列表readthedocscode关键字
1条回答
网友
1楼 · 发布于 2024-06-16 11:21:37

为什么不使用^{}

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'],即s中找到的words中的单词,按照找到它们的顺序,包括重复的单词

正则表达式含义:

  • 单词以字符串开头或前面有空格:(?:^|\s+)
  • 一个单词要么以字符串结尾,要么后跟一个空格:(?:$|\s+)
  • 我们不关心单词前面或后面是什么:(?:...)
  • |是“或”:我们想要一个单词:'|'.join(words)
  • 我们要捕获找到的单词:({})

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


或者,如果你在文本中寻找单词,你的搜索者将返回你已经拥有的单词。如果您这样做是为了检查文本中是否有该单词,则可以使用in

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

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

相关问题 更多 >