1

我目前正在尝试解决 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 应该是真或假,但不能同时为“真”和“假”。

我试过这个:

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")};
};
4

1 回答 1

0

Ruta 中还没有 IF-THEN 结构。最相似的事情是两个具有相互排斥条件的 BLOCK 结构。嗯,这也可以通过规则来实现。

根据您的规则:如果第二条规则始终匹配,则每个 Fragment 注释中没有(可见的)ProcessTerm 注释。

在您的第一条规则中,您为每个 Fragment 注释中的每个 ProcessTerm 注释创建 Process 注释。

如果我没有误解您的描述,我会假设这可能是您正在寻找的内容:

Fragment {CONTAINS(ProcessTerm) -> CREATE(Process, "finished" = "true")};
Fragment {-CONTAINS(ProcessTerm) -> CREATE(Process, "finished" = "false")};

这会迭代所有 Fragment 注释两次,这并不是真正必要的。您还可以执行以下操作(或任何带有 BLOCK 和变量的变体):

Fragment->{
  Document{CONTAINS(ProcessTerm)-> CREATE(Process, "finished" = "true")};
  Document{-PARTOF(Process) -> CREATE(Process, "finished" = "false")};
};

免责声明:我是 UIMA Ruta 的开发人员

于 2016-08-10T17:15:03.593 回答