Falls Sie an einem schnellen visuellen Vergleich der Ähnlichkeit von Levenshtein und Difflib interessiert sind, habe ich beide für ~ 2,3 Millionen Buchtitel berechnet:
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
Ich habe dann die Ergebnisse mit R aufgezeichnet:
Streng für Neugierige habe ich auch die Ähnlichkeitswerte Difflib, Levenshtein, Sørensen und Jaccard verglichen:
library(ggplot2)
require(GGally)
difflib <- read.table("similarity_measures.txt", sep = " ")
colnames(difflib) <- c("difflib", "levenshtein", "sorensen", "jaccard")
ggpairs(difflib)
Ergebnis:
Die Difflib / Levenshtein-Ähnlichkeit ist wirklich sehr interessant.
Bearbeiten 2018: Wenn Sie daran arbeiten, ähnliche Zeichenfolgen zu identifizieren, können Sie auch Minhashing ausprobieren - hier finden Sie eine großartige Übersicht . Minhashing ist erstaunlich, wenn es darum geht, Ähnlichkeiten in großen Textsammlungen in linearer Zeit zu finden. Mein Labor hat hier eine App zusammengestellt, die die Wiederverwendung von Text mithilfe von Minhashing erkennt und visualisiert: https://github.com/YaleDHLab/intertext