Come posso aggiungere una condizione personalizzata a un progetto RUTA esistente?Ho iniziato, ma sono bloccato

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

  •  22-12-2019
  •  | 
  •  

Domanda

Desidero aggiungere una condizione della regola UIMA RUTA personalizzata.Ho un progetto UIMA Ruta esistente in Eclipse.Finora ho creato un file sorgente nello stesso progetto con uno stub di annotazione di base:

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;
}
}

Il file viene compilato nella destinazione/classes/...cartella, ma quando creo uno script RUTA:

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

...Eclipse mi dice che "MyNewCondition" non è definito e quando lo eseguo ottengo:"Errore nella riga 40, "(":non ho trovato alcuna valida alternativa" sulla console.Presumo che dovrò fare qualche ulteriore importazione, ma non so come.Ho provato a lavorare dal progetto di esempio Extension nel repository Github, ma non so da dove cominciare poiché il file di script non contiene ulteriori importazioni, ma i file descrittori xml associati sì.Ma poiché questi vengono generati automaticamente, non so se questo è ciò che dovrei cambiare o è qualcos'altro.

Ho anche provato a importare lo stesso nuovo tipo di condizione da un secondo progetto tramite le opzioni del percorso di creazione di Eclipse, ma senza fortuna neanche lì.

Qualcuno può aiutare?Grazie.

È stato utile?

Soluzione

Sono necessarie almeno tre classi per aggiungere una nuova condizione che viene risolta anche nell'ambiente UIMA Ruta:

  1. Un'implementazione della condizione come hai fatto nella tua domanda
  2. Un'implementazione di IRutaConditionExtension, che fornisce l'implementazione della condizione al motore
  3. Un'implementazione di IIDEConditionExtension, che fornisce la condizione per UIMA Ruta Workench

La condizione stessa contiene solo la funzionalità che dovrebbe essere aggiunta alla lingua.Il motore di analisi ovviamente non sa nulla di eventuali implementazioni esterne, risultando in una strana eccezione di analisi come "(" non trovata.Questo dovrebbe essere migliorato a volte.Il motore di analisi fornisce un parametro di configurazione additionalExtensions che elenca tutte le estensioni conosciute della lingua.Se non utilizzi UIMA Ruta Workbench, devi aggiungere l'implementazione di IRutaConditionExtension a questo parametro.L'implementazione di IIDEConditionExtension fornisce le funzionalità necessarie per UIMA Ruta Workbench, ovvero il controllo della sintassi, l'evidenziazione della sintassi e così via.Inoltre, consente al Workbench di generare descrittori corretti.Aggiunge l'implementazione di IRutaConditionExtension al rispettivo parametro.Questa estensione del Workbench deve ovviamente essere implementata in un plugin Eclipse installato nella tua istanza Eclipse di UIMA Ruta Workbench, per essere disponibile nel Workbench.È presente un punto di estensione, che è necessario estendere, che conosca sia l'implementazione di IRutaConditionExtension che IIDEConditionExtension.

Esiste un progetto esemplare che prevede l'implementazione di tutti i possibili elementi linguistici.Questo progetto contiene le implementazioni per il motore di analisi e anche l'implementazione per UIMA Ruta Workbench, ed è quindi un plugin Eclipse (attenzione al file pom).

Per quanto riguarda l'estensione della condizione EsempioCondizione, ci sono tre punti/classi importanti:

  1. ExampleCondition.java fornisce l'implementazione della nuova condizione, che valuta le date
  2. ExampleConditionExtension.java fornisce l'estensione per il motore di analisi.Conosce il nome della condizione, la sua implementazione, può creare nuove istanze di quella condizione ed è in grado di verbalizzare la condizione per i componenti della spiegazione.
  3. ExampleConditionIDEExtension fornisce il controllo della sintassi per l'editor e la parola chiave per la colorazione della sintassi.
  4. plugin.xml definisce l'estensione per il 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>
    

Se non utilizzi UIMA Ruta Workbench o desideri solo applicare le regole nelle pipeline UIMA, devi solo ExampleCondition E ExampleConditionExtension, e devi aggiungere org.apache.uima.ruta.example.extensions.ExampleConditionExtension al additionalExtensions parametro del tuo motore di analisi UIMA Ruta (descrittore).

L'aggiunta di nuove condizioni utilizzando progetti Java nello stesso spazio di lavoro non è stata ancora testata, ma almeno mancherà il supporto del Workbench a causa dell'inclusione di estensioni che utilizzano il meccanismo dei punti di estensione di Eclipse.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top