2 votes

Faire correspondre toutes les occurrences du même dictionnaire sur une ligne en UIMA RUTA

J'ai le type Chien, qui a des caractéristiques size , color y other

Taille de la liste de mots : big, medium, small

Autre liste de mots : old, fat, happy, lazy

La liste de mots de couleur n'a aucune incidence dans ce cas, je ne la citerai donc pas.

Et mon code (juste pour le fichier 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};

Comme vous pouvez le voir sur la photo, l'annotation "Milo" n'est jamais créée (parce qu'il s'appuie sur la valeur "fat" de la caractéristique "other" qui est dans le même dictionnaire que le "happy", mais dans le mot d'entrée "happy" passe avant "fat"). Si nous mettons "fat" avant "happy" dans l'entrée - tout fonctionne comme prévu.

Donc, la question est comment puis-je avoir des annotations créées pour chaque caractéristique unique du même dictionnaire trouvée dans la même entrée ?

enter image description here

2voto

Rafael Palliarini Points 107

Votre cas ne nécessiterait-il pas une fonctionnalité "autre" du type de liste (StringList par exemple) ? Parce que dans ce cas, le chien blanc est à la fois heureux et paresseux, mais puisque la caractéristique est du type "Annotation" (je suppose), elle ne contiendra qu'une seule valeur. Du moins, c'est ainsi que cela fonctionne pour les annotateurs et les pipelines UIMA ordinaires.

Ensuite, vous vérifiez si la caractéristique "autre" contient "gras".

PS : je suis nouveau à l'UIMA RUTA

2voto

Peter Kluegl Points 2358

Rafael a raison, mais je recommanderais un FSArray au lieu de la liste. Voici un exemple testé avec Ruta 2.6.1. Attention au "s" dans la fonction "others" et son type 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};

CLAUSE DE NON-RESPONSABILITÉ : Je suis un développeur de UIMA Ruta.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X