我看到SUTime内部有一个选项来解决对未来的模糊时间引用,但我不知道如何告诉NER注释器这样做。例如,当注释这句话时,让我们在星期五和#34; (并且让我们说今天的星期天),我希望SUTime能够在下周五的日期返回,而不是前一个,默认情况下会显示,因为它接近周日。感谢。
答案 0 :(得分:3)
您必须提供自己的语法文件。您可以从corenlp复制默认值。它应该位于stanford-sutime-models-1.3.5.jar:edu/stanford/nlp/models/sutime/english.sutime.txt
之类的地方
然后将以下代码添加到该部分的末尾,该注释以注释# Final rules to determine how to resolve date
:
{
pattern: ( [ $hasTemporal ] ),
action: VTag( $0[0].temporal.value, "resolveTo", RESOLVE_TO_FUTURE)
}
这将标记要解决的所有时间段。请注意,有几个预定义标记可以将某些时间模式解析为过去。您也可以删除/修改它们。
然后为TimeAnnotator构造函数提供文件的资源路径:
Properties props = new Properties();
props.setProperty("sutime.rules", "edu/stanford/nlp/models/sutime/defs.sutime.txt,PATH_TO_YOUR_RESOURCE_FOLDER/english.sutime.txt,edu/stanford/nlp/models/sutime/english.holidays.sutime.txt");
TimeAnnotator timeAnnotator = new TimeAnnotator("sutime", props);
DocDateAnnotation
还有一个小技巧。如果你想在星期五晚上7点和#34的时间模式,如"为了正确解决,你应该在DocDateAnnotation
中提供一个iso格式化的日期时间(不仅仅是像YYYY-MM-DD这样的日期)。