content top

Bei der Bearbeitung des Projektes waren mehrere Teilschritte notwendig, um die Texte aufzubereiten und weiter zu verwenden. Zur Automatisierung wurden Skripte in Python geschrieben, welche die jeweiligen Aufgaben erledigen.


Die Metadaten zu den PDFs liegen jeweils seperat in unterschiedlichen XML-/SGML-Formaten vor. Diese wurden in eine vereinheitlichte Struktur gebracht und in einem Metadatenindex (XML) abgespeichert. Derzeit können Metadaten zu ca. 32% der PDFs aus der ZBmed-Sammlung gewonnen werden.

Die Unterordner der ZBmed-Sammlung wurden wie folgt bearbeitet:

DIR                             PDFs            Metadata           Error/Missed/Skipped
./LWW/                          558527          no metadata
./InformaHealthcare/            339956          339649             307
./Thieme/                       117786          not worked
./APS/                          96856           85174              11682
./MAL/                          92256           not worked
./Springer Verlag E-Books/      71494           not worked
./Germany PLC/                  64678           not worked
./ASCO/                         6016            not worked


Zum extrahieren von Texten aus PDFs gibt es bereits Tools, die diese Aufgabe mehr oder weniger gut erledigen. Für die ZBmed PDFs wurde zunächst eine 3rd-Party Python-Library getestet. Diese erwies sich jedoch nicht als zuverlässig genug. So kam es vereinzelt zu zerstückelten Texten, sich ständig wiederholenden Sequenzen und anderen unbrauchbaren Artefakten.

Zur Verbesserung der Textextraktion wurde daraufhin auf das bekannte Linux Tool pdftotext zurückgegriffen, welches Bestandteil der Xpdf Software ist. Die extrahierten Texte wurden dem Metadatenindex mit dem XML-Element TEXT hinzugefügt.


Die Erkennung der Entitäten wurde mit dem Python RegEx-Modul (re) realisiert. Die Entitäten waren zunächst eine Liste aus allen bekannten englischen Wikipedia-Artikeln. Der erste Versuch führte zu einer Makierung der nahezu gesamten Texte. Für die Erkennung wie sie zum Ende des Projektes läuft, wurde hauptsächlich die Entitätenliste anhand einer Liste von Wikipedia-Kategorien gefilter. Zudem wurden Verbesserungen zur Erkennung bei Groß- und Kleinschreibung vorgenommen. So werden z.B. Abkürzungen wie SAMe oder HAD nicht wegen same und had erkannt.


Das erzeugte XML mit seinen Metadaten und makierten Texten dient nun der semantischen Suchmaschine Broccoli als Datenbank. Das XML-Elemente PATH enthält dabei den relativen Verweis auf ein entsprechendes ZBmed-PDF. Solange zu einem Dokument das XML-Element LINK nicht vorhanden ist, wird von Broccoli auf dieses PDF verlinkt.


Um das Ergebnis der Entitätenerkennung angenehmer begutachten zu können als das XML zu lesen, wurden aus den makierten Texten seperate HTML-Dateien erzeugt, in dem die Makierungen hervorgehoben sind und auf den entsprechenden Wikipedia-Artikel linken. Der Verweis auf die HTML-Datei wird als absoluten Pfad im XML-Dokument mit dem XML-Element LINK hinterlegt. Broccoli verlinkt dann nicht mehr auf des PDF, sondern auf das angegebene HTML.


Im letzten Schritt des Projektes wurden ein paar Texte manuell makiert und als Ground-Truth hinterlegt. Dies beeinflusst die HTML-Generierung in so fern, dass die dazugehörenden Texte im HTML zusätzliche farbkodierte Informationen über richtig und falsch erkannte Entitäten enthalten. Dabei können weitere Probleme der Erkennung aufgespürt werden. So wird z.B. CT nicht als Computed tomography erkannt, da der Wikipedia-Artikel zu CT eine Übersichtsseite zu verschiedenen Bedeutungen ist.

content top