UIMA 环境中的 Ruta。使用预定义 collections/sets 和普通 Java 中的词典
Ruta in UIMA Environment. Working with predifined collections/sets and lexicons in plain Java
我是 Ruta 的初学者,我现在想掌握的想法是如何在 UIMA 环境中(简单地说 Java)处理 class variables/collections.我尝试按照 documentation 中给出的示例进行操作;但 Ruta 规则要么作为脚本文件在外部应用,要么使用 Ruta.apply(cas, rule) 对 "on the spot" 应用。这些选项都不允许我使用,例如,文件词典或任何预定义的 java 集合。你能给我任何 hints/solutions 我的问题吗?
通常,我使用 UIMA AE 来解析句子,然后使用 Ruta 脚本中创建的注释来根据句法结构匹配特定类型的句子。因此,我编写的 Ruta 规则相当简单,但由于设置了 POSTags 而显得笨重。所以我想在 Ruta 内部获得一些灵活性。如果对这个主题也有任何建议,我将不胜感激。
编辑: 例如,我有一个规则考虑由 AE(斯坦福解析器)创建的一组 POSTag。因此,为了匹配所需的句子结构,我将按以下方式对其进行硬编码(我意识到这是最天真的方式):
字符串 rutaSampleRule = "BLOCK(ForEach) Sentence{}{Document{-> Asyndeton} "
+ "<- {((Constituent.label==\"NN\" 逗号 Constituent.label==\"NN\") |"
+ " (Constituent.label==\"NNP\" 逗号 Constituent.label==\"NNP\") |"
+ " (Constituent.label==\"NNPS\" 逗号 Constituent.label==\"NNPS\") |"
+ " (Constituent.label==\"NNS\" 逗号 Constituent.label==\"NNS\"));};}";<br>
Ruta.apply(cas, rutaSampleRule);
现在,我想要的是声明此类 POSTag(即 NNS、NN)的集合,在 Ruta 中对其进行迭代并匹配相应的句子结构(此处为连续名词)。这将使我的规则更加灵活和实用。
第二种选择是使用词典而不是集合,但我认为它们只能在 Ruta 中单独使用(与 MARKFAST)(不是普通的 Java);至少我找不到任何例子。
所以,总结一下我的问题:在简单的 Ruta 脚本(不引入任何新类型)中,是否有可能(如果是的话如何)使用外部定义的 collections/lexicons 简单地说 Java?
希望我能以更好的方式解释它。提前致谢。
编辑 1: 我想通了如何在普通 Java 中使用词典只是通过玩转路径和指南中的 example .不过,我想知道如何使用配置参数为变量赋值?
这应该可以解决问题(使用当前主干测试):
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,并使用两个配置参数进行填充。
- 我重构了内联规则:不需要析取组合规则元素(多个规则会做同样的事情),不需要多个规则 elements/rules。
- 示例中现在不再需要块。我删除了它。
- 如果发布的Ruta版本有问题,需要重写规则:使用字符串变量,而不是直接比较标签表达式的特征。
- 使用外部字典的方法会非常相似,例如,使用 INLIST 条件。
免责声明:我是 UIMA Ruta 的开发者
我是 Ruta 的初学者,我现在想掌握的想法是如何在 UIMA 环境中(简单地说 Java)处理 class variables/collections.我尝试按照 documentation 中给出的示例进行操作;但 Ruta 规则要么作为脚本文件在外部应用,要么使用 Ruta.apply(cas, rule) 对 "on the spot" 应用。这些选项都不允许我使用,例如,文件词典或任何预定义的 java 集合。你能给我任何 hints/solutions 我的问题吗?
通常,我使用 UIMA AE 来解析句子,然后使用 Ruta 脚本中创建的注释来根据句法结构匹配特定类型的句子。因此,我编写的 Ruta 规则相当简单,但由于设置了 POSTags 而显得笨重。所以我想在 Ruta 内部获得一些灵活性。如果对这个主题也有任何建议,我将不胜感激。
编辑: 例如,我有一个规则考虑由 AE(斯坦福解析器)创建的一组 POSTag。因此,为了匹配所需的句子结构,我将按以下方式对其进行硬编码(我意识到这是最天真的方式):
字符串 rutaSampleRule = "BLOCK(ForEach) Sentence{}{Document{-> Asyndeton} "
+ "<- {((Constituent.label==\"NN\" 逗号 Constituent.label==\"NN\") |"
+ " (Constituent.label==\"NNP\" 逗号 Constituent.label==\"NNP\") |"
+ " (Constituent.label==\"NNPS\" 逗号 Constituent.label==\"NNPS\") |"
+ " (Constituent.label==\"NNS\" 逗号 Constituent.label==\"NNS\"));};}";<br>
Ruta.apply(cas, rutaSampleRule);
现在,我想要的是声明此类 POSTag(即 NNS、NN)的集合,在 Ruta 中对其进行迭代并匹配相应的句子结构(此处为连续名词)。这将使我的规则更加灵活和实用。
第二种选择是使用词典而不是集合,但我认为它们只能在 Ruta 中单独使用(与 MARKFAST)(不是普通的 Java);至少我找不到任何例子。
所以,总结一下我的问题:在简单的 Ruta 脚本(不引入任何新类型)中,是否有可能(如果是的话如何)使用外部定义的 collections/lexicons 简单地说 Java?
希望我能以更好的方式解释它。提前致谢。
编辑 1: 我想通了如何在普通 Java 中使用词典只是通过玩转路径和指南中的 example .不过,我想知道如何使用配置参数为变量赋值?
这应该可以解决问题(使用当前主干测试):
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,并使用两个配置参数进行填充。
- 我重构了内联规则:不需要析取组合规则元素(多个规则会做同样的事情),不需要多个规则 elements/rules。
- 示例中现在不再需要块。我删除了它。
- 如果发布的Ruta版本有问题,需要重写规则:使用字符串变量,而不是直接比较标签表达式的特征。
- 使用外部字典的方法会非常相似,例如,使用 INLIST 条件。
免责声明:我是 UIMA Ruta 的开发者