1. 本文针对的范围
页面html上爬取信息形成语料,是通用的语料信息来源。但是,还有一部分语料是来自于过去若干年的积累的pdf/word文档,这些信息都是干货,要找到比较好的清洗办法。
2. 方法
分析一下我们的需求,实际上语料中有较多信息都是段落和表格,把这些信息清洗为markdown信息,就成为大模型的专用语言了。市面上有很多工具包,该怎么选择呢
| 工具 | 优点 | 缺点 |
|---|---|---|
| Pandoc | 支持多种格式转换,功能强大。 | 命令行工具,对初学者不友好。 |
| Mammoth | 专注于从 Word 转换,简单易用。 | 只支持 Word 文档,功能较单一。 |
| MarkdowntoPDF | 支持 Markdown 格式生成 PDF,也能从其他格式转。 | 功能相对基础,转换质量依赖源文件格式。 |
| word2md | 简单易用,专注于从 Word 转换 Markdown。 | 只支持 Word,可能丢失一些格式信息。 |
| PDF2MD | 在线工具,直接转换 PDF 到 Markdown。 | 转换效果不总是完美,复杂布局可能丢失。 |
通过对比以及实验,最终选择pandoc这个工具。思路为:如果是pdf文档,则将pdf转换为word,然后用pandoc解析markdown,然后对解析出来的markdown表格进行处理,得到较为完美的markdown格式。
3. Pandoc解析文档
pandoc官网:https://www.pandoc.org/
pandoc的使用也比较简单,但是需要仔细阅读一下用户手册,选择正确参数,其中转换markdown最关键的format参数,支持markdown、markdown_mmd、markdown_strict、markdown_phpextra,每种分隔支持不同的表格扩展格式,
3.1 扩展的表格格式
在 Pandoc 中,表格支持多种样式和扩展功能,每种表格样式有其独特的语法和用途。以下是五种常见的 Pandoc 表格样式(simple_table、grid_table、table_caption、multiline_table、pipe_table)的介绍及示例。
1. simple_table
功能:最基础的表格语法,不需要分隔行的复杂结构,只需要对齐列即可。
示例:
Header1 Header2
------- --------
Value1 Value2
Value3 Value4
用途:适用于简单的表格,格式简洁,适合快速创建。
grid_table
功能:带有完整网格线的表格,通过 +、- 和 | 符号来创建边框和分隔符。
示例:
+------------+------------+------------+
| Header1 | Header2 | Header3 |
+------------+------------+------------+
| Value1 | Value2 | Value3 |
+------------+------------+------------+
| Value4 | Value5 | Value6 |
+------------+------------+------------+
用途:适用于需要清晰区分每个单元格的表格,视觉效果较强,适合展示结构化的数据。table_caption
功能:为表格添加标题或说明,可以在表格上方或下方显示标题。
示例:
Table 1: This is a table caption
| Header1 | Header2 |
|---|---|
| Value1 | Value2 |
| Value3 | Value4 |
用途:为表格添加注释或标题,适合学术写作或报告中的表格引用。
multiline_table
功能:允许表格单元格中的内容跨多行。
示例:
| Header1 | Header2 |
|-----------|-------------|
| Value1 | This is a |
| multiline | cell text. |
| Value2 | Another row |
用途:适用于表格中某个单元格内容较长,需要占据多行的情况。pipe_table
功能:最常用的表格语法,使用管道符 | 来创建表格。它是 Markdown 中标准的表格格式,简洁且易于使用。
示例:
| Header1 | Header2 |
|---------|---------|
| Value1 | Value2 |
| Value3 | Value4 |
用途:非常适合基本的 Markdown 渲染,常见于 Markdown 文件和文档中。
总结表格样式比较:
| 表格样式 | 优点 | 缺点 |
|---|---|---|
simple_table |
语法简洁,易于快速创建简单表格。 | 不支持复杂结构和标题,缺乏视觉分隔。 |
grid_table |
适合正式文档,网格清晰,适合视觉效果强的表格。 | 语法较为复杂,维护大型表格时不方便。 |
table_caption |
支持添加标题,适合学术写作和报告。 | 语法复杂,不适合简单表格,需依赖渲染工具支持。 |
multiline_table |
支持单元格内容跨行显示,适合内容较长的表格。 | 语法较复杂,可能影响视觉效果。 |
pipe_table |
简单易用,适用于快速创建基本表格。 | 无法提供边框或复杂的样式,布局控制较弱。 |
这些表格样式可以根据需要选择,提供了从简单的列对齐到复杂的标题、跨行单元格等多种表格显示方式。
3.2 选择哪种format
| table扩展 | simple_table | grid_table | table_caption | multiline_table | pipe_table |
|---|---|---|---|---|---|
| markdown | 支持 | 支持 | 支持 | 支持 | 支持 |
| markdown_mmd | 不支持 | 不支持 | 不支持 | 不支持 | 支持 |
| markdown_strict | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 |
| markdown_phpextra | 不支持 | 不支持 | 不支持 | 不支持 | 支持 |
对于markdown处理来说,grid_talbe、multiline_table和simple_table是比较难处理的格式,不选择。根据测试结果,最后markdown_strict生成的table格式都是一致的,都是html的格式,最容易处理,因此最终选择format=markdown_strict。
4 小结
当清洗pdf\word的时候,通过我踩过的各种坑,推荐做法,将文档转为word文档,使用pandoc的markdown_strict,然后手工处理html表格格式为markdown格式,能得到较为完美的markdown格式。