【问题标题】:Filtering values in a row according to the value of another column根据另一列的值过滤一行中的值
【发布时间】:2020-01-08 17:47:08
【问题描述】:

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

【问题讨论】:

    标签: python list dataframe nlp lemmatization


    【解决方案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 中的单词,我们使用建议的解决方案here

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

    我希望我能帮上忙,如果它不完全是这个 por

    【讨论】:

    • 谢谢,但我想我写错了我的问题,我想创建一个我的单词词典的单词列表,它出现在标记为 A、B 或 C 的句子中。这些单词对于每个类应该是唯一的,如预期输出列表中所示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 2022-01-12
    • 2021-06-16
    • 2020-04-05
    • 1970-01-01
    相关资源
    最近更新 更多