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

使用R与Readr扩展.RDS文本语料库时遇as.corpus()错误求助

解决语料库合并报错及PDF文本读取问题

错误根源

Error: as.corpus() only works on corpus objects. 是因为两个语料库的类型不兼容:你同时使用了tm和quanteda包,从.RDS读取的prev_corpus大概率是quanteda的corpus对象,而新创建的corpus是tm的Corpus对象,二者无法通过c()直接合并。

另外,用readr::read_file()读取PDF是错误操作——read_file仅适用于纯文本文件,PDF是二进制格式,这样读取会得到乱码。

修复步骤

1. 正确提取PDF文本(规避pdftools字体报错)

放弃用read_file读PDF,改用pdftools并添加参数跳过字体验证:

library(pdftools)
library(tidyverse)

pdf_text <- lapply(pdf_paths, function(path) {
  # 读取PDF所有页面,合并为单段文本
  pdf_text(path, opw = "", upw = "") %>% 
    str_c(collapse = "\n")
})

若仍报错,可调用系统pdftotext命令(需提前安装该工具):

pdf_text <- lapply(pdf_paths, function(path) {
  temp_txt <- tempfile(fileext = ".txt")
  system(str_glue("pdftotext {shQuote(path)} {shQuote(temp_txt)}"))
  read_file(temp_txt)
})

2. 统一语料库类型并合并

先通过class(prev_corpus)确认原语料库的类型,再选择对应方案:

方案A:原语料库是tm的Corpus对象

library(tm)
# 创建tm格式语料库
new_tm_corpus <- Corpus(VectorSource(pdf_text))
# 给新文档命名(可选,用PDF文件名)
names(new_tm_corpus) <- basename(pdf_paths)
# 合并语料库
combined_corpus <- c(prev_corpus, new_tm_corpus)
# 保存为RDS
saveRDS(combined_corpus, "combined_tm_corpus.RDS")

方案B:原语料库是quanteda的corpus对象

library(quanteda)
# 创建quanteda格式语料库
new_quanteda_corpus <- corpus(pdf_text, docnames = basename(pdf_paths))
# 合并语料库
combined_corpus <- corpus_merge(prev_corpus, new_quanteda_corpus)
# 保存为RDS
saveRDS(combined_corpus, "combined_quanteda_corpus.RDS")

关键提醒

  • 禁止混用tm和quanteda的语料库对象,二者结构完全不同
  • 读取PDF必须用专门的文本提取工具,不能直接读二进制文件
  • 合并后可通过summary(combined_corpus)验证文档总数是否符合预期

内容的提问来源于stack exchange,提问作者Roald Andre Kvarv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:34:56