根据另一个列的值连续过滤值

时间:2020-01-08 17:47:08

标签: python list dataframe nlp lemmatization

我想为我的训练数据中的三个不同标签创建一个特定的否定词列表。该单词应仅出现在特定标签上,而不是三个。我有一个包含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 :(得分:0)

由于我没有您提供的代码,因此我尝试在此处制作一些随机的熊猫数据框,以便与建议的内容一起使用

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']]中,我们将创建一个列表,其中包含熊猫数据框中每个标签为A的元素的分隔词。

为了弄平单词列表,以便我们只能提取A,B或C中包含的单词,我们使用建议的here

然后我们检查该单词是否位于A,B或C列表中(如果存在),然后将它们添加到A_Words中,等等。

我希望我能帮上忙,如果这不完全是这样的话