|  | @@ -1,121 +0,0 @@
 | 
	
		
			
				|  |  | -# -*- coding: utf-8 -*-
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -import re, math
 | 
	
		
			
				|  |  | -from collections import Counter
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# user_said = "maman je voudrais ecouter ACDC"
 | 
	
		
			
				|  |  | -# order = "je voudrais ecouter {{ artist_name }}"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -user_said = "s'il te plait regle le reveil pour dix huit heures et dix neuf  minutes trente trois  secondes cent quatre vingt dix "
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -user_said_list = [" regle le reveil pour neuf  heures et quinze minutes trente trois secondes ",
 | 
	
		
			
				|  |  | -                 "s'il te plait regle le reveil pour dix huit huf  minutes trente trois  secondes cent quatre vingt dix ",
 | 
	
		
			
				|  |  | -                 "regle pour dix huit heures et   trente trois  secondes cent quatre vingt dix ",
 | 
	
		
			
				|  |  | -                 "s'il te plait regle le reveil poutes trente trois  secondes cent quatre vingt dix ",
 | 
	
		
			
				|  |  | -                 "RIEN A VOIR",
 | 
	
		
			
				|  |  | -                " minutes neuf trente reveil regle secondes  quinze  le heures et    trois  pour "
 | 
	
		
			
				|  |  | -                  ]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -order = "{{ politesse }} regle le reveil pour {{ hour}} heures et {{minute }} minutes {{ seconde  }} secondes {{mili}}"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -order_list = ["regle le reveil pour  heures et  minutes  secondes ",
 | 
	
		
			
				|  |  | -              "{{ politesse }} regle le reveil pour {{ hour}} heures et {{minute }} minutes {{ seconde  }} secondes {{mili}}",
 | 
	
		
			
				|  |  | -              "politesse  regle le reveil pour  hour heures et minute  minutes  seconde   secondes mili",
 | 
	
		
			
				|  |  | -              " reveil pour {{ hour}}  et {{minute }} minutes  secondes {{mili}}",
 | 
	
		
			
				|  |  | -              "{{ politesse }} regle le reveil pour "
 | 
	
		
			
				|  |  | -              ]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# take a look to each order
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -WORD = re.compile(r'\w+')
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -def get_cosine(vec1, vec2):
 | 
	
		
			
				|  |  | -     intersection = set(vec1.keys()) & set(vec2.keys())
 | 
	
		
			
				|  |  | -     numerator = sum([vec1[x] * vec2[x] for x in intersection])
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -     sum1 = sum([vec1[x]**2 for x in vec1.keys()])
 | 
	
		
			
				|  |  | -     sum2 = sum([vec2[x]**2 for x in vec2.keys()])
 | 
	
		
			
				|  |  | -     denominator = math.sqrt(sum1) * math.sqrt(sum2)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -     if not denominator:
 | 
	
		
			
				|  |  | -        return 0.0
 | 
	
		
			
				|  |  | -     else:
 | 
	
		
			
				|  |  | -        return float(numerator) / denominator
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -def text_to_vector(text):
 | 
	
		
			
				|  |  | -     words = WORD.findall(text)
 | 
	
		
			
				|  |  | -     return Counter(words)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -def _is_containing_bracket(sentence):
 | 
	
		
			
				|  |  | -    # print "sentence to test %s" % sentence
 | 
	
		
			
				|  |  | -    pattern = r"{{|}}"
 | 
	
		
			
				|  |  | -    # prog = re.compile(pattern)
 | 
	
		
			
				|  |  | -    bool = re.search(pattern, sentence)
 | 
	
		
			
				|  |  | -    if bool is not None:
 | 
	
		
			
				|  |  | -        return True
 | 
	
		
			
				|  |  | -    return False
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -def _get_next_value_list(list):
 | 
	
		
			
				|  |  | -    ite = list.__iter__()
 | 
	
		
			
				|  |  | -    next(ite, None)
 | 
	
		
			
				|  |  | -    return next(ite, None)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# check if the order contain bracket
 | 
	
		
			
				|  |  | -if _is_containing_bracket(order):
 | 
	
		
			
				|  |  | -    # remove white space between {{ and }}
 | 
	
		
			
				|  |  | -    # get a table of word said
 | 
	
		
			
				|  |  | -    list_word_in_order = re.sub('\s+(?=[^\{\{\}\}]*\}\})', '',order).split()
 | 
	
		
			
				|  |  | -    print "order matched: %s" % list_word_in_order
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    # get the order, defined by the first words before {{
 | 
	
		
			
				|  |  | -    the_order = order[:order.find('{{')]
 | 
	
		
			
				|  |  | -    print "the order catched %s" % the_order
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    # remove sentence before order
 | 
	
		
			
				|  |  | -    nb = user_said[user_said.find(the_order):]
 | 
	
		
			
				|  |  | -    truncate_list_word_said = nb.split()
 | 
	
		
			
				|  |  | -    print "truncate_list_word_said : %s" % truncate_list_word_said
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    # make dict var:value
 | 
	
		
			
				|  |  | -    dictVar = {}
 | 
	
		
			
				|  |  | -    for idx, ow in enumerate(list_word_in_order):
 | 
	
		
			
				|  |  | -        if _is_containing_bracket(ow):
 | 
	
		
			
				|  |  | -            # remove bracket et key dict
 | 
	
		
			
				|  |  | -            varname = ow.replace("{{","").replace("}}", "")
 | 
	
		
			
				|  |  | -            stopValue = _get_next_value_list(list_word_in_order[idx:])
 | 
	
		
			
				|  |  | -            if stopValue is None:
 | 
	
		
			
				|  |  | -                dictVar[varname] = " ".join(truncate_list_word_said)
 | 
	
		
			
				|  |  | -                break
 | 
	
		
			
				|  |  | -            for word_said in truncate_list_word_said:
 | 
	
		
			
				|  |  | -                if word_said == stopValue: break
 | 
	
		
			
				|  |  | -                if varname in dictVar:
 | 
	
		
			
				|  |  | -                    dictVar[varname] += " " + word_said
 | 
	
		
			
				|  |  | -                    truncate_list_word_said = truncate_list_word_said[1:]
 | 
	
		
			
				|  |  | -                else:
 | 
	
		
			
				|  |  | -                    dictVar[varname] = word_said
 | 
	
		
			
				|  |  | -        truncate_list_word_said = truncate_list_word_said[1:]
 | 
	
		
			
				|  |  | -    print "The dict Var : %s" % dictVar
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -for us in user_said_list:
 | 
	
		
			
				|  |  | -    for od in order_list:
 | 
	
		
			
				|  |  | -        vector1 = text_to_vector(us)
 | 
	
		
			
				|  |  | -        vector2 = text_to_vector(od)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        cosine = get_cosine(vector1, vector2)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        print "Cosine -> ", cosine, " for usersaid: ",us, " ,order:", od
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 |