Подтвердить что ты не робот

Лучший способ извлечь текст из документа Word без использования COM/автоматизации?

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

Кажется, что Antiword может быть разумным вариантом, но похоже, что он может быть оставлен.

Решение Python было бы идеальным, но, похоже, не доступно.

4b9b3361

Ответ 1

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

Ответ 2

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

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

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, no.net, нет Java, без синтаксического анализа сериализованного XML с регулярными выражениями, без дерьма.

Ответ 3

Если все, что вы хотите сделать, это извлечение текста из файлов 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)

Ответ 4

Open Office имеет API

Ответ 5

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

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

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

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

Ответ 7

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

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

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

Ответ 8

ТИК-питон

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

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

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

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