Я сравниваю названия песен, используя латинский script (хотя и не всегда), моя цель - это алгоритм, который дает высокий балл, если два названия песен кажутся одинаковыми, и очень низкий балл, если они не имеют ничего общего.
Теперь мне уже пришлось написать код (Java), чтобы написать это с помощью Lucene и RAMDirectory - однако использование Lucene просто для сравнения двух строк слишком тяжело и, следовательно, слишком медленно. Я перешел к использованию https://github.com/nickmancol/simmetrics, у которого есть много хороших алгоритмов для сравнения двух строк:
BlockDistance
ChapmanLengthDeviation
ChapmanMatchingSoundex
ChapmanMeanLength
ChapmanOrderedNameCompoundSimilarity
CosineSimilarity
DiceSimilarity
EuclideanDistance
InterfaceStringMetric
JaccardSimilarity
Jaro
JaroWinkler
Levenshtein
MatchingCoefficient
MongeElkan
NeedlemanWunch
OverlapCoefficient
QGramsDistance
SmithWaterman
SmithWatermanGotoh
SmithWatermanGotohWindowedAffine
Soundex
но я не очень разбираюсь в этих алгоритмах и что будет хорошим выбором?
Я думаю, что Lucene использует CosineSimilarity в той или иной форме, так что это моя отправная точка, но я думаю, что может быть что-то лучше.
В частности, алгоритм должен работать на коротких строках и должен понимать концепцию слов, т.е. места должны обрабатываться специально. Хорошее совпадение латинского script является самым важным, но хорошее соответствие другим сценариям, таким как корейский и китайский, тоже актуально, но я ожидаю, что потребуется другой алгоритм из-за того, как они обрабатывают пробелы.