Maison >base de données >tutoriel mysql >Comment mesurer la similarité des chaînes dans MySQL à l'aide de mots qui se chevauchent et de la distance de Levenshtein ?

Comment mesurer la similarité des chaînes dans MySQL à l'aide de mots qui se chevauchent et de la distance de Levenshtein ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-02 20:39:13392parcourir

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

Comment calculer la similarité de chaînes dans MySQL

Pour calculer la similarité entre deux chaînes dans MySQL, nous pouvons exploiter les fonctions de manipulation de chaînes et les expressions mathématiques . Prenons l'exemple suivant où nous avons deux chaînes :

SET @a = "Welcome to Stack Overflow";
SET @b = "Hello to stack overflow";

Calcul de similarité à l'aide de mots qui se chevauchent

Nous pouvons compter le nombre de mots qui apparaissent dans les deux chaînes et utiliser cela comme une mesure de similarité. Dans ce cas, les mots suivants se chevauchent :

  • Bienvenue
  • à
  • stack
  • débordement

Calcul de l'indice de similarité

L'indice de similarité est calculé comme suit :

similarity = count(similar words between @a and @b) / (count(@a) + count(@b) - count(intersection))

Utilisation de la fonction Levenshtein

MySQL ne prend pas en charge nativement les fonctions de similarité de chaînes. Cependant, nous pouvons utiliser une fonction définie par l'utilisateur (UDF) appelée levenshtein pour calculer la distance de Levenshtein, qui mesure le nombre de modifications (insertions, suppressions ou substitutions) nécessaires pour transformer une chaîne en une autre.

Création de l'UDF Levenshtein

CREATE FUNCTION `levenshtein`(s1 text, s2 text) RETURNS int(11)
DETERMINISTIC
...

Pour plus de détails sur le Levenshtein UDF, veuillez vous référer à l'extrait de code fourni.

Calcul du rapport de similarité

Enfin, nous pouvons calculer le rapport de similarité en normalisant la distance de Levenshtein par rapport à la longueur maximale de les deux chaînes :

CREATE FUNCTION `levenshtein_ratio`(s1 text, s2 text) RETURNS int(11)
DETERMINISTIC
...

Par exemple, le rapport de similarité entre @a et @b en utilisant le La fonction de rapport de Levenshtein peut être calculée comme :

SELECT levenshtein_ratio(@a, @b);

Cela renverra le rapport de similarité sous forme de valeur en pourcentage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn