Mit Python Text und Bilder aus Word-Dokumenten extrahieren
Tags: python, text, imag, word
Published: 2023-08-23 04:08:47

Inhalte aus Word-Dokumenten zu extrahieren ermöglicht es uns, diese für andere Operationen zu verwenden, wie z.B. Inhalte in Datenbanken zu speichern, Inhalte in andere Programme zu importieren, für KI-Trainings zu verwenden und andere Dokumente zu erstellen. Mit [Spire.Doc for Python](https://www.e-iceblue.com/Introduce/doc-for-python.html) ist es ein Leichtes, Text und Bilder aus Word-Dokumenten zu extrahieren, ohne aufwendiges Kopieren und Einfügen oder komplizierten Code. Dieser Artikel erklärt, wie man mit einfachem Code **Text und Bildinhalte aus Word-Dokumenten extrahiert und speichert**.

### Spire.Doc for Python importieren
Bevor man mit diesem Tool Word-Dokumente bearbeiten kann, muss man es in das Projekt importieren. Es kann von der [offiziellen Website von Spire.Doc for Python](https://www.e-iceblue.com/Download/Spire-Doc-Python.html) heruntergeladen oder direkt mit pip installiert werden. Der Code sieht wie folgt aus:
```python
pip install Spire.Doc
pip install plum-dispatch==1.7.4
```

**Musterdokument**

![Mit Python Text und Bilder aus Word-Dokumenten extrahieren](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n135lptn91k0n084lty6.png)

## Text aus Word-Dokument extrahieren und in TXT-Datei schreiben

Die Methode **Document.GetText()** von Spire.Doc für Python kann den gesamten Text aus dem Word-Dokument abrufen und als Zeichenfolge zurückgeben. Wir können die zurückgegebene Zeichenfolge in eine Textdatei zum Speichern schreiben. Die Schritte sind wie folgt:

- Ein **Document**-Objekt erstellen.
- Das Word-Dokument mit der **Document.LoadFromFile()**-Methode laden.
- Den Text aus dem Dokument mit der **Document.GetText()**-Methode abrufen.
- Den abgerufenen Text in eine Textdatei schreiben.

**Codebeispiel**
**Python**
```python
Copy
from turtle import st
from spire.doc import *
from spire.doc.common import *

def WriteAllText(fname:str,text:List[str]):
        fp = open(fname,"w")
        for s in text:
            fp.write(s)
        fp.close()

inputFile = "Beispiel.docx"
outputFile = "Extrahierter Text.txt"
     
#Document-Objekt erstellen  
document = Document()

#Word-Dokument laden
document.LoadFromFile(inputFile)

#Text aus Dokument abrufen
text = document.GetText()

#Text in Textdatei schreiben
WriteAllText(outputFile, text)
document.Close()
```

**Extrahierter Text**

![Text aus Word-Dokument extrahieren und in TXT-Datei schreiben](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/18lai8modezvbanz8jaj.png)

## Bilder aus Word-Dokument extrahieren und speichern

Das Extrahieren von Bildern ist etwas komplexer. Man muss prüfen, ob das untergeordnete Objekt des Dokumentenelements ein Bild oder ein zusammengesetztes Objekt ist. Bei einem Bild wird es gespeichert, bei einem zusammengesetzten Objekt muss geprüft werden, ob dessen untergeordnete Objekte Bilder enthalten. Die Schritte:

- Ein **Document**-Objekt erstellen.
- Das Word-Dokument mit der **Document.loadFromFile()**-Methode laden.
- Eine Warteschlange für zusammengesetzte Objekte erstellen und die Dokumentenelemente hinzufügen.
- Eine Liste zum Speichern der extrahierten Bilder erstellen.
- Die Dokumentenelemente durchlaufen und die untergeordneten Objekte jedes Knotens durchlaufen, um zu prüfen, ob es sich um ein zusammengesetztes Objekt oder Bildobjekt handelt.
- Prüfen, ob das untergeordnete Element ein Bildobjekt ist. Wenn ja, die Bilddaten extrahieren und zur Liste hinzufügen.
- Prüfen, ob das untergeordnete Element ein zusammengesetztes Objekt ist. Wenn ja, zur Warteschlange hinzufügen und weiter prüfen.
- Bilder in einen Ordner speichern.

**Codebeispiel**
**Python**
```python
Copy
import queue
from spire.doc import * 
from spire.doc.common import *
import os

outputPath = "Bilder/"
inputFile = "Beispiel.docx"

if not os.path.exists(outputPath):
    os.makedirs(outputPath)
    
#Document-Objekt erstellen
document = Document()  

#Word-Dokument laden
document.LoadFromFile(inputFile)

#Warteschlange erstellen und Dokumentenelemente hinzufügen
nodes = queue.Queue()
nodes.put(document)

#Liste erstellen
images = []

#Dokumentenelemente durchlaufen
while nodes.qsize() > 0:
    node = nodes.get()
    for i in range(node.ChildObjects.Count):
        #Untergeordnetes Objekt des Dokumentenelements abrufen
        child = node.ChildObjects.get_Item(i)
        #Prüfen, ob es ein Bild ist
        if child.DocumentObjectType == DocumentObjectType.Picture:
            picture = child if isinstance(child, DocPicture) else None
            dataBytes = picture.ImageBytes
            #Zur Liste hinzufügen
            images.append(dataBytes)
        #Prüfen, ob es ein zusammengesetztes Objekt ist
        elif isinstance(child, ICompositeObject):
            #Zur Warteschlange hinzufügen
            nodes.put(child if isinstance(child, ICompositeObject) else None)
            
#Bilder speichern
for i, item in enumerate(images):
    fileName = "Bild-{}.png".format(i)
    with open(outputPath+fileName,'wb') as imageFile:
        imageFile.write(item)
        
document.Close()
```

**Extrahierte Bilder**
![Bilder aus Word-Dokument extrahieren und speichern](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vs1kydg28bd58ibf2jt9.png)

Der extrahierte Text wird mit angehängten Bewertungsinformationen gespeichert. Sie können die Bewertungsinformationen direkt am Anfang des Textes löschen. Die extrahierten Bilder sind nicht mit einem Wasserzeichen versehen.

> Das war eine Einführung, wie man mit Spire.Doc für Python Text und Bilder aus Word-Dokumenten extrahiert. Spire.Doc für Python unterstützt viele weitere Dokumentoperationen. Schauen Sie auf der offiziellen Website vorbei oder nehmen Sie am [Spire.Doc Forum](https://www.e-iceblue.com/forum/spire-doc-f6.html) teil.