來玩文字探勘囉~~~  文字雲是文字探勘的其中一種應用

網路上有很多方法,我結合了一些前輩資訊,自己研究出一套流程  參考看看囉~~

 

首先 先進行爬蟲,爬體育新聞標題

參考: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)

MLB文字雲  

 

(出來啦~~~~~~~)

 

題外話: data frame 轉 vector方法:

test是data frame

 >  c(t(test))

##增加詞彙 可以增加你想要的字詞 EX: 林子偉

> new_user_word(cc,'林子偉',"n") ## "n" 是設給他的詞性

   > cc[title]

 

 

arrow
arrow
    全站熱搜

    to52016 發表在 痞客邦 留言(0) 人氣()