GABRIELSZK commited on
Commit
0f3685a
·
verified ·
1 Parent(s): d354e3f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -8
app.py CHANGED
@@ -1,3 +1,5 @@
 
 
1
  import fitz
2
  import re
3
  import gradio as gr
@@ -56,7 +58,7 @@ def extrair_texto_pdf(pdf_file):
56
  texto_ocr = re.sub(r'\s+', ' ', texto_ocr)
57
  return texto_fitz, texto_ocr
58
 
59
- # Padrões regex para extração de cada exame
60
  exames = {
61
  "LEUCO": r"leuc[óo]citos.*?([\d.,]+)\s?(?:10\^3)?/u?l",
62
  "B": r"bas[óo]filos.*?([\d.,]+)\s?%",
@@ -99,10 +101,15 @@ exames = {
99
  "LAC": r"lactato.*?([\d.,]+)\s?mmol/l",
100
  "CKMB": r"ck[- ]?mb.*?([\d.,]+)\s?u/l",
101
  "CPK": r"cpk.*?\bresultado\b\s*([\d.,]+)",
102
- "TROPO": r"troponina.*?([<>]?[\d.,]+)\s?ng/ml"
 
 
 
 
 
103
  }
104
 
105
- # Ordem de saída conforme especificado
106
  ordem = [
107
  "LEUCO","B","SS","EOS","LINF","MONO",
108
  "HB","HT","PLT","AMIL","ÁC UR","BT","BD","BI",
@@ -113,7 +120,6 @@ ordem = [
113
  "CKMB","CPK","TROPO"
114
  ]
115
 
116
- # Função principal de extração e formatação
117
  def extrair_exames_formatado(pdf_file):
118
  if not pdf_file:
119
  return "Nenhum arquivo enviado.", None
@@ -128,16 +134,27 @@ def extrair_exames_formatado(pdf_file):
128
  val = m.group(1).replace(',', '.')
129
  break
130
  resultados[rotulo] = classificar(rotulo, val) if val else "—"
131
- partes = [f"{r} {resultados[r]}" for r in ordem]
132
- texto_final = " / ".join(partes)
 
 
 
 
 
 
 
 
 
 
133
  df = pd.DataFrame(list(resultados.items()), columns=["Exame","Valor"])
134
  temp = tempfile.NamedTemporaryFile(delete=False, suffix=".csv")
135
  df.to_csv(temp.name, index=False)
136
- return texto_final, temp.name
 
137
 
138
  # Interface Gradio
139
  with gr.Blocks() as demo:
140
- gr.Markdown("## 🧪 Extrator Avançado com OCR - Versão Corrigida com D-Dímero")
141
  pdf_file = gr.File(label="📄 PDF de exames", file_types=[".pdf"])
142
  btn = gr.Button("🔍 Extrair Exames")
143
  out_txt = gr.Textbox(label="📋 Exames Classificados", lines=12)
 
1
+ # Código completo atualizado com extração de EAS incluída no Gradio
2
+
3
  import fitz
4
  import re
5
  import gradio as gr
 
58
  texto_ocr = re.sub(r'\s+', ' ', texto_ocr)
59
  return texto_fitz, texto_ocr
60
 
61
+ # Padrões regex para extração de cada exame, incluindo EAS
62
  exames = {
63
  "LEUCO": r"leuc[óo]citos.*?([\d.,]+)\s?(?:10\^3)?/u?l",
64
  "B": r"bas[óo]filos.*?([\d.,]+)\s?%",
 
101
  "LAC": r"lactato.*?([\d.,]+)\s?mmol/l",
102
  "CKMB": r"ck[- ]?mb.*?([\d.,]+)\s?u/l",
103
  "CPK": r"cpk.*?\bresultado\b\s*([\d.,]+)",
104
+ "TROPO": r"troponina.*?([<>]?[\d.,]+)\s?ng/ml",
105
+ # Padrões para EAS
106
+ "LEUC ESTERASE": r"Leuc[óo]cito esterase\s*[:\-]?\s*([A-Za-z0-9\+\-]+)",
107
+ "LEUCO EAS": r"Leuc[óo]citos?\s*[:\-]?\s*([\d]+\/\d+)",
108
+ "HEMA EAS": r"Hem[áa]cias?\s*[:\-]?\s*([\d]+\/\d+)",
109
+ "BACTERIAS": r"Bact[ée]rias?\s*[:\-]?\s*([A-Za-z]+)"
110
  }
111
 
112
+ # Ordem de saída das chaves (sem EAS)
113
  ordem = [
114
  "LEUCO","B","SS","EOS","LINF","MONO",
115
  "HB","HT","PLT","AMIL","ÁC UR","BT","BD","BI",
 
120
  "CKMB","CPK","TROPO"
121
  ]
122
 
 
123
  def extrair_exames_formatado(pdf_file):
124
  if not pdf_file:
125
  return "Nenhum arquivo enviado.", None
 
134
  val = m.group(1).replace(',', '.')
135
  break
136
  resultados[rotulo] = classificar(rotulo, val) if val else "—"
137
+
138
+ # Monta a parte principal
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
+ eas_partes = [f"{k}: {resultados[k]}" for k in eas_chaves if resultados[k] != "—"]
145
+ if eas_partes:
146
+ texto_main = "EAS: " + " / ".join(eas_partes) + " / " + texto_main
147
+
148
+ # Gera CSV
149
  df = pd.DataFrame(list(resultados.items()), columns=["Exame","Valor"])
150
  temp = tempfile.NamedTemporaryFile(delete=False, suffix=".csv")
151
  df.to_csv(temp.name, index=False)
152
+
153
+ return texto_main, temp.name
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)