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

Quanteda如何创建分组语料库并绘制词汇离散分布图

问题原因

你在语料库构建环节的核心问题是没有提前按newspaper和signs分组合并同组的horoscope文本,直接将原始数据的每一行作为独立文档导入corpus。由于同一个星座对应多个不同日期的记录,docnames出现重复时quanteda会自动添加.1、.2这类后缀避免冲突,最终语料库的文档数等于原始数据行数,才会在绘图时出现数千行的结果。

解决方案

你只需要在构建语料库前,先按分组规则合并同组的所有文本即可,以下是具体实现代码:

单报纸(以Times of India为例)实现

如果你只需要处理单份报纸,每个星座对应1篇文档:

library(dplyr)
library(quanteda)

# 1. 数据预处理:筛选报纸、按日期排序、按星座分组合并文本
h_toi_merged <- horoscopes %>%
  filter(newspaper == "Times of India") %>%
  arrange(date) %>% # 保证文本按日期顺序拼接
  group_by(signs) %>%
  summarise(horoscope_full = paste(horoscope, collapse = " ")) # 同星座所有文本合并为1条

# 2. 构建语料库
horo_corp_toi <- corpus(h_toi_merged, text_field = "horoscope_full")
docnames(horo_corp_toi) <- h_toi_merged$signs # 此时每个星座仅1条记录,不会出现重复后缀

# 3. 绘制词汇离散图,每个星座对应1行
kwic(tokens(horo_corp_toi), pattern = "love") %>%
  textplot_xray()

全报纸实现

如果你需要同时处理所有报纸,每个「报纸+星座」组合对应1篇文档:

library(dplyr)
library(quanteda)

# 1. 数据预处理:按日期排序、按报纸+星座分组合并文本
h_all_merged <- horoscopes %>%
  arrange(date) %>%
  group_by(newspaper, signs) %>%
  summarise(horoscope_full = paste(horoscope, collapse = " ")) %>%
  mutate(doc_id = paste(newspaper, signs, sep = "_")) # 生成唯一文档标识

# 2. 构建语料库
horo_corp_all <- corpus(h_all_merged, text_field = "horoscope_full")
docnames(horo_corp_all) <- h_all_merged$doc_id

# 3. 绘图时可自行筛选对应报纸的文档

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:36:03