64 lines
4.6 KiB
Markdown
64 lines
4.6 KiB
Markdown
目前这里有两个项目文件夹,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标签,用于标识这是一个函数;
|