我目前正在尝试在RUTA中解决以下用例:
If a Fragment contains one or more words from a WordlistA, then CREATE(Process, "finished" = "true")
If the Fragment contains none of the words from the WordlistA, then CREATE(Process, "finished" = "false")
所以创建的注释Process @ finished应该是true或false,但不能同时“true”和“false”。
我试过这个:
DECLARE Process (STRING finsihed);
WORDLIST WordlistA = 'mywordlist.txt';
Document{-> MARKFAST(ProcessTerm, WordlistA)};
Fragment {} -> {ProcessTerm {-> CREATE(Process, "finished" = "true")};};
Fragment {-CONTAINS(ProcessTerm) -> CREATE(Process, "finished" = "false")};
据我所知,第二条规则始终匹配!?但为什么?因此,如果第一个规则匹配,ProcessTerm @ finished注释包含'true'和'false'。
使用RUTA获得用例的最佳方法是什么?在我看来,我需要像IF-ELSE-Statement这样的东西。
由于用例在过去两小时内发生了一些变化,
If a **Document** contains one or more words from a WordlistA, then CREATE(Process, "finished" = "true")
If the **Document** contains none of the words from the WordlistA, then CREATE(Process, "finished" = "false")
我现在以下列方式使用Peters提案:
Document->{
Document{CONTAINS(ProcessTerm)-> CREATE(Process, "finished" = "true")};
Document{-PARTOF(Process) -> CREATE(Process, "finished" = "false")};
};
答案 0 :(得分:0)
Ruta中还没有IF-THEN构造。最相似的是两个具有相互排除条件的BLOCK结构。嗯,这也可以通过规则来实现。
遵守你的规则: 如果第二个规则始终匹配,那么每个片段注释中都没有(可见的)ProcessTerm注释。
在第一个规则中,为每个片段注释中的每个ProcessTerm注释创建Process注记。
如果我没有误解你的描述,我会认为这可能是你想要的:
Fragment {CONTAINS(ProcessTerm) -> CREATE(Process, "finished" = "true")};
Fragment {-CONTAINS(ProcessTerm) -> CREATE(Process, "finished" = "false")};
这会迭代所有片段注释两次,这不是必需的。您也可以执行类似(或使用BLOCK和变量的任何变体):
Fragment->{
Document{CONTAINS(ProcessTerm)-> CREATE(Process, "finished" = "true")};
Document{-PARTOF(Process) -> CREATE(Process, "finished" = "false")};
};
DICLAIMER:我是UIMA Ruta的开发者