匹配UIMA RUTA

时间:2017-11-12 00:05:33

标签: uima ruta

我有类型狗,其功能为sizecolorother

尺寸词表:big, medium, small

其他词表:old, fat, happy, lazy

在这种情况下,颜色词汇表不会影响任何内容,所以我不会列出它。

我的代码(仅用于主文件):

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

正如你在图片上看到的那样,注释“Milo”永远不会被创建(因为它依赖于“other”功能的值“fat”,它与“快乐“,但在输入词中”快乐“在”胖“之前。如果我们在输入中将“fat”放在“happy”之前 - 一切都按预期工作。

那么,问题是如何为同一输入中的同一字典中的每个单一特征创建注释?

enter image description here

2 个答案:

答案 0 :(得分:2)

你的情况不需要列表类型的“其他”功能(例如StringList)吗?因为在这种情况下,白狗既快乐又懒惰,但由于该特征属于“注释”类型(我假设),它只包含一个值。至少它是如何适用于普通的UIMA注释器和管道。

然后你会检查“其他”功能是否包含“胖”。

PS:我是UIMA RUTA的新手

答案 1 :(得分:2)

Rafael说的没错,但我建议使用FSArray而不是列表。这是一个用Ruta 2.6.1测试的例子。注意“其他”特征中的“s”及其类型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};

免责声明:我是UIMA Ruta的开发者