Concernant la distance de montage, c'est un peu vieux, mais l'article de Naoya Ito est utile. En termes simples, il s'agit d'une méthode permettant d'exprimer la proximité de deux chaînes de caractères sous forme de valeur numérique.
Référence: Editing Distance (Levenshtein Distance) - Naoya's Hatena Diary
Il y avait un paquet appelé python-Levenshtein, alors mettons-le.
$ sudo pip install python-Levenshtein
Écrivons un code comme celui-ci.
#!/usr/bin/env python
# coding: utf8
import Levenshtein
string1 = "Taiji Inoue"
string2 = "Yasuji Inoue"
string1 = string1.decode('utf-8')
string2 = string2.decode('utf-8')
print Levenshtein.distance(string1, string2)
$ python levenshtein.py
1
Le japonais est également OK. Si vous remplacez un caractère, ce sera le caractère correct, donc la distance d'édition sera de 1.
Je ne suis pas doué pour taper le mot python, et quand je le remarque, il devient pyhton. La distance d'édition entre pyhton et python est de 2. (Parce que ce sera pareil si vous échangez les deux lettres)
En regardant la Documentation, il semble que vous puissiez également calculer la distance Jaro-Winkler et ainsi de suite.
Si vous l'enregistrez en tant que MySQL stocké comme celui ci-dessous, il ressemblera à ORDER BY LEVENSHTEIN (titre, "Hogehoge"). C'est pratique car il sera affiché dans l'ordre des lettres. Cependant, l'index ne fonctionne pas, donc si vous recherchez tous les enregistrements et que le nombre d'enregistrements est important, la requête sera assez lourde.
https://github.com/fza/mysql-doctrine-levenshtein-function
PHP- [Prise en charge multi-octets] Recherche de la distance de Levenstein-Qiita
Recommended Posts