histlearn commited on
Commit
2553f75
·
verified ·
1 Parent(s): b6b871f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +62 -36
app.py CHANGED
@@ -129,37 +129,64 @@ def extrair_tabelas_pdf(pdf_path):
129
  if len(tables) == 0:
130
  raise ValueError("Nenhuma tabela foi extraída do PDF.")
131
 
132
- # Processar todas as tabelas procurando informações do aluno
133
  info_aluno = {}
 
 
134
  for table in tables:
135
  df_temp = table.df
136
- for i, row in df_temp.iterrows():
137
- # Procurar por variações dos campos
138
- if any(campo in str(row[0]).upper() for campo in ['NOME DO ALUNO:', 'NOME:', 'ALUNO:']):
139
- nome = row[1].strip() if len(row) > 1 else ''
140
- if nome and 'nome' not in info_aluno: # Evitar sobrescrever se já encontrou
141
- info_aluno['nome'] = nome
142
- elif any(campo in str(row[0]).upper() for campo in ['RA:', 'R.A.:', 'REGISTRO ACADÊMICO:']):
143
- ra = row[1].strip() if len(row) > 1 else ''
144
- if ra and 'ra' not in info_aluno: # Evitar sobrescrever se já encontrou
145
- info_aluno['ra'] = ra
146
- elif any(campo in str(row[0]).upper() for campo in ['ESCOLA:', 'UNIDADE:', 'UNIDADE ESCOLAR:']):
147
- escola = row[1].strip() if len(row) > 1 else ''
148
- if escola and 'escola' not in info_aluno:
149
- info_aluno['escola'] = escola
150
- elif any(campo in str(row[0]).upper() for campo in ['TURMA:', 'SÉRIE:', 'ANO/SÉRIE:']):
151
- turma = row[1].strip() if len(row) > 1 else ''
152
- if turma and 'turma' not in info_aluno:
153
- info_aluno['turma'] = turma
154
-
155
- # Encontrar a tabela com as notas
156
- df = None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  for table in tables:
158
  df_temp = table.df
159
- if any('Disciplina' in str(col) for col in df_temp.iloc[0]) or \
160
- any('Bimestre' in str(col) for col in df_temp.iloc[0]):
161
- df = df_temp
162
- df = df.rename(columns={
163
  0: 'Disciplina',
164
  1: 'Nota B1', 2: 'Freq B1', 3: '%Freq B1', 4: 'AC B1',
165
  5: 'Nota B2', 6: 'Freq B2', 7: '%Freq B2', 8: 'AC B2',
@@ -169,23 +196,22 @@ def extrair_tabelas_pdf(pdf_path):
169
  })
170
  break
171
 
172
- if df is None or df.empty:
173
- raise ValueError("A tabela de notas não foi encontrada.")
174
 
175
  # Adicionar informações do aluno ao DataFrame
176
- # Garantir valores padrão se não encontrados
177
- df.attrs['nome'] = info_aluno.get('nome', 'Nome não encontrado')
178
- df.attrs['ra'] = info_aluno.get('ra', 'RA não encontrado')
179
- df.attrs['escola'] = info_aluno.get('escola', 'Escola não encontrada')
180
- df.attrs['turma'] = info_aluno.get('turma', 'Turma não encontrada')
181
 
182
- print("Informações do aluno encontradas:", info_aluno)
183
- return df
184
 
185
  except Exception as e:
186
  print(f"Erro na extração das tabelas: {str(e)}")
187
  raise
188
-
189
  def obter_disciplinas_validas(df):
190
  """Identifica disciplinas válidas no boletim com seus dados."""
191
  colunas_notas = ['Nota B1', 'Nota B2', 'Nota B3', 'Nota B4']
 
129
  if len(tables) == 0:
130
  raise ValueError("Nenhuma tabela foi extraída do PDF.")
131
 
 
132
  info_aluno = {}
133
+
134
+ # Primeira passagem: procurar informações do cabeçalho
135
  for table in tables:
136
  df_temp = table.df
137
+
138
+ # Iterar por todas as linhas procurando as informações
139
+ for i in range(len(df_temp)):
140
+ for j in range(len(df_temp.columns)):
141
+ valor = str(df_temp.iloc[i, j]).strip()
142
+
143
+ # Buscar nome do aluno
144
+ if 'Nome do Aluno:' in valor:
145
+ # Pegar o valor na próxima coluna ou próxima linha
146
+ if j + 1 < len(df_temp.columns):
147
+ nome = str(df_temp.iloc[i, j + 1]).strip()
148
+ elif i + 1 < len(df_temp):
149
+ nome = str(df_temp.iloc[i + 1, j]).strip()
150
+ if nome and nome != 'Nome do Aluno:':
151
+ info_aluno['nome'] = nome
152
+
153
+ # Buscar RA
154
+ elif 'RA:' in valor:
155
+ # Pegar o valor na próxima coluna ou próxima linha
156
+ if j + 1 < len(df_temp.columns):
157
+ ra = str(df_temp.iloc[i, j + 1]).strip()
158
+ elif i + 1 < len(df_temp):
159
+ ra = str(df_temp.iloc[i + 1, j]).strip()
160
+ if ra and ra != 'RA:':
161
+ info_aluno['ra'] = ra
162
+
163
+ # Buscar escola
164
+ elif 'Escola:' in valor:
165
+ # Pegar o valor na próxima coluna ou próxima linha
166
+ if j + 1 < len(df_temp.columns):
167
+ escola = str(df_temp.iloc[i, j + 1]).strip()
168
+ elif i + 1 < len(df_temp):
169
+ escola = str(df_temp.iloc[i + 1, j]).strip()
170
+ if escola and escola != 'Escola:':
171
+ info_aluno['escola'] = escola
172
+
173
+ # Buscar turma
174
+ elif 'Turma:' in valor:
175
+ # Pegar o valor na próxima coluna ou próxima linha
176
+ if j + 1 < len(df_temp.columns):
177
+ turma = str(df_temp.iloc[i, j + 1]).strip()
178
+ elif i + 1 < len(df_temp):
179
+ turma = str(df_temp.iloc[i + 1, j]).strip()
180
+ if turma and turma != 'Turma:':
181
+ info_aluno['turma'] = turma
182
+
183
+ # Segunda passagem: encontrar a tabela de notas
184
+ df_notas = None
185
  for table in tables:
186
  df_temp = table.df
187
+ if 'Disciplina' in str(df_temp.iloc[0,0]):
188
+ df_notas = df_temp
189
+ df_notas = df_notas.rename(columns={
 
190
  0: 'Disciplina',
191
  1: 'Nota B1', 2: 'Freq B1', 3: '%Freq B1', 4: 'AC B1',
192
  5: 'Nota B2', 6: 'Freq B2', 7: '%Freq B2', 8: 'AC B2',
 
196
  })
197
  break
198
 
199
+ if df_notas is None:
200
+ raise ValueError("Tabela de notas não encontrada")
201
 
202
  # Adicionar informações do aluno ao DataFrame
203
+ df_notas.attrs.update(info_aluno)
204
+
205
+ print("\nInformações do aluno encontradas:")
206
+ for campo, valor in info_aluno.items():
207
+ print(f"{campo}: {valor}")
208
 
209
+ return df_notas
 
210
 
211
  except Exception as e:
212
  print(f"Erro na extração das tabelas: {str(e)}")
213
  raise
214
+
215
  def obter_disciplinas_validas(df):
216
  """Identifica disciplinas válidas no boletim com seus dados."""
217
  colunas_notas = ['Nota B1', 'Nota B2', 'Nota B3', 'Nota B4']