通过C#调用brill tagger

时间:2012-03-28 11:15:58

标签: c# tagging

我们想使用brill tagger,这样在单击按钮时,它会将Input.txt标记为output.txt。所以我们创建了一个新的visual studio项目并放了一个按钮。在按钮单击事件上,我们编写了以下代码。没有错误,我们可以看到命令提示符被调用。但是没有创建输出文件。代码如下。你能指导我们吗?

private void button1_Click(object sender, EventArgs e)
    {

     ProcessStartInfo brillStartInfo = new ProcessStartInfo(@"C:\Users\toshal\Documents\Visual Studio 2008\Projects\brill tagger\bin\brill.exe");
        brillStartInfo.Arguments = "/C brill.exe LEXICON.BROWN Input.txt BIGRAMS LEXICALRULEFILE.BROWN CONTEXTUALRULEFILE.BROWN > output.txt";

        brillStartInfo.UseShellExecute = false;
        brillStartInfo.RedirectStandardOutput = true;
        brillStartInfo.RedirectStandardError = true;
        brillStartInfo.CreateNoWindow = false;

        Process brill = new Process();
        brill.StartInfo = brillStartInfo;
        brill.Start();
        string output = brill.StandardOutput.ReadToEnd();
        brill.WaitForExit();

    }

3 个答案:

答案 0 :(得分:0)

IMO创建了文件,而不是在您期望的目录中。原因是,您启动默认WorkingDirectory为C:\Windows\system32的cmd,只需输入输出文件的完整路径,并应该工作或设置process.WorkingDirectory属性。

此外,您希望将程序的输出重定向到C#应用程序,不应该在命令行中重定向它。

您可以将输出重定向到> "outputpath"的文件,或者将输出重定向到C#app然后删除>output,两者都无法完成。

答案 1 :(得分:0)

他们编写代码的方式,我认为它应该是这样的:

private void button1_Click(object sender, EventArgs e)
{

    ProcessStartInfo brillStartInfo = new ProcessStartInfo("cmd");
    brillStartInfo.Arguments = "/C brill.exe LEXICON.BROWN Input.txt BIGRAMS LEXICALRULEFILE.BROWN CONTEXTUALRULEFILE.BROWN > output.txt";
    brillStartInfo.WorkingDirectory = @"C:\Users\toshal\Documents\Visual Studio 2008\Projects\brill tagger\bin\";

    brillStartInfo.UseShellExecute = false;
    brillStartInfo.CreateNoWindow = false;

    Process brill = new Process();
    brill.StartInfo = brillStartInfo;
    brill.Start();
    brill.WaitForExit();
}

重要更改:要执行的可执行文件是cmd,您需要将工作目录设置为brill.exe目录,以便能够在参数中使用它而不指定路径。

答案 2 :(得分:0)

程序的输出被重定向到文件output.txt。如果让程序生成输出到控制台,则string output = brill.StandardOutput.ReadToEnd();将返回标记结果。否则,您必须明确打开并阅读该文件。