有效地在文本正文中搜索大量关键字(1000个)



我正在研究一个项目,在这个项目中,我需要搜索短到中文本(最多100个会话)的存在1000个不同的关键字(股票市场符号)。我正在使用Python。

现在,我知道如果我用一个简单的For循环来处理这个问题,这可能会花费很长时间。

做这件事最有效的方法是什么?这里是否有一个特定的python库是最有利的?

编辑:关于我的用例的更多细节:

  • 我正在搜索的文本主体是不同长度的Reddit帖子(假设上限长度为2000个字符)。
  • 我将搜索大约100 - 200个不同的帖子每届。
  • 我需要检查每个帖子中是否存在1个或多个股票符号。有1000的股票符号搜索,他们是在不同的格式表示,这样我需要检查部分匹配(即。$GOOG和$GOOG在正文中都匹配)。
  • 我需要列出在给定帖子中发现的符号。

我希望这能提供一些澄清。

谢谢。基于答案的

发帖方案

这是我最终用来将股票符号编译成正则表达式的基本代码。请注意,这些符号存储在一个名为"self.symbols"的Python字典中。-其中每个密钥都是一个交换,并且包含一个符号列表作为它的值。

#Return the dict of stock symbols
def compileSymbols(self):
#Will hold compiled symbols
dict = {}
#For each exchange in dict, join list of symbols and convert to compiled regex
for key in self.symbols.keys():
joinedStr = "|".join(self.symbols[key])
dict[key] = re.compile(r"{0}".format(joinedStr))

#Save compiled symbols
self.symbols = dict

…然后,我使用下面的代码循环遍历post文本并搜索符号—将结果转换为集合并返回到列表以删除重复项:

#Check posts for matching symbols
def searchPostsForSymbols(self, posts, symbols):
for post in posts:

#Used to store matching symbols
matches = []

for exchng in symbols.keys():
result = symbols[exchng].findall(post, re.M)
result = list(set(result))
if len(result) > 0:
matches.append((exchng, result))

花了几秒钟搜索1000个符号-令人惊讶的好性能。谢谢Malo的回答!

下面是一个使用regexp可以得到的示例。如果它对你的情况有用,请试着计时:

import re
text = """
This is text with
ThiGOOGs is text with
This is tMICRext with
This is text with
This isGOOG text with
This is text with
"""
c = re.compile(r"STOCK|GOOG|MICR")
r = c.findall(text, re.M)
print(r)

输出是:

['GOOG', 'MICR', 'GOOG']

相关内容

  • 没有找到相关文章

最新更新