template read open font python ms-word

open - read word file in python



¿La mejor forma de extraer texto de un documento de Word sin usar COM/automatización? (7)

Open Office tiene una API

¿Hay alguna forma razonable de extraer texto sin formato de un archivo de Word que no dependa de la automatización COM? (Esta es una función para una aplicación web implementada en una plataforma que no es de Windows, que en este caso no es negociable).

Parece que Antiword podría ser una opción razonable, pero parece que podría abandonarse.

Una solución de Python sería ideal, pero no parece estar disponible.


Usando la API de OpenOffice y Python, y el excelente macro libro en línea de Andrew Pitonyak, logré hacer esto. La sección 7.16.4 es el lugar para comenzar.

Otro consejo para hacer que funcione sin necesitar la pantalla es usar la propiedad Hidden:

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

De lo contrario, el documento se abrirá en la pantalla (probablemente en la consola del servidor web) cuando lo abra.


Utilizo catdoc o antiword para esto, cualquiera que sea el resultado que sea más fácil de analizar. He incorporado esto en las funciones de python, por lo que es fácil de usar desde el sistema de análisis sintáctico (que está escrito en 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()

El -w cambiar a catdoc desactiva el ajuste de línea, por cierto.



Si todo lo que desea hacer es extraer texto de archivos de Word (.docx), solo es posible hacerlo con Python. Al igual que Guy Starbuck lo escribió, solo necesita descomprimir el archivo y luego analizar el XML. Inspirado por python-docx , he escrito una función simple para hacer esto:

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)


(La misma respuesta que extraer texto de archivos de MS Word en python )

Use el módulo nativo Python docx que hice esta semana. A continuación, le mostramos cómo extraer todo el texto de 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)

Ver el sitio de Python DocX

100% Python, sin COM, sin .net, sin Java, sin análisis de XML serializado con expresiones regulares, sin problemas.


Esto funcionó bien para .doc y .odt.

Llama a openoffice en la línea de comando para convertir su archivo a texto, que luego puede cargar en python.

(Parece tener otras opciones de formato, aunque no están completamente documentadas).