使用R的pdf_data处理双列PDF时文本拼接错误问题求助
双栏PDF文本提取错位修复方案
你此前的代码仅按照垂直坐标y分组拼接文本,双栏排版下同一y坐标会同时存在左、右两栏的内容,直接拼接就会出现顺序错误。
可以利用pdf_data返回的水平坐标x字段做分栏标记,先按栏排序再按行拼接即可适配双栏场景,完整代码如下:
library(pdftools) library(tidyverse) # 提取目标页内容,保留字体、坐标信息 page_data <- pdf_data("https://www.bankofengland.co.uk/-/media/boe/files/asset-purchase-facility/2009/2009-q1.pdf", font_info = T, opw = "", upw = "")[[3]] # 过滤字体+分栏拼接 page_data %>% filter(font_size >= 10) %>% # 设定分栏阈值,可根据PDF实际页面宽度调整,示例用300作为左右栏分界 mutate(column = ifelse(x < 300, "left", "right")) %>% # 先按栏排序保证左栏全部在前,再按y降序保证内容从上到下排列 arrange(column, desc(y)) %>% # 同一栏内同一垂直高度的文本拼接为一行 group_by(column, y) %>% summarise(text = paste(text, collapse = " "), .groups = "drop") %>% # 输出最终文本 pull(text)
调整说明:代码中的分栏阈值300可根据你处理的PDF实际尺寸修改,可先运行range(page_data$x)获取整页x坐标的范围,取中间值作为分界即可,常规A4幅面双栏PDF的分界通常在280-320区间。该方案完全兼容你现有基于字体大小过滤的逻辑,无需修改原有筛选规则。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

