/TwitterFocusedCrawler

Un tool per cercare TWEET su un determinato TOPIC utilizzando tecniche di clustering e crawling intelligente.

Primary LanguageJava

TWITTER FOCUSED CRAWLER

Ricerca autonoma di informazioni (focused e intelligent crawler): valutare tecniche di crawling intelligente sul social network TWITTER per trovare informazioni rilevanti impiegando non solo le search API.

Un tool per cercare TWEET su un determinato TOPIC utilizzando tecniche di clustering e crawling intelligente.

APIs e LIBRERIE utilizzate:

  • NewsAPI: libreria REST per cercare e recuperare articoli (news) da tutto il web e popolare il database delle news;
  • Unirest4j: comoda libreria per fare richieste HTTP;
  • BoilerPIPE: libreria Google per estrarre testo dalle pagine HTML;
  • TAGme4j: TagMe API client per applicazioni Java;
  • MONGOdb: database noSQL per la memorizzazione semplice dei dati persistenti;
  • Jongo: libreria per fare il cast al volo dei dati estratti da mongoDB nelle relative classi;
  • WEKA: libreria per eseguire gli algoritmi di apprendimento automatico e di data mining;
  • TWITTER4j: libreria per interfacciarsi con le API e lo stream di twitter.

APIKEYs da INSERIRE

ESECUZIONE del CODICE

N.B. Ogni passo della classe Main è autocontenuto ed apparte alcune dipendenze dei parametri dei metodi, ogni passo può essere eseguito in maniera totalmente indipendente dagli altri in quanto memorizza/preleva dati direttamente dal database.

E' necessario creare preliminarmente i seguenti database Mongo con le seguenti collezioni:

  • tfc -> news, news2annotations, label1, label2, label3, cluster0, cluster1, cluster2, cluster3;
  • twitterDB -> en, smooth, tweet2hashtag, hashtag2vec, tweetONtopic, wordsONtopic.

ALGORITMI IMPLEMENTATI

  1. CLUSTERING ONE - ottenuto dal testo delle news filtrando le stopwords ed eseguendo stemming del testo per poi utilizzare il TF-IDF per clusterizzare
ESECUZIONE CLUSTERING ONE:
  1. CLUSTERING TWO - ottenuto dal testo delle news e basato sulla probabilità dei link delle annotazioni di TagMe
ESECUZIONE CLUSTERING TWO:
  1. CLUSTERING THREE - clustering del clustering di supporto (clustering 0) creato con il grado di relatività tra annotazioni di TagMe e basato sulla media delle probabilità dei link delle annotazioni di TagMe all'interno dei cluster
ESECUZIONE CLUSTERING THREE:
  1. SMOOTHING STREAMS con Normalized Stupid Backoff - focused crawler ottimizzato su un determinato lessico attuale (background) e addestrato su un determinato topic in continuo aggiornamento (coda runtime) che verrà selezionato in automatico tra i top topics dell'ultimo clustering e i topic ottenuti facendo uno stream di tutti i tweets di twitter per qualche giorno/settimana
ESECUZIONE SMOOTHING STREAMS:
  • TweetPopulate : popola il background di twitter (lasciarlo in esecuzione per qualche giorno..);
  • TweetSmoothingStreams : apre lo stream di twitter ed esegue il focused crawler in real time memorizzando solo i tweet pertinenti.

SVILUPPI

Per quanto riguarda i clustering è evidente che sarebbe necessaria una maggiore ricchezza di news su cui basare i diversi clustering, che magari potrebbero scaturire da altre APIs (da testare) che magari renderebbero più ricca la base da cui far partire i clustering.

Per quanto riguarda lo smoothing stream invece sarebbe interessante creare un background di tweet molto più corposo, magari accumulando tweet per un intero mese e andarlo a integrare tenendo conto anche del CLUSTERING ONE come corpus linguistico; si vede infatti una notevole presenza di parole rumorose come FOLLOW o CLICK e altre, che dovrebbero essere rimosse in quanto non costituiscono contenuto informativo riguardante un topic in particolare.

Risulta poi difficile il settaggio della soglia di perplessità dello Smoothing Stream in quanto dipende fortemente dal numero di parole del tweet, quindi magari sarebbe interessante trovare un modo per settarlo in automatico, oppure modificare tale misura per renderla indipendente dal numero di parole del tweet.