Pyspeech,来自两个列表的两个未知输入

时间:2015-05-26 23:06:26

标签: python list speech-recognition sapi

我在python 2.7.9上玩pyspeech 0.5.2并撞墙。 您可以通过向pyspeech提供要收听的单词列表来监听特定单词,如下所示:

color = ['green', 'red', 'yellow', 'brown'...]
phrase = speech.input("I'm listening", color)
print phrase

只有在识别出上面列表中的任何字词时才会继续。 我想要实现的目标需要两个单独的列表。我在这些列表中真正拥有的单词对于语音识别来说太奇怪了,没有提供的列表就会猜测,并且列表很大,可以制作组合表if-statments。 让我们说我使用上面的颜色列表,我想为每个颜色列表分配额外的命令: 搜索 绿色。或绘制 绿色

这些单词,搜索 paint ,其中包含在另一个列表中,我需要将每个列表中的一个单词组合成两个单词的句子。我该怎么做?

这里是我想要的可视化:

color = ['green', 'red', 'yellow', 'brown'...]
commands = ['search', 'paint', 'show'...]
phrase = speech.input("I'm listening", commands, color,)

---saying green & paint out loud---
>>> phrase
['green', 'paint'] # OR 'green paint'

或者,如果我从颜色列表中找到一个单词,并让识别猜出另一个单词,这也会有所帮助,如下所示:

phrase = speech.listenfor  ->  'open %s'
#where %s would be replaced by anything after open
prhase = speech.listenfor  ->  color + "%s"
#one word from color, and %s would be replaced with anything I said after

('代码'上面更多的是代表性)

1 个答案:

答案 0 :(得分:0)

在内部pyspeech使用语法界面从短语列表中设置语法:

    grammar.DictationSetState(0)
    # dunno why we pass the constants that we do here
    rule = grammar.Rules.Add("rule",
            _constants.SRATopLevel + _constants.SRADynamic, 0)
    rule.Clear()

    for phrase in phraselist:
        rule.InitialState.AddWordTransition(None, phrase)

    # not sure if this is needed - was here before but dupe is below
    grammar.Rules.Commit()

您可以修改此部分代码以添加更复杂的规则,这不可能通过公共pyspeech API在pyspeech之外实现。或者你也可以直接使用winapi而不用pyspeech。