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=" ")

# 创建语料库
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        中华预防医学会     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
##   家养猪笼草可以有效灭蚊          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
##   家养猪笼草可以有效灭蚊        0      0      0    0
##   利用磁铁和钢丝可制作永动机    0      0      0    0
##   月经期间洗头会致癌            0      0      0    0
##   孕妈肚脐凸起生的就是儿子      0      0      0    0
##   最聪明的孩子都吃素            0      0      0    3
##                             Terms
## Docs                         信息
##   爱因斯坦的数学很烂            0
##   家养猪笼草可以有效灭蚊        0
##   利用磁铁和钢丝可制作永动机    0
##   月经期间洗头会致癌            0
##   孕妈肚脐凸起生的就是儿子      0
##   最聪明的孩子都吃素            1

5、使用tidy结构文档快速创建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                                 中
##   “竹炭食物”排毒养颜?               28
##   2017十大“科学”流言揭晓             19
##   保温杯里泡枸杞”是万能养生方式      16
##   吃螃蟹的禁忌                       12
##   吃早餐危险、薯条治脱发             13
##   发烧吃点消炎药                     21
##   藿香正气水和头孢一起服用会产生剧毒 12
##   诺贝尔奖得主说,牛肉、牛奶都致癌   12
##   食品标签会提供消费者需要的所有信息 17
##   与“水”有关的流言                   13

7、查找至少出现450次的词语

findFreqTerms(dtm.matrix,450)
##  [1] "专家"   "中"     "中国"   "发现"   "含量"  
##  [6] "研究"   "科学"   "里"     "食物"   "作用"  
## [11] "健康"   "发生"   "导致"   "年"     "影响"  
## [16] "情况"   "效果"   "更"     "月"     "说"    
## [21] "说法"   "身体"   "一种"   "医院"   "吃"    
## [26] "时"     "营养"   "治疗"   "皮肤"   "真的"  
## [31] "疾病"   "维生素" "食品"   "高"     "患者"  
## [36] "谣言"   "食用"   "人体"   "含有"   "请"    
## [41] "来源"   "药物"   "五线谱" "作者"   "授权"  
## [46] "网站"   "蝌蚪"   "转载"

8、查找与“冠状病毒”有0.8以上相关性的词

findAssocs(dtm.matrix,"冠状病毒",0.8)
## $冠状病毒
##     ncov 念念不忘     非典 
##     0.91     0.91     0.91
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容