" f此时出人意料" - bash脚本

时间:2017-02-16 14:15:28

标签: bash stanford-nlp

我目前正在尝试使用Stanford CoreNLP管道来运行情绪分析。我需要它来遍历单个文本文件的文件夹(其中包含电影评论),以便建立每个评论的情绪。我试图创建一个批处理脚本,以迭代包含评论的3个不同文件夹。通过shell runner程序运行脚本时,我收到以下错误:

f此时出乎意料

脚本如下:

dir=C:\stanford-corenlp-full-2016-10-31
for f in "$dir\train\neg" && 
    for f in "$dir\train\pos" && 
        for f in "$dir\train\unsup" ; do
    echo $f >> filelist.txt
    java -mx8g edu.stanford.nlp.sentiment.SentimentTraining -numHid 25 -trainPath filelist.txt -devPath dev.txt -train -model model.ser.gz 
done

这是我写过的第一个bash脚本,所以我假设我的语法在某处可能不正确?

我也在使用Windows 10.

任何建议都会很棒,

非常感谢

嘿,伙计们,你的建议非常有用。尝试让我的生活更轻松我试图将我的脚本转换为批处理脚本,以便它不会在Windows上运行任何问题。我的新脚本如下所示:

        @echo off
dir=C:\stanford-corenlp-full-2016-10-31
for %%f in "%dir\train\neg" & "%dir\train\pos" & "%dir\train\unsup" do
    ECHO %%f >> filelist.txt
    java -mx8g edu.stanford.nlp.sentiment.SentimentTraining -numHid 25 -trainPath filelist.txt -devPath dev.txt -train -model model.ser.gz 
done
pause

导致以下错误: "%DIR \列车\ POS"此时出人意料

谁知道我做错了什么?我假设它是某种语法问题我无法看到它。

1 个答案:

答案 0 :(得分:0)

你不需要多个,你可以把所有项目放在第一个之后:

 for f in "$dir\train\neg" "$dir\train\pos" "$dir\train\unsup" ; do

甚至:

for f in "$dir\train\"{neg,pos,unsup}
do
    ....
done

另外,我认为你需要更换所有单斜杠" \"有两个" \\"。但由于我没有Windows,所以无法肯定地说。

所以它可能是

 dir=C:\\stanford-corenlp-full-2016-10-31

 for f in "$dir\\train\\"{neg,pos,unsup}
 do
     ...
 done

目前还不清楚是否:

  • 你需要拨打3次Java(每个目录一次)

或者:

  • 你需要将所有3个目录放在filelist.txt中,然后在末尾调用Java

每次只在filelist.txt中使用一个目录调用Java 3次的示例:

 for f in "$dir\\train\\"{neg,pos,unsup}
 do 
     #note this ">" will over-write the file each time
     echo "$f" > filelist.txt  
     java    .... filelist.txt
 done

创建一个包含3个目录的列表文件,然后调用Java一次:

 # note this ">" will overwrite the file with nothing
 # so it will then be empty
 # so that it doesn't have what's left over from last time
 # that you ran the script
 > filelist.txt  

 for f in "$dir\\train\\"{neg,pos,unsup}
 do
      #note this ">>" will add a line to the file
      echo "$f" >> filelist.txt  
 done

 # call Java after you've finished creating the file
 java ..... filelist.txt

你需要

但是,您甚至不需要循环(假设您在该环境中可以使用' ls'命令)

dir=C:\\stanford-corenlp-full-2016-10-31

ls -1 -d "$dir\\train\\"{neg,pos,unsup} > filelist.txt

java -mx8g edu.stanford.nlp.sentiment.SentimentTraining -numHid 25 -trainPath filelist.txt -devPath dev.txt -train -model model.ser.gz 

请注意 {neg,pos,unsup} 语法将在bash中工作,但不能在Windows bat文件中工作