Import project files

This commit is contained in:
2026-01-07 17:18:26 +08:00
parent 7d9fff2c34
commit 0b07e63b76
66 changed files with 11497 additions and 0 deletions

63
prd.md Normal file
View File

@@ -0,0 +1,63 @@
目前这里有两个项目文件夹docling和word2markdown它们全部都是用来处理文档格式的转换。
这里的转换主要包括两个转换方向:
一、其他格式转换成markdown格式
1、通用格式转换器docling/docling里面有对应的转换函数主要是docx和pdf等格式转换成markdown格式
2、定制格式转换器word2markdown里面有对应的的转换函数主要是如下几种特殊情况的处理
- 所有非UTF-8编码的文档都需要先转换成UTF-8编码再进行后续的处理
- doc/docx格式中有单行单列的表格需处理为markdown格式中的代码高亮格式
- HTML格式中table标签名全部需要小写
- 删除HTML格式中标签后面多余的换行
- 所有markdown中的::: 的提示块 改为 !!! 的提示块;
- 所有markdown文件的渲染可以设置半角和全角默认是全角
- 所有转换文件中有图片或其他静态资源的存入MinIO中并返回对应的图片URL或其他静态资源的URL
- 所有转换文件中的URL相对路径都需转换成MinIO中的URL
3、文件上传有若干情况
- 单个文件上传;
- 多个文件上传通过资源路径或URL上传
- 非加密压缩文件的上传;
4、批量上传功能
- 可以通过上传一个包含多个文件路径或URL的文本文件来批量上传多个文件
- 可以上传压缩包zip、tar.gz等分步骤完成先上传压缩包前端显示上传文件成功点击开始转换按钮再解压缩将文件中的markdown文件中的相对路径图片等静态资源地址全部转化为minio的地址同时按文件结构将转化好的md文件URL也是存在minio中按json示例文件的格式返回前端给出相应的处理信息方便调试
- 示例的json文件路径为/Users/fanyang/Desktop/FunMD_Convert/批量导入目录树.json
- 处理完之后将压缩文件和服务端已解压本地文件都删除但是就要确保已转换好的md文件和对应的资源都存放在minio中且都返回了URL到正确的json中
- 确保图像等相对路径资源上传到minio中并正确返回URL
- 当markdown和对应的image资源在同一个文件目录下的时候转化后路径提升一级就是正确的markdown文件放在上一级目录下原文件夹就不需要了且根据这个规则返回import.json
二、接口规范
以上所有的能力全部通过python的FastAPI实现接口规范如下
1、所有的接口都需要通过POST方法调用
2、所有的接口都需要返回JSON格式的响应体
3、所有的接口都需要在响应体中包含一个code字段用于表示接口调用是否成功
4、所有的接口都需要在响应体中包含一个msg字段用于表示接口调用的结果信息
5、所有的接口都需要在响应体中包含一个data字段用于表示接口调用的结果数据
三、接口实现
1、所有的接口都需要在FastAPI中实现
2、所有的接口都需要在实现中包含一个try...except...语句,用于捕获异常并返回对应的错误信息;
3、所有的接口都需要在实现中包含一个return语句用于返回对应的响应体
四、接口重构
1、将docling和word2markdown中的转换函数封装成一个类类中包含一个convert方法用于实现格式转换
2、将所有的接口封装成一个类类中包含一个convert方法用于实现接口调用
3、将所有的类封装成一个模块模块中包含一个app对象用于启动FastAPI应用
五、接口测试
1、使用python的unittest模块编写测试用例测试所有的接口是否符合规范
2、使用python的requests模块模拟调用所有的接口测试接口是否正常工作
六、提供前端页面参考docling/app/static/index.html来实现和优化
1. 通过vue3来重构这个页面
2. 可以配置以上的能力,实现针对不同用户的不同配置文件,来提供不同的能力;
七、部署
1、将所有的代码打包成一个docker镜像
2、将这个docker镜像可以本地ssh部署到服务器中服务器无法拉取镜像
3、配置一个ingress用于暴露这个应用
八、其他
1、所有的代码都需要符合PEP8规范
2、所有的接口都需要在注释中包含一个@api标签,用于标识这是一个接口;
3、所有的类都需要在注释中包含一个@class标签,用于标识这是一个类;
4、所有的函数都需要在注释中包含一个@function标签,用于标识这是一个函数;