2013-01-11 172 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