CoolFace
Apppublic

LRAMIRIO/sisreq-docker-final2

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
app.py62 linesDownload Raw Back to root
1import streamlit as st2import pytesseract3from pdf2image import convert_from_bytes4from PIL import Image5import pandas as pd6import re7import io8 9st.set_page_config(page_title="SISREQ - Extração de Requisição", layout="centered")10 11st.title("📄 SISREQ - Extração de Itens de Requisições PDF")12uploaded_file = st.file_uploader("Envie o arquivo PDF da requisição", type=["pdf"])13 14def formatar_descricao(texto):15    texto = texto.strip().strip('"').strip("'")16    texto = re.sub(r'\s+', ' ', texto)17    frases = re.split(r'(?<=[.?!])\s+', texto)18    frases = [f"{frase.strip().capitalize()}." if not frase.endswith('.') else frase.strip().capitalize() for frase in frases]19    return ' '.join(frases)20 21if uploaded_file:22    imagens = convert_from_bytes(uploaded_file.read())23    texto_total = ""24    st.subheader("🔍 Pré-visualização do OCR (texto bruto):")25    for imagem in imagens:26        texto = pytesseract.image_to_string(imagem, lang='por')27        texto_total += texto + "28"29    st.text_area("Texto Extraído (OCR)", texto_total, height=300)30 31    blocos = []32    bloco = ""33    for linha in texto_total.split("\n"):34        bloco += linha + "\n"35        if "Valor total" in linha:36            blocos.append(bloco)37            bloco = ""38 39    def extrair_campos(texto):40        def campo(regex):41            r = re.search(regex, texto, re.DOTALL | re.IGNORECASE)42            return r.group(1).strip().replace('\n', ' ') if r else ""43        return {44            'Item': campo(r"Item\s*:? ?(\d+)"),45            'CATMAT': campo(r"CATMAT\s*:? ?(\d+)"),46            'Descrição Detalhada': formatar_descricao(campo(r"Descrição detalhada\s*:? ?(.*?)Unidade")),47            'Unidade': campo(r"Unidade\s*:? ?([\w\s]+)"),48            'Quantidade': campo(r"Quantidade\s*:? ?(\d+)"),49            'Valor Unitário': campo(r"Valor unitário\s*:? ?R\$\s*([\d.,]+)").replace(".", "").replace(",", "."),50            'Valor Total': campo(r"Valor total\s*:? ?R\$\s*([\d.,]+)").replace(".", "").replace(",", "."),51        }52 53    dados = [extrair_campos(bloco) for bloco in blocos]54    df = pd.DataFrame(dados)55 56    st.subheader("📊 Tabela Extraída")57    st.dataframe(df)58 59    output = io.BytesIO()60    with pd.ExcelWriter(output, engine='openpyxl') as writer:61        df.to_excel(writer, index=False, sheet_name="Itens Extraídos")62    st.download_button("📥 Baixar Planilha Excel", data=output.getvalue(), file_name="itens_extraidos.xlsx")