初始化Java程序并侦听查询

时间:2012-04-24 20:40:38

标签: java stanford-nlp

我正在编写一个在许多其他库中使用Stanford CoreNLP库的应用程序。应用程序获取URL,从中提取文本,然后使用CoreNLP处理文本。问题是CoreNLP库在注释文本之前需要花费大量时间将其模型加载到内存中。我正在寻找只进行一次初始化步骤的最佳方法,下次当我想使用该应用程序并输入一个URL时,它不会再次加载模型。

2 个答案:

答案 0 :(得分:1)

也许你应该尝试在容器中运行你的应用程序 - Servlet Container甚至是Web Container Apache Tomcat?您可以将应用程序打包为simple WAR,然后容器将初始化所有java类,并假设您公开了一个将触发单个URL的NLP处理的servlet,您将保存所有后续NLP的初始化时间处理电话。

修改

您不必使用servlet。 或者,您可以执行以下操作之一:

  1. 在WAR中运行一个循环,它将从某个配置源(数据库或文件)中读取URL,并为每个URL执行NLP和解析(存储结果以供以后分析?)
  2. 更高级的解决方案可能包括与Quartz结合的现有java程序,每隔X秒/分钟/小时运行一个NLP +解析器等。更高级的版本将使用Quartz和Spring Batch
  3. 祝你好运!

答案 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);

因此,您可以在应用初始化时创建对象并解析虚拟文本。您忽略操作的结果,因为目的是在加载应用程序时加载所需的模块。之后,您可以保留“管道”对象并在需要时引用它以进行其他注释操作。