Question

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

Était-ce utile?

La solution

Générez des classes de wrapper JCAS pour vos types d'annotation (vous pouvez le faire en utilisant le plugin UIMA de l'éditeur de système de type pour Eclipse fourni avec UIMA). Cela vous fournira des classes Java que vous pouvez utiliser pour accéder aux annotations - celles-ci offrent des getters et des setters pour les fonctionnalités.

Tu devrais jeter un œil uimafit, qui fournit une API plus pratique, y compris des méthodes de commodité pour récupérer des annotations à partir du JCAS, par exemple SELECT (JCAS, Token.class) (où token.class est l'une des classes que vous avez générées avec l'éditeur de système de type).

Vous pourriez trouver un démarrage rapide Scripts groovy et une collection de composants UIMA sur le Noyau dkpro page.

Il y a du matériel du tutoriel UIMA @ GSCL 2013 (diapositives et exemples de code) qui pourraient vous être utiles. Aller ici et faites défiler vers le bas vers "Tutorial".

Divulgation: je suis développeur sur UIMA, UIMAFIT, DKPRO CORE et co-organisateur de l'atelier UIMA @ GSCL 2013.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top