如何在R中读取含印地语文本的PDF文件并生成分析用数据框
解决方案
核心问题原因
pdftools、tm等包底层依赖的poppler PDF解析库默认未适配印地语使用的天城文编码,同时系统缺少对应字体支持,导致解析时出现字符映射错误生成乱码。
操作步骤
1. 更新系统poppler依赖(macOS环境)
使用Homebrew安装完整多语言支持的poppler版本,终端执行命令:
brew install poppler --with-all-languages
安装完成后重启R会话,使R调用新版本的poppler库。
2. 替换适配多语言的读取代码
避免使用tm包的readPDF接口,直接使用pdftools结合stringi做编码校验,以下是批量读取所有PDF并生成数据框的完整代码:
# 安装依赖包 install.packages(c("pdftools", "dplyr", "purrr", "stringi")) # 加载包 library(pdftools) library(dplyr) library(purrr) library(stringi) # 显式设置编码环境 Sys.setlocale("LC_CTYPE", "hi_IN.UTF-8") # 配置PDF所在文件夹路径 pdf_dir <- "你的PDF文件所在文件夹路径" pdf_files <- list.files(pdf_dir, pattern = "\\.pdf$", full.names = TRUE) # 定义单PDF读取函数 read_hindi_pdf <- function(file_path) { # 读取PDF文本 raw_text <- pdf_text(file_path) # 校验并修复UTF-8编码 fixed_text <- stri_enc_toutf8(raw_text, validate = TRUE) # 生成单文件数据框 tibble( file_name = basename(file_path), page_num = seq_along(fixed_text), content = fixed_text ) } # 批量读取所有PDF并合并为总数据框 final_df <- map_dfr(pdf_files, read_hindi_pdf)
3. 可选补充操作
如果仍存在乱码,在macOS字体册中安装「Noto Sans Devanagari」「Devanagari MT」等天城文字体,重启R后重新运行代码即可。
内容的提问来源于stack exchange,提问作者Anisha Garg
相关产品推荐
相关产品推荐

