本文资料
词典污染了
实在抱歉,大邓的粗心导致词典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
「开心」只出现在情绪【恶】词表中