山大软院创新实训易学探索助手--个人报告(六)
数据预处理:从古籍图片到结构化数据:OCR与XML/Excel转换
一、项目背景
在古籍数字化和大模型训练场景中,我们常面临特殊排版文本的处理需求。本文以44种竖向从右至左排列的繁体古文为研究对象,通过OCR识别、XML结构化处理,最终生成符合大模型训练要求的Excel数据集。
二、技术路线设计

- 图像处理层:PaddleOCR识别竖排文本
- 结构转换层:生成标准XML文件
- 数据整合层:XML转Excel统一存储
三、关键技术实现
3.1 OCR识别与XML生成(Python实现)
核心代码解析
def generate_xml(image_path, xml_path):
# OCR识别(支持中文竖排识别)
result = ocr.ocr(str(image_path), cls=True)
# 从右至左排序逻辑
boxes_texts.sort(key=lambda b: -b[0])
# XML结构生成
root = ET.Element('page', {
'id': xml_id,
'size': f'{width},{height}',
'md5': md5sum
})
# 文本块标注
for idx, (x, y, h, text) in enumerate(boxes_texts, start=1):
style = f'{x},{y},0,{h};f:0,{h-4}'
ET.SubElement(root, 'text', {'id': str(idx+2), 'style': style}).text = text
关键技术点
-
竖排识别优化:
- 使用PaddleOCR的
use_angle_cls=True参数启用方向分类 lang='ch'参数优化中文识别效果
- 使用PaddleOCR的
-
从右至左排序:
boxes_texts.sort(key=lambda b: -b[0]) # 按x坐标降序排列 -
元数据保留:
- 图像MD5校验码
- 图像尺寸与格式
- 创建时间戳
3.2 XML转Excel(Java实现)
核心处理逻辑
public class XmlToExcelConverter {
// 多文件夹批处理
File[] directories = rootDir.listFiles(File::isDirectory);
// 创建Excel工作簿
Workbook workbook = new XSSFWorkbook();
// XML内容提取
StringBuilder content = new StringBuilder();
List<Node> textNodes = document.selectNodes("//text");
}
关键特性
-
批量处理架构:
- 支持多层级目录遍历
- 自动识别index.xml元数据文件
-
数据标准化:
// Excel列设计 headerRow.createCell(0).setCellValue("book_id"); headerRow.createCell(1).setCellValue("book_name"); headerRow.createCell(3).setCellValue("content"); -
内容聚合策略:
- 多XML文件合并为单个Excel
- 章节自动编号
- 文本块换行符分隔
四、成果示例
4.1 图片结构

4.2 XML文件结构
<page id="0891001001.xml" relate="0891001001.jpg" size="5696,4439">
<font id="0">zykkai</font>
<rect id="1" box="105,183,5490,4086" foreground="255,255,255"/>
<rect id="2" box="125,203,5450,4046" foreground="255,255,255"/>
<text id="3" style="4755,291,0,1304;f:0,730">周易內</text>
<text id="4" style="3938,288,0,1309;f:0,737">傳六卷</text>
<text id="5" style="3393,1373,0,345;f:0,322">後學吴讓之署</text>
<text id="6" style="1544,1046,0,374;f:0,358">同治四年湘鄉曽</text>
<text id="7" style="1034,1051,0,374;f:0,370">氏栞于金陵節署</text>
</page>
4.3 Excel数据结构

五、性能优化点
-
OCR加速方案:
- 多进程批量处理
- GPU加速识别
-
内存管理:
try (FileOutputStream fos = new FileOutputStream(outputExcelFile)) { workbook.write(fos); // 自动资源释放 } -
异常处理增强:
- 图像损坏检测(通过MD5校验)
- XML格式验证
六、应用展望
本方案已成功应用于:
- 古籍数字化存档
- 古文大模型预训练
- 文献计量分析
- 跨时代语言演变研究
未来可扩展支持:
- 其他特殊字体识别
- 多语言混合排版处理
- 自动标点复原功能

浙公网安备 33010602011771号