Modo migliore per estrarre il testo da un documento Word senza l'utilizzo di COM/automazione?

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

  •  09-06-2019
  •  | 
  •  

Domanda

C'è un modo ragionevole per estrarre testo da un file di Word, che non dipende da COM automazione?(Questa è una funzione di un'applicazione web distribuita su una piattaforma non-Windows - non-negoziabili in questo caso).

Antiword sembra che potrebbe essere un'opzione ragionevole, ma sembra che potrebbe essere abbandonato.

Un Pitone soluzione sarebbe l'ideale, ma non sembra essere disponibile.

È stato utile?

Soluzione

Io uso catdoc o antiword per questo, tutto ciò che dà il risultato che è il più facile da analizzare.Ho incorporato questo in python funzioni, in modo da è facile da utilizzare l'analisi di sistema (che è scritto in 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()

L'opzione-w, catdoc si spegne il capo, BTW.

Altri suggerimenti

(Stessa risposta come estrazione di testo da file di MS word in python)

Utilizzare il nativo di Python docx modulo che ho fatto questa settimana.Ecco come estrarre il testo da un documento:

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)

Vedere Python DocX sito

100% Pitone, no COM, no .net, no Java, non parsing XML serializzato con regexs, non merda.

Se tutti si desidera fare è estrarre il testo da file di Word (.docx), è possibile farlo solo con Python.Come Ragazzo, Starbuck ha scritto, basta decomprimere il file e poi analizzare il file XML.Ispirato python-docx, Ho scritto semplice funzione per fare questo:

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)

Utilizzando OpenOffice API, e Python, e Andrew Pitonyak eccellente online macro libro Sono riuscito a fare questo.Sezione 7.16.4 è il luogo di partenza.

Un altro suggerimento per farlo funzionare senza bisogno schermo è quello di utilizzare la proprietà Hidden:

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

In caso contrario il documento gesti sullo schermo (probabilmente sul webserver console) quando si apre.

Open Office è un API

Per i file docx, controllare lo script Python docx2txt disponibile

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

per estrarre il testo da un documento docx.

tika-python

Un Pitone porta di Apache Tika biblioteca, Secondo la documentazione di Apache tika supporta l'estrazione del testo da oltre 1500 formati di file.

Nota: Funziona anche affascinante con pyinstaller

Installare con pip :

pip install tika

Esempio:

#!/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 ufficiale GitHub

Questo ha funzionato bene per .doc e .odt.

Si chiama openoffice sulla riga di comando per convertire i file di testo, che si può quindi semplicemente caricare in python.

(Sembra di avere altre opzioni di formato, se non sono apparenlty documentato.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top