Identification de nom à l'aide de python

Moyens d'identification du nom

Utilisez la distance de Levenstein. La "distance de Lebenstein" est également appelée "distance d'édition". Il s'agit du nombre minimum d'étapes requises pour transformer une chaîne de caractères en une autre chaîne de caractères en «insérant», «supprimant» et «remplaçant» un caractère.

Par exemple, de «chat» à «couper» cat c tcut et 2 de" ʻa supprimer, ʻu insérer ". Il est facile de penser que la distance de Levenstein est «1» car vous pouvez utiliser la substitution.

Pour plus d'informations [Wiki](https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3 Voir% 83% A5% E3% 82% BF% E3% 82% A4% E3% 83% B3% E8% B7% 9D% E9% 9B% A2). Dans ce tutoriel, nous allons enfin identifier les noms tout en faisant quelques expériences.

Expérience 1. Utilisons "Distance de Lebenstein"

test0


import Levenshtein

target = ['oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']
cates = ['kome']

for val in target:
    nearL_flag = False
    for cate in cates:
        if Levenshtein.distance(val, cate) < 1:   #Si la distance de Levenstein de référence est inférieure à 1, c'est-à-dire même un peu différente, mettez-la en catégories.
            nearL_flag = True
    if not nearL_flag:
        cates.append(val)
cates

output


['kome', 'oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']

Le programme est tel que tous les éléments avec une distance de Levenstein de référence de «1» ou plus entrent dans des «catégories». Nous allons le remodeler sur cette base. Tout d'abord, augmentez progressivement la distance et observez ce qui arrive à la sortie.

Expérience 1. Augmentez la distance de référence de Levenstein (tolérez l'ambiguïté)

test1


import Levenshtein

target = ['oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']

for i in range(10):
    cates = ['kome']
    for val in target:
        nearL_flag = False
        for cate in cates:
            if Levenshtein.distance(val, cate) < i:
                nearL_flag = True
        if not nearL_flag:
            cates.append(val)
    print(i, cates)

output



0 ['kome', 'oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']
1 ['kome', 'oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']
2 ['kome', 'oniku_a', 'yasai_a']
3 ['kome', 'oniku_a', 'yasai_a']
4 ['kome', 'oniku_a', 'yasai_a']
5 ['kome', 'oniku_a', 'yasai_a']
6 ['kome', 'oniku_a', 'yasai_b']
7 ['kome', 'yasai_a']
8 ['kome']
9 ['kome']

À partir de ce résultat de sortie, on peut voir que l'ambiguïté est autorisée lorsque la distance de Levenstein est augmentée. Par exemple, s'il faut considérer oniku_a '' et oniku_b '' comme la même classification Si la distance de Levenstein de référence est petite, elle est "considérée comme différente" Si la distance de référence de Levenstein est grande, "Eh bien, considérons-la comme la même".

En outre, à partir du résultat de sortie ci-dessus, il semble bon de définir la liste initiale des catégories sur ['kome', 'oniku', 'yasai'] au lieu de ['kome'].

Expérience 2. Changez la valeur initiale en ['kome', 'oniku', 'yasai'] et essayez d'identifier le nom.

test2


import Levenshtein

target = ['oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']

for i in range(10):
    cates = ['kome', 'oniku', 'yasai']
    for val in target:
        nearL_flag = False
        for cate in cates:
            if Levenshtein.distance(val, cate) < i:
                nearL_flag = True
        if not nearL_flag:
            cates.append(val)
    print(i, cates)

output


0 ['kome', 'oniku', 'yasai', 'oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']
1 ['kome', 'oniku', 'yasai', 'oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']
2 ['kome', 'oniku', 'yasai', 'oniku_a', 'yasai_a']
3 ['kome', 'oniku', 'yasai']
4 ['kome', 'oniku', 'yasai']
5 ['kome', 'oniku', 'yasai']
6 ['kome', 'oniku', 'yasai']
7 ['kome', 'oniku', 'yasai']
8 ['kome', 'oniku', 'yasai']
9 ['kome', 'oniku', 'yasai']

D'après ce qui précède, pour cette «cible», cates la valeur initiale: ['kome', 'oniku', 'yasai'], il a été trouvé que le nom peut être identifié avec une distance de Levenstein inférieure à "3".

Puis, enfin, c'est un programme d'identification de nom.

Programme d'identification de nom

nayose


import Levenshtein

target = ['oniku_a', 'oniku_b', 'oniku_c', 'yasai_a', 'yasai_b', 'yasai_c']
cates = ['kome', 'oniku', 'yasai']

nayose = []

for val in target:
    minL = 100
    afterNayose = 'dummy'
    for cate in cates:
        tmp_distance = Levenshtein.distance(val, cate)
        if tmp_distance < minL:
            minL = tmp_distance
            afterNayose = cate
    nayose.append(afterNayose)

[(before, after, Levenshtein.distance(before, after)) for before, after in zip(target, nayose)]

output


[('oniku_a', 'oniku', 2),
 ('oniku_b', 'oniku', 2),
 ('oniku_c', 'oniku', 2),
 ('yasai_a', 'yasai', 2),
 ('yasai_b', 'yasai', 2),
 ('yasai_c', 'yasai', 2)]

La façon de lire la sortie est (avant, après, avant et après la distance de Levenstein). Il peut être confirmé que la distance de Levenstein est inférieure à «3» et le nom peut être identifié.

Recommended Posts

Identification de nom à l'aide de python
Commencez à utiliser Python
Scraping à l'aide de Python
Manipuler Redmine à l'aide de Python Redmine
Nettoyage des données à l'aide de Python
Câblage Communication Pi-SPI avec Python
Calcul de l'âge à l'aide de python
Rechercher sur Twitter avec Python
Notes sur l'utilisation de sous-processus Python
Essayez d'utiliser Tweepy [Python2.7]
mémo python utilisant l'opérateur perl-ternaire
Aplatir à l'aide du rendement Python de
Scraping à l'aide de Python 3.5 async / await
Enregistrer des images à l'aide de requêtes python3
[S3] CRUD avec S3 utilisant Python [Python]
Python "if __name__ ==‘ __main__ ’:" signifie
[Python] Essayez d'utiliser le canevas de Tkinter
Essayez d'utiliser Kubernetes Client -Python-
[Python] si __name__ == Qu'est-ce que «__ main__»:?
notes python pour l'utilisation de variables spéciales perl
[Python] Utilisation d'OpenCV avec Python (basique)
Scraping à l'aide de la syntaxe Python 3.5 Async
Publier sur Twitter en utilisant Python
Commencez à Selenium en utilisant python
Algorithme de recherche utilisant word2vec [python]
Changer la version de python à l'aide de pyenv
python: principes de base de l'utilisation de scikit-learn ①
# 1 [python3] Calcul simple à l'aide de variables
Contrôle d'instruments à l'aide de Python [pyvisa]
Manipulez les feuilles de calcul localement à l'aide de Python
mémo python utilisant perl --join
[Python] Validation de JSON avec Voluptuous
Analyse de données à l'aide de pandas python
Traduit à l'aide de googletrans en Python
Utilisation du mode Python dans le traitement
Utiliser OpenCV avec Python @Mac
[Python] Jeu de tir avec pyxel
Envoyer en utilisant Python avec Gmail
[Python3] Mettre en forme la chaîne de caractères en utilisant le nom de la variable comme clé
Prédire le sexe à partir du nom à l'aide de l'API Gender et de Pykakasi en Python
Compléter python avec emacs en utilisant company-jedi
Comment installer Python à l'aide d'Anaconda
Initialisation de variables globales à l'aide de décorateurs Python
[Python] Chargement de fichiers csv à l'aide de pandas
Remarque Python: à propos de la comparaison en utilisant is
[Ubuntu] [Python] Suivi d'objets à l'aide de dlib
__Nom__
Capture d'image de Firefox en utilisant Python
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
Précautions lors de l'utilisation de Pit avec Python
Récapitulatif si vous utilisez AWS Lambda (Python)
Acquisition de données à l'aide de l'API googlemap de python
Python
Utilisation de Rstan de Python avec PypeR
Créer une interface graphique python à l'aide de tkinter
Python: Introduction à Flask: création d'une application d'identification de numéro à l'aide de MNIST
Authentification à l'aide de l'authentification des utilisateurs tweepy et de l'authentification d'application (Python)
[Python] Utilisation d'OpenCV avec Python (transformation d'image)