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 は可能性がないと思います
どうもありがとう、
エイドリアン