Explication de la distance d'édition et de l'implémentation en Python

Description de l'algorithme

La distance d'édition (distance de Lebenstein) est le nombre d'étapes nécessaires pour changer une chaîne de caractères en une autre. Cette étape est ・ Supprimer un caractère ・ Insérez un seul caractère ・ Remplacez un personnage par un autre Fait partie de

Comprenons d'abord l'algorithme de distance de Levenstein

Par exemple, dans le cas des chaînes "cafe" et "coffee" cafe→caffe→coffe→coffee Quelque chose comme ça

Faisons d'abord une table

c o f f e e
c
a
f
e

Entrons la valeur initiale Lorsque la chaîne cible est vide (la chaîne cible sera augmentée petit à petit), bien sûr, la distance de Levenstein est égale à la longueur de la chaîne. Alors

c o f f e e
0 1 2 3 4 5 6
c 1 *
a 2
f 3
e 4

L'algorithme de production commence à partir de "*****" dans (3,3) Toutes les cellules restantes seront au ** minimum ** en dessous de cela • Si le caractère supérieur de la colonne de cette cellule est le même que le caractère le plus à gauche de la ligne de cette cellule, la valeur de cette cellule est égale à ** la valeur de la cellule supérieure gauche **, donc Sinon ** la valeur dans la cellule supérieure gauche + 1 ** ・ Valeur dans la cellule de gauche +1 ・ Valeur de la cellule supérieure +1

Ici, dans le cas de (3,3) ・ Puisque le caractère supérieur "c" dans la colonne en (3,3) et le caractère le plus à gauche "c" dans la ligne sont identiques, il devient 0. ・ Parce qu'il devient (2,3), il devient 1. ・ Parce qu'il devient (3,2), il devient 1. (3,3) devient 0 car il prend le minimum des trois valeurs ci-dessus

c o f f e e
0 1 2 3 4 5 6
c 1 0
a 2
f 3
e 4

Remplissez toutes les cellules comme ça

c o f f e e
0 1 2 3 4 5 6
c 1 0 1 2 3 4 5
a 2 1 1 2 3 4 5
f 3 2 2 1 2 3 4
e 4 3 3 2 2 2 3

Obtenez cette table. La valeur en bas à droite de ce tableau est la distance de Levenstein.

Implémenté par Python 3.5.2

Si vous mettez cet algorithme dans un programme

levenshtein.py


class Levenshtein:
#Lancez le tableau ici et entrez la valeur initiale
    def initArray(self,str1,str2):
        distance = []
        for i in range(len(str1)+1):
            distance.append([0]*(len(str2)+1))
            distance[i][0] = i
        for j in range(len(str2)+1):
            distance[0][j] = j
        return distance
#Mettre une valeur dans une cellule
    def editDist(self,str1,str2,distance):
        dist = [0]*3
        for i in range(1,len(str1)+1):
            for j in range(1,len(str2)+1):
                dist[0] = distance[i-1][j-1] if str1[i-1]==str2[j-1] else distance[i-1][j-1]+1
                dist[1] = distance[i][j-1]+1
                dist[2] = distance[i-1][j]+1
                distance[i][j]=min(dist)
        return distance[i][j]

    def __init__(self,str1,str2):
        self.str1 = str1
        self.str2 = str2
        Levenshtein.distance = self.initArray(str1,str2)
        Levenshtein.dist = self.editDist(str1,str2,Levenshtein.distance)

if __name__ == '__main__':
    str1 = 'coffee'
    str2 = 'cafe'
    leven = Levenshtein(str1,str2)
    print(leven.dist)

Recommended Posts

Explication de la distance d'édition et de l'implémentation en Python
Explication et mise en œuvre de SocialFoceModel
Explication et mise en œuvre de PRML Chapitre 4
Explication et implémentation de l'algorithme ESIM
Algorithme de tri et implémentation en Python
Implémentation du jeu de vie en Python
Explication et mise en œuvre du perceptron simple
Implémentation du tri original en Python
Explication du CSV et exemple d'implémentation dans chaque langage de programmation
Module d'implémentation de file d'attente et Python "deque"
Explication et implémentation de l'algorithme Decomposable Attention
Projet Euler # 1 "Multiple de 3 et 5" en Python
Modifier les polices en Python
Explication et implémentation du protocole XMPP utilisé dans Slack, HipChat et IRC
Implémentation RNN en python
Implémentation ValueObject en Python
Implémentation de l'arbre TRIE avec Python et LOUDS
Implémentation du filtre à particules par Python et application au modèle d'espace d'états
Implémentation SVM en python
"Régression linéaire" et "Version probabiliste de la régression linéaire" en Python "Régression linéaire de Bayes"
Traitement pleine largeur et demi-largeur des données CSV en Python
Calcul de l'écart type et du coefficient de corrélation en Python
Fusion de la mise en œuvre du tri / analyse du montant du calcul et de l'expérimentation en Python
Python - Explication et résumé de l'utilisation des 24 meilleurs packages
Différence entre Ruby et Python en termes de variables
Symboles logiques appris dans le mariage (et exemples d'implémentation en Python)
[python] Calcul des mois et des années de différence de date / heure
Implémentation d'estimation bayésienne de variante du modèle de sujet en python
Un mémorandum sur la mise en œuvre des recommandations en Python
Explication sur l'erreur NoReverseMatch dans "python django super introduction"
Exemple d'obtention du nom du module et du nom de la classe en Python
Récapitulatif du traitement de la date en Python (datetime et dateutil)
Pile et file d'attente en Python
Implémentation Python du filtre à particules
Implémentation de réseau neuronal en python
Unittest et CI en Python
Description et implémentation de Maxout (Python)
Installation source et installation de Python
[Pour les débutants] Résumé de l'entrée standard en Python (avec explication)
Ordre de référence des variables de classe et des variables d'instance dans "self. Variables de classe" en Python
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
[Avec une explication simple] Implémentation Scratch d'une machine Boltsman profonde avec Python ②
[Avec une explication simple] Implémentation Scratch d'une machine Boltzmann profonde avec Python ①
[Python] Forces et faiblesses de DataFrame en termes de temps requis
[Astuces] Problèmes et solutions dans le développement de python + kivy
Construction d'environnement de python et opencv
Manipulation des pixels d'image en Python
L'histoire de Python et l'histoire de NaN
Paquets qui gèrent le MIDI avec Python midi et pretty_midi
Introduction et mise en œuvre de JoCoR-Loss (CVPR2020)
Différence entre list () et [] en Python
Différence entre == et est en python
Installer SciPy et matplotlib (Python)
Afficher les photos en Python et html
Introduction et mise en œuvre de la fonction d'activation
Implémentation de l'estimation des paramètres HMM en python
Implémentation Python du filtre à particules auto-organisateur
Implémentation de distribution normale mixte en python