stinoco commited on
Commit
7968b20
1 Parent(s): c6ba15f

fixed ner predictions

Browse files
Files changed (1) hide show
  1. app.py +15 -8
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
- # presencia de ngrams
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
- tmp_text = tmp_text.replace(grams_detected[i][j], f'{i}{sep}{j}')
 
 
 
 
 
 
 
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 solo las entidades etiquetadas
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 irme desde san pedro hasta la reina y luego hasta san pedro de la paz', ''],
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', '']