ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PDF文本乱序?用PdfPig和文档布局分析还原真实阅读顺序

PDF文本乱序?用PdfPig和文档布局分析还原真实阅读顺序 简介面向文档解析、OCR与数字化归档的C#开发者这套基于PdfPig的文档布局分析资源库主要解决PDF页面中文本、表格、插图和数学符号等区域的自动标识与分类问题。项目不依赖扫描图像而是直接利用PDF内置的字形边框、字体信息完成几何与逻辑布局分析并能生成ALTO、Page XML、TEI、hOCR等标准标注输出便于接入后续信息抽取或阅读排序流程。资源包共67个文件压缩包约13.04MB以16个C#源码文件为核心配合sln/csproj工程配置、14个PDF测试样例、11张PNG效果图及XML/XSD等格式定义另含DlaViewer可视化辅助工具方便读者对照样例理解XY Cut、Docstrum等经典切分算法的实现细节。目前已有498人学习下载适合需要自建版面分析模块或研究PDF文档结构理解的中高级C#工程师。 如果用 PdfPig 从一份双栏 PDF 里直接抽文本你会得到一串让人哭笑不得的内容左边栏读到一半下一句突然跳去右边栏页眉页脚还时不时插进正文中间。我第一次做这个实验时当场愣住群里有人丢了一句PDF 本来就不是给人提取文本用的才点醒我——PDF 里存的是海量带坐标的字形而不是排版完成的文本流。要让程序理解人眼看到的版面必须在拿到字母和坐标之后再额外做一层文档布局分析Document Layout Analysis。DocumentLayoutAnalysis 正是这样一套基于 PdfPig 的 .NET 资源库把白空格切分、近邻聚类、阅读顺序判定这些能力集中到了一起。这篇文章不绕弯子直接讲清楚它解决的问题、核心算法以及怎么在自己项目里跑通适合被 PDF 乱序文本折磨过的后端、算法和数据工程同学参考。1. 版面信息是怎样一步步丢掉的乱序提取的根源1.1 一个双栏PDF的提取噩梦我拿一份双栏排版的论文做了个最简单的实验打开 PDF、取出第一页的所有单词、直接按顺序拼接成字符串。整个流程只用不到十行代码意图也很简单就是想看默认 API 到底会把版面还原成什么样子。这一步几乎每个做过 PDF 抽取的人都跑过但很少有人停下来认真观察输出为什么错、错在哪里。下面是我当时的测试代码using UglyToad.PdfPig; using var document PdfDocument.Open(sample-two-column.pdf); var page document.GetPage(1); var text string.Join( , page.GetWords().Select(w w.Text)); Console.WriteLine(text);输出是一长串Abstract— We present ... 1. Introduction ... related work ... 2. Method ... conclusion ...。初看内容似乎都在可对照版面就发现问题了句子的先后顺序完全不是人眼阅读的顺序。双栏页面里第 1 栏的第 2 段可能和第 2 栏的第 3 段在输出里相邻而第 1 栏的后续段落却被甩到了后面整个逻辑链全断了。为什么会这样因为 PDF 的内容流content stream只记录按什么顺序把字形画上去这个绘制顺序是生成工具的工程师选的和人类的阅读路径没有任何约定关系。有的生成器先写左栏再写右栏有的按文本对象顺序来回穿插页眉页脚、页码、注释框更是被夹在任意位置。你顺着内容流读出来自然就是乱的。还有一个更隐蔽的问题就算顺序对了文本流里也没有段落边界。GetWords()只是把字符串按空白简单拼起来而 PDF 里的换行、缩进、分栏全部体现在坐标变化上。这一行离上一行多远、开头缩进了多少、左右栏之间的空隙有多宽这些信息才是布局分析真正要利用的原料也是普通文本抽取帮不了你的地方。1.2 物理布局和逻辑结构不能混为一谈做布局分析时要把物理布局和逻辑结构分开看。物理布局是眼睛能直接看到的几何事实这一片文字在页面左上本文还有配套的精品资源点击获取
返回列表