在准备四级和六级的过程中,查词一直是最打断节奏的一步:要切到浏览器新标签、打开词典网站、把词粘进去,一套流程下来听力已经断了。目标是做一个完全离线的词库服务,让查词发生在阅读或听力页面的原地,且不依赖任何第三方词典接口,断网也能用。
点击空白处退出提示
语言技术
Python、JavaScript系统类型
Web行业分类
开发工具
在准备四级和六级的过程中,查词一直是最打断节奏的一步:要切到浏览器新标签、打开词典网站、把词粘进去,一套流程下来听力已经断了。目标是做一个完全离线的词库服务,让查词发生在阅读或听力页面的原地,且不依赖任何第三方词典接口,断网也能用。
1、本地词库模块:合并 CET4 与 CET6 大纲词表,产出 5716 条词条,每条含音标与中文释义,压缩为 476KB 单文件 JSON。
2、词形回退模块:按规则还原常见变形,覆盖复数、过去式、现在分词、副词、比较级,并对双写辅音做特殊处理(slapping 还原为 slap,studies 还原为 study)。
3、服务端取词接口:浏览器不直接调用第三方词典(存在跨域限制),由本地 HTTP 服务转发并统一返回结构。
4、三级取词策略:先查本地词库,未命中查在线结果缓存,仍未命中才请求在线接口;本地命中耗时 2 到 3 毫秒,在线途径约 600 毫秒。
5、缓存加固模块:缓存文件采用原子写(临时文件加替换),读取失败时返回未知状态而不是空数组,避免把本地数据误判为空后清空。
6、全站注入模块:一个独立脚本注入全部页面,接管正文区域的右键与双击取词,链接、按钮、输入框保持浏览器默认行为。
7、取词标记模块:命中的单词在原文中用虚线下划线标出,面板显示音标、词性、释义与数据来源,支持拖动位置。
我独立负责该项目的全部环节:词表清洗、词形规则设计、服务端接口与前端交互。
1、词表清洗:解析 CET4 与 CET6 原始词表,处理音标与释义的粘连、多词性合并、重复词条合并,最终得到 5716 条干净数据。
2、词形规则:不使用词干库,用后缀规则加双写辅音判断实现回退,避免引入额外依赖。
3、后端实现:用 Python 标准库写 HTTP 服务,提供取词接口与缓存读写,不依赖任何 Web 框架。
4、前端交互:使用 caretRangeFromPoint 定位鼠标下的文本节点,再按字母边界扩展成完整单词,处理连字符与撇号。
5、跨域处理:浏览器直连第三方词典会被同源策略拦截,改为同源服务端转发,前端只调用本地接口。
6、数据安全:缓存写入使用原子替换;读取异常与空数据严格区分,防止一次读取失败就把用户数据清空。
7、技术难点:把右键接管限制在正文文本区域,且不影响链接、按钮、输入框的默认行为,需要逐层判断事件目标。



评论