【问题标题】:Ruta in UIMA Environment. Working with predifined collections/sets and lexicons in plain JavaUIMA 环境中的 Ruta。在纯 Java 中使用预定义的集合/集合和词典
【发布时间】:2017-01-30 21:08:30
【问题描述】:

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

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

编辑:例如,我有一个规则考虑由 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\"));};}";
Ruta.apply(cas, rutaSampleRule);

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

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

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

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

编辑 1: 我通过在指南中使用路径和 example 来了解如何在纯 Java 中使用词典。不过,我想知道如何使用配置参数将值分配给变量?

【问题讨论】:

  • 我不完全明白你想做什么以及限制是什么。文件词典可以包含在例如 WORDTABLE/MARKFAST 中。你想用 ruta 中的预定义 java 集合做什么?您要么需要将信息存储在特征结构中,要么使用配置参数将值分配给变量。您能否详细说明您的问题,例如,举例说明?
  • 我重新提出了我的问题;希望现在很清楚。谢谢。

标签: java uima ruta


【解决方案1】:

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

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);

一些cmets:

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

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

【讨论】:

  • 这就是我想要的!你为我节省了大量时间。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多