0

我正在使用 wsr 做一个带有 Dragon fly 的程序,它必须分析一个单词,任何匹配该单词的语音都应该输出“是的,它匹配”

如果我说“czechoslovakia”,那么即使对于这个世界上所有类似的匹配,它也必须打印为 true,比如“circle slovakia, cat on slavia,seko vakia...”

我应该使用什么具体方法?

我的程序

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)
4

1 回答 1

2

蜻蜓没有内置任何东西可以让你这样做,但你有一些其他的选择。

  1. 如果您希望动态生成规范,您可能需要查看Fuzzy。你可以给它一个词,然后用它从那个词中生成其他发音相似的词。然后你可以从它们创建规范。
  2. 这是 Dragonfly 中的 WSR 引擎类。我对 SAPI5 了解不多,但您也许可以向它询问替代方案。如果可以,您可以扩展 Dragonfly GrammarWrapper 以公开替代方案,然后使用通用语法来保存所有话语,然后过滤掉您想要的内容(可能使用 Fuzzy)。
  3. 如果您使用的是 Natlink,我建议您查看结果对象。正如您在此处看到的,结果对象可以访问 Dragon 对您在给定话语中所说内容的所有不同假设。就像我的第二个建议一样,您可以捕获所有内容,然后过滤您想要的内容:

.

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
于 2014-11-13T17:54:08.337 回答