【问题标题】:Get sentiment score of emoji #Python [closed]获取表情符号#Python的情绪得分[关闭]
【发布时间】:2020-09-09 08:31:57
【问题描述】:
df
0        NaN
1        NaN
2         ????????
3        NaN
4          ❤
        ... 
26368    NaN
26369    NaN
26370    NaN
26371     ????????
26372    NaN
Name: emojis, Length: 26373, dtype: object

从上面的df中,我想计算每一行中表情符号的情感分数。 如果是 NaN,则返回 NaN。

#!pip install emosent-py
from emosent import get_emoji_sentiment_rank
def emoji_sentiment(text):
    return get_emoji_sentiment_rank(text)["sentiment_score"]

emoji_sentiment("????")
--> 0.221

应用于整列

df['emoji_sentiment'] = df['emojis'].apply(emoji_sentiment)

上面的代码返回KeyError: nan

预期结果:

          df             emoji_sentiment
0        NaN         |         NaN
1        NaN         |         NaN
2         ????????      |  (a decimal number)
3        NaN         |         NaN
4          ❤        |   (a decimal number)
        ... 
26368    NaN         |         NaN
26369    NaN         |         NaN
26370    NaN         |         NaN
26371     ????????       |   (a decimal number)
26372    NaN         |         NaN

【问题讨论】:

  • “上面的代码为每一行返回 NaN。” 如果你去掉 try-catch 会发生什么?引发的异常是什么?
  • 更新了代码,我意识到如果不使用字典,for循环将无法工作,但现在有了apply,我不知道如何修改代码..@GPhilo
  • 你能告诉我们整个错误信息吗?

标签: python pandas emoji sentiment-analysis


【解决方案1】:

根据您的错误,如果文本为 NaN,我猜 get_emoji_sentiment_rank(text)["sentiment_score"] 会失败,因此您可以应用该函数并将更新仅分配给非 nan 的行(最好,但您首先需要使用默认 NaN 值创建列 emoji_sentiment):

df['emoji_sentiment'] = np.NaN # init the value for all rows
not_na_idx = ~df.emojis.isna()
df.loc[not_na_idx, 'emoji_sentiment'] = df.loc[not_na_idx, 'emojis'].apply(emoji_sentiment)

或者你改变emoji_sentiment()的返回:

def emoji_sentiment(text):
    return get_emoji_sentiment_rank(text)["sentiment_score"] if not pd.isna(text) else np.NaN

(丑陋且性能较差,但仍然可行)

【讨论】:

  • 名称:emojis,长度:26373,dtype:bool,'emojis')' 是无效键
  • 我在df.loc[not_na_idx, 'emoji_sentiment'] 行中漏掉了.loc,您能再检查一下吗?
  • KeyError: '\U0001f929\U0001f929' 如果一行仅包含一个表情符号,代码似乎运行良好,但如果单个单元格中有多个表情符号,则代码不起作用。例如,? 有效,但 ?? 无效。
  • 这是来自get_emoji_sentiment_rank 的问题(它可能是为单个表情符号定义的,而不是它们的通用字符串),不幸的是,我无能为力,因为它是来自emosent 的内部细节/跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 2014-12-11
  • 2016-11-06
  • 1970-01-01
  • 2022-11-20
相关资源
最近更新 更多