Vai al contenuto principale
Rappresentazione visiva dell'articolo: Come creare un PDF summarizer con Python e ChatGPT (con codice)

Un PDF summarizer è un sistema tale che, dato un PDF in input, produce un PDF in cui riassume il contenuto dell'input; può essere molto comodo nel caso in cui si abbia un file con molte pagine, e si voglia sintetizzarlo.

Chiaramente, l'output non può essere considerato alla pari di un riassunto fatto a mano, ma può comunque portare a risultati soddisfacenti. Non è detto (ed anzi, è improbabile) che il PDF contenga tutti i concetti più importanti, ma può essere considerato come una base discreta.

Il codice sorgente è disponibile al seguente link.

Come funziona

Il processo viene suddiviso nei seguenti step:

  1. Lettura del PDF in input e rappresentazione in un formato accettabile da ChatGPT;
  2. Creazione del riassunto;
  3. Generazione dell'output.

Lettura del PDF e rappresentazione in batch

Per leggere il PDF utilizziamo un package chiamato PyMuPDF, creato appositamente per la gestione di questa tipologia di file. Questo package ci permette di estrapolare il testo riga per riga.

Quest'ultima funzionalità è molto importante, poiché ChatGPT non è in grado di prendere file molto grandi in input ed elaborarne un riassunto considerandone tutto il testo, avendo un contesto limitato.

Dobbiamo utilizzare una tecnica che ci permetta di suddividere il contenuto in pezzi più piccoli, chiamati batch. In questo caso, ogni batch sarà composto al massimo da 100 righe. Se il file ha 2000 righe, allora ci saranno 20 batch totali.

Esistono anche altre tecniche più sofisticate e funzionali; una tra le migliori sarebbe di riuscire ad estrapolare titoli, sottotitoli e testi, ma con i PDF la complessità è molto più alta rispetto ad estensioni come il Markdown, che permettono di estrapolare in maniera universale anche titoli, sottotitoli e testi.


Creazione del riassunto

Ora che abbiamo spezzettato il nostro PDF in tanti batch, possiamo sottoporre ogni singolo batch e chiedere a ChatGPT di generarne un riassunto. Tramite il prompt di sistema chiediamo di iniziare con il titolo del batch e di formattare il testo in Markdown. I riassunti dei batch vengono quindi salvati in un unico file Markdown.

Il prompt di sistema è il seguente:

Sei un assistente che sta leggendo un libro e vuole riassumerlo per i propri studenti. Utilizzi un linguaggio semplice e coinciso. Scrivi all'inizio il titolo di ciò che andrai a riassumere. Utilizza solamente le informazioni presenti nel prompt dell'utente. Utilizza una sintassi Markdown.

Utilizziamo ChatGPT 3.5 principalmente per un fattore costo, ma si possono raggiungere risultati migliori utilizzando la versione 4 o un altro LLM (Gemini/Mistral/Claude etc.). Nei test svolti anche la versione 3.5 di ChatGPT ha prodotto risultati soddisfacenti.

Generazione dell'output

Arriviamo all'ultimo step: abbiamo creato il file Markdown con il riassunto completo e vogliamo convertirlo in PDF. Per farlo, utilizziamo due package: markdown, per la lettura di file in questo formato, e weasyprint, che permette di creare un file PDF.

A questo punto, abbiamo il PDF riassuntivo, e possiamo considerare concluso questo progetto.

Conclusione

Questo summarizer non potrebbe andare in produzione, essendo un progetto a scopo didattico, poiché necessiterebbe di vari miglioramenti per renderlo più funzionale.

Concludiamo quindi questo articolo con una lista dei miglioramenti che potrebbero essere fatti al summarizer:

  • Divisione in batch basata su titoli, sottotitoli e testi;
  • Supporto ad altre estensioni (Markdown, Word);
  • Estrazione delle parole chiave per ogni sezione.

Ti è piaciuto questo articolo?

Condividilo sui social

Powered by

Logo Promobulls
Area riservata