Informationsextraktion mit XSLT

Transcrição

Informationsextraktion mit XSLT
Informationsextraktion mit XSLT
+ Einbindung in eine Pythonanfrage an Wikipedia/Dbpedia
Jani Takhsha
HS Information Retrieval
Institut für Computerlinguistik
Universität Heidelberg
12. Januar 2015
1/29
1. Motivation
2. XSLT
2.1 XSLT–kurze Erklärung
2.2 einzelne Templates
3. Python
3.1 Wikipediaanfrage
3.2 Dbpediaanfrage
3.3 Mit Python XML editieren
4. Probleme und Hürden
5. weitere Aufgaben
5.1 Überblick
5.2 Plenarprotokolle
6. Ressourcen
7. Open Data Projekte
2/29
Motivation
Inspiration
Bundestagsradar von SPON in Zus.arbeit mit abgeordnetenwatch
(Screenshot von [2]).
3/29
Motivation
Input: XML
Im Hintergrund: XML-Datei (von abgeordnetenwatch.de)
Figure: Auszug aus der XML-Datei. (Alle Vor-und Nachnamen in den
Screenshots der XML-Dateien sind anonymisiert.)
4/29
Motivation
Idee
Mit den Informationen über die MdBs herausfinden, mit welchen anderen
Personen des öff. Lebens/der Wirtschaft sie über ihre Nebentätigkeiten
vernetzt sind.
5/29
Motivation
Verarbeitungsschritte
Schritt
1.
2.
3.
4.
5.
Input
radar.xml
splitnodes.xml
company-Knoten
Liste [Erg1, Erg2,...]
Liste [P1, P2,]
Modul
splittnodes.xslt
getcompany.py
Wikipedia
Dbpedia
getcompany.py
Output
splitnodes.xml
company-Knoten
Liste [Erg1, Erg2,...]
Liste [Person1, P2, ...]
mdbknows.xml
Splittnodes.xslt wird auf das erste Xml angewendet. Über das daraus
transformierte XML splitnodes.xml läuft das Python-Script
getcompany.py, in welchem die Datenbankabfragen erfolgen und das auch
das letztendliche Output mdbknows.xml generiert.
6/29
XSLT
XSLT–kurze Erklärung
XSLT (Schritt 1)
XSLT = EXtensible Stylesheet Language Transformation
Sprache, um v.a. Xml-Dokumente zu verändern und in andere Formate zu
transformieren.
Xslt–Dokumente beinhalten Templates, die auf einen bestimmten Knoten
eines Input–Dokuments ’gematcht’ werden. Der Pfad zu einem Knoten
nennt sich XPATH.
Figure: Oben links ist der XPATH zum 3. ’t’-Knoten des 1. ’person’-Knotens zu
sehen (/personen/person[1]/n[1]/t[3]).
7/29
XSLT
einzelne Templates
XSLT: Header
Relevante Knoten extrahieren (mit XSLT 2) → vereinfachte XML-Datei
Figure: Header der xslt-Datei.
Das Encoding ist (hier) dasselbe wie das des Input-XML und die
Spezifikation für ”xsl:output” sorgt dafür, dass z.B. Umlaute richtig
dargestellt werden. Die namespaces definieren, welche Sprache im
Dokument verwendet wird. ’exclude-result-prefixes’ stellt sicher, dass die
angegebenen Präfixe nicht in die Output-Datei ausgegeben werden.
8/29
XSLT
einzelne Templates
XSLT: Output (Header)
Figure: Output: Encoding
Wie in diesem Ausschnitt zu sehen, entspricht das Encoding des
ausgegebenen XML-Files der Spezifikation in der auf der vorherigen Folie
abgebildeten XSLT-Datei (windows-1252).
9/29
XSLT
einzelne Templates
XSLT:Template (Wurzelknoten)
Figure: Wurzelknoten erstellen
Ohne ’Root’ ist der Output nicht
wohlgeformt! Der Slash matcht alle
Knoten im Input-XML, dann werden
diese in ’info’-Knoten umschlossen
und die übrigen Templates auf sie
angewandt.
Figure: Ouput.
Anfang und Ende des ausgegebenen
XML-Files: Die Wurzelknoten
schließen alle anderen Knoten ein.
10/29
XSLT
einzelne Templates
XSLT: Template (Person)
Figure: Das Template matcht den Knoten ’person’. ’id’ erhält seinen eigenen
Wert, der für ’name’ wird aus zwei anderen Attributwerten zusammengesetzt. Auf
alle Kindknoten werden die anderen Templates angewandt.
Figure: Output: Das Attribut ’id’ sowie das kombinierte Attribut ’name’ werden
als einzige ’person’-Attribute ausgegeben.
11/29
XSLT
einzelne Templates
XSLT: Haupt-Template
Figure: Das Haupt-Template matcht den Knoten t und gibt ihm das Attribut ’id’
des ’Großvaterknoten’ ’person’ (Z.22). Der Regex unterteilt den im XML-File in
einem t-Knoten vorhandenen String in drei Gruppen, 1 = Name der Firma, 2 =
Ort, 3 = Position des MdB.
12/29
XSLT
einzelne Templates
XSLT: finales Output
Figure: Das vollständige tranformierte XML: Jetzt sind nur noch die für die
Aufgaben notwendigen Daten da. ’Company’, ’place’ und ’pos’ sind die neu
erstellten Kindknoten von ’t’.
13/29
Python
Python (Schritt 2)
Figure: Die company-Knoten werden mit dem Paket xml.etree.ElementTree
(etree) extrahiert. ’company’ entspricht dem Knoten ’company’ im vereinfachten
XML-File.
14/29
Python
Wikipediaanfrage
Python (Schritt 3)
Wikipedia wird nach Einträgen zu den einzelnen ’company’-Knoten
durchsucht.
Figure: Eine Abfrage wie auf
Abb. 12, diesmal mit Python.
Die links, in Abb. 12
angezeigten Ergebnisse werden
als Liste ausgegeben.
Figure: Statt dem hier abgeb.
manuellem Aufruf wird die Enzyklopädie
mit dem Python-Paket ”Wikipedia”
abgefragt. (siehe [9],
http://de.wikipedia.org/wiki/...)
15/29
Python
Dbpediaanfrage
Python (Schritt 4)
Die Liste mit den Titeln der möglichen Wikipages zu einer Suchanfrage
soll auf Personen beschränkt werden
Die Titel sind gleichzeitig Dbpedia-Label (wikilabels).
Dbpedia
Dbpedia benutzen, um festzustellen, ob das wikilabel eine Person
bezeichnet.
Wenn ja, diese Person als Kontaktperson zum entsprechenden MdB
hinzufügen.
16/29
Python
Dbpediaanfrage
Python
Figure: Dbpedia Abfrage mit SparqlWrapper.
17/29
Python
Dbpediaanfrage
SPARQL
Figure: 1.-3.Zeile: Prefix Deklaration. 5.: Setzen der Variable ’ ?label’ as
gewünschte Ausgabe. 8.: Entität soll den rdf:type ’person’ besitzen. 9.:Variable
aus Z.5 als Wert des Prädikats rdfs:label setzen. 10.: Label soll in deutscher
Srache sein.
Das rdfs:label entspricht ’Vorname Nachname’, d.h. dem Wikilabel, d.h.
dem Titel der dazugehörigen Wikipedia-Seite (s. nächste Folie).
18/29
Python
Dbpediaanfrage
Dbpedia
Figure: Ausschnitt der DBpediaseite einer Person: links stehen die Attribute,
rechts die Werte. Die eine der abgefragten Eigenschaften, ’rdf:type’, ist unten zu
sehen. (siehe [10], http://de.dbpedia.org/resource/...)
19/29
Python
Mit Python XML editieren
XML ergänzen (Schritt 5)
Figure: Der ’person’-Knoten wird für jeden Menschen, der zu seinen
’company’-Knoten gefunden wurde, um jeweils einen ’knows’-Knoten ergänzt.
Auch hierfür wurde das Paket etree benutzt.
20/29
Python
Mit Python XML editieren
Output
Figure: Ausschnitt aus dem finalen XML-File. Die (potentiellen) Kontaktpersonen
des jeweiligen MdB stehen in den ’knows’–Knoten.
21/29
Probleme und Hürden
Probleme und Hürden
Zugriff–Limits (wikipedia, dbpedia)
Daten nicht verfügbar (Infobox Mapping für Firmen vs. Infoboxen von
Musikbands)
Daten in falschem Format (Plenarprotokolle in PDF, bzw.
unformatiertem Text)
Handelsregister → zu wenig Daten, keine API
22/29
weitere Aufgaben
Überblick
weitere Aufgaben
ALLE Label für Suchanfrage von Wikipedia zurückerhalten (siehe
Mediawiki: continue)
Lebensdaten von knows-Personen müssen sich mit denen des MdB
überschneiden! (Disambiguieren)
Encoding! (auch wichtig für Visualisierung des Graphen, csv)
Graph visualisieren (mit welchen Personen ist MdB x über seine
Arbeit verknüpft?)
Plenarprotokolle (text) in xml/xces o.ä. transformieren
Redebeiträge einzelner MdBs aus ↑ zu MdB-Datei hinzufügen
Videoschnitte von ↑ zu MdB-Datei hinzufügen
23/29
weitere Aufgaben
Plenarprotokolle
Plenarprotokolle: kurzer Einblick in TEI
Die Plenarprotokolle liegen nur in unstrukturiertem Text vor.
Die Text Encoding Initative (TEI) hat Codierungsformate für verschiedene
Textsorten entwickelt.
Plenumsdiskussion
→ große Ähnlichkeit zu Theaterstück:
(Redner = Sprecher, Zwischenrufe = Regieanweisung, etc)
Daher: TEI-Drama
24/29
weitere Aufgaben
Plenarprotokolle
Plenarprotokolle in TEI-drama
Figure: Bsp. von für Dramen gedachtem TEI-Drama auf Plenarprotokoll.
25/29
Ressourcen
Ressourcen I
[1] Abgeordnetenwatch:
http://www.abgeordnetenwatch.de/,
(12.01.2015)
[2] Bundestagsradar:
http://www.spiegel.de/flash/flash-22868.html,
(12.01.2015)
[3] XML Parser:
http://www.saxonica.com/,
(12.01.2015)
[4] ElementTree Overview:
http://effbot.org/zone/element-index.htm,
(12.01.2015)
26/29
Ressourcen
Ressourcen II
[5] A Pythonic wrapper for the Wikipedia API:
https://github.com/goldsmith/Wikipedia,
(12.01.2015)
[6] RDFLib is a Python library for working with RDF:
https://github.com/RDFLib/rdflib,
(12.01.2015)
[7] SPARQL Endpoint interface to Python (1.6.4):
http://rdflib.github.io/sparqlwrapper/,
(12.01.2015)
[8] Text Encoding Initiative: http://www.tei-c.org/index.xml,
(12.01.2015)
[9] Deutsche Wikipedia: http://de.wikipedia.org/wiki/
(12.01.2015)
27/29
Ressourcen
Ressourcen III
[10] Deutsche Dbpedia: http://de.dbpedia.org/
(12.01.2015)
28/29
Open Data Projekte
Links zu Open Data Projekten
http://www.bundestag.de/xml/mdb/index.xml (12.01.2015)
http://www.bundestag.de/plenarprotokolle (12.01.2015)
http://bundestube.de/ (12.01.2015)
http://offenesparlament.de/ (12.01.2015)
http://parser.theyworkforyou.com/members.html (wie ↑, UK),
(12.01.2015)
http://www.opensecrets.org/resources/ (wie ↑, US),
(12.01.2015)
http://teibyexample.org/modules/TBED05v00.htm (12.01.2015)
29/29