Ho recentemente scoperto UIMA (http://uima.apache.org/). Sembra promettente per semplici compiti di PNL, come tokenizzazioni, divisione delle frasi, etichettatura parte di discorso ecc.
Sono riuscito a mettere le mani su un campione Java minimo già configurato che utilizza componenti OpenNLP per la sua pipeline.
Il codice sembra così:
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());
}
}
Estratto da OpenNlpTextNalyzer.xml:
<delegateAnalysisEngine key="SentenceDetector">
<import location="SentenceDetector.xml" />
</delegateAnalysisEngine>
<delegateAnalysisEngine key="Tokenizer">
<import location="Tokenizer.xml" />
</delegateAnalysisEngine>
Il codice Java produce output in questo modo:
Token
sofa: _InitialView
begin: 426
end: 435
pos: "NNP"
Sto cercando di ottenere le stesse informazioni da ogni oggetto di annotazione utilizzato dal metodo ToString (). Ho già esaminato il codice sorgente di UIMA per capire da dove provengono i valori. I miei tentativi di recuperarli in qualche modo, ma non sono in alcun modo intelligenti.
Sto lottando per trovare semplici esempi che, estrarre informazioni dagli oggetti JCAS.
Sto cercando un modo per ottenere ad esempio tutte le annotazioni che producono dalla mia post post o da frasi per un ulteriore utilizzo.
credo
List<Feature> feats = it.next().getType().getFeatures();
è un inizio per ottenere valori, ma a causa di UIMA possiede classi per tipi primitivi, anche il codice sorgente del metodo toString nella classe di annotazione si legge come uno schiaffo in faccia.
Dove trovo il codice Java che utilizza roba UIMA di base e dove sono buoni tutorial (tranne Javadoc dal framework stesso)?