用Python打造智能姓名生成器:从数据分离到AI赋能

发布于:2025-03-17 ⋅ 阅读:(17) ⋅ 点赞:(0)

用Python打造智能姓名生成器:从数据分离到AI赋能


在这里插入图片描述

目录

  1. 项目概述与功能清单
  2. 环境准备与工具选择
  3. 项目架构设计
  4. 核心代码实现
  5. AI古文解析模块
  6. 交互界面开发
  7. 使用示例与效果展示
  8. 扩展思路与优化建议

1. 项目概述与功能清单

核心功能

  • 数据管理
    • CSV文件存储姓氏/名字库
    • 支持用户导入/导出数据
  • 交互界面
    • 姓名生成与实时预览
    • 已选名单管理(增删改查)
    • 排除词输入框(黑名单过滤)
  • AI赋能
    • 从古文中提取字词及注解
    • 自动生成姓名寓意解析
  • 扩展功能
    • 五行/笔画筛选
    • 生成结果导出为PDF/Excel

2. 环境准备与工具选择

必要工具包

# 基础库
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)

import pandas as pd
from pathlib import Path

class 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)

import random
from typing import List

class NameGenerator:
    def __init__(self, surnames: List[str], names: List[str]):
        self.surnames = surnames
        self.names = names
        self.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)

from transformers import pipeline
import jieba
import requests
from bs4 import BeautifulSoup

class 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.keywords
    
    def 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}
        }

古文数据采集示例

def crawl_gutenberg_poetry():
    """从古诗文网抓取数据"""
    url = "https://www.gushiwen.org/"
    html = requests.get(url).text
    soup = BeautifulSoup(html, "html.parser")
    poems = [div.text for div in soup.select(".contson")]
    return "\n".join(poems)

6. 交互界面开发

主窗口设计(main_window.py)

import customtkinter as ctk
from tkinter import messagebox

class 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

已选名单管理组件

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. 使用示例与效果展示

操作流程演示

# 启动应用
if __name__ == "__main__":
    app = MainWindow()
    app.mainloop()
  1. 输入排除字
    在左侧面板输入 伟,强,芳,系统将自动过滤包含这些字的候选名。

  2. 投喂古文
    粘贴《诗经》片段至古文输入框,点击解析后AI提取出 清、昭、穆、雅 等字。

  3. 生成姓名
    点击生成按钮,右侧展示候选名单:

    林清晏  周昭然  陆穆宁  沈雅舟
    
  4. 查看寓意
    双击名字弹出解析窗口:

    林清晏
    清者明澈如水,晏者安然若山,此名寄寓心境澄明、生活安宁之愿。

  5. 导出结果
    支持导出为结构化Excel文件,包含姓名、五行属性和寓意注解。


8. 扩展思路与优化建议

功能扩展

  • 五行筛选器
    添加下拉菜单选择金木水火土属性,结合笔画数逻辑过滤结果
  • API扩展
    接入公安部姓名查重API,避免高频重名
  • 多语言支持
    使用googletrans库实现中英双语注解生成

性能优化

# 添加缓存提升AI响应速度
from functools import lru_cache

@lru_cache(maxsize=1000)
def get_meaning_cached(char):
    return self.get_meaning(char)

用户体验增强

  • 实时预览
    输入排除字时动态刷新候选列表
  • 历史记录
    使用sqlite3保存用户操作记录
  • 音律检查
    调用pypinyin检测姓名读音平仄搭配

结语

通过本项目的实践,可掌握:

  1. 现代化Python GUI开发技巧
  2. 基于Transformer模型的NLP应用方法
  3. 生产级应用的数据架构设计

出于创作的需要,开始开发本项目,目前仍在改进中,内容难免有疏漏,欢迎在评论区留言指导交流😊


网站公告

今日签到

点亮在社区的每一天
去签到