TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 데이터 분석>

[파이썬] 자연어 처리 (NLP) - 네이버 뉴스 텍스트 분석(2)

by 기록자_Recordian 2024. 8. 21.
728x90
반응형
이전 내용

 

 

[파이썬] 자연어 처리 (NLP) - 네이버 뉴스 텍스트 분석

분석 내용(목표) 를 통해 익혔던 텍스트 분석 방법을 활용하여네이버 뉴스에서 '파이썬' 이라는 키워드로 기사를 검색해서 빈도수를 분석하고,워드 클라우드를 생성, gensim 으로 유사도 파악 모

puppy-foot-it.tistory.com


수행 목표

 

이전에 수행했던 '파이썬' 키워드 뉴스 기사 웹 스크래핑 + 워드 클라우드 작업에서 실패했던

애플로고에 워드 클라우드 마스킹 작업을 하고, 워드 클라우드 및 마스킹 작업에 대해 좀 더 명확히 이해할 수 있도록 한다.


웹 스크래핑, 토큰화, 불용어 처리 및 워드 클라우드 (사전 작업)

 

해당 작업은 동일하므로, 이전에 작업 시 작성했던 포스팅 (상단)을 확인하도록 한다.

다만, 불용어 처리는 몇 번 더 실행해 주었다.

# 불용어처리(여러 번 수행)
stop_words = [',', '을', '은', '는', '이', '가', 'keep', 'Keep','(', '으로', '...',
              '하기', '의', '를', '된', '컨', '조', '순', '도', '바로가기',
              '자세히', '/', '한', '해', '・', '', '△', '·', '3', '개월', '로',
              '된다면', '주세요', '지', '에서', '등', '40', '1', '와', '끄기',
             '.','에','언론사',')','보기','닫기','도움말','전체','선택', "'", 
             '과','펼치기','접기','화','인','-','언','하','1시간','"', '▲', '전', '검색',
              '2', '옵션', '뉴스', '메인', '‘', '이미지', 'iN', '블로그', '카페', '저장']

#용어가 제거된 텍스트를 기반으로 nltk 라이브러리의 Text 객체를 생성
tokens_ko = [each_word for each_word in tokens_ko if each_word not in stop_words]

ko = nltk.Text(tokens_ko, name='파이썬')
ko.vocab().most_common(50)

 

빈도수 그래프를 그려서 불용어를 추가하는 작업을 반복했다.

plt.figure(figsize=(15,6))
ko.plot(50)
plt.show()

그렇게 나온 결과로 워드 클라우드(기본) 그리기

# 데이터 준비
data = ko.vocab().most_common(300)

# 워드클라우드 객체 생성 (폰트 지정)
wordcloud = WordCloud(font_path="c:/Windows/Fonts/malgun.ttf",
                      relative_scaling=0.5,  # 상대적인 크기 조정값 설정
                      background_color='white',  # 배경은 흰색
                      width=800, height=400  # 이미지의 가로와 세로 크기 설정
                      )

# 텍스트 생성
text = "\n".join([f"{word}: {freq}" for word, freq in data])

# 워드클라우드 생성
wordcloud.generate(text)

# 이미지 출력
plt.figure(figsize=(16, 8))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()


애플로고에 워드 클라우드 마스킹 하기

 

먼저, 애플로고 png 파일을 파이썬으로 불러온다.

#이미지 마스크 생성 (이미지 파일을 열어 Numpy 배열로 변환 후 mask 변수에 저장)
apple_mask = np.array(Image.open('C:/Users/pc02/Documents/Python Prac/apple.png')) #이미지 마스크 생성

# 이미지 불러오기
plt.figure(figsize=(8, 8))
plt.imshow(apple_mask, cmap=plt.cm.gray, interpolation='bilinear')
plt.axis('off')
plt.show()


단어를 애플로고에 겹치기

 

애플로고에 맞춰 워드 클라우드를 생성하는 코드를 작성하여 실행해 본다.

# 워드클라우드 객체 생성 (폰트 지정 및 마스크 적용)
wordcloud = WordCloud(
    font_path="c:/Windows/Fonts/malgun.ttf",  # 한글 폰트 경로 지정 (필요한 경우)
    background_color='white',  # 배경은 흰색
    mask=apple_mask,  # 애플 마스크 이미지 적용
    #contour_color='black',  # 외곽선 색상 설정 (선택 사항 - 생략)
    #contour_width=1,  # 외곽선 두께 설정 (선택 사항 - 생략)
    width=800,  # 이미지의 가로 크기 (마스크 이미지에 맞춰 조정)
    height=400  # 이미지의 세로 크기 (마스크 이미지에 맞춰 조정)
).generate(text)

# 워드클라우드 이미지 출력
plt.figure(figsize=(16, 8))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')  # 플롯에서 축 제거
plt.show()

 

생성은 됐는데... 뭔가 이상하다.

사과 모양에 맞춰 생성이 돼야 하는데, 사과를 중심으로 배경에 생성이 되었다.


다시 시도

 

문제가 무엇일까를 생각해보다가, 앞서 애플로고 이미지를 불러올 때 이미지가 잘못 불러와 진듯 하다.

원래 로드돼야 하는 이미지 (검정 사과, 흰 바탕)

 

기존 코드에 배경과 그림이 반전되어 불러올 수 있게 추가한다.

#이미지 마스크 생성 (이미지 파일을 열어 Numpy 배열로 변환 후 mask 변수에 저장)
apple_mask = np.array(Image.open('C:/Users/pc02/Documents/Python Prac/apple.png')) #이미지 마스크 생성

# 선택사항: 단어가 검은색 영역 안에 표시되도록 하려면 색상을 반전
apple_mask = np.invert(apple_mask)

# 이미지 불러오기
plt.figure(figsize=(8, 8))
plt.imshow(apple_mask, cmap=plt.cm.gray, interpolation='bilinear')
plt.axis('off')
plt.show()

그림과 배경이 반전되어 잘 로드 되었다.

해당 마스크에 워드 클라우드 생성 코드를 입력하면

애플 모양의 워드 클라우드가 생성되었다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형