協作閣

開源協作部落格

思念、想念、懷念、掛念的語意比較

Mao-Chang Ku / 2020-04-10 /


Mining articles from PTT HatePolitics and Boy-Girl Boards

library(jiebaR)
library(stringr)
library(future.apply)
library(PTTmineR)
library(tidytext)
library(quanteda)
library(dplyr)
library(future)
library(readr)

seg <- worker()
plan(multiprocess(workers = 8, gc = TRUE))

HP_miner <- PTTmineR$new(task.name = 'Hate_Politics')
HP_miner %>% 
  mine_ptt(board = "HatePolitics", last.n.page = 200)

HP_miner %>% 
  export_ptt(export.type = 'tbl', obj.name = 'HP_tbl_result')
HP_post <- HP_tbl_result$post_info_tbl

posts_HP <- vector()
for (i in 1:nrow(HP_post)) {
  p <- HP_post$post_content[i]
  segged_p <- segment(p, seg)
  posts_HP[i] <- paste0(segged_p, collapse = ' ')
}

HP_df <- tibble::tibble(看板 = '政黑',
                          編號 = 1:nrow(HP_post),
                          作者 = HP_post$post_author, 
                          標題 = HP_post$post_title, 
                          內容 = posts_HP)

write_csv(HP_df, path = 'PTT_HP.csv')

BG_miner <- PTTmineR$new(task.name = 'Boy-Girl')
BG_miner %>% 
  mine_ptt(board = "Boy-Girl", last.n.page = 200)

BG_miner %>% 
  export_ptt(export.type = 'tbl', obj.name = 'BG_tbl_result')
BG_post <- BG_tbl_result$post_info_tbl

posts_BG <- vector()
for (i in 1:nrow(BG_post)) {
  q <- BG_post$post_content[i]
  segged_q <- segment(q, seg)
  posts_BG[i] <- paste0(segged_q, collapse = ' ')
}

BG_df <- tibble::tibble(看板 = '男女', 
                          編號 = 1:nrow(BG_post),
                          作者 = BG_post$post_author, 
                          標題 = BG_post$post_title, 
                          內容 = posts_BG)

write_csv(BG_df, path = 'PTT_BG.csv')

head(HP_df)

## # A tibble: 6 x 5
##   看板   編號 作者     標題                 內容                           
##   <chr> <int> <chr>    <chr>                <chr>                          
## 1 政黑      1 yuxds    Re: 館長自爆:北市官員說為了讓我開… 引述 sunyeah 湯元 嗎 之 銘 言 打電話 給 幕僚…
## 2 政黑      2 GV13     回應譚德塞 要鬥志不鬥氣… 1. 轉錄 標題 ︰ 回 應 譚 德塞 要 鬥志 不 鬥氣 …
## 3 政黑      3 platinu… 覺青請小心 你擁護的可能是五毛!!… https reurl cc kdEgqd 抓到了 攻擊 彈…
## 4 政黑      4 huanglo… 韓國瑜談外商投資高雄 可望今年底定案… 日商 台灣 三井 不動產 集團 拜訪 高雄 市長 韓國 瑜 …
## 5 政黑      5 wiwi0526 韓導該怎麼下台才漂亮 看見 2 階段 還有 10 幾萬 份 沒 送 但 審議 就 …
## 6 政黑      6 sunyeah  Re: 館長自爆:北市官員說為了讓我開… 打電話 給 幕僚 抱怨 嗆 聲 幹 拎 娘 2022 以後 …

head(BG_df)

## # A tibble: 6 x 5
##   看板   編號 作者     標題                內容                            
##   <chr> <int> <chr>    <chr>               <chr>                           
## 1 男女      1 bb255052 Re: 為什麼男生都喜歡看起來笨的女… 我 很 認真 的 回 你 然後 也 說 一下 天然 呆 是 真…
## 2 男女      2 asususer 如何與飲料店妹子閒聊 超級新手… 本人 是 超級 少話 的 男生 句點 王 很多 時候 不 知道…
## 3 男女      3 sumade   Re: 我與iouuoi小姐爭執,請… 引述 NSDC 隨風而逝 之 銘 言 我 相信 公道 自在 人…
## 4 男女      4 coolrr   Re: 澳洲台勞女能碰嗎!?… 引述 alexhsu0909 之 銘 言 本魯 朋友 碰到 了…
## 5 男女      5 stan766… Re: 我與iouuoi小姐爭執,請… 先說 結論 老子 付錢 怎能不 愛上 我 想 吃 沒 吃 到 …
## 6 男女      6 puretru… 天秤座露股溝道歉具有法律效力嗎?… 試管嬰兒 小孩 比較 有 實驗 精神 情緒 勒索 妹 哭腔 走…

Statistics

boards <- c('政黑', '男女')

HP_npost <- nrow(HP_df)
BG_npost <- nrow(BG_df)

HP_nchar <- HP_df$內容 %>% nchar %>% sum
BG_nchar <- BG_df$內容 %>% nchar %>% sum

tidy_HP <- HP_df %>% unnest_tokens('word', '內容', token = 'words')
tidy_BG <- BG_df %>% unnest_tokens('word', '內容', token = 'words')

HP_ntok <- tidy_HP %>% nrow()
BG_ntok <- tidy_BG %>% nrow()

HP_nword <- tidy_HP %>% count(word) %>% nrow()
BG_nword <- tidy_BG %>% count(word) %>% nrow()

tibble::tibble(看板 = boards,
                 篇數 = c(HP_npost, BG_npost),
                 字數 = c(HP_nchar, BG_nchar),
                 tokens = c(HP_ntok, BG_ntok),
                 words = c(HP_nword, BG_nword))

## # A tibble: 2 x 5
##   看板   篇數    字數  tokens words
##   <chr> <int>   <int>   <int> <int>
## 1 政黑   3894 2250498  858224 33493
## 2 男女   3919 3577966 1431892 28448

‘Missing’ Verbs

corpus_HP <- corpus(HP_df,
                    docid_field = '編號',
                    text_field = '內容')

kwic(corpus_HP, '[思想懷掛]念', valuetype = 'regex') %>% head(10) %>% knitr::kable(align = 'c')
docname from to pre keyword post pattern
229 213 213 來源 是 台灣 而 令人 懷念 的 是 網路 上 頗 [思想懷掛]念
245 155 155 來源 是 台灣 而 令人 懷念 的 是 網路 上 頗 [思想懷掛]念
529 375 375 對於 以前 經濟 起飛 的 懷念 認為 KMT 保護 了 台灣 [思想懷掛]念
1376 94 94 壓 著 打 我 真 懷念 那個 用 卡車 撞 法院 [思想懷掛]念
1398 18 18 政治 瞬間 無聊 許多 有夠 懷念 選 前 跟 韓 總 [思想懷掛]念
1609 34 34 沉寂 至今 實在 是 有點 想念 韓 導 的 妙語如珠 [思想懷掛]念
1722 494 494 柯 粉 們 你們 會 懷念 2019 年 八月 以前 那個 [思想懷掛]念
1772 259 259 柯 粉 們 你們 會 懷念 2019 年 八月 以前 那個 [思想懷掛]念
2189 54 54 老 實說 還 真是 有點 想念 他 曾經 帶來 的 歡笑 [思想懷掛]念
2212 140 140 當時 很難 預測 到 我 懷念 以前 跟 我 筆戰 的 [思想懷掛]念
corpus_BG <- corpus(BG_df,
                    docid_field = '編號',
                    text_field = '內容')

kwic(corpus_BG, '[思想懷掛]念', valuetype = 'regex') %>% head(10) %>% knitr::kable(align = 'c') 
docname from to pre keyword post pattern
92 705 705 都 不 符合 引述 freshguy 懷念 不如 相 見 之 銘 [思想懷掛]念
108 3 3 引述 freshguy 懷念 不如 相 見 之 銘 [思想懷掛]念
117 33 33 的 通訊 方式 想要 表達 思念 要 馬 約 出來 要 [思想懷掛]念
122 3 3 引述 freshguy 懷念 不如 相 見 之 銘 [思想懷掛]念
140 3 3 引述 freshguy 懷念 不如 相 見 之 銘 [思想懷掛]念
148 477 477 巴 朋友 多麼 讓 人 懷念 的 字眼 阿 已經 好久 [思想懷掛]念
186 236 236 已 五年 五年 來 仍 懷念 過去 夫妻 相處 時光 幾天 [思想懷掛]念
279 35 35 著 你 認識 花 時間 懷念 過去 是 最大 的 錯誤 [思想懷掛]念
303 103 103 的 ig 帳號 發 一下 思念 她 的 話 也 因 [思想懷掛]念
303 388 388 愛 嗎 還是 只是 再 思念 過去 的 人 最後 我 [思想懷掛]念
HP_freq <- tidy_HP %>% count(word)
BG_freq <- tidy_BG %>% count(word)

count_freq <- function (x, y) {
  if (y %in% x$word) {
    number <- filter(x, word == y)$n
  }
  else {number <- 0}
}


tibble::tibble(看板 = boards,
                 思念 = c(count_freq(HP_freq, '思念'), count_freq(BG_freq, '思念')),
                 想念 = c(count_freq(HP_freq, '想念'), count_freq(BG_freq, '想念')),
                 懷念 = c(count_freq(HP_freq, '懷念'), count_freq(BG_freq, '懷念')),
                 掛念 = c(count_freq(HP_freq, '掛念'), count_freq(BG_freq, '掛念')))

## # A tibble: 2 x 5
##   看板   思念  想念  懷念  掛念
##   <chr> <dbl> <int> <int> <dbl>
## 1 政黑      0     3    21     0
## 2 男女     18    28    26     3