2015-04-28 43 views
1

是否可以加速使用CoreNLP从命令行批量处理文档,以便模型只加载一次?我想修改流程中不必要的重复步骤。Stanford CoreNLP的高效批量处理

我有320,000个文本文件,我试图用CoreNLP处理它们。预期的结果是320,000个完成的XML文件结果。

从一个文本文件到一个XML文件中获取,我用的是CoreNLP jar文件的命令行:

java -cp "*" -Xmx2g edu.stanford.nlp.pipeline.StanfordCoreNLP -props config.properties 
-file %%~f -outputDirectory MyOutput -outputExtension .xml -replaceExtension` 

这将加载模型,并进行了各种机器学习魔法。我面临的问题是,当我尝试循环目录中的每个文本时,我创建了一个按照我的估计将在44天内完成的过程。我从字面上看,在过去的7天里,我的桌面上有一个命令提示符循环播放,而且我还没有完成。环路我从批处理脚本运行:

for %%f in (Data\*.txt) do (
    java -cp "*" -Xmx2g edu.stanford.nlp.pipeline.StanfordCoreNLP -props config.properties 
    -file %%~f -outputDirectory Output -outputExtension .xml -replaceExtension 
) 

我使用这些注释,在config.properties规定:
annotators = tokenize, ssplit, pos, lemma, ner, parse, dcoref, sentiment

回答

3

我一无所知斯坦福CoreNLP,所以我用Google搜索它(你没“T包含任何链接),并在this page我发现这说明(下面的‘解析文件并保存输出格式为XML’):

如果你要处理的文件列表,请使用以下命令里NE:

的java -cp 斯坦福-corenlp-VV.jar:斯坦福-corenlp-VV-models.jar:xom.jar:乔达-time.jar:jollyday.jar:ejml-VV.jar -Xmx2g edu.stanford.nlp.pipeline.StanfordCoreNLP [-props配置文件] -filelist甲FILE包含您FILES

清单其中-filelist参数指向其内容列出所有 文件要被处理的文件(每一个线)。

所以我想,如果你存储在一个列表文件中的所有文本文件的列表,你可以处理文件速度更快:

dir /B *.txt > list.lst 

...然后通过在-filelist list.lst参数列表在斯坦福CoreNLP的单一执行中。

+0

Yahtzee!现在速度如此之快 - 它的速度大约是每秒1个文件。这是一个很大的帮助 - 感谢您的贡献。 – ThisClark

+0

是的,的确!加载系统使用的所有模型是一个缓慢的过程。如果您只需加载一次模型,然后处理大量文件,就会获得巨大收益。此外,如果您不需要选区分析或共同参与,则可以查看使用神经网络依赖关系解析器:http://nlp.stanford.edu/software/nndep.shtml。这比使用默认选区分析器快得多。 –