Ich habe mit natürlichsprachigen Pars-Bäumen gespielt und sie auf verschiedene Arten manipuliert. Ich habe Stanfords Tregex- und Tsurgeon-Tools verwendet, aber der Code ist unordentlich und passt nicht gut in meine Python-Umgebung (diese Tools sind Java und eignen sich nicht zum Optimieren). Ich hätte gerne ein Toolset, das einfaches Hacken ermöglicht, wenn ich mehr Funktionalität brauche. Gibt es noch andere Werkzeuge, die sich gut für die Mustererkennung auf Bäumen und die Manipulation dieser Zweige eignen?Wie manipuliere ich Parse Bäume?
Zum Beispiel, würde Ich mag den folgenden Baum als Eingabe nehmen:
(ROOT
(S
(NP
(NP (NNP Bank))
(PP (IN of)
(NP (NNP America))))
(VP (VBD used)
(S
(VP (TO to)
(VP (VB be)
(VP (VBN called)
(NP
(NP (NNP Bank))
(PP (IN of)
(NP (NNP Italy)))))))))))
und (dies ist ein vereinfachtes Beispiel):
- Angebote: Alle Knoten mit dem Label, das NP hat ein erstes Kind mit dem Label NP und ein Nachkomme namens "Bank", und ein zweites Kind mit dem Label PP.
- Wenn dies zutrifft, dann nimm alle untergeordneten Elemente des PP-Knotens und verschiebe sie zum Ende der untergeordneten NPs.
Nehmen wir zum Beispiel diesen Teil des Baumes:
(NP
(NP (NNP Bank))
(PP (IN of)
(NP (NNP America))))
und in diese abbiegen:
(NP
(NP (NNP Bank) (IN of) (NP (NNP America))))
Da meine Eingangs Bäume sind S-Ausdrücke, die ich in Betracht gezogen habe Lisp mit (eingebettet in mein Python-Programm), aber es ist so lange her, dass ich etwas Wesentliches in Lisp geschrieben habe, dass ich keine Ahnung habe, wo ich überhaupt anfangen soll.
Was wäre ein guter Weg, um die Muster zu beschreiben? Was wäre ein guter Weg, die Manipulationen zu beschreiben? Was ist eine gute Möglichkeit, über dieses Problem nachzudenken?
Gibt es Dokumentation für die Verwendung von SP Tree Regex? Oder sind die Javadocs bisher die einzige Dokumentation? – sholsapp
Ah, hallo Professor Manning, es tut mir leid, dass Sie Ihre Arbeit kritisieren, ohne konkrete Gründe zu nennen. Ich möchte auf den Code hacken, aber ich finde 100.000 Zeilen ein wenig entmutigend, nur um eine kleine Abstraktionsebene hinzuzufügen. Ich bin sehr dankbar für die Existenz von Tregex/Turgeon. Ich bin nur neugierig, ob ein DSL ähnliches etwas viel prägnanter schreiben kann. Es gibt immer noch das Problem von Java Python-Interaktionen, die ich unbefriedigend gelöst habe, aber es funktioniert (etwas). – guidoism
@gnucom: Ich gebe zu, dass die Dokumentation besser/umfangreicher sein könnte. Aber es gibt noch ein paar andere Ressourcen. Die PPT-Folien http://nlp.stanford.edu/software/tregex/The_Wonderful_World_of_Tregex.ppt sind der beste Ort für ein Intro zu Tregex-Mustern. In der GUI-Anwendung gibt es nützliche Hilfebildschirme. Weitere Informationen finden Sie unter: http://nlp.stanford.edu/software/tregex-faq.shtml#b. –