Python создает собственный словарь для анализа НЛП

Я довольно новичок в Python. Я хочу создать собственный словарь, чтобы объединить длинный (1 миллион строк) список запутанных названий компаний в очищенные имена. Могу ли я использовать для этого пакет nltk?

Например: у меня есть приведенные ниже данные транзакции с именами продавцов. Я хочу создать собственный словарь, чтобы я мог классифицировать имена продавцов на очищенные.

  1. Американский орел#12455112 ---> Американский орел
  2. Американский орел ---> Американский орел
  3. //##7555Banana Rep ---> Banana Republic
  4. Нью-Йорк H&M ---> H&M
  5. H&M Чигаго ---> H&M

person Community    schedule 23.03.2018    source источник
comment
Попробуйте дать больше деталей и попыток: stackoverflow.com/help/how-to-ask   -  person patrick    schedule 23.03.2018
comment
Я думаю, вы можете удалить/удалить все неалфавитные символы в начале и в конце имен. Будет ли этого достаточно?   -  person Joozty    schedule 23.03.2018
comment
Спасибо, Патрик. Я добавил пример.   -  person    schedule 23.03.2018
comment
@Joozty Некоторые имена продавцов усечены, к другим привязаны местоположения. Я хотел бы иметь возможность объединить их в одно имя продавца.   -  person    schedule 23.03.2018
comment
@Steve_Awu На мой взгляд, это очень сложная проблема. Например, вы можете проанализировать все имена продавцов из Википедии, а затем найти совпадения в своих данных. Боюсь, дело не только в нескольких строчках кода.   -  person Joozty    schedule 23.03.2018
comment
Вы можете создать словарь hunspell.   -  person amirouche    schedule 23.03.2018
comment
@amirouche, не могли бы вы уточнить?   -  person    schedule 23.03.2018


Ответы (1)


хммм... моя первая попытка была бы не с NLTK. Я бы использовал нечеткое сопоставление и вернул бы результат с наибольшим совпадением. Существует множество алгоритмов нечеткого сопоставления. Самые популярные (ИМХО) — косинусное расстояние и левенштейн. Если вы новичок в Python, попробуйте использовать открытый исходный код, например fuzzywuzzy: https://pypi.python.org/pypi/fuzzywuzzy

Например, возьмите ваши данные о транзакциях и нечетко сопоставьте их со списком вашего словаря, чтобы найти наилучшее/ближайшее совпадение:

    from fuzzywuzzy import fuzz
    from fuzzywuzzy import process
    best_match = None
    best_fuzzy =0
    transaction_company = 'American Eag'
    for real_company in real_companies_list:
      temp_fuzzy = fuzz.ratio(transaction_company,real_company)
      if temp_fuzzy > best_fuzzy:
        best_match = real_company
        best_fuzzy = temp_fuzzy
    print best_match, best_fuzzy

Обратите внимание, что нечеткое сопоставление может занять много времени в зависимости от объема обрабатываемых данных.

person saucy wombat    schedule 23.03.2018
comment
Спасибо за ответ. Моя цель состоит в том, чтобы найти программный способ создания словаря на основе данных о транзакциях, который позволит мне преобразовать беспорядочные имена продавцов в чистые. - person ; 23.03.2018