You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SentimentIntensityAnalyzer时遇TypeError:'encoding'为无效关键字参数

解决TypeError: 'encoding' is an invalid keyword argument for this function的问题

首先,我注意到你贴出来的代码里并没有用到encoding参数,但你遇到了这个错误——这说明要么是你实际运行的代码和贴的不一样,要么是某个隐含调用里不小心传了这个参数。先帮你拆解可能的原因和解决方案:

可能的错误来源

最常见的情况是你错误地给polarity_scores()方法传了encoding参数。VADER的polarity_scores只接受一个位置参数(要分析的文本字符串),完全不需要指定编码——只要你的body已经是解码后的字符串(而不是字节类型),直接传进去就行。如果你的代码里写了类似analyzer.polarity_scores(body, encoding='utf-8')的语句,删掉encoding参数就好。

另外,也有可能是pd.read_csv()的调用出了问题?不过你贴的代码里是pd.read_csv('df.csv'),没加encoding,如果实际加了的话,除非你的pandas版本极其老旧(比如0.12之前),否则read_csv是支持encoding参数的,这种情况建议升级pandas。

优化你的情感分析代码

另外,你当前的代码还有两个可以改进的地方,顺便帮你调整了:

  • 不要在get_sentiment函数里重复初始化SentimentIntensityAnalyzer——每次初始化都会加载模型,非常影响效率,初始化一次就够了。
  • 用df.apply()代替iterrows()遍历DataFrame,前者的效率高得多,代码也更简洁。
  • 增加了空值/非字符串的处理,避免遇到异常数据时报错。

调整后的代码:

import pandas as pd
from nltk.sentiment import SentimentIntensityAnalyzer

# 只初始化一次分析器
analyzer = SentimentIntensityAnalyzer()

df = pd.read_csv('df.csv')

def get_sentiment(body):
    # 处理空值或非字符串的情况,返回默认值
    if pd.isna(body) or not isinstance(body, str):
        return 0.0
    scores = analyzer.polarity_scores(body)
    return scores['compound']

# 直接计算并新增情感分列
df['sentiment_compound'] = df['body'].apply(get_sentiment)

额外检查点

  • 确认你的row['body']列都是字符串类型:可以用df['body'].dtype查看,如果是object类型但包含非字符串数据,建议先做清洗。
  • 如果你确实是在读取CSV时遇到的encoding错误,试试去掉encoding参数,或者确认你的CSV文件的实际编码(比如utf-8、gbk等),再正确传入。

内容的提问来源于stack exchange,提问作者jhaywoo8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:09:20