File size: 1,389 Bytes
07d0354
814c19e
10213d3
 
159c760
 
814c19e
ce53438
814c19e
159c760
 
07d0354
159c760
 
10213d3
 
db576bd
159c760
 
 
 
 
 
 
 
 
 
07d0354
10213d3
07d0354
ce53438
07d0354
ce53438
814c19e
 
ce53438
 
07d0354
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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()