0

我需要将类似的字符串调和为最长的字符串。我被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ß")
4

1 回答 1

1

不清楚你想做什么。我假设对于向量数据中的每个元素,您尝试找到相似的最长字符串,或相似物中的最长字符串(agrep 结果)。

  1. 您可以先删除所有重复项(当有完全匹配时,我做 grep 没有意义)

    stats.nd <- dat[!duplicated(dat)]   #I remove duplicated, but below
                                        # I will do the job in the origin vector
    
  2. 假设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)
    
于 2013-01-11T14:10:48.627 回答