Heim >Datenbank >MySQL-Tutorial >Wie misst man die String-Ähnlichkeit in MySQL anhand überlappender Wörter und der Levenshtein-Distanz?

Wie misst man die String-Ähnlichkeit in MySQL anhand überlappender Wörter und der Levenshtein-Distanz?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-02 20:39:13392Durchsuche

How to Measure String Similarity in MySQL Using Overlapping Words and Levenshtein Distance?

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:

  • Welcome
  • to
  • stack
  • overflow

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn