引言
大家好,今天我们聊聊如何使用 Go 语言,转换 Markdown 文档为常用的格式。
在 AIGC(人工智能生成内容)的浪潮中,人工智能在内容生成领域的重要性日益凸显,尤其是在数据分析领域。
AI 经常需要处理或生成 Markdown 格式的文档,这种格式因其轻量级和易读性而在技术社区中广受欢迎。
然而,Markdown 在主流办公软件如 Microsoft Office 中的兼容性问题,以及不同编辑器之间的标准不一致性,常常导致文档转换过程中的挑战。
本文将探讨如何利用AI技术识别和转换 Markdown 文档,以及如何将这些文档转换为 Office 兼容格式(如 docx )或广泛接受的 PDF 格式,提供预加工稿件并合并到日常的工作流程中,从而提高工作效率。
遇到的难题
首先,AI 的输出并不是 100% 稳定可靠的,有时候会输出一些不规范的 Markdown 格式,进而导致格式错乱等兼容性问题。
其次, Markdown 文档在转换为 docx 或 pdf 格式时,常因文档中含有不规则的 HTML 格式内容,进而导致传统格式转换工具 pandoc 转换失败。
特别是图片标签 <img>
,pandoc无法自动下载嵌入文档中的 <img>
标签的图片,导致转换文档后图片丢失。
我们的解决办法
针对这些问题,我们设计了一套流程,用于 Markdown 到其他格式的转换:
- 文档HTML格式化:经过大量的对比和测试,我们发现
lute
库(github.com/88250/lute)的解析功能非常强大,兼容性也非常好,并提供了HTML相关的接口,于是先对 Markdown 文档统一转换为 html 格式。 - 文档模板:为了让转换后的文档看起来更加美观,我们会根据需求应用特定的内容 docx 模板。这一步骤确保了文档不仅内容完整,而且格式美观。
- 完成转换:最后,我们将
lute
库转换得到的html文档,重新格式化为规范化的 Markdown 文档,从而解决HTML混杂带来的问题。结合文档模板,转换成用户需要的格式,如 docx 或 PDF。通过前面的预处理工作,pandoc 能够生成高质量的输出文件。而图片也会因为兼容 Markdown 标准,被 pandoc 准确识别并自动下载嵌入到 docx 文档中。
核心代码如下:
package svc_markdown
import (
// ...
"github.com/88250/lute"
// ...
)
func xxx() {
// ...准备模板文件
// 规范化markdown
lu := lute.New()
html := lu.MarkdownStr("md", param.Markdown)
// 这一步可以转换原先的img标签,因为pandoc不识别html中的img标签。
formated, err := lu.HTML2Markdown(html)
if err != nil {
err = code.GetParamErr("markdown转换失败: " + err.Error())
return
}
if len(formated) <= 0 {
err = code.GetFileConvertErr("转换失败: markdown为空")
return
}
// ...创建临时文件(夹)
// mdFile,规范化后的markdown
// docxFile,用于存放docx文件
// 调用pandoc转换
b := &strings.Builder{}
defer func() {
if iconfig.GetEnv().IsProduction() {
return
}
res.Detail = b.String()
}()
cmd := exec.Command("pandoc", "--verbose", "-f", "markdown", "-t", "docx",
mdFile.Name(),
"-o", docxFileName,
"--reference-doc="+templateFilename,
)
cmd.Stdout = b
cmd.Stderr = b
err = cmd.Run()
if err != nil {
err = code.GetFileConvertErr("转换失败: " + err.Error())
return
}
// ...返回数据
}
应用范围
借助 AI,我们可以做到实时分析游戏客服的聊天记录,感知玩家的声音,进而发现游戏上的问题。
经过 AI 分析,会初步生成一个 Markdown 文档:可能有各种统计图,表格,聊天样本等……
经过运营人员的筛查,二次加工后,再用 pandoc 把 Markdown 文档转换成 docx ,就可以在 Word 里编辑或者打印出来了。
结论
总的来说,这套解决方案不仅让 AI 生成的 Markdown 文档转换变得更加简单高效,还确保了文档内容的完整性和视觉呈现的一致性。
如果你经常需要处理由AI生成的 Markdown 文档,不妨试试这种方法,相信它会让你的工作变得更轻松。
希望这篇文章能帮助大家解决实际工作中遇到的问题,也让 AI 生成的内容更好地服务于各行各业。