我需要将类似的字符串与一个最长的字符串进行协调。我被agrep困住了,你会怎么做?
更新:更好的问题定义 我有面包店的.csv地址,我想知道(1)面包店有多少家分店,(2)有多少家企业。
因此我只提取面包店的名称(见下面的示例),现在我需要找到所有类似的字符串,它们代表同一个业务。然后我统计了业务和分支机构的数量。
c("5 Meister Bäcker", "5 Meister Bäcker H. Breunung GmbH & Co. KG",
"5 Meister Bäcker Hubert Breunung Amthorpassage Ba...", "5 Meister Bäcker Hubert Breunung Bäckerei",
"5 Meister Bäcker Hubert Breunung Backshop", "5 Meister Bäcker Hubert Breunung Backshop",
"5 Meister Bäcker Hubert Breunung Backshop", "5 Meister Bäcker Hubert Breunung Backshop",
"5 Meister Bäcker Hubert Breunung Backshop", "5 Meister Bäcker Hubert Breunung Backshop",
"5 Meister Bäcker Hubert Breunung GmbH & Co. KG", "5 Meister Bäcker Hubert Breunung GmbH & Co. KG",
"5 Meister Bäcker Hubert Breunung GmbH & Co. KG", "5 Meister Bäcker Hubert Breunung GmbH & Co. KG",
"5 Meister Bäcker Hubert Breunung GmbH & Co. KG", "5 Meister Bäcker Hubert Breunung",
"5 Meister Bäcker Verwaltung", "Abel Backwaren", "Abele Bäckerei Filiale",
"Abele Bruno Bäckerei", "Abele Eugen Bäckerei", "Abele Stefan Bäckerei",
"Abel Lutz Feinbäckerei", "Abelmann Guido Bäckerei", "Abelmann Guido Bäckerei",
"Abeln", " 05432 6 79", "Abeln Der City Bäcker", "Abeln", " 05933 18 12",
"Abeln", " 05432 90 46 10", "Abeln", " 04471 72 93", "Abeln",
" 05431 90 40 87", "Abeln", " 04471 93 03 47", "Abeln der City Bäcker",
"Abeln Der City Bäcker", "Abeln Der City Bäcker", "Abeln",
" 05961 95 53 30", "Abeln Der City Bäcker", "Abeln mein City-Bäcker Bäckerei",
"Abeln", " 05933 64 76 23", "Abel Rupert Bäckerei und Konditorei",
"Abels Bäckerei", "Abenthum Heinrich Bäckerei und Konditorei",
"Aberle Hanno Bäckerei", "Abholzer Bäckerei Inh. Bernard u. Rosi Sproß")
答案 0 :(得分:1)
目前尚不清楚你想做什么。我假设你的矢量数据中的每个元素,你试图找到相似的最长字符串,或类似物中最长的字符串(agrep结果)。
你可以先删除所有重复的内容(当有完全匹配时,我没办法做grep)
stats.nd <- dat[!duplicated(dat)] #I remove duplicated, but below
# I will do the job in the origin vector
假设dat
是你的字符串向量,你可以这样做:
ll.lmatch <- sapply(seq_along(dat),function(x){
ll <- agrep(pattern=dat[x], # for each string
dat[-x], # I search between the others strings
value=T,max.distance=0.5) # I set the Levenshtein distance
ll[which.max(rank(ll))] # I choose the longest using rank
})
res <- cbind(dat,dat.match)