def sim_jac(s1, s2): bigrams_s1 = [] bigrams_s2 = [] for i in range(len(s1) - 1): bigrams_s1.append(s1[i:i+2]) for i in range(len(s2) - 1): bigrams_s2.append(s2[i:i+2]) c_common = 0 for i in bigrams_s1: if bigrams_s2.count(i) > 0: c_common += 1 return c_common / ((len(s1) - 1) + (len(s2) - 1) - c_common) def encontrar_palabras(transcript,cjto_palabras): ''' Toma un string (en minúsculas) y un conjunto de palabras. Busca el primer match de cjto_palabras en transcript y particiona el string en: 1. El slice de la cadena antes del primer match (antes_palabra) 2. La cadena del primer match (coincidencia de cjto_palabras) 3. El slice de la cadena después del match (despues_palabra) ''' inicio,final=list(re.finditer(r'|'.join(cjto_palabras),transcript))[0].span() antes_palabra=transcript[:inicio].strip() despues_palabra=transcript[final:].strip() palabra=transcript[inicio:final] return antes_palabra,palabra,despues_palabra def agregar_adentro(codigo, transcipcion): codigo2 = main(transcipcion) return codigo[:-1] + codigo2 import numpy as np def main(instruccion): global bloque plantillas = [ crear_funcion, crear_condicional, crear_condicional, asignar_variable, crear_variable, crear_llamada, crear_for, fin_de_bloque, crear_comentario, crear_regresa ] comandos = [set(['definir', 'funcion', 'parametros']), set(['mientras']), set(['si']), # si se cumple / mientras se cumpla set(['asignar', 'con']), set(['definir', 'variable']), set(['ejecuta', 'argumentos']), set(['para', 'rango']), set(['terminar','bloque']), set(['comentario']), set(['regresa']) ] J = [] for comando in comandos: J.append(len(set(instruccion.strip().split(' ')).intersection(comando)) / len(set(instruccion.strip().split(' ')).union(comando))) # print(J,np.argmax(J)) pos_func=np.argmax(J) # print(pos_func) return plantillas[pos_func](instruccion)