budapest users of r network - 2013. november 27

43
Szövegbányászat BURN Meetup, 2013. november 27.

Upload: zoltan-varju

Post on 16-May-2015

563 views

Category:

Technology


0 download

DESCRIPTION

A novemberi R meetup diái http://www.meetup.com/Budapest-Users-of-R-Network/events/147401182/

TRANSCRIPT

Page 1: Budapest Users of R Network - 2013. november 27

SzövegbányászatBURN Meetup, 2013. november 27.

Page 2: Budapest Users of R Network - 2013. november 27

Vázlat

1. Bővebben

2. Odi et amo

3. Előfeldolgozás

4. TermDocumentMatrix

5. Számoljunk szavakat

6. A szavak titkos élete

Page 3: Budapest Users of R Network - 2013. november 27

Kreatív kölcsönzés

• Ingo Feinerer: A text mining framework in R and its applications

• Gaston Sanchez: Mining Twitter with R

• Machine Learning for Hackers

• Natural Language Annotation for Machine Learning

Page 4: Budapest Users of R Network - 2013. november 27

Odi et amo

• Elvileg mindent megcsinálhatunk R-ben

• Elvileg!

• Gyakorlatilag egyszerűbb barkácsolni

Page 5: Budapest Users of R Network - 2013. november 27

Alternatívák

• Python NLTK - átfogó, nagyon jó

• de nem annyira mint az R

• OpenNLP/GATE/UIMA - robosztusabb, gyorsabb, skálázhatóbb

• de nem csak a főbb eljárásokat implementálták

Page 6: Budapest Users of R Network - 2013. november 27

Magyar

• boilerpipe - netes szövegek beszerzésére

• ocamorph - szótövezésre

• hunpos - POS tagging

• Érdemesebb az előfeldolgozást Python-ban végezni (mindegyikhez van wrapper)

• puristák system()

Page 7: Budapest Users of R Network - 2013. november 27

Előfeldolgozás

library(tm)

oz <- Corpus(DirSource("OzBooks/"))

meta(oz, tag = "Author", type = "local") <-

c(rep("Lyman Frank Baum", 3),

rep("Ruth Plumly Thompson", 2))

Page 8: Budapest Users of R Network - 2013. november 27

Előfeldolgozás

# adding metadata

meta(oz, "Heading", "local") <-

c("The Wonderful Wizard of Oz",

"The Marvelous Land of Oz",

"Ozma of Oz",

"The Royal Book of Oz",

"Ozoplaning with the Wizard of Oz")

Page 9: Budapest Users of R Network - 2013. november 27

TermDocumentMatrix

# Term Doc Matrices

ozMatBaum <- TermDocumentMatrix(oz[1:3])

ozMatRoyal <- TermDocumentMatrix(oz[4])

ozMatThompson <- TermDocumentMatrix(oz[5])

Page 10: Budapest Users of R Network - 2013. november 27

TermDocumentMatrix

Page 11: Budapest Users of R Network - 2013. november 27

TermDocumentMatrix

findFreqTerms(x, lowfreq = 0, highfreq = Inf)

findFreqTerms(ozMatBaum, 130)

[1] "after" "all" "and" "\"and"

"answered" "any"

Page 12: Budapest Users of R Network - 2013. november 27

TermDocumentMatrix

removeSparseTerms(x, sparse)

ozMat.sparse <- removeSparseTerms(ozMat,

0.2)

Page 13: Budapest Users of R Network - 2013. november 27

Számoljunk szavakat! (A Twitteren)

library(ROAuth)

library(twitteR)

Page 14: Budapest Users of R Network - 2013. november 27

twitteR

## Twitter login

reqURL <- "https://api.twitter.com/oauth/request_token"

accessURL <- "http://api.twitter.com/oauth/access_token"

authURL <- "http://api.twitter.com/oauth/authorize"

Page 15: Budapest Users of R Network - 2013. november 27

twitteR

consumerKey <- "YourConsumerKey"

consumerSecret <- "YourSecretKey"

Page 16: Budapest Users of R Network - 2013. november 27

twitteR

twitCred <- OAuthFactory$new(consumerKey=consumerKey,

consumerSecret=consumerSecret,

requestURL=reqURL,

accessURL=accessURL,

authURL=authURL)

Page 17: Budapest Users of R Network - 2013. november 27

twitteR

> twitCred$handshake()

To enable the connection, please direct your web browser to:

http://api.twitter.com/oauth/authorize?oauth_token=XXXXXjRac3X3XX4dGrCVhXXXXXW22VycNXFb6U

When complete, record the PIN given to you and provide it here: XXXXXXX

> registerTwitterOAuth(twitCred)

[1] TRUE

• RStudio momentán nem képes ezt kezelni!!!!

Page 18: Budapest Users of R Network - 2013. november 27

twitteR

tomi_tweets <- userTimeline("dajcstomi", n=500)

# tweets dataframe

tomi_df <- twListToDF(tomi_tweets)

# get the text

tomi_txt <- tomi_df$text

Page 19: Budapest Users of R Network - 2013. november 27

Normalizálás 1. - gsub()

# remove punctuation symbols

tomi_clean <- gsub("[[:punct:]]", "", tomi_txt)

# remove numbers

tomi_clean <- gsub("[[:digit:]]", "", tomi_clean)

Page 20: Budapest Users of R Network - 2013. november 27

Normalizálás 2. - tm_map()

# corpus

tomi_corpus <- Corpus(VectorSource(tomi_txt))

# convert to lower case

tomi_corpus <- tm_map(tomi_corpus, tolower)

Page 21: Budapest Users of R Network - 2013. november 27

Normalizálás 2. - tm_map()

# remove stoprwords

tomi_corpus <- tm_map(tomi_corpus, removeWords, c(stopwords("hungarian"),

"dajcstomi"))

# remove extra white-spaces

tomi_corpus <- tm_map(tomi_corpus, stripWhitespace)

Page 22: Budapest Users of R Network - 2013. november 27

Normalizálás 2. - tm_map()

# stem document

tomi_corpus <- tm_map(tomi_corpus, stemDocument, language="hungarian")

# term-document matrix

tdm <- TermDocumentMatrix(tomi_corpus)

Page 23: Budapest Users of R Network - 2013. november 27

@dajcstomi

# characters per tweet

> chars_per_tweet <- sapply(tomi_clean, nchar)

> summary(chars_per_tweet)

Min. 1st Qu. Median Mean 3rd Qu. Max.

0.00 50.00 92.00 82.97 118.00 138.00

Page 24: Budapest Users of R Network - 2013. november 27

@dajcstomi

# words per tweet

words_per_tweet <-

sapply(words_list, length)

Page 25: Budapest Users of R Network - 2013. november 27

@dajcstomi

uniq_words <-

sapply(words_list,

function(x) length(unique(x)))

Page 26: Budapest Users of R Network - 2013. november 27

@dajcstomi

# most frequent words

mfw <-

sort(table(unlist(words_list)),

decreasing=TRUE)

# top-20

top20 <- head(mfw, 20)

Page 27: Budapest Users of R Network - 2013. november 27

@dajcstomi vs webkorpusz

Page 28: Budapest Users of R Network - 2013. november 27

Szógyakoriság – mit mond?

rezsi_corpus <- Corpus(VectorSource(rezsi_txt))

rezsi_corpus <- tm_map(rezsi_corpus, tolower)

rezsi_corpus <- tm_map(rezsi_corpus, removeWords, stopwords("hungarian"))

rezsi_corpus <- tm_map(rezsi_corpus, stripWhitespace)

rezsi_corpus <- tm_map(rezsi_corpus, stemDocument, language="hungarian")

rezsi.tdm <- TermDocumentMatrix(rezsi_corpus)

rezsi.m <- as.matrix(rezsi.tdm)

rezsi.tdm2 <- removeSparseTerms(rezsi.tdm, sparse=0.95)

Page 29: Budapest Users of R Network - 2013. november 27

Szógyakoriság

• eltérünk Zipf-től

• extrém eset

Page 30: Budapest Users of R Network - 2013. november 27

Szógyakoriság

library(cluster)

library(FactoMineR)

Page 31: Budapest Users of R Network - 2013. november 27

Szófelhő

tweets <- searchTwitter("fidesz OR mszp", n=1000, lang="hu")

Page 32: Budapest Users of R Network - 2013. november 27

Szófelhő

word_freqs <- sort(rowSums(m), decreasing=TRUE)

dm <- data.frame(word=names(word_freqs), freq=word_freqs)

wordcloud(dm$word, dm$freq, random.order=FALSE, colors=brewer.pal(8, "Dark2"))

Page 33: Budapest Users of R Network - 2013. november 27

Szófelhő

Page 34: Budapest Users of R Network - 2013. november 27

Összehasonlító szófelhők# Bajnai Gordon

bg_tweets = userTimeline("Bajnai_Gordon", n=1000)

# Mesterházy Attila

ma_tweets = userTimeline("mesterhazymszp", n=1000)

# Deutsch Tamás

dt_tweets = userTimeline("dajcstomi", n=1000)

# Szanyi Tibor

st_tweets = userTimeline("szanyitibor", n=1000)

# Jávor Benedek

jb_tweets = userTimeline("javorbenedek", n=1000)

Page 35: Budapest Users of R Network - 2013. november 27

Comparison

comparison.cloud(tdm,

random.order=FALSE,

colors = c("#00B2FF",

"red",

"#FF0099",

"#6600CC",

"brown"),

title.size=1)

Page 36: Budapest Users of R Network - 2013. november 27

Commonality

commonality.cloud(tdm,

random.order=FALSE,

colors = brewer.pal(8, "Dark2"),

title.size=1)

Page 37: Budapest Users of R Network - 2013. november 27

Mi a baj a szófelhőkkel?

• Gyakorisági táblák, csak szebbek• Nem mondanak el semmit egy szövegről,

normális esetben• Több szövegről nem képesek beszélni• Túl kell lépni rajtuk!

Page 38: Budapest Users of R Network - 2013. november 27

Szófelhők helyett

• Összehasonlító szófelhő• Közös előfordulások ábrázolása• Conway szófelhő

Page 39: Budapest Users of R Network - 2013. november 27
Page 40: Budapest Users of R Network - 2013. november 27

Ami kimaradt

• Dokumentum összehasonlítás• Információkinyerés (IR) és keresés• Korpusznyelvészet – pl. mutual information,

Google sets• Entity extraction, relation mining• POS tagging, stemming, szemantika

Page 41: Budapest Users of R Network - 2013. november 27

Take-home message

• NLP pipeline (előfeldolgozás, normalizálás, elemzés)

• Barkácsolás (nyugodtan használd amit a neten találsz)

• Értelmezés (a szövegbányászat sokszor nem technikai, hanem értelmezési probléma)

Page 42: Budapest Users of R Network - 2013. november 27

A szavak titkos élete

• Pennebaker: The Secret Life of Pronouns• Miller: Spent• Szentiment- és emócióelemzés

Page 43: Budapest Users of R Network - 2013. november 27

Köszönöm a figyelmet!

@zoltanvarju

Kereső Világ http://kereses.blog.hu/

[email protected]