我尝试用Java执行.bat文件,为Sphinx 4创建语言模型。
bat文件:
cd plugins
perl tocorpus.pl
text2wfreq < corpus.txt | wfreq2vocab > corpus.vocab
text2idngram -vocab corpus.vocab -idngram corpus.idngram < corpus.txt
idngram2lm -vocab_type 0 -idngram corpus.idngram -vocab corpus.vocab -arpa corpus.lm
sphinx_lm_convert -i corpus.lm -o languagemodel.lm.bin
它使用Sphinx提供的工具包。该过程由以下人员执行:
Process proc = Runtime.getRuntime().exec("plugins/lm-builder.bat");
输出在idngram2lm之后停止,就在最后一行之前。通常从命令提示符运行此文件工作正常,一切都将执行,具有正确的结果。
知道在Java中运行时执行被冻结的原因吗?
编辑: CMU工具包在此过程中导出多个文件,并删除它们。因此,查看资源管理器窗口将显示进度。
文本中的输出由以下内容检索:
BufferedReader inStreamReader = new BufferedReader(
new InputStreamReader(proc.getInputStream()));
String s= "";
while((s = inStreamReader.readLine()) != null){
System.out.println(s);
}
编辑2: 直接在Java中运行代码确实有效。虽然我不认为这个解决方案可以在.bat文件中使用
Process proc = Runtime.getRuntime().exec("cmd.exe /K \"\"plugins/idngram2lm\" -vocab_type 0 -idngram plugins/corpus.idngram -vocab plugins/corpus.vocab -arpa plugins/corpus.lm & exit\"");