无法预测表情符号的情绪

时间:2018-08-31 06:54:33

标签: python-3.x machine-learning utf-8 nltk sentiment-analysis

我正在尝试使用vader情绪分析工具预测Facebook评论的情绪[1],但是它无法预测表情符号的情绪,它在某些注释中起作用,而在另一些注释中却没有。

result=db.post.find() 
analyzer=SentimentIntensityAnalyzer()
for sentence in sentences:
    vs=analyzer.polarity_scores(sentence)
    print("{:-<65} {}".format(sentence,str(vs)))

输出的摘录是-

I am rishav ---------------------------------------------------- {'neg': 0.0, 'neu': 0.615, 'pos': 0.385, 'compound': 0.3612}
Woohooo✌️------------------------------------------------------- {'neg': 0.0, 'neu': 1.0, 'pos': 0.0, 'compound': 0.0}

它在某些句子上运行,而在其他句子上却不在,我正在从数据库中遍历。此外,在某些情况下,当我仅使用1个图释时,它可以工作,但多次使用,则不起作用。

如何解决此错误?

[1]:Vader Sentiment Analysis tool

2 个答案:

答案 0 :(得分:1)

您的代码似乎还不错,但您的示例却没有。 如果您经过VADER代码,则首先从字典中获取每个单词的分数。为此,使用空格将句子切成薄片。 在您提供的示例中,表情符号之间没有空格,甚至单词也没有。因此VADER会将其视为一个单词。

您可以使用您的代码进行验证

analyzer=SentimentIntensityAnalyzer()

sentences = ["Woohooo✌️", "Woohooo  ✌️"]

for sentence in sentences:
    vs=analyzer.polarity_scores(sentence)
    print("{:-<65} {}".format(sentence,str(vs)))

输出为:

Woohooo✌️------------------------------------------------------- {'neg': 0.0, 'neu': 1.0, 'pos': 0.0, 'compound': 0.0}
Woohooo  ✌️----------------------------------------------------- {'neg': 0.0, 'neu': 0.446, 'pos': 0.554, 'compound': 0.7351}

希望这可以解决您的问题。

答案 1 :(得分:0)

我建议您尝试“emot”库:

https://github.com/NeelShah18/emot

text = ':-) Woohooo?✌️'

def clean_mean(val):
    return val.replace('_', ' ').replace('-', ' ').replace(':', ' ')

for emoti in emot.emo_unicode.EMOTICONS:
    if emoti in text:
        text = text.replace(emoti, clean_mean(emot.emo_unicode.EMOTICONS.get(emoti, '')))
        print(emoti)
        
for emoti in emot.emo_unicode.UNICODE_EMO:
    if emoti in text:
        text = text.replace(emoti, clean_mean(emot.emo_unicode.UNICODE_EMO.get(emoti, '')))
        print(emoti)
        
for emoti in emot.emo_unicode.EMOTICONS_EMO:
    if emoti in text:
        text = text.replace(emoti, clean_mean(emot.emo_unicode.EMOTICONS_EMO.get(emoti, '')))
        print(emoti)
        
print(text)  


analyser.polarity_scores(text)  

输出:

{'neg': 0.0, 'neu': 0.294, 'pos': 0.706, 'compound': 0.9501}