我试图使用' SUTime'来自core-nlp的功能。如果我尝试使用在线演示中的“sampleInput'
”From next month, we will have meeting on every friday, from 3:00 pm to 4:00 pm.”
导致(参考日期:2017-1-1):
<TIMEX3 range="(2017-02-01,2017-02-28,P1M)" tid="t1" type="DATE" value="2017-02">next month</TIMEX3>
但是,当我尝试通过SUTime API运行相同的输入时,会产生(特别是:&#39;时间价值&#39;)
<Token text="next month" Temporal Value="THIS P1M OFFSET P1M" Timex="null" Timex type="DATE" Start offset="5" End Offset="15" />
以下是代码:
List<CoreMap> timexAnnsAll = document.get(TimeAnnotations.TimexAnnotations.class);
for (CoreMap cm : timexAnnsAll) {
try {
List<CoreLabel> tokens = cm.get(CoreAnnotations.TokensAnnotation.class);
Temporal temporal = cm.get(TimeExpression.Annotation.class).getTemporal();
System.out.println("Token text : " + cm.toString());
System.out.println("Temporal Value : " + temporal.toString());
System.out.println("Timex : " + temporal.getTimexValue());
System.out.println("Timex type : " + temporal.getTimexType().name());
答案 0 :(得分:0)
问题是您没有设置文档日期。
package edu.stanford.nlp.examples;
import edu.stanford.nlp.ling.*;
import edu.stanford.nlp.util.*;
import edu.stanford.nlp.time.TimeAnnotations;
import edu.stanford.nlp.pipeline.*;
import java.util.*;
public class SUTimeExample {
public static void main(String[] args) {
Annotation document =
new Annotation("From next month, we will have meeting on every friday, from 3:00 pm to 4:00 pm.");
document.set(CoreAnnotations.DocDateAnnotation.class, "2017-03-01");
Properties props = new Properties();
//props.setProperty("customAnnotatorClass.time", "edu.stanford.nlp.time.TimeAnnotator");
//props.setProperty("annotators", "tokenize,ssplit,pos,lemma,time");
props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner,entitymentions");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
pipeline.annotate(document);
for (CoreMap entityMention : document.get(CoreAnnotations.MentionsAnnotation.class)) {
if (entityMention.get(CoreAnnotations.EntityTypeAnnotation.class).equals("DATE")) {
System.out.println(entityMention);
System.out.println(entityMention.get(TimeAnnotations.TimexAnnotation.class));
}
}
}
}