微软语音识别中的数字识别

时间:2015-05-29 01:39:03

标签: c# .net speech-recognition

我想将任何说出的数字转换为整数,以便我可以对它们执行操作,例如:

twenty-one >> 21 

我设法对我正在使用的小范围数字进行计算。

我正在遵循这个策略(但它不会起作用,因为我需要用户说出任何数字):

string[] numberString =
{
    "zero", "one", "two", "three", "four", "five",
    "six", "seven", "eight", "nine", "ten",
    "eleven", "twelve", "thirteen", "fourteen", "fifteen",
    "sixteen", "seventeen", "eighteen", "nineteen", "twenty"
};

Choices numberChoices = new Choices();

for (int i = 0; i < numberString.Length; i++)
{
    numberChoices.Add(new SemanticResultValue(numberString[i], i));
}

gb[1].Append(new SemanticResultKey("number1", (GrammarBuilder)numberChoices));

因为我不打算记下所有数字......所以有没有聪明的方法呢?

更新1:

我尝试了以下内容:

Choices numberChoices = new Choices();

for (int i = 0; i <= 100; i++)
{
    numberChoices.Add(i.ToString());
}

gb[1].Append(new SemanticResultKey("op1", (GrammarBuilder)numberChoices));

Choices choices = new Choices(gb);

现在我可以拥有100个数字,但如果我使它成为百万,那么加载需要相当多的时间,并且它需要超过2GB的内存并且它不能实时完成负载。 使用100个数字,准确性很差,它无法正确识别12个,有时数字低于10个。

1 个答案:

答案 0 :(得分:1)

您可以在语法中添加所有可能的单词,包括&#34;百&#34;,&#34;数百&#34;,&#34;七十&#34;,&#34;九十&#34;,& #34;千&#34;,&#34;千&#34;作为原始选择。

期望语义键为您提供结果并不是一个好主意,而是应该只分析已识别的字符串并尝试用数字解析它。

在输入时,你有一个字符串,如&#34;七百五十三三&#34;。要将其转换为数字,请执行以下操作:

int result = 0;
int final_result = 0;
for (String word : words) {
     if (word == "one") {
         result = 1;
     }
     if (word == "two") {
         result = 2;
     }    
     if (word == "twelve") {
         result = 12;
     }    
     if (word == "thousand") {
         // Get what we accumulated before and add with thousands
         final_result = final_result + result * 1000;
     }    
}
final_result = final_result + result;

当然语法允许识别类似于&#34;二万五七&#34;,但你必须在转换代码中处理它。