4

600,000 個の個人の名前 (フル ネーム) を、8700 万件を超える観測 (フル ネーム) を持つ別のデータベースとほぼ一致させようとしています。

fuzzywuzzyライブラリでの最初の試みは遅すぎたため、はるかに高速なモジュールfuzzysetを使用することにしました。すべてのデータセットをメモリにロードするのに十分強力なコンピューターがあると仮定すると、964 個の観測値のテスト ファイルを使用して、50,000 個の観測値と照合するために次のことを行っています。

import time
from cfuzzyset import cFuzzySet as FuzzySet

df1=pd.read_csv(file1,delimiter='|') # test file with 964 observations
df2=pd.read_csv(file2,delimiter='|') # test file with 50,000 observations to be matched against

a=FuzzySet() # allocate the FuzzySet object
for row in file2['name']:
   a.add(str(row)) # Fill the FuzzySet object with all names from file2

start_time = time.time() # Start recording the time

dicto={'index':[],'name':[]} # Dictionary where I store the output

for names in file1['f_ofulln']:
    dicto['index'].append(a.get(names)[0][0])
    dicto['name'].append(a.get(names)[0][1])

print("--- %s seconds ---" % (time.time() - start_time))   

>>> --- 39.68284249305725 seconds ---

はるかに小さいデータセット (50,000 の観測に対して 964 の観測が一致) では、時間は39 秒でした。

ただし、このメソッドを完全なデータセットで実行したい場合、これは遅すぎます。

実行時間を改善する方法を知っている人はいますか? 私はすでにfuzzysetモジュールの Cython バージョンをインポートしているので、Cython は可能性がないと思います

どうもありがとう、

エイドリアン

4

1 に答える 1