首页 > 解决方案 > 根据另一列的值过滤一行中的值

问题描述

我想为我的训练数据中的三个不同标签创建一个特定否定词的列表。这个词应该只出现在一个特定的标签上,而不是三个。我有一个包含 3 列的数据框:id、句子、标签

我还有 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

标签: pythonlistdataframenlplemmatization

解决方案


由于我没有您提供的代码,因此我尝试在此处制作一些随机的 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 中,等等。

我希望我能提供帮助,如果它不完全是这个 por


推荐阅读