#python #pandas #dataframe #named-entity-recognition
#python #панды #фрейм данных #распознавание именованных объектов
Вопрос:
У меня есть два фрейма данных Pandas. Тот, где все предложения разделены словами по вертикали и выглядят следующим образом
Sentence | Text
1 I
1 like
1 Cats
2 The
2 man
2 plays
2 soccer
2 today
И другой фрейм данных выглядит следующим образом:
ID | Text | Tags
1 plays soccer sport
2 man human
3 like cats interest
Что я хотел бы, так это сопоставить теги с первым фреймом данных для слов в предложении, которые соответствуют обоим местам, а те, которые не совпадают, получают «O», чтобы символизировать это.
Sentence | Text | Tags
1 I O
1 like interest
1 Cats interest
2 The O
2 man human
2 plays sport
2 soccer sport
2 today O
Ответ №1:
Предположим, что df1
это ваша первая таблица, а df2
это ваша вторая (где ID
— индекс), тогда вы можете:
- Разнесите свою вторую таблицу (
str.split()
explode()
) merge()
с левым соединениемfillna()
NaN
сO
Например.:
In []:
df1.merge(df2.assign(Text=df2.Text.str.split()).explode('Text'), 'left').fillna('O')
Out[]:
Sentence Text Tags
0 1 I O
1 1 like interest
2 1 Cats O
3 2 The O
4 2 man human
5 2 plays sport
6 2 soccer sport
7 2 today O
В настоящее время это чувствительно к регистру, но это простое упражнение для объединения в столбце, который является str.lower()
of Text
.
Комментарии:
1. Спасибо за ваш комментарий. Однако, если у меня есть одно и то же слово в предложении, скажем, «человек». Первый тег — human, но в другом теге это может быть sapiens. Есть ли у вас какие-либо предложения о том, как следует относиться к этой двусмысленности? Не могли бы вы сохранить тот, где тег используется чаще всего? Если да, можете ли вы предложить, как написать этот код?