import gradio as gr import pdfplumber from transformers import pipeline # Lżejszy model NER extractor = pipeline("ner", model="xlm-roberta-large-finetuned-conll03", aggregation_strategy="simple") def extract_seller(pdf_file): with pdfplumber.open(pdf_file) as pdf: # Pobranie tekstu ze wszystkich stron full_text = "\n".join(page.extract_text() for page in pdf.pages if page.extract_text()) # Podział na krótkie fragmenty (maks. 512 znaków, aby model działał szybciej) chunks = [full_text[i:i+512] for i in range(0, len(full_text), 512)] seller_name = None for chunk in chunks: entities = extractor(chunk) for entity in entities: if "ORG" in entity["entity_group"]: # Szukamy nazw organizacji seller_name = entity["word"] break # Pobieramy pierwszą wykrytą firmę jako sprzedawcę if seller_name: # Jeśli znaleziono sprzedawcę, przerywamy pętlę break return {"Sprzedawca": seller_name if seller_name else "Nie znaleziono"} # Interfejs użytkownika w Hugging Face Spaces iface = gr.Interface( fn=extract_seller, inputs=gr.File(label="Wybierz plik PDF"), outputs="json", title="Ekstrakcja Sprzedawcy z Faktury", description="Prześlij plik PDF, aby wydobyć nazwę sprzedawcy." ) if __name__ == "__main__": iface.launch()