Python -- 解析文件(docx、pdf 和 odt)并将内容转换为我的数据模型
我正在写一个工具,用来导入和导出docx、pdf和odt文件,这些文件里写了一本书。
我们已经有一个处理.epub格式的工具了,现在想把功能扩展一下,让网站的用户有更多的选择。
到目前为止,我看过了PDFMiner,还发现docx格式其实是基于openxml格式的,所以word/document.xml文件实际上包含了所有内容,我可以用lxml来解析它。
我想问的是:我希望能解析这些文件的内容,从中提取出章节名称、图片(如果有的话)和章节文本,这样我就可以把这些内容放进一个数据模型里:
Book --> o2m --> Chapter --> o2m --> Image
显然,PDFMiner有一个.get_outlines()的函数,可以帮我返回目录。但它无法把返回的章节号和标题与实际的章节页面关联起来。
更麻烦的是,docx和odt文件里的内容只是段落——<\w:sdt>——元素,里面有属性和子元素。
我在寻找一些想法,想从这些文件类型中提取出一些结构,如果需要的话,我可以把这些想法(2到3个)作为建议格式提供给希望通过这些文件格式导入书籍的用户。
2 个回答
(Python 3 的回答)
当我在寻找一个可以读取 .docx 文件的工具时,我在这里找到了一个:http://etienned.github.io/posts/extract-text-from-word-docx-simply/
这个工具的功能很简单,就是从 .docx 文件中提取文本,并把它作为字符串返回;不同的段落之间依然有明显的分隔,因为中间有换行符,但其他的格式信息就会丢失。我觉得这可能包括脚注和尾注的丢失,不过如果你只想要正文内容,这个工具效果很好。
我在 Windows 10 和 OS X 上都测试过,两个系统上都能顺利运行。下面是它导入的内容:
import zipfile
try:
from xml.etree.cElementTree import XML
print("cElementTree")
except ImportError:
from xml.etree.ElementTree import XML
print("ElementTree")
编辑:
如果在函数的主体部分,你把
'word/document.xml'
替换成
'word/footnotes.xml'
或者
'word/endnotes.xml'
你就可以分别获取脚注和尾注了。
不过,文本中它们的位置标记会丢失。