본문 바로가기
Python

감성 분석 기반 키워드 추천 시스템 만들기 - 긍정 뉴스로 추천하는 핵심 단어

by ramzee 2025. 4. 8.

0. 이 글은 누구를 위한 글인가요?

  • 긍정적인 뉴스 제목에서 키워드를 추출해 추천 시스템을 만들고 싶어요.
  • 감성 분석 결과를 활용한 유의미한 정보 추출이 궁금해요.
  • 어떤 단어가 긍정적인 뉴스에 자주 등장하는지 알고 싶어요.

1. 프로젝트 개요

  • 입력 데이터: 인공지능_블로그_감성분석결과.csv
  • 사용 열: 제목, 감성
  • 목표: 감성 == '긍정'인 제목을 분석해 상위 키워드 추천

2. 필요한 라이브러리 설치

pip install pandas konlpy matplotlib wordcloud

3. 데이터 불러오기


import pandas as pd

df = pd.read_csv("인공지능_블로그_감성분석결과.csv")
print(df[['제목', '감성']].head())
출력 예시

제목                             감성
AI가 바꾸는 미래 사회           긍정
챗GPT 사용법 정리               중립
일자리를 위협하는 인공지능 기술   부정

4. 긍정 감성 텍스트만 필터링


positive_titles = df[df['감성'] == '긍정']['제목'].dropna().tolist()
print(f"긍정 뉴스 수: {len(positive_titles)}")

5. 형태소 분석 + 명사 추출


from konlpy.tag import Okt
from collections import Counter

okt = Okt()
stopwords = ['인공지능', 'AI', '챗GPT', '사용', '관련', '방법', '정리', '소개', '기술']

def get_nouns_from_text(text_list):
    all_nouns = []
    for title in text_list:
        nouns = okt.nouns(title)
        filtered = [word for word in nouns if len(word) > 1 and word not in stopwords]
        all_nouns.extend(filtered)
    return all_nouns

nouns = get_nouns_from_text(positive_titles)
print("예시 명사 10개:", nouns[:10])
출력 예시

예시 명사 10개: ['미래', '사회', '변화', '직업', '교육', '자동화', '서비스', '효율', '산업', '활용']

6. 키워드 추천 Top 10


word_freq = Counter(nouns)
top_10 = word_freq.most_common(10)
print("추천 키워드 Top 10:")
for rank, (word, count) in enumerate(top_10, start=1):
    print(f"{rank}. {word} ({count}회)")
출력 예시
추천 키워드 Top 10:
1. 혁신 (39회)
2. 산업 (33회)
3. 강화 (26회)
4. 전략 (26회)
5. 향상 (24회)
6. 미래 (23회)
7. 역할 (23회)
8. 통한 (21회)
9. 성장 (21회)
10. 도입 (21회)

7. 추천 키워드 시각화 (막대그래프)

import matplotlib.pyplot as plt

words, counts = zip(*top_10)

plt.figure(figsize=(10, 5))
plt.bar(words, counts, color='skyblue')
plt.title("긍정 뉴스 기반 추천 키워드 Top 10")
plt.xlabel("키워드")
plt.ylabel("등장 빈도")
plt.grid(axis='y')
plt.tight_layout()
plt.show()


8. 워드클라우드 시각화 (선택)

from wordcloud import WordCloud

font_path = "C:/Windows/Fonts/malgun.ttf"  # Mac 사용자는 AppleGothic

wordcloud = WordCloud(
    font_path=font_path,
    background_color='white',
    width=800,
    height=600
).generate_from_frequencies(word_freq)

plt.figure(figsize=(10, 7))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.title("긍정 뉴스 키워드 워드클라우드")
plt.show()


9. 추천 결과 저장


top_df = pd.DataFrame(top_10, columns=['키워드', '빈도'])
top_df.to_csv("긍정_키워드_추천결과.csv", index=False, encoding='utf-8-sig')

10. 요약 정리

단계 설명
감성 필터링 감성 == '긍정'만 추출
명사 추출 Okt 형태소 분석기 사용 + 불용어 제거
키워드 정리 Counter로 등장 빈도 분석
시각화 matplotlib / wordcloud
파일 저장 CSV로 추천 키워드 저장