R Language
टेक्स्ट खनन
खोज…
एन-ग्राम वर्ड क्लाउड बनाने के लिए डेटा को स्क्रैप करना
निम्न उदाहरण प्रतीकात्मक छायांकन और आदेश के साथ शब्द बादलों के निर्माण के लिए tm
टेक्स्ट माइनिंग पैकेज को वेब से स्क्रेप और माइन डेटा का उपयोग करने के लिए उपयोग करता है।
require(RWeka)
require(tau)
require(tm)
require(tm.plugin.webmining)
require(wordcloud)
# Scrape Google Finance ---------------------------------------------------
googlefinance <- WebCorpus(GoogleFinanceSource("NASDAQ:LFVN"))
# Scrape Google News ------------------------------------------------------
lv.googlenews <- WebCorpus(GoogleNewsSource("LifeVantage"))
p.googlenews <- WebCorpus(GoogleNewsSource("Protandim"))
ts.googlenews <- WebCorpus(GoogleNewsSource("TrueScience"))
# Scrape NYTimes ----------------------------------------------------------
lv.nytimes <- WebCorpus(NYTimesSource(query = "LifeVantage", appid = nytimes_appid))
p.nytimes <- WebCorpus(NYTimesSource("Protandim", appid = nytimes_appid))
ts.nytimes <- WebCorpus(NYTimesSource("TrueScience", appid = nytimes_appid))
# Scrape Reuters ----------------------------------------------------------
lv.reutersnews <- WebCorpus(ReutersNewsSource("LifeVantage"))
p.reutersnews <- WebCorpus(ReutersNewsSource("Protandim"))
ts.reutersnews <- WebCorpus(ReutersNewsSource("TrueScience"))
# Scrape Yahoo! Finance ---------------------------------------------------
lv.yahoofinance <- WebCorpus(YahooFinanceSource("LFVN"))
# Scrape Yahoo! News ------------------------------------------------------
lv.yahoonews <- WebCorpus(YahooNewsSource("LifeVantage"))
p.yahoonews <- WebCorpus(YahooNewsSource("Protandim"))
ts.yahoonews <- WebCorpus(YahooNewsSource("TrueScience"))
# Scrape Yahoo! Inplay ----------------------------------------------------
lv.yahooinplay <- WebCorpus(YahooInplaySource("LifeVantage"))
# Text Mining the Results -------------------------------------------------
corpus <- c(googlefinance, lv.googlenews, p.googlenews, ts.googlenews, lv.yahoofinance, lv.yahoonews, p.yahoonews,
ts.yahoonews, lv.yahooinplay) #lv.nytimes, p.nytimes, ts.nytimes,lv.reutersnews, p.reutersnews, ts.reutersnews,
inspect(corpus)
wordlist <- c("lfvn", "lifevantage", "protandim", "truescience", "company", "fiscal", "nasdaq")
ds0.1g <- tm_map(corpus, content_transformer(tolower))
ds1.1g <- tm_map(ds0.1g, content_transformer(removeWords), wordlist)
ds1.1g <- tm_map(ds1.1g, content_transformer(removeWords), stopwords("english"))
ds2.1g <- tm_map(ds1.1g, stripWhitespace)
ds3.1g <- tm_map(ds2.1g, removePunctuation)
ds4.1g <- tm_map(ds3.1g, stemDocument)
tdm.1g <- TermDocumentMatrix(ds4.1g)
dtm.1g <- DocumentTermMatrix(ds4.1g)
findFreqTerms(tdm.1g, 40)
findFreqTerms(tdm.1g, 60)
findFreqTerms(tdm.1g, 80)
findFreqTerms(tdm.1g, 100)
findAssocs(dtm.1g, "skin", .75)
findAssocs(dtm.1g, "scienc", .5)
findAssocs(dtm.1g, "product", .75)
tdm89.1g <- removeSparseTerms(tdm.1g, 0.89)
tdm9.1g <- removeSparseTerms(tdm.1g, 0.9)
tdm91.1g <- removeSparseTerms(tdm.1g, 0.91)
tdm92.1g <- removeSparseTerms(tdm.1g, 0.92)
tdm2.1g <- tdm92.1g
# Creates a Boolean matrix (counts # docs w/terms, not raw # terms)
tdm3.1g <- inspect(tdm2.1g)
tdm3.1g[tdm3.1g>=1] <- 1
# Transform into a term-term adjacency matrix
termMatrix.1gram <- tdm3.1g %*% t(tdm3.1g)
# inspect terms numbered 5 to 10
termMatrix.1gram[5:10,5:10]
termMatrix.1gram[1:10,1:10]
# Create a WordCloud to Visualize the Text Data ---------------------------
notsparse <- tdm2.1g
m = as.matrix(notsparse)
v = sort(rowSums(m),decreasing=TRUE)
d = data.frame(word = names(v),freq=v)
# Create the word cloud
pal = brewer.pal(9,"BuPu")
wordcloud(words = d$word,
freq = d$freq,
scale = c(3,.8),
random.order = F,
colors = pal)
random.order
और random.order
से एक अनुक्रमिक फूस के उपयोग पर ध्यान दें, जो प्रोग्रामर को आदेश और शब्दों के रंग को अर्थ प्रदान करके क्लाउड में अधिक जानकारी कैप्चर करने की अनुमति देता है।
ऊपर 1-ग्राम का मामला है।
हम एन-ग्राम शब्द बादलों के लिए एक बड़ी छलांग लगा सकते हैं और ऐसा करने में हम देखेंगे कि कैसे लगभग किसी भी टेक्स्ट-माइनिंग विश्लेषण को लचीला बनाने के लिए पर्याप्त है ताकि हमारे टीडीएम को बदलकर एन-ग्राम को संभाल सकें।
R- में n- ग्राम के साथ चलने वाली प्रारंभिक कठिनाई यह है कि tm
, टेक्स्ट माइनिंग के लिए सबसे लोकप्रिय पैकेज है, यह स्वाभाविक रूप से द्वि-ग्राम या n-ग्राम के टोकन का समर्थन नहीं करता है। टोकनेशन एक शब्द, एक शब्द का हिस्सा या शब्दों के समूह (या प्रतीकों) को एक एकल डेटा तत्व के रूप में एक टोकन का प्रतिनिधित्व करने की प्रक्रिया है।
सौभाग्य से, हमारे पास कुछ हैक हैं जो हमें एक उन्नत टोकन के साथ tm
का उपयोग जारी रखने की अनुमति देते हैं। इसे प्राप्त करने का एक से अधिक तरीका है। हम textcnt()
से textcnt()
फ़ंक्शन का उपयोग करके अपने स्वयं के सरल टोकन लिख सकते हैं:
tokenize_ngrams <- function(x, n=3) return(rownames(as.data.frame(unclass(textcnt(x,method="string",n=n)))))
या हम आह्वान कर सकते हैं RWeka
भीतर की tokenizer tm
:
# BigramTokenize
BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 2))
इस बिंदु से आप 1-ग्राम मामले में बहुत आगे बढ़ सकते हैं:
# Create an n-gram Word Cloud ----------------------------------------------
tdm.ng <- TermDocumentMatrix(ds5.1g, control = list(tokenize = BigramTokenizer))
dtm.ng <- DocumentTermMatrix(ds5.1g, control = list(tokenize = BigramTokenizer))
# Try removing sparse terms at a few different levels
tdm89.ng <- removeSparseTerms(tdm.ng, 0.89)
tdm9.ng <- removeSparseTerms(tdm.ng, 0.9)
tdm91.ng <- removeSparseTerms(tdm.ng, 0.91)
tdm92.ng <- removeSparseTerms(tdm.ng, 0.92)
notsparse <- tdm91.ng
m = as.matrix(notsparse)
v = sort(rowSums(m),decreasing=TRUE)
d = data.frame(word = names(v),freq=v)
# Create the word cloud
pal = brewer.pal(9,"BuPu")
wordcloud(words = d$word,
freq = d$freq,
scale = c(3,.8),
random.order = F,
colors = pal)
ऊपर का उदाहरण हैक-आर के डेटा विज्ञान ब्लॉग से अनुमति के साथ पुन: प्रस्तुत किया गया है। मूल लेख में अतिरिक्त टिप्पणी मिल सकती है।