Sto cercando di calcolare le distanze di modifica di una stringa rispetto a una raccolta per trovare la corrispondenza più simile. Il mio problema attuale è che la collezione è molto grande (circa 25000 articoli), quindi ho dovuto restringere il set a stringhe di lunghezza simile ma che comunque lo restringerebbero solo a poche migliaia di stringhe e questo è ancora molto lento. Esiste una struttura dati che consente una rapida ricerca di stringhe simili o esiste un altro modo per risolvere questo problema?Confronto veloce di una stringa con una raccolta in Java
risposta
Suoni come un BK-tree potrebbero essere ciò che desideri. Ecco un articolo che li discute: http://blog.notdot.net/2007/4/Damn-Cool-Algorithms-Part-1-BK-Trees. A quick Google produce alcune implementazioni Java.
Se i tuoi criteri per "simile" definiscono un ordinamento totale, dovresti essere in grado di definire un comparatore e utilizzare un set di alberi per trovare le corrispondenze più vicine (ad esempio utilizzando i metodi del soffitto e del pavimento).
Gli strumenti automatici di Levenshtein consentono di selezionare rapidamente un insieme di parole da un dizionario di grandi dimensioni in modo tale che si trovino all'interno della distanza Levenshtein specificata da una determinata parola.
Vedere: Schulz K, Mihov S. (2002) Fast String Correction with Levenshtein-Automata.
- 1. Confronto stringa veloce con lista
- 2. Confronto di una stringa con la stringa vuota (Java)
- 3. Conversione di una raccolta Java di una classe in una raccolta di stringhe
- 4. java: restituire una raccolta
- 5. Una coda veloce in Java
- 6. Come creare una raccolta parallela Scala da una raccolta Java
- 7. Che cos'è una raccolta java?
- 8. sincronizzazione delle letture in una raccolta java
- 9. confronto del valore della variabile di sessione con una stringa
- 10. Suddivisione di una stringa Java con "."
- 11. Incollare una stringa Java multilinea in Eclipse
- 12. Confronto tipo più veloce?
- 13. Ottimizza l'utilizzo della memoria di una raccolta di stringhe in Java
- 14. Come si converte una stringa in una stringa letterale Java?
- 15. PHP Sostituisce l'ultima occorrenza di una stringa in una stringa?
- 16. Una funzione di hash veloce per la stringa in C#
- 17. Confronto di due raccolte in Java
- 18. Suddivisione di una stringa in Java
- 19. veloce confronto tra stringhe in C
- 20. Inversione di una stringa con ricorsione in Java
- 21. Come convertire una raccolta java di immagini in CvArr
- 22. In Java, come viene raccolta una matrice di oggetti?
- 23. Combina flusso di raccolte in una raccolta - Java 8
- 24. Come creare un'istanza di una raccolta in Java utilizzando Generics?
- 25. Linq per aggiornare una raccolta con valori di un'altra raccolta?
- 26. clojure: determinazione efficiente se una stringa inizia con qualsiasi prefisso in una raccolta
- 27. Qualcuno sa come salvare una stringa JSON in una raccolta DocumentDB?
- 28. Confronto di una variabile con se stesso
- 29. come sostituire "(virgolette doppie) in una stringa con \" in java
- 30. Java: confronto di stringhe e stringhe - Prestazioni
Come stai andando adesso? Puoi mostrare un po 'di codice? –
Definire "simile". –
Con parole simili intendo paragonare parole che sono errori di ortografia comuni come "exanple" e "example" o "weird" e "wierd". – Lezan