Wie kann ich einem vorhandenen RUTA-Projekt eine benutzerdefinierte Bedingung hinzufügen?Gestartet, aber stecke fest

StackOverflow https://stackoverflow.com//questions/22056617

  •  22-12-2019
  •  | 
  •  

Frage

Ich möchte eine benutzerdefinierte UIMA RUTA-Regelbedingung hinzufügen.Ich habe ein bestehendes UIMA Ruta-Projekt in Eclipse.Bisher habe ich im selben Projekt eine Quelldatei mit einem einfachen Annotator-Stub erstellt:

package mynamespace.extensions;

[imports]

public class MyNewCondition extends AbstractRutaCondition {

private final String para1;

public MyNewCondition(String para1) {
    super();
    this.para1 = para1;
}

@Override
public EvaluatedCondition eval(AnnotationFS annotation,
        RuleElement element, RutaStream stream, InferenceCrowd crowd) {
    // TODO Auto-generated method stub
    if (para1 == "hfoo")
        return new EvaluatedCondition(this, true);
    else 
        return new EvaluatedCondition(this, false);
}

public String getPara() {
    return para1;
}
}

Die Datei wird zum Ziel / classes / kompiliert...ordner, aber wenn ich ein RUTA-Skript erstelle:

DECLARE Test;
SW{MyNewCondition("foo") -> MARK(Test)};

...Eclipse sagt mir, dass "MyNewCondition" nicht definiert ist und wenn ich es starte, bekomme ich:"Fehler in Zeile 40, "(":keine brauchbare Alternative gefunden" auf der Konsole.Ich nehme an, ich muss noch etwas importieren, weiß aber nicht wie.Ich habe versucht, mit dem Erweiterungsbeispielprojekt im Github-Repository zu arbeiten, weiß aber nicht, wo ich dort anfangen soll, da die Skriptdatei keine weiteren Importe enthält, die zugehörigen XML-Deskriptordateien jedoch.Aber da diese automatisch generiert werden, weiß ich nicht, ob ich das ändern soll oder ob es etwas anderes ist.

Ich habe auch versucht, denselben neuen Bedingungstyp aus einem zweiten Projekt über die Build-Path-Optionen von Eclipse zu importieren, aber auch dort kein Glück.

Kann mir jemand helfen?Danke.

War es hilfreich?

Lösung

Sie benötigen mindestens drei Klassen, um eine neue Bedingung hinzuzufügen, die auch in der UIMA Ruta Workbench aufgelöst wird:

  1. Eine Umsetzung der Bedingung, wie Sie es in Ihrer Frage getan haben
  2. Eine Implementierung von IRutaConditionExtension, die die Bedingungsimplementierung für die Engine bereitstellt
  3. Eine Implementierung von IIDEConditionExtension, die die Bedingung für die UIMA Ruta Workench bereitstellt

Die Bedingung selbst enthält nur die Funktionalität, die der Sprache hinzugefügt werden soll.Die Analyse-Engine weiß natürlich nichts über externe Implementierungen, die zu einer seltsamen Analyseausnahme wie "(" nicht gefunden.Das sollte manchmal verbessert werden.Die Analyse-Engine stellt einen Konfigurationsparameter bereit additionalExtensions das listet alle bekannten Erweiterungen der Sprache auf.Wenn Sie die UIMA Ruta-Workbench nicht verwenden, müssen Sie diesem Parameter Ihre Implementierung von IRutaConditionExtension hinzufügen.Die Implementierung von IIDEConditionExtension stellt die notwendige Funktionalität für die UIMA Ruta Workbench bereit, nämlich die Syntaxprüfung, Syntaxhervorhebung usw.Darüber hinaus ermöglicht es der Workbench, korrekte Deskriptoren zu generieren.Es fügt dem jeweiligen Parameter Ihre Implementierung von IRutaConditionExtension hinzu.Diese Erweiterung der Workbench muss natürlich in einem Eclipse-Plugin implementiert sein, das in Ihrer UIMA Ruta Workbench Eclipse-Instanz installiert ist, um in der Workbench verfügbar zu sein.Es gibt einen Erweiterungspunkt, den Sie erweitern müssen, der sowohl Ihre Implementierung von IRutaConditionExtension als auch von IIDEConditionExtension kennt.

Es gibt ein beispielhaftes Projekt, das die Implementierung aller möglichen Sprachelemente vorsieht.Dieses Projekt enthält die Implementierungen für die Analyse-Engine und auch die Implementierung für die UIMA Ruta Workbench und ist daher ein Eclipse-Plugin (beachten Sie die POM-Datei).

Bezüglich der ExampleCondition Bedingungserweiterung gibt es drei wichtige Punkte / Klassen:

  1. ExampleCondition.java stellt die Implementierung der neuen Bedingung bereit, die Termine auswertet
  2. ExampleConditionExtension.java stellt die Erweiterung für die Analyse-Engine bereit.Es kennt den Namen der Bedingung, ihre Implementierung, kann neue Instanzen dieser Bedingung erstellen und ist in der Lage, die Bedingung für die Erklärungskomponenten zu verbalisieren.
  3. ExampleConditionIDEExtension stellt die Syntaxprüfung für den Editor und das Schlüsselwort für die Syntaxfärbung bereit.
  4. plugin.xml definiert die Erweiterung für die Workbench:

    <extension point="org.apache.uima.ruta.ide.conditionExtension">
      <condition
        class="org.apache.uima.ruta.example.extensions.ExampleConditionIDEExtension"
        engine="org.apache.uima.ruta.example.extensions.ExampleConditionExtension">
      </condition>
    </extension>
    

Wenn Sie die UIMA Ruta Workbench nicht verwenden oder nur die Regeln in UIMA Pipelines anwenden möchten, benötigen Sie nur ExampleCondition und ExampleConditionExtension, und Sie müssen hinzufügen org.apache.uima.ruta.example.extensions.ExampleConditionExtension zu den additionalExtensions parameter Ihrer UIMA Ruta-Analyse-Engine (Deskriptor).

Das Hinzufügen neuer Bedingungen mithilfe von Java-Projekten im selben Arbeitsbereich wurde noch nicht getestet, aber zumindest die Workbench-Unterstützung fehlt aufgrund der Einbeziehung von Erweiterungen, die den Erweiterungspunktmechanismus von Eclipse verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top