File size: 2,379 Bytes
9b458b6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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)