选中任意长度的文本,用快捷键(可自定义)标注主语、谓语、宾语等句子成分;提交后服务器自动与后台正确答案比对,逐条显示对错、列出漏标并给出正确率评分。支持局域网多终端(手机 / 平板 / 电脑)同时练习。
npm install
# 仅本机访问
npm start
# 局域网模式:同一 Wi-Fi / 网段下所有设备均可访问
npm run lan启动后终端会打印本机与局域网访问地址(默认端口 3000,可用 PORT=8080 npm run lan 修改)。
| 成分 | 显示方式 | 默认快捷键 |
|---|---|---|
| 主语 | 下划线(蓝) | 1 |
| 谓语(含系动词) | 波浪线(红) | 2 |
| 宾语 | 双下划线(绿) | 3 |
| 表语 | 虚线(橙) | 4 |
| 同位语 | 直线 + 波浪线(紫) | 5 |
| 定语(含定语从句) | ( ) 括号(青) |
6 |
| 状语(含状语从句) | { } 括号(玫红) |
7 |
| 补语 | [ ] 括号(橄榄绿) |
8 |
快捷键可在练习页「修改快捷键」中改为任意字母 / 数字键,保存在浏览器本地。
-
管理员打开
/admin.html,上传(或粘贴)符合samples/sentence_analysis_template.json格式的标注 JSON,自动生成一篇练习。正确答案只保存在服务器后台,不会下发给练习者。 已有练习可点「编辑答案」进入可视化编辑器(/editor.html?id=…):正文按当前答案渲染各成分的线型与颜色,像做练习一样点触单词 / 拖选文字再点成分按钮即可增删改标注(「中心词/名词」等辅助角色显示为灰色点线,可删除、导出时保留)。完成后可导出 JSON(下载重建嵌套结构的标注文件)或覆盖保存(直接覆盖服务器上的答案,之后的提交按新答案批改)。 -
练习者在首页选择练习。正文按段落连续排版,两种选词方式任选:
- 点触选词(推荐,对 iPad 等触屏友好):单击 / 点触单词即选中(可连点多个词),再点成分按钮或按快捷键完成标注;再次点触可取消选中。
- 拖选:鼠标拖选任意文字后按快捷键或点成分按钮。
同一个单词 / 词组可叠加标注多个成分;对同一范围重复标注同一成分即取消(开关式)。点按已标注的文字会弹出面板,可查看全部成分或逐条删除。
-
点击提交批改:标对的文字显示绿色底纹、标错的红色、漏标的黄色,点按可查看错误原因(成分错还是范围错);成绩卡下方可展开错误与漏标明细,同时给出综合得分、准确率和覆盖率。
{
"sentences": [
{
"sentence_id": 1,
"text": "The other day, I fell into a Wikipedia rabbit hole.",
"components": [
{ "text": "The other day", "role": "状语" },
{ "text": "I", "role": "主语" },
{ "text": "fell", "role": "谓语" },
{
"text": "into a Wikipedia rabbit hole",
"role": "状语",
"children": [
{ "text": "a Wikipedia rabbit hole", "role": "宾语" }
]
}
]
}
]
}role支持:主语、谓语、宾语、表语、同位语、定语、定语从句、状语、状语从句、补语(宾语/主语补足语)。- 成分可用
children无限嵌套(如状语内的宾语、宾语内的定语),嵌套成分同样参与判分。 - 「中心词/名词」等其他角色仅作参考,不参与打分。
- 批改时会自动忽略选区首尾的空格和尾部标点,用户多选一个逗号不会被判错。
默认上传接口不设口令。如需保护,启动时设置环境变量:
ADMIN_PASSWORD=your-secret npm run lan设置后管理页会出现口令输入框,上传 / 删除练习需要输入正确口令。
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/exercises |
练习列表 |
| GET | /api/exercises/:id |
练习原文(不含答案) |
| POST | /api/exercises/:id/submit |
提交标注,返回逐条对错、漏标、评分与答案 |
| POST | /api/admin/exercises |
上传 JSON 生成练习 |
| GET | /api/admin/exercises/:id |
读取完整练习(含答案),用于编辑 |
| PUT | /api/admin/exercises/:id |
修改练习标题 / 答案 JSON |
| DELETE | /api/admin/exercises/:id |
删除练习 |
npm test覆盖答案区间解析(含嵌套 children)、判分逻辑(范围对成分错 / 成分对范围错 / 标点归一化 / 漏标统计)与 JSON 校验。
启动时报 Cannot find module '.../node_modules/debug/src/index.js'(或其他包内文件缺失)
这是本地 node_modules 目录损坏导致的(安装被中断、目录从其他系统拷贝而来,或 macOS 上项目放在 ~/Documents / ~/Desktop 且开启了 iCloud「优化 Mac 储存空间」,同步时会把部分文件搬走)。删除后按锁文件重新安装即可:
rm -rf node_modules
npm ci # 严格按 package-lock.json 安装
npm run lan若使用 iCloud 同步的目录,建议把项目移到不参与同步的位置(如 ~/dev),否则 node_modules 可能反复被破坏。