TF-IDF를 반영한 word cloud 개선 서울 집값 뉴스 워드클라우드
페이지 정보
작성자 Samantha 작성일24-08-25 11:52 조회116회 댓글0건관련링크
본문
며칠전에 워드클라우드 워드클라우드를 이용해서뉴스기사 크롤링한것을한눈에 보는것을 만들었습니다. 그런데 그 작업은 그리 효율적이지 못했던게의미없이 반복되는 단어도 많이나오기만 하면 워드클라우드에서 넣어버리는 단점이 있었습니다.이걸보고 이웃중 한분께서 개선을 해보라고 말씀주시면서감사하게도 코드도 주셨습니다.그건 바로 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방식의 워드클라우드고 이게 새로운 워드클라우드입니다. 좀 다르네요? 같은 기사들을 기반으로 단어를뽑아냈는데다릅니다. 밑에것이 좀 더 인사이트가 있나요?알고리즘적으로는 인사이트가 있어야하는데. 위의것을 보면 서울 집값이 하락하는구나,금리때문이구나, 라는건 알 수 있는데아파트 아파트 서울 집값 집값 이런 글자가 너무 큽니다.그런데 아래것에서는 아파트와 서울이 싹 사라지고 매물이 적체되며 강북권이 하락을 견인한다 라는 내용이 머리에 좀 박히고주택가격동향조사심리가 위축되었다라는 것도 알 수 있습니다. 아래것이 좀 더 쓸만하긴 하네요. 앞으론 이걸로 워드클라우드 올려야겠습니다.
댓글목록
등록된 댓글이 없습니다.