यदि आप लेवेंसहेटिन और डिफ्लिब समानता की एक त्वरित दृश्य तुलना में रुचि रखते हैं, तो मैंने दोनों ~ 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
मैंने तब आर के साथ परिणाम प्लॉट किए:
जिज्ञासु के लिए कड़ाई से, मैंने डिफ्लिब, लेवेन्शेटिन, सोरेंसन और जैकार्ड समानता मूल्यों की तुलना भी की:
library(ggplot2)
require(GGally)
difflib <- read.table("similarity_measures.txt", sep = " ")
colnames(difflib) <- c("difflib", "levenshtein", "sorensen", "jaccard")
ggpairs(difflib)
परिणाम:
डिफ्लिब / लेवेन्सहाइट समानता वास्तव में काफी दिलचस्प है।
2018 संपादित करें: यदि आप समान स्ट्रिंग्स की पहचान करने पर काम कर रहे हैं, तो आप मिनशिंग की जाँच भी कर सकते हैं - यहाँ एक महान अवलोकन है । रैखिक समय में बड़े पाठ संग्रहों में समानता खोजने में मिनहाशिंग अद्भुत है। मेरी लैब ने एक ऐप को एक साथ रखा है जो कि मिनहाशिंग का उपयोग करते हुए पाठ के पुन: उपयोग का पता लगाता है और कल्पना करता है: https://github.com/YaleDHLab/intertext