Domanda

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

È stato utile?

Soluzione

Genera le classi di avvolgimento JCAS per i tuoi tipi di annotazione (puoi farlo utilizzando il plug -in UIMA Editor del sistema Tipo per Eclipse fornito con UIMA). Questo ti fornirà lezioni Java che puoi utilizzare per accedere alle annotazioni: queste offrono getter e setter per le funzionalità.

Dovresti dare un'occhiata uimafit, che fornisce un'API più conveniente, inclusi metodi di convenienza per recuperare le annotazioni dal JCAS, ad es. Select (JCAS, token.class) (dove token.class è una delle classi che hai generato con l'editor del sistema di tipo).

Potresti trovare un po 'di avvio rapido Script groovy e una raccolta di componenti UIMA sul Dkpro core pagina.

C'è materiale dal tutorial UIMA@GSCL 2013 (diapositive e codice di esempio) che potrebbe essere utile per te. andare qui e scorrere verso il basso fino al "tutorial".

Divulgazione: sono sviluppatore su UIMA, UIMAFIT, DKPro Core e co-organizzatore sul seminario UIMA@GSCL 2013.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top