human
J'ai besoin d'un moyen de comparer plusieurs chaînes de caractères à une chaîne de test et de renvoyer la chaîne qui lui ressemble le plus :
```CHAÎNE DE TEST : LE RENARD BRUN A SAUTÉ PAR-DESSUS LA VACHE ROUGE
CHOIX A : LA VACHE ROUGE A SAUTÉ PAR-DESSUS LE POULET VERT
CHOIX B : LA VACHE ROUGE A SAUTÉ PAR-DESSUS LA VACHE ROUGE
CHOIX C : LE RENARD ROUGE A SAUTÉ PAR-DESSUS LA VACHE BRUNE
```
(Si j'ai bien fait cela) La chaîne la plus proche de la "CHAÎNE DE TEST" devrait être "CHOIX C". Quelle est la manière la plus simple de faire cela ?
Je prévois de l'implémenter dans plusieurs langages, y compris VB.net, Lua et JavaScript. À ce stade, un pseudo-code est acceptable. Si vous pouvez fournir un exemple pour un langage spécifique, cela est également apprécié
gpt
La correspondance floue de chaînes est le processus d'estimation de la similarité de deux mots ou phrases de manière similaire à celle d'un humain. Dans de nombreux cas, cela implique la mise en œuvre de l'algorithme de distance de Levenshtein, qui détermine le nombre de modifications nécessaires pour transformer une chaîne ou une phrase en une autre. L'implémentation suivante en VBA implique une comparaison pondérée de la longueur des deux phrases, du nombre de modifications entre chaque phrase et de la présence de chaque mot dans l'entrée cible.

```
'Calcul de la distance de Levenshtein entre deux chaînes (le nombre d'insertions,
'suppressions et substitutions nécessaires pour transformer la première chaîne en la seconde)
Public Function LevenshteinDistance(ByRef S1 As String, ByVal S2 As String) As Long
    Dim L1 As Long, L2 As Long, D() As Long 'Longueur des chaînes d'entrée et matrice de distance
    Dim i As Long, j As Long, cost As Long 'compteurs de boucle et coût de substitution pour la lettre actuelle
    Dim cI As Long, cD As Long, cS As Long 'coût de la prochaine insertion, suppression et substitution
    L1 = Len(S1): L2 = Len(S2)
    ReDim D(0 To L1, 0 To L2)
    For i = 0 To L1: D(i, 0) = i: Next i
    For j = 0 To L2: D(0, j) = j: Next j

    For j = 1 To L2
        For i = 1 To L1
            cost = Abs(StrComp(Mid$(S1, i, 1), Mid$(S2, j, 1), vbTextCompare))
            cI = D(i - 1, j) + 1
            cD = D(i, j - 1) + 1
            cS = D(i - 1, j - 1) + cost
            If cI <= cD Then 'Insertion ou substitution
                If cI <= cS Then D(i, j) = cI Else D(i, j) = cS
            Else 'Suppression ou substitution
                If cD <= cS Then D(i, j) = cD Else D(i, j) = cS
            End If
        Next i
    Next j
    LevenshteinDistance = D(L1, L2)
End Function
```

Nous pouvons créer deux métriques distinctes pour évaluer la similarité de deux chaînes. L'une est "valuePhrase" et l'autre est "valueWords". valuePhrase correspond simplement à la distance de Levenshtein entre les deux phrases, et valueWords divise la chaîne en mots individuels, en utilisant des délimiteurs tels que les espaces, les tirets et tout autre caractère souhaité, et compare chaque mot à chaque autre mot, en additionnant la plus courte distance de Levenshtein reliant deux mots. Essentiellement, cela mesure si l'information dans une 'phrase' est réellement contenue dans une autre, tout comme une permutation mot par mot.

valueWords, valuePhrase et la fonction Split :
```
Public Function valuePhrase#(ByRef S1$, ByRef S2$)
    valuePhrase = Levenshtei