gtagger (0.3.5)

Published 2025-06-20 16:05:14 +02:00 by sscipioni

Installation

pip install --index-url  gtagger

About this package

tagger and semantic search

gtagger

flowchart TD
    A[Documento in ingresso] --> A1(Estrazione dati)
    A1[Conversione MardDown] --> B(Estrazione dati)
    B --> C[Caricamento su Paperless]
    C --> D{Risultato}
    D -->|Successo| E[Invio Campi personalizzati]
    D -->|Fallimento| F[Log errori]

Input e Requisiti

Tipi di File Supportati

Formato Note
PDF Testo nativo o OCR (Tesseract)
doc Estrazione testo strutturato (Tika)
pptx Estrazione testo strutturato (MarkItDown)
xlxs,docx,odt Estrazione testo strutturato (MarkItDown o Tika)

Metadati Estratti

Titolo: Nome del file senza estensione

Data Creazione: data ricavata dal nome del file (se possibile) o dalla data di ultima modifica dello stesso Corrispondenti: il nome dell'evento (Es. FIERACAVALLI, MOTORBIKE) estratto dal nome della prima directory dell'archivio Tipo di documento: dedotto dall'analisi del contenuto Persone Citate: elenco delle persone citate nel documento (Nome Cognome) Argomenti: elenco dei principali argomenti del documento, dedotto dall'analisi del contenuto Anno: tag dell'anno a cui si riferisce l'evento Tipo di evento: codifica dell'evento fieristico Relatori: eventuali persone che forniscono dichiarazioni Persone Evidenziate: Persone citate nel documento che appartengono ad un elenco di persone selezionate. Nome File: nome del file costruito seguendo regole fissate.

Operatività

Le operazioni effettuabili sull'archivio sono distinte in conversione del testo (convert), analisi del testo (evaluate), caricamento su Paperless-ngx (upload). E' fornito lo strumento per un report dei risultati ottenuti (report) e il popolamento dei principali metadati su Paperless-ngx (setup), utile in caso di sviluppo, per evitare di inserirli tutti a mano.

L'operazione di conversione prevede l'uso di applicativi come Apache Tika e MarkitDown. Tika è lo strumento predefinito, perché è quello usato da Paperless, tuttavia non è in grado di convertire il formato pptx, che quindi è dato in pasto a Markitdown. A sua volta, anche quest'ultimo ha le sue limitazioni: non converte il vecchio formato doc di Word. La conversione è la prima operazione da effettuare, e genera dei files markdown nello stesso path dell'originale. Se un file è già presente l'operazione di conversione non viene effettuata. I files pdf generati da scansione vengono sottoposto a un'operazione di OCR preliminare. Se nella directory, per uno stesso file è presente più di un formato, tipicamente l'originale più la stampa pdf, viene preso l'originale e il pdf non viene considerato.

L'operazione di analisi avviene sottoponendo il file markdown all'AI. Quindi se un documento non ha il suo corrisponente mmarkdown, non verrà analizzato. Per questo è necessaria l'operazione di conversione. Il risultato dell'analisi è memorizzato in un file .json, a fianco dell'originale. Se per un file è già presente il file json, l'operazion di analisi non è effettuata.

L'upload a Paperless-ngx avviene per i documenti che hanno subito l'analisi e quindi sono associati ad un file .json. Prima viene inviato l'originale, successivamente sono aggiunti i Campi Personalizzati.

Uso

$ gtagger
usage: gtagger [-h] [-c CONFIG] [--config-save CONFIG_SAVE] [--debug] [--dry-run] [--task {upload,report,evaluate,convert,setup}] [--model MODEL] [--env {development,production}] [-e EXTENSION]
               [--log-file LOG_FILE] [--paperless PAPERLESS] -t TOKEN
               [files ...]

-c CONFIG percorso di un file di configurazione yaml. Generabile con l'opzione [--config-save CONFIG_SAVE]. --task {upload,report,evaluate,convert,setup} l'operazione da effettuare sull'archivio files la radice dell'archivio. Notare che è vincolante scegliere la corretta radice, perché alcune informazioni sono estratte dal nome della prima sottodirectory.

--model MODEL Modello differente da quello di default ("gemini-2.0-flash-lite-001") --env {development,production} Default: ("development") è importante soprattutto per il motore AI usato --debug aumenta la verbosità dei log -t TOKEN per mette di passare un token di paperless-ngx all'applicazione. Utile con il fla --paperless --paperless PAPERLESS consente di specificare un url base di Paperless-ngx, utile in modo sviluppo per un server locale (Es. http://localhost:8080) --log-file LOG_FILE è disponibile solo quando si usa --debug, e salva una copia dei log su file.

Installation

editable mode for development

uv pip install -e .
#uv sync --active

Pubblicazione package

  • Incrementare versione in pyproject.toml
  • Eseguire commit su git
  • Eseguire task publish.

Spostarsi sulla macchina di produzione e da utente paperless eseguire pip install -U gtagger

Conversione documenti

I documenti sono convertiti in testo (e salvati con estensione <*.md>) usando 3 diversi motori di conversione:

  • markdown
  • ocr
  • tika
task start # nella radice del progetto paperless
gtagger -c gtagger.yaml --task convert ./samples/"**"

Elaborazione AI

Per lo sviluppo generare una chiave in https://aistudio.google.com/apikey

export GOOGLE_API_KEY=chiave_API gtagger -c gtagger.yaml --task ai ./samples/"**"

Upload

In ambiente di sviluppo puntare al proprio paperless backend ("--paperless") usando il token (richiesto in admin -> profile -> API auth token) o usare un file di configurazione adattato per l'ambiente locale

export PAPER_TOKEN=...

# solo la prima volta per creare i tags, custom fields, etc
gtagger -c gtagger.yaml --task setup --token $PAPER_TOKEN --debug --paperless "http://localhost:8000"

# upload
gtagger -c gtagger.yaml --task upload --token $PAPER_TOKEN --paperless "http://localhost:8000" ./samples/"**"
# initialize database
rm -fR ./runtime

# add documents to the database
nlsearch samples/REPORT\ RIUNIONE\ COMUNICAZIONE\ VINITALY\ 14.02.md
nlsearch "samples/*.md"

# search for a query in the database
nlsearch --query "sindaco di verona"

Requirements

Requires Python: >=3.12
Details
PyPI
2025-06-20 16:05:14 +02:00
2
44 KiB
Assets (1)
Versions (14) View all
0.3.7 2025-07-02
0.3.6 2025-07-01
0.3.5 2025-06-20
0.3.4 2025-06-20
0.3.3 2025-06-07