Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
# Código completo atualizado
|
2 |
|
3 |
import fitz
|
4 |
import re
|
@@ -87,8 +87,7 @@ exames = {
|
|
87 |
"MG++": r"magn[eé]sio.*?([\d.,]+)\s?mg/dl",
|
88 |
"PCR": r"pcr.*?\bresultado\b\s*([\d]+,[\d]+)",
|
89 |
"K+": r"pot[áa]ssio.*?([\d.,]+)\s?mmol/l",
|
90 |
-
"NA+": r"s[óo]dio.*?([\d.,]+)\s?mmol/l",
|
91 |
-
"PTN": r"prote[íi]na total.*?([\d.,]+)\s?g/dl",
|
92 |
"ALB": r"albumina.*?([\d.,]+)\s?g/dl",
|
93 |
"GLOB": r"globulina.*?([\d.,]+)\s?g/dl",
|
94 |
"RELAÇÃO": r"rela[cç][ãa]o\s+a\/g.*?([\d.,]+)",
|
@@ -133,28 +132,36 @@ def extrair_exames_formatado(pdf_file):
|
|
133 |
if m:
|
134 |
val = m.group(1).replace(',', '.')
|
135 |
break
|
136 |
-
|
|
|
137 |
|
138 |
-
#
|
139 |
-
partes = [f"{r}: {resultados[r]}" for r in ordem]
|
140 |
-
texto_main = " / ".join(partes)
|
141 |
-
|
142 |
-
# Monta o segmento de EAS, se presente
|
143 |
eas_chaves = ["LEUC ESTERASE","LEUCO EAS","HEMA EAS","BACTERIAS"]
|
144 |
-
|
145 |
-
|
146 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
147 |
|
148 |
-
# Gera CSV
|
149 |
-
df = pd.DataFrame(
|
|
|
|
|
|
|
150 |
temp = tempfile.NamedTemporaryFile(delete=False, suffix=".csv")
|
151 |
df.to_csv(temp.name, index=False)
|
152 |
|
153 |
-
return
|
154 |
|
155 |
# Interface Gradio
|
156 |
with gr.Blocks() as demo:
|
157 |
-
gr.Markdown("## 🧪 Extrator Avançado com OCR e EAS")
|
158 |
pdf_file = gr.File(label="📄 PDF de exames", file_types=[".pdf"])
|
159 |
btn = gr.Button("🔍 Extrair Exames")
|
160 |
out_txt = gr.Textbox(label="📋 Exames Classificados", lines=12)
|
|
|
1 |
+
# Código completo atualizado para omitir exames ausentes no PDF
|
2 |
|
3 |
import fitz
|
4 |
import re
|
|
|
87 |
"MG++": r"magn[eé]sio.*?([\d.,]+)\s?mg/dl",
|
88 |
"PCR": r"pcr.*?\bresultado\b\s*([\d]+,[\d]+)",
|
89 |
"K+": r"pot[áa]ssio.*?([\d.,]+)\s?mmol/l",
|
90 |
+
"NA+": r"s[óo]dio.*?([\d.,]+)\s?mmol/l", "PTN": r"prote[íi]na total.*?([\d.,]+)\s?g/dl",
|
|
|
91 |
"ALB": r"albumina.*?([\d.,]+)\s?g/dl",
|
92 |
"GLOB": r"globulina.*?([\d.,]+)\s?g/dl",
|
93 |
"RELAÇÃO": r"rela[cç][ãa]o\s+a\/g.*?([\d.,]+)",
|
|
|
132 |
if m:
|
133 |
val = m.group(1).replace(',', '.')
|
134 |
break
|
135 |
+
if val:
|
136 |
+
resultados[rotulo] = classificar(rotulo, val)
|
137 |
|
138 |
+
# EAS (se presente)
|
|
|
|
|
|
|
|
|
139 |
eas_chaves = ["LEUC ESTERASE","LEUCO EAS","HEMA EAS","BACTERIAS"]
|
140 |
+
partes_eas = [f"{k}: {resultados[k]}" for k in eas_chaves if k in resultados]
|
141 |
+
texto_eas = ""
|
142 |
+
if partes_eas:
|
143 |
+
texto_eas = "EAS: " + " / ".join(partes_eas)
|
144 |
+
|
145 |
+
# Parte principal (omite ausentes)
|
146 |
+
partes_main = [f"{r}: {resultados[r]}" for r in ordem if r in resultados]
|
147 |
+
texto_main = " / ".join(partes_main)
|
148 |
+
|
149 |
+
# Concatena
|
150 |
+
texto_final = " / ".join([t for t in (texto_eas, texto_main) if t])
|
151 |
|
152 |
+
# Gera CSV apenas com presentes
|
153 |
+
df = pd.DataFrame(
|
154 |
+
[(k, resultados[k]) for k in resultados],
|
155 |
+
columns=["Exame","Valor"]
|
156 |
+
)
|
157 |
temp = tempfile.NamedTemporaryFile(delete=False, suffix=".csv")
|
158 |
df.to_csv(temp.name, index=False)
|
159 |
|
160 |
+
return texto_final, temp.name
|
161 |
|
162 |
# Interface Gradio
|
163 |
with gr.Blocks() as demo:
|
164 |
+
gr.Markdown("## 🧪 Extrator Avançado com OCR e EAS (sem ausentes)")
|
165 |
pdf_file = gr.File(label="📄 PDF de exames", file_types=[".pdf"])
|
166 |
btn = gr.Button("🔍 Extrair Exames")
|
167 |
out_txt = gr.Textbox(label="📋 Exames Classificados", lines=12)
|