網路爬蟲
library(rvest)
## Warning: package 'rvest' was built under R version 4.0.5
newsurl <- 'https://news.ltn.com.tw/list/breakingnews'
ltn <- read_html(newsurl)
title <- ltn %>% html_nodes('h3') %>% html_text()
newsdf <- data.frame(title = title)
newsdf
## title
## 1 耕興去年營收年增22.94% 喜迎2022龐大檢測需求
## 2 竹北新豐掩埋場又燒了! 火勢撲滅持續監控防復燃
## 3 小米手機真的會文字審查!NCC實測發現還會回傳瀏覽紀錄
## 4 1/6 威力彩、雙贏彩、今彩539 開獎囉!
## 5 人夫、小三通姦釋憲除罪成功 卻無法獲得刑事補償
## 6 網球》律師爭取聽證會 喬帥下週一拚澳網最後生機
## 7 小琉球珊瑚狀況全台最差 海保署曝「這兩處」也惡化
## 8 新聞360》中東歐抗中陣線拉警報?立陶宛總統髮夾彎藏盤算
## 9 NBA》K湯復出會打多久? 勇士主帥受訪透露未來規劃
## 10 健康網》寶寶禿頭怎麼辦? 醫:別驚慌!2歲應可長齊
## 11 開車族好康!台新銀信用卡獨家免費送洗車
## 12 辱華!北京7-11官網標示「台灣」為國家 被罰64萬
## 13 亞馬遜和斯泰蘭蒂斯跨界合作 盼創綜效
## 14 中二選戰倒數!陳世凱公開9年前防彈背心照:是為了拍給爸媽看
## 15 三星5G輕旗艦S21 FE來了 1月在台上市「近2.2萬元」
## 16 美11月有453萬辭職不幹了 創新高
## 17 謠言終結站》觸電身亡可「一招復活」?專家警告:恐延誤就醫
## 18 反制北京再出拳!立陶宛:已備妥文件向WTO控告中國
## 19 當年穿防彈衣選舉照曝光!陳世凱:對抗惡勢力最好武器就是選票
## 20 桃機群聚案延燒 前台大醫一圖示警:疫情很快就出去了
#write.csv(x=newsdf, file = 'ltn.csv')
文章斷句
library(jiebaR)
## Warning: package 'jiebaR' was built under R version 4.0.5
## Loading required package: jiebaRD
## Warning: package 'jiebaRD' was built under R version 4.0.5
edit_dict()
## Warning in edit_dict(): You should save the dictionary without BOM on Windows
sentence <- '神預測地震再現身!炎亞綸看首映開示要找「三角點」'
mixseg <- worker()
segment(sentence, jiebar = mixseg)
## [1] "神" "預測" "地震" "再" "現身" "炎" "亞" "綸"
## [9] "看" "首映" "開示" "要找" "三角點"
mixseg <- worker()
s <- "大巨蛋案對市府同仁下封口令?柯P否認"
s1 <- "柯P市府近來飽受大巨蛋爭議"
s.list <- lapply(list(s,s1), function(e) segment(e,jiebar = mixseg))
library(tm)
## Warning: package 'tm' was built under R version 4.0.5
## Loading required package: NLP
Sys.setlocale("LC_ALL", "C")
## [1] "C"
s.corpus <- Corpus(VectorSource(s.list))
s.dtm <- DocumentTermMatrix(s.corpus,
control = list(wordLengths=c(2,20)))
inspect(s.dtm)
## <<DocumentTermMatrix (documents: 2, terms: 14)>>
## Non-/sparse entries: 17/11
## Sparsity : 39%
## Maximal term length: 19
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs "<u+4e0b>", "<u+540c><u+4ec1>", "<u+5426><u+8a8d>") "<u+5927>",
## 1 1 1 1 0
## 2 0 0 0 1
## Terms
## Docs "<u+5de8><u+86cb>", "<u+5e02><u+5e9c>", "<u+67ef>", "<u+6848><u+5c0d>",
## 1 1 1 1 1
## 2 1 1 0 0
## Terms
## Docs "p", c("<u+5927>",
## 1 1 1
## 2 1 0
news <- '神預測地震再現身!炎亞綸看首映開示要找「三角點」
〔記者許世穎/台北報導〕由女神卡卡主演的電影《GUCCI:豪門謀殺案》,今晚在台舉辦首映派對,包括胡宇威、孫盛希、郭書瑤、劉品言、「炎P」炎亞綸等人一同出席。先前神準預測地震的炎P還當場開示:「大家注意聽,如果真的搖,不要往外衝!要找堅固的三角點」,要大家看電影遇到地震不要慌張。
炎亞綸笑稱自己是來支持好朋友Lady Gaga。(記者陳逸寬攝)
炎亞綸一現身就開玩笑說是來支持他的朋友(女神卡卡),被問到日前地震,他說當時在14樓開會,「我其實是在唐老師(唐綺陽)他們公司,以為血糖低或是高血壓,聽到一陣尖叫,就拿起手機回訊息」,笑說現在只要地震發生就知道要開始回訊息。
他說唐老師可能被他吸走了一點能量,所以預測神準,但也認為讓大家開始關心地球科學是滿好玩的事情。被問到能否再預測,他說現在這樣似乎有點違法,但也自我預測期許「希望我可以賺一百億,之前不是說要買媒體,一間一間買下來!」至於是否會想像女神卡卡一樣挑戰大銀幕演出,他說當演員要挑戰不同的東西,「比方說我可能在學校教地質學,然後殺學生這樣」。
劉品言出席電影首映會,卻被問《華燈初上》兇手是誰?(記者陳逸寬攝)
因演出《華燈初上》再受矚目的劉品言笑說看到媒體這麼大陣仗,「之後的通告可能要好好考慮一下」,被問到大家好奇的「兇手是誰」,她表示「每個人都很值得懷疑,我相信滿多人都有心裡不同的答案」。第三季之後有沒有可能變成主角?她說:「我們應該每個人都是主角吧!」
劉品言說從開拍到現在壓力都很大,想不到宣傳期還是不能跟大家分享劇情,「每一次編劇都會放不一樣的小驚喜,相信第三季也會有很多小驚喜跟大驚喜,而且第二季播出後大家看我的眼光不太一樣了,第一季是憐憫,這一季好像都用一種『是不是妳』的眼光」。她說媽媽因為看過劇本,也被追問的很勤勞,「她可能更要躲起來!」
「瑤瑤」郭書瑤表示自己是Lady Gaga的粉絲。(記者陳逸寬攝)
「瑤瑤」郭書瑤說自己是卡卡的腦粉,「她很多變,每個身分都做得很好」,也很想挑戰像她演出的蛇蠍美人,「但我外表不夠蠍,不然一直都想挑戰反差大的角色」。
該片由《異形》、《神鬼戰士》大導演雷利史考特執導,打造出關於知名時尚王朝是如何變遷的真實故事,刻劃野心、背叛與謀殺,視覺風格充滿時尚感。故事篇幅橫跨Gucci豪門家族時尚帝國最動蕩不安的數十年,豪華的演員陣容包括曾獲金像獎提名的女神卡卡、亞當崔佛、金獎影帝艾爾帕西諾、金獎得主傑瑞德雷托、以及金獎影帝傑瑞米艾朗、莎瑪海耶克等人一同演出。《GUCCI:豪門謀殺案》明天(7日)在台上映。
'
words <- segment(news, mixseg)
tb <- table(words)
tb <- tb[(nchar(names(tb)) >= 2)]
library(wordcloud2)
## Warning: package 'wordcloud2' was built under R version 4.0.5
wordcloud2(tb, shape = 'triangle')
e1 <- 'this is a book'
e2 <- 'this is my car'
e.split <- strsplit(c(e1, e2), ' ')
e.corpus <- Corpus(VectorSource(e.split) )
dtm <- DocumentTermMatrix(e.corpus)
inspect(dtm)
## <<DocumentTermMatrix (documents: 2, terms: 6)>>
## Non-/sparse entries: 8/4
## Sparsity : 33%
## Maximal term length: 9
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs "a", "book") "car") "is", "my", c("this",
## 1 1 1 0 1 0 1
## 2 0 0 1 1 1 1
Machine Learning
https://rpubs.com/ywchiu/Demo20171204
library(rvest)
dfall <- data.frame()
for(page in 1:27){
reviews <- read_html(paste0('https://movies.yahoo.com.tw/movieinfo_review.html/id=7064?sort=update_ts&order=desc&page=', page)) %>% html_nodes('.form_good')
for(ele in reviews){
comments <- ele %>% html_nodes('span') %>% .[3] %>% html_text()
score <- ele %>% html_node('input[name="score"]') %>% html_attr('value')
dfall <- rbind(dfall, data.frame(comments, score, stringsAsFactors = FALSE))
}
}
write.csv(x = dfall, file = 'movie_reviews.csv')
dfall <- read.csv('movie_reviews.csv', stringsAsFactors = FALSE)
head(dfall)
movies <- dfall[dfall$score %in% c(1,5), ]
movies$score <- factor(movies$score, levels = c(1,5), labels = c('bad', 'good'))
## Word Segmentation
library(jiebaR)
mixseg <- worker()
movie.seg <- lapply(movies$comments,
function(e) segment(e, jiebar = mixseg))
## Turning Data Into DocumentTermMatrix
library(tm)
corpus <- Corpus(VectorSource(movie.seg))
doc <- tm_map(corpus, removeNumbers)
dtm.new<- DocumentTermMatrix(doc,
control = list(
wordLengths = c(2,20)))
## Split Data into Training and Testing Dataset
convert_counts <- function(x){
x <- ifelse(x > 0, 1, 0)
x <- factor(x, levels=c(0,1), labels = c('No', 'Yes'))
return(x)
}
m.count <- apply(dtm.new, MARGIN= 2, convert_counts)
m.count[1:3,1:10]
set.seed(123)
idx <- sample.int(2, nrow(m.count), replace=TRUE, prob=c(0.5,0.5))
m <- as.data.frame(m.count)
trainset <- m[idx == 1, ]
traintag <- movies[idx==1,"score"]
testset <- m[idx == 2, ]
testtag <- movies[idx==2,"score"]
## Building Model
library(e1071)
model <- naiveBayes(trainset, traintag)
predicted <- predict(model, testset)
## Validate Result
sum(testtag == predicted) / length(testtag)
table(testtag, predicted)
#testtag