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

使用Document AI逐行提取文本遇阻,求有效解决方案

问题整理

我需要从医疗报告类文档中逐行提取完整文本(而非拆分的词汇或表格),尝试三种方法均遇到问题:

  • 直接使用Document AI:服务将整行文本拆分为单个词汇,以\n分割,示例输出:

    Eritrocitos\n5,33 \n4,50 a 5,50 \nHemoglobina\n17,2 g \n13

  • 基于多边形(lines对象)提取(Ruby实现):返回空内容,且访问page对象时触发UTF-8编码错误:

    #<ArgumentError: invalid byte sequence in UTF-8> rescued during inspection
    执行代码:

    page.lines.first.layout.text_anchor.content
    
  • 考虑训练自定义模型,但不确定是否有必要

补充:Python版本官方代码调整后,Paragraph和Line仍仅返回单个词汇(如Ferritina\n、379,1 ng/mL\n),GCP平台测试也显示Document AI仅识别单独词汇而非整行。

解决方案

1. 选择适配的Document AI处理器

优先使用Form Parser处理器(针对结构化表单/报告),而非通用OCR处理器:

  • Form Parser会自动识别键值对和视觉行结构,更适配医疗报告的排版逻辑;
  • 如果是扫描生成的PDF,关闭原生PDF解析(设置enable_native_pdf_parsing: false),强制OCR按视觉布局识别行。

2. 后处理拼接整行文本

Document AI返回的Line对象包含该行的所有Word,需手动拼接(部分SDK不会自动合并):

Python示例

from google.cloud import documentai_v1 as documentai

def get_full_lines(document):
    full_lines = []
    for page in document.pages:
        for line in page.lines:
            # 拼接该行所有词汇为完整文本
            line_content = "".join([word.text for word in line.words])
            full_lines.append(line_content)
    return full_lines

Ruby示例

先解决UTF-8编码问题,再拼接词汇:

def get_full_lines(document)
  full_lines = []
  document.pages.each do |page|
    page.lines.each do |line|
      # 修复编码错误
      line_text = line.words.map do |word|
        word.text.force_encoding('ASCII-8BIT').encode('UTF-8', invalid: :replace, undef: :replace)
      end.join
      full_lines << line_text
    end
  end
  full_lines
end

3. 调整OCR识别参数

在请求Document AI时,配置page_segmentation_config强制按行划分:

# Python请求配置示例
request = documentai.ProcessRequest(
    name=processor_name,
    raw_document=raw_document,
    process_options=documentai.ProcessOptions(
        ocr_config=documentai.OcrConfig(
            page_segmentation_config=documentai.PageSegmentationConfig(
                mode=documentai.PageSegmentationConfig.Mode.FORCE_DOCUMENT_PAGE_SEGMENTATION
            )
        )
    )
)

4. 是否需要自定义模型?

如果上述方法仍无法满足需求(如报告排版极不规整),再考虑使用Custom Document Parser训练自定义模型,标注整行作为实体。但医疗报告排版通常规整,Form Parser+后处理即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:41:31