Я делаю проект NLP в Windows, и проблема заключается в том, что всякий раз, когда я запускаю Stanford CoreNLP из моей командной строки, для генерации XML-данных данного входного текстового файла требуется около 14-15 секунд. Я думаю, что эта проблема связана с тем, что для загрузки библиотеки требуется довольно много времени. Может понравиться кто-нибудь объяснить, в чем проблема и как я могу решить эту проблему, поскольку эта проблема времени является большой проблемой для моего проекта?Stanford CoreNLP очень медленный
ответ
В Stanford CoreNLP используются большие файлы моделей параметров для различных компонентов. Да, им нужно много времени для загрузки. То, что вы хотите сделать, - это только запустить программу один раз, а затем подать много текста.
Как сделать это зависит от того, что вы делаете:
- Вы можете передать -filelist версии командной строки для обработки целой кучи файлов одновременно.
- Вы можете оставить объект StanfordCoreNLP запущенным и отправить файлы на него и получить выход с помощью API.
- В зависимости от того, какую обработку NLP вам нужно, вы также можете быстро запустить запуск, не загружая модели, которые вы не используете. См. Свойство «аннотаторы».
Update 2016: Существует в настоящее время больше информации об этом на странице документации Understanding memory and time usage
Чтобы увидеть, как использовать API проверить пример кода «NERDemo.java» в загруженном папке ядра NLP ,
Где этот файл? Я не могу найти его в последней версии Core NLP –
. Этот файл существует в Стэнфордском классификаторе и без олова - основной НЛП. – ArisRe82
Кристофер правильно, вот одно из решений:
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
}
}
«Вы можете оставить один StanfordCoreNLP объект работает, а также отправлять файлы на него и получить выход обратно с помощью API.» Это, кажется, решение моей проблемы. Можете ли вы мне сказать, как это сделать? – agarwav
Если вы пишете Java-код, вы можете сделать это с помощью [Java API] (http://stanfordnlp.github.io/CoreNLP/api.html). В противном случае, ваш лучший выбор - использовать [StanfordCoreNLPServer] (http://stanfordnlp.github.io/CoreNLP/corenlp-server.html). Несколько пакетов для других языков программирования теперь используют этот сервер, и вы также можете использовать его из команды, например, с помощью StanfordCoreNLPClient. –