J'ai essayé de calculer la "distance de Lebenstein" en utilisant Python

Quelle est la distance de Levenstein?

** La distance de Levenshtein ** indique la différence entre les deux chaînes. Aussi connu sous le nom de distance d'édition. Un seul caractère ** Insérer / Supprimer / Remplacer ** définit le nombre minimum d'étapes requises pour transformer une chaîne en une autre. Référence: [Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3 % 83% A5% E3% 82% BF% E3% 82% A4% E3% 83% B3% E8% B7% 9D% E9% 9B% A2)

Préparation

L'environnement utilise Google Colaboratory. La version Python est ci-dessous.

import platform
print("python " + platform.python_version())
# python 3.6.9

De plus, il est nécessaire d'installer la bibliothèque pour calculer la distance de Levenstein à l'avance.

pip install python-Levenshtein

Calculons la distance de Levenstein

Maintenant écrivons le code. Tout d'abord, importez la bibliothèque pour calculer la distance de Levenstein.

import Levenshtein

À titre d'essai, calculons la distance de Levenstein entre «Rievenstein» et «Levenshtein».

#Calculer la distance de Levenstein
Levenshtein.distance('Rievenstein', 'Levenshtein')
# 3

Le résultat était de 3. c'est,

C'est parce que j'ai effectué l'opération trois fois.

Vous pouvez vérifier le type d'opération que vous avez effectué ci-dessous.

Levenshtein.editops('Rievenstein', 'Levenshtein')
# [('delete', 0, 0), ('replace', 1, 0), ('insert', 7, 6)]

Le contenu affiché ici est (Opération effectuée, quel caractère numérique dans la première chaîne, quel numéro dans la deuxième chaîne) est. En d'autres termes

  • Suppression de la lettre 0 (R) de Rievenstein
  • Remplacement de la première lettre (i) de Rievenstein par la 0ème lettre (L) de Levenshtein --Insérez la 6e lettre (h) de Levenshtein à la position de la 7e lettre (t) de Rievenstein

Cela signifie que.

Vous pouvez également calculer la similitude de votre similitude, et non le nombre de fois où vous avez effectué l'opération.

Levenshtein.ratio('Rievenstein', 'Levenshtein')
# 0.8181818181818182

S'il y a plusieurs chaînes, il est également possible d'extraire la chaîne qui est la valeur centrale des chaînes.

Levenshtein.median(['Rievenstein',
                    'Levenshtein',
                    'Revenshtein',
                    'Lievenstein',
                    'Levenshtain',
                    'Levennshtein'])
# 'Levenshtein'

Autre distance d'édition

Distance de fredonnement

La distance de Hamming est le nombre de caractères différents aux positions correspondantes dans deux chaînes de ** nombre égal de caractères **. Référence: [Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%9F%E3%83%B3%E3%82%B0%E8%B7%9D%E9 % 9B% A2)

Cela peut également être calculé en utilisant la même bibliothèque.

Levenshtein.hamming('Rievenstein', 'Levenshtein')
# 7

La distance de bourdonnement compare les chaînes Rievenstein et Levenshtein uniquement aux caractères du même emplacement. Ce sera comme suit.

  • ** R ** ievenstein et ** L ** même shtein → différent --R i </ strong> evenstein et L e </ strong> venshtein → différent --Ri e </ strong> venstein et Le v </ strong> enshtein → différent
  • … --Revenstei n </ strong> et Levenshtei n </ strong> → égal

En regardant les choses de cette manière, la distance de bourdonnement est sortie comme 7 parce que les 7 caractères sauf le dernier "tein" sont différents.

La distance de bourdonnement doit être ** égale en nombre de caractères. ** Une erreur se produira si le nombre de caractères est différent.

Distance de Jaro Winkler

Il existe également la distance Jaro-Winkler, qui mesure la correspondance partielle entre deux chaînes. Plus il est proche de 1, plus il est similaire, et plus il est proche de 0, plus il est différent. Il semble être utilisé pour juger des fautes d'orthographe.

Levenshtein.jaro_winkler('Rievenstein', 'Levenshtein')
# 0.8787878787878789

Résumé

J'ai utilisé Python pour calculer la distance de Levenstein. J'ai également calculé la distance Humming et la distance Jaro Winkler comme d'autres distances d'édition. Bien sûr, veuillez calculer la distance d'édition de diverses chaînes de caractères similaires et calculer la similitude.

Veuillez vous référer à ce qui suit pour les détails de la bibliothèque utilisée cette fois. https://rawgit.com/ztane/python-Levenshtein/master/docs/Levenshtein.html#Levenshtein-median

Recommended Posts