/ / आर, डी, डीआरआरआरई, कोसाइन-समानता, स्ट्रगलिस्ट, रिकॉर्ड-लिंकेज में समान प्रविष्टियों को छोड़कर टेक्स्ट स्ट्रिंग्स में समानता% का संकलन करना

R - r, dplyr, cosine-समानता, स्ट्रैंगिस्ट, रिकॉर्ड-लिंकेज में समान प्रविष्टियों को छोड़कर टेक्स्ट स्ट्रिंग्स में समानता% की गणना

दी गई R स्क्रिप्ट% में समानता की गणना करती हैदृश्य में दिखाए गए दो नामों के बीच। यहाँ हमारे पास id1 और id2 में दो कॉलम "names1" और "names2" हैं। मेरी आवश्यकता यह है कि जब हम स्क्रिप्ट निष्पादित करते हैं, तो "नाम 2" कॉलम में प्रत्येक नाम की तुलना "नाम 2" कॉलम में प्रत्येक नाम के साथ की जाती है, मैं नहीं चाहता कि समान प्रविष्टि (id1, names1) कॉलम में इसकी समान प्रविष्टि के साथ तुलना की जाए। आईडी 2, नाम 2) कॉलम। चित्रण के लिए, पहली (आईडी 1, नाम 1) प्रविष्टि (1, प्रभुदेव रामानुजम) की तुलना सभी (आईडी 2, नाम 2) के साथ की जानी चाहिए, लेकिन पहली (आईडी 2, नाम 2) प्रविष्टि के साथ नहीं। इसी तरह सभी जोड़े के लिए। साथ ही, अगर सूत्र

percent(sapply(names1, function(i)RecordLinkage::levenshteinSim(i,names2)))

यहाँ एक समान और तेज़ परिणाम उत्पन्न करने के लिए इसे घुमाया जा सकता है क्योंकि यह बड़े डेटा पर धीमा हो जाता है, स्नैपशॉट संलग्न करना, कृपया मदद करें।

library(stringdist)
library(RecordLinkage)
library(dplyr)
library(scales)
id1    <- 1:8
names1 <- c("Prabhudev Ramanujam","Deepak Subramaniam","Sangamer
Mahapatra","SriramKishore Sharma",
"Deepak Subramaniam","SriramKishore Sharma","Deepak
Subramaniam","Sangamer Mahapatra")
id2    <- c(1,2,3,4,11,13,9,10)
names2 <- c("Prabhudev Ramanujam","Deepak Subramaniam","Sangamer
Mahapatra","SriramKishore Sharma",
"Deepak Subramaniam","Sangamer Mahapatra","SriramKishore
Sharma","Deepak Subramaniam")
Name_Data <- data.frame(id1,names1,id2,names2)
Percent<- percent(sapply(names1, function(i)
RecordLinkage::levenshteinSim(i,names2)))
Total_Value <- data.frame(id2,names2,Percent)

स्नैपशॉट दृश्य

उत्तर:

उत्तर № 1 के लिए 1

ज्यादा तेज नहीं, लेकिन मेरा सुझाव होगा:

percent(unlist(lapply(1:length(names1), function(x) {
levenshteinSim(names1[x], names2[!(names2==names1[x] & id2==id1[x])])})))

संपादित करें:

वैकल्पिक रूप से, यह तेज हो सकता है - मुझे लगता है कि यह भिन्न होता है:

as.vector(t(1 - (stringdistmatrix(names1, names2, method = "lv") /
outer(nchar(names1), nchar(names2), pmax))))[unlist(lapply(1:length(names1), function(x) !(names2==names1[x] & id2==id1[x])))]