不使用COM /自动化从Word文档中提取文本的最佳方法?

时间:2020-03-05 18:47:15  来源:igfitidea点击:

有没有一种合理的方法可以从不依赖COM自动化的Word文件中提取纯文本? (这是在非Windows平台上部署的Web应用程序的功能,在这种情况下是不可协商的。)

Antiword似乎是一个合理的选择,但似乎已被放弃。

Python解决方案将是理想的选择,但似乎尚不可用。

解决方案

回答

Open Office有一个API

回答

通过使用OpenOffice API,Python和Andrew Pitonyak出色的在线宏书,我设法做到了这一点。 7.16.4节是开始的地方。

使它完全不需要屏幕就可以工作的另一个技巧是使用Hidden属性:

RO = PropertyValue('ReadOnly', 0, True, 0)
Hidden = PropertyValue('Hidden', 0, True, 0)
xDoc = desktop.loadComponentFromURL( docpath,"_blank", 0, (RO, Hidden,) )

否则,打开文档时,文档会在屏幕上(可能在Web服务器控制台上)滑动。

回答

我为此使用catdoc或者反字词,无论给出的结果是最容易解析的。我已经将其嵌入到python函数中,因此在解析系统(以python编写)中易于使用。

import os

def doc_to_text_catdoc(filename):
    (fi, fo, fe) = os.popen3('catdoc -w "%s"' % filename)
    fi.close()
    retval = fo.read()
    erroroutput = fe.read()
    fo.close()
    fe.close()
    if not erroroutput:
        return retval
    else:
        raise OSError("Executing the command caused an error: %s" % erroroutput)

# similar doc_to_text_antiword()

-w切换到catdoc会关闭换行,BTW。

回答

对于docx文件,请查看位于以下位置的Python脚本docx2txt

http://cobweb.ecn.purdue.edu/~kak/distMisc/docx2txt

用于从docx文档中提取纯文本。

回答

(与从python中的MS Word文件中提取文本的答案相同)

使用我本周制作的原生Python docx模块。以下是从文档中提取所有文本的方法:

document = opendocx('Hello world.docx')

# This location is where most document content lives 
docbody = document.xpath('/w:document/w:body', namespaces=wordnamespaces)[0]

# Extract all text
print getdocumenttext(document)

请参阅Python DocX网站

100%Python,没有COM,没有.net,没有Java,没有使用正则表达式解析序列化的XML,没有废话。