写点什么

文档内容结构化在百度文库的技术探索

用户头像
百度Geek说
关注
发布于: 18 小时前
文档内容结构化在百度文库的技术探索

导读:简述百度文库关于各类文档的转码和展现历程,早期的版式数据满足了 PC 端的各类文档阅读体验,随着业务发展的需求迭代,无线端的文档阅读体验亟需提升。版式数据转流式数据过程中,简易的内容结构化满足了 pdf 数据在无线端的重排版。底层解析 ooxml 数据和细致的内容结构化,则带来了不错的 word 无线端重排版效果。从 chart 图片中“从无到有”抽取结构化的元数据,更为用户与文档的互动打开了想象空间


全文 3724 字,预计阅读时间 9 分钟。


一、百度文库中各类文档的展现


文库有数十亿海量文档,包括 word,ppt,excel 和 pdf 等十几种常见办公文档,核心基础服务是文档转码和展现。


为了统一十几种文档的转码和展现方案,不依赖于原文件格式的开档软件,技术调研后,最终方案为任意文档转码为 pdf 格式,解析开源的 pdf 数据格式,加工后形成文库自有文档格式,在 pc 端、无线端排版和渲染。


PC 端渲染采用源于 PDF 的 xreader 版式数据,版式数据指的是每个元素(文字、图片)都有一个坐标信息和元素的宽高信息,以及其他的描述信息。每一个文本片段、图片和其他矢量元素等根据坐标信息在当前版面固定显示。因此,版式数据比较适合用于在 PC 端等比例展现各类文档,版式排版的还原效果较好。


无线端的屏幕尺寸普遍较小,如果将版式数据等比例缩小后排版,整个版面中的文字、公式较小,给阅读带来不便,如图 1 所示。虽然可以放大显示,但显然增加了用户的操作成本。


图 1 无线端采用版式数据进行等比例缩小的版式排版


比较理想的方案是将版式数据转换成流式数据,根据不同的无线端屏幕尺寸,进行重排版。区别于版式数据中每个元素都有当前版面的坐标信息,流式数据没有坐标信息,有的是章节、栏、段落、公式和表格等结构化信息,大量的数据结构信息将最基础的文本、图片关联起来,形成结构化的文档内容,适合各种屏幕尺寸的自适应重排版。

二、文档内容结构化的技术探索

2.1 Retype 流式数据(基于 xreader 版式数据)


文库早期文档内容“版式转流式”的方案,遍历 xreader 版式数据中的每个元素,提取坐标信息 x,y 和元素的宽高 w,h 信息。比较接近的 y 认为是同一行数据,y 接近的情况下,根据 x 和 w 拼接相邻的文本元素、连接相邻的文本和图片。然后就得到当前版面的所有行数据结构 line,根据每个 line 的 y 和 h 信息,将相邻 line 拼接为段落。通过判断当前 line 的 x+w 数据小于版面宽度、以特殊标点结尾,以及下一个 line 的 x 信息蕴含着段首缩进等情况,从而判定一个段落的结束。


以上是“版式转流式”方案的通用思路,当文档的版面结构较为复杂,比如论文、文献等存在大量多栏、图文绕排、表格脚注尾注的情况时,还需要进行 range 识别的预处理,将整个版面分析、切割成多个 range 结构,在每个 range 内再进行“版式转流式”的通用方案,才能得到较好的效果。


这种方案从版式数据中提取了“段落、行“等结构化信息,有助于流式排版。但一些 case 显示这些结构化信息的准确率达不到百分百正确,存在“段落被强制换行,inline 图片位置错误”等情况,且对“公式、图表 chart 和表格”等复杂结构化信息的提取能力较弱。


不同于 pdf 文档中只有元素相对于版面的坐标信息且缺乏内容结构化信息,office 文档如 word 文档,源文档中存在结构化信息,只是在 word 转 pdf 的转码过程中丢失了这些信息。因此,对文库占比较多的 word 文档提取结构化信息和提升无线端流式排版效果,成为阶段性的重要目标。

2.2 BDJson 流式数据(基于 ooxml 数据)


微软 office 历史悠久,word 存在许多版本,简化区分为 doc 二进制复合文档格式和 docx 的 ooxml 文档格式。Doc 二进制复合文档格式较为复杂,且是微软的闭源项目,解析和转码的成本较高。为了简化方案,将 doc 转换成 docx,然后核心方案就是解析 docx 格式,转码,产出 BDJson 格式流式数据。


OOXML 是开源项目,基于 zip+xml 的格式,普通文本及其字符属性、段落属性的读取和解析较为方便,其自带章节、段落和表格等结构化信息,便于流式排版。基于本次排版需求,以及考虑到将来有 word 在线编辑的场景,方案设计为语义级别的精确解析文档,抽取内容和属性,组建 office 数据结构。


章节、段落等数据结构,遵循 ooxml 标准,从 Document.xml 中解析数据后即可组装成对应的数据结构。页眉页脚、脚注尾注等数据结构,Document.xml 中存储的只是索引和基本信息,具体的区域内容需要从其他的 xml 文件中获取,按照索引的对应关系进行拼装,并插入到正文中的具体位置。


一些数据结构因 office 结构与 html 结构的差异性,需要做一些适配工作。例如常见的项目符号与编号,在 word 中可以有 9 层结构,每一层结构都有字符属性、段落属性、tab 设置和图片编号等,需要兼容映射到 html 的 ol、ul 简易结构。表格中合并单元格的行跨、列跨和隐藏被合并单元格,在 office 和 html 中也是有很大差异,需要遍历整个表格,计算转换后进行兼容性转码。


此外,对一些在线编辑场景中涉及的数据结构,也做了提取和转码,例如将 word 中支持的多套公式数据“域公式、mathtype 公式,omath 公式”统一转码成 LaTex 数据格式,不仅便于后续编辑,而且可以适配正文的字体和大小,整体排版效果更统一。


以上技术方案的实施,完美提取了 word 文档中的结构化信息,优化了现有文档转码和展现的流程,如图 2 所示。文档内容结构化信息,使得 word 文档无线端可以实现自适应的流式排版,大为提升了展示效果,如图 3 所示。


图 2 文档转码和展现(版式,流式)


图 3 文档无线端流式排版和公式 LaTex 展现

2.3 chart 图片(或 pdf 数据)中提取结构化数据


在论文、期刊和财经研报等特定类型的 pdf 文档中,经常会有一些图表 chart 信息,这些图表一般以“无结构的 pdf 数据、图片、背景图”的形式出现。提取这些图表信息,将元数据导入到 excel 中,让用户可以重新编辑、观测和生成新的 chart,具有较大的产品价值。


现有的一些工具,一般都是让用户对文档中 chart 所在的区域 range 手动截图,然后人工选择坐标轴原点,输入坐标轴刻度等信息,对 chart 描边等一系列繁琐的操作,且数据提取的正确率不高。


Chart 图片或无结构的 pdf 数据中提取结构化元数据的技术方案可以简化为两大模块:range 识别,元数据提取。

2.3.1 Range 识别


以 pdf 文档举例,首先遍历本页所有元素,将文本碎片 span、图片等框选起来。原始 span 按 y,x 进行相邻 merge,得到大一些的 fragment, 进而聚合成 line。line 区域按文本数量和位置等信息,进行有效性判断,有些可消除。


搜索剩余空间内的空白区域,作为 range 的候选区域。获取页面设置信息,确定页面内容范围。从上往下遍历,先把整行空白的 range 识别出来。按行遍历,如果 line 两端尚有空余,加 2 个两端的 range。用当前的 line 去碰撞已有的 range,若相交,将相交部分消去,会把原有 range 切成多个新的 range。至此,得到紫色的 range 候选区域集合,如图 4 所示。


图 4 range 候选区域集合


遍历 range 候选区域集合,按 range 的位置、宽高进行相邻 range 的合并和重新组合,得到新的一组 range,如图 5 所示。


图 5 range 候选区域集合(合并后)


过滤 range(根据矩形大小、位置、前后的文本 line,ocr 的文本数量等信息),同时对 range 的边缘进行白边切割,最后得到有效 range,如图 6 所示。

图 6 range 候选区域集合(过滤后)

2.3.2 元数据提取

通过 range 识别模块产出的 range 集合,可以进行下一步的元数据提取。不是所有 range 里都是 chart,可能是个简单图片、流程图等。


首先依据 range 信息,对当前页面截取 range 对应的图片,进行图像分析,初步判定是否是 chart 图片并进行初步的 chart 分类,例如柱状图、饼图,如图 7 所示。


图 7 以图片形式展现的 chart


以柱状图举例,基于像素分析和边缘提取算子的预处理,识别出 x 轴、y 轴的候选线条,并依据长度、位置等信息,进行删选,最后得到 xy 轴,组成坐标体系。扫描 xy 轴上的刻度线,此时有较多干扰,可能误差较大,通过像素对比和交叉验证,给轴线补充上刻度线。


完整、正确的坐标体系对于后续的 chart 元数据提取很重要。基于坐标体系,可将整个图片切割成多个 subRange,对 subRange 中的小图进行 ocr,获取其中的文本,即可拼装成 chart 的数据项、各个数据点,经过一系列的数据矫正和重新组合,从而得到整个 chart 的元数据,如图 8 所示。


图 8 从 chart 图片中提取的元数据

三、文档内容结构化的后续发展


随着业务的发展,基于文档整页展现的基础上,如何给用户更好的文档展现和互动效果,对文档转码和展现技术提出了更高的要求,而这一切的基础正是提取细粒度的文档元素和对文档内容进一步的结构化识别和提取。


招聘信息:

百度-文库研发部,团队致力于建设业界领先的在线互动式文档、音频等知识分享平台,十年来汇集了超 9 亿份高价值文档资料,拥有近 40 万认证作者和 2 万家专业权威机构,已成为中国领先的文档与知识服务平台。百度文库坚持以“让每个人平等地提升自我”为目标,努力将知识尽可能地分享到每一个需要的角落。

诚邀 iOS & Android 小伙伴。

关注百度 Geek 说,公众号菜单栏点击内推即可。


推荐阅读:

从 Web 图标演进历史看最佳实践 | 文末送书

百度内容风控词表那些事儿|文末送书

揭秘百度微服务监控:百度游戏服务监控的演进


----------  END  ----------

百度 Geek 说

百度官方技术公众号上线啦!

技术干货 · 行业资讯 · 线上沙龙 · 行业大会

招聘信息 · 内推信息 · 技术书籍 · 百度周边

欢迎各位同学关注

发布于: 18 小时前阅读数: 16
用户头像

百度Geek说

关注

百度官方技术账号 2021.01.22 加入

关注我们,带你了解更多百度技术干货。

评论

发布
暂无评论
文档内容结构化在百度文库的技术探索