我有类型狗,其功能为size
,color
和other
尺寸词表: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”之前 - 一切都按预期工作。
那么,问题是如何为同一输入中的同一字典中的每个单一特征创建注释?
答案 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的开发者