0
Я использую алгоритм расстояния Левенштейна, чтобы найти похожие строки, и в настоящее время у меня есть оценка для принятия как 12 (потому что некоторые из моих строк имеют до 5 слов). Но я был удивлен, чтобы увидеть ниже двух строк получить балл 11, они кажутся очень разными для меня ..Почему минимальная оценка Левенштейна для этих двух строк?
def string1 = "Facial Fuel"
def string2 = "Calendula Toner"
println("Result is ${distance(string1,string2)}");
def distance(String str1, String str2) {
def dist = new int[str1.size() + 1][str2.size() + 1]
(0..str1.size()).each { dist[it][0] = it }
(0..str2.size()).each { dist[0][it] = it }
(1..str1.size()).each { i ->
(1..str2.size()).each { j ->
dist[i][j] = [dist[i - 1][j] + 1, dist[i][j - 1] + 1, dist[i - 1][j - 1] + ((str1[i - 1] == str2[j - 1]) ? 0 : 1)].min()
}
}
return dist[str1.size()][str2.size()]
}
Что-то не так с алгоритмом здесь или что правый счет?
Есть ли у вас какие-либо модульные тесты для известных расстояний? Если нет, это первое, что вам нужно сделать (с * любой * разработкой программного обеспечения). Для начала перейдите на страницу Википедии по этой теме и используйте их примеры: https://en.wikipedia.org/wiki/Levenshtein_distance –