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

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

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

Я хочу создать список слов для каждой метки

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

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

введите описание изображения здесь

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


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')

Файл данных после применения скрипта ниже

введите описание изображения здесь

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


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


person EMMAKENJI    schedule 08.01.2020    source источник


Ответы (1)


Поскольку у меня не было предложенного вами кода, я попытался создать здесь случайный фрейм данных 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 и т. Д.

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

person Túlio    schedule 08.01.2020
comment
Спасибо, но мне кажется, что я неправильно пишу свою проблему, я хотел бы создать список слов из моего лексикона отрицательных слов, который появляется в предложении, помеченном как A, B или C. Эти слова должны быть уникальными для каждого класса, как показано в ожидаемом выходном списке. - person EMMAKENJI; 08.01.2020