Я помню, как читал этот блог о библиотека 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 есть что-то, что делает это более эффективно на больших наборах данных... но это должно помочь.
Если у вас нет списка компаний, вам, вероятно, придется сделать что-то более умное...
person
Andy Hayden
schedule
17.10.2013