【问题标题】:UIMA Ruta Only annotate longest matchUIMA Ruta 只标注最长匹配
【发布时间】:2016-11-15 16:58:37
【问题描述】:

我正在使用 RUTA 并编写了许多不同的规则来提取相同的实体。例如,我将提取“卫生纸工厂”。目前我的规则将导致卫生纸厂纸厂工厂。但我只对最长的匹配感兴趣。

我创建了一个最小的示例:

DECLARE Test;
(CW CW) {-> CREATE(Test)};
(CW CW CW) {-> CREATE(Test)};

还有我的测试字符串:

lower lower Upper Upper Upper lower Upper

上面的规则将匹配Upper UpperUpper Upper Upper。但在这种情况下,我只对最后一条规则的结果感兴趣。

是否可以删除较短的匹配项?

【问题讨论】:

    标签: uima ruta


    【解决方案1】:

    有几个选项可以避免额外的匹配并删除额外创建的注释。

    您可以使用以下内容删除附加注释:

    Test->{ANY t:@Test{-> UNMARK(t)};t:@Test{-> UNMARK(t)} ANY;};
    

    此规则检查所有测试注释并在该范围内应用两个规则。每个规则都会搜索前面或后面的 Test 注释,这意味着该注释小于第一个注释。如果匹配,则删除注释。

    还有PARTOFNEQ条件,但是比较慢:

    Test{PARTOFNEQ(Test)->UNMARK(Test)};
    

    如果您想避免创建注释,则需要更改规则的顺序并首先应用更具体的规则。您可以通过多种方式更改匹配过程,例如,使用 PARTOF 条件、MARKONCE 操作或设置 GREEDYANCHORING。

    一个例子:

    (CW{-PARTOF(Test)} CW CW) {-> CREATE(Test)};
    (CW{-PARTOF(Test)} CW) {-> CREATE(Test)};
    

    在您的示例中,您当然可以执行以下操作:

    CW[2,3]{-PARTOF(Test)-> Test};
    

    但这可能不是这个问题背后的想法。

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

    【讨论】:

    • 谢谢 :) - 第一个解决方案是否需要特殊的 RUTA 版本?我正在使用 2.3.1 第二种解决方案有效 - 但正如你所说,它很慢。
    • 对于第一个解决方案,需要 UIMA Ruta 2.5.0。您也可以为 2.3.1 重写此规则,例如,使用 BLOCK 和 UNMARK 中的类型
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多