一种情感分析的方法使用用户设计的规则(有时称为启发式规则)来度量文本的情感。一个常用的基于规则的方法是在文本中寻找关键词,并将每个关键词映射到某部字典或者映射上的数值得分或权重,例如这部字典可以是 Python 的 dict。
# VADER 的唯一不足在于,它只关注其词库中的 7500 个词条
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
sa = SentimentIntensityAnalyzer()
'''
SentimentIntensityAnalyzer.lexicon 包含了词条及其得分
这里的分词器最擅长处理标点符号和表情符号,这样 VADER 才能更好地工作。毕竟,设
计表情符号就是为了表达大量情感
如果在流水线中词干还原工具(或词形归并工具),需要将该词干还原工具
也用于 VADER 词库,使单个词干或词元中的所有词的得分组合起来
'''
print(sa.lexicon)
'''
在 VADER 定义的 7500 个词条中,只有 3 个包含空格,其中的两个实际上是 n-gram,
另一个是表达“kiss”的表情符号
'''
print([(tok, score) for tok, score in sa.lexicon.items() if " " in tok])
# VADER算法用3个不同的分数(正向、负向和中立)来表达情感极性的强度,然后将它们组合在一起得到一个复合的情感倾向性得分
print(sa.polarity_scores(text="Python is very readable and it's great for NLP."))
'''
注意,VADER 对于否定处理得非常好,相比于 not bad,
great 正向情感程度只是略微高一点。VADER 内置的分
词器忽略所有不在其词库中的词,也完全不考虑 n-gram
'''
print(sa.polarity_scores(text="Python is not a bad choice for most applications."))
# 几个极端情感语句
corpus = ["Absolutely perfect! Love it! :-] :-] :-]", "Horrible! Completely useless. :(", "It was OK. Some good and some bad things."]
for doc in corpus:
scores = sa.polarity_scores(doc)
print('{:+}: {}'.format(scores['compound'], doc))