NLP 프로젝트 해보기 | 워드클라우드

noo·2021년 8월 24일
1
post-thumbnail

프로그래머스 2021 국민대 여름방학 인공지능 과정 7주차 Day2 TIL


📌WordCloud

WordCloud를 이용해 시대별 가사의 주요 키워드를 분석해보기


사용할 데이터 불러오기
music_info.csv col: title, artist, lyric, genre, era

music = pd.read_csv("./music_info.csv")


데이터 전처리

토크나이저 생성

from konlpy.tag import Okt
tokenizer = Okt()

특정 연대의 가사만 가져옴

lyrics_1990 = music[music['era']==1990]['lyric']

가사를 형태소 기준으로 토크나이징해줌
명사 형용사 부사만 추출

morph_1990 = []
tmp_list = []
for lyric in lyrics_1990:
  tmp = tokenizer.pos(lyric)
  tmp_list.append(tmp)

for i in tmp_list:
  for word, tag in i:
    if tag in ['Noun', 'Adjective', 'Adverb'] and ("것" not in word) and ("수" not in word) and ("게" not in word):
      morph_1990.append(word)

morph_1990 = ' '.join(morph_1990)

워드 클라우드

워드 클라우드 생성

wordcloud = WordCloud(max_words=40, font_path='./NanumSquareR.otf', max_font_size=100, background_color='white').generate(morph_1990)

워드 클라우드 출력

plt.figure(figsize=(20, 20))
plt.imshow(wordcloud, interpolation='lanczos')
plt.axis('off')
plt.show()

🔽 1990년대

🔽 2000년대

나나 나나 는,, 뭐냐..

🔽 2010년대

는 시대별이 아니라 장르별을 했어야...하나 뭔 다 똑같음...

아무튼 시대불문하고 대표 키워드는 사랑인 듯 하고요..
오늘의 수확은 없지만..,뭐... 고럼... 가사들 가지고 사랑노래인지 아닌지 분류하는 걸 해봐야지


전체 코드 https://github.com/kueyeon0429/NLP-proj/blob/master/wordcloud.py
데이터 https://github.com/kueyeon0429/NLP-proj/blob/master/music_info.csv


폰트 나눔스퀘어 https://hangeul.naver.com/font
참고 가사를 데이터 분석한다면? https://maily.so/musicdata/posts/7251b9
참고 파이썬 워드클라우드 만들기 https://khann.tistory.com/60
참고 형태소 분석기 https://study-with-yuls.tistory.com/253
참고 워드 클라우드 만들기 https://imworld.tistory.com/59


위의 워드클라우드는 셋이 다 비슷한 결과를 보여준다
정말 아무 수확이 없는 듯 해서 당황했는데ㅎㅎ;;

실시간 세션때 김태영 대표님? 멘토님?이 이런 경우에는 상위 몇개를 제외하고 워드클라우드를 뽑아보는 방법도 있다고 피드백을 해주셨당

그래서 공통적으로 가장 많이 나온 ['사랑', '그대']만 일단 없애보기로!
하려다가 '사람'도 뺐음

단어 필터링

단어 필터링 해주고

morph_1990 = list(filter(lambda x: x not in ['사랑', '그대', '사람'], morph_1990))

다시 리스트 -> 문자열로 합쳐주고

morph_1990 = ' '.join(morph_1990)

워드클라우드를 생성!(이번엔 필터링한 거 제외하고 상위 20개만 뽑아봤음)

# word cloud 생성
wordcloud_1990 = WordCloud(max_words=20, font_path='./NanumSquareR.otf', max_font_size=100, background_color='white').generate(morph_1990)

🔽 1990년대

🔽 2000년대

절절하네
(정제 안된거 좀 거슬리네)

🔽 2010년대

필터링을 하니까 특성이 조금 보이는 것 같다!

0개의 댓글

관련 채용 정보