如何使用Python快速构建领域内情感词典

代码底层完全为大牛刘焕勇设计, 原项目地址https://github.com/liuhuanyong/SentimentWordExpansion

一、项目背景

情感分析大多是基于情感词典对文本数据进行分析,所以情感词典好坏、是否完备充足是文本分析的关键。

目前常用的词典都是基于形容词,有

  • 知网HowNet

  • 大连理工大学情感本体库

但是形容词类型的词典在某些情况下不适用,比如

华为手机外壳采用金属制作,更耐摔

由于句子中没有形容词,使用形容词情感词典计算得到的情感得分为0。但是耐摔这个动词具有正面积极情绪,这个句子的情感的分理应为

可见能够简单快速构建不同领域(手机、汽车等)的情感词典十分重要。但是人工构建太慢,如果让机器帮我们把最有可能带情感的候选词找出来,人工再去筛选构建词典,那该多好啊。那么如何构建呢?

二、构建方法

计算机领域有一个算法叫做SO_PMI,互信息。简单的讲个体之间不是完全独立的,往往物以类聚,人以群分。如果我们一开始设定少量的

  • 初始正面种子词

  • 初始负面种子词

程序会按照“物以类聚人以群分”的思路,

  • 根据初始正面种子词找到很多大概率为正面情感的候选词

  • 根据初始负种子词找到很多大概率为负面情感的候选词

这个包原始作者刘焕勇,项目地址https://github.com/liuhuanyong/SentimentWordExpansion 我仅仅做了简单的封装

三、安装

2.1 方法一

最简单的安装,现在由于国内外网络不稳定,运气不好可能需要尝试几次

pip3 install wordexpansion

2.2 加镜像站点

有的童鞋已经把pip默认安装镜像站点改为国内,如果国内镜像还未收录我的这个包,那么可能会安装失败。只能从国外https://pypi.org/simple站点搜索wordexpansion资源并安装

pip3 install wordexpansion -i https://pypi.org/simple

2.3 国内镜像安装

如果国内镜像站点已经收录,那么使用这个会更快

pip3 install wordexpansion -i https://pypi.tuna.tsinghua.edu.cn/simple/

四、使用方法

4.1 文件目录

|--test                           #情感词典扩展与构建测试文件夹
     |--find_newwords.py          #测试代码
     |--test_corpus.txt           #语料(某领域)文本数据,5.5M
     |--test_seed_words.txt       #情感种子词,需要手动构建
     |--neg_candi.txt             #find_newwords.py运行后发现的负面候选词
     |--pos_candi.txt             #find_newwords.py运行后发现的正面候选词

完整项目请移步至https://github.com/thunderhit/wordexpansion

4.2 构建种子词

可能我们希望的情感词典几万个,但是种子词100个(正面词50个,负面词50个)说不定就可以。

手动构建的种子词典testseedwords.txt

  • 每行一个词

  • 每个词用neg或pos标记

  • 词与标记用空格间隔

休克    neg
如出一辙    neg
渴求    neg
扎堆    neg
休整    neg
关门    neg
阴晴不定    neg
喜忧参半    neg
起起伏伏    neg
一厢情愿    neg
松紧    neg
最全    pos
雄风    pos
稳健    pos
稳定    pos
拉平    pos
保供    pos
修正    pos
稳    pos
稳住    pos
保养    pos
...
...

4.2 准备发现情感新词

已经安装好了wordexpansion,现在我们新建一个名为find_newwords.py的测试代码

代码中的

from wordexpansion import ChineseSoPmi
sopmier = ChineseSoPmi(inputtext_file='test_corpus.txt',
                       seedword_txtfile='test_seed_words.txt',
                       pos_candi_txt_file='pos_candi.txt',
                       neg_candi_txtfile='neg_candi.txt')
sopmier.sopmi()

我们的语料数据test_corpus.txt 文件5.5M,100个候选词,运行程序大概耗时60s

4.3 输出的结果

findnewwords.py运行结束后,会在同文件夹内(findnewwords.py所在的文件夹)发现有两个新的txt文件

  • pos_candi.txt

  • neg_candi.txt

打开pos_candi.txt, 我们看到

word,sopmi,polarity,word_length,postag
保持,87.28493062512524,pos,2,v
风险,70.15627986116269,pos,2,n
货币政策,66.28476448498694,pos,4,n
发展,64.40272795986517,pos,2,vn
不要,63.71800916752807,pos,2,df
理念,61.2024367757337,pos,2,n
整体,59.415315156715586,pos,2,n
下,59.321140440512984,pos,1,f
引导,58.5817208758171,pos,2,v
投资,57.71720491331896,pos,2,vn
加强,57.067969337267684,pos,2,v
自己,53.25503772499689,pos,2,r
提升,52.80686380719989,pos,2,v
和,52.12334472663675,pos,1,c
稳步,51.58193211655792,pos,2,d
重要,51.095865548255034,pos,2,a
...

打开neg_candi.txt, 我们看到

word,sopmi,polarity,word_length,postag
心灵,33.17993872989303,neg,2,n
期间,31.77900620939178,neg,2,f
西溪,30.87839808390589,neg,2,ns
人事,29.594976229171877,neg,2,n
复杂,29.47870186147108,neg,2,a
直到,27.86014637934966,neg,2,v
宰客,27.27304813428452,neg,2,nr
保险,26.433136238404746,neg,2,n
迎来,25.83859896903048,neg,2,v
至少,25.105021416064616,neg,2,d
融资,25.09148586460598,neg,2,vn
或,24.48343281812743,neg,1,c
列,22.20695894382675,neg,1,v
存在,22.041049266517774,neg,2,v
...

从上面的结果看,正面候选词较好,负面候选词有点差强人意。虽然差点,但节约了很多很多时间。

现在电脑已经帮我们找出候选词,我们人类最擅长找毛病,对negcandi.txt和poscandi.txt我们人类只需要一个个挑毛病,把不带正负情感的词剔除掉。这样经过一段时间的剔除工作,针对具体研究领域的专业情感词典就构建出来了。

五、注意

1、sopmi算法效果受训练语料影响,语料规模越大,效果越好
2、sopmi算法效率受训练语料影响,语料越大,训练越耗时。100个种子词,5M的数据,大约耗时62.679秒
3、候选词的选择,可根据PMI值,词长,词性设定规则,进行筛选  

近期文章

Python核心技术与实战

Python全栈-60天精通之路

Python网络爬虫与文本数据分析

中文文本数据逻辑性分析库

中文文本分析相关资源汇总

cnsenti中文情绪情感分析库

Python数据分析相关学习资源汇总帖

漂亮~pandas可以无缝衔接Bokeh

综述:文本分析在市场营销研究中的应用

Lazy Prices公司年报内容变动碰上股价偷懒

用python帮你生产指定内容的word文档

2020年B站跨年晚会弹幕内容分析

YelpDaset: 酒店管理类数据集10+G

NRC词语情绪词典和词语色彩词典

Loughran&McDonald金融文本情感分析库

### 回答1: So-PMI扩充情感词典程序是一种用于增强情感词典的方法,它能够自动地从大规模的文本数据中,通过词语的共现频率,计算出词语之间的关联程度,以此来补充情感词典中的缺陷。 该程序的主要思路是以“so-pmi”(Simpson overlap Pointwise Mutual Information)算法为基础,通过计算文本中情感词汇与其他词语之间的共现频率和相关性,然后通过加强相关性强的词内在的情感色彩,进而增强情感词典的效力。 该程序的应用场景非常广泛,包括社交媒体等大量文本数据的情感分析,以及服务于广告等领域的情感定位,通过不断更新和完善情感词典,寻找出最能反映用户情感的词汇,为营销者提供更加精准的关键词。 在实际应用中,拥有一个完善的情感词典对于情感分析的准确性和效率都非常重要,而So-PMI扩充情感词典程序就为这一问题提供了一种新的解决方案。通过该程序的不断优化和迭代,将确保情感词典的不断完善和更新,为用户提供更加精准、高效、全面的情感分析服务。 ### 回答2: So-PMI是基于点互信息(PMI)算法的情感词典扩充程序,用于识别文本中的情感极性(正面或负面),并且可以将其扩充到新的词汇当中。 该程序的工作原理是分析单词之间在语料库中出现的频率,计算出它们之间的PMI值。如果某个词汇与正面评价或负面评价词汇的PMI值比其他一般词汇高,那么该词汇很有可能与情感极性相关。由此,程序可以通过PMI计算的方式来标记新的情感词。 扩充了情感词典之后,So-PMI程序可以更好地理解文本的情感含义,并提供更准确的情感分析。除了文本分析,So-PMI还可以应用于情感识别、舆情分析、社会媒体分析等多个领域。 总之,so-PMI扩充情感词典程序是一种有效的情感分析工具,可以提高文本情感分析的准确性和覆盖面,具有广泛的应用前景。 ### 回答3: So-PMI是一种基于情感词典的自然语言处理技术,其主要应用于对文本情感分析和情感分类。在传统的情感分析方法中,情感词典是关键的组成部分,通过词典中预先定义好的情感词进行情感评估。然而,传统的方法只考虑了单一的情感极性,难以识别多义词的不同情感,也无法识别出带有强烈或微弱情感的词语。特别是在面对语言的多样性和情感隐含的情况下,传统方法可能会遇到困难。 So-PMI方法则通过一种基于单词对之间PMI(点互信息)的计算方法,对情感词典进行扩展和更新。它利用论坛和新闻社交媒体的文本数据,将同一单词和情感词的共现频率和单独出现频率相比较,并计算单词与情感词间的PMI指标。这种方法解决了传统情感词典中存在的单一情感词问题,同时区分不同的极性和强度。因此,So-PMI扩充的情感词典更加准确和全面,更适用于不同场景下的情感分析。 总之,So-PMI扩充情感词典程序是一种基于单词对之间PMI的计算方法,能够有效改善传统情感分析方法的不足,提高情感分析的准确性和细粒度,并且已经在自然语言处理领域得到了广泛应用。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值