# matching.py import datetime import re class TitleMatcher: def __init__(self): # 完整的颜色映射表 self.color_map = { # 红色系 "红色": "红色", "红": "红色", "大红": "红色", "深红": "红色", "浅红": "浅红色", "粉红": "粉红色", "粉色": "粉红色", "粉": "粉红色", "玫红": "玫红色", # 橙色系 "橙色": "橙色", "橙": "橙色", "橘色": "橙色", "橘黄": "橙黄色", "桔色": "橙色", # 黄色系 "黄色": "黄色", "黄": "黄色", "金黄": "金黄色", "浅黄": "浅黄色", "深黄": "深黄色", "橘黄": "橙黄色", # 绿色系 "绿色": "绿色", "绿": "绿色", "墨绿": "墨绿色", "深绿": "深绿色", "浅绿": "浅绿色", "翠绿": "翠绿色", "草绿": "草绿色", "青绿": "青绿色", "军绿": "军绿色", # 青色系 "青色": "青色", "青": "青色", "蓝绿": "青绿色", "青蓝": "青蓝色", "淡青": "淡青色", # 蓝色系 "蓝色": "蓝色", "蓝": "蓝色", "深蓝": "深蓝色", "浅蓝": "浅蓝色", "天蓝": "天蓝色", "宝蓝": "宝蓝色", "湖蓝": "湖蓝色", "藏青": "藏青色", # 紫色系 "紫色": "紫色", "紫": "紫色", "深紫": "深紫色", "浅紫": "浅紫色", "紫罗": "紫罗兰", "紫红": "紫红色", # 黑白灰系 "黑色": "黑色", "黑": "黑色", "白色": "白色", "白": "白色", "灰色": "灰色", "灰": "灰色", "深灰": "深灰色", "浅灰": "浅灰色", "银灰": "银灰色", "银": "银色", # 色系描述 "浅色": "浅色", "深色": "深色", "彩色": "多彩", "暖色": "暖色", "冷色": "冷色", "单色": "单色", "多色": "多彩" } # 风格映射表 self.style_map = { # 人群定位 "年轻人": "青春", "青年": "青春", "学生": "青春", "00后": "青春", "90后": "青春", "老年": "稳重", "老人": "稳重", "中年": "成熟", "商务人士": "商务", "男性": "硬朗", "女性": "柔美", "儿童": "可爱", "小朋友": "可爱", "女孩": "柔美", "男孩": "活力", # 风格描述 "简约": "简约", "简单": "简约", "简洁": "简约", "清爽": "简约", "干净": "简约", "现代": "现代", "现代化": "现代", "当代": "现代", "时尚": "时尚", "时髦": "时尚", "潮流": "时尚", "流行": "时尚", "商务": "商务", "商业": "商务", "正式": "商务", "专业": "专业", "活力": "活力", "活泼": "活力", "动感": "活力", "温馨": "温馨", "温暖": "温馨", "柔和": "温馨", "科技": "科技", "科技感": "科技", "未来": "科技", "自然": "自然", "清新": "自然", "环保": "自然", "极简": "极简", "经典": "经典", "传统": "经典", "复古": "复古", "欧式": "欧式", "中式": "中式", "日式": "日式", "卡通": "卡通", "可爱": "可爱", "甜美": "甜美", "酷炫": "酷炫", "奢华": "奢华" } # 类型映射表 self.type_map = { "模板": "模板", "皮肤": "皮肤", "主题": "主题", "风格": "风格", "设计": "设计", "界面": "界面", "网站": "网站", "样式": "样式", "一套": "模板", "个": "模板", "款": "模板", "张": "模板" } # 情感词(用于优化标题) self.positive_words = ["好看", "漂亮", "美观", "美丽", "优雅", "舒服", "舒适", "喜欢", "不错", "好", "棒", "赞", "精美", "优质"] self.intensity_words = ["最好", "首选", "特别喜欢", "非常", "很", "特别", "超", "超级"] def generate_title(self, user_text): """生成标题的主方法""" print(f"📝 用户输入: {user_text}") # 1. 提取关键词信息 extracted_info = self._extract_keywords(user_text) # 2. 生成标题 title = self._compose_title(extracted_info) print(f"✅ 生成标题: {title}") return title def _extract_keywords(self, user_text): """提取关键词信息""" # 清理文本 cleaned_text = self._clean_text(user_text) # 提取各类关键词 found_color = self._extract_color(cleaned_text) found_style = self._extract_style(cleaned_text) found_type = self._extract_type(cleaned_text) has_positive = self._has_positive_words(cleaned_text) return { 'color': found_color, 'style': found_style, 'type': found_type, 'has_positive': has_positive, 'has_any_keyword': bool(found_color or found_style) } def _extract_color(self, text): """提取颜色关键词""" for color_keyword in self.color_map: if color_keyword in text: return self.color_map[color_keyword] return None def _extract_style(self, text): """提取风格关键词""" for style_keyword in self.style_map: if style_keyword in text: return self.style_map[style_keyword] return None def _extract_type(self, text): """提取类型关键词""" for type_keyword in self.type_map: if type_keyword in text: return self.type_map[type_keyword] return "模板" # 默认返回模板 def _has_positive_words(self, text): """检查是否有积极词汇""" return any(word in text for word in self.positive_words) def _clean_text(self, text): """清理文本""" # 移除标点符号,用空格替换 text = re.sub(r'[,。!?、;:"“”‘\'’()【】《》<>{}【】]', ' ', text) # 合并多个空格 text = re.sub(r'\s+', ' ', text) return text.strip() def _compose_title(self, info): """组合生成标题""" # 如果没有任何关键词,返回日期标题 if not info['has_any_keyword']: return self._generate_date_title() color = info['color'] style = info['style'] template_type = info['type'] has_positive = info['has_positive'] # 根据提取到的信息组合标题 if color and style: base_title = f"{color}{style}{template_type}" elif color and not style: base_title = f"{color}主题{template_type}" elif style and not color: base_title = f"{style}风格{template_type}" else: base_title = f"精选{template_type}" # 添加修饰词(如果有积极词汇) if has_positive and len(base_title) < 10: base_title = f"优质{base_title}" # 确保长度合理 if len(base_title) > 15: base_title = base_title[:13] + "..." return base_title def _generate_date_title(self): """生成带日期的默认标题""" current_date = datetime.datetime.now() # 格式:月日推荐模板,如:1224推荐模板 date_str = current_date.strftime("%m月%d日") return f"{date_str}推荐模板" # 全局匹配器实例 title_matcher = TitleMatcher()