在文本中匹配存储的关键词/短语

2 投票
6 回答
6521 浏览
提问于 2025-04-15 16:41

我有一个数据库表,里面大约有1000个关键词或短语(长度从一到四个单词不等)。这个表很少会改变,所以我可以把这些数据提取出来,变成更有用的东西(比如正则表达式?)。所以这里并不是在根据自然语言处理来寻找或猜测关键词。

接下来,我有一个用户在一个表单里输入一些文本,我想把这些文本和我的关键词短语进行匹配。

程序会把每个匹配到的短语的链接存储在文本旁边。

举个例子,如果我们把这个问题的文本和表里的一些短语进行匹配,可能会得到这样的结果:

{"inputting some text" : 1,
 "extract the data" : 1,
 "a phrase not here" : 0}

我有哪些选择?

  1. 编写一个正则表达式
  2. 某种SQL查询
  3. 还有其他方法吗?

考虑到有1000个可能的短语……

我正在使用Django/Python和MySQL。

编辑:我现在正在做的是:

>>> text_input = "This is something with first phrase in and third phrase" 
>>> regex = "first phrase|second phrase|third phrase" 
>>> p = re.compile(regex, re.I) 
>>> p.findall(text_input)
['first phrase','third phrase']

6 个回答

0

这里有一个稍微不同的版本,基于SilentGhost的回答。你可以逐行读取关键词,把它们存储在一个集合里。然后,对于用户输入中找到的每个关键词,就增加结果中的相应计数。

keyword_file = StringIO("""inputting some text
    extract the data
    a phrase not here""")

keywords = set(line.strip() for line in keyword_file)

results = defaultdict(int)
for phrase in keywords:
    if userinput.find(phrase) != -1:
        results[phrase] += 1

print results

希望这能给你指明方向。我不太确定这是不是你想要的,但这是我最好的猜测。

你在乎速度吗?你为什么不喜欢现在使用的方法?你现在的方法有效吗?

0

提醒一下... 你可能会对 Django在查询中对正则表达式的支持 感兴趣

这是链接中Django文档的一个例子:

Entry.objects.get(title__regex=r'^(An?|The) +')
2

这个工作的算法是 Aho-Corasick ... 你可以在下面的链接找到一个适用于Python的C扩展。

撰写回答