解决 AI 生成 Markdown 文档后转换的那些事儿

7,205 阅读3分钟

引言

大家好,今天我们聊聊如何使用 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 到其他格式的转换:

  1. 文档HTML格式化:经过大量的对比和测试,我们发现 lute 库(github.com/88250/lute)的解析功能非常强大,兼容性也非常好,并提供了HTML相关的接口,于是先对 Markdown 文档统一转换为 html 格式。
  2. 文档模板:为了让转换后的文档看起来更加美观,我们会根据需求应用特定的内容 docx 模板。这一步骤确保了文档不仅内容完整,而且格式美观。
  3. 完成转换:最后,我们将 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 生成的内容更好地服务于各行各业。