Meilleur moyen d’extraire du texte d’un document Word sans utiliser COM/automatisation ?

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

  •  09-06-2019
  •  | 
  •  

Question

Existe-t-il un moyen raisonnable d'extraire du texte brut d'un fichier Word qui ne dépend pas de l'automatisation COM ?(Il s'agit d'une fonctionnalité pour une application Web déployée sur une plate-forme non Windows - ce n'est pas négociable dans ce cas.)

Antiword semble être une option raisonnable, mais il semble qu'elle pourrait être abandonnée.

Une solution Python serait idéale, mais ne semble pas disponible.

Était-ce utile?

La solution

J'utilise catdoc ou antiword pour cela, selon ce qui donne le résultat le plus simple à analyser.Je l'ai intégré dans les fonctions python, il est donc facile à utiliser à partir du système d'analyse (qui est écrit 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()

Le commutateur -w vers catdoc désactive le retour à la ligne, BTW.

Autres conseils

(Même réponse que extraire du texte à partir de fichiers MS Word en python)

Utilisez le module natif Python docx que j'ai créé cette semaine.Voici comment extraire tout le texte d'un document :

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)

Voir Site Python DocX

100% Python, pas de COM, pas de .net, pas de Java, pas d'analyse de XML sérialisé avec des expressions régulières, pas de conneries.

Si tout ce que vous souhaitez faire est d'extraire du texte à partir de fichiers Word (.docx), il est possible de le faire uniquement avec Python.Comme Guy Starbuck l'a écrit, il vous suffit de décompresser le fichier puis d'analyser le XML.Inspiré par python-docx, j'ai écrit un fonction simple pour faire ça:

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)

Utilisation de l'API OpenOffice, de Python et L'excellent livre de macros en ligne d'Andrew Pitonyak J'ai réussi à faire ça.La section 7.16.4 est le point de départ.

Une autre astuce pour que cela fonctionne sans avoir besoin de l'écran est d'utiliser la propriété Hidden :

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

Sinon, le document apparaît à l'écran (probablement sur la console du serveur Web) lorsque vous l'ouvrez.

Open Office a un API

Pour les fichiers docx, consultez le script Python docx2txt disponible sur

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

pour extraire le texte brut d'un document docx.

tika-python

Un port Python de la bibliothèque Apache Tika. Selon la documentation, Apache tika prend en charge l'extraction de texte à partir de plus de 1 500 formats de fichiers.

Note: Cela fonctionne également à merveille avec pyinstaller

Installer avec pip :

pip install tika

Échantillon:

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

Lien vers l'officiel GitHub

Cela a bien fonctionné pour .doc et .odt.

Il appelle openoffice sur la ligne de commande pour convertir votre fichier en texte, que vous pouvez ensuite simplement charger en python.

(Il semble avoir d'autres options de format, bien qu'elles ne soient apparemment pas documentées.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top