أفضل طريقة لاستخراج النص من مستند Word بدون استخدام COM/أتمتة ؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

هل هناك وسيلة معقولة استخراج نص عادي من ملف 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 موثقة.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top