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

使用tidytext进行词典式情感分析时遭遇inner_join方法适配错误求助

解决quanteda tokens对象与tidytext inner_join适配问题

问题重现

完成基于词典的情感分析预处理(移除无价值字符、词干提取、停用词移除)后,使用quanteda得到tokens对象,执行以下tidytext情感分析代码时触发错误:

# 获取文本情感
toks %>%
  inner_join(get_sentiments("bing")) %>% # 筛选情感词汇
  dplyr::count(sentiment) %>% # 统计正负情感词数量
  spread(sentiment, n, fill = 0) %>% # 转换为宽格式
  mutate(sentiment = positive - negative) # 计算情感得分

错误提示:

Error in UseMethod("inner_join") :
no applicable method for 'inner_join' applied to an object of class "tokens"

错误原因

inner_join是dplyr包的函数,仅支持**数据框(data.frame/tibble)**类对象,而tokens是quanteda包的专属S4类,无法直接与tidytext的情感词典数据框进行连接操作。

解决方案

提供两种适配方案,可根据工作流习惯选择:

方案1:将quanteda对象转为tidy格式,继续使用tidytext流程

通过quanteda::convert()将dfm对象转换为长格式数据框,再与情感词典关联:

基于你已生成的词干化dfm对象tab的修正代码:

# 加载所需包
library(tidyverse)
library(tidytext)
library(quanteda)

# 将dfm转为tidy格式(每行对应一个文档-词项组合)
tidy_dtm <- convert(tab, to = "data.frame", docvars = TRUE) %>%
  pivot_longer(-id, names_to = "word", values_to = "count") %>%
  filter(count > 0) # 移除词频为0的记录

# 执行情感分析
sentiment_result <- tidy_dtm %>%
  inner_join(get_sentiments("bing"), by = "word") %>%
  group_by(id) %>% # 按文档分组统计
  dplyr::count(sentiment) %>%
  spread(sentiment, n, fill = 0) %>%
  mutate(sentiment_score = positive - negative) %>%
  ungroup()

# 查看结果
sentiment_result

方案2:直接使用quanteda原生情感分析工具

quanteda内置textstat_sentiment()函数,可直接对tokens/dfm对象进行情感分析,无需转换格式,更贴合quanteda工作流:

# 使用quanteda自带的bing情感词典(需确保textdata包已安装)
sentiment_result_quanteda <- textstat_sentiment(tab, dictionary = data_dictionary_Bing)

# 查看结果,包含正负情感词数及情感得分
sentiment_result_quanteda

补充说明

  • 方案1保留了tidytext的语法风格,适合习惯tidyverse工作流的用户;
  • 方案2无需格式转换,处理效率更高,尤其适合大规模文本数据;
  • 注意:词干化后的词汇需与情感词典中的词干匹配,若词典使用原词,可能出现匹配率低的情况,可考虑在预处理时先做情感匹配再词干化,或使用支持词干的情感词典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:24:53