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()