在过去,这个问题已被回答“斯坦福分析师不是线程安全的”,正如常见问题解答仍然说的那样。我希望找到一个成功穿越最新版本的人。
我尝试过使用-t标志(-t10和-tLLP),因为这是我在搜索中找到的所有内容,但都抛出错误。
我发出的命令的一个例子是:
java -cp stanford-parser.jar edu.stanford.nlp.parser.lexparser.LexicalizedParser \
-outputFormat "oneline" ./grammar/englishPCFG.ser.gz ./corpus > corpus.lex
答案 0 :(得分:16)
从版本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
(2013年之前的版本2发布无法从命令行启用多线程,但仅限于使用API时。)
在内部,您可以根据需要在一个JVM进程中同时运行尽可能多的解析线程。您可以通过获取和使用多个LexicalizedParserQuery对象(通过parserQuery()
方法)或通过调用apply(...)
或parseTree(...)
关闭一个LexicalizedParser来执行此操作。 -nthreads k
选项通过使用Executor
框架向不同的解析器发送连续的句子来为您执行此操作。您还可以同时创建多个LexicalizedParser,例如,用于解析不同的语言。
多个LexicalizedparserQuery对象共享相同的语法(LexicalizedParser),但节省的内存空间并不大,因为大多数内存都转到图表解析中使用的瞬态结构。因此,如果您同时运行大量解析线程,则需要为JVM提供大量内存,如上例所示。
P.S。对不起,是的,有些文档仍需要更新。但是-tLPP是用于指定特定于语言的资源的一个标志。斯坦福分析师没有-t标志。