我是R的新手,我正在尝试根据包含产品名称的字符串匹配R中的两个DataFrame。品牌名称与产品名称位于不同的数组中。 对于不同的产品和产品变化(即颜色)的结束/中间,通常变化位于字符串的末端。
不幸的是,我收到了许多不符合的误报或产品。
使用levenshtein距离,这两种产品匹配为假阳性
品牌名称= [ADIDAS ORIGINALS],产品名称= [香蕉印刷罐 顶部]
品牌名称= [ADIDAS ORIGINALS],产品名称= [香蕉印花 短裤]
我目前使用的方法在评分方面没有区别 在产品之间的变化和不同的产品 相同的一行(如上所示)要么错过很多产品,要么导致错误的积极性
品牌名称= [ADIDAS ORIGINALS],产品名称= [Superstar 80s Black Metal Toe Cap Trainers]
品牌名称= [ADIDAS ORIGINALS],产品名称= [Superstar Super Color Sun Glow Trainers]
我想知道是否有一种方法允许我根据匹配的子字符串(即4/5 字匹配)对字符串进行评分,而不是传统的字符串匹配技术或分配不同的方法在字符串末尾加权变量以解决我的问题。
商店1
Brand store1 Prod.name store1
Adidas Originals Bananas Print Tank Top
Adidas Originals Bananas Print Shorts
Oasis Geo Lace Drape Cardigan
Michael Kors Hamilton Saffiano Leather Tote
Phase Eight Analise Print Dress
Indulgence Red maxi dress
商店2
Brand store2 Prod.name store2
Adidas Originals Bananas Print Tank Top
Adidas Originals Superstar Super Colour Sun Glow Trainers
Oasis Geo Lace Drape Cardigan
Michael Kors Hamilton Saffiano Leather Tote
Phase Eight Analise Print Dress
Indulgence Red maxi dress
我想如何匹配它们
Brand store1 Prod.name store1 Prod.name store2
Adidas Originals Bananas Print Tank Top Bananas Print Tank Top
Adidas Originals Bananas Print Shorts NULL
Oasis Geo Lace Drape Cardigan Geo Lace Drape Cardigan
Michael Kors Hamilton Saffiano Leather Tote Hamilton Saffiano Leather Tote
Phase Eight Analise Print Dress Analise Print Dress
Indulgence Red maxi dress Red maxi dress
以下是我正在使用的代码(在r-bloggers的帮助下) - 编辑: sample files
source1.devices<-read.csv('store1.csv')
source2.devices<-read.csv('store2.csv')
source1.devices$name<-as.character(store1.csv$prod.name)
source2.devices$name<-as.character(store2.csv$prod.name)
dist.name<-adist(store1.csv$prod.name,store2.csv$prod.name, partial = TRUE, ignore.case = TRUE)
min.name<-apply(dist.name, 1, min)
match.s1.s2<-NULL
for(i in 1:nrow(dist.name))
{
s2.i<-match(min.name[i],dist.name[i,])
s1.i<-i
match.s1.s2<-rbind(data.frame(s2.i=s2.i,s1.i=s1.i,s2name=store2.csv[s2.i,]$prod.name, s1name=store1.csv[s1.i,]$prod.name, adist=min.name[i]),match.s1.s2)
}
View(match.s1.s2)