我想做字符串匹配,並在Python中使用模糊wuzzy帶來匹配id。我的數據集非常龐大,數據集1 = 180萬條記錄,數據集2 = 160萬條記錄。多處理模糊模糊字符串搜索 - python
我試了一下,到目前爲止,
首先我想在Python中使用record linkage
包,遺憾的是它跑出來的內存時,它建立multi index
,所以我搬到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']})
在這裏,我試圖尋找test.Address1
在test2.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)
我不知道該怎麼辦那?請指教。提前致謝。
您是否解決了這個問題? –
還沒有。仍在努力。 –