أفضل طريقة لاستخراج النص من مستند Word بدون استخدام COM/أتمتة ؟
سؤال
هل هناك وسيلة معقولة استخراج نص عادي من ملف Word التي لا تعتمد على COM الآلي ؟ (هذا هو ميزة التطبيق على شبكة الإنترنت المنتشرة على غير منصة ويندوز - هذا غير القابلة للتداول في هذه القضية.)
Antiword يبدو أنه قد يكون خيارا معقولا, ولكن يبدو أن ذلك قد يتم التخلي عنها.
الثعبان لن يكون الحل المثالي, ولكن لا يبدو أن تكون متاحة.
المحلول
يمكنني استخدام catdoc أو antiword لهذا ، ما يعطي النتيجة التي هي أسهل إلى تحليل.لقد جزءا لا يتجزأ من هذا الثعبان وظائف, لذلك فمن السهل أن استخدام من تحليل النظام (الذي هو مكتوب في بيثون).
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 إيقاف خط تغليف, راجع للشغل.
نصائح أخرى
(نفس الإجابة استخراج النص من MS word الملفات في بايثون)
استخدام مواليد الثعبان 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)
انظر بيثون DocX الموقع
100% Python, كوم لا ، لا .صافي, لا يوجد جافا لا تحليل تسلسل XML مع regexs ، أي حماقة.
إذا كان كل ما تريد القيام به هو استخراج النص من ملفات Word (.docx), فمن الممكن أن تفعل ذلك فقط مع بيثون.مثل الرجل ستاربوك كتبته تحتاج فقط قم بفك ضغط الملف ومن ثم تحليل 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)
باستخدام أوبن أوفيس API ، بيثون ، أندرو Pitonyak ممتاز على الانترنت الماكرو الكتاب تمكنت من القيام بذلك.القسم 7.16.4 هو المكان المناسب للبدء.
طرف الآخر أن تجعل من العمل دون الحاجة إلى شاشة على الإطلاق هو استخدام الخاصية مخفي:
RO = PropertyValue('ReadOnly', 0, True, 0)
Hidden = PropertyValue('Hidden', 0, True, 0)
xDoc = desktop.loadComponentFromURL( docpath,"_blank", 0, (RO, Hidden,) )
وإلا فإن الوثيقة نقرات على الشاشة (ربما على ويب وحدة التحكم) عند فتحه.
فتح مكتب له API
بالنسبة ملفات docx, تحقق من بيثون السيناريو docx2txt المتاحة في
http://cobweb.ecn.purdue.edu/~كاك/distMisc/docx2txt
من أجل استخراج نص عادي من docx الوثيقة.
تيكا-الثعبان
الثعبان ميناء أباتشي تيكا المكتبة وفقا للوثائق أباتشي تيكا يدعم استخراج النص من أكثر من 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
الرابط الرسمي جيثب
هذا يعمل جيدا ل .doc .odt.
ويدعو أوبن أوفيس على سطر الأوامر إلى تحويل الملف إلى النص, الذي يمكنك ثم ببساطة تحميل في بيثون.
(يبدو أن لديها خيارات تنسيق أخرى ، على الرغم من أنها ليست apparenlty موثقة.)