1

我在Windows中做一个 NLP 项目,问题是每当我从命令提示符运行 Stanford CoreNLP 时,生成给定输入文本文件的 XML 输出大约需要 14-15 秒。我认为这个问题是因为库需要很长时间才能加载。请有人解释问题是什么,我该如何解决这个问题,因为这个时间问题对我的项目来说是一个大问题?

4

3 回答 3

9

斯坦福 CoreNLP 使用各种组件的大型模型文件参数。是的,它们需要大量时间来加载。您要做的是只启动程序一次,然后为其提供大量文本。

你如何做到这一点取决于你在做什么:

  • 您可以将 -filelist 传递给命令行版本以一次处理一大堆文件。
  • 您可以让一个 StanfordCoreNLP 对象运行,然后向其发送文件并使用 API 取回输出。
  • 根据您需要的 NLP 处理,您还可以通过不加载不使用的模型来加快启动速度。请参阅“注释器”属性。

2016 年更新:现在在文档页面了解内存和时间使用情况上有更多信息

于 2012-06-27T05:43:42.403 回答
5

克里斯托弗是正确的,这是解决方案之一:

import java.util.Properties;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;

public class SentimentAnalyzer {
    private StanfordCoreNLP pipeline;

    public void initializeCoreNLP() { 
        Properties props = new Properties();
        props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, sentiment");
        pipeline = new StanfordCoreNLP(props);
    }

    public T getSentiment(String text) {
        ...
        Annotation annotation= new Annotation(text);
        pipeline.annotate(annotation);
        ...
        return ...
    }

    public static void main(String[] argv) {
        SentimentAnalyzer sentimentAnalyzer = new SentimentAnalyzer();
        sentimentAnalyzer.initializeCoreNLP(); // run this only once
        T t = sentimentAnalyzer.getSentiment("put text here..."); // run this multiple times
    }
}
于 2014-06-01T19:17:11.053 回答
0

要查看如何使用 API,请查看下载的 Core NLP 文件夹中的示例代码“NERDemo.java”。

于 2012-12-02T21:27:32.697 回答