Tengo el tipo Perro, que tiene las funciones size, color y other

Tamaño de lista de palabras: big, medium, small

Otra lista de palabras: old, fat, happy, lazy

La lista de palabras de colores no afecta nada en este caso, por lo que no la incluiré.

Y mi código (solo para el archivo principal):

PACKAGE dog;

SCRIPT dog.Color;
SCRIPT dog.Size;
SCRIPT dog.Other;

TYPESYSTEM dogTypeSystemDescriptor;

ENGINE utils.PlainTextAnnotator;
TYPESYSTEM utils.PlainTextTypeSystem;

Document{-> CALL(Color)};
Document{-> CALL(Size)};
Document{-> CALL(Other)};

Document{-> EXEC(PlainTextAnnotator, {Line})};

Line{-> CREATE(Dog, "color" = Color, "size" = Size, "other" = Other)};

DECLARE Max, Milo;

Dog{Dog.color.ct == "black", 
    Dog.size.ct == "big" -> Max};

Dog{Dog.color.ct == "white", 
    Dog.other.ct == "fat" -> Milo};

Como puede ver en la imagen, la anotación "Milo" nunca se crea (porque se basa en el valor "gordo" de la función "otros" que está en el mismo diccionario con "feliz", pero en la palabra de entrada "feliz" va antes de "gordo"). Si ponemos "gordo" antes de "feliz" en la entrada, todo funciona como se esperaba.

Entonces, la pregunta es ¿cómo puedo hacer que se creen anotaciones para cada característica del mismo diccionario que se encuentra en la misma entrada?

enter image description here

2
eawer 12 nov. 2017 a las 03:05

2 respuestas

La mejor respuesta

Rafael tiene razón, pero recomendaría un FSArray en lugar de la lista. Aquí hay un ejemplo probado con Ruta 2.6.1. Tenga en cuenta la "s" en la función "otros" y su tipo FSArray.

ENGINE utils.PlainTextAnnotator;
TYPESYSTEM utils.PlainTextTypeSystem;

// mock dictionary lookup and scripts
DECLARE Color, Size, Other;
"black|white" -> Color;
"big|small" -> Size;
"lazy|happy|fat" -> Other;

DECLARE Dog (Color color, Size size, FSArray others);

Document{-> EXEC(PlainTextAnnotator, {Line})};

Line{-> CREATE(Dog, "color" = Color, "size" = Size, "others" = Other)};

DECLARE Max, Milo;

Dog{Dog.color.ct == "black", 
    Dog.size.ct == "big" -> Max};

Dog{Dog.color.ct == "white", 
    Dog.others.ct == "fat" -> Milo};

DESCARGO DE RESPONSABILIDAD: Soy desarrolladora de UIMA Ruta

2
Peter Kluegl 14 nov. 2017 a las 15:19

¿No necesitaría su caso una característica "otro" del tipo de lista (StringList, por ejemplo)? Porque en este caso el perro blanco es feliz y vago, pero dado que la característica es del tipo "Anotación" (supongo) contendrá solo un valor. Al menos así es como funciona para anotadores y canalizaciones UIMA simples.

A continuación, comprobará si la función "otros" contiene "grasa".

PD: Soy nueva en UIMA RUTA

2
Rafael Palliarini 13 nov. 2017 a las 00:16