Talvolta può essere necessario operare, per scopi dimostrativi o altre ragioni, su un corpus di dimensioni modeste consistente di documenti redatti in una lingua specifica (non necessariamente l'Inglese) e calati su argomenti particolari. In questo post propongo un notebook ipython con il codice per generare un corpus siffatto riducendo al minimo le complicazioni tecniche e i tempi di produzione. La sorgente che utilizziamo per i contenuti è Wikipedia.
La libreria Wikipedia API for Python
La libreria Python importata per l'estrazione è disponibile alla pagina Wikipedia API for Python. Questa libreria è idonea per estrazioni contenute, ossia qualche centinaio di documenti.
Wikipedia API for Pythondumps di Wikipedia librerie con funzioni per lo sviluppo di bot scrapersNota importante: Per estrazioni massive da Wikipedia o altri progetti Wikimedia è opportuno utilizzare i dumps di Wikipedia o librerie con funzioni per lo sviluppo di bot scrapers.
Il processo di estrazione
Nell'esempio che segue estraiamo documenti in Italiano, partendo dalla specificazione di un elenco di argomenti (seeds) sull'apprendimento automatico e altri concetti correlati.
Il codice segue questi passaggi:
- Parte dai seed per effettuare delle ricerche di pagine in italiano su Wikipedia
- Usa i titoli delle pagine trovate per recuperarne il contenuto
- Produce l'output come una lista composta da tre elementi:
- Il primo elemento è la lista dei seed
- Il secondo elemento è la lista dei titoli recuperati per ogni seed
- Il terzo è una lista di documenti (il corpus grezzo)
Struttura dell'output
L'output finale è un raw corpus su cui è possibile intervenire con successive operazioni come:
- ✅ Topic modeling
- ✅ Analisi del sentiment
- ✅ Classificazione automatica
- ✅ Estrazione di entità
- ✅ Clustering di documenti
Implementazione pratica
Il codice essenziale consiste di poche righe, tutto il resto è un corredino per renderne più flessibile l'uso.
import wikipedia
# Imposta la lingua su italiano
wikipedia.set_lang("it")
# Definisci i seed topics
seeds = [
"machine learning",
"intelligenza artificiale",
"deep learning",
"reti neurali",
"algoritmi",
"data mining"
]
# Lista per contenere tutti i documenti
corpus = []
titles_found = []
# Per ogni seed, cerca pagine correlate
for seed in seeds:
try:
# Cerca pagine correlate al seed
search_results = wikipedia.search(seed, results=10)
for title in search_results:
try:
# Scarica il contenuto della pagina
page = wikipedia.page(title)
corpus.append(page.content)
titles_found.append(title)
except wikipedia.exceptions.DisambiguationError as e:
# In caso di disambiguazione, prendi la prima opzione
try:
page = wikipedia.page(e.options[0])
corpus.append(page.content)
titles_found.append(e.options[0])
except:
continue
except:
continue
except Exception as e:
print(f"Errore durante la ricerca per '{seed}': {e}")
continue
print(f"Corpus generato con {len(corpus)} documenti")
Notebook IPython completo
Il notebook completo include funzionalità aggiuntive per:
- Gestione degli errori di disambiguazione
- Filtri per la qualità dei contenuti
- Salvataggio automatico del corpus
- Statistiche descrittive sui documenti estratti
- Preprocessing di base del testo
Caratteristiche del notebook
- 📊 Versione utilizzata:
wikipedia
package 1.4.0 - 🎯 Target: Corpus tematici di dimensioni medio-piccole
- 🇮🇹 Lingua: Ottimizzato per contenuti in italiano
- ⚡ Velocità: Generazione in pochi secondi
- 🔧 Flessibilità: Facilmente adattabile per altri domini
Esempio di output
Il corpus di esempio generato contiene:
- 58 documenti estratti da Wikipedia
- Tema: Machine Learning e Intelligenza Artificiale
- Lingua: Italiano
- Formato: Testo grezzo pronto per l'elaborazione
Utilizzi pratici
Questo approccio è particolarmente utile per:
- Prototipazione rapida di sistemi NLP
- Creazione di dataset per esperimenti didattici
- Test di algoritmi di text mining
- Analisi comparative tra diverse tecniche
- Validazione di ipotesi su testi in italiano
Considerazioni tecniche
Vantaggi
✅ Semplicità d'uso - Codice minimo e intuitivo
✅ Velocità di esecuzione - Risultati in pochi secondi
✅ Contenuti di qualità - Wikipedia come fonte affidabile
✅ Multilingua - Supporto per diverse lingue
✅ Flessibilità - Facilmente personalizzabile
Limitazioni
⚠️ Dimensioni limitate - Non adatto per corpus molto grandi
⚠️ Rate limiting - Rispettare i limiti di accesso alle API
⚠️ Dipendenza da rete - Richiede connessione internet
⚠️ Qualità variabile - Dipende dalla disponibilità dei contenuti
Notebook interattivo
Il notebook include un'interfaccia user-friendly che permette di:
- Specificare i seed topics di interesse
- Configurare il numero di documenti per seed
- Impostare filtri di qualità sul contenuto
- Visualizzare statistiche in tempo reale
- Esportare il corpus in diversi formati
Ecco il notebook completo integrato:
La versione del package wikipedia
usato nel notebook è la 1.4.0.
Download e risorse
Puoi visualizzare il notebook a schermo pieno e scaricare il corpus di esempio:
Conclusioni
Questo strumento rappresenta una soluzione pratica ed efficace per la generazione rapida di corpus tematici in italiano da Wikipedia. Il codice essenziale è estremamente semplice, mentre le funzionalità aggiuntive del notebook lo rendono uno strumento versatile per ricercatori, studenti e professionisti che lavorano con il Natural Language Processing.
La combinazione di semplicità, velocità e qualità dei contenuti Wikipedia lo rende ideale per:
- Prototipazione rapida di sistemi NLP
- Creazione di dataset per esperimenti
- Validazione di algoritmi di text mining
- Analisi comparative tra tecniche diverse
Buon divertimento con la generazione dei vostri corpus personalizzati!