Melhor maneira de extrair o texto de um documento do Word sem usar COM / automação?

votos
19

Existe uma maneira razoável para extrair texto simples a partir de um arquivo do Word que não depende de automação COM? (Este é recurso aa para uma aplicação web implantado em uma plataforma não-Windows -. Isso é inegociável, neste caso)

Antiword parece que pode ser uma opção razoável, mas parece que ele pode ser abandonado.

Uma solução Python seria o ideal, mas não parece estar disponível.

Publicado 03/09/2008 em 21:18
fonte usuário
Em outras línguas...                            


8 respostas

votos
17

(Mesma resposta que extrair texto de arquivos do Word MS em python )

Use o módulo Python docx nativa que fiz esta semana. Veja como extrair todo o texto de um 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)

Veja site do Python DocX

100% Python, não COM, não .net, não Java, não XML serializado analisar com regexs, nenhuma porcaria.

Respondeu 30/12/2009 em 13:23
fonte usuário

votos
9

Eu uso catdoc ou antiword para isso, o que quer que dá o resultado que é o mais fácil de analisar. Eu ter incorporado isso em funções do Python, por isso é fácil de usar a partir do sistema de análise (que é escrito em 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()

A opção -w para catdoc desliga a quebra de linha, BTW.

Respondeu 04/09/2008 em 09:52
fonte usuário

votos
3

Se tudo que você quer fazer é extrair texto de arquivos do Word (docx), é possível fazê-lo apenas com Python. Como Guy Starbuck escreveu, você só precisa descompactar o arquivo e, em seguida, analisar o XML. Inspirado por python-docx, eu escrevi uma função simples de fazer isso:

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)
Respondeu 18/12/2013 em 17:38
fonte usuário

votos
2

Usando a API OpenOffice, e Python, e excelente linha livro macro de Andrew Pitonyak eu consegui fazer isso. Seção 7.16.4 é o lugar para começar.

Uma outra dica para fazer o trabalho sem a necessidade da tela em tudo é usar a propriedade oculta:

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

Caso contrário, os documentos filmes na tela (provavelmente no console webserver) quando você abri-lo.

Respondeu 04/09/2008 em 08:45
fonte usuário

votos
2

Open Office tem uma API

Respondeu 03/09/2008 em 21:20
fonte usuário

votos
1

Para arquivos docx, confira o script Python docx2txt disponível em

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

para extrair o texto sem formatação de um documento docx.

Respondeu 07/09/2009 em 00:44
fonte usuário

votos
0

tika-pitão

Uma porta Python da biblioteca Apache Tika, De acordo com a documentação do Apache tika suporta extração de texto a partir de mais de 1500 formatos de arquivo.

Nota: Também funciona encantadoramente com pyinstaller

Instale com pip:

pip install tika

Amostra:

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

Respondeu 18/08/2018 em 05:32
fonte usuário

votos
0

Isso funcionou bem para .doc e .odt.

Ele chama OpenOffice na linha de comando para converter o arquivo para texto, que você pode então simplesmente carregar em python.

(Parece ter outras opções de formato, embora eles não são apparenlty documentado.)

Respondeu 08/05/2015 em 11:23
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more