Moibe commited on
Commit
2e0d094
·
1 Parent(s): 5b91cf1

Identificador General de Documentos

Browse files
Files changed (4) hide show
  1. conceptos_busqueda.py +14 -0
  2. funciones.py +7 -6
  3. herramientas.py +11 -36
  4. identificador.py +39 -0
conceptos_busqueda.py ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ dni = [
2
+ {'preferida': 'nombre', 'alternativas': ['noaigre']},
3
+ {'preferida': 'usual', 'alternativas': []}
4
+ ]
5
+
6
+ pasaporte = [
7
+ {'preferida': 'pasaporte', 'alternativas': ['passport']},
8
+ #{'preferida': 'identidad', 'alternativas': []}
9
+ ]
10
+
11
+ ine = [
12
+ {'preferida': 'Instituto Nacional Electoral', 'alternativas': ['']},
13
+ #{'preferida': 'identidad', 'alternativas': []}
14
+ ]
funciones.py CHANGED
@@ -1,17 +1,18 @@
1
- import herramientas
2
  import documentos
3
- import time
 
4
 
5
  async def procesa_documento(image):
6
 
 
7
  textos_extraidos = await herramientas.procesaImagen(image)
8
- print("El tipo regresado por procesa imagen es: ", type(textos_extraidos))
9
- time.sleep(1)
10
  print("Textos extraídos: ")
11
  print(textos_extraidos)
12
 
13
- documento = herramientas.define_documento(textos_extraidos)
14
- print("El documento fue: ", documento)
 
 
15
 
16
  if documento == 'dni':
17
  # Llama a la función 'dni' si el documento es un DNI
 
 
1
  import documentos
2
+ import herramientas
3
+ import identificador
4
 
5
  async def procesa_documento(image):
6
 
7
+ print("Procesando imagen...")
8
  textos_extraidos = await herramientas.procesaImagen(image)
 
 
9
  print("Textos extraídos: ")
10
  print(textos_extraidos)
11
 
12
+ #Simplifica los textos extraidos:
13
+ textos_extraidos_simplificados = herramientas.simplificaTextos(textos_extraidos)
14
+ documento = identificador.identifica_documento(textos_extraidos_simplificados)
15
+ print("El documento es: ", documento)
16
 
17
  if documento == 'dni':
18
  # Llama a la función 'dni' si el documento es un DNI
herramientas.py CHANGED
@@ -32,6 +32,12 @@ def listaTextosExtraidos(dict_recibido):
32
  textos_extraidos.append(texto)
33
  return textos_extraidos
34
 
 
 
 
 
 
 
35
  #Herramientas para DNI Panamá.
36
 
37
  def buscaIndexPalabra(arreglo, palabra):
@@ -41,7 +47,7 @@ def buscaIndexPalabra(arreglo, palabra):
41
  return i
42
  return None # Cambiado de 'error' a None
43
 
44
- def buscaIndexMultiplesPalabras_Corregida(arreglo, conceptos_requeridos):
45
  """
46
  Busca el índice de la primera línea que contiene todas las palabras requeridas (o sus alternativas)
47
  y devuelve la línea con las alternativas corregidas a su forma preferida.
@@ -71,7 +77,7 @@ def buscaIndexMultiplesPalabras_Corregida(arreglo, conceptos_requeridos):
71
  'alternativas': alternativas # Solo las alternativas para saber cuáles corregir
72
  })
73
 
74
- for i, texto_linea in enumerate(arreglo):
75
  texto_linea_lower = texto_linea.lower()
76
 
77
  # Variables para seguir el rastro de la línea actual
@@ -120,8 +126,8 @@ def buscaIndexMultiplesPalabras_Corregida(arreglo, conceptos_requeridos):
120
  print(f"Línea corregida: '{linea_corregida}'")
121
  # Ahora corregimos la línea original usando la información de las palabras encontradas
122
 
123
- arreglo[i] = linea_corregida
124
- return i, arreglo
125
 
126
  print(f"\n--- Búsqueda finalizada ---")
127
  print("Ninguna línea contiene todas las palabras requeridas.")
@@ -196,35 +202,4 @@ def obtener_sexo(texto):
196
  # que es la letra del sexo/seno. match.group(1) sería "Sexo" o "Seno".
197
  return match.group(2)
198
  else:
199
- return None
200
-
201
- def define_documento(textos_extraidos):
202
-
203
- #Definiré si el documento subido es un pasaporte o un dni.
204
- textos_extraidos_simplificados = [texto.lower().replace(" ", "") for texto in textos_extraidos]
205
-
206
- #Busqueda de DNI
207
- conceptos_busqueda_dni = [
208
- {'preferida': 'nombre', 'alternativas': ['noaigre']},
209
- {'preferida': 'usual', 'alternativas': []}
210
- ]
211
-
212
- indice, textos_extraidos_corregidos = buscaIndexMultiplesPalabras_Corregida(textos_extraidos_simplificados, conceptos_busqueda_dni)
213
- if indice is not None:
214
- print("Si es dni...")
215
- return 'dni'
216
- else:
217
- #Revisar si es pasaporte.
218
- #Busqueda de DNI
219
- conceptos_busqueda_pasaporte = [
220
- {'preferida': 'pasaporte', 'alternativas': ['passport']},
221
- #{'preferida': 'identidad', 'alternativas': []}
222
- ]
223
- indice, textos_extraidos_corregidos = buscaIndexMultiplesPalabras_Corregida(textos_extraidos_simplificados, conceptos_busqueda_pasaporte)
224
-
225
- if indice is not None:
226
- print("Si es pasaporte...")
227
- return 'pasaporte'
228
- else:
229
- print("No es pasaporte ni dni.")
230
- return None
 
32
  textos_extraidos.append(texto)
33
  return textos_extraidos
34
 
35
+ def simplificaTextos(textos_extraidos):
36
+ textos_extraidos_simplificados = [texto.lower().replace(" ", "") for texto in textos_extraidos]
37
+ print("Textos extraídos simplificados:")
38
+ print(textos_extraidos_simplificados)
39
+ return textos_extraidos_simplificados
40
+
41
  #Herramientas para DNI Panamá.
42
 
43
  def buscaIndexPalabra(arreglo, palabra):
 
47
  return i
48
  return None # Cambiado de 'error' a None
49
 
50
+ def buscaIndexMultiplesPalabras_Corregida(arreglo_textos, conceptos_requeridos):
51
  """
52
  Busca el índice de la primera línea que contiene todas las palabras requeridas (o sus alternativas)
53
  y devuelve la línea con las alternativas corregidas a su forma preferida.
 
77
  'alternativas': alternativas # Solo las alternativas para saber cuáles corregir
78
  })
79
 
80
+ for i, texto_linea in enumerate(arreglo_textos):
81
  texto_linea_lower = texto_linea.lower()
82
 
83
  # Variables para seguir el rastro de la línea actual
 
126
  print(f"Línea corregida: '{linea_corregida}'")
127
  # Ahora corregimos la línea original usando la información de las palabras encontradas
128
 
129
+ arreglo_textos[i] = linea_corregida
130
+ return i, arreglo_textos
131
 
132
  print(f"\n--- Búsqueda finalizada ---")
133
  print("Ninguna línea contiene todas las palabras requeridas.")
 
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
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
identificador.py ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import herramientas
2
+ import conceptos_busqueda
3
+
4
+ def identifica_documento(textos_extraidos_simplificados):
5
+ """
6
+ Busca el tipo de documento en el texto, probando con una lista de documentos.
7
+
8
+ Args:
9
+ textos_extraidos_simplificados (list): Lista de strings con el texto a analizar.
10
+
11
+ Returns:
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_Corregida(
25
+ textos_extraidos_simplificados,
26
+ conceptos_actuales
27
+ )
28
+
29
+ # Si la búsqueda encuentra un resultado, salimos inmediatamente y retornamos
30
+ # el nombre del documento.
31
+ if indice is not None:
32
+ # Puedes retornar el tipo_documento y los textos corregidos
33
+ # return tipo_documento, textos_corregidos
34
+
35
+ # O simplemente el tipo de documento, como en tu ejemplo
36
+ return tipo_documento
37
+
38
+ # Si el bucle termina sin encontrar ningún documento, retornamos None
39
+ return None