Pre-process texts

library(quanteda)

Chinese Stop words: Baidu Stopwords

# read Chinese stop words
csw <- stopwords("chinese")

tokens("中华人民共和国成立于1949 年")
## tokens from 1 document.
## text1 :
## [1] "中华"   "人民"   "共和国" "成立"   "于"     "1949"   "年"
# with stopwords removed
tokens("中华人民共和国成立于1949 年") %>%
    tokens_remove(stopwords("chinese"))
## tokens from 1 document.
## text1 :
## [1] "中华"   "人民"   "共和国" "成立"   "1949"

Example application on a set of text files in Chinese

49 “REPORT ON THE WORK OF THE GOVERNMENT” by Premier of the State Council, 1954 - 2017

# read text files
load("data/data_corpus_chinesegovreport.rda")
summary(data_corpus_chinesegovreport, 10)
## Warning in nsentence.character(object, ...): nsentence() does not correctly
## count sentences in all lower-cased text
## Corpus consisting of 49 documents, showing 10 documents:
## 
##    Text Types Tokens Sentences                           doc_id Year
##   text1  2230  14093       453      1954政府工作报告_周恩来.txt 1954
##   text2  3053  35127       981      1955政府工作报告_李富春.txt 1955
##   text3  1514  13164       495      1956政府工作报告_李先念.txt 1956
##   text4  2585  21737       704      1957政府工作报告_周恩来.txt 1957
##   text5  2185  15164       412      1958政府工作报告_薄一波.txt 1958
##   text6  2512  19217       577      1959政府工作报告_周恩来.txt 1959
##   text7  1302   6268       164      1960政府工作报告_谭震林.txt 1960
##   text8  1892  11676       387 1964政府工作报告_周恩来_摘要.txt 1964
##   text9   966   3187       125      1975政府工作报告_周恩来.txt 1975
##  text10  2964  19119       659      1978政府工作报告_华国锋.txt 1978
##  Premier
##   周恩来
##   李富春
##   李先念
##   周恩来
##   薄一波
##   周恩来
##   谭震林
##   周恩来
##   周恩来
##   华国锋
## 
## Source:  /home/wangh52/quanteda_2/vignettes/pkgdown_only/* on x86_64 by wangh52
## Created: Mon Nov 27 13:29:27 2017
## Notes:
# tokenize
chtoks <- 
    tokens(data_corpus_chinesegovreport, remove_punct = TRUE) %>%
    tokens_remove(stopwords("chinese"))

# construct a dfm
chdfm <- dfm(chtoks)
topfeatures(chdfm)
## 发展 经济 社会 建设 改革 人民 主义 工作 企业 国家 
## 5627 5036 4255 4248 2931 2897 2817 2642 2627 2595
#发展 经济 社会 建设 改革 人民 主义 工作 企业 国家 
#5627 5036 4255 4248 2931 2897 2817 2642 2627 2595 

# plot a word cloud
set.seed(100)
chdfm_tf <- dfm_trim(chdfm, min_count = 500)
# to set the font correctly for macOS
if (Sys.info()['sysname'] == "Darwin") par(family = "STSong") 
textplot_wordcloud(chdfm_tf, min.freq = 6, random.order = FALSE,
                   rot.per = .25, max.words = 100, scale = c(2.8, .5),
                   colors = RColorBrewer::brewer.pal(8,"Dark2"))

Analysis

Feature co-occurrence matrix

# fcm within the window size of 5
ch17txt <- corpus_subset(data_corpus_chinesegovreport, Year == "2017")
ch17toks <- 
    tokens(ch17txt, remove_punct = TRUE) %>% 
    tokens_remove(stopwords("chinese"))
chfcm <- fcm(ch17toks, context = "window")  
topfeatures(chfcm["改革", ])
## 推进 制度   性 体制 完善   试   点 供给   侧 结构 
##   23   19   11   11   10    8    8    7    7    7
# fcm within window: "改革" + “xx”
chfcm <- fcm(ch17toks, context = "window", ordered = TRUE, tri = FALSE)
topfeatures(chfcm["改革", ])
## 完善 发展   试   点 制度 全面 推进 深化 社会 开放 
##   10    8    8    8    8    7    7    6    5    5

Scaling Model

wfm <- textmodel_wordfish(chdfm)
y <- 1954:2017
y <- y[-which(y==1963 | y==1961 |y==1962 | (y>1964 & y<1975) | y==1976 |y==1977)]
plot(y, wfm@theta, xlab = "Year", ylab = "Position")

Collocations - bigrams/trigrams etc.

# bigrams cross the whole dataset
ch_mw <- textstat_collocations(chtoks, size = 2, min_count = 20, tolower = TRUE)
head(ch_mw, 10)
##    collocation count count_nested length   lambda         z
## 1    社会 主义  1787            0      2 5.661200 128.61741
## 2        亿 元   689            0      2 7.445259  93.01487
## 3      现代 化   632            0      2 6.950471  83.55186
## 4    体制 改革   504            0      2 5.193065  77.37908
## 5    五年 计划   341            0      2 5.359068  71.64727
## 6    各级 政府   306            0      2 6.110596  66.63454
## 7    增长 百分   300            0      2 5.520761  65.88051
## 8        万 吨   212            0      2 6.589957  62.56344
## 9    国民 经济   589            0      2 6.014672  61.80426
## 10   充分 发挥   191            0      2 6.584129  61.24885
# bigrams in 2017 report
ch_mw17 <- textstat_collocations(ch17toks, size = 2, tolower = TRUE)
head(ch_mw17, 10)
##    collocation count count_nested length   lambda        z
## 1    人民 群众    12            0      2 5.406485 12.89405
## 2        亿 元    14            0      2 8.302483 12.62130
## 3        调 控    11            0      2 7.593472 12.41243
## 4    政府 工作     9            0      2 4.709870 11.07905
## 5    深入 实施     8            0      2 5.018234 10.92377
## 6      党 中央     7            0      2 5.746878 10.90837
## 7    体制 改革    11            0      2 5.317035 10.53518
## 8    国内 生产     6            0      2 6.166520 10.48816
## 9      现代 化     8            0      2 5.705688 10.43435
## 10   基础 设施     7            0      2 7.549273 10.42465