ในกรณีที่คุณสนใจในการเปรียบเทียบภาพอย่างรวดเร็วของความคล้ายคลึงกันของ Levenshtein และ Difflib ฉันคำนวณทั้งสองเรื่องสำหรับหนังสือประมาณ 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:
อย่างเคร่งครัดสำหรับคนที่อยากรู้อยากเห็นฉันยังเปรียบเทียบค่าความคล้ายคลึงกันของ 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