如何在R中正确提取报纸PDF文本?解决文本错位拼接问题
修复报纸PDF文本提取的错位问题
你的代码存在几个关键问题导致文本错位:
- 变量名错误:多处使用
x1但实际变量是text - 盲目替换所有换行:将段落内换行和栏/段落间的空行全部替换为空格,导致不同栏的内容混排
- 错误移除所有非单词字符:破坏了标点(如
U.S.变成U S),同时丢失文本结构
修改后的代码
library(pdftools) library(stringr) # 提取单页PDF文本(头版只有1页) raw_text <- pdf_text("https://www.nytimes.com/images/2013/06/02/nytfrontpage/scan.pdf")[[1]] # 1. 仅替换段落内的单个换行(保留段落/栏之间的空行分隔) clean_text <- str_replace_all(raw_text, "(?<!\\n)\\n(?!\\n)", " ") # 2. 压缩多余空格(不破坏段落空行) clean_text <- str_replace_all(clean_text, "\\s{2,}", " ") clean_text <- str_replace_all(clean_text, "\\n\\s*\\n", "\\n\\n") # 可选:移除开头结尾的空白字符 clean_text <- str_trim(clean_text)
关键改进说明
- 区分换行类型:用正则表达式
(?<!\\n)\\n(?!\\n)匹配段落内的单个换行(前后都不是换行),替换为空格;保留段落/栏之间的空行(\\n\\n)作为内容分隔,避免不同栏的标题、正文混排 - 保留标点符号:不再用
\\W移除所有非单词字符,仅处理多余空格,保持文本的原始语义 - 明确单页提取:直接取
[[1]]提取第一页文本,避免后续处理多页的冗余
效果验证
处理后,标题US and China Will Hold Talks About Hacking会保持完整,不会被其他栏的AS SYRIANS FIGHT, SECTARIAN STRIFE等内容插入,不同栏的内容会以空行分隔,结构更清晰。
内容的提问来源于stack exchange,提问作者James Rider
相关产品推荐
相关产品推荐

