【无标题】

文章目录

自定义词库的背单词助手------设计思路与实现要点

一、项目愿景

我想做一个小软件或工作流,一句话概括就是 "自定义词库的背单词助手" 。

核心功能:

  1. 导入自定义词库(先支持 md/txt/xlsx,后续再补充拍照识别等)
  2. 呈现单词读音(音标 + 音频)

二、MVP 数据流

整体处理流程如下:

复制代码
导入文件(md/txt/xlsx) → 解析成 [{word, 释义?}]
                ↓
         匹配 ECDICT → 补全音标、词频、词性
                ↓
    前端卡片展示:单词 + IPA + 🔊播放按钮
                ↓
      音频:点击→有道API→缓存到本地→播放

三、音频方案

  • 最终方向:在线优先,离线降级为本地
  • 初期开发:先依托在线拉取

四、交互形态

首选 卡片翻看模式:

  • 正面:英文 + 音标 + 点击UI放音频
  • 反面:中文释义 + 相关用法

五、运行环境与演进愿景

  • 起步 :本地网页(uvicorn app:app --reload,访问 localhost:8000)
  • 演进路线:本地网页 → 互联网网站 → 桌面独立程序 → 手机应用商城
  • 架构硬要求 :前后端彻底分离
    • 后端:纯 FastAPI,只吐 JSON 和音频
    • 前端:不依赖任何框架的静态页
  • 好处:一份核心代码,本地直接跑、部署上线、Tauri 套壳桌面端、Capacitor 打包 App,都无需改动

六、代码中的三个扩展点(来自 README)

  1. dict_lookup() ------ 可替换的词典核心。当前内置 8 个 demo 词,替换成 ECDICT 的 stardict.csv(77 万词,含 IPA、词频、词性,免费离线)只需改造这一个函数。
  2. /audio 接口 ------ 已做成"在线优先"代理结构。要加离线降级,只需在拉有道之前先查本地 cache/ 目录,命中即返回。
  3. next(known) ------ 间隔重复接入点。目前顺序翻页,接上 SM-2 算法即可拥有 Anki 式复习。


七、初期问题与解决方案

问题 1:后台没有词库,用户导入的是英文+中文释义

解决方案:释义以用户导入的为准,词典只兜底音标。

  • 用户导入 hydrogen 氢气,背面就显示"氢气"
  • 若只写单词没给释义,才去内置词典查;查不到则提示"在词库里给它加上释义即可显示"

输入格式设计------让用户怎么写都能解析

要求正则足够"灵活",自动识别分隔符。支持的写法:

复制代码
hydrogen 氢气
hydrogen = 氢气
hydrogen: 氢气
hydrogen | 氢气
hydrogen,氢气
hydrogen, 氢气
hydrogen	氢气    (Tab 分隔,xlsx 双列同理)
hydrogen氢气      (中英文连写)
carbon dioxide 二氧化碳  (带空格的词组)

解析规则:第一段连续英文是单词,遇到第一个分隔符或第一个中文字符时,后面全算释义。这样用户几乎不用记格式。

问题 2:希望支持 .docx 文件

解决方案 :直接加解析分支,用 python-docx 读取段落文本和表格。

问题 3:点击音频播放键有 2~3 秒延迟

原因 :每次点击才去远端拉取音频,存在网络往返耗时。

解决办法(两层叠加):

  1. 前端预取:渲染当前卡片时,在后台提前请求下一张卡片的音频
  2. 后端加本地缓存 :/audio 接口先把有道返回的 mp3 存入 cache/ 目录,第二次听同一个词直接返回本地文件,秒开

这样,第一次听某个词仍需在线等待,但后续全程无延迟。同时,cache/ 目录里的 mp3 断网也能播放,实现了"在线优先、离线降级"的第一步。

八、运行与使用

安装依赖后启动即可:

bash 复制代码
pip install -r requirements.txt
uvicorn app:app --reload

浏览器打开 localhost:8000,把单词文件拖进去就行。

依赖说明:相比最初版本,增加了 python-docx 用于解析 Word 文档。

相关推荐
“AI国潮设计-小江”7 小时前
《Python+SDXL实战:用ControlNet精准控制“英歌舞翻糖吐司”构图,附批量生成脚本》
开发语言·人工智能·python·prompt·aigc
wenwen_chao7 小时前
Python学习与开发资源合集:实用技巧与工具推荐
python
陈随易7 小时前
bm2,Node.js 与 Bun 项目部署新选择
前端·后端·程序员
for_ever_love__8 小时前
函数——参数、lambda、*args与作用域
python·函数·大模型开发·编程基础
东莞市云毅网络有限公司8 小时前
企业资料时效性判定:Last-Modified、正文日期与版本字段三路交叉
python·sqlite·自动化运维·geo·数据监测
Query*8 小时前
深入浅出LangGraph【一】_基础篇
python·ai·langchain
福兮说9 小时前
canvas 旋转图片的六个坑:四角被裁、Math.ceil 多出 1px 黑边、JPG 角发黑、翻转方向反了
前端·javascript·图像处理·canvas
XiaoMaqqqq9 小时前
市面上正规的IP驱动产业新场景新工具哪家强
运维·python·网络协议·tcp/ip
ShyanZh9 小时前
【Python3基础】19-Socket 与 TCP、UDP 编程
python·网络协议·tcp/ip·udp
惊讶的猫10 小时前
工具选对之后还不够:商城 Agent 的参数与权限治理
开发语言·python