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