File size: 2,930 Bytes
d7829af
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import spacy
import shutil
import os
import pdfplumber

# Carica il modello linguistico italiano di spaCy
nlp = spacy.load('it_core_news_sm')
nlp.max_length = 1500000

# Mappatura delle categorie e delle relative parole chiave
categorie_keywords = {
    "Fatture": ["fattura", "invoice", "parcella"],
    "Visure": ["visura"],
    "Contratti": ["contratto", "accordo", "incarico"],
    "Bilanci": ["bilancio", "bilanci", "bilancio di esercizio", "ricavi", "costi"],
    "Spese di Personale": ["cedolino", "paga"],
    "Pagamenti": ["bonifico", "transazione", "pagamento", "disposizione", "cro", "ordinante", "beneficiario"],
    "Preventivi": ["preventivo", "offerta", "proposta"],
    "DSAN": ["dichiarazione", "dsan", "dichiarazione sostitutiva", "dichiara"],
    "E.C.": ["estratto conto", "movimenti"]
}

def estrai_testo_da_pdf_con_pdfplumber(file_path):
    text = ''
    try:
        with pdfplumber.open(file_path) as pdf:
            for page in pdf.pages:
                try:
                    page_text = page.extract_text()
                    if page_text:
                        text += page_text
                except Exception as e:
                    print(f"Errore nell'estrazione del testo dalla pagina PDF: {e}")
    except Exception as e:
        print(f"Errore nell'apertura o elaborazione del file PDF: {e}")
    return text.lower()

def assegna_categoria_con_spacy(testo):
    doc = nlp(testo)
    for token in doc:
        for categoria, keywords in categorie_keywords.items():
            if token.text.lower() in keywords:
                return categoria
    return None

def classifica_e_sposta_documenti(cartella_origine, file_name):
    file_path = os.path.join(cartella_origine, file_name)
    testo = ''
    
    # Determina il tipo di file e estrai il testo appropriatamente
    if file_path.endswith('.pdf'):
        testo = estrai_testo_da_pdf_con_pdfplumber(file_path)
    else:
        print(f"Il formato del file {file_path} non è supportato.")
        return
    
    # Assegna la categoria con spaCy
    categoria = assegna_categoria_con_spacy(testo)
    
    if categoria:
        destination = os.path.join(cartella_origine, categoria, file_name)
        destination_folder = os.path.join(cartella_origine, categoria)
        if not os.path.exists(destination_folder):
            os.makedirs(destination_folder)

        # Controlla se il file esiste già e gestiscilo come preferisci
        if not os.path.exists(destination):
            shutil.move(file_path, destination)
        else:
            print(f"Il file {destination} esiste già.")
            # Qui puoi decidere di sovrascriverlo, rinominarlo, o ignorarlo.
            # Ad esempio, per rinominarlo:
            # new_destination = os.path.join(destination_folder, "new_" + file_name)
            # shutil.move(file_path, new_destination)

    else:
        print("Nessuna categoria trovata per il documento.")