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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -53
app.py CHANGED
@@ -123,6 +123,7 @@ def calcular_frequencia_media(frequencias):
123
  def extrair_tabelas_pdf(pdf_path):
124
  """Extrai tabelas do PDF e retorna um DataFrame processado."""
125
  try:
 
126
  tables = camelot.read_pdf(pdf_path, pages='all', flavor='lattice')
127
  print(f"Tabelas extraídas: {len(tables)}")
128
 
@@ -131,61 +132,51 @@ def extrair_tabelas_pdf(pdf_path):
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',
@@ -194,7 +185,6 @@ def extrair_tabelas_pdf(pdf_path):
194
  13: 'Nota B4', 14: 'Freq B4', 15: '%Freq B4', 16: 'AC B4',
195
  17: 'CF', 18: 'Nota Final', 19: 'Freq Final', 20: 'AC Final'
196
  })
197
- break
198
 
199
  if df_notas is None:
200
  raise ValueError("Tabela de notas não encontrada")
@@ -202,10 +192,15 @@ def extrair_tabelas_pdf(pdf_path):
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:
 
123
  def extrair_tabelas_pdf(pdf_path):
124
  """Extrai tabelas do PDF e retorna um DataFrame processado."""
125
  try:
126
+ # Extrair todas as tabelas
127
  tables = camelot.read_pdf(pdf_path, pages='all', flavor='lattice')
128
  print(f"Tabelas extraídas: {len(tables)}")
129
 
 
132
 
133
  info_aluno = {}
134
 
135
+ # Primeira tabela deve conter as informações do aluno
136
+ primeira_tabela = tables[0].df
137
+
138
+ # Iterar por cada linha da primeira tabela
139
+ for i in range(len(primeira_tabela)):
140
+ linha_atual = primeira_tabela.iloc[i].astype(str)
141
+ linha_seguinte = primeira_tabela.iloc[i + 1].astype(str) if i + 1 < len(primeira_tabela) else None
142
 
143
+ # Procurar cada informação específica
144
+ for col in range(len(linha_atual)):
145
+ valor = str(linha_atual[col]).strip()
146
+
147
+ if "Nome do Aluno:" in valor and linha_seguinte is not None:
148
+ nome = str(linha_seguinte[col]).strip()
149
+ if nome and nome != "Nome do Aluno:":
150
+ info_aluno['nome'] = nome
151
+ print(f"Nome encontrado: {nome}")
152
+
153
+ elif "RA:" in valor and linha_seguinte is not None:
154
+ ra = str(linha_seguinte[col]).strip()
155
+ if ra and ra != "RA:":
156
+ info_aluno['ra'] = ra
157
+ print(f"RA encontrado: {ra}")
158
+
159
+ elif "Escola:" in valor and linha_seguinte is not None:
160
+ escola = str(linha_seguinte[col]).strip()
161
+ if escola and escola != "Escola:":
162
+ info_aluno['escola'] = escola
163
+ print(f"Escola encontrada: {escola}")
164
+
165
+ elif "Turma:" in valor and linha_seguinte is not None:
166
+ turma = str(linha_seguinte[col]).strip()
167
+ if turma and turma != "Turma:":
168
+ info_aluno['turma'] = turma
169
+ print(f"Turma encontrada: {turma}")
170
+
171
+ # Encontrar a tabela de notas (geralmente a maior tabela)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
  df_notas = None
173
+ maior_tabela = 0
174
+
175
+ for idx, table in enumerate(tables):
176
  df_temp = table.df
177
+ if len(df_temp) > maior_tabela and 'Disciplina' in str(df_temp.iloc[0,0]):
178
+ maior_tabela = len(df_temp)
179
+ df_notas = df_temp.copy()
180
  df_notas = df_notas.rename(columns={
181
  0: 'Disciplina',
182
  1: 'Nota B1', 2: 'Freq B1', 3: '%Freq B1', 4: 'AC B1',
 
185
  13: 'Nota B4', 14: 'Freq B4', 15: '%Freq B4', 16: 'AC B4',
186
  17: 'CF', 18: 'Nota Final', 19: 'Freq Final', 20: 'AC Final'
187
  })
 
188
 
189
  if df_notas is None:
190
  raise ValueError("Tabela de notas não encontrada")
 
192
  # Adicionar informações do aluno ao DataFrame
193
  df_notas.attrs.update(info_aluno)
194
 
195
+ # Debug: mostrar todas as informações encontradas
196
  print("\nInformações do aluno encontradas:")
197
  for campo, valor in info_aluno.items():
198
  print(f"{campo}: {valor}")
199
 
200
+ # Debug: mostrar primeira tabela para verificação
201
+ print("\nPrimeira tabela (para debug):")
202
+ print(primeira_tabela)
203
+
204
  return df_notas
205
 
206
  except Exception as e: