如何在Python中匹配搜索字符串与内容
通常情况下,当我们进行搜索时,我们会有一个故事列表,输入一个搜索字符串,然后期待返回一个结果列表,这些结果中的故事与输入的搜索字符串匹配。
而我想做的正好相反。我想给出一组搜索字符串和一个故事,然后找出哪些搜索字符串与这个故事匹配。
这可以用正则表达式来实现,但我想使用更复杂的搜索查询,这些查询是由solr支持的。关于查询语法的详细信息可以在这里找到。注意:我不会使用加权。
基本上,我想要一些关于下面示例代码中doesitmatch函数的指引。
def doesitmatch(contents, searchstring):
"""
returns result of searching contents for searchstring (True or False)
"""
???????
???????
story = "big chunk of story 200 to 1000 words long"
searchstrings = ['sajal' , 'sajal AND "is a jerk"' , 'sajal kayan' , 'sajal AND (kayan OR bangkok OR Thailand OR ( webmaster AND python))' , 'bangkok']
matches = [[searchstr] for searchstr in searchstrings if doesitmatch(story, searchstr) ]
编辑:另外,我也想知道是否有任何模块可以将下面的lucene查询转换为正则表达式:
sajal AND (kayan OR bangkok OR Thailand OR ( webmaster AND python) OR "is a jerk")
6 个回答
0
可能速度慢,但方法简单:
你可以把故事和每个字符串一起发给搜索引擎查询。如果有返回结果,那就说明匹配上了。
如果没有返回结果,那你就需要自己实现搜索的语法。如果要用到像“标题:”这样的东西,那就会比较复杂。如果只是用你例子里的AND和OR,那就可以写一个递归函数,难度不大。
2
经过大量的搜索,我意识到我想做的其实是布尔搜索。
我找到了可以让正则表达式支持布尔搜索的代码:http://code.activestate.com/recipes/252526/
现在这个问题看起来解决了。