2015-04-28 125 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。這比使用默認選區分析器快得多。 –