我正在尝试使用StanfordNLP对与给定主题相关的文本块进行共参考解析,并且在尝试加载StanfordCoreNLP模型时,它首先在加载模型时完全耗尽内存,但现在仍然需要花费15分钟来装载。
我的代码如下:
public Map<Integer, CorefChain> getCoreferences(String text) {
Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
Annotation document = new Annotation(text);
pipeline.annotate(document);
return document.get(CorefCoreAnnotations.CorefChainAnnotation.class);
}
这是不可避免的设计?甚至可以在生产应用程序中进行这样的共参考分辨率,其中任何超过10秒的时间都是不可接受的吗?
答案 0 :(得分:2)
是的,如果你没有实例化 StanfordCoreNLP ,它会快得多 在你的方法里面。将其存储为类变量。
更具体地说,将以下内容移到方法之外:
Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
希望它有所帮助! ;)