C# 通过C调用brill标记器#

C# 通过C调用brill标记器#,c#,tagging,C#,Tagging,我们希望使用brill tagger,这样只要点击一个按钮,它就会将Input.txt标记为output.txt。因此,我们创建了一个新的VisualStudio项目并放置了一个按钮。在按钮点击事件中,我们编写了以下代码。没有错误,我们可以看到命令提示符被调用。但是没有创建输出文件。代码如下。你能指导我们吗 private void button1_Click(object sender, EventArgs e) { ProcessStartInfo brillStartI

我们希望使用brill tagger,这样只要点击一个按钮,它就会将Input.txt标记为output.txt。因此,我们创建了一个新的VisualStudio项目并放置了一个按钮。在按钮点击事件中,我们编写了以下代码。没有错误,我们可以看到命令提示符被调用。但是没有创建输出文件。代码如下。你能指导我们吗

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();

    }

在我看来,文件是创建的,只是不在您期望的目录中。原因是,您启动cmd,默认工作目录是
C:\Windows\system32
,只需输入输出文件的完整路径,就可以工作或设置
进程.WorkingDirectory
属性

此外,如果要将程序的输出重定向到C#app,则不应在命令行中重定向它


要么将输出重定向到带有“outputpath”的文件,要么将输出重定向到C#app,然后删除输出,这两种方法都无法实现。

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

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目录,以便能够在参数中使用它,而无需指定路径。

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

@Toshal Mokadam,在提问之前,请先尝试接受前面的一些答案。您的意思是通过cmd命令或C#重定向代码创建输出?如果是后者,则表示您没有使用
输出
字符串执行任何操作。