Progetto d'esame per MAADB
Python 3.9
Descrizione progetto
Materiale per progetto software su Twitter
-
Eliminare USERNAME e URL
-
estrae gli hashtag
-
estrae emoji ed emoticons
-
tokenization, lemmatization and pos tagging con spacy
-
riconoscere le forme di slang e sostituirle con le forme lunghe
-
eliminare stop words
-
rimuove punteggiatura, parole mal formate ed eventuali caratteri speciali
-
trasformare tutto a lower case
Ho usato re
e spacy
{
int: {
"id":i,
"frase_ripulita": str,
"hashtags":list(str),
"emoticons":list(str),
"emojis":list(str),
'parole': list(
{
token: str,
lemma: str,
pos: str,
}
)
}
}
es.
{
0:{
'id': 0,
'frase_ripulita': " f u what's that spell ? fired up ? noo haha \n",
'hashtags': ['#fuckyou'],
'emoticons': [],
'emojis': [],
'parole': [{'token': "'s", 'lemma': 'be', 'pos': 'VERB'},{'token': 'spell', 'lemma': 'spell', 'pos': 'NOUN'}, {'token': 'fired', 'lemma': 'fire', 'pos': 'VERB'}, {'token': 'noo', 'lemma': 'noo', 'pos': 'VERB'}, {'token': 'haha', 'lemma': 'haha', 'pos': 'NOUN'}]
},
1: {
'id': 1,
'frase_ripulita': "now all of you roll tide bandwagon fans will hop off alabama's dick . one wor d: overrated . \n",
'hashtags': [],
'emoticons': [],
'emojis': [],
'parole': [{'token': 'roll', 'lemma': 'roll', 'pos': 'VERB'}, {'token': 'tide', 'lemma': 'tide', 'pos': 'NOUN'}, {'token': 'bandwagon', 'lemma': 'bandwagon', 'pos': 'NOUN'}, {'token': 'fans', 'lemma': 'fan', 'pos': 'NOUN'}, {'token': 'hop', 'lemma': 'hop', 'pos': 'VERB'}, {'token': 'alabama', 'lemma': 'alabama', 'pos': 'NOUN'}, {'token': "'s", 'lemma': "'s", 'pos': 'PART'}, {'token': 'dick', 'lemma': 'dick', 'pos': 'NOUN'}, {'token': 'one', 'lemma': 'one', 'pos': 'NUM'}, {'token': 'wor', 'lemma': 'wor', 'pos': 'NOUN'}, {'token': 'overrated', 'lemma': 'overrated', 'pos': 'ADJ'}]
},
}
Database dove mantenere le risorse lessicali e i messaggi di twitter (questi poi verranno recuperati come uno stream teoricamente infinito di dati)
Per ogni collezione corrispondente ad una emozione abbiamo il seguente schema:
{
_id: ObjectId(...),
messaggio: str,
}
Per ogni collezione corrispondente ad una emozione abbiamo il seguente schema:
{
_id: ObjectId(...),
lemma:str,
risorse: {
EmoSN: Optional[int],
NRC: Optional[int],
sentisense: Optional[int],
nuova_risorsa: Optional[int],
}
}
Per ogni collezione corrispondente ad una emozione abbiamo il seguente schema:
{
_id: ObjectId(...),
token: str,
lemma: Optional[str],
pos: Optional[str],
tipo: <"word","emoji","emoticon","hashtag">,
}
a cui verrà aggiunto il campo quant
(quantità del lemma trovato)
emoticon
hashtag
{
_id: str,
quantita: int,
tipo: str,
}
database dove mantenere le statistiche elaborate richieste:
- per ogni emozione (sentimento) dove X è un tipo di risorsa e Y è un sentimento:
- parole più frequenti nei tweet (graficamente visualizzate con una word cloud)
- emoji più frequenti nei tweet (graficamente visualizzate con una word cloud)
- emoticons più frequenti nei tweet (graficamente visualizzate con una word cloud)
- hashtags più frequenti nei tweet
- la percentuale delle parole delle risorse lessicali presenti nei tweets: perc_persence_lex_words(X,Y) (visualizzarle con un istogramma)
- raccogliere le parole nuove presenti nei tweets ma non nelle risorse lessicali (N_twitter_words(Y)- N_shared_words(X,Y))
Memorizzare le nuove_parole trovate nei tweet ma assenti nelle risorse fornite (se alla fine del conteggio saranno altamente presenti avremo trovato nuova parole da aggiungere alle risorse o avremo creato una risorsa aggiuntiva!)
Bisogna ipotizzare che i dati siano sharded, quindi divisi su più server
- Quando si ottengono le statistiche (è un'aggregazione, una reduce)
- Per aggregare gli stessi lemmi trovati nei messaggi e contarli
- emoticons
- emoji (ho usato una lib)
- risorse lessicali EmoSN, sentisense, NRC
USERNAME : indica un username di un utente Twitter.
URL : indica un url.
Altri tag potrei cercarli con uno script python
Ricordiamo il modello delle emozioni che dobbiamo considerare nel progetto
Adesso vediamo invece come sono organizzate le risorse a disposizione:
-
Ogni cartella contiene risorse su una determinata emozione ad eccezione di:
_MACOSX
inutileConScore
contiene tsv file per associare ad ogni valore uno scoreNeg
ePos
contengono parole rispettivamente Negative e PositiveLike-Love
sembrerebbe contenere parole di queste due emozioni, comunque in file separatiDisgust-Hate
come sopra
-
Ci sono 3 tipi di file:
EmoSN_<emozione>.txt
NRC_<emozione>.txt
sentisense_<emozione>.txt
-
Le emozioni presenti sono:
- Anger
- Anticipation
- Disgust
- Hate
- Fear
- Hope
- Joy
- Like
- Love
- Sadness
- Surprise
- Trust
Quelle in grassetto sono le emozioni presenti anche nei file di Twitter messaggi
col seguente formato dataset_dt_<emozione.lower()>_60k.txt
- EmoSN: EmoSenticNet includes 13,189 entries for the six Ekman’s emotions of Joy, Sadness, Anger, Fear, Surprise and Disgust. The resource was developed by assigning WordNet Affect emotion labels to SenticNet concepts [Poria et al. 2013; Poria et al. 2014]. The last one is a list of common-sense knowledge concepts with a polarity score [Cambria et al. 2014] referring to the multidisciplinary approach of Sentic Computing [Cambria and Hussain 2015].
- SS: SentiSense is a concept-based affective lexicon with a wide set of categories developed by Carrillo de Albornoz [Carrillo de Albornoz et al. 2012], including 5,496 words and 2,190 synsets from WordNet, labeled with an emotion from a set of 14 categories.
- ANEW: The dictionary Affective Norms for English Words includes terms rated from 1 to 9 for each of the three dimensions of Valence, Arousal and Dominance.
- DAL: The Dictionary of Affective Language developed by Whissell [Whissell 2009] contains words belonging to the dimensions of Pleasantness, Activation and Imagery. The 8,742 terms are rated in a three-point scale.
- Per operare le generalizzazioni è più facile con MongoDB poichè i documenti si adattano più facilmente alle specializzazioni. In un futuro potrebbero aumentare le specializzazioni e quindi il modello di database a documento risulta più flessibile
Admin
Admin
mongodb+srv://admin:admin@cluster0.9ajjj.mongodb.net/
root
nessuna
jdbc:mysql://localhost:3306?serverTimezone=UTC