Начиная с версии 2.0.5, теперь вы можете легко использовать несколько потоков с параметром -nthreads k
.Например, ваша команда может выглядеть следующим образом:
java -mx6g edu.stanford.nlp.parser.lexparser.LexicalizedParser -nthreads 4 edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz file.txt > file.stp
(Релизы версии 2 до 2013 года не имели возможности включить многопоточность из командной строки, но только при использовании API.)
Внутренне вы можете одновременно запускать столько потоков синтаксического анализа в одном процессе JVM, сколько захотите.Вы можете сделать это либо путем получения и использования нескольких объектов LexicalizedParserQuery (с помощью метода parserQuery()
), либо неявным образом, вызывая apply(...)
или parseTree(...)
из одного LexicalizedParser.Опция -nthreads k
делает это за вас, посылая последовательные предложения разным анализаторам с использованием фреймворка Executor
.Вы также можете одновременно создать несколько LexicalizedParser, например, для разбора разных языков.
Несколько объектов LexicalizedparserQuery используют одну и ту же грамматику (LexicalizedParser), но экономия памяти невелика, так как большая часть памяти уходит напереходные структуры, используемые при разборе диаграммы.Таким образом, если вы одновременно запускаете много потоков, вам нужно будет выделить JVM много памяти, как в примере выше.
ps Извините, да, часть документации все еще нуждается в обновлении.Но -tLPP - это один флаг для указания языковых ресурсов.Стэнфордский парсер не имеет флага -t.