Egy rövid project (twitter sentiment analysis with vaderSentiment method) keretein belül az rPython csomagot használtuk és az ezzel kapcsolatos tapasztalatot szeretnénk most megosztani.
A project során tweet-ket gyűjtöttünk és egy adattáblába szerveztük őket. Ezután a python nyelven megírt VaderSentiment módszerrel elemeztük a tweeteket. A módszer lényege, hogy egy adott szöveget a benne lévő szavak, hangulatjelek és egyéb más rövidítések (pl.: LOL stb.) alapján számít ki 4 értéket (negatív, neutrális, pozitív és összesített).
Egy példa, a kapcsos zárójelben a számított értékek:
“VADER is smart, handsome, and funny.”
{‘neg’: 0.0, ‘neu’: 0.254, ‘pos’: 0.746, ‘compound’: 0.8316}
Értékelés:
A mondatban nem volt negatív töltésű rész. Körülbelül a szöveg ~25%-a semleges, míg a maradék ~75% pozitív kincsengésű volt. Összességében a normalizált “compound” érték 0.83 volt (-1 és 1 között lehet). Ha > 0.05, akkor pozitív, ha < -0.05, akkor negatív töltöttségű a szöveg. Ha ez az érték -0.05 és 0.05 között van, akkor semlegesnek tekinthető. Bővebb leírás itt.
50 darab tweet a #ecology tag-re keresve….adat
01 # rPython csomag betöltése
02 library(rPython)03 04 # a tweet-ek behívása
05 tweet<-as.character(readLines("tweet_data.txt"))06 07 # a tweet-ek tisztítása: #,@ jelek törlése a szövegekből.
08 tweet<-gsub("#","",tweet)09 tweet<-gsub("@","",tweet)10 tweet<-gsub("\"","",tweet)11 tweet<-gsub("\n","",tweet)12 13 # a változó átalakítása, hogy a python scriptbe tudjuk ágyazni
14 # idézőjeleket teszünk a tweet-ek elejére és végére
15 tweet<-paste("\"",tweet,"\"",sep="")16 # vessző hozzáfűzése minden tweet végéhez az idézőjel után,
17 # kivéve az utolsó sornál
18 tweet[1:(length(tweet)-1)]<-paste(tweet[1:(length(tweet)-1)],",",sep="")19 20 # python fájl kiírása egy fájlba
21 # a számított értékeket először a "bs" változóba tároljuk, majd
22 # a "mylist" listába gyűjtjük össze az összeset és ezt adjuk át az R-nek
23 fajl<-"tweet_vaderSentiment.py"24 cat("from vaderSentiment.vaderSentiment import sentiment as vaderSentiment\n", file =fajl)25 cat("sentences = [\n",file=fajl,append=T)26 cat(paste(" ",tweet,sep="\n"),file=fajl,append=T)27 cat(" \n",file=fajl,append=T)28 cat(" ]\n",file=fajl,append=T)29 cat("mylist=[]\n",file=fajl,append=T)30 cat("for sentence in sentences:\n",file=fajl,append=T)31 cat(" bs=vaderSentiment(sentence)\n",file=fajl,append=T)32 cat(" mylist.append(bs)\n",file=fajl,append=T)33 34 # python kód betöltése és futtatása
35 python.load("tweet_vaderSentiment.py")36 # az eredmények átemelése R-be
37 res.tweet<-python.get("mylist")38 # az adatok adattáblába rendezése
39 res.tweet<-as.data.frame(do.call(rbind,res.tweet))40 41 # az összesített eredmények egyszerű ábrázolása
42 plot(res.tweet$compound,main="Results of Vader Sentiment analysis",xlab="",ylab="compound values")43 abline(h=0.05,col="red")44 abline(h=-0.05,col="red")45 text(50,-0.7,"negative")46 text(50,0.8,"positive")47 text(2,0.08,"neutral")
Az R és a python együttes használatával egy olyan eszköztárat kapunk, amivel gyakorlatilag bármilyen problémát meg lehet oldani! 🙂