J'ai récemment découvert Uima (http://uima.apache.org/). Il semble prometteur pour les tâches NLP simples, telles que le tokenisation, la division des phrases, le marquage d'une partie du discours, etc.
J'ai réussi à mettre la main sur un échantillon Java minimal déjà configuré qui utilise des composants OpenNLP pour son pipeline.
Le code ressemble à ceci:
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());
}
}
Extrait à partir d'OpennlPTextanalyzer.xml:
<delegateAnalysisEngine key="SentenceDetector">
<import location="SentenceDetector.xml" />
</delegateAnalysisEngine>
<delegateAnalysisEngine key="Tokenizer">
<import location="Tokenizer.xml" />
</delegateAnalysisEngine>
Le code Java produit une sortie comme ceci:
Token
sofa: _InitialView
begin: 426
end: 435
pos: "NNP"
J'essaie d'obtenir les mêmes informations de chaque objet d'annotation que la méthode toString () utilise. J'ai déjà examiné le code source d'UIMA pour comprendre d'où viennent les valeurs. Mes tentatives pour les récupérer en quelque sorte, mais ils ne sont pas intelligents en aucune façon.
J'ai du mal à trouver des exemples faciles qui extraient des informations sur les objets JCAS.
Je cherche un moyen d'obtenir par exemple toutes les annotations produites par mon post-agabeur ou par les phrases Plitter pour une utilisation ultérieure.
Je suppose
List<Feature> feats = it.next().getType().getFeatures();
est un début à obtenir des valeurs, mais en raison de l'UIMA possède des classes pour les types primitifs, même le code source de la méthode TOSTRING dans la classe d'annotation se lit comme une gifle dans le visage.
Où puis-je trouver du code Java qui utilise des trucs UIMA de base et où sont de bons tutoriels (sauf Javadoc du cadre lui-même)?