如何修改R脚本实现PDF关键词存在性统计(非频次)
解决PDF关键词检测结果格式问题的方案
核心思路
先批量读取所有PDF的文本内容,再针对每个关键词做存在性检查,最后将结果整理为PDF名称、关键词、存在状态的长格式结构,彻底避免冗余行与多列问题。
完整代码示例
# 加载所需包 library(pdftools) library(stringr) library(dplyr) library(tidyr) # 1. 配置参数 pdf_folder <- "./pdfs" # 替换为你的PDF文件夹路径 keywords <- c("数据分析", "机器学习", "R语言") # 替换为你的目标关键词列表 # 2. 获取所有PDF文件路径与名称 pdf_files <- list.files(path = pdf_folder, pattern = "\\.pdf$", full.names = TRUE) pdf_names <- basename(pdf_files) # 提取纯PDF文件名(不含路径) # 3. 定义关键词检测函数 check_keyword_in_pdf <- function(pdf_path, keyword) { # 读取PDF文本,处理读取失败的情况 pdf_text <- tryCatch( pdf_text(pdf_path), error = function(e) { warning(paste("无法读取文件:", pdf_path)) return("") } ) # 合并所有页文本并检测关键词(忽略大小写) full_text <- str_c(pdf_text, collapse = " ") if_else(str_detect(full_text, regex(keyword, ignore_case = TRUE)), 1, 0) } # 4. 生成标准格式结果 result_df <- expand_grid(pdf_name = pdf_names, keyword = keywords) %>% mutate( exists = pmap_int(list(pdf_path = pdf_files[match(pdf_name, pdf_names)], keyword = keyword), check_keyword_in_pdf) ) # 查看最终结果 print(result_df)
关键修改说明
- 用
expand_grid生成所有PDF与关键词的组合,确保每个PDF-关键词对对应唯一一行,消除冗余 - 通过
pmap_int批量调用检测函数,精准匹配每个组合的存在状态 - 提取
basename(pdf_files)得到纯文件名,避免路径干扰结果列 - 加入
tryCatch捕获读取失败的PDF,防止脚本中断
内容的提问来源于stack exchange,提问作者Steven Morrison
相关产品推荐
相关产品推荐

