Trong trường hợp bạn quan tâm đến việc so sánh trực quan nhanh về sự tương đồng của Levenshtein và Difflib, tôi đã tính cả hai cho ~ 2,3 triệu đầu sách:
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
Sau đó tôi đã vẽ kết quả với R:
Nghiêm túc cho sự tò mò, tôi cũng so sánh các giá trị tương tự Difflib, Levenshtein, Sørensen và Jaccard:
library(ggplot2)
require(GGally)
difflib <- read.table("similarity_measures.txt", sep = " ")
colnames(difflib) <- c("difflib", "levenshtein", "sorensen", "jaccard")
ggpairs(difflib)
Kết quả:
Sự tương đồng của Difflib / Levenshtein thực sự khá thú vị.
Chỉnh sửa năm 2018: Nếu bạn đang làm việc để xác định các chuỗi tương tự, bạn cũng có thể kiểm tra minhashing - có một tổng quan tuyệt vời ở đây . Minhashing là tuyệt vời trong việc tìm thấy sự tương đồng trong các bộ sưu tập văn bản lớn trong thời gian tuyến tính. Phòng thí nghiệm của tôi kết hợp một ứng dụng phát hiện và trực quan hóa việc sử dụng lại văn bản bằng cách sử dụng minhashing tại đây: https://github.com/YaleDHLab/intertext