蟒蛇蜻蜓识别相似的单词

时间:2014-11-01 19:54:44

标签: python speech-recognition speech python-dragonfly

我正在使用wsr进行龙飞的程序,它必须分析一个单词,任何匹配该单词的语音应输出'yes it matches'

如果我说“捷克斯洛伐克”,那么即使是对于这个世界上所有类似的比赛,它也必须打印出来,比如“斯洛伐克圈,斯拉维亚猫,塞科瓦基亚......”的字样。

我应该使用哪些具体方法?

我的节目

from dragonfly.all import *
import pythoncom
import time
# Voice command rule combining spoken form and recognition processing.
class ExampleRule(CompoundRule):
    spec = "czechoslovakia|circle slovalia|sceko bakia|cat on ania"                 # Spoken form of command.

    def _process_recognition(self, node, extras):   # Callback when command is spoken.
         print "Voice command spoken."

# Create a grammar which contains and loads the command rule.
grammar = Grammar("example grammar")                # Create a grammar to contain the command    rule.
grammar.add_rule(ExampleRule())                     # Add the command rule to the grammar.
grammar.load()                                      # Load the grammar.

while True:
    pythoncom.PumpWaitingMessages()
    time.sleep(.1)

1 个答案:

答案 0 :(得分:1)

Dragonfly没有任何内容允许你这样做,但你还有其他一些选择。

  1. 如果您希望动态生成规范,可能需要 看Fuzzy。你可以给它一个字并用它来生成 来自那个词的其他类似的发音词。然后你可以创建 来自他们的规范。
  2. 蜻蜓中的
  3. Here is the WSR engine class。 我对SAPI5了解不多,但you might be able to ask it for alternatives。如果可以的话,你可以扩展 Dragonfly GrammarWrapper公开替代品,然后使用一个 catchall语法来保存所有话语,然后过滤掉你的内容 想要(可能使用模糊)。
  4. 如果您使用的是Natlink,我会建议 看着结果对象。正如您可以看到here,结果 对象可以访问Dragon的所有不同假设 你在一个特定的话语中说。就像我的第二个建议一样, 你可以抓住所有东西然后过滤你想要的东西:
  5. from natlinkutils import GrammarBase
    
    class CatchAll(GrammarBase):
    
        # this spec will catch everything
        gramSpec = """
            <start> exported = {emptyList};
        """
    
        def initialize(self):
            self.load(self.gramSpec, allResults=1)
            self.activateAll()
    
        def gotResultsObject(self, recogType, resObj):
            for x in range(0, 100):
                try:
                    possible_interpretation = resObj.getWords(x)
                    # do whatever sort of filtering you want here
                except Exception:
                    break
    
    c = CatchAll()
    c.initialize()
    
    def unload():
        global c
        if c:
            c.unload()
        c = None