SlideShare a Scribd company logo
1 of 43
Szövegbányászat
BURN Meetup, 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
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
Odi et amo

•
•
•

Elvileg mindent megcsinálhatunk R-ben
Elvileg!
Gyakorlatilag egyszerűbb barkácsolni
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
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()
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))
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")
TermDocumentMatrix
# Term Doc Matrices
ozMatBaum <- TermDocumentMatrix(oz[1:3])
ozMatRoyal <- TermDocumentMatrix(oz[4])
ozMatThompson <TermDocumentMatrix(oz[5])
TermDocumentMatrix
TermDocumentMatrix
findFreqTerms(x, lowfreq = 0, highfreq = Inf)
findFreqTerms(ozMatBaum, 130)

[1] "after"

"all"

"answered" "any"

"and"

""and"
TermDocumentMatrix
removeSparseTerms(x, sparse)
ozMat.sparse <- removeSparseTerms(ozMat,
0.2)
Számoljunk szavakat! (A Twitteren)
library(ROAuth)
library(twitteR)
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"
twitteR
consumerKey <- "YourConsumerKey"
consumerSecret <- "YourSecretKey"
twitteR
twitCred <- OAuthFactory$new(consumerKey=consumerKey,
consumerSecret=consumerSecret,
requestURL=reqURL,
accessURL=accessURL,
authURL=authURL)
twitteR
> twitCred$handshake()
To enable the connection, please direct your web browser to:
http://api.twitter.com/oauth/authorize?oauth_token=XXXXXjRac3X3XX4dGrC
VhXXXXXW22VycNXFb6U
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!!!!
twitteR
tomi_tweets <- userTimeline("dajcstomi", n=500)
# tweets dataframe
tomi_df <- twListToDF(tomi_tweets)
# get the text
tomi_txt <- tomi_df$text
Normalizálás 1. - gsub()
# remove punctuation symbols
tomi_clean <- gsub("[[:punct:]]", "", tomi_txt)
# remove numbers
tomi_clean <- gsub("[[:digit:]]", "", tomi_clean)
Normalizálás 2. - tm_map()
# corpus
tomi_corpus <Corpus(VectorSource(tomi_txt))
# convert to lower case
tomi_corpus <- tm_map(tomi_corpus, tolower)
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)
Normalizálás 2. - tm_map()
# stem document
tomi_corpus <- tm_map(tomi_corpus,
stemDocument, language="hungarian")
# term-document matrix
tdm <- TermDocumentMatrix(tomi_corpus)
@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
@dajcstomi
# words per tweet
words_per_tweet <sapply(words_list, length)
@dajcstomi
uniq_words <sapply(words_list,
function(x) length(unique(x)))
@dajcstomi
# most frequent words
mfw <sort(table(unlist(words_list)),
decreasing=TRUE)
# top-20
top20 <- head(mfw, 20)
@dajcstomi vs webkorpusz
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)
Szógyakoriság

•
•

eltérünk Zipf-től
extrém eset
Szógyakoriság
library(cluster)
library(FactoMineR)
Szófelhő
tweets <- searchTwitter("fidesz OR mszp",
n=1000, lang="hu")
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"))
Szófelhő
Ö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)
Comparison
comparison.cloud(tdm,
random.order=FALSE,
colors = c("#00B2FF",
"red",
"#FF0099",
"#6600CC",
"brown"),
title.size=1)
Commonality
commonality.cloud(tdm,
random.order=FALSE,
colors = brewer.pal(8, "Dark2"),
title.size=1)
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!
Szófelhők helyett
• Összehasonlító szófelhő
• Közös előfordulások ábrázolása
• Conway szófelhő
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
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)
A szavak titkos élete
• Pennebaker: The Secret Life of Pronouns
• Miller: Spent
• Szentiment- és emócióelemzés
Köszönöm a figyelmet!
@zoltanvarju
Kereső Világ http://kereses.blog.hu/
zoltan.varju@precognox.com

More Related Content

More from Zoltan Varju

Szövegbányászat a gyakorlatban
Szövegbányászat a gyakorlatbanSzövegbányászat a gyakorlatban
Szövegbányászat a gyakorlatbanZoltan Varju
 
Szövegbányászat
SzövegbányászatSzövegbányászat
SzövegbányászatZoltan Varju
 
Balogh Kitti: Szövegbányászat
Balogh Kitti: SzövegbányászatBalogh Kitti: Szövegbányászat
Balogh Kitti: SzövegbányászatZoltan Varju
 
Balogh Kitti - Szűcs Krisztina - Varjú Zoltán: TechTea: Szövegvizualizációk a...
Balogh Kitti - Szűcs Krisztina - Varjú Zoltán: TechTea: Szövegvizualizációk a...Balogh Kitti - Szűcs Krisztina - Varjú Zoltán: TechTea: Szövegvizualizációk a...
Balogh Kitti - Szűcs Krisztina - Varjú Zoltán: TechTea: Szövegvizualizációk a...Zoltan Varju
 
Kisvilágunk, a nyelv
Kisvilágunk, a nyelvKisvilágunk, a nyelv
Kisvilágunk, a nyelvZoltan Varju
 
Balogh Kitti - Szűcs Krisztina: Képes beszéd
Balogh Kitti - Szűcs Krisztina: Képes beszédBalogh Kitti - Szűcs Krisztina: Képes beszéd
Balogh Kitti - Szűcs Krisztina: Képes beszédZoltan Varju
 
Balogh Kitti: Politika a sorok között - Politikai témájú szövegelemzések
Balogh Kitti: Politika a sorok között - Politikai témájú szövegelemzésekBalogh Kitti: Politika a sorok között - Politikai témájú szövegelemzések
Balogh Kitti: Politika a sorok között - Politikai témájú szövegelemzésekZoltan Varju
 
Érzelmek hálójában – hálózat- és tartalomelemzés
Érzelmek hálójában – hálózat- és tartalomelemzésÉrzelmek hálójában – hálózat- és tartalomelemzés
Érzelmek hálójában – hálózat- és tartalomelemzésZoltan Varju
 
Szabó - Varjú: Automatikus értékelés- és érzelemelemzés magyar nyelvű szöveg...
Szabó - Varjú: Automatikus  értékelés- és érzelemelemzés magyar nyelvű szöveg...Szabó - Varjú: Automatikus  értékelés- és érzelemelemzés magyar nyelvű szöveg...
Szabó - Varjú: Automatikus értékelés- és érzelemelemzés magyar nyelvű szöveg...Zoltan Varju
 
Mókus (Koncsik Anita, Varjú Zoltán)
Mókus (Koncsik Anita, Varjú Zoltán)Mókus (Koncsik Anita, Varjú Zoltán)
Mókus (Koncsik Anita, Varjú Zoltán)Zoltan Varju
 
Születésház - Adatozz okosan hackathon (Schmidt Erika, Balogh Kitti, Hudy Rób...
Születésház - Adatozz okosan hackathon (Schmidt Erika, Balogh Kitti, Hudy Rób...Születésház - Adatozz okosan hackathon (Schmidt Erika, Balogh Kitti, Hudy Rób...
Születésház - Adatozz okosan hackathon (Schmidt Erika, Balogh Kitti, Hudy Rób...Zoltan Varju
 
Sorok között olvasni
Sorok között olvasniSorok között olvasni
Sorok között olvasniZoltan Varju
 
Danics Szabina Lívia: A magyar és az orosz melléknévi igenevek a megfelelteté...
Danics Szabina Lívia: A magyar és az orosz melléknévi igenevek a megfelelteté...Danics Szabina Lívia: A magyar és az orosz melléknévi igenevek a megfelelteté...
Danics Szabina Lívia: A magyar és az orosz melléknévi igenevek a megfelelteté...Zoltan Varju
 
Rasztik Zita: A стартовать jövevényszó fejlődési útja
Rasztik Zita: A стартовать jövevényszó fejlődési útjaRasztik Zita: A стартовать jövevényszó fejlődési útja
Rasztik Zita: A стартовать jövevényszó fejlődési útjaZoltan Varju
 
Kontextus és a hivatkozások ereje
Kontextus és a hivatkozások erejeKontextus és a hivatkozások ereje
Kontextus és a hivatkozások erejeZoltan Varju
 
Simon Eszter: Silver standard korpuszok tulajdonnév-felismeréshez
Simon Eszter: Silver standard korpuszok tulajdonnév-felismeréshezSimon Eszter: Silver standard korpuszok tulajdonnév-felismeréshez
Simon Eszter: Silver standard korpuszok tulajdonnév-felismeréshezZoltan Varju
 
Vincze Veronika: Korpuszok az információkinyerésben
Vincze Veronika: Korpuszok az információkinyerésben Vincze Veronika: Korpuszok az információkinyerésben
Vincze Veronika: Korpuszok az információkinyerésben Zoltan Varju
 
Miháltz Márton: Magyar wordnet
Miháltz Márton: Magyar wordnetMiháltz Márton: Magyar wordnet
Miháltz Márton: Magyar wordnetZoltan Varju
 
Ács Judit: Online soknyelvű szótárak
Ács Judit: Online soknyelvű szótárakÁcs Judit: Online soknyelvű szótárak
Ács Judit: Online soknyelvű szótárakZoltan Varju
 

More from Zoltan Varju (20)

Szövegbányászat a gyakorlatban
Szövegbányászat a gyakorlatbanSzövegbányászat a gyakorlatban
Szövegbányászat a gyakorlatban
 
Szövegbányászat
SzövegbányászatSzövegbányászat
Szövegbányászat
 
Balogh Kitti: Szövegbányászat
Balogh Kitti: SzövegbányászatBalogh Kitti: Szövegbányászat
Balogh Kitti: Szövegbányászat
 
Balogh Kitti - Szűcs Krisztina - Varjú Zoltán: TechTea: Szövegvizualizációk a...
Balogh Kitti - Szűcs Krisztina - Varjú Zoltán: TechTea: Szövegvizualizációk a...Balogh Kitti - Szűcs Krisztina - Varjú Zoltán: TechTea: Szövegvizualizációk a...
Balogh Kitti - Szűcs Krisztina - Varjú Zoltán: TechTea: Szövegvizualizációk a...
 
Kisvilágunk, a nyelv
Kisvilágunk, a nyelvKisvilágunk, a nyelv
Kisvilágunk, a nyelv
 
Balogh Kitti - Szűcs Krisztina: Képes beszéd
Balogh Kitti - Szűcs Krisztina: Képes beszédBalogh Kitti - Szűcs Krisztina: Képes beszéd
Balogh Kitti - Szűcs Krisztina: Képes beszéd
 
Balogh Kitti: Politika a sorok között - Politikai témájú szövegelemzések
Balogh Kitti: Politika a sorok között - Politikai témájú szövegelemzésekBalogh Kitti: Politika a sorok között - Politikai témájú szövegelemzések
Balogh Kitti: Politika a sorok között - Politikai témájú szövegelemzések
 
Érzelmek hálójában – hálózat- és tartalomelemzés
Érzelmek hálójában – hálózat- és tartalomelemzésÉrzelmek hálójában – hálózat- és tartalomelemzés
Érzelmek hálójában – hálózat- és tartalomelemzés
 
Szabó - Varjú: Automatikus értékelés- és érzelemelemzés magyar nyelvű szöveg...
Szabó - Varjú: Automatikus  értékelés- és érzelemelemzés magyar nyelvű szöveg...Szabó - Varjú: Automatikus  értékelés- és érzelemelemzés magyar nyelvű szöveg...
Szabó - Varjú: Automatikus értékelés- és érzelemelemzés magyar nyelvű szöveg...
 
Mókus (Koncsik Anita, Varjú Zoltán)
Mókus (Koncsik Anita, Varjú Zoltán)Mókus (Koncsik Anita, Varjú Zoltán)
Mókus (Koncsik Anita, Varjú Zoltán)
 
Születésház - Adatozz okosan hackathon (Schmidt Erika, Balogh Kitti, Hudy Rób...
Születésház - Adatozz okosan hackathon (Schmidt Erika, Balogh Kitti, Hudy Rób...Születésház - Adatozz okosan hackathon (Schmidt Erika, Balogh Kitti, Hudy Rób...
Születésház - Adatozz okosan hackathon (Schmidt Erika, Balogh Kitti, Hudy Rób...
 
Sorok között olvasni
Sorok között olvasniSorok között olvasni
Sorok között olvasni
 
Danics Szabina Lívia: A magyar és az orosz melléknévi igenevek a megfelelteté...
Danics Szabina Lívia: A magyar és az orosz melléknévi igenevek a megfelelteté...Danics Szabina Lívia: A magyar és az orosz melléknévi igenevek a megfelelteté...
Danics Szabina Lívia: A magyar és az orosz melléknévi igenevek a megfelelteté...
 
Rasztik Zita: A стартовать jövevényszó fejlődési útja
Rasztik Zita: A стартовать jövevényszó fejlődési útjaRasztik Zita: A стартовать jövevényszó fejlődési útja
Rasztik Zita: A стартовать jövevényszó fejlődési útja
 
Kontextus és a hivatkozások ereje
Kontextus és a hivatkozások erejeKontextus és a hivatkozások ereje
Kontextus és a hivatkozások ereje
 
Simon Eszter: Silver standard korpuszok tulajdonnév-felismeréshez
Simon Eszter: Silver standard korpuszok tulajdonnév-felismeréshezSimon Eszter: Silver standard korpuszok tulajdonnév-felismeréshez
Simon Eszter: Silver standard korpuszok tulajdonnév-felismeréshez
 
Vincze Veronika: Korpuszok az információkinyerésben
Vincze Veronika: Korpuszok az információkinyerésben Vincze Veronika: Korpuszok az információkinyerésben
Vincze Veronika: Korpuszok az információkinyerésben
 
Felhívás
FelhívásFelhívás
Felhívás
 
Miháltz Márton: Magyar wordnet
Miháltz Márton: Magyar wordnetMiháltz Márton: Magyar wordnet
Miháltz Márton: Magyar wordnet
 
Ács Judit: Online soknyelvű szótárak
Ács Judit: Online soknyelvű szótárakÁcs Judit: Online soknyelvű szótárak
Ács Judit: Online soknyelvű szótárak
 

Budapest Users of R Network - 2013. november 27.