2008-09-03 16 views
17

COM otomasyonuna bağlı olmayan bir Word dosyasından düz metin çıkarmak için makul bir yol var mı? (Bu, Windows olmayan bir platformda dağıtılan bir web uygulaması için bir özelliktir - bu durumda pazarlık yapılamaz.)COM/otomasyonu kullanmadan bir Word belgesinden metin almanın en iyi yolu?

Sözlük, makul bir seçenek olabilir gibi görünüyor, ancak terk edilmiş gibi görünüyor.

Bir Python çözümü ideal olabilir, ancak mevcut görünmüyor.

cevap

9

Bunu yapmak için en kolay sonuç ne olursa olsun, bunun için catdoc veya antiword kullanıyorum. Bunu python işlevlerine gömdüm, böylece ayrıştırma sisteminden (python ile yazılmış olan) kullanımı kolaydır.

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() 

Catdoc'a -w anahtarı, satır sarma BTW'yi kapatır.

docx dosyaları için
+1

Not https://docs.python.org/3/library/subprocess bakın.html # replaceing-os-popen-os-popen2-os-popen3 – codeape

2

Open Office OpenOffice API kullanarak bir API

2

vardır ve Python ve Andrew Pitonyak's excellent online macro book bunu başardı. Bölüm 7.16.4, başlangıç ​​noktasıdır. açtığınızda (muhtemelen web sunucusu konsolda) ekranda

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

Aksi belge harfinin yukarı:

Bir başka ipucu hepsi de ekrana gerek kalmadan çalışması için Gizli özelliğini kullanmaktır .

17

(extracting text from MS word files in python yanıtın aynısı geçerlidir)

Bu hafta yapılan yerli Python docx modülünü kullanın. İşte bir dokümandan bir bütün metin ayıklamak için:

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 site

100% Python, hiçbir COM, hiçbir .net, hiçbir Java, regexs ile hiçbir ayrıştırma tefrika XML, hiçbir bok bakınız.

+0

Bu kitaplığı oluşturduğunuz için çok teşekkür ederim. Bu 3 yıl önce yayınladığınızı biliyorum, ancak kütüphanenizi kullanarak bir DOCX belgesini HTML'ye dönüştürmenin bir yolu var mı? Alkışlar –

+0

@mikemaccana ayrıca .doc (not .docx) dosyalarını da ayrıştırabilir mi? – ofnowhere

+12

Sadece StackOverflow hakkında soru sormanın bir yolu olsaydı. – mikemaccana

2

Yapmak istediğiniz tek şey, Word dosyaları (.docx) metnini ayıklamaksa, bunu yalnızca Python ile yapmak mümkündür. Guy Starbuck'un yazdığı gibi, sadece dosyayı açmanız ve sonra XML'i ayrıştırmanız gerekiyor. python-docx esinlenerek, ben bunu yapmanın bir simple function yazdım: .doc ve .ODT için

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) 
+0

Büyük parça kodu! Kodunuzun arka planı siyah değilse, blogunuz hakkında küçük bir açıklama daha okunaklı olur. –

+0

Oh, yorum için teşekkürler. Sorun şu ki, Github CSS'yi birazcık "hackledim" yani renkler sitemle eşleşiyor. Ancak Github, CSS'lerinde değişiklik yaptığında, şu anda olduğu gibi stil sayfamı tekrar eklemem gerekiyor. Bu yaklaşımı koruyacağından emin değilim ... – Etienne

0

This worked well.

Dosyalarınızı metne dönüştürmek için komut satırında openoffice'i çağırır, daha sonra basitçe python'a yükleyebilirsiniz.

(onlar apparenlty belgelenmese olsa o, diğer biçim seçenekleri var gibi gözüküyor.) Piton 3 popen3 kaldırdığını

İlgili konular