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
相关产品推荐
相关产品推荐

