Der beste Weg, Text aus einem Word-Dokument zu extrahieren, ohne COM/Automatisierung zu verwenden?

StackOverflow https://stackoverflow.com/questions/42482

  •  09-06-2019
  •  | 
  •  

Frage

Gibt es eine vernünftige Möglichkeit, einfachen Text aus einer Word-Datei zu extrahieren, die nicht auf COM-Automatisierung angewiesen ist?(Dies ist eine Funktion für eine Web-App, die auf einer Nicht-Windows-Plattform bereitgestellt wird – das ist in diesem Fall nicht verhandelbar.)

Antiword scheint eine vernünftige Option zu sein, aber es scheint, als würde man es aufgeben.

Eine Python-Lösung wäre ideal, scheint aber nicht verfügbar zu sein.

War es hilfreich?

Lösung

Ich verwende dafür catdoc oder antiword, je nachdem, welches Ergebnis am einfachsten zu analysieren ist.Ich habe dies in Python-Funktionen eingebettet, sodass es vom Parsing-System (das in Python geschrieben ist) einfach zu verwenden ist.

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()

Der Schalter -w zu catdoc schaltet übrigens den Zeilenumbruch aus.

Andere Tipps

(Gleiche Antwort wie Extrahieren von Text aus MS Word-Dateien in Python)

Verwenden Sie das native Python-Docx-Modul, das ich diese Woche erstellt habe.So extrahieren Sie den gesamten Text aus einem Dokument:

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)

Sehen Python DocX-Site

100 % Python, kein COM, kein .net, kein Java, kein Parsen von serialisiertem XML mit regulären Ausdrücken, kein Mist.

Wenn Sie lediglich Text aus Word-Dateien (.docx) extrahieren möchten, ist dies nur mit Python möglich.Wie Guy Starbuck es geschrieben hat, müssen Sie nur die Datei entpacken und dann das XML analysieren.Inspiriert von python-docx, ich habe ein geschrieben einfache Funktion um dies zu tun:

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)

Verwenden der OpenOffice-API und Python und Andrew Pitonyaks ausgezeichnetes Online-Makrobuch Das ist mir gelungen.Abschnitt 7.16.4 ist der Ausgangspunkt.

Ein weiterer Tipp, damit es funktioniert, ohne dass der Bildschirm überhaupt benötigt wird, ist die Verwendung der Hidden-Eigenschaft:

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

Andernfalls wird das Dokument beim Öffnen auf dem Bildschirm angezeigt (wahrscheinlich auf der Webserver-Konsole).

Open Office verfügt über eine API

Schauen Sie sich für docx-Dateien das Python-Skript docx2txt an, das unter verfügbar ist

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

zum Extrahieren des Klartextes aus einem DOCX-Dokument.

Tika-Python

Eine Python-Portierung der Apache Tika-Bibliothek. Laut Dokumentation unterstützt Apache Tika die Textextraktion aus über 1500 Dateiformaten.

Notiz: Es funktioniert auch charmant mit Pyinstaller

Mit pip installieren:

pip install tika

Probe:

#!/usr/bin/env python
from tika import parser
parsed = parser.from_file('/path/to/file')
print(parsed["metadata"]) #To get the meta data of the file
print(parsed["content"]) # To get the content of the file

Link zum Beamten GitHub

Das hat gut funktioniert für .doc und .odt.

Es ruft OpenOffice in der Befehlszeile auf, um Ihre Datei in Text umzuwandeln, den Sie dann einfach in Python laden können.

(Es scheint andere Formatoptionen zu geben, diese sind jedoch offenbar nicht dokumentiert.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top