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

在R中对PDF文件做n-gram分词时unnest_tokens函数报错的解决咨询

解决unnest_tokens()处理PDF语料时的类适配问题

这个报错的核心原因很清晰:unnest_tokens()是为**tidy数据框(data frame)**设计的工具,但你传入的是tm包生成的VCorpus对象——二者的数据结构不兼容,因此找不到对应的处理方法。

要顺利使用tidytext的n-gram分词功能,在调用unnest_tokens()前需要完成一个关键前置操作:将Corpus对象转换为tidy格式的数据框。具体步骤和修正后的代码如下:

步骤1:将Corpus转换为tidy数据框

使用tidyverse生态中的tidy()函数(来自broom包,已包含在tidyverse中),可以把tm的Corpus结构转换成标准的tidy数据框,每一行对应一份文档的内容,同时保留元数据:

docs_tidy <- tidy(docs)

步骤2:执行n-gram分词

转换完成后,就可以正常调用unnest_tokens()生成bigram了:

完整修正代码

library(tm)
library(dplyr)
library(tidytext)
library(tidyverse)

# 读取PDF为Corpus
filedoc <- "Document2019.pdf"
cname <- file.path(filedoc)
docs <- Corpus(URISource(cname), readerControl=list(reader=readPDF, language = "en"))

# 关键转换:将Corpus转为tidy数据框
docs_tidy <- tidy(docs)

# 生成bigram分词
docs_bigrams <- docs_tidy %>% 
  unnest_tokens(bigram, text, token = "ngrams", n = 2)

补充说明

  • 如果你的Corpus包含多份文档,tidy()会自动为每个文档生成一行,并保留id等元数据,方便后续按文档分组分析。
  • unnest_tokens()本身自带文本清洗功能(比如自动转小写、移除标点),如果之前用tm做了额外的文本预处理(比如移除停用词),转换后也可以直接带入使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:20:27