Recientemente me enteré de UIMA (http://uima.apache.org/). Parece prometedor para tareas simples de la PNL, como tokenizar, división de oraciones, etiquetado de parte del discurso, etc.
He logrado tener en mis manos una muestra de Java mínima ya configurada que está utilizando componentes OpenNLP para su tubería.
El código se ve así:
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());
}
}
Extracto de OpenNLPTEXTAnalyzer.xml:
<delegateAnalysisEngine key="SentenceDetector">
<import location="SentenceDetector.xml" />
</delegateAnalysisEngine>
<delegateAnalysisEngine key="Tokenizer">
<import location="Tokenizer.xml" />
</delegateAnalysisEngine>
El código Java produce salida como esta:
Token
sofa: _InitialView
begin: 426
end: 435
pos: "NNP"
Estoy tratando de obtener la misma información de cada objeto de anotación que utiliza el método toString (). Ya he examinado el código fuente de UIMA para comprender de dónde provienen los valores. Mis intentos de recuperarlos son obras, pero no son inteligentes de ninguna manera.
Estoy luchando por encontrar ejemplos fáciles que extraen información de los objetos JCAS.
Estoy buscando una manera de obtener, por ejemplo, todas las anotaciones producen por mi postesger o por el boletín de oraciones para un uso adicional.
Supongo
List<Feature> feats = it.next().getType().getFeatures();
es un comienzo para obtener valores, pero debido a que UIMA posee clases para tipos primitivos, incluso el código fuente del método ToString en la clase de anotación se lee como una bofetada en la cara.
¿Dónde encuentro el código Java que usa cosas básicas de UIMA y dónde están los buenos tutoriales (excepto Javadoc del marco en sí)?