Ich habe kürzlich von uima (http://uima.apache.org/). Es sieht vielversprechend für einfache NLP-Aufgaben wie Tokenisierung, Satzaufteilung, Spezifikmagging usw. aus usw.
Ich habe es geschafft, ein bereits konfiguriertes minimales Java -Sample in die Hände zu bekommen, bei dem OpenNLP -Komponenten für seine Pipeline verwendet werden.
Der Code sieht so aus:
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());
}
}
Auszug aus openNlptextanalyzer.xml:
<delegateAnalysisEngine key="SentenceDetector">
<import location="SentenceDetector.xml" />
</delegateAnalysisEngine>
<delegateAnalysisEngine key="Tokenizer">
<import location="Tokenizer.xml" />
</delegateAnalysisEngine>
Der Java -Code erzeugt eine solche Ausgabe:
Token
sofa: _InitialView
begin: 426
end: 435
pos: "NNP"
Ich versuche, die gleichen Informationen von jedem Annotationsobjekt zu erhalten, das die Methode toString () verwendet. Ich habe bereits den Quellcode von UIMA untersucht, um zu verstehen, woher die Werte stammen. Meine Versuche, sie abzurufen, funktioniert, aber sie sind in keiner Weise schlau.
Ich kämpfe darum, einfache Beispiele zu finden, die Informationen aus den JCAS -Objekten herausholen.
Ich suche nach einer Möglichkeit, zum Beispiel alle Annotationen zu erhalten, die von meiner Postbringung oder beim Sätzen für die weitere Verwendung produziert werden.
ich vermute
List<Feature> feats = it.next().getType().getFeatures();
ist ein Start, um Werte zu erhalten, aber aufgrund von UIMA besitzt auch der Klassen für primitive Typen, selbst der Quellcode der ToString -Methode in der Annotationsklasse liest sich wie ein Schlag ins Gesicht.
Wo finde ich Java -Code, der grundlegende UIMA -Sachen verwendet, und wo sind gute Tutorials (außer Javadoc aus dem Framework selbst)?