使用golang解析.doc和.docx以获取所有文本?

问题描述 投票:0回答:3

如何使用golang解析word文档“.doc”,“.docx”以获取所有文本?

go ms-word docx doc
3个回答
8
投票

您可以从这些项目中获得一些灵感:

https://github.com/nguyenthenguyen/docx
https://github.com/opencontrol/doc-template

基本上,DOCX 是一个包含 XML 的 Zip 文件。 所有文字都在里面

document.xml

这两个项目所做的都是删除所有 XML 标签,只保留完整的文本。您应该看看这种方法是否也适合您。


0
投票

TL;博士

  1. 使用任何 Go zip 包解压
    docx
    文件
  2. 解析来自
    ‌word/document.xml
  3. 的文本
  4. 如果
    docx
    文件夹中还有任何其他
    word/
    文件,请递归地对每个文件重复 1 和 2 步骤

在大多数情况下……

正如已经提到的,

docx
文件基本上是一个
zip
存档,里面有一堆u200c
xml
文件。

在大多数情况下原始文件中的所有文本都存在于u200cu200cu200c

word/document.xml
中。您可以使用 Go 的标准
xml
包来解析其中的文本。如果您需要有关不同标签类型的信息,还可以查看 OpenXML 文档。

更新。您可以使用此代码顺便说一句。

但是……

但不幸的是,在某些情况下该文件中并不存在所有文本

例如,如果文档有另一个嵌入的

docx
文件(或任何其他格式),它很可能作为单独的文件出现在
word
文件夹(
document.xml
旁边)中。

如果是这种情况,您需要解压每个

docx
并解析它们自己的
document.xml

有关更多详细信息,您可以查看

AltChunk
OpenXML 类以及任何其他相关信息。


0
投票

一个非常简单的解决方案是使用 https://github.com/sajari/docconv

示例代码:

f, err := os.Open("path.docx")
if err != nil {
    panic(err)
}
defer f.Close()

var r io.Reader
r = f

tmpl, _, err := docconv.ConvertDocx(r)
if err != nil {
    return
}

这会将 docx 作为字符串输出返回。

© www.soinside.com 2019 - 2024. All rights reserved.