You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中提取PDF正文并移除额外栏位信息以构建语料库

提取带侧边栏PDF正文的R解决方案

针对你需要从带额外信息栏的PDF中提取正文用于文本分析的需求,以下是几种实用的解决方法:

1. 基于固定列宽截取(快速简单)

PDF的侧边栏通常占据固定宽度的页面区域,你可以通过截取每行中正文起始位置后的内容来过滤侧边栏:

library(stringr)
library(purrr)

# 先查看前20行文本,确定正文起始的字符位置(比如第40位)
head(tannhauser, 20)

# 截取每行从指定位置开始的内容,清理空格并过滤空行
cleaned_text <- str_sub(tannhauser, start = 40) |>
  str_squish() |>
  keep(~ .x != "")

注:start参数的数值需要根据你的PDF实际布局调整,通过查看原始文本行的字符分布确定。

2. 正则匹配移除侧边栏(精准匹配特征)

先分析侧边栏的文本特征(比如位于行首/行尾、包含固定关键词、以大量空格与正文分隔),再编写针对性正则表达式移除:

# 示例:移除行首以非空格字符开头、后跟至少5个连续空格的侧边栏内容
cleaned_text <- str_remove_all(tannhauser, "^\\S.*?\\s{5,}") |>
  str_squish() |>
  keep(~ .x != "")

# 如果侧边栏在每行结尾,用以下正则
# cleaned_text <- str_remove_all(tannhauser, "\\s{5,}\\S.*$") |> str_squish() |> keep(~ .x != "")

原理:^\\S.*?\\s{5,}匹配行首的非空格内容,直到出现至少5个连续空格(正文与侧边栏的分隔标志),将这部分侧边栏内容移除。

3. 基于PDF布局分析(最精准)

使用pdftools::pdf_data()获取每个文本块的坐标信息,通过筛选正文区域的x坐标来提取内容:

library(pdftools)
library(dplyr)
library(stringr)

# 获取PDF所有页面的文本布局数据(包含x/y坐标、文本内容)
pdf_layout <- pdf_data("sample.pdf") |>
  bind_rows(.id = "page") |>
  mutate(page = as.integer(page))

# 查看x坐标的分布,确定正文的x起始阈值(比如x>100)
summary(pdf_layout$x)

# 筛选正文区域的文本,按行合并内容
cleaned_text <- pdf_layout |>
  filter(x > 100) |> # 调整x值匹配你的正文起始位置
  group_by(page, y) |> # 按页面和y坐标(同一行)分组
  summarise(text = str_c(text, collapse = " "), .groups = "drop") |>
  arrange(page, y) |>
  pull(text) |>
  str_squish()

这种方法适合复杂布局的PDF,能精准区分侧边栏与正文的位置边界。

额外提示

  • 先通过head(tannhauser, 30)打印部分原始文本,观察侧边栏的位置、内容特征,再选择合适的方法;
  • 如果PDF是扫描件,需要先使用tesseract包进行OCR识别,再进行正文提取;
  • 提取完成后,可以用tidytext包将文本转换为语料库,开展搭配、关键词显著性分析。

内容的提问来源于stack exchange,提问作者Ashley Wu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 00:13:13