【无标题】

文章目录

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

一、项目愿景

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

核心功能:

  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 文档。

相关推荐
言乐6几秒前
Python视频相对亮度检测
数据库·python·计算机视觉·小程序·音视频
Csvn1 分钟前
Python 开发技巧 · logging 最佳实践 —— 告别 print,搭建工程级日志系统
后端·python
ShallWeL10 分钟前
【机器学习】(16)—— 数值数据
人工智能·python·算法·机器学习·数据分析
我有满天星辰15 分钟前
Vue 指令完全指南:从 Vue 2 到 Vue 3 的演进与实战
前端·javascript·vue.js
光影少年16 分钟前
RN 渲染原理:不依赖WebView,原生控件渲染
前端·react native·react.js·前端框架
gr95ZS6E617 分钟前
基础入门java安全(一)--CC1基础分析
开发语言·python
小白学过的代码17 分钟前
# flv.js / mpegts.js 播不了国标摄像头(H.265 + G.711A)?纯前端 Jessibuca 无后端方案(附完整代码)
前端·javascript·h.265
极度的坦诚就是无坚不摧20 分钟前
数据分析DAY1-Python基础
python·数据分析
console.log('npc')22 分钟前
AI Agent 前端流式渲染核心技术文档(SSE \+ WebSocket \+ 打字机渲染)
前端·人工智能·websocket
法外狂徒132 分钟前
将 Pi Agent 接入 HagiCode 的实践之路
服务器·前端·人工智能