Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
157 |
for table in tables:
|
158 |
df_temp = table.df
|
159 |
-
if
|
160 |
-
|
161 |
-
|
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
|
173 |
-
raise ValueError("
|
174 |
|
175 |
# Adicionar informações do aluno ao DataFrame
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
|
182 |
-
|
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']
|