Ответ 1
В случае, если вы заинтересованы в быстром визуальном сравнении сходства Левенштейна и Диффлиба, я рассчитал оба для ~ 2,3 миллиона названий книг:
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
Затем я нанес на график результаты с R:
Строго для любопытных я также сравнил значения сходства Диффлиба, Левенштейна, Серенсена и Жакара:
library(ggplot2)
require(GGally)
difflib <- read.table("similarity_measures.txt", sep = " ")
colnames(difflib) <- c("difflib", "levenshtein", "sorensen", "jaccard")
ggpairs(difflib)
Результат:
Сходство Диффлиба/Левенштейна действительно довольно интересно.
Редактирование 2018 года: если вы работаете над определением похожих строк, вы также можете проверить минхэширование - здесь отличный обзор. Minhashing удивительно находит сходства в больших текстовых коллекциях за линейное время. Моя лаборатория собрала приложение, которое обнаруживает и визуализирует повторное использование текста, используя minhashing здесь: https://github.com/YaleDHLab/intertext