使用Stanford CoreNLP进行高效的批处理

时间:2015-04-28 14:04:28

标签: batch-file stanford-nlp

是否可以从命令行加速使用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

1 个答案:

答案 0 :(得分:3)

我对Stanford CoreNLP一无所知,所以我搜索了它(你没有包含任何链接),在this page我找到了这个描述(在“解析文件并将输出保存为XML”下面):

  

如果要处理文件列表,请使用以下命令行:

     

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一个包含你的文件列表的文件

     

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

因此,如果您将所有文本文件的列表存储在列表文件中,我猜您可以更快地处理文件:

dir /B *.txt > list.lst

...然后在单次执行Stanford CoreNLP时在-filelist list.lst参数中传递该列表。