Vigencia INE antigua lista
Browse files- app.py +10 -1
- campos/ine_antes.py +0 -0
- conceptos_busqueda.py +1 -1
- documentos.py +23 -14
- funciones.py +23 -2
- herramientas.py +21 -74
- herramientas_campos.py +76 -0
- identificador.py +25 -2
- obtenCampo.py +29 -9
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': '
|
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 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
|
9 |
#Campos Buscados
|
10 |
-
nombre, apellido = obtenCampo.
|
11 |
-
identificacion = obtenCampo.
|
12 |
-
fecha_nacimiento = obtenCampo.
|
13 |
-
sexo = obtenCampo.
|
14 |
|
15 |
return nombre, apellido, identificacion, fecha_nacimiento, sexo
|
16 |
|
17 |
-
async def pasaporte(textos_extraidos):
|
18 |
-
|
19 |
#Campos Buscados
|
20 |
-
nombre, apellido = obtenCampo.
|
21 |
-
identificacion = obtenCampo.
|
22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
2 |
import time
|
|
|
3 |
from gradio_client import Client, handle_file
|
4 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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"
|
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
|
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
|
12 |
-
indice =
|
13 |
identificacion = textos_extraidos[indice]
|
14 |
return identificacion
|
15 |
|
16 |
-
def
|
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 =
|
30 |
return fecha_nacimiento
|
31 |
|
32 |
-
def
|
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 =
|
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
|