2017-02-02 4 views
-1

언어 처리를하고 있습니다. 문자열을받습니다 (예 : 음성 인식). 이 문자열에는 이 포함 된 명령이 포함되어 있으며입니다. 내 자신의 시스템을 함께 넣었지만, 알고리즘을 이해할 수는 없다. (나는 프로그래밍과 파이썬에 익숙하지 않다.)문장을 기반으로 중첩 된 사전에서 함수 찾기

쉬운 예 :

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 사전에 이러한 개체를 저장하고 싶습니다. &은 '기계를 켜고 싶습니다'라는 메시지를 처리하고 '켜고 싶습니다'라는 메시지를 처리 ​​한 다음 'machine'개체를 찾고 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

감사합니다. Thats 훨씬 더 좋은 생각 - 사전 키를 문자열 대신 문자열과 키로 비교하는 것. 귀하의 솔루션을 시도 할 것입니다 – Martin

+0

문제는 아니지만 일반적으로 문자열이 특정 프로그래밍 방식의 관점에서 특정 하위 문자열을 포함하고 있는지보다 큰 문자열에 있는지 쉽게 알아낼 수 있습니다. – tmwilson26

관련 문제