APIs zur Extraktion syntaktischer Einheiten?

  • Hallo!

    Ich möchte im Rahmen der Bakkarbeit ein Tool entwickeln, das Informationen aus Dokumenten auslesen kann und diese in ein Format bringt, das mit einer Software wie PersonalBrain gelesen wird. Also aus einem Prosatext einen Graphen machen (ähnlich wie Mindmap aber polyhierarchisch).

    Im Prinzip bietet sich ja sowas wie OWL dafür an. Die einzelnen Informationsklassen müssen dabei im Text ja gekennzeichnet werden.
    Jetzt könnte ich es mir ja leicht machen und sagen, der Ausgangstext ist schon ein XML-Dokument indem die Tags bereits so definiert sind.
    Aber interessieren würde mich, wie ich zu so etwas komme?

    Dazu müsste ich ja ein Tool haben, das in allen Sprachen einen Text in syntaktische Einheiten zerlegen kann (anders kann ich's auch nicht ausdrücken) und diese dabei am besten noch in Verbindung setzen kann.

    Also Ziel soll sein:

    Alan Mathison Turing war ein britischer Logiker, Mathematiker und Kryptoanalytiker.
    wird zu:
    Subjekt: Alan Mathison Turing
    Prädikat: war
    Attribut: britisch
    Objekt: Logiker
    Objekt: Mathematiker
    Objekt: Kryptoanalytiker

    Gibt es ein Tool, eine API, ein Framework, das ich in Java verwenden kann, welches mir das ermöglicht?
    Wonach suche ich da genau?

    Würd mich freuen, wenn jemand versteht worauf ich hinauswill (ich weiß das glaube ich selbst noch nicht so genau) und mir einen Tipp geben kann.

    Robert


  • Das sind schon zwei Schritte. Schritt 1 ist http://en.wikipedia.org/wiki/Part-of-speech_tagging, das wird dir mal sagen, daß "Turing" ein Name ist, "war" ein Verb und "Logiker" ein Nomen. Für einfache Texte kann das hinhauen, indem man die Wörter in Tabellen sucht. Die Wikipedia-Seite führt unten auch Links auf Tools an.

    Wenn du das mal hast, mußt du mit einer Grammatik (im Sinne der Grammatiken aus der ThInf-VU) darauf losgehen, um zu deinem gewünschten Ergebnis zu kommen. Allerdings muß ich zugeben, daß ich dein Beispiel nicht mit dem einleitenden Text in Verbindung setzen kann -- was wäre denn ein tatsächlicher Eingabesatz, und was würdest du wirklich daraus extrahieren wollen? Wirklich nur Tags der Form Subjekt-Prädikat-Objekt?

    Ahja: "in allen Sprachen" ist ein lustiger Witz :) Wenn du dein Bakkalaureat vor 2012 abschließen willst, wirst du dich auf ein kleines Fragment einer einzigen Sprache beschränken müssen, oder auf winzige Fragmente mehrerer Sprachen. Kann je nach beabsichtigter Anwendung aber durchaus gut genug sein.

    Wenn du dich wirklich wirklich in die Materie eingraben willst, wirst du aber erst um 2020 herum Bachelor :)


    Edit: Noch was. Heutzutage wird ja quasi alles mit Java gemacht, aber für solche Geschichten würde es sich lohnen, sich auch nach besser geeigneten Sprachen umzusehen. Es gibt für alles Libraries, und Libraries sind toll, aber wenn man auch mit einer Library 50 Zeilen Java-Code schreiben muß für etwas, was in Prolog fünf Zeilen wären...

    *plantsch*

    Einmal editiert, zuletzt von Plantschkuh! (9. Februar 2009 um 20:47)

  • Hallo,

    Schau dir doch mal http://gate.ac.uk/ an. GATE ist so eine Art Hub, der verschiedene text engineering tools miteinander verbindet. GATE arbeitet zum Beispiel mit part of speech taggern (Alan Turing ist ein Hauptwort), natural language processing (Alan Turing ist eine Person), orthomatching (Alan Turing ist blablabla....Er hat blablabla => das 'Er' bezieht sich auf 'Alan Turing') , data mining tools, dictionaries und apis zum auswerten von regeln zusammen.

    Auf Java ist GATE bestimmt die gängige Lösung für dein Problem.

    Fuer Python kenne ich noch http://www.nltk.org/, damit hab ich aber nur wenig Erfahrung.

    Mit den Tools die mit GATE mitgeliefert werden kommt auch Unterstützung fuer verschiedene Sprachen. Allerdings nicht wirklich viele, und du hast auch in diesem Fall noch sehr viel Arbeit vor dir, fuer deine Domain (was fuer Texte du einliest) fuer jede Sprache die Regeln zu optimieren, damit die Fehlerquote sich in Grenzen hält.

    Um den Rahmen einer Bakkarbeit nicht zu sprengen, empfehle ich dir bei English und Deutsch zu bleiben, oder am besten erstmal nur bei English. Lies dir die Doku zu GATE durch, dann bau eine Loesung mit den mit dem Kompontenen ANNIE, treetagger, jape grammars, sowie gazeteer dictionaries. Diese Kombination ist gebräulich und die meisten dieser Komponten werden mit einem GATE build bereits ausgeliefert und sind dokumentiert. Eine Einzelne dieser Komponenten selber zu schreiben und in GATE reinzuhängen, währe meiner Meinung nach eine Bakkarbeit wert.

    lgb

    lg, Benjamin Ferrari, bookworm.at

    3 Mal editiert, zuletzt von a9bejo (13. Februar 2009 um 00:48)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!