1

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

4

2 回答 2

1

也许您应该尝试在容器内运行您的应用程序 - Servlet 容器,甚至像Apache Tomcat这样的Web 容器?您可以将您的应用程序打包为一个简单的 WAR,然后容器将初始化所有 java 类一次,并假设您公开了一个会触发单个 URL 的 NLP 处理的 servlet,您将为所有后续的 NLP 处理调用节省初始化时间。

编辑:

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

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

祝你好运!

于 2012-04-24T20:57:51.403 回答
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);

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

于 2012-04-24T21:08:56.343 回答