16 ottobre 2007  18

Un plug-in per linkare termini contenuti in un post alle definizioni di Wikipedia

English version of this post

Wikipedia logoLa WikipediaW è senz'altro uno dei progetti più affascinanti del mondo Open Source: l'enciclopedia libera di InternetW è stata protagonista di alterne vicende che l'hanno coinvolta in maniera più o meno significativa nel corso degli ultimi anni, prime fra tutte le critiche mosse sulla veridicità delle informazioni pubblicate è sull'affidabilità delle fonti.

Essendo un grande sostenitore della Wikipedia, mi piace farne spesso riferimento all'interno dei miei articoli, mediante link ai termini che giudico più significativi per un successivo approfondimento, e che evito di descrivere per non appesantire eccessivamente la trattazione.

L'inserimento di molti collegamenti ai termini della Wikipedia all'interno di un post però, può diventare abbastanza oneroso, soprattutto in termini di tempo, in quanto l'indirizzo dell'URLW necessario ad individuare ogni singola voce è abbastanza lungo da digitare; anche ricorrendo ad escamotage di "copia e incolla", si rischia di dedicare più tempo all'inserimento dei link che alla cura del testo del proprio articolo.

Per questo motivo, approfittando del nuovo "extension model" di BlogEngine.NET 1.2 che consente di far eseguire del codice allo scatenarsi di particolari eventi associati al rendering della varie componenti di una pagina, ho pensato di implementare un semplice plug-in che mi rendesse almeno parzialmente automatico il collegamento alle definizioni contenute in Wikipedia dei termini da me indicati.

Il formato dell'URL per la ricerca su Wikipedia

Anzitutto è necessario descrivere come si costruisce l'URL che consente il collegamento diretto ad una definizione della Wikipedia. Il formato è il seguente:

http://{loc}.wikipedia.org/wiki/{term}

dove {loc} corrisponde al codice associato alla localizzazione linguistica (ovverosia alla lingua in cui si richiede la definizione del termine cercato) e {term} naturalmente al termine richiesto, avendo cura di sostituire gli eventuali spazi bianchi con degli underscoreW (_), nel caso di termini composti da più parole. Il codice di localizzazione è rappresentato dagli standard a due lettere per le nazionalizzazioni dei domini geografici: it per Italia, es per Spagna, uk per Inghilterra, ecc.

La sintassi ed i parametri associati

Il plug-in è un semplicissimo parser che cerca all'interno del testo di un post o di una pagina, un tokenW con una determinata sintassi, e lo sostituisce con l'opportuno codice XHTMLW necessario per la creazione del link alla voce evidenziata. Inoltre aggiunge in coda al termine stesso un apice contente la lettera W, proprio per dare una indicazione immediata del fatto che il termine è collegato ad una definizione della Wikipedia. Per ottenere questo risultato, supponendo che sia {term} la parola per la quale vogliamo creare automaticamente il link, sarà sufficiente scrivere:

[W:{term}]

Per default, viene applicato il collegamento ipertestuale alla parola indicata, altrimenti è possibile applicarlo solo all'apice W aggiunto dopo lo parola stessa, inserendo in un punto qualunque all'interno del testo del post o della pagina, il comando:

[ WikiIcon ]

avendo cura di rispettare le maiuscole e le minuscole indicate e omettendo gli spazi. Se è necessario indicare, come nell'esempio di questa pagina, la sintassi da applicare al termine senza che questo venga trasformato in un link, è sufficiente sostituire {term} con {term}:0. Lo switch " :0" non sarà renderizzato dal parser, mentre il termine, completo di direttiva (W:) e parentesi quadre invece si. Se il termine è una parola composta contenente spazi, questi vengono sostituiti con l'underscore. Per consentire una formattazione personalizzata sia della parola che dell'apice identificativo, ho definito due specifiche classi di stile: wikiterm per il termine e wikiicon per l'apice W.

E' evidente che la procedura si limita ad aggiungere un collegamento ipertestuale ai termini indicati e non effettua alcun controllo sull'esistenza o meno degli stessi nel database di Wikipedia: la funzione di ricerca però, nel caso in cui non trovi la parola cercata, ne propone un elenco per assonanza fonetica o, nella peggiore delle ipotesi, reindirizza alla pagina standard di ricerca dell'enciclopedia libera.

Conclusioni

Questo plug-in è un semplice esperimento di utilizzo del nuovo "extension model" di BlogEngine 1.2: con l'usilio delle regular expressionW e poche linee di codice è stata realizzata una procedura che può essere usata come base di esercizio per implementare qualcosa di più complesso.

Aggiornamento del 6-10-2008

L'estensione è stata aggiornata alla versione 1.1.0: fare riferimento all'articolo dedicato per le nuove funzionalità ed il relativo download.

Altre estensioni (More extensions) ...

Wikipedia Autolink extension 1.0.0 for Blogengine.NET

Go to the updated post for the new release 1.1.0 (in english language also) 

Esprimi il tuo giudizio

Commenti (18) -

Daniele Salamina
Daniele Salamina
16 ott 2007 alle 17:16  01
Interessante... me lo salvo!
Cristiano
Cristiano
16 ott 2007 alle 20:34  02
Ho aggiunto un controllo di consistenza sulla costruzione dell'URI. La localizzazione del dominio viene fatta in base all'host di residenza del blog: se la localizzazione non è compresa fra le lingue supportate da Wikipedia, viene impostata come standard la lingua inglese.
Ti consiglio di scaricare il file aggiornato.
eyeonweb
eyeonweb
18 ott 2007 alle 10:32  03
Molto interessante! soprattutto perchè, lato utente, l'effetto grafico dà subito l'idea di un link approfondito su Wiki.
Sarebbe bello averne uno per wordpress.
Cristiano
Cristiano
18 ott 2007 alle 12:39  04
Non è molto complesso fare un porting in php: se riceverò un sufficiente numero di richieste non ne escludo una futura implementazione.
Dan
Dan
27 gen 2008 alle 06:07  07
Cristiano:

Questa è un'ottima idea e la realizzazione. Sono entusiasta di vedere come funziona sul mio sito.

Grazie!


(Nota: anche grazie a Google per tradurre la pagina!)
Cristiano
Cristiano
27 gen 2008 alle 13:55  08
@ Dan:
Thanks a lot!
You could also write in English, of course Wink
sanghino
sanghino
14 mar 2008 alle 16:17  09
Ciao Cristiano, per riepilogare, il plug-in funziona impostando la localizzazione di residenza del sito/blog in alternativa viene usato l'inglese.
Ma potrebbe essere possibile usare una localizzazione ancora diversa magari passando un parametro ?

Ciao
Francesco
sanghino
sanghino
14 mar 2008 alle 17:02  10
Ciao Cristiano,
sto usando proficuamente il tuo plug-in per wikipedia, ho avuto la necessità però di linkare una voce sull'edizione spagnola, ho così fatto una piccola modifica al sorgente della tua extension:

        string Culture = BlogSettings.Instance.Culture.Substring(0, 2);
        
        if (e.Body.Contains("|"))
            Culture = e.Body.Substring(e.Body.IndexOf("|")+1,2);
            e.Body = e.Body.Replace("|"+Culture, "");

        // if not exist URI then assign Culture = "en" (english Wikipedia)


in pratica scrivendo per esempio [W:Firenze|es] ottengo la voce prelevata dall'edizione spagnola, non esistendo continua a prendere quella inglese, senza specificare "|es" prende la voce italiana.
Che ne pensi ?
Cristiano
Cristiano
14 mar 2008 alle 22:44  11
@ sanghino:
L'idea è buona, ma il codice che hai usato per implementarla non mi sembra corretto, anche se "dovrebbe" funzionare.
Il filtro va applicato sul termine da linkare a wikipedia una volta individuato tramite l'applicazione della regular expression: al posto del "pipe" (|), sarebbe meglio usare il ":", se non altro perchè nel codice c'è già una procedura che individua appunto i termini che finiscono con ":0".
Ti consiglio di riferti a quella per migliorare il codice. Wink
Inoltre non vedo il codice di controllo per il link alla wikipedia in inglese in caso di assenza della voce nella lingua indicata: la riga di codice che hai indicato è un commento !

Ad ogni modo sto provvedendo all'aggiornamento delle estensioni che avevo realizzato per la versione 1.2 di BlogEngine: apporterò senz'altro la modifica che hai proposto perchè mi sembra indiscutibilmente utile Smile
Sanghino
Sanghino
15 mar 2008 alle 00:06  12
@ Cristiano:
Giusta l'osservazione del "pipe" e dei due punti ... modificherò in tal senso l'estensione in attesa della prossima release.
La parte che gestisce il link al wiki inglese c'è sempre, la porzione di codice era solo per indicare dove avevo inserito la mia aggiunta, tutto il resto è rimasto invariato.

Saluti.

Mehmet Aydin Bahadir
Mehmet Aydin Bahadir
06 set 2008 alle 17:01  13
Hey, Cristiano
I wanna to use it for my Turkish blog. Could you explain what must i do to setup it for turkish?
Cristiano
Cristiano
07 set 2008 alle 15:52  14
@ Mehmet Aydin Bahadir:
I believe that the extension works properly even in Turkish language.
The important thing is to have been set correctly the language from the control panel of BlogEngine.NET.
Mehmet Aydin Bahadir
Mehmet Aydin Bahadir
07 set 2008 alle 22:44  15
Okey. Lets ask the question again? How i will setup this extention? I dont know Italiano so i dont understand to setup it. I send the file to app_data folder. Is there anything problem for it? What must i do for setup it? Could you explain for english? Because there is nothing about this extention's use on admin panel.
Cristiano
Cristiano
08 set 2008 alle 01:13  16
@ Mehmet Aydin Bahadir:
The extension must not be configured Wink
Simply copy Wikipedia.Cs into /App_Code/Extensions folder (not in App_Data folder)

Then use this sintax to link word to relative wikipedia definition:

[W:word]
Mehmet Aydin Bahadir
Mehmet Aydin Bahadir
08 set 2008 alle 02:03  17
Oh sorry for i said app_data Smile that was not true. i didn't know syntax for use, thanks for it. But in Turkish, not work it. Link will be automaticly send you english wikipedia. This is last question i promise Smile
Mehmet Aydin Bahadir
Mehmet Aydin Bahadir
08 set 2008 alle 02:15  18
that's ok. i change the {3} code with "tr". The problem was solved. Thank you Cristiano..
dm8
dm8
17 ott 2008 alle 18:00  19
lo hai poi realizzato anche per wordpress?
Cristiano
Cristiano
17 ott 2008 alle 19:06  20

Pingbacks and trackbacks (3)+

Aggiungi Commento

biucitecode
  • Commento
  • Anteprima
Loading


| |   |  

Codice QR

Codice QR - cristianofino.net

Ultimi Commenti