Heim >Datenbank >MySQL-Tutorial >Wie misst man die String-Ähnlichkeit in MySQL anhand überlappender Wörter und der Levenshtein-Distanz?
So berechnen Sie die String-Ähnlichkeit in MySQL
Um die Ähnlichkeit zwischen zwei Strings in MySQL zu berechnen, können wir String-Manipulationsfunktionen und mathematische Ausdrücke nutzen . Betrachten Sie das folgende Beispiel, in dem wir zwei Zeichenfolgen haben:
SET @a = "Welcome to Stack Overflow"; SET @b = "Hello to stack overflow";
Ähnlichkeitsberechnung unter Verwendung überlappender Wörter
Wir können die Anzahl der Wörter zählen, die in beiden Zeichenfolgen vorkommen, und diese verwenden das als Maß für die Ähnlichkeit. In diesem Fall überschneiden sich die folgenden Wörter:
Berechnung des Ähnlichkeitsindex
Der Ähnlichkeitsindex wird berechnet als folgt:
similarity = count(similar words between @a and @b) / (count(@a) + count(@b) - count(intersection))
Verwendung der Levenshtein-Funktion
MySQL unterstützt nativ keine Funktionen für String-Ähnlichkeit. Wir können jedoch eine benutzerdefinierte Funktion (UDF) namens Levenshtein verwenden, um den Levenshtein-Abstand zu berechnen, der die Anzahl der Bearbeitungen (Einfügungen, Löschungen oder Ersetzungen) misst, die erforderlich sind, um eine Zeichenfolge in eine andere umzuwandeln.
Erstellen der Levenshtein UDF
CREATE FUNCTION `levenshtein`(s1 text, s2 text) RETURNS int(11) DETERMINISTIC ...
Weitere Details dazu Levenshtein UDF, siehe bereitgestelltes Code-Snippet.
Berechnung des Ähnlichkeitsverhältnisses
Schließlich können wir das Ähnlichkeitsverhältnis berechnen, indem wir den Levenshtein-Abstand gegenüber der maximalen Länge normalisieren der beiden Zeichenfolgen:
CREATE FUNCTION `levenshtein_ratio`(s1 text, s2 text) RETURNS int(11) DETERMINISTIC ...
Zum Beispiel das Ähnlichkeitsverhältnis zwischen @a und @b unter Verwendung der Levenshtein-Verhältnisfunktion kann wie folgt berechnet werden:
SELECT levenshtein_ratio(@a, @b);
Dies gibt das Ähnlichkeitsverhältnis als Prozentwert zurück.
Das obige ist der detaillierte Inhalt vonWie misst man die String-Ähnlichkeit in MySQL anhand überlappender Wörter und der Levenshtein-Distanz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!