2013-01-11 86 views
0

我需要协调相似的字符串与最长的字符串之一。我被agrep卡住了,你会怎么做?部分字符串匹配在R

更新:好问题定义 我有面包店的地址的.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ß") 
+1

您可能也想看看'adist' – hadley

+0

谢谢我尝试adist。 –

+0

感谢据我了解adist()我需要将字符串拆分为ngram向量? –

回答

1

是不是不清楚你想要做什么。我假设你的矢量数据中的每个元素都是taht,你试图找到类似的最长的字符串,或者类似者中最长的字符串(agrep结果)。

  1. 你可以先删除所有dupliacted(无SENS为我做的grep,当有精确匹配)

    stats.nd <- dat[!duplicated(dat)] #I remove duplicated, but below 
                # I will do the job in the origin vector 
    
  2. 假设dat是您的字符串向量,你可以做smething像这样的:

    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) 
    
+0

谢谢我澄清了requiremens,删除重复对我来说不是敏感的,因为我想知道企业的分支数量。 challange是那个分支经常被命名为slrtly不同 –

+0

我不明白stats.nd的来源? –

+0

@Roo对不起,它是一个复制粘贴。 stats.nd我删除重复(nd作为非重复),但最后我保留原始矢量(dat)。我更新我的答案。 – agstudy