Es gibt viele Metriken zur Definition von Ähnlichkeit und Distanz zwischen Strings, wie oben erwähnt. Ich werde mein 5 Cent geben, indem ich ein Beispiel für Jaccard-Ähnlichkeit
mit Q-Grammen
und ein Beispiel mit Edit-Distanz
zeige.
Die Bibliotheken
from nltk.metrics.distance import jaccard_distance
from nltk.util import ngrams
from nltk.metrics.distance import edit_distance
Jaccard-Ähnlichkeit
1-jaccard_distance(set(ngrams('Apple', 2)), set(ngrams('Appel', 2)))
und wir erhalten:
0.33333333333333337
Und für Apple
und Mango
1-jaccard_distance(set(ngrams('Apple', 2)), set(ngrams('Mango', 2)))
und wir erhalten:
0.0
Edit-Distanz
edit_distance('Apple', 'Appel')
und wir erhalten:
2
Und schließlich,
edit_distance('Apple', 'Mango')
und wir erhalten:
5
Kosinus-Ähnlichkeit auf Q-Grammen (q=2)
Eine weitere Lösung besteht darin, mit der textdistance
-Bibliothek zu arbeiten. Ich werde ein Beispiel für Kosinus-Ähnlichkeit
geben
import textdistance
1-textdistance.Cosine(qval=2).distance('Apple', 'Appel')
und wir erhalten:
0.5