본문 바로가기
Python

감성 키워드 기반 맞춤형 뉴스 추천 시스템 만들기

by ramzee 2025. 4. 9.

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

  • 내가 관심 있는 키워드가 포함된 뉴스만 추천받고 싶어요.
  • 부정적인 뉴스는 보고 싶지 않아요. 긍정적인 뉴스만 보여주세요!
  • 크롤링 + 감성 분석 + 필터링 + 추천 자동화를 직접 구현해보고 싶어요.

1. 프로젝트 개요

  • 입력 파일: 인공지능_블로그_감성분석결과.csv
  • 사용 열: 제목, 날짜, 감성
  • 기능:
    • 사용자 키워드 입력
    • 감성 == "긍정"인 텍스트만 필터링
    • 제목에 키워드가 포함된 뉴스만 추출
    • 최신 순으로 정렬, 최대 5개 추천

2. 필요한 라이브러리

pip install pandas

3. 데이터 불러오기

import pandas as pd

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

| 제목                             | 감성 | 날짜        |
|----------------------------------|------|------------|
| AI가 바꾸는 미래 사회           | 긍정 | 2025.03.01 |
| 블록체인으로 금융 혁신          | 긍정 | 2025.03.02 |
| AI 실직 위기 경고               | 부정 | 2025.03.03 |

4. 날짜 형식 정제 및 정렬

df['날짜'] = pd.to_datetime(df['날짜'], errors='coerce')
df = df.sort_values(by='날짜', ascending=False)

5. 추천 시스템 함수 정의


def recommend_news(df, keyword, top_n=5):
    filtered = df[
        (df['감성'] == '긍정') &
        (df['제목'].str.contains(keyword, case=False, na=False))
    ]
    return filtered[['날짜', '제목', '감성']].head(top_n)

6. 사용자 입력 & 실행


user_input = input("관심 키워드를 입력하세요: ")
recommended = recommend_news(df, user_input)

if recommended.empty:
    print(f"\n'{user_input}' 키워드가 포함된 긍정 뉴스가 없습니다.")
else:
    print(f"\n'{user_input}' 키워드로 추천된 긍정 뉴스 {len(recommended)}건:")
    print(recommended.to_string(index=False))
입력 예시
관심 키워드를 입력하세요: 미래
출력 예시

[추천 뉴스]
      날짜              제목     감성
2025-03-10  AI가 이끄는 미래 교육 혁신   긍정
2025-03-06     미래 직업 트렌드 총정리   긍정
2025-03-03     인공지능으로 보는 미래 산업   긍정

7. 전체 통합 코드


import pandas as pd

df = pd.read_csv("인공지능_블로그_감성분석결과.csv")
df['날짜'] = pd.to_datetime(df['날짜'], errors='coerce')
df = df.sort_values(by='날짜', ascending=False)

def recommend_news(df, keyword, top_n=5):
    filtered = df[
        (df['감성'] == '긍정') &
        (df['제목'].str.contains(keyword, case=False, na=False))
    ]
    return filtered[['날짜', '제목', '감성']].head(top_n)

user_input = input("관심 키워드를 입력하세요: ")
recommended = recommend_news(df, user_input)

if recommended.empty:
    print(f"\n'{user_input}' 키워드가 포함된 긍정 뉴스가 없습니다.")
else:
    print(f"\n'{user_input}' 키워드로 추천된 긍정 뉴스 {len(recommended)}건:")
    print(recommended.to_string(index=False))

8. 기능 요약

기능설명
감성 필터감성 == '긍정'만 선택
키워드 필터사용자 입력 키워드를 포함한 제목 필터링
최신 정렬날짜 기준 최신 순 정렬
최대 5건 추천상위 5개 뉴스 추천

9. 확장 아이디어

  • 본문까지 포함한 내용 기반 추천 시스템 확장
  • 긍정 확률 점수를 기반으로 신뢰도 높은 뉴스 우선 정렬
  • 추천 결과를 텔레그램/이메일 등으로 알림 보내기