Нормализовать однострочный столбец в пандах с помощью нечеткого соответствия - PullRequest
0 голосов
/ 27 марта 2019

У меня есть Pandas DataFrame, содержащий результаты настроения сущностей с использованием API естественного языка Google Cloud (https://cloud.google.com/natural-language/docs/analyzing-entity-sentiment).). Я настроил настроения сущностей на корпусе документов и хочу сравнить, как различные сущности рассматриваются в разных документах. Однако столбец entity_name содержит дубликаты из-за незначительных различий в способах ссылки на организации в различных документах. Я хотел бы заменить каждое имя объекта на одну версию, чтобы я мог сравнить анализ настроений по всем документам.

Вот пример того, как выглядит DataFrame:

entity_name                paper_name    score    magnitude
Dept. of Commerce          paper_1.pdf   0.67     0.13
Department of Commerce     paper_2.pdf   0.42     0.21
US Department of Commerce  paper_3.pdf   0.07     0.15

Я хотел бы найти, например, все ссылки на «Министерство торговли», чтобы я мог сравнить оценки настроений для этой сущности по различным документам. Это не большой DataFrame (менее 100 000 строк), поэтому самый быстрый / самый оптимальный ответ - не проблема.

Я пробовал нечеткое сопоставление имен, используя библиотеку нечеткого в Python. Я взял столбец entity_name и создал два отдельных массива Numpy, используя уникальные значения

names_1 = df.entity_name.unique()
names_2 = df.entity_name.unique()

Затем я провел нечеткое совпадение для всех пар в двух столбцах. Проблема в том, что у меня все еще есть дубликаты. Это пример того, как выглядит соответствующий DataFrame

name_1                      name_2                      match_ratio
Dept. of Commerce           Department of Commerce      82
Department of Commerce      Dept. of Commerce           82
US Department of Commerce   Department of Commerce      100
Department of Commerce      US Department of Commerce   100
Dept. of Commerce           US Department of Commerce   82
US Department of Commerce   Dept. of Commerce           82

Итак, в общем, я ищу способ заменить все варианты «Министерства торговли» одной версией (не имеет значения, какая), чтобы я мог сравнивать оценки настроений в разных статьях. Я нашел решения, которые включают объединение двух DataFrames с нечетким сопоставлением и другие, которые включают нечеткое сопоставление двух отдельных столбцов в одном DataFrame, но до сих пор не нашли способа нормализовать один столбец String в DataFrame.

...