查看原文
其他

cntext库 | 关于DUTIR被污染解决办法

大邓 大邓和他的Python
2024-09-09



词典污染了

实在抱歉,大邓的粗心导致词典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极性.1Unnamed: 10Unnamed: 11
0脏乱adj1.01.0NN72NaNNaNNaNNaNNaN
1糟报adj1.01.0NN52NaNNaNNaNNaNNaN
2早衰adj1.01.0NE52NaNNaNNaNNaNNaN
3责备verb1.01.0NN52NaNNaNNaNNaNNaN
4贼眼noun1.01.0NN52NaNNaNNaNNaNNaN

汇总七类情绪

#乐
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/


精选文章

长期征稿

长期招募小伙伴

扩增内置pkl | 欢迎各位向cntext库分享情感词典

从符号到嵌入:计算社会科学的两种文本表示

推荐 | 社科(经管)文本分析快速指南

使用cntext训练Glove词嵌入模型

认知的测量 | 向量距离vs语义投影

karateclub库 | 计算社交网络中节点的向量

视频专栏课 | Python网络爬虫与文本分析

文本分析 | 中国企业高管团队创新注意力(含代码)

LIWC vs Python | 文本分析之词典统计法略讲(含代码)

PNAS | 文本网络分析&文化桥梁Python代码实现

BERTopic库 | 使用预训练模型做话题建模

tomotopy | 速度最快的LDA主题模型

文本分析方法在《管理世界》(2021.5)中的应用

100min视频 | Python文本分析与会计

继续滑动看下一个
大邓和他的Python
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存