通过这里的模糊匹配,我的意思是在查询中找到与单词列表中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)。
答案 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)
在这种情况下,您应该忽略停止过滤,或者在计算查询长度之前应该从查询中过滤掉停用词。