gpt4 book ai didi

python - 在 Python 中使用 Whoosh 进行模糊字符串搜索

转载 作者:太空狗 更新时间:2023-10-29 18:06:51 32 4
gpt4 key购买 nike

我在 MongoDB 中建立了一个大型银行数据库。我可以很容易地获取这些信息并快速创建索引。例如,我希望能够匹配银行名称“Eagle Bank & Trust Co of Missouri”和“Eagle Bank and Trust Company of Missouri”。以下代码适用于简单的模糊此类,但无法实现上述匹配:

from whoosh.index import create_in
from whoosh.fields import *

schema = Schema(name=TEXT(stored=True))
ix = create_in("indexdir", schema)
writer = ix.writer()

test_items = [u"Eagle Bank and Trust Company of Missouri"]

writer.add_document(name=item)
writer.commit()

from whoosh.qparser import QueryParser
from whoosh.query import FuzzyTerm

with ix.searcher() as s:
qp = QueryParser("name", schema=ix.schema, termclass=FuzzyTerm)
q = qp.parse(u"Eagle Bank & Trust Co of Missouri")
results = s.search(q)
print results

给我:

<Top 0 Results for And([FuzzyTerm('name', u'eagle', boost=1.000000, minsimilarity=0.500000, prefixlength=1), FuzzyTerm('name', u'bank', boost=1.000000, minsimilarity=0.500000, prefixlength=1), FuzzyTerm('name', u'trust', boost=1.000000, minsimilarity=0.500000, prefixlength=1), FuzzyTerm('name', u'co', boost=1.000000, minsimilarity=0.500000, prefixlength=1), FuzzyTerm('name', u'missouri', boost=1.000000, minsimilarity=0.500000, prefixlength=1)]) runtime=0.00166392326355>

能否通过 Whoosh 实现我想要的效果?如果没有,我还有哪些其他基于 Python 的解决方案?

最佳答案

您可以在 Whoosh 中使用模糊搜索将 CoCompany 匹配,但您不应该这样做,因为CoCompany 之间的区别很大。 CoCompany 相似,BeBeast 相似,nyCompany,你可以想象搜索结果会有多糟糕,有多大。

但是,如果您想将 CompancompaniCompaneeCompany 匹配,您可以通过使用 FuzzyTerm 的个性化类,默认 maxdist 等于或大于 2:

maxdist – The maximum edit distance from the given text.

class MyFuzzyTerm(FuzzyTerm):
def __init__(self, fieldname, text, boost=1.0, maxdist=2, prefixlength=1, constantscore=True):
super(MyFuzzyTerm, self).__init__(fieldname, text, boost, maxdist, prefixlength, constantscore)

然后:

 qp = QueryParser("name", schema=ix.schema, termclass=MyFuzzyTerm)

您可以通过将 maxdist 设置为 5 来将 CoCompany 匹配,但正如我所说,这会导致错误的搜索结果。我建议保持 maxdist13

如果您正在寻找匹配的单词语言变体,您最好使用 whoosh.query.Variations .

注意:较旧的 Whoosh 版本具有 minsimilarity 而不是 maxdist

关于python - 在 Python 中使用 Whoosh 进行模糊字符串搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6709830/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com