Skip to content

Repository files navigation

LexiPaper (v1.8.6)

LexiPaper 是一个完全运行在浏览器本地(100% 离线、保护隐私)的学术论文生词提取、智能过滤与卡片记忆系统。

它专为需要阅读大量英文学术论文的科研工作者、研究生及英语学习者设计。系统通过纯前端提取 PDF 文字,并结合自定义的英文词形还原引擎、大写专有名词比对算法和本地大语言模型(LLM)的智能预处理,从论文中滤干“杂质单词”,将真正有学习价值的生词整理出来供用户按需背诵。本系统集成了经典 SM-2 (SuperMemo-2) 间隔重复算法,为每个单词智能规划最佳复习周期,保障长期记忆效果。


🚀 核心功能与亮点

  1. 纯前端 PDF 文本解析 (100% 离线与隐私保护)
    • 直接在浏览器中使用 pdfjs-dist 提取 PDF 纯文本,没有任何数据被上传至云端服务器,论文安全防泄密。
  2. 智能词形还原与折词拼接 (Lemmatization & broken-words join)
    • 自研轻量级分词还原引擎,智能清洗动词时态(如 trained -> train, generalizing -> generalize)及名词复数(如 matrices -> matrix)。
    • 自动解决 PDF 折行处的连字符(Hyphen)断词拼接痛点。对于合成词(如 sequence-aligned)保留连字符,普通折行词(如 convolu- tional)则完美拼合。
  3. 静默过滤机制 (Built-in High-Frequency & Proper Nouns Filtering)
    • 高频常用词拦截:内置 A1/A2 等级及 1000+ 日常基础高频词库,解析时自动静默标记为已掌握(mastered)。
    • 作者姓名与学术专有名词检测:追踪单词全文首字母大写频次。当未登录词的大写率 $\ge 75%$ 时,自动判定为论文作者姓名或学术机构缩写,默认不提示学习。
  4. 【升级】本地 LLM 智能预处理 (LLM Pre-processing Pipeline)
    • 搭载本地大模型(如 llama.cpp 部署的 qwen 等模型)进行生词预清洗。
    • 智能分批(30 个词/批)发送,并截取前 100 字符的上下文例句以提升本地模型的吞吐率。
    • 智能纠正拼写有偏误的词根(如 isolat -> isolate),过滤非单词乱码,并静默过滤日常极简词汇。
    • 纠错静默存档:AI 纠错后,系统会将原始错误拼写(isolat)在解析当时立即静默存入本地词库为 mastered,防止后续多次打开相同论文时重复提取。
  5. 按需释义与音标加载 (Lazy Dictionary Load & Cache)
    • 待确认生词列表默认状态为 'mastered'(已掌握),单选框默认选中“已学会”。
    • 单词展示新增了“音标与释义”列,当状态为已掌握时显示 -- 保持排版整洁。
    • 一旦点击选中“需学习”,系统自动动态加载:静态词库直接命中;非内置词自动通过 API 异步抓取音标和中文翻译。保存时直接使用暂存数据,实现零延迟极速翻页与保存
  6. 3D 翻转卡片与 SRS 复习 (3D Flashcard & SM-2 SRS)
    • 科技感暗色玻璃化的 3D 单词翻转卡片,支持 Web Speech API 在线 TTS 朗读发音。
    • 搭载学术经典的 SM-2 间隔重复算法,支持对单词进行 0-5 分熟练度打分,动态规划下一次复习时间。
  7. 词库管理与一键导出 (Vocab Manager & Export TXT)
    • 支持快速检索、按状态与 CEFR(A1-C2)级别过滤词库。
    • 支持一键导出/导入 JSON 格式数据备份。支持卡片一键 AI 魔法更新以及编辑弹窗内 AI 自动填充。
    • 一键导出 TXT:支持将词库按 status(Todo/Master)分类并一行一个输出纯生词文本,头部带有 ##Todo##Master 的格式标识,完美兼容导入 Anki 等背词工具。
  8. 例句点词/划词联动查词 (Interactive Sentence Popover)
    • 页面中所有的论文原句均被分割为独立的单词,支持直接点击例句中的任何词。
    • 页面使用 React Portal 技术在顶层挂载磨砂玻璃查词卡片,支持极速本地/云端翻译与一键收录生词,彻底解决父容器样式截断的遮挡隐患。
  9. PDF 论文高 DPI 清爽阅读与就地查词 (High-DPI PDF Reader & Popover Selector)
    • 高清无损渲染:支持直接在系统内拖入 PDF 文件阅读。使用 scaledViewport(乘物理像素比后的高清视口)渲染 Canvas,解决 Retina/高分屏显示发虚模糊的痛点。CSS 去除强制 auto 压缩,确保画面与文字选择层完全重合,保障选取与拖拽的精度。
    • 划词/双击就地翻译:用户在原文双击或拖拽框选单词时,自动就地弹出翻译卡片。
    • 上下文自动追溯:在收藏生词时,系统会自动在当前页面进行句分割,提取包含该词的完整英文原句作为例句与生词一同入库。
    • 一键提取联动:工具栏提供一键提取全篇生词并携带文件跳转功能,无缝打通“阅读-解析”体验。
  10. 生词自动高亮与点击秒查 (Auto Highlight & One-click Translate)
    • 智能背景高亮:自动识别并在 PDF 页面上以半透明柔和紫色背景与虚线高亮标出系统判定您可能不认识的生词。
    • 一键直接点击查词:无需双击或拖拽划选,直接点击高亮单词即刻就地弹出翻译浮窗。在浮窗中记入生词本后,高亮状态会自动联动秒级更新。可在“系统设置”中随时关闭。

🛠️ 技术栈设计

  • 核心框架: React 18 + TypeScript 5
  • 构建工具: Vite 8
  • 数据持久化: IndexedDB (基于 localforage 异步包装)
  • UI 与样式: Vanilla CSS (自研 polar-dark 暗黑毛玻璃风格,0 外部 Tailwind 依赖)
  • 图标库: Lucide React
  • 算法层:
    • 自定义分词还原与启发式断行折词合并算法 (src/utils/lemmatizer.ts)
    • 标准 SuperMemo-2 记忆调度算法 (src/utils/srs.ts)

📂 项目结构

c:/work/translate/
├── src/
│   ├── assets/           # 静态媒体资产
│   ├── components/       # React 业务页面组件
│   │   ├── common/                # [NEW] 公共UI组件层
│   │   │   ├── PdfViewer.tsx      # 底层高清 PDF Canvas 渲染及生词高亮选择层
│   │   │   └── WordPopover.tsx    # 气泡浮动翻译与生词本联动 Portal 弹窗
│   │   ├── Dashboard.tsx          # 欢迎台、核心 SRS 数据统计及解析记录
│   │   ├── PaperParser.tsx        # 拖拽 PDF 解析、AI 预处理、批量生词确认表格 (核心)
│   │   ├── FlashcardStudy.tsx     # 卡片 3D 背诵、TTS 发音、熟练度打分 (SRS)
│   │   ├── VocabularyManager.tsx  # 词库管理、AI 智能更新、编辑与 JSON 备份、导出 TXT
│   │   ├── SystemSettings.tsx     # 偏好配置,消费 SettingsContext 全局设置
│   │   ├── PdfReader.tsx          # 本地 PDF 阅读器主页面,组合 PdfViewer 与 WordPopover (精简)
│   │   └── InteractiveSentence.tsx # 交互式例句解析组件,支持点词 Portal 弹窗翻译
│   ├── context/          # [NEW] 全局 Context 状态管理层
│   │   └── SettingsContext.tsx    # 系统设置全局 Provider 与偏好广播
│   ├── hooks/            # [NEW] 自定义 Hooks 逻辑封装层
│   │   └── useSettings.ts         # 快捷消费系统设置 Context
│   ├── services/         # [NEW] 纯业务服务层 (Services)
│   │   ├── aiService.ts           # 集中大模型 LLM 分批清洗、卡片 AI 魔法棒及参数校验服务
│   │   └── translator.ts          # 集中极速本地词典查词与云端云查词/翻译服务
│   ├── data/
│   │   └── cefr_base.ts           # 静态 CEFR 词典、1000+ 高频词与 A1-C2 词汇表
│   ├── utils/
│   │   ├── db.ts                  # 本地 IndexedDB 封装 (localforage)
│   │   ├── srs.ts                 # 经典 SM-2 SRS 复习调度算法
│   │   ├── lemmatizer.ts          # 分词提取、时态词根还原与启发式折行连字符合并
│   │   └── pdfParser.ts           # pdfjs-dist 前端 PDF 文本提取
│   ├── App.tsx           # 应用顶级路由骨架,包裹 SettingsProvider 广播偏好设置 (v1.8.6)
│   ├── index.css         # 全局 Polar-Dark 暗黑渐变玻璃感设计系统与 UI 样式
│   └── main.tsx          # 入口挂载
├── index.html            # 单页入口 HTML
├── package.json          # 依赖管理
└── tsconfig.json         # TypeScript 配置

🚀 快速开始

1. 本地安装依赖

确保您的系统安装了 Node.js(推荐 v18+),然后在项目根目录下运行:

npm install

2. 启动开发服务器

npm run dev

启动后在浏览器中打开命令行提示的本地端口(如 http://localhost:5173)即可。

3. 构建生产版本

npm run build

打包生成的文件将保存在 dist 目录中,可以直接放入静态服务器运行。


💡 使用说明

  1. 设置本地 LLM 服务
    • 进入“系统设置”页面,配置您的 API URL(如果是本地的 llama.cpp 服务,请通常使用 HTTP 格式,例如 http://10.51.0.92:8082/v1),填写模型名称并保存。
    • 可在此测试连通性,并决定是否开启“使用 LLM 预处理生词”以及“在 PDF 阅读界面中高亮生词”选项。
  2. 上传 PDF 论文
    • 切换至“解析论文”选项卡,拖入您的 .pdf 论文。
    • 等待文本提取、大模型预处理以及过滤排序完成。
    • 生词按难度分批展示,默认全部为“已学会”。对于想背的生词,点击“需学习”立刻渲染其释义音标,确认完毕后翻页保存。
  3. 日常复习
    • 回到控制台,如果有今日待复习词汇,点击“开始复习”。
    • 翻开卡片查看释义,并根据自身记忆牢固度打分(0-5),SM-2 算法会自动调整并合理推迟下一次复习的时间戳。

🔮 待完善与未来展望

  • 文献多格式支持:引入 EPUB, MOBI 和网页 HTML 文件提取生词的功能。
  • 更先进 of 算法模型:在 SM-2 的基础上,增加更符合现代人类记忆遗忘曲线的 FSRS (Free Spaced Repetition Scheduler) 模型供用户自行切换。
  • 加密多端云同步:由于目前完全离线本地,未来可提供基于用户自建 WebDAV、Notion 等接口的本地数据一键加密云端同步。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages