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

あなたが何をしたいのかは明らかではありません。vector data の各要素について、同様の最長の文字列、または類似の最長の文字列 (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 に答える