2008-09-03 10 views
17

COMオートメーションに依存しないWordファイルからプレーンテキストを抽出する方法はありますか? (これは、Windows以外のプラットフォームにデプロイされたWebアプリケーションの機能です。この場合は対処できません)COM /オートメーションを使わずにWord文書からテキストを抽出する最も良い方法は?

アンチワードは合理的な選択肢のようですが、放棄されたようです。

Pythonソリューションは理想的ですが、利用可能ではないようです。

答えて

9

私はcatdocまたはantiwordを使用していますが、解析するのが最も簡単な結果が得られます。私はこれを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に変更すると、改行がオフになります。 DOCXファイルの場合

+1

注意、https://docs.python.org/3/library/subprocessを参照してください。html#replace-os-popen-os-popen2-os-popen3 – codeape

2

オープンオフィスは、OpenOfficeのAPIを使用してAPI

2

を持っている、とPython、およびAndrew Pitonyak's excellent online macro book私はこれを行うことができました。第7.16.4節は始める場所です。

それがすべてで、画面を必要とせずに動作させるためにもう一つの先端は、Hiddenプロパティを使用することです:

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

画面上にそれ以外の場合は、文書フリックアップ(おそらく、ウェブサーバコンソール上の)あなたがそれを開きます。

17

extracting text from MS word files in pythonと同じ答え)

私は今週行わネイティブの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 site

100%のPython、無COM、ノー.NET、ノージャワ、regexsとなしの解析シリアル化されたXML、ないがらくたを参照してください。

+0

このライブラリを作成していただきありがとうございます。私はあなたが3年前にこれを投稿したことを知っていますが、ライブラリを使ってDOCX文書をHTMLに変換する方法はありますか?乾杯。 –

+0

@mikemaccana .doc(.docxではなく)ファイルも解析できますか? – ofnowhere

+12

StackOverflowで質問する方法があっただけの場合。 – mikemaccana

2

Wordファイル(.docx)からテキストを抽出するだけであれば、Pythonでのみ行うことができます。 Guy Starbuckが書いたように、ファイルを解凍してXMLを解析するだけです。 .DOCと.odtため

try: 
    from xml.etree.cElementTree import XML 
except ImportError: 
    from xml.etree.ElementTree import XML 
import zipfile 


""" 
Module that extract text from MS XML Word document (.docx). 
(Inspired by python-docx <https://github.com/mikemaccana/python-docx>) 
""" 

WORD_NAMESPACE = '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}' 
PARA = WORD_NAMESPACE + 'p' 
TEXT = WORD_NAMESPACE + 't' 


def get_docx_text(path): 
    """ 
    Take the path of a docx file as argument, return the text in unicode. 
    """ 
    document = zipfile.ZipFile(path) 
    xml_content = document.read('word/document.xml') 
    document.close() 
    tree = XML(xml_content) 

    paragraphs = [] 
    for paragraph in tree.getiterator(PARA): 
     texts = [node.text 
       for node in paragraph.getiterator(TEXT) 
       if node.text] 
     if texts: 
      paragraphs.append(''.join(texts)) 

    return '\n\n'.join(paragraphs) 
+0

コードの大部分!コードの背景が黒でない場合、あなたのブログについての小さな発言は、より読みやすくなります。 –

+0

コメントをいただきありがとうございます。問題は、色が自分のサイトと一致するようにGithub CSSを少しハッキングしたことです。しかし、GithubがCSSに変更を加えると、今のようにスタイルシートを再度パッチする必要があります。私はこのアプローチを維持するかどうかわかりません... – Etienne

0

This worked wellpython-docxに触発され、私はこれを行うにはsimple functionを書かれています。

コマンドラインでopenofficeを呼び出して、ファイルをテキストに変換します。これをPythonにロードするだけです。

(これらはapparenlty文書化されていませんけれども他の形式のオプションを持っていると思われる。)のpython 3はpopen3を取り除くこと