Ch.0:套件安裝及載入

系統參數設定

載入packages

Sys.setlocale(category = "LC_ALL", locale = "zh_TW.UTF-8")
## [1] "zh_TW.UTF-8/zh_TW.UTF-8/zh_TW.UTF-8/C/zh_TW.UTF-8/zh_TW.UTF-8"
packages = c("dplyr", "tidytext", "jiebaR", "gutenbergr", "stringr", "wordcloud2", "ggplot2", "tidyr", "scales","knitr")
existing = as.character(installed.packages()[,1])
for(pkg in packages[!(packages %in% existing)]) install.packages(pkg)

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidytext)
library(jiebaR)
## Loading required package: jiebaRD
library(gutenbergr)
library(stringr)
library(wordcloud2)
library(ggplot2)
library(tidyr)
library(scales)
library(data.table)
## 
## Attaching package: 'data.table'
## The following objects are masked from 'package:dplyr':
## 
##     between, first, last

###下載繁體聖經 繁體和合本

bible <- fread("./booksx_2.txt", encoding = "UTF-8",fill=TRUE)
str(bible)
## Classes 'data.table' and 'data.frame':   31238 obs. of  5 variables:
##  $ book      : chr  "=001" "Ge" "Ge" "Ge" ...
##  $ chapter   : chr  "Genesis" "1:1" "1:2" "1:3" ...
##  $ ch_book   : chr  "-" "創世紀" "創世紀" "創世紀" ...
##  $ ch_chapter: chr  "創世紀" "1:1" "1:2" "1:3" ...
##  $ text      : chr  "" "起初 神創造天地。" "地是空虛混沌.淵面黑暗. 神的靈運行在水面上。" " 神說、要有光、就有了光。" ...
##  - attr(*, ".internal.selfref")=<externalptr>

#針對舊約,新約聖經每一卷進行編碼

bible_1 <- bible %>% 
  mutate(bookcode = cumsum(str_detect(bible$book,regex("^="))))
bible_2 <- bible %>% 
  mutate(bookcode = cumsum(str_detect(bible$book,regex("^=[0-1][0-9]{2}")))) %>%   select (-book,-chapter)
  #格式:第1碼是0或1 (0:舊約, 1:新約),第2-3碼為流水號 
str(bible_2)
## Classes 'data.table' and 'data.frame':   31238 obs. of  4 variables:
##  $ ch_book   : chr  "-" "創世紀" "創世紀" "創世紀" ...
##  $ ch_chapter: chr  "創世紀" "1:1" "1:2" "1:3" ...
##  $ text      : chr  "" "起初 神創造天地。" "地是空虛混沌.淵面黑暗. 神的靈運行在水面上。" " 神說、要有光、就有了光。" ...
##  $ bookcode  : int  1 1 1 1 1 1 1 1 1 1 ...
##  - attr(*, ".internal.selfref")=<externalptr>

#根據上方整理出來的規則,我們可以使用正規表示式,將句子區分新舊約

head(bible_2,10)
##     ch_book ch_chapter
##  1:       -     創世紀
##  2:  創世紀        1:1
##  3:  創世紀        1:2
##  4:  創世紀        1:3
##  5:  創世紀        1:4
##  6:  創世紀        1:5
##  7:  創世紀        1:6
##  8:  創世紀        1:7
##  9:  創世紀        1:8
## 10:  創世紀        1:9
##                                                                   text bookcode
##  1:                                                                           1
##  2:                                                 起初 神創造天地。        1
##  3:                     地是空虛混沌.淵面黑暗. 神的靈運行在水面上。        1
##  4:                                          神說、要有光、就有了光。        1
##  5:                                    神看光是好的、就把光暗分開了。        1
##  6:                神稱光為晝、稱暗為夜.有晚上、有早晨、這是頭一日。        1
##  7:                            神說、諸水之間要有空氣、將水分為上下。        1
##  8:  神就造出空氣、將空氣以下的水、空氣以上的水分開了.事就這樣成了。        1
##  9:                          神稱空氣為天.有晚上、有早晨、是第二日。        1
## 10:            神說、天下的水要聚在一處、使旱地露出來.事就這樣成了。        1

#挑選出“詩篇”

bible_3 <- bible_2 %>%
  filter(ch_book == "詩篇")
bible_3
##       ch_book ch_chapter
##    1:    詩篇        1:1
##    2:    詩篇        1:2
##    3:    詩篇        1:3
##    4:    詩篇        1:4
##    5:    詩篇        1:5
##   ---                   
## 2457:    詩篇      150:2
## 2458:    詩篇      150:3
## 2459:    詩篇      150:4
## 2460:    詩篇      150:5
## 2461:    詩篇      150:6
##                                                                             text
##    1:                         不從惡人的計謀、不站罪人的道路、不坐褻慢人的座位、
##    2:                               惟喜愛耶和華的律法、晝夜思想、這人便為有福。
##    3: 他要像一棵樹栽在溪水旁、按時候結果子、葉子也不枯乾.凡他所作的、盡都順利。
##    4:                                         惡人並不是這樣、乃像糠秕被風吹散。
##    5:             因此當審判的時候、惡人必站立不住.罪人在義人的會中、也是如此。
##   ---                                                                           
## 2457:                           要因他大能的作為讚美他、按著他極美的大德讚美他。
## 2458:                                           要用角聲讚美他、鼓瑟彈琴讚美他.
## 2459:                           擊鼓跳舞讚美他、用絲絃的樂器、和簫的聲音讚美他.
## 2460:                                       用大響的鈸讚美他、用高聲的鈸讚美他。
## 2461:                             凡有氣息的、都要讚美耶和華。你們要讚美耶和華。
##       bookcode
##    1:       19
##    2:       19
##    3:       19
##    4:       19
##    5:       19
##   ---         
## 2457:       19
## 2458:       19
## 2459:       19
## 2460:       19
## 2461:       19

#挑選出“箴言”

bible_4 <- bible_2 %>%
  filter(ch_book == "箴言")
bible_4
##      ch_book ch_chapter
##   1:    箴言        1:1
##   2:    箴言        1:2
##   3:    箴言        1:3
##   4:    箴言        1:4
##   5:    箴言        1:5
##  ---                   
## 911:    箴言      31:27
## 912:    箴言      31:28
## 913:    箴言      31:29
## 914:    箴言      31:30
## 915:    箴言      31:31
##                                                            text bookcode
##   1:                             以色列王大衛兒子所羅門的箴言.       20
##   2:                     要使人曉得智慧和訓誨.分辨通達的言語.       20
##   3:               使人處事.領受智慧、仁義、公平、正直的訓誨.       20
##   4:                         使愚人靈明、使少年人有知識和謀略.       20
##   5:                 使智慧人聽見、增長學問、使聰明人得著智謀、       20
##  ---                                                                    
## 911:                                   他觀察家務、並不喫閒飯。       20
## 912:                   他的兒女起來稱他有福.他的丈夫也稱讚他、       20
## 913:                       說、才德的女子很多、惟獨你超過一切。       20
## 914: 豔麗是虛假的.美容是虛浮的.惟敬畏耶和華的婦女、必得稱讚。       20
## 915:           願他享受操作所得的.願他的工作、在城門口榮耀他。       20

#標記聖經中的人名

jieba_tokenizer = worker()
bible_jieba_tokenizer <- worker(user="bible_lexicon.tradictional_2.txt", stop_word = "./stop_words.txt")

#設定聖經斷詞

# 設定斷詞function
bible_jieba_tokenizer <- worker(user="bible_lexicon.tradictional_2.txt", stop_word = "./stop_words.txt")

bible_tokenizer <- function(t) {
  lapply(t, function(x) {
    tokens <- segment(x, bible_jieba_tokenizer)
    return(tokens)
  })
}

#詩篇

bible_tokens <- bible_3  %>% unnest_tokens(word, text, token=bible_tokenizer)
str(bible_tokens)
## Classes 'data.table' and 'data.frame':   36138 obs. of  4 variables:
##  $ ch_book   : chr  "詩篇" "詩篇" "詩篇" "詩篇" ...
##  $ ch_chapter: chr  "1:1" "1:1" "1:1" "1:1" ...
##  $ bookcode  : int  19 19 19 19 19 19 19 19 19 19 ...
##  $ word      : chr  "不" "從" "惡人" "的" ...
##  - attr(*, ".internal.selfref")=<externalptr>
head(bible_tokens, 20)
##     ch_book ch_chapter bookcode   word
##  1:    詩篇        1:1       19     不
##  2:    詩篇        1:1       19     從
##  3:    詩篇        1:1       19   惡人
##  4:    詩篇        1:1       19     的
##  5:    詩篇        1:1       19   計謀
##  6:    詩篇        1:1       19     不
##  7:    詩篇        1:1       19     站
##  8:    詩篇        1:1       19   罪人
##  9:    詩篇        1:1       19     的
## 10:    詩篇        1:1       19   道路
## 11:    詩篇        1:1       19     不
## 12:    詩篇        1:1       19     坐
## 13:    詩篇        1:1       19   褻慢
## 14:    詩篇        1:1       19     人
## 15:    詩篇        1:1       19     的
## 16:    詩篇        1:1       19   座位
## 17:    詩篇        1:2       19     惟
## 18:    詩篇        1:2       19   喜愛
## 19:    詩篇        1:2       19 耶和華
## 20:    詩篇        1:2       19     的

#箴言

bible_tokens1 <- bible_4  %>% unnest_tokens(word, text, token=bible_tokenizer)
str(bible_tokens1)
## Classes 'data.table' and 'data.frame':   10969 obs. of  4 variables:
##  $ ch_book   : chr  "箴言" "箴言" "箴言" "箴言" ...
##  $ ch_chapter: chr  "1:1" "1:1" "1:1" "1:1" ...
##  $ bookcode  : int  20 20 20 20 20 20 20 20 20 20 ...
##  $ word      : chr  "以色列" "王" "大衛" "兒子" ...
##  - attr(*, ".internal.selfref")=<externalptr>
head(bible_tokens1, 20)
##     ch_book ch_chapter bookcode   word
##  1:    箴言        1:1       20 以色列
##  2:    箴言        1:1       20     王
##  3:    箴言        1:1       20   大衛
##  4:    箴言        1:1       20   兒子
##  5:    箴言        1:1       20 所羅門
##  6:    箴言        1:1       20     的
##  7:    箴言        1:1       20   箴言
##  8:    箴言        1:2       20     要
##  9:    箴言        1:2       20     使
## 10:    箴言        1:2       20     人
## 11:    箴言        1:2       20   曉得
## 12:    箴言        1:2       20   智慧
## 13:    箴言        1:2       20     和
## 14:    箴言        1:2       20   訓誨
## 15:    箴言        1:2       20   分辨
## 16:    箴言        1:2       20   通達
## 17:    箴言        1:2       20     的
## 18:    箴言        1:2       20   言語
## 19:    箴言        1:3       20   使人
## 20:    箴言        1:3       20   處事

#詩篇_計算詞彙的出現次數,如果詞彙只有一個字則不列入計算

bible_tokens_count <- bible_tokens %>% 
  filter(nchar(.$word)>1| .$word =="神" | .$word =="主" ) %>%
  group_by(word) %>% 
  summarise(sum = n()) %>% 
  filter(sum>10) %>%
  arrange(desc(sum))
head(bible_tokens_count, 30)
## # A tibble: 30 x 2
##    word     sum
##    <chr>  <int>
##  1 耶和華   754
##  2 神       436
##  3 永遠     129
##  4 慈愛     122
##  5 讚美     105
##  6 一切     104
##  7 惡人      93
##  8 大衛      90
##  9 不要      84
## 10 公義      83
## # … with 20 more rows
bible_tokens_count %>% wordcloud2()

#箴言_計算詞彙的出現次數,如果詞彙只有一個字則不列入計算

bible_tokens_count1 <- bible_tokens1 %>% 
  filter(nchar(.$word)>1| .$word =="神" | .$word =="主" ) %>%
  group_by(word) %>% 
  summarise(sum = n()) %>% 
  filter(sum>10) %>%
  arrange(desc(sum))
head(bible_tokens_count1, 30)
## # A tibble: 30 x 2
##    word     sum
##    <chr>  <int>
##  1 智慧     120
##  2 耶和華    93
##  3 惡人      85
##  4 愚昧      62
##  5 自己      56
##  6 不可      51
##  7 不要      40
##  8 知識      37
##  9 聰明      36
## 10 生命      35
## # … with 20 more rows
bible_tokens_count1 %>% wordcloud2()