java - UIMA 环境中的 Ruta。在纯 Java 中使用预定义的集合/集合和词典

标签 java uima ruta

我是 Ruta 的初学者,我现在想掌握的想法是如何在 UIMA 环境(纯 Java)中处理类变量/集合。我尝试按照 documentation 中给出的示例进行操作;但是 Ruta 规则可以作为脚本文件在外部应用,也可以使用 Ruta.apply(cas, rule) “当场”应用。这些选项都不允许我使用,例如,文件词典或任何预定义的 java 集合。你能给我一些关于我的问题的提示/解决方案吗?

通常,我使用 UIMA AE 来解析句子,然后使用 Ruta 脚本中创建的注释根据句法结构匹配特定类型的句子。因此,我编写的 Ruta 规则相当简单,但由于设置了 POSTags 而显得笨重。所以我想在 Ruta 内部获得一些灵 active 。如果对这个主题也有任何建议,我将不胜感激。

编辑:例如,我有一个规则考虑由 AE(斯坦福解析器)创建的一组 POSTag。因此,为了匹配所需的句子结构,我将按以下方式对其进行硬编码(我意识到这是最天真的方式):

String rutaSampleRule = "BLOCK(ForEach) Sentence{}{Document{-> Asyndeton} " + "<- {((Constituent.label==\"NN\" COMMA Constituent.label==\"NN\") |" + " (Constituent.label==\"NNP\" COMMA Constituent.label==\"NNP\") |" + " (Constituent.label==\"NNPS\" COMMA Constituent.label==\"NNPS\") |" + " (Constituent.label==\"NNS\" COMMA Constituent.label==\"NNS\"));};}";<br/> Ruta.apply(cas, rutaSampleRule);

现在,我想要的是声明此类 POSTag(即 NNS、NN)的集合,在 Ruta 中对其进行迭代并匹配相应的句子结构(此处为连续名词)。这将使我的规则更加灵活和实用。

第二个选择是使用词典而不是集合,但我认为它们只能在 Ruta 中单独使用(与 MARKFAST)(不是纯 Java);至少我找不到任何例子。

所以,总结一下我的问题:在简单的 Ruta 脚本(不引入任何新类型)中,是否有可能(如果是的话如何)在纯 Java 中使用外部定义的集合/词典?

我希望,我能以更好的方式解释它。提前致谢。

编辑 1: 我通过尝试路径和 example 了解了如何在普通 Java 中使用词典。在指南书中。不过,我想知道如何使用配置参数为变量赋值?

最佳答案

这应该可以解决问题(使用当前主干测试):

String rutaSampleRule = "STRINGLIST posList;"
    + "Sentence{-> Asyndeton} <- {"
    + "c1:Constituent{CONTAINS(posList, c1.label)} COMMA c2:Constituent{c2.label == c1.label};"
    + "};";

List<String> posList = Arrays.asList(new String[] { "NN", "NNP", "NNPS", "NNS" });
Map<String, Object> additionalParams = new HashMap<>();
additionalParams.put(RutaEngine.PARAM_VAR_NAMES, new String[] { "posList" });
additionalParams.put(RutaEngine.PARAM_VAR_VALUES, new String[] { StringUtils.join(posList, ",") });
Ruta.apply(cas, rutaSampleRule, additionalParams);

一些评论:

  • 在规则中声明了一个 STRINGLIST,并使用两个配置参数进行填充。
  • 我重构了内联规则:不需要析取组合规则元素(多个规则会做同样的事情),不需要多个规则元素/规则。
  • 示例中现在不再需要 block 。我删除了它。
  • 如果发布的 Ruta 版本有问题,需要重写规则:使用字符串变量而不是直接比较标签表达式的特征。
  • 使用外部字典的方法会非常相似,例如,使用 INLIST 条件。

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

关于java - UIMA 环境中的 Ruta。在纯 Java 中使用预定义的集合/集合和词典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41885359/

相关文章:

metadata - 如何访问 UIMA 中的文档元数据?

java - 解析大型 XML 文件并动态生成 SQL 表

java - 有没有办法比较管道之间的 JCas 数据?

eclipse - 使用 UIMA,JDTsolveBinding() 始终返回 null

java - UIMA RUTA - 如何组合注释?

uima ruta 评分条件

java - 如何将带有 Alpha 的 Type_Byte_Binary BufferedImage 转换为 TYPE_4BYTE_ABGR

java - 异常不抛出

java - 在按下特定按钮时禁用 ICEFaces 表单上的验证