2017-08-26 3 views
0

Eine BK Trees (Burkhard-Keller Trees) ist mit Fuzzy-String-Suchen verbunden (z. B. Rechtschreibprüfung, Wortempfehlungen). Und alle Suchalgorithmen von BK Trees sind identisch mit explained here. Ziel ist es, beispielsweise "seek" and "peek" if I search for "aeek" zurückzugeben.BK - Baumsuche Alle

Nun, meine Frage ist, versuche ich diese Fuzzy String sucht Algorithmus zu verwenden für alle ähnliche Elemente aus dem gegeben Wörterbuch zu suchen. Zum Beispiel, mit einem Wort "suchen", möchte ich alle ähnliche Wörter finden, wie "peek", "Geek", "Sitz", etc. innerhalb des Wörterbuchs. Allerdings habe ich festgestellt, dass die BK Trees searching algorithm that everyone uses nicht dafür ausgelegt ist.

Werfen Sie einen Blick auf meine sample test result here. Ich fand das the dictionary will be different if the feeding words order is different, thus the search result can be different as well.

Was ich will ist, mit meiner oben , gegeben eines der vier Python Bücher, eine SearchAll Funktion wird immer die vier Python Bücher zurück, trotz der Reihenfolge, die das Wörterbuch gebaut wird, oder die Reihenfolge der Suche erfolgt.

Ich habe jedoch viele Möglichkeiten versucht, aber alle fehlgeschlagen (z. B. this is one of them). Jetzt werfe ich meine Hände hoch und bitte um Hilfe. Ein Pseudo-Code oder ein generischer Algorithmus würde dies tun. Danke.

+0

@templatetypedef? – xpt

+0

@Duck, könntest du pls helfen? – xpt

Antwort

1

Sie haben einen ganzzahligen Überlauf auf den Leitungen 77 und 106 von bktree.go:

k: = d - r

Da die Typen von d und ruint8 sind, die Art der k ist auch uint8, also wenn d < r, k endet größer als d + r, und der folgende Zyklus wird nicht ausgeführt.

Sie können es wie folgt beheben:

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

Eigentlich wird das nicht passieren, wie in den Zeilen https://github.com/go-dedup/simhash/blob/master/sho/bktree.go#L73-L74, dh, wenn in den Zeilen 77 und 106, ' d 'wäre '> = r'. Aber danke, dass du dir die Zeit genommen hast! – xpt

+0

Ich ging es mit dem Debugger durch, und es passiert in der Zeile [106] (https://github.com/go-dedup/simhash/blob/master/sho/bktree.go#L106). Darüber hinaus geben 'ExampleSearch_filesA',' ExampleSearch_filesB', 'ExampleSearch_filesS' nach dem Fix alle das gleiche Ergebnis aus. – Anton

+0

Oh, da! Danke vielmals! welchen Debugger benutzt du BTW? – xpt

Verwandte Themen