Pergunta

Eu descobri recentemente sobre Uima (http://uima.apache.org/). Parece promissor para tarefas simples de PNL, como tokenize, divisão de frases, marcação de parte da fala etc.

Consegui colocar minhas mãos em uma amostra Java mínima já configurada que está usando componentes OpenNLP para seu pipeline.

O código se parece com o seguinte:

public void ApplyPipeline() throws IOException, InvalidXMLException,
        ResourceInitializationException, AnalysisEngineProcessException {

    XMLInputSource in = new XMLInputSource(
            "opennlp/OpenNlpTextAnalyzer.xml");
    ResourceSpecifier specifier = UIMAFramework.getXMLParser()
            .parseResourceSpecifier(in);

    AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(specifier);

    JCas jcas = ae.newJCas();
    jcas.setDocumentText("This is my text.");

    ae.process(jcas);
    this.doSomethingWithResults(jcas);

    jcas.reset();
    ae.destroy();
}

private void doSomethingWithResults(JCas jcas) {
    AnnotationIndex<Annotation> idx = jcas.getAnnotationIndex();
    FSIterator<Annotation> it = idx.iterator();

    while (it.hasNext()) {
        System.out.println(it.next().toString());
    }

}

Trecho de OpenNlpTextaNalyzer.xml:

<delegateAnalysisEngine key="SentenceDetector">
    <import location="SentenceDetector.xml" />
</delegateAnalysisEngine>
<delegateAnalysisEngine key="Tokenizer">
    <import location="Tokenizer.xml" />
</delegateAnalysisEngine>

O código Java produz saída como esta:

Token
   sofa: _InitialView
   begin: 426
   end: 435
   pos: "NNP"

Estou tentando obter as mesmas informações de cada objeto de anotação que o método tostring () usa. Eu já procurei o código -fonte da UIMA para entender de onde vêm os valores. Minhas tentativas de recuperá -las do tipo funciona, mas não são inteligentes de forma alguma.

Estou lutando para encontrar exemplos fáceis que extraem informações dos objetos do JCAS.

Estou procurando uma maneira de obter, por exemplo, todas as anotações produzem pela minha postagem ou pelo SentencesPlitter para uso adicional.

Eu acho

List<Feature> feats = it.next().getType().getFeatures();

é um começo para obter valores, mas devido a UIMA possui classes para tipos primitivos, mesmo o código -fonte do método da tostragem na classe de anotação se parece como um tapa na face.

Onde encontro o código Java que usa coisas básicas da UIMA e onde estão os bons tutoriais (exceto Javadoc da própria estrutura)?

Foi útil?

Solução

Gere classes de wrapper JCAS para seus tipos de anotação (você pode fazer isso usando o plug -in UIMA do editor de sistema do System para eclipse que vem com UIMA). Isso fornecerá a você aulas de Java que você pode usar para acessar as anotações - elas oferecem getters e setters para recursos.

Você deveria dar uma olhada em uimafit, que fornece uma API mais conveniente, incluindo métodos de conveniência para recuperar anotações do JCAS, por exemplo, selecionar (JCAs, token.class) (onde token.class é uma das classes que você gerou com o editor de sistema de tipos).

Você pode encontrar um início rápido Scripts groovy e uma coleção de componentes UIMA no DKPro Core página.

Há material do tutorial UIMA@GSCL 2013 (slides e código de amostra) que podem ser úteis para você. Vai aqui e role para baixo até o "tutorial".

Divulgação: sou desenvolvedor no UIMA, UIMAFIT, DKPro Core e co-organizador no workshop UIMA@GSCL 2013.

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