Ich bin mir nicht sicher, ob mein Thema hier oder im XML-Unterforum besser aufgehoben ist. Bitte gegebenenfalls verschieben. Danke!
Hallo zusammen,
ich bin Student der Computerlinguistik und bin für ein Projekt von Python zu Java gewechselt, weil Java offensichtlich vielfältigere und mächtigere Werkzeuge hat, um XML-Daten zu verarbeiten. Genau davon möchte ich jetzt Gebrauch machen, allerdings weiß ich nicht, welche API für meine Zwecke die richtige ist. Ich hoffe, dass ihr mir dabei helfen könnt. Es geht dabei konkret um folgende Struktur:
[XML]<s id="s5">
<graph root="s5_504">
<terminals>
<t id="s5_1" word="Die" pos="ART" morph="Def.Fem.Nom.Sg"/>
<t id="s5_2" word="Tagung" pos="NN" morph="Fem.Nom.Sg.*"/>
<t id="s5_3" word="hat" pos="VVFIN" morph="3.Sg.Pres.Ind"/>
<t id="s5_4" word="mehr" pos="PIAT" morph="--"/>
<t id="s5_5" word="Teilnehmer" pos="NN" morph="Masc.Akk.Pl.*"/>
<t id="s5_6" word="als" pos="KOKOM" morph="--"/>
<t id="s5_7" word="je" pos="ADV" morph="--"/>
<t id="s5_8" word="zuvor" pos="ADV" morph="--"/>
</terminals>
<nonterminals>
<nt id="s5_500" cat="NP">
<edge label="NK" idref="s5_1"/>
<edge label="NK" idref="s5_2"/>
</nt>
<nt id="s5_501" cat="AVP">
<edge label="CM" idref="s5_6"/>
<edge label="MO" idref="s5_7"/>
<edge label="HD" idref="s5_8"/>
</nt>
<nt id="s5_502" cat="AP">
<edge label="HD" idref="s5_4"/>
<edge label="CC" idref="s5_501"/>
</nt>
<nt id="s5_503" cat="NP">
<edge label="NK" idref="s5_502"/>
<edge label="NK" idref="s5_5"/>
</nt>
<nt id="s5_504" cat="S">
<edge label="SB" idref="s5_500"/>
<edge label="HD" idref="s5_3"/>
<edge label="OA" idref="s5_503"/>
</nt>
</nonterminals>
</graph>
</s>[/XML]
Hierbei handelt es sich um einen Beispielsatz aus einem bestimmten Korpus, das ich benötige. Diese XML-Struktur bildet die syntaktische Struktur dieses Satzes in einer Art Baum ab. Kurz zur Erklärung: Die Terminal-Symbole sind einfache Wörter. Die Nonterminal-Symbole beschreiben einzelne Phrasen, die aus einigen dieser Wörter bestehen (z.B. bilden die Wörter "Die Tagung" eine Nominalphrase, kurz NP). Mehrere Phrasen lassen sich dann wiederum als eine größere Phrase zusammenfassen usw. bis man am Root-Symbol angekommen ist.
Mein Problem besteht jetzt darin, dass die Nonterminal-Symbole in der XML-Datei leider nicht direkt schon als Baum kodiert sind, sondern nur Referenzen auf andere (Non)terminal-Symbole beinhalten (siehe Attribut
). Die begrenzten XML-Fähigkeiten von Python (und von mir ) konnten mir leider nicht helfen.
Frage: Mit welcher API kann ich die ursprüngliche syntaktische Struktur dieses Satzes als Baum am einfachsten einlesen? Die resultierende Datenstruktur ist nicht so wichtig. Die Hauptsache ist, dass ich für jeden Knoten im Baum die Mutter- und Tochterknoten auslesen kann (inklusive Annotation). Auch möchte ich gerne den Pfad von einem beliebigen Knoten zu einem anderen auslesen können.
Wie mache ich das am einfachsten und mit möglichst wenig Aufwand? Habt ihr einen Rat für mich?
Herzlichen Dank im Voraus!
EDIT: Anbei noch kurz zur Illustration, wie ich mir das Endergebnis in etwa vorstelle (ähnelt jetzt mehr einer Python-Datenstruktur, aber es sollte dennoch verständlich sein).
Hallo zusammen,
ich bin Student der Computerlinguistik und bin für ein Projekt von Python zu Java gewechselt, weil Java offensichtlich vielfältigere und mächtigere Werkzeuge hat, um XML-Daten zu verarbeiten. Genau davon möchte ich jetzt Gebrauch machen, allerdings weiß ich nicht, welche API für meine Zwecke die richtige ist. Ich hoffe, dass ihr mir dabei helfen könnt. Es geht dabei konkret um folgende Struktur:
[XML]<s id="s5">
<graph root="s5_504">
<terminals>
<t id="s5_1" word="Die" pos="ART" morph="Def.Fem.Nom.Sg"/>
<t id="s5_2" word="Tagung" pos="NN" morph="Fem.Nom.Sg.*"/>
<t id="s5_3" word="hat" pos="VVFIN" morph="3.Sg.Pres.Ind"/>
<t id="s5_4" word="mehr" pos="PIAT" morph="--"/>
<t id="s5_5" word="Teilnehmer" pos="NN" morph="Masc.Akk.Pl.*"/>
<t id="s5_6" word="als" pos="KOKOM" morph="--"/>
<t id="s5_7" word="je" pos="ADV" morph="--"/>
<t id="s5_8" word="zuvor" pos="ADV" morph="--"/>
</terminals>
<nonterminals>
<nt id="s5_500" cat="NP">
<edge label="NK" idref="s5_1"/>
<edge label="NK" idref="s5_2"/>
</nt>
<nt id="s5_501" cat="AVP">
<edge label="CM" idref="s5_6"/>
<edge label="MO" idref="s5_7"/>
<edge label="HD" idref="s5_8"/>
</nt>
<nt id="s5_502" cat="AP">
<edge label="HD" idref="s5_4"/>
<edge label="CC" idref="s5_501"/>
</nt>
<nt id="s5_503" cat="NP">
<edge label="NK" idref="s5_502"/>
<edge label="NK" idref="s5_5"/>
</nt>
<nt id="s5_504" cat="S">
<edge label="SB" idref="s5_500"/>
<edge label="HD" idref="s5_3"/>
<edge label="OA" idref="s5_503"/>
</nt>
</nonterminals>
</graph>
</s>[/XML]
Hierbei handelt es sich um einen Beispielsatz aus einem bestimmten Korpus, das ich benötige. Diese XML-Struktur bildet die syntaktische Struktur dieses Satzes in einer Art Baum ab. Kurz zur Erklärung: Die Terminal-Symbole sind einfache Wörter. Die Nonterminal-Symbole beschreiben einzelne Phrasen, die aus einigen dieser Wörter bestehen (z.B. bilden die Wörter "Die Tagung" eine Nominalphrase, kurz NP). Mehrere Phrasen lassen sich dann wiederum als eine größere Phrase zusammenfassen usw. bis man am Root-Symbol angekommen ist.
Mein Problem besteht jetzt darin, dass die Nonterminal-Symbole in der XML-Datei leider nicht direkt schon als Baum kodiert sind, sondern nur Referenzen auf andere (Non)terminal-Symbole beinhalten (siehe Attribut
Code:
idref
Frage: Mit welcher API kann ich die ursprüngliche syntaktische Struktur dieses Satzes als Baum am einfachsten einlesen? Die resultierende Datenstruktur ist nicht so wichtig. Die Hauptsache ist, dass ich für jeden Knoten im Baum die Mutter- und Tochterknoten auslesen kann (inklusive Annotation). Auch möchte ich gerne den Pfad von einem beliebigen Knoten zu einem anderen auslesen können.
Wie mache ich das am einfachsten und mit möglichst wenig Aufwand? Habt ihr einen Rat für mich?
Herzlichen Dank im Voraus!
EDIT: Anbei noch kurz zur Illustration, wie ich mir das Endergebnis in etwa vorstelle (ähnelt jetzt mehr einer Python-Datenstruktur, aber es sollte dennoch verständlich sein).
Code:
[ 'S',
[ ('SB', 'NP'),
[ ('NK', 'ART'), 'Die' ],
[ ('NK', 'NN'), 'Tagung' ]
],
[ ('HD', 'VVFIN'), 'hat' ],
[ ('OA', 'NP'),
[ ('NK', 'AP'),
[ ('HD', 'PIAT'), 'mehr' ],
[ ('CC', 'AVP'),
[ ('CM', 'KOKOM'), 'als' ],
[ ('MO', 'ADV'), 'je' ],
[ ('HD', 'ADV'), 'zuvor' ]
]
],
[ ('NK', 'NN'), 'Teilnehmer' ]
]
]
Zuletzt bearbeitet: