Skip to content

baesunny/TourismRecommendationSystem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tourism Recommendation System

대구 관광지 리뷰 데이터를 활용하여여 사용자의 여행 키워드에 맞는 관광지를 추천하는 NLP 기반 프로젝트이다. 리뷰 데이터 수집 → 전처리 → TF-IDF 키워드 추출 → KLUE BERT 감정 분석 → Word2Vec 키워드 매칭 → 감정 점수 기반 추천까지의 파이프라인을 완성하였다.

프로젝트 목적

관광지 선택은 단순 키워드 매칭만으로는 만족스럽지 않다. 동일한 키워드라도 실제 방문자 리뷰의 긍정·부정 경향이 관광지마다 다르기 때문이다.

본 프로젝트는 다음 문제를 해결하는 것을 목표로 하였다.

  1. 대구 지역 관광 리뷰를 한국어 NLP 파이프라인으로 정제한다.
  2. BERT 기반 감정 분석으로 관광지별 리뷰 긍정도를 정량화한다.
  3. 사용자 입력 키워드와 Word2Vec 유사도로 여행 테마를 매칭한다.
  4. 감정 점수와 키워드-관광지명 유사도를 결합해 최종 추천 결과를 제공한다.

배경 및 데이터

항목 내용
분석 지역 대구광역시
관광지 수 115개 (감정 분석 기준)
리뷰 데이터 개수 2,969건
여행 키워드 10개 (산책, 공원, 벚꽃, 야경, 시장, 체험 등)
감정 모델 KLUE BERT-base 2모델 앙상블
임베딩 모델 여행·레저 말뭉치 Word2Vec (300차원)

본 repository에서는 리뷰 원문이 포함된 대용량 CSV는 포함하지 않으며, 관광지별 집계 감정 점수(data/sentiment/attraction_sentiment_summary.csv)만 제공한다.

접근 방법

  관광지 리뷰 데이터 수집
  → 형태소 분석 / 불용어 제거 / 표제어 추출
  → TF-IDF 키워드 추출 → 키워드-관광지 매핑 
  → KLUE BERT 감정 분석 → 관광지별 평균 감정 점수
  → 사용자 키워드 입력
  → Word2Vec 유사 키워드 Top 2 제안
  → 후보 관광지 감정 점수 Top 3 / 최종 Top 1 추천

추천 로직 (03_recommendation_system.ipynb)

  1. 사용자 키워드(예: )와 Word2Vec 유사도로 여행 키워드 2개 제안 (벚꽃 0.552, 산책 0.288)
  2. 사용자가 선택한 키워드에 연결된 관광지 후보군 생성
  3. 방법 A: 감정 점수 평균 Top 3 추천
  4. 방법 B: 감정 상위 50% 후보 중 키워드-관광지명 유사도 최고 1곳 추천

프로젝트 결과

감정 분석

  • 2,969건 리뷰, 115개 관광지, 168개 관광지-주소 조합에 대해 Sentiment_Lemma 점수 산출
  • 점수는 BERT positive-class probability (0~1), 값이 높을수록 긍정적 리뷰 비중이 큼

추천 예시 (키워드: 벚꽃)

방식 결과
감정 Top 3 영남제일관 (0.574), 대구수목원 (0.573), 2·28기념중앙공원 (0.573)
하이브리드 Top 1 두류공원 (키워드-관광지명 유사도 0.192)

사용 기술

  • Python, Jupyter Notebook, Google Colab
  • KoNLPy (Okt), NLTK, scikit-learn (TF-IDF)
  • Hugging Face Transformers (KLUE BERT, RoBERTa)
  • gensim Word2Vec, pandas

디렉토리 구조

TourismRecommendationSystem/
├── README.md
├── requirements.txt
├── .gitignore
├── data/
│   ├── README.md
│   ├── keywords/
│   │   └── attraction_keyword_mapping.csv   # 키워드-관광지 매핑
│   └── sentiment/
│       └── attraction_sentiment_summary.csv   # 관광지별 감정 점수 집계
├── docs/
│   └── presentation/
│       └── [24_과정]NLP_대구관광지추천시스템.pdf
├── notebooks/
│   ├── 01_preprocessing_tfidf.ipynb         # 전처리 + TF-IDF 프로토타입
│   ├── 02_sentiment_analysis.ipynb            # KLUE BERT 감정 분석
│   └── 03_recommendation_system.ipynb         # 최종 추천 시스템
└── src/
    ├── __init__.py
    ├── config.py                              # 경로 및 모델 상수
    ├── preprocessing.py                       # 한국어 리뷰 전처리
    └── recommendation.py                      # 키워드 매칭·감정 기반 추천

발표자료

파일 설명
docs/presentation/[24_과정]NLP_대구관광지추천시스템.pdf NLP 과정 최종 보고서 (방법론, 실험, 결과 정리)
Streamlit 시연 영상 (YouTube) Streamlit 추천 시스템 직접 촬영·업로드 시연 영상

핵심 코드

from src.recommendation import (
    get_most_similar_keywords,
    get_spots_for_keyword,
    recommend_top_by_sentiment,
    recommend_hybrid,
)

추천 로직은 src/recommendation.py에, 리뷰 전처리는 src/preprocessing.py에 정리되어 있다.

About

대구 관광지 리뷰 데이터를 분석하여 관광지 추천 웹 서비스 구현

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors