33-tidytext包學習:tm包與tidytext包共建語料庫

tidy結構要求:a table with one-token-per-document-per-row,這使得我們可以使用流行的一整套工具,比如 dplyr歹嘹、tidyr 和 ggplot2來探索和可視化文本數據孔庭。


格式轉換

然而,除了 tidytext 包之外圆到,大多數現有的用于自然語言處理的 r 工具都不兼容這種格式芽淡。 本文討論的就是tm包生成的語料與tidy結構之間的互相轉換。

1挣菲、使用科學辟謠網數據

require(pacman)
p_load(dplyr)
df <- read.csv("./rumors.csv",header = T,stringsAsFactors = F,strip.white = T) %>%
  select(title,correction) %>% tbl_df()

df$correction <- df$correction %>% gsub("<U+00A[0-9]>","",.) %>%
  # 清除所有括號中的內容
  gsub("\\(.*\\)","",.) %>% gsub("(.*)","",.) %>% gsub("\\\n","",.) %>%
  gsub("點擊下載本組圖片","",.) %>% textclean::replace_html()

2白胀、構建DTM矩陣

p_load(tm,jiebaR,purrr)

# 中文分詞
wk <- worker(stop_word = "./dict/characters-master/stop_words")
corpus <- df %>% mutate(words = map(correction,segment,wk)) %>% 
  select(title,words) %>% distinct(title,.keep_all = T)
# 手動拼接為一個長的字符串
txt <- map(corpus$words,paste,collapse=" ")

# 創(chuàng)建語料庫
d.corpus <- Corpus(VectorSource(txt))

# 剔除多余的空白
d.corpus <- tm_map(d.corpus,stripWhitespace)
## Warning in tm_map.SimpleCorpus(d.corpus,
## stripWhitespace): transformation drops documents
# 剔除標點符號
d.corpus <- tm_map(d.corpus,removePunctuation)
## Warning in tm_map.SimpleCorpus(d.corpus,
## removePunctuation): transformation drops documents
# 剔除數字
d.corpus <- tm_map(d.corpus,removeNumbers)
## Warning in tm_map.SimpleCorpus(d.corpus, removeNumbers):
## transformation drops documents
ctrl <- list(wordlengths=c(1,Inf))
dtm <- DocumentTermMatrix(d.corpus,control = ctrl)

print(dtm)
## <<DocumentTermMatrix (documents: 1763, terms: 35923)>>
## Non-/sparse entries: 202385/63129864
## Sparsity           : 100%
## Maximal term length: 80
## Weighting          : term frequency (tf)

3、轉換為tidy結構哪怔,轉換后其他的操作跟tidytext一致

p_load(tidytext)
# 轉換為one-token-per-document-per-row的數據框
dtm.td <- tidy(dtm)

print(dtm.td)
## # A tibble: 202,385 x 3
##    document term           count
##    <chr>    <chr>          <dbl>
##  1 1        一是               1
##  2 1        專家               2
##  3 1        個人行為           1
##  4 1        中                 2
##  5 1        中華預防醫(yī)學會     1
##  6 1        中國               1
##  7 1        中國科學院         1
##  8 1        中心               1
##  9 1        主任               2
## 10 1        二是               1
## # ... with 202,375 more rows
# 將語料中的document名稱改為文章名稱
name <- df %>% select(title) %>%
  mutate(id=as.character(1:length(df$title)))

dtm.td.name <- dtm.td %>%  left_join(name,by=c("document"="id"),copy=T) %>%
  select(document=title,term,count)

4、tidy結構轉換為DTM矩陣

dtm.matrix <- dtm.td.name %>% cast_dtm(document,term,count)
print(dtm.matrix)

注:目前還不清楚為何轉換后文檔數量會變少胚委,同時也無法確定文檔名稱是否與原有文章一一對應元暴。

## <<DocumentTermMatrix (documents: 1668, terms: 35923)>>
## Non-/sparse entries: 202228/59717336
## Sparsity           : 100%
## Maximal term length: 80
## Weighting          : term frequency (tf)
inspect(dtm.matrix[5:10, 10:20])
## <<DocumentTermMatrix (documents: 6, terms: 11)>>
## Non-/sparse entries: 10/56
## Sparsity           : 85%
## Maximal term length: 3
## Weighting          : term frequency (tf)
## Sample             :
##                             Terms
## Docs                         出品人 傳播 促使 低 二是
##   愛因斯坦的數學很爛              1    0    0  0    0
##   家養(yǎng)豬籠草可以有效滅蚊          1    0    0  0    0
##   利用磁鐵和鋼絲可制作永動機      1    0    0  0    0
##   月經期間洗頭會致癌              1    0    0  1    0
##   孕媽肚臍凸起生的就是兒子        1    0    0  0    0
##   最聰明的孩子都吃素              1    0    0  1    0
##                             Terms
## Docs                         公用 幾分鐘 免疫學 體液
##   愛因斯坦的數學很爛            0      0      0    0
##   家養(yǎng)豬籠草可以有效滅蚊        0      0      0    0
##   利用磁鐵和鋼絲可制作永動機    0      0      0    0
##   月經期間洗頭會致癌            0      0      0    0
##   孕媽肚臍凸起生的就是兒子      0      0      0    0
##   最聰明的孩子都吃素            0      0      0    3
##                             Terms
## Docs                         信息
##   愛因斯坦的數學很爛            0
##   家養(yǎng)豬籠草可以有效滅蚊        0
##   利用磁鐵和鋼絲可制作永動機    0
##   月經期間洗頭會致癌            0
##   孕媽肚臍凸起生的就是兒子      0
##   最聰明的孩子都吃素            1

5茉盏、使用tidy結構文檔快速創(chuàng)建DTM矩陣

test <- read.csv("./signature.jieba.csv",header = T,stringsAsFactors = F) %>% 
  dplyr::select(id,content)

signature.dtm <- test %>% unnest_tokens(word,content) %>%
  dplyr::count(id,word) %>%
  cast_dtm(id,word,n)

print(signature.dtm)
## <<DocumentTermMatrix (documents: 391, terms: 1412)>>
## Non-/sparse entries: 2684/549408
## Sparsity           : 100%
## Maximal term length: 4
## Weighting          : term frequency (tf)

6、移除稀疏元素

inspect(removeSparseTerms(dtm.matrix,0.5))
## <<DocumentTermMatrix (documents: 1668, terms: 1)>>
## Non-/sparse entries: 900/768
## Sparsity           : 46%
## Maximal term length: 1
## Weighting          : term frequency (tf)
## Sample             :
##                                     Terms
## Docs                                 中
##   “竹炭食物”排毒養(yǎng)顏铜秆?               28
##   2017十大“科學”流言揭曉             19
##   保溫杯里泡枸杞”是萬能養(yǎng)生方式      16
##   吃螃蟹的禁忌                       12
##   吃早餐危險讶迁、薯條治脫發(fā)             13
##   發(fā)燒吃點消炎藥                     21
##   藿香正氣水和頭孢一起服用會產生劇毒 12
##   諾貝爾獎得主說,牛肉啸驯、牛奶都致癌   12
##   食品標簽會提供消費者需要的所有信息 17
##   與“水”有關的流言                   13

7祟峦、查找至少出現450次的詞語

findFreqTerms(dtm.matrix,450)
##  [1] "專家"   "中"     "中國"   "發(fā)現"   "含量"  
##  [6] "研究"   "科學"   "里"     "食物"   "作用"  
## [11] "健康"   "發(fā)生"   "導致"   "年"     "影響"  
## [16] "情況"   "效果"   "更"     "月"     "說"    
## [21] "說法"   "身體"   "一種"   "醫(yī)院"   "吃"    
## [26] "時"     "營養(yǎng)"   "治療"   "皮膚"   "真的"  
## [31] "疾病"   "維生素" "食品"   "高"     "患者"  
## [36] "謠言"   "食用"   "人體"   "含有"   "請"    
## [41] "來源"   "藥物"   "五線譜" "作者"   "授權"  
## [46] "網站"   "蝌蚪"   "轉載"

8、查找與“冠狀病毒”有0.8以上相關性的詞

findAssocs(dtm.matrix,"冠狀病毒",0.8)
## $冠狀病毒
##     ncov 念念不忘     非典 
##     0.91     0.91     0.91
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末针姿,一起剝皮案震驚了整個濱河市厌衙,隨后出現的幾起案子,更是在濱河造成了極大的恐慌榕暇,老刑警劉巖喻杈,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異堂污,居然都是意外死亡,警方通過查閱死者的電腦和手機盟猖,發(fā)現死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來反镇,“玉大人娘汞,你說我怎么就攤上這事∧阆遥” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵尸昧,是天一觀的道長旷偿。 經常有香客問我,道長幢妄,這世上最難降的妖魔是什么茫负? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮朽褪,結果婚禮上无虚,老公的妹妹穿的比我還像新娘。我一直安慰自己嗤堰,他們只是感情好度宦,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著离唬,像睡著了一般划鸽。 火紅的嫁衣襯著肌膚如雪戚哎。 梳的紋絲不亂的頭發(fā)上嫂用,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音甘畅,去河邊找鬼往弓。 笑死,一個胖子當著我的面吹牛亮航,可吹牛的內容都是我干的。 我是一名探鬼主播准给,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼重抖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了畔规?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤叁扫,失蹤者是張志新(化名)和其女友劉穎畜埋,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體对室,經...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡咖祭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了牺汤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浩嫌。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡戴已,死狀恐怖锅减,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情怔匣,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布金闽,位于F島的核電站剿骨,受9級特大地震影響,放射性物質發(fā)生泄漏浓利。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一嫡秕、第九天 我趴在偏房一處隱蔽的房頂上張望苹威。 院中可真熱鬧,春花似錦掷酗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亩鬼。三九已至,卻和暖如春雳锋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背爽丹。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留真仲,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓秸应,卻偏偏與公主長得像碑宴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子祸挪,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內容

  • R語言包的安裝 參考文章 在R中大概有幾種包的安裝方式贞间。 install.packages()常規(guī)包的安裝 括號里...
    天涯清水閱讀 13,752評論 0 22
  • 在學習R的時候,R的包眾多闪唆,很多時候對于初學者會造成很大的困擾就是不知道用什么樣的包比較合適钓葫。我會在不斷使用...
    果果哥哥BBQ閱讀 16,040評論 0 62
  • 1.數據導入 以下R包主要用于數據導入和保存數據: feather:一種快速,輕量級的文件格式帆调;在R和python...
    雨一流閱讀 1,292評論 0 9
  • 首頁 資訊 文章 資源 小組 相親 登錄 注冊 首頁 最新文章 IT 職場 前端 后端 移動端 數據庫 運維 其他...
    Helen_Cat閱讀 3,887評論 1 10
  • 很多人推薦《R語言實戰(zhàn)》這本書來入門R枣抱,當然,這本書非常不錯佳晶,我也是通過這本書開始接觸的R讼载。這種入門的學習路徑屬于...
    亮亮就是亮閱讀 3,745評論 1 27