2014-11-01 2 views
0

Я делаю программу с драконом лета с помощью WSR, где он должен проанализировать слово, любой голос соответствия этого слова должны выходом «да это соответствует»питон стрекозы распознавать подобные слова

Если я говорю «Чехословакия» то он должен быть правдивым даже для всех похожих совпадений этого мира, таких как слова «круг словкия», кошка на славяне, секо вакиа ... »

Какие конкретные методы я должен использовать для этого?

Моя программа

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) 
+0

Как вы тогда определяете «похожие». Вы, вероятно, захотите подробно остановиться на этом. –

ответ

1

Там нет ничего, встроенный в Dragonfly, чтобы позволить вам сделать это, но у вас есть какие-то другие варианты.

  1. Если вы хотите, чтобы динамически генерировать спецификации, вы можете смотреть на Fuzzy. Вы могли бы дать ему слово и использовать его для генерации других подобных звуковых слов из этого слова. Тогда вы можете создать spec от них.
  2. Here is the WSR engine class в Dragonfly. Я мало что знаю о SAPI5, но you might be able to ask it for alternatives. Если вы можете, вы можете продлить Dragonfly GrammarWrapper, чтобы разоблачить альтернативы, а затем использовать грамматику , чтобы сохранить все высказывания, а затем отфильтровать то, что вам нужно (возможно, с помощью Fuzzy).
  3. Если вы используете Natlink, я бы порекомендовал посмотреть на объект результатов. Как вы можете видеть here, результаты имеют доступ ко всем различным гипотезам Дракона о том, что вы сказали в данном высказывании. Как и в случае с моим вторым предложением, вы можете поймать все, а затем отфильтровать то, что вы хотели:

.

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 
Смежные вопросы