Cursor开发实录 — 文档合并

153 阅读10分钟

项目背景:

在b站看教学视频的时候老感觉浪费时间,于是想想有没有办法直接将视频转化为图文,刚开始的思路是想直接用插件提取音频字幕,再看看能不能用大模型识别出对应的关键帧,不过这个版本过于复杂,对我而言根本无法做到,于是想先简化一下。我正好拿到了一个up主教学的ppt,于是想先事实能不能先将ppt和文本先自动匹配。

Coze版

最开始想用直接用Coze,想直接看有没有提取字幕的插件,和pdf转图片的插件,但是用了几个 效果都不理想,几乎没有直接提取字幕的工具,遂放弃。

Dify版

由于无法自动提取字幕,在chrome插件商店用了插件,可以拷贝字幕,不过由应该是语音转的文字,错误比较多,不过由于 gemini-2.0-fash-thinking-exp-1219 过于强大,而且免费,几乎可以将文本完美还原。

看到视频说Cursor可以直接写工作流,于是自己想直接写个工作流,处理pdf和文案,于是让Cursor学习Dify的文档和一些案例。

给Cursor的要求是:

1、可以输入pdf文档与md文件 2、md文档是pdf的详解 3、用程序将pdf转化成图片 4、利用gpt分析图片和文档内容将pdf与md融合成docx

Cursor可以很轻松的写出来。

image.png 但是运行的时候报错。

image 1.png

让Cursor处理半天,搞不定,于是去问Google Gmini,他指出代码没问题,有可能是Dify的问题,于是在Dify的git上发现的却是不支持,要转化为字典之类的,与我想要的相差甚远,感觉也不太好做,于是也放弃。

Gradio版

试了一下感觉也不好写,于是放弃。现在发现是一下子想直接实现所有功能,AI现在似乎还难以直接做到。

tkinter 版

网页应用也不方便,于是想直接开发桌面应用,于是使用 python 的 tkinter 组件。

第一版:基础的合并功能

1、先让Cursor写一个pdf转图片的程序,可以输出预览 2、成功后加入导入MD文件的功能,同样可以预览 3、最后点击导出导出为docx

中间也遇到不少问题,不过Cursor基本都自己解决了。

最后出来的效果:

image 2.png 最后也可以成功合并

image 3.png 最后让Cursor打包成了Windows程序,可以直接运行

第二版:加入大模型分析后合并

1、pdf 加入大模型分析 2、MD也加入大模型分析 3、可以直接预览 4、点击合并后合并

1、首先还是直接先试水处理pdf

image 4.png

image 5.png

2、没有问题后加入分析MD文档,里面出了不少问题,Cursor修改的时候总会改动布局,也许是当时不太熟练,不过最终还是出来了效果。

image 6.png 由于提示词的原因输出内容不对,优化后准确处理pdf与md文档。

由于大模型的原因,其实效果不是特别好

image 7.png

3、调整算法,让程序先判断pdf数量,之后让gpt根据前面图片数量将文件分割

image 8.png

image 9.png

第三版:Gmini算法优化

成功后继续优化,不过我不知道如何和Cursor描述,于是将文件给了Google Gemini,让他帮忙优化

给出了具体的思路(当时的没有了,后来生成的没有当时的惊艳)

好的,理解了你的需求。你希望实现的是 根据图片的内容来匹配对应的 Markdown 文档内容,而不是简单的按顺序或分段匹配。这需要我们从图片中提取信息,并与 Markdown 文档的内容建立关联。

以下是实现这个目标的思路,不涉及具体代码:

1. 图片内容理解(关键步骤):

OCR (光学字符识别): 如果图片中包含文本,首先使用 OCR 技术提取图片中的文字。这可以使用一些成熟的 OCR 库或 API 服务(例如,Google Cloud Vision API, Tesseract)。

图像描述(大模型): 利用图像描述模型(如 GPT-4 Vision)生成图像的文本描述。这个描述应该尽可能详细,包含图片的主题、内容和关键元素。

结合 OCR 和图像描述: 如果图片既有文本又有图像,可以将 OCR 结果和图像描述结合起来,形成更完整的图片信息表示。

2. Markdown 内容理解:

文本预处理: 对 Markdown 文档内容进行预处理,包括:

去除 Markdown 标记:将 *, #, > 等标记转换为纯文本。

分割段落:将 Markdown 内容分割为段落,这通常以空行为分隔。

分词: 将段落分割为词或短语,方便后续的相似度计算。

关键词提取: 从每个 Markdown 段落中提取关键词。可以使用 TF-IDF、TextRank 或其他关键词提取算法。

文本向量化: 将每个段落转化为向量表示。可以使用词向量 (Word2Vec, GloVe, FastText) 或句向量模型 (Sentence-BERT, Universal Sentence Encoder)。

3. 图片和 Markdown 内容匹配:

相似度计算:

将图片内容信息 (OCR + 图像描述) 与 Markdown 段落的文本向量进行相似度计算。

可以使用余弦相似度、欧式距离或其他相似度度量方法。

匹配策略:

最佳匹配: 对于每个图片,找到与其相似度最高的 Markdown 段落,并进行匹配。

阈值匹配: 对于每个图片,找到与其相似度超过特定阈值的 Markdown 段落,进行匹配。可以使用多组匹配结果。

多对多匹配: 如果图片和 Markdown 段落之间存在一对多或多对多关系,可以尝试更复杂的匹配算法。

考虑上下文: 可以考虑 Markdown 段落的上下文信息,例如相邻段落的相似度。

人工校验: 可以提供一个界面让用户手动确认或修改匹配结果。

4. 合并和预览:

按匹配结果显示: 将匹配的图片和 Markdown 段落显示在一起。

允许调整匹配: 提供界面让用户可以调整匹配关系。

生成文档: 将匹配好的图片和 Markdown 内容合并到最终的 Word 文档中。

核心思路总结:

理解图片: 通过 OCR 和图像描述,将图片转化为文本表示。

理解 Markdown: 通过文本预处理、关键词提取和向量化,将 Markdown 段落转化为向量表示。

计算相似度: 通过相似度计算,找到最相关的图片和 Markdown 段落。

匹配和展示: 根据相似度进行匹配,并在预览界面和最终文档中按匹配关系展示。

关键技术点:

OCR 和图像描述: 大模型 API 是关键,但如果不需要,本地也可以部署 OCR 模型。

文本向量化: 需要使用词向量或句向量模型。

相似度计算: 选择合适的相似度度量方法。

这种思路的优点:

基于内容匹配: 不再依赖简单的顺序或分段匹配,而是真正基于图片和 Markdown 内容的语义关联进行匹配。

更智能的匹配: 可以处理图片和 Markdown 段落之间更复杂的对应关系。

这种思路的挑战:

准确性: 如何确保图片理解的准确性(尤其当图片比较复杂时)是关键。

计算复杂度: 文本向量化和相似度计算可能需要较多的计算资源。

希望这个思路对你有帮助!

之后让Gmini直接生成了代码,直接让Cursor复制,可以直接运行,之前用的是gpt4v与gpt4,但是改文效果特别差,改用Gemini,中间改API接口也花了不少时间,不过之后效果明显提升。

gpt4效果,不认识comfyui

image 9.png

Gmini2效果,精准识别comfyui

image 11.png

基本没有明显错误了,效果对比:

原文:首先我们需要安装一个最重要的插件,叫做confi manager,这个呢同样也给了个地址啊,大家可以去看一下,在这里confier manager,然后呢他这个东西是干嘛的呢,就是我刚刚也不是跟大家说,康复I上面你可以做很多自定义的节点,然后一些大神也可以做一些开源的小节点,放在上面,那么这个东西呢就需要一个manager,去给他统筹的管理一下,那么这个插件就非常好了,可以去给我们统筹,怎么去操作呢,也相当简单,你看installation就是这个是为portal,专门为我们这个版本所准备的人,第一步你要装一下git,git是什么东西呢,如果你不装地址,相当于你没法用GITHUB,所以你装一下git,直接进去进去装一下就好了,

GPT4:首先我们需要安装一个最重要的插件,叫做confi manager,这个呢同样也给了个地址啊,大家可以去看一下,在这里confier manager,然后呢他这个东西是干嘛的呢,就是我刚刚也不是跟大家说,康复I上面你可以做很多自定义的节点,然后一些大神也可以做一些开源的小节点,放在上面,那么这个东西呢就需要一个manager,去给他统筹的管理一下,那么这个插件就非常好了,可以去给我们统筹,怎么去操作呢,也相当简单,你看installation就是这个是为portal,专门为我们这个版本所准备的人,第一步你要装一下git,git是什么东西呢,如果你不装地址,相当于你没法用GITHUB,所以你装一下git,直接进去进去装一下就好了,

Gmini2.0:首先我们需要安装一个最重要的插件,叫做Comfy Manager,这个呢,同样也给了个地址啊,大家可以去看一下,在这里Comfy Manager。然后呢,它这个东西是干嘛的呢?就是我刚刚不是跟大家说,ComfyUI上面你可以做很多自定义的节点,然后一些大神也可以做一些开源的小节点,放在上面,那么这个东西呢,就需要一个manager去给它统筹的管理一下,那么这个插件就非常好,可以去给我们统筹。 怎么去操作呢?也相当简单,你看installation,就是这个是为portable,专门为我们这个版本所准备的。第一步你要装一下git,git是什么东西呢?如果你不装git,相当于你没法用GitHub,所以你装一下git,直接进去装一下就好了。

最终输出的的docx效果,合成比较干净,没有乱七八糟的东西 image 11.png

总结

这次开发其实也不算第一次,之前也练习过一些非常非常小的项目,自己一个人单独做一个能用的产品,还是第一次,即使功能也没什么大用。

中间最令我惊艳的其实是还是Google Gmini的能力,真的是太强了,在我问他如何优化合并的时候,他直接出了几乎完整的方案,还包含了详细的算法逻辑(可惜找不到原文了,,) image 12.png 之后生成的代码也毫无问题,也许AGI真的不远了。

不知道Gmini 2.0和o1比效果咋样,也许o1也差不多,但是o1实在太贵了,不敢乱用,免费的Google真的让我感受到现在AI的强大。

用这些AI工具,编程的效率真的会提高很多很多,不过对普通人而言,感觉意义还是不大,复杂的项目,不了解代码逻辑,每次报错都指望AI,Ai现在还不能说完美解决,就像之前想用Coze,dify,Gradio,里面遇到的bug实在无力解决,只能放弃。

后续会接着开发,借助AI,看看能不能实现我最终想用的结果,输入一个视频链接,直接转成文章。