Description for Word Frequency Analysis
pacman::p_load("stringr",
"dplyr",
"tidytext",
"ggplot2", "ggwordcloud",
"showtext")
"stringr"
의 함수 str_replace_all(string, pattern, replacement)
: 텍스트에서 특정 규칙에 해당하는 문자를 찾아 다른 문자로 바꾸는 함수
string
: 처리할 텍스트pattern
: 규칙replacement
: 변경할 문자txt <- "치킨은!! 맛있다. xyz 정말 맛있다!@#"
txt
[1] "치킨은!! 맛있다. xyz 정말 맛있다!@#"
str_replace_all(string = txt,
pattern = "[^가-힣]", # [^가-힣] : 한글을 제외한 모든 문자를 의미하는 정규 표현식
replacement = " ") # 공백으로 변경
[1] "치킨은 맛있다 정말 맛있다 "
Result!
replacement
에 공백 " "
을 입력하여 한글을 제외한 모든 문자는 제거한다.
Caution!
정규 표현식은 특정한 규칙을 가진 문자열을 표현하는 언어이며, 특정 조건에 해당하는 문자를 찾거나 수정할 때 활용한다. 유용하게 사용하는 정규 표현식은 아래와 같다.
"stringr"
의 함수 str_squish
: 연속된 공백을 제거하고 공백을 하나만 남기는 함수txt <- "치킨은 맛있다 정말 맛있다"
txt
[1] "치킨은 맛있다 정말 맛있다"
str_squish(txt)
[1] "치킨은 맛있다 정말 맛있다"
문재인 대통령 대선 출마 연설문을 이용한 텍스트 전처리
readLines
를 이용하여 텍스트 파일로 저장되어 있는 문재인 대통령 대선 출마 연설문을 불러온다.[1] "정권교체 하겠습니다!"
[2] " 정치교체 하겠습니다!"
[3] " 시대교체 하겠습니다!"
[4] " "
[5] " ‘불비불명(不飛不鳴)’이라는 고사가 있습니다. 남쪽 언덕 나뭇가지에 앉아, 3년 동안 날지도 울지도 않는 새. 그러나 그 새는 한번 날면 하늘 끝까지 날고, 한번 울면 천지를 뒤흔듭니다."
[6] ""
# 1. 불필요한 문자 제거
moon <- str_replace_all(string = raw_moon,
pattern = "[^가-힣]", # [^가-힣] : 한글을 제외한 모든 문자를 의미하는 정규 표현식
replacement = " ") # 공백으로 변경
head(moon)
[1] "정권교체 하겠습니다 "
[2] " 정치교체 하겠습니다 "
[3] " 시대교체 하겠습니다 "
[4] " "
[5] " 불비불명 이라는 고사가 있습니다 남쪽 언덕 나뭇가지에 앉아 년 동안 날지도 울지도 않는 새 그러나 그 새는 한번 날면 하늘 끝까지 날고 한번 울면 천지를 뒤흔듭니다 "
[6] ""
# 2. 연속된 공백 제거
str_squish(moon)
[1] "정권교체 하겠습니다"
[2] "정치교체 하겠습니다"
[3] "시대교체 하겠습니다"
[4] ""
[5] "불비불명 이라는 고사가 있습니다 남쪽 언덕 나뭇가지에 앉아 년 동안 날지도 울지도 않는 새 그러나 그 새는 한번 날면 하늘 끝까지 날고 한번 울면 천지를 뒤흔듭니다"
[6] ""
[7] "그 동안 정치와 거리를 둬 왔습니다 그러나 암울한 시대가 저를 정치로 불러냈습니다 더 이상 남쪽 나뭇가지에 머무를 수 없었습니다 이제 저는 국민과 함께 높이 날고 크게 울겠습니다 오늘 저는 제 대 대통령선거 출마를 국민 앞에 엄숙히 선언합니다"
[8] ""
[9] ""
[10] "우리나라 대통령 이 되겠습니다"
[11] ""
[12] ""
[13] "존경하는 국민 여러분"
[14] ""
[15] "저는 대통령이 되겠습니다 우리나라 대통령이 되겠습니다 소수 특권층의 나라가 아니라 보통사람들이 주인인 우리나라 네 편 내 편 편가르지 않고 함께 가는 우리나라 우리 라는 말이 조금도 부끄럽지 않은 진정한 우리나라 의 대통령이 되겠습니다"
[16] ""
[17] "지금까지 우리 보통사람들은 날지도 울지도 못하는 새였습니다 나라의 주인으로 행세하지 못했고 주인으로 대접받지 못했습니다 나서서 말도 하지 못했습니다 이제 몸을 일으켜 날아야 합니다 당당하게 말하고 정치에 참여해야 합니다"
[18] ""
[19] "제가 추구하는 우리나라 는 정치인에게 맡겨놓는 나라가 아니라 시민이 직접 정치와 정책과정에 참여하는 나라입니다 저는 시민과 동행하는 정치를 하고 싶습니다 제가 추구하는 우리나라 는 특권과 불평등의 나라가 아니라 보통사람들이 함께 기회를 가지는 공평하고 정의로운 나라입니다"
[20] ""
[21] "이제 권력과 돈을 가진 집단이 나라를 그들 마음대로 움직이던 시대는 끝났습니다 힘없는 사람들에게 끝없이 희생을 강요하던 낡은 경제 낡은 정치 낡은 권력도 모두 끝났습니다 오늘 저 문재인은 우리나라를 우리 모두의 나라로 선언합니다"
[22] ""
[23] "국민이 모두 아픕니다"
[24] ""
[25] "제가 높이 날고 크게 울겠다고 결심한 이유는 보통사람들의 삶이 너무 고달프고 우리가 처한 현실이 너무도 엄중하기 때문입니다 근본적인 혁신 거대한 전환 없이는 나라가 무너지겠구나 하는 절박함 때문입니다"
[26] ""
[27] "지금 우리의 삶은 어떻습니까 우리 사회는 더 이상 경제성장의 과실을 나눠 갖지 않습니다 소수의 부유층과 대기업의 창고는 황금으로 가득 차지만 대부분 보통사람들은 취업불안 주거불안 고용불안 건강불안 노후불안 등 불안을 이불처럼 덮고 매일 잠자리에 들어야 합니다"
[28] ""
[29] "국민 한 사람 한 사람이 모두 아픕니다 빚 갚기 힘들어서 아이 키우기 힘들어서 일자리가 보이지 않아서 아픕니다 입시부담과 성적스트레스 그리고 학교폭력에 상처받은 어린 영혼들은 그 아픔을 견디지 못하고 하나 둘 우리 곁을 떠나고 있습니다 어르신들도 삶이 힘겨워서 스스로 세상을 버리는 분이 많습니다 왜 이렇게 아픈 일들이 계속 일어날까요 약자의 고통에 관심 없는 정부 부자와 강자의 기득권 지켜주기에 급급한 정치가 사람들에게서 희망을 앗아가 버렸기 때문입니다 지금 길거리는 표정 없는 사람들로 넘쳐납니다 국민들에게 희망을 주는 정치가 절실하게 필요합니다"
[30] ""
[31] "국민의 뜻이 대통령의 길입니다"
[32] ""
[33] "저는 대선출마를 결심하고 국민 여러분께 출마선언문을 함께 쓰자고 제안 드렸습니다 많은 분들이 글을 주셨습니다 소중한 의견과 제안을 보내 주셨습니다 고단하고 힘겨운 삶이 거기에 있었습니다 시민의 한숨과 눈물을 닦아주지 못하는 정치가 있었고 오히려 국민의 걱정거리가 된 초라한 정부의 모습도 있었습니다"
[34] ""
[35] "상식이 통하는 사회 권한과 책임이 비례하는 사회 다름을 인정하는 세상 개천에서 용이 날 수 있는 사회 철학이 있는 나라 약자의 얘기에 귀를 기울이고 어려운 사람에게 진심어린 위로를 건네는 세상 세금이 제대로 쓰이는 나라 힘없는 사람에게 관대하고 힘 있는 사람에게 엄격한 잣대가 적용되는 사회 국민들이 기대고 의지할 수 있도록 어깨를 내어주는 대통령 국민에게 부끄럽지 않은 정부를 만들어 달라는 것이 국민의 요구였습니다"
[36] ""
[37] "미안했습니다 가슴 아팠습니다 지극히 평범하고 상식적인 요구였지만 이 소박한 요구를 정치가 외면해 왔던 것입니다"
[38] ""
[39] "국가비전 많이 공부하고 많이 고민했습니다 그러나 거창하게만 들리는 이 국가비전 역시 국민의 마음속에 있었습니다 더욱 낮아지고 겸손해져서 국민의 마음속으로 들어가라 길이 보일 것이다 그것이 대통령의 길이다 국민들이 제게 준 가르침입니다 국민의 뜻에서 대통령의 길을 찾겠습니다 대한민국의 길을 찾겠습니다"
[40] ""
[41] "새로운 대한민국을 만들겠습니다 지금 우리는 거대한 전환 의 시기를 맞고 있습니다 기존의 사고 과거의 낡은 방식으로는 해결할 수 없는 근본적인 문제들이 우리 앞에 놓여 있습니다 지금까지 우리 사회를 지배해왔던 경쟁 승자독식 강자지배 의 원리로는 빈부격차의 확대 중산층과 서민들의 삶의 기반 붕괴 중소기업과 자영업자들의 고통 지역경제의 낙후 경제성장의 잠재력 약화라는 악순환에서 빠져나올 길이 없습니다"
[42] ""
[43] "더구나 지금 유럽 미국 중국 인도 등 세계 곳곳에서 경제위기가 고조되고 있습니다 무분별한 시장만능주의가 빚어낸 결과입니다 일부에서는 기존 자본주의 모델의 수명이 다했다는 진단을 내놓기도 합니다 이런 흐름은 과도한 대외의존형 경제와 취약한 사회안전망을 지닌 대한민국에게 더 큰 위기가 되고 있습니다 무엇보다도 우리는 개발독재 모델의 유산을 청산해야 합니다 시장만능주의로 대표되는 시장독재 모델도 극복해야 합니다 개방 공유 협동 공생의 새로운 원리를 채택해 인간이 인간답게 살 수 있는 민주적이고 공정한 시장경제 모델을 만들어야 합니다"
[44] ""
[45] "운 좋게 부자 집안에서 태어났다고 평생을 앞서가고 가난한 집 자녀들은 출발선부터 한참 뒤처진다면 참으로 불공평한 경쟁입니다 그것이 교육이든 비정규직이든 중소기업이든 지방 산업이든 공정하게 경쟁하고 노력한 만큼 정당한 보상을 받는 세상이 돼야 합니다 지방대학을 나와도 고등학교만 나와도 실력대로 대접받을 수 있어야 합니다 누구나 공정하게 경쟁하고 그 결과에 승복해야 하며 패자에게는 따뜻한 위로와 패자부활의 기회가 주어져야 합니다"
[46] ""
[47] "지나친 경쟁과 소외 양극화의 살벌한 세상 대신 사람들이 서로 믿고 협력하여 함께 더 큰 성장을 이루는 나라 그리고 그 결과를 공유하여 지속가능한 삶의 토대를 만드는 나라가 제가 꿈꾸는 나라입니다 북한과도 신뢰와 협력의 토대 위에 평화와 공동번영을 이루는 나라가 제가 꿈꾸는 나라입니다 저는 이 두 가지의 비전을 합쳐 상생과 평화의 새로운 대한민국 이라 부르고자 합니다"
[48] ""
[49] "상생과 평화의 대한민국은 공평과 정의에 바탕을 두고 성장의 과실을 함께 누리는 나라 복지가 강한 나라 일자리를 최우선에 두는 나라 아이들 여성 노인이 행복한 나라 안전하고 평화로운 나라가 될 것입니다"
[50] ""
[51] "공평과 정의를 나라의 근간으로 삼겠습니다 승자독식과 강자지배의 낡은 질서를 폐기하고 대한민국에 상생과 평화의 새 질서를 수립하기 위해 저는 먼저 공평과 정의의 원칙을 분명히 세우겠습니다 이명박 정권은 입으로는 공정사회를 부르짖었지만 실제로는 측근세력들이 국가권력을 사유화하고 공공성을 파괴했고 토건세력과 재벌집단 그리고 최상위 계층에게 이익을 과도하게 몰아줌으로써 공정이라는 말 자체를 냉소거리로 만들고 말았습니다 이래서는 신뢰와 상생의 사회가 불가능합니다"
[52] ""
[53] "저는 모든 시민들에게 균등한 기회를 제공하는 공평 과 반칙과 특권 부정부패를 척결하는 정의 이 두 가지 가치를 근간으로 새로운 대한민국을 만들어나가겠습니다 정의의 원칙은 특히 경제 분야에서 더 강조되어야 합니다 조세정의를 실현하여 소득 있는 곳에 세금 있다는 원칙이 흔들리지 않아야 합니다 세금 없는 불로소득이 있어서는 안 됩니다 정치민주화와 더불어 경제민주화가 절실히 필요합니다 재벌의 지배구조를 개선하고 공정거래질서를 확립해야 합니다 대기업과 중소기업 간의 힘의 불균형을 바로잡아 약자가 억울하게 당하는 것을 막아야 합니다"
[54] ""
[55] "노사는 한 배를 탄 공동운명체입니다 노동자들이 부당하게 해고되고 권익이 부당하게 침해당하는 일은 없어야 합니다 노동자들의 목소리가 적극적으로 경영에 반영될 때 기업 성과는 더욱 개선됩니다 그리하여 소수의 강자가 다수 위에 군림하지 않고 약자와 강자가 공존 상생하는 경제 질서를 만드는 것이 경제민주화의 주요 내용이 돼야 합니다"
[56] ""
[57] "대 성장전략으로 획기적 국가발전을 이루겠습니다"
[58] ""
[59] "선성장 후분배 낙수효과 같은 낡은 생각이 사회적 양극화와 성장잠재력 저하라는 아픈 결과를 낳았습니다 이를 극복하기 위해 성장과 분배 환경과 평화가 역동적 선순환을 이루는 대 성장전략을 추진하겠습니다"
[60] ""
[61] "첫째 분배와 재분배를 강화하여 중산층과 서민들의 유효수요와 구매력을 확대함으로써 소비와 투자를 촉진하는 포용적 성장 을 추진하겠습니다 이를 위해 최저임금을 높이고 생활임금 개념을 정책에 반영하겠습니다 복지투자 확대도 서민경제 활성화로 이어질 것입니다 또한 재벌과 거대기업의 과도한 경제력 집중을 억제하고 고용의 대부분을 감당하는 중소기업이 성장의 중심에 서도록 지원하겠습니다 사회적 기업과 협동조합을 육성하는 등 사회적 경제를 확대하여 포용적 성장을 이루기 위한 거시구조적 개혁도 추진해 나가겠습니다"
[62] ""
[63] "둘째 인적 자본에 대한 투자를 강화하여 사람 중심의 경제성장을 실현하겠습니다 교육혁신을 통해 학생들과 학부모의 고통을 줄이고 입시를 위한 과잉 학습 대신 평생학습체제가 자리 잡도록 일대 교육혁신을 해내겠습니다 문화혁신을 통해 모든 국민의 창조성을 높이고 이를 통해 기술혁신과 신산업 형성의 역동적 파동을 일으키는 창조적 성장 을 추진하겠습니다"
[64] ""
[65] "셋째 석유시대의 종말에 대비하여 신재생 에너지의 비중을 대폭 확대하고 녹색 에너지기술 건축 전기자동차 제조 등 여러 영역에서 신산업을 육성하는 생태적 성장 을 추진하겠습니다 추가 원전 건설을 중단하고 수명이 다된 원전은 가동을 중지시키겠습니다 그리고 신재생 에너지의 비중이 확대되는 만큼 원전의 비중을 줄여나가겠습니다 이는 단순히 에너지 종류를 바꾸거나 아끼는 정도가 아니라 산업과 소비생활 전반의 구조를 바꾸는 제 차 산업혁명이라 할 수 있는 변화입니다 이를 위해 토건사업 개발사업이 늘 우위에 있었던 정부구조와 재정지출 구조도 혁신하겠습니다 산업 환경 농림 국토 등 여러 부처를 지속가능성의 가치 아래 재편해 나가겠습니다"
[66] ""
[67] "넷째 인터넷과 를 통해 전세계로 확산되고 있는 소통 네트워크를 기반으로 국경과 경쟁을 넘어 집단협업 개방형 혁신 협동생태계를 활용하는 협력적 성장 을 추진하겠습니다 이런 새로운 인식 아래 한반도평화와 남북협력을 강력한 성장동력으로 활용하겠습니다 남북한은 자원 기술 인력 등 많은 점에서 탁월한 보완관계입니다 평화를 바탕으로 서로의 강점을 엮어 동북아시아로 또 세계로 함께 진출해야 합니다"
[68] ""
[69] "강한 복지국가 를 향해 담대하게 나아가겠습니다"
[70] ""
[71] "정조대왕은 위에서 손해를 보고 아래가 이득이 되게 하라 그것이 국가가 할 일이다 라고 말했습니다 백 년 전 이와 같은 소득재분배 복지국가의 사상을 가진 위정자가 지구상 어디에 또 있었겠습니까 이제 우리는 복지국가를 향해 담대하게 나아갈 때입니다 늦었기 때문에 더욱 발걸음을 재촉해야 합니다"
[72] ""
[73] "복지가 포퓰리즘 이라는 새누리당의 중상모략을 거부합니다 부자감세 대강 사업 같은 시대착오적 과오를 청산하고 하루빨리 복지국가로 가야 합니다 우리는 지금 복지국가로 가느냐 양극화의 분열된 국가로 가느냐 하는 절박한 싸움을 벌이고 있습니다 나라의 운명이 달린 이 건곤일척의 싸움은 복지에 진정성을 가진 진보세력만이 이길 수 있습니다"
[74] ""
[75] "복지는 낭비가 아니고 투자입니다 사람에 대한 투자이며 동시에 강력한 성장전략이기도 합니다 강한 복지국가일수록 국가 경쟁력도 더 높습니다 복지의 확대를 통해 보육 교육 의료 요양 등 사회서비스 부문에 수많은 일자리가 생기고 자영업에 몰려 있는 과잉인력을 흡수할 수 있습니다 공공임대주택과 같은 주거복지를 늘리는 것은 가장 좋은 전월세 대책입니다"
[76] ""
[77] "결국 복지국가로 가는 길은 사람에 대한 투자 일자리 창출 자영업 고통 경감 삶의 질 향상 등 석 조의 효과를 만나는 길입니다 우리는 과감히 강한 보편적 복지국가로 가야 합니다 이렇게 하면 국민의 살림이 서서히 나아질 것이며 년 뒤에는 큰 성과가 나타날 것입니다"
[78] ""
[79] "일자리 정부 로 일자리 혁명 을 이루겠습니다"
[80] ""
[81] "복지의 확대와 함께 저는 강력한 일자리 혁명 을 이루고자 합니다 지금 너무나 많은 젊은이들과 실업자 비정규직 종사자 근로능력이 있는 고령자들이 일할 수 있는 기회와 더 좋은 일자리를 요구하고 있습니다"
[82] ""
[83] "좋은 일자리 창출을 위해 비정규직의 정규직 전환 촉진 비정규직에 대한 차별철폐 근로시간 단축을 통한 신규고용 확대 고용영향평가제도의 채택 고용증진과 기업지원의 연계 등을 중요한 정책수단으로 채택하겠습니다 또한 정보통신 산업 바이오산업 나노 산업 신재생에너지 산업 문화산업과 콘텐츠산업 등 신산업을 크게 일으켜 일자리를 대대적으로 만들겠습니다 그리고 앞에서 말한 보육 교육 의료 복지 등 사회서비스 부문은 무궁무진한 잠재적 일자리의 보고입니다 일자리 없는 곳에서 희망을 찾을 수 없습니다 지방 일자리에 대해 특별한 노력을 기울이겠습니다 지역균형발전은 곧 산업 균형 일자리 균형이 목표입니다 이명박 정부의 방해에도 불구하고 끝내 국민이 지켜준 세종시 혁신도시를 지방 일자리 창출의 거점으로 만들겠습니다 공기업과 공무원의 지역우대 채용 각종 정부 지원의 지방채용 연동제를 확대하겠습니다 이 모든 정책의 실효성을 담보하기 위해 대통령이 되면 저는 가장 먼저 대통령 직속으로 국가일자리위원회 를 설치하고 매달 일자리점검 범정부회의 를 개최하여 일자리 마련 상황을 점검 독려하겠습니다 저는 먼 훗날 일자리 혁명을 일으킨 대통령 으로 평가받기를 희망합니다"
[84] ""
[85] "아이들과 여성 그리고 노인들이 활짝 웃는 나라를 만들겠습니다"
[86] ""
[87] "아이들이 행복한 나라를 만들어야 합니다 행복한 교육 즐거운 학교를 만드는 것이 교육혁신의 기본방향이어야 합니다 이를 위해 유아 초등단계의 과도한 학습 부담을 없애고 특기적성 이외의 사교육을 최대한 줄여 나가겠습니다"
[88] ""
[89] "교육이 이념의 전장이 되어서는 곤란합니다 교육은 진보도 보수도 아닌 아이들을 위해 존재해야 합니다 학생 교사 학교의 자율성 창의성을 보장하고 마을이 아이를 함께 키울 수 있도록 지원하겠습니다 또한 좋은 일자리와 산업혁신을 위해서는 평생학습체제가 뒷받침되어야 합니다 평생학습 참가율을 선진국 수준으로 끌어올리겠습니다"
[90] ""
[91] "지금 우리가 누리는 풍요는 모두 어르신들의 희생 덕분입니다 그러나 어르신들은 노후대비를 할 겨를도 없이 급격한 가족구조 변화와 노동시장 변화로 극심한 어려움을 겪고 있습니다 이제 사회가 효도하겠습니다 참여정부가 도입했던 기초노령연금 장기요양보험을 대폭 강화하고 건강지원 방법을 새로운 차원으로 개선하겠습니다 노인 일자리를 늘리고 특히 그 연륜과 경험을 지역사회에 활용할 수 있는 방안도 마련하겠습니다"
[92] ""
[93] "남녀의 실질적 평등을 위해서도 아직 남은 숙제가 많습니다 가사와 육아 노인을 돌보는 책임은 여전히 여성들에게만 맡겨져 있습니다 수준에 훨씬 못 미치는 여성 경제활동 참가율이나 세계 최저의 출산율은 대한민국의 여성들이 얼마나 힘들게 살고 있는지 잘 말해줍니다"
[94] ""
[95] "가족 돌봄의 공적서비스를 확대해서 여성의 부담을 줄이겠습니다 취업과 승진기회의 제한 등 사회적 차별을 해소할 수 있는 적극적 대책도 만들겠습니다 남녀가 함께 일하고 함께 돌보는 사회로 전진하겠습니다"
[96] ""
[97] "대한민국은 강하게 한반도는 평화롭게 만들겠습니다"
[98] ""
[99] "국가의 존립과 국토방위는 헌법상 대통령에게 주어진 가장 막중한 의무입니다 모든 대외정책의 출발은 튼튼한 국방력입니다 대한민국 군을 강하고 유능한 군대로 만들겠습니다 미국과의 관계를 더욱 건강하고 바람직한 관계로 발전시키겠습니다 중국과 일본 러시아 등 주변국들과도 호혜협력 관계를 더욱 강화해 나가겠습니다"
[100] ""
[101] "전쟁의 불안에서 한반도를 해방시키겠습니다 이명박 정부가 파탄에 빠뜨린 안보를 바로 세우겠습니다 새누리당 정권 아래서 분쟁과 대결로 얼룩졌던 휴전선과 일대를 평화경제 지대로 만들겠습니다 김대중 대통령의 공동선언과 노무현 대통령의 남북정상선언을 남북 양측이 책임 있게 지키고 이행하도록 하겠습니다 개성공단을 확장하고 금강산 관광을 재개하여 금강산과 설악산 평창을 연결하는 국제관광특구를 만들어 적극 키우겠습니다 남북 군사대결지대를 공동이익을 창출하는 경제지대로 전환하여 부모들이 안심하고 자식을 군대 보내는 안보환경을 만들겠습니다 특권층의 군대 안가기를 철저하게 막는 한편 젊은이들의 병역 부담을 줄여나가겠습니다 사병의 복지도 크게 향상시키겠습니다"
[102] ""
[103] "북핵문제를 평화적으로 해결하고 한반도 평화체제를 구축하겠습니다 저는 북한의 핵을 용인할 수 없다는 확고한 입장을 가지고 있습니다 대화와 협상을 통해 반드시 핵을 포기하도록 만들겠습니다 실종된 자회담을 재개하고 대한민국의 주도적 역할을 복원하겠습니다 자회담과 남북관계 복원 평화체제 구축작업을 병행 추진하여 한반도에 평화와 공동번영의 선순환 구조를 만들어 나가겠습니다 그리고 그 속에서 새로운 성장동력을 찾겠습니다"
[104] ""
[105] "순국선열과 민주영령 앞에서 약속드립니다"
[106] ""
[107] "존경하는 국민 여러분 이 자리는 애국 민주 헌신이라는 세 가지 가치가 살아 숨 쉬는 역사의 현장입니다 저는 역사가 보는 앞에서 대통령 출마선언을 함으로써 역사 앞에 제 자신을 바치겠다는 결연한 의지를 밝힙니다 역사를 가슴에 새기고 미래를 향해 뚜벅뚜벅 걸어가겠다는 의지를 밝힙니다"
[108] ""
[109] "저것은 넘을 수 없는 벽이라고 고개를 떨구고 있을 때 담쟁이 잎 하나는 담쟁이 잎 수천 개를 이끌고 결국 그 벽을 넘는다"
[110] ""
[111] "도종환 담쟁이"
[112] ""
[113] "도종환 시인의 담쟁이 라는 시의 일부입니다 우리 모두 담쟁이처럼 서로 두 손 꽉 잡고 벽을 넘읍시다 특권의 벽 차별의 벽 분단과 분열의 벽 패배주의의 벽을 넘읍시다 저 문재인과 함께 새로운 세상의 문을 엽시다"
[114] ""
[115] "저 문재인은 겸손한 권력 따뜻한 나라를 만들겠습니다 국민의 마음에서 길을 찾는 우리나라 대통령이 되겠습니다 우리 모두가 주인인 진정한 우리나라 대통령이 되겠습니다"
[116] ""
[117] "대단히 고맙습니다"
head(moon)
[1] "정권교체 하겠습니다 "
[2] " 정치교체 하겠습니다 "
[3] " 시대교체 하겠습니다 "
[4] " "
[5] " 불비불명 이라는 고사가 있습니다 남쪽 언덕 나뭇가지에 앉아 년 동안 날지도 울지도 않는 새 그러나 그 새는 한번 날면 하늘 끝까지 날고 한번 울면 천지를 뒤흔듭니다 "
[6] ""
## 전처리 작업 한 번에 하기
moon <- raw_moon %>%
str_replace_all("[^가-힣]", " ") %>% # 한글을 제외한 모든 문자를 공백으로 변경
str_squish() %>% # 연속된 공백 제거
as_tibble() # Tibble 형태로 변환
moon
# A tibble: 117 × 1
value
<chr>
1 "정권교체 하겠습니다"
2 "정치교체 하겠습니다"
3 "시대교체 하겠습니다"
4 ""
5 "불비불명 이라는 고사가 있습니다 남쪽 언덕 나뭇가지에 앉아 년 동안…
6 ""
7 "그 동안 정치와 거리를 둬 왔습니다 그러나 암울한 시대가 저를 정치…
8 ""
9 ""
10 "우리나라 대통령 이 되겠습니다"
# ℹ 107 more rows
Caution!
Package "dplyr"
의 함수 as_tibble
는 입력한 객체를 Tibble 형태로 변환한다. Tibble은 데이터 프레임(Data Frame)을 다루기 편하게 개선한 형태로 다음과 같은 특징을 가지고 있다.
# R에서 제공하는 iris Dataset
data(iris) # 데이터 불러오기
iris # Data Frame 형태로 출력
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5.0 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa
11 5.4 3.7 1.5 0.2 setosa
12 4.8 3.4 1.6 0.2 setosa
13 4.8 3.0 1.4 0.1 setosa
14 4.3 3.0 1.1 0.1 setosa
15 5.8 4.0 1.2 0.2 setosa
16 5.7 4.4 1.5 0.4 setosa
17 5.4 3.9 1.3 0.4 setosa
18 5.1 3.5 1.4 0.3 setosa
19 5.7 3.8 1.7 0.3 setosa
20 5.1 3.8 1.5 0.3 setosa
21 5.4 3.4 1.7 0.2 setosa
22 5.1 3.7 1.5 0.4 setosa
23 4.6 3.6 1.0 0.2 setosa
24 5.1 3.3 1.7 0.5 setosa
25 4.8 3.4 1.9 0.2 setosa
26 5.0 3.0 1.6 0.2 setosa
27 5.0 3.4 1.6 0.4 setosa
28 5.2 3.5 1.5 0.2 setosa
29 5.2 3.4 1.4 0.2 setosa
30 4.7 3.2 1.6 0.2 setosa
31 4.8 3.1 1.6 0.2 setosa
32 5.4 3.4 1.5 0.4 setosa
33 5.2 4.1 1.5 0.1 setosa
34 5.5 4.2 1.4 0.2 setosa
35 4.9 3.1 1.5 0.2 setosa
36 5.0 3.2 1.2 0.2 setosa
37 5.5 3.5 1.3 0.2 setosa
38 4.9 3.6 1.4 0.1 setosa
39 4.4 3.0 1.3 0.2 setosa
40 5.1 3.4 1.5 0.2 setosa
41 5.0 3.5 1.3 0.3 setosa
42 4.5 2.3 1.3 0.3 setosa
43 4.4 3.2 1.3 0.2 setosa
44 5.0 3.5 1.6 0.6 setosa
45 5.1 3.8 1.9 0.4 setosa
46 4.8 3.0 1.4 0.3 setosa
47 5.1 3.8 1.6 0.2 setosa
48 4.6 3.2 1.4 0.2 setosa
49 5.3 3.7 1.5 0.2 setosa
50 5.0 3.3 1.4 0.2 setosa
51 7.0 3.2 4.7 1.4 versicolor
52 6.4 3.2 4.5 1.5 versicolor
53 6.9 3.1 4.9 1.5 versicolor
54 5.5 2.3 4.0 1.3 versicolor
55 6.5 2.8 4.6 1.5 versicolor
56 5.7 2.8 4.5 1.3 versicolor
57 6.3 3.3 4.7 1.6 versicolor
58 4.9 2.4 3.3 1.0 versicolor
59 6.6 2.9 4.6 1.3 versicolor
60 5.2 2.7 3.9 1.4 versicolor
61 5.0 2.0 3.5 1.0 versicolor
62 5.9 3.0 4.2 1.5 versicolor
63 6.0 2.2 4.0 1.0 versicolor
64 6.1 2.9 4.7 1.4 versicolor
65 5.6 2.9 3.6 1.3 versicolor
66 6.7 3.1 4.4 1.4 versicolor
67 5.6 3.0 4.5 1.5 versicolor
68 5.8 2.7 4.1 1.0 versicolor
69 6.2 2.2 4.5 1.5 versicolor
70 5.6 2.5 3.9 1.1 versicolor
71 5.9 3.2 4.8 1.8 versicolor
72 6.1 2.8 4.0 1.3 versicolor
73 6.3 2.5 4.9 1.5 versicolor
74 6.1 2.8 4.7 1.2 versicolor
75 6.4 2.9 4.3 1.3 versicolor
76 6.6 3.0 4.4 1.4 versicolor
77 6.8 2.8 4.8 1.4 versicolor
78 6.7 3.0 5.0 1.7 versicolor
79 6.0 2.9 4.5 1.5 versicolor
80 5.7 2.6 3.5 1.0 versicolor
81 5.5 2.4 3.8 1.1 versicolor
82 5.5 2.4 3.7 1.0 versicolor
83 5.8 2.7 3.9 1.2 versicolor
84 6.0 2.7 5.1 1.6 versicolor
85 5.4 3.0 4.5 1.5 versicolor
86 6.0 3.4 4.5 1.6 versicolor
87 6.7 3.1 4.7 1.5 versicolor
88 6.3 2.3 4.4 1.3 versicolor
89 5.6 3.0 4.1 1.3 versicolor
90 5.5 2.5 4.0 1.3 versicolor
91 5.5 2.6 4.4 1.2 versicolor
92 6.1 3.0 4.6 1.4 versicolor
93 5.8 2.6 4.0 1.2 versicolor
94 5.0 2.3 3.3 1.0 versicolor
95 5.6 2.7 4.2 1.3 versicolor
96 5.7 3.0 4.2 1.2 versicolor
97 5.7 2.9 4.2 1.3 versicolor
98 6.2 2.9 4.3 1.3 versicolor
99 5.1 2.5 3.0 1.1 versicolor
100 5.7 2.8 4.1 1.3 versicolor
101 6.3 3.3 6.0 2.5 virginica
102 5.8 2.7 5.1 1.9 virginica
103 7.1 3.0 5.9 2.1 virginica
104 6.3 2.9 5.6 1.8 virginica
105 6.5 3.0 5.8 2.2 virginica
106 7.6 3.0 6.6 2.1 virginica
107 4.9 2.5 4.5 1.7 virginica
108 7.3 2.9 6.3 1.8 virginica
109 6.7 2.5 5.8 1.8 virginica
110 7.2 3.6 6.1 2.5 virginica
111 6.5 3.2 5.1 2.0 virginica
112 6.4 2.7 5.3 1.9 virginica
113 6.8 3.0 5.5 2.1 virginica
114 5.7 2.5 5.0 2.0 virginica
115 5.8 2.8 5.1 2.4 virginica
116 6.4 3.2 5.3 2.3 virginica
117 6.5 3.0 5.5 1.8 virginica
118 7.7 3.8 6.7 2.2 virginica
119 7.7 2.6 6.9 2.3 virginica
120 6.0 2.2 5.0 1.5 virginica
121 6.9 3.2 5.7 2.3 virginica
122 5.6 2.8 4.9 2.0 virginica
123 7.7 2.8 6.7 2.0 virginica
124 6.3 2.7 4.9 1.8 virginica
125 6.7 3.3 5.7 2.1 virginica
126 7.2 3.2 6.0 1.8 virginica
127 6.2 2.8 4.8 1.8 virginica
128 6.1 3.0 4.9 1.8 virginica
129 6.4 2.8 5.6 2.1 virginica
130 7.2 3.0 5.8 1.6 virginica
131 7.4 2.8 6.1 1.9 virginica
132 7.9 3.8 6.4 2.0 virginica
133 6.4 2.8 5.6 2.2 virginica
134 6.3 2.8 5.1 1.5 virginica
135 6.1 2.6 5.6 1.4 virginica
136 7.7 3.0 6.1 2.3 virginica
137 6.3 3.4 5.6 2.4 virginica
138 6.4 3.1 5.5 1.8 virginica
139 6.0 3.0 4.8 1.8 virginica
140 6.9 3.1 5.4 2.1 virginica
141 6.7 3.1 5.6 2.4 virginica
142 6.9 3.1 5.1 2.3 virginica
143 5.8 2.7 5.1 1.9 virginica
144 6.8 3.2 5.9 2.3 virginica
145 6.7 3.3 5.7 2.5 virginica
146 6.7 3.0 5.2 2.3 virginica
147 6.3 2.5 5.0 1.9 virginica
148 6.5 3.0 5.2 2.0 virginica
149 6.2 3.4 5.4 2.3 virginica
150 5.9 3.0 5.1 1.8 virginica
as_tibble(iris) # Tibble 형태로 변환
# A tibble: 150 × 5
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
<dbl> <dbl> <dbl> <dbl> <fct>
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa
# ℹ 140 more rows
"tidytext"
: 텍스트를 정돈된 데이터(Tidy Data) 형태로 유지하며 분석할 수 있게 도와주는 패키지
"dplyr"
와 "ggplot2"
를 함께 활용하면 편리하게 텍스트를 분석할 수 있다."tidytext"
의 함수 unnest_tokens(tbl, input, output, token)
를 이용하여 토큰화를 수행할 수 있다.
tbl
: 데이터 프레임 / Tibble 형태의 데이터input
: 토큰화를 수행할 텍스트가 포함된 변수명output
: 출력 변수명token
: 텍스트를 나누는 기준
sentences
: 문장 기준words
: 띄어쓰기 기준characters
: 글자 기준# Tibble 형태의 데이터
text <- tibble(value = "대한민국은 민주공화국이다.
대한민국의 주권은 국민에게 있고,
모든 권력은 국민으로부터 나온다.")
text
# A tibble: 1 × 1
value
<chr>
1 "대한민국은 민주공화국이다. \n 대한민국의 주권은 국민…
# 문장 기준 토큰화
text %>%
unnest_tokens(input = value, # 토큰화를 수행할 텍스트가 포함된 변수명
output = word, # 출력 변수명
token = "sentences") # "sentences" : 문장 기준으로 토큰화
# A tibble: 2 × 1
word
<chr>
1 대한민국은 민주공화국이다.
2 대한민국의 주권은 국민에게 있고, 모든 권력은 국민으…
# Tibble 형태의 데이터
text <- tibble(value = "대한민국은 민주공화국이다.
대한민국의 주권은 국민에게 있고,
모든 권력은 국민으로부터 나온다.")
text
# A tibble: 1 × 1
value
<chr>
1 "대한민국은 민주공화국이다. \n 대한민국의 주권은 국민…
# 띄어쓰기 기준 토큰화
text %>%
unnest_tokens(input = value, # 토큰화를 수행할 텍스트가 포함된 변수명
output = word, # 출력 변수명
token = "words") # "words" : 띄어쓰기 기준으로 토큰화
# A tibble: 10 × 1
word
<chr>
1 대한민국은
2 민주공화국이다
3 대한민국의
4 주권은
5 국민에게
6 있고
7 모든
8 권력은
9 국민으로부터
10 나온다
# Tibble 형태의 데이터
text <- tibble(value = "대한민국은 민주공화국이다.
대한민국의 주권은 국민에게 있고,
모든 권력은 국민으로부터 나온다.")
text
# A tibble: 1 × 1
value
<chr>
1 "대한민국은 민주공화국이다. \n 대한민국의 주권은 국민…
# 글자 기준 토큰화
text %>%
unnest_tokens(input = value, # 토큰화를 수행할 텍스트가 포함된 변수명
output = word, # 출력 변수명
token = "characters") # "characters" : 글자 기준으로 토큰화
# A tibble: 40 × 1
word
<chr>
1 대
2 한
3 민
4 국
5 은
6 민
7 주
8 공
9 화
10 국
# ℹ 30 more rows
문재인 대통령 대선 출마 연설문을 이용한 토큰화
moon # 전처리를 수행한 결과가 저장되어 있는 객체 "moon"
# A tibble: 117 × 1
value
<chr>
1 "정권교체 하겠습니다"
2 "정치교체 하겠습니다"
3 "시대교체 하겠습니다"
4 ""
5 "불비불명 이라는 고사가 있습니다 남쪽 언덕 나뭇가지에 앉아 년 동안…
6 ""
7 "그 동안 정치와 거리를 둬 왔습니다 그러나 암울한 시대가 저를 정치…
8 ""
9 ""
10 "우리나라 대통령 이 되겠습니다"
# ℹ 107 more rows
# 1. 문장 기준 토큰화
sentance_space <- moon %>%
unnest_tokens(input = value, # 토큰화를 수행할 텍스트가 포함된 변수명
output = word, # 출력 변수명
token = "sentences") # "sentences" : 문장 기준으로 토큰화
sentance_space
# A tibble: 59 × 1
word
<chr>
1 정권교체 하겠습니다
2 정치교체 하겠습니다
3 시대교체 하겠습니다
4 불비불명 이라는 고사가 있습니다 남쪽 언덕 나뭇가지에 앉아 년 동안 …
5 그 동안 정치와 거리를 둬 왔습니다 그러나 암울한 시대가 저를 정치로…
6 우리나라 대통령 이 되겠습니다
7 존경하는 국민 여러분
8 저는 대통령이 되겠습니다 우리나라 대통령이 되겠습니다 소수 특권층…
9 지금까지 우리 보통사람들은 날지도 울지도 못하는 새였습니다 나라의 …
10 제가 추구하는 우리나라 는 정치인에게 맡겨놓는 나라가 아니라 시민이…
# ℹ 49 more rows
# 2. 띄어쓰기 기준 토큰화
word_space <- moon %>%
unnest_tokens(input = value, # 토큰화를 수행할 텍스트가 포함된 변수명
output = word, # 출력 변수명
token = "words") # "words" : 띄어쓰기 기준으로 토큰화
word_space
# A tibble: 2,025 × 1
word
<chr>
1 정권교체
2 하겠습니다
3 정치교체
4 하겠습니다
5 시대교체
6 하겠습니다
7 불비불명
8 이라는
9 고사가
10 있습니다
# ℹ 2,015 more rows
# 3. 글자 기준 토큰화
char_space <- moon %>%
unnest_tokens(input = value, # 토큰화를 수행할 텍스트가 포함된 변수명
output = word, # 출력 변수명
token = "characters") # "characters" : 글자 기준으로 토큰화
char_space
# A tibble: 6,517 × 1
word
<chr>
1 정
2 권
3 교
4 체
5 하
6 겠
7 습
8 니
9 다
10 정
# ℹ 6,507 more rows
"dplyr"
의 함수 count
를 이용하면 단어의 빈도를 계산할 수 있다.
count
의 옵션 sort = T
을 지정하면 빈도가 높은 순(내림차순)으로 단어를 정렬한다.word_count <- word_space %>% # 문재인 대통령 대선 출마 연설문을 "띄어쓰기 기준"으로 토큰화한 결과가 저장되어 있는 객체 "word_space"
count(word, # 변수명
sort = T) # 내림차순으로 정렬
word_count
# A tibble: 1,440 × 2
word n
<chr> <int>
1 합니다 27
2 수 16
3 있습니다 13
4 저는 13
5 등 12
6 있는 12
7 함께 12
8 만들겠습니다 11
9 일자리 10
10 국민의 9
# ℹ 1,430 more rows
Result!
“합니다”를 27번으로 가장 많이 사용하였고, 그 뒤로는 “수”, “있습니다”를 많이 사용하였다.
"stringr"
의 함수 str_count
를 이용하여 문자열의 글자 수를 계산할 수 있다.# "배"의 글자 수
str_count("배")
[1] 1
# "사과"의 글자 수
str_count("사과")
[1] 2
word_count1 <- word_count %>% # 단어 빈도가 저장되어 있는 객체 in 3-1
filter(str_count(word) > 1) # 두 글자 이상의 단어만 추출 -> 한 글자로 된 단어 제거
word_count1
# A tibble: 1,384 × 2
word n
<chr> <int>
1 합니다 27
2 있습니다 13
3 저는 13
4 있는 12
5 함께 12
6 만들겠습니다 11
7 일자리 10
8 국민의 9
9 우리 9
10 우리나라 9
# ℹ 1,374 more rows
Result!
함수 str_count
는 글자 수를 계산하는 함수이고, 함수 filter
는 조건에 맞는 행만 추출하는 함수이다. 이 두 함수를 이용하여 한 글자로 된 단어를 제거할 수 있다.
# 자주 사용한 상위 20개 단어
top20 <- word_count1 %>% # 단어 빈도가 내림차순으로 정렬 & 두 글자 이상의 단어만 저장되어 있는 객체
head(20) # 상위 20개의 단어 추출
top20
# A tibble: 20 × 2
word n
<chr> <int>
1 합니다 27
2 있습니다 13
3 저는 13
4 있는 12
5 함께 12
6 만들겠습니다 11
7 일자리 10
8 국민의 9
9 우리 9
10 우리나라 9
11 새로운 8
12 위해 8
13 그리고 7
14 나라 7
15 나라가 7
16 지금 7
17 낡은 6
18 대통령이 6
19 되겠습니다 6
20 없는 6
"ggplot2"
의 함수 geom_col
을 이용하면 막대 그래프를 만들 수 있다.# 기본 막대 그래프
ggplot(top20, # 자주 사용한 상위 20개 단어가 저장되어 있는 객체 in 3-3
aes(x = reorder(word, n), y = n)) + # reorder : 단어 빈도순 정렬
geom_col() + # 막대 그래프
coord_flip() # 막대를 가로로 회전
# 그래프 다듬기
ggplot(top20, # 자주 사용한 상위 20개 단어가 저장되어 있는 객체 in 3-3
aes(x = reorder(word, n), y = n)) + # reorder : 단어 빈도순 정렬
geom_col() + # 막대 그래프
coord_flip() + # 막대를 가로로 회전
geom_text(aes(label = n), hjust = -0.3) + # 막대 밖 빈도 표시
labs(title = "문재인 대통령 출마 연설문 단어 빈도", # 그래프 제목
x = "", y = "") + # x축, y축 이름
theme(title = element_text(size = 12)) # 그래프 제목 크기
그래프의 폰트를 한글 지원 폰트로 바꾸면 한글을 아름답게 표현할 수 있다. Package "showtext"
의 함수 font_add_google
을 이용해 구글 폰트에서 사용할 폰트를 불러온 다음 showtext_auto()
를 실행해 폰트를 R에서 활용하도록 설정한다. 주의해야할 점은 R을 종료하면 폰트 설정이 사라지기 때문에 시작할 때마다 Package "showtext"
를 이용하여 구글 폰트를 불러와 설정해야 한다.
# 감자꽃마을 폰트 불러오기
font_add_google(name = "Gamja Flower", # 구글 폰트에서 사용하고자 하는 폰트 이름
family = "gamjaflower") # R에서 사용할 폰트 이름 -> 사용자 지정
showtext_auto()
# 막대 그래프
ggplot(top20, # 자주 사용한 상위 20개 단어가 저장되어 있는 객체 in 3-3
aes(x = reorder(word, n), y = n)) + # reorder : 단어 빈도순 정렬
geom_col() + # 막대 그래프
coord_flip() + # 막대를 가로로 회전
geom_text(aes(label = n), hjust = -0.3) + # 막대 밖 빈도 표시
labs(title = "문재인 대통령 출마 연설문 단어 빈도", # 그래프 제목
x = "", y = "") + # x축, y축 이름
theme(title = element_text(size = 12), # 그래프 제목 크기
text = element_text(family = "gamjaflower")) # 폰트 적용
"ggwordcloud"
의 함수 geom_text_wordcloud
를 이용하여 만들 수 있다.
# 그래프 다듬기
ggplot(word_count1, # 단어 빈도가 내림차순으로 정렬 & 두 글자 이상의 단어만 저장되어 있는 객체 in 3-2
aes(label = word,
size = n, # 빈도에 따라 단어의 크기를 다르게 표현
col = n)) + # 빈도에 따라 단어의 색깔을 다르게 표현
geom_text_wordcloud(seed = 1234) + # seed값 입력 -> 항상 같은 모양의 그래프를 출력
scale_radius(limits = c(3, NA), # 최소, 최대 단어 빈도
range = c(3, 30)) + # 최소, 최대 글자 크기
scale_color_gradient(low = "#66aaf2", # 최소 빈도 색깔
high = "#004EA1") + # 최고 빈도 색깔
theme_minimal() # 배경 없는 테마 적용
# 그래프 폰트 변경
# 나눔고딕 폰트 불러오기
font_add_google(name = "Nanum Gothic", # 구글 폰트에서 사용하고자 하는 폰트 이름
family = "nanumgothic") # R에서 사용할 폰트 이름 -> 사용자 지정
showtext_auto()
# 워드 클라우드
ggplot(word_count1, # 단어 빈도가 내림차순으로 정렬 & 두 글자 이상의 단어만 저장되어 있는 객체 in 3-2
aes(label = word,
size = n, # 빈도에 따라 단어의 크기를 다르게 표현
col = n)) + # 빈도에 따라 단어의 색깔을 다르게 표현
geom_text_wordcloud(seed = 1234, # seed값 입력 -> 항상 같은 모양의 그래프를 출력
family = "nanumgothic") + # 폰트 적용
scale_radius(limits = c(3, NA), # 최소, 최대 단어 빈도
range = c(3, 30)) + # 최소, 최대 글자 크기
scale_color_gradient(low = "#66aaf2", # 최소 빈도 색깔
high = "#004EA1") + # 최고 빈도 색깔
theme_minimal() # 배경 없는 테마 적용
# 검은고딕 폰트 불러오기
font_add_google(name = "Black Han Sans", # 구글 폰트에서 사용하고자 하는 폰트 이름
family = "blackhansans") # R에서 사용할 폰트 이름 -> 사용자 지정
showtext_auto()
# 워드 클라우드
ggplot(word_count1, # 단어 빈도가 내림차순으로 정렬 & 두 글자 이상의 단어만 저장되어 있는 객체 in 3-2
aes(label = word,
size = n, # 빈도에 따라 단어의 크기를 다르게 표현
col = n)) + # 빈도에 따라 단어의 색깔을 다르게 표현
geom_text_wordcloud(seed = 1234, # seed값 입력 -> 항상 같은 모양의 그래프를 출력
family = "blackhansans") + # 폰트 적용
scale_radius(limits = c(3, NA), # 최소, 최대 단어 빈도
range = c(3, 30)) + # 최소, 최대 글자 크기
scale_color_gradient(low = "#66aaf2", # 최소 빈도 색깔
high = "#004EA1") + # 최고 빈도 색깔
theme_minimal() # 배경 없는 테마 적용
Caution!
워드 클라우드는 디자인이 아름다워서 자주 사용하지만 분석 결과를 정확하게 표현하는 데는 적합하지 않다. 단어 빈도를 크기와 색으로 표현하므로 “어떤 단어를 몇 번 사용하였는지” 정확히 알 수 없고, 단어 배치가 산만해서 “어떤 단어를 다른 단어보다 얼마나 더 많이 사용하였는지” 비교하기 어렵다. 분석 결과를 정확하게 표현하는 것이 목적이라면 워드 클라우드보다는 막대 그래프를 이용하는 게 좋다.
"KoNLP"
를 이용할 수 있다.
"KoNLP"
를 설치하기 위해 3가지 과정을 거친다.
"KoNLP"
의 의존성 Package 설치"KoNLP"
설치# 1. 자바와 rJava 설치
install.packages("multilinguer")
library(multilinguer)
install_jdk()
# 2. Package "KoNLP"의 의존성 Package 설치
install.packages(c("stringr", "hash", "tau", "Sejong", "RSQLite", "devtools"),
type = "binary")
# 3. Package "KoNLP" 설치
install.packages("remotes")
library(remotes)
remotes::install_github("haven-jeon/KoNLP",
upgrade = "never",
INSTALL_opts = c("--no-multiarch"))
library(KoNLP)
"KoNLP"
가 사용하는 “NIA 사전”은 120만여 개 단어로 구성되며, 형태소 분석을 할 때 NIA 사전을 사용하도록 useNIADic()
를 실행한다.Backup was just finished!
1213109 words dictionary was built.
"KoNLP"
의 함수 extractNoun
: 텍스트의 형태소를 분석해 명사를 추출하는 함수
list
형태로 출력한다.# Tibble 형태의 데이터
text <- tibble(
value = c("대한민국은 민주공화국이다.",
"대한민국의 주권은 국민에게 있고, 모든 권력은 국민으로부터 나온다."))
text
# A tibble: 2 × 1
value
<chr>
1 대한민국은 민주공화국이다.
2 대한민국의 주권은 국민에게 있고, 모든 권력은 국민으로부터 나온다.
extractNoun(text$value)
[[1]]
[1] "대한민국" "민주공화국"
[[2]]
[1] "대한민국" "주권" "국민" "권력" "국민"
Caution!
Package "tidytext"
의 함수 unnest_tokens
옵션 token
에 extractNoun
를 입력하면 다루기 쉬운 Tibble 형태로 명사를 출력한다.
text %>%
unnest_tokens(input = value, # 토큰화를 수행할 텍스트가 포함된 변수명
output = word, # 출력 변수명
token = extractNoun) # 명사 기준으로 토큰화
# A tibble: 7 × 1
word
<chr>
1 대한민국
2 민주공화국
3 대한민국
4 주권
5 국민
6 권력
7 국민
문재인 대통령 대선 출마 연설문을 이용한 명사 기준 토큰화
# Ver.1 : Package `"KoNLP"`의 함수 `extractNoun`
extractNoun(moon$value) # 전처리를 수행한 결과가 저장되어 있는 객체 "moon"
[[1]]
[1] "정권교체" "하겠습니"
[[2]]
[1] "정치" "교체" "하겠습니"
[[3]]
[1] "시대" "교체" "하겠습니"
[[4]]
[1] ""
[[5]]
[1] "불비불명" "고사" "남쪽" "언덕" "나뭇가지" "년"
[7] "동안" "새" "한" "번" "하늘" "끝"
[13] "한" "번" "천지"
[[6]]
[1] ""
[[7]]
[1] "동안" "정치" "거리" "암울" "한"
[6] "시대" "저" "정치" "이상" "남쪽"
[11] "나뭇가지" "수" "저" "국민" "오늘"
[16] "저" "저" "대" "대통령선거" "출마"
[21] "국민" "앞" "선언" "합"
[[8]]
[1] ""
[[9]]
[1] ""
[[10]]
[1] "우리나라" "대통령" "되겠습니"
[[11]]
[1] ""
[[12]]
[1] ""
[[13]]
[1] "존경" "하" "국민" "분"
[[14]]
[1] ""
[[15]]
[1] "저" "대통령" "우리나라" "대통령" "소수" "특권층"
[7] "나라" "보통" "사람들" "주인" "우리나라" "편"
[13] "내" "편" "편가르지" "우리나라" "우리" "라"
[19] "말" "진정" "한" "우리나라" "의" "대통령"
[25] "되겠습니"
[[16]]
[1] ""
[[17]]
[1] "우리" "보통" "사람들" "새" "나라" "주인" "행세"
[8] "하지" "주인" "대접" "말" "몸" "당당" "하게"
[15] "말" "정치" "참여"
[[18]]
[1] ""
[[19]]
[1] "저" "추구" "하" "우리나라" "정치인" "나라"
[7] "시민" "정치" "정책" "과정" "참여" "하"
[13] "나라" "저" "시민" "동행" "하" "정치"
[19] "저" "추구" "하" "우리나라" "특권" "불평"
[25] "등" "나라" "보통" "사람들" "기회" "가지"
[31] "공평" "정의" "로운" "나라"
[[20]]
[1] ""
[[21]]
[1] "권력" "돈" "집단" "나라" "그들" "마음"
[7] "시대" "사람들" "희생" "강요" "경제" "정치"
[13] "권력" "오늘" "저" "문재인" "우리나라" "우리"
[19] "모두" "나라" "선언" "합"
[[22]]
[1] ""
[[23]]
[1] "국민"
[[24]]
[1] ""
[[25]]
[1] "저" "결심" "한" "이유" "보통" "사람들" "삶"
[8] "우리" "현실" "엄중" "하기" "때문" "근본적" "혁신"
[15] "거대" "한" "전환" "나라" "절박" "함" "때문"
[[26]]
[1] ""
[[27]]
[1] "우리" "삶" "우리" "사회" "이상" "경제" "성장"
[8] "과실" "소수" "부유층" "대기업" "창고" "황금" "차"
[15] "대부분" "보통" "사람들" "취업" "불안" "주거" "불안"
[22] "고용" "불안" "건강" "불안" "노후" "불안" "등"
[29] "불안" "이불" "잠자리"
[[28]]
[1] ""
[[29]]
[1] "국민" "한" "사람" "한" "사람" "빚"
[7] "일자리" "입시부담" "성적" "스트레스" "학교폭력" "상처"
[13] "영혼" "들" "하나" "둘" "우리" "곁"
[19] "어르신" "들" "삶" "세상" "분" "일"
[25] "들" "약자" "고통" "관심" "정부" "부자"
[31] "강자" "기득권" "급급" "한" "정치" "사람들"
[37] "희망" "때문" "것" "표정" "사람들" "국민"
[43] "들" "희망" "정치" "절실" "하게" "필요"
[49] "합"
[[30]]
[1] ""
[[31]]
[1] "국민" "뜻" "대통령의" "길"
[[32]]
[1] ""
[[33]]
[1] "저" "대선" "출마" "결심" "국민" "여러분"
[7] "출마" "선언" "문" "제안" "들" "글"
[13] "소중" "한" "의견" "제안" "고단" "삶"
[19] "거기" "시민" "한숨" "눈물" "정치" "국민"
[25] "걱정" "거리" "초라" "한" "정부" "모습"
[31] "있었습니"
[[34]]
[1] ""
[[35]]
[1] "상식" "사회" "권한" "책임" "비례"
[6] "하" "사회" "인정" "하" "세상"
[11] "개천" "용이" "날" "수" "사회"
[16] "철학" "나" "약자" "얘기" "귀"
[21] "사람" "진심" "어린" "위로" "세상"
[26] "세금" "나" "사람" "관대" "힘"
[31] "사람" "엄격" "한" "잣대" "적용"
[36] "되" "사회" "국민" "들이" "기대"
[41] "의" "수" "어깨" "내" "대통령"
[46] "국민" "정부" "것" "국민" "요구였습니"
[[36]]
[1] ""
[[37]]
[1] "미안" "가슴" "평범" "상식" "적" "요구" "소박" "한" "요구"
[10] "정치" "외면" "해" "것"
[[38]]
[1] ""
[[39]]
[1] "국가" "비전" "공부" "고민" "거창" "하게"
[7] "국가" "비전" "국민" "마음속" "겸손" "국민"
[13] "마음속" "길" "것" "그것" "대통령의" "길"
[19] "국민" "들이" "제" "국민" "뜻" "대통령의"
[25] "길" "대한민국" "길" "찾겠습니"
[[40]]
[1] ""
[[41]]
[1] "대한민국" "우리" "거대" "한" "전환" "의"
[7] "시" "기존" "과거" "방식" "해결" "할"
[13] "수" "근본적" "문제" "들이" "우리" "앞"
[19] "우리" "사회" "지배" "경쟁" "승자" "독식"
[25] "강자" "지배" "의" "원리" "빈부격차" "확대"
[31] "중산층" "서민" "들" "삶" "기반" "붕괴"
[37] "중소기업" "자영업자" "들" "고통" "지역경제" "낙후"
[43] "경제" "성장" "잠재력" "약화" "악순환" "길"
[49] "없습니"
[[42]]
[1] ""
[[43]]
[1] "유럽" "미국" "중국" "인도" "등" "세계"
[7] "곳곳" "경제" "위" "고조" "되" "무분별"
[13] "한" "시장" "만능주의" "결과" "일부" "기존"
[19] "자본주의" "모델" "수명" "진단" "과도" "한"
[25] "대외의존" "형" "경제" "취약" "한" "사회"
[31] "안전망" "대한민국" "위" "무엇" "우리" "개발독재"
[37] "모델" "유산" "청산" "시장" "만능주의" "대표"
[43] "되" "시장" "독재" "모델" "극복" "개방"
[49] "공유" "협동" "공생" "원리" "채택" "해"
[55] "인간" "인간" "살" "수" "민주적" "공정"
[61] "한" "시장" "경제" "모델"
[[44]]
[1] ""
[[45]]
[1] "운" "부" "집안" "평생" "한" "집"
[7] "자녀" "출발" "선" "불공평" "한" "경쟁"
[13] "그것" "교육" "비정규직" "중소기업" "지방" "산업"
[19] "공정" "하게" "경쟁" "노력" "한" "만큼"
[25] "정당" "한" "보상" "세상" "지방" "대학"
[31] "나" "고등학교" "나" "실력" "대접" "수"
[37] "누구" "공정" "하게" "경쟁" "결과" "승복"
[43] "패자" "따뜻" "한" "위로" "패자" "부활"
[49] "기회"
[[46]]
[1] ""
[[47]]
[1] "경쟁" "소외" "양극화" "살벌" "한" "세상"
[7] "대" "사람" "협력" "성장" "나" "결과"
[13] "공유" "지속가능" "한" "삶" "토대" "나라"
[19] "저" "나라" "북한" "신뢰" "협력" "토대"
[25] "위" "평화" "공동번영" "나라" "저" "나라"
[31] "저" "두" "가지" "비전" "상생" "평화"
[37] "대한민국" "이"
[[48]]
[1] ""
[[49]]
[1] "상생" "평화" "대한민국" "공평" "정의" "바탕"
[7] "두" "성장" "과실" "누리" "나" "복지"
[13] "나" "일자리" "최우선" "두" "나" "아이들"
[19] "여성" "노인" "행복" "한" "나" "안전"
[25] "평화" "로운" "나라" "것"
[[50]]
[1] ""
[[51]]
[1] "공평" "정의" "나라" "근간" "승자" "독식"
[7] "강자" "지배" "질서" "폐기" "대한민국" "상생"
[13] "평화" "질서" "수립" "하기" "저" "공평"
[19] "정의" "원칙" "이명박" "정권" "입" "공정사회"
[25] "측근" "세력" "들이" "국가권력" "사유화" "공공성"
[31] "파괴" "토건" "세력" "재벌" "집단" "최상위"
[37] "계층" "이익" "과도" "하게" "공정" "말"
[43] "자체" "냉소" "거리" "신뢰" "상생" "사회"
[49] "불가능" "합"
[[52]]
[1] ""
[[53]]
[1] "저" "시민" "들" "균등"
[5] "한" "기회" "제공" "하"
[9] "공평" "과" "반칙" "특권"
[13] "부정부패" "척결" "하" "정"
[17] "두" "가지" "가치" "근간"
[21] "대한민국" "정의" "원칙" "경제"
[25] "분야" "강조" "되" "조세"
[29] "정의" "실현" "소득" "곳"
[33] "세금" "원칙" "세금" "불로소득"
[37] "정치" "민주화" "경제" "민주화"
[41] "필요" "재벌" "지배구조" "개선"
[45] "공정거래질서" "확립" "대기업" "중소기업"
[49] "간" "힘" "불균형" "약자"
[53] "억울" "하게" "것"
[[54]]
[1] ""
[[55]]
[1] "노사" "한" "배" "공동운명체" "노동자"
[6] "들이" "부당" "하게" "해" "권익"
[11] "부당" "하게" "침해" "당하" "일"
[16] "노동자" "들" "목소리" "적극" "적"
[21] "경영" "반영" "때" "기업" "성"
[26] "개선" "소수" "강자" "다수" "위"
[31] "군림" "하지" "약자" "강자" "공존"
[36] "상생" "하" "경제" "질서" "것"
[41] "경제" "민주화" "주요" "내용"
[[56]]
[1] ""
[[57]]
[1] "대" "성장전략" "획기적" "국가발전" "이루겠습니"
[[58]]
[1] ""
[[59]]
[1] "성장" "후분" "배" "낙수효과"
[5] "생각" "사회" "적" "양극화"
[9] "성장잠재력" "저하" "결과" "이"
[13] "극복" "하기" "성장" "분배"
[17] "환경" "평화" "선순환" "대"
[21] "성장전략" "추진하겠습니"
[[60]]
[1] ""
[[61]]
[1] "첫째" "분배" "재분배" "강화" "중산층"
[6] "서민" "들" "유효수요" "구매력" "확대"
[11] "함" "소비" "투자" "촉진" "하"
[16] "성장" "을" "추진" "이" "최저임금"
[21] "생활임금" "개념" "정책" "반영" "복지"
[26] "투자" "확대도" "서민" "경제" "활성화"
[31] "이" "것" "재벌" "거대기업" "과도"
[36] "한" "경제력" "집중" "억제" "고용"
[41] "대부분" "감당" "하" "중소기업" "성장"
[46] "중심" "지원" "하" "사회" "적"
[51] "기업" "협동조합" "육성" "하" "등"
[56] "사회" "적" "경제" "확대" "성장"
[61] "거시" "구조적" "개혁" "추진" "해"
[66] "나가겠습니"
[[62]]
[1] ""
[[63]]
[1] "둘째" "적" "자본" "투자"
[5] "강화" "사람" "중심" "경제"
[9] "성장" "실현" "교육혁신" "학생"
[13] "들" "학부모" "고통" "줄"
[17] "입시" "과잉" "학습" "대"
[21] "평생" "학습체제" "자리" "일"
[25] "대" "교육혁신" "문화" "혁신"
[29] "국민" "창조성" "이" "기술혁신"
[33] "신산업" "형성" "파동" "성장"
[37] "을" "추진하겠습니"
[[64]]
[1] ""
[[65]]
[1] "셋째" "석유" "시대" "종말" "대비"
[6] "신재생" "에너지" "비중" "확대" "녹색"
[11] "에너지기술" "것" "축" "전기" "자동차"
[16] "제조" "등" "영역" "신산업" "육성"
[21] "하" "성장" "을" "추진" "추가"
[26] "원전" "건설" "중단" "수명" "원전"
[31] "가동" "지시" "키" "신재생" "에너지"
[36] "비중" "확대" "되" "만큼" "원전"
[41] "비중" "이" "에너지" "종류" "정도"
[46] "산업" "소비" "생활" "전반" "구조"
[51] "저" "차" "산업혁명" "수" "변화"
[56] "이" "토건" "사업" "개발" "사업"
[61] "우위" "정부" "구조" "재정지출" "구조도"
[66] "혁신" "산업" "환경" "농림" "국토"
[71] "등" "부처" "지속가능성" "가치" "아래"
[76] "재편" "해" "나가겠습니"
[[66]]
[1] ""
[[67]]
[1] "넷째" "인터넷" "를" "전세계" "확산"
[6] "되" "소통" "네트워크" "기반" "국경"
[11] "경쟁" "집단" "협업" "개방형" "혁신"
[16] "협동" "생태계" "활용" "하" "성장"
[21] "을" "추진" "인식" "아래" "한반도평화"
[26] "남북협력" "강력" "한" "성장동력" "활용"
[31] "남북한" "자원" "기술" "인력" "등"
[36] "점" "탁월" "한" "보완관계" "평화"
[41] "바탕" "서로" "강점" "동북아시아" "세계"
[46] "진출"
[[68]]
[1] ""
[[69]]
[1] "복지국가" "를" "담대" "하게"
[5] "나아가겠습니"
[[70]]
[1] ""
[[71]]
[1] "정조대왕" "위" "손해" "아래" "이득"
[6] "그것" "국가" "일" "라" "말"
[11] "백" "년" "전" "이" "소득재분배"
[16] "복지국가" "사상" "위정자" "지구상" "어디"
[21] "우리" "복지국가" "담대" "하게" "때"
[26] "때문" "발걸음" "재촉"
[[72]]
[1] ""
[[73]]
[1] "복지" "포퓰리즘" "새누리당" "중상모략" "거부" "부자감세"
[7] "사업" "과오" "청산" "복지국가" "우리" "복지국가"
[13] "양극화" "분열" "국가" "절박" "한" "벌"
[19] "나라" "운명" "건곤일척" "복지" "진정" "성"
[25] "진보세력" "만" "수" "있습니"
[[74]]
[1] ""
[[75]]
[1] "복지" "낭비" "투자" "사람" "투자"
[6] "강력" "한" "성장전략" "복지국가" "국가"
[11] "경쟁력" "복지" "확대" "보육" "교육"
[16] "의료" "요양" "등" "사회서비스" "부문"
[21] "일자리" "자영업" "과잉" "인력" "흡수"
[26] "할" "수" "공공" "임대주택" "주거"
[31] "복지" "리" "것" "전월세" "대책"
[[76]]
[1] ""
[[77]]
[1] "복지국가" "사람" "투자" "일자리" "창출" "자영업"
[7] "고통" "경감" "삶" "향상" "등" "조의"
[13] "효과" "길" "우리" "복지국가" "국민" "살림"
[19] "것" "년" "뒤" "성과" "것"
[[78]]
[1] ""
[[79]]
[1] "일자리" "정부" "로" "일자리" "혁명"
[6] "을" "이루겠습니"
[[80]]
[1] ""
[[81]]
[1] "복지" "확대" "저" "강력" "한" "일자리"
[7] "혁명" "을" "젊은이들" "실업자" "비정규직" "종사"
[13] "근로" "능력" "고령자" "들이" "일할" "수"
[19] "기회" "일자리" "요구" "있습니"
[[82]]
[1] ""
[[83]]
[1] "일자리" "창출" "비정규직" "정규직"
[5] "전환" "촉진" "비정규직" "차별철폐"
[9] "근로시간" "축" "신규고용" "확대"
[13] "고용" "영향평가" "제도" "채택"
[17] "고용" "증진" "기업" "지원"
[21] "연계" "등" "중요" "한"
[25] "정책수단" "채택" "정보통신" "산업"
[29] "바이오산업" "나노" "산업" "신재생에너지"
[33] "산업" "문화" "산업" "콘텐츠"
[37] "산업" "등" "신산업" "일자리"
[41] "대대적" "앞" "한" "보육"
[45] "교육" "의료" "복지" "등"
[49] "사회서비스" "부문" "무궁무진" "한"
[53] "일자리" "보고" "일자리" "곳"
[57] "희망" "수" "지방" "일자리"
[61] "특별" "한" "노력" "지역균형발전"
[65] "산업" "균형" "일자리" "균형"
[69] "목표" "이명박" "정부" "방해"
[73] "불구" "국민" "세종시" "혁신도시"
[77] "지방" "일자리" "창출" "거점"
[81] "공기업" "공무원" "지역" "우대"
[85] "채용" "각종" "정부" "지원"
[89] "지방" "채용" "연동제" "확대"
[93] "정책" "실효성" "담보" "하기"
[97] "대통령" "저" "대통령" "직속"
[101] "국가" "일자리" "위원회" "를"
[105] "설치" "일자리" "점검" "범정부"
[109] "회의" "를" "개최" "일자리"
[113] "마련" "상황" "점검" "독려"
[117] "저" "훗날" "일자리" "혁명"
[121] "대통령" "으" "평가" "받기"
[125] "희망" "합"
[[84]]
[1] ""
[[85]]
[1] "아이들" "여성" "노인" "들이" "나라"
[6] "만들겠습니"
[[86]]
[1] ""
[[87]]
[1] "아이들" "행복" "한" "나라" "행복"
[6] "한" "교육" "학교" "것" "교육혁신"
[11] "기본방향" "이" "유아" "초등" "단계"
[16] "과도" "한" "학습" "부담" "특기"
[21] "적성" "이외" "사교육" "나가겠습니"
[[88]]
[1] ""
[[89]]
[1] "교육" "이념" "전장"
[4] "곤란" "교육" "진보"
[7] "보수" "아이들" "존재"
[10] "학생" "교사" "학교"
[13] "자율성" "창의성" "보장"
[16] "마을" "아이" "수"
[19] "지원" "하" "일자리"
[22] "산업혁신" "평생" "학습체제"
[25] "뒷받침" "되" "평생학습"
[28] "참가율" "선진국" "수준"
[31] "끌어올리겠습니"
[[90]]
[1] ""
[[91]]
[1] "우리" "누리" "풍요" "어르신"
[5] "들" "희생" "덕분" "어르신"
[9] "들" "노후" "대비" "겨를"
[13] "급격" "한" "가족구조" "변화"
[17] "노동시장" "변화" "극심" "한"
[21] "어려움" "사회" "효도" "참여"
[25] "정부" "도입" "기초" "노령연금"
[29] "장기" "요양" "보험" "강화"
[33] "건강" "지원" "방법" "차원"
[37] "개선" "노인" "일자리" "리"
[41] "연륜" "경험" "지역사회" "활용"
[45] "할" "수" "방안" "마련하겠습니"
[[92]]
[1] ""
[[93]]
[1] "남녀" "평등" "남" "숙제" "가사" "육아"
[7] "노인" "돌보" "책임" "여성" "들" "수준"
[13] "여성" "경제" "활동" "참가율" "세계" "최저"
[19] "출산율" "대한민국" "여성" "들이" "말"
[[94]]
[1] ""
[[95]]
[1] "가족" "돌봄" "공적" "서비스"
[5] "확대" "해서" "여성" "부담"
[9] "줄" "취업" "승진" "기회"
[13] "제한" "등" "사회" "적"
[17] "차별" "해소" "할" "수"
[21] "적극" "적" "대책" "남녀"
[25] "일" "돌보" "사회" "전진하겠습니"
[[96]]
[1] ""
[[97]]
[1] "대한민국" "한반도" "평화" "만들겠습니"
[[98]]
[1] ""
[[99]]
[1] "국가" "존립" "국토방위" "헌법상" "대통령"
[6] "막중" "한" "의무" "대외정책" "출발"
[11] "튼튼" "한" "국방력" "대한민국" "군"
[16] "유능" "한" "군대" "미국" "관계"
[21] "건강" "관계" "발전" "중국" "일본"
[26] "러시아" "등" "주변국" "들" "호혜"
[31] "협력" "관계" "화해" "나가겠습니"
[[100]]
[1] ""
[[101]]
[1] "전쟁" "불안" "한반도"
[4] "해방" "이명박" "정부"
[7] "파탄" "안보" "새누리당"
[10] "정권" "아래" "분쟁"
[13] "대결" "휴전선" "일"
[16] "대" "평화" "경제"
[19] "지" "김대중" "대통령의"
[22] "공동선언" "노무현" "대통령의"
[25] "남북" "정상" "선언"
[28] "남북" "양측" "책임"
[31] "이행" "개성" "공단"
[34] "확장" "금강산" "관광"
[37] "재개" "금강산" "설악산"
[40] "평창" "연결" "하"
[43] "국제" "관광특구" "적극"
[46] "남북" "군사" "대결"
[49] "지대" "공동이익" "창출"
[52] "하" "경제지" "전환"
[55] "부모" "들이" "안심"
[58] "자식" "군대" "안보"
[61] "환경" "특권층" "군대"
[64] "안가" "철저" "하게"
[67] "젊은이들" "병역" "부담"
[70] "사" "병" "복지"
[73] "향상시키겠습니"
[[102]]
[1] ""
[[103]]
[1] "북핵문제" "평화" "적" "해결" "한반도" "평화체제"
[7] "축하" "저" "북한" "핵" "용인" "할"
[13] "수" "확고" "한" "입장" "대화" "협상"
[19] "핵" "포기" "실종" "자회담" "재개" "대한민국"
[25] "역할" "복원" "자회담" "남북관계" "복원" "평화체제"
[31] "구축작업" "병행" "추진" "한반도" "평화" "공동번영"
[37] "선순환" "구조" "속" "성장동력" "찾겠습니"
[[104]]
[1] ""
[[105]]
[1] "순국선열" "민주" "영령" "앞" "약속" "드립"
[7] "니"
[[106]]
[1] ""
[[107]]
[1] "존경" "하" "국민" "여러분" "자리" "애국" "민주"
[8] "헌신" "세" "가지" "가치" "숨" "역사" "현장"
[15] "저" "역사" "앞" "대통령" "출마" "선언" "역사"
[22] "앞" "저" "자신" "결연" "한" "의지" "역사"
[29] "가슴" "새" "미래" "의지"
[[108]]
[1] ""
[[109]]
[1] "저것" "수" "벽" "고개" "때" "담쟁이" "잎"
[8] "하나" "담쟁이" "잎" "수천" "개" "벽"
[[110]]
[1] ""
[[111]]
[1] "도종환" "쟁"
[[112]]
[1] ""
[[113]]
[1] "도종환" "시인" "담쟁이" "라" "시" "일부"
[7] "우리" "담쟁이" "두" "손" "벽" "특권"
[13] "벽" "차별" "벽" "분단" "분열" "벽"
[19] "패배주의" "벽" "저" "문재인" "세상" "문"
[25] "엽시"
[[114]]
[1] ""
[[115]]
[1] "저" "문재인" "겸손" "한" "권력" "따뜻"
[7] "한" "나라" "국민" "마음" "길" "우리나라"
[13] "대통령" "우리" "모두" "주인" "진정" "한"
[19] "우리나라" "대통령" "되겠습니"
[[116]]
[1] ""
[[117]]
[1] "고맙습니"
# Ver.2 : Package `"tidytext"`의 함수 `unnest_tokens`
word_noun <- moon %>% # 전처리를 수행한 결과가 저장되어 있는 객체 "moon"
unnest_tokens(input = value, # 토큰화를 수행할 텍스트가 포함된 변수명
output = word, # 출력 변수명
token = extractNoun) # 명사 기준으로 토큰화
word_noun
# A tibble: 1,757 × 1
word
<chr>
1 "정권교체"
2 "하겠습니"
3 "정치"
4 "교체"
5 "하겠습니"
6 "시대"
7 "교체"
8 "하겠습니"
9 ""
10 "불비불명"
# ℹ 1,747 more rows
# 1. 단어 빈도 계산
word_noun <- word_noun %>%
count(word, sort = T) %>% # 단어 빈도를 계산해 내림차순으로 정렬
filter(str_count(word) > 1) # 두 글자 이상의 단어만 추출 -> 한 글자로 된 단어 제거
word_noun
# A tibble: 704 × 2
word n
<chr> <int>
1 국민 21
2 일자리 21
3 나라 19
4 우리 17
5 경제 15
6 사회 14
7 성장 13
8 대통령 12
9 정치 12
10 하게 12
# ℹ 694 more rows
# 2. 자주 사용한 상위 20개 단어
top20 <- word_noun %>%
head(20) # 상위 20개의 단어 추출
top20
# A tibble: 20 × 2
word n
<chr> <int>
1 국민 21
2 일자리 21
3 나라 19
4 우리 17
5 경제 15
6 사회 14
7 성장 13
8 대통령 12
9 정치 12
10 하게 12
11 대한민국 11
12 평화 11
13 복지 10
14 우리나라 10
15 확대 10
16 들이 9
17 사람 9
18 산업 9
19 정부 9
20 복지국가 8
# 3. 시각화
# 3-1. 막대 그래프
# 나눔고딕 폰트 불러오기
font_add_google(name = "Nanum Gothic", # 구글 폰트에서 사용하고자 하는 폰트 이름
family = "nanumgothic") # R에서 사용할 폰트 이름 -> 사용자 지정
showtext_auto()
ggplot(top20,
aes(x = reorder(word, n), y = n)) + # reorder : 단어 빈도순 정렬
geom_col() + # 막대 그래프
coord_flip() + # 막대를 가로로 회전
geom_text(aes(label = n), hjust = -0.3) + # 막대 밖 빈도 표시
labs(x = "") + # x축 이름
theme(text = element_text(family = "nanumgothic")) # 폰트 적용
# 3-2. 워드 클라우드
# 검은고딕 폰트 불러오기
font_add_google(name = "Black Han Sans", # 구글 폰트에서 사용하고자 하는 폰트 이름
family = "blackhansans") # R에서 사용할 폰트 이름 -> 사용자 지정
showtext_auto()
ggplot(word_noun, aes(label = word,
size = n, # 빈도에 따라 단어의 크기를 다르게 표현
col = n)) + # 빈도에 따라 단어의 색깔을 다르게 표현
geom_text_wordcloud(seed = 1234, # seed값 입력 -> 항상 같은 모양의 그래프를 출력
family = "blackhansans") + # 폰트 적용
scale_radius(limits = c(3, NA), # 최소, 최대 단어 빈도
range = c(3, 30)) + # 최소, 최대 글자 크기
scale_color_gradient(low = "#66aaf2", # 최소 빈도 색깔
high = "#004EA1") + # 최고 빈도 색깔
theme_minimal() # 배경 없는 테마 적용
"stringr"
의 함수 str_detect
: 특정 단어가 문장에 있으면 TRUE
, 그렇지 않으면 FALSE
를 반환하는 함수# 1. 문장 기준으로 토큰화
sentences_moon <- raw_moon %>%
str_squish() %>% # 연속된 공백 제거
as_tibble() %>% # Tibble 형태로 변환
unnest_tokens(input = value, # 토큰화를 수행할 텍스트가 포함된 변수명
output = sentence, # 출력 변수명
token = "sentences") # "sentences" : 문장 기준으로 토큰화
sentences_moon
# A tibble: 207 × 1
sentence
<chr>
1 정권교체 하겠습니다!
2 정치교체 하겠습니다!
3 시대교체 하겠습니다!
4 ‘불비불명(不飛不鳴)’이라는 고사가 있습니다.
5 남쪽 언덕 나뭇가지에 앉아, 3년 동안 날지도 울지도 않는 새.
6 그러나 그 새는 한번 날면 하늘 끝까지 날고, 한번 울면 천지를 뒤흔듭…
7 그 동안 정치와 거리를 둬 왔습니다.
8 그러나 암울한 시대가 저를 정치로 불러냈습니다.
9 더 이상 남쪽 나뭇가지에 머무를 수 없었습니다.
10 이제 저는 국민과 함께 높이 날고 크게 울겠습니다.
# ℹ 197 more rows
Caution!
문장으로 토큰화를 수행할 때는 마침표가 문장의 기준점이 되므로 특수 문자를 제거하지 않는다.
sentences_moon %>%
filter(str_detect(sentence, "국민")) # "국민" 단어가 포함된 문장 추출
# A tibble: 19 × 1
sentence
<chr>
1 이제 저는 국민과 함께 높이 날고 크게 울겠습니다.
2 오늘 저는 제18대 대통령선거 출마를 국민 앞에 엄숙히 선언합니다.
3 존경하는 국민 여러분!
4 국민이 모두 아픕니다.
5 국민 한 사람 한 사람이 모두 아픕니다.
6 국민들에게 희망을 주는 정치가 절실하게 필요합니다.
7 국민의 뜻이 대통령의 길입니다.
8 저는 대선출마를 결심하고 국민 여러분께 출마선언문을 함께 쓰자고 제…
9 시민의 한숨과 눈물을 닦아주지 못하는 정치가 있었고, 오히려 국민의 …
10 상식이 통하는 사회, 권한과 책임이 비례하는 사회, 다름을 인정하는 …
11 그러나 거창하게만 들리는 이 국가비전 역시 국민의 마음속에 있었습니…
12 더욱 낮아지고 겸손해져서 국민의 마음속으로 들어가라.
13 국민들이 제게 준 가르침입니다.
14 국민의 뜻에서 대통령의 길을 찾겠습니다.
15 문화혁신을 통해 모든 국민의 창조성을 높이고 이를 통해 기술혁신과 …
16 이렇게 하면 국민의 살림이 서서히 나아질 것이며 5년 뒤에는 큰 성과…
17 이명박 정부의 방해에도 불구하고 끝내 국민이 지켜준 세종시, 혁신도…
18 존경하는 국민 여러분!
19 국민의 마음에서 길을 찾는 우리나라 대통령이 되겠습니다.
sentences_moon %>%
filter(str_detect(sentence, "일자리")) # "일자리" 단어가 포함된 문장 추출
# A tibble: 18 × 1
sentence
<chr>
1 빚 갚기 힘들어서, 아이 키우기 힘들어서, 일자리가 보이지 않아서 아…
2 상생과 평화의 대한민국은 공평과 정의에 바탕을 두고, 성장의 과실을 …
3 복지의 확대를 통해 보육, 교육, 의료, 요양 등 사회서비스 부문에 수…
4 결국 복지국가로 가는 길은 사람에 대한 투자, 일자리 창출, 자영업 고…
5 ‘일자리 정부’로 ‘일자리 혁명’을 이루겠습니다.
6 복지의 확대와 함께 저는 강력한 ‘일자리 혁명’을 이루고자 합니다.
7 지금 너무나 많은 젊은이들과 실업자, 비정규직 종사자, 근로능력이 있…
8 좋은 일자리 창출을 위해 비정규직의 정규직 전환 촉진, 비정규직에 대…
9 또한 정보통신 산업, 바이오산업, 나노 산업, 신재생에너지 산업, 문화…
10 그리고 앞에서 말한 보육, 교육, 의료, 복지 등 사회서비스 부문은 무…
11 일자리 없는 곳에서 희망을 찾을 수 없습니다.
12 지방 일자리에 대해 특별한 노력을 기울이겠습니다.
13 지역균형발전은 곧 산업 균형, 일자리 균형이 목표입니다.
14 이명박 정부의 방해에도 불구하고 끝내 국민이 지켜준 세종시, 혁신도…
15 이 모든 정책의 실효성을 담보하기 위해 대통령이 되면 저는 가장 먼저…
16 저는 먼 훗날 ‘일자리 혁명을 일으킨 대통령’으로 평가받기를 희망합…
17 또한 좋은 일자리와 산업혁신을 위해서는 평생학습체제가 뒷받침되어야…
18 노인 일자리를 늘리고, 특히 그 연륜과 경험을 지역사회에 활용할 수 …
Result!
함수 str_detect
와 Package "dplyr"
의 함수 filter
를 함께 사용하여 특정 단어가 포함된 문장을 추출할 수 있다.
# 전처리
moon <- raw_moon %>%
str_replace_all("[^가-힣]", " ") %>% # 한글을 제외한 모든 문자를 공백으로 변경
str_squish() %>% # 연속된 공백 제거
as_tibble() # Tibble 형태로 변환
# 토큰화
word_space <- moon %>%
unnest_tokens(input = value, # 토큰화를 수행할 텍스트가 포함된 변수명
output = word, # 출력 변수명
token = "words") # "words" : 띄어쓰기 기준으로 토큰화
# 단어 빈도 구하기
word_space <- word_space %>%
count(word, sort = T) %>% # 단어 빈도를 계산해 내림차순으로 정렬
filter(str_count(word) > 1) # 두 글자 이상의 단어만 추출 -> 한 글자로 된 단어 제거
# 자주 사용한 단어 추출
top20 <- word_space %>%
head(20) # 상위 20개의 단어 추출
top20
# A tibble: 20 × 2
word n
<chr> <int>
1 합니다 27
2 있습니다 13
3 저는 13
4 있는 12
5 함께 12
6 만들겠습니다 11
7 일자리 10
8 국민의 9
9 우리 9
10 우리나라 9
11 새로운 8
12 위해 8
13 그리고 7
14 나라 7
15 나라가 7
16 지금 7
17 낡은 6
18 대통령이 6
19 되겠습니다 6
20 없는 6
# 명사 기준 토큰화
word_noun <- moon %>%
unnest_tokens(input = value, # 토큰화를 수행할 텍스트가 포함된 변수명
output = word, # 출력 변수명
token = extractNoun) # 명사 기준으로 토큰화
word_noun
# A tibble: 1,757 × 1
word
<chr>
1 "정권교체"
2 "하겠습니"
3 "정치"
4 "교체"
5 "하겠습니"
6 "시대"
7 "교체"
8 "하겠습니"
9 ""
10 "불비불명"
# ℹ 1,747 more rows
# 문장 기준 토큰화
sentences_moon <- raw_moon %>%
str_squish() %>% # 연속된 공백 제거
as_tibble() %>% # Tibble 형태로 변환
unnest_tokens(input = value, # 토큰화를 수행할 텍스트가 포함된 변수명
output = sentence, # 출력 변수명
token = "sentences") # "sentences" : 문장 기준으로 토큰화
sentences_moon
# A tibble: 207 × 1
sentence
<chr>
1 정권교체 하겠습니다!
2 정치교체 하겠습니다!
3 시대교체 하겠습니다!
4 ‘불비불명(不飛不鳴)’이라는 고사가 있습니다.
5 남쪽 언덕 나뭇가지에 앉아, 3년 동안 날지도 울지도 않는 새.
6 그러나 그 새는 한번 날면 하늘 끝까지 날고, 한번 울면 천지를 뒤흔듭…
7 그 동안 정치와 거리를 둬 왔습니다.
8 그러나 암울한 시대가 저를 정치로 불러냈습니다.
9 더 이상 남쪽 나뭇가지에 머무를 수 없었습니다.
10 이제 저는 국민과 함께 높이 날고 크게 울겠습니다.
# ℹ 197 more rows
# 특정 단어가 포함된 문장 추출
sentences_moon %>%
filter(str_detect(sentence, "국민")) # "국민" 단어가 포함된 문장 추출
# A tibble: 19 × 1
sentence
<chr>
1 이제 저는 국민과 함께 높이 날고 크게 울겠습니다.
2 오늘 저는 제18대 대통령선거 출마를 국민 앞에 엄숙히 선언합니다.
3 존경하는 국민 여러분!
4 국민이 모두 아픕니다.
5 국민 한 사람 한 사람이 모두 아픕니다.
6 국민들에게 희망을 주는 정치가 절실하게 필요합니다.
7 국민의 뜻이 대통령의 길입니다.
8 저는 대선출마를 결심하고 국민 여러분께 출마선언문을 함께 쓰자고 제…
9 시민의 한숨과 눈물을 닦아주지 못하는 정치가 있었고, 오히려 국민의 …
10 상식이 통하는 사회, 권한과 책임이 비례하는 사회, 다름을 인정하는 …
11 그러나 거창하게만 들리는 이 국가비전 역시 국민의 마음속에 있었습니…
12 더욱 낮아지고 겸손해져서 국민의 마음속으로 들어가라.
13 국민들이 제게 준 가르침입니다.
14 국민의 뜻에서 대통령의 길을 찾겠습니다.
15 문화혁신을 통해 모든 국민의 창조성을 높이고 이를 통해 기술혁신과 …
16 이렇게 하면 국민의 살림이 서서히 나아질 것이며 5년 뒤에는 큰 성과…
17 이명박 정부의 방해에도 불구하고 끝내 국민이 지켜준 세종시, 혁신도…
18 존경하는 국민 여러분!
19 국민의 마음에서 길을 찾는 우리나라 대통령이 되겠습니다.
Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".