來玩文字探勘囉~~~ 文字雲是文字探勘的其中一種應用
網路上有很多方法,我結合了一些前輩資訊,自己研究出一套流程 參考看看囉~~
首先 先進行爬蟲,爬體育新聞標題
參考:http://brucehau.blogspot.tw/2016/09/rrvest.html
以下是R code
>install.packages('rvest') #安裝rvest套件
>library(rvest) #開啟rvest套件
>install.packages('magrittr')
>library(magrittr)
#爬棒球新聞標題
> title=read_html("http://sports.ltn.com.tw/baseball/") %>%
+ html_nodes(".boxTitle .listA .list_title") %>%
+ html_text() %>% iconv("UTF-8")
> title
[1] "MLB》奇兵馬泰敲再見安打 響尾蛇氣走洛磯"
[2] "MLB》突襲短打奏效 林子偉引起隊友模仿(影音)"
[3] "MLB》林子偉8場就敲2支三壘安 創台將最速紀錄 (影音)"
[4] "MLB》韋蘭德3.1局掉7分 老虎不敵印地安人"
[5] "MLB》美國網友取新綽號 林子偉變 「海嘯哥」"
[6] "MLB》林子偉突襲短打製造攻勢 藍鳥球評也稱讚(影音)"
[7] "MLB》台灣第一人! 林子偉單場3安猛打賞創紀錄"
[8] "MLB》林子偉猛打賞 助紅襪痛宰藍鳥"
[9] "MLB Live》林子偉敲3安打、貝茲雙響8打點 紅襪橫掃對手"
[10] "MLB》美作家酸億元球星「功夫熊貓」 三壘安打比林子偉少"
> str(title)
chr [1:10] "MLB》奇兵馬泰敲再見安打 響尾蛇氣走洛磯" ... <<-是一個string
接下來要開始"斷詞"拉~~
有關斷詞可以參考下面網址
參考: https://blog.stranity.com.tw/2016/11/22/
install.packages("jiebaR")
library("jiebaR")
#將R環境設定成中文
Sys.setlocale(category = "LC_ALL", locale = "cht")
#在 worker() 內可以設定各種不同的全切分法模型與引用外部詞庫
cc = worker()
> cc[title]
[1] "MLB" "奇" "兵馬" "泰敲" "再見"
[6] "安打" "響尾蛇" "氣走" "洛磯" "MLB"
[11] "突襲" "短打" "奏效" "林子" "偉"
[16] "引起" "隊友" "模仿" "影音" "MLB"
[21] "林子" "偉" "8" "場就" "敲"
[26] "2" "支三壘" "安" "創台將" "最速"
[31] "紀錄" "影音" "MLB" "韋" "蘭德"
[36] "3.1" "局掉" "7" "分" "老虎"
[41] "不敵" "印地安人" "MLB" "美國" "網友"
[46] "取新" "綽號" "林子" "偉變" "海嘯"
[51] "哥" "MLB" "林子" "偉" "突襲"
[56] "短打" "製造" "攻勢" "藍鳥" "球評"
[61] "也" "稱讚" "影音" "MLB" "台"
[66] "灣" "第一" "人" "林子" "偉單場"
[71] "3" "安" "猛打" "賞" "創紀錄"
[76] "MLB" "林子" "偉" "猛打" "賞"
[81] "助紅襪" "痛宰" "藍鳥" "MLB" "Live"
[86] "林子" "偉敲" "3" "安打" "貝"
[91] "茲" "雙響" "8" "打點" "紅襪"
[96] "橫掃" "對手" "MLB" "美" "作家"
[101] "酸" "億元" "球星" "功夫" "熊貓"
[106] "三壘" "安打" "比" "林子" "偉少"
>
|
接下來要取次數分配表,用table()
> mlb <-table(cc[title])
> mlb
2 3 3.1 7 8 Live MLB
1 2 1 1 2 1 10
人 三壘 也 不敵 分 引起 支三壘
1 1 1 1 1 1 1
比 功夫 台 打點 再見 印地安人 安
1 1 1 1 1 1 2
安打 老虎 作家 兵馬 助紅襪 局掉 攻勢
3 1 1 1 1 1 1
貝 取新 奇 林子 奏效 洛磯 突襲
1 1 1 8 1 1 2
紀錄 紅襪 美 美國 韋 哥 氣走
1 1 1 1 1 1 1
泰敲 海嘯 茲 偉 偉少 偉單場 偉敲
1 1 1 4 1 1 1
偉變 猛打 球星 球評 第一 創台將 創紀錄
1 2 1 1 1 1 1
場就 最速 痛宰 短打 隊友 對手 敲
1 1 1 2 1 1 1
熊貓 稱讚 網友 綽號 製造 酸 億元
1 1 1 1 1 1 1
影音 模仿 賞 橫掃 藍鳥 雙響 蘭德
3 1 2 1 2 1 1
響尾蛇 灣
1 1
然後將mlb轉成data.frame
>data.frame(mlb)
Var1 Freq
1 2 1
2 3 2
3 3.1 1
4 7 1
5 8 2
6 Live 1
7 MLB 10
8 人 1
9 又 1
10 三壘 1
11 上壘 1
12 也 1
13 不敵 1
14 分 1
15 引起 1
16 支三壘 1
17 比 1
18 功夫 1
19 台 1
20 打點 1
21 印地安人 1
22 安 2
23 安打 2
24 老虎 1
25 作家 1
26 助紅襪 1
27 局掉 1
28 攻勢 1
29 貝 1
30 取新 1
31 林子 9
32 奏效 1
33 突襲 3
34 紀錄 1
35 紅襪 1
36 美 1
37 美國 1
38 韋 1
39 哥 1
40 海嘯 1
41 茲 1
42 偉 5
43 偉少 1
44 偉單場 1
45 偉敲 1
46 偉變 1
47 猛打 2
48 球星 1
49 球評 1
50 第一 1
51 創台將 1
52 創紀錄 1
53 場就 1
54 最速 1
55 痛宰 1
56 短打 3
57 超快 1
58 隊友 1
59 腳程 1
60 對手 1
61 敲 1
62 敲三壘安 1
63 熊貓 1
64 稱讚 1
65 網友 1
66 綽號 1
67 製造 1
68 酸 1
69 億元 1
70 影音 3
71 模仿 1
72 賞 2
73 橫掃 1
74 藍鳥 2
75 雙響 1
76 蘭德 1
77 灣 1
做個排序
> head(mlb[order(mlb$Freq,decreasing = TRUE),])
Var1 Freq
7 MLB 10
32 林子 8
46 偉 4
22 安打 3
71 影音 3
2 3 2
可以發現MLB次數最高,林子偉被切成2個斷詞了 這個需要在研究一下ˊ ˋ
製作文字雲可以使用wordcloud2套件
參考:http://blog.pulipuli.info/2016/11/r-draw-word-cloud-in-r.html
#插入套件
> library(wordcloud2)
> wordcloud2(mlb)
(出來啦~~~~~~~)
題外話: data frame 轉 vector方法:
test是data frame
> c(t(test))
##增加詞彙 可以增加你想要的字詞 EX: 林子偉 > new_user_word(cc,'林子偉',"n") ## "n" 是設給他的詞性 |
> cc[title]