aliceblue11 commited on
Commit
3da1cdb
·
verified ·
1 Parent(s): ddbd0b7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +153 -68
app.py CHANGED
@@ -11,88 +11,88 @@ class ConceptAnalyzer:
11
  def __init__(self):
12
  self.monthly_data = {
13
  "1월": {
14
- "special_days": ["미니멀 챌린지", "새해 리셋", "플래너 스타트"],
15
- "trends": ["미니멀", "자기계발", "플래너", "정리정돈"],
16
  "colors": ["#FF6B6B", "#4ECDC4", "#45B7D1"],
17
  "mood": "희망적이고 새로운 시작",
18
- "female_appeal": ["미니멀", "자기계발", "셀프케어"]
19
  },
20
  "2월": {
21
- "special_days": ["갈렌타인데이", "셀프러브", "사랑의 달"],
22
- "trends": ["셀프러브", "갈렌타인", "로맨스", "따뜻한 감성"],
23
  "colors": ["#FF69B4", "#FFB6C1", "#DC143C"],
24
  "mood": "로맨틱하고 감성적",
25
- "female_appeal": ["셀프러브", "우정", "로맨스"]
26
  },
27
  "3월": {
28
- "special_days": ["여성의 날", "봄의 시작", "새학기"],
29
- "trends": ["봄맞이", "벚꽃 시즌", "봄 패션", "새출발"],
30
  "colors": ["#FFB6C1", "#98FB98", "#87CEEB"],
31
  "mood": "설렘가득하고 활기찬",
32
- "female_appeal": ["봄 패션", "꽃구경", "새출발"]
33
  },
34
  "4월": {
35
- "special_days": ["벚꽃 시즌", "봄나들이", "피크닉"],
36
- "trends": ["벚꽃축제", "봄피크닉", "아웃도어", "꽃놀이"],
37
  "colors": ["#98FB98", "#F0E68C", "#DDA0DD"],
38
  "mood": "생기발랄하고 즐거운",
39
- "female_appeal": ["벚꽃놀이", "피크닉", "봄여행"]
40
  },
41
  "5월": {
42
- "special_days": ["로즈데이", "감사의 달", "힐링"],
43
- "trends": ["감사", "나들이", "로즈데이", "봄여행"],
44
  "colors": ["#32CD32", "#FFB6C1", "#87CEEB"],
45
  "mood": "따뜻하고 감사한",
46
- "female_appeal": ["로즈데이", "감사표현", "힐링"]
47
  },
48
  "6월": {
49
- "special_days": ["키스데이", "여름 준비", "쿨링"],
50
- "trends": ["여름준비", "쿨링", "바캉스준비", "여름패션"],
51
  "colors": ["#00CED1", "#FFD700", "#FF6347"],
52
  "mood": "시원하고 활동적인",
53
- "female_appeal": ["여름준비", "쿨링케어", "바캉스"]
54
  },
55
  "7월": {
56
- "special_days": ["실버데이", "여름휴가", "바캉스"],
57
- "trends": ["여름휴가", "바캉스", "휴가패션", "여행"],
58
  "colors": ["#00BFFF", "#FFD700", "#FF6347"],
59
  "mood": "역동적이고 자유로운",
60
- "female_appeal": ["바캉스", "여행", "휴가패션"]
61
  },
62
  "8월": {
63
- "special_days": ["그린데이", "여름 마무리", "휴가"],
64
- "trends": ["여름휴가", "바다여행", "축제", "여름추억"],
65
  "colors": ["#00BFFF", "#FF6347", "#FFD700"],
66
  "mood": "열정적이고 추억가득한",
67
- "female_appeal": ["여름추억", "힐링", "여행"]
68
  },
69
  "9월": {
70
- "special_days": ["포토데이", "뮤직데이", "가을시작"],
71
- "trends": ["가을패션", "독서", "문화생활", "감성"],
72
  "colors": ["#FF8C00", "#DC143C", "#B8860B"],
73
  "mood": "감성적이고 성숙한",
74
- "female_appeal": ["가을패션", "카페", "독서"]
75
  },
76
  "10월": {
77
- "special_days": ["와인데이", "커피데이", "독서의 달"],
78
- "trends": ["가을단풍", "독서", "카페문화", "와인"],
79
  "colors": ["#FF8C00", "#DC143C", "#B8860B"],
80
  "mood": "감성적이고 여유로운",
81
- "female_appeal": ["단풍구경", "카페", "와인"]
82
  },
83
  "11월": {
84
- "special_days": ["무비데이", "오렌지데이", "연말준비"],
85
- "trends": ["빼빼로데이", "연말준비", "겨울패션", "따뜻함"],
86
  "colors": ["#8B4513", "#A0522D", "#CD853F"],
87
  "mood": "포근하고 준비하는",
88
- "female_appeal": ["빼빼로데이", "겨울패션", "연말모임"]
89
  },
90
  "12월": {
91
- "special_days": ["허그데이", "연말파티", "송년"],
92
- "trends": ["크리스마스", "연말파티", "선물", "송년회"],
93
  "colors": ["#DC143C", "#228B22", "#FFD700"],
94
  "mood": "축제같고 따뜻한",
95
- "female_appeal": ["크리스마스", "연말모임", "선물"]
96
  }
97
  }
98
 
@@ -126,43 +126,39 @@ class ConceptAnalyzer:
126
 
127
  concepts = []
128
 
129
- if data.get("special_days"):
130
- special = data["special_days"][0]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
  concepts.append({
132
- "name": f"{special} 이벤트",
133
- "theme": f"{special}를 테마로 한 여성 맞춤 이벤트",
134
- "score": 8.8,
135
- "reason": f"20-40대 여성이 공감할 있는 {special} 테마",
136
  "target": "20-40대 여성",
137
  "colors": data.get("colors", ["#FF69B4"]),
138
- "keywords": [special] + data.get("female_appeal", [])[:2],
139
- "is_recommended": True
140
- })
141
-
142
- if data.get("trends"):
143
- trend = data["trends"][0]
144
- concepts.append({
145
- "name": f"{trend} 챌린지",
146
- "theme": f"{trend} 트렌드 참여형 이벤트",
147
- "score": 8.0,
148
- "reason": f"인기 {trend} 트렌드로 높은 관심도",
149
- "target": "20-30대 트렌드 민감층",
150
- "colors": data.get("colors", ["#4ECDC4"]),
151
- "keywords": data.get("trends", [])[:3],
152
- "is_recommended": False
153
  })
154
 
155
- concepts.append({
156
- "name": f"{month} 셀프케어 위크",
157
- "theme": "나를 위한 특별한 시간",
158
- "score": 8.3,
159
- "reason": "셀프케어로 강한 어필",
160
- "target": "20-40대 여성",
161
- "colors": data.get("colors", ["#FFB6C1"]),
162
- "keywords": ["셀프케어", "힐링", "나를 위한 시간"],
163
- "is_recommended": True
164
- })
165
-
166
  concepts.sort(key=lambda x: (x.get("is_recommended", False), x["score"]), reverse=True)
167
 
168
  recommended_concept = next((c for c in concepts if c.get("is_recommended", False)), concepts[0])
@@ -190,6 +186,87 @@ class ConceptAnalyzer:
190
 
191
  return result, concept_names
192
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  # ================== 이벤트 관리 모듈 ==================
194
  class EventManager:
195
  def __init__(self):
@@ -510,6 +587,14 @@ def create_interface():
510
  visible=False
511
  )
512
 
 
 
 
 
 
 
 
 
513
  with gr.Column():
514
  concept_result = gr.Textbox(
515
  label="컨셉 분석 결과",
 
11
  def __init__(self):
12
  self.monthly_data = {
13
  "1월": {
14
+ "special_days": ["미니멀 챌린지", "새해 리셋", "건강한 습관 만들기", "갓생 챌린지", "21일 습관 만들기"],
15
+ "trends": ["미니멀", "자기계발", "플래너", "정리정돈", "갓생살기", "건강한 루틴", "새해 결심", "미라클 모닝", "홈트", "독서"],
16
  "colors": ["#FF6B6B", "#4ECDC4", "#45B7D1"],
17
  "mood": "희망적이고 새로운 시작",
18
+ "female_appeal": ["미니멀", "자기계발", "셀프케어", "건강한 습관", "갓생"]
19
  },
20
  "2월": {
21
+ "special_days": ["갈렌타인데이", "셀프러브", "사랑의 달", "자기사랑 챌린지", "따뜻한 마음 나누기"],
22
+ "trends": ["셀프러브", "갈렌타인", "로맨스", "따뜻한 감성", "자기사랑", "친구사랑", "감성 카페", "겨울 데이트", "따뜻한 차", "아늑한 집콕"],
23
  "colors": ["#FF69B4", "#FFB6C1", "#DC143C"],
24
  "mood": "로맨틱하고 감성적",
25
+ "female_appeal": ["셀프러브", "우정", "로맨스", "자기사랑", "갈렌타인"]
26
  },
27
  "3월": {
28
+ "special_days": ["여성의 날", "봄의 시작", "새학기", "벚꽃 예보", "봄맞이 준비"],
29
+ "trends": ["봄맞이", "벚꽃 시즌", "봄 패션", "새출발", "봄 정리", "꽃구경", "봄 여행", "라이프스타일 변화", "새 시작", "봄 데이트"],
30
  "colors": ["#FFB6C1", "#98FB98", "#87CEEB"],
31
  "mood": "설렘가득하고 활기찬",
32
+ "female_appeal": ["봄 패션", "꽃구경", "새출발", "라이프스타일", "봄맞이"]
33
  },
34
  "4월": {
35
+ "special_days": ["벚꽃 시즌", "봄나들이", "피크닉", "야외 활동", "봄 여행"],
36
+ "trends": ["벚꽃축제", "봄피크닉", "아웃도어", "꽃놀이", "야외 운동", "캠핑", "등산", "자전거", "봄 축제", "꽃구경"],
37
  "colors": ["#98FB98", "#F0E68C", "#DDA0DD"],
38
  "mood": "생기발랄하고 즐거운",
39
+ "female_appeal": ["벚꽃놀이", "피크닉", "봄여행", "야외활동", "꽃구경"]
40
  },
41
  "5월": {
42
+ "special_days": ["로즈데이", "감사의 달", "어버이날", "가정의 달", "스승의 날"],
43
+ "trends": ["감사", "나들이", "로즈데이", "봄여행", "가족사랑", "효도", "감사표현", "선물", "힐링", "여행"],
44
  "colors": ["#32CD32", "#FFB6C1", "#87CEEB"],
45
  "mood": "따뜻하고 감사한",
46
+ "female_appeal": ["로즈데이", "감사표현", "힐링", "가족사랑", "선물"]
47
  },
48
  "6월": {
49
+ "special_days": ["키스데이", "여름 준비", "쿨링", "결혼 시즌", "초여름"],
50
+ "trends": ["여름준비", "쿨링", "바캉스준비", "여름패션", "다이어트", "여름 화장품", "시원한 음료", "여름 레시피", "휴가 계획", "웨딩"],
51
  "colors": ["#00CED1", "#FFD700", "#FF6347"],
52
  "mood": "시원하고 활동적인",
53
+ "female_appeal": ["여름준비", "쿨링케어", "바캉스", "다이어트", "여름패션"]
54
  },
55
  "7월": {
56
+ "special_days": ["실버데이", "여름휴가", "바캉스", "휴가철", "여름 축제"],
57
+ "trends": ["여름휴가", "바캉스", "휴가패션", "여행", "해변", "수영장", "페스티벌", "여름 액티비티", "서핑", "다이빙"],
58
  "colors": ["#00BFFF", "#FFD700", "#FF6347"],
59
  "mood": "역동적이고 자유로운",
60
+ "female_appeal": ["바캉스", "여행", "휴가패션", "여름축제", "해변"]
61
  },
62
  "8월": {
63
+ "special_days": ["여름 마무리", "휴가", "여름 추억", "페스티벌", "야외 파티"],
64
+ "trends": ["여름휴가", "바다여행", "축제", "여름추억", "페스티벌", "야외 파티", "캠핑", "글램핑", "워터파크", "여름 간식"],
65
  "colors": ["#00BFFF", "#FF6347", "#FFD700"],
66
  "mood": "열정적이고 추억가득한",
67
+ "female_appeal": ["여름추억", "힐링", "여행", "페스티벌", "야외활동"]
68
  },
69
  "9월": {
70
+ "special_days": ["포토데이", "뮤직데이", "가을시작", "독서의 계절", "문화생활"],
71
+ "trends": ["가을패션", "독서", "문화생활", "감성", "카페", "전시회", "공연", "예술", "취미", "자기계발"],
72
  "colors": ["#FF8C00", "#DC143C", "#B8860B"],
73
  "mood": "감성적이고 성숙한",
74
+ "female_appeal": ["가을패션", "카페", "독서", "문화생활", "취미"]
75
  },
76
  "10월": {
77
+ "special_days": ["와인데이", "커피데이", "독서의 달", "할로윈", "가을 여행"],
78
+ "trends": ["가을단풍", "독서", "카페문화", "와인", "할로윈", "단풍구경", "등산", "가을 여행", "코스모스", "감성 사진"],
79
  "colors": ["#FF8C00", "#DC143C", "#B8860B"],
80
  "mood": "감성적이고 여유로운",
81
+ "female_appeal": ["단풍구경", "카페", "와인", "가을여행", "할로윈"]
82
  },
83
  "11월": {
84
+ "special_days": ["무비데이", "오렌지데이", "연말준비", "빼빼로데이", "추수감사"],
85
+ "trends": ["빼빼로데이", "연말준비", "겨울패션", "따뜻함", "영화", "독서", "겨울 준비", "연말 모임", "따뜻한 차", "홈파티"],
86
  "colors": ["#8B4513", "#A0522D", "#CD853F"],
87
  "mood": "포근하고 준비하는",
88
+ "female_appeal": ["빼빼로데이", "겨울패션", "연말모임", "영화감상", "홈파티"]
89
  },
90
  "12월": {
91
+ "special_days": ["허그데이", "연말파티", "송년", "크리스마스", "연말 결산"],
92
+ "trends": ["크리스마스", "연말파티", "선물", "송년회", "연말 결산", "한 해 마무리", "감사", "새해 계획", "겨울 데이트", "홈파티"],
93
  "colors": ["#DC143C", "#228B22", "#FFD700"],
94
  "mood": "축제같고 따뜻한",
95
+ "female_appeal": ["크리스마스", "연말모임", "선물", "한해마무리", "감사"]
96
  }
97
  }
98
 
 
126
 
127
  concepts = []
128
 
129
+ # 10개의 다양한 컨셉 생성
130
+ special_days = data.get("special_days", [])
131
+ trends = data.get("trends", [])
132
+ female_appeal = data.get("female_appeal", [])
133
+
134
+ for i in range(min(10, len(special_days) + len(trends))):
135
+ if i < len(special_days):
136
+ concept_name = f"{special_days[i]} 이벤트"
137
+ theme = f"{special_days[i]}를 테마로 한 참여형 이벤트"
138
+ keywords = [special_days[i]] + female_appeal[:2]
139
+ score = 8.8 - (i * 0.1)
140
+ is_recommended = i < 3
141
+ else:
142
+ trend_idx = i - len(special_days)
143
+ if trend_idx < len(trends):
144
+ trend = trends[trend_idx]
145
+ concept_name = f"{trend} 챌린지"
146
+ theme = f"{trend} 참여형 챌린지 이벤트"
147
+ keywords = [trend] + trends[trend_idx+1:trend_idx+3]
148
+ score = 8.0 - (trend_idx * 0.1)
149
+ is_recommended = trend_idx < 2
150
+
151
  concepts.append({
152
+ "name": concept_name,
153
+ "theme": theme,
154
+ "score": round(score, 1),
155
+ "reason": f"20-40대 여성에게 인기 높은 {concept_name.split()[0]} 테마",
156
  "target": "20-40대 여성",
157
  "colors": data.get("colors", ["#FF69B4"]),
158
+ "keywords": keywords,
159
+ "is_recommended": is_recommended
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  })
161
 
 
 
 
 
 
 
 
 
 
 
 
162
  concepts.sort(key=lambda x: (x.get("is_recommended", False), x["score"]), reverse=True)
163
 
164
  recommended_concept = next((c for c in concepts if c.get("is_recommended", False)), concepts[0])
 
186
 
187
  return result, concept_names
188
 
189
+ def generate_trendy_copy(self, concept_name, month):
190
+ """트렌디한 카피라이팅 생성 - 더 다양한 패턴 추가"""
191
+
192
+ trendy_copies = {
193
+ "미니멀": {
194
+ "sub1": "🌟 '나는 정리를 못하는 여자'는 이제 그만!",
195
+ "main": "미니멀은 '미'니로 '말'하는 거야, 작게 말해도 큰 변화! ✨",
196
+ "sub2": "올해는 진짜 '갓생'을 살아보자구요! 💪",
197
+ "hashtags": ["#갓생살기", "#미니멀", "#정리의신", "#새해정리"]
198
+ },
199
+ "셀프케어": {
200
+ "sub1": "💕 '나 자신과 연애 중'이라고 말할 수 있나요?",
201
+ "main": "셀프케어는 '셀프'로 '케어'하는 거 맞아! 💖",
202
+ "sub2": "오늘부터 내가 내 최고의 친구가 되는 거야 ✨",
203
+ "hashtags": ["#셀프케어", "#나를위한시간", "#힐링", "#자기사랑"]
204
+ },
205
+ "갓생": {
206
+ "sub1": "✨ 매일 똑같은 하루가 지겨우신가요?",
207
+ "main": "갓생은 '갓'처럼 살아보자는 거야! 너도 할 수 있어 🔥",
208
+ "sub2": "작은 변화가 큰 행복을 만들어요 💫",
209
+ "hashtags": ["#갓생살기", "#미라클모닝", "#자기계발", "#루틴만들기"]
210
+ },
211
+ "챌린지": {
212
+ "sub1": "🎯 혼자서는 어려워도 함께라면 가능해!",
213
+ "main": "챌린지는 '챌'만 해봐도 성공이야! 도전해볼까? 🚀",
214
+ "sub2": "우리 함께 새로운 나를 만나러 가요 ✨",
215
+ "hashtags": ["#챌린지", "#함께해요", "#새로운나", "#도전"]
216
+ },
217
+ "벚꽃": {
218
+ "sub1": "🌸 봄이 왔어요! 설레는 마음 준비되셨나요?",
219
+ "main": "벚꽃은 '벚'보다 '꽃'이 중요해! 꽃처럼 예쁘게 피어나요 🌺",
220
+ "sub2": "짧지만 아름다운 순간을 함께 만들어요 💕",
221
+ "hashtags": ["#벚꽃놀이", "#봄나들이", "#꽃구경", "#봄감성"]
222
+ },
223
+ "바캉스": {
224
+ "sub1": "🏖️ 더위는 싫어도 여름은 좋아하는 사람?",
225
+ "main": "바캉스는 '바'쁜 일상에서 '캉'스럽게 쉬는 거야! 🌊",
226
+ "sub2": "올여름 가장 핫한 추억을 만들어봐요 🔥",
227
+ "hashtags": ["#바캉스", "#여름휴가", "#힐링여행", "#여름추억"]
228
+ },
229
+ "카페": {
230
+ "sub1": "☕ 오늘도 카페인에 의존하며 살고 계신가요?",
231
+ "main": "카페는 '카'페인보다 '페'이스북 같은 소통공간! 📸",
232
+ "sub2": "따뜻한 커피 한 잔으로 시작하는 특별한 하루 ✨",
233
+ "hashtags": ["#카페투어", "#커피타임", "#감성카페", "#카페추천"]
234
+ },
235
+ "크리스마스": {
236
+ "sub1": "🎄 올해 크리스마스는 뭔가 특별하게 보내고 싶다면?",
237
+ "main": "크리스마스는 '크'게 '리'액션하며 '스'페셜하게! 🎅",
238
+ "sub2": "따뜻한 마음이 가득한 연말을 함께 만들어요 💝",
239
+ "hashtags": ["#크리스마스", "#연말파티", "#선물", "#따뜻한연말"]
240
+ }
241
+ }
242
+
243
+ # 기본 카피
244
+ default_copy = {
245
+ "sub1": "✨ 이런 특별한 순간을 놓칠 수 없죠!",
246
+ "main": "지금 이 순간이 바로 '찐'이야! 💫",
247
+ "sub2": "함께라면 뭐든 '레전드'가 될 수 있어요 🎉",
248
+ "hashtags": ["#찐이야", "#레전드순간", "#함께해요", "#특별한시간"]
249
+ }
250
+
251
+ # 컨셉명에서 키워드 찾기
252
+ for keyword, copy_data in trendy_copies.items():
253
+ if keyword in concept_name:
254
+ return copy_data
255
+
256
+ return default_copy False) else ""
257
+ result += f"## {i}. {concept['name']}{is_recommended_mark}\n"
258
+ result += f"**🏷️ 테마:** {concept['theme']}\n"
259
+ result += f"**⭐ 참여도 점수:** {concept['score']}/10점\n"
260
+ result += f"**💡 선정 이유:** {concept['reason']}\n"
261
+ result += f"**🎯 주요 타겟:** {concept['target']}\n"
262
+ result += f"**🔑 핵심 키워드:** {', '.join(concept['keywords'])}\n"
263
+ result += f"**🎨 추천 색상:** {', '.join(concept['colors'])}\n\n"
264
+ result += "---\n\n"
265
+
266
+ concept_names.append(concept['name'])
267
+
268
+ return result, concept_names
269
+
270
  # ================== 이벤트 관리 모듈 ==================
271
  class EventManager:
272
  def __init__(self):
 
587
  visible=False
588
  )
589
 
590
+ # 추가: 직접 입력란
591
+ custom_concept_input = gr.Textbox(
592
+ label="직접 컨셉 입력",
593
+ placeholder="원하는 컨셉을 직접 입력하세요",
594
+ visible=False,
595
+ info="분석된 컨셉 외에 다른 아이디어가 있다면 입력해주세요"
596
+ )
597
+
598
  with gr.Column():
599
  concept_result = gr.Textbox(
600
  label="컨셉 분석 결과",