|
@@ -1,161 +0,0 @@
|
|
|
-# -*- coding: utf-8 -*-
|
|
|
-import os
|
|
|
-
|
|
|
-import re
|
|
|
-
|
|
|
-from core.ConfigurationManager import SettingLoader
|
|
|
-from core.ConfigurationManager.BrainLoader import BrainLoader
|
|
|
-from core.CrontabManager import CrontabManager
|
|
|
-from core.Models import Order
|
|
|
-from core.OrderAnalyser import OrderAnalyser
|
|
|
-
|
|
|
-import logging
|
|
|
-
|
|
|
-from core.TriggerLauncher import TriggerLauncher
|
|
|
-
|
|
|
-
|
|
|
-# user_said = "maman je voudrais ecouter ACDC"
|
|
|
-# order = "je voudrais ecouter {{ artist_name }}"
|
|
|
-
|
|
|
-user_said = "jarvis regle le reveil pour sept heures et dix minutes please"
|
|
|
-order = "regle le reveil pour {{ hour }} heures et {{ minute }} minutes"
|
|
|
-
|
|
|
-
|
|
|
-def _is_containing_closing_bracket(sentence):
|
|
|
- pattern = r"}}"
|
|
|
- bool = re.search(pattern, sentence)
|
|
|
- if bool is not None:
|
|
|
- return True
|
|
|
- return False
|
|
|
-
|
|
|
-
|
|
|
-def _is_containing_opening_bracket(sentence):
|
|
|
- pattern = r"{{"
|
|
|
- bool = re.search(pattern, sentence)
|
|
|
- if bool is not None:
|
|
|
- return True
|
|
|
- return False
|
|
|
-
|
|
|
-
|
|
|
-def _is_containing_bracket(sentence):
|
|
|
- pattern = r"{{|}}"
|
|
|
- bool = re.search(pattern, sentence)
|
|
|
- if bool is not None:
|
|
|
- return True
|
|
|
- return False
|
|
|
-
|
|
|
-
|
|
|
-def _get_list_word_in_order_without_parameter(list_word_in_order):
|
|
|
- """
|
|
|
- Receive a list of word with bracket like
|
|
|
- ['regle', 'le', 'reveil', 'pour', '{{', 'hour', '}}', 'heures', 'et', '{{', 'minute', '}}', 'minutes']
|
|
|
- Return a dict without parameter and a list of parameter place:
|
|
|
-
|
|
|
- TODO insert example
|
|
|
- :param list_word_in_order: List of string that can contain a word or brackets
|
|
|
- :return: Dict
|
|
|
- """
|
|
|
- print list_word_in_order
|
|
|
- list_word_without_bracket = list()
|
|
|
- list_parameter_position_and_name = list()
|
|
|
-
|
|
|
- index = 0 # index to count element in the list counting the brackets
|
|
|
- returned_index = 1 # this is the index where the parameter is placed
|
|
|
- for el in list_word_in_order:
|
|
|
- if _is_containing_opening_bracket(el):
|
|
|
- new_parameter = dict()
|
|
|
- new_parameter["name"] = list_word_in_order[index+1]
|
|
|
- new_parameter["index"] = returned_index
|
|
|
- list_parameter_position_and_name.append(new_parameter)
|
|
|
- else:
|
|
|
- try:
|
|
|
- # if the next element is not a closing bracket
|
|
|
- if not _is_containing_closing_bracket(list_word_in_order[index+1]) and not \
|
|
|
- _is_containing_closing_bracket(el):
|
|
|
- # so we are not facing a parameter. we can add the word to the list
|
|
|
- list_word_without_bracket.append(el)
|
|
|
- else:
|
|
|
- returned_index -= 1
|
|
|
- except IndexError:
|
|
|
- if not _is_containing_bracket(el):
|
|
|
- list_word_without_bracket.append(el)
|
|
|
- returned_index += 1
|
|
|
- index += 1
|
|
|
-
|
|
|
- print list_word_without_bracket
|
|
|
- print list_parameter_position_and_name
|
|
|
- returned_dict = dict()
|
|
|
- returned_dict["list_word_without_bracket"] = list_word_without_bracket
|
|
|
- returned_dict["list_parameter_position_and_name"] = list_parameter_position_and_name
|
|
|
- return returned_dict
|
|
|
-
|
|
|
-
|
|
|
-def _get_usefull_words(list_word_user_said, list_word_without_bracket):
|
|
|
- first_valid_word = list_word_without_bracket[0]
|
|
|
- last_word_valid_word = list_word_without_bracket[len(list_word_without_bracket)-1]
|
|
|
- print first_valid_word
|
|
|
- print last_word_valid_word
|
|
|
-
|
|
|
- start_index = list_word_user_said.index(first_valid_word)
|
|
|
- stop_index = list_word_user_said.index(last_word_valid_word)
|
|
|
-
|
|
|
- new_list = list()
|
|
|
- for x in (range(start_index, stop_index)):
|
|
|
- new_list.append(list_word_user_said[int(x)])
|
|
|
- print new_list
|
|
|
-
|
|
|
- return new_list
|
|
|
-
|
|
|
-
|
|
|
-def try_match_order_in_synapse(list_word_user_said, list_word_in_order):
|
|
|
- """
|
|
|
- Test if what the user said match an order with brackets
|
|
|
- :param list_word_user_said: List of words that the user said
|
|
|
- :param list_word_in_order: List of word in the order to test, including bracket
|
|
|
- :return: True if the order match
|
|
|
- """
|
|
|
- # first, get a list of word that composed to order without variable
|
|
|
- returned_dict = _get_list_word_in_order_without_parameter(list_word_in_order)
|
|
|
-
|
|
|
- list_word_without_bracket = returned_dict["list_word_without_bracket"]
|
|
|
- parameters_position_and_name = returned_dict["list_parameter_position_and_name"]
|
|
|
-
|
|
|
- number_of_word_in_order = len(list_word_without_bracket)
|
|
|
- # if all words in the list of what the user said in in the list of word in the order
|
|
|
- if len(set(list_word_without_bracket).intersection(list_word_user_said)) == number_of_word_in_order:
|
|
|
- # we match the order!
|
|
|
- print "order matched !" # we can get parameters in the sentence the user said
|
|
|
-
|
|
|
- # remove unused word in the list of word spelt by the user.
|
|
|
- usefull_words_in_user_said_list = _get_usefull_words(list_word_user_said, list_word_without_bracket)
|
|
|
- val_parameter = dict()
|
|
|
- for el in parameters_position_and_name:
|
|
|
- print el["name"]
|
|
|
- print
|
|
|
- val_parameter[el["name"]] = list_word_user_said[int(el["index"])]
|
|
|
-
|
|
|
- print "The dict Var : %s" % val_parameter
|
|
|
-
|
|
|
-
|
|
|
-# make a list of word
|
|
|
-list_word_user_said = user_said.split()
|
|
|
-print "user said: %s" % list_word_user_said
|
|
|
-
|
|
|
-# check if the order contain bracket
|
|
|
-if _is_containing_bracket(order):
|
|
|
- print "The order contain bracket"
|
|
|
- # create a list from the order to test
|
|
|
- list_word_in_order = order.split()
|
|
|
- try_match_order_in_synapse(list_word_user_said, list_word_in_order)
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|