Skip to content

Repository files navigation

英语语法结构标注练习网站

选中任意长度的文本,用快捷键(可自定义)标注主语、谓语、宾语等句子成分;提交后服务器自动与后台正确答案比对,逐条显示对错、列出漏标并给出正确率评分。支持局域网多终端(手机 / 平板 / 电脑)同时练习。

快速开始

npm install

# 仅本机访问
npm start

# 局域网模式:同一 Wi-Fi / 网段下所有设备均可访问
npm run lan

启动后终端会打印本机与局域网访问地址(默认端口 3000,可用 PORT=8080 npm run lan 修改)。

成分标记规则

成分 显示方式 默认快捷键
主语 下划线(蓝) 1
谓语(含系动词) 波浪线(红) 2
宾语 双下划线(绿) 3
表语 虚线(橙) 4
同位语 直线 + 波浪线(紫) 5
定语(含定语从句) ( ) 括号(青) 6
状语(含状语从句) { } 括号(玫红) 7
补语 [ ] 括号(橄榄绿) 8

快捷键可在练习页「修改快捷键」中改为任意字母 / 数字键,保存在浏览器本地。

使用流程

  1. 管理员打开 /admin.html,上传(或粘贴)符合 samples/sentence_analysis_template.json 格式的标注 JSON,自动生成一篇练习。正确答案只保存在服务器后台,不会下发给练习者。 已有练习可点「编辑答案」进入可视化编辑器/editor.html?id=…):正文按当前答案渲染各成分的线型与颜色,像做练习一样点触单词 / 拖选文字再点成分按钮即可增删改标注(「中心词/名词」等辅助角色显示为灰色点线,可删除、导出时保留)。完成后可导出 JSON(下载重建嵌套结构的标注文件)或覆盖保存(直接覆盖服务器上的答案,之后的提交按新答案批改)。

  2. 练习者在首页选择练习。正文按段落连续排版,两种选词方式任选:

    • 点触选词(推荐,对 iPad 等触屏友好):单击 / 点触单词即选中(可连点多个词),再点成分按钮或按快捷键完成标注;再次点触可取消选中。
    • 拖选:鼠标拖选任意文字后按快捷键或点成分按钮。

    同一个单词 / 词组可叠加标注多个成分;对同一范围重复标注同一成分即取消(开关式)。点按已标注的文字会弹出面板,可查看全部成分或逐条删除。

  3. 点击提交批改:标对的文字显示绿色底纹、标错的红色、漏标的黄色,点按可查看错误原因(成分错还是范围错);成绩卡下方可展开错误与漏标明细,同时给出综合得分、准确率和覆盖率。

JSON 格式

{
  "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 可能反复被破坏。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages