项目启动时间:2025/04/10

最后更新时间:2025/04/10

当前版本:demo-0.110

作者:yyz

Text Wizard

​ 字符操纵 - 大模型驱动的多个功能API组成的字符操纵集成工具

1 DOCX文件的自动排版功能

如何使用

该工具为CLI程序,执行命令如下:

1
2
3
4
5
6
# conda activate text-wizard

# --debug 开启调试模式
# --openai 使用gpt-3.5-turbo进行测试
# 默认使用DeepSeek模型
python word_formatter.py <Input-Docx-File.docx> <Output-Docx-File.docx>

实现思路

将较大的原docx文件分割后(解决大模型上下文长度的问题)使用DeepSeek模型对内容进行推理识别,让模型按json格式输出后汇总到新的docx文件中

难点

  1. docx文件是流式文件; 分割文档时,使用常规方法按字数分隔会导致漏字 漏格式(底层XML被切割) 漏内容的问题。且图片和表格的重新排版难度高
  2. 大模型本身能力不足导致很难准确辨别每一个标题的层级,尤其是文件结构内容复杂时,判断极容易出错,仅凭优化提示词提升效果一般
    • 在前后文太短时,它缕不清先后高低,如可能将 1.1和1.1.1 算作同一级标题
    • 在前后文太长时,它会遗漏数据,如1.1.1和1.1.2之间的所有文字直接全部丢失
  3. 编程语言库对word文档的支持较弱,对于格式敏感的文档 很难实现规范排版

解决原理

  1. 通过判断内容是否为段落的算法,将段落分批传递处理。同时通过判断内容是否为表格或图片的算法,尽可能将原样式原封不动传递。
  2. 为各种标题设立各自的正则表达式,只有常规程序算法检测不了的结构才交给模型解决。 且为模型设置记忆功能,将前部分的json标题总结作为记忆传递给模型
  3. 自写格式应用函数,通过config文件的方式统一管理,提高使用效率

失败的解决思路

  • 先将docx转成pdf,通过对每一页进行读取识别,实现真正的按页拆分
    • X!切割后表格会变得不连续,排版会变的混乱

目前实现的效果

​ 2张图皆为程序生成的docx文件 ​ 蓝色为1级标题、红色为2级标题、绿色为3级标题,针对每一种标题,通过修改配置文件的方式即可更改样式

效果1

​ 对于注中的(1、)避开标题检测,而表格中的符号、数据均与原表格一致。

效果2