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

news/2025/3/17 12:10:00/

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


在这里插入图片描述

目录

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

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()
  1. 输入排除字
    在左侧面板输入 伟,强,芳,系统将自动过滤包含这些字的候选名。

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

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

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

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

  5. 导出结果
    支持导出为结构化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检测姓名读音平仄搭配

结语

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

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

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


http://www.ppmy.cn/news/1579804.html

相关文章

【算法】 区间合并(附蓝桥杯真题) python

步骤 1.先将所有区间按左端点排序 2.从前往后扫一遍&#xff0c;维护当前正在合并的区间[st, ed] 3.依次检查每个区间[l, r]&#xff0c; 若 l > ed,将[st, ed]加入 ans , 更新st l,ed r 若 l < ed &#xff0c;更新ed max(ed, r) 时间复杂度 O(nlogn) 模板 https:/…

从被动响应到主动预见:智能可观测性技术的变革与实践

思维导图 一、引言 &#x1f303; 想象一下&#xff0c;在一个深夜 &#x1f319;&#xff0c;你的关键业务系统突然出现故障 &#x1f6a8;。传统情况下&#xff0c;你可能会收到大量不相关的告警 &#x1f4f1;&#x1f4ac;&#x1f4ac;&#x1f4ac;&#xff0c;然后花费…

前端知识点---原型-原型链(javascript)

文章目录 原型原型链:实际应用面试题回答 原型 原型:每个函数都有prototype属性 称之为原型 因为这个属性的值是个对象&#xff0c;也称为原型对象 只有函数才有prototype属性 作用: 1.存放一些属性和方法 2.在Javascript中实现继承 const arr new Array(1, 2, 3, 4) con…

利用pprof对golang进行性能分析

利用pprof进行性能分析 pprof性能分析的5个方面 一、性能分析的五个核心维度 CPU分析 - 剖析程序的CPU使用情况&#xff0c;定位高耗时函数 内存分析 - 追踪内存分配与泄露&#xff0c;优化内存使用模式 IO分析 - 监控文件/网络IO操作&#xff0c;发现瓶颈资源 Goroutine分…

程序地址空间:深度解析其结构,原理与在计算机系统中的应用价值

目录 1. 程序地址空间回顾 1.1 虚拟地址 2.进程地址空间 分页&虚拟地址空间 引入新概念 解释上述关于同样的地址不同的变量值问题 回答一个历史遗留问题 ​编辑 3.虚拟内存管理 虚拟内存是什么 虚拟地址空间区域划分 为什么要有虚拟地址空间 1. 程序地址空间回…

C++:二分习题

1. 借教室 503. 借教室 - AcWing题库 在大学期间&#xff0c;经常需要租借教室。 大到院系举办活动&#xff0c;小到学习小组自习讨论&#xff0c;都需要向学校申请借教室。 教室的大小功能不同&#xff0c;借教室人的身份不同&#xff0c;借教室的手续也不一样。  面对海…

ICMP 协议

文章目录 ICMP 协议概述数据包格式实例分析ICMP 请求ICMP 应答 参考 本文为笔者学习以太网对网上资料归纳整理所做的笔记&#xff0c;文末均附有参考链接&#xff0c;如侵权&#xff0c;请联系删除。 ICMP 协议 概述 ICMP&#xff08;Internet Control Message Protocol&…

机器学习中的激活函数是什么起什么作用

在机器学习&#xff0c;尤其是神经网络中&#xff0c;​激活函数​&#xff08;Activation Function&#xff09;是一个非常重要的组件。它的主要作用是为神经网络引入非线性&#xff0c;从而使神经网络能够学习和表示复杂的模式或函数。 1.激活函数的定义 激活函数是一个数学…