2012-05-31 8 views
7

Fondamentalmente sto solo cercando di trovare un modo per trovare la corrispondenza più vicina (non necessariamente esatto) di un StringJava: Qualcuno ha un metodo per trovare la migliore corrispondenza di stringa nell'array?

Per esempio, trovare "delicous" in {"pie", "delicious", "test"}

Questo è abbastanza ovvio, ma i valori nella la matrice potrebbe non essere sempre così distinta.

Potrebbe qualcuno, per favore, aiutarmi con un modo per raggiungere questo obiettivo.

risposta

17

Dipende da come si definisce "il più vicino", ma un modo comune è utilizzare un punteggio Levenshtein Distance. Apache Commons ha tale a method in StringUtils.

Da lì il metodo di ricerca diventa in sostanza: trova la stringa nella raccolta che ha la distanza più piccola di Levenshtein per un dato input.

+0

Grazie, funziona molto bene :) Se ho cioccolatino e cioccolata e io chiamo cioccolatini, sembra ancora torta, ma è ancora molto meglio di prima: p Grazie mille! –

+0

Il secondo link è rotto. Per favore aggiornare. (questo è probabilmente il link - https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#getLevenshteinDistance(java.lang.CharSequence,%20java.lang. CharSequence)) –

+0

@KazekageGaara grazie, fatto. –

2

Non c'è niente di integrato in Java per questo. Potresti provare una libreria di terze parti come SecondString o FREJ.

2

Un altro approccio che può essere utilizzato in combinazione con Levenshtein Distance sta prendendo per prima la rappresentazione fonetica delle parole. Un algoritmo per farlo è Metaphone.

Il user guide for Apache Commons Codec ha i dettagli di questo e alcuni altri codificatori.