네이버 특정 블로그에서 가장 많이 사용한 단어 알아보기!

2023. 8. 20. 11:08·활동/개인 프로젝트
728x90

이 프로젝트를 시작하게 된 이유는.. 현재 근로를 하고 있는 곳에서 블로그를 운영 중인데, 이 블로그가 좀 어마무시하게 글을 생산한다.

 

호달달 거의 뭐 블로그 공장,,

그래서 근로하는 곳의 선생님이 우리 블로그에 가장 많이 쓴 단어가 뭘까? 라고 하시면서, 이런 거 만들 수 있냐? 라고 하셔서 시작되었다.

이런거.

나는 개발자라면 내가 생각하는 것을 스스로 만들 줄 알아야 한다고 생각한다. 또 나는 그런 사람이 되고 싶어서 한 번 도전해 보게 되었다.


제작기 🔥

우선 처음에 요구사항을 들었을 때는 Python 사용해서 네이버 API 가져다 크롤링해서 데이터 구하면 되겠다라고 생각했다.

하지만 네이버 Developer의 API나 네이버 광고의 API들 중 특정 블로그의 데이터를 조작할 수 있는 API는 없는 것 같아 Github를 둘러보았고 이미 내가 원하는 기능을 만들어 두신 분이 있어서 이것을 이용하기로 했다.

 

GitHub - cosmoquester/WordCloud-from-NaverBlog: 네이버 블로그 글을 자동으로 읽어 단어 구름을 만들어 주는

네이버 블로그 글을 자동으로 읽어 단어 구름을 만들어 주는 툴입니다. Contribute to cosmoquester/WordCloud-from-NaverBlog development by creating an account on GitHub.

github.com

우선 여기서부터 시작이어서 사용하는 것은 수월했다.

혹시 따라하시려는 분이 계실까 봐 조금 상세히 남겨 두도록 하겠다.


우선 VScode에서 해당 repo를 불러와준다.

$ git clone https://github.com/cosmoquester/WordCloud-from-NaverBlog.git

그러면, 다음과 같이 파일이 설치 될 것이고

 

해당 프로젝트에 쓰인 Python 모듈들을 불러오기 위해서 다음 명령어를 입력해 준다.

(만약 설치가 안된다면 pip나 pip3가 설치되어 있는지 확인하자)

$ pip3 install git+https://github.com/psj8252/WordCloud-from-NaverBlog.git

그 뒤에는 examples 파일에 있는 sample.py에 가보자.

from nbclouder import Clouder

naver_id = ""
clouder = Clouder(naver_id)
clouder.fire(['전체글'], "my_blog_cloud.png", "/Library/Fonts/Arial Unicode.ttf")

이 코드에서 naver_id 변수에는 특정 블로그의 아이디를 기입해 주면 된다.

또한, clouder.fire 함수는 다음과 같은 파라미터들을 받을 수 있다. 아래 설명을 참고해 원하는 대로 커스텀해보자.

category_names - 네이버 카테고리 명
image_path - 저장될 이미지 경로
font_path - 사용할 폰트 경로
pos_tagging_fn - 문장 내 단어들의 품사를 식별하여 태그
datetime_filter_fn - 찾고자 하는 포스팅 기간 
white_tags - 찾을 품사 종류
background_color: str = "white" - 배경색(이 부분은 워드 클라우드가 안생김)
width: int = 800 - 이미지 가로 크기
height: int = 600 - 이미지 세로 크기

sample1.py을 이용해서 Word Cloud를 생성하려면 다음과 같이 입력하면 된다.

$ python3 sample1.py

그런데, 아마 이대로 generating을 하면 개발자 분께서 품사 태깅을 해줄 기본 모듈을 Okt로 해두고 기본적으로 명사, 동사, 어간을 파악하도록 해 두어서 뭔가 내가 원하는 대로 생성되지 않았다.

개발자 님의 readme
불순물과 같은 단어들이 많다.

위 그림을 보면 "하다", "있다", "되다" 와 같이, 별로 중요하지 않은 단어들이 있어서 이런 단어들을 제외시키기 위해서 애를 썼다.

 

우선 품사를 제대로 핸들링하기 위해서 pos tagging의 모듈을 Mecab으로 바꿨다.

(komoran, kkma, Okt 다른 모듈들도 써 보았지만.. 실제로 Mecab이 가장 성능이 좋았다)

하지만 Mecab은 따로 설치를 해야 해서 아래 링크를 참고하자.

 

Mecab 설치 에러 해결 : Exception: Install MeCab in order to use it: http://konlpy.org/en/latest/install/

1. 글을 쓰게 된 계기 Mecab을 이용해서 형태소 분석을 하려고 했으나 다음과 같은 오류가 나서 해결하고자 한다. 2. 해결방법 3가지 설치 과정을 통해 문제를 해결할 수 있습니다. 1. mecab-ko 설치 2.

jongsky.tistory.com

그다음엔 Mecab의 품사표를 보고 원하는 품사를 골라내기 위해서 white_tags 변수에 기입해 준다.

 

mecab-ko-dic 품사 태그 설명

태그 v2.0 실질의미유무,대분류(5언 + 기타),세종 품사 태그,mecab-ko-dic 품사 태그 태그,설명,태그,설명 실질형태소,체언,NNG,일반 명사,NNG,일반 명사 NNP,고유 명사,NNP,고유 명사 NNB,의존 명사,NNB,의존

docs.google.com

# NLP Mecab
mecab = Mecab()
mecab_white_tags = ("NNG", "NNP", "NP") + ("XR",)
mecab_freq = clouder.get_word_frequency(contents, mecab.pos, white_tags=mecab_white_tags, preserve_tag=True)
mecab_freq = {morph + "다" if pos in ("VV", "VA") else (morph): count for (morph, pos), count in mecab_freq.items()}

나는 "하다", "있다", "되다" 와 같은 단어들을 없애기 위해서 VV와 VA를 word_frequency 과정에서 검색되지 않도록 삭제해 주었다.

 

또, stop_word 리스트를 만들어서 clouder.py 내부에서 글에서 text를 추출하는 과정에서 해당 단어가 나오면 카운팅 되지 않게끔 해주었다.

stop_words=[',', '.', '을', '를', '이다','있다','로','은','이','라','그','태그','이웃','되다',"해","요","따","경","겉","해"]

for text in contents:
    if text in stop_words:
        continue

 

추가적으로, 그냥 네모 모양으로 나오는 Word Cloud가 마음에 들지 않아서 mask를 씌워주기로 했다.

이 부분은 word cloud 모듈에 관련된 부분인데, word cloud 에는 적용할 수 있는 많은 기능들이 있기 때문에 다음 사이트들을 참고해 보면 좋을 것 같다.

 

[파이썬] 워드클라우드(Word Cloud) 만들기 (Mask 적용하기까지)

모듈 불러오기 BTS의 노래 가사 데이터 및 필요한 이미지를 이 글 하단에 첨부파일로 올립니다. 전처리 ...

blog.naver.com

 

간편하게 사용하면서도 꽤 이쁜 기능도 많은 워드 클라우드 Word Cloud 모듈 (for Python)

단어~ 자연어 처리가 되었든 안되었든... 말(단어로 된)을 프로그램으로 다루다 보면 워드클라우드가 필요할 때가 있습니다. 오늘은 그 중 제가 볼 때, 가장 접근하기 편하면서 너무나 강력한 워

pinkwink.kr

코드를 보니 흰색 부분은 배경 처리가 되어서 단어가 들어가지 않는다.

이 점을 이용하여, 내가 원하는 부분 외의 부분을 검은 부분으로 칠한 뒤 코드를 실행시키면 다음과 같은 결과를 얻을 수도 있다.

좌: 마스킹 처리 / 우: 결과물


후기

결과물이 꽤나 만족스러워 기분이 좋다! 😎

사실 A부터 Z까지 내가 다 만들까도 싶었지만.. 빠르게 끝내고 다른 것을 공부해보고 싶어 그렇게 까진 하지 않기로 했다.

오픈소스를 이용해 보는 것도 사실 개발 시간을 단축시킬 수 있는 좋은 개발 경험이 아닐까..? 라고 합리화를 한다..😅

 

나중에는 단어 리스트들을 txt로 가공해 웹에서 word cloud가 움직이는 프로젝트를 해보면 재밌겠다! 라는 생각을 해 보았다.

 

다들 재밌으니 한 번 해보도록 하자 😉


참고하면 좋은 글

 

Chap04-1: Part-of-speech Tagging

Part-Of-Speech tagging(POS tagging)은 문장 내 단어들의 품사를 식별하여 태그를 붙여주는 것을 말한다. 투플(tuple)의 형태로 출력되며 (단어, 태그)로 출력된다. 여기서 태그는 품사(POS) 태그다. 1. Default t

excelsior-cjh.tistory.com

 

저작자표시 (새창열림)

'활동 > 개인 프로젝트' 카테고리의 다른 글

빠른 개발을 위한 React Form 구성 템플릿  (0) 2024.12.07
Monte Carlo Walker (ref. Nature Of Code)  (0) 2022.02.25
Gaussian line (ref. Nature Of Code)  (0) 2022.02.20
맥주 음미 노트 (개발X / 디자인X / Figma)  (0) 2021.11.29
Random Walker  (0) 2021.11.03
'활동/개인 프로젝트' 카테고리의 다른 글
  • 빠른 개발을 위한 React Form 구성 템플릿
  • Monte Carlo Walker (ref. Nature Of Code)
  • Gaussian line (ref. Nature Of Code)
  • 맥주 음미 노트 (개발X / 디자인X / Figma)
기짜낭
기짜낭
생각이 많지만, 지금 내가 해야할 것을 하자.
  • 기짜낭
    So tired
    기짜낭
    • 분류 전체보기 (199)
      • 개발 (11)
        • Javascript (19)
        • Typescript (5)
        • Canvas (8)
        • React (13)
        • C (3)
      • 활동 (63)
        • 개인 프로젝트 (33)
        • 나눔 서포터즈 3기 (9)
        • 멋쟁이 사자처럼 (7)
        • 0&1 C++ 자료구조 스터디 (0)
        • 제 9회 창업 아이디어톤 (3)
        • Poom (ZeroWasteShop) (3)
        • 해커톤 (2)
        • 우테코 프리코스 7기 (6)
      • 알고리즘 (27)
        • 알고리즘 정리 (5)
        • 백준 (18)
        • 프로그래머스 (4)
      • 강연 (7)
      • 독서 (18)
      • 회고 & 생각 (16)
        • 연간회고 (4)
      • 기타 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • ※ 예전 블로그
  • 인기 글

  • 태그

    개발자
    TypeScript
    군대
    우테코
    에리카
    tutorial
    프론트엔드
    HTML5
    개념
    독서
    독후감
    백준
    react
    프로젝트
    1주 1권
    ES6
    개발
    한양대학교
    타입스크립트
    HTML
    canvas
    디자인
    Erica
    3기
    CSS
    프로그래밍
    1주에 1권씩
    Javascript
    대학
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
기짜낭
네이버 특정 블로그에서 가장 많이 사용한 단어 알아보기!
상단으로

티스토리툴바