使Sphinx4使用自定义.gram文件识别所有数字

时间:2016-11-19 10:01:41

标签: java speech-recognition sphinx4

描述

Java中使用Sphinx4 library的语音识别器计算器。

github上的完整代码:here

我使用的克文件是以下(on github):

#JSGF V1.0;

/**
 * JSGF Grammar 
 */

grammar grammar;

public <syntax>  = (one | two | three| four| five | six | seven | eight | nine | ten | eleven | twelve | thirteen | fourteen | fifteen | sixteen | seventeen | eighteen | nineteen | twenty) 
                                                          (plus | minus | multiply | division)                          
                   (one | two | three| four| five | six | seven | eight | nine | ten | eleven | twelve | thirteen | fourteen | fifteen | sixteen | seventeen | eighteen | nineteen | twenty);

问题:

I want the program to be able to recognize numbers from 0 to 1 million in English Language

在当前状态下,您可以看到它可以识别数字(one | two | three| four| five | six | seven | eight | nine | ten | eleven | twelve | thirteen | fourteen | fifteen | sixteen | seventeen | eighteen | nineteen | twenty),因为我已将其手动写入gram file

我的意思是我必须手动将它们全部写入gram file(我可以创建一个程序来生成该文件)但又似乎不可能(某些模式可能存在),文件将太多千兆字节。

最后:

有没有智能解决方案?感谢您的努力:)

Nikolay解决方案之后的新语法是:

public <number> = (one | two | three | four | five | six | seven | nine | ten
                   | eleven | twelve | thirteen | fourteen | fifteen | sixteen | seventeen | eighteen | nineteen | twenty 
                   | thirty | forty | fifty | sixty  | seventy | eighty | ninety | hundred | thousand | million | billion)+;                   
public <syntax> = <number>{1} (plus | minus | multiply | division){1} <number>{1}; 

1 个答案:

答案 0 :(得分:1)

最聪明的解决方案是首先识别文本字符串。语法不应该复杂,它应该只列出数字中使用的单词:

 grammar number;

 public <number> = (one | two | three | four | five | six | seven |
 nine | ten | eleven | twelve | thirteen | fourteen | fifteen | 
 sixteen | seventeen | eighteen | nineteen | twenty | thirty | forty | 
 fifty | sixty  | seventy | eighty | ninety | hundred | thousand |
 million | and )*;

识别文本后,将其转换为数字。您可以查看How to convert words to a number?了解详情。