Spaces:
Running
Running
File size: 2,154 Bytes
07d0354 814c19e 061d5cb 10213d3 99ddfcc 814c19e bf3bfc2 99ddfcc 814c19e 159c760 07d0354 99ddfcc 10213d3 99ddfcc db576bd bf3bfc2 99ddfcc 9f38b98 99ddfcc 9f38b98 99ddfcc 9f38b98 |
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
import gradio as gr
import pdfplumber
import re
from transformers import pipeline
# Model do rozpoznawania nazw organizacji i wartości numerycznych
extractor = pipeline("ner", model="dbmdz/bert-large-cased-finetuned-conll03-english", aggregation_strategy="simple")
# Reguły do wykrywania NIP, kwot, dat
nip_pattern = re.compile(r'\b\d{10}\b')
kwota_pattern = re.compile(r'\b\d+[\.,]?\d*\b')
data_pattern = re.compile(r'\b\d{2}\.\d{2}\.\d{4}\b')
def extract_invoice_data(pdf_file):
with pdfplumber.open(pdf_file) as pdf:
full_text = "\n".join(page.extract_text() for page in pdf.pages if page.extract_text())
# Szukamy danych w tekście
entities = extractor(full_text)
seller_name = []
seller_nip = None
items = []
total_amount = None
invoice_date = None
for entity in entities:
if "ORG" in entity["entity_group"]:
seller_name.append(entity["word"]) # Zbieramy nazwę sprzedawcy
# Znajdujemy wartości numeryczne dla NIP, kwot, dat
seller_nip = nip_pattern.search(full_text)
invoice_date = data_pattern.search(full_text)
# **Naprawiamy błąd przetwarzania liczb**
kwoty = kwota_pattern.findall(full_text)
kwoty = [float(k.replace(",", ".")) for k in kwoty if k.replace(",", ".").replace(".", "").isdigit()] # Zamiana przecinka na kropkę
total_amount = max(kwoty) if kwoty else None # Pobranie największej wartości jako całkowita kwota faktury
return {
"Sprzedawca": " ".join(seller_name) if seller_name else "Nie znaleziono",
"NIP": seller_nip.group() if seller_nip else "Nie znaleziono",
"Data faktury": invoice_date.group() if invoice_date else "Nie znaleziono",
"Kwota całkowita": total_amount if total_amount else "Nie znaleziono"
}
# Interfejs użytkownika w Hugging Face Spaces
iface = gr.Interface(
fn=extract_invoice_data,
inputs=gr.File(label="Wybierz plik PDF"),
outputs="json",
title="Ekstrakcja danych z faktury",
description="Prześlij plik PDF, a model zwróci dane sprzedawcy, NIP, kwotę i datę faktury."
)
if __name__ == "__main__":
iface.launch()
|