配置SUTime以使用自定义规则文件

时间:2015-08-12 16:03:47

标签: stanford-nlp

我正在尝试配置SUTime注释器(“ner”的一部分)以使用我自己的日期/时间规则文件INSTEAD,这些文件位于“models / sutime /”中的开箱即用规则文件中斯坦福CoreNLP模型的分销JAR。

我这样做的原因是我想略微修改SUTime规则正在做什么。

根据官方SUTime documentation,所需要的只是以逗号分隔文件路径的形式指定“sutime.rules”属性。
但在我这样做之后,似乎CoreNLP仍然采用开箱即用的规则文件:

Reading TokensRegex rules from edu/stanford/nlp/models/sutime/defs.sutime.txt
Reading TokensRegex rules from edu/stanford/nlp/models/sutime/english.sutime.txt
Reading TokensRegex rules from edu/stanford/nlp/models/sutime/english.holidays.sutime.txt

我尝试了相对于我的项目根的绝对路径和路径 - 仍然是相同的效果 看起来,与文档相反,“sutime.rules”属性只是被忽略了。

任何帮助将不胜感激。

更新:

解决方法的形式为:

  1. 关闭SUTime作为“ner”步骤的一部分
  2. 复制其规则文件并根据需要进行修改
  3. 基于TimeAnnotator类创建自定义注释器并将其添加到管道
  4. 将.rules属性设置为已修改的规则文件
  5. 不起作用。
    管道运行,但功能不一样。需要使用“sutime”参数调用TimeAnnotator构造函数,以使其功能与在“ner”步骤中调用它的功能完全相同。
    这似乎无法通过属性来完成。

2 个答案:

答案 0 :(得分:2)

感谢您告知我们这不起作用。我们将研究这个并为下一个版本修复它。如果确实需要稍微更改规则文件,可以尝试在CoreNLP模型jar之前将自己的edu/stanford/nlp/models/sutime/english.sutime.txt副本放在类路径中。

答案 1 :(得分:1)

我也需要覆盖english.sutime.txt文件。我通过创建NERClassifierCombiner并在实例化NERCombinerAnnotator时使用它来完成此操作。 伪代码:

Properties nerProps = new Properties();
nerProps.put("sutime.rules", "your new comma separated file list");
Set<String> passDownProps = Generics.newHashSet();
passdownProps.addAll(NERClassifierCombiner.DEFAULT_PASS_DOWN_PROPERTIES);
passdownProps.add("sutime.rules");
NERClassifierCombiner combiner = NERClassifierCombiner.createNERClassifierCombiner("giveItAName", passdownProps, nerProps);
NERCombinerAnnotator nerAnnotator = new NERCombinerAnnotator(combiner, false);

希望有所帮助。