Asent庫 | 英文文字資料情感分析

語言: CN / TW / HK

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程式碼