Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📄 SortDocument

Organizza automaticamente i tuoi PDF (fatture, contratti, referti medici, estratti conto, documenti d'identità...) in cartelle per categoria, usando un LLM locale tramite LM Studio — nessun documento lascia mai il tuo computer.

Una volta organizzati, puoi anche fare domande in linguaggio naturale sui tuoi documenti ("quanto ho pagato di luce a marzo?", "dove ho messo l'ultimo estratto ISEE?") e ottenere risposte con le fonti citate.

🔒 100% locale e privato. Tutto il processing (lettura PDF, classificazione, embedding, chat) avviene sul tuo PC tramite LM Studio. Nessun dato, testo o immagine viene inviato a servizi esterni.


✨ Cosa fa

  • Smista i PDF automaticamente: legge ogni documento (testo o, se è una scansione, l'immagine tramite un modello vision), capisce di che tipo di documento si tratta e lo sposta nella sottocartella giusta, creandola se serve.
  • Evita cartelle duplicate: se una categoria simile esiste già (es. "Bolletta Energia"), riusa quella invece di crearne una nuova quasi identica.
  • Rinomina i file in modo descrittivo e coerente, basandosi sul contenuto.
  • Costruisce una memoria consultabile: genera per ogni documento una nota Markdown in stile Obsidian con riepilogo, data, persone/enti coinvolti, importo e tag.
  • Risponde a domande sui tuoi documenti: una chat da terminale cerca semanticamente tra le note e risponde citando le fonti, con la possibilità di aprire subito il PDF originale.

⚙️ Come funziona

DaOrganizzare/            Organizzati/                  memoria/
   fattura.pdf     ─────▶    Fattura/                      Fattura/
                                 fattura.pdf   ──────▶         fattura.md (nota + embedding)
  1. pdf_sorter.py legge i PDF in DaOrganizzare/, estrae testo (o immagine se è una scansione), chiede al modello di classificarli e li sposta in Organizzati/<Categoria>/.
  2. build_memoria.py scansiona Organizzati/ e crea in memoria/ una nota Markdown per ogni documento (riepilogo, metadati, wikilink).
  3. chat.py calcola gli embedding delle note, li indicizza in memoria/.indice_embeddings.json e ti permette di fare domande: recupera le note più pertinenti e chiede al modello di rispondere basandosi solo su quelle.

Tutto passa attraverso lmstudio_client.py, un client minimale per il server locale di LM Studio (API nativa per chat/vision, API compatibile OpenAI per gli embedding).

📋 Requisiti

  • Windows (i lanciatori .bat sono pensati per Windows; gli script Python funzionano su qualsiasi sistema)
  • Python 3.10+
  • LM Studio installato, con:
    • un modello di chat/vision (es. google/gemma-3-12b) — usato per classificare i documenti e generare i riepiloghi
    • un modello di embedding (es. text-embedding-nomic-embed-text-v1.5) — usato per la ricerca semantica nella chat
    • il comando lms disponibile nel PATH (installato automaticamente da LM Studio)

🚀 Installazione

  1. Clona il repository:
    git clone https://github.com/DagoExe/SortDocument.git
    cd SortDocument
  2. Installa le dipendenze Python:
    pip install -r codice/requirements.txt
  3. Apri LM Studio almeno una volta e scarica i modelli che vuoi usare (chat/vision + embedding). Se cambi i nomi dei modelli, aggiorna le costanti MODEL_NAME / CHAT_MODEL / EMBED_MODEL in cima a pdf_sorter.py, build_memoria.py e chat.py.

▶️ Utilizzo

Modo semplice (Windows, doppio click)

  • Organizza.bat → avvia LM Studio, smista tutti i PDF presenti in DaOrganizzare/ dentro Organizzati/, poi aggiorna automaticamente le note in memoria/.
  • Chiedi.bat → avvia LM Studio, aggiorna la memoria se serve, poi apre la chat per fare domande sui documenti già organizzati.

Basta mettere i PDF da smistare dentro DaOrganizzare/ e lanciare Organizza.bat.

Modo manuale (da riga di comando)

cd codice

# Smista i PDF da una cartella sorgente a una di destinazione
python pdf_sorter.py --src "..\DaOrganizzare" --dst "..\Organizzati"

# Simula senza spostare nulla (utile per testare)
python pdf_sorter.py --src "..\DaOrganizzare" --dst "..\Organizzati" --dry-run

# Copia invece di spostare
python pdf_sorter.py --src "..\DaOrganizzare" --dst "..\Organizzati" --copy

# Genera le note di memoria per i documenti già organizzati
python build_memoria.py --organizzati "..\Organizzati" --memoria "..\memoria"

# Avvia la chat sui documenti
python chat.py --memoria "..\memoria"

📁 Struttura del progetto

SortDocument/
├── codice/
│   ├── pdf_sorter.py       # Classifica e smista i PDF
│   ├── build_memoria.py    # Crea le note Markdown per la memoria
│   ├── chat.py             # Ricerca semantica + chat sui documenti
│   ├── lmstudio_client.py  # Client per il server locale di LM Studio
│   ├── pdf_utils.py        # Estrazione testo/immagini dai PDF
│   └── requirements.txt
├── Organizza.bat           # Lanciatore: smista i PDF
├── Chiedi.bat              # Lanciatore: apre la chat
├── DaOrganizzare/          # PDF in ingresso (ignorata da git)
├── Organizzati/            # PDF smistati per categoria (ignorata da git)
└── memoria/                # Note Markdown + indice embedding (ignorata da git)

Le cartelle DaOrganizzare/, Organizzati/ e memoria/ contengono documenti personali e non vengono versionate (vedi .gitignore): quando clona il repository, ognuno parte con cartelle vuote e i propri documenti.

🔐 Privacy

Questo progetto è pensato per restare completamente locale:

  • I PDF non vengono mai caricati su internet o servizi cloud.
  • Classificazione, riepiloghi ed embedding sono generati da modelli eseguiti localmente tramite LM Studio.
  • Le uniche chiamate di rete sono verso http://127.0.0.1:1234 (il server locale di LM Studio sulla tua stessa macchina).

About

Organizza automaticamente i PDF personali (fatture, contratti, referti, documenti d'identità) in cartelle per categoria usando un LLM locale via LM Studio, e permette di interrogarli in chat. 100% locale: nessun dato lascia il PC.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages