Apryse OCR(PDFTron.NET 11.3.0)文本提取乱序及表格提取问询
问题分析与解决方案
一、文本提取乱序的排查与修复
1. 排序策略问题
默认文本提取基于文本块坐标排序,若未指定符合阅读逻辑的排序规则,表格区域的表头、内容块可能因坐标计算偏差导致顺序错乱。需确保提取时启用自然阅读顺序排序(从上到下、从左到右)。
2. 代码实现优化
如果你的代码仅用基础的ExtractText()方法,这类方法不处理表格结构,仅按文本块物理位置拼接,容易出现乱序。改用TextExtractor并设置排序模式:
using (PDFDoc doc = new PDFDoc(inputPath)) { doc.InitSecurityHandler(); // 先执行OCR(扫描PDF必须步骤) OCRModule.ProcessPage(doc.GetPage(1), OCRModule.OCRParams()); TextExtractor txtExtractor = new TextExtractor(); // 设置按阅读顺序排序 txtExtractor.SetSortMode(TextExtractor.SortMode.e_sort_by_position); txtExtractor.Begin(doc.GetPage(1)); string extractedText = txtExtractor.GetAsText(); }
注意:扫描PDF必须先完成OCR识别,否则提取的是无结构的图像文本,必然乱序。
3. 图像预处理
若原扫描件存在倾斜、变形,OCR识别出的文本块坐标会偏移,导致排序错误。可先调用ImagePreprocessingModule.Deskew纠正页面倾斜后再执行OCR。
二、表格结构化提取支持情况
Apryse PDFTron 11.3.0完全支持表格识别与结构化提取,可保留文本与表格的先后顺序,并输出带<Table>标签的结构化内容。
1. 结构化提取实现
使用StructuredOutputModule提取包含表格结构的内容,示例代码:
using (PDFDoc doc = new PDFDoc(inputPath)) { doc.InitSecurityHandler(); // 执行OCR(扫描PDF必备) OCRModule ocr = new OCRModule(); ocr.StartOCR(doc, "", OCRModule.OCRParams()); StructuredOutputModule structOutput = new StructuredOutputModule(); var options = new StructuredOutputModule.Options(); options.SetIncludeTables(true); // 启用表格识别 options.SetOutputFormat(StructuredOutputModule.OutputFormat.e_XML); // 输出XML格式 string xmlContent = structOutput.Process(doc, options); // 输出内容中会包含<Table>、<TR>、<TD>等标签,严格保留原文档顺序 }
2. 自定义标签调整
若需要定制<Table>标签格式,可对提取后的XML结果做二次处理,或通过StructuredOutputModule的高级参数调整输出结构。
内容的提问来源于stack exchange,提问作者Kaif Khan
相关产品推荐
相关产品推荐

