本文资料

点击下载本文资料


词典污染了

实在抱歉,大邓的粗心导致词典DUTIR被污染。大家如果使用cntext中的DUTIR,麻烦更新至1.7.2版本。

import cntext as ct

print(ct.__version__)
dutir = ct.load_pkl_dict('DUTIR.pkl')
dutir

Run

1.7.1

{'DUTIR': {'哀': ['怀想', '治丝而棼', '伤害',...],
           '好': ['进贤黜奸', '清醇', '放达', ...],
           '惊': ['惊奇不已', '魂惊魄惕', '海外奇谈',...],
           '惧': ['忸忸怩怩', '谈虎色变', '手忙脚乱',...],
           '乐': ['百龄眉寿', '娱心', '如意',...],
           '怒': ['饮恨吞声', '扬眉瞬目',...],   
           '恶': ['出逃', '鱼肉百姓', '移天易日',...]},

 'Desc': '大连理工大学情感本体库,细粒度情感词典。含七大类情绪,依次是哀, 好, 惊, 惧, 乐, 怒, 恶',

 'Referer': '徐琳宏,林鸿飞,潘宇,等.情感词汇本体的构造[J]. 情报学报, 2008, 27(2): 180-185.'}

七大类情绪有:

dutir['DUTIR'].keys()

Run

    dict_keys(['哀', '好', '惊', '惧', '乐', '怒', '恶'])

下面是Bug!

for key in dutir['DUTIR'].keys():
    if '开心' in dutir['DUTIR'][key]:
        print('「开心」出现在情绪【{}】词表中'.format(key))

Run

    「开心」出现在情绪【乐】词表中
    「开心」出现在情绪【恶】词表中

词语「开心」同时出现在情绪【乐】和【恶】


DUTIR词典

在网上找到大连理工大学情感本体文献、词典xlsx文件。

制作方法,把 21 种小情绪汇总到喜怒哀乐等七大类情绪中。词典被污染,很可能是我汇总过程中出的问题。

import pandas as pd

df = pd.read_excel('大连理工大学中文情感词汇本体.xlsx')
df.head()

Run

词语 词性种类 词义数 词义序号 情感分类 强度 极性 辅助情感分类 强度.1 极性.1 Unnamed: 10 Unnamed: 11
0 脏乱 adj 1.0 1.0 NN 7 2 NaN NaN NaN NaN NaN
1 糟报 adj 1.0 1.0 NN 5 2 NaN NaN NaN NaN NaN
2 早衰 adj 1.0 1.0 NE 5 2 NaN NaN NaN NaN NaN
3 责备 verb 1.0 1.0 NN 5 2 NaN NaN NaN NaN NaN
4 贼眼 noun 1.0 1.0 NN 5 2 NaN NaN NaN NaN NaN

汇总七类情绪

#乐
le_cates = ['PA', 'PE']
#好
hao_cates = ['PD', 'PH', 'PG', 'PB', 'PK']
# 怒
nu_cates = ['NA']
#哀
ai_cates = ['NB', 'NJ', 'NH', 'PF']
# 惧
ju_cates = ['NI', 'NC', 'NG']
# 恶
wu_cates = ['NE', 'ND', 'NN', 'NK', 'NL']
# 惊
jing_cates = ['PC']

def emotion(cates):
    dfs = []
    for cate in cates:
        sdf = df[df['情感分类']==cate]
        dfs.append(sdf)
    res_df = pd.concat(dfs, axis=0)
    return res_df['词语'].tolist()

# 情绪【乐】的词语有:
le_words = emotion(cates=le_cates)
print(le_words[:10])

Run

    ['瑞雪', '神采', '喜人', '怡悦', '进益', '奏凯', '鸾凤和鸣', '特等', '欢快', '如意']

制作DUTIR.pkl

将DUTIR介绍、文献出处、对应的词典汇总到字典,并制作生成DUTIR.pkl文件

dutir = dict()

dutir['乐'] = senti(cates=ju_cates)
dutir['好'] = senti(cates=hao_cates)
dutir['怒'] = senti(cates=nu_cates)
dutir['哀'] = senti(cates=ai_cates)
dutir['惧'] = senti(cates=ju_cates)
dutir['恶'] = senti(cates=e_cates)
dutir['惊'] = senti(cates=jing_cates)

data = {'DUTIR': dutir,
        'Desc': '大连理工大学情感本体库,细粒度情感词典。含七大类情绪,依次是哀, 好, 惊, 惧, 乐, 怒, 恶',
        'Referer': '徐琳宏,林鸿飞,潘宇,等.情感词汇本体的构造[J]. 情报学报, 2008, 27(2): 180-185.'}


import pickle

with open('DUTIR.pkl', 'wb') as f:
    pickle.dump(data, f)

更新cntext

解决DUTIR词典问题, 需更新至1.7.9版本。

pip3 install cntext==1.7.9

现在我们检查下刚刚的问题

import cntext as ct

print(ct.__version__)

dutir = ct.load_pkl_dict('DUTIR.pkl')

for key in dutir['DUTIR'].keys():
    if '开心' in dutir['DUTIR'][key]:
        print('「开心」只出现在情绪【{}】词表中'.format(key))

Run

    1.7.9
    「开心」只出现在情绪【恶】词表中



广而告之