2011-04-17 8 views
6

Sto cercando di utilizzare i vicini più vicini a k ​​per il problema di similarità delle stringhe, ad esempio una stringa e una knowledge base, voglio produrre stringhe k che sono simili alla mia stringa data. Ci sono tutorial che spiegano come utilizzare kd-trees per eseguire in modo efficiente questa ricerca di stringhe vicine al vicino più vicino? La lunghezza della stringa non supererà più di 20 caratteri.Come utilizzare gli alberi kd per determinare la somiglianza della stringa?

+0

Qual è il tuo parametro di somiglianza tra 2 stringhe? [scipy.spatial.cKDtree] (http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.cKDTree.html) è veloce e solido, buono per 20d, ma solo metriche Lp. – denis

risposta

7

Probabilmente uno dei post più interessanti del blog che avevo letto circa un anno fa: Levenstein Automata. Dai un'occhiata a quell'articolo. Fornisce non solo una descrizione dell'algoritmo ma anche un codice da seguire. Tecnicamente, non è un albero di kd ma è abbastanza correlato agli algoritmi di correzione delle stringhe e di dizionario che si potrebbero incontrare/utilizzare nel mondo reale.

Ha anche un altro post sul blog su BK-trees che sono molto meglio per la corrispondenza fuzzy per stringhe e lookup di stringhe dove ci sono i mispellings. Ecco un'altra risorsa contenente il codice sorgente per un BK-tree (questo non riesco a verificare l'accuratezza o l'implementazione corretta.)

+0

+1 per trasduttori Levenshtein. –

+0

l'automa di Levenshtein è impressionante, tuttavia, dopo averlo implementato, posso solo dire che la versione precalcolata esplode rapidamente (in termini di nodi) quando la distanza cresce. In pratica, è incredibilmente veloce per cercare in un Trie, ma l'automa inizia a diventare veramente grande per una distanza tra 4 e l'alto. –

+0

@Matthieu M. cosa consiglieresti invece? – wheaties

Problemi correlati