2 つの大きなデータセットがあります。1 つは約 50 万件のレコードで、もう 1 つは約 70K です。これらのデータセットにはアドレスがあります。小さいデータセットのアドレスのいずれかが大きいデータセットに存在するかどうかを照合したい。ご想像のとおり、アドレスはさまざまな方法でさまざまなケースで記述できるため、一致するはずのときに一致せず、一致してはならないときに一致するのを見るのは非常に面倒です。私はいくつかの調査を行い、使用できるパッケージ stringdist を見つけました。しかし、私は立ち往生しており、その機能を最大限に活用していないと感じており、これに関するいくつかの提案が役立ちます.
以下は、状況を説明するために作成したコードと一緒にサンプルのダミー データです。
Address1 <- c("786, GALI NO 5, XYZ","rambo, 45, strret 4, atlast, pqr","23/4, 23RD FLOOR, STREET 2, ABC-E, PQR","45-B, GALI NO5, XYZ","HECTIC, 99 STREET, PQR")
df1 <- data.table(Address1)
Address2 <- c("abc, pqr, xyz","786, GALI NO 4 XYZ","45B, GALI NO 5, XYZ","del, 546, strret2, towards east, pqr","23/4, STREET 2, PQR")
df2 <- data.table(Address2)
df1[, key_match := gsub("[^[:alnum:]]", "", Address1)]
df2[, key_match := gsub("[^[:alnum:]]", "", Address2)]
fn_match = function(str, strVec, n){
strVec[amatch(str, strVec, method = "dl", maxDist=n,useBytes = T)]
}
df1[!is.na(key_match)
, address_match :=
fn_match(key_match, df2$key_match,3)
]
出力を見ると、df1 の address_match の下に一致が表示されます。メイン データに同じコードを適用すると、コードは過去 30 時間からまだ実行されています。私はdata.tableに変換しましたが。どうすればこれを高速化できるかわかりません。
私はさらに読んでいて、stringdistマトリックスに出くわしました。これはより役立つようで、アドレスごとにスペースを分割し、各アドレス リスト内の各単語の存在をチェックし、最大一致に応じて一致の概要を作成できます。しかし、私はループがあまり得意ではありません。各単語の小さなファイルから各アドレスをループし、大きなファイルの個々のアドレスをチェックインして、一致のマトリックスを作成するにはどうすればよいですか? どんな助けでも!!