其他
cntext库 | 关于DUTIR被污染解决办法
词典污染了
实在抱歉,大邓的粗心导致词典DUTIR被污染。大家如果使用cntext中的DUTIR,麻烦更新至1.7.2版本。
Bug在这里
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.1
「开心」出现在情绪【乐】词表中
「开心」出现在情绪【恶】词表中
词语'开心'同时出现在情绪【乐】和【恶】
DUTIR词典
在网上找到大连理工大学情感本体文献、词典xlsx文件。
制作方法,把 21 种小情绪汇总到喜怒哀乐等七大类情绪中。词典被污染,很可能是我汇总过程中出的问题。
import pandas as pd
df = pd.read_excel('大连理工大学中文情感词汇本体.xlsx')
df.head()
词语 | 词性种类 | 词义数 | 词义序号 | 情感分类 | 强度 | 极性 | 辅助情感分类 | 强度.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.2版本。
pip3 install cntext==1.7.2
现在我们检查下刚刚的问题
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.2
「开心」只出现在情绪【恶】词表中
资料下载
本文资料存到了我的博客内,需要的同学请前往
https://hidadeng.github.io/blog/fixed_dutir_bug/