Programmierung

Text extrahieren

Für die meisten Benutzer einer Schreibmaschine mit Bildschirm (Computer genannt) ist Textverarbeitung ein Synonym für das Programm Word des Herstellers Microsoft (und Tabellenkalkulation ein Synonym für das Programm Excel des gleichen Herstellers). Entscheidend für die Erfolgsaussichten von Konkurrenzprodukten ist die Frage, ob sie die proprietären Dateiformate von Microsoft öffnen und schreiben können. Jeder Computer-Benutzer wird irgendwann mit einem Dokument konfrontiert, das mit Microsoft Word erstellt wurde, also auch Benutzer unixoider Systeme. Mancher hat regelmäßig mit ihnen und mitunter in größerer Anzahl zu tun, obwohl er selbst keine produziert. An einem unixoiden System kommt unweigerlich der Wunsch auf, Dateien mit der Endung .doc in einer Shell mit den gewohnten Werkzeugen verarbeiten zu können ­– etwa um sie mit regulären Ausdrücken auf Stichworte zu durchsuchen. Und tatsächlich gibt es im Fundus quelloffener Software ein Tool, das diesen Wunsch erfüllt: Antiword extrahiert aus Word-Dateien reinen Text.

Antiword[1] ist ein Befehlszeilenprogramm, das eine Word-Datei wahlweise als Nur-Text, als XML, als Postscript-Datei oder als PDF ausgibt. Anders als ein sonst ganz ähnliches Programm, catdoc[2], versucht es, die strukturelle Formatierung (Absätze, Listen usw.) weitgehend zu erhalten.

Beide Programme scheitern allerdings an Dateien mit der Endung .docx, die mit Microsoft Word 2007 eingeführt wurde. Bei diesen handelt es sich um Zip-Archive, die eine Reihe von XML-Dateien enthalten, die Microsofts Formatspezifikation Office Open XML entsprechen (bzw. einer Variante davon[3]). Word-Dateien mit der Endung .docx können demnach mit unzip extrahiert werden. Der Text des Dokumentes befindet sich in der Datei document.xml, allerdings durchsetzt von Formatierungsmarken. Das Ruby-Skript antiword.rb[4] versucht, die Marken auszufiltern und den Text neu umzubrechen, was nicht immer ganz glatt geht. Wenn die Word-Datei nicht als Office Open XML abgespeichert wurde, sondern als „klassisches” .doc, greift das Skript auf das orginale Befehlszeilenprogramm antiword zurück, um den Text zu extrahieren.

1. Homepage von Antiword (Adri von Os): http://www.winfield.demon.nl/ mit Links zum Quell-Code und zu verschiedenen Binärdistributionen; Eintrag im Software-Index Freecode: http://freecode.com/projects/antiword.
2. Homepage von catdoc (Victor Wagner alias Vitus): http://www.wagner.pp.ru/~vitus/software/catdoc/; Eintrag im Software-Index Freecode: http://freecode.com/projects/catdoc.
3. Office Open XML ist Microsofts Gegenentwurf zu Open Document Format (ODF), das laut Microsoft nicht geeignet sei, um Besonderheiten des Produktes Microsoft Office abzubilden. Mittlerweile sind beide Formate ISO-Standard, Office Open XML bleibt jedoch, nicht zuletzt wegen der proprietären Varianten, die Microsoft verwendet, weiterhin umstritten. Um die Akzeptanz von Office Open XML zu befördern hat Microsoft u.a. einen Beitrag zum quelloffenen Apache-Projekt POI (Poor Obfuscation Implementation, http://poi.apache.org/index.html), einer Java-Programmbibliothek, in Auftrag gegeben, welcher die Textextraktion aus Dokumenten in diesem Format ermöglicht.
4. Projektseite antiword-xp-rb (Shawn Rainey) bei GitHub https://github.com/rainey/antiword-xp-rb/wiki. Das Skript setzt eine vorhandene Ruby-Laufzeitumgebung und das installierte Programm antiword voraus.

7. Dezember 2012 von Kai Yves Linden
Kategorien: Programmierung | Schlagwörter: , , | 1 Kommentar