2017-02-02 13 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 ':  { 
          ##### 
          ##### 
         } 

} 

だから基本的に私は、「私は、マシンの電源をオンにしたい」は、例えば受け取ります。 "私は有効にしたい"というコマンドは、いくつかのオブジェクトの1つに適用することができます。私はcommands辞書の辞書にこれらのオブジェクトを保存したいと思います。 &が「私はマシンをオンにしたい」という処理を行う巧妙なアルゴリズムを実装し、「マシンをオンにしたい」というオブジェクトを見つけ、function1()を実行することが可能ですか?

私は本当に文字列の最後の単語をカットして検索するアルゴリズムを持っていないと思います。その理由は、質問などで辞書を欲しがっており、それを切るのにポイントがないからです。実際に私は本当に複雑なシステムを望んでおり、コマンドと異なるオブジェクトを持つこの辞書は私の進歩を妨げています。私は、「マシンをオンにしたい」と「ライトをオンにしたい」の2つの独立したコマンドを作成するという解決策があることは知っていますが、専門家ではなく、実用的ではないのですか?

答えて

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

関連する問題