在文本中匹配存储的关键词/短语
我有一个数据库表,里面大约有1000个关键词或短语(长度从一到四个单词不等)。这个表很少会改变,所以我可以把这些数据提取出来,变成更有用的东西(比如正则表达式?)。所以这里并不是在根据自然语言处理来寻找或猜测关键词。
接下来,我有一个用户在一个表单里输入一些文本,我想把这些文本和我的关键词短语进行匹配。
程序会把每个匹配到的短语的链接存储在文本旁边。
举个例子,如果我们把这个问题的文本和表里的一些短语进行匹配,可能会得到这样的结果:
{"inputting some text" : 1,
"extract the data" : 1,
"a phrase not here" : 0}
我有哪些选择?
- 编写一个正则表达式
- 某种SQL查询
- 还有其他方法吗?
考虑到有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扩展。