私は文字列のマッチングを行い、pythonであいまいな曖昧さを使って一致IDを取得しようとしています。私のデータセットは膨大で、dataset1 = 180万レコード、dataset2 = 160万レコードです。 、私がこれまで試したどのような マルチプロセッシングファジー曖昧な文字列検索 - python
、まず私はそれがmulti index
を構築する際に、残念ながら、それはメモリ不足、Pythonでrecord linkage
パッケージを使用してみましたので、私は良いマシンパワーをAWSに移動し、正常に構築されましたしかし、私はそれで比較を実行しようとしたとき、それは永遠に実行され、私はそれが比較の数のために同意する。
次に、fuzzy wuzzy
との文字列一致を試み、dask
パッケージを使用してプロセスを並列化しようとしました。サンプルデータで実行しました。それは正常に動作しますが、検索スペースが広いので、プロセスにはまだ時間がかかることがわかります。私は、このコードでブロッキングやインデックス作成を追加する方法を探しています。ここで
test = pd.DataFrame({'Address1':['123 Cheese Way','234 Cookie Place','345 Pizza Drive','456 Pretzel Junction'],'city':['X','U','X','U']})
test2 = pd.DataFrame({'Address1':['123 chese wy','234 kookie Pl','345 Pizzza DR','456 Pretzel Junktion'],'city':['X','U','Z','Y'] , 'ID' : ['1','3','4','8']})
、私はtest2.Address1
にtest.Address1
を探し、そのID
を持参しようとしています。
def fuzzy_score(str1, str2):
return fuzz.token_set_ratio(str1, str2)
def helper(orig_string, slave_df):
slave_df['score'] = slave_df.Address1.apply(lambda x: fuzzy_score(x,orig_string))
#return my_value corresponding to the highest score
return slave_df.ix[slave_df.score.idxmax(),'ID']
dmaster = dd.from_pandas(test, npartitions=24)
dmaster = dmaster.assign(ID_there=dmaster.Address1.apply(lambda x: helper(x, test2)))
dmaster.compute(get=dask.multiprocessing.get)
これはうまくいきますが、同じ都市の検索スペースを制限してインデックスを適用する方法がわかりません。
は私が方法がわからない
# sort the dataframe
test2.sort_values(by=['city'], inplace=True)
# set the index to be this and don't drop
test2.set_index(keys=['city'], drop=False,inplace=True)
、私は元の文字列の街に基づいて市場とサブセットにインデックスを作成しています、と言うとヘルパー関数にその都市を渡すことができますそれ ?お知らせ下さい。前もって感謝します。
これを解決しましたか? –
まだありません。まだそれに取り組んでいます。 –