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)?