Spaces:
Runtime error
Runtime error
fixed ner predictions
Browse files
app.py
CHANGED
@@ -37,16 +37,16 @@ def f_remove_accents(old: str):
|
|
37 |
|
38 |
def predict(text: str, goal = ''):
|
39 |
|
|
|
|
|
40 |
diccionario = entities_dict.copy()
|
41 |
tokens = word_tokenize(text, language = 'spanish')
|
42 |
-
#tokens_lower = [unidecode(token.lower()) for token in tokens] # tokens en minuscula
|
43 |
tokens_lower = [f_remove_accents(token.lower()) for token in tokens] # tokens en minuscula
|
44 |
|
45 |
dict_tokens = {tokens_lower[i]: tokens[i] for i in range(len(tokens))}
|
46 |
-
#dict_keys = {unidecode(key.lower()): key for key in diccionario.keys()}
|
47 |
dict_keys = {f_remove_accents(key.lower()): key for key in diccionario.keys()}
|
48 |
|
49 |
-
#
|
50 |
ngram_range = 5 # rango de ngramas a evaluar
|
51 |
nmin = 1 # numero minimo de ngramas presente en el texto
|
52 |
grams_detected = {}
|
@@ -63,7 +63,14 @@ def predict(text: str, goal = ''):
|
|
63 |
try:
|
64 |
# obtener todos los ngramas de nivel "i"
|
65 |
for j in range(len(grams_detected[i])):
|
66 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
except KeyError: # en caso de que no existan ngramas de nivel "i", pass
|
68 |
pass
|
69 |
|
@@ -73,7 +80,7 @@ def predict(text: str, goal = ''):
|
|
73 |
for token in tokens_lower:
|
74 |
labeled_tokens.append((dict_tokens[token], diccionario[dict_keys[token]]) if token in dict_keys.keys() else (token, None))
|
75 |
|
76 |
-
# si hay entidades de largo 2 o mas, devuelvo
|
77 |
else:
|
78 |
tmp_text = ' '.join(tmp_text.split()) # texto sin espacios
|
79 |
tmp_tokens = tmp_text.split()
|
@@ -83,10 +90,10 @@ def predict(text: str, goal = ''):
|
|
83 |
encoded_token = grams_detected[int(level)][int(pos)]
|
84 |
labeled_tokens.append((encoded_token, diccionario[dict_keys[encoded_token]]))
|
85 |
elif token in dict_keys.keys():
|
86 |
-
labeled_tokens.append((dict_tokens[token], diccionario[dict_keys[token]]))
|
|
|
87 |
else:
|
88 |
labeled_tokens.append((token, None))
|
89 |
-
|
90 |
|
91 |
# CLASSIFICATION
|
92 |
|
@@ -157,7 +164,7 @@ demo = gr.Interface(
|
|
157 |
gr.outputs.Label(label = 'Clasificación objetivo')],
|
158 |
examples=[
|
159 |
['este septiembre iremos manejando a tEmUco en un tóyòtA para pasar las fiestas patrias', 'ir a temuco'],
|
160 |
-
['no puedo, tengo que
|
161 |
['Buenas tardes, hace unas semanas compre un suzuki swift a derco de santiago, llevaba 2 semanas y la caja de cambios se echó a perder. Tengo asegurado el auto con BCI, pero aun no obtengo respuesta.', 'exijo una explicación!'],
|
162 |
['Tengo un toyota urban cruiser 1.3 año 2010 el cual consume mucho aceite y nunca me han respondido si tiene alguna solución o garantía me gustaría que fueran más concretas las respuestas gracias', 'Obtener una solucion Que reparación hay que hacer o si tiene garantía?'],
|
163 |
['Mi auto del año presenta Falla de motor y sensores siendo que lo compre nuevo 0km y tiene recién 5400kms.. Es un Peugeot 2008 gti... El servicio es como las pelotas.. Me mandaron a un servicio técnico en Calama que estaba cerrado', '']
|
|
|
37 |
|
38 |
def predict(text: str, goal = ''):
|
39 |
|
40 |
+
output_sernac, output_sernac_categories, output_other, output_objective = np.nan, np.nan, np.nan, np.nan
|
41 |
+
|
42 |
diccionario = entities_dict.copy()
|
43 |
tokens = word_tokenize(text, language = 'spanish')
|
|
|
44 |
tokens_lower = [f_remove_accents(token.lower()) for token in tokens] # tokens en minuscula
|
45 |
|
46 |
dict_tokens = {tokens_lower[i]: tokens[i] for i in range(len(tokens))}
|
|
|
47 |
dict_keys = {f_remove_accents(key.lower()): key for key in diccionario.keys()}
|
48 |
|
49 |
+
# Evaluar el grado de ngramas en texto
|
50 |
ngram_range = 5 # rango de ngramas a evaluar
|
51 |
nmin = 1 # numero minimo de ngramas presente en el texto
|
52 |
grams_detected = {}
|
|
|
63 |
try:
|
64 |
# obtener todos los ngramas de nivel "i"
|
65 |
for j in range(len(grams_detected[i])):
|
66 |
+
entity = grams_detected[i][j]
|
67 |
+
tokens_entity = tuple(word_tokenize(entity))
|
68 |
+
ngrams = list(nltk.ngrams(tmp_text.split(' '), i))
|
69 |
+
tmp_list = [(f'{i}{sep}{j}',) if ngram == tokens_entity else ngram for ngram in ngrams]
|
70 |
+
pos_list = [key for key, value in dict(enumerate(tmp_list)).items() if f'{i}{sep}{j}' in value[0]]
|
71 |
+
exclude_list = [value + k for value in pos_list for k in range(1, i)]
|
72 |
+
tmp_list = [value for key, value in dict(enumerate(tmp_list)).items() if key not in exclude_list]
|
73 |
+
tmp_text = ' '.join([i[0] for i in tmp_list] + [token for token in tmp_text.split(' ')[-i+1:] if token not in tokens_entity])
|
74 |
except KeyError: # en caso de que no existan ngramas de nivel "i", pass
|
75 |
pass
|
76 |
|
|
|
80 |
for token in tokens_lower:
|
81 |
labeled_tokens.append((dict_tokens[token], diccionario[dict_keys[token]]) if token in dict_keys.keys() else (token, None))
|
82 |
|
83 |
+
# si hay entidades de largo 2 o mas, devuelvo texto etiquetado con ngramas
|
84 |
else:
|
85 |
tmp_text = ' '.join(tmp_text.split()) # texto sin espacios
|
86 |
tmp_tokens = tmp_text.split()
|
|
|
90 |
encoded_token = grams_detected[int(level)][int(pos)]
|
91 |
labeled_tokens.append((encoded_token, diccionario[dict_keys[encoded_token]]))
|
92 |
elif token in dict_keys.keys():
|
93 |
+
#labeled_tokens.append((dict_tokens[token], diccionario[dict_keys[token]]))
|
94 |
+
labeled_tokens.append((token, diccionario[dict_keys[token]]))
|
95 |
else:
|
96 |
labeled_tokens.append((token, None))
|
|
|
97 |
|
98 |
# CLASSIFICATION
|
99 |
|
|
|
164 |
gr.outputs.Label(label = 'Clasificación objetivo')],
|
165 |
examples=[
|
166 |
['este septiembre iremos manejando a tEmUco en un tóyòtA para pasar las fiestas patrias', 'ir a temuco'],
|
167 |
+
['no puedo, tengo que ir desde san pedro hasta la reina y luego hasta san pedro de la paz', ''],
|
168 |
['Buenas tardes, hace unas semanas compre un suzuki swift a derco de santiago, llevaba 2 semanas y la caja de cambios se echó a perder. Tengo asegurado el auto con BCI, pero aun no obtengo respuesta.', 'exijo una explicación!'],
|
169 |
['Tengo un toyota urban cruiser 1.3 año 2010 el cual consume mucho aceite y nunca me han respondido si tiene alguna solución o garantía me gustaría que fueran más concretas las respuestas gracias', 'Obtener una solucion Que reparación hay que hacer o si tiene garantía?'],
|
170 |
['Mi auto del año presenta Falla de motor y sensores siendo que lo compre nuevo 0km y tiene recién 5400kms.. Es un Peugeot 2008 gti... El servicio es como las pelotas.. Me mandaron a un servicio técnico en Calama que estaba cerrado', '']
|