Кластеризация/группировка имен с небольшими аномалиями или без них в кластеры в пандахPython

Программы на Python
Ответить
Anonymous
 Кластеризация/группировка имен с небольшими аномалиями или без них в кластеры в пандах

Сообщение Anonymous »

У меня есть фрейм данных с полем имен следующим образом:

Код: Выделить всё

print(df)
names
--------------------------------
0  U.S.A.
1  United States of America
2  USA
4  US America
5  Kenyan Footbal League
6  Kenyan Football League
7  Kenya Football League Assoc.
8  Kenya Footbal League Association
9  Tata Motors
10 Tat Motor
11 Tata Motors Ltd.
12 Tata Motor Limited
13 REL
14 Reliance Limited
15 Reliance Co.
Теперь я хочу объединить все эти похожие имена в одну категорию, чтобы окончательный фрейм данных выглядел примерно так:

Код: Выделить всё

print(df)
names   group_name
---------------------------------------------
0  U.S.A.                             USA
1  United States of America           USA
2  USA                                USA
4  US America                         USA
5  Kenyan Footbal League              Kenya Football League
6  Kenyan Football League             Kenya Football League
7  Kenya Football League Assoc.       Kenya Football League
8  Kenya Footbal League Association   Kenya Football League
9  Tata Motors                        Tata Motors
10 Tat Motor                          Tata Motors
11 Tata Motors Ltd.                   Tata Motors
12 Tata Motor Limited                 Tata Motors
13 REL                                Reliance
14 Reliance Limited.                  Reliance
15 Reliance Co.                       Reliance
Теперь это всего 16 записей, поэтому легко найти все возможные имена и аномалии в их именах и создать словарь для сопоставления. Но на самом деле у меня есть фрейм данных с примерно 5800 уникальными именами (ПРИМЕЧАНИЕ: «США» и «США» считаются разными объектами при указании количества уникальных имен).
Итак, существует ли какой-либо программный подход для решения такого сценария?

Я пробовал выполнить нечеткое сопоставление с использованием библиотек difflib и fuzzywuzzy, но даже окончательные результаты не являются конкретными. Часто difflib просто совпадает по таким словам, как «ограниченный», «ассоциация» и т. д. даже несмотря на то, что они будут относиться к двум разным именам, общим словом среди которых являются просто «ассоциация» или «ограниченный».

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ:

Даже если я создам список стоп-слов со такими словами, как «ассоциация», «ограниченный», «сотрудничество», «группа» и т. д., есть вероятность пропустить эти стоп-слова. имена, когда они упоминаются по-разному. Например, если «ассоциация» и «ограниченная» упоминаются просто как «ассоциация», «ltd» и «ltd.» есть вероятность, что я пропущу добавление некоторых из них в список стоп-слов.

Я уже пробовал тематическое моделирование с помощью LDA и NMF, результаты были очень похожи на то, чего я достиг ранее, используя библиотеки difflib и fuzzywuzzy. И да, я выполнил всю предварительную обработку (преобразование в нижний регистр, leamtization, обработку дополнительных пробелов) перед любым из этих подходов

Подробнее здесь: https://stackoverflow.com/questions/566 ... -in-pandas
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»