🌐 简体中文 | 繁體中文 | English | 한국어 | 日本語
支持简体中文、繁体中文、英文和韩语的日语句子解析工具。输入一句日语,应用会拆解词汇、读音、罗马音、词性、整句翻译和单词详解,并提供图片识别、朗读和 AI 日语助手。
体验链接:在线体验。
以下截图以简体中文界面示范。实际使用时,可通过右上角地球图标切换语言。
- 语言切换:点击右上角地球图标,选择简体中文、繁体中文、English 或 한국어,立即生效并在浏览器中记住选择;界面、翻译、词条和 AI 回答同步切换。
- 繁体中文使用自然的惯用词汇和表达,不只转换字形。日语原文、读音和例句保持日语;已有聊天消息保留原语言,新回复使用所选语言。
- 句子解析:分词、假名、罗马音、词性标记和释义。
- 单词详解:点击词汇查看读音、释义、语法角色和上下文解释。
- 整句翻译:按所选语言生成整句翻译,保留原文段落与换行;切换语言后自动重新翻译。
- 纯文本粘贴:去掉网页样式、Markdown 格式和链接地址,保留链接显示的文字与段落换行;单独出现的网址也会移除。粘贴图片仍可启动 OCR。
- 长文与链接处理:长文分段解析;输入中仍存在的网址由程序保留原样,避免模型重复生成冗长编码。完整结果会检查原文还原情况,并补回模型遗漏的空白。
- 图片识别:上传或粘贴图片提取日语文字;DeepSeek 文本解析与 OCR 统一使用
deepseek-flash,Gemini 使用所选模型。 - 朗读:支持 Edge TTS 和 Gemini TTS;声音设置菜单向下展开。
- AI 日语助手:围绕日语语法、词汇、文化和当前句子提问。
- 双模型服务商:文本模型支持 Gemini 和 DeepSeek,默认使用 DeepSeek。
- 本地浏览器设置:用户可以在设置弹窗中为 Gemini / DeepSeek 分别填入自己的 API Key。
- 可选访问密码:部署后可用
CODE做简单访问控制。 - 可选 Umami 统计:配置环境变量后自动加载 Umami 跟踪脚本。
- Docker 部署:支持 Docker Compose 和 Docker Hub 多架构镜像。
以下为本项目配置使用的模型标识。
| 能力 | 默认模型 / 服务 | 说明 |
|---|---|---|
| 文本解析 | deepseek-flash |
默认文本服务商是 DeepSeek;思考模式默认关闭,设置中的切换功能暂不可用。 |
| Gemini 文本解析 | gemini-flash-latest / gemini-flash-lite-latest |
可在设置中切换 Gemini Flash / Flash-Lite;Flash 使用 Low 推理档,Flash-Lite 使用 Minimal。 |
| 图片识别 | deepseek-flash / Gemini |
选择 DeepSeek 时,图片 OCR 与文字解析使用同一模型;OCR 固定关闭思考。 |
| 朗读 | Edge TTS / Gemini TTS | 默认使用 Edge TTS;Gemini TTS 需要 Gemini API Key。 |
git clone https://github.com/cokice/japanese-analyzer.git
cd japanese-analyzer
npm ci建议使用 Node.js 22(与 Docker 镜像一致)。复制环境变量模板:
macOS / Linux:
cp .env.example .env.localWindows PowerShell:
Copy-Item .env.example .env.local编辑 .env.local。如果只想先跑文本解析,建议先配置 DeepSeek:
DEEPSEEK_API_KEY=your_deepseek_api_key
DEEPSEEK_API_URL=https://api.deepseek.com/chat/completions
GEMINI_API_KEY=your_gemini_api_key
GEMINI_API_URL=https://generativelanguage.googleapis.com/v1beta/openai/chat/completions
CODE=
NEXT_PUBLIC_UMAMI_SRC=
NEXT_PUBLIC_UMAMI_WEBSITE_ID=启动开发环境:
npm run dev如需从局域网中的其他设备体验:
npm run dev -- --hostname 0.0.0.0 --port 3100在其他设备打开 http://<电脑的局域网IP>:3100。
| 变量 | 必填 | 用途 |
|---|---|---|
DEEPSEEK_API_KEY |
推荐 | DeepSeek API Key。用于默认文本解析及 DeepSeek 图片 OCR。 |
DEEPSEEK_API_URL |
可选 | DeepSeek OpenAI 兼容接口地址;留空使用官方默认地址。 |
GEMINI_API_KEY |
可选 | Gemini API Key。用于 Gemini 文本解析、图片识别和 Gemini TTS。 |
GEMINI_API_URL |
可选 | Gemini OpenAI 兼容接口地址;留空使用官方默认地址。 |
CODE |
可选 | 访问密码。设置后访问应用需要先输入密码。 |
NEXT_PUBLIC_UMAMI_SRC |
可选 | Umami 脚本地址,例如 https://cloud.umami.is/script.js。 |
NEXT_PUBLIC_UMAMI_WEBSITE_ID |
可选 | Umami Website ID。需要和 NEXT_PUBLIC_UMAMI_SRC 同时配置才会启用。 |
说明:
DEEPSEEK_API_KEY和GEMINI_API_KEY是服务器端默认密钥,不会暴露到前端。- 用户也可以在右上角设置中填写自己的 Key,设置保存在浏览器本地;发起请求时,Key 会发送给本应用服务端,由服务端调用上游 API。接口地址由服务端环境变量配置。
- Gemini TTS 使用独立的
gemini-3.1-flash-tts-preview模型和官方语音接口,不受GEMINI_API_URL影响。 - Umami 统计通过本地 loader 读取运行时环境变量;两个
NEXT_PUBLIC_UMAMI_*都为空时不会加载 Umami。 - 启用 Umami 后会记录功能使用事件:
analyze_sentence包含解析服务商、模型及 OCR / TTS 使用情况;image_text_extract、tts_speech、word_detail_click包含对应功能的服务商和模型。 - 解析结果事件:
analyze_success、analyze_error、analyze_cancel,每次解析最多记录一个终态。聊天事件:chat_send、chat_success、chat_error。结果事件包含服务商、模型、流式模式、总耗时duration_ms;若出现过可显示内容,还包含首个结果耗时first_result_ms(单位均为毫秒)。非流式解析的首个结果时间为全部结果返回时间;解析计时不包含独立的整句翻译或词典请求。 - 失败只记录固定的
error_category分类;解析取消通过cancel_reason区分主动停止、被新请求替代和组件卸载。事件不包含原文、聊天消息或回复、图片、翻译结果、原始错误信息或 API Key。此处不额外监测主题、设置、复制和重试操作。 - 不要提交
.env.local,仓库已经默认忽略本地环境变量文件。
如果你使用 Claude Code 或 Codex 等 AI 编程助手,可以直接把下面的提示词发给它,让它在你的 VPS 上完成部署:
# 部署任务:japanese-analyzer
请帮我在这台 VPS 上用 Docker 部署 japanese-analyzer(一个日语句子解析 Web 应用)。
## 目标
- 使用 Docker Hub 镜像 `howenhowen/japanese-analyzer:latest`(多架构,amd64/arm64 都有)
- 容器监听 3002,映射宿主机 3002 端口
- 容器名 `japanese-analyzer`,设置 `--restart unless-stopped`
## 环境变量
通过环境变量注入,不要写进镜像:
- `DEEPSEEK_API_KEY`:必填,默认文本解析及图片 OCR 用 DeepSeek(我会提供,或提示我填入)
- `GEMINI_API_KEY`:可选,用于 Gemini 文本/图片识别和 Gemini TTS,没有就跳过
- `CODE`:可选访问密码,留空即不启用
- `DEEPSEEK_API_URL` / `GEMINI_API_URL`:留空使用官方默认地址即可
推荐用 docker compose 管理:仓库里有 `docker-compose.hub.yml`,配合 `.env.production`(从 `.env.production.example` 复制)使用;或者直接 `docker run` 也行,你看哪个更合适。
## 域名与 HTTPS(询问后再做)
容器跑通后,询问我是否需要绑定域名并配置 HTTPS 反向代理:
- 如果我说不需要,直接用 `http://VPS_IP:3002` 访问即可,跳过本节
- 如果我提供域名(例如 `nihongodemo.howen.ink`):
- 先检查服务器上是否已有 Nginx / Caddy,优先复用现有的,不要重复装一套
- 都没有的话推荐 Caddy(自动签发和续期 Let's Encrypt 证书,配置最简单)
- 反代到 `127.0.0.1:3002`,配置 HTTPS 并把 HTTP 重定向到 HTTPS
- 提醒我先把域名 A 记录解析到这台 VPS,并确认 80/443 端口在防火墙/安全组已放行
- 配好后用 `curl -I https://域名` 验证证书和反代是否正常
## 验收标准
1. 容器正常运行,`docker logs` 无报错
2. `curl http://127.0.0.1:3002` 能返回页面
3. 重启服务器后容器能自动拉起
4. (如配置了域名)https 访问正常,证书有效
## 注意
- 如果 3002 端口被占用,先告诉我再换端口,不要擅自杀掉占用进程
- API Key 属于敏感信息,不要 echo 到日志或写入不必要的文件
- 修改现有 Nginx/Caddy 配置前先备份原文件
- 部署完成后告诉我访问地址和后续更新镜像的命令(pull → rm → run 或 compose pull && up -d)部署步骤:
- Fork 或导入本仓库到 Vercel。
- 在 Vercel 项目的
Settings -> Environment Variables中配置环境变量。 - 至少配置
DEEPSEEK_API_KEY,这样默认文本解析可以直接使用。 - DeepSeek 图片 OCR 复用
DEEPSEEK_API_KEY;如需 Gemini 文本/图片识别或 Gemini TTS,再配置GEMINI_API_KEY。 - 如需 Umami 统计,同时配置
NEXT_PUBLIC_UMAMI_SRC和NEXT_PUBLIC_UMAMI_WEBSITE_ID。 - 重新部署项目。
项目提供 Docker Hub 多架构镜像,支持 linux/amd64 和 linux/arm64。容器默认监听 3002,下面示例会把宿主机 3002 映射到容器 3002。
使用仓库中的 Docker Compose 配置(在仓库根目录执行):
cp .env.production.example .env.production
# 编辑 .env.production,配置所需 API Key
docker compose -f docker-compose.hub.yml up -dWindows PowerShell 使用 Copy-Item .env.production.example .env.production 复制模板。后续更新镜像并重建容器:
docker compose -f docker-compose.hub.yml pull
docker compose -f docker-compose.hub.yml up -d也可以使用下面的 docker run 命令部署。
拉取镜像:
docker pull howenhowen/japanese-analyzer:latest启动容器:
docker run -d \
--name japanese-analyzer \
--restart unless-stopped \
-p 3002:3002 \
-e DEEPSEEK_API_KEY="your_deepseek_api_key" \
-e GEMINI_API_KEY="your_gemini_api_key" \
-e CODE="" \
howenhowen/japanese-analyzer:latest访问:
http://your-vps-ip:3002
如果只使用 DeepSeek 文本解析和图片 OCR,可以不填 GEMINI_API_KEY;如果不需要访问密码,可以保持 CODE=""。不需要自定义接口地址时,DEEPSEEK_API_URL 和 GEMINI_API_URL 也可以不用填,应用会使用默认地址。
如需启用 Umami,启动容器时额外加入:
-e NEXT_PUBLIC_UMAMI_SRC="https://cloud.umami.is/script.js" \
-e NEXT_PUBLIC_UMAMI_WEBSITE_ID="your_umami_website_id" \查看日志:
docker logs -f japanese-analyzer更新镜像:
docker pull howenhowen/japanese-analyzer:latest
docker rm -f japanese-analyzer
docker run -d \
--name japanese-analyzer \
--restart unless-stopped \
-p 3002:3002 \
-e DEEPSEEK_API_KEY="your_deepseek_api_key" \
-e GEMINI_API_KEY="your_gemini_api_key" \
-e CODE="" \
howenhowen/japanese-analyzer:latestnpm run dev # 本地开发
npm test # API、语言、解析和粘贴回归测试
npm run lint # 检查仓库代码
npm run build # 生产构建,发布前建议先跑
npm start # 启动生产服务,需要先完成构建
npx tsc --noEmit # TypeScript 类型检查- 复制的文章解析失败时,可重新粘贴以移除格式和链接地址。如果仍然失败,请在 Issue 中提供服务商、模型、界面语言及可复现的原文示例,不要附带 API Key。
- 语言选择分别保存在各个浏览器中,通过地球图标切换即可,无需开启浏览器翻译。
- 欢迎通过 Issue 反馈问题和功能建议,或提交 Pull Request。
- 感谢 LINUX DO 社区的支持与推广
本项目基于 MIT License 发布。




