2017-08-26 14 views
0

BK Trees (Burkhard-Keller Trees)はファジー文字列検索(スペルチェック、単語推奨など)に関連付けられています。そして、すべてのBK木探索アルゴリズムはexplained hereと同じです。目的は、たとえば"seek" and "peek" if I search for "aeek"のように戻ります。BK - ツリー検索すべて

は今、私の質問は、私はため与え辞書からすべて関連商品を検索するには、このあいまい文字列検索アルゴリズムを使用しようとしているされています。たとえば、「シーク」という単語がある場合、のすべてのような類似の単語(辞書内の「peek」、「geek」、「seat」など)を検索したいと考えています。しかし、私はBK Trees searching algorithm that everyone usesがそのために設計されていないことが分かった。

私の見てくださいsample test result here。私はそれがthe dictionary will be different if the feeding words order is different, thus the search result can be different as wellを見つけました。

私が望むのは、上記のsample testを使用すると、SearchAll関数は、ディクショナリの作成順序や検索の順序にかかわらず、常に4つのPythonブックを返します。

しかし、私は多くの方法を試しましたが、すべて失敗しました(例:this is one of them)。今私は手を投げて助けを求めています。疑似コードまたはジェネリックアルゴリズムの記述が行います。どうも。

+0

@templatetypedef:

あなたはこのようにそれを修正することができますか? – xpt

+0

@Duck、plsを助けることができますか? – xpt

答えて

1

あなたがbktree.goのライン77106に整数オーバーフローを有する:

K:= D - R

drの種類のためには、のタイプuint8ありますkuint8であるため、d < r,kd + rより大きくなり、次のサイクルは実行されません。

k := int16(d) - int16(r) 
max_k := int16(d) + int16(r) 
if k < 1 { 
    k = 1 
} 
for ; k <= max_k; k++ { 
    ... 
} 
+0

実際には、行https://github.com/go-dedup/simhash/blob/master/sho/bktree.go#L73-L74のように、それは起こりません。つまり、77行目と106行目の ' d>は '> = r'となる。しかし、それを見て時間を取ってくれてありがとう! – xpt

+0

私はデバッガでそれを調べましたが、それは[106](https://github.com/go-dedup/simhash/blob/master/sho/bktree.go#L106)の行で発生します。さらに、修正後、 'ExampleSearch_filesA'、' ExampleSearch_filesB'、 'ExampleSearch_filesS'はすべて同じ結果を出力します。 – Anton

+0

ああ、そこに!どうもありがとう!あなたはどんなデバッガを使っていますか? – xpt

関連する問題