【问题标题】:Whoosh fuzzy matching of the queried word list查询词表的嗖嗖模糊匹配
【发布时间】:2015-01-10 04:43:15
【问题描述】:

这里的模糊匹配,我的意思是从查询的单词列表中找到有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)。

【问题讨论】:

    标签: python search indexing fuzzy-search whoosh


    【解决方案1】:

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

    但是,在[whoosh.query.Or][1] 的文档中,有一个minmatch 参数的引用:

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

    参数:

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

    • boost – 应用于所有匹配文档的分数的提升因子。

    • 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)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      相关资源
      最近更新 更多