2017-01-27 3 views
2

Ich bin ein Anfänger mit Ruta und die Idee, die ich jetzt zu begreifen bin versucht, wie in UIMA-Umgebung (in Ebene Java), die Klassenvariablen/Sammlungen zu handhaben. Ich habe versucht, den Beispielen zu folgen, die in der documentation gegeben werden; aber die Ruta-Regeln werden entweder extern als Skriptdatei oder direkt "vor Ort" mit Ruta.apply (cas, rule) angewendet. Keine dieser Optionen ermöglicht es mir, beispielsweise ein Dateilexikon oder vordefinierte Java-Sammlungen zu verwenden. Könnten Sie mir bitte irgendwelche Tipps/Lösungen für mein Problem geben?Ruta in der UIMA-Umgebung. Arbeiten mit predifined Sammlungen/Sätzen und Lexika im Klar Java

Im Allgemeinen benutze ich UIMA AEs, um Sätze zu parsen und dann die erzeugten Anmerkungen innerhalb des Ruta-Skripts zu verwenden, um bestimmte Typen von Sätzen basierend auf ihrer syntaktischen Struktur zu vergleichen. Daher sind die Ruta-Regeln, die ich schreibe, ziemlich einfach, aber wegen der POStags-Menge sperrig. Also würde ich gerne etwas Flexibilität in Ruta bekommen. Ich wäre dankbar, wenn es auch Vorschläge zu diesem Thema geben würde.

EDIT: Zum Beispiel habe ich eine Regel, die eine Reihe von POSTags von einem AE (Stanford Parser) erstellt berücksichtigt. So, um die gewünschte Satzstruktur übereinstimmen ich es in der folgenden Art und Weise hart codieren würde (Ich weiß, es ist die naive Art und Weise):

String rutaSampleRule = "BLOCK(ForEach) Sentence{}{Document{-> Asyndeton} " + "<- {((Constituent.label==\"NN\" COMMA Constituent.label==\"NN\") |" + " (Constituent.label==\"NNP\" COMMA Constituent.label==\"NNP\") |" + " (Constituent.label==\"NNPS\" COMMA Constituent.label==\"NNPS\") |" + " (Constituent.label==\"NNS\" COMMA Constituent.label==\"NNS\"));};}";
Ruta.apply(cas, rutaSampleRule);

Nun, was ich möchte, statt haben, ist eine Sammlung zu erklären von solchen POStags (dh NNS, NN), iteriere darüber in Ruta und passe die entsprechende Satzstruktur an (hier, aufeinanderfolgende Nomen). Dies würde meine Regeln viel flexibler und praktischer machen.

wäre die zweite Option Lexikons sein statt Sammlung zu verwenden, aber ich dachte, dass sie (mit MARKFAST) (nicht schlicht Java) innerhalb Ruta nur separat verwendet werden; zumindest konnte ich keine Beispiele finden.

Also, um meine Frage zusammenzufassen: Ist es möglich (und wie wenn ja), in einfachen Ruta-Skripten (die keine neuen Typen einzuführen), mit extern definierten Sammlungen/Lexika in Java zu arbeiten?

Ich hoffe, ich kann es in einer besseren Art und Weise zu erklären, verwaltet. Danke im Voraus.

EDIT 1: Ich habe herausgefunden, wie man Lexika in Plain Java verwendet, nur indem man mit Pfaden und dem example im Handbuch herumspielt. Trotzdem würde ich gerne wissen, wie man die Werte den Variablen unter Verwendung der Konfigurationsparameter zuordnet?

+0

ich, was Sie tun wollen und was nicht vollständig verstehen die Begrenzung ist. Ein Dateilexikon kann eingeschlossen werden, z. B. WORDTABLE/MARKFAST. Was möchten Sie mit vordefinierten Java-Sammlungen in Ruta machen? Sie müssen die Informationen entweder in einer Feature-Struktur speichern oder die Werte den Variablen mithilfe der Konfigurationsparameter zuweisen. Können Sie Ihr Problem näher erläutern, z. B. anhand eines Beispiels? –

+0

Ich habe ein bisschen meine Frage umformuliert; Die Hoffnung ist jetzt klar. Vielen Dank. – user3711889

Antwort

1

Diese den Trick tun sollten (mit den aktuellen Stamm getestet):

String rutaSampleRule = "STRINGLIST posList;" 
    + "Sentence{-> Asyndeton} <- {" 
    + "c1:Constituent{CONTAINS(posList, c1.label)} COMMA c2:Constituent{c2.label == c1.label};" 
    + "};"; 

List<String> posList = Arrays.asList(new String[] { "NN", "NNP", "NNPS", "NNS" }); 
Map<String, Object> additionalParams = new HashMap<>(); 
additionalParams.put(RutaEngine.PARAM_VAR_NAMES, new String[] { "posList" }); 
additionalParams.put(RutaEngine.PARAM_VAR_VALUES, new String[] { StringUtils.join(posList, ",") }); 
Ruta.apply(cas, rutaSampleRule, additionalParams); 

Einige Kommentare:

  • eine String in den Regeln erklärt und gefüllt durch die beiden Parameter config.
  • Refactoring ich die inlined Regeln: kein disjunctive Element komponierten Regel erforderlich (mehrere Regeln das gleiche tun würde), keine mehrfachen Regelelemente/Regeln erforderlich.
  • Im Beispiel wird nun kein Baustein mehr benötigt. Ich habe es entfernt.
  • Wenn es irgendein Problem mit freigegebener Version von Ruta ist, die Regel Umschreiben erforderlich ist: Verwendung eines String-Variable anstelle von direktem Vergleich der Eigenschaften der Beschriftungsausdrücke.
  • Ein Ansatz ein externes Wörterbuch mit ganz ähnlich möchte, zum Beispiel mit einem INLIST Zustand.

HAFTUNGSAUSSCHLUSS: Ich bin ein Entwickler von UIMA Ruta

+0

Das habe ich gesucht! Du hast mir eine Menge Zeit gespart. Vielen Dank! – user3711889