С# с запуском внешнего пакета и java-файла

Я использую приложение Stanford POS-tagger для маркировки некоторых статей примерно в 300 файлах. Для этого я написал код C#, который будет просматривать файлы и использовать тегировщик.

Мой код выглядит так:

Process thisProcess=new Process();
thisProcess.StartInfo.CreateNoWindow=true;
thisProcess.StartInfo.WindowStyle=ProcessWindowStyle.Hidden;
thisProcess.StartInfo.WorkingDirectory=@"C:\postagger";
thisProcess.StartInfo.FileName=@"C:\postagger\stanford-postagger.bat";
thisProcess.StartInfo.UseShellExecute=false;
thisProcess.StartInfo.RedirectStandardOutput=true;

if(Directory.Exists(@"C:\brown2")) {
    DirectoryInfo brown=new DirectoryInfo(@"C:\brown2");
    DirectoryInfo brownParsed;

    if(!Directory.Exists(@"C:\brown-parsed"))
        brownParsed=Directory.CreateDirectory(@"C:\brown-parsed");
    else
        brownParsed=new DirectoryInfo(@"C:\brown-parsed");

    FileInfo[] files=brown.GetFiles();

    foreach(FileInfo f in files) {

        Console.WriteLine("Parsing file "+f.Name+" ...");
        thisProcess.StartInfo.Arguments=@"C:\postagger\models\wsj-0-18-bidirectional-distsim.tagger "+f.FullName;
        //Console.WriteLine(thisProcess.StartInfo.Arguments);
        thisProcess.Start();
        thisProcess.WaitForExit();
        //Console.Read();
        StreamWriter sw=new StreamWriter(Path.Combine(brownParsed.FullName, f.Name), false);
        string output=thisProcess.StandardOutput.ReadToEnd();
        //sw.Write(thisProcess.StandardOutput.ReadToEnd());
        sw.Write(output);
        sw.Flush();
        sw.Close();
        //Console.WriteLine("File {0} done!",f.Name);
        Console.WriteLine(output);
    }
}
else
    Console.WriteLine("Dir not found!");

Console.Read();

И stanford-postagger.bat выглядит так:

использование: текстовый файл модели stanford-postagger, например, stanford-postagger models\left3words-wsj-0-18.tagger sample-input.txt

java -mx300m -cp stanford-postagger.jar; edu.stanford.nlp.tagger.maxent.MaxentTagger -model %1 -textFile %2

Проблема в:

Код запускает его, но он НЕ запускает команду java. Я попробовал это на своем ноутбуке, и он работает как шарм, он помечает. Но он не будет помечать большие файлы из-за нехватки памяти. Но на моем ПК, который более мощный, он не запустит java.

Если я открою CMD и введу эту java-команду с правильными параметрами для файла, она сработает. Любая идея о том, что может привести к тому, что это не сработает? Все пути хорошие, трижды проверял.

Вот пример вывода, который я получаю от неработающей программы (на моем ПК):

C:\postagger›java -mx300m -cp stanford-postagger.jar; edu.stanford.nlp.tagger.maxent.MaxentTagger -model C:\postagger\models\wsj-0-18-bidirectional-distsim.tagger -textFile C:\brown2\aaa.txt


person Darksody    schedule 27.03.2013    source источник
comment
Ноутбук и настольный компьютер используют одну и ту же битовую ОС?   -  person coolmine    schedule 28.03.2013


Ответы (1)


Я не на 100% уверен в запуске пакетного файла с использованием этого, но, возможно, с помощью Process для его выполнения?

var process = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = "path-to-file.bat"
            }
        };
        process.Start();
        process.WaitForExit();
person Rogue    schedule 27.03.2013
comment
Это не выполнение bat-файла, это работает, пакетный файл выполняется сам, но java-вещь не будет продолжаться - person Darksody; 28.03.2013
comment
что происходит, когда вы вводите java -version в свою обычную командную строку (cmd.exe)? - person Rogue; 28.03.2013
comment
оно работает. забавная вещь, если я запускаю его из CMD, он работает. Если я наберу java -version в своем cmd, он покажет мою версию java, 1.7.0_17. Но я изменил свой пакетный файл вместо аргументов java здесь на аргументы C:\Program Files\Java\jdk1.7.0_17\bin\java, и это сработало. Странные вещи :) - person Darksody; 28.03.2013
comment
java — это переменная среды, которая в любом случае просто выполнит именно этот файл. Я не верю, что переменные среды зависят от пользователя, но, возможно, это может быть проблемой? По крайней мере, это решено однако. - person Rogue; 28.03.2013