Moibe commited on
Commit
67b82ae
·
1 Parent(s): 93a5ed3

Vigencia INE antigua lista

Browse files
app.py CHANGED
@@ -45,4 +45,13 @@ async def procesa_documento(image: UploadFile = File(...)):
45
  async def procesa_documento(image: UploadFile = File(...)):
46
  if not image.content_type.startswith("image/"):
47
  return {"error": "El archivo no es una imagen"}
48
- return await funciones.procesa_documento(image)
 
 
 
 
 
 
 
 
 
 
45
  async def procesa_documento(image: UploadFile = File(...)):
46
  if not image.content_type.startswith("image/"):
47
  return {"error": "El archivo no es una imagen"}
48
+ return await funciones.procesa_documento(image)
49
+
50
+ @app.post(
51
+ "/procesa_ine/",
52
+ tags=["Zurich"],
53
+ summary="Documentos México")
54
+ async def procesa_documento(image: UploadFile = File(...)):
55
+ if not image.content_type.startswith("image/"):
56
+ return {"error": "El archivo no es una imagen"}
57
+ return await funciones.procesa_ine(image)
campos/ine_antes.py ADDED
File without changes
conceptos_busqueda.py CHANGED
@@ -10,5 +10,5 @@ pasaporte = [
10
 
11
  ine = [
12
  {'preferida': 'Instituto Nacional Electoral', 'alternativas': ['']},
13
- {'preferida': 'México', 'alternativas': []}
14
  ]
 
10
 
11
  ine = [
12
  {'preferida': 'Instituto Nacional Electoral', 'alternativas': ['']},
13
+ {'preferida': 'MEXICO', 'alternativas': ['']}
14
  ]
documentos.py CHANGED
@@ -1,22 +1,31 @@
 
1
  import obtenCampo
2
 
3
- async def dni(textos_extraidos):
4
- print("Iniciando búsqueda de dni.")
5
- textos_extraidos_simplificados = [texto.lower().replace(" ", "") for texto in textos_extraidos]
6
- print("Textos extraídos simplificados:")
7
- print(textos_extraidos_simplificados)
8
 
9
  #Campos Buscados
10
- nombre, apellido = obtenCampo.Nombre(textos_extraidos, textos_extraidos_simplificados)
11
- identificacion = obtenCampo.Identificacion(textos_extraidos, textos_extraidos_simplificados)
12
- fecha_nacimiento = obtenCampo.Fecha_Nacimiento(textos_extraidos, textos_extraidos_simplificados)
13
- sexo = obtenCampo.Sexo(textos_extraidos, textos_extraidos_simplificados)
14
 
15
  return nombre, apellido, identificacion, fecha_nacimiento, sexo
16
 
17
- async def pasaporte(textos_extraidos):
18
- textos_extraidos_simplificados = [texto.lower().replace(" ", "") for texto in textos_extraidos]
19
  #Campos Buscados
20
- nombre, apellido = obtenCampo.Nombre(textos_extraidos, textos_extraidos_simplificados)
21
- identificacion = obtenCampo.Identificacion(textos_extraidos, textos_extraidos_simplificados)
22
- return nombre, apellido, identificacion
 
 
 
 
 
 
 
 
 
1
+ import time
2
  import obtenCampo
3
 
4
+
5
+ #Funciones para cada documento y sus respectivos campos.
6
+
7
+ #Funciones para DNI Panameño.
8
+ async def dni(textos_extraidos, textos_extraidos_simplificados):
9
 
10
  #Campos Buscados
11
+ nombre, apellido = obtenCampo.nombre(textos_extraidos, textos_extraidos_simplificados)
12
+ identificacion = obtenCampo.identificacion(textos_extraidos, textos_extraidos_simplificados)
13
+ fecha_nacimiento = obtenCampo.fecha_nacimiento(textos_extraidos, textos_extraidos_simplificados)
14
+ sexo = obtenCampo.sexo(textos_extraidos, textos_extraidos_simplificados)
15
 
16
  return nombre, apellido, identificacion, fecha_nacimiento, sexo
17
 
18
+ async def pasaporte(textos_extraidos, textos_extraidos_simplificados):
19
+
20
  #Campos Buscados
21
+ nombre, apellido = obtenCampo.nombre(textos_extraidos, textos_extraidos_simplificados)
22
+ identificacion = obtenCampo.identificacion(textos_extraidos, textos_extraidos_simplificados)
23
+
24
+ return nombre, apellido, identificacion
25
+
26
+ async def ine_antes(textos_extraidos, textos_extraidos_simplificados):
27
+
28
+ #Campos Buscados
29
+ vigencia = obtenCampo.vigencia(textos_extraidos, textos_extraidos_simplificados)
30
+
31
+ return vigencia
funciones.py CHANGED
@@ -1,7 +1,9 @@
 
1
  import documentos
2
  import herramientas
3
  import identificador
4
 
 
5
  async def identifica_documento(image):
6
 
7
  textos_extraidos = await herramientas.procesaImagen(image)
@@ -19,7 +21,7 @@ async def procesa_documento(image):
19
 
20
  if documento == 'dni':
21
  # Llama a la función 'dni' si el documento es un DNI
22
- nombre, apellido, identificacion, fecha_nacimiento, sexo = await documentos.dni(textos_extraidos)
23
  print("Procesado como DNI.")
24
 
25
  return {
@@ -33,7 +35,7 @@ async def procesa_documento(image):
33
 
34
  elif documento == 'pasaporte':
35
  # Llama a la función 'pasaporte' si el documento es un pasaporte
36
- #nombre, apellido, identificacion, fecha_nacimiento, sexo = await documentos.pasaporte(textos_extraidos)
37
  nombre, apellido, identificacion, pasaporte, fecha_nacimiento, sexo, fecha_expedicion, fecha_vencimiento = 'pasaporte', 'pasaporte', 'pasaporte', 'pasaporte', 'pasaporte', 'pasaporte', 'pasaporte', 'pasaporte'
38
  print("Procesado como Pasaporte.")
39
 
@@ -56,4 +58,23 @@ async def procesa_documento(image):
56
  #nombre, apellido, identificacion, fecha_nacimiento, sexo = None, None, None, None, None
57
  return {
58
  "error": "El documento no es un dni o pasaporte válido o requiere ser más legible.",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  }
 
1
+ import time
2
  import documentos
3
  import herramientas
4
  import identificador
5
 
6
+
7
  async def identifica_documento(image):
8
 
9
  textos_extraidos = await herramientas.procesaImagen(image)
 
21
 
22
  if documento == 'dni':
23
  # Llama a la función 'dni' si el documento es un DNI
24
+ nombre, apellido, identificacion, fecha_nacimiento, sexo = await documentos.dni(textos_extraidos, textos_extraidos_simplificados)
25
  print("Procesado como DNI.")
26
 
27
  return {
 
35
 
36
  elif documento == 'pasaporte':
37
  # Llama a la función 'pasaporte' si el documento es un pasaporte
38
+ #nombre, apellido, identificacion, fecha_nacimiento, sexo = await documentos.pasaporte(textos_extraidos, textos_extraidos_simplificados)
39
  nombre, apellido, identificacion, pasaporte, fecha_nacimiento, sexo, fecha_expedicion, fecha_vencimiento = 'pasaporte', 'pasaporte', 'pasaporte', 'pasaporte', 'pasaporte', 'pasaporte', 'pasaporte', 'pasaporte'
40
  print("Procesado como Pasaporte.")
41
 
 
58
  #nombre, apellido, identificacion, fecha_nacimiento, sexo = None, None, None, None, None
59
  return {
60
  "error": "El documento no es un dni o pasaporte válido o requiere ser más legible.",
61
+ }
62
+
63
+ async def procesa_ine(image):
64
+
65
+ textos_extraidos = await herramientas.procesaImagen(image)
66
+ textos_extraidos_simplificados = herramientas.simplificaTextos(textos_extraidos)
67
+ #Identifico documento aún así como verificador sobre lo que sube el usuario.
68
+ documento = identificador.identifica_documento(textos_extraidos_simplificados)
69
+ print("Documento: ", documento)
70
+
71
+ if documento == 'ine':
72
+ tipo_ine = identificador.identifica_ine(textos_extraidos_simplificados)
73
+ print("Tipo ine es : ", tipo_ine)
74
+ if tipo_ine == 'ine_actual':
75
+ vigencia = await documentos.ine_actual(textos_extraidos, textos_extraidos_simplificados)
76
+ else:
77
+ vigencia = await documentos.ine_antes(textos_extraidos, textos_extraidos_simplificados)
78
+ return {
79
+ "vigencia": vigencia,
80
  }
herramientas.py CHANGED
@@ -1,7 +1,25 @@
1
- import tempfile
2
  import time
 
3
  from gradio_client import Client, handle_file
4
- import re
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
 
6
  async def imageToTemp(image):
7
 
@@ -17,7 +35,6 @@ async def imageToTemp(image):
17
  except Exception as e:
18
  print(f"Error al procesar la imagen: {e}")
19
  return {"error": "Error al procesar la imagen"}
20
-
21
 
22
  def listaTextosExtraidos(dict_recibido):
23
 
@@ -101,7 +118,7 @@ def buscaIndexMultiplesPalabras(arreglo_textos, conceptos_requeridos):
101
 
102
  if not encontrado_en_esta_linea:
103
  es_coincidencia_completa = False
104
- print(f"Fallo en línea {i}: No se encontró el concepto '{concepto['preferida']}' ni sus alternativas.")
105
  break # Si falta un concepto, pasamos a la siguiente línea del arreglo
106
 
107
  # Paso 3: Si se encontró una coincidencia completa, corregimos la línea y la retornamos
@@ -133,73 +150,3 @@ def buscaIndexMultiplesPalabras(arreglo_textos, conceptos_requeridos):
133
  print("Ninguna línea contiene todas las palabras requeridas.")
134
  return None, None
135
 
136
- ########################################################################
137
- def buscarPatronCedula(lista_textos):
138
- for i, texto in enumerate(lista_textos):
139
- if texto and texto[0].isdigit() and '-' in texto:
140
- return i
141
- return 'error'
142
-
143
- async def procesaImagen(image):
144
-
145
- try:
146
- temp_image = await imageToTemp(image)
147
- client = Client("BuzzwordMx/ai_ocr")
148
- dict_recibido = client.predict(
149
- img=handle_file(temp_image),
150
- lang="en",
151
- api_name="/predict"
152
- )
153
-
154
- #Aquí es donde personalizo el proceso:
155
- textos_extraidos = listaTextosExtraidos(dict_recibido)
156
- return textos_extraidos
157
- except Exception as e:
158
- print(f"Error al procesar el archivo: {e}")
159
- return 'Error'
160
-
161
-
162
- def obtener_fecha(texto):
163
- # El patrón busca:
164
- # - "FECHADENACIMIENTO" (insensible a mayúsculas/minúsculas)
165
- # - Seguido opcionalmente de CERO o MÁS caracteres que NO SEAN UN DÍGITO (lo que inicia la fecha).
166
- # Esto cubrirá ':', '.', espacios, o cualquier otro carácter de separación.
167
- # - Captura el patrón de fecha: \d{1,2}-[A-Za-z0-9]{3}-\d{4}
168
- patron = r"FECHADENACIMIENTO[^\d]*(\d{1,2}-[A-Za-z0-9]{3}-\d{4})"
169
-
170
- match = re.search(patron, texto, re.IGNORECASE)
171
-
172
- fecha_encontrada = None
173
- if match:
174
- fecha_encontrada = match.group(1)
175
-
176
- if fecha_encontrada:
177
- partes_fecha = fecha_encontrada.split('-')
178
- if len(partes_fecha) == 3:
179
- dia = partes_fecha[0]
180
- mes = partes_fecha[1].lower() # Convierte el mes a minúsculas
181
- año = partes_fecha[2]
182
- return f"{dia}-{mes}-{año}"
183
- else:
184
- # Esto se ejecutaría si el formato de la fecha extraída no es el esperado (ej. 2 partes)
185
- return fecha_encontrada
186
-
187
- return None # Si no se encontró el patrón de fecha
188
-
189
- def obtener_sexo(texto):
190
- # El patrón ahora busca "Sexo" O "Seno" (insensible a mayúsculas/minúsculas)
191
- # Seguido opcionalmente de un ":"
192
- # Seguido opcionalmente de espacios en blanco
193
- # Captura la siguiente letra
194
- patron = r"(Sexo|Seno):?\s*([A-Za-z])"
195
-
196
- # re.search busca la primera ocurrencia del patrón en el texto
197
- # re.IGNORECASE hace que la búsqueda sea insensible a mayúsculas/minúsculas para "Sexo" y "Seno"
198
- match = re.search(patron, texto, re.IGNORECASE)
199
-
200
- if match:
201
- # match.group(2) devuelve lo que se capturó en el SEGUNDO grupo de paréntesis,
202
- # que es la letra del sexo/seno. match.group(1) sería "Sexo" o "Seno".
203
- return match.group(2)
204
- else:
205
- return None
 
1
+ import re
2
  import time
3
+ import tempfile
4
  from gradio_client import Client, handle_file
5
+
6
+ async def procesaImagen(image):
7
+
8
+ try:
9
+ temp_image = await imageToTemp(image)
10
+ client = Client("BuzzwordMx/ai_ocr")
11
+ dict_recibido = client.predict(
12
+ img=handle_file(temp_image),
13
+ lang="en",
14
+ api_name="/predict"
15
+ )
16
+
17
+ #Aquí es donde personalizo el proceso:
18
+ textos_extraidos = listaTextosExtraidos(dict_recibido)
19
+ return textos_extraidos
20
+ except Exception as e:
21
+ print(f"Error al procesar el archivo: {e}")
22
+ return 'Error'
23
 
24
  async def imageToTemp(image):
25
 
 
35
  except Exception as e:
36
  print(f"Error al procesar la imagen: {e}")
37
  return {"error": "Error al procesar la imagen"}
 
38
 
39
  def listaTextosExtraidos(dict_recibido):
40
 
 
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
 
150
  print("Ninguna línea contiene todas las palabras requeridas.")
151
  return None, None
152
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
herramientas_campos.py ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import re
2
+
3
+ #DOCUMENTO:DNI CAMPO:IDENTIFICACIÓN
4
+ def buscarPatronCedula(lista_textos):
5
+ for i, texto in enumerate(lista_textos):
6
+ if texto and texto[0].isdigit() and '-' in texto:
7
+ return i
8
+ return 'error'
9
+
10
+
11
+ #DOCUMENTO:DNI CAMPO:FECHA DE NACIMIENTO
12
+ def obtener_fecha(texto):
13
+ # El patrón busca:
14
+ # - "FECHADENACIMIENTO" (insensible a mayúsculas/minúsculas)
15
+ # - Seguido opcionalmente de CERO o MÁS caracteres que NO SEAN UN DÍGITO (lo que inicia la fecha).
16
+ # Esto cubrirá ':', '.', espacios, o cualquier otro carácter de separación.
17
+ # - Captura el patrón de fecha: \d{1,2}-[A-Za-z0-9]{3}-\d{4}
18
+ patron = r"FECHADENACIMIENTO[^\d]*(\d{1,2}-[A-Za-z0-9]{3}-\d{4})"
19
+
20
+ match = re.search(patron, texto, re.IGNORECASE)
21
+
22
+ fecha_encontrada = None
23
+ if match:
24
+ fecha_encontrada = match.group(1)
25
+
26
+ if fecha_encontrada:
27
+ partes_fecha = fecha_encontrada.split('-')
28
+ if len(partes_fecha) == 3:
29
+ dia = partes_fecha[0]
30
+ mes = partes_fecha[1].lower() # Convierte el mes a minúsculas
31
+ año = partes_fecha[2]
32
+ return f"{dia}-{mes}-{año}"
33
+ else:
34
+ # Esto se ejecutaría si el formato de la fecha extraída no es el esperado (ej. 2 partes)
35
+ return fecha_encontrada
36
+
37
+ return None # Si no se encontró el patrón de fecha
38
+
39
+ #DOCUMENTO:DNI CAMPO:SEXO
40
+ def obtener_genero(texto):
41
+ # El patrón ahora busca "Sexo" O "Seno" (insensible a mayúsculas/minúsculas)
42
+ # Seguido opcionalmente de un ":"
43
+ # Seguido opcionalmente de espacios en blanco
44
+ # Captura la siguiente letra
45
+ patron = r"(Sexo|Seno):?\s*([A-Za-z])"
46
+
47
+ # re.search busca la primera ocurrencia del patrón en el texto
48
+ # re.IGNORECASE hace que la búsqueda sea insensible a mayúsculas/minúsculas para "Sexo" y "Seno"
49
+ match = re.search(patron, texto, re.IGNORECASE)
50
+
51
+ if match:
52
+ # match.group(2) devuelve lo que se capturó en el SEGUNDO grupo de paréntesis,
53
+ # que es la letra del sexo/seno. match.group(1) sería "Sexo" o "Seno".
54
+ return match.group(2)
55
+ else:
56
+ return None
57
+
58
+
59
+ #DOCUMENTO:INE CAMPO:VIGENCIA
60
+ def obtener_vigencia(texto):
61
+ # La expresión regular busca:
62
+ # (\d{4}) -> Un grupo que captura 4 dígitos (el número de la izquierda)
63
+ # vigencia -> La palabra literal "vigencia"
64
+ # (\d{4}) -> Otro grupo que captura 4 dígitos (el número de la DERECHA)
65
+ # El 're.search' devuelve un objeto 'match' si encuentra el patrón
66
+ match = re.search(r'\d+vigencia(\d+)', texto)
67
+
68
+ if match:
69
+ # Si se encuentra una coincidencia, match.group(1) contiene el primer grupo capturado.
70
+ # En este caso, el número a la derecha.
71
+ numero_derecha = match.group(1)
72
+ print(f"El número a la derecha es: {numero_derecha}")
73
+ return numero_derecha
74
+ else:
75
+ print("No se encontró el patrón en el texto.")
76
+ return None
identificador.py CHANGED
@@ -12,13 +12,16 @@ def identifica_documento(textos_extraidos_simplificados):
12
  str: El nombre del primer documento encontrado ('dni', 'pasaporte', etc.),
13
  o None si ninguno de los documentos fue identificado.
14
  """
15
-
16
  documentos = ['ine', 'dni', 'pasaporte']
17
 
18
  for tipo_documento in documentos:
 
 
19
  # Usamos 'getattr' para acceder dinámicamente al atributo correcto
20
  # del objeto 'conceptos_busqueda', como 'conceptos_busqueda.dni'.
21
  conceptos_actuales = getattr(conceptos_busqueda, tipo_documento)
 
22
 
23
  # Llama a la función de búsqueda para el tipo de documento actual
24
  indice, textos_corregidos = herramientas.buscaIndexMultiplesPalabras(
@@ -36,4 +39,24 @@ def identifica_documento(textos_extraidos_simplificados):
36
  return tipo_documento
37
 
38
  # Si el bucle termina sin encontrar ningún documento, retornamos None
39
- return None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  str: El nombre del primer documento encontrado ('dni', 'pasaporte', etc.),
13
  o None si ninguno de los documentos fue identificado.
14
  """
15
+ print("Estoy en identifica documento...")
16
  documentos = ['ine', 'dni', 'pasaporte']
17
 
18
  for tipo_documento in documentos:
19
+ print("Revisando tipo de documento: ", tipo_documento)
20
+
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(
 
39
  return tipo_documento
40
 
41
  # Si el bucle termina sin encontrar ningún documento, retornamos None
42
+ return None
43
+
44
+ def identifica_ine(textos_extraidos_simplificados):
45
+ #Identifica si una INE es nueva o antigüa edición.
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
obtenCampo.py CHANGED
@@ -1,19 +1,19 @@
1
  import herramientas
2
-
3
 
4
  #Campos para DNI.
5
- def Nombre(textos_extraidos, textos_extraidos_simplificados):
6
  indice = herramientas.buscaIndexPalabra(textos_extraidos_simplificados, 'usual')
7
  nombre = textos_extraidos[indice-2]
8
  apellido = textos_extraidos[indice-1]
9
  return nombre, apellido
10
 
11
- def Identificacion(textos_extraidos, textos_extraidos_simplificados):
12
- indice = herramientas.buscarPatronCedula(textos_extraidos_simplificados)
13
  identificacion = textos_extraidos[indice]
14
  return identificacion
15
 
16
- def Fecha_Nacimiento(textos_extraidos, textos_extraidos_limpios):
17
 
18
  conceptos_busqueda = [
19
  {'preferida': 'fecha', 'alternativas': []},
@@ -26,10 +26,10 @@ def Fecha_Nacimiento(textos_extraidos, textos_extraidos_limpios):
26
  print("El índice de la fecha de nacimiento es: ", indice)
27
  texto_fecha_nacimiento = textos_extraidos_limpios[indice] #En ésta ocasión estoy usando el texto limpio para que el patrón lo identifique más fácilmente.
28
  print("Y su correspondiente texto es: " , texto_fecha_nacimiento)
29
- fecha_nacimiento = herramientas.obtener_fecha(texto_fecha_nacimiento)
30
  return fecha_nacimiento
31
 
32
- def Sexo(textos_extraidos, textos_extraidos_limpios):
33
 
34
  conceptos_busqueda = [
35
  {'preferida': 'sexo', 'alternativas': ['sex', 'seno', 'sen']},
@@ -44,5 +44,25 @@ def Sexo(textos_extraidos, textos_extraidos_limpios):
44
  texto_genero = textos_extraidos_limpios[indice]
45
  print("Y su correspondiente texto es: " , texto_genero)
46
 
47
- sexo = herramientas.obtener_sexo(texto_genero)
48
- return sexo
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import herramientas
2
+ import herramientas_campos
3
 
4
  #Campos para DNI.
5
+ def nombre(textos_extraidos, textos_extraidos_simplificados):
6
  indice = herramientas.buscaIndexPalabra(textos_extraidos_simplificados, 'usual')
7
  nombre = textos_extraidos[indice-2]
8
  apellido = textos_extraidos[indice-1]
9
  return nombre, apellido
10
 
11
+ def identificacion(textos_extraidos, textos_extraidos_simplificados):
12
+ indice = herramientas_campos.buscarPatronCedula(textos_extraidos_simplificados)
13
  identificacion = textos_extraidos[indice]
14
  return identificacion
15
 
16
+ def fecha_nacimiento(textos_extraidos, textos_extraidos_limpios):
17
 
18
  conceptos_busqueda = [
19
  {'preferida': 'fecha', 'alternativas': []},
 
26
  print("El índice de la fecha de nacimiento es: ", indice)
27
  texto_fecha_nacimiento = textos_extraidos_limpios[indice] #En ésta ocasión estoy usando el texto limpio para que el patrón lo identifique más fácilmente.
28
  print("Y su correspondiente texto es: " , texto_fecha_nacimiento)
29
+ fecha_nacimiento = herramientas_campos.obtener_fecha(texto_fecha_nacimiento)
30
  return fecha_nacimiento
31
 
32
+ def sexo(textos_extraidos, textos_extraidos_limpios):
33
 
34
  conceptos_busqueda = [
35
  {'preferida': 'sexo', 'alternativas': ['sex', 'seno', 'sen']},
 
44
  texto_genero = textos_extraidos_limpios[indice]
45
  print("Y su correspondiente texto es: " , texto_genero)
46
 
47
+ sexo = herramientas_campos.obtener_genero(texto_genero)
48
+ return sexo
49
+
50
+ #Campos para INE
51
+
52
+ def vigencia(textos_extraidos, textos_extraidos_limpios):
53
+
54
+ conceptos_busqueda = [
55
+ {'preferida': 'vigencia', 'alternativas': ['igencia']},
56
+ ]
57
+
58
+ indice, textos_extraidos_corregidos = herramientas.buscaIndexMultiplesPalabras(textos_extraidos_limpios, conceptos_busqueda)
59
+
60
+ textos_extraidos_limpios = textos_extraidos_corregidos
61
+ print("El índice de genero es: ", indice)
62
+
63
+ texto_genero = textos_extraidos_limpios[indice]
64
+ print("Y su correspondiente texto es: " , texto_genero)
65
+
66
+ vigencia = herramientas_campos.obtener_vigencia(texto_genero)
67
+
68
+ return vigencia