Лучший способ извлечь текст из документа Word без использования COM/автоматизации?
Есть ли разумный способ извлечь простой текст из файла Word, который не зависит от автоматизации COM? (Это функция для веб-приложения, развернутого на платформе, отличной от Windows, которая в этом случае не подлежит обсуждению.)
Кажется, что Antiword может быть разумным вариантом, но похоже, что он может быть оставлен.
Решение Python было бы идеальным, но, похоже, не доступно.
Ответы
Ответ 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,) )
В противном случае документ открывается на экране (возможно, на консоли сервера), когда вы его открываете.
Ответ 6
Для файлов docx ознакомьтесь с Python script docx2txt, доступным в
http://cobweb.ecn.purdue.edu/~kak/distMisc/docx2txt
для извлечения обычного текста из документа docx.
Ответ 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