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

如何从PDF/RTF格式兽医报告中提取指定字段数据导入电子表格

从RTF格式兽医报告中提取结构化数据的实现方案

你之前使用的代码不生效有两个核心原因:一是read.delim仅用于读取固定分隔符的结构化纯文本,无法识别RTF的格式标记;二是grep直接传入文件名不会匹配文件内容,只会匹配文件名本身的字符。

步骤1:将RTF转换为无格式纯文本

首先用专门的工具去掉RTF的格式标签,R环境下可以用striprtf包实现:

# 首次使用先安装依赖包
install.packages("striprtf")
library(striprtf)
library(stringr)

# 读取RTF文件并转为纯文本
raw_content <- read_rtf("你的文件路径.rtf")
full_text <- paste(raw_content, collapse = "\n")

步骤2:按单份报告拆分文本

因为所有报告格式统一,找到每份报告的固定开头标识(比如常规是Animal:开头)拆分内容:

# 按报告开头标识拆分,过滤空内容
report_start_flag <- "Animal: "
report_list <- strsplit(full_text, report_start_flag)[[1]]
report_list <- report_list[nchar(report_list) > 0]
# 补回被拆分掉的开头标识
report_list <- paste0(report_start_flag, report_list)

步骤3:批量提取指定字段内容

按照你需要的字段写匹配规则,提取对应内容存入结构化表格:

# 定义所有需要提取的字段
base_fields <- c("Animal", "Age", "Type", "Gender", "lab ref", "sample date", "received date")
test_fields <- c("Total Protein", "Albumin") # 可自行补充所有需要的检测项
all_fields <- c(base_fields, test_fields)

# 初始化结果表
result_df <- data.frame(matrix(nrow = length(report_list), ncol = length(all_fields)))
colnames(result_df) <- all_fields

# 循环提取每份报告的对应字段
for (idx in seq_along(report_list)) {
  single_report <- report_list[idx]
  for (field in all_fields) {
    # 匹配规则:字段名+任意空格+直到换行的内容
    pattern <- paste0(field, "\\s+([^\\n\\r]+)")
    match_res <- str_match(single_report, pattern)
    if (!is.na(match_res[1,2])) {
      result_df[idx, field] <- trimws(match_res[1,2])
    }
  }
}

步骤4:导出为电子表格兼容格式

直接导出为CSV即可用Excel、WPS等工具打开编辑:

write.csv(result_df, "提取完成的兽医报告数据.csv", row.names = FALSE, na = "")

可选调整项

  • 如果字段名大小写不统一,可以把匹配规则改为regex(pattern, ignore_case = TRUE)忽略大小写
  • 如果检测项数值带单位,可以额外加逻辑提取纯数字:str_extract(匹配到的内容, "[0-9\\.]+")
  • 如果报告有分页符,可以先执行full_text <- gsub("\\f", "", full_text)清除分页符再拆分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:42:01