Sono stato informato che la distanza di Levenshtein è simmetrica. Quando ho usato lo strumento diffMatchPatch di google che calcola la distanza di Levenshtein tra le altre cose, i risultati non implicano che la distanza di Levenshtein sia simmetrica. cioè Levenshtein (x1, x2) non è uguale a Levenshtein (x2, x1). Levenshtein non è simmetrico o c'è un problema con quella particolare implementazione? Grazie.distanza simmetrica di Levenshtein?
risposta
solo guardando l'algoritmo di base è sicuramente simmetrica dato lo stesso costo per le operazioni - il numero di aggiunte, cancellazioni e sostituzioni di ottenere da una parola Una ad una parola B è lo stesso di ottenere dalla parola B alla parola A.
Se c'è un costo diverso su una qualsiasi delle operazioni, può esserci una differenza, ad es. se l'aggiunta ha un costo di 2 e la cancellazione di un costo di 1 per ottenere da Zombie
a Zombies
risultati in una distanza di 2, il contrario sarebbe 1 - non simmetrica.
Sì, la distanza di levenshtein è una distanza nel senso proprio, ovvero dist(a,b)==dist(b,a)
è una parte della definizione di distanza. Se una funzione non ha questa proprietà non è una funzione di distanza. Questo suggerisce un problema con questa implementazione.
Il classico algoritmo di Levenshtein è simmetrico: ciò che è un inserimento che va da x1 a x2 è una cancellazione che va da x2 a x1.
Sfortunatamente, l'algoritmo è O (lunghezza (x1) * lunghezza (x2)). Dopo un breve sguardo alla libreria di google, sembra che provi delle euristiche per assicurare che il runtime non sia troppo grande. Penso che ci sia la tua discrepanza.
si prega di seguire il codice che viene implmented da myselef
public class ReadTextFile {
static void readFile(String filepath){
CharSequence sequence1 = null;
CharSequence sequence2 = null;
int levenshteinDistance = 0;
String line1 = "";
String line2 = "";
int minLevenshteinDistance = -1;
try {
BufferedReader br = new BufferedReader(new FileReader(filepath));
String line = "";
while((line=br.readLine())!=null)
{
if(sequence1==null){
line = line.split(" ")[1];
sequence1 = line;
if((line=br.readLine())!=null){
line = line.split(" ")[1];
sequence2 = line;
}
}else{
sequence1 = sequence2;
line = line.split(" ")[1];
sequence2 = line;
}
if(null!=sequence1 && null!=sequence2){
levenshteinDistance = StringUtils.getLevenshteinDistance(sequence1,sequence2);
if(minLevenshteinDistance==-1){
minLevenshteinDistance = levenshteinDistance;
line1= sequence1.toString();
line2= sequence2.toString();
}else if(levenshteinDistance < minLevenshteinDistance){
minLevenshteinDistance = levenshteinDistance;
line1= sequence1.toString();
line2= sequence2.toString();
}
}
}
br.close();
System.out.println("line1 "+line1);
System.out.println("line2 "+line2);
System.out.println("minlevenshteinDistance "+minLevenshteinDistance);
}catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
- 1. Reverse Levenshtein distanza
- 2. distanza Levenshtein in T-SQL
- 3. Fast Levenshtein distanza in R?
- 4. Levenshtein distanza C# conteggio tipo di errore
- 5. La distanza di Levenshtein nell'espressione regolare
- 6. distanza Damerau-Levenshtein (Modifica distanza con trasposizione) c implementazione
- 7. Differenza tra distanza Jaro-Winkler e Levenshtein?
- 8. Alternativa alla distanza Levenshtein per prefissi/suffissi
- 9. Algoritmo di distanza di Levenshtein meglio di O (n * m)?
- 10. Calcolo di una distanza relativa di Levenshtein - ha senso?
- 11. Rango percentuale di corrispondenze usando Levenshtein Corrispondenza di distanza
- 12. Distanza di Levenshtein con tracciatura posteriore in PHP
- 13. Modifica distanza come Levenshtein tenendo conto della prossimità sulla tastiera
- 14. ricerca Levenshtein
- 15. Levenshtein DFA in .NET
- 16. Struttura dati per il recupero di stringhe vicine a distanza di Levenshtein
- 17. alternativa di levenshtein
- 18. Modifica dell'algoritmo della distanza di Levenshtein per non calcolare tutte le distanze
- 19. Determinare in modo efficiente "come ordinato" un elenco, ad es. Distanza di Levenshtein
- 20. Come aggiungere la funzione levenshtein in mysql?
- 21. SignalR con crittografia simmetrica
- 22. non compressione simmetrica java
- 23. Damerau-Levenshtein php
- 24. Levenshtein: MySQL + PHP
- 25. È possibile che SequenceMatcher in difflib di Python possa fornire un modo più efficiente per calcolare la distanza di Levenshtein?
- 26. Come normalizzare la distanza di Levenshtein per la massima lunghezza di allineamento piuttosto che per la lunghezza della stringa?
- 27. Come memorizzare una matrice simmetrica?
- 28. Codifica simmetrica/decodifica in .NET
- 29. Creazione di una matrice simmetrica in R
- 30. differenza simmetrica di due set in Java