Zostałem poinformowany, że odległość Levenshteina jest symetryczna. Kiedy używałem narzędzia google diffMatchPatch, które wylicza odległość między Levenshtein, wyniki nie sugerują, że odległość Levenshteina jest symetryczna. tj. Levenshtein (x1, x2) nie jest równy Levenshtein (x2, x1). Czy Levenshtein nie jest symetryczny lub czy istnieje problem z tą konkretną implementacją? Dzięki.Levenshtein odległość symetryczna?
Odpowiedz
Po prostu patrząc na algorytmu podstawowego to na pewno jest symetryczny biorąc pod uwagę sam koszt operacji - liczba uzupełnień, usunięć i substytucji, aby uzyskać od słowie do słowa B jest taka sama, jak się od słowa B na słowo A.
Jeśli na którymkolwiek z działań występuje inny koszt, może to być różnica, np. jeśli dodatek ma koszt 2 i usunięcie koszt 1, aby uzyskać od Zombie
do Zombies
wyników w odległości 2, odwrotnie byłoby 1 - nie symetryczne.
Tak, odległość levenshtein to odległość we właściwym znaczeniu, czyli dist(a,b)==dist(b,a)
jest częścią definicji odległości. Jeśli funkcja nie ma tej właściwości, nie jest funkcją odległościową. Sugeruje to problem z tą implementacją.
Klasyczny algorytm Levenshteina jest symetryczny - to, co jest wprowadzaniem od x1 do x2, to usuwanie od x2 do x1.
Niestety, algorytm ma postać O (długość (x1) * długość (x2)). Po krótkim przyjrzeniu się bibliotece Google'a, wygląda na to, że próbuje heurystyki, aby upewnić się, że środowisko wykonawcze nie jest zbyt duże. Myślę, że leży Twoja rozbieżność.
należy wykonać kod, który jest implmented przez 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. Skutecznie określa "sortowanie" listy, np. Levenshtein odległość
- 2. Wyszukiwanie Levenshtein
- 3. Numpy 'smart' symetryczna matryca
- 4. Damerau-Levenshtein php
- 5. Ważony Damerau-Levenshtein w VBA
- 6. Symetryczna liczba całkowita do szyfrowania całkowitoliczkowego
- 7. Procentowa pozycja meczów za pomocą Levenshtein Dopasowywanie odległości
- 8. Odległość Levenshteina z powrotem śledzenia w PHP
- 9. Jak dodać funkcję levenshtein w mysql?
- 10. Czy można wyliczyć odległość edycyjną między wyrażeniem regularnym a łańcuchem?
- 11. odległość canberry - niespójne wyniki
- 12. Google maps odległość approximation
- 13. Tail Recursive Levenshteina Odległość
- 14. Odległość między adresami
- 15. UICollection Odległość między komórkami?
- 16. Odległość HAVERSINE w BigQuery?
- 17. Odległość przesunięta przez Accelerometer
- 18. CSS, tło-powtórzyć odległość
- 19. Modyfikowanie algorytmu Levenshtein Distance, aby nie obliczyć wszystkich odległości
- 20. "Odległość" między kolorami w PHP
- 21. odległość między 2 kodami pocztowymi
- 22. Android - odległość między dwoma miastami
- 23. ggplot Zwiększ odległość między boxplots
- 24. UITableView odległość przeciągania z UIRefreshControl
- 25. Odległość między RecyclerView zbyt daleko
- 26. Oblicz odległość do tagu RFID?
- 27. Fizyczna odległość między dwoma miejscami
- 28. Odległość od punktu do wielokąta
- 29. obliczeniowej geo odległość w elasticsearch
- 30. Android odległość między dwoma punktami