无法预测表情符号的情绪
Unable to predict sentiment of emoticons
我正在尝试使用 vader 情绪分析工具[1] 来预测 facebook 评论的情绪,但它无法预测表情符号的情绪,它在某些评论中有效,而在其他一些评论中却无效。
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}
它在某些句子上是运行,但在其他句子上不是,我是从database.Also遍历的,在某些情况下,当我只使用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}
希望这能解决您的问题。
我建议您试试“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}
我正在尝试使用 vader 情绪分析工具[1] 来预测 facebook 评论的情绪,但它无法预测表情符号的情绪,它在某些评论中有效,而在其他一些评论中却无效。
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}
它在某些句子上是运行,但在其他句子上不是,我是从database.Also遍历的,在某些情况下,当我只使用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}
希望这能解决您的问题。
我建议您试试“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}