查看原文
其他

Asent库 | 英文文本数据情感分析

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


Asent 是一个新的Python情感分析库, 依据情感词典,按照一定的规则,可用于评判词语、句子、文档的情感信息(正、负)。

目前情感计算规则有

  • 否定(即“不高兴”)
  • 加强词(“非常高兴”)
  • 对比共轭(即“但是”)
  • 其他强调标记,如感叹号、大小写和问号。

Asent目前仅支持英语、丹麦、挪威、瑞典4种语言

参考往期文章 建议收藏 | nltk和spacy配置方法 , 需要先下载并配置spacy模型以下将带您逐步了解情绪是如何计算的。

!pip3 install spacy==3.2.0
!pip3 install asent==0.4.2


首先,我们需要一个 spaCy 管道,并且我们需要向其中添加 asent 管道。

import asent
import spacy

# en_core_web_lg是spacy模型,需要单独下载&配置,本文代码才可使用
nlp = spacy.load("en_core_web_lg")

# add the rule-based sentiment model
nlp.add_pipe("asent_en_v1")
<asent.component.Asent at 0x7fd6b3243130>

效价和极性

如下所示, token的效价信息来自于人工标注的词典。例如I am not very happy中词语happy的人类情感评分是2.7。

token_polarity.png)

首先我们查看每个词语对应的效价。

doc = nlp("I am not very happy.")

for token in doc:
    print(token, "\t", token._.valence)
I 0.0
am 0.0
not 0.0
very 0.0
happy 2.7
. 0.0

在该语境中, happy前面有否定词not修饰,所以情感极性方面应该被看做消极的。一般否定词和副词可以将形容词的情感进行反转和放大(缩小)。

for token in doc:
    print(token._.polarity)
polarity=0.0 token=I span=I
polarity=0.0 token=am span=am
polarity=0.0 token=not span=not
polarity=0.0 token=very span=very
polarity=-2.215 token=happy span=not very happy
polarity=0.0 token=. span=.

注意到, 词语在happy拥有-2.215的极性分,该分是由not very happy确定的。


可视化

asent拥有多种情感极性可视化的方法

asent.visualize(doc, style="prediction")

asent.visualize(doc, style="analysis")


for sentence in doc.sents:
    print(sentence._.polarity)
neg=0.391 neu=0.609 pos=0.0 compound=-0.4964 span=I am not very happy.
doc._.polarity
DocPolarityOutput(neg=0.391, neu=0.609, pos=0.0, compound=-0.4964)
doc2 = nlp("I am not very happy.I am very very happy.It is awesome!!")

print('doc2情感极性信息: ', doc2._.polarity)
print()
print('doc2情感得分:', doc2._.polarity.compound)
doc2情感极性信息: neg=0.13 neu=0.536 pos=0.333 compound=0.2794

doc2情感得分: 0.279353567721562

#每个句子的情感极性信息
for sentence in doc2.sents:
    print(sentence._.polarity)
neg=0.391 neu=0.609 pos=0.0 compound=-0.4964 span=I am not very happy.
neg=0.0 neu=0.539 pos=0.461 compound=0.6453 span=I am very very happy.
neg=0.0 neu=0.461 pos=0.539 compound=0.6892 span=It is awesome!!

#每个句子的情感得分
for sentence in doc2.sents:
    print(sentence._.polarity.compound)
-0.4964238981617178
0.6452764659402158
0.689208135386188

精选文章

长期招募小伙伴

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

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

使用cntext训练Glove词嵌入模型

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

Wordify | 发现和区分消费者词汇的工具

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

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

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

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

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

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

Wordify | 发现和区分消费者词汇的工具

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

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

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

Wow~70G上市公司定期报告数据集

doccano|为机器学习建模做数据标注

使用WeasyPrint自动生成pdf报告文件

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

在jupyter内运行R代码


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

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

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