我刚开始使用Ruta,我想编写一个可以这样工作的规则:
它会尝试匹配一个单词,例如XYZ,当它到达它时,它会将之前的文本分配给Annotator CompanyDetails。
例如:
这是一个包含我们感兴趣的短语的段落,它跟在句子后面。 LL,Inc。是一家特拉华州有限责任公司(XYZ)。
运行脚本后,注释器CompanyDetails将包含字符串: LL,Inc。是一家特拉华州有限责任公司
答案 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)};};