0

我有一个应用程序,用户可以在其中说话和一个词,他将获得他所说的词的准确百分比。即引擎识别这个词的程度。

这一切都很好,但我有一个难题,需要将哪些单词添加到字典中,我将作为字典提供给识别引擎。

如果我为 case pen 给出以“p”开头的单词,那么像 pendant、pent 等所有单词都将被添加到字典中。在这种情况下,我没有得到识别为“pen”的单词。

相反,我总是得到其他词,如“吊坠”等

但是,如果我只在字典中添加有限的单词,例如“pe”、“pen”,那么对于同一个录制文件,我只能将识别的单词作为“Pen”。

意味着它显然取决于我们提供给字典的单词。

我已经向我的客户传达了同样的信息。但是他们想要的是,对于给定的输入词,他们也可以说出错误的词,所以当时他们不需要获得准确性并获得识别的文本。

我已经为这个问题做了我本可以做的事情。但是我的客户需要宇宙之外的东西。

代码 :

public OdllSpeechProcessor(string culture, string speechContent , string filePath)
        {
            try
            {
                int counter = 0;
                string line;
                cultureInfo         = new CultureInfo(culture);
                recognitionEngine   = new SpeechRecognitionEngine(cultureInfo);
                words               = new Choices();
                gb                  = new GrammarBuilder();
                gb.Culture          = cultureInfo;
                rndAccuracy         = new Random();

                System.IO.StreamReader file = new System.IO.StreamReader(filePath);
                while ((line = file.ReadLine()) != null)
                {
                    if (line != "")
                    {
                        for (int i = 0; i < srcContent.Length; i++)
                        {
                            if (line.StartsWith(subsetWords, true, cultureInfo))
                            {
                                if (count >= line.Length)
                                {
                                    words.Add(line);
                                    counter++;
                                }
                            }
                        }
                    }
                }


                file.Close(); 

                // Adding words to the grammar builder.              
                gb.Append(words);

                // Create the actual Grammar instance, with the words from the source audio.
                g = new Grammar(gb);

                // Load the created grammar onto the speech recognition engine.
                recognitionEngine.LoadGrammarAsync(g);

有没有专家在这里解决这个问题?任何帮助将不胜感激。

谢谢

4

1 回答 1

0

您正在使用命令语法(即一组选择)。使用命令语法,引擎会尽力找到匹配项,这很容易导致误报(如您所见)。您可能想研究听写语法,尤其是发音语法,正如我在对这个问题的回答中所概述的那样。请注意,我概述的解决方案使用了一些 C# 中不可用的接口(或至少通过 公开System.Speech.Recognition)。

于 2013-09-12T03:37:11.023 回答