用Python打造智能姓名生成器:从数据分离到AI赋能
目录
- 项目概述与功能清单
- 环境准备与工具选择
- 项目架构设计
- 核心代码实现
- AI古文解析模块
- 交互界面开发
- 使用示例与效果展示
- 扩展思路与优化建议
1. 项目概述与功能清单
核心功能
- 数据管理
- CSV文件存储姓氏/名字库
- 支持用户导入/导出数据
- 交互界面
- 姓名生成与实时预览
- 已选名单管理(增删改查)
- 排除词输入框(黑名单过滤)
- AI赋能
- 从古文中提取字词及注解
- 自动生成姓名寓意解析
- 扩展功能
- 五行/笔画筛选
- 生成结果导出为PDF/Excel
2. 环境准备与工具选择
必要工具包
python"># 基础库
pip install pandas # 数据管理
pip install numpy # 数据处理# 图形界面
pip install customtkinter # 现代化UI库(或使用标准tkinter)# AI相关
pip install transformers # Hugging Face模型库
pip install jieba # 中文分词
pip install requests # 网络请求
pip install bs4 # 网页解析(用于古文爬取)# 文件处理
pip install python-docx # Word导出
pip install reportlab # PDF导出
推荐开发工具
- IDE: VSCode / PyCharm
- 版本控制: Git + GitHub
- 文档: Markdown + Typora
3. 项目架构设计
name-generator/
├── data/ # 数据存储
│ ├── surnames.csv # 姓氏库
│ ├── male_names.csv # 男性名字库
│ ├── female_names.csv # 女性名字库
│ └── ancient_texts/ # 古文原文存储
│
├── core/ # 核心逻辑
│ ├── generator.py # 姓名生成算法
│ ├── ai_parser.py # AI古文解析
│ └── utils.py # 工具函数
│
├── gui/ # 界面模块
│ ├── main_window.py # 主窗口
│ └── components/ # 可复用UI组件
│
├── outputs/ # 生成结果
│ ├── pdf/ # PDF导出
│ └── excel/ # Excel导出
│
└── config.json # 配置文件(如模型路径)
4. 核心代码实现
数据层(data_loader.py)
python">import pandas as pd
from pathlib import Pathclass DataLoader:def __init__(self, data_dir="data"):self.data_dir = Path(data_dir)def load_surnames(self):return pd.read_csv(self.data_dir / "surnames.csv")["surname"].tolist()def load_names(self, gender):filename = f"{gender}_names.csv"return pd.read_csv(self.data_dir / filename)["name"].tolist()def save_custom_data(self, data, filename):df = pd.DataFrame(data, columns=["item"])df.to_csv(self.data_dir / filename, index=False)
生成逻辑(generator.py)
python">import random
from typing import Listclass NameGenerator:def __init__(self, surnames: List[str], names: List[str]):self.surnames = surnamesself.names = namesself.blacklist = set() # 排除词列表def set_blacklist(self, blacklist: List[str]):self.blacklist = set(blacklist)def generate(self, gender=None, num=5):filtered_names = [n for n in self.names if n not in self.blacklist]return [random.choice(self.surnames) + random.choice(filtered_names)for _ in range(num)]
5. AI古文解析模块
核心功能实现(ai_parser.py)
python">from transformers import pipeline
import jieba
import requests
from bs4 import BeautifulSoupclass AncientTextAnalyzer:def __init__(self):self.model = pipeline("text2text-generation", model="uer/gpt2-chinese-lyric")self.keywords = set()def extract_keywords(self, text):# 使用jieba提取高频词words = jieba.lcut(text)self.keywords = {w for w in words if len(w) == 1} # 提取单字return self.keywordsdef get_meaning(self, character):# 调用汉字API获取释义(示例)url = f"https://hanziyuan.net/api/character/{character}"try:res = requests.get(url).json()return res.get("meaning", "暂无注解")except:return "网络请求失败"def generate_name_meaning(self, name):# 生成寓意文案prompt = f"请用古文风格解释名字'{name}'的寓意:"return self.model(prompt, max_length=50)[0]['generated_text']def feed_text(self, text):# 投喂古文并解析self.extract_keywords(text)return {"characters": list(self.keywords),"meanings": {c: self.get_meaning(c) for c in self.keywords}}
古文数据采集示例
python">def crawl_gutenberg_poetry():"""从古诗文网抓取数据"""url = "https://www.gushiwen.org/"html = requests.get(url).textsoup = BeautifulSoup(html, "html.parser")poems = [div.text for div in soup.select(".contson")]return "\n".join(poems)
6. 交互界面开发
主窗口设计(main_window.py)
python">import customtkinter as ctk
from tkinter import messageboxclass MainWindow(ctk.CTk):def __init__(self):super().__init__()self.title("AI智能起名系统")self.geometry("800x600")# 左侧配置面板self.setup_left_panel()# 右侧展示面板self.setup_right_panel()def setup_left_panel(self):frame = ctk.CTkFrame(self, width=250)frame.pack(side="left", fill="y")# 排除词输入self.blacklist_entry = ctk.CTkEntry(frame, placeholder_text="输入要排除的字(逗号分隔)")self.blacklist_entry.pack(pady=10)# AI古文输入self.ai_text = ctk.CTkTextbox(frame, height=150)self.ai_text.pack(pady=10)ctk.CTkButton(frame, text="解析古文", command=self.parse_text).pack()def setup_right_panel(self):# 姓名展示列表self.name_list = ctk.CTkScrollableFrame(self)self.name_list.pack(side="right", fill="both", expand=True)# 操作按钮self.export_btn = ctk.CTkButton(self, text="导出结果", command=self.export)self.export_btn.pack(side="bottom")def parse_text(self):text = self.ai_text.get("1.0", "end")analyzer = AncientTextAnalyzer()result = analyzer.feed_text(text)messagebox.showinfo("解析完成", f"提取到{len(result['characters']}个可用字")def export(self):# 实现导出逻辑pass
已选名单管理组件
python">class SelectedNamesPanel(ctk.CTkFrame):def __init__(self, parent):super().__init__(parent)self.names = []self.listbox = ctk.CTkListbox(self)self.listbox.pack(fill="both", expand=True)# 操作按钮btn_frame = ctk.CTkFrame(self)ctk.CTkButton(btn_frame, text="删除", command=self.delete).pack(side="left")ctk.CTkButton(btn_frame, text="清空", command=self.clear).pack(side="left")btn_frame.pack()def delete(self):selected = self.listbox.curselection()if selected:del self.names[selected[0]]self.update_list()def update_list(self):self.listbox.delete(0, "end")for name in self.names:self.listbox.insert("end", name)
7. 使用示例与效果展示
操作流程演示
python"># 启动应用
if __name__ == "__main__":app = MainWindow()app.mainloop()
-
输入排除字
在左侧面板输入伟,强,芳
,系统将自动过滤包含这些字的候选名。 -
投喂古文
粘贴《诗经》片段至古文输入框,点击解析后AI提取出清、昭、穆、雅
等字。 -
生成姓名
点击生成按钮,右侧展示候选名单:林清晏 周昭然 陆穆宁 沈雅舟
-
查看寓意
双击名字弹出解析窗口:林清晏
清者明澈如水,晏者安然若山,此名寄寓心境澄明、生活安宁之愿。 -
导出结果
支持导出为结构化Excel文件,包含姓名、五行属性和寓意注解。
8. 扩展思路与优化建议
功能扩展
- 五行筛选器
添加下拉菜单选择金木水火土属性,结合笔画数逻辑过滤结果 - API扩展
接入公安部姓名查重API,避免高频重名 - 多语言支持
使用googletrans
库实现中英双语注解生成
性能优化
python"># 添加缓存提升AI响应速度
from functools import lru_cache@lru_cache(maxsize=1000)
def get_meaning_cached(char):return self.get_meaning(char)
用户体验增强
- 实时预览
输入排除字时动态刷新候选列表 - 历史记录
使用sqlite3
保存用户操作记录 - 音律检查
调用pypinyin
检测姓名读音平仄搭配
结语
通过本项目的实践,可掌握:
- 现代化Python GUI开发技巧
- 基于Transformer模型的NLP应用方法
- 生产级应用的数据架构设计
出于创作的需要,开始开发本项目,目前仍在改进中,内容难免有疏漏,欢迎在评论区留言指导交流😊