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 :
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!