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

Stanford nlp 配置SUTime以使用自定义规则文件,stanford-nlp,Stanford Nlp,我正在尝试配置SUTime annotator(“ner”的一部分),以使用我自己的日期/时间规则文件,而不是位于Stanford CoreNLP模型分发JAR中“models/SUTime/”中的现成规则文件。 我这样做的原因是我想稍微修改SUTime规则正在做的事情。 根据这位官员的说法,只需以逗号分隔的文件路径形式指定“sutime.rules”属性。 但在我这么做之后,CoreNLP似乎仍然使用开箱即用的规则文件: Reading TokensRegex rules from edu

我正在尝试配置SUTime annotator(“ner”的一部分),以使用我自己的日期/时间规则文件,而不是位于Stanford CoreNLP模型分发JAR中“models/SUTime/”中的现成规则文件。

我这样做的原因是我想稍微修改SUTime规则正在做的事情。

根据这位官员的说法,只需以逗号分隔的文件路径形式指定“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”属性似乎被忽略了。

任何帮助都将不胜感激。

更新:

解决方案的形式如下:

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

    这似乎无法通过属性完成。

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

    我也需要覆盖english.sutime.txt文件。我通过创建NERClassifierCombiner并在实例化NerCombinerNotator时使用它来实现这一点。 伪代码:

    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);
    
    Properties nerProps=新属性();
    put(“sutime.rules”,“新的逗号分隔文件列表”);
    Set passDownProps=Generics.newHashSet();
    addAll(NERClassifierCombiner.DEFAULT\u PASS\u DOWN\u属性);
    添加(“sutime.rules”);
    NERClassifierCombiner组合器=NERClassifierCombiner.createNERClassifierCombiner(“giveItName”,passdownProps,nerProps);
    NerCombinerNotator Generator=新的NerCombinerNotator(合并器,false);
    

    希望能有所帮助。

    谢谢你,安吉尔。这种变通方法有效。我唯一仍然经历的怪癖是,我必须打开本地Maven存储库中的models JAR并从中删除“english.sutime.txt”文件。只有这样,才能从项目工作目录中获取此文件的自定义版本。希望这在CoreNLP 3.6.0中得到修复,我可以通过“sutime.rules”属性进行适当配置来摆脱这种解决方法。请告诉我您是如何创建自定义注释器类的,我创建了一个,但它仍然引用core nlp jar中的规则。