All'università e per scopi personali, per 3-4 anni ho sperimentato il Prolog. Tale linguaggio 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. (leggetevi cosa sono le Social Network e i grafi associati è interessante tutta la teoria, altrimenti suggeritemi cosa non avete ben compreso e proverò a spiegarvelo).
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
- etc.
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, distinguire 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.
Alla prox.
Riferimenti
www.swi-prolog.org
http://it.wikipedia.org/wiki/Web_semantico
domenica 26 settembre 2010
Iscriviti a:
Commenti sul post (Atom)
0 commenti:
Posta un commento