【问题标题】:Invoking brill tagger through C#通过 C# 调用 brill 标记器
【发布时间】:2012-03-28 11:15:57
【问题描述】:

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

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

    }

【问题讨论】:

  • @Toshal Mokadam,在提问之前先尝试接受一些以前的答案。
  • 您的意思是从 cmd 命令或 C# 重定向代码创建输出?如果是后者,那么您不会对 output 字符串做任何事情。

标签: c# tagging


【解决方案1】:

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

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

要么将输出重定向到带有 > "outputpath" 的文件,要么将输出重定向到 C# 应用程序然后删除 >output,两者都无法完成。

【讨论】:

    【解决方案2】:

    你的代码是这样写的,我认为它应该是这样的:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-11-13
        • 1970-01-01
        • 1970-01-01
        • 2014-03-25
        • 2015-07-22
        • 1970-01-01
        • 2016-09-07
        • 2018-06-12
        • 2010-11-26
        相关资源
        最近更新 更多