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 Python

Nota 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.

dumps di Wikipedia 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:

  1. Parte dai seed per effettuare delle ricerche di pagine in italiano su Wikipedia
  2. Usa i titoli delle pagine trovate per recuperarne il contenuto
  3. 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!