Alternatywa dla Levenshtein i Trigram
Powiedz, że w mojej bazie danych mam dwa następujące ciągi:
(1) 'Levi Watkins Learning Center - Alabama State University'
(2) 'ETH Library'
Moje oprogramowanie otrzymuje darmowe dane tekstowe ze źródła danych i powinno dopasować te darmowe teksty do wstępnie zdefiniowanych ciągów w bazie danych (tych powyżej).
Na przykład, jeśli oprogramowanie otrzyma ciąg'Alabama University'
, powinien rozpoznać, że jest to bardziej podobne do(1)
niż jest(2)
.
Początkowo myślałem o użyciu dobrze znanegometryka ciągu jak Levenshtein-Damerau lub Trigrams, ale prowadzi to do niechcianych wyników, jak widać tutaj:
http://fuzzy-string.com/Compare/Transform.aspx?r=ETH+Library&q=Alabama+University
Difference to (1): 37
Difference to (2): 14
(2)
wygrywa, ponieważ jest znacznie krótszy niż(1)
, nawet jeśli(1)
zawiera oba słowa (Alabama
iUniversity
) szukanego ciągu.
Próbowałem również z Trigrams (używając biblioteki JavaScript fuzzySet), ale otrzymałem podobne wyniki.
Czy istnieje metryka ciągu, która rozpoznałaby podobieństwo szukanego ciągu do(1)
?