飞快移动模糊匹配的查询单词列表

时间:2014-11-13 05:38:36

标签: python search indexing fuzzy-search whoosh

通过这里的模糊匹配,我的意思是在查询中找到与单词列表中60-70%的单词匹配的文档。

例如:

>> #(Query string as passed by user)
>> query =  i am searching for a document that is matched fuzzily with what i am giving here.
>> QueryParser("content", ix.schema).parse(query)

此查询将查找包含所有单词的文档,但我想查找包含至少60%或更多上述单词的所有文档。

由于我要处理的单词数量很大,我不希望以编程方式将这个单词集划分为不同的集合(对于ORing)。

1 个答案:

答案 0 :(得分:0)

这似乎是Not implemented yet在Whoosh中(已检查28/05/2015)。

但是,在[whoosh.query.Or][1]的文档中,提到了minmatch参数:

  

class whoosh.query.Or (子查询,boost = 1.0, minmatch = 0, scale = None)

     

<强>参数:

     
      
  • 子查询 - 要搜索的查询对象列表。

  •   
  • 提升 - 适用于所有匹配文档分数的提升因子。

  •   
  • minmatch - 尚未实施

  •   
  • scale - “协调奖金”的缩放系数。如果该值不是None,则它应该是大于0且小于1的浮点数。匹配文档的分数基于文档中匹配的查询项的数量而被提升/惩罚。这个数字可以扩大奖金的效果。

  •   

如果我们认为minmatch是最小匹配关键字,那么解决方案就像

from math import ceil
from whoosh.query import Or, Term
raw_query = "i am searching for a document that is matched fuzzily with what i am giving here."
min_ratio = ceil(len(raw_query) * 3.0 / 5.0)
query = Or([Term("content", word) for word in raw_query.split()], minmatch = min_ratio)

在这种情况下,您应该忽略停止过滤,或者在计算查询长度之前应该从查询中过滤掉停用词。