【问题标题】:Setting feature value to the count of containing annotation in UIMA Ruta将特征值设置为 UIMA Ruta 中包含注释的计数
【发布时间】:2014-07-18 22:38:28
【问题描述】:

我有一个 RUTA 脚本,其中所有句子都用句子注释进行了注释,并且各种单词和短语都用它们自己的特定注释进行了注释。这一切都按预期工作。

这些注释中的每一个都有一个包含它的句子索引的特征。所以在一个人为的例子中并给出了文本

杰克和吉尔上了山。杰克摔倒了。

我有一个“向下”注释,我想将句子索引设置为 2,表示它在第二个句子中。尽管我知道这不正确,但我正在考虑类似以下内容。

Sentence{CONTAINS(Down) -> Down.sentence_index = index

其中 index 是句子的索引。使用 RUTA 可以做到这一点吗?如果是这样,什么是合适的脚本。我可以在一个单独的分析引擎中执行此操作,并且过去已经这样做了,但我希望用 ruta 脚本替换其中的一些。

谢谢,

尼克

【问题讨论】:

    标签: uima ruta


    【解决方案1】:

    在 UIMA Ruta 中有几种表达方式。我的第一个猜测是:

    // just to have an executable example
    DECLARE Sentence;
    DECLARE Annotation Down (INT sentence_index);
    ((# PERIOD){-> Sentence})+;
    "down" -> Down;
    
    // the acutal rule with a helper variable
    INT index;
    Sentence{CONTAINS(Down), CURRENTCOUNT(Sentence, index)} -> 
       {Down{-> Down.sentence_index = index};};
    

    该规则匹配所有包含 Down 注释的句子。此外,CURRENTCOUNT 将句子注释计数到匹配的位置,并将值存储在变量索引中。然后,一个内联规则(由第一个“->”表示)匹配匹配句子中的所有 Down 注释,并将变量的值分配给匹配的 Down 注释的特征。根据你想从 0 还是 1 开始,你需要增加分配的值:

    ... Down.sentence_index = (index+1)};};
    

    条件 CURRENTCOUNT 也可以接受最小值和最大值,以便像真实条件一样运行。它真的很旧,所以我不知道它如何扩展到大型文档。

    这是另一个示例,但这次没有 CURRENTCOUNT 条件并将索引存储在 Sentence 注释中:

    DECLARE Annotation Sentence (INT index);
    DECLARE Annotation Down (INT sentence_index);
    INT index;
    
    (# PERIOD){-> Sentence, ASSIGN(index, (index + 1)), Sentence.index = index};
    PERIOD (# PERIOD){-> Sentence, ASSIGN(index, (index + 1)), Sentence.index = index};
    "down" -> Down;
    
    Sentence{CONTAINS(Down) -> ASSIGN(index, Sentence.index)} 
      ->  {Down{-> Down.sentence_index = index};};
    

    请注意,不能使用第一个示例中创建句子注释的规则,因为它只使用一个规则匹配,并且它的操作应用于匹配的片段。第二个示例中的规则导致许多规则匹配,因此在处理下一个规则匹配之前应用这些操作。不同匹配范围的特征值之间的复制不是很好,但可能会有所改进。

    如果你已经有句子注释,你可以给索引分配类似的东西:

    Sentence{-> ASSIGN(index, (index + 1)), Sentence.index = index};
    

    已使用 UIMA Ruta 2.2.1-SNAPSHOT 测试示例。

    (我是 UIMA Ruta 的开发者)

    【讨论】:

    • 谢谢,这对一个皱纹很有效。我正在使用假定现有句子注释的代码。我的单元测试有 3 个文档。在第一个文档中,第一句索引为 1。在第二个文档中,第一句索引为 0。在第三个文档中,第一句索引为 1。
    • 嗯,这很奇怪。您使用 CURRENTCOUNT 还是使用规则元素的顺序属性分配索引?你能提供更多信息,也许是一个可重复的例子?我的第一个猜测是可能存在重叠的句子注释,或者句子的开头不可见(以空格开头)。
    猜你喜欢
    • 1970-01-01
    • 2018-08-27
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多