Como posso adicionar uma condição personalizada a um projeto RUTA existente?Comecei, mas estou preso

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

  •  22-12-2019
  •  | 
  •  

Pergunta

Quero adicionar uma condição de regra UIMA RUTA personalizada.Eu tenho um projeto UIMA Ruta existente no Eclipse.Até agora criei um arquivo fonte no mesmo projeto com um stub de anotador básico:

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

O arquivo é compilado para o destino/classes/...pasta, mas quando eu crio um script RUTA:

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

...O Eclipse me diz que "MyNewCondition" não está definido e quando o executo recebo:"Erro na linha 40, "(":não encontrei nenhuma alternativa viável" no console.Presumo que preciso fazer mais alguma importação, mas não sei como.Tentei trabalhar a partir do projeto de exemplo de extensão no repositório do Github, mas não sei por onde começar, pois o arquivo de script não contém mais importações, mas os arquivos descritores xml associados sim.Mas como estes são gerados automaticamente, não sei se é isso que devo mudar ou é outra coisa.

Também tentei importar o mesmo novo tipo de condição de um segundo projeto por meio das opções de caminho de construção do Eclipse, mas também não tive sorte.

Alguém pode ajudar?Obrigado.

Foi útil?

Solução

São necessárias pelo menos três classes para adicionar uma nova condição que também seja resolvida no UIMA Ruta Workbench:

  1. Uma implementação da condição como você fez na sua pergunta
  2. Uma implementação de IRutaConditionExtension, que fornece a implementação da condição para o mecanismo
  3. Uma implementação de IIDEConditionExtension, que fornece a condição para o UIMA Ruta Workench

A condição em si contém apenas a funcionalidade que deve ser adicionada à linguagem.É claro que o mecanismo de análise não sabe nada sobre quaisquer implementações externas, resultando em uma estranha exceção de análise como "(" não encontrada.Isso deveria ser melhorado algumas vezes.O mecanismo de análise fornece um parâmetro de configuração additionalExtensions que lista todas as extensões conhecidas para o idioma.Se você não estiver usando o UIMA Ruta Workbench, será necessário incluir sua implementação de IRutaConditionExtension nesse parâmetro.A implementação do IIDEConditionExtension fornece a funcionalidade necessária para o UIMA Ruta Workbench que é a verificação de sintaxe, realce de sintaxe e assim por diante.Além disso, permite que o Workbench gere descritores corretos.Adiciona sua implementação de IRutaConditionExtension ao respectivo parâmetro.Esta extensão do Workbench precisa, obviamente, ser implementada em um plug-in Eclipse que está instalado em sua instância UIMA Ruta Workbench Eclipse, para estar disponível no Workbench.Existe um ponto de extensão que você precisa estender e que conhece sua implementação de IRutaConditionExtension e IIDEConditionExtension.

Existe um projeto exemplar que prevê a implementação de todos os elementos de linguagem possíveis.Este projeto contém as implementações para o mecanismo de análise e também a implementação para o UIMA Ruta Workbench, sendo portanto um plugin do Eclipse (lembre-se do arquivo pom).

Em relação à extensão da condição ExemploCondição, existem três pontos/classes importantes:

  1. ExampleCondition.java fornece a implementação da nova condição, que avalia datas
  2. ExampleConditionExtension.java fornece a extensão para o mecanismo de análise.Ele conhece o nome da condição, sua implementação, pode criar novas instâncias dessa condição e é capaz de verbalizar a condição para os componentes explicativos.
  3. ExampleConditionIDEExtension fornece a verificação de sintaxe para o editor e a palavra-chave para coloração de sintaxe.
  4. plugin.xml define a extensão do 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 você não utiliza o UIMA Ruta Workbench ou deseja apenas aplicar as regras em pipelines UIMA, você só precisa ExampleCondition e ExampleConditionExtension, e você precisa adicionar org.apache.uima.ruta.example.extensions.ExampleConditionExtension para o additionalExtensions parâmetro do seu mecanismo de análise UIMA Ruta (descritor).

Adicionar novas condições usando projetos Java no mesmo espaço de trabalho ainda não foi testado, mas pelo menos o suporte do Workbench estará faltando devido à inclusão de extensões usando o mecanismo de ponto de extensão do Eclipse.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top