| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- # 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()
|