온라인 강의 사이트
국민안전역량의 향상에 초석이 되고자 합니다.
National Safery Competency Association

[토이플젝/Python] 유튜브 댓글분석 프로그램 개발AI감정분석, CSV, 워드클라우드, 형태소분석

Monet 0 1

며칠전에 워드클라우드 워드클라우드를 이용해서뉴스기사 크롤링한것을한눈에 보는것을 만들었습니다. ​그런데 그 작업은 그리 효율적이지 못했던게의미없이 반복되는 단어도 많이나오기만 하면 워드클라우드에서 넣어버리는 단점이 있었습니다.​이걸보고 이웃중 한분께서 개선을 해보라고 말씀주시면서감사하게도 코드도 주셨습니다.​그건 바로 TF-IDF알고리즘을 이용한 것이었는데요. ​In [2]: from konlpy.tag import Twitter import pandas as pd # 연합뉴스 로딩 kor_corpus =pd . read_csv ( r '한류_연합뉴스.csv', encoding ='cp949') pos_tagger =Twitter () # 한글 문서 명사만 뽑아서 tf-idf total_news =[] stopword =[ '것', '수', '저'] for news in kor_corpus 워드클라우드 [ 'contents'] . head (): pos_news =[ '/'. j...그건 바로 이 링크에서 볼 수 있었습니다. ​TF-IDF란 굉장히 복잡해보이고 또 복잡한 것인데그렇게까지 복잡한건 사실 필요가 없이요점만 알고 넘어가도록 합니다.TF란 task force가 아니라 Term Frequency의 약자, IDF란 inverst document frequency로, ​어떤 단어의 중요도를 측정함에 있어서 문서 전체에서 많이 나올수록 중요도를낮게 측정하는 것입니다.​즉, 문장에서는 많이 나오는데 문서 전체에서는 적게나오는,그 단어에 중요도를 높게 매기는 것이지요.​이건 왜 그러냐면, 예를들어 an apple이라는 문구가 있을때 사실 apple이 중요하게 워드클라우드 우리가 잡아내야하는거라면​apple보다는 an, a the등이 압도적으로 많이나오고TF만 따졌을때는 a, an the등이 워드클라우드에 많이 포함되게 됩니다.그래서 수식으로 계산을 해서 이런 것들은 중요도를 낮게 매기는겁니다.​개념은 이렇고, 수식은 나무위키에 쳐보면 나오니까딱히 다루지 않습니다.​구현하기 생각을 해봅니다. 1. 내가 전에 짠 코드는 크롤링해서 문장들을 리스트 내지는 데이터프레임에 넣는 부분과​그걸가지고 워드클라우드를 만드는 부분,​만들어진걸 파일로 저장하는 부분으로나눠져있다. ​2. 그럼 이번에는 인터넷에서 TF-IDF로워드클라우드를 구현하는 부분만 따와서 ​내 코드에다 접목을 하면 되겠다.이런 생각을 했고, 이웃분이 주신 코드와함께 참고할만한 코드를인터넷에서 코드를 워드클라우드 찾아봅니다. A way to improve the classic Word Cloud with more robust featurespub.towardsai.net다행스럽게도 이 코드는 매우 자세한 설명이 되어있습니다.다만 여기서는 문장을 인터넷에서 크롤링을 해 오는 것 까지는 없고 주어진 CSV파일예제로 실습을 하는거라서​앞부분을 날리고 뒷부분만 참고를 하면됩니다. ​또 코드를 살펴보니,정규표현식을 이용해서 쓸데없는 단어를 날리는 부분이 좀 어려운 것 같길래 그 부분도 안합니다. ​그래서 저 포스트는 이론과 과정 설명이 되어있고 ​Repository with all the code used for the Medium articles I have written 워드클라우드 - Medium-Articles/hotel-cloud.ipynb at main · eugeniaring/Medium-Articles이렇게 깃허브에는 full code도 올려주신고마운 지구 저편의 누군가가 만든 포스트입니다. ​저 포스트에서 특히 도움이 되었던 것은 워드클라우드 라이브러리의,적용할 파라미터들을 이렇게 설명해놓은 부분입니다​구글로 번역도되니까, 세상 참 좋아졌네요. ​남의 코드들을 참조해서 내 코드를 뜯어고칩니다. ​일단 기존 워드클라우드를 만들기위해서인터넷에서 '집값'으로 뉴스를 긁어오고, 그걸로 데이터를 만들어봅니다.​코드를 개선했는데, 예전에는 워드클라우드를 png로 저장해서그걸 열어봤는데,​이제는 그냥 주피터노트북안에서 matplotlib을 이용해서 출력되게 짭니다. 이게 기존 코드로 만들어진 워드클라우드고. ​TF-IDF를 반영한 식을 짭니다. ​기존 코드는 리스트형식을 워드클라우드 받아서 워드클라우드로 만드는거였는데, TF-IDF 라이브러리에 넣으려면​판다스 데이터프레임형식으로 문장 집합을 만들고그 데이터프레임의 한 컬럼을 집어넣어야합니다. 그래서, 이렇게 만들고, 저 중에 쓰잘데기없는 코드를 없애버리는 정규표현식을 써줍니다. ​TFIDF는 사이킷런에 구현되어있습니다. 라이브러리에 넣고 코드를 좀 써주면, 이렇게 단어마다 벡터가 계산됩니다. 저건 보아하니, 행은 문장들이고 열은 단어들. 그리고 벡터값은 문장마다 단어들이 어떻게들어있는가를 표현한 듯 합니다. 맞나? ​Tf-IDF를 계산하는 counter를 만들어주고 저 벡터에 카운터를 적용해서 워드클라우드를 만들어줍니다.​그렇게되면, 좀 다르죠? 크기와 색깔도 좀 바꿔보았습니다. 근데 시뻘건색이 그리 보기좋지는않군요.​거기다가 워드클라우드 제일 거슬리는건!!기사내용 이라는 어처구니없는 단어가 들어간겁니다​저거 빼야지. ​특정 용어를빼는데는 워드클라우드 파라미터에서 stopwords를 적용해주면된답니다.​여기서 삽질을 좀 했는데,​워드클라우드 함수에는 stopword가기본값이 들어가있습니다.주로 영어에서 많이쓰이는 구두점 들이 저장된걸로그걸 쓰면 구두점은 자동으로 사라지고 ​거기다가 제가 원하는 단어를 추가하랍니다.첨엔 리스트형식으로 추가하다가,stopword가 set인걸 알고 노이즈 라는 set에 기자, 기사내용, 기사 등의단어를 넣고 워드클라우드 배경색과 글자색도 좀 바꿔서새로 출력을 해보면 ​안되네.......ㅆ........​사실 여기서 한 30분 삽질했습니다.​stopword를 이렇게도 바꿔보고 저렇게도 추가해보고 했는데영 안들어먹더군요.​그래서 포기.기사내용은 그냥 눈으로 보고 무시하는걸로 ^^^상사가 지시한다면 어떻게든 워드클라우드 저걸 바꾸려했겠지만상사가 없으니까. ​그러면 다시한번 보겠습니다.얼마나 달라졌는지. ​이게 기존 TF방식의 워드클라우드고 이게 새로운 워드클라우드입니다. ​좀 다르네요? 같은 기사들을 기반으로 단어를뽑아냈는데다릅니다. 밑에것이 좀 더 인사이트가 있나요?​알고리즘적으로는 인사이트가 있어야하는데. ​위의것을 보면 서울 집값이 하락하는구나,금리때문이구나, 라는건 알 수 있는데아파트 아파트 서울 집값 집값 이런 글자가 너무 큽니다.​그런데 아래것에서는 아파트와 서울이 싹 사라지고 ​매물이 적체되며 강북권이 하락을 견인한다 라는 내용이 머리에 좀 박히고주택가격동향조사심리가 위축되었다라는 것도 알 수 있습니다. ​아래것이 좀 더 쓸만하긴 하네요. ​앞으론 이걸로 워드클라우드 올려야겠습니다.

0 Comments