自然语言处理--一个基于规则的情感分析器VADER

一种情感分析的方法使用用户设计的规则(有时称为启发式规则)来度量文本的情感。一个常用的基于规则的方法是在文本中寻找关键词,并将每个关键词映射到某部字典或者映射上的数值得分或权重,例如这部字典可以是 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))

你可能感兴趣的:(自然语言处理,python,自然语言处理,算法,情感分析)