UIMA RUTA - 如何模拟IF-ELSE条件?

时间:2016-08-09 17:05:40

标签: conditional-statements uima ruta

我目前正在尝试在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")};
};

1 个答案:

答案 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的开发者