2017-02-02 34 views
-1

我正在進行語言處理。我收到一個字符串(例如來自語音識別)。該字符串包含一些命令,必須是找到。我把我自己的系統放在一起,但我無法確定它的算法(我是編程和python的新手)。根據句子在嵌套字典中查找函數

簡單的例子:

received_string = 'I want to turn on machine' 


# idea dictionary in dictionary 
# commands 
def function1(): 
    pass 
def function2(): 
    pass 

commands = \ 
{ 
    'I want to turn on ': { 
          'machine': function1, 
          'lights': function2 
         }, 

    'Open the ':  { 
          ##### 
          ##### 
         } 

} 

所以基本上我收到例如「我想打開機器」。 「我想打開」是可應用於多個對象之一的命令。我想將這些對象存儲在commands字典中的dictionary_中。有沒有可能找到&實現一些聰明的算法,它會處理'我想打開機器'到'我想打開',然後找到'機器'對象並執行function1()

我真的不想有一個算法來切斷字符串中的最後一個單詞,然後搜索。原因是我想要帶有問題的字典等等,並且沒有意見要削減它。事實上,我想要真正複雜的系統,這個帶有命令和不同對象的字典阻礙了我的進步。我知道有一個解決方案可以製作兩個獨立的命令'我想打開機器'和'我想打開燈',但這有點不專業,不可行嗎?

回答

0

你可以嘗試這樣的事:

received_string = 'I want to turn on machine' 


# idea dictionary in dictionary 
# commands 
def function1(): 
    print 'Function 1' 
def function2(): 
    print 'Function 2' 

commands = \ 
{ 
    'I want to turn on ': { 
          'machine': function1, 
          'lights': function2 
         }, 

    'Open the ':  { 
          ##### 
          ##### 
         } 

} 

for command in commands: 
    if command in received_string: 
     item = received_string.split(command)[-1].strip() 
     cmd_out = commands[command][item] 
     break 

cmd_out() 

這將返回:

Function 1 

基本上,你可以看到,如果從命令你的關鍵是你收到的字符串中。然後,您可以解析命令以查看您正在執行的命令,並將變量設置到字典最後部分的函數中。一旦你退出循環,你可以調用你的函數變量。

目前,這裏假設你的字符串是在你的字典中找到的東西,所以如果有任何需要完成的錯誤處理,它將需要被添加。但是這通常會用於你知道在字典中的輸入。

+0

謝謝。這更好的主意 - 比較字典鍵與字符串比鍵與字符串。我會嘗試你的解決方案 – Martin

+0

沒問題,我發現通常比較容易找出子字符串是否在較大的字符串中,而不是查看字符串是否包含某個子字符串,至少從簡單的編程角度來看。 – tmwilson26