0
私はPython Whooshでファジー検索を実現したいと思いますが、私はそれを手に入れません。私はNGRAMWORDSの助けを借りてファジー検索を可能にしようとしました。それは結果がインデックスから取得されていない検索となると、残念ながらPythonによるあいまい検索Whoosh
writer.add_document(id=unicode(row["id"]), name=unicode(row["name"]), street=unicode(row["street"]), city=unicode(row["city"]))
:インデックスは、次に述べる以下のように満たされている
schema = Schema(id=ID(stored=True),
name=NGRAMWORDS(minsize=2, maxsize=4, stored=True, queryor=True),
street=NGRAMWORDS(minsize=2, maxsize=4, stored=True, queryor=True),
city=NGRAMWORDS(minsize=2, maxsize=4, stored=True, queryor=False))
:ここ
は私のスキーマですwith self.index.searcher() as searcher:
from whoosh.query import Term, Or, FuzzyTerm
from whoosh.analysis import NgramWordAnalyzer
ngramAnalyzer = NgramWordAnalyzer(minsize=2, maxsize=4)
tokens = [token.text for token in ngramAnalyzer(unicode(name))]
fetig = list()
for t in tokens:
tt = FuzzyTerm("name", unicode(t))
fetig.append(tt)
myQuery = Or(fetig)
res = searcher.search(myQuery, limit=10)
"Ali"を検索するとヒットしません:
<Top 0 Results for Or([FuzzyTerm('name', u'al', boost=1.000000, maxdist=1, prefixlength=1), FuzzyTerm('name', u'ali', boost=1.000000, maxdist=1, prefixlength=1), FuzzyTerm('name', u'li', boost=1.000000, maxdist=1, prefixlength=1)]) runtime=0.000411987304688>