Лучший способ извлечь текст из документа Word без использования COM / автоматизации? - PullRequest
22 голосов
/ 04 сентября 2008

Есть ли разумный способ извлечь простой текст из файла Word, который не зависит от автоматизации COM? (Это функция для веб-приложения, развернутого на платформе, отличной от Windows - в данном случае это не подлежит обсуждению.)

Антислово может показаться разумным, но похоже, что от него можно отказаться.

Идея Python была бы идеальной, но, по-видимому, недоступной.

Ответы [ 8 ]

20 голосов
/ 30 декабря 2009

(тот же ответ, что и извлечение текста из файлов MS Word в python )

Используйте родной модуль Python docx, который я сделал на этой неделе. Вот как можно извлечь весь текст из документа:

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)

См. Сайт Python DocX

100% Python, без COM, без .net, без Java, без разбора сериализованного XML с регулярными выражениями, без дерьма.

12 голосов
/ 04 сентября 2008

Я использую для этого catdoc или антислово, что бы ни давало результат, который легче всего проанализировать. Я встроил это в функции Python, так что его легко использовать из системы синтаксического анализа (которая написана на 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()

Ключ -w для catdoc отключает перенос строки, кстати.

4 голосов
/ 18 декабря 2013

Если все, что вы хотите сделать, это извлечь текст из файлов Word (.docx), это можно сделать только с помощью Python. Как написал Гай Старбак, вам просто нужно распаковать файл и затем проанализировать XML. Вдохновленный python-docx, я написал простую функцию для этого:

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)
3 голосов
/ 04 сентября 2008

Использование API OpenOffice, Python и Отличная онлайн-книга макроса Эндрю Питоняка Мне удалось это сделать. Раздел 7.16.4 - это место для начала.

Еще один совет, чтобы заставить его работать вообще без экрана - использовать свойство Hidden:

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

В противном случае документ откроется на экране (возможно, на консоли веб-сервера) при его открытии.

1 голос
/ 07 сентября 2009

Для файлов docx ознакомьтесь с сценарием Python docx2txt, доступным по адресу

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

для извлечения простого текста из документа DOCX.

1 голос
/ 04 сентября 2008

Open Office имеет API

0 голосов
/ 18 августа 2018

ТИК-питон

Порт Python библиотеки Apache Tika. Согласно документации, Apache tika поддерживает извлечение текста из более чем 1500 форматов файлов.

Примечание: Также прекрасно работает с pyinstaller

Установить с помощью пункта:

pip install tika

Пример:

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

Ссылка на официальный GitHub

0 голосов
/ 08 мая 2015

Это хорошо сработало для .doc и .odt.

Он вызывает openoffice в командной строке для преобразования вашего файла в текст, который затем вы можете просто загрузить в python.

(Похоже, есть другие варианты формата, хотя они не документированы отдельно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...