Levenshtein과 Difflib 유사성에 대한 빠른 시각적 비교에 관심이있는 경우 두 가지 모두 230 만 권의 책 제목에 대해 계산했습니다.
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로 결과를 플로팅했습니다.
호기심을 자극하기 위해 Difflib, Levenshtein, Sørensen 및 Jaccard 유사성 값도 비교했습니다.
library(ggplot2)
require(GGally)
difflib <- read.table("similarity_measures.txt", sep = " ")
colnames(difflib) <- c("difflib", "levenshtein", "sorensen", "jaccard")
ggpairs(difflib)
결과:
Difflib / Levenshtein 유사성은 정말 흥미 롭습니다.
2018 편집 : 유사한 문자열을 식별하는 작업을하는 경우 minhashing을 확인할 수도 있습니다 . 여기에 훌륭한 개요가 있습니다 . Minhashing은 선형 시간에 큰 텍스트 컬렉션에서 유사점을 찾는 데 놀랍습니다. 내 연구실은 여기에 minhashing을 사용하여 텍스트 재사용을 감지하고 시각화하는 앱을 구성했습니다. https://github.com/YaleDHLab/intertext