martedì 12 aprile 2016

Esperimenti CognitiveComputing con Bluemix Nodered: un robot che seleziona i tweet belli o brutti


Con Bluemix e Nodered scriviamo un programma che filtri i tweet che contengano delle parole chiave e ci avvisi nel caso siano stati postati dei tweet 'negativi'.

La positività o negatività di un tweet (o di un testo in generale) può essere determinata attraverso una sentiment analysis (usiamo una istruzione di Nodered Bluemix appartenente alla famiglia del cognitive computing - Watson).

Cosa è Nodered
Un linguaggio di programmazione visuale basato sull'idea del flusso: gli statement del programma sono dei blocchetti colorati che possono contenere parametri e statement Javascript e sono connessi tra loro tramite dei fili.

Le applicazioni si disegnano selezionando i blocchetti da una palette e collegandoli.
Nodered è implementato attraverso un ambiente di sviluppo ed esecuzione scritto in Node.Js


Tempo di preparazione: 20 minuti

Difficoltà: Facile

Ingredienti:
  • Un account IBM Bluemix
  • Boilerplate Nodered
  • un account Twitter
  • un account email (opzionale)

Passi:


1) Creazione istanza di una app Nodered

 Dal catalogo Bluemix seleziona il Boilerplate Nodered,
 sulla destra scrivi il nome dell'applicazione (solo caratteri e numeri), scegli il tuo 'space' dove creare l'applicazione e seleziona Create
Dopo circa 30 secondi la tua app sarà attiva ed in esecuzione. Vedrai l'URL in blu, sottolineato.


2) Lancio dell'ambiente di sviluppo

Torna alla tua Dashboard e vedrai il quadrato bianco indicante la nuova app, col pallino verde in basso a sinistra, segno che l'ambiente è running.
Fai click all'interno del quadrato e si aprirà la dashboard dell'applicazione.
Puoi notare che l'applicazione utilizza i due servizi: Node.Js e Cloudant DB, il numero di istanze (1) e l'ammontare di memoria. Lascia tutto come si trova.
In alto, sotto il nome dell'applicazione c'è l'Url alla stessa.
Clicca l'URL e sulla pagina che si apre, clicca su: Go to your Node-RED flow editor.
Si aprirà l'editor grafico, con la palette degli strumenti a sinistra.


3) Scrittura dell'applicazione

Iniziamo a creare la nostra app visuale: vogliamo intercettare tutti i tweet che parlano della nostra città e vogliamo ricevere un'email ogniqualvolta il tweet ne parli molto male!

Dobbiamo accedere a Twitter, quindi selezioniamo il blocchetto twitter dalla sezione social della palette, lo trasciniamo nell'editor, stessa cosa con una sonda per il debug dell'output:



Per far funzionare correttamente il programma bisogna collegare l'account Twitter :
a) doppio click sul blocchetto twitter, valorizzare i campi e scrivere nel campo FOR il nome della città. Nel campo nome scrivete quello che volete (io ho scritto filtro).
b) doppio click sul blocchetto di debug, selezionare la scelta Complete msg object per il campo output.

Collega col mouse i 2 pallini, come in figura e clicca su Deploy in alto a destra.

c) test: a questo punto dovrebbero essere visualizzati i tweet nella colonna output a destra (magari all'inizio è meglio filtrare i tweet per una grande città in modo di essere sicuri che qualche tweet ci sia).

L'output è una successione di record Json a più livelli, a noi interessa il testo del tweet.

d) utilizziamo uno statement di codice per estrarre il testo del tweet: trasciniamo un blocchetto function dalla palette:



In esso (doppio click) scriviamo questo codice:

msg.payload = msg.tweet.text;
return  msg
;


e come suo nome scriviamo: Estrai testo.

Inseriamo anche un'ulteriore sonda di debug in modo da essere sicuri che il flusso funzioni bene. Facendo doppio click su quest'ultimo blocchetto selezioniamo Output = Message Property

Colleghiamo i blocchetti in questo modo:

 
Cliccando su Deploy, dovremmo vedere scorrere nella colonna di output solo i tweet, senza tutti i dati aggiuntivi che vedevamo prima .

NOTA: i blocchetti di debug possono essere abilitati e disabilitati cliccando sul quadratino sporgente a destra di essi. Se il quadratino è verde, l'output verrà visualizzato, se è grigio no.

 e) Sentiment Analysis: trasciniamo il blocchetto sentiment nell'area di lavoro, colleghiamolo a estrai testo ed ad una nuova sonda di debug.
Lo statement Sentiment aggiunge al record iniziale un altra struttura con il campo score. 
Per essere sicuri  che funzioni bene aggiungiamo un'altra funzione che chiamiamo decodifica sentiment col seguente codice:

msg.payload = msg.sentiment.score;
return msg;


Ovviamente non potrà mancare uno statement di debug. Accendendo e spegnendo come nella figura seguente i blocchetti di debug, e facendo Deploy, dovremmo ottenere in output il testo dei tweet seguiti da un numero compreso tra -5 e 5 che indica il 'sentiment' del testo analizzato.




Se tutto funziona possiamo andare a filtrare soltanto i tweet con sentiment negativo.

f) Per fare ciò utilizziamo il blocchetto switch che chiameremo Testa negatività.
al suo interno (doppio click) inseriamo le 2 condizioni esclusive sul campo sentiment.score: 



In pratica il flusso di esecuzione va al primo branch in caso di score <0, sul secondo altrimenti.

Colleghiamo altre 2 sonde ai 2 output dello switch e nella configurazione riportata in figura otterremo in out soltanto i tweet negativi.



g) Ora vogliamo comporre il testo del tweet negativo con il grado di negatività per inoltrarlo poi all'email:
Trasciniamo una nuova Function nell'editor che chiameremo Componi output e vi scriviamo dentro il seguente codice:

msg.payload = msg.tweet.text + " SENTIMENT: " + msg.sentiment.score;
return msg;


La corrediamo dell'immancabile sonda di debug ed in output otterremo soltanto i tweet negativi, con associato il loro valore. Collegando i nuovi blocchetti come in figura e selezionando Deploy si otterrà il risultato voluto (ovviamente solo se arrivano tweet negativi... se non ne arrivano basterà cambiare la condizione nello switch in modo da ricevere qualcosa).



h) EMAIL. A questo punto il nostro robot funziona bene e dobbiamo collegare i risultati alla nostra email, attraverso un account email di servizio che servirà per inoltrare i messaggi.

Trasciniamo il blocchetto email e alimentiamolo con le coordinate di un nostro account di servizio, poi scriviamo l'indirizzo email a cui inoltrare i messaggi ed il gioco è fatto :)



Nessun commento:

Posta un commento