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

