私は pandas データフレームを使用しており、会社ごとに顧客がいるデータがあります。ただし、会社のタイトルは多少異なりますが、最終的にはデータに影響します。例:
Company Customers
AAAB 1,000
AAAB Inc. 900
The AAAB Inc. 20
AAAB the INC 10
いくつかの異なる会社のデータベースから、標準外の名前を持つ会社の合計顧客を取得したいと考えています。どこから始めればいいですか?
これを行うことができるfuzzywuzzy ライブラリに関するこのブログを読んだことを覚えています(別の質問を調べています)。
pip install fuzzywuzzy
その partial_ratio 関数を使用して、文字列を「あいまい一致」させることができます。
In [11]: from fuzzywuzzy.fuzz import partial_ratio
In [12]: partial_ratio('AAAB', 'the AAAB inc.')
Out[12]: 100
相性がいいと自信を持っているようです!
In [13]: partial_ratio('AAAB', 'AAPL')
Out[13]: 50
In [14]: partial_ratio('AAAB', 'Google')
Out[14]: 0
実際の会社リストで最も一致するものを取得できます (それがあると仮定します):
In [15]: co_list = ['AAAB', 'AAPL', 'GOOG']
In [16]: df.Company.apply(lambda mistyped_co: max(co_list,
key=lambda co: partial_ratio(mistyped_co, co)))
Out[16]:
0 AAAB
1 AAAB
2 AAAB
3 AAAB
Name: Company, dtype: object
大規模なデータセットでこれをより効率的に行うために、scikit Learnまたはnumpyライブラリに何かがあると強く疑っています...しかし、これで仕事が完了するはずです。
会社のリストがない場合は、おそらくもっと賢いことをしなければならないでしょう...