一个简单的Ruta注释器

时间:2014-03-28 10:27:15

标签: uima ruta

我刚开始使用Ruta,我想编写一个可以这样工作的规则:

它会尝试匹配一个单词,例如XYZ,当它到达它时,它会将之前的文本分配给Annotator CompanyDetails。

例如:

这是一个包含我们感兴趣的短语的段落,它跟在句子后面。 LL,Inc。是一家特拉华州有限责任公司(XYZ)。

运行脚本后,注释器CompanyDetails将包含字符串: LL,Inc。是一家特拉华州有限责任公司

1 个答案:

答案 0 :(得分:0)

当您谈论注释器'CompanyDetails'时,我假设您的意思是“CompanyDetails”类型的注释。

有许多(非常多)不同的方法来解决这个任务。这是一个应用一些帮助规则的例子:

DECLARE Annotation CompanyDetails (STRING context);
DECLARE Sentence, XYZ;

// just to get a running example with simple sentences
PERIOD #{-> Sentence} PERIOD;
#{-> Sentence} PERIOD;
"XYZ" -> XYZ; // should be done in a dictionary

// the actual rule
STRING s;
Sentence{-> MATCHEDTEXT(s)}->{XYZ{-> CREATE(CompanyDetails, "context" = s)};};

此示例将完整句子的字符串存储在要素中。规则匹配所有句子并将覆盖的文本存储在变量''中。然后,调查句子的内容:内联规则尝试在XYZ上匹配,创建类型CompanyDetails的注释,并将变量的值分配给名为context的特征。我宁愿存储注释而不是字符串,因为你仍然可以使用getCoveredText()来获取字符串。如果您只需要在句子中的XYZ之前使用令牌,那么您可以执行类似的操作(此时使用注释而不是字符串):

DECLARE Annotation CompanyDetails (Annotation context);
DECLARE Sentence, XYZ, Context;

// just to get a running example with simple sentences
PERIOD #{-> Sentence} PERIOD;
#{-> Sentence} PERIOD;
"XYZ" -> XYZ;

// the actual rule
Sentence->{ #{-> Context} SPECIAL? @XYZ{-> GATHER(CompanyDetails, "context" = 1)};};