R语言文本挖掘:PDF转文本后FindAssocs异常问题求助
解决PDF文本转换后FindAssocs返回全1的问题
我完全懂你碰到的这个坑——用pdf_text()把PDF转成文本后,每一页被当成了独立的语料文档,结果FindAssocs()算出来的关联度全是1,根本没法用。本质原因是这个函数是基于文档级别的共现来计算的:只要两个词同时出现在任意一页(哪怕不是同一页),就会被判定为完全共现,相关系数直接拉满到1。
给你两个实用的解决思路,看你需求选:
思路1:合并所有页面为单一语料文档
这是最直接的解决方案,把所有页面的文本拼接成一个字符串,让Corpus只生成一个文档,这样FindAssocs()就会基于整个PDF的内容来计算词的共现关系了。
示例代码:
# 读取PDF文本 text <- pdf_text(file.choose()) # 把所有页面的文本合并成一个字符串(用换行符分隔页面内容,不影响后续处理) combined_text <- paste(text, collapse = "\n") # 创建语料库,用合并后的文本作为单一数据源 docs <- Corpus(VectorSource(combined_text)) # 接下来做常规的文本预处理(根据你的需求调整) docs <- tm_map(docs, content_transformer(tolower)) docs <- tm_map(docs, removePunctuation) docs <- tm_map(docs, removeNumbers) docs <- tm_map(docs, removeWords, stopwords("english")) # 构建文档-词矩阵 dtm <- DocumentTermMatrix(docs) # 现在调用FindAssocs就能得到正常的关联度结果了 FindAssocs(dtm, "your_target_word", corlimit = 0.3)
思路2:保留页面结构但调整共现计算逻辑
如果你需要保留每一页的独立文档属性,同时想计算同一页面内的词共现关联,那默认的FindAssocs()逻辑就不太适用了。这时候可以考虑:
- 自己计算词在页面内的共现频率,比如统计同时包含两个词的页面数,再除以包含其中任意一个词的页面数
- 改用
quanteda包,它对多文档的共现计算支持更灵活,可以直接计算文档内的共现矩阵
不过除非你有明确的多页面分析需求,否则思路1是最省心的方案,能快速解决你当前的问题。
内容的提问来源于stack exchange,提问作者BadLuckNick
相关产品推荐
相关产品推荐

