ํฐ์คํ ๋ฆฌ ๋ทฐ
R Console์ ์ด์ฉํ ์๋ ํด๋ผ์ฐ๋ (word cloud) / KoNLP ์ค๋ฅ ํด๊ฒฐ
ๅๆ 2024. 4. 23. 16:30Ooops ! (^^ใ

ํ๊ต ๊ณผ์ ๋ก ์๋ ํด๋ผ์ฐ๋๋ฅผ ๋ง๋ค์ด์ผ ํ๋๋ฐ
์์ฒ๋ผ install.packages("KoNLP") ์๋ฌ๊ฐ ๋ฌ๋ค.
โ extractNoun() ํจ์๋ KoNLP์์ ์ ๊ณตํ๋ ํจ์
์์๋ณด๋ ํ์ฌ ใKoNLP๊ฐ R ์๋ฒ์์ ์ญ์ ๋ ์ํฉ์ด๋ผ
์ง์ ์๋ ์ค์น๋ฅผ ํด์ผ๋ง ์ฌ์ฉํ ์ ์๋คใ๋ ์์ ์ ์ !
์ฌ๋ฌ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํด์ ์๋ ํด๋ผ์ฐ๋ ์ผ๋๊ธฐ๋ฅผ ์ ์ด๋ณผ ์์
๋ง์ฝ ์ด๊ฒ์ ๊ฒ ๊ตฌ๊ธ๋ง ํ๋๋ฐ ์ ๋๋ค๋ฉด ์ด๊ฒ๋ ํ ๋ฒ ์๋ํด๋ณด๊ธธโ
+)
install.packages(ํจํค์ง๋ช
)
: ํจํค์ง ์ค์น ๋ช
๋ น์ด
library(ํจํค์ง๋ช
)
: ์ด๋ฏธ ์ค์น๋ ํจํค์ง ๋ถ๋ฌ์ค๋ ๋ช
๋ น์ด
• ๋จผ์ jar ํ์ผ ๊ฒฝ๋ก๋๋ก ์ถ๊ฐํ๊ธฐ
โจ ๋จผ์ ํด๋น ํ์ผ์ C:\Program Files\R\R-4.3.3\library\KoNLP\java ํด๋์ ์ ๋ฃ๋๋ค.
• multilinguer ํจํค์ง ์ค์น, ๋ก๋
โจ R์์ ๋ค๊ตญ์ด ์ฒ๋ฆฌ๋ฅผ ์ํ ํ๊ฒฝ ์ค์
(ํนํ ํ๊ตญ์ด ์ฒ๋ฆฌ๋ฅผ ์ํ Java ํ๊ฒฝ ์ค์ ์ ์ ์ฉ)
• rJava ํจํค์ง ์ค์น, ๋ก๋
โจ R๊ณผ Java ๊ฐ ์ธํฐํ์ด์ค ์ ๊ณต
(KoNLP ๊ฐ์ ํ๊ตญ์ด ์ฒ๋ฆฌ ํจํค์ง๋ Java ๊ธฐ๋ฐ ํ๊ตญ์ด ์ฒ๋ฆฌ ์์ง์ ์ฌ์ฉํด์ ๊ผญ ํ์)
• jsonlite ํจํค์ง ์ค์น, ๋ก๋
โจ JSON ๋ฐ์ดํฐ ์ฒ๋ฆฌํ๋ ํจํค์ง๋ก R์์ JSON ํ์ ๋ฐ์ดํฐ ์ฝ๊ณ ์ฐ๋ ๊ธฐ๋ฅ ์ ๊ณต
(type="source" ์ต์
: ํจํค์ง๋ฅผ ๋ฐ์ด๋๋ฆฌ๊ฐ ์๋ ์์ค ์ฝ๋๋ก๋ถํฐ ์ง์ ์ปดํ์ผ ํด ์ค์นํ๋ ์๋ฏธ)
๋ฐ์ด๋๋ฆฌ ํ์ผ • ์ปดํจํฐ์์ ์ง์ ์คํ ๊ฐ๋ฅํ ํํ • ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผ ํ์ฌ ์์ฑ๋ ํ์ผ • ์ฌ์ฉ์๋ ํด๋น ํ์ผ์ ์ง์ ์คํํด ํ๋ก๊ทธ๋จ ์ฌ์ฉ ๊ฐ๋ฅ ์์ค ์ฝ๋ • ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ์ฝ๋ ์์ฒด • ์ฌ๋์ด ์ฝ๊ณ ์ดํด ๊ฐ๋ฅํ ํ ์คํธ ํํ • ์ปดํจํฐ๊ฐ ์คํํ๋๋ก ํ๋ ค๋ฉด ๋ฐ์ด๋๋ฆฌ ํํ๋ก ๋ณํํ ์ปดํ์ผ ๊ณผ์ ํ์ |
• KoLNP ์ค์น, ๋ก๋
โจ ํ๊ตญ์ด ์์ฐ์ด ์ฒ๋ฆฌ๋ฅผ ์ํ ํจํค์ง
1. ํน์ ์ ์ฅ์( https://forkonlp.r-universe.dev )๋ก๋ถํฐ "KoNLP" ํจํค์ง ์ค์น
2. KoNLP ํจํค์ง์ ์์กด์ฑ ํจํค์ง๊น์ง ํจ๊ป ์ค์น
3. --no-multiarch : ์ํคํ
์ฒ (์: 32bit vs 64bit) ๊ด๊ณ ์์ด ์ค์น
• useSejongDic() / useNIADic()
โจ useSejongDic() : KoNLP ํจํค์ง ๋ด์ ํจ์ (์ธ์ข
์ฌ์ ์ฌ์ฉ์ ์ํจ)
โซ ํ๊ตญ์ด ์์ฐ์ด ์ฒ๋ฆฌ ์ ์ธ์ข
์ฌ์ ์ ๊ธฐ์ ์ผ๋ก ํ๊ตญ์ด ๋ถ์ ๊ฐ๋ฅ !
โจ useNIADic() : ์ด ๋ํ ํ๊ตญ์ด ํ
์คํธ ๋ง์ด๋์์ ์ฌ์ฉ๋๋ ํจ์
โ๏ธ ๊ธฐ๋ณธ ์ธํ ๋ช ๋ น์ด ์ ๋ฆฌ
> install.packages("multilinguer")
> library(multilinguer)
> install.packages("rJava")
> library(rJava)
> install.packages("jsonlite", type ="source")
> library(jsonlite)
> install.packages("KoNLP", repos = "https://forkonlp.r-universe.dev", dependencies = TRUE, INSTALL_opts = c("--no-multiarch"))
> library(KoNLP)
> useSejongDic()
> useNIADic()
• wordcloud, RColorBrewer ํจํค์ง ๋ก๋
โจ RColorBrewer ํจํค์ง๊ฐ wordcloud๋ฅผ ํตํด ์๋ ๋ก๋ ๋์์ง๋ง, ํ ๋ฒ ๋ ๋ช
์์ ๋ก๋
โจ "Accent" ์ด๋ฆ์ ์์ ํ๋ ํธ์์ 8๊ฐ์ง ์์์ pal ๋ณ์์ ํ ๋น (๋จ์ด ์ ํํ ์ ์ฌ์ฉ)
R Color Brewer's palettes
• setwd(), readLines()
setwd() : R์ ์์
๋๋ ํ ๋ฆฌ ์ค์
โจ ๋งค๋ฒ ํ์ผ ๊ฒฝ๋ก ์ ์ฒด๋ฅผ ์ง์ ์
๋ ฅํ์ง ์๊ณ ํ์ผ์ ์ ๊ทผ ๊ฐ๋ฅ
readLines() : ํ
์คํธ ํ์ผ ์ค ๋จ์๋ก ์ฝ์ด๋ค์ด๋ ํจ์
โจ ํ์ผ์์ ๋ชจ๋ ํ
์คํธ ์ค์ ๋ฌธ์์ด ๋ฒกํฐ๋ก ๋ฐํ
• stringr ํจํค์ง ์ค์น, ๋ก๋
โจ ๋ ์ด๋ฏธ ์ค์นํ์ง๋ง, ์์ผ๋ก์ ํจ์ ์ฌ์ฉ์ ์ํด ์ค์น, ๋ก๋ํ๋๋ก ํ์.
• str_replace_all()
stringr ํจํค์ง์์ ์ ๊ณต๋๋ ํจ์ (์๋ ์ฝ๋๋ธ๋ญ์ ์ ๋ฆฌ ๆ)
โ 1๊ธ์~2๊ธ์๋ก ์ด๋ฃจ์ด์ง ๋ชจ๋ ๋จ์ด ๊ณต๋ฐฑ("")์ผ๋ก ๋์ฒด
โก ์ค๊ตญ์ด ๋ฌธ์ ๋ชจ๋ ์ ๊ฑฐ
โข ์ผ๋ฐ ํ
์คํธ์ ๊ณต๋ฐฑ์ ์ ์ธํ ๋ชจ๋ ํน์๋ฌธ์ ๋ฐ ๊ธฐํธ ์ ๊ฑฐ
โจ ์ํ๋ฒณ, ์ซ์, ๋ฐ์ค ๋ฌธ์(_), ๊ณต๋ฐฑ ๋ฌธ์ ์ ์ธ ๋ชจ๋ ๋ฌธ์ ์ ๊ฑฐ
• gsub()
R์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ํจ์
str_replace_all ๊ณผ ๋น์ทํ ๊ธฐ๋ฅ
โจ ๋ชจ๋ ์ค๋ฐ๊ฟ ๋ฌธ์ ์ ๊ฑฐ (ํ ์คํธ๋ฅผ ํ ์ค๋ก ๋ง๋ค๊ธฐ ์ํด ์ฌ์ฉ)
• sapply(), extractNoun()
โจ data5์ ๊ฐ ์์์ ๋ํด extractNoun ํจ์๋ก ๋ช
์ฌ๋ง ์ถ์ถ
โจ sapply() ํจ์๋ ๋ฒกํฐ ํน์ ๋ฆฌ์คํธ ๊ฐ ์์์ ํจ์ ์ ์ฉ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฒกํฐ ํน์ ๋ฆฌ์คํธ๋ก ๋ฐํ
โจ USE.NAMES=F๋ ๊ฒฐ๊ณผ ๋ฒกํฐ์ ์ด๋ฆ์ ์ฌ์ฉํ์ง ์๋๋ก ํจ
• unlist()
โจ unlist()๋ ๋ฆฌ์คํธ ๋ชจ๋ ์์๋ฅผ ์ฐ๊ฒฐํด ํ๋์ ๋ฒกํฐ๋ก ๋ง๋ฆ
โจ data6์์ ์์ฑ๋ ๋ฆฌ์คํธ๋ฅผ ๋จ์ผ ๋ฒกํฐ๋ก ๋ณํ
• ๋ฌธ์์ ๊ฐ์๊ฐ 2๊ฐ ์ด์์ธ ์์๋ง ํํฐ๋ง
โจ nchar(x)๋ ๋ฌธ์์ด x์ ๊ธธ์ด(๋ฌธ์ ๊ฐ์) ๋ฐํ
• 1๊ธ์ ๋๋ 2๊ธ์๋ก ์ด๋ฃจ์ด์ง ๋ชจ๋ ์ซ์๋ฅผ ์ ๊ฑฐ
โจ 2017์ ์๊ด ์์ง๋ง "10" ๊ฐ์ ๋ ๊ธ์ ์ซ์๋ฅผ ์ ๊ฑฐํ๊ณ ์ ํ๋ค
๊ทธ๋ผ ์๊น ์ฌ์ฉํ๋ str_replace_all()์ ์ฌ์ฉํ๋ฉด ๋์ง ์์๊น?

์ด๋๊ฐ์ด.. .. ..
์ด๋ด ๋๋ gsub()์ ์ฐ์!
โจ "10" ์ด ์ฌ๋ผ์ก๋ค!
• ์ํ์ง ์๋ ํค์๋ ์ ํ ์ ๊ฑฐ
โจ stopwords ๋ณ์์ ์ํ์ง ์๋ ํค์๋๋ฅผ ๋ด์๋๋ค.
โจ ์ข ๋ง์ด ์์ด๋ค
• nzchar()
nzchar ํจ์๋ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 0์ด ์๋์ง ์ฌ๋ถ๋ฅผ ๋ ผ๋ฆฌ๊ฐ์ผ๋ก ๋ฐํ
โจ data9์์ ๊ธธ์ด๊ฐ 0์ด ์๋(์ฆ, ๋น ๋ฌธ์์ด์ด ์๋) ์์๋ง์ ์ ํ
• data๋ฅผ txt ํ์ผ๋ก ์ ์ฅ
+) speech.txt ์ speech2.txt ์ํ ๋น๊ต
• read.table()๋ก txt ์ฝ๊ณ ๊ณต๋ฐฑ ์ ๊ฑฐ
• ๋จ์ด๋ณ๋ก count ํ๊ธฐ
• wordcloud(), ๋๋์ด ์๋ ํด๋ผ์ฐ๋ ์์ฑ โ๏ธ
wordcloud() ํจ์์ ์ต์
์ ๋ํ ์ค๋ช
• names(wordcount) : ๋จ์ด ๋ชฉ๋ก
• freq=wordcount : ๊ฐ ๋จ์ด์ ๋น๋
• scale=c(5,1) : ๋จ์ด ํฌ๊ธฐ์ ๋ฒ์๋ฅผ ์ค์
โข 5๋ ๊ฐ์ฅ ๋น๋๊ฐ ๋์ ๋จ์ด์ ์ต๋ ํฌ๊ธฐ, 1์ ๊ฐ์ฅ ๋ฎ์ ๋น๋์ ๋จ์ด์ ์ต์ ํฌ๊ธฐ
• rot.per = 0.1 : ๋จ์ด๋ฅผ ํ์ ์ํฌ ๋น์จ์ ์ค์
โข 0.1์ ์ฝ 10%
• min.freq=1 : ํ์ํ ๋จ์ด์ ์ต์ ๋น๋๋ฅผ ์ค์
โข 1์ ๋น๋๊ฐ 1 ์ด์์ธ ๋จ์ด๋ง ํ์๋จ
• random.order=F : ๋จ์ด๋ฅผ ๋ฌด์์ ์์๋ก ํ์ํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์
โข F(False์ ์ฝ์ด)๋ ๋น๋๊ฐ ๋์ ๋จ์ด๋ถํฐ ์์๋๋ก ํ์๋จ
• colors=pal : ๋จ์ด์ ์์์ ์ค์
โข ์ด๋ฐ์ ์ค์ ํด ๋ ํ๋ ํธ
โ๏ธ ์๋ ํด๋ผ์ฐ๋ ์์ฑ ๋ช ๋ น์ด ๋ชจ์
> library(wordcloud)
> library(RColorBrewer)
> pal <- brewer.pal(8, "Pastel2")
> pal
> install.packages("stringr")
> library(stringr)
> setwd("c:/uploadFiles")
> data <- readLines("speech.txt")
> data2 <- str_replace_all(data, "\\b\\w{1,2}\\b", "")
> data3 <- str_replace_all(data2, "[\u4e00-\u9fff\u3400-\u4DBF]", "")
> data4 <- str_replace_all(data3, "[^\\w\\s]", "")
> data5 <- gsub("\r\n", "", data4)
> data6 <- sapply(data5, extractNoun, USE.NAMES=F)
> data7 <- unlist(data6)
> data8 <- Filter(function(x) {nchar(x) >= 2}, data7)
> data9 <- gsub("\\b\\d{1,2}\\b", "", data8)
> stopwords <- c("์ ๊ฑฐํ๊ณ ์ ํ๋ ๋จ์ด1", "๋จ์ด2" ...)
> for (word in stopwords) {
data9 <- gsub(paste0("\\b", word, "\\b"), "", data9)
}
> data10 <- data9[nzchar(data9)]
> write(unlist(data10), "speech2.txt")
> wordlist <- read.table("speech2.txt")
> wordcount <- table(wordlist)
> wordcloud(names(wordcount), freq=wordcount, scale=c(5,1),rot.per = 0.1, min.freq=1,random.order=F, colors=pal)
♥ ๋ด๊ฐ ์ ๊ฑฐํ ๋จ์ด
stopwords <- c("์๋", "์ฌ๋ฌ๋ถ", "์์ต๋", "์ฒซ๊ฑธ์์๋ด๋์ต๋๋ค", "ํ์ง", "๊ฐ์ฒญ", "๋ง์ค", "๋ค์ด", "๋ถ๊ตฌ", "์ํด", "์ฌ์ฌ", "๋ง๋ค๊ธฐ", "์ ์์ด๋ค", "์น์ด", "๋๋ฆฝ", "๊ฐ์ง", "๋ํต๋ น์", "์ค๋", "๋ฐ๋ก๊ทธ", "์์ํ๊ฒ ์ต๋", "์๋ชป๋", "์๋ก์์ง๊ฒ ์ต๋", "์๋ถ", "์ฌ์", "๋๋๊ฒ ์ต๋", "์๋", "์์", "์ผํ๊ฒ ์ต๋", "๋๊ฒ ์ต๋", "๋๋ถ์์ฃผํ๊ฒ ์ต๋", "์ ๊ฐ", "ํํธ์ผ๋ก์ฌ๋", "์๋ณด๋๋ง๊ฐํ", "ํ๊ธฐ", "์์ฃผ๊ตญ๋ฐฉ", "๋น๋กฏ", "์ง์ง", "๋ง๋ จ", "ํ ๋", "๋ถํต๋ฌธ", "์ ์ฐฉ์ํด์ผ๋ก์จํ๋ฐ๋", "๋ง๋ จํ๊ฒ ์ต๋", "์๊ฐ", "์ง์ ", "๋ง์", "์๋ช ", "์ถ๊ตฌ", "๊ฐ๋ด", "๊ตฌ์๋", "์ฐธ๋ชจ", "์ง์ ", "๋๋์ด", "ํ์", "ํผํผ", "์ค๊ตญ", "ํต๋ น", "ํ๋ฉด", "์ ", "ํ๊ฒ ์ต๋", "๋ฑ์ฉ", "๋ํ๋ฅผ์ ๋กํํ๊ณ ", "๋ธ๋ฆฌํ", "ํด๊ทผ", "์ํ", "์์ฅ์๊ฒ ์ต๋", "๋งก๊ธฐ๊ฒ ์ต๋", "๋ง๋๊ฒ ์ต๋", "๋์์น", "๋ฌด์", "์ญ์ฌ๊ฐ", "๋ณด๋ตํ๊ฒ ์ต๋", "๊ทธ๊ฒ", "์ฌ๋๋ํต๋ น์ด", "๋จ๊ฒ ์ต๋", "๋ถ๋ฆฌ", "์๊ฒ ์ต๋", "๋ง๋ค๊ฒ ์ต๋", "ํต์นํ", "๋ง๋๋์ญ์ฌ๊ฐ", "์ฅ์น", "๋ชจ๋", "์ ๋", "ํจ์", "๊ณ์", "ํ์", "๋จธ๋ฆฌ", "์ ๊ธฐ", "์ฌ์ง", "์ธ๋ฉด", "๊ฒฐ๋ณ", "์ฌ๋ถ", "์กฐ์ฑ", "์ข ์", "ํตํฉ", "์ฌ๋๋์ด", "๊ถ๋ ฅ๊ธฐ๊ด", "๋ฐ์น", "๊ธฐ๊ด", "๋ํ ๋ก ํ", "ํด์", "์ ๊ตญ", "์ง๋ฌธ", "ํ๋", "์ด๋", "์๋ชป", "์ฐ๋ฆฌ", "์ข์ ", "ํํต", "์ฒญ์ฐ", "์ฌ๊ฑด", "๊ตฌ์กฐ", "๋ถํ", "๋น์", "ํ๋ฒ", "ํ๊ฐ", "ํฐ์๋ฆฌ", "์ ๋ช ", "๊ฐ๋ ฅ", "์์ธ", "๋ถ๊ฐ๋ฅ", "๊ตฐ๋ฆผ", "๋ฌธ์ ", "๊ฐ๋ฑ", "๋ชจ์")
์ฐธ๊ณ ์ฌ์ดํธ
https://rjcoding.tistory.com/2
R์ ์ด์ฉํ ํ๊ธ ํ ์คํธ ๋ง์ด๋: ์์ฐ์ด์ฒ๋ฆฌ(KoNLP) + ์๋ ํด๋ผ์ฐ๋(wordcloud)
์๋ ๋ชจ๋ ์ค์น์ ์คํ์ "RGui"์์ ์งํ install.packages("multilinguer") library(multilinguer) ์ด๋ฐ๊ฑฐ ํ์ง๋ง์ธ์!! multilinguer::install_jdk() install.packages("jdk") ํด๋น๋ช ๋ น์ด๋ Java๊ฐ ๋ ์ค์น๋ฉ๋๋ค ํน์ Java๋ฅผ ๊น
rjcoding.tistory.com
R ์๋ ํด๋ผ์ฐ๋(word cloud) ๋ถ์ ๊ฒฐ๊ณผ ๋ง๋ค๊ธฐ
์ด๋ฒ์๋ ์๋ ํด๋ผ์ฐ๋๋ฅผ ๋ง๋ค์ด ๋ณด๋ ์์ ์ ๋๋ค. ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ ์ํคํผ๋์์ ํด๋ผ์ฐ๋ ์ปดํจํ ์ ๋ํ ๋ด์ฉ์ ์ฌ์ฉํ์ต๋๋ค. ๊ด๋ จ๋งํฌ : https://ko.wikipedia.org/wiki/ํด๋ผ์ฐ๋_์ปดํจํ ์ ๋งํฌ์์
bigdatapy.tistory.com

์ด๊ฑฐ ๋ง๊ณ ๋ ์์ฒญ ๋ง์ด ์ฐพ์๋ดค๋๋ฐ ๊ธฐ์ต ์ ๋จ..
๊ทธ๋ฅ ๋ด๊ฐ ํด๊ฒฐํ ๋ฐฉ๋ฒ๋๋ก ์ ๋ฆฌํด์ ๊ธฐ๋กํด ๋ด!
์ด์จ๋ ๋ค๋ค ํ์ด.. ๐ผ๐
'๐ซ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ์ด์ฌํ๋ก๊ทธ๋๋ฐ๊ธฐ์ด] 09. ํจ์ (0) | 2024.04.29 |
---|---|
[ํ์ด์ฌํ๋ก๊ทธ๋๋ฐ๊ธฐ์ด] 08. ์ค๊ฐ ๊ฐ๋ ์ ๋ฆฌ (0) | 2024.04.29 |
[๋ฐ์ดํฐ์ ๋ณด์ฒ๋ฆฌ] 4/21 ์ถ์ ์์ (๊ณผ์ ์๋ด ๋ฐ tip) (0) | 2024.04.21 |
[ํ์ด์ฌํ๋ก๊ทธ๋๋ฐ๊ธฐ์ด] 4/21 ์ถ์ ์์ (0) | 2024.04.21 |
[Cํ๋ก๊ทธ๋๋ฐ] 06. ํจ์์ ๊ธฐ์ต ํด๋์ค โ (0) | 2024.04.20 |