Pregunta

Recientemente me enteré de UIMA (http://uima.apache.org/). Parece prometedor para tareas simples de la PNL, como tokenizar, división de oraciones, etiquetado de parte del discurso, etc.

He logrado tener en mis manos una muestra de Java mínima ya configurada que está utilizando componentes OpenNLP para su tubería.

El código se ve así:

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());
    }

}

Extracto de OpenNLPTEXTAnalyzer.xml:

<delegateAnalysisEngine key="SentenceDetector">
    <import location="SentenceDetector.xml" />
</delegateAnalysisEngine>
<delegateAnalysisEngine key="Tokenizer">
    <import location="Tokenizer.xml" />
</delegateAnalysisEngine>

El código Java produce salida como esta:

Token
   sofa: _InitialView
   begin: 426
   end: 435
   pos: "NNP"

Estoy tratando de obtener la misma información de cada objeto de anotación que utiliza el método toString (). Ya he examinado el código fuente de UIMA para comprender de dónde provienen los valores. Mis intentos de recuperarlos son obras, pero no son inteligentes de ninguna manera.

Estoy luchando por encontrar ejemplos fáciles que extraen información de los objetos JCAS.

Estoy buscando una manera de obtener, por ejemplo, todas las anotaciones producen por mi postesger o por el boletín de oraciones para un uso adicional.

Supongo

List<Feature> feats = it.next().getType().getFeatures();

es un comienzo para obtener valores, pero debido a que UIMA posee clases para tipos primitivos, incluso el código fuente del método ToString en la clase de anotación se lee como una bofetada en la cara.

¿Dónde encuentro el código Java que usa cosas básicas de UIMA y dónde están los buenos tutoriales (excepto Javadoc del marco en sí)?

¿Fue útil?

Solución

Genere clases de envoltura JCAS para sus tipos de anotación (puede hacerlo utilizando el complemento UIMA del editor de sistemas de tipo para Eclipse que viene con UIMA). Esto le proporcionará clases de Java que puede usar para acceder a las anotaciones: estas ofertas reciben y setters para las funciones.

Deberías echar un vistazo a uiMafit, que proporciona una API más conveniente que incluye métodos de conveniencia para recuperar anotaciones de los JCA, por ejemplo, Select (JCAS, Token.Class) (donde Token.Class es una de las clases que generó con el editor de sistemas de tipos).

Podrías encontrar algo de inicio rápido Guiones maravillosos y una colección de componentes UIMA en el Núcleo dkpro página.

Hay material del tutorial UIMA@GSCL 2013 (diapositivas y código de muestra) que podría ser útil para usted. Vamos aquí y desplácese hacia abajo hasta "Tutorial".

Divulgación: Soy desarrollador en UIMA, UIMAFIT, DKPRO Core y coorganizador en el taller UIMA@GSCL 2013.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top