【问题标题】:Make Sphinx4 Recognize all the numbers using custom .gram file使用自定义 .gram 文件让 Sphinx4 识别所有数字
【发布时间】:2017-04-03 03:45:50
【问题描述】:

说明

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

github上的完整代码:here


我使用的 gram 文件如下(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}; 

【问题讨论】:

    标签: java speech-recognition sphinx4


    【解决方案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?。

    【讨论】:

    • Nikolay 我已经完成了将单词转换为数字或将数字转换为单词的第二部分。我遇到的问题是语法文件只能识别我写的数字....,(one | two | three| four| five | six | seven | eight | nine | ten | eleven | twelve | thirteen | fourteen | fifteen | sixteen | seventeen | eighteen | nineteen | twenty),我希望它识别每个数字...因为我不能使用 language model 和 grammar我堆在这里...有什么特殊的词&lt;number&gt; 可以用在grammar file 中吗?
    • 没有特殊字眼。
    • 有没有办法使用语法(作为字符串格式)识别所有数字? :) 只有我想要的,仅此而已,我可以做其他的事情。
    • 谢谢! .您的模式有效,尽管spinhx4 有很大的问题,只是它无法识别例如one thousand twenty four 或类似的东西......我已经编辑了包含我在你回答后使用的语法的问题。如果你想看看我是否做错了什么或者只是 sphinx4-5 需要更多改进或培训。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2013-10-11
    相关资源
    最近更新 更多