Sei sulla pagina 1di 4

Prolog, Web Semantico, Social Network

ing. R. Turco (rosario_turco@virgilio.it)

Il Prolog fa parte della famiglia dei linguaggi della Logical Programming, molto
interessante e basato su predicati e clausule, con uno schema tipico Soggetto
Predicato Valore.

Dopo una fase in cui il Prolog si era stagnato, ecco che i progetti Open Source tirano
fuori dal cilindro il pacchetto software SWI-PROLOG, dal nome dell'università di
Amsterdam "Sociaal-Wetenschappelijke Informatica", e il cui autore principale è Jan
Wielemaker (Vedi http://it.wikipedia.org/wiki/SWI-Prolog).

L'importanza del SWI-Prolog e della sua ripresa risiede tutto dietro a 4 cose: il Web
semantico e la Social Network Analysis, i motori di ricerca e la problematica del
knowledge Management nelle aziende.

Il concetto è questo: "Se nel pubblicare su Web i dati, essi sono accompagnati da
particolari metadati semantici che permettono di relazionare le informazioni e la loro
rilevanza, allora successivamente è possibile studiare i grafi, statici e dinamici, che si
formano a seguito delle relazioni di aggregazione stabilite naturalmente tra le persone
e comprendere il loro comportamento. In tal modo si possono a scopo di marketing
segmentare le persone, sui gusti etc e poter fare advertising mirato, pubblicità e
offerte".

Il fine ultimo è la Social Network Analisys, analizzando i grafi e i "cluster di dati" che
si formano, con algoritmi particolari (vedi l'articolo "Introduzione agli algoritmi di
clustering
http://www.gruppoeratostene.com/articoli/Algoritmi%20di%20clustering.pdf).

Per ottenere tali dati, il "trucco" è di offrire tools di aggregazione sociale: Facebook,
Google, Twitter, etc. I vostri dati saranno valutati, verrete osservati come interagite
nel gruppo, se siete dei leader, se siete l'anello di congiunzione tra più gruppi, se
avete peso sugli altri, quanto interagite etc.
Ma per ottenere qualcosa di meglio non si può rinunciare al Web semantico: non basta
HTML, XML etc. Si devono introdurre concetti di relazione e gli strumenti adatti a
tale scopo discendono da concetti di Prolog: Soggetto Predicato Valore.

Ad esempio questo si può ottenere con tre risorse già esistenti: l'XML, gli URI e i
namaspace ma in una forma più attinente. Difatti si usano:
 RDF (Resource Description Framework)
 N3 ed N3 con namespace (un miglioramento rispetto a RDF)
 OWL

Se occorre aggiungere metadati in abbondanza, occorre anche produrre strumenti di


produttività che possano snellire la fase di aggiunta dei metadati tra le pagine web o
tra i Referee dei documenti scientifici o altro etc.

In tal modo si avrà un web che "ragiona", che possa trovare cose attinenti con una
maggiore precisione, distinguere se un riferimento è già stato trovato e presentato.

Si possono creare Page Searcher logici o meta-crowler logici (Meta-PrologCrowler) ed


efficaci XML-PrologParser per rendere migliori i motori di ricerca attuali e far
decollare il Knowledge Management.

A tal proposito si potranno creare anche Web server ad hoc, o aggiungere plug-in a
quelli esistenti. Intanto sono nate librerie come PiLLoW per integrare la Logic
Programming ed il WWW.

Comunque il Prolog è efficace anche nell'analisi dei grafi (e non solo). Non ci credete?

Installatevi SWI-Prolog e ricopiate il programmino che vi propongo (mettendolo in un


file grafo.pl):

arco(a,b,5).
arco(b,c,5).
arco(c,d,7).
arco(d,a,4).
arco(b,d,9).
arco(d,e,5).
arco(a,e,7).
arco(c,e,8).

/* connessione a doppio senso di marcia */

andare(X,Y,K) :- arco(X,Y,K).

andare(X,Y,K) :- arco(Y,X,K).
/* raggiungibile con 1,2,3 passi */

raggiungibili(A,B) :- andare(A,B,_).

raggiungibili(A,B) :- andare(A,X,_), andare(X,B,_).

raggiungibili(A,Z) :- andare(A,X,_), andare(X,Y,_), andare(Y,Z,_).

/* raggiungibile con calcolo della LUNGHEZZA */

percorso1(A,Z,K) :- andare(A,Z,K).

percorso2(A,Z,K) :- andare(A,Z,K1), percorso1(X,Z,K2), K is K1+K2.

percorso3(A,Z,K) :- andare(A,Z,K1), percorso2(X,Z,K2), K is K1+K2.

A questo punto avviate SWI-Prolog. Fate: File->Consult->grafo.pl ed ora proviamo a


fare delle domande.

Vogliamo sapere se esiste un percorso tra a e d (attenzione a digitare il punto che è


importante):

percorso1(a,d,X).
X=4
La risposta è Sì: è a distanza 4

Vogliamo sapere se esistono altri percorsi tra a e d? digitiamo ";" ed esce false.

Proviamo:
percorso1(b,e,X).
false.

Proviamo:
percorso2(a,e,X).
X=12;
X=14;
X=15;
false.

Proviamo invece:
percorso3(a,e,X).
X = 17 ;
X = 19 ;
X = 20 ;
X = 19 ;
X = 21 ;
X = 22 ;
X = 20 ;
X = 22 ;
X = 23 ;

false.

Come si vede realizza anche una base dati di conoscenza tutto sommato, e potrebbe
essere utile, questo esempio, per delle tabelle di routing di rete.