R初学者求助:Quantida语料库合并报错及网站变量设置问题
解决Quanteda语料库合并时的重复文档名错误
首先咱们先搞明白这个错误的根源:当你分别创建三个语料库时,quanteda默认会给每个语料库的文档命名为1、2、3……这样的序列。当你尝试合并它们时,三个语料库的文档名完全重复,所以才会抛出Cannot combine corpora with duplicated document names的错误。
结合你的需求——既能分析整体文本内容,又能按网站筛选查看差异——最简洁高效的方法是先统一整理数据,再创建语料库,具体步骤如下:
步骤1:给每个数据框添加网站标识列
既然你的原始数据框里没有网站名称,咱们先手动给每个数据框加一列标记来源网站:
# 为每个数据框添加site列,标记网站来源 dataframe_site1$site <- "site1" dataframe_site2$site <- "site2" dataframe_site3$site <- "site3"
步骤2:合并所有数据框
把三个数据框合并成一个完整的数据框,这样后续创建语料库时就能一次性带上网站标记:
# 用dplyr的bind_rows合并(base R的rbind也可以) library(dplyr) combined_df <- bind_rows(dataframe_site1, dataframe_site2, dataframe_site3)
步骤3:从合并后的数据框创建语料库
这一步直接用合并后的dataframe创建语料库,同时把site列指定为文档变量(docvar),这样后续分析时就能轻松按网站筛选:
library(quanteda) corp_tot <- corpus(combined_df$txt, docvars = data.frame(site = combined_df$site))
这样创建出来的语料库既包含了所有网页文本,每个文档又自带对应的网站标记,后续操作非常灵活:
# 示例:筛选site1的语料进行单独分析 corp_site1_subset <- subset(corp_tot, site == "site1")
如果你坚持要分开创建语料库再合并,也可以通过修改每个语料库的文档名来避免重复:
# 给每个语料库的文档名加上网站前缀,确保唯一 corp_site1 <- corpus(dataframe_site1$txt) docnames(corp_site1) <- paste0("site1_", seq_len(nrow(dataframe_site1))) docvars(corp_site1, "site") <- "site1" corp_site2 <- corpus(dataframe_site2$txt) docnames(corp_site2) <- paste0("site2_", seq_len(nrow(dataframe_site2))) docvars(corp_site2, "site") <- "site2" corp_site3 <- corpus(dataframe_site3$txt) docnames(corp_site3) <- paste0("site3_", seq_len(nrow(dataframe_site3))) docvars(corp_site3, "site") <- "site3" # 现在合并就不会报错了 corp_tot <- corp_site1 + corp_site2 + corp_site3
不过第一种方法更符合quanteda的使用习惯,操作也更省心,推荐你优先尝试~
内容的提问来源于stack exchange,提问作者Jess
相关产品推荐
相关产品推荐

