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.