通常当您使用corenlp注释管道来表示NER时,您将编写以下代码
Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
pipeline.annotate(document);
我想在上面的管道中执行句子拆分,即ssplit
。但是在我继续管道的其余部分之前,我想删除太久的句子。我一直在做的是执行句子分割,按长度过滤句子,然后通过应用整个管道即tokenize, ssplit, pos, lemma, ner
来执行NER。基本上我已经两次执行了tokenize
和ssplit
。有更有效的方法吗?例如,执行tokenize
和ssplit
然后暂停管道以删除过长的句子,然后使用pos
,lemma
和ner
恢复管道。
答案 0 :(得分:1)
您可以创建两个管道对象,第二个管道对象使用后面的注释器。所以:
Properties props = new Properties();
props.put("annotators", "tokenize, ssplit");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
pipeline.annotate(document);
其次是:
Properties props = new Properties();
props.put("annotators", "pos, lemma, ner");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props, false);
pipeline.annotate(document);
当然,请注意,如果删除中间句子,某些注释(例如字符偏移)将不直观。