2012-06-27 3 views
0

Я делаю проект NLP в Windows, и проблема заключается в том, что всякий раз, когда я запускаю Stanford CoreNLP из моей командной строки, для генерации XML-данных данного входного текстового файла требуется около 14-15 секунд. Я думаю, что эта проблема связана с тем, что для загрузки библиотеки требуется довольно много времени. Может понравиться кто-нибудь объяснить, в чем проблема и как я могу решить эту проблему, поскольку эта проблема времени является большой проблемой для моего проекта?Stanford CoreNLP очень медленный

ответ

7

В Stanford CoreNLP используются большие файлы моделей параметров для различных компонентов. Да, им нужно много времени для загрузки. То, что вы хотите сделать, - это только запустить программу один раз, а затем подать много текста.

Как сделать это зависит от того, что вы делаете:

  • Вы можете передать -filelist версии командной строки для обработки целой кучи файлов одновременно.
  • Вы можете оставить объект StanfordCoreNLP запущенным и отправить файлы на него и получить выход с помощью API.
  • В зависимости от того, какую обработку NLP вам нужно, вы также можете быстро запустить запуск, не загружая модели, которые вы не используете. См. Свойство «аннотаторы».

Update 2016: Существует в настоящее время больше информации об этом на странице документации Understanding memory and time usage

+1

«Вы можете оставить один StanfordCoreNLP объект работает, а также отправлять файлы на него и получить выход обратно с помощью API.» Это, кажется, решение моей проблемы. Можете ли вы мне сказать, как это сделать? – agarwav

+0

Если вы пишете Java-код, вы можете сделать это с помощью [Java API] (http://stanfordnlp.github.io/CoreNLP/api.html). В противном случае, ваш лучший выбор - использовать [StanfordCoreNLPServer] (http://stanfordnlp.github.io/CoreNLP/corenlp-server.html). Несколько пакетов для других языков программирования теперь используют этот сервер, и вы также можете использовать его из команды, например, с помощью StanfordCoreNLPClient. –

0

Чтобы увидеть, как использовать API проверить пример кода «NERDemo.java» в загруженном папке ядра NLP ,

+0

Где этот файл? Я не могу найти его в последней версии Core NLP –

+0

. Этот файл существует в Стэнфордском классификаторе и без олова - основной НЛП. – ArisRe82

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 
    } 
}