我正在编写一个在许多其他库中使用Stanford CoreNLP库的应用程序。应用程序获取URL,从中提取文本,然后使用CoreNLP处理文本。问题是CoreNLP库在注释文本之前需要花费大量时间将其模型加载到内存中。我正在寻找只进行一次初始化步骤的最佳方法,下次当我想使用该应用程序并输入一个URL时,它不会再次加载模型。
答案 0 :(得分:1)
也许你应该尝试在容器中运行你的应用程序 - Servlet Container甚至是Web Container Apache Tomcat?您可以将应用程序打包为simple WAR,然后容器将初始化所有java类,并假设您公开了一个将触发单个URL的NLP处理的servlet,您将保存所有后续NLP的初始化时间处理电话。
修改强>
您不必使用servlet。 或者,您可以执行以下操作之一:
祝你好运!
答案 1 :(得分:0)
查看其页面Stanford CoreNLP中的示例,以下内容用于注释文本:
Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
String text = ... // Add your text here!
Annotation document = new Annotation(text);
pipeline.annotate(document);
因此,您可以在应用初始化时创建对象并解析虚拟文本。您忽略操作的结果,因为目的是在加载应用程序时加载所需的模块。之后,您可以保留“管道”对象并在需要时引用它以进行其他注释操作。