2017-02-16 15 views
1

В настоящее время я пытаюсь использовать конвейер Stanford CoreNLP для анализа настроений. Мне нужно, чтобы он перебирал папку с отдельными текстовыми файлами (которые содержат обзоры фильмов), чтобы установить настроение каждого обзора. Я попытался создать пакетный скрипт, чтобы выполнить итерацию в трех разных папках, содержащих обзоры. При выполнении сценария через оболочку бегун программы я получаю следующее сообщение об ошибке:«f было неожиданным в это время» - сценарий bash

е был неожиданным в это время

сценарий выглядит следующим образом:

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 

это первый Баш скрипт я когда-либо писал, поэтому предполагаю, что мой синтаксис, возможно, некорректен где-то?

Также я использую 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 

, что приводит к следующей ошибке: «% реж \ поезд \ ПОЗИТИВ» было неожиданным в это время

кто понимают, что я сделал неправильно? Я предполагаю, что это своего рода проблема синтаксиса, которую я просто не вижу.

+1

Я уверен, что это не пакетный файл. В пакетных переменных устанавливаются командой ['set'] (https://ss64.com/nt/set.html) и используются'% var% ', а не' $ var', как в bash. И ['for'] (https://ss64.com/nt/for.html) не заканчивается' done'. В пакете нет ';' в пакете (фактически да, но это не заканчивается) –

+0

Итак, вы используете подсистему Windows для Linux? – Squashman

+0

Извините, я должен объяснить немного лучше, я использую Windows 10, но я установил cygwin, чтобы иметь возможность использовать команды linux для большей гибкости с моим сценарием bash. – user7575479

ответ

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 

Его неясно: нужно

  • вы звоните Java 3 раза (один раз для каждой директории)

Или:

  • вам нужно поставить все 3 dirs в файлеlist.txt, а затем вызывать Java в конце

Пример вызова Java 3 раза только одним файлом в списке файлов.TXT каждый раз:

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, но не в файле bat bat

+0

спасибо за комментарии, я принял все советы, но безрезультатно. Я думаю, что возможно, возможно, что-то еще не так, или, возможно, это невозможно в моей системе :( – user7575479

+0

Если вы не установили «cygwin», я бы подумал, что это не так! «Bash» - это язык сценариев для Linux и Unix и Mac. установка Cygwin предоставляет его в Windows). Вы можете делать то, что вам нужно, с помощью скрипта «bat» в Windows. Однако вы считали, что можете создать файл list.txt с текстовым редактором (notepad.exe) и прочесть имена папок в нем и тогда у вас может быть файл .bat с только вашей командой Java внутри него, а затем дважды щелкните по этому значению – Chunko

+0

О, у вас есть cygwin.just видел это выше. Какое сообщение об ошибке вы получаете сейчас? – Chunko

 Смежные вопросы

  • Нет связанных вопросов^_^