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

如何用quanteda筛选SOTU语料库中布什卡特演讲并解决docnames重复错误

解决docnames重复错误并完成词云生成

错误原因

你遇到的docnames must be unique错误,是因为用paste(president, year, sep = ": ")生成的文档名存在重复——比如部分总统同一年有多份演讲记录,导致同一个文档名对应多个文本,而quanteda要求语料库的每个文档名必须唯一。

修正代码并完成需求

以下是完整可运行的代码,包含错误修复、目标演讲筛选和词云生成:

library("quanteda")
library("dplyr")
library("sotu")
library("quanteda.textplots") # 用于生成词云

# 1. 合并元数据与文本,生成唯一文档名
sotu_combined <- sotu_meta %>%
  bind_cols(text = sotu_text) %>%
  # 用make.unique自动处理重复的president+year组合,确保docnames唯一
  mutate(docnames = make.unique(paste(president, year, sep = ": ")))

# 2. 筛选布什(Bush)和卡特(Carter)的演讲
target_sotu <- sotu_combined %>%
  filter(grepl("Bush|Carter", president, ignore.case = TRUE))

# 3. 构建语料库并预处理生成DFM
target_dfm <- target_sotu %>%
  corpus(docid_field = "docnames", text_field = "text") %>%
  dfm(tolower = TRUE) %>% # 统一转小写
  dfm_remove(stopwords("english")) %>% # 移除停用词
  dfm_trim(min_termfreq = 5) # 移除低频词,让词云更聚焦核心词汇

# 4. 生成词云
textplot_wordcloud(target_dfm, 
                   max_words = 150,
                   color = RColorBrewer::brewer.pal(8, "Dark2"))

关键说明

  • 唯一文档名:make.unique()会自动给重复的文档名添加后缀(比如重复的Bush: 1989会变成Bush: 1989.1),彻底解决重复问题。
  • 精准筛选:用grepl("Bush|Carter", president)匹配包含布什或卡特的记录,ignore.case = TRUE避免大小写匹配失误。
  • 预处理优化:增加转小写、过滤低频词的步骤,减少无效词汇干扰,让词云更具参考价值。
  • 词云定制:可通过调整max_words控制显示的词汇数量,用颜色调色板提升词云可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:49:59