Moibe commited on
Commit
eabea5d
·
1 Parent(s): 7bdefa8

Fixing detección palabras simultaneas

Browse files
.gitignore CHANGED
@@ -1,3 +1,4 @@
1
  /venv/
2
  /__pycache__/
3
- campos/__pycache__/
 
 
1
  /venv/
2
  /__pycache__/
3
+ campos/__pycache__/
4
+ tools/__pycache__/
campos/ine_actual.py CHANGED
@@ -1,5 +1,6 @@
1
  import herramientas
2
  import tools.ine_actual as ine_actual_tools
 
3
 
4
  def vigencia(textos_extraidos, textos_extraidos_limpios):
5
 
@@ -10,8 +11,8 @@ def vigencia(textos_extraidos, textos_extraidos_limpios):
10
  indice, textos_extraidos_corregidos = herramientas.buscaIndexMultiplesPalabras(textos_extraidos_limpios, conceptos_busqueda)
11
 
12
  textos_extraidos_limpios = textos_extraidos_corregidos
13
- print("El índice de genero es: ", indice)
14
-
15
  texto_genero = textos_extraidos_limpios[indice]
16
  print("Y su correspondiente texto es: " , texto_genero)
17
 
 
1
  import herramientas
2
  import tools.ine_actual as ine_actual_tools
3
+ import time
4
 
5
  def vigencia(textos_extraidos, textos_extraidos_limpios):
6
 
 
11
  indice, textos_extraidos_corregidos = herramientas.buscaIndexMultiplesPalabras(textos_extraidos_limpios, conceptos_busqueda)
12
 
13
  textos_extraidos_limpios = textos_extraidos_corregidos
14
+ print("El índice de vigencia es: ", indice)
15
+
16
  texto_genero = textos_extraidos_limpios[indice]
17
  print("Y su correspondiente texto es: " , texto_genero)
18
 
herramientas.py CHANGED
@@ -72,38 +72,44 @@ def buscaIndexMultiplesPalabras(arreglo_textos, conceptos_requeridos):
72
  Args:
73
  arreglo (list): Lista de strings de texto extraído (limpios).
74
  conceptos_requeridos (list): Lista de diccionarios, donde cada diccionario define un concepto:
75
- Ej: {'preferida': 'nacimiento', 'alternativas': ['nacimento', 'nacimuento']}
76
 
77
  Returns:
78
- tuple: (índice, línea_corregida) si se encuentra, o (None, None) si no se encuentra.
79
  """
80
- print(f"\n--- Iniciando búsqueda y corrección ---")
81
-
82
  # Paso 1: Normalizar los conceptos y prepararlos para la búsqueda y corrección
83
  conceptos_preparados = []
84
  for concepto in conceptos_requeridos:
 
85
  preferida = concepto['preferida'].lower().replace(" ", "")
86
  alternativas = [alt.lower().replace(" ", "") for alt in concepto.get('alternativas', [])]
87
 
88
  # Combinamos la preferida con las alternativas para la búsqueda
89
  todas_las_formas = [preferida] + alternativas
 
90
 
91
  conceptos_preparados.append({
92
  'preferida': preferida,
93
  'todas_las_formas': todas_las_formas,
94
- 'alternativas': alternativas # Solo las alternativas para saber cuáles corregir
95
  })
96
 
 
 
97
  for i, texto_linea in enumerate(arreglo_textos):
98
  texto_linea_lower = texto_linea.lower()
 
99
 
100
  # Variables para seguir el rastro de la línea actual
101
- es_coincidencia_completa = True
 
102
  palabras_encontradas_en_linea = {} # Almacena {forma_encontrada: forma_preferida}
103
 
104
  # Paso 2: Verificar si TODAS las condiciones se cumplen en esta línea
105
  for concepto in conceptos_preparados:
106
  encontrado_en_esta_linea = False
 
107
 
108
  # Buscamos si alguna forma (preferida o alternativa) está en la línea
109
  for forma in concepto['todas_las_formas']:
@@ -113,40 +119,36 @@ def buscaIndexMultiplesPalabras(arreglo_textos, conceptos_requeridos):
113
  # Guardamos qué forma se encontró y cuál es la preferida
114
  palabras_encontradas_en_linea[forma] = concepto['preferida']
115
 
116
- # Hemos encontrado una forma para este concepto, pasamos al siguiente concepto
117
- break
118
-
119
- if not encontrado_en_esta_linea:
120
- es_coincidencia_completa = False
121
- print(f"Línea {i}: Concepto '{concepto['preferida']}' : Revisado.")
 
 
122
  break # Si falta un concepto, pasamos a la siguiente línea del arreglo
123
-
 
 
124
  # Paso 3: Si se encontró una coincidencia completa, corregimos la línea y la retornamos
125
  if es_coincidencia_completa:
 
126
  print(f"ÉXITO: Coincidencia completa en el índice {i}.")
127
  print(f"Texto linea es: {texto_linea}")
128
 
129
  linea_corregida = texto_linea
130
 
131
  for forma_encontrada, forma_preferida in palabras_encontradas_en_linea.items():
132
- # Nota: Esta corrección simple asume que la palabra encontrada está exactamente igual que en la lista de alternativas (minusculas y sin espacios)
133
- # Para un OCR más variable, necesitarías una lógica de reemplazo más avanzada (ej. re.sub),
134
- # pero para tu caso de "nacimento" a "nacimiento" esto funciona si la palabra se encuentra exactamente.
135
-
136
- # Usamos re.sub para reemplazar la palabra encontrada con la preferida, insensible a mayúsculas/minúsculas
137
- # (re.escape para manejar caracteres especiales si los hubiera)
138
  patron_reemplazo = re.compile(re.escape(forma_encontrada), re.IGNORECASE)
139
-
140
- # Reemplazamos la palabra encontrada en la línea original con la forma preferida
141
  linea_corregida = patron_reemplazo.sub(forma_preferida, linea_corregida, count=1)
142
-
143
  print(f"Línea corregida: '{linea_corregida}'")
144
- # Ahora corregimos la línea original usando la información de las palabras encontradas
145
 
146
- arreglo_textos[i] = linea_corregida
147
  return i, arreglo_textos
148
 
 
149
  print(f"\n--- Búsqueda finalizada ---")
150
  print("Ninguna línea contiene todas las palabras requeridas.")
151
- return None, None
152
-
 
72
  Args:
73
  arreglo (list): Lista de strings de texto extraído (limpios).
74
  conceptos_requeridos (list): Lista de diccionarios, donde cada diccionario define un concepto:
75
+ Ej: {'preferida': 'nacimiento', 'alternativas': ['nacimento', 'nacimuento']}
76
 
77
  Returns:
78
+ tuple: (índice, arreglo_corregido) si se encuentra, o (None, None) si no se encuentra.
79
  """
80
+ print(f"\n--- Entre a busqueda palabras index ---")
81
+
82
  # Paso 1: Normalizar los conceptos y prepararlos para la búsqueda y corrección
83
  conceptos_preparados = []
84
  for concepto in conceptos_requeridos:
85
+ print("Preparación de conceptos, estoy en el concepto: ", concepto)
86
  preferida = concepto['preferida'].lower().replace(" ", "")
87
  alternativas = [alt.lower().replace(" ", "") for alt in concepto.get('alternativas', [])]
88
 
89
  # Combinamos la preferida con las alternativas para la búsqueda
90
  todas_las_formas = [preferida] + alternativas
91
+ print("Todas las formas quedó como: ", todas_las_formas)
92
 
93
  conceptos_preparados.append({
94
  'preferida': preferida,
95
  'todas_las_formas': todas_las_formas,
 
96
  })
97
 
98
+ print("Conceptos preparados quedó como: ", conceptos_preparados)
99
+
100
  for i, texto_linea in enumerate(arreglo_textos):
101
  texto_linea_lower = texto_linea.lower()
102
+ print("Trabajando la línea: ", texto_linea_lower)
103
 
104
  # Variables para seguir el rastro de la línea actual
105
+ es_coincidencia_completa = False
106
+ print("La var es_coincidencia_completa empieza como false...")
107
  palabras_encontradas_en_linea = {} # Almacena {forma_encontrada: forma_preferida}
108
 
109
  # Paso 2: Verificar si TODAS las condiciones se cumplen en esta línea
110
  for concepto in conceptos_preparados:
111
  encontrado_en_esta_linea = False
112
+ print("Revisando CONCEPTO: ", concepto)
113
 
114
  # Buscamos si alguna forma (preferida o alternativa) está en la línea
115
  for forma in concepto['todas_las_formas']:
 
119
  # Guardamos qué forma se encontró y cuál es la preferida
120
  palabras_encontradas_en_linea[forma] = concepto['preferida']
121
 
122
+ # print("Estoy por hacer break porque encontré la línea...")
123
+ # # Hemos encontrado una forma para este concepto, pasamos al siguiente concepto
124
+ # break
125
+ print("Paso if encontrado_en_esta_linea es True...")
126
+ if encontrado_en_esta_linea:
127
+ es_coincidencia_completa = True
128
+ print(f"Línea {i}: Concepto '{concepto['preferida']}' : Encontrado.")
129
+ print("Estoy por hacer break por que es_coincidencia_completa es True...")
130
  break # Si falta un concepto, pasamos a la siguiente línea del arreglo
131
+
132
+
133
+ print("Paso: if es_coincidencia_completa:")
134
  # Paso 3: Si se encontró una coincidencia completa, corregimos la línea y la retornamos
135
  if es_coincidencia_completa:
136
+ print("Aquí llega cuando encuentra algo, en su línea respectiva, pero cuando no encuentra nada, se queda en cero.")
137
  print(f"ÉXITO: Coincidencia completa en el índice {i}.")
138
  print(f"Texto linea es: {texto_linea}")
139
 
140
  linea_corregida = texto_linea
141
 
142
  for forma_encontrada, forma_preferida in palabras_encontradas_en_linea.items():
 
 
 
 
 
 
143
  patron_reemplazo = re.compile(re.escape(forma_encontrada), re.IGNORECASE)
 
 
144
  linea_corregida = patron_reemplazo.sub(forma_preferida, linea_corregida, count=1)
145
+
146
  print(f"Línea corregida: '{linea_corregida}'")
147
+ arreglo_textos[i] = linea_corregida
148
 
 
149
  return i, arreglo_textos
150
 
151
+ print("Paso: Búsqueda finalizada.:")
152
  print(f"\n--- Búsqueda finalizada ---")
153
  print("Ninguna línea contiene todas las palabras requeridas.")
154
+ return None, None
 
identificador.py CHANGED
@@ -1,5 +1,6 @@
1
  import herramientas
2
  import conceptos_busqueda
 
3
 
4
  def identifica_documento(textos_extraidos_simplificados):
5
  """
@@ -21,8 +22,7 @@ def identifica_documento(textos_extraidos_simplificados):
21
  # Usamos 'getattr' para acceder dinámicamente al atributo correcto
22
  # del objeto 'conceptos_busqueda', como 'conceptos_busqueda.dni'.
23
  conceptos_actuales = getattr(conceptos_busqueda, tipo_documento)
24
- print("Conceptos_Actuales usados: ", conceptos_actuales)
25
-
26
  # Llama a la función de búsqueda para el tipo de documento actual
27
  indice, textos_corregidos = herramientas.buscaIndexMultiplesPalabras(
28
  textos_extraidos_simplificados,
@@ -46,17 +46,26 @@ def identifica_ine(textos_extraidos_simplificados):
46
  #Buscaré los dos campos que tienen SOLO las INE antigüas: localidad y municipio.
47
  #Municipio
48
  conceptos_busqueda = [{'preferida': 'municipio', 'alternativas': ['']}]
 
49
  indice, textos_extraidos_corregidos = herramientas.buscaIndexMultiplesPalabras(textos_extraidos_simplificados, conceptos_busqueda)
 
 
50
  municipio_existe = True if indice is not None else False
51
 
 
 
52
  #Localidad
53
  conceptos_busqueda = [{'preferida': 'localidad', 'alternativas': ['']}]
54
  indice, textos_extraidos_corregidos = herramientas.buscaIndexMultiplesPalabras(textos_extraidos_simplificados, conceptos_busqueda)
55
  localidad_existe = True if indice is not None else False
56
 
 
 
57
  if municipio_existe and localidad_existe:
58
  tipo_ine = 'ine_antes'
59
  else:
60
  tipo_ine = 'ine_actual'
61
-
 
 
62
  return tipo_ine
 
1
  import herramientas
2
  import conceptos_busqueda
3
+ import time
4
 
5
  def identifica_documento(textos_extraidos_simplificados):
6
  """
 
22
  # Usamos 'getattr' para acceder dinámicamente al atributo correcto
23
  # del objeto 'conceptos_busqueda', como 'conceptos_busqueda.dni'.
24
  conceptos_actuales = getattr(conceptos_busqueda, tipo_documento)
25
+
 
26
  # Llama a la función de búsqueda para el tipo de documento actual
27
  indice, textos_corregidos = herramientas.buscaIndexMultiplesPalabras(
28
  textos_extraidos_simplificados,
 
46
  #Buscaré los dos campos que tienen SOLO las INE antigüas: localidad y municipio.
47
  #Municipio
48
  conceptos_busqueda = [{'preferida': 'municipio', 'alternativas': ['']}]
49
+ print("Entrando a busqueda de municipio en buscar multiples palabras: ")
50
  indice, textos_extraidos_corregidos = herramientas.buscaIndexMultiplesPalabras(textos_extraidos_simplificados, conceptos_busqueda)
51
+ print("Salí de la búsqueda...")
52
+
53
  municipio_existe = True if indice is not None else False
54
 
55
+ print("Municipio existe: ", municipio_existe)
56
+
57
  #Localidad
58
  conceptos_busqueda = [{'preferida': 'localidad', 'alternativas': ['']}]
59
  indice, textos_extraidos_corregidos = herramientas.buscaIndexMultiplesPalabras(textos_extraidos_simplificados, conceptos_busqueda)
60
  localidad_existe = True if indice is not None else False
61
 
62
+ print("Localidad existe: ", localidad_existe)
63
+
64
  if municipio_existe and localidad_existe:
65
  tipo_ine = 'ine_antes'
66
  else:
67
  tipo_ine = 'ine_actual'
68
+
69
+ print("INE detectada es: ", tipo_ine)
70
+
71
  return tipo_ine
tools/__pycache__/ine_actual.cpython-311.pyc DELETED
Binary file (544 Bytes)
 
tools/__pycache__/ine_antes.cpython-311.pyc DELETED
Binary file (694 Bytes)
 
tools/ine_actual.py CHANGED
@@ -1,5 +1,9 @@
 
 
1
  def obtener_vigencia(indice, textos_extraidos_libres):
2
 
 
 
3
  #Aquí recibo el índice porque lo que quiero es la posición no el texto.
4
 
5
  print("El índice es:", indice)
 
1
+ import time
2
+
3
  def obtener_vigencia(indice, textos_extraidos_libres):
4
 
5
+ print("Estoy en obtener vigencia ine actual.")
6
+
7
  #Aquí recibo el índice porque lo que quiero es la posición no el texto.
8
 
9
  print("El índice es:", indice)