Au cas où vous seriez intéressé par une comparaison visuelle rapide de la similarité Levenshtein et Difflib, j'ai calculé les deux pour ~2,3 millions de titres de livres :
import codecs, difflib, Levenshtein, distance
with codecs.open("titles.tsv","r","utf-8") as f:
title_list = f.read().split("\n")[:-1]
for row in title_list:
sr = row.lower().split("\t")
diffl = difflib.SequenceMatcher(None, sr[3], sr[4]).ratio()
lev = Levenshtein.ratio(sr[3], sr[4])
sor = 1 - distance.sorensen(sr[3], sr[4])
jac = 1 - distance.jaccard(sr[3], sr[4])
print diffl, lev, sor, jac
J'ai ensuite tracé les résultats avec R :
![enter image description here]()
Strictement pour les curieux, j'ai également comparé les valeurs de similarité Difflib, Levenshtein, Sørensen et Jaccard :
library(ggplot2)
require(GGally)
difflib <- read.table("similarity_measures.txt", sep = " ")
colnames(difflib) <- c("difflib", "levenshtein", "sorensen", "jaccard")
ggpairs(difflib)
Résultat : ![enter image description here]()
La similitude Difflib / Levenshtein est vraiment très intéressante.
2018 edit : Si vous travaillez sur l'identification de chaînes de caractères similaires, vous pourriez également vérifier le minhashing - il y a un un bon aperçu ici . Le minhashing permet de trouver des similitudes dans de grandes collections de textes en temps linéaire. Mon laboratoire a créé une application qui détecte et visualise la réutilisation de textes en utilisant le minhashing : https://github.com/YaleDHLab/intertext