Фильтрация значений в строке по значению другого столбца - PullRequest
0 голосов
/ 08 января 2020

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

У меня также есть 2 файла различий лексики для позитива (все в лемматизированной форме)

Я хотел бы создать список слов для каждого Ярлыки

До сих пор мне удавалось создавать столбцы, которые отображают отрицательные слова для каждого предложения. но я не знаю, как это сделать после, чтобы выбрать и извлечь слово, уникальное для каждого ярлыка. Это означает слова, которые встречаются только в предложении, помеченном как один из трех классов.

Подводя итог: я хотел бы составить список слов из моей лексики отрицательных слов, который появляется в предложении, помеченном как A, B или C. Эти слова должны быть уникальными для каждого класса, как показано в ожидаемом выходном списке. Файл данных ниже

enter image description here

Часть сценария моего сценария (я просто поместил пример с отрицательные слова


lexiconneg = lexiconneg_feel['Word'].values # a list of negative word
print(lexiconneg)

def extract_word_neg(text, word_list):
    text_list = tokenize_lemmatize_spacy(text) # call tokenize and lemmatisation function using spacy

    intersection = [w for w in text_list if w in word_list]

    return intersection


datafile['list_mots_négatifs'] = datafile['phrases'].apply(extract_word_neg, args= (lexiconneg, ))

datafile.to_excel('négatif_mots.xlsx')

Файл данных после применения приведенного ниже сценария

enter image description here

Так что для моего примера у меня будет следующий список в качестве ожидаемый результат:


A=  problème, polluer, corrosif, pouvoir, sujet
B=  contrer, extrémité, bouillir
C= vider pression

1 Ответ

0 голосов
/ 08 января 2020

Поскольку у меня не было предложенного вами кода, я попытался создать некоторый случайный pandas кадр данных здесь, чтобы работать с тем, что было предложено

dataframe = pd.DataFrame(np.transpose([['problème blabla', 'contrer blabla', 'vider blabla', 'polluer blabla',
                           'corrosif blabla', 'pression blabla', 'extrémité blabla', 'invalid word', 'boullir blabla',
                           'sujet blabla', 'problème blabla', 'invalid word', 'vider blabla', 'corrosif blabla',
                           'boullir blabla', 'contrer blabla', 'invalid word', 'invalid word'],
                         ['A', 'B', 'C', 'A', 'A', 'C', 'B', 'B', 'A', 'A', 'C', 'A', 'B', 'B']]),
                         columns = ['phrases', 'labels'])

A = ['problème', 'polluer', 'corrosif', 'pouvoir', 'sujet']
B = ['contrer', 'extrémité', 'bouillir']
C = ['vider', 'pression']

Способ извлечения "помеченных" слов Исходя из этого, этот кадр будет выглядеть следующим образом:

A_Words = [x for x in sum([y.split() for y in dataframe.phrases[dataframe.labels=='A']], []) if x in A]
B_Words = [x for x in sum([y.split() for y in dataframe.phrases[dataframe.labels=='B']], []) if x in B]
C_Words = [x for x in sum([y.split() for y in dataframe.phrases[dataframe.labels=='C']], []) if x in C]

Итак, просто объясним, что здесь происходит, чтобы увидеть, имеет ли это смысл: в [y.split() for y in dataframe.phrases[dataframe.labels=='A']] мы создаем список, который содержит разделенные слова из каждого элемент в pandas кадре данных, который имеет метку A.

Чтобы сгладить список слов, чтобы мы могли извлечь только слова, содержащиеся в A, B или C, мы используем решение предлагаемый здесь

Затем мы проверяем, находится ли это слово в списках A, B или C, если они есть, то они добавляются в A_Words и т. д. c.

Надеюсь, я мог бы помочь, если бы это было не совсем так

...