Python — 解析文件(docx、pdf 和 odt)并将内容转换为我的数据模型

Python -- Parsing files (docx, pdf and odt) and converting the content into my data model

我正在编写一个导入/导出工具,用于导入 docx、pdf 和 odt 文件;其中写了一本书。

我们已经有了一个用于 .epub 格式的工具,并且我们希望在此基础上扩展功能,以便该网站的用户可以拥有更大的灵活性。

到目前为止,我查看了 PDFMiner,还发现 docx 只是基于 openxml 格式,所以 word/document.xml 本质上是包含整个内容的文件,我可以用 lxml 解析它。

我的问题是:我希望解析这些文件的内容,并从该内容中提取章节名称、图像(如果有)和章节文本等内容,以便将内容放入数据模型:

1
Book --> o2m --> Chapter --> o2m --> Image

很明显,PDFMiner 有一个 .get_outlines() 函数可以为我返回 TOC。但它不能将任何返回的元组(章节编号和标题)链接到该章节的实际页面。

更成问题的是 docx/odt;这些只是段落 -- <\\\\w:sdt> -- 元素,带有 attrs 和子元素。

我正在寻找从这些文件类型中推断出某种结构感的想法,如果需要,我可以将这些想法(2 或 3)应用为我们希望通过以下方式导入书籍的用户的建议格式这些文件格式之一。


Textract 是迄今为止我遇到的用于解析不同文件格式的最佳工具。

它可以解析大多数文件格式。

你可以在 Github 上找到该项目

这里是官方文档


(Python 3 答案)

当我在寻找一种读取 .docx 文件的工具时,我在这里找到了一个:http://etienned.github.io/posts/extract-text-from-word-docx-simply/

它所做的只是从 .docx 文件中获取文本并将其作为字符串返回;单独的段落仍然明显分开,因为之间有新的行,但所有其他格式都丢失了。我认为这可能包括丢失尾注和脚注,但如果你想要正文,它会很好。

我在 Windows 10 和 OS X 上都对其进行了测试,并且在两者上都成功运行。这是它导入的内容:

1
2
3
4
5
6
7
import zipfile
try:
    from xml.etree.cElementTree import XML
    print("cElementTree")
except ImportError:
    from xml.etree.ElementTree import XML
    print("ElementTree")

编辑:

如果在函数体中替换

1
'word/document.xml'

1
'word/footnotes.xml'

1
'word/endnotes.xml'

你可以分别得到脚注和尾注。

但是,它们在文本中所在位置的标记丢失了。