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
Libérer: 2024-12-02 20:39:13
original
401 Les gens l'ont consulté

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";
Copier après la connexion

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))
Copier après la connexion

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
...
Copier après la connexion

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
...
Copier après la connexion

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal