| |
matematica:asd:asd_12:mini_progetto_12 [19/06/2013 alle 10:36 (12 anni fa)] – creata Roberto Grossi | matematica:asd:asd_12:mini_progetto_12 [19/06/2013 alle 10:40 (12 anni fa)] (versione attuale) – Roberto Grossi |
---|
| |
| |
Accedere ai tweet disponibili sui f | Accedere ai tweet disponibili nella [[http://www.di.unipi.it/~grossi/progetto_12.zip|pagina del docente]]. Il file ZIP occupa circa 58 MB e contiene il file ''it.txt'' con 100k tweet, scelti dal file ''id.json'' (che è il vero dump ottenuto da Twitter e da cui sono stati filtrati e semplificati i tweet in ''it.txt''). I tweet sono stati reperiti usando le "Streaming API" di Twitter disponibili pubblicamente https://dev.twitter.com/docs/streaming-apis (grazie a Luca Versari per la raccolta dei tweet). Il contenuto di tali tweet è stato filtrato in modo automatico e, pertanto, alcuni tweet potrebbero risultare poco appropriati (il docente non se ne assume responsabilità, ma il mittente del tweet). |
| |
| Scrivere un programma che legge il file ''it.txt'' da disco e crea un dizionario che permette di cercare una parola nei tweet, riportandone anche i mittenti nel caso ci siano occorrenze. Per esempio, la ricerca di ''Roma'' riporta tutti i tweet che contengono tale parola insieme ai loro mittenti. |
| |
Scrivere un programma che legge il file suddetto da disco e crea un dizionario che permette di cercare una parola nei tweet, riportandone anche i mittenti nel caso ci siano occorrenze. Per esempio, la ricerca di ''Roma'' riporta tutti i tweet che contengono tale parola insieme ai loro mittenti. | Ciascun tweet è presentato come una riga di testo formattata, come mostrato nel seguente esempio: |
| |
| ''{'lang': 'it', 'text': '@pamela_pascucci @Christian_nofx @isle61 @TazzioliClaudia @liviav2501 @LadyCipria @eusai1965 adoro #Roma,ogni volta è #triste doverla lasciare', 'user': {'name': '☀Dany ®', 'screen_name': 'DiComeDaniela'}, 'entities': {'symbols': [], 'user_mentions': [{'indices': [0, 16], 'name': 'Pamela Pascucci', 'screen_name': 'pamela_pascucci'}, {'indices': [17, 32], 'name': 'Christian Cavina\uf8ff♑', 'screen_name': 'Christian_nofx'}, {'indices': [33, 40], 'name': 'Francesca Grosso ', 'screen_name': 'isle61'}, {'indices': [41, 57], 'name': 'La Terry', 'screen_name': 'TazzioliClaudia'}, {'indices': [58, 69], 'name': 'livia ', 'screen_name': 'liviav2501'}, {'indices': [70, 81], 'name': 'Lady Cipria', 'screen_name': 'LadyCipria'}, {'indices': [82, 92], 'name': 'Elena Usai', 'screen_name': 'eusai1965'}], 'hashtags': [], 'urls': []}}'' |
| |
| La sintassi è quella di ''attributo : valore''. Per esempio l'attributo ''lang'' è ''it'' a indicare che il testo del messaggio è in italiano (o per lo meno Twitter ritiene che lo sia). L'attributo ''text'' riporta il testo spedito con il tweet, precisamente ''@pamela_pascucci @Christian_nofx @isle61 @TazzioliClaudia @liviav2501 @LadyCipria @eusai1965 adoro #Roma,ogni volta è #triste doverla lasciare'', dove ogni occorrenza del simbolo ''@'' indica un destinatario e ogni occorrenza del simbolo ''#''indica una parola chiave che si vuole sottolineare (chiamata hashtag e nel nostro esempio ''#Roma'' e ''#triste''). Continuando l'esame del tweet, l'attributo ''user'' è praticamente uno struct (perché il suo valore è racchiuso tra parentesi graffe) contenente ''name'' e ''screen_name'' dell'utente (quest'ultimo è solitamente quello da indicare se si vuole utilizzare ''@'' per spedirgli un tweet). Segue quindi ''entities'', il cui significato è lasciato come esercizio, in modo da imparare a prendere confidenza con la struttura di un tweet. |
| |
| |
| Consigli per l'implementazione: |
| * Per accedere al file ''it.txt'' (e, per chi vuole, al file ''id.json''), conviene evitare di usare le operazioni ''fread'' e ''fwrite'' della libreria standard C/C++. È meglio (= più veloce + più semplice) utilizzare la ''mmap'' disponibile nella stessa libreria. Per un esempio d'uso, scaricare il file C dalla [[http://www.di.unipi.it/~grossi/mm.c|pagina del docente]] |
| |
Nota: progettare strutture di dati che siano efficienti in spazio, vista la dimensione del file di testo in input. | |