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', '']
|