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

使用R提取存在换行问题的PDF中经营活动净现金流量数据

R提取PDF中运营现金流数值的解决方案

方案1:手动拼接文本处理换行问题

先把PDF转成文本后,处理换行导致的文本拆分问题,精准定位目标数值:

library(pdftools)
library(stringr)

# 读取PDF并处理文本行
pdf_content <- pdf_text("你的PDF文件路径.pdf")
text_lines <- unlist(strsplit(pdf_content, "\n"))
# 清理空行和多余空格
text_lines <- trimws(text_lines)
text_lines <- text_lines[text_lines != ""]

target_label <- "Net cash from / (used in) operating activities"
extracted_nums <- c()

# 遍历每一行找目标标签
for (line_idx in seq_along(text_lines)) {
  if (grepl(target_label, text_lines[line_idx])) {
    # 先从当前行提取数值
    num <- str_extract(text_lines[line_idx], "\\([0-9,]+\\)|[0-9,]+")
    if (!is.na(num)) {
      extracted_nums <- c(extracted_nums, num)
    } else {
      # 当前行没找到就取下一行的数值(根据实际情况也可以查上一行)
      num <- str_extract(text_lines[line_idx + 1], "\\([0-9,]+\\)|[0-9,]+")
      if (!is.na(num)) {
        extracted_nums <- c(extracted_nums, num)
      }
    }
  }
}

# 输出结果
print(extracted_nums)
  • 核心逻辑:用grepl定位目标文本所在行,再用正则匹配带括号的数值格式,同时覆盖数值和文本同行、换行到下一行的情况。

方案2:用专门的表格提取工具绕开文本换行问题

如果pdftools的文本拆分太乱,试试tabulizer直接提取表格(需要提前安装Java环境):

library(tabulizer)

target_label <- "Net cash from / (used in) operating activities"
extracted_nums <- c()

# 提取PDF里的所有表格
all_tables <- extract_tables("你的PDF文件路径.pdf")

# 遍历表格找目标行
for (table in all_tables) {
  # 找目标标签所在的行
  target_row <- which(grepl(target_label, table[, 1]))
  if (length(target_row) > 0) {
    # 假设数值在表格最后一列,可根据实际调整列索引
    num <- table[target_row, ncol(table)]
    extracted_nums <- c(extracted_nums, num)
  }
}

print(extracted_nums)
  • 注意:如果表格位置特殊,可以用extract_tables的area参数指定表格的坐标范围,提升提取准确率。

实用提示

  • 正则\\([0-9,]+\\)|[0-9,]+能精准匹配带括号的负数(比如(3,785))和普通正数(比如1,258)
  • 运行前可以先打印text_lines看看文本的实际换行情况,再调整行匹配的逻辑
  • 如果PDF有多页,记得循环处理每一页的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:06:04