Spaces:
Sleeping
Sleeping
import gradio as gr | |
import re | |
import datetime | |
import calendar | |
import requests | |
import json | |
from datetime import datetime | |
# ================== 컨셉 분석 모듈 ================== | |
class ConceptAnalyzer: | |
def __init__(self): | |
self.monthly_data = { | |
"1월": { | |
"special_days": ["미니멀 챌린지", "새해 리셋", "건강한 습관 만들기", "갓생 챌린지", "21일 습관 만들기"], | |
"trends": ["미니멀", "자기계발", "플래너", "정리정돈", "갓생살기", "건강한 루틴", "새해 결심", "미라클 모닝", "홈트", "독서"], | |
"colors": ["#FF6B6B", "#4ECDC4", "#45B7D1"], | |
"mood": "희망적이고 새로운 시작", | |
"female_appeal": ["미니멀", "자기계발", "셀프케어", "건강한 습관", "갓생"] | |
}, | |
"2월": { | |
"special_days": ["갈렌타인데이", "셀프러브", "사랑의 달", "자기사랑 챌린지", "따뜻한 마음 나누기"], | |
"trends": ["셀프러브", "갈렌타인", "로맨스", "따뜻한 감성", "자기사랑", "친구사랑", "감성 카페", "겨울 데이트", "따뜻한 차", "아늑한 집콕"], | |
"colors": ["#FF69B4", "#FFB6C1", "#DC143C"], | |
"mood": "로맨틱하고 감성적", | |
"female_appeal": ["셀프러브", "우정", "로맨스", "자기사랑", "갈렌타인"] | |
}, | |
"3월": { | |
"special_days": ["여성의 날", "봄의 시작", "새학기", "벚꽃 예보", "봄맞이 준비"], | |
"trends": ["봄맞이", "벚꽃 시즌", "봄 패션", "새출발", "봄 정리", "꽃구경", "봄 여행", "라이프스타일 변화", "새 시작", "봄 데이트"], | |
"colors": ["#FFB6C1", "#98FB98", "#87CEEB"], | |
"mood": "설렘가득하고 활기찬", | |
"female_appeal": ["봄 패션", "꽃구경", "새출발", "라이프스타일", "봄맞이"] | |
}, | |
"4월": { | |
"special_days": ["벚꽃 시즌", "봄나들이", "피크닉", "야외 활동", "봄 여행"], | |
"trends": ["벚꽃축제", "봄피크닉", "아웃도어", "꽃놀이", "야외 운동", "캠핑", "등산", "자전거", "봄 축제", "꽃구경"], | |
"colors": ["#98FB98", "#F0E68C", "#DDA0DD"], | |
"mood": "생기발랄하고 즐거운", | |
"female_appeal": ["벚꽃놀이", "피크닉", "봄여행", "야외활동", "꽃구경"] | |
}, | |
"5월": { | |
"special_days": ["로즈데이", "감사의 달", "어버이날", "가정의 달", "스승의 날"], | |
"trends": ["감사", "나들이", "로즈데이", "봄여행", "가족사랑", "효도", "감사표현", "선물", "힐링", "여행"], | |
"colors": ["#32CD32", "#FFB6C1", "#87CEEB"], | |
"mood": "따뜻하고 감사한", | |
"female_appeal": ["로즈데이", "감사표현", "힐링", "가족사랑", "선물"] | |
}, | |
"6월": { | |
"special_days": ["키스데이", "여름 준비", "쿨링", "결혼 시즌", "초여름"], | |
"trends": ["여름준비", "쿨링", "바캉스준비", "여름패션", "다이어트", "여름 화장품", "시원한 음료", "여름 레시피", "휴가 계획", "웨딩"], | |
"colors": ["#00CED1", "#FFD700", "#FF6347"], | |
"mood": "시원하고 활동적인", | |
"female_appeal": ["여름준비", "쿨링케어", "바캉스", "다이어트", "여름패션"] | |
}, | |
"7월": { | |
"special_days": ["실버데이", "여름휴가", "바캉스", "휴가철", "여름 축제"], | |
"trends": ["여름휴가", "바캉스", "휴가패션", "여행", "해변", "수영장", "페스티벌", "여름 액티비티", "서핑", "다이빙"], | |
"colors": ["#00BFFF", "#FFD700", "#FF6347"], | |
"mood": "역동적이고 자유로운", | |
"female_appeal": ["바캉스", "여행", "휴가패션", "여름축제", "해변"] | |
}, | |
"8월": { | |
"special_days": ["여름 마무리", "휴가", "여름 추억", "페스티벌", "야외 파티"], | |
"trends": ["여름휴가", "바다여행", "축제", "여름추억", "페스티벌", "야외 파티", "캠핑", "글램핑", "워터파크", "여름 간식"], | |
"colors": ["#00BFFF", "#FF6347", "#FFD700"], | |
"mood": "열정적이고 추억가득한", | |
"female_appeal": ["여름추억", "힐링", "여행", "페스티벌", "야외활동"] | |
}, | |
"9월": { | |
"special_days": ["포토데이", "뮤직데이", "가을시작", "독서의 계절", "문화생활"], | |
"trends": ["가을패션", "독서", "문화생활", "감성", "카페", "전시회", "공연", "예술", "취미", "자기계발"], | |
"colors": ["#FF8C00", "#DC143C", "#B8860B"], | |
"mood": "감성적이고 성숙한", | |
"female_appeal": ["가을패션", "카페", "독서", "문화생활", "취미"] | |
}, | |
"10월": { | |
"special_days": ["와인데이", "커피데이", "독서의 달", "할로윈", "가을 여행"], | |
"trends": ["가을단풍", "독서", "카페문화", "와인", "할로윈", "단풍구경", "등산", "가을 여행", "코스모스", "감성 사진"], | |
"colors": ["#FF8C00", "#DC143C", "#B8860B"], | |
"mood": "감성적이고 여유로운", | |
"female_appeal": ["단풍구경", "카페", "와인", "가을여행", "할로윈"] | |
}, | |
"11월": { | |
"special_days": ["무비데이", "오렌지데이", "연말준비", "빼빼로데이", "추수감사"], | |
"trends": ["빼빼로데이", "연말준비", "겨울패션", "따뜻함", "영화", "독서", "겨울 준비", "연말 모임", "따뜻한 차", "홈파티"], | |
"colors": ["#8B4513", "#A0522D", "#CD853F"], | |
"mood": "포근하고 준비하는", | |
"female_appeal": ["빼빼로데이", "겨울패션", "연말모임", "영화감상", "홈파티"] | |
}, | |
"12월": { | |
"special_days": ["허그데이", "연말파티", "송년", "크리스마스", "연말 결산"], | |
"trends": ["크리스마스", "연말파티", "선물", "송년회", "연말 결산", "한 해 마무리", "감사", "새해 계획", "겨울 데이트", "홈파티"], | |
"colors": ["#DC143C", "#228B22", "#FFD700"], | |
"mood": "축제같고 따뜻한", | |
"female_appeal": ["크리스마스", "연말모임", "선물", "한해마무리", "감사"] | |
} | |
} | |
def extract_month_from_period(self, period_text): | |
if not period_text or period_text.strip() == "": | |
return None | |
date_patterns = [ | |
r'(\d{4})\.(\d{1,2})\.(\d{1,2})', | |
r'(\d{1,2})\.(\d{1,2})', | |
r'(\d{1,2})월', | |
] | |
for pattern in date_patterns: | |
matches = re.findall(pattern, period_text) | |
if matches: | |
if len(matches[0]) == 3: | |
month = int(matches[0][1]) | |
elif len(matches[0]) == 2: | |
month = int(matches[0][0]) | |
else: | |
month = int(matches[0]) | |
if 1 <= month <= 12: | |
return f"{month}월" | |
return None | |
def analyze_concepts(self, month): | |
data = self.monthly_data.get(month, {}) | |
concepts = [] | |
# 10개의 다양한 컨셉 생성 | |
special_days = data.get("special_days", []) | |
trends = data.get("trends", []) | |
female_appeal = data.get("female_appeal", []) | |
for i in range(min(10, len |