Home

De Franciscis Dimitri

Homepage & Laboratorio Creativo

Primary links

  • Homepage
  • Curriculum Vitae
  • Servizi
  • Fotografia
  • Libri e guide
  • Contattami
Home Blog dimitri's blog

Estrazione di informazioni testuali tramite Regular Expression

Submitted by dimitri on Dom, 30/11/2008 - 21:02
  • Informatica
  • calc
  • html
  • jedit
  • openoffice
  • regular expression
  • tag

Oggi vi voglio presentare alcune semplici tecniche per l'estrazione di stringhe da un testo, attività molto utilizzata nell'ambito dell'information retrieval, ovvero l'estrazione e la classificazione automatica di grosse moli di testo.

Per le prove utilizzeremo il sempre ottimo JEdit; in linea di principio gli stessi concetti si possono applicare a ogni editor che supporti le regular expression, ma occhio alle differenze di sintassi!

Estrazione di indirizzi internet

Lo scenario è il seguente: il vostro capo vi ha chiesto di preparare un foglio Excel...ehm volevo dire OpenOffice Calc ;) contenente un elenco di aziende concorrenti. Questo foglio deve contenere il nome dell'azienda, l'indirizzo del sito internet internet e una breve descrizione. Il vostro capo vi ha anche fornito un link a DMOZ.org (una web directory molto popolare) dove c'è un elenco che sembra proprio fare al caso nostro. Dimenticavo: avete mezz'ora per consegnargli il file!!

Opzione A: salvate il file in locale e cominciate a copia-incollare furiosamente, andando comunque fuori tempo massimo.

Opzione B: utilizzate JEdit, OpenOffice e seguite questo tutorial, finendo il lavoro in quindici minuti. Il resto del tempo ovviamente lo passerete a cercare l'anima gemella in qualche chat o a distruggere il vostro record di Campo Minato. Promesso?

Preparazione

Ambiente di lavoro

Se non avete installato JEdit, è il momento giusto per farlo! Consigliamo inoltre di realizzare il foglio di calcolo con OpenOffice, l'alternativa gratutita a Microsoft Office.

È caldamente consigliato inoltre creare una cartella di lavoro dove mettere tutti i file e il risultato del nostro lavoro: in futuro potremmo servircene per un altro compito.

Salviamo l'elenco delle aziende

Cliccando su questo link
elenco aziende
si accede ad una sezione di DMOZ.org, contentente l'elenco di aziende che il nostro capo vuole censire.

Salvate la pagina due volte: col nome sample_elenco_aziende.html (la copia originale) e come temp.html (il file su cui lavoreremo). Importante: scegliete l'opzione "HTML only", altrimenti verranno salvati un sacco di file inutili (per il progetto di oggi). Ricordatevi di applicare le mofiche solo al file temp.html!!!

Primo passo: pulizia

Se apriamo il file temp.html con JEdit possiamo vedere il codice sorgente del file: come potete vedere l'elenco che ci interessa non è altro che una lunga lista non numerata, ottenibile in HTML utilizzando i tag <ul> e <li> (vedere qui per una spiegazione veloce). Ora non dovete fare altro che rimuovere tutto ciò che circonda la prima e l'ultima voce: in pratica del file originale rimarranno soltanto le righe dalla 113 alla 210 comprese. Alla fine il file (esempio) avrà questo aspetto:

<li><a href="http://www.airbonaita.it/">Air Bonaita</a> - [Busto Arsizio, VA] ....
<li><a href="http://www.albatechsas.it/">Albatech s.a.s. azienda di assemblaggio raccorderie idrauliche</a> ...
[...]

Ora possiamo isolare le singole componenti di ogni voce della lista:

  • ogni voce comincia con il tag <li>. Da notare che l'html utilizzato da DMOZ è sbagliato, in quanto i tag <li> non hanno un corrispettivo </li> per chiudere... ma a noi non importa, anzi ci semplifica un pochettino le cose...
  • l'attributo href del link ci dirà l'indirizzo internet del sito aziendale;
  • il testo all'interno del link, compreso fra <a> e </a>, corrisponde alla ragione sociale dell'azienda;
  • infine, il resto del testo può essere utilizzato come descrizione.

Applicare le regular expression

Dobbiamo costruire ora una regular expression che riesca a "capire" la struttura di ogni singola voce.

Notiamo che per fortuna ogni descrizione è su una riga sola, il che ci semplifica la vita! Vediamo un esempio di regex (d'ora in poi chiameremo così le regular expression) che cattura una riga intera:

^.*

Per provarla aprite il file con JEdit e:

  • premete i tasti Ctrl + F (insieme) per accedere alla funzione "cerca";
  • inserite la stringa "^.*" (senza le virgolette) in "Search for:"
  • selezionate l'opzione "Regular expressions";
  • cliccate su "Find".

Il risultato è che JEdit evidenzia la prima riga, e se continuate a premere "Find" verranno progressivamente evidenziate tutte le righe del file, una ad una.

Da questo momento in poi vi consiglio di tenere sotto mano il capitolo Lesson: Regular Expressions del Java Tutorial, perché spiega molto bene le regex e fornisce anche molti consigli utili.

Per isolare i vari componenti di ogni singola voce utilizzeremo diverse carateristiche delle regex: in particolare i capturing groups e le wildcard.

I capturing groups ci permettono di definire dei sotto-pattern (o gruppi appunto) e riferirci ad essi tramite un numerello: $1 per il primo gruppo, $2 per il secondo, eccetera. In questo modo possiamo effettuare delle sostituzioni mirate di intere porzioni di testo; potente vero? Vediamo quindi come diventa la nostra espressione regolare:

<.*href="([^"]*)">([^<]*)</a> - ([^<]*)

Copiatela in "Search for:", e in "Replace with" mettete questa stringa:

$1\t$2\t$3

e premete "Replace All".

Tutto l'html è stato rimosso, al suo posto ora c'è del semplice testo: il carattere di tabulazione serve per separare le singole colonne di ogni riga. Possiamo anche riordinare le colonne, invertendo i riferimenti ai gruppi; ad esempio questa stringa:

$2\t$1\t$3

produce questo ordine: nome dell'azienda, indirizzo internet, descrizione.

Non vi resta che copiare i risultati nel vostro foglio di calcolo:

  • create un nuovo foglio di calcolo con OpenOffice Calc;
  • selezionate da JEdit tutto il contenuto del file, premendo CTRL-A;
  • incollate nel foglio di calcolo: i dati verranno incolonnati automaticamente!
    • File di testo risultante
    • Foglio elettronico

Ora che avete il foglio di calcolo potete anche aggiungere stili, colori e formattazioni varie, avete solo il limite della fantasia... e della mezz'ora impostavi dal vostro capo!

AllegatoDimensione
sample_elenco_aziende.txt31.87 KB
sample_elenco_aziende_2.txt21.98 KB
sample_elenco_aziende_3.txt20.06 KB
aziende.ods25.82 KB
  • dimitri's blog
  • Aggiungi un commento
  • 1627 letture

FeedFlare

Navigazione

  • Contenuti recenti
  • Cerca
  • Tags
  • Articoli più letti

De Franciscis Dimitri feeds

  • De Franciscis Dimitri - Homepage &amp; Laboratorio Creativo

Secondary links

  • Note legali
  • Pubblicità su www.megadix.it

Copyright 2007 De Franciscis Dimitri - p.iva 05327790969

website monitoring service

Web4Web

RoopleTheme