diff --git a/.gitignore b/.gitignore
index 5ef6a52..952c3c4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,3 +39,14 @@ yarn-error.log*
# typescript
*.tsbuildinfo
next-env.d.ts
+
+# models
+*.pt
+*.pth
+*.safetensors
+*.onnx
+*.bin
+*.h5
+*.ckpt
+*.tflite
+*.pb
diff --git a/ai_assistant_features.md b/ai_assistant_features.md
new file mode 100644
index 0000000..440ce00
--- /dev/null
+++ b/ai_assistant_features.md
@@ -0,0 +1,55 @@
+# AI 智能助理系统功能点与架构梳理
+
+## 一、 核心功能点清单
+
+### 1. 权限驱动的 AI 技能系统 (AI Skills & Query)
+* **联系人与群组权限管控**:支持配置 AI 对特定微信联系人和微信群组的读取和回复权限,确保隐私安全。
+* **历史聊天检索 Skill**:AI 具备调用本地工具的能力,可按需查询和检索授权范围内的历史聊天内容,作为精准回复和数据分析的上下文。
+
+### 2. 增强型三方协同对话 (Tripartite Collaborative Chat)
+* **本地 Web 交互终端**:提供用户与 AI 专属对话的本地可视化 Web 界面。
+* **全局上下文静默监听**:AI 能够静默监听“我”与“微信联系人”的实时聊天记录,确保 AI 在被唤醒或介入时,已经掌握完整的对话背景。
+* **灵活的消息代发与审批工作流**:
+ * **模式 A(人审机发)**:我起草或修改合同/文案 -> 发给 AI 检查、润色 -> AI 直接将最终版发送给客户。
+ * **模式 B(机审人发)**:AI 自动起草或修改合同/文案 -> 发给我 -> 我进行人工二次修改和确认 -> 由我发送给客户。
+
+### 3. AI 行为审计与溯源机制 (Audit & Traceability)
+* **全量行为事件日志**:详细记录 AI 的每一次工具调用(Skill 执行)、系统决策及状态流转。
+* **外部交互记录存档**:独立且完整地记录 AI 与所有外部微信联系人的对话明细。
+* **安全评估与熔断**:基于日志进行溯源,用于评估 AI 行为是否符合预期;支持在出现偏差时的人工介入和及时补救(如消息撤回、服务阻断等)。
+
+### 4. 记忆库人工维护 (Memory Base Management)
+* **Hermes Agent 集成**:采用 Hermes 架构理念来管理和沉淀 AI 智能体的状态与经验。
+* **人工介入知识库**:提供记忆库管理机制,允许人工查阅、修正、添加或删除 AI 的长短期记忆,确保 AI 的业务知识和认知能够准确演进。
+
+---
+
+## 二、 本地与远端架构切分方案评估与建议
+
+您目前的方案非常合理,既保证了本地数据处理的执行效率和操作隐私,又充分利用了云端大模型的算力、中心化管控和数据汇总能力。以下是针对该方案的详细拆解与优化建议:
+
+### 1. 本地服务 (Local) - 侧重于“感知、执行、交互”
+* **本地 Web 交互界面**:保障您日常操作的响应速度和最高的数据隐私。
+* **Skill 与工具执行引擎**:由于工具通常需要操作本地文件、调用本地微信客户端 RPA 接口或访问局域网资源,将其配置和执行放在本地是最佳且必须的实践。
+* **微信协议/客户端监听模块**:负责实时抓取微信聊天记录并发送消息,此模块强依赖本地环境。
+* **上下文聚合与组装**:在本地将抓取到的微信聊天记录、本地执行的 Skill 结果打包组装成 Prompt,再向上游远端发起请求。
+
+### 2. 远端服务 (Remote) - 侧重于“大脑、管控、资产”
+* **大模型 API 路由网关**:统一对接外部 LLM,隐藏真实的 API Key,便于统一计费和限流。
+* **AI 数字员工身份管理 (ID System)**:
+ * 统一定义和分配不同数字员工的 AI ID。
+ * 集中配置、版本化管理并下发不同 ID 对应的 **系统提示词 (System Prompt)**。
+* **中心化记忆库 (Hermes Agent Memory)**:
+ * **优势**:放在远端可以实现跨设备、跨终端的同步。未来在其他设备登录,AI 依然拥有同样的上下文和记忆。
+ * 提供统一的后台界面,供人工集中维护和调优记忆。
+* **行为审计中心 (Log Server)**:
+ * 接收来自本地异步上报的日志数据。
+ * 通过 AI ID 进行区分,提供数据可视化面板,方便集中进行溯源、统计、安全审查和模型能力评估。
+
+### 3. 架构切分建议与注意事项
+1. **私有化安全与本地独享模式 (Privacy & Local-exclusive AI)**:由于远端平台部署在局域网内,仅处理工作内容,无需进行额外的数据脱敏。若用户需要处理极度涉密数据或纯个人隐私数据,系统支持配置“本地独享 AI”模式:该模式下,AI 仅在本地运行和可见,不向远端平台上传任何聊天记录或行为日志,实现彻底的本地物理隔离。
+2. **弱网容灾机制**:本地应有简易的日志队列缓存。当局域网网络波动时,日志可先落盘本地,网络恢复后自动补传,保证审计数据的完整性。
+3. **指令与配置下发通道**:如果远端平台修改了 System Prompt 或人工更新了记忆库,需要有一个机制(如 WebSocket 长连接或本地定时轮询)让本地应用能够实时感知并更新,避免配置滞后。
+
+### 总结
+您设计的这套架构是典型的 **“云端大脑 + 边缘四肢(端云结合)”** 架构。远端统筹认知、记忆与合规管控,本地负责敏捷感知(监听微信)、行动(工具调用)和即时交互。整体方案逻辑清晰、健壮,非常有利于后续的持续迭代与多数字员工扩展。
diff --git a/archive/test-ai.js b/archive/test-ai.js
new file mode 100644
index 0000000..4f87180
--- /dev/null
+++ b/archive/test-ai.js
@@ -0,0 +1,2 @@
+const { streamText } = require('ai');
+console.log(Object.keys(streamText({})));
diff --git a/archive/test-ai.mjs b/archive/test-ai.mjs
new file mode 100644
index 0000000..911b518
--- /dev/null
+++ b/archive/test-ai.mjs
@@ -0,0 +1,9 @@
+import { streamText } from 'ai';
+const mockModel = {
+ provider: 'mock',
+ specificationVersion: 'v1',
+ defaultObjectGenerationMode: 'json',
+ doStream: async () => ({ stream: new ReadableStream(), rawCall: { rawPrompt: '', rawSettings: {} } })
+};
+const result = streamText({ model: mockModel, messages: [] });
+console.log(Object.keys(result).filter(k => k.includes('to')));
diff --git a/docs/DBUS_API.md b/docs/DBUS_API.md
new file mode 100644
index 0000000..bcbc416
--- /dev/null
+++ b/docs/DBUS_API.md
@@ -0,0 +1,473 @@
+# 线切割控制系统 DBus 接口说明文档
+
+## 基本信息
+
+| 项目 | 值 |
+|------|-----|
+| **服务名** | `com.wirecut.service` |
+| **对象路径** | `/com/wirecut/control` |
+| **接口名** | `com.wirecut.IControl` |
+| **总线类型** | System Bus(系统总线) |
+| **设计用途** | 供"小龙虾"等外部程序对接线切割控制系统 |
+
+---
+
+## 目录
+
+1. [运动控制接口](#1-运动控制接口)
+2. [加工参数接口](#2-加工参数接口)
+3. [状态查询接口](#3-状态查询接口)
+4. [NC 文件操作接口](#4-nc-文件操作接口)
+5. [工件坐标接口](#5-工件坐标接口)
+6. [放电设置接口](#6-放电设置接口)
+7. [信号(推送通知)](#7-信号推送通知)
+8. [状态码说明](#8-状态码说明)
+9. [命令行调用示例](#9-命令行调用示例)
+10. [注意事项](#10-注意事项)
+
+---
+
+## 1. 运动控制接口
+
+### startRun() - 启动加工
+- **描述**: 启动加工程序,等价于点击界面"运行"按钮
+- **参数**: 无
+- **返回**: 无
+
+```powershell
+# 启动加工
+qdbus com.wirecut.service /com/wirecut/control startRun
+```
+
+### stopRun() - 停止加工
+- **描述**: 停止当前加工,等价于点击"停止"按钮
+- **参数**: 无
+- **返回**: 无
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control stopRun
+```
+
+### pauseRun() - 暂停加工
+- **描述**: 暂停加工(变频),等价于点击"变频暂停"
+- **参数**: 无
+- **返回**: 无
+
+```bash
+qdbus mock_qdbus.py com.wirecut.service /com/wirecut/control pauseRun
+```
+
+### homeAll() - 全轴回零
+- **描述**: 所有轴执行回零操作
+- **参数**: 无
+- **返回**: 无
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control homeAll
+```
+
+### startKongZou() - 开始空走
+- **描述**: 启动空走模式(不放电测试)
+- **参数**: 无
+- **返回**: 无
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control startKongZou
+```
+
+### stopKongZou() - 停止空走
+- **描述**: 停止空走模式
+- **参数**: 无
+- **返回**: 无
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control stopKongZou
+```
+
+---
+
+## 2. 加工参数接口
+
+### setSpeed(speed: int) -> int - 设置加工速度
+- **描述**: 设置加工速度
+- **参数**:
+ - `speed`: 速度值,单位 mm/min,范围 1-9999
+- **返回**: 实际设置的速度值
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control setSpeed 80
+```
+
+### getSpeed() -> int - 获取设定速度
+- **描述**: 获取当前设定的加工速度
+- **参数**: 无
+- **返回**: 设定速度值 (mm/min)
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control getSpeed
+```
+
+### setVoltage(vol: int) - 设置放电电压
+- **描述**: 设置放电电压值
+- **参数**:
+ - `vol`: 电压值
+- **返回**: 无
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control setVoltage 90
+```
+
+### setCurrent(cur: int) - 设置放电电流
+- **描述**: 设置放电电流值
+- **参数**:
+ - `cur`: 电流值
+- **返回**: 无
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control setCurrent 5
+```
+
+---
+
+## 3. 状态查询接口
+
+### getStatus() -> QVariantMap - 获取完整状态
+- **描述**: 获取系统完整状态信息(字典格式)
+- **参数**: 无
+- **返回字段**:
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| `running` | int | 运行状态:0=停止 1=运行中 2=暂停 |
+| `is_homed` | int | 是否已回零:0=否 1=是 |
+| `is_homing` | int | 是否正在回零:0=否 1=是 |
+| `pos_x` | double | X轴位置 (mm) |
+| `pos_y` | double | Y轴位置 (mm) |
+| `pos_z` | double | Z轴位置 (mm) |
+| `pos_u` | double | U轴位置 (mm) |
+| `pos_v` | double | V轴位置 (mm) |
+| `vol` | int | 当前电压值 |
+| `cur` | int | 当前电流值 |
+| `daohao` | int | 导号(加工段号) |
+| `speed` | int | 设定速度 (mm/min) |
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control getStatus
+```
+
+### getAxisPos() -> QString - 获取各轴位置
+- **描述**: 轻量级接口,获取各轴当前位置
+- **参数**: 无
+- **返回**: `"x,y,z,u,v"` 格式字符串,保留3位小数,单位 mm
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control getAxisPos
+# 返回示例: "10.500,20.321,0.000,0.123,0.000"
+```
+
+### isRunning() -> bool - 是否正在加工
+- **描述**: 查询是否处于加工状态
+- **参数**: 无
+- **返回**: true=运行中 false=已停止
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control isRunning
+```
+
+### isHomed() -> bool - 是否已回零
+- **描述**: 查询是否已完成回零
+- **参数**: 无
+- **返回**: true=已回零 false=未回零
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control isHomed
+```
+
+---
+
+## 4. NC 文件操作接口
+
+### loadNC(path: QString) -> bool - 加载 NC 文件
+- **描述**: 加载 NC 程序文件
+- **参数**:
+ - `path`: NC 文件的**绝对路径**
+- **返回**: true=成功 false=失败
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control loadNC "/home/user/test.ngc"
+```
+
+### getCurrentNC() -> QString - 获取当前 NC 文件
+- **描述**: 获取当前已加载的 NC 文件路径
+- **参数**: 无
+- **返回**: NC 文件路径
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control getCurrentNC
+```
+
+---
+
+## 5. 工件坐标接口
+
+### clearAxisOffset(axis: int) - 清除单轴工件坐标
+- **描述**: 清除指定轴的工件坐标偏移
+- **参数**:
+ - `axis`: 轴编号:0=X 1=Y 2=Z 3=U 4=V 5=C
+- **返回**: 无
+
+```bash
+# 清除 X 轴工件坐标
+qdbus com.wirecut.service /com/wirecut/control clearAxisOffset 0
+```
+
+### clearAllAxisOffset() - 清除所有轴工件坐标
+- **描述**: 清除全部6个轴的工件坐标偏移
+- **参数**: 无
+- **返回**: 无
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control clearAllAxisOffset
+```
+
+---
+
+## 6. 放电设置接口
+
+### ShowDischargeSetting() - 打开放电设置界面
+- **描述**: 弹出放电设置窗口
+- **参数**: 无
+- **返回**: 无
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control ShowDischargeSetting
+```
+
+### HideDischargeSetting() - 关闭放电设置界面
+- **描述**: 隐藏放电设置窗口
+- **参数**: 无
+- **返回**: 无
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control HideDischargeSetting
+```
+
+### SetWorkpieceId(workpieceId: int) - 设置当前工件号
+- **描述**: 切换到指定工件编号
+- **参数**:
+ - `workpieceId`: 工件编号,范围 0-8
+- **返回**: 无
+
+```bash
+# 切换到工件3
+qdbus com.wirecut.service /com/wirecut/control SetWorkpieceId 3
+```
+
+### SetDischargePara(workpieceId, knifeId, paramType, value) - 设置放电参数
+- **描述**: 设置指定工件、指定刀号的放电参数
+- **参数**:
+ - `workpieceId`: 工件编号 (0-8)
+ - `knifeId`: 刀号 (1-11)
+ - `paramType`: 参数类型字符串:
+ - `"voltage"` / `"放电码"` - 放电码
+ - `"current"` / `"跟踪值"` - 跟踪值
+ - `"servo"` / `"速度"` - 速度上限
+ - `value`: 参数值
+- **返回**: 无
+
+```bash
+# 设置工件0,刀号1,放电码为80
+qdbus com.wirecut.service /com/wirecut/control SetDischargePara 0 1 voltage 80
+```
+
+### GetDischargePara(workpieceId, knifeId, paramType) -> int - 获取放电参数
+- **描述**: 获取指定工件、指定刀号的放电参数值
+- **参数**: 同 SetDischargePara
+- **返回**: 参数值
+
+```bash
+# 获取工件0,刀号1的放电码
+qdbus com.wirecut.service /com/wirecut/control GetDischargePara 0 1 voltage
+```
+
+### CopyToAllWorkpieces() - 复制到所有工件
+- **描述**: 将当前工件的放电参数复制到所有工件
+- **参数**: 无
+- **返回**: 无
+
+```bash
+qdbus com.wirecut.service /com/wirecut/control CopyToAllWorkpieces
+```
+
+---
+
+## 7. 信号(推送通知)
+
+DBus 服务会主动推送以下信号,外部程序可以监听:
+
+### runStateChanged(state: int) - 运行状态变化
+- **触发时机**: 运行状态改变时
+- **参数**:
+ - `state`: 0=停止 / 1=运行 / 2=暂停
+
+### alarmMessage(type: int, msg: QString) - 报警/提示
+- **触发时机**: 系统产生报警或提示时
+- **参数**:
+ - `type`: 0=提示 / 1=警告 / 2=错误
+ - `msg`: 消息内容
+
+### axisPosUpdated(x, y, z, u, v: double) - 轴位置刷新
+- **触发时机**: 每 500ms 周期推送一次
+- **参数**: 各轴当前位置 (mm)
+
+### machiningFinished() - 加工完成
+- **触发时机**: 加工程序执行完成时
+- **参数**: 无
+
+---
+
+## 8. 状态码说明
+
+### 运行状态码 (running 字段)
+
+| 值 | 状态 | 说明 |
+|----|------|------|
+| 0 | 停止 | 未运行或已停止 |
+| 1 | 运行中 | 正在加工 |
+| 2 | 暂停 | 已暂停(变频) |
+
+### 轴编号
+
+| 值 | 轴 | 说明 |
+|----|-----|------|
+| 0 | X | X轴 |
+| 1 | Y | Y轴 |
+| 2 | Z | Z轴 |
+| 3 | U | U轴 |
+| 4 | V | V轴 |
+| 5 | C | C轴 |
+
+---
+
+## 9. 命令行调用示例
+
+### 完整加工流程
+
+```bash
+# 1. 查看当前状态
+qdbus com.wirecut.service /com/wirecut/control getStatus
+
+# 2. 加载 NC 文件(必须绝对路径)
+qdbus com.wirecut.service /com/wirecut/control loadNC "/home/pi/sample.ngc"
+
+# 3. 设置加工速度
+qdbus com.wirecut.service /com/wirecut/control setSpeed 80
+
+# 4. 开始加工
+qdbus com.wirecut.service /com/wirecut/control startRun
+
+# 5. 实时查看轴位置
+qdbus com.wirecut.service /com/wirecut/control getAxisPos
+
+# 6. 暂停加工
+qdbus com.wirecut.service /com/wirecut/control pauseRun
+
+# 7. 停止加工
+qdbus com.wirecut.service /com/wirecut/control stopRun
+```
+
+### 空走测试流程
+
+```bash
+# 1. 回零
+qdbus com.wirecut.service /com/wirecut/control homeAll
+
+# 2. 开始空走(不放电)
+qdbus com.wirecut.service /com/wirecut/control startKongZou
+
+# 3. 停止空走
+qdbus com.wirecut.service /com/wirecut/control stopKongZou
+```
+
+### Python 调用示例(使用 dbus-python)
+
+```python
+import dbus
+
+# 连接系统总线
+bus = dbus.SystemBus()
+
+# 获取服务对象
+obj = bus.get_object('com.wirecut.service', '/com/wirecut/control')
+iface = dbus.Interface(obj, 'com.wirecut.IControl')
+
+# 调用方法
+status = iface.getStatus()
+print("运行状态:", status['running'])
+print("X轴位置:", status['pos_x'])
+
+# 加载 NC 文件
+iface.loadNC("/home/pi/test.ngc")
+
+# 启动加工
+iface.startRun()
+```
+
+---
+
+## 10. 注意事项
+
+### ⚠️ 重要提醒
+
+1. **CNC 软件必须运行**
+ - 所有 DBus 接口只有在 CNC 主程序启动后才能使用
+ - 软件未启动时调用会返回 DBus 错误
+
+2. **NC 文件路径必须为绝对路径**
+ - `loadNC()` 的 path 参数必须使用完整绝对路径
+ - 相对路径会导致加载失败
+
+3. **速度设置范围**
+ - 速度值范围:1-9999 mm/min
+ - 超出范围会被截断或忽略
+
+4. **System Bus 权限**
+ - 服务运行在 System Bus 上,可能需要 root 权限
+ - 普通用户调用可能需要配置 DBus 权限规则
+
+5. **线程安全**
+ - 所有接口调用都是异步队列执行(QueuedConnection)
+ - 调用后不会阻塞,实际执行由主界面事件循环处理
+
+6. **共享内存依赖**
+ - 部分参数(电压、电流、位置)依赖共享内存
+ - 共享内存未就绪时返回 0 或默认值
+
+---
+
+## 附录:DBus 权限配置
+
+如果普通用户无法调用,需要在 `/etc/dbus-1/system.d/` 下添加权限配置文件 `com.wirecut.conf`:
+
+```xml
+<!DOCTYPE busconfig PUBLIC
+ "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+ <policy user="pi">
+ <allow own="com.wirecut.service"/>
+ <allow send_destination="com.wirecut.service"/>
+ <allow receive_sender="com.wirecut.service"/>
+ </policy>
+ <policy context="default">
+ <allow send_destination="com.wirecut.service"/>
+ <allow receive_sender="com.wirecut.service"/>
+ </policy>
+</busconfig>
+```
+
+---
+
+**文档版本**: v1.0
+**生成日期**: 2026-05-20
+**对应源码**: `/usr/share/runf/wirecutdbus.h` / `wirecutdbus.cpp`
diff --git a/docs/architecture_overview.html b/docs/architecture_overview.html
new file mode 100644
index 0000000..00b278a
--- /dev/null
+++ b/docs/architecture_overview.html
@@ -0,0 +1,642 @@
+
+
+
+
+
+ 工业 AI 交互画布:流程总览
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/bert_integration_analysis.md b/docs/bert_integration_analysis.md
new file mode 100644
index 0000000..73e53fa
--- /dev/null
+++ b/docs/bert_integration_analysis.md
@@ -0,0 +1,371 @@
+# intelligent_cabin BERT 接入 · 冲突分析与整合方案
+
+> 作者:AI 分析
+> 日期:2026-05-26
+> 状态:待你确认
+
+---
+
+## 背景速览
+
+| 侧 | 项目 | 技术栈 | 角色 |
+|---|---|---|---|
+| **Canvas(前端/编排侧)** | ai-canvas / Next.js | TypeScript + React | 画布渲染、Artifact 管理、LLM 编排、工业工具调用(DBus/PLC)|
+| **BERT 服务侧** | intelligent_cabin | Python / FastAPI | 本地 NLU:intent + slot,语音控制场景 |
+
+这两个项目目前是独立的,尚未对接。
+
+---
+
+## 一、冲突点(需要明确决策的地方)
+
+### 冲突 1:Domain 语义完全不匹配 ⚠️ 重要
+
+**问题**:`intelligent_cabin/config/domain.yml` 里的 intent 全部来自车机场景(导航、空调、音乐、车窗、车灯……),与 `DBUS_API.md` 描述的线切割工控场景(电压、电流、速度、NC 加工、空走、回零)**毫无重叠**。
+
+**后果**:如果直接把 BERT 服务接进来,意图识别的类别集合完全覆盖不了工控指令,识别结果几乎全是 unknown/reject。
+
+**需确认**:
+- [ ] 你们会用智能车机的这套预训练模型做迁移学习,还是重新训练工控专属的 BERT 模型?
+- [ ] 还是说这个 BERT 服务只是作为基础推理框架,`domain.yml` 需要被替换成工控版 domain?
+
+---
+
+### 冲突 2:置信度阈值体系 vs. Canvas 路由体系
+
+**Canvas 流程**(参考 `architecture_overview.html`)的技术视图里:
+```
+输入 → BERT NLU → confidence 判断 → [高置信+设备控制域] / [知识域/低置信] / [smalltalk]
+```
+
+**intelligent_cabin 的路由体系**(`router.py`):
+```
+输入 → Classifier → FusionGrader →
+ decision = execute / clarify / route_to_cloud / reject
+ 阈值:execute_score=0.55, execute_margin=0.18, route_to_cloud=0.75
+```
+
+两套路由各有自己的 confidence 分级,**如果串联,会出现双重过滤**:
+- BERT 服务输出的 `score` 未必能直接映射到 Canvas 的 `confidence ≥ 阈值` 判断
+- Canvas 目前只依赖 BERT 输出的 `domain/intent/slot/confidence`,但 BERT 服务输出的是 `intent_id + score + decision`
+
+**需确认**:
+- [ ] Canvas 侧是否需要直接消费 `decision` 字段(execute/clarify/route_to_cloud/reject),还是只取 `intent_id + score`,Canvas 自己做二次路由?
+
+---
+
+### 冲突 3:`textAliases`(大流程 B)vs. BERT 意图识别的竞争
+
+**Canvas 大流程 B(调机流程中)的路由逻辑**:
+```
+输入 → 优先匹配 textAliases(如"完成"/"下一步"/"确认")
+ → 未命中 → BERT NLU 重新识别
+```
+
+**intelligent_cabin** 里的 `DialogActEngine`(`dialog_act.py`)也在做相似的事情:
+```python
+affirm: ["确认", "好的", "继续", "可以", "确定"]
+cancel: ["取消", "算了", "不用了", "停止"]
+```
+
+**冲突**:
+- `textAliases` 是每个 Artifact Step 私有的,属于 Canvas 状态机层面的规则匹配
+- `DialogActEngine` 是系统级对话行为分类,优先级/触发顺序未对齐
+- 如果两套都跑,"确认"这个词可能被 `DialogActEngine` 吃掉后不再传给 Canvas 的步骤推进逻辑
+
+**整合建议**:
+- 大流程 B 中,textAliases 匹配应在 BERT 服务之前,Canvas 侧处理,不交给 BERT 服务
+- 把 `dialog_acts.yml` 的 `affirm/deny/cancel/modify` 从 BERT 服务中剥离,改为 Canvas 路由层的前置规则
+- 或者让 BERT 服务的 dialog_act 结果作为辅助 metadata 透传,Canvas 侧自行决策
+
+---
+
+### 冲突 4:slot 语义不兼容
+
+**BERT 服务的 slot 体系**(按车机场景设计):
+- `temperature`:空调温度(16-30°C)
+- `destination`:导航目的地
+- `order_id`:订单号
+- `song`:歌曲名
+
+**线切割工控的 slot 需求**(从 `DBUS_API.md` 推导):
+- `speed`:加工速度(mm/min,1-9999)
+- `voltage`:放电码/电压
+- `current`:跟踪值/电流
+- `workpiece_id`:工件编号(0-8)
+- `knife_id`:刀号(1-11)
+- `param_type`:参数类型(voltage/current/servo)
+- `nc_path`:NC 文件绝对路径
+- `axis`:轴编号(0-5,X/Y/Z/U/V/C)
+
+两套 slot 定义**完全不同**,需要重写 `domain.yml` 和 `rewrite_engine.py` 里的工控版本。
+
+---
+
+### 冲突 5:rewrite_engine 的上下文改写逻辑是车机特化的
+
+`rewrite_engine.py` 里写死了:
+```python
+_AC_CONTEXT_INTENTS = {"cabin_set_ac", "cabin_ac_on", "cabin_ac_off", ...}
+_AC_DEFAULT_TEMPERATURE = 24
+_AC_STEP = 2
+_AC_MIN_TEMPERATURE = 16
+_AC_MAX_TEMPERATURE = 30
+```
+
+这些都是车机空调的业务逻辑,工控场景需要换成类似:
+```python
+_PARAM_CONTEXT_INTENTS = {"wirecut_set_speed", "wirecut_set_voltage", "wirecut_set_current"}
+_SPEED_STEP = 5 # mm/min
+_VOLTAGE_STEP = 5 # 放电码
+```
+
+**但这恰恰也是最有价值可以复用的能力**:多轮相对调节("再快一点"→ 改写为 "速度设为 85mm/min")在工控场景同样刚需。
+
+---
+
+## 二、可以直接整合的能力(不需要改动或改动很小)
+
+### ✅ 整合点 1:FastAPI 服务直接作为 NLU 微服务接入
+
+Canvas(Next.js 侧)可以通过 HTTP 调用 `POST /api/v1/agent/chat` 或 `POST /api/v1/agent/fill-slots`,作为 Canvas 的 "感知语义层"。
+
+接入位置:Canvas 的"BERT NLU 意图识别"节点(技术流程视图第 2 层)
+
+```
+Canvas 输入 → HTTP POST → intelligent_cabin :8000/api/v1/agent/chat
+ ← {intent_id, score, slots, decision}
+Canvas 路由层根据 intent_id + score 继续分发
+```
+
+### ✅ 整合点 2:分级融合决策逻辑(router.py)可以直接复用
+
+`MultiStageIntentMatcher` 里的 `execute / clarify / route_to_cloud / reject` 四态决策逻辑,与 Canvas 流程中"高置信执行 / 知识域兜底 / smalltalk" 的三路分发思路高度一致,可以直接用。
+
+Canvas 只需要消费 BERT 服务返回的 `decision` 字段,然后:
+- `execute` → Canvas 走工具调用路径(DBus)
+- `clarify` → Canvas 展示澄清确认卡
+- `route_to_cloud` → Canvas 走 LLM 兜底路径
+- `reject` → Canvas 走 smalltalk / fallback
+
+### ✅ 整合点 3:会话状态管理(session_store.py)
+
+`SessionState` 里的 `context_memory` 和 `slots` 持久化机制,可以支持工控场景的多轮短句恢复(比如 "再快一点" → 记住上次速度值)。
+
+### ✅ 整合点 4:多命令拆分(planner.py)
+
+现有的 `sequence workflow` 和 `conditional workflow` 对工控多命令("先回零,再开始加工")直接可用。
+
+### ✅ 整合点 5:高风险确认机制(dialog_rules.py)
+
+`requires_confirmation` + `confirmation_required_risk_levels` 这套机制,完全可以映射到 Canvas 流程中"操控确认卡"的场景(Canvas 大流程 A 的场景 1),直接支持危险操作二次确认。
+
+---
+
+## 三、需要新建或重写的工控专属配置
+
+### 3.1 新建 `config/domain_wirecut.yml`
+
+需要把 DBUS_API.md 里的每个接口映射成 intent:
+
+| intent_id | 对应 DBus 方法 | 示例语句 | 需要 slot |
+|---|---|---|---|
+| `wirecut_start_run` | `startRun()` | "开始加工" / "启动" | 无 |
+| `wirecut_stop_run` | `stopRun()` | "停止加工" / "停机" | 无 |
+| `wirecut_pause_run` | `pauseRun()` | "暂停" / "变频暂停" | 无 |
+| `wirecut_home_all` | `homeAll()` | "全轴回零" / "回零" | 无 |
+| `wirecut_start_kongzou` | `startKongZou()` | "开始空走" | 无 |
+| `wirecut_stop_kongzou` | `stopKongZou()` | "停止空走" | 无 |
+| `wirecut_set_speed` | `setSpeed(speed)` | "速度调到80" / "加快一点" | `speed:int` |
+| `wirecut_set_voltage` | `setVoltage(vol)` | "电压设为90" | `voltage:int` |
+| `wirecut_set_current` | `setCurrent(cur)` | "电流设为5" | `current:int` |
+| `wirecut_get_status` | `getStatus()` | "查一下状态" / "当前状态" | 无 |
+| `wirecut_load_nc` | `loadNC(path)` | "加载NC文件" | `nc_path:str` |
+| `wirecut_set_discharge` | `SetDischargePara(...)` | "设置工件0刀1放电码80" | `workpiece_id, knife_id, param_type, value` |
+
+### 3.2 重写 `rewrite_engine.py` 里的工控上下文改写规则
+
+```python
+# 工控版示例
+_SPEED_CONTEXT_INTENTS = {"wirecut_set_speed"}
+_SPEED_STEP = 5 # mm/min 每步调节
+_SPEED_MIN = 1
+_SPEED_MAX = 9999
+
+_VOLTAGE_CONTEXT_INTENTS = {"wirecut_set_voltage"}
+_VOLTAGE_STEP = 5
+
+# 改写规则
+"再快一点" → "速度设为 {last_speed + 5} mm/min"
+"再慢一点" → "速度设为 {last_speed - 5} mm/min"
+"电压再高一点" → "电压设为 {last_voltage + 5}"
+```
+
+### 3.3 更新 `dialog_acts.yml` 适配工控确认场景
+
+当前 `dialog_acts.yml` 的 `affirm/deny/cancel` 词表可以保留,但需要补充工控场景的特化语句:
+
+```yaml
+# 工控场景补充
+affirm:
+ + "执行" / "开始" / "运行" / "启动"
+cancel:
+ + "停机" / "急停" / "中止"
+inform:
+ + 纯数字(速度值/电压值/电流值的slot填写)
+```
+
+---
+
+## 四、关于 dialog_act 和 rewrite_engine 能否通过配置文件驱动
+
+**直接回答:当前已经部分支持,但工控场景需要扩展。**
+
+### 4.1 dialog_act 配置化现状
+
+`dialog_act.py` 里的 `DialogActEngine` 是数据驱动的:
+```python
+@dataclass
+class DialogActEngine:
+ patterns: dict[str, tuple[str, ...]] = field(default_factory=...)
+```
+
+`config_loader.py` 里已经实现了从 `dialog_acts.yml` 加载:
+```python
+def _load_dialog_act_engine(self) -> DialogActEngine:
+ ...
+ return DialogActEngine(patterns={item.act_id: tuple(item.phrases) for item in parsed.acts})
+```
+
+**✅ 结论**:`dialog_acts.yml` 已经是配置文件,直接修改 `config/dialog_acts.yml` 就能修改 act 词表,**无需改代码**。
+
+**但是有个缺口**:当前 `dialog_acts.yml` 只支持 `字符串包含` 匹配(`phrase in normalized`),没有支持正则或数值范围匹配。工控场景里 "85" 这样的纯数字(作为速度 slot 的 `inform`)目前是靠 Python 代码里的 `if re.search(r"\d", normalized): return "inform"` 处理的,这个逻辑是硬编码在 `dialog_act.py` 里的,暂时没有配置化。
+
+**建议优化**(详见第五节)。
+
+### 4.2 rewrite_engine 配置化现状
+
+`rewrite_engine.py` 里的上下文改写逻辑**全部硬编码**,没有配置文件支持:
+
+```python
+_AC_CONTEXT_INTENTS = {"cabin_set_ac", ...} # 硬编码
+_AC_DEFAULT_TEMPERATURE = 24 # 硬编码
+_AC_STEP = 2 # 硬编码
+```
+
+**❌ 问题**:不同设备(线切割 / 激光切割 / 注塑机 / 其他)的参数名、步长、范围都不同,每台设备都要改代码是不合理的。
+
+**建议优化**(详见第五节)。
+
+---
+
+## 五、建议优化:将 rewrite_engine 和 dialog_act 配置化
+
+这是你关心的核心问题,以下是具体方案。
+
+### 5.1 新增 `config/context_rewrite.yml`
+
+```yaml
+# context_rewrite.yml
+param_contexts:
+ - intent_ids: ["wirecut_set_speed"]
+ slot_name: "speed"
+ unit: "mm/min"
+ step: 5
+ min_value: 1
+ max_value: 9999
+ default_value: 80
+ up_phrases: ["再快一点", "加快", "速度调高", "快一点"]
+ down_phrases: ["再慢一点", "减慢", "速度调低", "慢一点"]
+ rewrite_template: "速度设为 {value} mm/min"
+
+ - intent_ids: ["wirecut_set_voltage"]
+ slot_name: "voltage"
+ unit: ""
+ step: 5
+ min_value: 0
+ max_value: 200
+ default_value: 90
+ up_phrases: ["电压高一点", "电压调高"]
+ down_phrases: ["电压低一点", "电压调低"]
+ rewrite_template: "电压设为 {value}"
+
+ - intent_ids: ["wirecut_set_current"]
+ slot_name: "current"
+ unit: ""
+ step: 1
+ min_value: 0
+ max_value: 30
+ default_value: 5
+ up_phrases: ["电流大一点", "跟踪值高一点"]
+ down_phrases: ["电流小一点", "跟踪值低一点"]
+ rewrite_template: "电流设为 {value}"
+```
+
+然后修改 `rewrite_engine.py`,从 `context_rewrite.yml` 驱动逻辑,而不是硬编码。
+
+### 5.2 扩展 `config/dialog_acts.yml` 支持 inform 的数值捕获
+
+```yaml
+# dialog_acts.yml 新增字段
+acts:
+ - act_id: inform
+ phrases: []
+ # 新增:数值模式检测
+ numeric_patterns: ["\\d+"] # 包含数字就认为是 inform
+```
+
+并在 `dialog_act.py` 里支持 `numeric_patterns` 字段,这样 "85" / "22度" 是否算 inform 就可以通过配置控制。
+
+### 5.3 `Settings`(config.py)里增加工控设备配置项
+
+`app/core/config.py` 里的 `Settings` 类目前通过环境变量驱动,建议增加工控配置路径:
+
+```python
+# 新增到 Settings 类
+context_rewrite_config_path: str = "config/context_rewrite.yml"
+device_domain_config_path: str = "config/domain_wirecut.yml" # 可按设备切换
+```
+
+这样不同设备(线切割、激光机)只需要切换 `.env` 文件里的 `AGENT_DEVICE_DOMAIN_CONFIG_PATH` 就能换一套 domain + rewrite 配置,**不改代码**。
+
+---
+
+## 六、整合架构建议(整体链路)
+
+```
+语音输入
+ ↓ ASR(前端 / 设备侧)
+文本输入
+ ↓
+Canvas 路由层(Next.js / TypeScript)
+ ├── [大流程 B 激活] textAliases 匹配 → 直接推进 Artifact 步骤(不过 BERT)
+ └── [其他] HTTP → intelligent_cabin :8000
+ ↓
+ context rewrite(工控版配置化)
+ ↓
+ BERT NLU(工控 domain)
+ ↓
+ fusion decision
+ ├── execute → Canvas 走 DBus 工具调用
+ ├── clarify → Canvas 渲染 Artifact 确认卡
+ ├── route_to_cloud → Canvas 走 LLM 兜底 + 知识库
+ └── reject → Canvas smalltalk / fallback
+```
+
+---
+
+## 七、待你确认的清单
+
+| # | 问题 | 选项 |
+|---|---|---|
+| 1 | BERT 模型是否会重训成工控版,还是继续用车机模型迁移? | A. 重训工控 BERT B. 车机→工控迁移 C. 暂时用 mock/keyword |
+| 2 | Canvas 是消费 BERT 的 `decision` 字段,还是只取 `intent_id+score` 自己路由? | A. 消费 decision B. 自路由 |
+| 3 | 大流程 B 的 textAliases 匹配,确认在 Canvas 侧做,不经过 BERT 服务? | A. 是 B. 也经过 BERT 但 BERT 优先级低 |
+| 4 | rewrite_engine 配置化的优先级?现在要做还是等工控 domain 确定后一起做? | A. 现在就做 B. 等 domain 定了再做 |
+| 5 | dialog_acts.yml 的 `inform` 数值识别是否需要配置化? | A. 配置化 B. 保持硬编码即可 |
+| 6 | 不同设备部署时,是一个 BERT 服务实例 + 不同 `.env` 配置,还是多个实例? | A. 单实例多配置 B. 多实例 |
+
+---
+
+*本文档由 Antigravity 生成,请确认后继续推进实现。*
diff --git a/docs/industrial_ai_interaction_plan.md b/docs/industrial_ai_interaction_plan.md
new file mode 100644
index 0000000..5a11b7e
--- /dev/null
+++ b/docs/industrial_ai_interaction_plan.md
@@ -0,0 +1,1332 @@
+# 工业 AI 交互画布方案草案
+
+版本:v0.2
+目标:把第一阶段产品交互、系统边界和技术路线收敛清楚。本文档默认采用推荐方案,不再把每个决策点作为待选项展开。
+
+## 1. 背景与目标
+
+这个项目不是一个“AI 聊天框”,而是一个面向工业生产现场的 **AI 交互画布**。AI 的回复不应该主要表现为长文字,而应该表现为漂亮、清晰、可交互的组件。
+
+核心目标有三类:
+
+1. **自然语言控制工业能力**
+ 用户先通过文字输入,后续再接入语音,要求 AI 调用工业软件、上位机软件、PLC/HMI 或其他工具能力,例如调参、开机、开灯、开泵、读取状态、执行生产动作。
+
+2. **自然语言查询设备知识**
+ 用户询问设备说明书、调机经验、故障处理、生产注意事项时,AI 不直接堆大段文字,而是生成像教学卡片一样的组件:视频、图片、步骤、重点、展开详情、专业说明、引用来源都分层显示。
+
+3. **引导式调机流程**
+ AI 能带技师一步步完成调机。流程里既有 AI 自动调用工具完成的步骤,也有需要人工操作并反馈结果的步骤。第一阶段反馈来自鼠标点击和文字输入,后续再接入语音反馈。
+
+当前项目已经有一个很好的雏形:左侧聊天,右侧画布,根据 tool invocation 渲染不同组件。后续把它从“根据工具名写死渲染”升级为 **结构化 Artifact 协议 + React 组件注册表 + 状态机**。
+
+## 2. 产品定位
+
+### 2.1 不做什么
+
+- 不把这个系统做成完整工业软件 GUI 的替代品。
+- 不把 PLC Web HMI 的所有操作搬进 AI 界面。
+- 不让 LLM 随意生成前端代码并直接运行。
+- 第一阶段不实现权限体系、动作分级、ASR 和完整安全审计。
+
+### 2.2 要做什么
+
+- 做工业软件和 HMI 之外的 **AI 辅助交互层**。
+- 对关键动作提供清晰的可视化反馈、确认、进度、结果、失败原因和恢复建议。
+- 对知识查询提供“先简洁、后展开”的教学式体验。
+- 对调机任务提供流程引导、状态保存、点击/文字统一操作,语音操作作为后续扩展。
+
+## 3. 两类工业场景的交互边界
+
+### 3.1 上位机 GUI 场景
+
+设备本身已有上位机软件 GUI。AI 页面只做补充,不重复展示所有 GUI。
+
+适合展示:
+
+- AI 即将执行的动作。
+- 参数变更前后对比。
+- 当前动作的执行前提示。
+- 动作执行进度和结果。
+- 异常时的解释和下一步建议。
+- 调机步骤的引导卡片。
+
+不适合展示:
+
+- 完整工艺界面。
+- 所有实时数据点。
+- 原软件已有的复杂操作面板。
+
+### 3.2 PLC + Web HMI 场景
+
+PLC 是主控,另有 Web HMI 做实操显示。AI 画布重点是交互效果和辅助理解。
+
+适合展示:
+
+- “水泵已启动”“探照灯打开中”“产线准备中”等动画状态。
+- 当前 HMI 页面之外的解释性信息。
+- AI 对当前动作的总结。
+- 面向技师的流程提示、确认卡片、注意事项。
+
+不适合展示:
+
+- 替代 HMI 的核心控制界面。
+- 密集的实时仪表盘。
+- 需要毫秒级闭环控制的操作。
+
+## 4. 总体架构建议
+
+如果只想快速看宏观结构和下一步优化方向,优先看这份 HTML 总览:[`architecture_overview.html`](./architecture_overview.html)。
+
+第一阶段采用下面的分层:
+
+```mermaid
+flowchart LR
+ U["技师 / 操作员"] --> V["文字输入 / 鼠标点击"]
+ V --> R["意图路由器"]
+ R --> A["AI 编排层"]
+ A --> T["工业工具层"]
+ A --> K["知识库 / 说明书 / 视频图片"]
+ A --> S["Artifact 状态管理"]
+ S --> C["前端组件画布"]
+ C --> E["Action Event"]
+ E --> R
+ T --> S
+ K --> S
+```
+
+关键点:
+
+- **AI 编排层**:负责理解用户需求、选择工具、组织知识、决定展示什么组件。
+- **工业工具层**:由你后续实现,负责真正调用工业软件、PLC、HMI、设备接口。
+- **Artifact 状态管理**:保存当前组件、流程步骤、可点击动作、文本别名、状态快照。
+- **前端组件画布**:只渲染受控组件,不运行 LLM 生成的任意代码。
+- **意图路由器**:判断一句输入是在操作当前组件,还是在问新问题,还是要中断流程。
+
+后续语音接入时,ASR 只负责把语音变成文本;BERT NLU 可以放在意图路由器前后,用来提升当前组件操作、新问题、流程控制等意图分类的稳定性。第一阶段不实现 ASR 和 BERT NLU,只保证路由接口可以承接它们。
+
+### 4.1 宏观分层架构图
+
+后续接入语音识别、Python NLU、工业工具和可视化配置后,建议整体分成 7 层:
+
+```mermaid
+flowchart TB
+ subgraph L1["交互输入层"]
+ Mic["麦克风 / 语音流"]
+ TextInput["文字输入"]
+ Click["组件点击"]
+ end
+
+ subgraph L2["感知与语义层"]
+ ASR["ASR 服务\n语音转文本"]
+ Normalize["文本归一化\n单位/数字/同义词"]
+ NLU["Python NLU 服务\nDomain / Intent / Slot"]
+ end
+
+ subgraph L3["会话与路由层(TS)"]
+ Session["Session Context\n当前设备/当前流程/当前 Artifact"]
+ Router["Input Router\n当前组件优先 + NLU + LLM 兜底"]
+ end
+
+ subgraph L4["编排层(TS)"]
+ Orchestrator["AI / Tool Orchestrator\n选择工具、组织结果"]
+ UIInspect["inspect_ui_state\n让 LLM 读取画布摘要"]
+ end
+
+ subgraph L5["能力与配置层"]
+ ToolRegistry["Tool Registry\n工具目录 / 输入输出 Schema"]
+ VizRegistry["Visualization Registry\n工具到组件的绑定配置"]
+ Knowledge["Knowledge Registry\n说明书 / SOP / 视频 / 图片"]
+ end
+
+ subgraph L6["执行层"]
+ ToolGateway["Industrial Tool Gateway\n上位机 / PLC / HMI / Mock 工具"]
+ KnowledgeSearch["知识检索服务"]
+ end
+
+ subgraph L7["展示层"]
+ ArtifactStore["Artifact Store\n状态快照 / 流程实例"]
+ Canvas["React Artifact Canvas\n参数卡 / 动画卡 / 知识卡 / 流程卡"]
+ end
+
+ Mic --> ASR --> Normalize
+ TextInput --> Normalize
+ Click --> Router
+ Normalize --> Router
+ Router --> NLU
+ NLU --> Router
+ Session --> Router
+ Router --> Orchestrator
+ Orchestrator --> ToolRegistry
+ Orchestrator --> VizRegistry
+ Orchestrator --> Knowledge
+ Orchestrator --> ToolGateway
+ Orchestrator --> KnowledgeSearch
+ UIInspect --> ArtifactStore
+ ToolGateway --> ArtifactStore
+ KnowledgeSearch --> ArtifactStore
+ ArtifactStore --> Canvas
+ Canvas --> Click
+```
+
+各层职责:
+
+- **交互输入层**:接收语音、文字、点击,不判断业务含义。
+- **感知与语义层**:ASR 产出文本,Python NLU 产出结构化意图。
+- **会话与路由层**:决定一句话是在操作当前组件,还是开启新任务。
+- **编排层**:根据 NLU/LLM 结果选择工具,生成 artifact。
+- **能力与配置层**:维护工具目录、工具输入输出结构、可视化组件绑定。
+- **执行层**:真正调用工业软件、PLC、HMI、知识库。
+- **展示层**:渲染组件、保存流程状态、接收用户反馈。
+
+## 5. Artifact 组件协议
+
+### 5.1 推荐思路
+
+LLM 不直接返回 React/HTML,而是返回结构化组件数据。前端根据 `type` 从组件注册表中选择固定组件渲染。
+
+示例:
+
+```ts
+type InteractionArtifact = {
+ artifactId: string;
+ type:
+ | "parameter_change"
+ | "device_action"
+ | "production_start"
+ | "knowledge_lesson"
+ | "guided_procedure"
+ | "media_gallery"
+ | "alarm_explanation";
+ title: string;
+ status: "draft" | "waiting_confirmation" | "running" | "success" | "failed" | "paused";
+ props: Record;
+ actions: ArtifactAction[];
+ llmContext: ArtifactLLMContext;
+ snapshotPolicy: "ephemeral" | "session" | "persistent";
+};
+
+type ArtifactAction = {
+ actionId: string;
+ label: string;
+ kind: "primary" | "secondary" | "danger" | "input" | "toggle" | "choice";
+ textAliases: string[];
+ voiceAliases?: string[];
+ requiresConfirmation?: boolean;
+ disabled?: boolean;
+};
+```
+
+这样做的好处:
+
+- UI 风格稳定,可控。
+- 工业执行边界更清晰。
+- 组件可以持续迭代,不依赖每次 LLM 生成。
+- 点击、文字指令和后续语音可以共用同一个 `actionId`。
+- LLM 可以只看到必要摘要,不必看到复杂 UI 细节。
+
+### 5.2 已确定的组件渲染路线
+
+第一阶段采用 **React 组件注册表 + JSON Artifact 协议**。
+
+具体做法:
+
+- 控制、调参、流程类交互全部使用固定 React 组件。
+- LLM 或后端编排层只产出结构化 JSON,不直接产出 JSX/HTML。
+- 前端根据 `artifact.type` 从组件注册表选择组件。
+- 知识内容中的长说明可以使用受限 Markdown,但外层仍由固定教学组件承载。
+- 暂不做动态远程组件,也不允许 LLM 生成任意 UI 代码。
+
+## 6. 工业控制类交互设计
+
+### 6.1 参数设置组件
+
+典型输入:
+
+- “把主轴转速调到 1800。”
+- “把水泵压力上限改成 0.8MPa。”
+- “温度补偿加 2 度。”
+
+组件应该展示:
+
+- 参数名称。
+- 当前值。
+- 目标值。
+- 单位。
+- 影响范围。
+- 是否需要确认。
+- 执行结果。
+- 可恢复/回滚信息。
+
+建议组件:`ParameterChangeCard`
+
+状态流:
+
+```mermaid
+stateDiagram-v2
+ [*] --> Preview: 解析参数变更
+ Preview --> WaitingConfirm: 展示旧值/新值
+ WaitingConfirm --> Running: 用户确认
+ WaitingConfirm --> Cancelled: 用户取消
+ Running --> Success: 工具执行成功
+ Running --> Failed: 工具执行失败
+ Failed --> WaitingConfirm: 修改后重试
+```
+
+交互细节:
+
+- 第一阶段统一采用“预览 -> 用户确认 -> 工具执行 -> 展示结果”的闭环。
+- 确认可以来自按钮点击,也可以来自文字输入,例如“确认修改”“执行”。
+- 后续接入语音时,语音确认也转换为同一个 `actionId`,不单独做一套逻辑。
+
+### 6.2 具象设备控制组件
+
+典型输入:
+
+- “打开探照灯。”
+- “启动水泵。”
+- “关闭除尘风机。”
+- “开始生产。”
+
+建议组件:
+
+- `DeviceActionCard`:打开灯、泵、阀、风机等单设备动作。
+- `ProductionStartCard`:开机生产、启动工艺、产线准备。
+- `MachineStatusAnimation`:动作动画,例如灯光亮起、水流动、泵叶旋转、设备进入运行态。
+
+展示内容:
+
+- 设备图标和动画。
+- 当前状态:关闭、准备中、启动中、运行、失败。
+- 执行动作。
+- 工具调用进度。
+- 执行前提示。
+- 执行后的状态确认。
+
+控制类动作不一定都需要长文字。界面可以用动画、状态徽标、颜色和短句表达结果。
+
+### 6.3 第一阶段控制执行边界
+
+第一阶段不实现权限体系、动作风险分级和高风险确认策略。控制类能力先按“可演示、可模拟、可替换真实工具”的方式设计。
+
+执行边界:
+
+- Mock 工具阶段:所有控制动作都可以完整演示 UI、状态流和失败处理。
+- 接真实工业工具后:工具层由你负责控制实际可执行范围,本项目只负责把意图、参数、确认和结果组织成清晰交互。
+- 所有控制类组件都保留“预览/确认/执行中/成功/失败”的状态结构,方便未来加权限、动作分级或审计。
+- `ProductionStartCard` 先作为交互样板,不在第一阶段实现复杂生产安全策略。
+
+## 7. 知识查询类交互设计
+
+### 7.1 展示原则
+
+知识问答不应该每次都显示大段文字。推荐采用“儿童教学式”的结构,但视觉和语言仍保持工业专业感:
+
+1. 先给一句结论。
+2. 展示核心图、视频或步骤。
+3. 给 3 到 5 个关键点。
+4. 专业细节折叠起来。
+5. 引用说明书或知识库来源。
+6. 用户需要时再展开。
+
+建议组件:`KnowledgeLessonArtifact`
+
+模块:
+
+- 顶部结论。
+- 设备/部件示意图。
+- 视频卡片。
+- 图片步骤卡。
+- “为什么这样做”解释区。
+- “专业详情”折叠区。
+- “继续调机”按钮。
+- “查看原文/来源”按钮。
+
+### 7.2 知识内容生成流程
+
+```mermaid
+flowchart TD
+ Q["用户问题"] --> R["检索说明书/知识库"]
+ R --> P["提取关键段落、图片、视频"]
+ P --> G["AI 组织教学结构"]
+ G --> A["生成 Knowledge Artifact"]
+ A --> UI["画布分层展示"]
+```
+
+建议每次知识回答都保留来源:
+
+- 文档名称。
+- 页码或章节。
+- 图片/视频 ID。
+- 知识库条目版本。
+- 生成时间。
+
+### 7.3 已确定的知识展示路线
+
+第一阶段采用 **固定教学外壳 + block 内容**。
+
+具体做法:
+
+- 外层固定为 `KnowledgeLessonArtifact`。
+- 内部使用 block 列表表达结论、步骤、图片、视频、注意事项、专业详情、引用来源。
+- 大段文字默认折叠,不直接铺满主界面。
+- block 协议先保持简单,后续可以自然演进成更完整的卡片编排器。
+
+示例 block:
+
+```ts
+type KnowledgeBlock =
+ | { type: "summary"; text: string }
+ | { type: "key_points"; items: string[] }
+ | { type: "steps"; steps: Array<{ title: string; body: string; media?: MediaRef[] }> }
+ | { type: "media"; media: MediaRef[] }
+ | { type: "details"; title: string; markdown: string; defaultOpen?: boolean }
+ | { type: "citations"; citations: KnowledgeCitation[] };
+```
+
+## 8. 引导式调机流程
+
+### 8.1 流程步骤类型
+
+调机流程建议抽象成 `GuidedProcedure`:
+
+```ts
+type ProcedureStep =
+ | {
+ type: "auto_tool";
+ title: string;
+ toolName: string;
+ args: Record;
+ }
+ | {
+ type: "manual_action";
+ title: string;
+ instruction: string;
+ expectedFeedback: string[];
+ media?: MediaRef[];
+ }
+ | {
+ type: "measurement_input";
+ title: string;
+ field: string;
+ unit: string;
+ validRange?: [number, number];
+ }
+ | {
+ type: "decision_branch";
+ title: string;
+ choices: string[];
+ }
+ | {
+ type: "checklist_gate";
+ title: string;
+ checks: string[];
+ };
+```
+
+### 8.2 自动步骤与人工步骤
+
+自动步骤:
+
+- AI 调用工具读取状态。
+- AI 设置参数。
+- AI 触发设备动作。
+- AI 查询报警或日志。
+
+人工步骤:
+
+- 技师更换夹具。
+- 技师观察指示灯。
+- 技师测量间隙。
+- 技师确认工件位置。
+- 技师上传或选择现场照片。
+
+每一步都应该有明确状态:
+
+- 未开始。
+- 正在执行。
+- 等待人工反馈。
+- 已完成。
+- 失败。
+- 已跳过。
+- 已暂停。
+
+### 8.3 鼠标和文字输入统一操作
+
+所有按钮都应该映射为 `actionId`。鼠标点击和文字命令最终都生成同一种事件;后续接入语音后,语音识别结果也走同一个事件协议:
+
+```ts
+type ArtifactActionEvent = {
+ artifactId: string;
+ actionId: string;
+ source: "click" | "text" | "voice" | "system";
+ value?: unknown;
+ transcript?: string;
+ confidence?: number;
+ createdAt: string;
+};
+```
+
+示例:
+
+- 点击“已完成”按钮:`actionId = "step.complete"`
+- 文字输入“这一步完成了”:`actionId = "step.complete"`
+- 文字输入“压力是 0.72”:`actionId = "measurement.submit"`,`value = 0.72`
+
+这样前端、文字输入、未来语音和后端流程引擎不会各做一套逻辑。
+
+## 9. 输入路由策略:新问题还是操作当前组件
+
+这是本项目最关键的体验问题之一。
+
+### 9.1 推荐核心原则
+
+当存在正在进行的调机流程或控制确认时,系统进入 **前台任务模式**。这时用户输入优先解释为对当前组件的操作,而不是立刻开启新话题。
+
+可以把当前组件理解为持有一个“前台交互权”:
+
+- 当前组件有可执行动作。
+- 当前流程有等待反馈的步骤。
+- 用户没有明确输入“暂停当前流程”。
+
+在这种情况下,输入路由优先级如下:
+
+1. 全局流程指令:取消、暂停、继续、返回。
+2. 当前组件按钮或输入项:确认、取消、下一步、已完成、数值反馈。
+3. 当前流程相关问题:例如“这一步为什么要这样做?”
+4. 临时查询问题:例如“顺便查一下这个报警码。”
+5. 新任务或新流程。
+6. 闲聊。
+
+### 9.2 已确定的输入路由路线
+
+第一阶段采用 **规则优先 + LLM 兜底**。
+
+具体做法:
+
+- 当前组件按钮、确认、取消、下一步、已完成等短指令,用规则和 `textAliases` 直接匹配。
+- 数值输入用规则解析,例如“压力 0.72”“测量值是 3.1”。
+- 当前流程相关的解释性问题、新问题、复杂表达交给 LLM。
+- 后续接入 BERT NLU 时,把 BERT 输出作为意图路由器的一个信号源,不改变 Artifact Action Event 协议。
+
+### 9.3 防止闲聊打断调机流程
+
+推荐策略:
+
+- 调机流程进行中时,不允许普通新问题直接覆盖当前画布。
+- 新问题默认以“侧边临时回答”或“小浮层”展示,不替换主流程。
+- 如果新问题会打开新的大型组件,系统先问:“当前调机流程正在第 3 步,要暂停并打开新内容吗?”
+- 用户可以输入“暂停这个”“先问个问题”“继续刚才”。
+- 每个流程步骤都保存快照,随时可以恢复。
+
+### 9.4 组件状态快照
+
+建议保存:
+
+- 当前 artifact。
+- 当前流程 ID。
+- 当前步骤 ID。
+- 已完成步骤。
+- 已调用工具及结果。
+- 人工反馈记录。
+- 当前可用 action 列表。
+- 当前画布摘要。
+- 最近 N 条用户输入 transcript。
+
+状态快照用途:
+
+- 防止误打断。
+- 支持恢复流程。
+- 支持 LLM 理解当前界面。
+- 支持恢复和复盘。
+
+## 10. LLM 如何理解当前组件
+
+你提出的判断很对:工具调用后直接显示组件,而不是把完整组件都给 LLM 看,是合理的。但如果用户围绕界面内容提问,LLM 必须知道当前界面上有什么。
+
+### 10.1 推荐方案:组件提供 LLM 可读摘要
+
+每个组件除了 `props`,还提供一个 `llmContext`:
+
+```ts
+type ArtifactLLMContext = {
+ visibleSummary: string;
+ currentState: string;
+ activeStep?: string;
+ visibleFields: Array<{
+ label: string;
+ value: string;
+ }>;
+ availableActions: Array<{
+ actionId: string;
+ label: string;
+ textAliases: string[];
+ voiceAliases?: string[];
+ }>;
+ lastEvents: string[];
+};
+```
+
+LLM 不需要看完整 DOM 或截图,只需要看这个结构化摘要。
+
+### 10.2 已确定的 LLM 查看组件路线
+
+第一阶段采用 **极简上下文 + `inspect_ui_state` 工具**:
+
+- 每轮 prompt 默认带:当前是否有前台流程、当前步骤、是否等待用户反馈。
+- 当用户输入“这个按钮是什么意思”“为什么让我做这一步”“刚才显示的目标值是多少”时,LLM 调用 `inspect_ui_state` 获取详细组件状态。
+
+### 10.3 示例工具
+
+```ts
+inspect_ui_state({
+ detailLevel: "summary" | "actions" | "full",
+ artifactId?: string
+})
+```
+
+返回:
+
+```json
+{
+ "artifactId": "artifact_123",
+ "type": "guided_procedure",
+ "title": "主轴换型调机流程",
+ "status": "waiting_confirmation",
+ "currentStep": "第 3 步:确认夹具锁紧",
+ "visibleSummary": "画布正在等待技师确认夹具已经锁紧。",
+ "availableActions": [
+ { "actionId": "step.complete", "label": "已完成" },
+ { "actionId": "step.need_help", "label": "需要帮助" },
+ { "actionId": "procedure.pause", "label": "暂停流程" }
+ ]
+}
+```
+
+## 11. 工具调用与组件显示的关系
+
+### 11.1 推荐拆分
+
+一次工业工具调用应该拆成三类结果:
+
+```ts
+type ToolResponse = {
+ machineResult: unknown;
+ llmSummary: string;
+ artifact?: InteractionArtifact;
+ executionRecord: {
+ toolName: string;
+ args: unknown;
+ resultCode: string;
+ createdAt: string;
+ };
+};
+```
+
+- `machineResult`:给系统内部使用。
+- `llmSummary`:给 LLM 用,让它知道发生了什么。
+- `artifact`:给前端画布渲染。
+- `executionRecord`:保存最小执行记录,方便前端恢复状态和调试。
+
+这样可以避免把过多 UI 细节塞给 LLM,同时又能让 LLM 知道关键事实。
+
+### 11.2 已确定的工具结果展示路线
+
+第一阶段采用 **工具只执行,编排层生成 artifact**。
+
+具体做法:
+
+- 工业工具层只返回执行结果,不关心 UI。
+- AI 编排层或后端 Artifact Builder 根据工具结果生成 `InteractionArtifact`。
+- 前端只消费 artifact,不直接理解工业工具内部数据结构。
+- 这样后续替换 Mock 工具为真实工业工具时,UI 协议保持稳定。
+
+### 11.3 第二版:工具可视化组件分类与维护
+
+第二版需要增加一个“工具和可视化组件维护中心”,让工具能力和画布组件之间不再完全写死在代码里。这样新增工业工具时,可以配置它应该用哪种可视化方式呈现。
+
+工具可视化先分为三类:
+
+| 类型 | 用途 | 示例组件 | 适用工具 |
+|---|---|---|---|
+| 检索信息类型 | 展示查询、检索、知识库或设备资料结果 | `KnowledgeLessonArtifact`、`AlarmExplanationCard`、`MediaGalleryCard` | 查说明书、查报警码、查调机经验、查设备状态摘要 |
+| 图标动画类型 | 展示具象设备动作和执行状态 | `DeviceActionCard`、`ProductionStartCard`、`MachineStatusAnimation` | 开灯、开泵、开阀、启动风机、开机生产 |
+| 用户自定义类型 | 允许用户把某个工具绑定到自定义组件配置 | `CustomToolArtifact`、自定义 schema 驱动组件 | 特定设备动作、厂内专用流程、业务定制工具 |
+
+第二版建议增加 `ToolVisualizationConfig`:
+
+```ts
+type ToolVisualizationConfig = {
+ toolName: string;
+ displayName: string;
+ visualizationType: "retrieval_info" | "icon_animation" | "custom";
+ artifactType: InteractionArtifact["type"] | "custom_tool";
+ icon?: string;
+ animationPreset?: string;
+ propMapping: Array<{
+ from: string;
+ to: string;
+ transform?: "string" | "number" | "boolean" | "status" | "media_list";
+ }>;
+ defaultActions?: ArtifactAction[];
+ customSchema?: Record;
+ enabled: boolean;
+};
+```
+
+维护中心需要支持:
+
+- 查看所有工具。
+- 给工具选择可视化类型。
+- 配置工具结果字段到 artifact props 的映射。
+- 配置按钮、文本别名和后续语音别名。
+- 配置图标、动画预设、状态文案。
+- 对用户自定义类型提供 schema 校验,避免组件收到不可渲染的数据。
+
+第二版不要求用户直接写 React 组件。更稳的方式是先提供“可配置组件模板”:
+
+- 信息卡模板。
+- 状态动画模板。
+- 步骤流程模板。
+- 参数对比模板。
+- 媒体资料模板。
+
+真正的远程自定义组件可以作为更后面的能力,因为它会带来版本、样式、执行边界和兼容性问题。
+
+## 12. 数据与状态设计
+
+### 12.1 核心对象
+
+建议至少有这些对象:
+
+- `ConversationSession`:一次对话会话。
+- `ArtifactSession`:当前画布状态。
+- `WorkflowInstance`:调机流程实例。
+- `ToolExecution`:每次工具调用记录。
+- `ActionEvent`:每次点击、文字、未来语音、系统事件。
+- `KnowledgeCitation`:知识来源。
+- `OperatorContext`:当前操作员、班组、设备。第一阶段不展开权限模型。
+
+### 12.2 状态保存级别
+
+| 级别 | 用途 | 示例 |
+|---|---|---|
+| 临时态 | 普通问答卡片 | 查一个概念 |
+| 会话态 | 当前任务内有效 | 当前参数修改确认 |
+| 持久态 | 可恢复、可复盘 | 调机流程、生产动作、工具调用 |
+
+调机流程和生产动作建议进入持久态。第一阶段先保证能恢复流程和复盘交互,不做完整审计系统。
+
+## 13. 输入与 NLU 接入边界
+
+### 13.0 汽车语音助手里的 Domain / Intent / Slot / 上下文状态
+
+汽车语音助手常用的 NLU 体系可以理解成四层语义结构:
+
+| 概念 | 含义 | 汽车例子 | 工业设备例子 |
+|---|---|---|---|
+| Domain | 业务领域,先判断用户在说哪类事情 | 空调、导航、车窗、音乐 | 参数设置、设备控制、报警知识、调机流程 |
+| Intent | 用户想完成的动作 | 打开空调、导航到公司、调高音量 | 设置参数、打开设备、查询报警、进入调机 |
+| Slot | 动作需要的参数 | 温度 24 度、目的地公司、音量 8 | 参数名主轴转速、目标值 1800、设备探照灯 |
+| Context State | 当前对话/界面/设备状态 | 正在导航、刚打开空调、当前温度 22 度 | 当前 Artifact、当前调机步骤、当前设备、等待确认 |
+
+例如汽车里一句话:“把空调调到 24 度”:
+
+```json
+{
+ "domain": "climate",
+ "intent": "set_temperature",
+ "slots": {
+ "temperature": 24,
+ "unit": "celsius"
+ },
+ "contextState": {
+ "vehicleArea": "front"
+ }
+}
+```
+
+工业设备里一句话:“把主轴转速调到 1800”:
+
+```json
+{
+ "domain": "machine_parameter",
+ "intent": "set_parameter",
+ "slots": {
+ "parameter": "主轴转速",
+ "value": 1800,
+ "unit": "rpm"
+ },
+ "contextState": {
+ "deviceId": "machine_01",
+ "activeArtifactId": "artifact_123"
+ }
+}
+```
+
+这里最容易混淆的是 **Intent 和 Tool**:
+
+- `intent` 是用户意图,例如 `set_parameter`。
+- `tool` 是系统能力,例如 `write_machine_parameter`。
+- 一个 intent 可能映射到多个 tool;同一个 tool 也可能被多个 intent 使用。
+
+所以 NLU 不应该直接决定 UI,也不应该强耦合具体 React 组件。NLU 的核心输出是“用户想做什么 + 参数是什么 + 置信度多少”。TS 编排层再根据工具目录和可视化配置决定调用哪个工具、展示哪个组件。
+
+### 13.1 第一阶段输入链路
+
+第一阶段只做文字输入和鼠标点击,不实现 ASR,也不实现 BERT NLU。为了后续接入语音和 BERT,当前架构要提前把“用户输入文本”和“组件动作事件”分开。
+
+```mermaid
+flowchart LR
+ I["文字输入"] --> N["归一化文本"]
+ B["按钮点击"] --> E["ActionEvent"]
+ N --> R["意图路由器"]
+ R --> C["当前组件动作"]
+ R --> L["LLM 新问题/复杂语义"]
+ C --> E["ActionEvent"]
+ L --> O["AI 编排层"]
+```
+
+### 13.2 后续语音和 BERT NLU 接入位置
+
+后续接入时建议链路是:
+
+```mermaid
+flowchart LR
+ M["麦克风"] --> A["ASR"]
+ A --> T["识别文本"]
+ T --> N["BERT NLU"]
+ N --> R["意图路由器"]
+ R --> E["ActionEvent / LLM 编排"]
+```
+
+这里的边界是:
+
+- ASR 只负责语音转文字。
+- BERT NLU 负责稳定识别短命令、当前组件动作、流程控制、数值输入等意图。
+- LLM 负责复杂问答、知识组织、流程解释和 artifact 生成。
+- 不管输入来自文字、ASR 还是 BERT,最终都尽量落到统一的 `ArtifactActionEvent`。
+
+本文档后续不展开 ASR 和 BERT NLU 的具体模型方案,只保留接口位置。
+
+### 13.3 推荐职责边界
+
+建议不要让 Python NLU 服务成为“工具和 UI 的唯一配置中心”。更清晰的边界是:
+
+| 模块 | 负责什么 | 不负责什么 |
+|---|---|---|
+| ASR 服务 | 音频转文本、置信度、分段、最终文本 | 不判断业务意图,不调工具 |
+| Python NLU 服务 | domain、intent、slot、置信度、候选工具建议 | 不调用工业工具,不决定最终 UI |
+| TS Input Router | 当前组件动作优先、规则匹配、调用 NLU、决定是否 LLM 兜底 | 不训练模型 |
+| Tool Registry | 工具列表、输入 Schema、输出 Schema、工具描述、示例 | 不做语义识别 |
+| Visualization Registry | 工具/intent 到 artifact 组件的绑定、字段映射、默认动作 | 不执行工具 |
+| Tool Orchestrator | 选择工具、调用工具、生成 artifact、维护状态 | 不做 ASR 和模型训练 |
+
+也就是说,NLU 服务可以暴露它“理解哪些 domain/intent/slot”,也可以返回候选工具名,但工具目录和可视化绑定建议由 TS 项目或单独配置中心维护。
+
+### 13.4 ASR 到 TS 的接口协议
+
+第一阶段可以先做非流式接口,后面再升级 WebSocket 流式识别。
+
+```http
+POST /asr/transcribe
+Content-Type: multipart/form-data
+```
+
+请求字段:
+
+| 字段 | 类型 | 说明 |
+|---|---|---|
+| audio | file | 音频文件或音频片段 |
+| sessionId | string | 当前会话 ID |
+| deviceId | string | 当前设备 ID |
+| language | string | 默认 `zh-CN` |
+| sampleRate | number | 采样率 |
+
+响应:
+
+```ts
+type ASRResult = {
+ requestId: string;
+ sessionId: string;
+ text: string;
+ normalizedText?: string;
+ confidence: number;
+ isFinal: boolean;
+ segments?: Array<{
+ text: string;
+ startMs: number;
+ endMs: number;
+ confidence: number;
+ }>;
+};
+```
+
+后续流式接口可以用 WebSocket:
+
+```txt
+Client -> ASR: audio_chunk
+ASR -> Client/TS: partial_transcript
+ASR -> Client/TS: final_transcript
+```
+
+但无论是否流式,进入 TS Input Router 的都应该是统一文本事件:
+
+```ts
+type InputTextEvent = {
+ eventId: string;
+ sessionId: string;
+ source: "text" | "asr";
+ text: string;
+ normalizedText?: string;
+ confidence?: number;
+ createdAt: string;
+};
+```
+
+### 13.5 TS 到 Python NLU 的接口协议
+
+核心解析接口:
+
+```http
+POST /nlu/parse
+Content-Type: application/json
+```
+
+请求:
+
+```ts
+type NLUParseRequest = {
+ requestId: string;
+ sessionId: string;
+ text: string;
+ normalizedText?: string;
+ locale: "zh-CN";
+ context: {
+ deviceId?: string;
+ activeArtifact?: {
+ artifactId: string;
+ type: string;
+ status: string;
+ availableActions: Array<{
+ actionId: string;
+ label: string;
+ textAliases: string[];
+ }>;
+ };
+ activeWorkflow?: {
+ workflowId: string;
+ currentStepId: string;
+ currentStepTitle: string;
+ };
+ };
+ toolCatalogVersion?: string;
+ nluSchemaVersion?: string;
+};
+```
+
+响应:
+
+```ts
+type NLUParseResponse = {
+ requestId: string;
+ modelVersion: string;
+ schemaVersion: string;
+ domain: string;
+ intent: string;
+ confidence: number;
+ slots: Record<
+ string,
+ {
+ value: string | number | boolean;
+ rawText?: string;
+ confidence?: number;
+ unit?: string;
+ }
+ >;
+ routeHint:
+ | "artifact_action"
+ | "tool_call"
+ | "knowledge_query"
+ | "workflow_control"
+ | "smalltalk"
+ | "fallback";
+ candidateTools?: Array<{
+ toolName: string;
+ confidence: number;
+ reason?: string;
+ }>;
+ clarification?: {
+ required: boolean;
+ question?: string;
+ missingSlots?: string[];
+ };
+};
+```
+
+示例:
+
+```json
+{
+ "requestId": "req_001",
+ "modelVersion": "bert-nlu-2026-05",
+ "schemaVersion": "nlu_schema_v1",
+ "domain": "machine_parameter",
+ "intent": "set_parameter",
+ "confidence": 0.94,
+ "slots": {
+ "parameter": { "value": "主轴转速", "rawText": "主轴转速", "confidence": 0.96 },
+ "value": { "value": 1800, "rawText": "1800", "confidence": 0.98, "unit": "rpm" }
+ },
+ "routeHint": "tool_call",
+ "candidateTools": [
+ { "toolName": "write_machine_parameter", "confidence": 0.91 }
+ ]
+}
+```
+
+### 13.6 NLU 元数据接口
+
+NLU 服务需要暴露自己支持的 domain、intent、slot,方便 TS 做校验、版本对齐和调试。
+
+```http
+GET /nlu/metadata
+```
+
+响应:
+
+```ts
+type NLUMetadata = {
+ serviceName: string;
+ modelVersion: string;
+ schemaVersion: string;
+ domains: Array<{
+ name: string;
+ description: string;
+ intents: Array<{
+ name: string;
+ description: string;
+ requiredSlots: string[];
+ optionalSlots: string[];
+ examples: string[];
+ }>;
+ }>;
+ slots: Array<{
+ name: string;
+ type: "string" | "number" | "boolean" | "enum";
+ values?: string[];
+ units?: string[];
+ }>;
+};
+```
+
+### 13.7 工具目录接口
+
+工具目录建议由 TS 项目或工业工具网关维护,NLU 可以读取它来训练/更新候选工具映射,但不要让 NLU 成为工具真实执行的源头。
+
+```http
+GET /tools/catalog
+```
+
+响应:
+
+```ts
+type ToolCatalog = {
+ version: string;
+ tools: Array<{
+ toolName: string;
+ displayName: string;
+ domain: string;
+ description: string;
+ inputSchema: Record;
+ outputSchema: Record;
+ examples: string[];
+ aliases: string[];
+ enabled: boolean;
+ }>;
+};
+```
+
+示例:
+
+```json
+{
+ "version": "tool_catalog_v1",
+ "tools": [
+ {
+ "toolName": "write_machine_parameter",
+ "displayName": "写入设备参数",
+ "domain": "machine_parameter",
+ "description": "把目标参数写入指定工业设备。",
+ "inputSchema": {
+ "type": "object",
+ "required": ["deviceId", "parameter", "value"],
+ "properties": {
+ "deviceId": { "type": "string" },
+ "parameter": { "type": "string" },
+ "value": { "type": ["number", "string"] },
+ "unit": { "type": "string" }
+ }
+ },
+ "outputSchema": {
+ "type": "object",
+ "properties": {
+ "previousValue": { "type": ["number", "string"] },
+ "targetValue": { "type": ["number", "string"] },
+ "status": { "type": "string" }
+ }
+ },
+ "examples": ["把主轴转速调到 1800", "温度补偿加 2 度"],
+ "aliases": ["调参数", "设置参数", "修改参数"],
+ "enabled": true
+ }
+ ]
+}
+```
+
+### 13.8 工具到可视化组件的绑定协议
+
+工具调用结果不应该直接等于 UI。第二版通过 Visualization Registry 维护工具和可视化组件的绑定。
+
+```http
+GET /visualizations/config
+PUT /visualizations/config/:bindingId
+```
+
+配置结构:
+
+```ts
+type ToolVisualizationBinding = {
+ bindingId: string;
+ target: {
+ type: "tool" | "intent";
+ name: string;
+ };
+ visualizationType: "retrieval_info" | "icon_animation" | "custom";
+ artifactType:
+ | "parameter_change"
+ | "device_action"
+ | "production_start"
+ | "knowledge_lesson"
+ | "guided_procedure"
+ | "custom_tool";
+ propMapping: Array<{
+ from: string;
+ to: string;
+ transform?: "string" | "number" | "boolean" | "status" | "media_list";
+ }>;
+ defaultActions: ArtifactAction[];
+ enabled: boolean;
+};
+```
+
+示例:参数写入工具绑定到参数对比卡:
+
+```json
+{
+ "bindingId": "viz_write_parameter",
+ "target": {
+ "type": "tool",
+ "name": "write_machine_parameter"
+ },
+ "visualizationType": "custom",
+ "artifactType": "parameter_change",
+ "propMapping": [
+ { "from": "tool.input.parameter", "to": "props.parameterName", "transform": "string" },
+ { "from": "tool.output.previousValue", "to": "props.currentValue" },
+ { "from": "tool.input.value", "to": "props.targetValue" },
+ { "from": "tool.input.unit", "to": "props.unit" }
+ ],
+ "defaultActions": [
+ {
+ "actionId": "artifact.confirm",
+ "label": "确认执行",
+ "kind": "primary",
+ "textAliases": ["确认", "执行", "确认执行"]
+ }
+ ],
+ "enabled": true
+}
+```
+
+### 13.9 一次完整链路
+
+```mermaid
+sequenceDiagram
+ participant UI as React 画布
+ participant ASR as ASR 服务
+ participant Router as TS Input Router
+ participant NLU as Python NLU
+ participant Tools as Tool Registry
+ participant Viz as Visualization Registry
+ participant Exec as 工业工具网关
+ participant Store as Artifact Store
+
+ UI->>ASR: 音频或语音片段
+ ASR-->>UI: transcript
+ UI->>Router: InputTextEvent
+ Router->>Store: inspect active artifact
+ alt 命中当前组件动作
+ Router->>Store: ArtifactActionEvent
+ Store-->>UI: 更新当前组件
+ else 需要语义识别
+ Router->>NLU: /nlu/parse(text + context)
+ NLU-->>Router: domain / intent / slots / candidateTools
+ Router->>Tools: 查询工具 schema
+ Router->>Exec: 调用工具
+ Exec-->>Router: tool result
+ Router->>Viz: 查询工具可视化绑定
+ Router->>Store: 生成并保存 artifact
+ Store-->>UI: 渲染交互组件
+ end
+```
+
+## 14. 第一阶段最小记录
+
+第一阶段先不实现权限、动作分级、高风险确认和完整审计系统。这里仅保留产品运行所需的最小记录能力,目的是支持状态恢复、问题排查和后续扩展。
+
+最小记录内容:
+
+- 当前会话 ID。
+- 当前 artifact 快照。
+- 当前流程步骤。
+- 用户输入 transcript。
+- 点击或文字触发的 `ActionEvent`。
+- Mock/真实工具调用名称、参数、结果码、时间。
+- 异常时展示明确的失败原因和恢复步骤。
+- 支持暂停、取消、恢复。
+
+后续如果要进入真实生产控制,再单独补权限、动作分级、二次确认、审计日志和合规要求。
+
+## 15. 前端组件库初始清单
+
+第一阶段建议做 8 个核心组件:
+
+| 组件 | 用途 |
+|---|---|
+| `ParameterChangeCard` | 参数前后对比、确认、执行结果 |
+| `DeviceActionCard` | 开灯、开泵、开阀、风机等具象设备动作 |
+| `ProductionStartCard` | 开机生产、启动前检查、启动进度 |
+| `KnowledgeLessonArtifact` | 说明书/知识库教学式回答 |
+| `GuidedProcedureArtifact` | 调机流程引导 |
+| `MeasurementInputCard` | 人工输入测量值,后续可支持语音填数 |
+| `MediaGalleryCard` | 视频、图片、说明资料展示 |
+| `AlarmExplanationCard` | 报警解释、原因、处理步骤 |
+
+## 16. 当前项目演进建议
+
+当前 `src/app/page.tsx` 里已经是左侧聊天 + 右侧画布。可以按这个路线演进:
+
+1. 把 `activeTool.toolName === "getWeather"` 这种判断抽成组件注册表。
+2. 定义 `InteractionArtifact` 类型。
+3. API 不再只返回工具结果,而是返回 `artifact`。
+4. 前端用 `artifact.type` 渲染组件。
+5. 所有组件按钮都发 `ArtifactActionEvent`。
+6. 加一个 `artifact store` 保存当前组件快照。
+7. 后端加 `inspect_ui_state` 工具,让 LLM 可按需读取当前组件摘要。
+8. 预留后续 BERT NLU/语音入口,把未来语音也转成 `ArtifactActionEvent`。
+
+## 17. 阶段计划
+
+### 阶段 1:交互画布原型
+
+目标:
+
+- 固定组件注册表。
+- Mock 工业工具。
+- 参数变更组件。
+- 设备动作动画组件。
+- 知识教学组件。
+
+验收:
+
+- 用户输入“把转速改到 1800”,右侧显示参数前后对比。
+- 用户确认后显示执行中、成功或失败。
+- 用户输入“打开探照灯”,右侧显示灯光动画和状态。
+- 用户问知识问题,右侧显示教学式卡片,而不是大段文本。
+
+### 阶段 2:流程引导
+
+目标:
+
+- 实现 `GuidedProcedureArtifact`。
+- 支持自动步骤和人工步骤。
+- 支持暂停、恢复、跳过、失败重试。
+- 支持文字反馈“已完成”“数值是 0.72”。
+
+验收:
+
+- 一个调机流程可以从第 1 步走到最后。
+- 中途问临时问题不会覆盖流程。
+- 可以输入“继续刚才”恢复流程。
+
+### 阶段 3:LLM 读取 UI 状态
+
+目标:
+
+- 实现 `llmContext`。
+- 实现 `inspect_ui_state`。
+- 用户围绕界面提问时,LLM 能知道当前组件和步骤。
+
+验收:
+
+- 用户问“刚才让我确认的目标值是多少”,AI 能答对。
+- 用户问“这个按钮是什么意思”,AI 能解释当前按钮。
+- 用户问“这一步为什么要做”,AI 能结合流程上下文回答。
+
+### 阶段 4:工业工具接入
+
+目标:
+
+- 接入你实现的工业软件能力。
+- 保持工具执行结果到 artifact 展示的稳定映射。
+- 保留最小执行记录和异常处理。
+
+验收:
+
+- 工具调用结果能稳定驱动组件状态变化。
+- 工具失败时组件能给出恢复建议。
+
+## 18. 已收敛的技术路线
+
+本阶段不再保留多个待选决策,统一采用以下路线:
+
+| 方向 | 已采用方案 |
+|---|---|
+| 组件渲染 | React 组件注册表 + JSON Artifact 协议 |
+| 知识展示 | 固定教学外壳 + block 内容 |
+| 输入路由 | 规则优先 + LLM 兜底 |
+| 流程状态 | 后端持久化 `WorkflowInstance`,原型阶段可先用会话态模拟 |
+| LLM 理解界面 | 每轮给极简上下文,需要时调用 `inspect_ui_state` |
+| 工具展示关系 | 工具只执行,编排层生成 artifact |
+| 第一阶段输入 | 文字输入 + 鼠标点击 |
+| 后续 NLU | 预留 BERT NLU 接口,但本阶段不实现 |
+| 语音/ASR | 预留接口,本阶段不实现 |
+| 权限/动作分级/高风险确认 | 本阶段不实现 |
+| 第二版工具可视化维护 | 增加工具和可视化组件维护中心,支持检索信息、图标动画、用户自定义三类 |
+
+## 19. 我建议的第一版 MVP 范围
+
+第一版不要做太大,建议只做这 5 条闭环:
+
+1. 参数修改:旧值/新值/确认/执行结果。
+2. 设备控制:打开探照灯或水泵的动画状态。
+3. 知识问答:说明书内容变成教学卡片。
+4. 调机流程:3 到 5 步,包含一个自动步骤和一个人工反馈步骤。
+5. 文字输入操作当前组件:确认、取消、下一步、已完成、数值输入。
+
+这 5 条跑通后,再扩展到真实工业软件和 PLC/HMI。
+
+## 20. 下一步建议
+
+建议按下面顺序进入实现:
+
+1. 先定义 `InteractionArtifact`、`ArtifactAction`、`ArtifactActionEvent` 类型。
+2. 建立组件注册表,把当前写死的 weather/stock 渲染替换成 artifact 渲染。
+3. 先实现两个控制类组件:`ParameterChangeCard` 和 `DeviceActionCard`。
+4. 再实现 `KnowledgeLessonArtifact`,支持 summary、key_points、steps、media、details、citations 这些 block。
+5. 再实现 `GuidedProcedureArtifact`,跑通 3 到 5 步调机流程。
+6. 加入 `inspect_ui_state`,让 LLM 能按需读取当前画布摘要。
+7. 最后预留 BERT NLU/ASR 接口,但不在第一阶段接入。
+
+完成后,这个项目就会从“聊天 + 单个工具卡片 demo”变成一个真正可扩展的工业 AI 交互画布原型。
diff --git a/docs/nlu_integration_design.md b/docs/nlu_integration_design.md
new file mode 100644
index 0000000..279cf0e
--- /dev/null
+++ b/docs/nlu_integration_design.md
@@ -0,0 +1,310 @@
+# NLU 接入设计方案
+
+> 状态:**已确认,进入实现阶段**
+> 关联文档:`bert_integration_analysis.md`、`architecture_overview.html`
+
+---
+
+## 第一部分:概念解释 — 两套术语怎么对应
+
+### 1.1 Canvas 设计里用的词
+
+在 `architecture_overview.html` 的技术流程视图里,BERT NLU 节点描述为:
+
+```
+BERT NLU 意图识别
+输出 domain / intent / slot / confidence 置信度
+```
+
+这是一套**面向业务语义**的描述,每个词的含义:
+
+| 词 | 含义 | 例子 |
+|---|---|---|
+| `domain` | 所属业务域,意图的分组 | `machine_control`、`equipment_knowledge`、`smalltalk` |
+| `intent` | 用户想做什么,域内的细分动作 | `wirecut_set_speed`、`wirecut_start_run`、`query_alarm` |
+| `slot` | 动作的具体参数,从句子里提取的关键值 | `speed=80`、`voltage=90`、`axis=X` |
+| `confidence` | 模型对这次识别结果的置信程度,0~1 | `0.94`(高)、`0.61`(中)、`0.32`(低)|
+
+Canvas 的路由逻辑就是:拿到这四个值之后,判断 `confidence ≥ 阈值 AND domain = machine_control` → 走工具调用路径。
+
+---
+
+### 1.2 intelligent_cabin NLU 服务里用的词
+
+`intelligent_cabin` 后端分两层输出:
+
+#### 层 A:JointBertNLU 的原始输出(`joint_nlu.py`)
+
+```python
+@dataclass
+class JointNluResult:
+ intent_id: str | None # 识别出的意图 id,如 "wirecut_set_speed"
+ intent_score: float # softmax 后的概率,就是置信度,0~1
+ candidates: list[JointCandidate] # Top-K 候选意图及其概率
+ slots: dict[str, Any] # 从句子里提取的 slot,如 {"speed": 80}
+ slot_items: list[JointSlot] # slot 在原文中的精确位置和得分
+```
+
+这里的 `intent_id + intent_score + slots` 对应 Canvas 描述里的 `intent + confidence + slot`。
+`domain` 不是模型直接输出的,而是根据 `intent_id` 在 `domain.yml` 里查到的(`wirecut_set_speed` → domain `machine_control`)。
+
+#### 层 B:Router / FusionGrader 的决策输出(`router.py`)
+
+```python
+# MultiStageIntentMatcher._build_fusion_stage() 里
+decision = "execute" | "clarify" | "route_to_cloud" | "reject"
+```
+
+这是在原始 NLU 结果基础上做的**二次路由判断**,加入了:
+- 置信度是否够高(`score ≥ execute_score_threshold=0.55`)
+- 头两名候选的分差是否足够大(`margin ≥ execute_margin_threshold=0.18`)
+- 是否有多义性(ambiguous)
+
+它告诉上层"这个识别结果能不能直接执行",而不只是"模型认为是哪个意图"。
+
+---
+
+### 1.3 两套词汇的完整映射关系
+
+```
+Canvas 的描述 ←→ intelligent_cabin 的实际字段
+─────────────────────────────────────────────────────────────
+domain ←→ intent_def.domain (从 domain.yml 查)
+intent ←→ JointNluResult.intent_id
+slot ←→ JointNluResult.slots (dict)
+confidence ←→ JointNluResult.intent_score (0~1)
+
+(以上是 NLU 层的概念对应)
+
+Canvas 的路由逻辑 ←→ Router 层的 decision 字段
+"高置信 + 设备控制域" ←→ decision="execute" AND domain="machine_control"
+"知识域/低置信兜底" ←→ decision="route_to_cloud" 或 domain="equipment_knowledge"
+"smalltalk" ←→ decision="reject" 或 social_router 处理
+```
+
+> **关键点**:Canvas 当前用 Mock NLU(`src/lib/nlu/mock.ts`),它直接输出 `domain + intent + confidence + routeHint`。
+> 接入真实 NLU 后,两个项目**原生打通,当成一个项目**,不做兼容适配层,接口可以随时改。
+
+---
+
+## 第二部分:Canvas ↔ NLU 服务的统一路由方案
+
+### 2.1 两个项目合并为一个项目(已确认)
+
+`intelligent_cabin` 不作为独立服务做适配,而是直接作为 `ai-canvas` 的后端子模块。
+原来 `src/lib/nlu/mock.ts` 的格式**可以废弃**,不需要保持向后兼容。
+
+### 2.2 真实 NLU 服务的 HTTP 响应
+
+调用 `POST /api/v1/agent/chat` 后,服务返回 `ChatResponse`,与路由相关的核心字段:
+
+```json
+{
+ "session_id": "xxx",
+ "intent": "wirecut_set_speed",
+ "domain": "machine_control",
+ "decision": "execute",
+ "status": "completed",
+ "filled_slots": { "speed": 80 },
+ "routing_debug": {
+ "confidence_grade": "high",
+ "stages": [
+ { "stage": "classifier", "score": 0.87, "candidates": [...] },
+ {
+ "stage": "fusion",
+ "metadata": { "decision": "execute", "grade": "high",
+ "classifier_signal": 0.87, "classifier_margin": 0.34 }
+ }
+ ]
+ }
+}
+```
+
+> `domain` 字段需要在 intelligent_cabin 的 `ChatResponse` schema 里加上(从 `IntentDefinition.domain` 填充),改动极小。
+
+### 2.3 Canvas 侧的 NluResult 类型(替换 mock.ts)
+
+```typescript
+// src/lib/nlu/types.ts (新建,替换 mock.ts 里的类型)
+
+export type RouteHint =
+ | "tool_call" // decision=execute + machine_control 域
+ | "knowledge_query" // decision=route_to_cloud 或 equipment_knowledge 域
+ | "smalltalk" // decision=reject
+ | "fallback";
+
+export type NluResult = {
+ modelVersion: string;
+ domain: string; // 后端直接返回
+ intent: string; // intent_id
+ confidence: number; // classifier stage score
+ slots: Record; // filled_slots
+ routeHint: RouteHint;
+ decisionGrade: "high" | "medium" | "low";
+ rawDecision: "execute" | "clarify" | "route_to_cloud" | "reject";
+};
+
+export function mapDecisionToRouteHint(
+ decision: string,
+ domain: string
+): RouteHint {
+ if (decision === "execute") {
+ if (domain === "machine_control") return "tool_call";
+ if (domain === "equipment_knowledge") return "knowledge_query";
+ return "tool_call";
+ }
+ if (decision === "route_to_cloud") return "knowledge_query";
+ if (decision === "reject") return "smalltalk";
+ return "fallback"; // clarify 等待补槽,暂用 fallback
+}
+```
+
+### 2.4 confidence 读取位置
+
+`routing_debug.stages` 里找 `stage === "classifier"` 的记录,取其 `score` 字段。
+这是 BERT 分类器 softmax 后的原始概率,等价于 Canvas 描述里的 `confidence`。
+
+---
+
+## 第三部分:语音处理前置拦截链路(已定稿)
+
+### 3.1 设计原则
+
+- **所有当前可见 UI 组件的按钮文本都参与语音匹配**,命中则直接触发点击事件,不调 BERT
+- 调机流程(GuidedProcedure)当前**不在实现范围**,相关 1c 拦截逻辑暂不涉及
+- BERT 报错**直接抛出**,不降级,不用 Mock 兜底
+
+### 3.2 四阶段处理链路
+
+```
+ASR 文本输入
+ │
+ ▼
+[阶段 0] 停止词检测 ← 静态词表,构建时嵌入
+ ├── 命中 cancel_words → 生成 stop_action,链路终止
+ └── 未命中 ↓
+ │
+ ▼
+[阶段 1] UI 可见元素语音点击匹配 ← 纯前端规则,<1ms
+ ├── 1a. session.status=waiting_confirmation 时的 affirm/deny(最高优先级)
+ └── 1b. 当前可见 Artifact 按钮 text 匹配
+ │ 命中任意 → 生成 ActionEvent,走 Canvas 状态机,链路终止
+ │
+ │ 全部未命中
+ ▼
+[阶段 1.5] waiting_slot + inform 检测
+ ├── session.status=waiting_slot && 输入为数字/数值类
+ └── 命中 → 调 fill_slots 接口,链路终止
+ │
+ ▼
+[阶段 2] BERT NLU(intelligent_cabin /api/v1/agent/chat)
+ ├── 报错 → 直接抛出,不降级
+ ├── decision=execute → 工具调用层(DBus)→ Artifact
+ ├── decision=clarify → 渲染补槽卡,等待 waiting_slot
+ ├── decision=route_to_cloud → LLM + 知识库 → KnowledgeLessonArtifact
+ └── decision=reject → LLM 直接作答,不写 ArtifactStore
+```
+
+### 3.3 阶段 1 内部优先级说明
+
+```typescript
+// 优先级从高到低(1c 调机 textAliases 暂不实现)
+const PRIORITY_ORDER = [
+ "waiting_confirmation_affirm_deny", // 1a
+ "visible_artifact_button", // 1b
+];
+```
+
+**为什么 1a 最高**:当高风险操作(如"开始加工")弹出确认卡时,
+操作员说"确认"应当触发确认动作,而不是响应画布上同时存在的其他按钮。
+状态(`session.status`)决定优先级,而非文本本身。
+
+### 3.4 阶段 1 匹配实现(pipeline.ts 骨架)
+
+```typescript
+// src/lib/nlu/pipeline.ts
+
+import { AFFIRM_WORDS, CANCEL_WORDS } from "./voice-aliases.gen"; // 构建时生成
+
+type ActionEvent = {
+ type: "voice_click_event" | "slot_fill_event" | "stop_action";
+ actionId?: string;
+ artifactId?: string;
+ sourceText: string;
+};
+
+export async function processVoiceInput(
+ asrText: string,
+ session: CanvasSession
+): Promise {
+
+ // 阶段 0:停止词
+ const norm = normalizeVoice(asrText);
+ if (CANCEL_WORDS.some(w => norm.includes(w))) {
+ return { type: "stop_action", sourceText: asrText };
+ }
+
+ // 阶段 1a:waiting_confirmation 状态的 affirm/deny
+ if (session.status === "waiting_confirmation") {
+ if (AFFIRM_WORDS.some(w => norm.includes(w))) {
+ return { type: "voice_click_event", actionId: "confirm", sourceText: asrText };
+ }
+ if (CANCEL_WORDS.some(w => norm.includes(w))) {
+ return { type: "voice_click_event", actionId: "cancel", sourceText: asrText };
+ }
+ }
+
+ // 阶段 1b:当前 Artifact 按钮匹配
+ const voiceClick = matchVoiceToAction(asrText, session.visibleActions);
+ if (voiceClick) {
+ return {
+ type: "voice_click_event",
+ actionId: voiceClick.actionId,
+ artifactId: voiceClick.artifactId,
+ sourceText: asrText,
+ };
+ }
+
+ // 阶段 1.5:waiting_slot + 数值输入
+ if (session.status === "waiting_slot" && isNumericInput(asrText)) {
+ return { type: "slot_fill_event", sourceText: asrText };
+ }
+
+ // 阶段 2:BERT NLU(报错直接抛出)
+ const response = await callNluService(asrText, session.sessionId);
+ return adaptNluResponse(response);
+}
+```
+
+### 3.5 voice_aliases 配置(已确认:静态构建)
+
+**词表位置**:`intelligent_cabin/config/voice_aliases.yml`(和 `dialog_acts.yml` 放在一起)
+
+```yaml
+# voice_aliases.yml
+affirm_words: ["确认", "好的", "执行", "是", "对", "继续", "好", "ok"]
+cancel_words: ["取消", "算了", "不要", "不用", "停止", "停"]
+
+# 工控设备别名(按 intent_id 分组,用于阶段 1b 的 Artifact voiceActions)
+intent_aliases:
+ wirecut_start_run: ["开始", "启动", "加工", "跑起来"]
+ wirecut_stop_run: ["停", "停机", "急停", "停止"]
+ wirecut_home_all: ["回零", "归零", "回原点"]
+ wirecut_pause_run: ["暂停", "变频暂停"]
+```
+
+**构建时生成**:构建脚本读取 yml → 生成 `src/lib/nlu/voice-aliases.gen.ts`,
+TypeScript 侧直接 import,不需要运行时 HTTP 请求。
+
+---
+
+## 第四部分:下一步实现计划
+
+| 步骤 | 位置 | 内容 |
+|---|---|---|
+| 1 | `intelligent_cabin` Python 侧 | `ChatResponse` schema 加 `domain` 字段,`agent_service.py` 填充 |
+| 2 | `intelligent_cabin/config/` | 创建 `voice_aliases.yml`,补充工控别名 |
+| 3 | `src/lib/nlu/` | 新建 `types.ts`,废弃 `mock.ts` 中旧类型 |
+| 4 | `src/lib/nlu/` | 新建 `pipeline.ts`,实现四阶段处理链路 |
+| 5 | `src/lib/artifacts/types.ts` | 各 Artifact 类型上加 `voiceActions` 字段 |
+| 6 | 构建配置 | 添加 yml → ts 生成脚本(`voice-aliases.gen.ts`) |
diff --git a/docs/归档(包含调机流程).html b/docs/归档(包含调机流程).html
new file mode 100644
index 0000000..8215ed7
--- /dev/null
+++ b/docs/归档(包含调机流程).html
@@ -0,0 +1,469 @@
+
+
+
+
+
+ 工业 AI 交互画布:流程总览
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intelligent_cabin/.vscode/launch.json b/intelligent_cabin/.vscode/launch.json
new file mode 100644
index 0000000..61e6caa
--- /dev/null
+++ b/intelligent_cabin/.vscode/launch.json
@@ -0,0 +1,44 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Debug FastAPI",
+ "type": "debugpy",
+ "request": "launch",
+ "module": "uvicorn",
+ "python": "${workspaceFolder}/.venv/bin/python",
+ "cwd": "${workspaceFolder}",
+ "envFile": "${workspaceFolder}/.env",
+ "args": [
+ "app.main:app",
+ "--host",
+ "127.0.0.1",
+ "--port",
+ "8000",
+ "--reload"
+ ],
+ "jinja": true,
+ "justMyCode": false,
+ "console": "integratedTerminal"
+ },
+ {
+ "name": "Debug FastAPI Without Reload",
+ "type": "debugpy",
+ "request": "launch",
+ "module": "uvicorn",
+ "python": "${workspaceFolder}/.venv/bin/python",
+ "cwd": "${workspaceFolder}",
+ "envFile": "${workspaceFolder}/.env",
+ "args": [
+ "app.main:app",
+ "--host",
+ "127.0.0.1",
+ "--port",
+ "8000"
+ ],
+ "jinja": true,
+ "justMyCode": false,
+ "console": "integratedTerminal"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/intelligent_cabin/README.md b/intelligent_cabin/README.md
new file mode 100644
index 0000000..dde306d
--- /dev/null
+++ b/intelligent_cabin/README.md
@@ -0,0 +1,161 @@
+# Intelligent Cabin Agent
+
+## Quick Start
+
+1. Create and activate the Python 3.11 virtual environment:
+
+```bash
+uv venv .venv --python 3.11
+source .venv/bin/activate
+```
+2. Install dependencies:
+
+```bash
+pip install -r requirements.txt
+```
+
+3. Start the service:
+
+```bash
+.venv/bin/uvicorn app.main:app --host 127.0.0.1 --port 8000
+```
+
+4. Open the API docs:
+
+```text
+http://127.0.0.1:8000/docs
+```
+
+Demo UI:
+
+```text
+http://127.0.0.1:8000/demo
+```
+
+Architecture and flow review:
+
+```text
+solution_review.md
+```
+
+The demo console supports:
+
+- local browser session history restore
+- runtime matcher/classifier/session backend switching
+- matcher routing debug panel with Top-K candidates
+- local `rewrite -> keyword/classifier/retrieval -> fusion` decision trace
+- direct display of classifier backend / raw label / fallback reason / raw candidate payload
+- workflow JSON visualization
+
+## Core APIs
+
+- `POST /api/v1/agent/chat`
+- `POST /api/v1/agent/fill-slots`
+- `GET /health`
+
+## Current Scope
+
+- Configurable session backend: memory / Redis
+- Config-driven intent registry
+- Router layer with pluggable matcher / extractor
+- Rule-based fast-path intent routing
+- Basic slot extraction
+- Plugin registry with mock handlers
+- Workflow response payloads
+
+## Runtime Config
+
+- `AGENT_SESSION_BACKEND=memory|redis`
+- `AGENT_REDIS_URL=redis://127.0.0.1:6379/0`
+- `AGENT_REDIS_KEY_PREFIX=agent:session`
+- `AGENT_SESSION_TTL_SECONDS=86400`
+- `AGENT_MATCHER_PIPELINE=keyword`
+- `AGENT_SLOT_EXTRACTOR_BACKEND=heuristic`
+- `AGENT_CLASSIFIER_BACKEND=mock`
+- `AGENT_CLASSIFIER_THRESHOLD=1.2`
+- `AGENT_CLASSIFIER_BERT_THRESHOLD=0.0`
+- `AGENT_CLASSIFIER_MODEL_PATH=/path/to/model`
+- `AGENT_CLASSIFIER_LABEL_MAP_PATH=/path/to/label_map.json`
+- `AGENT_CLASSIFIER_REMOTE_URL=http://127.0.0.1:9000/classify`
+- `AGENT_CLASSIFIER_REMOTE_TIMEOUT_SECONDS=3.0`
+- `AGENT_LOCAL_EXECUTE_THRESHOLD=1.65`
+- `AGENT_LOCAL_ROUTE_TO_CLOUD_THRESHOLD=0.75`
+- `AGENT_LOCAL_CLARIFY_MARGIN_THRESHOLD=0.12`
+- `AGENT_PLANNER_BACKEND=heuristic|dashscope`
+- `AGENT_PLANNER_BASE_URL=https://your-base-url/v1`
+- `AGENT_PLANNER_API_KEY=your-api-key`
+- `AGENT_PLANNER_MODEL_NAME=qwen3.5-plus`
+- `AGENT_PLANNER_TIMEOUT_SECONDS=6.0`
+
+Matcher pipeline examples:
+
+- `AGENT_MATCHER_PIPELINE=keyword`
+- `AGENT_MATCHER_PIPELINE=keyword,classifier,retrieval`
+- `AGENT_MATCHER_PIPELINE=keyword,retrieval`
+- `AGENT_MATCHER_PIPELINE=classifier`
+- `AGENT_MATCHER_PIPELINE=retrieval`
+
+Classifier backend examples:
+
+- `AGENT_CLASSIFIER_BACKEND=mock`
+- `AGENT_CLASSIFIER_BACKEND=bert`
+- `AGENT_CLASSIFIER_BACKEND=remote`
+- `AGENT_CLASSIFIER_TOP_K=3`
+
+For local BERT models:
+
+- install optional runtime deps such as `transformers` and a backend like `torch`
+- point `AGENT_CLASSIFIER_MODEL_PATH` to the local model directory
+- if the model outputs labels like `LABEL_0`, provide `AGENT_CLASSIFIER_LABEL_MAP_PATH`
+- use `AGENT_CLASSIFIER_BERT_THRESHOLD` instead of the mock threshold
+
+Example label map:
+
+```json
+{
+ "LABEL_0": "cs_query_order",
+ "LABEL_1": "cs_cancel_order",
+ "LABEL_2": "cabin_play_music"
+}
+```
+
+Remote classifier expected request payload:
+
+```json
+{
+ "text": "我的订单现在什么情况 A808001",
+ "top_k": 3,
+ "labels": ["cs_query_order", "cs_cancel_order", "cabin_play_music"]
+}
+```
+
+Remote classifier response payload:
+
+```json
+{
+ "intent_id": "cs_query_order",
+ "label": "LABEL_0",
+ "score": 0.982,
+ "model_name": "bert-remote-v1",
+ "candidates": [
+ {"label": "LABEL_0", "intent_id": "cs_query_order", "score": 0.982},
+ {"label": "LABEL_1", "intent_id": "cs_cancel_order", "score": 0.011},
+ {"label": "LABEL_7", "intent_id": "cs_query_logistics", "score": 0.007}
+ ]
+}
+```
+
+When `bert` or `remote` is unavailable or below threshold, the classifier falls back to `mock`, and the demo debug panel shows both the attempted backend and the fallback reason.
+
+Planner notes:
+
+- keep the planner key in environment variables, not in source code or front-end code
+- the planner uses `POST {base_url}/chat/completions`
+- for DashScope OpenAI-compatible endpoints, use the compatible `v1` base URL and set `AGENT_PLANNER_BACKEND=dashscope`
+- when cloud planning is unavailable, the service falls back to a local heuristic planner for multi-command splitting
+
+## Next Steps
+
+- Replace rule router with classifier + retrieval + LLM
+- Connect real business plugins
+- Add automated tests
diff --git a/intelligent_cabin/app/__init__.py b/intelligent_cabin/app/__init__.py
new file mode 100644
index 0000000..e9a035a
--- /dev/null
+++ b/intelligent_cabin/app/__init__.py
@@ -0,0 +1 @@
+"""Application package for the intelligent cabin agent service."""
diff --git a/intelligent_cabin/app/__pycache__/__init__.cpython-311.pyc b/intelligent_cabin/app/__pycache__/__init__.cpython-311.pyc
new file mode 100644
index 0000000..e0c9f7e
Binary files /dev/null and b/intelligent_cabin/app/__pycache__/__init__.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/__pycache__/__init__.cpython-312.pyc b/intelligent_cabin/app/__pycache__/__init__.cpython-312.pyc
new file mode 100644
index 0000000..ef3acc6
Binary files /dev/null and b/intelligent_cabin/app/__pycache__/__init__.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/__pycache__/__init__.cpython-313.pyc b/intelligent_cabin/app/__pycache__/__init__.cpython-313.pyc
new file mode 100644
index 0000000..8f695a3
Binary files /dev/null and b/intelligent_cabin/app/__pycache__/__init__.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/__pycache__/main.cpython-311.pyc b/intelligent_cabin/app/__pycache__/main.cpython-311.pyc
new file mode 100644
index 0000000..7bfc6d1
Binary files /dev/null and b/intelligent_cabin/app/__pycache__/main.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/__pycache__/main.cpython-312.pyc b/intelligent_cabin/app/__pycache__/main.cpython-312.pyc
new file mode 100644
index 0000000..abc41a3
Binary files /dev/null and b/intelligent_cabin/app/__pycache__/main.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/__pycache__/main.cpython-313.pyc b/intelligent_cabin/app/__pycache__/main.cpython-313.pyc
new file mode 100644
index 0000000..9795155
Binary files /dev/null and b/intelligent_cabin/app/__pycache__/main.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/core/__init__.py b/intelligent_cabin/app/core/__init__.py
new file mode 100644
index 0000000..732b411
--- /dev/null
+++ b/intelligent_cabin/app/core/__init__.py
@@ -0,0 +1 @@
+"""Core configuration package."""
diff --git a/intelligent_cabin/app/core/__pycache__/__init__.cpython-311.pyc b/intelligent_cabin/app/core/__pycache__/__init__.cpython-311.pyc
new file mode 100644
index 0000000..d69b024
Binary files /dev/null and b/intelligent_cabin/app/core/__pycache__/__init__.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/core/__pycache__/__init__.cpython-312.pyc b/intelligent_cabin/app/core/__pycache__/__init__.cpython-312.pyc
new file mode 100644
index 0000000..65c10fb
Binary files /dev/null and b/intelligent_cabin/app/core/__pycache__/__init__.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/core/__pycache__/__init__.cpython-313.pyc b/intelligent_cabin/app/core/__pycache__/__init__.cpython-313.pyc
new file mode 100644
index 0000000..5d66bb0
Binary files /dev/null and b/intelligent_cabin/app/core/__pycache__/__init__.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/core/__pycache__/bootstrap.cpython-311.pyc b/intelligent_cabin/app/core/__pycache__/bootstrap.cpython-311.pyc
new file mode 100644
index 0000000..78c7293
Binary files /dev/null and b/intelligent_cabin/app/core/__pycache__/bootstrap.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/core/__pycache__/bootstrap.cpython-312.pyc b/intelligent_cabin/app/core/__pycache__/bootstrap.cpython-312.pyc
new file mode 100644
index 0000000..e9c4a44
Binary files /dev/null and b/intelligent_cabin/app/core/__pycache__/bootstrap.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/core/__pycache__/bootstrap.cpython-313.pyc b/intelligent_cabin/app/core/__pycache__/bootstrap.cpython-313.pyc
new file mode 100644
index 0000000..181f2b7
Binary files /dev/null and b/intelligent_cabin/app/core/__pycache__/bootstrap.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/core/__pycache__/config.cpython-311.pyc b/intelligent_cabin/app/core/__pycache__/config.cpython-311.pyc
new file mode 100644
index 0000000..78d9573
Binary files /dev/null and b/intelligent_cabin/app/core/__pycache__/config.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/core/__pycache__/config.cpython-312.pyc b/intelligent_cabin/app/core/__pycache__/config.cpython-312.pyc
new file mode 100644
index 0000000..9220138
Binary files /dev/null and b/intelligent_cabin/app/core/__pycache__/config.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/core/__pycache__/config.cpython-313.pyc b/intelligent_cabin/app/core/__pycache__/config.cpython-313.pyc
new file mode 100644
index 0000000..f854727
Binary files /dev/null and b/intelligent_cabin/app/core/__pycache__/config.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/core/bootstrap.py b/intelligent_cabin/app/core/bootstrap.py
new file mode 100644
index 0000000..4b1e51a
--- /dev/null
+++ b/intelligent_cabin/app/core/bootstrap.py
@@ -0,0 +1,323 @@
+from app.core.config import settings
+from app.plugins.base import PluginRegistry
+from app.plugins.mock import MockPluginExecutor
+from app.services.agent_service import AgentService
+from app.services.classifier import (
+ BertIntentClassifier,
+ IntentClassifier,
+ JointBertIntentClassifier,
+ MockIntentClassifier,
+ RemoteIntentClassifier,
+)
+from app.services.config_loader import ConfigLoader
+from app.services.intent_registry import IntentRegistry
+from app.services.joint_nlu import JointBertNLU
+from app.services.knowledge_llm import DashScopeKnowledgeLLM
+from app.services.knowledge_store import KnowledgeStore
+from app.services.multi_intent_detector import (
+ BertMultiIntentDetector,
+ JointBertMultiIntentDetector,
+ MultiIntentDetector,
+)
+from app.services.planner import (
+ CompositeWorkflowPlanner,
+ DashScopeWorkflowPlanner,
+ HeuristicWorkflowPlanner,
+ TemplateWorkflowPlanner,
+ WorkflowPlanner,
+)
+from app.services.response_policy import ResponsePolicy
+from app.services.rewrite_engine import ContextRewriteEngine
+from app.services.router import (
+ HeuristicSlotExtractor,
+ JointBertSlotExtractor,
+ IntentRouter,
+ Router,
+ build_matcher_pipeline,
+)
+from app.services.session_store import InMemorySessionStore, RedisSessionStore, SessionStore
+from app.services.social import DashScopeSocialResponder, SocialResponder, SocialRouter
+
+
+def build_session_store(session_backend: str | None = None) -> SessionStore:
+ backend = session_backend or settings.session_backend
+ if backend == "memory":
+ return InMemorySessionStore()
+ if backend == "redis":
+ return RedisSessionStore(
+ redis_url=settings.redis_url,
+ key_prefix=settings.redis_key_prefix,
+ ttl_seconds=settings.session_ttl_seconds,
+ )
+ raise ValueError(f"Unsupported session backend: {backend}")
+
+
+def build_router(
+ intent_registry: IntentRegistry,
+ matcher_pipeline: str | None = None,
+ classifier_backend: str | None = None,
+ classifier: IntentClassifier | None = None,
+ joint_nlu: JointBertNLU | None = None,
+) -> Router:
+ active_pipeline = matcher_pipeline or settings.matcher_pipeline
+ matcher_stages = [stage.strip() for stage in active_pipeline.split(",") if stage.strip()]
+ if not matcher_stages:
+ matcher_stages = ["classifier"]
+ if matcher_stages != ["classifier"]:
+ raise ValueError("Only classifier matcher pipeline is supported in bert-first mode")
+ if settings.slot_extractor_backend not in {"heuristic", "joint_bert"}:
+ raise ValueError(f"Unsupported slot extractor backend: {settings.slot_extractor_backend}")
+ classifier = classifier or build_classifier(
+ matcher_pipeline=active_pipeline,
+ classifier_backend=classifier_backend,
+ joint_nlu=joint_nlu,
+ )
+ if settings.slot_extractor_backend == "heuristic":
+ slot_extractor = HeuristicSlotExtractor()
+ else:
+ if joint_nlu is None:
+ raise ValueError("slot_extractor_backend=joint_bert requires a Joint NLU runtime")
+ slot_extractor = JointBertSlotExtractor(joint_nlu)
+ return IntentRouter(
+ matcher=build_matcher_pipeline(
+ intent_registry,
+ matcher_stages,
+ classifier=classifier,
+ route_to_cloud_threshold=settings.local_route_to_cloud_threshold,
+ clarify_margin_threshold=settings.local_clarify_margin_threshold,
+ classifier_execute_score_threshold=settings.local_classifier_execute_score_threshold,
+ classifier_execute_margin_threshold=settings.local_classifier_execute_margin_threshold,
+ ),
+ slot_extractor=slot_extractor,
+ )
+
+
+def build_classifier(
+ matcher_pipeline: str | None = None,
+ classifier_backend: str | None = None,
+ joint_nlu: JointBertNLU | None = None,
+) -> IntentClassifier | None:
+ active_pipeline = matcher_pipeline or settings.matcher_pipeline
+ active_backend = classifier_backend or settings.classifier_backend
+ if "classifier" not in active_pipeline:
+ return None
+ fallback = MockIntentClassifier(
+ threshold=settings.classifier_threshold,
+ top_k=settings.classifier_top_k,
+ )
+ if active_backend == "mock":
+ return fallback
+ if active_backend == "bert":
+ classifier = BertIntentClassifier(
+ model_path=settings.classifier_model_path,
+ threshold=settings.classifier_bert_threshold,
+ label_map_path=settings.classifier_label_map_path or None,
+ fallback=fallback,
+ top_k=settings.classifier_top_k,
+ )
+ if settings.classifier_warmup_enabled:
+ classifier.warmup(settings.classifier_warmup_text)
+ return classifier
+ if active_backend == "joint_bert":
+ runtime = joint_nlu or build_joint_nlu()
+ classifier = JointBertIntentClassifier(
+ nlu=runtime,
+ threshold=settings.joint_nlu_intent_threshold if settings.joint_nlu_intent_threshold > 0 else 0.0,
+ top_k=settings.joint_nlu_top_k,
+ )
+ if settings.classifier_warmup_enabled:
+ classifier.warmup(settings.classifier_warmup_text)
+ return classifier
+ if active_backend == "remote":
+ return RemoteIntentClassifier(
+ endpoint=settings.classifier_remote_url,
+ timeout_seconds=settings.classifier_remote_timeout_seconds,
+ threshold=settings.classifier_threshold,
+ fallback=fallback,
+ label_map_path=settings.classifier_label_map_path or None,
+ top_k=settings.classifier_top_k,
+ )
+ raise ValueError(f"Unsupported classifier backend: {active_backend}")
+
+
+def build_agent_service() -> AgentService:
+ return build_agent_service_with_runtime()
+
+
+def build_agent_service_with_runtime(
+ matcher_pipeline: str | None = None,
+ classifier_backend: str | None = None,
+ session_backend: str | None = None,
+) -> AgentService:
+ runtime_bundle = load_runtime_bundle()
+ intent_registry = runtime_bundle.intent_registry
+ active_classifier_backend = classifier_backend or settings.classifier_backend
+ needs_joint_nlu = active_classifier_backend == "joint_bert" or settings.slot_extractor_backend == "joint_bert"
+ joint_nlu = build_joint_nlu() if needs_joint_nlu else None
+ classifier = build_classifier(
+ matcher_pipeline=matcher_pipeline or settings.matcher_pipeline,
+ classifier_backend=active_classifier_backend,
+ joint_nlu=joint_nlu,
+ )
+ planner_clause_classifier = (
+ classifier
+ if settings.planner_clause_classifier_enabled and active_classifier_backend in {"bert", "remote", "joint_bert"}
+ else None
+ )
+ multi_intent_detector = build_multi_intent_detector(
+ classifier_backend=classifier_backend,
+ joint_nlu=joint_nlu,
+ )
+ plugin_registry = PluginRegistry()
+ MockPluginExecutor().register(plugin_registry)
+ return AgentService(
+ intent_registry=intent_registry,
+ router=build_router(
+ intent_registry,
+ matcher_pipeline=matcher_pipeline,
+ classifier_backend=active_classifier_backend,
+ classifier=classifier,
+ joint_nlu=joint_nlu,
+ ),
+ plugins=plugin_registry,
+ session_store=build_session_store(session_backend=session_backend),
+ rewrite_engine=runtime_bundle.rewrite_engine,
+ response_policy=ResponsePolicy(
+ templates=runtime_bundle.response_templates,
+ intent_hints=runtime_bundle.intent_hints,
+ ),
+ dialog_rules=runtime_bundle.dialog_rules,
+ dialog_act_engine=runtime_bundle.dialog_act_engine,
+ planner=build_planner(
+ runtime_bundle.workflow_templates,
+ clause_classifier=planner_clause_classifier,
+ multi_intent_detector=multi_intent_detector,
+ joint_nlu=joint_nlu,
+ ),
+ social_router=SocialRouter(),
+ social_responder=build_social_responder(),
+ knowledge_llm=build_knowledge_llm(),
+ )
+
+
+def build_intent_registry() -> IntentRegistry:
+ return load_runtime_bundle().intent_registry
+
+
+def load_runtime_bundle():
+ return ConfigLoader(
+ domain_path=settings.domain_config_path,
+ action_path=settings.action_config_path,
+ response_path=settings.response_config_path,
+ form_path=settings.form_config_path,
+ rule_path=settings.rule_config_path,
+ dialog_act_path=settings.dialog_act_config_path,
+ workflow_path=settings.workflow_config_path,
+ legacy_intent_path=settings.intent_config_path,
+ context_rewrite_path=settings.context_rewrite_config_path,
+ ).load()
+
+
+def build_joint_nlu() -> JointBertNLU:
+ runtime = JointBertNLU(
+ model_path=settings.joint_nlu_model_path,
+ intent_threshold=settings.joint_nlu_intent_threshold if settings.joint_nlu_intent_threshold > 0 else None,
+ top_k=settings.joint_nlu_top_k,
+ )
+ if settings.classifier_warmup_enabled:
+ runtime.warmup(settings.classifier_warmup_text)
+ return runtime
+
+
+def build_multi_intent_detector(
+ classifier_backend: str | None = None,
+ joint_nlu: JointBertNLU | None = None,
+) -> MultiIntentDetector | None:
+ active_backend = classifier_backend or settings.classifier_backend
+ if not settings.planner_multi_intent_detector_enabled:
+ return None
+ if active_backend not in {"bert", "joint_bert"}:
+ return None
+ if active_backend == "joint_bert":
+ runtime = joint_nlu or build_joint_nlu()
+ detector = JointBertMultiIntentDetector(
+ nlu=runtime,
+ threshold=settings.planner_multi_intent_detector_threshold if settings.planner_multi_intent_detector_threshold > 0 else None,
+ top_k=settings.planner_multi_intent_detector_top_k,
+ max_labels=settings.planner_multi_intent_detector_max_labels,
+ )
+ if settings.classifier_warmup_enabled:
+ detector.warmup(settings.classifier_warmup_text)
+ return detector
+ detector_model_path = settings.planner_multi_intent_detector_model_path or settings.classifier_model_path
+ detector = BertMultiIntentDetector(
+ model_path=detector_model_path,
+ threshold=settings.planner_multi_intent_detector_threshold,
+ top_k=settings.planner_multi_intent_detector_top_k,
+ max_labels=settings.planner_multi_intent_detector_max_labels,
+ )
+ if settings.classifier_warmup_enabled:
+ detector.warmup(settings.classifier_warmup_text)
+ return detector
+
+
+def build_planner(
+ workflow_templates=None,
+ clause_classifier: IntentClassifier | None = None,
+ multi_intent_detector: MultiIntentDetector | None = None,
+ joint_nlu: JointBertNLU | None = None,
+) -> WorkflowPlanner:
+ template_planner = TemplateWorkflowPlanner(
+ workflow_templates,
+ clause_classifier=clause_classifier,
+ multi_intent_detector=multi_intent_detector,
+ joint_nlu=joint_nlu,
+ classifier_weight=settings.planner_clause_classifier_weight,
+ model_only_threshold=settings.planner_clause_model_only_threshold,
+ )
+ local_first = CompositeWorkflowPlanner(
+ [
+ template_planner,
+ HeuristicWorkflowPlanner(
+ clause_classifier=clause_classifier,
+ multi_intent_detector=multi_intent_detector,
+ joint_nlu=joint_nlu,
+ classifier_weight=settings.planner_clause_classifier_weight,
+ model_only_threshold=settings.planner_clause_model_only_threshold,
+ ),
+ ]
+ )
+ if settings.planner_backend == "heuristic":
+ return local_first
+ if settings.planner_backend == "dashscope":
+ cloud_planner = DashScopeWorkflowPlanner(
+ base_url=settings.planner_base_url,
+ api_key=settings.planner_api_key,
+ model_name=settings.planner_model_name,
+ timeout_seconds=settings.planner_timeout_seconds,
+ fallback=local_first,
+ joint_nlu=joint_nlu,
+ )
+ return CompositeWorkflowPlanner([local_first, cloud_planner])
+ raise ValueError(f"Unsupported planner backend: {settings.planner_backend}")
+
+
+def build_social_responder() -> SocialResponder:
+ return DashScopeSocialResponder(
+ base_url=settings.planner_base_url,
+ api_key=settings.planner_api_key,
+ model_name=settings.planner_model_name,
+ timeout_seconds=settings.planner_timeout_seconds,
+ )
+
+
+def build_knowledge_llm() -> DashScopeKnowledgeLLM:
+ """构建知识库 LLM 问答器(与 planner 共用 DashScope 配置)。"""
+ store = KnowledgeStore(settings.knowledge_dir)
+ return DashScopeKnowledgeLLM(
+ base_url=settings.planner_base_url,
+ api_key=settings.planner_api_key,
+ model_name=settings.planner_model_name,
+ knowledge_store=store,
+ timeout_seconds=12.0,
+ )
diff --git a/intelligent_cabin/app/core/config.py b/intelligent_cabin/app/core/config.py
new file mode 100644
index 0000000..af2e433
--- /dev/null
+++ b/intelligent_cabin/app/core/config.py
@@ -0,0 +1,61 @@
+from pydantic_settings import BaseSettings, SettingsConfigDict
+
+
+class Settings(BaseSettings):
+ app_name: str = "Intelligent Cabin Agent"
+ app_env: str = "dev"
+ app_host: str = "0.0.0.0"
+ app_port: int = 8000
+ intent_config_path: str = "app/data/intents.json"
+ domain_config_path: str = "config/domain.yml"
+ action_config_path: str = "config/actions.yml"
+ response_config_path: str = "config/responses.yml"
+ form_config_path: str = "config/forms.yml"
+ rule_config_path: str = "config/rules.yml"
+ dialog_act_config_path: str = "config/dialog_acts.yml"
+ workflow_config_path: str = "config/workflows.yml"
+ # 本地上下文改写引擎配置(不同设备可切换不同 yml 文件)
+ context_rewrite_config_path: str = "config/context_rewrite.yml"
+ session_backend: str = "memory"
+ redis_url: str = "redis://127.0.0.1:6379/0"
+ redis_key_prefix: str = "agent:session"
+ session_ttl_seconds: int = 86400
+ matcher_pipeline: str = "classifier"
+ slot_extractor_backend: str = "joint_bert"
+ classifier_backend: str = "joint_bert"
+ classifier_threshold: float = 1.2
+ classifier_bert_threshold: float = 0.0
+ classifier_top_k: int = 3
+ classifier_model_path: str = ""
+ classifier_label_map_path: str = ""
+ classifier_warmup_enabled: bool = True
+ classifier_warmup_text: str = "打开车窗"
+ classifier_remote_url: str = ""
+ classifier_remote_timeout_seconds: float = 3.0
+ joint_nlu_model_path: str = "models/local_joint_bert_nlu"
+ joint_nlu_intent_threshold: float = 0.0
+ joint_nlu_top_k: int = 3
+ local_route_to_cloud_threshold: float = 0.75
+ local_clarify_margin_threshold: float = 0.12
+ local_classifier_execute_score_threshold: float = 0.55
+ local_classifier_execute_margin_threshold: float = 0.18
+ planner_backend: str = "heuristic"
+ planner_base_url: str = ""
+ planner_api_key: str = ""
+ planner_model_name: str = ""
+ planner_timeout_seconds: float = 6.0
+ planner_clause_classifier_enabled: bool = True
+ planner_clause_classifier_weight: float = 1.6
+ planner_clause_model_only_threshold: float = 0.62
+ planner_multi_intent_detector_enabled: bool = True
+ planner_multi_intent_detector_model_path: str = ""
+ planner_multi_intent_detector_threshold: float = 0.0
+ planner_multi_intent_detector_top_k: int = 8
+ planner_multi_intent_detector_max_labels: int = 4
+ # 本地知识库目录(存放 .md 格式知识文档)
+ knowledge_dir: str = "config/knowledge"
+
+ model_config = SettingsConfigDict(env_file=".env", env_prefix="AGENT_")
+
+
+settings = Settings()
diff --git a/intelligent_cabin/app/data/bert_intent_eval_independent.jsonl b/intelligent_cabin/app/data/bert_intent_eval_independent.jsonl
new file mode 100644
index 0000000..7ed55df
--- /dev/null
+++ b/intelligent_cabin/app/data/bert_intent_eval_independent.jsonl
@@ -0,0 +1,42 @@
+{"text":"空调先别吹了,关掉吧","expected_label":"cabin_ac_off","category":"business"}
+{"text":"车里有点闷,把冷气开起来","expected_label":"cabin_ac_on","category":"business"}
+{"text":"前挡有雾,赶紧除一下","expected_label":"cabin_defog_front_on","category":"business"}
+{"text":"后玻璃起雾了,开后挡除雾","expected_label":"cabin_defog_rear_on","category":"business"}
+{"text":"风太猛了,给我调小一档","expected_label":"cabin_fan_down","category":"business"}
+{"text":"出风再大一点","expected_label":"cabin_fan_up","category":"business"}
+{"text":"把灯熄了吧","expected_label":"cabin_lights_off","category":"business"}
+{"text":"天快黑了,把大灯打开","expected_label":"cabin_lights_on","category":"business"}
+{"text":"锁上所有车门","expected_label":"cabin_lock_doors","category":"business"}
+{"text":"两边后视镜收起来","expected_label":"cabin_mirror_fold","category":"business"}
+{"text":"把后视镜展开准备出发","expected_label":"cabin_mirror_unfold","category":"business"}
+{"text":"路线不用导了,结束导航","expected_label":"cabin_nav_cancel","category":"business"}
+{"text":"直接带我去龙阳路地铁站","expected_label":"cabin_nav_to","category":"business"}
+{"text":"这首不想听了,切到下一首","expected_label":"cabin_next_track","category":"business"}
+{"text":"音乐先停一下","expected_label":"cabin_pause_music","category":"business"}
+{"text":"放点适合夜里开车听的歌","expected_label":"cabin_play_music","category":"business"}
+{"text":"切回上一首","expected_label":"cabin_previous_track","category":"business"}
+{"text":"座椅加热可以关了","expected_label":"cabin_seat_heat_off","category":"business"}
+{"text":"主驾座椅加热打开","expected_label":"cabin_seat_heat_on","category":"business"}
+{"text":"把车内温度定在二十二度","expected_label":"cabin_set_ac","category":"business"}
+{"text":"天窗给我合上","expected_label":"cabin_sunroof_close","category":"business"}
+{"text":"把天窗翘起来透透气","expected_label":"cabin_sunroof_open","category":"business"}
+{"text":"车门解锁一下","expected_label":"cabin_unlock_doors","category":"business"}
+{"text":"声音太响了,压低点","expected_label":"cabin_volume_down","category":"business"}
+{"text":"音响直接静音","expected_label":"cabin_volume_mute","category":"business"}
+{"text":"把媒体音量往上加","expected_label":"cabin_volume_up","category":"business"}
+{"text":"把四个窗都关严","expected_label":"cabin_window_close","category":"business"}
+{"text":"左前窗打开一点","expected_label":"cabin_window_open","category":"business"}
+{"text":"雨停了,把雨刮停掉","expected_label":"cabin_wiper_off","category":"business"}
+{"text":"开始刮雨刷","expected_label":"cabin_wiper_on","category":"business"}
+{"text":"订单A551201别发了,撤单","expected_label":"cs_cancel_order","category":"business"}
+{"text":"A661202这个包裹送到哪了","expected_label":"cs_query_logistics","category":"business"}
+{"text":"帮我看看A771203这单处理进度","expected_label":"cs_query_order","category":"business"}
+{"text":"这个事情我要真人来跟进","expected_label":"cs_transfer_human","category":"business"}
+{"text":"你好呀","expected_label":"__social__","category":"social"}
+{"text":"早上好,今天心情不错","expected_label":"__social__","category":"social"}
+{"text":"你叫什么名字来着","expected_label":"__social__","category":"social"}
+{"text":"今天天气挺舒服的","expected_label":"__social__","category":"social"}
+{"text":"帮我点份炸鸡外卖","expected_label":"__out_of_scope__","category":"out_of_scope"}
+{"text":"给我订明晚的酒店","expected_label":"__out_of_scope__","category":"out_of_scope"}
+{"text":"人活着的意义是什么","expected_label":"__out_of_scope__","category":"out_of_scope"}
+{"text":"推荐一部悬疑电影","expected_label":"__out_of_scope__","category":"out_of_scope"}
diff --git a/intelligent_cabin/app/data/bert_intent_multilabel_eval_independent.jsonl b/intelligent_cabin/app/data/bert_intent_multilabel_eval_independent.jsonl
new file mode 100644
index 0000000..ac3cd32
--- /dev/null
+++ b/intelligent_cabin/app/data/bert_intent_multilabel_eval_independent.jsonl
@@ -0,0 +1,37 @@
+{"text":"车里闷,给我透个气,再放点轻松的歌","expected_intent_ids":["cabin_window_open","cabin_play_music"],"category":"cabin_parallel"}
+{"text":"先把空调开起来,顺手把窗户关好","expected_intent_ids":["cabin_ac_on","cabin_window_close"],"category":"cabin_parallel"}
+{"text":"带我去公司,路上播点民谣","expected_intent_ids":["cabin_nav_to","cabin_play_music"],"category":"cabin_parallel"}
+{"text":"有点热,把温度打到二十一度,再来点音乐","expected_intent_ids":["cabin_set_ac","cabin_play_music"],"category":"cabin_parallel"}
+{"text":"导航去虹桥站,然后把空调打开","expected_intent_ids":["cabin_nav_to","cabin_ac_on"],"category":"cabin_sequence"}
+{"text":"前挡看不清了,开除雾,风也加大一点","expected_intent_ids":["cabin_defog_front_on","cabin_fan_up"],"category":"cabin_parallel"}
+{"text":"后面玻璃有雾,先除雾,再把窗关上","expected_intent_ids":["cabin_defog_rear_on","cabin_window_close"],"category":"cabin_sequence"}
+{"text":"把空调开了,风别太小,再来首歌","expected_intent_ids":["cabin_ac_on","cabin_fan_up","cabin_play_music"],"category":"cabin_parallel"}
+{"text":"去浦东机场,车里凉一点,顺便放点歌","expected_intent_ids":["cabin_nav_to","cabin_set_ac","cabin_play_music"],"category":"cabin_parallel"}
+{"text":"先开一点窗,别那么闷,再把温度调低","expected_intent_ids":["cabin_window_open","cabin_set_ac"],"category":"cabin_parallel"}
+{"text":"把四个窗都关了,然后播点轻音乐","expected_intent_ids":["cabin_window_close","cabin_play_music"],"category":"cabin_sequence"}
+{"text":"把天窗打开透口气,再开空调","expected_intent_ids":["cabin_sunroof_open","cabin_ac_on"],"category":"cabin_parallel"}
+{"text":"开导航去徐家汇,顺便把风量调大","expected_intent_ids":["cabin_nav_to","cabin_fan_up"],"category":"cabin_parallel"}
+{"text":"音乐停一下,然后导航到公司","expected_intent_ids":["cabin_pause_music","cabin_nav_to"],"category":"cabin_sequence"}
+{"text":"锁车门,再把后视镜收起来","expected_intent_ids":["cabin_lock_doors","cabin_mirror_fold"],"category":"cabin_sequence"}
+{"text":"把车门解锁,再把镜子展开","expected_intent_ids":["cabin_unlock_doors","cabin_mirror_unfold"],"category":"cabin_sequence"}
+{"text":"路线别导了,音乐也停一下","expected_intent_ids":["cabin_nav_cancel","cabin_pause_music"],"category":"cabin_parallel"}
+{"text":"温度调到二十三度,风稍微小一点","expected_intent_ids":["cabin_set_ac","cabin_fan_down"],"category":"cabin_parallel"}
+{"text":"查下订单A812301,如果还没发货就取消掉","expected_intent_ids":["cs_query_order","cs_cancel_order"],"category":"cs_conditional"}
+{"text":"帮我看A812302物流,要是太慢就转人工","expected_intent_ids":["cs_query_logistics","cs_transfer_human"],"category":"cs_conditional"}
+{"text":"先查一下A812303这单进度,再帮我转人工客服","expected_intent_ids":["cs_query_order","cs_transfer_human"],"category":"cs_sequence"}
+{"text":"订单A812304先查下状态,再看看物流到了哪","expected_intent_ids":["cs_query_order","cs_query_logistics"],"category":"cs_sequence"}
+{"text":"我想先看看A812305有没有发货,没发的话直接撤单","expected_intent_ids":["cs_query_order","cs_cancel_order"],"category":"cs_conditional"}
+{"text":"把空调关掉","expected_intent_ids":["cabin_ac_off"],"category":"single_guard"}
+{"text":"帮我开一下前挡除雾","expected_intent_ids":["cabin_defog_front_on"],"category":"single_guard"}
+{"text":"风太大了,往小调一点","expected_intent_ids":["cabin_fan_down"],"category":"single_guard"}
+{"text":"给我导航到龙阳路","expected_intent_ids":["cabin_nav_to"],"category":"single_guard"}
+{"text":"来点轻音乐","expected_intent_ids":["cabin_play_music"],"category":"single_guard"}
+{"text":"把左前窗降一点","expected_intent_ids":["cabin_window_open"],"category":"single_guard"}
+{"text":"订单A812306不要了,直接取消","expected_intent_ids":["cs_cancel_order"],"category":"single_guard"}
+{"text":"A812307这个快递到哪了","expected_intent_ids":["cs_query_logistics"],"category":"single_guard"}
+{"text":"导航去公司,再把空调开开,歌也放起来","expected_intent_ids":["cabin_nav_to","cabin_ac_on","cabin_play_music"],"category":"cabin_parallel"}
+{"text":"把雨刮打开,顺便关下车窗","expected_intent_ids":["cabin_wiper_on","cabin_window_close"],"category":"cabin_parallel"}
+{"text":"雨停了,雨刮关掉,再把窗开一点","expected_intent_ids":["cabin_wiper_off","cabin_window_open"],"category":"cabin_sequence"}
+{"text":"把天窗合上,然后把音乐暂停","expected_intent_ids":["cabin_sunroof_close","cabin_pause_music"],"category":"cabin_sequence"}
+{"text":"先把音量调大,再切下一首","expected_intent_ids":["cabin_volume_up","cabin_next_track"],"category":"cabin_parallel"}
+{"text":"静音之后切回上一首","expected_intent_ids":["cabin_volume_mute","cabin_previous_track"],"category":"cabin_sequence"}
diff --git a/intelligent_cabin/app/data/bert_intent_multilabel_train.jsonl b/intelligent_cabin/app/data/bert_intent_multilabel_train.jsonl
new file mode 100644
index 0000000..423119c
--- /dev/null
+++ b/intelligent_cabin/app/data/bert_intent_multilabel_train.jsonl
@@ -0,0 +1,72 @@
+{"text": "打开车窗并播放音乐", "intent_ids": ["cabin_window_open", "cabin_play_music"]}
+{"text": "把空调打开然后开下车窗", "intent_ids": ["cabin_ac_on", "cabin_window_open"]}
+{"text": "导航去公司再来点轻音乐", "intent_ids": ["cabin_nav_to", "cabin_play_music"]}
+{"text": "把空调调到22度并播放周杰伦", "intent_ids": ["cabin_set_ac", "cabin_play_music"]}
+{"text": "打开空调顺便把车窗关上", "intent_ids": ["cabin_ac_on", "cabin_window_close"]}
+{"text": "导航去虹桥机场然后把空调调到21度", "intent_ids": ["cabin_nav_to", "cabin_set_ac"]}
+{"text": "开下窗,再来首歌", "intent_ids": ["cabin_window_open", "cabin_play_music"]}
+{"text": "空调开起来,风再大一点", "intent_ids": ["cabin_ac_on", "cabin_fan_up"]}
+{"text": "把空调调低一点,再把风量开大", "intent_ids": ["cabin_set_ac", "cabin_fan_up"]}
+{"text": "外面太吵了,关窗,然后放点轻音乐", "intent_ids": ["cabin_window_close", "cabin_play_music"]}
+{"text": "前挡起雾了,开除雾,再把风量调大", "intent_ids": ["cabin_defog_front_on", "cabin_fan_up"]}
+{"text": "后挡有雾,除一下,再把窗户关好", "intent_ids": ["cabin_defog_rear_on", "cabin_window_close"]}
+{"text": "把空调设到24度,顺便透透气", "intent_ids": ["cabin_set_ac", "cabin_window_open"]}
+{"text": "导航到公司并打开空调", "intent_ids": ["cabin_nav_to", "cabin_ac_on"]}
+{"text": "去徐家汇,车里太热了顺便降温", "intent_ids": ["cabin_nav_to", "cabin_set_ac"]}
+{"text": "来点歌,再把车窗打开一点", "intent_ids": ["cabin_play_music", "cabin_window_open"]}
+{"text": "把风量调小一点,然后放点音乐", "intent_ids": ["cabin_fan_down", "cabin_play_music"]}
+{"text": "开空调,关窗,播放轻音乐", "intent_ids": ["cabin_ac_on", "cabin_window_close", "cabin_play_music"]}
+{"text": "导航去最近的充电站,再开一点窗透气", "intent_ids": ["cabin_nav_to", "cabin_window_open"]}
+{"text": "把温度调到20度,关上车窗,再来一首夜曲", "intent_ids": ["cabin_set_ac", "cabin_window_close", "cabin_play_music"]}
+{"text": "查一下订单A700001,如果还没发货就取消", "intent_ids": ["cs_query_order", "cs_cancel_order"]}
+{"text": "帮我看下A700002这单物流,没到的话转人工", "intent_ids": ["cs_query_logistics", "cs_transfer_human"]}
+{"text": "查下订单A700003现在啥情况,然后帮我转人工", "intent_ids": ["cs_query_order", "cs_transfer_human"]}
+{"text": "先查订单A700004,再查物流进度", "intent_ids": ["cs_query_order", "cs_query_logistics"]}
+{"text": "打开空调并导航去公司再放点歌", "intent_ids": ["cabin_ac_on", "cabin_nav_to", "cabin_play_music"]}
+{"text": "帮我透透气,然后把温度调到21度", "intent_ids": ["cabin_window_open", "cabin_set_ac"]}
+{"text": "开前挡除雾,再把风开大一点", "intent_ids": ["cabin_defog_front_on", "cabin_fan_up"]}
+{"text": "后窗除雾后把车窗关上", "intent_ids": ["cabin_defog_rear_on", "cabin_window_close"]}
+{"text": "导航到浦东机场,空调开一下,来点民谣", "intent_ids": ["cabin_nav_to", "cabin_ac_on", "cabin_play_music"]}
+{"text": "把车里弄凉快点,顺便放点轻音乐", "intent_ids": ["cabin_set_ac", "cabin_play_music"]}
+{"text": "打开车窗和空调", "intent_ids": ["cabin_window_open", "cabin_ac_on"]}
+{"text": "开窗和开空调", "intent_ids": ["cabin_window_open", "cabin_ac_on"]}
+{"text": "把车窗打开,空调也打开", "intent_ids": ["cabin_window_open", "cabin_ac_on"]}
+{"text": "车里闷,给我透个气,再放点轻松的歌", "intent_ids": ["cabin_window_open", "cabin_play_music"]}
+{"text": "透透气,再来一首黄昏", "intent_ids": ["cabin_window_open", "cabin_play_music"]}
+{"text": "先把空调开起来,顺手把窗户关好", "intent_ids": ["cabin_ac_on", "cabin_window_close"]}
+{"text": "带我去公司,路上播点民谣", "intent_ids": ["cabin_nav_to", "cabin_play_music"]}
+{"text": "有点热,把温度打到二十一度,再来点音乐", "intent_ids": ["cabin_set_ac", "cabin_play_music"]}
+{"text": "导航去虹桥站,然后把空调打开", "intent_ids": ["cabin_nav_to", "cabin_ac_on"]}
+{"text": "前挡看不清了,开除雾,风也加大一点", "intent_ids": ["cabin_defog_front_on", "cabin_fan_up"]}
+{"text": "后面玻璃有雾,先除雾,再把窗关上", "intent_ids": ["cabin_defog_rear_on", "cabin_window_close"]}
+{"text": "把空调开了,风别太小,再来首歌", "intent_ids": ["cabin_ac_on", "cabin_fan_up", "cabin_play_music"]}
+{"text": "去浦东机场,车里凉一点,顺便放点歌", "intent_ids": ["cabin_nav_to", "cabin_set_ac", "cabin_play_music"]}
+{"text": "先开一点窗,别那么闷,再把温度调低", "intent_ids": ["cabin_window_open", "cabin_set_ac"]}
+{"text": "把四个窗都关了,然后播点轻音乐", "intent_ids": ["cabin_window_close", "cabin_play_music"]}
+{"text": "把天窗打开透口气,再开空调", "intent_ids": ["cabin_sunroof_open", "cabin_ac_on"]}
+{"text": "开导航去徐家汇,顺便把风量调大", "intent_ids": ["cabin_nav_to", "cabin_fan_up"]}
+{"text": "音乐停一下,然后导航到公司", "intent_ids": ["cabin_pause_music", "cabin_nav_to"]}
+{"text": "锁车门,再把后视镜收起来", "intent_ids": ["cabin_lock_doors", "cabin_mirror_fold"]}
+{"text": "把车门解锁,再把镜子展开", "intent_ids": ["cabin_unlock_doors", "cabin_mirror_unfold"]}
+{"text": "路线别导了,音乐也停一下", "intent_ids": ["cabin_nav_cancel", "cabin_pause_music"]}
+{"text": "温度调到二十三度,风稍微小一点", "intent_ids": ["cabin_set_ac", "cabin_fan_down"]}
+{"text": "查下订单A812301,如果还没发货就取消掉", "intent_ids": ["cs_query_order", "cs_cancel_order"]}
+{"text": "帮我看A812302物流,要是太慢就转人工", "intent_ids": ["cs_query_logistics", "cs_transfer_human"]}
+{"text": "先查一下A812303这单进度,再帮我转人工客服", "intent_ids": ["cs_query_order", "cs_transfer_human"]}
+{"text": "订单A812304先查下状态,再看看物流到了哪", "intent_ids": ["cs_query_order", "cs_query_logistics"]}
+{"text": "我想先看看A812305有没有发货,没发的话直接撤单", "intent_ids": ["cs_query_order", "cs_cancel_order"]}
+{"text": "导航去公司,再把空调开开,歌也放起来", "intent_ids": ["cabin_nav_to", "cabin_ac_on", "cabin_play_music"]}
+{"text": "把雨刮打开,顺便关下车窗", "intent_ids": ["cabin_wiper_on", "cabin_window_close"]}
+{"text": "雨停了,雨刮关掉,再把窗开一点", "intent_ids": ["cabin_wiper_off", "cabin_window_open"]}
+{"text": "把天窗合上,然后把音乐暂停", "intent_ids": ["cabin_sunroof_close", "cabin_pause_music"]}
+{"text": "先把音量调大,再切下一首", "intent_ids": ["cabin_volume_up", "cabin_next_track"]}
+{"text": "静音之后切回上一首", "intent_ids": ["cabin_volume_mute", "cabin_previous_track"]}
+{"text": "来点music", "intent_ids": ["cabin_play_music"]}
+{"text": "来点音乐,想听黄昏", "intent_ids": ["cabin_play_music"]}
+{"text": "放周杰伦的黄昏", "intent_ids": ["cabin_play_music"]}
+{"text": "来一首黄昏", "intent_ids": ["cabin_play_music"]}
+{"text": "给我放黄昏", "intent_ids": ["cabin_play_music"]}
+{"text": "开窗顺便放点歌", "intent_ids": ["cabin_window_open", "cabin_play_music"]}
+{"text": "导航到公司同时放点轻音乐", "intent_ids": ["cabin_nav_to", "cabin_play_music"]}
+{"text": "空调打开再把风量调大", "intent_ids": ["cabin_ac_on", "cabin_fan_up"]}
+{"text": "关窗再暂停音乐", "intent_ids": ["cabin_window_close", "cabin_pause_music"]}
diff --git a/intelligent_cabin/app/data/bert_intent_test.jsonl b/intelligent_cabin/app/data/bert_intent_test.jsonl
new file mode 100644
index 0000000..b231ed8
--- /dev/null
+++ b/intelligent_cabin/app/data/bert_intent_test.jsonl
@@ -0,0 +1,35 @@
+{"text":"查一下订单A700001现在什么状态","intent_id":"cs_query_order"}
+{"text":"我的订单A700002到哪一步了","intent_id":"cs_query_order"}
+{"text":"帮我看看A700003这个订单","intent_id":"cs_query_order"}
+{"text":"订单A700004现在处理到哪里","intent_id":"cs_query_order"}
+{"text":"确认下A700005订单状态","intent_id":"cs_query_order"}
+{"text":"帮我查A800001物流进度","intent_id":"cs_query_logistics"}
+{"text":"快递A800002到哪儿了","intent_id":"cs_query_logistics"}
+{"text":"看看A800003配送状态","intent_id":"cs_query_logistics"}
+{"text":"订单A800004物流更新了吗","intent_id":"cs_query_logistics"}
+{"text":"查询A800005的快递信息","intent_id":"cs_query_logistics"}
+{"text":"帮我取消A900001这个订单","intent_id":"cs_cancel_order"}
+{"text":"A900002别要了给我撤销","intent_id":"cs_cancel_order"}
+{"text":"把订单A900003取消掉","intent_id":"cs_cancel_order"}
+{"text":"我不要A900004了","intent_id":"cs_cancel_order"}
+{"text":"撤销一下A900005订单","intent_id":"cs_cancel_order"}
+{"text":"我要找人工客服处理","intent_id":"cs_transfer_human"}
+{"text":"现在转人工","intent_id":"cs_transfer_human"}
+{"text":"麻烦给我接人工服务","intent_id":"cs_transfer_human"}
+{"text":"帮我呼叫真人客服","intent_id":"cs_transfer_human"}
+{"text":"别机器人了我要人工","intent_id":"cs_transfer_human"}
+{"text":"导航到公司停车场","intent_id":"cabin_nav_to"}
+{"text":"带我去浦东机场T2","intent_id":"cabin_nav_to"}
+{"text":"去最近的服务区","intent_id":"cabin_nav_to"}
+{"text":"我要去徐家汇","intent_id":"cabin_nav_to"}
+{"text":"开导航去虹桥机场","intent_id":"cabin_nav_to"}
+{"text":"把空调设到22度","intent_id":"cabin_set_ac"}
+{"text":"车里温度调成24度","intent_id":"cabin_set_ac"}
+{"text":"冷气开到20度","intent_id":"cabin_set_ac"}
+{"text":"空调给我调低一点到21度","intent_id":"cabin_set_ac"}
+{"text":"温度改成23度","intent_id":"cabin_set_ac"}
+{"text":"播放一首轻音乐","intent_id":"cabin_play_music"}
+{"text":"来点周杰伦的歌","intent_id":"cabin_play_music"}
+{"text":"放一首夜曲","intent_id":"cabin_play_music"}
+{"text":"我想听摇滚","intent_id":"cabin_play_music"}
+{"text":"给我播点古典音乐","intent_id":"cabin_play_music"}
diff --git a/intelligent_cabin/app/data/bert_intent_train.jsonl b/intelligent_cabin/app/data/bert_intent_train.jsonl
new file mode 100644
index 0000000..7c981c1
--- /dev/null
+++ b/intelligent_cabin/app/data/bert_intent_train.jsonl
@@ -0,0 +1,118 @@
+{"text":"帮我查一下订单A123456","intent_id":"cs_query_order"}
+{"text":"查询订单A765432现在到哪一步了","intent_id":"cs_query_order"}
+{"text":"我的订单A998877是什么状态","intent_id":"cs_query_order"}
+{"text":"帮我看看订单A556677","intent_id":"cs_query_order"}
+{"text":"查下订单A112233","intent_id":"cs_query_order"}
+{"text":"订单A456789现在怎么样","intent_id":"cs_query_order"}
+{"text":"我想查订单A333444","intent_id":"cs_query_order"}
+{"text":"看看订单A909090进度","intent_id":"cs_query_order"}
+{"text":"订单A202501状态","intent_id":"cs_query_order"}
+{"text":"帮我确认一下订单A808001","intent_id":"cs_query_order"}
+{"text":"查物流A123456","intent_id":"cs_query_logistics"}
+{"text":"帮我看订单A765432物流","intent_id":"cs_query_logistics"}
+{"text":"快递A998877到哪了","intent_id":"cs_query_logistics"}
+{"text":"物流A556677现在什么情况","intent_id":"cs_query_logistics"}
+{"text":"查一下快递单A112233","intent_id":"cs_query_logistics"}
+{"text":"看看A456789物流信息","intent_id":"cs_query_logistics"}
+{"text":"订单A333444的快递到了吗","intent_id":"cs_query_logistics"}
+{"text":"帮我查查A909090配送进度","intent_id":"cs_query_logistics"}
+{"text":"物流单号A202501现在在哪里","intent_id":"cs_query_logistics"}
+{"text":"我的订单A808001物流到了哪","intent_id":"cs_query_logistics"}
+{"text":"帮我取消订单A123456","intent_id":"cs_cancel_order"}
+{"text":"取消一下A765432这个订单","intent_id":"cs_cancel_order"}
+{"text":"撤销订单A998877","intent_id":"cs_cancel_order"}
+{"text":"订单A556677我不要了","intent_id":"cs_cancel_order"}
+{"text":"把A112233这个订单取消掉","intent_id":"cs_cancel_order"}
+{"text":"我想退掉并取消A456789","intent_id":"cs_cancel_order"}
+{"text":"帮我撤回订单A333444","intent_id":"cs_cancel_order"}
+{"text":"A909090别发了直接取消","intent_id":"cs_cancel_order"}
+{"text":"取消订单号A202501","intent_id":"cs_cancel_order"}
+{"text":"把A808001撤销了","intent_id":"cs_cancel_order"}
+{"text":"帮我转人工客服","intent_id":"cs_transfer_human"}
+{"text":"我要人工服务","intent_id":"cs_transfer_human"}
+{"text":"接人工","intent_id":"cs_transfer_human"}
+{"text":"帮我联系人工客服","intent_id":"cs_transfer_human"}
+{"text":"转接人工处理","intent_id":"cs_transfer_human"}
+{"text":"这个问题我要找人工","intent_id":"cs_transfer_human"}
+{"text":"给我人工坐席","intent_id":"cs_transfer_human"}
+{"text":"不要机器人了转人工","intent_id":"cs_transfer_human"}
+{"text":"请给我人工客服","intent_id":"cs_transfer_human"}
+{"text":"帮我找真人客服","intent_id":"cs_transfer_human"}
+{"text":"导航去公司","intent_id":"cabin_nav_to"}
+{"text":"带我去机场","intent_id":"cabin_nav_to"}
+{"text":"去虹桥火车站","intent_id":"cabin_nav_to"}
+{"text":"导航到世纪大道","intent_id":"cabin_nav_to"}
+{"text":"帮我开车去陆家嘴","intent_id":"cabin_nav_to"}
+{"text":"去最近的充电站","intent_id":"cabin_nav_to"}
+{"text":"带我到南京东路","intent_id":"cabin_nav_to"}
+{"text":"导航去浦东机场","intent_id":"cabin_nav_to"}
+{"text":"去静安寺","intent_id":"cabin_nav_to"}
+{"text":"我要去公司园区","intent_id":"cabin_nav_to"}
+{"text":"把空调调到22度","intent_id":"cabin_set_ac"}
+{"text":"空调设成24度","intent_id":"cabin_set_ac"}
+{"text":"温度调低到20度","intent_id":"cabin_set_ac"}
+{"text":"车里空调开到23度","intent_id":"cabin_set_ac"}
+{"text":"帮我把车内温度设置为21度","intent_id":"cabin_set_ac"}
+{"text":"空调打到25度","intent_id":"cabin_set_ac"}
+{"text":"把冷气调成19度","intent_id":"cabin_set_ac"}
+{"text":"把空调温度改为26度","intent_id":"cabin_set_ac"}
+{"text":"车内设到18度","intent_id":"cabin_set_ac"}
+{"text":"温度给我设成22度","intent_id":"cabin_set_ac"}
+{"text":"播放轻音乐","intent_id":"cabin_play_music"}
+{"text":"来点歌","intent_id":"cabin_play_music"}
+{"text":"帮我放首歌","intent_id":"cabin_play_music"}
+{"text":"我想听周杰伦","intent_id":"cabin_play_music"}
+{"text":"来一首夜曲","intent_id":"cabin_play_music"}
+{"text":"放点摇滚","intent_id":"cabin_play_music"}
+{"text":"听一下古典音乐","intent_id":"cabin_play_music"}
+{"text":"给我播轻音乐","intent_id":"cabin_play_music"}
+{"text":"来点民谣","intent_id":"cabin_play_music"}
+{"text":"播放默认歌单","intent_id":"cabin_play_music"}
+{"text":"订单A310001现在受理了吗","intent_id":"cs_query_order"}
+{"text":"帮我看下A310002这单进展","intent_id":"cs_query_order"}
+{"text":"A310003这个订单处理到哪了","intent_id":"cs_query_order"}
+{"text":"查询一下订单A310004当前状态","intent_id":"cs_query_order"}
+{"text":"订单A310005现在啥情况","intent_id":"cs_query_order"}
+{"text":"帮我确认A310006订单有没有在处理","intent_id":"cs_query_order"}
+{"text":"A310007这笔订单最新进度是什么","intent_id":"cs_query_order"}
+{"text":"看看订单A310008有没有结果","intent_id":"cs_query_order"}
+{"text":"订单A320001物流到哪了","intent_id":"cs_query_logistics"}
+{"text":"帮我查A320002这单配送进度","intent_id":"cs_query_logistics"}
+{"text":"A320003快递现在运到哪里了","intent_id":"cs_query_logistics"}
+{"text":"看一下订单A320004有没有派件","intent_id":"cs_query_logistics"}
+{"text":"A320005物流轨迹更新了吗","intent_id":"cs_query_logistics"}
+{"text":"帮我追踪一下A320006运输状态","intent_id":"cs_query_logistics"}
+{"text":"订单A320007快件到哪一步了","intent_id":"cs_query_logistics"}
+{"text":"A320008这单现在送到哪儿了","intent_id":"cs_query_logistics"}
+{"text":"查一下A320009的派送信息","intent_id":"cs_query_logistics"}
+{"text":"A320010物流有没有新动态","intent_id":"cs_query_logistics"}
+{"text":"订单A330001不要了,帮我撤单","intent_id":"cs_cancel_order"}
+{"text":"A330002这单别发了直接取消","intent_id":"cs_cancel_order"}
+{"text":"把订单A330003停掉吧","intent_id":"cs_cancel_order"}
+{"text":"A330004这个订单我不想要了","intent_id":"cs_cancel_order"}
+{"text":"订单A330005给我撤回","intent_id":"cs_cancel_order"}
+{"text":"把A330006这笔订单关掉","intent_id":"cs_cancel_order"}
+{"text":"A330007先别发货了,取消掉","intent_id":"cs_cancel_order"}
+{"text":"帮我把订单A330008作废","intent_id":"cs_cancel_order"}
+{"text":"A330009这单不要了","intent_id":"cs_cancel_order"}
+{"text":"订单A330010撤单处理","intent_id":"cs_cancel_order"}
+{"text":"这个问题给我人工跟进","intent_id":"cs_transfer_human"}
+{"text":"安排真人客服接手","intent_id":"cs_transfer_human"}
+{"text":"机器人处理不了,转人工","intent_id":"cs_transfer_human"}
+{"text":"帮我叫个客服专员","intent_id":"cs_transfer_human"}
+{"text":"我要人工来处理这事","intent_id":"cs_transfer_human"}
+{"text":"规划路线去虹桥机场T2","intent_id":"cabin_nav_to"}
+{"text":"直接开去公司停车场","intent_id":"cabin_nav_to"}
+{"text":"给我导到最近的充电站","intent_id":"cabin_nav_to"}
+{"text":"徐家汇怎么走,导航一下","intent_id":"cabin_nav_to"}
+{"text":"出发去外滩","intent_id":"cabin_nav_to"}
+{"text":"把车内温度设为20度","intent_id":"cabin_set_ac"}
+{"text":"空调温度改到21度","intent_id":"cabin_set_ac"}
+{"text":"冷气帮我调到22度","intent_id":"cabin_set_ac"}
+{"text":"舱内调成23度","intent_id":"cabin_set_ac"}
+{"text":"给我把温度定在24度","intent_id":"cabin_set_ac"}
+{"text":"随机放点轻音乐","intent_id":"cabin_play_music"}
+{"text":"帮我播首晴天","intent_id":"cabin_play_music"}
+{"text":"来点适合开车听的民谣","intent_id":"cabin_play_music"}
+{"text":"打开音乐,放夜曲","intent_id":"cabin_play_music"}
+{"text":"给我放一些爵士","intent_id":"cabin_play_music"}
diff --git a/intelligent_cabin/app/data/intents.json b/intelligent_cabin/app/data/intents.json
new file mode 100644
index 0000000..5375e1f
--- /dev/null
+++ b/intelligent_cabin/app/data/intents.json
@@ -0,0 +1,352 @@
+[
+ {
+ "intent_id": "cs_query_order",
+ "plugin_id": "plugin.order.query",
+ "domain": "customer_service",
+ "risk_level": "low",
+ "required_slots": ["order_id"],
+ "ask_templates": {
+ "order_id": "请提供订单号。"
+ },
+ "keywords": ["查询订单", "查订单", "订单状态"],
+ "examples": ["帮我查一下订单", "我的订单到哪一步了", "查下订单状态"]
+ },
+ {
+ "intent_id": "cs_query_logistics",
+ "plugin_id": "plugin.logistics.query",
+ "domain": "customer_service",
+ "risk_level": "low",
+ "required_slots": ["order_id"],
+ "ask_templates": {
+ "order_id": "请提供订单号。"
+ },
+ "keywords": ["查物流", "物流", "快递"],
+ "examples": ["帮我查一下快递", "看看物流到哪了", "快递什么时候到"]
+ },
+ {
+ "intent_id": "cs_cancel_order",
+ "plugin_id": "plugin.order.cancel",
+ "domain": "customer_service",
+ "risk_level": "medium",
+ "required_slots": ["order_id"],
+ "ask_templates": {
+ "order_id": "请提供要取消的订单号。"
+ },
+ "keywords": ["取消订单", "撤销订单"],
+ "examples": ["帮我取消这个订单", "我不想要了取消吧", "撤销刚才的订单"]
+ },
+ {
+ "intent_id": "cs_transfer_human",
+ "plugin_id": "plugin.service.transfer_human",
+ "domain": "customer_service",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["转人工", "人工客服", "联系客服"],
+ "examples": ["我要人工客服", "帮我转人工", "联系客服"]
+ },
+ {
+ "intent_id": "cabin_nav_cancel",
+ "plugin_id": "plugin.cabin.navigation.cancel",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["取消导航", "结束导航", "停止导航"],
+ "examples": ["把导航关掉", "退出导航", "别导航了"]
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "plugin_id": "plugin.cabin.navigation",
+ "domain": "cabin",
+ "risk_level": "medium",
+ "required_slots": ["destination"],
+ "ask_templates": {
+ "destination": "请告诉我要导航去哪里。"
+ },
+ "keywords": ["导航去", "导航到", "带我去"],
+ "examples": ["导航去公司", "带我去机场", "导航到虹桥火车站"]
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "plugin_id": "plugin.cabin.ac.on",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["打开空调", "开启空调", "空调打开"],
+ "examples": ["把空调打开", "开空调", "启动空调"]
+ },
+ {
+ "intent_id": "cabin_ac_off",
+ "plugin_id": "plugin.cabin.ac.off",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["关闭空调", "关掉空调", "空调关闭"],
+ "examples": ["把空调关掉", "别吹空调了", "空调先关了"]
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "plugin_id": "plugin.cabin.ac_control",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": ["temperature"],
+ "ask_templates": {
+ "temperature": "请告诉我要设置多少度。"
+ },
+ "keywords": ["空调调到", "温度设成", "设成多少度"],
+ "examples": ["把空调调到22度", "温度设成24度", "空调调到20度"]
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "plugin_id": "plugin.cabin.fan.up",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["调大风量", "风量大一点", "风量调高"],
+ "examples": ["把风量调大一点", "空调风再大一点", "风量开大些"]
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "plugin_id": "plugin.cabin.fan.down",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["调小风量", "风量小一点", "风量调低"],
+ "examples": ["把风量调小一点", "空调风太大了", "风量关小些"]
+ },
+ {
+ "intent_id": "cabin_defog_front_on",
+ "plugin_id": "plugin.cabin.defog.front_on",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["打开前挡除雾", "前挡风除雾", "前窗除雾"],
+ "examples": ["帮我打开前挡除雾", "前挡风玻璃起雾了", "开一下前挡除雾"]
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "plugin_id": "plugin.cabin.defog.rear_on",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["打开后挡除雾", "后挡风除雾", "后窗除雾"],
+ "examples": ["帮我打开后挡除雾", "后挡风玻璃起雾了", "开一下后挡除雾"]
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "plugin_id": "plugin.cabin.window.open",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["打开车窗", "开车窗", "车窗打开"],
+ "examples": ["把车窗打开", "帮我开一下车窗", "打开一点车窗"]
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "plugin_id": "plugin.cabin.window.close",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["关闭车窗", "关车窗", "车窗关上"],
+ "examples": ["把车窗关上", "帮我关一下车窗", "车窗全部关闭"]
+ },
+ {
+ "intent_id": "cabin_sunroof_open",
+ "plugin_id": "plugin.cabin.sunroof.open",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["打开天窗", "开天窗", "天窗打开"],
+ "examples": ["把天窗打开", "帮我开一下天窗", "天窗打开一点"]
+ },
+ {
+ "intent_id": "cabin_sunroof_close",
+ "plugin_id": "plugin.cabin.sunroof.close",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["关闭天窗", "关天窗", "天窗关上"],
+ "examples": ["把天窗关上", "帮我关一下天窗", "关闭全景天窗"]
+ },
+ {
+ "intent_id": "cabin_lock_doors",
+ "plugin_id": "plugin.cabin.doors.lock",
+ "domain": "cabin",
+ "risk_level": "medium",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["锁车门", "锁门", "车门锁上"],
+ "examples": ["帮我锁车", "把车门锁上", "全部车门上锁"]
+ },
+ {
+ "intent_id": "cabin_unlock_doors",
+ "plugin_id": "plugin.cabin.doors.unlock",
+ "domain": "cabin",
+ "risk_level": "medium",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["解锁车门", "开锁", "车门解锁"],
+ "examples": ["帮我解锁车门", "把车门打开锁", "全部车门解锁"]
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "plugin_id": "plugin.cabin.music_play",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["播放音乐", "来点音乐", "放首歌"],
+ "examples": ["播放轻音乐", "来点歌", "帮我放首歌"]
+ },
+ {
+ "intent_id": "cabin_pause_music",
+ "plugin_id": "plugin.cabin.music.pause",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["暂停音乐", "暂停播放", "音乐暂停"],
+ "examples": ["把音乐暂停", "先别放了", "暂停当前歌曲"]
+ },
+ {
+ "intent_id": "cabin_next_track",
+ "plugin_id": "plugin.cabin.music.next",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["下一首", "切下一首", "换首歌"],
+ "examples": ["帮我切到下一首", "下一首歌", "换一首歌"]
+ },
+ {
+ "intent_id": "cabin_previous_track",
+ "plugin_id": "plugin.cabin.music.previous",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["上一首", "切上一首", "返回上一首"],
+ "examples": ["帮我切到上一首", "上一首歌", "返回刚才那首歌"]
+ },
+ {
+ "intent_id": "cabin_volume_up",
+ "plugin_id": "plugin.cabin.volume.up",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["调大音量", "音量大一点", "音量调高"],
+ "examples": ["把音量调大一点", "声音太小了", "音量开大些"]
+ },
+ {
+ "intent_id": "cabin_volume_down",
+ "plugin_id": "plugin.cabin.volume.down",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["调小音量", "音量小一点", "音量调低"],
+ "examples": ["把音量调小一点", "声音太大了", "音量关小些"]
+ },
+ {
+ "intent_id": "cabin_volume_mute",
+ "plugin_id": "plugin.cabin.volume.mute",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["静音", "关闭声音", "音量静音"],
+ "examples": ["把声音关掉", "先静音", "音响静音"]
+ },
+ {
+ "intent_id": "cabin_lights_on",
+ "plugin_id": "plugin.cabin.lights.on",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["打开车灯", "开灯", "车灯打开"],
+ "examples": ["把车灯打开", "帮我开一下灯", "打开大灯"]
+ },
+ {
+ "intent_id": "cabin_lights_off",
+ "plugin_id": "plugin.cabin.lights.off",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["关闭车灯", "关灯", "车灯关闭"],
+ "examples": ["把车灯关掉", "帮我关一下灯", "关闭大灯"]
+ },
+ {
+ "intent_id": "cabin_seat_heat_on",
+ "plugin_id": "plugin.cabin.seat_heat.on",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["打开座椅加热", "开座椅加热", "座椅加热打开"],
+ "examples": ["把座椅加热打开", "帮我开一下座椅加热", "打开主驾座椅加热"]
+ },
+ {
+ "intent_id": "cabin_seat_heat_off",
+ "plugin_id": "plugin.cabin.seat_heat.off",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["关闭座椅加热", "关座椅加热", "座椅加热关闭"],
+ "examples": ["把座椅加热关掉", "帮我关一下座椅加热", "关闭主驾座椅加热"]
+ },
+ {
+ "intent_id": "cabin_mirror_fold",
+ "plugin_id": "plugin.cabin.mirror.fold",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["折叠后视镜", "收起后视镜", "后视镜折叠"],
+ "examples": ["把后视镜折叠起来", "帮我收起后视镜", "折叠两侧后视镜"]
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "plugin_id": "plugin.cabin.mirror.unfold",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["展开后视镜", "打开后视镜", "后视镜展开"],
+ "examples": ["把后视镜展开", "帮我打开后视镜", "展开两侧后视镜"]
+ },
+ {
+ "intent_id": "cabin_wiper_on",
+ "plugin_id": "plugin.cabin.wiper.on",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["打开雨刷", "开雨刷", "雨刷启动"],
+ "examples": ["把雨刷打开", "帮我开一下雨刷", "启动雨刮器"]
+ },
+ {
+ "intent_id": "cabin_wiper_off",
+ "plugin_id": "plugin.cabin.wiper.off",
+ "domain": "cabin",
+ "risk_level": "low",
+ "required_slots": [],
+ "ask_templates": {},
+ "keywords": ["关闭雨刷", "关雨刷", "雨刷停止"],
+ "examples": ["把雨刷关掉", "帮我关一下雨刷", "停止雨刮器"]
+ }
+]
diff --git a/intelligent_cabin/app/data/joint_nlu_eval.jsonl b/intelligent_cabin/app/data/joint_nlu_eval.jsonl
new file mode 100644
index 0000000..4eb202f
--- /dev/null
+++ b/intelligent_cabin/app/data/joint_nlu_eval.jsonl
@@ -0,0 +1,10 @@
+{"text":"把空调设到21度","intent_id":"cabin_set_ac","slots":[{"slot_name":"temperature","value":"21度","start":6,"end":9}]}
+{"text":"导航到虹桥机场","intent_id":"cabin_nav_to","slots":[{"slot_name":"destination","value":"虹桥机场","start":3,"end":7}]}
+{"text":"来首稻香","intent_id":"cabin_play_music","slots":[{"slot_name":"song","value":"稻香","start":2,"end":4}]}
+{"text":"放点摇滚","intent_id":"cabin_play_music","slots":[{"slot_name":"genre","value":"摇滚","start":2,"end":4}]}
+{"text":"查一下订单A700001现在什么状态","intent_id":"cs_query_order","slots":[{"slot_name":"order_id","value":"A700001","start":5,"end":12}]}
+{"text":"帮我查A900005物流进度","intent_id":"cs_query_logistics","slots":[{"slot_name":"order_id","value":"A900005","start":4,"end":11}]}
+{"text":"撤销订单A202501","intent_id":"cs_cancel_order","slots":[{"slot_name":"order_id","value":"A202501","start":4,"end":11}]}
+{"text":"把车窗打开","intent_id":"cabin_window_open","slots":[]}
+{"text":"把音乐暂停","intent_id":"cabin_pause_music","slots":[]}
+{"text":"帮我锁车","intent_id":"cabin_lock_doors","slots":[]}
diff --git a/intelligent_cabin/app/data/joint_nlu_eval_independent.jsonl b/intelligent_cabin/app/data/joint_nlu_eval_independent.jsonl
new file mode 100644
index 0000000..c519a9b
--- /dev/null
+++ b/intelligent_cabin/app/data/joint_nlu_eval_independent.jsonl
@@ -0,0 +1,43 @@
+{"text":"把空调调到22度","expected_intent_id":"cabin_set_ac","expected_slots":{"temperature":22},"category":"slot_temperature"}
+{"text":"空调给我调到20度","expected_intent_id":"cabin_set_ac","expected_slots":{"temperature":20},"category":"slot_temperature"}
+{"text":"车里温度设成24度","expected_intent_id":"cabin_set_ac","expected_slots":{"temperature":24},"category":"slot_temperature"}
+{"text":"把温度打到21度","expected_intent_id":"cabin_set_ac","expected_slots":{"temperature":21},"category":"slot_temperature"}
+{"text":"导航去公司停车场","expected_intent_id":"cabin_nav_to","expected_slots":{"destination":"公司停车场"},"category":"slot_destination"}
+{"text":"带我去浦东机场","expected_intent_id":"cabin_nav_to","expected_slots":{"destination":"浦东机场"},"category":"slot_destination"}
+{"text":"导航到南京东路","expected_intent_id":"cabin_nav_to","expected_slots":{"destination":"南京东路"},"category":"slot_destination"}
+{"text":"去虹桥机场","expected_intent_id":"cabin_nav_to","expected_slots":{"destination":"虹桥机场"},"category":"slot_destination"}
+{"text":"查一下订单A123456","expected_intent_id":"cs_query_order","expected_slots":{"order_id":"A123456"},"category":"slot_order"}
+{"text":"帮我看看订单A808001","expected_intent_id":"cs_query_order","expected_slots":{"order_id":"A808001"},"category":"slot_order"}
+{"text":"快递A998877到哪了","expected_intent_id":"cs_query_logistics","expected_slots":{"order_id":"A998877"},"category":"slot_order"}
+{"text":"取消订单A556677","expected_intent_id":"cs_cancel_order","expected_slots":{"order_id":"A556677"},"category":"slot_order"}
+{"text":"来一首青花瓷","expected_intent_id":"cabin_play_music","expected_slots":{"song":"青花瓷"},"category":"slot_music"}
+{"text":"播放夜的第七章","expected_intent_id":"cabin_play_music","expected_slots":{"song":"夜的第七章"},"category":"slot_music"}
+{"text":"来点爵士","expected_intent_id":"cabin_play_music","expected_slots":{"genre":"爵士"},"category":"slot_music"}
+{"text":"放点摇滚","expected_intent_id":"cabin_play_music","expected_slots":{"genre":"摇滚"},"category":"slot_music"}
+{"text":"给我播点民谣","expected_intent_id":"cabin_play_music","expected_slots":{"genre":"民谣"},"category":"slot_music"}
+{"text":"把车窗打开","expected_intent_id":"cabin_window_open","expected_slots":{},"category":"no_slot_control"}
+{"text":"把车窗关上","expected_intent_id":"cabin_window_close","expected_slots":{},"category":"no_slot_control"}
+{"text":"把天窗打开","expected_intent_id":"cabin_sunroof_open","expected_slots":{},"category":"no_slot_control"}
+{"text":"把天窗合上","expected_intent_id":"cabin_sunroof_close","expected_slots":{},"category":"no_slot_control"}
+{"text":"把空调打开","expected_intent_id":"cabin_ac_on","expected_slots":{},"category":"no_slot_control"}
+{"text":"把空调关掉","expected_intent_id":"cabin_ac_off","expected_slots":{},"category":"no_slot_control"}
+{"text":"把风量调大一点","expected_intent_id":"cabin_fan_up","expected_slots":{},"category":"no_slot_control"}
+{"text":"风太大了,往小调一点","expected_intent_id":"cabin_fan_down","expected_slots":{},"category":"no_slot_control"}
+{"text":"把音乐暂停","expected_intent_id":"cabin_pause_music","expected_slots":{},"category":"no_slot_control"}
+{"text":"帮我切到下一首","expected_intent_id":"cabin_next_track","expected_slots":{},"category":"no_slot_control"}
+{"text":"切回上一首","expected_intent_id":"cabin_previous_track","expected_slots":{},"category":"no_slot_control"}
+{"text":"先静音","expected_intent_id":"cabin_volume_mute","expected_slots":{},"category":"no_slot_control"}
+{"text":"把音量调大一点","expected_intent_id":"cabin_volume_up","expected_slots":{},"category":"no_slot_control"}
+{"text":"把音量调小一点","expected_intent_id":"cabin_volume_down","expected_slots":{},"category":"no_slot_control"}
+{"text":"把后视镜收起来","expected_intent_id":"cabin_mirror_fold","expected_slots":{},"category":"failure_replay"}
+{"text":"把镜子展开","expected_intent_id":"cabin_mirror_unfold","expected_slots":{},"category":"failure_replay"}
+{"text":"锁车门","expected_intent_id":"cabin_lock_doors","expected_slots":{},"category":"failure_replay"}
+{"text":"把车门解锁","expected_intent_id":"cabin_unlock_doors","expected_slots":{},"category":"failure_replay"}
+{"text":"路线别导了","expected_intent_id":"cabin_nav_cancel","expected_slots":{},"category":"failure_replay"}
+{"text":"音乐停一下","expected_intent_id":"cabin_pause_music","expected_slots":{},"category":"failure_replay"}
+{"text":"雨刮关掉","expected_intent_id":"cabin_wiper_off","expected_slots":{},"category":"failure_replay"}
+{"text":"把雨刮打开","expected_intent_id":"cabin_wiper_on","expected_slots":{},"category":"failure_replay"}
+{"text":"把左前窗降一点","expected_intent_id":"cabin_window_open","expected_slots":{},"category":"failure_replay"}
+{"text":"给我透个气","expected_intent_id":"cabin_window_open","expected_slots":{},"category":"failure_replay"}
+{"text":"风别太小","expected_intent_id":"cabin_fan_up","expected_slots":{},"category":"failure_replay"}
+{"text":"要是太慢就转人工","expected_intent_id":"cs_transfer_human","expected_slots":{},"category":"failure_replay"}
diff --git a/intelligent_cabin/app/data/joint_nlu_multilabel_eval.jsonl b/intelligent_cabin/app/data/joint_nlu_multilabel_eval.jsonl
new file mode 100644
index 0000000..935dead
--- /dev/null
+++ b/intelligent_cabin/app/data/joint_nlu_multilabel_eval.jsonl
@@ -0,0 +1,12 @@
+{"text":"打开车窗和空调","intent_ids":["cabin_window_open","cabin_ac_on"],"slots":[]}
+{"text":"导航去公司再放点轻音乐","intent_ids":["cabin_nav_to","cabin_play_music"],"slots":[{"slot_name":"destination","value":"公司","start":3,"end":5},{"slot_name":"genre","value":"轻音乐","start":8,"end":11}]}
+{"text":"把空调调到22度并播放夜曲","intent_ids":["cabin_set_ac","cabin_play_music"],"slots":[{"slot_name":"temperature","value":"22度","start":6,"end":9},{"slot_name":"song","value":"夜曲","start":12,"end":14}]}
+{"text":"开空调,关窗,再来点民谣","intent_ids":["cabin_ac_on","cabin_window_close","cabin_play_music"],"slots":[{"slot_name":"genre","value":"民谣","start":11,"end":13}]}
+{"text":"查一下订单A700001,如果还没发货就取消","intent_ids":["cs_query_order","cs_cancel_order"],"slots":[{"slot_name":"order_id","value":"A700001","start":5,"end":12}]}
+{"text":"查下A808001物流,没到就转人工","intent_ids":["cs_query_logistics","cs_transfer_human"],"slots":[{"slot_name":"order_id","value":"A808001","start":2,"end":9}]}
+{"text":"把风量调大一点,再把窗户打开","intent_ids":["cabin_fan_up","cabin_window_open"],"slots":[]}
+{"text":"透透气,再来一首黄昏","intent_ids":["cabin_window_open","cabin_play_music"],"slots":[{"slot_name":"song","value":"黄昏","start":9,"end":11}]}
+{"text":"导航到虹桥机场,空调也打开","intent_ids":["cabin_nav_to","cabin_ac_on"],"slots":[{"slot_name":"destination","value":"虹桥机场","start":3,"end":7}]}
+{"text":"后视镜收起来,再锁车门","intent_ids":["cabin_mirror_fold","cabin_lock_doors"],"slots":[]}
+{"text":"雨刮关掉并打开车窗","intent_ids":["cabin_wiper_off","cabin_window_open"],"slots":[]}
+{"text":"来点音乐,再把温度设成21度","intent_ids":["cabin_play_music","cabin_set_ac"],"slots":[{"slot_name":"temperature","value":"21度","start":12,"end":15}]}
diff --git a/intelligent_cabin/app/data/joint_nlu_seed.jsonl b/intelligent_cabin/app/data/joint_nlu_seed.jsonl
new file mode 100644
index 0000000..818e2a2
--- /dev/null
+++ b/intelligent_cabin/app/data/joint_nlu_seed.jsonl
@@ -0,0 +1,27 @@
+{"text":"把空调调到22度","intent_id":"cabin_set_ac","slots":[{"slot_name":"temperature","value":"22度","start":6,"end":9}]}
+{"text":"空调给我调到20度","intent_id":"cabin_set_ac","slots":[{"slot_name":"temperature","value":"20度","start":7,"end":10}]}
+{"text":"车里温度设成24度","intent_id":"cabin_set_ac","slots":[{"slot_name":"temperature","value":"24度","start":7,"end":10}]}
+{"text":"导航去公司停车场","intent_id":"cabin_nav_to","slots":[{"slot_name":"destination","value":"公司停车场","start":3,"end":8}]}
+{"text":"带我去浦东机场","intent_id":"cabin_nav_to","slots":[{"slot_name":"destination","value":"浦东机场","start":3,"end":7}]}
+{"text":"导航到南京东路","intent_id":"cabin_nav_to","slots":[{"slot_name":"destination","value":"南京东路","start":3,"end":7}]}
+{"text":"播放夜曲","intent_id":"cabin_play_music","slots":[{"slot_name":"song","value":"夜曲","start":2,"end":4}]}
+{"text":"来一首青花瓷","intent_id":"cabin_play_music","slots":[{"slot_name":"song","value":"青花瓷","start":3,"end":6}]}
+{"text":"放一首晴天","intent_id":"cabin_play_music","slots":[{"slot_name":"song","value":"晴天","start":3,"end":5}]}
+{"text":"来一首告白气球","intent_id":"cabin_play_music","slots":[{"slot_name":"song","value":"告白气球","start":3,"end":7}]}
+{"text":"播放稻香","intent_id":"cabin_play_music","slots":[{"slot_name":"song","value":"稻香","start":2,"end":4}]}
+{"text":"帮我播首夜的第七章","intent_id":"cabin_play_music","slots":[{"slot_name":"song","value":"夜的第七章","start":4,"end":9}]}
+{"text":"给我来一首晴天","intent_id":"cabin_play_music","slots":[{"slot_name":"song","value":"晴天","start":5,"end":7}]}
+{"text":"车里放首稻香","intent_id":"cabin_play_music","slots":[{"slot_name":"song","value":"稻香","start":4,"end":6}]}
+{"text":"播放轻音乐","intent_id":"cabin_play_music","slots":[{"slot_name":"genre","value":"轻音乐","start":2,"end":5}]}
+{"text":"来点爵士","intent_id":"cabin_play_music","slots":[{"slot_name":"genre","value":"爵士","start":2,"end":4}]}
+{"text":"给我播点民谣","intent_id":"cabin_play_music","slots":[{"slot_name":"genre","value":"民谣","start":4,"end":6}]}
+{"text":"随机放点流行","intent_id":"cabin_play_music","slots":[{"slot_name":"genre","value":"流行","start":4,"end":6}]}
+{"text":"来点古典音乐","intent_id":"cabin_play_music","slots":[{"slot_name":"genre","value":"古典","start":2,"end":4}]}
+{"text":"车里放点摇滚","intent_id":"cabin_play_music","slots":[{"slot_name":"genre","value":"摇滚","start":4,"end":6}]}
+{"text":"给我来点儿歌","intent_id":"cabin_play_music","slots":[{"slot_name":"genre","value":"儿歌","start":4,"end":6}]}
+{"text":"查一下订单A123456","intent_id":"cs_query_order","slots":[{"slot_name":"order_id","value":"A123456","start":5,"end":12}]}
+{"text":"帮我看看订单A808001","intent_id":"cs_query_order","slots":[{"slot_name":"order_id","value":"A808001","start":6,"end":13}]}
+{"text":"快递A998877到哪了","intent_id":"cs_query_logistics","slots":[{"slot_name":"order_id","value":"A998877","start":2,"end":9}]}
+{"text":"帮我查A202501物流","intent_id":"cs_query_logistics","slots":[{"slot_name":"order_id","value":"A202501","start":4,"end":11}]}
+{"text":"取消订单A556677","intent_id":"cs_cancel_order","slots":[{"slot_name":"order_id","value":"A556677","start":4,"end":11}]}
+{"text":"把A112233这个订单取消掉","intent_id":"cs_cancel_order","slots":[{"slot_name":"order_id","value":"A112233","start":1,"end":8}]}
diff --git a/intelligent_cabin/app/main.py b/intelligent_cabin/app/main.py
new file mode 100644
index 0000000..ba720e0
--- /dev/null
+++ b/intelligent_cabin/app/main.py
@@ -0,0 +1,151 @@
+import json
+from concurrent.futures import ThreadPoolExecutor, TimeoutError
+from pathlib import Path
+from uuid import uuid4
+
+from fastapi import FastAPI, HTTPException
+from fastapi.middleware.cors import CORSMiddleware
+from fastapi.responses import FileResponse, StreamingResponse
+
+
+from app.core.config import settings
+from app.core.bootstrap import build_agent_service_with_runtime, build_intent_registry
+from app.schemas.chat import ChatRequest, ChatResponse, FillSlotsRequest
+from app.schemas.demo import DemoRuntimeConfig, DemoRuntimeUpdateRequest
+
+app = FastAPI(title=settings.app_name)
+
+# CORS:允许 Canvas 前端跨域调用
+# 生产环境请将 allow_origins 替换为实际前端域名
+app.add_middleware(
+ CORSMiddleware,
+ allow_origins=["http://localhost:3000", "http://127.0.0.1:3000"],
+ allow_credentials=True,
+ allow_methods=["*"],
+ allow_headers=["*"],
+)
+
+demo_html_path = Path(__file__).parent / "static" / "demo.html"
+chat_stream_executor = ThreadPoolExecutor(max_workers=8)
+
+runtime_config = DemoRuntimeConfig(
+ matcher_pipeline=settings.matcher_pipeline,
+ classifier_backend=settings.classifier_backend,
+ session_backend=settings.session_backend,
+ slot_extractor_backend=settings.slot_extractor_backend,
+ planner_backend=settings.planner_backend,
+ planner_model_name=settings.planner_model_name,
+)
+agent_service = build_agent_service_with_runtime(
+ matcher_pipeline=runtime_config.matcher_pipeline,
+ classifier_backend=runtime_config.classifier_backend,
+ session_backend=runtime_config.session_backend,
+)
+intent_registry = build_intent_registry()
+
+
+@app.get("/health")
+def health() -> dict[str, str]:
+ return {"status": "ok", "env": settings.app_env}
+
+
+@app.get("/")
+@app.get("/demo")
+def demo() -> FileResponse:
+ return FileResponse(demo_html_path)
+
+
+@app.post("/api/v1/agent/chat", response_model=ChatResponse)
+def chat(request: ChatRequest) -> ChatResponse:
+ return agent_service.handle_chat(request)
+
+
+@app.post("/api/v1/agent/chat-stream")
+def chat_stream(request: ChatRequest) -> StreamingResponse:
+ def stream():
+ future = chat_stream_executor.submit(agent_service.handle_chat, request)
+ try:
+ response = future.result(timeout=1.0)
+ except TimeoutError:
+ ack = {
+ "type": "ack",
+ "reply_text": "好的,正在处理中,请稍等一下。",
+ "status": "processing",
+ "trace_id": uuid4().hex,
+ }
+ yield json.dumps(ack, ensure_ascii=False) + "\n"
+ try:
+ response = future.result()
+ except Exception as exc: # pragma: no cover - stream error fallback
+ payload = {
+ "type": "error",
+ "message": str(exc),
+ }
+ yield json.dumps(payload, ensure_ascii=False) + "\n"
+ return
+ except Exception as exc: # pragma: no cover - stream error fallback
+ payload = {
+ "type": "error",
+ "message": str(exc),
+ }
+ yield json.dumps(payload, ensure_ascii=False) + "\n"
+ return
+
+ try:
+ payload = {
+ "type": "final",
+ "data": response.model_dump(mode="json"),
+ }
+ yield json.dumps(payload, ensure_ascii=False) + "\n"
+ except Exception as exc: # pragma: no cover - stream error fallback
+ payload = {
+ "type": "error",
+ "message": str(exc),
+ }
+ yield json.dumps(payload, ensure_ascii=False) + "\n"
+
+ return StreamingResponse(stream(), media_type="application/x-ndjson")
+
+
+@app.post("/api/v1/agent/fill-slots", response_model=ChatResponse)
+def fill_slots(request: FillSlotsRequest) -> ChatResponse:
+ return agent_service.handle_fill_slots(request)
+
+
+@app.get("/api/v1/intents")
+def list_intents() -> list[dict[str, object]]:
+ return [intent.model_dump() for intent in intent_registry.list()]
+
+
+@app.get("/api/v1/demo/runtime", response_model=DemoRuntimeConfig)
+def get_demo_runtime() -> DemoRuntimeConfig:
+ return runtime_config
+
+
+@app.post("/api/v1/demo/runtime", response_model=DemoRuntimeConfig)
+def update_demo_runtime(request: DemoRuntimeUpdateRequest) -> DemoRuntimeConfig:
+ global agent_service, runtime_config
+
+ matcher_stages = [stage.strip() for stage in request.matcher_pipeline.split(",") if stage.strip()]
+ if matcher_stages != ["classifier"]:
+ raise HTTPException(status_code=400, detail="Only classifier matcher pipeline is supported in bert-first mode")
+
+ try:
+ next_service = build_agent_service_with_runtime(
+ matcher_pipeline=request.matcher_pipeline,
+ classifier_backend=request.classifier_backend,
+ session_backend=request.session_backend,
+ )
+ except Exception as exc:
+ raise HTTPException(status_code=400, detail=str(exc)) from exc
+
+ agent_service = next_service
+ runtime_config = DemoRuntimeConfig(
+ matcher_pipeline=request.matcher_pipeline,
+ classifier_backend=request.classifier_backend,
+ session_backend=request.session_backend,
+ slot_extractor_backend=settings.slot_extractor_backend,
+ planner_backend=settings.planner_backend,
+ planner_model_name=settings.planner_model_name,
+ )
+ return runtime_config
diff --git a/intelligent_cabin/app/plugins/__init__.py b/intelligent_cabin/app/plugins/__init__.py
new file mode 100644
index 0000000..87c9ecf
--- /dev/null
+++ b/intelligent_cabin/app/plugins/__init__.py
@@ -0,0 +1 @@
+"""Plugin adapters for the agent service."""
diff --git a/intelligent_cabin/app/plugins/__pycache__/__init__.cpython-311.pyc b/intelligent_cabin/app/plugins/__pycache__/__init__.cpython-311.pyc
new file mode 100644
index 0000000..0ca2def
Binary files /dev/null and b/intelligent_cabin/app/plugins/__pycache__/__init__.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/plugins/__pycache__/__init__.cpython-312.pyc b/intelligent_cabin/app/plugins/__pycache__/__init__.cpython-312.pyc
new file mode 100644
index 0000000..c7f1ad9
Binary files /dev/null and b/intelligent_cabin/app/plugins/__pycache__/__init__.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/plugins/__pycache__/__init__.cpython-313.pyc b/intelligent_cabin/app/plugins/__pycache__/__init__.cpython-313.pyc
new file mode 100644
index 0000000..657dae4
Binary files /dev/null and b/intelligent_cabin/app/plugins/__pycache__/__init__.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/plugins/__pycache__/base.cpython-311.pyc b/intelligent_cabin/app/plugins/__pycache__/base.cpython-311.pyc
new file mode 100644
index 0000000..bbc25c8
Binary files /dev/null and b/intelligent_cabin/app/plugins/__pycache__/base.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/plugins/__pycache__/base.cpython-312.pyc b/intelligent_cabin/app/plugins/__pycache__/base.cpython-312.pyc
new file mode 100644
index 0000000..ac3912b
Binary files /dev/null and b/intelligent_cabin/app/plugins/__pycache__/base.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/plugins/__pycache__/base.cpython-313.pyc b/intelligent_cabin/app/plugins/__pycache__/base.cpython-313.pyc
new file mode 100644
index 0000000..6a468f0
Binary files /dev/null and b/intelligent_cabin/app/plugins/__pycache__/base.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/plugins/__pycache__/mock.cpython-311.pyc b/intelligent_cabin/app/plugins/__pycache__/mock.cpython-311.pyc
new file mode 100644
index 0000000..93c7bff
Binary files /dev/null and b/intelligent_cabin/app/plugins/__pycache__/mock.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/plugins/__pycache__/mock.cpython-312.pyc b/intelligent_cabin/app/plugins/__pycache__/mock.cpython-312.pyc
new file mode 100644
index 0000000..e9de88f
Binary files /dev/null and b/intelligent_cabin/app/plugins/__pycache__/mock.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/plugins/__pycache__/mock.cpython-313.pyc b/intelligent_cabin/app/plugins/__pycache__/mock.cpython-313.pyc
new file mode 100644
index 0000000..9e33ed4
Binary files /dev/null and b/intelligent_cabin/app/plugins/__pycache__/mock.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/plugins/base.py b/intelligent_cabin/app/plugins/base.py
new file mode 100644
index 0000000..3cd4e82
--- /dev/null
+++ b/intelligent_cabin/app/plugins/base.py
@@ -0,0 +1,27 @@
+from __future__ import annotations
+
+from collections.abc import Callable
+from typing import Any
+
+PluginHandler = Callable[[dict[str, Any]], dict[str, Any]]
+
+
+class PluginRegistry:
+ def __init__(self) -> None:
+ self._handlers: dict[str, PluginHandler] = {}
+
+ def register(self, plugin_id: str, handler: PluginHandler) -> None:
+ self._handlers[plugin_id] = handler
+
+ def execute(self, plugin_id: str, slots: dict[str, Any]) -> dict[str, Any]:
+ handler = self._handlers.get(plugin_id)
+ if handler is None:
+ return {
+ "success": False,
+ "message": f"插件 {plugin_id} 未注册。",
+ "data": {"plugin_id": plugin_id, "slots": slots},
+ }
+ return handler(slots)
+
+ def registered_plugins(self) -> list[str]:
+ return sorted(self._handlers.keys())
diff --git a/intelligent_cabin/app/plugins/mock.py b/intelligent_cabin/app/plugins/mock.py
new file mode 100644
index 0000000..0118ad6
--- /dev/null
+++ b/intelligent_cabin/app/plugins/mock.py
@@ -0,0 +1,216 @@
+from __future__ import annotations
+
+from typing import Any
+
+from app.plugins.base import PluginRegistry
+
+
+class MockPluginExecutor:
+ def register(self, registry: PluginRegistry) -> PluginRegistry:
+ registry.register("plugin.order.query", self._query_order)
+ registry.register("plugin.logistics.query", self._query_logistics)
+ registry.register("plugin.order.cancel", self._cancel_order)
+ registry.register("plugin.service.transfer_human", self._transfer_human)
+ registry.register("plugin.cabin.navigation.cancel", self._navigate_cancel)
+ registry.register("plugin.cabin.navigation", self._navigate)
+ registry.register("plugin.cabin.ac.on", self._ac_on)
+ registry.register("plugin.cabin.ac.off", self._ac_off)
+ registry.register("plugin.cabin.ac_control", self._set_ac)
+ registry.register("plugin.cabin.fan.up", self._fan_up)
+ registry.register("plugin.cabin.fan.down", self._fan_down)
+ registry.register("plugin.cabin.defog.front_on", self._defog_front_on)
+ registry.register("plugin.cabin.defog.rear_on", self._defog_rear_on)
+ registry.register("plugin.cabin.window.open", self._window_open)
+ registry.register("plugin.cabin.window.close", self._window_close)
+ registry.register("plugin.cabin.sunroof.open", self._sunroof_open)
+ registry.register("plugin.cabin.sunroof.close", self._sunroof_close)
+ registry.register("plugin.cabin.doors.lock", self._lock_doors)
+ registry.register("plugin.cabin.doors.unlock", self._unlock_doors)
+ registry.register("plugin.cabin.music_play", self._play_music)
+ registry.register("plugin.cabin.music.pause", self._pause_music)
+ registry.register("plugin.cabin.music.next", self._next_track)
+ registry.register("plugin.cabin.music.previous", self._previous_track)
+ registry.register("plugin.cabin.volume.up", self._volume_up)
+ registry.register("plugin.cabin.volume.down", self._volume_down)
+ registry.register("plugin.cabin.volume.mute", self._volume_mute)
+ registry.register("plugin.cabin.lights.on", self._lights_on)
+ registry.register("plugin.cabin.lights.off", self._lights_off)
+ registry.register("plugin.cabin.seat_heat.on", self._seat_heat_on)
+ registry.register("plugin.cabin.seat_heat.off", self._seat_heat_off)
+ registry.register("plugin.cabin.mirror.fold", self._mirror_fold)
+ registry.register("plugin.cabin.mirror.unfold", self._mirror_unfold)
+ registry.register("plugin.cabin.wiper.on", self._wiper_on)
+ registry.register("plugin.cabin.wiper.off", self._wiper_off)
+ return registry
+
+ def _query_order(self, slots: dict[str, Any]) -> dict[str, Any]:
+ return {
+ "success": True,
+ "message": f"订单 {slots['order_id']} 当前待发货。",
+ "data": {"order_status": "pending_shipment"},
+ }
+
+ def _query_logistics(self, slots: dict[str, Any]) -> dict[str, Any]:
+ return {
+ "success": True,
+ "message": f"订单 {slots['order_id']} 最新物流状态为运输中。",
+ "data": {"logistics_status": "shipping"},
+ }
+
+ def _cancel_order(self, slots: dict[str, Any]) -> dict[str, Any]:
+ return {
+ "success": True,
+ "message": f"订单 {slots['order_id']} 已取消。",
+ "data": {"cancel_status": "cancelled"},
+ }
+
+ def _transfer_human(self, slots: dict[str, Any]) -> dict[str, Any]:
+ return {
+ "success": True,
+ "message": "已为你转接人工客服,请稍候。",
+ "data": {"queue_no": "A12", "reason": slots.get("reason", "用户请求")},
+ }
+
+ def _navigate(self, slots: dict[str, Any]) -> dict[str, Any]:
+ return {
+ "success": True,
+ "message": f"已开始导航到 {slots['destination']}。",
+ "data": {"route_id": "route_001", "destination": slots["destination"]},
+ }
+
+ def _navigate_cancel(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已结束当前导航。", {"navigation": "stopped"})
+
+ def _ac_on(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已打开空调。", {"power": "on"})
+
+ def _ac_off(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已关闭空调。", {"power": "off"})
+
+ def _set_ac(self, slots: dict[str, Any]) -> dict[str, Any]:
+ return {
+ "success": True,
+ "message": f"已将空调调到 {slots['temperature']} 度。",
+ "data": {"temperature": slots["temperature"]},
+ }
+
+ def _fan_up(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已调大风量。", {"fan": "up"})
+
+ def _fan_down(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已调小风量。", {"fan": "down"})
+
+ def _defog_front_on(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已打开前挡除雾。", {"defog": "front_on"})
+
+ def _defog_rear_on(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已打开后挡除雾。", {"defog": "rear_on"})
+
+ def _window_open(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已打开车窗。", {"window": "open"})
+
+ def _window_close(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已关闭车窗。", {"window": "close"})
+
+ def _sunroof_open(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已打开天窗。", {"sunroof": "open"})
+
+ def _sunroof_close(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已关闭天窗。", {"sunroof": "close"})
+
+ def _lock_doors(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已锁定车门。", {"doors": "locked"})
+
+ def _unlock_doors(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已解锁车门。", {"doors": "unlocked"})
+
+ def _play_music(self, slots: dict[str, Any]) -> dict[str, Any]:
+ target = slots.get("song") or slots.get("genre") or "默认歌单"
+ return {
+ "success": True,
+ "message": f"正在播放 {target}。",
+ "data": {"play_target": target},
+ }
+
+ def _pause_music(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已暂停播放。", {"music": "paused"})
+
+ def _next_track(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已切到下一首。", {"music": "next"})
+
+ def _previous_track(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已切到上一首。", {"music": "previous"})
+
+ def _volume_up(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已调大音量。", {"volume": "up"})
+
+ def _volume_down(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已调小音量。", {"volume": "down"})
+
+ def _volume_mute(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已静音。", {"volume": "mute"})
+
+ def _lights_on(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已打开车灯。", {"lights": "on"})
+
+ def _lights_off(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已关闭车灯。", {"lights": "off"})
+
+ def _seat_heat_on(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已打开座椅加热。", {"seat_heat": "on"})
+
+ def _seat_heat_off(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已关闭座椅加热。", {"seat_heat": "off"})
+
+ def _mirror_fold(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已折叠后视镜。", {"mirror": "folded"})
+
+ def _mirror_unfold(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已展开后视镜。", {"mirror": "unfolded"})
+
+ def _wiper_on(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已打开雨刷。", {"wiper": "on"})
+
+ def _wiper_off(self, slots: dict[str, Any]) -> dict[str, Any]:
+ _ = slots
+ return self._simple_action("好的,已关闭雨刷。", {"wiper": "off"})
+
+ def _fallback(self, slots: dict[str, Any]) -> dict[str, Any]:
+ return {
+ "success": True,
+ "message": "已接收请求,当前使用 mock 插件返回成功结果。",
+ "data": slots,
+ }
+
+ def _simple_action(self, message: str, data: dict[str, Any]) -> dict[str, Any]:
+ return {
+ "success": True,
+ "message": message,
+ "data": data,
+ }
diff --git a/intelligent_cabin/app/schemas/__init__.py b/intelligent_cabin/app/schemas/__init__.py
new file mode 100644
index 0000000..027bc04
--- /dev/null
+++ b/intelligent_cabin/app/schemas/__init__.py
@@ -0,0 +1 @@
+"""Pydantic schemas for the agent service."""
diff --git a/intelligent_cabin/app/schemas/__pycache__/__init__.cpython-311.pyc b/intelligent_cabin/app/schemas/__pycache__/__init__.cpython-311.pyc
new file mode 100644
index 0000000..e747ddb
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/__init__.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/__init__.cpython-312.pyc b/intelligent_cabin/app/schemas/__pycache__/__init__.cpython-312.pyc
new file mode 100644
index 0000000..b934455
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/__init__.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/__init__.cpython-313.pyc b/intelligent_cabin/app/schemas/__pycache__/__init__.cpython-313.pyc
new file mode 100644
index 0000000..9e30f2c
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/__init__.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/chat.cpython-311.pyc b/intelligent_cabin/app/schemas/__pycache__/chat.cpython-311.pyc
new file mode 100644
index 0000000..76dfb11
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/chat.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/chat.cpython-312.pyc b/intelligent_cabin/app/schemas/__pycache__/chat.cpython-312.pyc
new file mode 100644
index 0000000..ef6c9c6
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/chat.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/chat.cpython-313.pyc b/intelligent_cabin/app/schemas/__pycache__/chat.cpython-313.pyc
new file mode 100644
index 0000000..c5177f5
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/chat.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/configuration.cpython-311.pyc b/intelligent_cabin/app/schemas/__pycache__/configuration.cpython-311.pyc
new file mode 100644
index 0000000..10f351f
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/configuration.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/configuration.cpython-312.pyc b/intelligent_cabin/app/schemas/__pycache__/configuration.cpython-312.pyc
new file mode 100644
index 0000000..d3da155
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/configuration.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/configuration.cpython-313.pyc b/intelligent_cabin/app/schemas/__pycache__/configuration.cpython-313.pyc
new file mode 100644
index 0000000..f94258e
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/configuration.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/debug.cpython-311.pyc b/intelligent_cabin/app/schemas/__pycache__/debug.cpython-311.pyc
new file mode 100644
index 0000000..c39d089
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/debug.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/debug.cpython-312.pyc b/intelligent_cabin/app/schemas/__pycache__/debug.cpython-312.pyc
new file mode 100644
index 0000000..02e576f
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/debug.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/debug.cpython-313.pyc b/intelligent_cabin/app/schemas/__pycache__/debug.cpython-313.pyc
new file mode 100644
index 0000000..91ae80a
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/debug.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/demo.cpython-311.pyc b/intelligent_cabin/app/schemas/__pycache__/demo.cpython-311.pyc
new file mode 100644
index 0000000..fe881fa
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/demo.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/demo.cpython-312.pyc b/intelligent_cabin/app/schemas/__pycache__/demo.cpython-312.pyc
new file mode 100644
index 0000000..906216e
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/demo.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/demo.cpython-313.pyc b/intelligent_cabin/app/schemas/__pycache__/demo.cpython-313.pyc
new file mode 100644
index 0000000..f987f5a
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/demo.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/intent.cpython-311.pyc b/intelligent_cabin/app/schemas/__pycache__/intent.cpython-311.pyc
new file mode 100644
index 0000000..da21069
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/intent.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/intent.cpython-312.pyc b/intelligent_cabin/app/schemas/__pycache__/intent.cpython-312.pyc
new file mode 100644
index 0000000..9fb1667
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/intent.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/intent.cpython-313.pyc b/intelligent_cabin/app/schemas/__pycache__/intent.cpython-313.pyc
new file mode 100644
index 0000000..a9d7061
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/intent.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/workflow.cpython-311.pyc b/intelligent_cabin/app/schemas/__pycache__/workflow.cpython-311.pyc
new file mode 100644
index 0000000..a5640d6
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/workflow.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/workflow.cpython-312.pyc b/intelligent_cabin/app/schemas/__pycache__/workflow.cpython-312.pyc
new file mode 100644
index 0000000..bece7f4
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/workflow.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/schemas/__pycache__/workflow.cpython-313.pyc b/intelligent_cabin/app/schemas/__pycache__/workflow.cpython-313.pyc
new file mode 100644
index 0000000..d906192
Binary files /dev/null and b/intelligent_cabin/app/schemas/__pycache__/workflow.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/schemas/chat.py b/intelligent_cabin/app/schemas/chat.py
new file mode 100644
index 0000000..9ac633a
--- /dev/null
+++ b/intelligent_cabin/app/schemas/chat.py
@@ -0,0 +1,46 @@
+from __future__ import annotations
+
+from typing import Any, Literal
+
+from pydantic import BaseModel, Field
+
+from app.schemas.debug import RoutingDebug
+from app.schemas.workflow import Workflow
+
+
+class ChatRequest(BaseModel):
+ session_id: str
+ user_id: str
+ channel: str = "app"
+ input_text: str
+ input_type: Literal["text", "voice"] = "text"
+ metadata: dict[str, Any] = Field(default_factory=dict)
+
+
+class FillSlotsRequest(BaseModel):
+ session_id: str
+ user_id: str
+ input_text: str
+
+
+class ChatResponse(BaseModel):
+ session_id: str
+ reply_type: Literal["text", "ask_slot", "ask_confirmation", "workflow_result", "fallback", "clarify", "reject"] = "text"
+ reply_text: str
+ intent: str | None = None
+ domain: str | None = None
+ decision: str | None = None
+ decision_reason: str | None = None
+ status: str
+ pending_slots: list[str] = Field(default_factory=list)
+ filled_slots: dict[str, Any] = Field(default_factory=dict)
+ workflow: Workflow | None = None
+ routing_debug: RoutingDebug | None = None
+ first_response_latency_ms: float | None = None
+ total_latency_ms: float | None = None
+ processing_breakdown: dict[str, float] = Field(default_factory=dict)
+ trace_id: str
+ # ── 知识库查询结果(LLM function call 命中时填充)──────────────────────────
+ knowledge_doc_id: str | None = None # 知识文档 ID(MD 文件名)
+ knowledge_doc_title: str | None = None # 知识文档标题
+ knowledge_content: str | None = None # 完整 MD 正文,供前端渲染知识卡片
diff --git a/intelligent_cabin/app/schemas/configuration.py b/intelligent_cabin/app/schemas/configuration.py
new file mode 100644
index 0000000..cf4b255
--- /dev/null
+++ b/intelligent_cabin/app/schemas/configuration.py
@@ -0,0 +1,135 @@
+from __future__ import annotations
+
+from typing import Any, Literal
+
+from pydantic import BaseModel, Field
+
+from app.schemas.intent import IntentDefinition
+
+
+class ActionDefinition(BaseModel):
+ action_id: str
+ plugin_id: str
+ risk_level: Literal["low", "medium", "high"] = "low"
+ metadata: dict[str, Any] = Field(default_factory=dict)
+
+
+class DomainIntentDefinition(BaseModel):
+ intent_id: str
+ domain: str
+ action_id: str | None = None
+ plugin_id: str | None = None
+ risk_level: Literal["low", "medium", "high"] | None = None
+ label: str | None = None
+ required_slots: list[str] = Field(default_factory=list)
+ ask_templates: dict[str, str] = Field(default_factory=dict)
+ keywords: list[str] = Field(default_factory=list)
+ examples: list[str] = Field(default_factory=list)
+
+ def to_intent_definition(self, actions: dict[str, ActionDefinition]) -> IntentDefinition:
+ plugin_id = self.plugin_id
+ risk_level = self.risk_level
+ if self.action_id:
+ action = actions[self.action_id]
+ plugin_id = action.plugin_id
+ if risk_level is None:
+ risk_level = action.risk_level
+ if not plugin_id:
+ raise ValueError(f"intent {self.intent_id} is missing plugin_id/action_id mapping")
+ return IntentDefinition(
+ intent_id=self.intent_id,
+ plugin_id=plugin_id,
+ domain=self.domain,
+ risk_level=risk_level or "low",
+ required_slots=self.required_slots,
+ ask_templates=self.ask_templates,
+ keywords=self.keywords,
+ examples=self.examples,
+ )
+
+
+class DomainConfig(BaseModel):
+ intents: list[DomainIntentDefinition] = Field(default_factory=list)
+
+
+class ActionsConfig(BaseModel):
+ actions: list[ActionDefinition] = Field(default_factory=list)
+
+
+class ResponsesConfig(BaseModel):
+ templates: dict[str, str] = Field(default_factory=dict)
+
+
+class FormDefinition(BaseModel):
+ intent_id: str
+ required_slots: list[str] = Field(default_factory=list)
+ ask_templates: dict[str, str] = Field(default_factory=dict)
+
+
+class FormsConfig(BaseModel):
+ forms: list[FormDefinition] = Field(default_factory=list)
+
+
+class ConfirmationRuleConfig(BaseModel):
+ positive_tokens: list[str] = Field(default_factory=list)
+ negative_tokens: list[str] = Field(default_factory=list)
+ required_intents: list[str] = Field(default_factory=list)
+ required_risk_levels: list[Literal["low", "medium", "high"]] = Field(default_factory=list)
+
+
+class StopRuleConfig(BaseModel):
+ phrases: list[str] = Field(default_factory=list)
+
+
+class DialogRulesConfig(BaseModel):
+ stop: StopRuleConfig = Field(default_factory=StopRuleConfig)
+ confirmation: ConfirmationRuleConfig = Field(default_factory=ConfirmationRuleConfig)
+
+
+class DialogActPatternDefinition(BaseModel):
+ act_id: str
+ phrases: list[str] = Field(default_factory=list)
+ # 正则列表:文本匹配任意一个则命中该 act(用于数字类 inform)
+ numeric_patterns: list[str] = Field(default_factory=list)
+
+
+class DialogActsConfig(BaseModel):
+ acts: list[DialogActPatternDefinition] = Field(default_factory=list)
+
+
+# ── Context Rewrite Config ────────────────────────────────────────────────────
+
+class ParamContextDefinition(BaseModel):
+ """一类可相对调节参数的上下文改写规则。"""
+ intent_ids: list[str]
+ slot_name: str
+ unit: str = ""
+ step: int | float = 1
+ min_value: int | float = 0
+ max_value: int | float = 9999
+ default_value: int | float = 0
+ up_phrases: list[str] = Field(default_factory=list)
+ down_phrases: list[str] = Field(default_factory=list)
+ rewrite_template: str = "{value}"
+
+
+class ContextRewriteConfig(BaseModel):
+ param_contexts: list[ParamContextDefinition] = Field(default_factory=list)
+
+
+class WorkflowTemplateStepOverride(BaseModel):
+ depends_on: list[int] = Field(default_factory=list)
+ condition: dict[str, Any] = Field(default_factory=dict)
+ requires_confirmation: bool = False
+
+
+class WorkflowTemplateDefinition(BaseModel):
+ template_id: str
+ workflow_type: Literal["sequence", "conditional", "parallel"] = "sequence"
+ intent_sequence: list[str] = Field(default_factory=list)
+ step_overrides: list[WorkflowTemplateStepOverride] = Field(default_factory=list)
+ trigger_keywords: list[str] = Field(default_factory=list)
+
+
+class WorkflowTemplatesConfig(BaseModel):
+ templates: list[WorkflowTemplateDefinition] = Field(default_factory=list)
diff --git a/intelligent_cabin/app/schemas/debug.py b/intelligent_cabin/app/schemas/debug.py
new file mode 100644
index 0000000..d4c25ac
--- /dev/null
+++ b/intelligent_cabin/app/schemas/debug.py
@@ -0,0 +1,42 @@
+from __future__ import annotations
+
+from typing import Any
+
+from pydantic import BaseModel, Field
+
+
+class IntentCandidate(BaseModel):
+ intent_id: str
+ score: float = 0.0
+ reason: str | None = None
+ model_name: str | None = None
+ raw_label: str | None = None
+ metadata: dict[str, Any] = Field(default_factory=dict)
+
+
+class MatcherStageDebug(BaseModel):
+ stage: str
+ accepted: bool = False
+ selected_intent: str | None = None
+ score: float = 0.0
+ elapsed_ms: float | None = None
+ reason: str | None = None
+ model_name: str | None = None
+ backend: str | None = None
+ fallback_used: bool = False
+ raw_label: str | None = None
+ error_message: str | None = None
+ metadata: dict[str, Any] = Field(default_factory=dict)
+ candidates: list[IntentCandidate] = Field(default_factory=list)
+
+
+class RoutingDebug(BaseModel):
+ selected_intent: str | None = None
+ matched_stage: str | None = None
+ decision: str = "reject"
+ decision_reason: str | None = None
+ confidence_grade: str | None = None
+ total_match_latency_ms: float | None = None
+ unknown_detected: bool = False
+ extracted_slots: dict[str, Any] = Field(default_factory=dict)
+ stages: list[MatcherStageDebug] = Field(default_factory=list)
diff --git a/intelligent_cabin/app/schemas/demo.py b/intelligent_cabin/app/schemas/demo.py
new file mode 100644
index 0000000..1ffccc3
--- /dev/null
+++ b/intelligent_cabin/app/schemas/demo.py
@@ -0,0 +1,20 @@
+from __future__ import annotations
+
+from typing import Literal
+
+from pydantic import BaseModel, Field
+
+
+class DemoRuntimeConfig(BaseModel):
+ matcher_pipeline: Literal["classifier"]
+ classifier_backend: Literal["mock", "bert", "remote", "joint_bert"]
+ session_backend: Literal["memory", "redis"]
+ slot_extractor_backend: str
+ planner_backend: str
+ planner_model_name: str
+
+
+class DemoRuntimeUpdateRequest(BaseModel):
+ matcher_pipeline: Literal["classifier"] = Field(default="classifier")
+ classifier_backend: Literal["mock", "bert", "remote", "joint_bert"]
+ session_backend: Literal["memory", "redis"]
diff --git a/intelligent_cabin/app/schemas/intent.py b/intelligent_cabin/app/schemas/intent.py
new file mode 100644
index 0000000..ccf3cf5
--- /dev/null
+++ b/intelligent_cabin/app/schemas/intent.py
@@ -0,0 +1,16 @@
+from __future__ import annotations
+
+from typing import Literal
+
+from pydantic import BaseModel, Field
+
+
+class IntentDefinition(BaseModel):
+ intent_id: str
+ plugin_id: str
+ domain: str
+ risk_level: Literal["low", "medium", "high"] = "low"
+ required_slots: list[str] = Field(default_factory=list)
+ ask_templates: dict[str, str] = Field(default_factory=dict)
+ keywords: list[str] = Field(default_factory=list)
+ examples: list[str] = Field(default_factory=list)
diff --git a/intelligent_cabin/app/schemas/workflow.py b/intelligent_cabin/app/schemas/workflow.py
new file mode 100644
index 0000000..6167e94
--- /dev/null
+++ b/intelligent_cabin/app/schemas/workflow.py
@@ -0,0 +1,38 @@
+from __future__ import annotations
+
+from typing import Any, Literal
+
+from pydantic import BaseModel, Field
+
+
+class WorkflowStep(BaseModel):
+ step: int
+ step_id: str
+ intent_id: str
+ plugin_id: str
+ action: str
+ status: Literal["pending", "running", "completed", "failed", "skipped", "waiting_confirmation"] = "pending"
+ depends_on: list[str] = Field(default_factory=list)
+ slots: dict[str, Any] = Field(default_factory=dict)
+ condition: dict[str, Any] = Field(default_factory=dict)
+ requires_confirmation: bool = False
+ timeout_ms: int = 1500
+
+
+class MissingSlot(BaseModel):
+ slot_name: str
+ ask_template: str
+ priority: int = 1
+
+
+class Workflow(BaseModel):
+ workflow_id: str
+ workflow_type: Literal["single", "sequence", "conditional", "parallel"] = "single"
+ domain: str
+ intent_id: str
+ status: Literal["ready", "waiting_slot", "waiting_confirmation", "running", "completed", "failed"] = "ready"
+ risk_level: Literal["low", "medium", "high"] = "low"
+ slots: dict[str, Any] = Field(default_factory=dict)
+ missing_slots: list[MissingSlot] = Field(default_factory=list)
+ steps: list[WorkflowStep] = Field(default_factory=list)
+ meta: dict[str, Any] = Field(default_factory=dict)
diff --git a/intelligent_cabin/app/services/__init__.py b/intelligent_cabin/app/services/__init__.py
new file mode 100644
index 0000000..013d4a4
--- /dev/null
+++ b/intelligent_cabin/app/services/__init__.py
@@ -0,0 +1 @@
+"""Application services for orchestration and session management."""
diff --git a/intelligent_cabin/app/services/__pycache__/__init__.cpython-311.pyc b/intelligent_cabin/app/services/__pycache__/__init__.cpython-311.pyc
new file mode 100644
index 0000000..dcc3343
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/__init__.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/__init__.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/__init__.cpython-312.pyc
new file mode 100644
index 0000000..da8963f
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/__init__.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/__init__.cpython-313.pyc b/intelligent_cabin/app/services/__pycache__/__init__.cpython-313.pyc
new file mode 100644
index 0000000..e8892d5
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/__init__.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/agent_service.cpython-311.pyc b/intelligent_cabin/app/services/__pycache__/agent_service.cpython-311.pyc
new file mode 100644
index 0000000..f146287
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/agent_service.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/agent_service.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/agent_service.cpython-312.pyc
new file mode 100644
index 0000000..dd18fc4
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/agent_service.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/agent_service.cpython-313.pyc b/intelligent_cabin/app/services/__pycache__/agent_service.cpython-313.pyc
new file mode 100644
index 0000000..444d14c
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/agent_service.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/classifier.cpython-311.pyc b/intelligent_cabin/app/services/__pycache__/classifier.cpython-311.pyc
new file mode 100644
index 0000000..ce58903
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/classifier.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/classifier.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/classifier.cpython-312.pyc
new file mode 100644
index 0000000..2ccf131
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/classifier.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/classifier.cpython-313.pyc b/intelligent_cabin/app/services/__pycache__/classifier.cpython-313.pyc
new file mode 100644
index 0000000..cb9091a
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/classifier.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/config_loader.cpython-311.pyc b/intelligent_cabin/app/services/__pycache__/config_loader.cpython-311.pyc
new file mode 100644
index 0000000..506ba9b
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/config_loader.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/config_loader.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/config_loader.cpython-312.pyc
new file mode 100644
index 0000000..64c60cd
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/config_loader.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/config_loader.cpython-313.pyc b/intelligent_cabin/app/services/__pycache__/config_loader.cpython-313.pyc
new file mode 100644
index 0000000..d6f93a0
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/config_loader.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/dialog_act.cpython-311.pyc b/intelligent_cabin/app/services/__pycache__/dialog_act.cpython-311.pyc
new file mode 100644
index 0000000..5766c1c
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/dialog_act.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/dialog_act.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/dialog_act.cpython-312.pyc
new file mode 100644
index 0000000..4e39ad0
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/dialog_act.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/dialog_act.cpython-313.pyc b/intelligent_cabin/app/services/__pycache__/dialog_act.cpython-313.pyc
new file mode 100644
index 0000000..f80e8af
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/dialog_act.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/dialog_rules.cpython-311.pyc b/intelligent_cabin/app/services/__pycache__/dialog_rules.cpython-311.pyc
new file mode 100644
index 0000000..f793319
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/dialog_rules.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/dialog_rules.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/dialog_rules.cpython-312.pyc
new file mode 100644
index 0000000..8f315f9
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/dialog_rules.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/dialog_rules.cpython-313.pyc b/intelligent_cabin/app/services/__pycache__/dialog_rules.cpython-313.pyc
new file mode 100644
index 0000000..353327d
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/dialog_rules.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/intent_registry.cpython-311.pyc b/intelligent_cabin/app/services/__pycache__/intent_registry.cpython-311.pyc
new file mode 100644
index 0000000..50ea140
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/intent_registry.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/intent_registry.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/intent_registry.cpython-312.pyc
new file mode 100644
index 0000000..7b55e53
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/intent_registry.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/intent_registry.cpython-313.pyc b/intelligent_cabin/app/services/__pycache__/intent_registry.cpython-313.pyc
new file mode 100644
index 0000000..b5eb12c
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/intent_registry.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/joint_nlu.cpython-311.pyc b/intelligent_cabin/app/services/__pycache__/joint_nlu.cpython-311.pyc
new file mode 100644
index 0000000..9218edd
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/joint_nlu.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/joint_nlu.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/joint_nlu.cpython-312.pyc
new file mode 100644
index 0000000..5ffeb1a
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/joint_nlu.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/joint_nlu.cpython-313.pyc b/intelligent_cabin/app/services/__pycache__/joint_nlu.cpython-313.pyc
new file mode 100644
index 0000000..b9868f7
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/joint_nlu.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/knowledge_llm.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/knowledge_llm.cpython-312.pyc
new file mode 100644
index 0000000..c836d43
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/knowledge_llm.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/knowledge_store.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/knowledge_store.cpython-312.pyc
new file mode 100644
index 0000000..79c8f35
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/knowledge_store.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/multi_intent_detector.cpython-311.pyc b/intelligent_cabin/app/services/__pycache__/multi_intent_detector.cpython-311.pyc
new file mode 100644
index 0000000..1bd41f4
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/multi_intent_detector.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/multi_intent_detector.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/multi_intent_detector.cpython-312.pyc
new file mode 100644
index 0000000..4e709f3
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/multi_intent_detector.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/multi_intent_detector.cpython-313.pyc b/intelligent_cabin/app/services/__pycache__/multi_intent_detector.cpython-313.pyc
new file mode 100644
index 0000000..0a99cea
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/multi_intent_detector.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/planner.cpython-311.pyc b/intelligent_cabin/app/services/__pycache__/planner.cpython-311.pyc
new file mode 100644
index 0000000..0613b09
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/planner.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/planner.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/planner.cpython-312.pyc
new file mode 100644
index 0000000..2ec2803
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/planner.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/planner.cpython-313.pyc b/intelligent_cabin/app/services/__pycache__/planner.cpython-313.pyc
new file mode 100644
index 0000000..ec095a8
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/planner.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/response_policy.cpython-311.pyc b/intelligent_cabin/app/services/__pycache__/response_policy.cpython-311.pyc
new file mode 100644
index 0000000..bfa4aa0
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/response_policy.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/response_policy.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/response_policy.cpython-312.pyc
new file mode 100644
index 0000000..f1d4b86
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/response_policy.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/response_policy.cpython-313.pyc b/intelligent_cabin/app/services/__pycache__/response_policy.cpython-313.pyc
new file mode 100644
index 0000000..adfd30f
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/response_policy.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/rewrite_engine.cpython-311.pyc b/intelligent_cabin/app/services/__pycache__/rewrite_engine.cpython-311.pyc
new file mode 100644
index 0000000..40e70e0
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/rewrite_engine.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/rewrite_engine.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/rewrite_engine.cpython-312.pyc
new file mode 100644
index 0000000..b9296c9
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/rewrite_engine.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/rewrite_engine.cpython-313.pyc b/intelligent_cabin/app/services/__pycache__/rewrite_engine.cpython-313.pyc
new file mode 100644
index 0000000..fa56059
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/rewrite_engine.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/router.cpython-311.pyc b/intelligent_cabin/app/services/__pycache__/router.cpython-311.pyc
new file mode 100644
index 0000000..3117485
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/router.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/router.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/router.cpython-312.pyc
new file mode 100644
index 0000000..cbef91f
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/router.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/router.cpython-313.pyc b/intelligent_cabin/app/services/__pycache__/router.cpython-313.pyc
new file mode 100644
index 0000000..b73898c
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/router.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/session_store.cpython-311.pyc b/intelligent_cabin/app/services/__pycache__/session_store.cpython-311.pyc
new file mode 100644
index 0000000..41d767a
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/session_store.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/session_store.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/session_store.cpython-312.pyc
new file mode 100644
index 0000000..c15c43c
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/session_store.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/session_store.cpython-313.pyc b/intelligent_cabin/app/services/__pycache__/session_store.cpython-313.pyc
new file mode 100644
index 0000000..7a9b507
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/session_store.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/social.cpython-311.pyc b/intelligent_cabin/app/services/__pycache__/social.cpython-311.pyc
new file mode 100644
index 0000000..3f761b8
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/social.cpython-311.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/social.cpython-312.pyc b/intelligent_cabin/app/services/__pycache__/social.cpython-312.pyc
new file mode 100644
index 0000000..e73e177
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/social.cpython-312.pyc differ
diff --git a/intelligent_cabin/app/services/__pycache__/social.cpython-313.pyc b/intelligent_cabin/app/services/__pycache__/social.cpython-313.pyc
new file mode 100644
index 0000000..3f5374f
Binary files /dev/null and b/intelligent_cabin/app/services/__pycache__/social.cpython-313.pyc differ
diff --git a/intelligent_cabin/app/services/agent_service.py b/intelligent_cabin/app/services/agent_service.py
new file mode 100644
index 0000000..9696df5
--- /dev/null
+++ b/intelligent_cabin/app/services/agent_service.py
@@ -0,0 +1,1305 @@
+from __future__ import annotations
+
+import re
+from time import perf_counter
+from uuid import uuid4
+
+from app.plugins.base import PluginRegistry
+from app.schemas.chat import ChatRequest, ChatResponse, FillSlotsRequest
+from app.schemas.debug import IntentCandidate, MatcherStageDebug, RoutingDebug
+from app.schemas.workflow import MissingSlot, Workflow, WorkflowStep
+from app.services.dialog_act import DialogActEngine
+from app.services.dialog_rules import DialogRuleEngine
+from app.services.intent_registry import IntentRegistry
+from app.services.knowledge_llm import DashScopeKnowledgeLLM
+from app.services.planner import PlanningResult, WorkflowPlanner
+from app.services.response_policy import ResponsePolicy
+from app.services.rewrite_engine import ContextRewriteEngine, RewriteResult
+from app.services.router import Router
+from app.services.session_store import InMemorySessionStore, SessionState
+from app.services.social import SocialResponder, SocialRouter
+
+
+class AgentService:
+ _MUSIC_GENRE_HINTS = ("轻音乐", "摇滚", "古典", "民谣", "爵士", "流行", "儿歌")
+
+ def __init__(
+ self,
+ intent_registry: IntentRegistry,
+ router: Router,
+ plugins: PluginRegistry,
+ session_store: InMemorySessionStore | None = None,
+ rewrite_engine: ContextRewriteEngine | None = None,
+ response_policy: ResponsePolicy | None = None,
+ dialog_rules: DialogRuleEngine | None = None,
+ dialog_act_engine: DialogActEngine | None = None,
+ planner: WorkflowPlanner | None = None,
+ social_router: SocialRouter | None = None,
+ social_responder: SocialResponder | None = None,
+ knowledge_llm: DashScopeKnowledgeLLM | None = None,
+ ) -> None:
+ self.session_store = session_store or InMemorySessionStore()
+ self.intent_registry = intent_registry
+ self.router = router
+ self.plugins = plugins
+ self.rewrite_engine = rewrite_engine or ContextRewriteEngine()
+ self.response_policy = response_policy or ResponsePolicy()
+ self.dialog_rules = dialog_rules or DialogRuleEngine()
+ self.dialog_act_engine = dialog_act_engine or DialogActEngine()
+ self.planner = planner
+ self.social_router = social_router or SocialRouter()
+ self.social_responder = social_responder
+ self.knowledge_llm = knowledge_llm
+
+ def handle_chat(self, request: ChatRequest) -> ChatResponse:
+ started_at = perf_counter()
+ breakdown: dict[str, float] = {}
+
+ timer_started_at = perf_counter()
+ session = self.session_store.get_or_create(
+ session_id=request.session_id,
+ user_id=request.user_id,
+ channel=request.channel,
+ )
+ self._mark_timing(breakdown, "session_get_or_create_ms", timer_started_at)
+
+ timer_started_at = perf_counter()
+ self._update_dialog_act(session, request.input_text)
+ self._mark_timing(breakdown, "dialog_act_ms", timer_started_at)
+
+ timer_started_at = perf_counter()
+ stop_response = self._handle_stop_request(session, request.input_text)
+ self._mark_timing(breakdown, "stop_check_ms", timer_started_at)
+ if stop_response is not None:
+ first_response_at = perf_counter()
+ timer_started_at = perf_counter()
+ self._record_turn(session, request.input_text, stop_response.reply_text, RewriteResult(request.input_text, request.input_text))
+ self._mark_timing(breakdown, "record_turn_ms", timer_started_at)
+ timer_started_at = perf_counter()
+ self.session_store.save(session)
+ self._mark_timing(breakdown, "session_save_ms", timer_started_at)
+ return self._finalize_response(stop_response, started_at, breakdown, first_response_at)
+
+ if session.status == "waiting_confirmation":
+ confirmation = self._parse_confirmation_decision(request.input_text)
+ if confirmation is not None:
+ timer_started_at = perf_counter()
+ response = self._handle_confirmation(session, request.input_text)
+ self._mark_timing(breakdown, "confirmation_ms", timer_started_at)
+ first_response_at = perf_counter()
+ timer_started_at = perf_counter()
+ self._record_turn(session, request.input_text, response.reply_text, RewriteResult(request.input_text, request.input_text))
+ self._mark_timing(breakdown, "record_turn_ms", timer_started_at)
+ timer_started_at = perf_counter()
+ self.session_store.save(session)
+ self._mark_timing(breakdown, "session_save_ms", timer_started_at)
+ return self._finalize_response(response, started_at, breakdown, first_response_at)
+
+ timer_started_at = perf_counter()
+ continued_response = self._continue_active_task(session, request.input_text)
+ self._mark_timing(breakdown, "active_task_ms", timer_started_at)
+ if continued_response is not None:
+ first_response_at = perf_counter()
+ timer_started_at = perf_counter()
+ self._record_turn(session, request.input_text, continued_response.reply_text, RewriteResult(request.input_text, request.input_text))
+ self._mark_timing(breakdown, "record_turn_ms", timer_started_at)
+ timer_started_at = perf_counter()
+ self.session_store.save(session)
+ self._mark_timing(breakdown, "session_save_ms", timer_started_at)
+ return self._finalize_response(continued_response, started_at, breakdown, first_response_at)
+
+ timer_started_at = perf_counter()
+ social_response = self._handle_social_turn(session, request.input_text)
+ self._mark_timing(breakdown, "social_route_ms", timer_started_at)
+ if social_response is not None:
+ first_response_at = perf_counter()
+ timer_started_at = perf_counter()
+ self._record_turn(session, request.input_text, social_response.reply_text, RewriteResult(request.input_text, request.input_text))
+ self._mark_timing(breakdown, "record_turn_ms", timer_started_at)
+ timer_started_at = perf_counter()
+ self.session_store.save(session)
+ self._mark_timing(breakdown, "session_save_ms", timer_started_at)
+ return self._finalize_response(social_response, started_at, breakdown, first_response_at)
+
+ timer_started_at = perf_counter()
+ rewrite_result = self.rewrite_engine.rewrite(request.input_text, session)
+ rewrite_elapsed_ms = round((perf_counter() - timer_started_at) * 1000, 3)
+ breakdown["rewrite_ms"] = rewrite_elapsed_ms
+
+ timer_started_at = perf_counter()
+ route_result = self.router.route(rewrite_result.rewritten_text)
+ self._mark_timing(breakdown, "route_ms", timer_started_at)
+ self._attach_rewrite_debug(route_result.debug, rewrite_result, rewrite_elapsed_ms)
+
+ timer_started_at = perf_counter()
+ # ── BERT 信号不稳时,知识库优先检索(在 Planner 之前)──────────────────
+ # decision=route_to_cloud 表示 BERT 低置信,需发给 cloud planner
+ # 但如果本地 MD 知识库关键词已命中,直接走 knowledge_llm,跳过 cloud planner
+ if route_result.debug.decision == "route_to_cloud" and self.knowledge_llm is not None:
+ quick_hits = self.knowledge_llm._store.search(rewrite_result.rewritten_text, top_k=1)
+ if quick_hits and quick_hits[0].score >= 3.0: # 至少命中一个 title 或多个 body 词
+ early_knowledge = self._try_knowledge_llm(
+ session, request.input_text, route_result.debug, rewrite_result
+ )
+ if early_knowledge is not None:
+ self._mark_timing(breakdown, "knowledge_llm_ms", timer_started_at)
+ first_response_at = perf_counter()
+ self._record_turn(session, request.input_text, early_knowledge.reply_text, rewrite_result)
+ self.session_store.save(session)
+ return self._finalize_response(early_knowledge, started_at, breakdown, first_response_at)
+ planning_result = self._plan_if_needed(session, rewrite_result.rewritten_text, route_result.debug)
+ self._mark_timing(breakdown, "planner_ms", timer_started_at)
+ if planning_result is not None and planning_result.accepted and planning_result.steps:
+ timer_started_at = perf_counter()
+ response = self._start_planned_workflow(session, planning_result, route_result.debug, request.input_text, rewrite_result)
+ self._mark_timing(breakdown, "response_build_ms", timer_started_at)
+ first_response_at = perf_counter()
+ timer_started_at = perf_counter()
+ self.session_store.save(session)
+ self._mark_timing(breakdown, "session_save_ms", timer_started_at)
+ return self._finalize_response(response, started_at, breakdown, first_response_at)
+
+ timer_started_at = perf_counter()
+ decision_response = self._handle_route_decision(session, route_result.debug, request.input_text, rewrite_result)
+ self._mark_timing(breakdown, "decision_response_ms", timer_started_at)
+ if decision_response is not None:
+ first_response_at = perf_counter()
+ timer_started_at = perf_counter()
+ self.session_store.save(session)
+ self._mark_timing(breakdown, "session_save_ms", timer_started_at)
+ return self._finalize_response(decision_response, started_at, breakdown, first_response_at)
+ intent = route_result.intent
+ if intent is None:
+ timer_started_at = perf_counter()
+ # ── BERT 未命中:尝试 LLM + knowledge_search function call 兆底 ──
+ knowledge_response = self._try_knowledge_llm(
+ session, request.input_text, route_result.debug, rewrite_result
+ )
+ if knowledge_response is not None:
+ self._mark_timing(breakdown, "knowledge_llm_ms", timer_started_at)
+ first_response_at = perf_counter()
+ self._record_turn(session, request.input_text, knowledge_response.reply_text, rewrite_result)
+ self.session_store.save(session)
+ return self._finalize_response(knowledge_response, started_at, breakdown, first_response_at)
+ response = self._fallback_response(session.session_id, route_result.debug)
+ self._mark_timing(breakdown, "response_build_ms", timer_started_at)
+ first_response_at = perf_counter()
+ timer_started_at = perf_counter()
+ self._record_turn(session, request.input_text, response.reply_text, rewrite_result)
+ self._mark_timing(breakdown, "record_turn_ms", timer_started_at)
+ timer_started_at = perf_counter()
+ self.session_store.save(session)
+ self._mark_timing(breakdown, "session_save_ms", timer_started_at)
+ return self._finalize_response(response, started_at, breakdown, first_response_at)
+
+ if session.current_intent != intent.intent_id:
+ session.pending_slots = []
+ session.slots = {}
+ session.workflow = None
+
+ session.current_intent = intent.intent_id
+ session.status = "understanding"
+ timer_started_at = perf_counter()
+ extracted_slots = self.router.extract_slots(rewrite_result.rewritten_text, intent)
+ self._mark_timing(breakdown, "slot_extract_ms", timer_started_at)
+ route_result.debug.extracted_slots = extracted_slots.copy()
+ session.routing_debug = route_result.debug.model_dump()
+ session.slots.update(extracted_slots)
+ self._update_context_memory(session, intent.intent_id, extracted_slots)
+
+ timer_started_at = perf_counter()
+ response = self._build_response_from_session(session)
+ self._mark_timing(breakdown, "response_build_ms", timer_started_at)
+ first_response_at = perf_counter()
+ timer_started_at = perf_counter()
+ self._record_turn(session, request.input_text, response.reply_text, rewrite_result)
+ self._mark_timing(breakdown, "record_turn_ms", timer_started_at)
+ timer_started_at = perf_counter()
+ self.session_store.save(session)
+ self._mark_timing(breakdown, "session_save_ms", timer_started_at)
+ return self._finalize_response(response, started_at, breakdown, first_response_at)
+
+ def _handle_route_decision(
+ self,
+ session: SessionState,
+ routing_debug: RoutingDebug,
+ user_text: str,
+ rewrite_result: RewriteResult,
+ ) -> ChatResponse | None:
+ if routing_debug.decision == "execute":
+ return None
+ if routing_debug.decision == "clarify":
+ response = ChatResponse(
+ session_id=session.session_id,
+ reply_type="clarify",
+ reply_text=self.response_policy.clarify(self._top_candidate_ids(routing_debug)),
+ intent=routing_debug.selected_intent,
+ domain=self._domain_for_intent(routing_debug.selected_intent),
+ decision=routing_debug.decision,
+ decision_reason=routing_debug.decision_reason,
+ status="clarify",
+
+ routing_debug=routing_debug,
+ trace_id=self._trace_id(),
+ )
+ self._record_turn(session, user_text, response.reply_text, rewrite_result)
+ return response
+ if routing_debug.decision == "reject":
+ response = ChatResponse(
+ session_id=session.session_id,
+ reply_type="reject",
+ reply_text=self.response_policy.reject(),
+ decision=routing_debug.decision,
+ decision_reason=routing_debug.decision_reason,
+ status="rejected",
+ routing_debug=routing_debug,
+ trace_id=self._trace_id(),
+ )
+ self._record_turn(session, user_text, response.reply_text, rewrite_result)
+ return response
+ if routing_debug.decision == "route_to_cloud":
+ candidate_ids = self._top_candidate_ids(routing_debug)
+ planner_stage = next((stage for stage in reversed(routing_debug.stages) if stage.stage == "planner"), None)
+ planner_reason = planner_stage.reason if planner_stage is not None else routing_debug.decision_reason
+ if self._planner_indicates_out_of_scope(planner_stage):
+ response = ChatResponse(
+ session_id=session.session_id,
+ reply_type="reject",
+ reply_text=self.response_policy.reject(),
+ intent=routing_debug.selected_intent,
+ domain=self._domain_for_intent(routing_debug.selected_intent),
+ decision="reject",
+ decision_reason=planner_reason,
+
+ status="rejected",
+ routing_debug=routing_debug,
+ trace_id=self._trace_id(),
+ )
+ elif candidate_ids:
+ response = ChatResponse(
+ session_id=session.session_id,
+ reply_type="clarify",
+ reply_text=self.response_policy.clarify(candidate_ids),
+ intent=routing_debug.selected_intent,
+ domain=self._domain_for_intent(routing_debug.selected_intent),
+ decision=routing_debug.decision,
+ decision_reason=planner_reason,
+
+ status="route_to_cloud",
+ routing_debug=routing_debug,
+ trace_id=self._trace_id(),
+ )
+ else:
+ response = ChatResponse(
+ session_id=session.session_id,
+ reply_type="fallback",
+ reply_text=self.response_policy.fallback(),
+ intent=routing_debug.selected_intent,
+ domain=self._domain_for_intent(routing_debug.selected_intent),
+ decision=routing_debug.decision,
+ decision_reason=planner_reason,
+
+ status="route_to_cloud",
+ routing_debug=routing_debug,
+ trace_id=self._trace_id(),
+ )
+ self._record_turn(session, user_text, response.reply_text, rewrite_result)
+ return response
+ return None
+
+ def handle_fill_slots(self, request: FillSlotsRequest) -> ChatResponse:
+ started_at = perf_counter()
+ breakdown: dict[str, float] = {}
+
+ timer_started_at = perf_counter()
+ session = self.session_store.get(request.session_id)
+ self._mark_timing(breakdown, "session_get_ms", timer_started_at)
+ if session is None or session.current_intent is None:
+ timer_started_at = perf_counter()
+ response = ChatResponse(
+ session_id=request.session_id,
+ reply_type="fallback",
+ reply_text=self.response_policy.fallback(),
+ status="fallback",
+ routing_debug=None,
+ trace_id=self._trace_id(),
+ )
+ self._mark_timing(breakdown, "response_build_ms", timer_started_at)
+ first_response_at = perf_counter()
+ if session is not None:
+ timer_started_at = perf_counter()
+ self._record_turn(session, request.input_text, response.reply_text, RewriteResult(request.input_text, request.input_text))
+ self._mark_timing(breakdown, "record_turn_ms", timer_started_at)
+ timer_started_at = perf_counter()
+ self.session_store.save(session)
+ self._mark_timing(breakdown, "session_save_ms", timer_started_at)
+ return self._finalize_response(response, started_at, breakdown, first_response_at)
+
+ timer_started_at = perf_counter()
+ self._update_dialog_act(session, request.input_text)
+ self._mark_timing(breakdown, "dialog_act_ms", timer_started_at)
+ timer_started_at = perf_counter()
+ stop_response = self._handle_stop_request(session, request.input_text)
+ self._mark_timing(breakdown, "stop_check_ms", timer_started_at)
+ if stop_response is not None:
+ first_response_at = perf_counter()
+ timer_started_at = perf_counter()
+ self._record_turn(session, request.input_text, stop_response.reply_text, RewriteResult(request.input_text, request.input_text))
+ self._mark_timing(breakdown, "record_turn_ms", timer_started_at)
+ timer_started_at = perf_counter()
+ self.session_store.save(session)
+ self._mark_timing(breakdown, "session_save_ms", timer_started_at)
+ return self._finalize_response(stop_response, started_at, breakdown, first_response_at)
+
+ if session.status == "waiting_confirmation":
+ if self._parse_confirmation_decision(request.input_text) is not None:
+ timer_started_at = perf_counter()
+ response = self._handle_confirmation(session, request.input_text)
+ self._mark_timing(breakdown, "confirmation_ms", timer_started_at)
+ first_response_at = perf_counter()
+ timer_started_at = perf_counter()
+ self._record_turn(session, request.input_text, response.reply_text, RewriteResult(request.input_text, request.input_text))
+ self._mark_timing(breakdown, "record_turn_ms", timer_started_at)
+ timer_started_at = perf_counter()
+ self.session_store.save(session)
+ self._mark_timing(breakdown, "session_save_ms", timer_started_at)
+ return self._finalize_response(response, started_at, breakdown, first_response_at)
+
+ timer_started_at = perf_counter()
+ continued_response = self._continue_active_task(session, request.input_text)
+ self._mark_timing(breakdown, "active_task_ms", timer_started_at)
+ if continued_response is not None:
+ first_response_at = perf_counter()
+ timer_started_at = perf_counter()
+ self._record_turn(session, request.input_text, continued_response.reply_text, RewriteResult(request.input_text, request.input_text))
+ self._mark_timing(breakdown, "record_turn_ms", timer_started_at)
+ timer_started_at = perf_counter()
+ self.session_store.save(session)
+ self._mark_timing(breakdown, "session_save_ms", timer_started_at)
+ return self._finalize_response(continued_response, started_at, breakdown, first_response_at)
+
+ timer_started_at = perf_counter()
+ social_response = self._handle_social_turn(session, request.input_text)
+ self._mark_timing(breakdown, "social_route_ms", timer_started_at)
+ if social_response is not None:
+ first_response_at = perf_counter()
+ timer_started_at = perf_counter()
+ self._record_turn(session, request.input_text, social_response.reply_text, RewriteResult(request.input_text, request.input_text))
+ self._mark_timing(breakdown, "record_turn_ms", timer_started_at)
+ timer_started_at = perf_counter()
+ self.session_store.save(session)
+ self._mark_timing(breakdown, "session_save_ms", timer_started_at)
+ return self._finalize_response(social_response, started_at, breakdown, first_response_at)
+
+ if session.status == "waiting_confirmation":
+ timer_started_at = perf_counter()
+ response = self._handle_confirmation(session, request.input_text)
+ self._mark_timing(breakdown, "confirmation_ms", timer_started_at)
+ first_response_at = perf_counter()
+ timer_started_at = perf_counter()
+ self._record_turn(session, request.input_text, response.reply_text, RewriteResult(request.input_text, request.input_text))
+ self._mark_timing(breakdown, "record_turn_ms", timer_started_at)
+ timer_started_at = perf_counter()
+ self.session_store.save(session)
+ self._mark_timing(breakdown, "session_save_ms", timer_started_at)
+ return self._finalize_response(response, started_at, breakdown, first_response_at)
+
+ existing_workflow = self._workflow_from_session(session)
+ if existing_workflow is not None and existing_workflow.workflow_type != "single":
+ intent = self.intent_registry.get(session.current_intent)
+ timer_started_at = perf_counter()
+ extracted_slots = self._extract_continuation_slots(session, intent, request.input_text)
+ self._mark_timing(breakdown, "slot_extract_ms", timer_started_at)
+ session.slots.update(extracted_slots)
+ self._update_context_memory(session, intent.intent_id, extracted_slots)
+ timer_started_at = perf_counter()
+ response = self._continue_planned_workflow(
+ session,
+ existing_workflow,
+ self._routing_debug_from_session(session),
+ )
+ self._mark_timing(breakdown, "response_build_ms", timer_started_at)
+ first_response_at = perf_counter()
+ timer_started_at = perf_counter()
+ self._record_turn(session, request.input_text, response.reply_text, RewriteResult(request.input_text, request.input_text))
+ self._mark_timing(breakdown, "record_turn_ms", timer_started_at)
+ timer_started_at = perf_counter()
+ self.session_store.save(session)
+ self._mark_timing(breakdown, "session_save_ms", timer_started_at)
+ return self._finalize_response(response, started_at, breakdown, first_response_at)
+
+ intent = self.intent_registry.get(session.current_intent)
+ timer_started_at = perf_counter()
+ extracted_slots = self._extract_continuation_slots(session, intent, request.input_text)
+ self._mark_timing(breakdown, "slot_extract_ms", timer_started_at)
+ session.slots.update(extracted_slots)
+ self._update_context_memory(session, intent.intent_id, extracted_slots)
+ if session.routing_debug is not None:
+ routing_debug = RoutingDebug.model_validate(session.routing_debug)
+ routing_debug.extracted_slots = session.slots.copy()
+ session.routing_debug = routing_debug.model_dump()
+ timer_started_at = perf_counter()
+ response = self._build_response_from_session(session)
+ self._mark_timing(breakdown, "response_build_ms", timer_started_at)
+ first_response_at = perf_counter()
+ timer_started_at = perf_counter()
+ self._record_turn(session, request.input_text, response.reply_text, RewriteResult(request.input_text, request.input_text))
+ self._mark_timing(breakdown, "record_turn_ms", timer_started_at)
+ timer_started_at = perf_counter()
+ self.session_store.save(session)
+ self._mark_timing(breakdown, "session_save_ms", timer_started_at)
+ return self._finalize_response(response, started_at, breakdown, first_response_at)
+
+ def _build_response_from_session(self, session: SessionState) -> ChatResponse:
+ assert session.current_intent is not None
+ intent = self.intent_registry.get(session.current_intent)
+ session.slots = self._normalize_slots_for_intent(intent.intent_id, session.slots)
+ pending_slots = self._pending_slots_for_intent(intent, session.slots)
+
+ if pending_slots:
+ session.pending_slots = pending_slots
+ session.status = "waiting_slot"
+ self.session_store.save(session)
+ first_slot = pending_slots[0]
+ workflow = self._build_workflow(session, pending_slots)
+ return ChatResponse(
+ session_id=session.session_id,
+ reply_type="ask_slot",
+ reply_text=self.response_policy.ask_for_slot(
+ intent,
+ first_slot,
+ self._default_ask_template(intent, first_slot),
+ ),
+ intent=session.current_intent,
+ domain=self._domain_for_intent(session.current_intent),
+ status=session.status,
+ pending_slots=pending_slots,
+ filled_slots=session.slots,
+
+ workflow=workflow,
+ routing_debug=self._routing_debug_from_session(session),
+ trace_id=self._trace_id(),
+ )
+
+ plugin_result = self.plugins.execute(intent.plugin_id, session.slots)
+ session.pending_slots = []
+ session.status = "completed"
+ workflow = self._build_workflow(session, [])
+ workflow.status = "completed"
+ self.session_store.save(session)
+
+ return ChatResponse(
+ session_id=session.session_id,
+ reply_type="workflow_result",
+ reply_text=self.response_policy.workflow_result(intent, plugin_result),
+ intent=session.current_intent,
+ domain=self._domain_for_intent(session.current_intent),
+ status=session.status,
+ pending_slots=[],
+ filled_slots=session.slots,
+
+ workflow=workflow,
+ routing_debug=self._routing_debug_from_session(session),
+ trace_id=self._trace_id(),
+ )
+
+ def _build_workflow(self, session: SessionState, pending_slots: list[str]) -> Workflow:
+ assert session.current_intent is not None
+ intent = self.intent_registry.get(session.current_intent)
+ missing = [
+ MissingSlot(
+ slot_name=slot,
+ ask_template=self._default_ask_template(intent, slot),
+ priority=index + 1,
+ )
+ for index, slot in enumerate(pending_slots)
+ ]
+ step = WorkflowStep(
+ step=1,
+ step_id=f"step_{session.current_intent}_1",
+ intent_id=session.current_intent,
+ plugin_id=intent.plugin_id,
+ action=intent.plugin_id.split(".")[-1],
+ status="pending" if pending_slots else "completed",
+ slots=session.slots.copy(),
+ )
+ workflow = Workflow(
+ workflow_id=f"wf_{session.session_id}",
+ workflow_type="single",
+ domain=intent.domain,
+ intent_id=session.current_intent,
+ status="waiting_slot" if pending_slots else "ready",
+ risk_level=intent.risk_level,
+ slots=session.slots.copy(),
+ missing_slots=missing,
+ steps=[step],
+ meta={
+ "source": "rule_router",
+ "routing_debug": session.routing_debug or {},
+ },
+ )
+ session.workflow = workflow.model_dump()
+ return workflow
+
+ def _fallback_response(self, session_id: str, routing_debug: RoutingDebug | None = None) -> ChatResponse:
+ return ChatResponse(
+ session_id=session_id,
+ reply_type="fallback",
+ reply_text=self.response_policy.fallback(),
+ decision=routing_debug.decision if routing_debug is not None else None,
+ decision_reason=routing_debug.decision_reason if routing_debug is not None else None,
+ status="fallback",
+ routing_debug=routing_debug,
+ trace_id=self._trace_id(),
+ )
+
+ def _handle_stop_request(self, session: SessionState, text: str) -> ChatResponse | None:
+ if not self._is_stop_request(text) or not self._has_active_task(session):
+ return None
+ self._reset_active_task(session)
+ return ChatResponse(
+ session_id=session.session_id,
+ reply_type="text",
+ reply_text=self.response_policy.task_stopped(),
+ status="stopped",
+ pending_slots=[],
+ filled_slots={},
+ workflow=None,
+ routing_debug=None,
+ trace_id=self._trace_id(),
+ )
+
+ def _handle_social_turn(self, session: SessionState, text: str) -> ChatResponse | None:
+ social_route = self.social_router.route(text, session)
+ if social_route.category == "none":
+ return None
+ if self.social_responder is None:
+ reply_text = self.response_policy.open_social_fallback()
+ return self._social_response(
+ session=session,
+ reply_text=reply_text,
+ decision="open_social",
+ decision_reason="open social matched but no responder configured",
+ )
+ social_result = self.social_responder.reply(text, session)
+ reply_text = social_result.text.strip() or self.response_policy.open_social_fallback()
+ return self._social_response(
+ session=session,
+ reply_text=reply_text,
+ decision="open_social",
+ decision_reason=social_route.reason,
+ )
+
+ def _social_response(
+ self,
+ session: SessionState,
+ reply_text: str,
+ decision: str,
+ decision_reason: str,
+ ) -> ChatResponse:
+ session.context_memory["last_dialog_mode"] = decision
+ pending_hint = self.response_policy.pending_task_hint(
+ session.status,
+ session.pending_slots,
+ session.current_intent,
+ )
+ final_reply = self.response_policy.with_pending_hint(reply_text, pending_hint)
+ workflow = self._workflow_from_session(session)
+ status = session.status if session.status != "idle" else "social"
+ return ChatResponse(
+ session_id=session.session_id,
+ reply_type="text",
+ reply_text=final_reply,
+ intent=session.current_intent,
+ domain=self._domain_for_intent(session.current_intent),
+ decision=decision,
+ decision_reason=decision_reason,
+
+ status=status,
+ pending_slots=list(session.pending_slots),
+ filled_slots=session.slots.copy(),
+ workflow=workflow,
+ routing_debug=self._routing_debug_from_session(session),
+ trace_id=self._trace_id(),
+ )
+
+ def _routing_debug_from_session(self, session: SessionState) -> RoutingDebug | None:
+ if session.routing_debug is None:
+ return None
+ return RoutingDebug.model_validate(session.routing_debug)
+
+ def _trace_id(self) -> str:
+ return uuid4().hex
+
+ def _domain_for_intent(self, intent_id: str | None) -> str | None:
+ """Return the domain for a given intent_id, or None if unknown."""
+ if intent_id is None:
+ return None
+ try:
+ return self.intent_registry.get(intent_id).domain
+ except KeyError:
+ return None
+
+ def _planner_indicates_out_of_scope(self, planner_stage: MatcherStageDebug | None) -> bool:
+ if planner_stage is None or planner_stage.accepted:
+ return False
+ reason = str(planner_stage.reason or "").strip().lower()
+ if not reason:
+ return False
+ out_of_scope_signals = (
+ "no matching intent",
+ "there is no matching intent",
+ "not in the catalog",
+ "intent catalog only contains",
+ "provided intent catalog only contains",
+ "out of scope",
+ "third-party app action",
+ "outside known local capabilities",
+ "没有匹配意图",
+ "不在意图目录",
+ "不在目录中",
+ "超出能力范围",
+ "能力之外",
+ )
+ return any(signal in reason for signal in out_of_scope_signals)
+
+ def _mark_timing(self, breakdown: dict[str, float], name: str, started_at: float) -> None:
+ breakdown[name] = round((perf_counter() - started_at) * 1000, 3)
+
+ def _finalize_response(
+ self,
+ response: ChatResponse,
+ started_at: float,
+ breakdown: dict[str, float],
+ first_response_at: float | None = None,
+ ) -> ChatResponse:
+ first_ready_at = first_response_at or perf_counter()
+ response.first_response_latency_ms = round((first_ready_at - started_at) * 1000, 3)
+ response.total_latency_ms = round((perf_counter() - started_at) * 1000, 3)
+ response.processing_breakdown = dict(breakdown)
+ if response.routing_debug is not None:
+ if response.routing_debug.total_match_latency_ms is not None:
+ response.processing_breakdown.setdefault(
+ "match_pipeline_ms",
+ response.routing_debug.total_match_latency_ms,
+ )
+ return response
+
+ def _top_candidate_ids(self, routing_debug: RoutingDebug, limit: int = 3) -> list[str]:
+ if not routing_debug.stages:
+ return []
+ fusion_stage = next((stage for stage in reversed(routing_debug.stages) if stage.stage == "fusion"), None)
+ if fusion_stage is None:
+ return []
+ return [candidate.intent_id for candidate in fusion_stage.candidates[:limit]]
+
+ def _plan_if_needed(
+ self,
+ session: SessionState,
+ text: str,
+ routing_debug: RoutingDebug,
+ ) -> PlanningResult | None:
+ if self.planner is None:
+ return None
+ if not self._should_use_planner(text, routing_debug):
+ return None
+ planner_started_at = perf_counter()
+ result = self.planner.plan(
+ text,
+ self.intent_registry.list(),
+ context={
+ "current_intent": session.current_intent,
+ "slots": session.slots,
+ "context_memory": session.context_memory,
+ },
+ )
+ planner_elapsed_ms = round((perf_counter() - planner_started_at) * 1000, 3)
+ self._attach_planner_debug(routing_debug, result, planner_elapsed_ms)
+ return result
+
+ def _should_use_planner(self, text: str, routing_debug: RoutingDebug) -> bool:
+ fusion_stage = routing_debug.stages[-1] if routing_debug.stages else None
+ has_complex_pattern = any(token in text for token in ("然后", "并且", "同时", "如果", "若", "先", "后", "顺便", "以及"))
+ if has_complex_pattern:
+ return True
+ if self._looks_like_parallel_request(text, fusion_stage):
+ return True
+ if text.count(",") >= 1 or text.count(",") >= 1 or text.count(";") >= 1:
+ return True
+ if fusion_stage is not None and fusion_stage.stage == "fusion" and not fusion_stage.accepted:
+ return True
+ return False
+
+ def _attach_planner_debug(
+ self,
+ routing_debug: RoutingDebug,
+ planning_result: PlanningResult,
+ elapsed_ms: float | None = None,
+ ) -> None:
+ metadata = {
+ "workflow_type": planning_result.workflow_type,
+ "raw_response": planning_result.raw_response,
+ }
+ metadata.update(planning_result.metadata)
+ routing_debug.stages.append(
+ MatcherStageDebug(
+ stage="planner",
+ accepted=planning_result.accepted,
+ selected_intent=planning_result.steps[0].intent_id if planning_result.steps else None,
+ score=float(len(planning_result.steps)),
+ elapsed_ms=elapsed_ms,
+ reason=planning_result.reason,
+ model_name=planning_result.model_name,
+ backend=planning_result.backend,
+ error_message=planning_result.error_message,
+ metadata=metadata,
+ candidates=[
+ IntentCandidate(
+ intent_id=step.intent_id,
+ score=1.0,
+ reason=step.reason,
+ model_name=planning_result.model_name,
+ metadata=planning_result.metadata.get("normalized_steps", [{}])[index]
+ if index < len(planning_result.metadata.get("normalized_steps", []))
+ else {"slots": step.slots},
+ )
+ for index, step in enumerate(planning_result.steps[:5])
+ ],
+ )
+ )
+
+ def _start_planned_workflow(
+ self,
+ session: SessionState,
+ planning_result: PlanningResult,
+ routing_debug: RoutingDebug,
+ user_text: str,
+ rewrite_result: RewriteResult,
+ ) -> ChatResponse:
+ workflow = self._build_planned_workflow(session, planning_result)
+ session.workflow = workflow.model_dump()
+ session.routing_debug = routing_debug.model_dump()
+ response = self._continue_planned_workflow(session, workflow, routing_debug)
+ self._record_turn(session, user_text, response.reply_text, rewrite_result)
+ return response
+
+ def _build_planned_workflow(self, session: SessionState, planning_result: PlanningResult) -> Workflow:
+ steps: list[WorkflowStep] = []
+ first_intent = planning_result.steps[0].intent_id
+ domain = self.intent_registry.get(first_intent).domain
+ risk_level = self.intent_registry.get(first_intent).risk_level
+ step_id_map = {index: f"step_{session.session_id}_{index}" for index in range(1, len(planning_result.steps) + 1)}
+ for index, planned_step in enumerate(planning_result.steps, start=1):
+ intent = self.intent_registry.get(planned_step.intent_id)
+ steps.append(
+ WorkflowStep(
+ step=index,
+ step_id=step_id_map[index],
+ intent_id=planned_step.intent_id,
+ plugin_id=intent.plugin_id,
+ action=intent.plugin_id.split(".")[-1],
+ status="pending",
+ depends_on=[
+ step_id_map[dep_index]
+ for dep_index in planned_step.depends_on
+ if dep_index in step_id_map
+ ],
+ slots=dict(planned_step.slots),
+ condition=dict(planned_step.condition),
+ requires_confirmation=planned_step.requires_confirmation or self._requires_confirmation(intent),
+ )
+ )
+ return Workflow(
+ workflow_id=f"wf_{session.session_id}",
+ workflow_type=planning_result.workflow_type if planning_result.workflow_type in {"single", "sequence", "conditional", "parallel"} else "sequence",
+ domain=domain,
+ intent_id=first_intent,
+ status="ready",
+ risk_level=risk_level,
+ slots=session.slots.copy(),
+ missing_slots=[],
+ steps=steps,
+ meta={
+ "source": planning_result.backend,
+ "planner_model": planning_result.model_name,
+ "planner_reason": planning_result.reason,
+ "planner_debug": planning_result.metadata,
+ "step_results": {},
+ "confirmed_steps": [],
+ },
+ )
+
+ def _continue_planned_workflow(
+ self,
+ session: SessionState,
+ workflow: Workflow,
+ routing_debug: RoutingDebug | None,
+ carry_messages: list[str] | None = None,
+ ) -> ChatResponse:
+ step_messages: list[str] = list(carry_messages or [])
+ step_results = workflow.meta.setdefault("step_results", {})
+ confirmed_steps = workflow.meta.setdefault("confirmed_steps", [])
+ for step in workflow.steps:
+ if step.status in {"completed", "skipped"}:
+ continue
+ if step.depends_on and not all(self._is_step_completed(workflow, dependency) for dependency in step.depends_on):
+ continue
+ intent = self.intent_registry.get(step.intent_id)
+ merged_slots = session.slots.copy()
+ merged_slots.update(step.slots)
+ merged_slots = self._normalize_slots_for_intent(intent.intent_id, merged_slots)
+ step.slots = merged_slots.copy()
+ session.current_intent = intent.intent_id
+ missing_slots = self._pending_slots_for_intent(intent, merged_slots)
+ if missing_slots:
+ workflow.status = "waiting_slot"
+ session.pending_slots = missing_slots
+ session.status = "waiting_slot"
+ workflow.missing_slots = [
+ MissingSlot(
+ slot_name=slot,
+ ask_template=self._default_ask_template(intent, slot),
+ priority=index + 1,
+ )
+ for index, slot in enumerate(missing_slots)
+ ]
+ session.workflow = workflow.model_dump()
+ return ChatResponse(
+ session_id=session.session_id,
+ reply_type="ask_slot",
+ reply_text=self.response_policy.ask_for_slot(
+ intent,
+ missing_slots[0],
+ self._default_ask_template(intent, missing_slots[0]),
+ ),
+ intent=intent.intent_id,
+ domain=intent.domain,
+ status=session.status,
+ pending_slots=missing_slots,
+
+ filled_slots=merged_slots,
+ workflow=workflow,
+ routing_debug=routing_debug,
+ trace_id=self._trace_id(),
+ )
+
+ condition_state = self._evaluate_step_condition(step, workflow)
+ if condition_state is False:
+ step.status = "skipped"
+ reason = step.condition.get("description") if step.condition else None
+ step_messages.append(self.response_policy.step_skipped(intent, reason))
+ continue
+
+ if step.requires_confirmation and step.step_id not in confirmed_steps:
+ step.status = "waiting_confirmation"
+ workflow.status = "waiting_confirmation"
+ session.pending_slots = ["confirmation"]
+ session.status = "waiting_confirmation"
+ workflow.meta["pending_confirmation"] = {
+ "step_id": step.step_id,
+ "intent_id": intent.intent_id,
+ "detail": step.condition.get("description") if step.condition else None,
+ }
+ session.workflow = workflow.model_dump()
+ return ChatResponse(
+ session_id=session.session_id,
+ reply_type="ask_confirmation",
+ reply_text=self.response_policy.ask_for_confirmation(
+ intent,
+ str(workflow.meta["pending_confirmation"].get("detail") or "").strip() or None,
+ ),
+ intent=intent.intent_id,
+ domain=intent.domain,
+ status=session.status,
+ pending_slots=["confirmation"],
+
+ filled_slots=merged_slots,
+ workflow=workflow,
+ routing_debug=routing_debug,
+ trace_id=self._trace_id(),
+ )
+
+ plugin_result = self.plugins.execute(intent.plugin_id, merged_slots)
+ step.status = "completed"
+ step_results[step.step_id] = plugin_result
+ session.slots.update(merged_slots)
+ self._update_context_memory(session, intent.intent_id, merged_slots)
+ step_messages.append(self.response_policy.workflow_result(intent, plugin_result))
+
+ workflow.status = "completed"
+ workflow.missing_slots = []
+ session.pending_slots = []
+ session.status = "completed"
+ session.current_intent = workflow.intent_id
+ session.workflow = workflow.model_dump()
+ return ChatResponse(
+ session_id=session.session_id,
+ reply_type="workflow_result",
+ reply_text=self.response_policy.workflow_summary(step_messages),
+ intent=workflow.intent_id,
+ domain=self._domain_for_intent(workflow.intent_id),
+ status=session.status,
+ pending_slots=[],
+
+ filled_slots=session.slots,
+ workflow=workflow,
+ routing_debug=routing_debug,
+ trace_id=self._trace_id(),
+ )
+
+ def _requires_confirmation(self, intent) -> bool:
+ return self.dialog_rules.requires_confirmation(intent.intent_id, intent.risk_level)
+
+ def _is_step_completed(self, workflow: Workflow, step_id: str) -> bool:
+ dependency = next((item for item in workflow.steps if item.step_id == step_id), None)
+ return dependency is not None and dependency.status == "completed"
+
+ def _evaluate_step_condition(self, step: WorkflowStep, workflow: Workflow) -> bool | None:
+ if not step.condition:
+ return None
+ source_step_id = self._resolve_condition_source_step(step, workflow)
+ if source_step_id is None:
+ return None
+ step_results = workflow.meta.get("step_results", {})
+ source_result = step_results.get(source_step_id, {})
+ if not isinstance(source_result, dict):
+ return None
+ field_name = str(step.condition.get("field", "")).strip()
+ operator = str(step.condition.get("operator", "equals")).strip() or "equals"
+ expected = step.condition.get("value")
+ actual = source_result.get("data", {}).get(field_name)
+ if operator == "equals":
+ return actual == expected
+ if operator == "not_equals":
+ return actual != expected
+ if operator == "in" and isinstance(expected, list):
+ return actual in expected
+ return None
+
+ def _resolve_condition_source_step(self, step: WorkflowStep, workflow: Workflow) -> str | None:
+ source_step = step.condition.get("source_step")
+ try:
+ if source_step is not None:
+ source_index = int(source_step)
+ matched = next((item for item in workflow.steps if item.step == source_index), None)
+ if matched is not None:
+ return matched.step_id
+ except (TypeError, ValueError):
+ return None
+ if step.depends_on:
+ return step.depends_on[0]
+ return None
+
+ def _handle_confirmation(self, session: SessionState, text: str) -> ChatResponse:
+ workflow = self._workflow_from_session(session)
+ routing_debug = self._routing_debug_from_session(session)
+ if workflow is None:
+ return self._fallback_response(session.session_id, routing_debug)
+
+ pending = workflow.meta.get("pending_confirmation", {})
+ step_id = str(pending.get("step_id", "")).strip()
+ if not step_id:
+ return self._fallback_response(session.session_id, routing_debug)
+
+ decision = self._parse_confirmation_decision(text)
+ step = next((item for item in workflow.steps if item.step_id == step_id), None)
+ if step is None:
+ return self._fallback_response(session.session_id, routing_debug)
+ intent = self.intent_registry.get(step.intent_id)
+
+ if decision is None:
+ return ChatResponse(
+ session_id=session.session_id,
+ reply_type="ask_confirmation",
+ reply_text=self.response_policy.confirm_retry(),
+ intent=intent.intent_id,
+ domain=intent.domain,
+ status=session.status,
+ pending_slots=["confirmation"],
+
+ filled_slots=session.slots,
+ workflow=workflow,
+ routing_debug=routing_debug,
+ trace_id=self._trace_id(),
+ )
+
+ workflow.meta.pop("pending_confirmation", None)
+ if decision is False:
+ step.status = "skipped"
+ session.pending_slots = []
+ session.status = "running"
+ skipped_reason = self.response_policy.confirm_cancelled()
+ step_messages = [skipped_reason]
+ response = self._continue_planned_workflow(session, workflow, routing_debug, carry_messages=step_messages)
+ return response
+
+ confirmed_steps = workflow.meta.setdefault("confirmed_steps", [])
+ if step_id not in confirmed_steps:
+ confirmed_steps.append(step_id)
+ session.pending_slots = []
+ session.status = "running"
+ return self._continue_planned_workflow(session, workflow, routing_debug)
+
+ def _workflow_from_session(self, session: SessionState) -> Workflow | None:
+ if session.workflow is None:
+ return None
+ return Workflow.model_validate(session.workflow)
+
+ def _attach_rewrite_debug(
+ self,
+ routing_debug: RoutingDebug,
+ rewrite_result: RewriteResult,
+ elapsed_ms: float | None = None,
+ ) -> None:
+ routing_debug.stages.insert(
+ 0,
+ MatcherStageDebug(
+ stage="rewrite",
+ accepted=rewrite_result.applied,
+ score=1.0 if rewrite_result.applied else 0.0,
+ elapsed_ms=elapsed_ms,
+ reason=rewrite_result.reason or "no rewrite needed",
+ model_name="context-rewrite",
+ metadata={
+ "original_text": rewrite_result.original_text,
+ "rewritten_text": rewrite_result.rewritten_text,
+ **rewrite_result.metadata,
+ },
+ ),
+ )
+
+ def _update_context_memory(
+ self,
+ session: SessionState,
+ intent_id: str,
+ extracted_slots: dict[str, object],
+ ) -> None:
+ session.context_memory["last_intent"] = intent_id
+ if "temperature" in extracted_slots:
+ session.context_memory["last_temperature"] = extracted_slots["temperature"]
+ if "destination" in extracted_slots:
+ session.context_memory["last_destination"] = extracted_slots["destination"]
+ if "song" in extracted_slots:
+ session.context_memory["last_song"] = extracted_slots["song"]
+ if "genre" in extracted_slots:
+ session.context_memory["last_genre"] = extracted_slots["genre"]
+
+ def _normalize_slots_for_intent(self, intent_id: str, slots: dict[str, object]) -> dict[str, object]:
+ normalized = dict(slots)
+ if intent_id == "cabin_set_ac":
+ temperature = self._normalize_temperature_value(normalized.get("temperature"))
+ if temperature is not None:
+ normalized["temperature"] = temperature
+ else:
+ normalized.pop("temperature", None)
+ if intent_id == "cabin_play_music":
+ media_query = str(normalized.get("media_query") or "").strip()
+ if media_query and "song" not in normalized and "genre" not in normalized:
+ if any(genre in media_query for genre in self._MUSIC_GENRE_HINTS):
+ matched = next((genre for genre in self._MUSIC_GENRE_HINTS if genre in media_query), None)
+ if matched:
+ normalized["genre"] = matched
+ else:
+ normalized["song"] = media_query
+ normalized.pop("media_query", None)
+ return normalized
+
+ def _continue_active_task(self, session: SessionState, text: str) -> ChatResponse | None:
+ if session.current_intent is None:
+ return None
+ if session.status not in {"waiting_slot", "waiting_confirmation"}:
+ return None
+ if session.status == "waiting_confirmation":
+ return None
+ intent = self.intent_registry.get(session.current_intent)
+ extracted_slots = self._extract_continuation_slots(session, intent, text)
+ if not extracted_slots:
+ return None
+ session.slots.update(extracted_slots)
+ self._update_context_memory(session, intent.intent_id, extracted_slots)
+ if session.routing_debug is not None:
+ routing_debug = RoutingDebug.model_validate(session.routing_debug)
+ routing_debug.extracted_slots = session.slots.copy()
+ session.routing_debug = routing_debug.model_dump()
+ existing_workflow = self._workflow_from_session(session)
+ if existing_workflow is not None and existing_workflow.workflow_type != "single":
+ return self._continue_planned_workflow(
+ session,
+ existing_workflow,
+ self._routing_debug_from_session(session),
+ )
+ return self._build_response_from_session(session)
+
+ def _extract_continuation_slots(
+ self,
+ session: SessionState,
+ intent,
+ text: str,
+ ) -> dict[str, object]:
+ extracted = self.router.extract_slots(text, intent)
+ if extracted:
+ return extracted
+ normalized = text.strip()
+ if not normalized:
+ return {}
+ candidate_texts = self._continuation_candidate_texts(intent.intent_id, normalized, session.pending_slots)
+ merged: dict[str, object] = {}
+ for candidate_text in candidate_texts:
+ candidate_slots = self.router.extract_slots(candidate_text, intent)
+ if candidate_slots:
+ merged.update(candidate_slots)
+ break
+ if merged:
+ return merged
+ if intent.intent_id == "cabin_play_music" and self._requires_music_query(session.pending_slots):
+ compact = normalized.strip(",。,.!?!? ")
+ if not compact:
+ return {}
+ if self.dialog_act_engine.detect(compact) in {"thanks", "greeting", "goodbye"}:
+ return {}
+ matched_genre = next((genre for genre in self._MUSIC_GENRE_HINTS if genre in compact), None)
+ if matched_genre is not None:
+ return {"genre": matched_genre}
+ if len(compact) <= 20:
+ return {"song": compact}
+ return {}
+
+ def _continuation_candidate_texts(
+ self,
+ intent_id: str,
+ text: str,
+ pending_slots: list[str],
+ ) -> list[str]:
+ pending = list(pending_slots)
+ if intent_id == "cabin_play_music" and self._requires_music_query(pending):
+ return [f"播放{text}", f"来一首{text}", f"来点{text}"]
+ if intent_id == "cabin_nav_to" and "destination" in pending:
+ return [f"导航去{text}", f"带我去{text}"]
+ if intent_id == "cabin_set_ac" and "temperature" in pending:
+ return [f"把空调调到{text}", f"温度设成{text}"]
+ if intent_id in {"cs_query_order", "cs_query_logistics", "cs_cancel_order"} and "order_id" in pending:
+ prefix = {
+ "cs_query_order": "查一下订单",
+ "cs_query_logistics": "查一下物流",
+ "cs_cancel_order": "取消订单",
+ }.get(intent_id, "")
+ return [f"{prefix}{text}"] if prefix else [text]
+ return []
+
+ def _pending_slots_for_intent(self, intent, slots: dict[str, object]) -> list[str]:
+ pending_slots = [slot for slot in intent.required_slots if slot not in slots]
+ if intent.intent_id == "cabin_play_music" and not self._has_music_query(slots):
+ pending_slots.append("media_query")
+ deduped: list[str] = []
+ for slot in pending_slots:
+ if slot not in deduped:
+ deduped.append(slot)
+ return deduped
+
+ def _default_ask_template(self, intent, slot_name: str) -> str:
+ if slot_name in intent.ask_templates:
+ return str(intent.ask_templates[slot_name])
+ if slot_name == "media_query":
+ return "想听什么风格或者具体的歌名?"
+ return "请补充一个关键信息。"
+
+ def _has_music_query(self, slots: dict[str, object]) -> bool:
+ return bool(str(slots.get("song") or "").strip() or str(slots.get("genre") or "").strip())
+
+ def _requires_music_query(self, pending_slots: list[str]) -> bool:
+ return "media_query" in pending_slots or not pending_slots
+
+ def _looks_like_parallel_request(self, text: str, fusion_stage: MatcherStageDebug | None) -> bool:
+ _ = fusion_stage
+ compact = re.sub(r"\s+", "", text)
+ return bool(re.search(r"(和|跟|以及|外加).+", compact) and len(compact) >= 5)
+
+ def _normalize_temperature_value(self, raw_value: object) -> int | None:
+ if isinstance(raw_value, bool):
+ return None
+ if isinstance(raw_value, (int, float)):
+ value = int(raw_value)
+ elif isinstance(raw_value, str):
+ match = re.search(r"-?\d+", raw_value)
+ if not match:
+ return None
+ value = int(match.group(0))
+ else:
+ return None
+ return max(16, min(30, value))
+
+ def _record_turn(
+ self,
+ session: SessionState,
+ user_text: str,
+ agent_text: str,
+ rewrite_result: RewriteResult,
+ ) -> None:
+ session.last_user_text = user_text
+ session.last_agent_text = agent_text
+ session.context_memory["last_raw_user_text"] = user_text
+ session.context_memory["last_rewritten_text"] = rewrite_result.rewritten_text
+
+ def _update_dialog_act(self, session: SessionState, text: str) -> None:
+ session.context_memory["last_dialog_act"] = self.dialog_act_engine.detect(text)
+
+ def _has_active_task(self, session: SessionState) -> bool:
+ if session.status in {"waiting_slot", "waiting_confirmation", "running", "understanding"}:
+ return True
+ workflow = self._workflow_from_session(session)
+ if workflow is not None and workflow.status not in {"completed", "failed"}:
+ return True
+ return False
+
+ def _is_stop_request(self, text: str) -> bool:
+ return self.dialog_rules.is_stop_request(text)
+
+ def _reset_active_task(self, session: SessionState) -> None:
+ session.status = "idle"
+ session.current_intent = None
+ session.pending_slots = []
+ session.slots = {}
+ session.workflow = None
+ session.routing_debug = None
+
+ def _parse_confirmation_decision(self, text: str) -> bool | None:
+ return self.dialog_rules.parse_confirmation_decision(text)
+
+ def _try_knowledge_llm(
+ self,
+ session: SessionState,
+ user_text: str,
+ routing_debug: RoutingDebug,
+ rewrite_result: RewriteResult,
+ ) -> ChatResponse | None:
+ """BERT 未命中时尝试 LLM + knowledge_search function call。
+ 有结果返回 ChatResponse(含 knowledge_content),无结果返回 None。
+ """
+ if self.knowledge_llm is None:
+ return None
+
+ result = self.knowledge_llm.reply(user_text)
+
+ # LLM 调用失败或本地兜底但没有文档 → 退回原始 fallback
+ if result.backend == "local-fallback" and result.doc_id is None:
+ return None
+
+ return ChatResponse(
+ session_id=session.session_id,
+ reply_type="text",
+ reply_text=result.reply_text,
+ intent=None,
+ domain="knowledge",
+ decision="knowledge_llm",
+ decision_reason=(
+ f"BERT 未命中,LLM 通过 knowledge_search 命中文档:{result.doc_id}"
+ if result.doc_id
+ else "BERT 未命中,LLM 自主回答"
+ ),
+ status="completed",
+ knowledge_doc_id=result.doc_id,
+ knowledge_doc_title=result.doc_title,
+ knowledge_content=result.doc_content,
+ routing_debug=routing_debug,
+ trace_id=self._trace_id(),
+ )
diff --git a/intelligent_cabin/app/services/classifier.py b/intelligent_cabin/app/services/classifier.py
new file mode 100644
index 0000000..eabb4de
--- /dev/null
+++ b/intelligent_cabin/app/services/classifier.py
@@ -0,0 +1,600 @@
+from __future__ import annotations
+
+import importlib
+import json
+import re
+from dataclasses import dataclass
+from pathlib import Path
+from time import perf_counter
+from typing import Any, Protocol
+from urllib import error, request
+
+from app.schemas.intent import IntentDefinition
+from app.services.joint_nlu import JointBertNLU
+
+
+@dataclass
+class ClassificationResult:
+ intent: IntentDefinition | None
+ score: float = 0.0
+ model_name: str = "mock-classifier"
+ candidates: list[tuple[IntentDefinition, float]] | None = None
+ backend_name: str | None = None
+ used_fallback: bool = False
+ fallback_reason: str | None = None
+ error_message: str | None = None
+ raw_label: str | None = None
+ raw_candidates: list[dict[str, Any]] | None = None
+
+
+class IntentClassifier(Protocol):
+ def predict(self, text: str, intents: list[IntentDefinition]) -> ClassificationResult:
+ ...
+
+
+class MockIntentClassifier:
+ """A local classifier stub that mimics a BERT-style scoring interface."""
+
+ def __init__(self, threshold: float = 1.2, top_k: int = 3) -> None:
+ self._threshold = threshold
+ self._top_k = top_k
+
+ def predict(self, text: str, intents: list[IntentDefinition]) -> ClassificationResult:
+ query_tokens = self._tokenize(text)
+ if not query_tokens:
+ return ClassificationResult(
+ intent=None,
+ score=0.0,
+ backend_name="mock-classifier",
+ raw_candidates=[],
+ )
+
+ scored_intents: list[tuple[IntentDefinition, float]] = []
+ for intent in intents:
+ score = self._score_intent(query_tokens, intent)
+ scored_intents.append((intent, score))
+
+ scored_intents.sort(key=lambda item: item[1], reverse=True)
+ best_intent: IntentDefinition | None = scored_intents[0][0] if scored_intents else None
+ best_score = scored_intents[0][1] if scored_intents else 0.0
+ top_candidates = [(intent, score) for intent, score in scored_intents[: self._top_k] if score > 0]
+ raw_candidates = [
+ {
+ "label": intent.intent_id,
+ "intent_id": intent.intent_id,
+ "score": score,
+ }
+ for intent, score in top_candidates
+ ]
+
+ if best_score < self._threshold:
+ return ClassificationResult(
+ intent=None,
+ score=best_score,
+ candidates=top_candidates,
+ backend_name="mock-classifier",
+ fallback_reason="below threshold",
+ raw_candidates=raw_candidates,
+ )
+ return ClassificationResult(
+ intent=best_intent,
+ score=best_score,
+ candidates=top_candidates,
+ backend_name="mock-classifier",
+ raw_label=best_intent.intent_id if best_intent is not None else None,
+ raw_candidates=raw_candidates,
+ )
+
+ def _score_intent(self, query_tokens: set[str], intent: IntentDefinition) -> float:
+ score = 0.0
+ for keyword in intent.keywords:
+ keyword_tokens = self._tokenize(keyword)
+ overlap = len(query_tokens & keyword_tokens)
+ if overlap:
+ score += overlap * 1.4
+
+ for example in intent.examples:
+ example_tokens = self._tokenize(example)
+ overlap = len(query_tokens & example_tokens)
+ if not example_tokens:
+ continue
+ coverage = overlap / len(example_tokens)
+ score = max(score, overlap + coverage)
+
+ if intent.domain == "customer_service" and any(token in query_tokens for token in {"订单", "物流", "快递"}):
+ score += 0.2
+ if intent.domain == "cabin" and any(token in query_tokens for token in {"导航", "空调", "音乐", "歌曲"}):
+ score += 0.2
+ return score
+
+ def _tokenize(self, text: str) -> set[str]:
+ cleaned = re.sub(r"[,。!?、\s]+", " ", text.strip().lower())
+ tokens = {token for token in cleaned.split(" ") if token}
+ compact = cleaned.replace(" ", "")
+ for size in (2, 3, 4):
+ for index in range(0, max(len(compact) - size + 1, 0)):
+ tokens.add(compact[index : index + size])
+ return tokens
+
+
+class BertIntentClassifier:
+ """
+ A pluggable local classifier interface for future BERT/Transformer models.
+
+ Expected model behavior:
+ - input: user text
+ - output labels: intent_id strings, or numeric indices mapped through a label file
+ """
+
+ def __init__(
+ self,
+ model_path: str,
+ threshold: float = 0.5,
+ label_map_path: str | None = None,
+ fallback: IntentClassifier | None = None,
+ top_k: int = 3,
+ ) -> None:
+ self._model_path = model_path
+ self._threshold = threshold
+ self._label_map_path = label_map_path
+ self._fallback = fallback
+ self._top_k = top_k
+ self._pipeline = None
+ self._label_map = self._load_label_map(label_map_path)
+ self._warmed_up = False
+ self._warmup_elapsed_ms: float | None = None
+ self._warmup_error_message: str | None = None
+
+ def predict(self, text: str, intents: list[IntentDefinition]) -> ClassificationResult:
+ pipeline = self._get_pipeline()
+ if pipeline is None:
+ return self._predict_with_fallback(
+ text,
+ intents,
+ attempted_backend="bert-local",
+ fallback_reason="bert model is unavailable",
+ error_message=self._pipeline_error_message(),
+ )
+
+ try:
+ raw_output = pipeline(text, truncation=True, top_k=self._top_k)
+ except Exception as exc:
+ return self._predict_with_fallback(
+ text,
+ intents,
+ attempted_backend="bert-local",
+ fallback_reason="bert inference failed",
+ error_message=str(exc),
+ )
+
+ normalized = self._normalize_pipeline_candidates(raw_output)
+ if not normalized:
+ return self._predict_with_fallback(
+ text,
+ intents,
+ attempted_backend="bert-local",
+ fallback_reason="bert returned empty result",
+ raw_candidates=[],
+ )
+
+ resolved = self._resolve_candidates(normalized, intents)
+ top_candidate = resolved["top_candidate"]
+ if top_candidate["intent"] is None:
+ return self._predict_with_fallback(
+ text,
+ intents,
+ attempted_backend="bert-local",
+ fallback_reason="bert label is not mapped to a known intent",
+ score=top_candidate["score"],
+ raw_label=top_candidate["label"],
+ raw_candidates=normalized,
+ )
+ if top_candidate["score"] < self._threshold:
+ return self._predict_with_fallback(
+ text,
+ intents,
+ attempted_backend="bert-local",
+ fallback_reason="bert score is below threshold",
+ score=top_candidate["score"],
+ raw_label=top_candidate["label"],
+ raw_candidates=normalized,
+ )
+
+ return ClassificationResult(
+ intent=top_candidate["intent"],
+ score=top_candidate["score"],
+ model_name="bert-local",
+ candidates=resolved["known_candidates"],
+ backend_name="bert-local",
+ raw_label=top_candidate["label"],
+ raw_candidates=normalized,
+ )
+
+ def _get_pipeline(self):
+ if self._pipeline is not None:
+ return self._pipeline
+ if not self._model_path or not Path(self._model_path).exists():
+ return None
+ try:
+ transformers = importlib.import_module("transformers")
+ except ImportError:
+ return None
+ self._pipeline = transformers.pipeline(
+ "text-classification",
+ model=self._model_path,
+ tokenizer=self._model_path,
+ )
+ return self._pipeline
+
+ def warmup(self, sample_text: str = "打开车窗") -> bool:
+ if self._warmed_up:
+ return True
+ started_at = perf_counter()
+ pipeline = self._get_pipeline()
+ if pipeline is None:
+ self._warmup_error_message = self._pipeline_error_message()
+ self._warmup_elapsed_ms = round((perf_counter() - started_at) * 1000, 3)
+ return False
+ try:
+ warmup_texts = [sample_text.strip() or "打开车窗", f"请帮我{sample_text.strip() or '打开车窗'}"]
+ for text in dict.fromkeys(warmup_texts):
+ pipeline(text, truncation=True, top_k=self._top_k)
+ except Exception as exc:
+ self._warmup_error_message = str(exc)
+ self._warmup_elapsed_ms = round((perf_counter() - started_at) * 1000, 3)
+ return False
+ self._warmup_error_message = None
+ self._warmup_elapsed_ms = round((perf_counter() - started_at) * 1000, 3)
+ self._warmed_up = True
+ return True
+
+ def _pipeline_error_message(self) -> str:
+ if not self._model_path:
+ return "AGENT_CLASSIFIER_MODEL_PATH is empty"
+ if not Path(self._model_path).exists():
+ return f"model path not found: {self._model_path}"
+ try:
+ importlib.import_module("transformers")
+ except ImportError:
+ return "transformers is not installed"
+ return "pipeline init failed"
+
+ def _load_label_map(self, label_map_path: str | None) -> dict[str, str]:
+ if not label_map_path:
+ return {}
+ path = Path(label_map_path)
+ if not path.exists():
+ return {}
+ data = json.loads(path.read_text(encoding="utf-8"))
+ return {str(key): str(value) for key, value in data.items()}
+
+ def _resolve_label(self, label: str) -> str | None:
+ if label in self._label_map:
+ return self._label_map[label]
+ return label or None
+
+ def _normalize_pipeline_candidates(self, raw_output: Any) -> list[dict[str, Any]]:
+ items = raw_output
+ if isinstance(items, list) and items and isinstance(items[0], list):
+ items = items[0]
+ if not isinstance(items, list):
+ items = [items]
+ normalized: list[dict[str, Any]] = []
+ for item in items:
+ if not isinstance(item, dict):
+ continue
+ label = str(item.get("label", ""))
+ score = float(item.get("score", 0.0))
+ normalized.append(
+ {
+ "label": label,
+ "intent_id": self._resolve_label(label),
+ "score": score,
+ }
+ )
+ return normalized[: self._top_k]
+
+ def _resolve_candidates(
+ self,
+ normalized_candidates: list[dict[str, Any]],
+ intents: list[IntentDefinition],
+ ) -> dict[str, Any]:
+ intent_map = {intent.intent_id: intent for intent in intents}
+ known_candidates: list[tuple[IntentDefinition, float]] = []
+ resolved_items: list[dict[str, Any]] = []
+ for item in normalized_candidates:
+ intent = intent_map.get(str(item.get("intent_id") or ""))
+ if intent is not None:
+ known_candidates.append((intent, float(item.get("score", 0.0))))
+ resolved_items.append(
+ {
+ "intent": intent,
+ "label": str(item.get("label", "")),
+ "score": float(item.get("score", 0.0)),
+ }
+ )
+ return {
+ "known_candidates": known_candidates,
+ "top_candidate": resolved_items[0],
+ }
+
+ def _predict_with_fallback(
+ self,
+ text: str,
+ intents: list[IntentDefinition],
+ attempted_backend: str,
+ fallback_reason: str,
+ score: float = 0.0,
+ raw_label: str | None = None,
+ raw_candidates: list[dict[str, Any]] | None = None,
+ error_message: str | None = None,
+ ) -> ClassificationResult:
+ if self._fallback is None:
+ return ClassificationResult(
+ intent=None,
+ score=score,
+ model_name=attempted_backend,
+ backend_name=attempted_backend,
+ used_fallback=False,
+ fallback_reason=fallback_reason,
+ error_message=error_message,
+ raw_label=raw_label,
+ raw_candidates=raw_candidates or [],
+ )
+ fallback_result = self._fallback.predict(text, intents)
+ return ClassificationResult(
+ intent=fallback_result.intent,
+ score=fallback_result.score,
+ model_name=fallback_result.model_name,
+ candidates=fallback_result.candidates,
+ backend_name=attempted_backend,
+ used_fallback=True,
+ fallback_reason=fallback_reason,
+ error_message=error_message,
+ raw_label=raw_label,
+ raw_candidates=raw_candidates or fallback_result.raw_candidates or [],
+ )
+
+
+class JointBertIntentClassifier:
+ def __init__(
+ self,
+ nlu: JointBertNLU,
+ threshold: float = 0.35,
+ top_k: int = 3,
+ ) -> None:
+ self._nlu = nlu
+ self._threshold = threshold
+ self._top_k = top_k
+
+ def warmup(self, sample_text: str = "打开车窗") -> bool:
+ return self._nlu.warmup(sample_text)
+
+ def predict(self, text: str, intents: list[IntentDefinition]) -> ClassificationResult:
+ result = self._nlu.predict(text, intents)
+ raw_candidates = [
+ {
+ "label": item.intent_id,
+ "intent_id": item.intent_id,
+ "score": item.score,
+ }
+ for item in result.candidates[: self._top_k]
+ ]
+ known_candidates = [
+ (intent, item.score)
+ for item in result.candidates[: self._top_k]
+ for intent in intents
+ if intent.intent_id == item.intent_id
+ ]
+ selected_intent = next((intent for intent in intents if intent.intent_id == result.intent_id), None)
+ if selected_intent is None or result.intent_score < self._threshold:
+ return ClassificationResult(
+ intent=None,
+ score=result.intent_score,
+ model_name=result.model_name,
+ candidates=known_candidates,
+ backend_name=result.backend_name,
+ fallback_reason=result.error_message or "joint bert score is below threshold or no intent selected",
+ error_message=result.error_message,
+ raw_label=result.intent_id,
+ raw_candidates=raw_candidates,
+ )
+ return ClassificationResult(
+ intent=selected_intent,
+ score=result.intent_score,
+ model_name=result.model_name,
+ candidates=known_candidates,
+ backend_name=result.backend_name,
+ raw_label=result.intent_id,
+ raw_candidates=raw_candidates,
+ )
+
+
+class RemoteIntentClassifier:
+ """
+ A remote classifier client.
+
+ Expected response payload:
+ {
+ "intent_id": "cs_query_order",
+ "score": 0.98,
+ "model_name": "bert-remote"
+ }
+ """
+
+ def __init__(
+ self,
+ endpoint: str,
+ timeout_seconds: float = 3.0,
+ threshold: float = 0.5,
+ fallback: IntentClassifier | None = None,
+ label_map_path: str | None = None,
+ top_k: int = 3,
+ ) -> None:
+ self._endpoint = endpoint
+ self._timeout_seconds = timeout_seconds
+ self._threshold = threshold
+ self._fallback = fallback
+ self._label_map = self._load_label_map(label_map_path)
+ self._top_k = top_k
+
+ def predict(self, text: str, intents: list[IntentDefinition]) -> ClassificationResult:
+ if not self._endpoint:
+ return self._predict_with_fallback(
+ text,
+ intents,
+ attempted_backend="remote-classifier",
+ fallback_reason="remote endpoint is not configured",
+ error_message="AGENT_CLASSIFIER_REMOTE_URL is empty",
+ )
+
+ payload = json.dumps(
+ {
+ "text": text,
+ "top_k": self._top_k,
+ "labels": [intent.intent_id for intent in intents],
+ }
+ ).encode("utf-8")
+ req = request.Request(
+ self._endpoint,
+ data=payload,
+ headers={"Content-Type": "application/json"},
+ method="POST",
+ )
+ try:
+ with request.urlopen(req, timeout=self._timeout_seconds) as response:
+ data = json.loads(response.read().decode("utf-8"))
+ except (error.URLError, TimeoutError, ValueError) as exc:
+ return self._predict_with_fallback(
+ text,
+ intents,
+ attempted_backend="remote-classifier",
+ fallback_reason="remote inference failed",
+ error_message=str(exc),
+ )
+
+ model_name = str(data.get("model_name", "remote-classifier"))
+ normalized = self._normalize_remote_candidates(data)
+ if not normalized:
+ return self._predict_with_fallback(
+ text,
+ intents,
+ attempted_backend=model_name,
+ fallback_reason="remote response has no candidates",
+ raw_candidates=[],
+ )
+
+ intent_map = {intent.intent_id: intent for intent in intents}
+ known_candidates = [
+ (intent_map[item["intent_id"]], item["score"])
+ for item in normalized
+ if item["intent_id"] in intent_map
+ ]
+ top_candidate = normalized[0]
+ selected_intent = intent_map.get(top_candidate["intent_id"])
+ if selected_intent is None:
+ return self._predict_with_fallback(
+ text,
+ intents,
+ attempted_backend=model_name,
+ fallback_reason="remote top label is not mapped to a known intent",
+ score=top_candidate["score"],
+ raw_label=top_candidate["label"],
+ raw_candidates=normalized,
+ )
+ if top_candidate["score"] < self._threshold:
+ return self._predict_with_fallback(
+ text,
+ intents,
+ attempted_backend=model_name,
+ fallback_reason="remote score is below threshold",
+ score=top_candidate["score"],
+ raw_label=top_candidate["label"],
+ raw_candidates=normalized,
+ )
+ return ClassificationResult(
+ intent=selected_intent,
+ score=top_candidate["score"],
+ model_name=model_name,
+ candidates=known_candidates,
+ backend_name=model_name,
+ raw_label=top_candidate["label"],
+ raw_candidates=normalized,
+ )
+
+ def _load_label_map(self, label_map_path: str | None) -> dict[str, str]:
+ if not label_map_path:
+ return {}
+ path = Path(label_map_path)
+ if not path.exists():
+ return {}
+ data = json.loads(path.read_text(encoding="utf-8"))
+ return {str(key): str(value) for key, value in data.items()}
+
+ def _resolve_label(self, label: str) -> str | None:
+ if label in self._label_map:
+ return self._label_map[label]
+ return label or None
+
+ def _normalize_remote_candidates(self, data: dict[str, Any]) -> list[dict[str, Any]]:
+ raw_candidates = data.get("candidates") or data.get("predictions") or []
+ if not raw_candidates and data.get("intent_id"):
+ raw_candidates = [
+ {
+ "intent_id": data.get("intent_id"),
+ "label": data.get("label") or data.get("intent_id"),
+ "score": data.get("score", 0.0),
+ }
+ ]
+
+ normalized: list[dict[str, Any]] = []
+ for item in raw_candidates:
+ if not isinstance(item, dict):
+ continue
+ label = str(item.get("label") or item.get("intent_id") or "")
+ intent_id = str(item.get("intent_id") or self._resolve_label(label) or "")
+ normalized.append(
+ {
+ "label": label,
+ "intent_id": intent_id,
+ "score": float(item.get("score", 0.0)),
+ }
+ )
+ return normalized[: self._top_k]
+
+ def _predict_with_fallback(
+ self,
+ text: str,
+ intents: list[IntentDefinition],
+ attempted_backend: str,
+ fallback_reason: str,
+ score: float = 0.0,
+ raw_label: str | None = None,
+ raw_candidates: list[dict[str, Any]] | None = None,
+ error_message: str | None = None,
+ ) -> ClassificationResult:
+ if self._fallback is None:
+ return ClassificationResult(
+ intent=None,
+ score=score,
+ model_name=attempted_backend,
+ backend_name=attempted_backend,
+ used_fallback=False,
+ fallback_reason=fallback_reason,
+ error_message=error_message,
+ raw_label=raw_label,
+ raw_candidates=raw_candidates or [],
+ )
+ fallback_result = self._fallback.predict(text, intents)
+ return ClassificationResult(
+ intent=fallback_result.intent,
+ score=fallback_result.score,
+ model_name=fallback_result.model_name,
+ candidates=fallback_result.candidates,
+ backend_name=attempted_backend,
+ used_fallback=True,
+ fallback_reason=fallback_reason,
+ error_message=error_message,
+ raw_label=raw_label,
+ raw_candidates=raw_candidates or fallback_result.raw_candidates or [],
+ )
diff --git a/intelligent_cabin/app/services/config_loader.py b/intelligent_cabin/app/services/config_loader.py
new file mode 100644
index 0000000..bc63932
--- /dev/null
+++ b/intelligent_cabin/app/services/config_loader.py
@@ -0,0 +1,173 @@
+from __future__ import annotations
+
+import json
+from dataclasses import dataclass, field
+from pathlib import Path
+from typing import Any
+
+import yaml
+
+from app.schemas.configuration import (
+ ActionsConfig,
+ ContextRewriteConfig,
+ DialogActsConfig,
+ DialogRulesConfig,
+ DomainConfig,
+ FormsConfig,
+ ResponsesConfig,
+ WorkflowTemplatesConfig,
+)
+from app.services.dialog_act import DialogActEngine
+from app.services.dialog_rules import DialogRuleEngine
+from app.services.intent_registry import IntentRegistry
+from app.services.rewrite_engine import ContextRewriteEngine
+
+
+@dataclass
+class RuntimeConfigBundle:
+ intent_registry: IntentRegistry
+ response_templates: dict[str, str]
+ intent_hints: dict[str, str]
+ dialog_rules: DialogRuleEngine
+ dialog_act_engine: DialogActEngine
+ workflow_templates: WorkflowTemplatesConfig
+ rewrite_engine: ContextRewriteEngine = field(default_factory=ContextRewriteEngine)
+
+
+class ConfigLoader:
+ def __init__(
+ self,
+ domain_path: str,
+ action_path: str,
+ response_path: str,
+ form_path: str | None = None,
+ rule_path: str | None = None,
+ dialog_act_path: str | None = None,
+ workflow_path: str | None = None,
+ legacy_intent_path: str | None = None,
+ context_rewrite_path: str | None = None,
+ ) -> None:
+ self._domain_path = Path(domain_path)
+ self._action_path = Path(action_path)
+ self._response_path = Path(response_path)
+ self._form_path = Path(form_path) if form_path else None
+ self._rule_path = Path(rule_path) if rule_path else None
+ self._dialog_act_path = Path(dialog_act_path) if dialog_act_path else None
+ self._workflow_path = Path(workflow_path) if workflow_path else None
+ self._legacy_intent_path = Path(legacy_intent_path) if legacy_intent_path else None
+ self._context_rewrite_path = Path(context_rewrite_path) if context_rewrite_path else None
+
+ def load(self) -> RuntimeConfigBundle:
+ if self._domain_path.exists() and self._action_path.exists():
+ return self._load_from_config_files()
+ if self._legacy_intent_path is not None and self._legacy_intent_path.exists():
+ return RuntimeConfigBundle(
+ intent_registry=IntentRegistry.from_json(str(self._legacy_intent_path)),
+ response_templates=self._load_response_templates(),
+ intent_hints={},
+ dialog_rules=self._load_dialog_rules(),
+ dialog_act_engine=self._load_dialog_act_engine(),
+ workflow_templates=self._load_workflow_templates(),
+ rewrite_engine=self._load_rewrite_engine(),
+ )
+ raise FileNotFoundError(
+ "no runtime config found, expected config/*.yml or legacy intent json"
+ )
+
+ def _load_from_config_files(self) -> RuntimeConfigBundle:
+ domain = DomainConfig.model_validate(self._read_structured_file(self._domain_path))
+ actions = ActionsConfig.model_validate(self._read_structured_file(self._action_path))
+ forms = self._load_forms()
+ action_map = {item.action_id: item for item in actions.actions}
+ form_map = {item.intent_id: item for item in forms.forms}
+ intents = []
+ for item in domain.intents:
+ form = form_map.get(item.intent_id)
+ if form is not None:
+ item = item.model_copy(
+ update={
+ "required_slots": form.required_slots,
+ "ask_templates": form.ask_templates,
+ }
+ )
+ intents.append(item.to_intent_definition(action_map))
+ intent_hints = {
+ item.intent_id: item.label.strip()
+ for item in domain.intents
+ if item.label and item.label.strip()
+ }
+ return RuntimeConfigBundle(
+ intent_registry=IntentRegistry(intents),
+ response_templates=self._load_response_templates(),
+ intent_hints=intent_hints,
+ dialog_rules=self._load_dialog_rules(),
+ dialog_act_engine=self._load_dialog_act_engine(),
+ workflow_templates=self._load_workflow_templates(),
+ rewrite_engine=self._load_rewrite_engine(),
+ )
+
+ def _load_response_templates(self) -> dict[str, str]:
+ if not self._response_path.exists():
+ return {}
+ raw = self._read_structured_file(self._response_path)
+ parsed = ResponsesConfig.model_validate(raw)
+ return parsed.templates
+
+ def _load_forms(self) -> FormsConfig:
+ if self._form_path is None or not self._form_path.exists():
+ return FormsConfig()
+ raw = self._read_structured_file(self._form_path)
+ return FormsConfig.model_validate(raw)
+
+ def _load_dialog_rules(self) -> DialogRuleEngine:
+ if self._rule_path is None or not self._rule_path.exists():
+ return DialogRuleEngine()
+ raw = self._read_structured_file(self._rule_path)
+ parsed = DialogRulesConfig.model_validate(raw)
+ return DialogRuleEngine(
+ stop_phrases=tuple(parsed.stop.phrases) or DialogRuleEngine.stop_phrases,
+ positive_confirmation_tokens=tuple(parsed.confirmation.positive_tokens)
+ or DialogRuleEngine.positive_confirmation_tokens,
+ negative_confirmation_tokens=tuple(parsed.confirmation.negative_tokens)
+ or DialogRuleEngine.negative_confirmation_tokens,
+ confirmation_required_intents=tuple(parsed.confirmation.required_intents)
+ or DialogRuleEngine.confirmation_required_intents,
+ confirmation_required_risk_levels=tuple(parsed.confirmation.required_risk_levels)
+ or DialogRuleEngine.confirmation_required_risk_levels,
+ metadata={"source": str(self._rule_path)},
+ )
+
+ def _load_dialog_act_engine(self) -> DialogActEngine:
+ if self._dialog_act_path is None or not self._dialog_act_path.exists():
+ return DialogActEngine()
+ raw = self._read_structured_file(self._dialog_act_path)
+ parsed = DialogActsConfig.model_validate(raw)
+ return DialogActEngine(
+ patterns={
+ item.act_id: tuple(item.phrases)
+ for item in parsed.acts
+ },
+ numeric_patterns={
+ item.act_id: tuple(item.numeric_patterns)
+ for item in parsed.acts
+ if item.numeric_patterns
+ },
+ )
+
+ def _load_rewrite_engine(self) -> ContextRewriteEngine:
+ if self._context_rewrite_path is None or not self._context_rewrite_path.exists():
+ return ContextRewriteEngine()
+ raw = self._read_structured_file(self._context_rewrite_path)
+ config = ContextRewriteConfig.model_validate(raw)
+ return ContextRewriteEngine(config=config)
+
+ def _load_workflow_templates(self) -> WorkflowTemplatesConfig:
+ if self._workflow_path is None or not self._workflow_path.exists():
+ return WorkflowTemplatesConfig()
+ raw = self._read_structured_file(self._workflow_path)
+ return WorkflowTemplatesConfig.model_validate(raw)
+
+ def _read_structured_file(self, path: Path) -> dict[str, Any]:
+ if path.suffix.lower() == ".json":
+ return json.loads(path.read_text(encoding="utf-8"))
+ return yaml.safe_load(path.read_text(encoding="utf-8")) or {}
diff --git a/intelligent_cabin/app/services/dialog_act.py b/intelligent_cabin/app/services/dialog_act.py
new file mode 100644
index 0000000..4cf7377
--- /dev/null
+++ b/intelligent_cabin/app/services/dialog_act.py
@@ -0,0 +1,51 @@
+from __future__ import annotations
+
+import re
+from dataclasses import dataclass, field
+
+
+@dataclass
+class DialogActEngine:
+ """
+ 基于配置词表的对话行为检测器。
+ - patterns : act_id → 触发词组 tuple,逐词包含匹配
+ - numeric_patterns : act_id → 正则 tuple,全文正则匹配(用于数字类 inform)
+
+ 词表和正则均从 config/dialog_acts.yml 加载,不同设备部署时修改配置文件即可,无需改代码。
+ """
+
+ patterns: dict[str, tuple[str, ...]] = field(
+ default_factory=lambda: {
+ "affirm": ("确认", "好的", "继续", "可以", "确定"),
+ "deny": ("不要", "不行", "否", "不"),
+ "cancel": ("取消", "算了", "不用了", "停止"),
+ "modify": ("改成", "换成", "再低一点", "再高一点", "调大", "调小"),
+ "chitchat": ("你好", "谢谢", "再见", "天气", "真不错"),
+ "request": ("帮我", "打开", "关闭", "导航", "播放", "查询", "查"),
+ "inform": (),
+ }
+ )
+ # act_id → 正则表达式 tuple(全文 search,任意命中即触发)
+ numeric_patterns: dict[str, tuple[str, ...]] = field(
+ default_factory=lambda: {
+ "inform": (r"\d+",),
+ }
+ )
+
+ def detect(self, text: str) -> str:
+ normalized = re.sub(r"\s+", "", text.strip().lower())
+ if not normalized:
+ return "unknown"
+
+ # 1. 词表包含匹配(保持原有优先级顺序)
+ for act_id, phrases in self.patterns.items():
+ if any(phrase and phrase in normalized for phrase in phrases):
+ return act_id
+
+ # 2. 正则匹配(主要用于 inform 的数字检测)
+ for act_id, regexes in self.numeric_patterns.items():
+ for pattern in regexes:
+ if re.search(pattern, normalized):
+ return act_id
+
+ return "unknown"
diff --git a/intelligent_cabin/app/services/dialog_rules.py b/intelligent_cabin/app/services/dialog_rules.py
new file mode 100644
index 0000000..3e59bfd
--- /dev/null
+++ b/intelligent_cabin/app/services/dialog_rules.py
@@ -0,0 +1,62 @@
+from __future__ import annotations
+
+from dataclasses import dataclass, field
+
+
+@dataclass
+class DialogRuleEngine:
+ stop_phrases: tuple[str, ...] = (
+ "不用了",
+ "算了",
+ "先不要了",
+ "先这样吧",
+ "停一下",
+ "停止",
+ "停止当前任务",
+ "结束这次操作",
+ "别弄了",
+ "不需要了",
+ )
+ positive_confirmation_tokens: tuple[str, ...] = (
+ "确认",
+ "好的",
+ "是",
+ "继续",
+ "可以",
+ "确定",
+ "yes",
+ "ok",
+ )
+ negative_confirmation_tokens: tuple[str, ...] = (
+ "取消",
+ "不用",
+ "不要",
+ "否",
+ "no",
+ "算了",
+ "停止",
+ )
+ confirmation_required_intents: tuple[str, ...] = ("cs_cancel_order",)
+ confirmation_required_risk_levels: tuple[str, ...] = ("high",)
+ metadata: dict[str, object] = field(default_factory=dict)
+
+ def is_stop_request(self, text: str) -> bool:
+ normalized = text.strip().lower().replace(" ", "")
+ if not normalized:
+ return False
+ return any(phrase in normalized for phrase in self.stop_phrases)
+
+ def parse_confirmation_decision(self, text: str) -> bool | None:
+ normalized = text.strip().lower()
+ if not normalized:
+ return None
+ if any(token == normalized or token in normalized for token in self.negative_confirmation_tokens):
+ return False
+ if any(token == normalized or token in normalized for token in self.positive_confirmation_tokens):
+ return True
+ return None
+
+ def requires_confirmation(self, intent_id: str, risk_level: str) -> bool:
+ if intent_id in self.confirmation_required_intents:
+ return True
+ return risk_level in self.confirmation_required_risk_levels
diff --git a/intelligent_cabin/app/services/intent_registry.py b/intelligent_cabin/app/services/intent_registry.py
new file mode 100644
index 0000000..f095135
--- /dev/null
+++ b/intelligent_cabin/app/services/intent_registry.py
@@ -0,0 +1,29 @@
+from __future__ import annotations
+
+import json
+from pathlib import Path
+
+from app.schemas.intent import IntentDefinition
+
+
+class IntentRegistry:
+ def __init__(self, intents: list[IntentDefinition]) -> None:
+ self._intents = {intent.intent_id: intent for intent in intents}
+
+ @classmethod
+ def from_json(cls, file_path: str) -> "IntentRegistry":
+ data = json.loads(Path(file_path).read_text(encoding="utf-8"))
+ intents = [IntentDefinition.model_validate(item) for item in data]
+ return cls(intents)
+
+ def get(self, intent_id: str) -> IntentDefinition:
+ return self._intents[intent_id]
+
+ def list(self) -> list[IntentDefinition]:
+ return list(self._intents.values())
+
+ def match(self, text: str) -> IntentDefinition | None:
+ for intent in self._intents.values():
+ if any(keyword in text for keyword in intent.keywords):
+ return intent
+ return None
diff --git a/intelligent_cabin/app/services/joint_nlu.py b/intelligent_cabin/app/services/joint_nlu.py
new file mode 100644
index 0000000..4f6e260
--- /dev/null
+++ b/intelligent_cabin/app/services/joint_nlu.py
@@ -0,0 +1,430 @@
+from __future__ import annotations
+
+import json
+from collections import OrderedDict
+from dataclasses import dataclass, field
+from pathlib import Path
+from time import perf_counter
+from typing import Any
+
+import torch
+from transformers import AutoConfig, AutoModel, AutoTokenizer
+
+from app.schemas.intent import IntentDefinition
+
+
+OPTIONAL_SLOT_NAMES_BY_INTENT: dict[str, set[str]] = {
+ "cabin_play_music": {"song", "genre"},
+}
+
+BLOCKED_INTENT_LABELS = {"__social__", "__out_of_scope__"}
+
+
+def allowed_slot_names(intent_id: str, required_slots: list[str] | None = None) -> set[str]:
+ required = set(required_slots or [])
+ return required | OPTIONAL_SLOT_NAMES_BY_INTENT.get(intent_id, set())
+
+
+@dataclass
+class JointSlot:
+ slot_name: str
+ value: str
+ start: int
+ end: int
+ score: float = 0.0
+
+
+@dataclass
+class JointCandidate:
+ intent_id: str
+ score: float
+
+
+@dataclass
+class JointNluResult:
+ intent_id: str | None = None
+ intent_score: float = 0.0
+ candidates: list[JointCandidate] = field(default_factory=list)
+ multi_intent_candidates: list[JointCandidate] = field(default_factory=list)
+ slots: dict[str, Any] = field(default_factory=dict)
+ slot_items: list[JointSlot] = field(default_factory=list)
+ model_name: str = "joint-bert-local"
+ backend_name: str = "joint-bert-local"
+ error_message: str | None = None
+
+
+class JointBertForNLU(torch.nn.Module):
+ def __init__(
+ self,
+ base_model_name: str,
+ num_intents: int,
+ num_slot_labels: int,
+ encoder_config_path: str | Path | None = None,
+ ) -> None:
+ super().__init__()
+ if encoder_config_path is not None:
+ encoder_config = AutoConfig.from_pretrained(encoder_config_path, local_files_only=True)
+ self.encoder = AutoModel.from_config(encoder_config)
+ else:
+ self.encoder = AutoModel.from_pretrained(base_model_name)
+ hidden_size = int(self.encoder.config.hidden_size)
+ dropout_prob = float(getattr(self.encoder.config, "hidden_dropout_prob", 0.1))
+ self.dropout = torch.nn.Dropout(dropout_prob)
+ self.intent_classifier = torch.nn.Linear(hidden_size, num_intents)
+ self.slot_classifier = torch.nn.Linear(hidden_size, num_slot_labels)
+
+ def forward(
+ self,
+ input_ids: torch.Tensor,
+ attention_mask: torch.Tensor,
+ token_type_ids: torch.Tensor | None = None,
+ ) -> tuple[torch.Tensor, torch.Tensor]:
+ encoder_kwargs = {
+ "input_ids": input_ids,
+ "attention_mask": attention_mask,
+ }
+ if token_type_ids is not None:
+ encoder_kwargs["token_type_ids"] = token_type_ids
+ outputs = self.encoder(**encoder_kwargs)
+ sequence_output = self.dropout(outputs.last_hidden_state)
+ pooled_output = self.dropout(sequence_output[:, 0])
+ intent_logits = self.intent_classifier(pooled_output)
+ slot_logits = self.slot_classifier(sequence_output)
+ return intent_logits, slot_logits
+
+
+class JointBertNLU:
+ def __init__(
+ self,
+ model_path: str,
+ intent_threshold: float | None = None,
+ multi_intent_threshold: float | None = None,
+ top_k: int = 5,
+ max_multi_intents: int = 4,
+ max_cache_size: int = 8,
+ ) -> None:
+ self._model_path = Path(model_path)
+ self._intent_threshold = intent_threshold
+ self._multi_intent_threshold = multi_intent_threshold
+ self._top_k = top_k
+ self._max_multi_intents = max_multi_intents
+ self._max_cache_size = max_cache_size
+ self._runtime: tuple[AutoTokenizer, JointBertForNLU, dict[str, Any], torch.device] | None = None
+ self._warmup_elapsed_ms: float | None = None
+ self._warmup_error_message: str | None = None
+ self._warmed_up = False
+ self._cache: OrderedDict[str, dict[str, Any]] = OrderedDict()
+
+ def warmup(self, sample_text: str = "把空调调到22度") -> bool:
+ started_at = perf_counter()
+ try:
+ self._predict_raw(sample_text)
+ except Exception as exc:
+ self._warmup_error_message = str(exc)
+ self._warmup_elapsed_ms = round((perf_counter() - started_at) * 1000, 3)
+ return False
+ self._warmup_error_message = None
+ self._warmup_elapsed_ms = round((perf_counter() - started_at) * 1000, 3)
+ self._warmed_up = True
+ return True
+
+ def predict(self, text: str, intents: list[IntentDefinition]) -> JointNluResult:
+ try:
+ raw_result = self._predict_raw(text)
+ except Exception as exc:
+ return JointNluResult(error_message=str(exc))
+ candidates = self._filter_known_candidates(raw_result["candidates"], intents, limit=self._top_k)
+ multi_candidates = self.predict_multi_intents(text, intents)
+ top_candidate = candidates[0] if candidates else None
+ if top_candidate is None or top_candidate.score < self._resolved_intent_threshold():
+ return JointNluResult(
+ intent_id=None,
+ intent_score=top_candidate.score if top_candidate is not None else 0.0,
+ candidates=candidates,
+ multi_intent_candidates=multi_candidates,
+ slots={},
+ slot_items=[],
+ )
+ intent_def = next((intent for intent in intents if intent.intent_id == top_candidate.intent_id), None)
+ if intent_def is None:
+ return JointNluResult(
+ intent_id=None,
+ intent_score=top_candidate.score,
+ candidates=candidates,
+ multi_intent_candidates=multi_candidates,
+ slots={},
+ slot_items=[],
+ )
+ slot_items = self._filter_slot_items(raw_result["slot_items"], intent_def.intent_id, intent_def.required_slots)
+ return JointNluResult(
+ intent_id=top_candidate.intent_id,
+ intent_score=top_candidate.score,
+ candidates=candidates,
+ multi_intent_candidates=multi_candidates,
+ slots=self._slot_items_to_dict(slot_items),
+ slot_items=slot_items,
+ )
+
+ def predict_multi_intents(
+ self,
+ text: str,
+ intents: list[IntentDefinition],
+ threshold: float | None = None,
+ max_labels: int | None = None,
+ top_k: int | None = None,
+ ) -> list[JointCandidate]:
+ try:
+ raw_result = self._predict_raw(text)
+ except Exception:
+ return []
+ threshold = self._multi_intent_threshold if threshold is None else threshold
+ if threshold is None:
+ threshold = self._resolved_multi_intent_threshold()
+ max_labels = self._max_multi_intents if max_labels is None else max_labels
+ ranked = self._filter_known_candidates(raw_result["candidates"], intents, limit=top_k or self._top_k)
+ selected: list[JointCandidate] = []
+ for item in ranked:
+ if item.score < threshold:
+ continue
+ selected.append(item)
+ if len(selected) >= max_labels:
+ break
+ return selected
+
+ def extract_slots(self, text: str, intent: IntentDefinition) -> dict[str, Any]:
+ try:
+ raw_result = self._predict_raw(text)
+ except Exception:
+ return {}
+ slot_items = self._filter_slot_items(raw_result["slot_items"], intent.intent_id, intent.required_slots)
+ return self._slot_items_to_dict(slot_items)
+
+ def extract_slots_by_intent_id(
+ self,
+ text: str,
+ intent_id: str,
+ required_slots: list[str] | None = None,
+ ) -> dict[str, Any]:
+ try:
+ raw_result = self._predict_raw(text)
+ except Exception:
+ return {}
+ slot_items = self._filter_slot_items(raw_result["slot_items"], intent_id, required_slots or [])
+ return self._slot_items_to_dict(slot_items)
+
+ def _filter_known_candidates(
+ self,
+ candidates: list[JointCandidate],
+ intents: list[IntentDefinition],
+ limit: int | None = None,
+ ) -> list[JointCandidate]:
+ known_intents = {intent.intent_id for intent in intents}
+ filtered = [
+ item
+ for item in candidates
+ if item.intent_id in known_intents and item.intent_id not in BLOCKED_INTENT_LABELS
+ ]
+ return filtered[:limit] if limit is not None else filtered
+
+ def _slot_items_to_dict(self, slot_items: list[JointSlot]) -> dict[str, Any]:
+ slots: dict[str, Any] = {}
+ for item in slot_items:
+ if item.slot_name == "temperature":
+ digits = "".join(ch for ch in item.value if ch.isdigit())
+ if digits:
+ slots[item.slot_name] = int(digits)
+ continue
+ slots[item.slot_name] = item.value
+ return slots
+
+ def _filter_slot_items(
+ self,
+ slot_items: list[JointSlot],
+ intent_id: str,
+ required_slots: list[str],
+ ) -> list[JointSlot]:
+ allowed = allowed_slot_names(intent_id, required_slots)
+ if not allowed:
+ return []
+ filtered = [item for item in slot_items if item.slot_name in allowed]
+ deduped: list[JointSlot] = []
+ seen: set[tuple[str, int, int]] = set()
+ for item in filtered:
+ key = (item.slot_name, item.start, item.end)
+ if key in seen:
+ continue
+ seen.add(key)
+ deduped.append(item)
+ return deduped
+
+ def _predict_raw(self, text: str) -> dict[str, Any]:
+ normalized = (text or "").strip()
+ if not normalized:
+ return {"candidates": [], "slot_items": []}
+ if normalized in self._cache:
+ cached = self._cache.pop(normalized)
+ self._cache[normalized] = cached
+ return cached
+ tokenizer, model, metadata, device = self._load_runtime()
+ encoded = tokenizer(
+ normalized,
+ truncation=True,
+ max_length=int(metadata.get("max_length", 64)),
+ return_offsets_mapping=True,
+ return_tensors="pt",
+ )
+ offset_mapping = encoded.pop("offset_mapping")[0].tolist()
+ encoded = {key: value.to(device) for key, value in encoded.items()}
+ model.eval()
+ with torch.no_grad():
+ intent_logits, slot_logits = model(**encoded)
+ slot_probs = torch.softmax(slot_logits, dim=-1)[0].detach().cpu()
+ slot_ids = torch.argmax(slot_probs, dim=-1).tolist()
+ intent_probs = self._intent_probabilities(intent_logits.detach().cpu()[0], metadata)
+ intent_labels = metadata.get("intent_labels", [])
+ slot_labels = metadata.get("slot_labels", [])
+ candidates = [
+ JointCandidate(intent_id=str(intent_labels[index]), score=float(score))
+ for index, score in sorted(
+ list(enumerate(intent_probs)),
+ key=lambda item: item[1],
+ reverse=True,
+ )
+ ]
+ slot_items = self._decode_slot_items(
+ text=normalized,
+ offset_mapping=offset_mapping,
+ slot_ids=slot_ids,
+ slot_probs=slot_probs,
+ slot_labels=slot_labels,
+ )
+ result = {
+ "candidates": candidates,
+ "slot_items": slot_items,
+ }
+ self._cache[normalized] = result
+ while len(self._cache) > self._max_cache_size:
+ self._cache.popitem(last=False)
+ return result
+
+ def _intent_probabilities(self, intent_logits: torch.Tensor, metadata: dict[str, Any]) -> list[float]:
+ task_type = str(metadata.get("intent_task", "single_label")).strip() or "single_label"
+ if task_type == "multi_label":
+ return torch.sigmoid(intent_logits).tolist()
+ return torch.softmax(intent_logits, dim=-1).tolist()
+
+ def _decode_slot_items(
+ self,
+ text: str,
+ offset_mapping: list[list[int]],
+ slot_ids: list[int],
+ slot_probs: torch.Tensor,
+ slot_labels: list[str],
+ ) -> list[JointSlot]:
+ items: list[JointSlot] = []
+ current_name: str | None = None
+ current_start: int | None = None
+ current_end: int | None = None
+ current_scores: list[float] = []
+
+ def flush() -> None:
+ nonlocal current_name, current_start, current_end, current_scores
+ if current_name is None or current_start is None or current_end is None or current_start >= current_end:
+ current_name = None
+ current_start = None
+ current_end = None
+ current_scores = []
+ return
+ value = text[current_start:current_end].strip()
+ if value:
+ items.append(
+ JointSlot(
+ slot_name=current_name,
+ value=value,
+ start=current_start,
+ end=current_end,
+ score=round(sum(current_scores) / max(len(current_scores), 1), 4),
+ )
+ )
+ current_name = None
+ current_start = None
+ current_end = None
+ current_scores = []
+
+ for index, label_id in enumerate(slot_ids):
+ if index >= len(offset_mapping):
+ break
+ start, end = offset_mapping[index]
+ if end <= start:
+ flush()
+ continue
+ label = str(slot_labels[label_id]) if label_id < len(slot_labels) else "O"
+ token_score = float(slot_probs[index][label_id].item())
+ if label == "O":
+ flush()
+ continue
+ prefix, _, name = label.partition("-")
+ if prefix == "B" or current_name != name:
+ flush()
+ current_name = name
+ current_start = start
+ current_end = end
+ current_scores = [token_score]
+ continue
+ current_end = end
+ current_scores.append(token_score)
+ flush()
+ return items
+
+ def _load_runtime(self) -> tuple[AutoTokenizer, JointBertForNLU, dict[str, Any], torch.device]:
+ if self._runtime is not None:
+ return self._runtime
+ if not self._model_path.exists():
+ raise FileNotFoundError(f"joint nlu model path not found: {self._model_path}")
+ metadata_path = self._model_path / "joint_nlu_config.json"
+ state_dict_path = self._model_path / "model_state.pt"
+ if not metadata_path.exists():
+ raise FileNotFoundError(f"joint nlu config missing: {metadata_path}")
+ if not state_dict_path.exists():
+ raise FileNotFoundError(f"joint nlu model state missing: {state_dict_path}")
+ metadata = json.loads(metadata_path.read_text(encoding="utf-8"))
+ tokenizer = AutoTokenizer.from_pretrained(self._model_path)
+ model = JointBertForNLU(
+ base_model_name=str(metadata["base_model_name"]),
+ num_intents=len(metadata["intent_labels"]),
+ num_slot_labels=len(metadata["slot_labels"]),
+ encoder_config_path=self._resolve_encoder_config_path(metadata),
+ )
+ state_dict = torch.load(state_dict_path, map_location="cpu")
+ model.load_state_dict(state_dict)
+ device = torch.device("mps" if torch.backends.mps.is_available() else "cpu")
+ model.to(device)
+ self._runtime = (tokenizer, model, metadata, device)
+ return self._runtime
+
+ def _resolve_encoder_config_path(self, metadata: dict[str, Any]) -> Path | None:
+ local_config = self._model_path / "config.json"
+ if local_config.exists():
+ return self._model_path
+
+ base_model_path = Path(str(metadata.get("base_model_name", "")))
+ if base_model_path.exists() and (base_model_path / "config.json").exists():
+ return base_model_path
+
+ for candidate_name in ("local_bert_intent", "local_bert_multi_intent"):
+ candidate_path = self._model_path.parent / candidate_name
+ if (candidate_path / "config.json").exists():
+ return candidate_path
+ return None
+
+ def _resolved_intent_threshold(self) -> float:
+ if self._intent_threshold is not None:
+ return self._intent_threshold
+ metadata = self._runtime[2] if self._runtime is not None else {}
+ return float(metadata.get("intent_threshold", 0.35))
+
+ def _resolved_multi_intent_threshold(self) -> float:
+ if self._multi_intent_threshold is not None:
+ return self._multi_intent_threshold
+ metadata = self._runtime[2] if self._runtime is not None else {}
+ return float(metadata.get("multi_intent_threshold", metadata.get("intent_threshold", 0.45)))
diff --git a/intelligent_cabin/app/services/knowledge_llm.py b/intelligent_cabin/app/services/knowledge_llm.py
new file mode 100644
index 0000000..581e397
--- /dev/null
+++ b/intelligent_cabin/app/services/knowledge_llm.py
@@ -0,0 +1,238 @@
+"""
+app/services/knowledge_llm.py
+
+当 BERT NLU 未命中时,使用 LLM + knowledge_search function call 查询本地知识库。
+
+流程:
+ 1. 构建 tools=[knowledge_search] 发给 LLM
+ 2. 若 LLM 返回 tool_calls → 执行 KnowledgeStore.search() → 拼结果再发一次 LLM
+ 3. LLM 生成最终回复 reply_text + knowledge_doc_id(可选)
+
+返回 KnowledgeReplyResult,包含:
+ - reply_text: 简短自然语言摘要
+ - doc_id / doc_content: 命中的知识文档(供前端渲染 KnowledgeArtifact)
+"""
+from __future__ import annotations
+
+import json
+from dataclasses import dataclass, field
+from typing import Any
+from urllib import error, request
+
+from app.services.knowledge_store import KnowledgeDoc, KnowledgeStore
+
+
+@dataclass
+class KnowledgeReplyResult:
+ reply_text: str
+ backend: str
+ model_name: str
+ doc_id: str | None = None
+ doc_content: str | None = None # 原始 MD 内容,前端渲染用
+ doc_title: str | None = None
+ error_message: str | None = None
+ metadata: dict[str, Any] = field(default_factory=dict)
+
+
+# ── LLM 工具定义(OpenAI function calling 格式,DashScope 兼容)────────────────
+_KNOWLEDGE_SEARCH_TOOL: dict[str, Any] = {
+ "type": "function",
+ "function": {
+ "name": "knowledge_search",
+ "description": (
+ "搜索本地设备知识库,获取焊管机/弯管机产线相关的故障排查、操作规程等知识。"
+ "当用户问到设备故障、报警处理、操作方法、工艺参数时请调用此工具。"
+ ),
+ "parameters": {
+ "type": "object",
+ "properties": {
+ "query": {
+ "type": "string",
+ "description": "搜索关键词,如'虚焊报警'、'激光扫描仪操作'、'弯管模具调节'等",
+ }
+ },
+ "required": ["query"],
+ },
+ },
+}
+
+_SYSTEM_PROMPT = """\
+你是焊管机产线智能助手,负责回答操作工人关于设备故障、工艺调节、仪器使用的问题。
+你有一个工具 knowledge_search 可以查询本地设备知识库,遇到设备类问题时请先调用它。
+回答时语言简洁、口语化,先给出结论,再说步骤,总长度不超过 100 字。
+如果工具返回了相关知识,请基于知识内容回答,不要编造。
+如果没有找到相关知识,诚实告知"暂未找到相关资料,建议联系技术支持"。
+"""
+
+
+class DashScopeKnowledgeLLM:
+ """使用 DashScope(OpenAI 兼容 API)+ function calling 的知识库问答器。"""
+
+ def __init__(
+ self,
+ base_url: str,
+ api_key: str,
+ model_name: str,
+ knowledge_store: KnowledgeStore,
+ timeout_seconds: float = 12.0,
+ max_tool_rounds: int = 2,
+ ) -> None:
+ self._base_url = base_url.rstrip("/")
+ self._api_key = api_key
+ self._model_name = model_name
+ self._store = knowledge_store
+ self._timeout = timeout_seconds
+ self._max_tool_rounds = max_tool_rounds
+
+ # ── 主入口 ─────────────────────────────────────────────────────────────────
+
+ def reply(self, user_text: str) -> KnowledgeReplyResult:
+ """完整 function-call 对话流(最多 max_tool_rounds 轮工具调用)。"""
+ if not self._base_url or not self._api_key or not self._model_name:
+ return self._local_fallback(user_text, "LLM not configured")
+
+ messages: list[dict[str, Any]] = [
+ {"role": "system", "content": _SYSTEM_PROMPT},
+ {"role": "user", "content": user_text},
+ ]
+
+ found_doc: KnowledgeDoc | None = None
+
+ for _round in range(self._max_tool_rounds):
+ raw = self._chat(messages, tools=[_KNOWLEDGE_SEARCH_TOOL])
+ if raw is None:
+ return self._local_fallback(user_text, "LLM request failed")
+
+ choice = self._first_choice(raw)
+ if choice is None:
+ return self._local_fallback(user_text, "empty choices")
+
+ finish_reason = choice.get("finish_reason", "")
+ message = choice.get("message", {})
+
+ # ── 工具调用分支 ─────────────────────────────────────────────────
+ if finish_reason == "tool_calls" or message.get("tool_calls"):
+ tool_calls = message.get("tool_calls", [])
+ messages.append({"role": "assistant", **message})
+
+ for tc in tool_calls:
+ fn_name = tc.get("function", {}).get("name", "")
+ fn_args_raw = tc.get("function", {}).get("arguments", "{}")
+ tc_id = tc.get("id", "call_0")
+
+ if fn_name == "knowledge_search":
+ try:
+ fn_args = json.loads(fn_args_raw)
+ except json.JSONDecodeError:
+ fn_args = {"query": user_text}
+
+ query = fn_args.get("query", user_text)
+ tool_result, found_doc = self._run_knowledge_search(query)
+ else:
+ tool_result = f"Unknown tool: {fn_name}"
+
+ messages.append({
+ "role": "tool",
+ "tool_call_id": tc_id,
+ "content": tool_result,
+ })
+ # 继续下一轮 LLM 调用
+ continue
+
+ # ── 正常文本回复 ─────────────────────────────────────────────────
+ content = self._extract_content(message)
+ if not content:
+ return self._local_fallback(user_text, "empty content")
+
+ return KnowledgeReplyResult(
+ reply_text=content,
+ backend="dashscope",
+ model_name=self._model_name,
+ doc_id=found_doc.doc_id if found_doc else None,
+ doc_content=found_doc.content if found_doc else None,
+ doc_title=found_doc.title if found_doc else None,
+ )
+
+ # 超出工具调用轮数,直接本地兜底
+ return self._local_fallback(user_text, "max tool rounds exceeded")
+
+ # ── 内部工具执行 ───────────────────────────────────────────────────────────
+
+ def _run_knowledge_search(self, query: str) -> tuple[str, KnowledgeDoc | None]:
+ """执行本地知识库搜索,返回 (tool_result_str, best_doc)。"""
+ results = self._store.search(query, top_k=2)
+ if not results:
+ return "未找到相关知识文档。", None
+
+ best = results[0]
+ # 给 LLM 的 tool result:文档标题 + 正文(截断到 800 字节)
+ excerpt = best.doc.content[:800]
+ tool_text = (
+ f"[知识库检索结果]\n"
+ f"文档:{best.doc.title}\n"
+ f"命中关键词:{', '.join(best.matched_keywords)}\n\n"
+ f"{excerpt}"
+ )
+ return tool_text, best.doc
+
+ # ── HTTP 调用 ──────────────────────────────────────────────────────────────
+
+ def _chat(
+ self,
+ messages: list[dict[str, Any]],
+ tools: list[dict[str, Any]] | None = None,
+ ) -> dict[str, Any] | None:
+ payload: dict[str, Any] = {
+ "model": self._model_name,
+ "temperature": 0.3,
+ "enable_thinking": False,
+ "max_tokens": 300,
+ "messages": messages,
+ }
+ if tools:
+ payload["tools"] = tools
+ payload["tool_choice"] = "auto"
+
+ req = request.Request(
+ self._endpoint(),
+ data=json.dumps(payload, ensure_ascii=False).encode("utf-8"),
+ headers={
+ "Content-Type": "application/json",
+ "Authorization": f"Bearer {self._api_key}",
+ },
+ method="POST",
+ )
+ try:
+ with request.urlopen(req, timeout=self._timeout) as resp:
+ return json.loads(resp.read().decode("utf-8"))
+ except (error.URLError, TimeoutError, ValueError, OSError):
+ return None
+
+ def _endpoint(self) -> str:
+ if self._base_url.endswith("/chat/completions"):
+ return self._base_url
+ return f"{self._base_url}/chat/completions"
+
+ def _first_choice(self, payload: dict[str, Any]) -> dict[str, Any] | None:
+ choices = payload.get("choices")
+ if not isinstance(choices, list) or not choices:
+ return None
+ return choices[0]
+
+ def _extract_content(self, message: dict[str, Any]) -> str:
+ content = message.get("content", "")
+ if isinstance(content, list):
+ return "".join(
+ str(item.get("text", "")).strip()
+ for item in content
+ if isinstance(item, dict) and item.get("type") == "text"
+ ).strip()
+ return str(content).strip()
+
+ def _local_fallback(self, _user_text: str, reason: str) -> KnowledgeReplyResult:
+ return KnowledgeReplyResult(
+ reply_text="暂未找到相关资料,建议联系技术支持或查阅设备手册。",
+ backend="local-fallback",
+ model_name="knowledge-fallback",
+ error_message=reason,
+ )
diff --git a/intelligent_cabin/app/services/knowledge_store.py b/intelligent_cabin/app/services/knowledge_store.py
new file mode 100644
index 0000000..182514c
--- /dev/null
+++ b/intelligent_cabin/app/services/knowledge_store.py
@@ -0,0 +1,152 @@
+"""
+app/services/knowledge_store.py
+
+本地 Markdown 知识库加载与关键词检索。
+- 所有 .md 文件存放在 config/knowledge/ 目录
+- 基于关键词打分,支持多文档排序返回
+"""
+from __future__ import annotations
+
+import re
+from dataclasses import dataclass, field
+from pathlib import Path
+
+
+@dataclass
+class KnowledgeDoc:
+ """一篇知识文档的元数据与正文。"""
+
+ doc_id: str # 文件名(不含扩展名)
+ title: str # MD 首行 # 标题,无则用文件名
+ content: str # 完整原始 Markdown 内容
+ keywords: list[str] = field(default_factory=list) # 从正文抽取的高频词
+
+
+@dataclass
+class SearchResult:
+ doc: KnowledgeDoc
+ score: float
+ matched_keywords: list[str]
+
+
+class KnowledgeStore:
+ """从 config/knowledge/*.md 加载知识库,提供关键词检索。"""
+
+ def __init__(self, knowledge_dir: str | Path) -> None:
+ self._dir = Path(knowledge_dir)
+ self._docs: dict[str, KnowledgeDoc] = {}
+ self._load()
+
+ # ── 公开 API ───────────────────────────────────────────────────────────────
+
+ def search(self, query: str, top_k: int = 3) -> list[SearchResult]:
+ """根据 query 检索最相关的知识文档,返回最多 top_k 条。"""
+ query_tokens = self._tokenize(query)
+ if not query_tokens:
+ return []
+
+ results: list[SearchResult] = []
+ for doc in self._docs.values():
+ score, matched = self._score(doc, query_tokens)
+ if score > 0:
+ results.append(SearchResult(doc=doc, score=score, matched_keywords=matched))
+
+ results.sort(key=lambda r: r.score, reverse=True)
+ return results[:top_k]
+
+ def get(self, doc_id: str) -> KnowledgeDoc | None:
+ return self._docs.get(doc_id)
+
+ def all_doc_ids(self) -> list[str]:
+ return list(self._docs.keys())
+
+ def reload(self) -> None:
+ """热重载知识库(添加新 MD 文件后调用)。"""
+ self._docs.clear()
+ self._load()
+
+ # ── 内部逻辑 ───────────────────────────────────────────────────────────────
+
+ def _load(self) -> None:
+ if not self._dir.exists():
+ return
+ for md_path in sorted(self._dir.glob("*.md")):
+ doc = self._parse_md(md_path)
+ self._docs[doc.doc_id] = doc
+
+ def _parse_md(self, path: Path) -> KnowledgeDoc:
+ content = path.read_text(encoding="utf-8")
+ doc_id = path.stem
+
+ # 提取第一个 # 标题作为文档标题
+ title_match = re.search(r"^#+\s+(.+)", content, re.MULTILINE)
+ title = title_match.group(1).strip() if title_match else doc_id
+
+ # 提取关键词:去标点后的中文词段(2~6字)
+ keywords = self._extract_keywords(content)
+ return KnowledgeDoc(doc_id=doc_id, title=title, content=content, keywords=keywords)
+
+ def _extract_keywords(self, content: str) -> list[str]:
+ """提取 MD 正文中的中文词段作为候选关键词。"""
+ # 去掉 Markdown 语法符号
+ text = re.sub(r"[#`*_>|~\[\]()!]", " ", content)
+ text = re.sub(r"https?://\S+", " ", text)
+ # 中文词段(2-6 个汉字)
+ words = re.findall(r"[\u4e00-\u9fff]{2,6}", text)
+ # 去重,保留顺序
+ seen: set[str] = set()
+ unique: list[str] = []
+ for w in words:
+ if w not in seen:
+ seen.add(w)
+ unique.append(w)
+ return unique
+
+ def _tokenize(self, text: str) -> list[str]:
+ """将 query 分割成候选检索词。
+
+ 策略:
+ 1. 提取所有连续中文字段(2字以上)作为候选
+ 2. 在连续中文字段上做滑动窗口(2-5字),覆盖子串匹配
+ 避免整句 '虚焊报警怎么办' 作为单一 token 无法匹配 '虚焊报警'
+ """
+ # 提取所有连续中文片段
+ chinese_chunks = re.findall(r"[\u4e00-\u9fff]+", text)
+ tokens: list[str] = []
+ for chunk in chinese_chunks:
+ # 滑动窗口:长度 2 到 min(5, len(chunk))
+ for size in range(2, min(6, len(chunk) + 1)):
+ for start in range(len(chunk) - size + 1):
+ tokens.append(chunk[start : start + size])
+ # 整体 chunk 也加入(用于长词精确匹配)
+ if len(chunk) > 1:
+ tokens.append(chunk)
+ # 去重保序
+ seen: set[str] = set()
+ unique: list[str] = []
+ for t in tokens:
+ if t not in seen:
+ seen.add(t)
+ unique.append(t)
+ return unique
+
+ def _score(self, doc: KnowledgeDoc, query_tokens: list[str]) -> tuple[float, list[str]]:
+ """给文档打分:命中 title 得 3 分,命中 content 得 1 分(上限 5)。"""
+ score = 0.0
+ matched: list[str] = []
+ seen: set[str] = set()
+ content_lower = doc.content.lower()
+ title_lower = doc.title.lower()
+
+ for token in query_tokens:
+ token_lower = token.lower()
+ if token_lower in seen:
+ continue
+ in_title = token_lower in title_lower
+ in_content = token_lower in content_lower
+ if in_title or in_content:
+ seen.add(token_lower)
+ matched.append(token)
+ score += 3.0 if in_title else 1.0
+
+ return min(score, 15.0), matched # 上限 15,避免极端高分
diff --git a/intelligent_cabin/app/services/multi_intent_detector.py b/intelligent_cabin/app/services/multi_intent_detector.py
new file mode 100644
index 0000000..852bb43
--- /dev/null
+++ b/intelligent_cabin/app/services/multi_intent_detector.py
@@ -0,0 +1,219 @@
+from __future__ import annotations
+
+import importlib
+from dataclasses import dataclass, field
+from pathlib import Path
+from time import perf_counter
+from typing import Any, Protocol
+
+from app.schemas.intent import IntentDefinition
+from app.services.joint_nlu import JointBertNLU
+
+
+@dataclass
+class MultiIntentCandidate:
+ intent_id: str
+ score: float
+ label: str | None = None
+
+
+@dataclass
+class MultiIntentDetectionResult:
+ detected: bool = False
+ candidates: list[MultiIntentCandidate] = field(default_factory=list)
+ reason: str | None = None
+ backend_name: str = "none"
+ error_message: str | None = None
+ raw_scores: list[dict[str, Any]] = field(default_factory=list)
+
+
+class MultiIntentDetector(Protocol):
+ def detect(self, text: str, intents: list[IntentDefinition]) -> MultiIntentDetectionResult:
+ ...
+
+
+class JointBertMultiIntentDetector:
+ """
+ A multi-intent detector backed by the same Joint BERT runtime as single-intent and slot extraction.
+ """
+
+ def __init__(
+ self,
+ nlu: JointBertNLU,
+ threshold: float | None = None,
+ top_k: int = 8,
+ max_labels: int = 4,
+ ) -> None:
+ self._nlu = nlu
+ self._threshold = threshold
+ self._top_k = top_k
+ self._max_labels = max_labels
+
+ def detect(self, text: str, intents: list[IntentDefinition]) -> MultiIntentDetectionResult:
+ candidates = self._nlu.predict_multi_intents(
+ text,
+ intents,
+ threshold=self._threshold,
+ max_labels=self._max_labels,
+ top_k=self._top_k,
+ )
+ return MultiIntentDetectionResult(
+ detected=len(candidates) >= 2,
+ candidates=[
+ MultiIntentCandidate(intent_id=item.intent_id, score=item.score, label=item.intent_id)
+ for item in candidates
+ ],
+ reason=f"joint bert multi-label candidates={len(candidates)} threshold={self._threshold}",
+ backend_name="joint-bert-multi-label",
+ raw_scores=[
+ {"intent_id": item.intent_id, "label": item.intent_id, "score": float(item.score)}
+ for item in candidates
+ ],
+ )
+
+ def warmup(self, sample_text: str = "打开空调并打开车窗") -> bool:
+ return self._nlu.warmup(sample_text)
+
+
+class BertMultiIntentDetector:
+ """
+ A stage-2 multi-intent detector backed by a dedicated multi-label BERT head.
+ """
+
+ def __init__(
+ self,
+ model_path: str,
+ threshold: float = 0.45,
+ top_k: int = 8,
+ max_labels: int = 4,
+ blocked_labels: set[str] | None = None,
+ ) -> None:
+ self._model_path = model_path
+ self._threshold = threshold
+ self._top_k = top_k
+ self._max_labels = max_labels
+ self._blocked_labels = blocked_labels or {"__social__", "__out_of_scope__"}
+ self._tokenizer = None
+ self._model = None
+ self._torch = None
+ self._error_message: str | None = None
+ self._warmed_up = False
+ self._warmup_elapsed_ms: float | None = None
+
+ def detect(self, text: str, intents: list[IntentDefinition]) -> MultiIntentDetectionResult:
+ runtime = self._get_runtime()
+ if runtime is None:
+ return MultiIntentDetectionResult(
+ detected=False,
+ reason="multi-label detector unavailable",
+ backend_name="bert-multi-label",
+ error_message=self._error_message,
+ )
+ torch, tokenizer, model = runtime
+ intent_map = {intent.intent_id: intent for intent in intents}
+ try:
+ encoded = tokenizer(
+ text,
+ truncation=True,
+ padding=False,
+ return_tensors="pt",
+ )
+ model.eval()
+ with torch.no_grad():
+ logits = model(**encoded).logits.squeeze(0)
+ probs = torch.sigmoid(logits).detach().cpu().tolist()
+ except Exception as exc:
+ return MultiIntentDetectionResult(
+ detected=False,
+ reason="multi-label forward failed",
+ backend_name="bert-multi-label",
+ error_message=str(exc),
+ )
+
+ id2label = getattr(model.config, "id2label", {}) or {}
+ raw_scores: list[dict[str, Any]] = []
+ for index, score in enumerate(probs):
+ label = str(id2label.get(index, f"LABEL_{index}"))
+ raw_scores.append(
+ {
+ "label": label,
+ "intent_id": label,
+ "score": float(score),
+ }
+ )
+ raw_scores.sort(key=lambda item: item["score"], reverse=True)
+ raw_top = raw_scores[: self._top_k]
+
+ candidates: list[MultiIntentCandidate] = []
+ for item in raw_top:
+ intent_id = str(item.get("intent_id") or "")
+ if intent_id in self._blocked_labels:
+ continue
+ if intent_id not in intent_map:
+ continue
+ score = float(item.get("score", 0.0))
+ if score < self._threshold:
+ continue
+ candidates.append(
+ MultiIntentCandidate(
+ intent_id=intent_id,
+ score=score,
+ label=str(item.get("label") or intent_id),
+ )
+ )
+ if len(candidates) >= self._max_labels:
+ break
+
+ return MultiIntentDetectionResult(
+ detected=len(candidates) >= 2,
+ candidates=candidates,
+ reason=f"bert multi-label candidates={len(candidates)} threshold={self._threshold}",
+ backend_name="bert-multi-label",
+ raw_scores=raw_top,
+ )
+
+ def warmup(self, sample_text: str = "打开空调并打开车窗") -> bool:
+ if self._warmed_up:
+ return True
+ started_at = perf_counter()
+ runtime = self._get_runtime()
+ if runtime is None:
+ self._warmup_elapsed_ms = round((perf_counter() - started_at) * 1000, 3)
+ return False
+ torch, tokenizer, model = runtime
+ try:
+ encoded = tokenizer(sample_text, truncation=True, padding=False, return_tensors="pt")
+ model.eval()
+ with torch.no_grad():
+ _ = model(**encoded).logits
+ except Exception as exc:
+ self._error_message = str(exc)
+ self._warmup_elapsed_ms = round((perf_counter() - started_at) * 1000, 3)
+ return False
+ self._warmed_up = True
+ self._warmup_elapsed_ms = round((perf_counter() - started_at) * 1000, 3)
+ return True
+
+ def _get_runtime(self):
+ if self._tokenizer is not None and self._model is not None and self._torch is not None:
+ return self._torch, self._tokenizer, self._model
+ if not self._model_path or not Path(self._model_path).exists():
+ self._error_message = "multi-intent model path is empty or missing"
+ return None
+ try:
+ transformers = importlib.import_module("transformers")
+ torch = importlib.import_module("torch")
+ except ImportError as exc:
+ self._error_message = str(exc)
+ return None
+ try:
+ self._tokenizer = transformers.AutoTokenizer.from_pretrained(self._model_path)
+ self._model = transformers.AutoModelForSequenceClassification.from_pretrained(self._model_path)
+ self._torch = torch
+ except Exception as exc:
+ self._error_message = str(exc)
+ return None
+ return self._torch, self._tokenizer, self._model
+
+
+SigmoidBertMultiIntentDetector = BertMultiIntentDetector
diff --git a/intelligent_cabin/app/services/planner.py b/intelligent_cabin/app/services/planner.py
new file mode 100644
index 0000000..f8205fe
--- /dev/null
+++ b/intelligent_cabin/app/services/planner.py
@@ -0,0 +1,1347 @@
+from __future__ import annotations
+
+import json
+import re
+from dataclasses import dataclass, field
+from typing import Any, Protocol
+from urllib import error, request
+
+from app.services.classifier import ClassificationResult, IntentClassifier
+from app.services.joint_nlu import JointBertNLU
+from app.services.multi_intent_detector import MultiIntentDetectionResult, MultiIntentDetector
+from app.schemas.configuration import WorkflowTemplateDefinition, WorkflowTemplatesConfig
+from app.schemas.intent import IntentDefinition
+
+
+@dataclass
+class PlannedStep:
+ intent_id: str
+ slots: dict[str, Any] = field(default_factory=dict)
+ depends_on: list[int] = field(default_factory=list)
+ condition: dict[str, Any] = field(default_factory=dict)
+ requires_confirmation: bool = False
+ reason: str | None = None
+
+
+@dataclass
+class PlanningResult:
+ accepted: bool
+ workflow_type: str = "single"
+ steps: list[PlannedStep] = field(default_factory=list)
+ model_name: str = "heuristic-planner"
+ backend: str = "local"
+ reason: str | None = None
+ error_message: str | None = None
+ raw_response: str | None = None
+ metadata: dict[str, Any] = field(default_factory=dict)
+
+
+@dataclass
+class ClauseParseResult:
+ clause_text: str
+ selected_intent_id: str | None = None
+ score: float = 0.0
+ slots: dict[str, Any] = field(default_factory=dict)
+ reason: str | None = None
+ candidates: list[dict[str, Any]] = field(default_factory=list)
+
+
+@dataclass
+class MultiIntentParseResult:
+ clauses: list[ClauseParseResult] = field(default_factory=list)
+ workflow_type: str = "single"
+ detected: bool = False
+ reason: str | None = None
+ detector: MultiIntentDetectionResult | None = None
+
+ @property
+ def matched_ids(self) -> list[str]:
+ return [clause.selected_intent_id for clause in self.clauses if clause.selected_intent_id]
+
+ @property
+ def matched_clauses(self) -> list[ClauseParseResult]:
+ return [clause for clause in self.clauses if clause.selected_intent_id]
+
+
+class WorkflowPlanner(Protocol):
+ def plan(
+ self,
+ text: str,
+ intents: list[IntentDefinition],
+ context: dict[str, Any] | None = None,
+ ) -> PlanningResult:
+ ...
+
+
+class TemplateWorkflowPlanner:
+ def __init__(
+ self,
+ templates: WorkflowTemplatesConfig | None = None,
+ clause_classifier: IntentClassifier | None = None,
+ multi_intent_detector: MultiIntentDetector | None = None,
+ joint_nlu: JointBertNLU | None = None,
+ classifier_weight: float = 1.6,
+ model_only_threshold: float = 0.62,
+ ) -> None:
+ self._templates = templates or WorkflowTemplatesConfig()
+ self._clause_classifier = clause_classifier
+ self._multi_intent_detector = multi_intent_detector
+ self._joint_nlu = joint_nlu
+ self._classifier_weight = classifier_weight
+ self._model_only_threshold = model_only_threshold
+
+ def plan(
+ self,
+ text: str,
+ intents: list[IntentDefinition],
+ context: dict[str, Any] | None = None,
+ ) -> PlanningResult:
+ _ = context
+ if not self._templates.templates:
+ return PlanningResult(
+ accepted=False,
+ model_name="template-planner",
+ backend="local-template",
+ reason="no workflow templates configured",
+ )
+ parse_result = _analyze_multi_intent(
+ text,
+ intents,
+ clause_classifier=self._clause_classifier,
+ multi_intent_detector=self._multi_intent_detector,
+ joint_nlu=self._joint_nlu,
+ classifier_weight=self._classifier_weight,
+ model_only_threshold=self._model_only_threshold,
+ )
+ matched_ids = parse_result.matched_ids
+ if len(matched_ids) < 2:
+ return PlanningResult(
+ accepted=False,
+ model_name="template-planner",
+ backend="local-template",
+ reason="not enough matched clauses for workflow template",
+ metadata={
+ "matched_intents": matched_ids,
+ "input_clauses": [item.clause_text for item in parse_result.clauses],
+ "clause_analysis": _serialize_clause_analysis(parse_result),
+ "multi_intent_detected": parse_result.detected,
+ "multi_intent_detector": _serialize_multi_intent_detector(parse_result.detector),
+ },
+ )
+
+ for template in self._templates.templates:
+ if self._matches_template(text, matched_ids, template):
+ steps = self._build_steps(template, parse_result)
+ return PlanningResult(
+ accepted=True,
+ workflow_type=template.workflow_type,
+ steps=steps,
+ model_name="template-planner",
+ backend="local-template",
+ reason=f"matched workflow template: {template.template_id}",
+ metadata={
+ "template_id": template.template_id,
+ "input_clauses": [item.clause_text for item in parse_result.clauses],
+ "matched_intents": matched_ids,
+ "clause_analysis": _serialize_clause_analysis(parse_result),
+ "multi_intent_detected": parse_result.detected,
+ "multi_intent_detector": _serialize_multi_intent_detector(parse_result.detector),
+ "normalized_steps": [
+ {
+ "intent_id": step.intent_id,
+ "slots": step.slots,
+ "depends_on": step.depends_on,
+ "condition": step.condition,
+ "requires_confirmation": step.requires_confirmation,
+ }
+ for step in steps
+ ],
+ },
+ )
+
+ return PlanningResult(
+ accepted=False,
+ model_name="template-planner",
+ backend="local-template",
+ reason="no workflow template matched the current clause intents",
+ metadata={
+ "matched_intents": matched_ids,
+ "input_clauses": [item.clause_text for item in parse_result.clauses],
+ "clause_analysis": _serialize_clause_analysis(parse_result),
+ "multi_intent_detected": parse_result.detected,
+ "multi_intent_detector": _serialize_multi_intent_detector(parse_result.detector),
+ },
+ )
+
+ def _matches_template(self, text: str, matched_ids: list[str], template: WorkflowTemplateDefinition) -> bool:
+ if template.trigger_keywords and not all(keyword in text for keyword in template.trigger_keywords):
+ return False
+ return matched_ids[: len(template.intent_sequence)] == template.intent_sequence
+
+ def _build_steps(
+ self,
+ template: WorkflowTemplateDefinition,
+ parse_result: MultiIntentParseResult,
+ ) -> list[PlannedStep]:
+ steps: list[PlannedStep] = []
+ matched_clauses = parse_result.matched_clauses
+ for index, intent_id in enumerate(template.intent_sequence):
+ clause_result = matched_clauses[index] if index < len(matched_clauses) else None
+ clause_text = clause_result.clause_text if clause_result is not None else ""
+ override = template.step_overrides[index] if index < len(template.step_overrides) else None
+ steps.append(
+ PlannedStep(
+ intent_id=intent_id,
+ slots=_extract_slots_for_intent(
+ clause_text or " ".join(item.clause_text for item in parse_result.clauses),
+ intent_id,
+ joint_nlu=self._joint_nlu,
+ ),
+ depends_on=list(override.depends_on) if override is not None else [],
+ condition=dict(override.condition) if override is not None else {},
+ requires_confirmation=bool(override.requires_confirmation) if override is not None else False,
+ reason=f"workflow template matched clause {index + 1}: {clause_result.selected_intent_id if clause_result is not None else intent_id}",
+ )
+ )
+ return steps
+
+
+class CompositeWorkflowPlanner:
+ def __init__(self, planners: list[WorkflowPlanner]) -> None:
+ self._planners = planners
+
+ def plan(
+ self,
+ text: str,
+ intents: list[IntentDefinition],
+ context: dict[str, Any] | None = None,
+ ) -> PlanningResult:
+ last_result = PlanningResult(accepted=False, reason="no planner configured")
+ for planner in self._planners:
+ result = planner.plan(text, intents, context)
+ last_result = result
+ if result.accepted:
+ return result
+ return last_result
+
+
+class HeuristicWorkflowPlanner:
+ def __init__(
+ self,
+ clause_classifier: IntentClassifier | None = None,
+ multi_intent_detector: MultiIntentDetector | None = None,
+ joint_nlu: JointBertNLU | None = None,
+ classifier_weight: float = 1.6,
+ model_only_threshold: float = 0.62,
+ ) -> None:
+ self._clause_classifier = clause_classifier
+ self._multi_intent_detector = multi_intent_detector
+ self._joint_nlu = joint_nlu
+ self._classifier_weight = classifier_weight
+ self._model_only_threshold = model_only_threshold
+
+ def plan(
+ self,
+ text: str,
+ intents: list[IntentDefinition],
+ context: dict[str, Any] | None = None,
+ ) -> PlanningResult:
+ _ = context
+ parse_result = _analyze_multi_intent(
+ text,
+ intents,
+ clause_classifier=self._clause_classifier,
+ multi_intent_detector=self._multi_intent_detector,
+ joint_nlu=self._joint_nlu,
+ classifier_weight=self._classifier_weight,
+ model_only_threshold=self._model_only_threshold,
+ )
+ if not parse_result.detected and not _has_complex_pattern(text):
+ return PlanningResult(
+ accepted=False,
+ model_name="heuristic-planner",
+ backend="local-heuristic",
+ reason="single command or no explicit planning pattern detected",
+ metadata={
+ "input_clauses": [item.clause_text for item in parse_result.clauses],
+ "clause_analysis": _serialize_clause_analysis(parse_result),
+ "multi_intent_detected": parse_result.detected,
+ "multi_intent_detector": _serialize_multi_intent_detector(parse_result.detector),
+ },
+ )
+ steps: list[PlannedStep] = []
+ for clause in parse_result.matched_clauses:
+ if clause.selected_intent_id is None:
+ continue
+ steps.append(
+ PlannedStep(
+ intent_id=clause.selected_intent_id,
+ slots=clause.slots.copy(),
+ reason=clause.reason or f"heuristic parse for clause: {clause.clause_text}",
+ )
+ )
+ workflow_type = parse_result.workflow_type
+ if workflow_type == "conditional":
+ steps = _apply_conditional_hints(text, steps)
+ if len(steps) >= 2:
+ return PlanningResult(
+ accepted=True,
+ workflow_type=workflow_type,
+ steps=steps,
+ model_name="heuristic-planner",
+ backend="local-heuristic",
+ reason=parse_result.reason or "heuristic planner split the request into multiple executable clauses",
+ metadata={
+ "input_clauses": [item.clause_text for item in parse_result.clauses],
+ "clause_analysis": _serialize_clause_analysis(parse_result),
+ "multi_intent_detected": parse_result.detected,
+ "multi_intent_detector": _serialize_multi_intent_detector(parse_result.detector),
+ "normalized_steps": [
+ {
+ "intent_id": step.intent_id,
+ "slots": step.slots,
+ "depends_on": step.depends_on,
+ "condition": step.condition,
+ "requires_confirmation": step.requires_confirmation,
+ "reason": step.reason,
+ }
+ for step in steps
+ ],
+ },
+ )
+ return PlanningResult(
+ accepted=False,
+ workflow_type=workflow_type,
+ steps=steps,
+ model_name="heuristic-planner",
+ backend="local-heuristic",
+ reason="planning detected but local heuristic could not produce enough executable steps",
+ metadata={
+ "input_clauses": [item.clause_text for item in parse_result.clauses],
+ "clause_analysis": _serialize_clause_analysis(parse_result),
+ "multi_intent_detected": parse_result.detected,
+ "multi_intent_detector": _serialize_multi_intent_detector(parse_result.detector),
+ },
+ )
+
+class DashScopeWorkflowPlanner:
+ def __init__(
+ self,
+ base_url: str,
+ api_key: str,
+ model_name: str,
+ timeout_seconds: float = 6.0,
+ fallback: WorkflowPlanner | None = None,
+ joint_nlu: JointBertNLU | None = None,
+ ) -> None:
+ self._base_url = base_url.rstrip("/")
+ self._api_key = api_key
+ self._model_name = model_name
+ self._timeout_seconds = timeout_seconds
+ self._fallback = fallback or HeuristicWorkflowPlanner(joint_nlu=joint_nlu)
+ self._joint_nlu = joint_nlu
+
+ def plan(
+ self,
+ text: str,
+ intents: list[IntentDefinition],
+ context: dict[str, Any] | None = None,
+ ) -> PlanningResult:
+ if not self._base_url or not self._api_key or not self._model_name:
+ return self._fallback_result(
+ text,
+ intents,
+ context,
+ reason="planner is not configured",
+ error_message="set AGENT_PLANNER_BASE_URL / AGENT_PLANNER_API_KEY / AGENT_PLANNER_MODEL_NAME",
+ )
+
+ payload = {
+ "model": self._model_name,
+ "temperature": 0.1,
+ "enable_thinking": False,
+ "max_tokens": 320,
+ "messages": [
+ {
+ "role": "system",
+ "content": self._system_prompt(intents),
+ },
+ {
+ "role": "user",
+ "content": json.dumps(
+ {
+ "text": text,
+ "clauses": _split_clauses(text),
+ "context": context or {},
+ },
+ ensure_ascii=False,
+ ),
+ },
+ ],
+ }
+ req = request.Request(
+ self._endpoint(),
+ data=json.dumps(payload).encode("utf-8"),
+ headers={
+ "Content-Type": "application/json",
+ "Authorization": f"Bearer {self._api_key}",
+ },
+ method="POST",
+ )
+ try:
+ with request.urlopen(req, timeout=self._timeout_seconds) as response:
+ data = json.loads(response.read().decode("utf-8"))
+ except (error.URLError, TimeoutError, ValueError) as exc:
+ return self._fallback_result(
+ text,
+ intents,
+ context,
+ reason="cloud planner request failed",
+ error_message=str(exc),
+ )
+
+ content = self._extract_content(data)
+ if not content:
+ return self._fallback_result(
+ text,
+ intents,
+ context,
+ reason="cloud planner returned empty content",
+ raw_response=json.dumps(data, ensure_ascii=False),
+ )
+
+ try:
+ plan_data = self._parse_json_content(content)
+ except ValueError as exc:
+ return self._fallback_result(
+ text,
+ intents,
+ context,
+ reason="cloud planner returned invalid json",
+ error_message=str(exc),
+ raw_response=content,
+ )
+
+ steps, normalization_meta = self._normalize_steps(plan_data, text, intents)
+ accepted = bool(plan_data.get("accepted", bool(steps)))
+ workflow_type = str(plan_data.get("workflow_type", "single" if len(steps) <= 1 else "sequence"))
+ return PlanningResult(
+ accepted=accepted,
+ workflow_type=workflow_type,
+ steps=steps,
+ model_name=self._model_name,
+ backend="dashscope",
+ reason=str(plan_data.get("reason", "")).strip() or "cloud planner parsed successfully",
+ raw_response=content,
+ metadata={
+ "input_clauses": _split_clauses(text),
+ "parsed_plan": plan_data,
+ "normalized_steps": normalization_meta,
+ },
+ )
+
+ def _endpoint(self) -> str:
+ if self._base_url.endswith("/chat/completions"):
+ return self._base_url
+ return f"{self._base_url}/chat/completions"
+
+ def _system_prompt(self, intents: list[IntentDefinition]) -> str:
+ intent_catalog = [
+ {
+ "intent_id": intent.intent_id,
+ "required_slots": intent.required_slots,
+ "keywords": intent.keywords[:4],
+ }
+ for intent in intents
+ ]
+ return (
+ "Plan user requests into executable steps for a cabin/service assistant. "
+ "Return strict JSON only, no markdown. "
+ "Use only intent_id values from the catalog. "
+ "If the request is a single clear command, return one step. "
+ "If it contains multiple commands, return sequence steps. "
+ "Fill slots whenever the value is explicit in the user text. "
+ "Examples: order_id like A123456, destination like 公司/机场, temperature as integer, music may use song or genre such as 轻音乐. "
+ "Each step should only contain slots relevant to that intent. "
+ "For conditional requests, mark workflow_type as conditional and attach depends_on plus condition. "
+ "Use requires_confirmation=true for risky actions such as canceling an order. "
+ 'Schema: {"accepted":true,"workflow_type":"single|sequence|conditional","reason":"brief","steps":[{"intent_id":"...","slots":{},"depends_on":[1],"condition":{"field":"order_status","operator":"equals","value":"pending_shipment","description":"only cancel if not shipped"},"requires_confirmation":true,"reason":"brief"}]}. '
+ f"Catalog={json.dumps(intent_catalog, ensure_ascii=False, separators=(',', ':'))}"
+ )
+
+ def _extract_content(self, data: dict[str, Any]) -> str:
+ choices = data.get("choices")
+ if not isinstance(choices, list) or not choices:
+ return ""
+ message = choices[0].get("message", {})
+ content = message.get("content", "")
+ if isinstance(content, str):
+ return content.strip()
+ if isinstance(content, list):
+ text_parts = []
+ for item in content:
+ if isinstance(item, dict) and item.get("type") == "text":
+ text_parts.append(str(item.get("text", "")))
+ return "".join(text_parts).strip()
+ return ""
+
+ def _parse_json_content(self, content: str) -> dict[str, Any]:
+ cleaned = content.strip()
+ if cleaned.startswith("```"):
+ cleaned = cleaned.strip("`")
+ if cleaned.startswith("json"):
+ cleaned = cleaned[4:].strip()
+ start = cleaned.find("{")
+ end = cleaned.rfind("}")
+ if start < 0 or end < 0 or end <= start:
+ raise ValueError("planner content does not contain a JSON object")
+ return json.loads(cleaned[start : end + 1])
+
+ def _normalize_steps(
+ self,
+ plan_data: dict[str, Any],
+ text: str,
+ intents: list[IntentDefinition],
+ ) -> tuple[list[PlannedStep], list[dict[str, Any]]]:
+ intent_map = {intent.intent_id: intent for intent in intents}
+ clauses = _split_clauses(text)
+ raw_steps = plan_data.get("steps", [])
+ steps: list[PlannedStep] = []
+ normalization_meta: list[dict[str, Any]] = []
+ if not isinstance(raw_steps, list):
+ return steps, normalization_meta
+
+ for index, raw_step in enumerate(raw_steps):
+ if not isinstance(raw_step, dict):
+ continue
+ intent_id = str(raw_step.get("intent_id", "")).strip()
+ if not intent_id or intent_id not in intent_map:
+ continue
+ cloud_slots = raw_step.get("slots", {})
+ if not isinstance(cloud_slots, dict):
+ cloud_slots = {}
+ clause_text = clauses[index] if index < len(clauses) else text
+ clause_slots = _extract_slots_for_intent(clause_text, intent_id, joint_nlu=self._joint_nlu)
+ full_text_slots = _extract_slots_for_intent(text, intent_id, joint_nlu=self._joint_nlu)
+ normalized_slots = self._merge_slots(intent_id, cloud_slots, clause_slots, full_text_slots)
+ steps.append(
+ PlannedStep(
+ intent_id=intent_id,
+ slots=normalized_slots,
+ depends_on=self._normalize_depends_on(raw_step.get("depends_on")),
+ condition=self._normalize_condition(intent_id, raw_step.get("condition")),
+ requires_confirmation=bool(raw_step.get("requires_confirmation", False)),
+ reason=str(raw_step.get("reason", "")).strip() or None,
+ )
+ )
+ normalization_meta.append(
+ {
+ "intent_id": intent_id,
+ "clause_text": clause_text,
+ "cloud_slots": cloud_slots,
+ "clause_slots": clause_slots,
+ "full_text_slots": full_text_slots,
+ "normalized_slots": normalized_slots,
+ "depends_on": steps[-1].depends_on,
+ "condition": steps[-1].condition,
+ "requires_confirmation": steps[-1].requires_confirmation,
+ }
+ )
+ inferred_type = str(plan_data.get("workflow_type", ""))
+ if inferred_type == "conditional" or _has_conditional_pattern(text):
+ steps = _apply_conditional_hints(text, steps)
+ for index, step in enumerate(steps):
+ if index < len(normalization_meta):
+ normalization_meta[index]["depends_on"] = step.depends_on
+ normalization_meta[index]["condition"] = step.condition
+ normalization_meta[index]["requires_confirmation"] = step.requires_confirmation
+ return steps, normalization_meta
+
+ def _merge_slots(
+ self,
+ intent_id: str,
+ cloud_slots: dict[str, Any],
+ clause_slots: dict[str, Any],
+ full_text_slots: dict[str, Any],
+ ) -> dict[str, Any]:
+ merged: dict[str, Any] = {}
+ for source in (full_text_slots, clause_slots, cloud_slots):
+ for key, value in source.items():
+ if value in ("", None, []):
+ continue
+ merged[key] = value
+ allowed_slot_keys = {
+ "cs_query_order": {"order_id"},
+ "cs_query_logistics": {"order_id"},
+ "cs_cancel_order": {"order_id"},
+ "cabin_nav_to": {"destination"},
+ "cabin_set_ac": {"temperature"},
+ "cabin_play_music": {"song", "genre"},
+ }.get(intent_id)
+ if allowed_slot_keys is None:
+ return merged
+ return {key: value for key, value in merged.items() if key in allowed_slot_keys}
+
+ def _normalize_depends_on(self, raw_value: Any) -> list[int]:
+ if not isinstance(raw_value, list):
+ return []
+ result: list[int] = []
+ for item in raw_value:
+ try:
+ index = int(item)
+ except (TypeError, ValueError):
+ continue
+ if index > 0:
+ result.append(index)
+ return result
+
+ def _normalize_condition(self, intent_id: str, raw_value: Any) -> dict[str, Any]:
+ if not isinstance(raw_value, dict):
+ return {}
+ normalized: dict[str, Any] = {}
+ for key in ("field", "operator", "value", "description"):
+ if key in raw_value and raw_value[key] not in ("", None):
+ normalized[key] = raw_value[key]
+ source_step = raw_value.get("source_step")
+ try:
+ if source_step is not None and int(source_step) > 0:
+ normalized["source_step"] = int(source_step)
+ except (TypeError, ValueError):
+ pass
+ if (
+ intent_id == "cs_cancel_order"
+ and normalized.get("field") == "order_status"
+ and normalized.get("value") == "pending_shipment"
+ ):
+ normalized["description"] = "仅在订单未发货时取消"
+ return normalized
+
+ def _fallback_result(
+ self,
+ text: str,
+ intents: list[IntentDefinition],
+ context: dict[str, Any] | None,
+ reason: str,
+ error_message: str | None = None,
+ raw_response: str | None = None,
+ ) -> PlanningResult:
+ fallback = self._fallback.plan(text, intents, context)
+ fallback.reason = reason
+ fallback.error_message = error_message
+ fallback.raw_response = raw_response
+ fallback.backend = "dashscope-fallback"
+ return fallback
+
+
+def _extract_slots_for_intent(
+ text: str,
+ intent_id: str,
+ joint_nlu: JointBertNLU | None = None,
+) -> dict[str, Any]:
+ if joint_nlu is not None:
+ predicted = joint_nlu.extract_slots_by_intent_id(text, intent_id)
+ if predicted:
+ return predicted
+ slots: dict[str, Any] = {}
+ cleaned_text = text.strip()
+ if not cleaned_text:
+ return slots
+
+ order_id_match = re.search(r"\b[A-Za-z]\d{5,}\b", cleaned_text)
+ if order_id_match:
+ slots["order_id"] = order_id_match.group(0)
+
+ temperature_match = re.search(r"(\d{2})\s*度", cleaned_text)
+ if temperature_match:
+ slots["temperature"] = int(temperature_match.group(1))
+
+ if intent_id == "cabin_nav_to":
+ destination = _extract_destination(cleaned_text)
+ if destination:
+ slots["destination"] = destination
+
+ if intent_id == "cabin_play_music":
+ music_slots = _extract_music_slots(cleaned_text)
+ slots.update(music_slots)
+
+ return slots
+
+
+def _extract_destination(text: str) -> str | None:
+ for pattern in (
+ r"导航去(?P.+)",
+ r"导航到(?P.+)",
+ r"带我去(?P.+)",
+ r"去(?P.+)",
+ r"到(?P.+)",
+ ):
+ match = re.search(pattern, text)
+ if match:
+ destination = re.split(r"(?:然后|并且|同时|再|,|,|;|;)", match.group("destination"), maxsplit=1)[0]
+ destination = destination.strip(" ,。")
+ if destination:
+ return destination
+ return None
+
+
+def _extract_music_slots(text: str) -> dict[str, Any]:
+ slots: dict[str, Any] = {}
+ genre_keywords = ("轻音乐", "摇滚", "古典", "民谣", "爵士", "流行", "儿歌")
+ for genre in genre_keywords:
+ if genre in text:
+ slots["genre"] = genre
+ break
+
+ for trigger in ("播放", "来点", "放点", "听", "来首", "来一首"):
+ if trigger in text:
+ raw_target = text.split(trigger, maxsplit=1)[-1]
+ raw_target = re.split(r"(?:然后|并且|同时|再|,|,|;|;)", raw_target, maxsplit=1)[0].strip(" ,。")
+ matched_genre = next((genre for genre in genre_keywords if genre in raw_target), None)
+ if matched_genre:
+ slots["genre"] = matched_genre
+ break
+ target = raw_target.strip(" 的一首首个歌曲音乐吧呀啊,。")
+ if target and target not in {"歌", "音乐"} and len(target) > 1:
+ slots["song"] = target
+ break
+
+ if "song" in slots and slots["song"] in genre_keywords:
+ slots["genre"] = slots.pop("song")
+ return slots
+
+
+def _analyze_multi_intent(
+ text: str,
+ intents: list[IntentDefinition],
+ clause_classifier: IntentClassifier | None = None,
+ multi_intent_detector: MultiIntentDetector | None = None,
+ joint_nlu: JointBertNLU | None = None,
+ classifier_weight: float = 1.6,
+ model_only_threshold: float = 0.62,
+) -> MultiIntentParseResult:
+ detector_result = multi_intent_detector.detect(text, intents) if multi_intent_detector is not None else None
+ detector_prior = _build_detector_prior(detector_result)
+ clauses = _split_clauses(text)
+ parsed_clauses: list[ClauseParseResult] = []
+ for clause in clauses:
+ parsed_clauses.extend(
+ _parse_clause_candidates(
+ clause,
+ intents,
+ full_text=text,
+ clause_classifier=clause_classifier,
+ detector_prior=detector_prior,
+ joint_nlu=joint_nlu,
+ classifier_weight=classifier_weight,
+ model_only_threshold=model_only_threshold,
+ )
+ )
+ matched_count = sum(1 for item in parsed_clauses if item.selected_intent_id is not None)
+ has_multi_connector = len(clauses) >= 2 or _has_complex_pattern(text)
+ workflow_type = "conditional" if _has_conditional_pattern(text) else "sequence"
+ detected = matched_count >= 2 and has_multi_connector
+ if matched_count < 2:
+ workflow_type = "single"
+ reason = (
+ f"detected {matched_count} executable clauses from multi-intent utterance"
+ if detected
+ else "did not detect multiple executable clauses"
+ )
+ return MultiIntentParseResult(
+ clauses=parsed_clauses,
+ workflow_type=workflow_type,
+ detected=detected,
+ reason=reason,
+ detector=detector_result,
+ )
+
+
+def _parse_clause_candidates(
+ clause: str,
+ intents: list[IntentDefinition],
+ full_text: str | None = None,
+ clause_classifier: IntentClassifier | None = None,
+ detector_prior: dict[str, float] | None = None,
+ joint_nlu: JointBertNLU | None = None,
+ classifier_weight: float = 1.6,
+ model_only_threshold: float = 0.62,
+) -> list[ClauseParseResult]:
+ cleaned_clause = clause.strip()
+ if not cleaned_clause:
+ return [ClauseParseResult(clause_text=clause)]
+ scored: list[tuple[IntentDefinition, float, list[str], dict[str, Any]]] = []
+ for intent in intents:
+ score, reasons, signal_meta = _score_intent_for_clause(cleaned_clause, intent, full_text=full_text)
+ if score > 0:
+ scored.append((intent, score, reasons, signal_meta))
+ scored = _fuse_clause_scores(
+ clause=cleaned_clause,
+ intents=intents,
+ heuristic_scored=scored,
+ classifier_result=_predict_clause_with_classifier(cleaned_clause, intents, clause_classifier),
+ detector_prior=detector_prior or {},
+ classifier_weight=classifier_weight,
+ model_only_threshold=model_only_threshold,
+ )
+ candidates = [
+ {
+ "intent_id": intent.intent_id,
+ "score": round(score, 4),
+ "reason": "; ".join(reasons[:3]) if reasons else "heuristic clause score",
+ "heuristic_score": round(float(signal_meta.get("heuristic_score", score)), 4),
+ "model_score": round(float(signal_meta.get("model_score", 0.0)), 4),
+ }
+ for intent, score, reasons, signal_meta in scored[:5]
+ ]
+ if not scored or scored[0][1] < 1.1:
+ return [
+ ClauseParseResult(
+ clause_text=cleaned_clause,
+ candidates=candidates,
+ reason="no clause candidate scored above multi-intent threshold",
+ )
+ ]
+
+ parallel_candidates = _collect_parallel_clause_candidates(cleaned_clause, scored)
+ if len(parallel_candidates) >= 2:
+ return [
+ ClauseParseResult(
+ clause_text=cleaned_clause,
+ selected_intent_id=intent.intent_id,
+ score=score,
+ slots=_extract_slots_for_intent(cleaned_clause, intent.intent_id, joint_nlu=joint_nlu),
+ reason="; ".join(reasons[:4]) if reasons else "heuristic clause match",
+ candidates=candidates,
+ )
+ for intent, score, reasons, _signal_meta in parallel_candidates
+ ]
+
+ intent, score, reasons, _signal_meta = scored[0]
+ return [
+ ClauseParseResult(
+ clause_text=cleaned_clause,
+ selected_intent_id=intent.intent_id,
+ score=score,
+ slots=_extract_slots_for_intent(cleaned_clause, intent.intent_id, joint_nlu=joint_nlu),
+ reason="; ".join(reasons[:4]) if reasons else "heuristic clause match",
+ candidates=candidates,
+ )
+ ]
+
+
+def _score_intent_for_clause(
+ clause: str,
+ intent: IntentDefinition,
+ full_text: str | None = None,
+) -> tuple[float, list[str], dict[str, Any]]:
+ score = 0.0
+ reasons: list[str] = []
+ signal_meta = _collect_intent_signal_meta(clause, intent, full_text=full_text)
+ for keyword in intent.keywords:
+ if keyword and keyword in clause:
+ score += 2.0
+ reasons.append(f"keyword:{keyword}")
+ for example in intent.examples:
+ if example and example in clause:
+ score += 1.2
+ reasons.append(f"example:{example}")
+ action_hits = signal_meta["action_hits"]
+ object_hits = signal_meta["object_hits"]
+ qualifier_hits = signal_meta["qualifier_hits"]
+ if action_hits:
+ score += 0.8
+ reasons.append(f"action:{action_hits[0]}")
+ if object_hits:
+ score += 0.8
+ reasons.append(f"object:{object_hits[0]}")
+ if action_hits and object_hits:
+ score += 0.9
+ reasons.append("action_object_pair")
+ if qualifier_hits:
+ score += 0.5
+ reasons.append(f"qualifier:{qualifier_hits[0]}")
+ shared_context_hits = signal_meta["shared_context_hits"]
+ if shared_context_hits and (action_hits or object_hits):
+ score += 0.45
+ reasons.append(f"context:{shared_context_hits[0]}")
+ if intent.intent_id == "cabin_set_ac" and re.search(r"\d{2}\s*度", clause):
+ score += 1.1
+ reasons.append("explicit_temperature")
+ signal_meta["explicit_slot"] = True
+ if intent.intent_id in {"cs_query_order", "cs_query_logistics", "cs_cancel_order"} and re.search(r"\b[A-Za-z]\d{5,}\b", clause):
+ score += 0.7
+ reasons.append("explicit_order_id")
+ signal_meta["explicit_slot"] = True
+ return score, reasons, signal_meta
+
+
+def _collect_intent_signal_meta(
+ clause: str,
+ intent: IntentDefinition,
+ full_text: str | None = None,
+) -> dict[str, Any]:
+ hint_config = _INTENT_HINTS.get(intent.intent_id, {})
+ action_hits = [token for token in hint_config.get("actions", ()) if token in clause]
+ object_hits = [token for token in hint_config.get("objects", ()) if token in clause]
+ qualifier_hits = [token for token in hint_config.get("qualifiers", ()) if token in clause]
+ shared_context_hits: list[str] = []
+ if full_text and full_text != clause:
+ shared_context_hits = [
+ token
+ for token in hint_config.get("shared_context", ())
+ if token in full_text and token not in clause
+ ]
+ return {
+ "action_hits": action_hits,
+ "object_hits": object_hits,
+ "qualifier_hits": qualifier_hits,
+ "shared_context_hits": shared_context_hits,
+ "explicit_slot": False,
+ "family": str(hint_config.get("family") or intent.intent_id),
+ }
+
+
+def _predict_clause_with_classifier(
+ clause: str,
+ intents: list[IntentDefinition],
+ clause_classifier: IntentClassifier | None,
+) -> ClassificationResult | None:
+ if clause_classifier is None:
+ return None
+ try:
+ return clause_classifier.predict(clause, intents)
+ except Exception:
+ return None
+
+
+def _fuse_clause_scores(
+ clause: str,
+ intents: list[IntentDefinition],
+ heuristic_scored: list[tuple[IntentDefinition, float, list[str], dict[str, Any]]],
+ classifier_result: ClassificationResult | None,
+ detector_prior: dict[str, float],
+ classifier_weight: float,
+ model_only_threshold: float,
+) -> list[tuple[IntentDefinition, float, list[str], dict[str, Any]]]:
+ intent_map = {intent.intent_id: intent for intent in intents}
+ classifier_candidates = _extract_classifier_candidates(classifier_result, intent_map)
+ merged: dict[str, dict[str, Any]] = {}
+ for intent, score, reasons, signal_meta in heuristic_scored:
+ merged[intent.intent_id] = {
+ "intent": intent,
+ "heuristic_score": score,
+ "model_score": 0.0,
+ "reasons": list(reasons),
+ "signal_meta": dict(signal_meta),
+ }
+
+ for item in classifier_candidates:
+ intent = item["intent"]
+ if intent is None:
+ continue
+ bucket = merged.setdefault(
+ intent.intent_id,
+ {
+ "intent": intent,
+ "heuristic_score": 0.0,
+ "model_score": 0.0,
+ "reasons": [],
+ "signal_meta": _collect_intent_signal_meta(clause, intent),
+ },
+ )
+ bucket["model_score"] = max(bucket["model_score"], item["score"])
+ bucket["reasons"].append(f"bert:{item['score']:.3f}")
+
+ fused: list[tuple[IntentDefinition, float, list[str], dict[str, Any]]] = []
+ for item in merged.values():
+ heuristic_score = float(item["heuristic_score"])
+ model_score = float(item["model_score"])
+ detector_score = float(detector_prior.get(item["intent"].intent_id, 0.0))
+ if heuristic_score <= 0 and not _allow_model_bootstrap(
+ clause,
+ model_score,
+ classifier_candidates,
+ model_only_threshold,
+ ):
+ continue
+ fused_score = heuristic_score + model_score * classifier_weight
+ if detector_score > 0:
+ fused_score += detector_score * 0.55
+ item["reasons"].append(f"multi:{detector_score:.3f}")
+ if heuristic_score > 0 and model_score > 0:
+ fused_score += 0.25
+ item["reasons"].append("heuristic_bert_agree")
+ signal_meta = dict(item["signal_meta"])
+ signal_meta["heuristic_score"] = heuristic_score
+ signal_meta["model_score"] = model_score
+ signal_meta["detector_score"] = detector_score
+ if heuristic_score <= 0 and model_score >= model_only_threshold:
+ item["reasons"].append("bert_bootstrap")
+ fused.append((item["intent"], fused_score, item["reasons"], signal_meta))
+ fused.sort(key=lambda row: row[1], reverse=True)
+ return fused
+
+
+def _build_detector_prior(detector_result: MultiIntentDetectionResult | None) -> dict[str, float]:
+ if detector_result is None:
+ return {}
+ prior: dict[str, float] = {}
+ for candidate in detector_result.candidates:
+ if candidate.score <= 0:
+ continue
+ prior[candidate.intent_id] = candidate.score
+ return prior
+
+
+def _extract_classifier_candidates(
+ classifier_result: ClassificationResult | None,
+ intent_map: dict[str, IntentDefinition],
+) -> list[dict[str, Any]]:
+ if classifier_result is None:
+ return []
+ normalized: list[dict[str, Any]] = []
+ for item in classifier_result.raw_candidates or []:
+ if not isinstance(item, dict):
+ continue
+ intent_id = str(item.get("intent_id") or "")
+ intent = intent_map.get(intent_id)
+ if intent is None:
+ continue
+ normalized.append(
+ {
+ "intent": intent,
+ "intent_id": intent_id,
+ "score": float(item.get("score", 0.0)),
+ "label": str(item.get("label") or intent_id),
+ }
+ )
+ if normalized:
+ return normalized
+ if classifier_result.candidates:
+ return [
+ {
+ "intent": intent,
+ "intent_id": intent.intent_id,
+ "score": float(score),
+ "label": intent.intent_id,
+ }
+ for intent, score in classifier_result.candidates
+ ]
+ return []
+
+
+def _allow_model_bootstrap(
+ clause: str,
+ model_score: float,
+ classifier_candidates: list[dict[str, Any]],
+ model_only_threshold: float,
+) -> bool:
+ if model_score < model_only_threshold:
+ return False
+ compact_clause = re.sub(r"\s+", "", clause)
+ if len(compact_clause) < 4 and not re.search(r"\d{2}\s*度|\b[A-Za-z]\d{5,}\b", clause):
+ return False
+ runner_up_score = 0.0
+ if len(classifier_candidates) >= 2:
+ runner_up_score = float(classifier_candidates[1].get("score", 0.0))
+ return model_score - runner_up_score >= 0.18
+
+
+def _collect_parallel_clause_candidates(
+ clause: str,
+ scored: list[tuple[IntentDefinition, float, list[str], dict[str, Any]]],
+) -> list[tuple[IntentDefinition, float, list[str], dict[str, Any]]]:
+ if not _looks_like_parallel_clause(clause):
+ return []
+ selected: list[tuple[IntentDefinition, float, list[str], dict[str, Any]]] = []
+ used_families: set[str] = set()
+ strong_candidates = [item for item in scored if item[1] >= 1.35]
+ for intent, score, reasons, signal_meta in strong_candidates:
+ family = str(signal_meta.get("family") or intent.intent_id)
+ if family in used_families:
+ continue
+ has_strong_anchor = bool(signal_meta["object_hits"] or signal_meta["explicit_slot"] or any(reason.startswith("keyword:") for reason in reasons))
+ if not has_strong_anchor:
+ continue
+ selected.append((intent, score, reasons, signal_meta))
+ used_families.add(family)
+ if len(selected) >= 4:
+ break
+ if len(selected) < 2:
+ return []
+ selected.sort(key=lambda item: (_signal_position(clause, item[3]), -item[1]))
+ return selected
+
+
+def _signal_position(clause: str, signal_meta: dict[str, Any]) -> int:
+ candidates = []
+ for token in list(signal_meta.get("object_hits") or []) + list(signal_meta.get("action_hits") or []):
+ if not token:
+ continue
+ position = clause.find(token)
+ if position >= 0:
+ candidates.append(position)
+ if not candidates:
+ return len(clause) + 1
+ return min(candidates)
+
+
+def _split_clauses(text: str) -> list[str]:
+ clauses = re_split(text)
+ return [item for item in clauses if item]
+
+
+def _has_complex_pattern(text: str) -> bool:
+ patterns = ("然后", "再", "并且", "并", "同时", "如果", "若", "先", "后", "顺便", "接着", "以及", "和")
+ return any(token in text for token in patterns)
+
+
+def _has_conditional_pattern(text: str) -> bool:
+ return any(token in text for token in ("如果", "若", "还没", "未发货", "没发货"))
+
+
+def _apply_conditional_hints(text: str, steps: list[PlannedStep]) -> list[PlannedStep]:
+ if len(steps) < 2:
+ return steps
+ has_unshipped_condition = any(token in text for token in ("还没发货", "未发货", "没发货"))
+ query_index = next((index for index, step in enumerate(steps) if step.intent_id == "cs_query_order"), None)
+ cancel_index = next((index for index, step in enumerate(steps) if step.intent_id == "cs_cancel_order"), None)
+ if has_unshipped_condition and query_index is not None and cancel_index is not None and cancel_index > query_index:
+ cancel_step = steps[cancel_index]
+ if not cancel_step.depends_on:
+ cancel_step.depends_on = [query_index + 1]
+ if not cancel_step.condition:
+ cancel_step.condition = {
+ "source_step": query_index + 1,
+ "field": "order_status",
+ "operator": "equals",
+ "value": "pending_shipment",
+ "description": "仅在订单未发货时取消",
+ }
+ cancel_step.requires_confirmation = True
+ return steps
+
+
+def re_split(text: str) -> list[str]:
+ chunks = re.split(r"(?:然后|并且|同时|再|顺便|接着|并|,|,|;|;)", text)
+ return [chunk.strip() for chunk in chunks if chunk.strip()]
+
+
+def _looks_like_parallel_clause(text: str) -> bool:
+ return any(token in text for token in ("和", "以及", "并", "同时", "还有"))
+
+
+def _serialize_clause_analysis(parse_result: MultiIntentParseResult) -> list[dict[str, Any]]:
+ return [
+ {
+ "clause_text": clause.clause_text,
+ "selected_intent_id": clause.selected_intent_id,
+ "score": round(clause.score, 4),
+ "slots": clause.slots,
+ "reason": clause.reason,
+ "candidates": clause.candidates,
+ }
+ for clause in parse_result.clauses
+ ]
+
+
+def _serialize_multi_intent_detector(
+ detector_result: MultiIntentDetectionResult | None,
+) -> dict[str, Any] | None:
+ if detector_result is None:
+ return None
+ return {
+ "detected": detector_result.detected,
+ "reason": detector_result.reason,
+ "backend_name": detector_result.backend_name,
+ "error_message": detector_result.error_message,
+ "candidates": [
+ {
+ "intent_id": candidate.intent_id,
+ "score": round(candidate.score, 4),
+ "label": candidate.label,
+ }
+ for candidate in detector_result.candidates
+ ],
+ "raw_scores": [
+ {
+ "intent_id": str(item.get("intent_id") or ""),
+ "label": str(item.get("label") or ""),
+ "score": round(float(item.get("score", 0.0)), 4),
+ }
+ for item in detector_result.raw_scores[:8]
+ ],
+ }
+
+
+_INTENT_HINTS: dict[str, dict[str, Any]] = {
+ "cabin_ac_on": {
+ "family": "ac_power",
+ "actions": ("打开", "开启", "启动", "开"),
+ "objects": ("空调", "ac", "冷气", "冷风"),
+ },
+ "cabin_ac_off": {
+ "family": "ac_power",
+ "actions": ("关闭", "关掉", "关", "停掉"),
+ "objects": ("空调", "ac", "冷气", "冷风"),
+ },
+ "cabin_set_ac": {
+ "family": "ac_temperature",
+ "actions": ("调到", "设到", "设成", "调低", "调高", "升高", "降低"),
+ "objects": ("空调", "温度", "度", "冷气"),
+ "qualifiers": ("冷一点", "热一点"),
+ },
+ "cabin_fan_up": {
+ "family": "fan_speed",
+ "actions": ("调大", "调高", "加大"),
+ "objects": ("风量", "风"),
+ },
+ "cabin_fan_down": {
+ "family": "fan_speed",
+ "actions": ("调小", "调低", "减小"),
+ "objects": ("风量", "风"),
+ },
+ "cabin_defog_front_on": {
+ "family": "defog_front",
+ "actions": ("打开", "开启", "开", "除", "除雾"),
+ "objects": ("前挡", "前挡风", "前窗", "前玻璃"),
+ },
+ "cabin_defog_rear_on": {
+ "family": "defog_rear",
+ "actions": ("打开", "开启", "开", "除", "除雾"),
+ "objects": ("后挡", "后挡风", "后窗", "后玻璃"),
+ },
+ "cabin_window_open": {
+ "family": "window",
+ "actions": ("打开", "开", "升起来"),
+ "objects": ("车窗", "窗户", "窗"),
+ },
+ "cabin_window_close": {
+ "family": "window",
+ "actions": ("关闭", "关上", "关掉", "降下来", "降下", "关"),
+ "objects": ("车窗", "窗户", "窗"),
+ },
+ "cabin_sunroof_open": {
+ "family": "sunroof",
+ "actions": ("打开", "开", "翘起", "翘起来"),
+ "objects": ("天窗",),
+ },
+ "cabin_sunroof_close": {
+ "family": "sunroof",
+ "actions": ("关闭", "关上", "合上", "关掉", "合起来"),
+ "objects": ("天窗",),
+ },
+ "cabin_lock_doors": {
+ "family": "door_lock",
+ "actions": ("锁上", "锁住", "上锁", "锁"),
+ "objects": ("车门", "门", "车锁"),
+ },
+ "cabin_unlock_doors": {
+ "family": "door_lock",
+ "actions": ("解锁", "开锁"),
+ "objects": ("车门", "门", "车锁"),
+ },
+ "cabin_nav_to": {
+ "family": "nav",
+ "actions": ("导航", "去", "到", "带我去"),
+ "objects": ("公司", "机场", "家", "目的地"),
+ },
+ "cabin_nav_cancel": {
+ "family": "nav",
+ "actions": ("取消", "结束", "停止", "退出", "关掉"),
+ "objects": ("导航", "路线"),
+ },
+ "cabin_play_music": {
+ "family": "music_playback",
+ "actions": ("播放", "来点", "放点", "听", "来首", "来一首"),
+ "objects": ("音乐", "歌", "轻音乐", "摇滚", "流行"),
+ },
+ "cabin_pause_music": {
+ "family": "music_playback",
+ "actions": ("暂停", "停掉", "停止"),
+ "objects": ("音乐", "歌", "播放"),
+ },
+ "cabin_next_track": {
+ "family": "track_switch",
+ "actions": ("下一首", "切到下一首", "切歌", "换一首"),
+ "objects": ("歌", "歌曲", "音乐"),
+ },
+ "cabin_previous_track": {
+ "family": "track_switch",
+ "actions": ("上一首", "切回上一首", "回到上一首"),
+ "objects": ("歌", "歌曲", "音乐"),
+ },
+ "cabin_volume_up": {
+ "family": "volume",
+ "actions": ("调大", "加大", "开大", "调高"),
+ "objects": ("音量", "声音", "媒体音量"),
+ },
+ "cabin_volume_down": {
+ "family": "volume",
+ "actions": ("调小", "压低", "关小", "调低"),
+ "objects": ("音量", "声音", "媒体音量"),
+ },
+ "cabin_volume_mute": {
+ "family": "volume",
+ "actions": ("静音", "关掉", "关闭"),
+ "objects": ("音量", "声音", "音响"),
+ },
+ "cabin_lights_on": {
+ "family": "lights",
+ "actions": ("打开", "开", "点亮"),
+ "objects": ("灯", "车灯", "大灯"),
+ },
+ "cabin_lights_off": {
+ "family": "lights",
+ "actions": ("关闭", "关掉", "关", "熄了"),
+ "objects": ("灯", "车灯", "大灯"),
+ },
+ "cabin_seat_heat_on": {
+ "family": "seat_heat",
+ "actions": ("打开", "开启", "开"),
+ "objects": ("座椅加热",),
+ },
+ "cabin_seat_heat_off": {
+ "family": "seat_heat",
+ "actions": ("关闭", "关掉", "关"),
+ "objects": ("座椅加热",),
+ },
+ "cabin_mirror_fold": {
+ "family": "mirror",
+ "actions": ("折叠", "收起"),
+ "objects": ("后视镜",),
+ },
+ "cabin_mirror_unfold": {
+ "family": "mirror",
+ "actions": ("展开", "打开"),
+ "objects": ("后视镜",),
+ },
+ "cabin_wiper_on": {
+ "family": "wiper",
+ "actions": ("打开", "启动", "开始"),
+ "objects": ("雨刷", "雨刮", "雨刮器"),
+ },
+ "cabin_wiper_off": {
+ "family": "wiper",
+ "actions": ("关闭", "停掉", "停止"),
+ "objects": ("雨刷", "雨刮", "雨刮器"),
+ },
+ "cs_query_order": {
+ "family": "order_query",
+ "actions": ("查", "查询", "看看"),
+ "objects": ("订单",),
+ "shared_context": ("订单",),
+ },
+ "cs_query_logistics": {
+ "family": "order_logistics",
+ "actions": ("查", "查询", "看看"),
+ "objects": ("物流", "快递"),
+ "shared_context": ("物流", "快递", "订单"),
+ },
+ "cs_cancel_order": {
+ "family": "order_cancel",
+ "actions": ("取消", "撤销", "撤单", "不要了"),
+ "objects": ("订单",),
+ "shared_context": ("订单",),
+ },
+}
diff --git a/intelligent_cabin/app/services/response_policy.py b/intelligent_cabin/app/services/response_policy.py
new file mode 100644
index 0000000..0312596
--- /dev/null
+++ b/intelligent_cabin/app/services/response_policy.py
@@ -0,0 +1,299 @@
+from __future__ import annotations
+
+import re
+from typing import Any
+
+from app.schemas.intent import IntentDefinition
+
+
+class ResponsePolicy:
+ _DEFAULT_INTENT_HINTS = {
+ "cabin_nav_to": "导航",
+ "cabin_nav_cancel": "结束导航",
+ "cabin_set_ac": "调空调",
+ "cabin_ac_on": "打开空调",
+ "cabin_ac_off": "关闭空调",
+ "cabin_fan_up": "调大风量",
+ "cabin_fan_down": "调小风量",
+ "cabin_defog_front_on": "打开前挡除雾",
+ "cabin_defog_rear_on": "打开后挡除雾",
+ "cabin_window_open": "打开车窗",
+ "cabin_window_close": "关闭车窗",
+ "cabin_sunroof_open": "打开天窗",
+ "cabin_sunroof_close": "关闭天窗",
+ "cabin_trunk_open": "打开后备箱",
+ "cabin_trunk_close": "关闭后备箱",
+ "cabin_lock_doors": "锁车门",
+ "cabin_unlock_doors": "解锁车门",
+ "cabin_play_music": "播放音乐",
+ "cabin_pause_music": "暂停音乐",
+ "cabin_next_track": "下一首",
+ "cabin_previous_track": "上一首",
+ "cabin_volume_up": "调大音量",
+ "cabin_volume_down": "调小音量",
+ "cabin_volume_mute": "静音",
+ "cabin_lights_on": "打开车灯",
+ "cabin_lights_off": "关闭车灯",
+ "cabin_reading_light_on": "打开阅读灯",
+ "cabin_reading_light_off": "关闭阅读灯",
+ "cabin_seat_heat_on": "打开座椅加热",
+ "cabin_seat_heat_off": "关闭座椅加热",
+ "cabin_seat_vent_on": "打开座椅通风",
+ "cabin_seat_vent_off": "关闭座椅通风",
+ "cabin_mirror_fold": "折叠后视镜",
+ "cabin_mirror_unfold": "展开后视镜",
+ "cabin_wiper_on": "打开雨刷",
+ "cabin_wiper_off": "关闭雨刷",
+ "cabin_screen_brightness_up": "调亮屏幕",
+ "cabin_screen_brightness_down": "调暗屏幕",
+ "cabin_answer_call": "接听电话",
+ "cabin_hang_up_call": "挂断电话",
+ "cs_query_order": "查订单",
+ "cs_query_logistics": "查物流",
+ "cs_cancel_order": "取消订单",
+ "cs_transfer_human": "转人工",
+ }
+
+ def __init__(
+ self,
+ templates: dict[str, str] | None = None,
+ intent_hints: dict[str, str] | None = None,
+ ) -> None:
+ self._templates = templates or {}
+ self._intent_hints = {**self._DEFAULT_INTENT_HINTS, **(intent_hints or {})}
+
+ def ask_for_slot(self, intent: IntentDefinition, slot_name: str, default_template: str) -> str:
+ if slot_name == "order_id":
+ if intent.intent_id == "cs_cancel_order":
+ return self._template("ask_cancel_order_id", "请告诉我订单号。")
+ return self._template("ask_order_id", "请提供订单号。")
+ if slot_name == "destination":
+ return self._template("ask_destination", "请告诉我要去哪里。")
+ if slot_name == "temperature":
+ return self._template("ask_temperature", "请告诉我要设置多少度。")
+ if slot_name == "media_query":
+ return self._template("ask_media_query", "想听什么风格或者具体的歌名?")
+ return default_template.strip() or "请补充一个关键信息。"
+
+ def workflow_result(self, intent: IntentDefinition, plugin_result: dict[str, Any]) -> str:
+ if not plugin_result.get("success", True):
+ return self._template("workflow_failed", "这次没处理成功,请稍后再试。")
+ message = str(plugin_result.get("message") or "").strip()
+ if not message:
+ return self.ack(intent)
+ if len(message) > 42:
+ return message[:39].rstrip(",。;; ") + "..."
+ return message
+
+ def workflow_summary(self, messages: list[str]) -> str:
+ cleaned = [item.strip() for item in messages if item and item.strip()]
+ if not cleaned:
+ return self._template("workflow_summary_empty", "好的,已经处理完成。")
+ if len(cleaned) == 1:
+ return cleaned[0]
+ natural_clauses: list[str] = []
+ previous_subject: str | None = None
+ for index, item in enumerate(cleaned[:3]):
+ clause, subject = self._vehicle_style_clause(item, index=index, previous_subject=previous_subject)
+ natural_clauses.append(clause)
+ previous_subject = subject or previous_subject
+ summary = f"好,{','.join(natural_clauses)}。"
+ if len(cleaned) > 3:
+ summary = summary.rstrip("。") + ",其余步骤也已完成。"
+ if len(summary) > 70:
+ return summary[:67].rstrip(",。;; ") + "..."
+ return summary
+
+ def ask_for_confirmation(self, intent: IntentDefinition, detail: str | None = None) -> str:
+ if intent.intent_id == "cs_cancel_order":
+ if detail:
+ return f"即将取消订单,{detail}。请回复“确认”或“取消”。"
+ return "即将取消订单。请回复“确认”或“取消”。"
+ if detail:
+ return f"{detail}。请回复“确认”或“取消”。"
+ return "请确认是否继续执行。回复“确认”或“取消”。"
+
+ def confirm_retry(self) -> str:
+ return self._template("confirm_retry", "我需要一个明确确认。请回复“确认”继续,或回复“取消”终止。")
+
+ def confirm_cancelled(self) -> str:
+ return self._template("confirm_cancelled", "好的,已取消这一步。")
+
+ def step_skipped(self, intent: IntentDefinition, reason: str | None = None) -> str:
+ if intent.intent_id == "cs_cancel_order":
+ base = "订单取消步骤未执行。"
+ else:
+ base = "这一步已跳过。"
+ if reason:
+ return f"{base}{reason}"
+ return base
+
+ def ack(self, intent: IntentDefinition | None = None) -> str:
+ if intent is None:
+ return self._template("ack_default", "收到,马上处理。")
+ if intent.domain == "cabin":
+ return self._template("ack_cabin", "好的,马上处理。")
+ return self._template("ack_service", "收到,我来处理。")
+
+ def reject(self) -> str:
+ return self._template("reject", "这个我暂时做不了,但我可以帮你查询、控制或转人工。")
+
+ def short_social(self, social_kind: str) -> str:
+ if social_kind == "greeting":
+ return self._template("short_social_greeting", "你好,我在。")
+ if social_kind == "thanks":
+ return self._template("short_social_thanks", "不客气。")
+ if social_kind == "goodbye":
+ return self._template("short_social_goodbye", "好的,有需要再叫我。")
+ if social_kind == "capability":
+ return self._template(
+ "short_social_capability",
+ "我可以帮你查订单、查物流、取消订单、导航、调空调、播放音乐或转人工。",
+ )
+ return self._template("short_social_default", "我在。")
+
+ def open_social_fallback(self) -> str:
+ return self._template("open_social_fallback", "可以和你聊两句,你也可以继续告诉我想处理什么。")
+
+ def with_pending_hint(self, text: str, pending_hint: str | None = None) -> str:
+ base = text.strip() or self.open_social_fallback()
+ hint = (pending_hint or "").strip()
+ if not hint:
+ return base
+ return f"{base} {hint}"
+
+ def pending_task_hint(self, status: str, pending_slots: list[str], current_intent: str | None = None) -> str | None:
+ if status == "waiting_confirmation":
+ return self._template("pending_confirmation_hint", "当前这一步还在等你确认,回复“确认”或“取消”即可。")
+ if status == "waiting_slot" and pending_slots:
+ if pending_slots[0] == "order_id":
+ return self._template("pending_slot_order_id", "当前还缺订单号,你继续告诉我订单号就行。")
+ if pending_slots[0] == "temperature":
+ return self._template("pending_slot_temperature", "当前还缺温度,你继续告诉我要设置多少度就行。")
+ if pending_slots[0] == "destination":
+ return self._template("pending_slot_destination", "当前还缺目的地,你继续告诉我要去哪里就行。")
+ if pending_slots[0] == "media_query":
+ return self._template("pending_slot_media_query", "当前还缺歌名或风格,你直接说歌名、歌手或风格就行。")
+ return self._template("pending_slot_default", "当前还缺一个关键信息,你继续补充就行。")
+ if status == "running" and current_intent:
+ return self._template("pending_running", "当前任务还在继续,你也可以直接继续下一个指令。")
+ return None
+
+ def task_stopped(self) -> str:
+ return self._template("task_stopped", "好的,已停止当前任务。")
+
+ def clarify(self, candidate_intents: list[str]) -> str:
+ options = [
+ self._intent_hints.get(intent_id, intent_id)
+ for intent_id in candidate_intents
+ if intent_id
+ ]
+ deduped: list[str] = []
+ for item in options:
+ if item not in deduped:
+ deduped.append(item)
+ if not deduped:
+ return "我理解得还不够确定,你是想查询、控制,还是转人工?"
+ if len(deduped) == 1:
+ return f"请确认一下,你是想{deduped[0]}吗?"
+ if len(deduped) == 2:
+ return f"请确认一下,你是想{deduped[0]}还是{deduped[1]}?"
+ return f"请确认一下,你是想{deduped[0]}、{deduped[1]},还是{deduped[2]}?"
+
+ def fallback(self) -> str:
+ return self._template("fallback", "我还没完全听懂,你可以换个简短说法,或告诉我是查询、控制还是转人工。")
+
+ def _template(self, key: str, default: str) -> str:
+ value = str(self._templates.get(key, default)).strip()
+ return value or default
+
+ def _naturalize_workflow_message(self, text: str) -> str:
+ normalized = text.strip().rstrip("。;; ")
+ normalized = re.sub(r"^好的[,,\s]*", "", normalized)
+ normalized = re.sub(r"^收到[,,\s]*", "", normalized)
+ if normalized.startswith("已将"):
+ normalized = normalized[2:]
+ elif normalized.startswith("已经将"):
+ normalized = normalized[3:]
+ elif normalized.startswith("已经"):
+ normalized = normalized[2:]
+ elif normalized.startswith("已"):
+ normalized = normalized[1:]
+ normalized = normalized.strip(",, ")
+ if not normalized:
+ return "已经处理好了"
+ if normalized.endswith("了"):
+ return normalized
+ return f"{normalized}了"
+
+ def _vehicle_style_clause(
+ self,
+ text: str,
+ *,
+ index: int,
+ previous_subject: str | None = None,
+ ) -> tuple[str, str | None]:
+ normalized = self._naturalize_workflow_message(text)
+
+ match = re.match(r"^(打开|关闭)(.+)了$", normalized)
+ if match:
+ action, subject = match.groups()
+ subject = subject.strip()
+ if action == "打开":
+ if previous_subject and previous_subject == subject:
+ return "也打开了", subject
+ if index > 0:
+ return f"{subject}也打开了", subject
+ return f"{subject}已经打开了", subject
+ if previous_subject and previous_subject == subject:
+ return "也帮你关上了", subject
+ if index > 0:
+ return f"{subject}也帮你关上了", subject
+ return f"{subject}已经关上了", subject
+
+ match = re.match(r"^(锁定|解锁)(.+)了$", normalized)
+ if match:
+ action, subject = match.groups()
+ subject = subject.strip()
+ action_text = "锁好了" if action == "锁定" else "解锁了"
+ if previous_subject and previous_subject == subject:
+ return f"也{action_text}", subject
+ if index > 0:
+ return f"{subject}也{action_text}", subject
+ return f"{subject}已经{action_text}", subject
+
+ match = re.match(r"^(.+)调到\s*(.+)度了$", normalized)
+ if match:
+ subject, value = match.groups()
+ subject = subject.strip()
+ value = value.strip()
+ if previous_subject and previous_subject == subject:
+ return f"也调到 {value} 度了", subject
+ if index > 0:
+ return f"{subject}也调到 {value} 度了", subject
+ return f"{subject}调到 {value} 度了", subject
+
+ match = re.match(r"^(调大|调小)(.+)了$", normalized)
+ if match:
+ action, subject = match.groups()
+ subject = subject.strip()
+ if previous_subject and previous_subject == subject:
+ return f"也{action}了", subject
+ if index > 0:
+ return f"{subject}也{action}了", subject
+ return f"{subject}已经{action}了", subject
+
+ if normalized.startswith("正在播放 "):
+ target = normalized[len("正在播放 ") :].strip()
+ if index > 0:
+ return f"也开始播放 {target} 了", "播放"
+ return f"开始播放 {target} 了", "播放"
+
+ if normalized.startswith("订单 ") and normalized.endswith(" 已取消"):
+ order_text = normalized[:-4].strip()
+ return f"{order_text}已经取消了", "订单"
+
+ if normalized.startswith("订单 ") and "当前" in normalized:
+ return normalized, "订单"
+
+ return normalized, None
diff --git a/intelligent_cabin/app/services/rewrite_engine.py b/intelligent_cabin/app/services/rewrite_engine.py
new file mode 100644
index 0000000..2b2b569
--- /dev/null
+++ b/intelligent_cabin/app/services/rewrite_engine.py
@@ -0,0 +1,108 @@
+from __future__ import annotations
+
+import re
+from dataclasses import dataclass, field
+from typing import Any
+
+from app.schemas.configuration import ContextRewriteConfig, ParamContextDefinition
+from app.services.session_store import SessionState
+
+
+@dataclass
+class RewriteResult:
+ original_text: str
+ rewritten_text: str
+ applied: bool = False
+ reason: str | None = None
+ metadata: dict[str, Any] = field(default_factory=dict)
+
+
+class ContextRewriteEngine:
+ """
+ 将短句 follow-up(如"再快一点"、"电压高一点")改写为完整命令(如"速度设为 85 mm/min"),
+ 使其能复用本地快路径而不必每轮重做完整规划。
+
+ 改写规则完全由外部配置文件(context_rewrite.yml)驱动,不硬编码业务参数,
+ 适用于不同设备(线切割 / 激光切割 / 注塑机等)的部署切换。
+ """
+
+ def __init__(self, config: ContextRewriteConfig | None = None) -> None:
+ self._config = config or ContextRewriteConfig()
+ # 构建反向索引:intent_id → ParamContextDefinition
+ self._intent_index: dict[str, ParamContextDefinition] = {}
+ for ctx in self._config.param_contexts:
+ for intent_id in ctx.intent_ids:
+ self._intent_index[intent_id] = ctx
+
+ # ------------------------------------------------------------------ public
+
+ def rewrite(self, text: str, session: SessionState) -> RewriteResult:
+ normalized = text.strip()
+ if not normalized:
+ return RewriteResult(original_text=text, rewritten_text=text)
+
+ current_intent = session.current_intent
+ if current_intent and current_intent in self._intent_index:
+ ctx = self._intent_index[current_intent]
+ result = self._rewrite_param_adjustment(normalized, session, ctx)
+ if result.applied:
+ return result
+
+ return RewriteResult(original_text=text, rewritten_text=text)
+
+ # ----------------------------------------------------------------- private
+
+ def _rewrite_param_adjustment(
+ self,
+ text: str,
+ session: SessionState,
+ ctx: ParamContextDefinition,
+ ) -> RewriteResult:
+ direction: str | None = None
+ if any(phrase and phrase in text for phrase in ctx.up_phrases):
+ direction = "up"
+ elif any(phrase and phrase in text for phrase in ctx.down_phrases):
+ direction = "down"
+
+ if direction is None:
+ return RewriteResult(original_text=text, rewritten_text=text)
+
+ previous_value = self._last_slot_value(session, ctx.slot_name)
+ base_value = previous_value if previous_value is not None else ctx.default_value
+ delta = ctx.step if direction == "up" else -ctx.step
+
+ if isinstance(ctx.min_value, float) or isinstance(ctx.max_value, float) or isinstance(ctx.step, float):
+ next_value: int | float = max(float(ctx.min_value), min(float(ctx.max_value), float(base_value) + float(delta)))
+ else:
+ next_value = max(int(ctx.min_value), min(int(ctx.max_value), int(base_value) + int(delta)))
+
+ rewritten = ctx.rewrite_template.format(value=next_value)
+ return RewriteResult(
+ original_text=text,
+ rewritten_text=rewritten,
+ applied=True,
+ reason=f"normalize relative {ctx.slot_name} adjustment into an explicit target",
+ metadata={
+ "cache_hit": True,
+ "rewrite_type": "param_adjustment",
+ "slot_name": ctx.slot_name,
+ "direction": direction,
+ "previous_value": previous_value,
+ "base_value": base_value,
+ "next_value": next_value,
+ },
+ )
+
+ @staticmethod
+ def _last_slot_value(session: SessionState, slot_name: str) -> int | float | None:
+ raw = session.context_memory.get(f"last_{slot_name}", session.slots.get(slot_name))
+ if raw is None:
+ return None
+ if isinstance(raw, (int, float)):
+ return raw
+ if isinstance(raw, str):
+ try:
+ return int(raw) if raw.isdigit() else float(raw)
+ except ValueError:
+ pass
+ return None
diff --git a/intelligent_cabin/app/services/router.py b/intelligent_cabin/app/services/router.py
new file mode 100644
index 0000000..32eab01
--- /dev/null
+++ b/intelligent_cabin/app/services/router.py
@@ -0,0 +1,407 @@
+from __future__ import annotations
+
+import re
+from dataclasses import dataclass
+from time import perf_counter
+from typing import Any, Protocol
+
+from app.schemas.debug import IntentCandidate, MatcherStageDebug, RoutingDebug
+from app.schemas.intent import IntentDefinition
+from app.services.classifier import IntentClassifier
+from app.services.intent_registry import IntentRegistry
+from app.services.joint_nlu import JointBertNLU
+
+
+@dataclass
+class IntentMatchResult:
+ intent: IntentDefinition | None
+ stage_debug: MatcherStageDebug
+
+
+@dataclass
+class RouteMatchResult:
+ intent: IntentDefinition | None
+ debug: RoutingDebug
+
+
+class IntentMatcher(Protocol):
+ def match(self, text: str) -> IntentMatchResult:
+ ...
+
+
+class SlotExtractor(Protocol):
+ def extract(self, text: str, intent: IntentDefinition) -> dict[str, Any]:
+ ...
+
+
+class ClassifierIntentMatcher:
+ def __init__(self, registry: IntentRegistry, classifier: IntentClassifier) -> None:
+ self._registry = registry
+ self._classifier = classifier
+
+ def match(self, text: str) -> IntentMatchResult:
+ result = self._classifier.predict(text, self._registry.list())
+ ranked_classifier_scores = sorted(
+ [float(score) for _, score in (result.candidates or [])],
+ reverse=True,
+ )
+ classifier_top_margin = (
+ ranked_classifier_scores[0] - ranked_classifier_scores[1]
+ if len(ranked_classifier_scores) >= 2
+ else ranked_classifier_scores[0] if ranked_classifier_scores else 0.0
+ )
+ candidates = [
+ IntentCandidate(
+ intent_id=intent.intent_id,
+ score=score,
+ reason="classifier candidate",
+ model_name=result.backend_name or result.model_name,
+ raw_label=next(
+ (
+ item.get("label")
+ for item in (result.raw_candidates or [])
+ if item.get("intent_id") == intent.intent_id and float(item.get("score", 0.0)) == score
+ ),
+ intent.intent_id,
+ ),
+ )
+ for intent, score in (result.candidates or [])
+ ]
+ metadata: dict[str, Any] = {
+ "decision_model": result.model_name,
+ "threshold": getattr(self._classifier, "_threshold", None),
+ "raw_candidates": result.raw_candidates or [],
+ "top_margin": round(classifier_top_margin, 4),
+ }
+ if result.fallback_reason:
+ metadata["fallback_reason"] = result.fallback_reason
+ if result.intent is None:
+ return IntentMatchResult(
+ intent=None,
+ stage_debug=MatcherStageDebug(
+ stage="classifier",
+ accepted=False,
+ score=result.score,
+ reason=result.fallback_reason or "classifier below threshold or no intent selected",
+ model_name=result.model_name,
+ backend=result.backend_name or result.model_name,
+ fallback_used=result.used_fallback,
+ raw_label=result.raw_label,
+ error_message=result.error_message,
+ metadata=metadata,
+ candidates=candidates,
+ ),
+ )
+ return IntentMatchResult(
+ intent=result.intent,
+ stage_debug=MatcherStageDebug(
+ stage="classifier",
+ accepted=True,
+ selected_intent=result.intent.intent_id,
+ score=result.score,
+ reason=(
+ "bert classifier selected best candidate"
+ if not result.used_fallback
+ else f"fallback selected best candidate: {result.fallback_reason}"
+ ),
+ model_name=result.model_name,
+ backend=result.backend_name or result.model_name,
+ fallback_used=result.used_fallback,
+ raw_label=result.raw_label,
+ error_message=result.error_message,
+ metadata=metadata,
+ candidates=candidates,
+ ),
+ )
+
+
+class MultiStageIntentMatcher:
+ def __init__(
+ self,
+ registry: IntentRegistry,
+ matchers: list[IntentMatcher],
+ route_to_cloud_threshold: float = 0.75,
+ clarify_margin_threshold: float = 0.12,
+ classifier_execute_score_threshold: float = 0.55,
+ classifier_execute_margin_threshold: float = 0.18,
+ ) -> None:
+ self._registry = registry
+ self._matchers = matchers
+ self._route_to_cloud_threshold = route_to_cloud_threshold
+ self._clarify_margin_threshold = clarify_margin_threshold
+ self._classifier_execute_score_threshold = classifier_execute_score_threshold
+ self._classifier_execute_margin_threshold = classifier_execute_margin_threshold
+
+ def match(self, text: str) -> RouteMatchResult:
+ stage_traces: list[MatcherStageDebug] = []
+ match_started_at = perf_counter()
+ for matcher in self._matchers:
+ stage_started_at = perf_counter()
+ result = matcher.match(text)
+ result.stage_debug.elapsed_ms = round((perf_counter() - stage_started_at) * 1000, 3)
+ stage_traces.append(result.stage_debug)
+ fusion_started_at = perf_counter()
+ fusion_stage = self._build_fusion_stage(stage_traces)
+ fusion_stage.elapsed_ms = round((perf_counter() - fusion_started_at) * 1000, 3)
+ stage_traces.append(fusion_stage)
+ total_match_latency_ms = round((perf_counter() - match_started_at) * 1000, 3)
+ decision = str(fusion_stage.metadata.get("decision", "reject"))
+ confidence_grade = str(fusion_stage.metadata.get("grade", "low"))
+ unknown_detected = bool(fusion_stage.metadata.get("unknown_detected", False))
+ decision_reason = fusion_stage.reason
+ if decision == "execute" and fusion_stage.selected_intent is not None:
+ intent = self._registry.get(fusion_stage.selected_intent)
+ return RouteMatchResult(
+ intent=intent,
+ debug=RoutingDebug(
+ selected_intent=fusion_stage.selected_intent,
+ matched_stage=fusion_stage.stage,
+ decision=decision,
+ decision_reason=decision_reason,
+ confidence_grade=confidence_grade,
+ total_match_latency_ms=total_match_latency_ms,
+ unknown_detected=unknown_detected,
+ stages=stage_traces,
+ ),
+ )
+ return RouteMatchResult(
+ intent=None,
+ debug=RoutingDebug(
+ selected_intent=None,
+ matched_stage=fusion_stage.stage,
+ decision=decision,
+ decision_reason=decision_reason,
+ confidence_grade=confidence_grade,
+ total_match_latency_ms=total_match_latency_ms,
+ unknown_detected=unknown_detected,
+ stages=stage_traces,
+ ),
+ )
+
+ def _build_fusion_stage(self, stage_traces: list[MatcherStageDebug]) -> MatcherStageDebug:
+ classifier_stage = next((stage for stage in stage_traces if stage.stage == "classifier"), None)
+ if classifier_stage is None:
+ return MatcherStageDebug(
+ stage="fusion",
+ accepted=False,
+ reason="classifier stage is missing",
+ model_name="fusion-router",
+ backend="bert-first-fusion",
+ metadata={
+ "grade": "low",
+ "decision": "reject",
+ "unknown_detected": True,
+ "ranked_intents": [],
+ },
+ candidates=[],
+ )
+ ranked_candidates = list(classifier_stage.candidates or [])
+ if not ranked_candidates and classifier_stage.selected_intent is not None:
+ ranked_candidates = [
+ IntentCandidate(
+ intent_id=classifier_stage.selected_intent,
+ score=classifier_stage.score,
+ reason="classifier selected intent",
+ model_name=classifier_stage.model_name,
+ )
+ ]
+ if not ranked_candidates:
+ return MatcherStageDebug(
+ stage="fusion",
+ accepted=False,
+ reason="classifier did not produce a usable candidate",
+ model_name="fusion-router",
+ backend="bert-first-fusion",
+ metadata={
+ "grade": "low",
+ "decision": "reject",
+ "unknown_detected": True,
+ "ranked_intents": [],
+ },
+ candidates=[],
+ )
+ selected_candidate = ranked_candidates[0]
+ selected_intent = selected_candidate.intent_id
+ top_score = float(selected_candidate.score)
+ second_score = float(ranked_candidates[1].score) if len(ranked_candidates) > 1 else 0.0
+ top_margin = top_score - second_score
+ grade = self._fusion_grade(top_score)
+ classifier_backend = str(classifier_stage.backend or classifier_stage.model_name or "")
+ classifier_signal = top_score
+ classifier_margin = top_margin
+ bert_classifier_confident = (
+ "bert" in classifier_backend
+ and classifier_signal >= self._classifier_execute_score_threshold
+ and classifier_margin >= self._classifier_execute_margin_threshold
+ )
+ ambiguous = (
+ classifier_signal >= self._route_to_cloud_threshold
+ and classifier_signal < self._classifier_execute_score_threshold
+ and top_margin < self._clarify_margin_threshold
+ and len(ranked_candidates) > 1
+ )
+ accepted = bert_classifier_confident and not ambiguous
+ possible_known_intent = classifier_signal >= self._route_to_cloud_threshold or classifier_signal >= 0.24
+ unknown_detected = not accepted and not possible_known_intent
+ if accepted:
+ decision = "execute"
+ reason = f"bert classifier is confident enough to execute (grade={grade})"
+ elif ambiguous:
+ decision = "clarify"
+ reason = "bert top candidates are too close and require a short clarification"
+ elif possible_known_intent:
+ decision = "route_to_cloud"
+ reason = "bert signal is not stable enough, routing to cloud planner"
+ else:
+ decision = "reject"
+ reason = "bert signal is below local capability threshold"
+ metadata = {
+ "grade": grade,
+ "classifier_signal": round(classifier_signal, 4),
+ "classifier_margin": round(classifier_margin, 4),
+ "classifier_backend": classifier_backend or None,
+ "bert_classifier_confident": bert_classifier_confident,
+ "top_margin": round(top_margin, 4),
+ "route_to_cloud_threshold": self._route_to_cloud_threshold,
+ "clarify_margin_threshold": self._clarify_margin_threshold,
+ "classifier_execute_score_threshold": self._classifier_execute_score_threshold,
+ "classifier_execute_margin_threshold": self._classifier_execute_margin_threshold,
+ "decision": decision,
+ "unknown_detected": unknown_detected,
+ "ranked_intents": [
+ {"intent_id": item.intent_id, "score": round(float(item.score), 4)}
+ for item in ranked_candidates[:5]
+ ],
+ }
+ return MatcherStageDebug(
+ stage="fusion",
+ accepted=accepted or ambiguous,
+ selected_intent=selected_intent if decision in {"execute", "clarify", "route_to_cloud"} else None,
+ score=top_score,
+ reason=reason,
+ model_name="fusion-router",
+ backend="bert-first-fusion",
+ metadata=metadata,
+ candidates=ranked_candidates[:5],
+ )
+
+ def _fusion_grade(self, score: float) -> str:
+ if score >= self._classifier_execute_score_threshold:
+ return "high"
+ if score >= self._route_to_cloud_threshold:
+ return "medium"
+ return "low"
+
+
+class HeuristicSlotExtractor:
+ def extract(self, text: str, intent: IntentDefinition) -> dict[str, Any]:
+ slots: dict[str, Any] = {}
+ order_id_match = re.search(r"\b[A-Za-z]\d{5,}\b", text)
+ if order_id_match:
+ slots["order_id"] = order_id_match.group(0)
+
+ temperature_match = re.search(r"(\d{2})\s*度", text)
+ if temperature_match:
+ slots["temperature"] = int(temperature_match.group(1))
+
+ if intent.intent_id == "cabin_nav_to":
+ destination = self._extract_destination(text)
+ if destination:
+ slots["destination"] = destination
+
+ if intent.intent_id == "cabin_play_music":
+ if "播放" in text:
+ music_target = text.split("播放", maxsplit=1)[-1].strip(" ,。")
+ if music_target:
+ slots["song"] = music_target
+ elif "音乐" in text:
+ slots["genre"] = "轻音乐"
+
+ return slots
+
+ def _extract_destination(self, text: str) -> str | None:
+ patterns = [
+ r"导航去(?P.+)",
+ r"导航到(?P.+)",
+ r"去(?P.+)",
+ ]
+ for pattern in patterns:
+ match = re.search(pattern, text)
+ if match:
+ destination = match.group("destination").strip(" ,。")
+ if destination:
+ return destination
+ return None
+
+
+class JointBertSlotExtractor:
+ def __init__(self, nlu: JointBertNLU) -> None:
+ self._nlu = nlu
+
+ def extract(self, text: str, intent: IntentDefinition) -> dict[str, Any]:
+ return self._nlu.extract_slots(text, intent)
+
+
+class Router(Protocol):
+ def route(self, text: str) -> RouteMatchResult:
+ ...
+
+ def match_intent(self, text: str) -> IntentDefinition | None:
+ ...
+
+ def extract_slots(self, text: str, intent: IntentDefinition) -> dict[str, Any]:
+ ...
+
+
+class IntentRouter:
+ def __init__(self, matcher: IntentMatcher, slot_extractor: SlotExtractor) -> None:
+ self._matcher = matcher
+ self._slot_extractor = slot_extractor
+
+ def route(self, text: str) -> RouteMatchResult:
+ return self._matcher.match(text)
+
+ def match_intent(self, text: str) -> IntentDefinition | None:
+ return self.route(text).intent
+
+ def extract_slots(self, text: str, intent: IntentDefinition) -> dict[str, Any]:
+ return self._slot_extractor.extract(text, intent)
+
+
+def build_matcher_pipeline(
+ registry: IntentRegistry,
+ stages: list[str],
+ classifier: IntentClassifier | None = None,
+ route_to_cloud_threshold: float = 0.75,
+ clarify_margin_threshold: float = 0.12,
+ classifier_execute_score_threshold: float = 0.55,
+ classifier_execute_margin_threshold: float = 0.18,
+) -> MultiStageIntentMatcher:
+ normalized_stages = [stage.strip() for stage in stages if stage.strip()]
+ if not normalized_stages:
+ normalized_stages = ["classifier"]
+ if normalized_stages != ["classifier"]:
+ raise ValueError("Only classifier matcher pipeline is supported in bert-first mode")
+ matcher = ClassifierIntentMatcher(registry, classifier) if classifier is not None else NullIntentMatcher()
+ return MultiStageIntentMatcher(
+ registry,
+ [matcher],
+ route_to_cloud_threshold=route_to_cloud_threshold,
+ clarify_margin_threshold=clarify_margin_threshold,
+ classifier_execute_score_threshold=classifier_execute_score_threshold,
+ classifier_execute_margin_threshold=classifier_execute_margin_threshold,
+ )
+
+
+class NullIntentMatcher:
+ def match(self, text: str) -> IntentMatchResult:
+ _ = text
+ return IntentMatchResult(
+ intent=None,
+ stage_debug=MatcherStageDebug(
+ stage="null",
+ accepted=False,
+ reason="matcher unavailable",
+ candidates=[],
+ ),
+ )
diff --git a/intelligent_cabin/app/services/session_store.py b/intelligent_cabin/app/services/session_store.py
new file mode 100644
index 0000000..368152e
--- /dev/null
+++ b/intelligent_cabin/app/services/session_store.py
@@ -0,0 +1,125 @@
+from __future__ import annotations
+
+import importlib
+import json
+from dataclasses import dataclass, field
+from typing import Any
+from typing import Protocol
+
+
+@dataclass
+class SessionState:
+ session_id: str
+ user_id: str
+ channel: str
+ status: str = "idle"
+ current_intent: str | None = None
+ pending_slots: list[str] = field(default_factory=list)
+ slots: dict[str, Any] = field(default_factory=dict)
+ workflow: dict[str, Any] | None = None
+ routing_debug: dict[str, Any] | None = None
+ last_user_text: str | None = None
+ last_agent_text: str | None = None
+ context_memory: dict[str, Any] = field(default_factory=dict)
+
+ def to_dict(self) -> dict[str, Any]:
+ return {
+ "session_id": self.session_id,
+ "user_id": self.user_id,
+ "channel": self.channel,
+ "status": self.status,
+ "current_intent": self.current_intent,
+ "pending_slots": self.pending_slots,
+ "slots": self.slots,
+ "workflow": self.workflow,
+ "routing_debug": self.routing_debug,
+ "last_user_text": self.last_user_text,
+ "last_agent_text": self.last_agent_text,
+ "context_memory": self.context_memory,
+ }
+
+ @classmethod
+ def from_dict(cls, data: dict[str, Any]) -> "SessionState":
+ return cls(
+ session_id=data["session_id"],
+ user_id=data["user_id"],
+ channel=data.get("channel", "app"),
+ status=data.get("status", "idle"),
+ current_intent=data.get("current_intent"),
+ pending_slots=list(data.get("pending_slots", [])),
+ slots=dict(data.get("slots", {})),
+ workflow=data.get("workflow"),
+ routing_debug=data.get("routing_debug"),
+ last_user_text=data.get("last_user_text"),
+ last_agent_text=data.get("last_agent_text"),
+ context_memory=dict(data.get("context_memory", {})),
+ )
+
+
+class SessionStore(Protocol):
+ def get_or_create(self, session_id: str, user_id: str, channel: str = "app") -> SessionState:
+ ...
+
+ def get(self, session_id: str) -> SessionState | None:
+ ...
+
+ def save(self, session: SessionState) -> SessionState:
+ ...
+
+
+class InMemorySessionStore:
+ def __init__(self) -> None:
+ self._sessions: dict[str, SessionState] = {}
+
+ def get_or_create(self, session_id: str, user_id: str, channel: str = "app") -> SessionState:
+ session = self._sessions.get(session_id)
+ if session is None:
+ session = SessionState(session_id=session_id, user_id=user_id, channel=channel)
+ self._sessions[session_id] = session
+ return session
+
+ def get(self, session_id: str) -> SessionState | None:
+ return self._sessions.get(session_id)
+
+ def save(self, session: SessionState) -> SessionState:
+ self._sessions[session.session_id] = session
+ return session
+
+
+class RedisSessionStore:
+ def __init__(
+ self,
+ redis_url: str,
+ key_prefix: str = "agent:session",
+ ttl_seconds: int = 86400,
+ ) -> None:
+ redis_module = importlib.import_module("redis")
+ self._client = redis_module.Redis.from_url(redis_url, decode_responses=True)
+ self._key_prefix = key_prefix
+ self._ttl_seconds = ttl_seconds
+
+ def get_or_create(self, session_id: str, user_id: str, channel: str = "app") -> SessionState:
+ session = self.get(session_id)
+ if session is not None:
+ return session
+
+ session = SessionState(session_id=session_id, user_id=user_id, channel=channel)
+ self.save(session)
+ return session
+
+ def get(self, session_id: str) -> SessionState | None:
+ payload = self._client.get(self._build_key(session_id))
+ if payload is None:
+ return None
+ return SessionState.from_dict(json.loads(payload))
+
+ def save(self, session: SessionState) -> SessionState:
+ self._client.set(
+ self._build_key(session.session_id),
+ json.dumps(session.to_dict(), ensure_ascii=False),
+ ex=self._ttl_seconds,
+ )
+ return session
+
+ def _build_key(self, session_id: str) -> str:
+ return f"{self._key_prefix}:{session_id}"
diff --git a/intelligent_cabin/app/services/social.py b/intelligent_cabin/app/services/social.py
new file mode 100644
index 0000000..ec978c5
--- /dev/null
+++ b/intelligent_cabin/app/services/social.py
@@ -0,0 +1,250 @@
+from __future__ import annotations
+
+import json
+import re
+from dataclasses import dataclass, field
+from typing import Any, Literal, Protocol
+from urllib import error, request
+
+from app.services.session_store import SessionState
+
+
+SocialCategory = Literal["none", "open_social"]
+ShortSocialKind = Literal["greeting", "thanks", "goodbye", "capability"]
+
+
+@dataclass
+class SocialRouteResult:
+ category: SocialCategory
+ reason: str
+ short_kind: ShortSocialKind | None = None
+
+
+@dataclass
+class SocialReplyResult:
+ text: str
+ backend: str
+ model_name: str
+ error_message: str | None = None
+ metadata: dict[str, Any] = field(default_factory=dict)
+
+
+class SocialResponder(Protocol):
+ def reply(self, text: str, session: SessionState) -> SocialReplyResult:
+ ...
+
+
+class SocialRouter:
+ _SHORT_SOCIAL_PATTERNS: dict[ShortSocialKind, tuple[str, ...]] = {
+ "greeting": ("你好", "您好", "嗨", "哈喽", "hi", "hello", "在吗", "在不在"),
+ "thanks": ("谢谢", "谢啦", "多谢", "thanks", "thank you", "辛苦了"),
+ "goodbye": ("再见", "拜拜", "回头见", "bye", "goodbye"),
+ "capability": (
+ "你是谁",
+ "你叫什么",
+ "你叫什么名字",
+ "你叫啥",
+ "怎么称呼你",
+ "介绍一下你自己",
+ "你能做什么",
+ "你会什么",
+ "你可以做什么",
+ ),
+ }
+ _OPEN_SOCIAL_PATTERNS: tuple[str, ...] = (
+ "天气",
+ "讲个笑话",
+ "笑话",
+ "无聊",
+ "有点累",
+ "有点困",
+ "有点烦",
+ "开心",
+ "不开心",
+ "真不错",
+ "真好",
+ "聊聊天",
+ "你觉得",
+ "你怎么看",
+ "你说呢",
+ )
+ _OPEN_SOCIAL_REGEXES: tuple[re.Pattern[str], ...] = (
+ re.compile(r"今天.*(不错|真好|挺好|真舒服)"),
+ re.compile(r"(好|真)热啊"),
+ re.compile(r"(好|真)冷啊"),
+ re.compile(r"我今天.*(累|困|烦|开心|难过)"),
+ re.compile(r".*(怎么样|如何|咋样)[??]?$"),
+ )
+ _CAPABILITY_REGEXES: tuple[re.Pattern[str], ...] = (
+ re.compile(r"你.*(叫.*名字|叫什么|叫啥)[??]?$"),
+ re.compile(r"(怎么称呼你|介绍一下你自己)[??]?$"),
+ re.compile(r"你.*(能做什么|会什么|可以做什么)[??]?$"),
+ )
+ _TASK_KEYWORDS: tuple[str, ...] = (
+ "订单",
+ "物流",
+ "取消",
+ "转人工",
+ "导航",
+ "去",
+ "到",
+ "空调",
+ "温度",
+ "调到",
+ "播放",
+ "音乐",
+ "歌曲",
+ "车窗",
+ "座椅",
+ "后视镜",
+ "灯光",
+ "除雾",
+ "确认",
+ "不用",
+ )
+
+ def route(self, text: str, session: SessionState) -> SocialRouteResult:
+ normalized = self._normalize(text)
+ if not normalized:
+ return SocialRouteResult(category="none", reason="empty text")
+ if self._looks_like_task(normalized):
+ return SocialRouteResult(category="none", reason="contains task keywords")
+ for short_kind, patterns in self._SHORT_SOCIAL_PATTERNS.items():
+ if any(pattern in normalized for pattern in patterns):
+ return SocialRouteResult(
+ category="open_social",
+ short_kind=short_kind,
+ reason=f"matched social pattern routed to llm: {short_kind}",
+ )
+ if any(regex.search(normalized) for regex in self._CAPABILITY_REGEXES):
+ return SocialRouteResult(
+ category="open_social",
+ short_kind="capability",
+ reason="matched capability social regex routed to llm",
+ )
+ if any(pattern in normalized for pattern in self._OPEN_SOCIAL_PATTERNS):
+ return SocialRouteResult(category="open_social", reason="matched open social phrase")
+ if any(regex.search(normalized) for regex in self._OPEN_SOCIAL_REGEXES):
+ return SocialRouteResult(category="open_social", reason="matched open social regex")
+ if session.context_memory.get("last_dialog_mode") == "open_social" and len(normalized) <= 14:
+ return SocialRouteResult(category="open_social", reason="follow-up to previous open social turn")
+ return SocialRouteResult(category="none", reason="no social pattern matched")
+
+ def _normalize(self, text: str) -> str:
+ return re.sub(r"\s+", "", text.strip().lower())
+
+ def _looks_like_task(self, normalized: str) -> bool:
+ if any(keyword in normalized for keyword in self._TASK_KEYWORDS):
+ return True
+ return bool(re.match(r"^(查|帮我查|打开|关闭|设置|调|导航|播放|取消|转)(.+)", normalized))
+
+
+class DashScopeSocialResponder:
+ def __init__(
+ self,
+ base_url: str,
+ api_key: str,
+ model_name: str,
+ timeout_seconds: float = 6.0,
+ ) -> None:
+ self._base_url = base_url.rstrip("/")
+ self._api_key = api_key
+ self._model_name = model_name
+ self._timeout_seconds = timeout_seconds
+
+ def reply(self, text: str, session: SessionState) -> SocialReplyResult:
+ if not self._base_url or not self._api_key or not self._model_name:
+ return SocialReplyResult(
+ text="可以和你聊两句,你也可以继续让我处理查询或控制。",
+ backend="local-fallback",
+ model_name="social-fallback",
+ error_message="social responder is not configured",
+ )
+
+ payload = {
+ "model": self._model_name,
+ "temperature": 0.6,
+ "enable_thinking": False,
+ "max_tokens": 120,
+ "messages": [
+ {
+ "role": "system",
+ "content": (
+ "你是智能座舱助手,负责处理所有闲聊、问候、身份问答、能力介绍和开放聊天。"
+ "请用自然、口语化、简短的中文回答,优先 1-3 句,总长度尽量不超过 50 个字。"
+ "如果用户在打招呼、问你是谁、问你叫什么名字、问你会什么,请直接自然回答,不要像固定菜单。"
+ "可以结合用户上下文自然接话,但不要过度展开。"
+ "不要编造已经执行了任何车辆或客服动作。"
+ "不要输出 JSON,不要长篇解释。"
+ ),
+ },
+ {
+ "role": "user",
+ "content": json.dumps(
+ {
+ "text": text,
+ "context": {
+ "last_user_text": session.last_user_text,
+ "last_agent_text": session.last_agent_text,
+ "current_intent": session.current_intent,
+ "status": session.status,
+ },
+ },
+ ensure_ascii=False,
+ ),
+ },
+ ],
+ }
+ req = request.Request(
+ self._endpoint(),
+ data=json.dumps(payload).encode("utf-8"),
+ headers={
+ "Content-Type": "application/json",
+ "Authorization": f"Bearer {self._api_key}",
+ },
+ method="POST",
+ )
+ try:
+ with request.urlopen(req, timeout=self._timeout_seconds) as response:
+ data = json.loads(response.read().decode("utf-8"))
+ except (error.URLError, TimeoutError, ValueError) as exc:
+ return SocialReplyResult(
+ text="是啊,听起来今天状态不错。",
+ backend="local-fallback",
+ model_name="social-fallback",
+ error_message=str(exc),
+ )
+
+ content = self._extract_content(data)
+ if not content:
+ return SocialReplyResult(
+ text="可以和你聊两句,你也可以继续说说看。",
+ backend="local-fallback",
+ model_name="social-fallback",
+ error_message="empty social response",
+ )
+ return SocialReplyResult(
+ text=content,
+ backend="dashscope",
+ model_name=self._model_name,
+ )
+
+ def _endpoint(self) -> str:
+ if self._base_url.endswith("/chat/completions"):
+ return self._base_url
+ return f"{self._base_url}/chat/completions"
+
+ def _extract_content(self, payload: dict[str, Any]) -> str:
+ choices = payload.get("choices")
+ if not isinstance(choices, list) or not choices:
+ return ""
+ message = choices[0].get("message", {})
+ content = message.get("content", "")
+ if isinstance(content, list):
+ parts = [
+ str(item.get("text", "")).strip()
+ for item in content
+ if isinstance(item, dict) and item.get("type") == "text"
+ ]
+ return "".join(parts).strip()
+ return str(content).strip()
diff --git a/intelligent_cabin/archive/demo/demo.html b/intelligent_cabin/archive/demo/demo.html
new file mode 100644
index 0000000..f206d7f
--- /dev/null
+++ b/intelligent_cabin/archive/demo/demo.html
@@ -0,0 +1,2254 @@
+
+
+
+
+
+ Intelligent Cabin Agent Demo
+
+
+
+
+
+
+
+
+
+
+
+
+
当前会自动判断是首次请求还是补槽续跑。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intelligent_cabin/archive/docs/current_system_flow.md b/intelligent_cabin/archive/docs/current_system_flow.md
new file mode 100644
index 0000000..73a655b
--- /dev/null
+++ b/intelligent_cabin/archive/docs/current_system_flow.md
@@ -0,0 +1,1722 @@
+# 当前项目完整流程说明
+
+## 1. 文档目标
+
+本文档描述当前项目在代码层面的真实运行流程,不是目标态蓝图,而是“现在这个仓库实际如何工作”。
+
+覆盖范围包括:
+
+- 服务启动与运行时装配
+- API 请求入口与返回结构
+- 会话状态管理
+- 输入改写
+- 本地路由与多阶段融合
+- 社交闲聊分流
+- planner 触发与多步骤 workflow 生成
+- 单步执行、多步执行、条件执行、确认执行
+- 配置驱动加载方式
+- 当前使用的技术、模型、阈值、分支条件
+- 主要风险点与当前边界
+
+---
+
+## 2. 系统定位
+
+当前项目是一个面向“智能座舱 + 客服”的执行型 Agent 服务,后端基于 FastAPI,核心特点如下:
+
+- 配置驱动:意图、动作、响应模板、表单、规则、workflow 模板都来自 `config/`
+- 本地优先:优先走 `rewrite -> keyword/classifier/retrieval -> fusion`
+- planner 不是默认入口:只有复杂句、多意图、条件句、低置信句才触发 planner
+- 会话显式维护:多轮状态不依赖 LLM 记忆,而依赖 `SessionState`
+- 社交闲聊单独分流:问候、感谢、能力问答、开放闲聊走 `SocialRouter`
+- 插件执行统一抽象:所有意图最终映射到 `plugin_id`
+
+---
+
+## 3. 总体架构图
+
+```mermaid
+flowchart TD
+ A[HTTP 请求 /api/v1/agent/chat] --> B[AgentService.handle_chat]
+ B --> C[SessionStore get_or_create]
+ C --> D[Dialog Act 更新]
+ D --> E{是否停止当前任务}
+ E -->|是| F[停止任务并返回 stopped]
+ E -->|否| G{是否社交闲聊}
+ G -->|是| H[SocialRouter + SocialResponder]
+ G -->|否| I[ContextRewriteEngine 改写]
+ I --> J[Router.route]
+
+ J --> J1[keyword matcher]
+ J --> J2[classifier matcher]
+ J --> J3[retrieval matcher]
+ J1 --> J4[fusion 决策]
+ J2 --> J4
+ J3 --> J4
+
+ J4 --> K{是否需要 planner}
+ K -->|否| L{fusion 决策结果}
+ K -->|是| M[WorkflowPlanner.plan]
+
+ M --> M1[TemplateWorkflowPlanner]
+ M --> M2[HeuristicWorkflowPlanner]
+ M --> M3[DashScopeWorkflowPlanner 可选]
+ M1 --> N{planner accepted?}
+ M2 --> N
+ M3 --> N
+
+ N -->|是| O[构建 Workflow 并执行]
+ N -->|否| L
+
+ L -->|execute| P[槽位提取]
+ P --> Q{缺槽位?}
+ Q -->|是| R[ask_slot]
+ Q -->|否| S[执行单步插件]
+ L -->|clarify| T[clarify]
+ L -->|reject| U[reject]
+ L -->|route_to_cloud| V[clarify / fallback / reject]
+
+ O --> W{多步流程继续执行}
+ W -->|缺槽位| X[ask_slot]
+ W -->|需确认| Y[ask_confirmation]
+ W -->|条件不满足| Z[skip step]
+ W -->|可执行| AA[调用插件]
+ AA --> AB[workflow_summary]
+```
+
+---
+
+## 4. 启动与装配流程
+
+### 4.1 入口
+
+应用入口是 `app/main.py`,FastAPI 在 import 阶段完成以下事情:
+
+1. 初始化 `FastAPI(title=settings.app_name)`
+2. 初始化 demo runtime 配置
+3. 调用 `build_agent_service_with_runtime(...)`
+4. 调用 `build_intent_registry()`
+5. 暴露 `/health`、`/demo`、`/api/v1/agent/chat`、`/api/v1/agent/chat-stream`、`/api/v1/agent/fill-slots`
+
+### 4.2 运行时装配
+
+`build_agent_service_with_runtime()` 会组装完整执行链:
+
+1. `ConfigLoader.load()` 读取配置文件
+2. 构建 `IntentRegistry`
+3. 构建 classifier
+4. 构建 multi-intent detector
+5. 构建 matcher pipeline 和 router
+6. 构建 session store
+7. 构建 `ResponsePolicy`
+8. 构建 `DialogRuleEngine`
+9. 构建 `DialogActEngine`
+10. 构建 planner
+11. 注册 mock plugin
+12. 构建 `SocialRouter` 和 `DashScopeSocialResponder`
+13. 最终实例化 `AgentService`
+
+### 4.3 启动装配图
+
+```mermaid
+flowchart TD
+ A[build_agent_service_with_runtime] --> B[ConfigLoader.load]
+ B --> C[IntentRegistry]
+ B --> D[Response templates]
+ B --> E[Dialog rules]
+ B --> F[Dialog acts]
+ B --> G[Workflow templates]
+
+ A --> H[build_classifier]
+ H --> H1[MockIntentClassifier]
+ H --> H2[BertIntentClassifier]
+ H --> H3[RemoteIntentClassifier]
+
+ A --> I[build_multi_intent_detector]
+ I --> I1[BertMultiIntentDetector]
+
+ A --> J[build_router]
+ J --> J1[build_matcher_pipeline]
+ J --> J2[HeuristicSlotExtractor]
+
+ A --> K[build_session_store]
+ K --> K1[InMemorySessionStore]
+ K --> K2[RedisSessionStore]
+
+ A --> L[build_planner]
+ L --> L1[TemplateWorkflowPlanner]
+ L --> L2[HeuristicWorkflowPlanner]
+ L --> L3[DashScopeWorkflowPlanner]
+
+ A --> M[MockPluginExecutor.register]
+ A --> N[SocialRouter]
+ A --> O[DashScopeSocialResponder]
+ A --> P[AgentService]
+```
+
+---
+
+## 5. 配置驱动体系
+
+当前运行时主要依赖这些配置文件:
+
+- `config/domain.yml`
+- `config/actions.yml`
+- `config/forms.yml`
+- `config/responses.yml`
+- `config/rules.yml`
+- `config/dialog_acts.yml`
+- `config/workflows.yml`
+
+### 5.1 各配置文件职责
+
+`domain.yml`
+
+- 定义意图目录
+- 定义 `intent_id`
+- 定义领域 `domain`
+- 定义 label、keywords、examples
+- 指向 `action_id`
+
+`actions.yml`
+
+- 将 `action_id` 绑定到 `plugin_id`
+- 指定风险等级、描述等动作元信息
+
+`forms.yml`
+
+- 定义每个意图需要的 `required_slots`
+- 定义槽位缺失时的 `ask_templates`
+
+`responses.yml`
+
+- 定义系统通用话术模板
+- 包含 ask / ack / reject / fallback / confirm 等模板
+
+`rules.yml`
+
+- 定义停止词
+- 定义确认正负词
+- 定义哪些 intent 或哪些 risk level 必须确认
+
+`dialog_acts.yml`
+
+- 定义 `affirm / deny / cancel / modify / chitchat / request / inform`
+
+`workflows.yml`
+
+- 定义局部固定 workflow 模板
+- 当前已有顺序模板和条件模板
+
+### 5.2 加载流程
+
+```mermaid
+flowchart LR
+ A[ConfigLoader] --> B[domain.yml]
+ A --> C[actions.yml]
+ A --> D[forms.yml]
+ A --> E[responses.yml]
+ A --> F[rules.yml]
+ A --> G[dialog_acts.yml]
+ A --> H[workflows.yml]
+
+ B --> I[DomainConfig]
+ C --> J[ActionsConfig]
+ D --> K[FormsConfig]
+ E --> L[ResponsesConfig]
+ F --> M[DialogRulesConfig]
+ G --> N[DialogActsConfig]
+ H --> O[WorkflowTemplatesConfig]
+
+ I --> P[IntentRegistry]
+ J --> P
+ K --> P
+ L --> Q[ResponsePolicy]
+ M --> R[DialogRuleEngine]
+ N --> S[DialogActEngine]
+ O --> T[WorkflowPlanner]
+```
+
+---
+
+## 6. 请求入口层
+
+### 6.1 `/api/v1/agent/chat`
+
+这是主同步接口:
+
+1. 接收 `ChatRequest`
+2. 直接调用 `agent_service.handle_chat(request)`
+3. 返回 `ChatResponse`
+
+### 6.2 `/api/v1/agent/chat-stream`
+
+这是流式接口:
+
+1. 用线程池异步执行 `agent_service.handle_chat`
+2. 如果 1 秒内拿到结果,直接返回 `final`
+3. 如果 1 秒内没拿到结果:
+ - 先检查 `_should_emit_processing_hint(text)`
+ - 如果命中工具型关键词,就先发一个 `ack`
+ - 再等待最终结果
+4. 最终以 NDJSON 流输出
+
+注意:
+
+- 这里的流式 `ack` 仍然是“基于输入文本 token 的启发式判断”
+- 它并不等于“真实插件已开始执行”
+- 这是 HTTP streaming 层的反馈策略,不是 AgentService 内部 workflow 执行层
+
+### 6.3 `/api/v1/agent/fill-slots`
+
+这是补槽位和确认续跑接口:
+
+1. 根据 `session_id` 取已有 session
+2. 若没有有效 session 或没有 `current_intent`,返回 fallback
+3. 如果当前在 `waiting_confirmation`,优先处理确认
+4. 如果当前是多步 workflow,继续推进 workflow
+5. 否则按当前 intent 继续抽槽并补全
+
+---
+
+## 7. Session 设计
+
+### 7.1 SessionState 字段
+
+`SessionState` 当前包含:
+
+- `session_id`
+- `user_id`
+- `channel`
+- `status`
+- `current_intent`
+- `pending_slots`
+- `slots`
+- `workflow`
+- `routing_debug`
+- `last_user_text`
+- `last_agent_text`
+- `context_memory`
+
+### 7.2 状态含义
+
+当前项目中常见状态:
+
+- `idle`
+- `understanding`
+- `waiting_slot`
+- `waiting_confirmation`
+- `running`
+- `completed`
+- `rejected`
+- `fallback`
+- `stopped`
+- `social`
+
+### 7.3 Session Backend
+
+支持两种 session backend:
+
+- `memory`
+- `redis`
+
+`memory`
+
+- 进程内字典保存
+- 重启丢失
+- 适合本地开发
+
+`redis`
+
+- JSON 序列化保存
+- key 带前缀和 TTL
+- 适合跨进程和长会话
+
+### 7.4 Session 状态图
+
+```mermaid
+stateDiagram-v2
+ [*] --> idle
+ idle --> understanding: 收到普通任务
+ idle --> social: 收到社交闲聊
+ understanding --> waiting_slot: 缺槽位
+ understanding --> ready_to_execute: 槽位齐全
+ ready_to_execute --> completed: 单步插件执行完成
+ ready_to_execute --> running: 多步 workflow 开始
+ running --> waiting_slot: 某一步缺槽位
+ running --> waiting_confirmation: 某一步需确认
+ waiting_slot --> running: 用户补槽后继续
+ waiting_confirmation --> running: 用户确认继续
+ waiting_confirmation --> completed: 用户取消该步后流程继续或结束
+ understanding --> rejected: reject
+ understanding --> fallback: fallback
+ running --> stopped: 用户停止
+ completed --> idle: 下轮新任务
+```
+
+---
+
+## 8. AgentService 主流程
+
+`AgentService.handle_chat()` 是整个服务的核心编排器。
+
+### 8.1 主链路顺序
+
+1. 读取或创建 session
+2. 更新 dialog act
+3. 检查是否停止任务
+4. 检查是否社交闲聊
+5. 运行 rewrite
+6. 路由匹配
+7. 判断是否要启 planner
+8. 如果 planner 接受,直接走多步 workflow
+9. 如果 planner 不接受,则按 fusion 决策处理
+10. 如果决策是 execute,则抽槽并执行
+11. 记录 turn
+12. 保存 session
+13. 填充 latency breakdown
+
+### 8.2 主流程图
+
+```mermaid
+flowchart TD
+ A[handle_chat] --> B[get_or_create session]
+ B --> C[update dialog act]
+ C --> D{stop request?}
+ D -->|yes| E[reset active task + return stopped]
+ D -->|no| F{social turn?}
+ F -->|yes| G[build social response]
+ F -->|no| H[rewrite]
+ H --> I[router.route]
+ I --> J{should use planner?}
+ J -->|yes| K[planner.plan]
+ K --> L{accepted and has steps?}
+ L -->|yes| M[start planned workflow]
+ L -->|no| N[handle route decision]
+ J -->|no| N
+ N -->|has response| O[clarify / reject / route_to_cloud]
+ N -->|none| P{intent found?}
+ P -->|no| Q[fallback]
+ P -->|yes| R[extract slots]
+ R --> S[update session + context memory]
+ S --> T[build response from session]
+ T --> U[record turn + save session + finalize]
+```
+
+### 8.3 Timing 统计
+
+当前 `ChatResponse` 会附带处理耗时细分,典型字段包括:
+
+- `session_get_or_create_ms`
+- `dialog_act_ms`
+- `stop_check_ms`
+- `social_route_ms`
+- `rewrite_ms`
+- `route_ms`
+- `planner_ms`
+- `decision_response_ms`
+- `slot_extract_ms`
+- `response_build_ms`
+- `record_turn_ms`
+- `session_save_ms`
+- `match_pipeline_ms`
+- `first_response_latency_ms`
+- `total_latency_ms`
+
+---
+
+## 9. Dialog Act 与停止分支
+
+### 9.1 Dialog Act
+
+系统会在请求一开始调用 `DialogActEngine.detect(text)`,当前 act 包括:
+
+- `affirm`
+- `deny`
+- `cancel`
+- `modify`
+- `chitchat`
+- `request`
+- `inform`
+- `unknown`
+
+当前 dialog act 的用途主要是:
+
+- 保存会话理解上下文
+- 给后续确认/修改/闲聊处理提供辅助信号
+
+### 9.2 停止分支
+
+停止请求由 `DialogRuleEngine.is_stop_request()` 判断,典型词包括:
+
+- 不用了
+- 算了
+- 先这样吧
+- 停一下
+- 停止
+- 结束这次操作
+
+只有满足以下两个条件才会真正停止:
+
+1. 输入命中 stop phrase
+2. session 当前有 active task
+
+命中后动作:
+
+- reset active task
+- 清空 pending_slots
+- workflow 置空
+- 返回 `status=stopped`
+
+---
+
+## 10. 社交闲聊分支
+
+### 10.1 为什么先做社交分流
+
+社交闲聊与任务型请求的目标不同:
+
+- 任务型请求要落到 intent / slot / workflow / plugin
+- 社交闲聊只需要自然回复,不应误触发任务执行
+
+### 10.2 SocialRouter 路由逻辑
+
+`SocialRouter.route(text, session)` 流程如下:
+
+1. 归一化文本
+2. 如果看起来像任务型请求,直接返回 `category=none`
+3. 如果命中短社交模式,返回 `open_social`
+4. 如果命中 capability regex,返回 `open_social`
+5. 如果命中开放闲聊短语或 regex,返回 `open_social`
+6. 如果上一轮是 `open_social` 且当前文本很短,作为闲聊续接
+7. 否则不是社交
+
+### 10.3 社交分支的两个层次
+
+第一层:`SocialRouter`
+
+- 只判断要不要走社交链路
+
+第二层:`DashScopeSocialResponder`
+
+- 真正生成自然语言回复
+- 使用 DashScope 兼容 OpenAI 的 `/chat/completions`
+- `temperature=0.6`
+- `max_tokens=120`
+- 系统提示词要求:
+ - 简短
+ - 口语化
+ - 不编造已执行动作
+ - 不输出 JSON
+
+### 10.4 社交回复的补充逻辑
+
+如果当前 session 还有未完成任务:
+
+- `ResponsePolicy.pending_task_hint()` 会追加提示
+- 例如还在等确认、还在等槽位、还在运行中
+
+因此社交回复不一定纯闲聊,可能附带任务续接提示
+
+### 10.5 社交流程图
+
+```mermaid
+flowchart TD
+ A[用户输入] --> B[SocialRouter.route]
+ B --> C{looks_like_task?}
+ C -->|yes| D[回主任务链路]
+ C -->|no| E{命中社交模式?}
+ E -->|no| D
+ E -->|yes| F{是否配置 social responder?}
+ F -->|no| G[open_social_fallback]
+ F -->|yes| H[DashScopeSocialResponder.reply]
+ H --> I{返回为空或报错?}
+ I -->|yes| G
+ I -->|no| J[自然回复]
+ G --> K[附加 pending task hint]
+ J --> K
+ K --> L[返回 social/text response]
+```
+
+---
+
+## 11. Rewrite 流程
+
+### 11.1 Rewrite 的定位
+
+`ContextRewriteEngine` 不是通用 LLM 改写器,而是轻量、本地、规则型短句恢复器。
+
+目的:
+
+- 把“再低一点”“下一首”“不要高速”这种短句补成完整命令
+- 让下一轮仍然能命中本地快链路
+- 减少每轮都走 planner 或云端
+
+### 11.2 当前支持的 rewrite 场景
+
+空调 follow-up
+
+- 当前 intent 属于空调相关:
+ - `cabin_set_ac`
+ - `cabin_ac_on`
+ - `cabin_ac_off`
+ - `cabin_fan_up`
+ - `cabin_fan_down`
+- 输入匹配“高一点 / 低一点 / 调高一点 / 调低一点”
+- 根据 `context_memory.last_temperature` 或 `session.slots.temperature`
+- 生成显式句式:
+ - `把空调调到 21 度`
+
+音乐 follow-up
+
+- 当前 intent 为 `cabin_play_music`
+- 输入匹配:
+ - 再来一首
+ - 换一首
+ - 下一首
+- 改写为:
+ - `播放下一首歌`
+
+导航 follow-up
+
+- 当前 intent 为 `cabin_nav_to`
+- 如果输入含“不要高速”
+- 且 session 中能取到上次目的地
+- 改写为:
+ - `导航去 xxx,不要高速`
+
+### 11.3 Rewrite 分支图
+
+```mermaid
+flowchart TD
+ A[原始输入] --> B{current_intent}
+ B -->|空调相关| C[_rewrite_ac_adjustment]
+ B -->|播放音乐| D[_rewrite_music_followup]
+ B -->|导航| E[_rewrite_navigation_followup]
+ B -->|其他| F[不改写]
+ C --> G{命中规则?}
+ D --> G
+ E --> G
+ G -->|yes| H[输出 rewritten_text + metadata]
+ G -->|no| F
+```
+
+---
+
+## 12. Router 与本地多阶段匹配
+
+### 12.1 Router 组成
+
+当前 Router 是 `RuleBasedRouter`,内部包含:
+
+- `matcher`: `MultiStageIntentMatcher`
+- `slot_extractor`: `HeuristicSlotExtractor`
+
+### 12.2 Matcher Pipeline
+
+可配置的匹配阶段:
+
+- `keyword`
+- `classifier`
+- `retrieval`
+- `llm` 占位,当前未实现
+
+默认项目原则上使用:
+
+- `keyword,classifier,retrieval`
+
+### 12.3 各阶段职责
+
+`KeywordIntentMatcher`
+
+- 遍历每个 intent 的 keywords
+- 命中即给 1.0 分
+- 候选 reason 是 `keyword:xxx`
+
+`ClassifierIntentMatcher`
+
+- 调用 `IntentClassifier.predict`
+- 可能接后端:
+ - `mock`
+ - `bert`
+ - `remote`
+- 输出 top-k candidates
+- 附带 raw_label、raw_candidates、top_margin、fallback_reason
+
+`RetrievalIntentMatcher`
+
+- 对输入做 token / n-gram 切分
+- 与 intent 的 keywords + examples 做重叠评分
+- 分数来源:
+ - overlap
+ - coverage
+ - keyword bonus
+
+`LlmIntentMatcher`
+
+- 当前是占位实现
+- 永远返回 not implemented
+
+### 12.4 Fusion 评分机制
+
+fusion 会聚合所有 stage 的候选:
+
+- keyword 权重:`1.15`
+- classifier 权重:`1.0`
+- retrieval 权重:`0.75`
+- llm 权重:`1.1`
+
+额外规则:
+
+- 某 stage accepted 且 selected_intent 命中,会加 accepted bonus
+- classifier 若走 fallback,会减分
+- BERT classifier 会用不同归一化规则
+- fusion 最终得到 ranked intents
+
+### 12.5 Fusion 决策阈值
+
+核心阈值来自环境变量:
+
+- `local_execute_threshold = 1.65`
+- `local_route_to_cloud_threshold = 0.75`
+- `local_clarify_margin_threshold = 0.12`
+- `local_classifier_execute_score_threshold = 0.55`
+- `local_classifier_execute_margin_threshold = 0.18`
+
+### 12.6 Fusion 决策逻辑
+
+`execute`
+
+满足任一:
+
+- `top_score >= execute_threshold`
+- 至少两路 accepted 支持,或有强 symbolic support
+- 纯 BERT 路径但分数和 margin 足够高
+
+`clarify`
+
+满足:
+
+- top_score 介于 `route_to_cloud_threshold` 和 `execute_threshold`
+- top_margin 小于 clarify margin
+- 存在多候选竞争
+
+`route_to_cloud`
+
+满足:
+
+- 本地信号说明“像已知意图”
+- 但不够稳定执行
+
+`reject`
+
+满足:
+
+- 本地没有足够信号
+- 且不认为是已知能力内请求
+
+### 12.7 Router 总流程图
+
+```mermaid
+flowchart TD
+ A[rewrite 后文本] --> B[keyword]
+ A --> C[classifier]
+ A --> D[retrieval]
+ B --> E[fusion]
+ C --> E
+ D --> E
+
+ E --> F{top_score / margin / support}
+ F -->|高置信| G[decision=execute]
+ F -->|接近但歧义| H[decision=clarify]
+ F -->|像已知意图但不稳| I[decision=route_to_cloud]
+ F -->|未知或过低| J[decision=reject]
+```
+
+### 12.8 Routing Debug
+
+每次 route 都会构造 `RoutingDebug`,包括:
+
+- `selected_intent`
+- `matched_stage`
+- `decision`
+- `decision_reason`
+- `confidence_grade`
+- `unknown_detected`
+- `stages`
+- `total_match_latency_ms`
+
+每个 stage 又包含:
+
+- accepted
+- selected_intent
+- score
+- reason
+- model_name
+- backend
+- fallback_used
+- raw_label
+- error_message
+- metadata
+- candidates
+
+这也是 demo 面板能展示详细匹配过程的原因。
+
+---
+
+## 13. Classifier 技术细节
+
+### 13.1 支持的 classifier backend
+
+`mock`
+
+- 本地规则化 token overlap stub
+- 主要用于开发或 fallback
+
+`bert`
+
+- 使用 `transformers.pipeline("text-classification")`
+- 模型目录来自 `AGENT_CLASSIFIER_MODEL_PATH`
+- 支持 label map
+- 支持 warmup
+
+`remote`
+
+- 请求远端分类服务
+- 传入 text、top_k、labels
+- 返回 intent_id / score / raw candidates
+
+### 13.2 BERT classifier 行为
+
+本地 BERT 分类器:
+
+- 初始化时不一定立刻加载模型,但 `build_classifier()` 会按配置触发 warmup
+- warmup 默认文本:`打开车窗`
+- 输出 top-k candidates
+- 分数低于阈值时可 fallback 到 mock
+
+### 13.3 当前模型相关配置
+
+- `classifier_backend`
+- `classifier_model_path`
+- `classifier_label_map_path`
+- `classifier_top_k`
+- `classifier_bert_threshold`
+- `classifier_warmup_enabled`
+- `classifier_warmup_text`
+
+---
+
+## 14. Multi-Intent Detector 技术细节
+
+### 14.1 当前 detector 的角色
+
+当前多标签 detector 不是 planner 主入口,而是 planner 二阶段中的先验信号。
+
+它的职责是:
+
+- 从整句维度给出可能共现的多个 intent
+- 生成 `detector_prior`
+- 在 clause classifier 融合时增强多意图解析
+
+### 14.2 当前实现方式
+
+`BertMultiIntentDetector`
+
+- 加载独立多标签模型目录
+- 运行 `AutoTokenizer` + `AutoModelForSequenceClassification`
+- 对 logits 做 sigmoid
+- 用 threshold 过滤
+- 屏蔽:
+ - `__social__`
+ - `__out_of_scope__`
+- 最多输出 `max_labels`
+
+### 14.3 detector 配置
+
+- `planner_multi_intent_detector_enabled`
+- `planner_multi_intent_detector_model_path`
+- `planner_multi_intent_detector_threshold`
+- `planner_multi_intent_detector_top_k`
+- `planner_multi_intent_detector_max_labels`
+
+---
+
+## 15. Planner 触发机制
+
+### 15.1 何时调用 planner
+
+`AgentService._should_use_planner()` 当前规则:
+
+满足任一就会进入 planner:
+
+1. 文本包含复杂连接词:
+ - 然后
+ - 并且
+ - 同时
+ - 如果
+ - 若
+ - 先
+ - 后
+2. 文本包含明显分隔符:
+ - `,`
+ - `,`
+ - `;`
+ - `;`
+3. fusion stage 最终未 accepted
+
+这意味着:
+
+- planner 不是全量调用
+- 单条明确命令通常不会调 planner
+- 复杂句、歧义句、低置信句会调 planner
+
+### 15.2 planner 组合结构
+
+当前 `build_planner()` 构成如下:
+
+本地层:
+
+- `TemplateWorkflowPlanner`
+- `HeuristicWorkflowPlanner`
+
+云端层:
+
+- `DashScopeWorkflowPlanner`
+
+最终组合方式:
+
+- 如果 `planner_backend=heuristic`
+ - 返回 `Composite(local_template, local_heuristic)`
+- 如果 `planner_backend=dashscope`
+ - 返回 `Composite(local_first, dashscope)`
+
+重点:
+
+- 始终是 local-first
+- 云端 planner 只是后面的补充层
+- 云端失败时会 fallback 到本地 heuristic planner
+
+### 15.3 planner 链路图
+
+```mermaid
+flowchart TD
+ A[planner.plan] --> B[TemplateWorkflowPlanner]
+ B --> C{accepted?}
+ C -->|yes| D[返回模板 workflow]
+ C -->|no| E[HeuristicWorkflowPlanner]
+ E --> F{accepted?}
+ F -->|yes| G[返回本地 heuristic workflow]
+ F -->|no| H{planner_backend=dashscope?}
+ H -->|no| I[返回未接受]
+ H -->|yes| J[DashScopeWorkflowPlanner]
+ J --> K{云端成功?}
+ K -->|yes| L[返回 cloud workflow]
+ K -->|no| M[fallback 到本地 heuristic 结果]
+```
+
+---
+
+## 16. TemplateWorkflowPlanner 细节
+
+### 16.1 作用
+
+对已经定义好的典型固定组合优先做模板命中。
+
+当前 `workflows.yml` 里已有:
+
+- `window_then_ac_sequence`
+- `query_then_cancel_if_pending`
+
+### 16.2 工作方式
+
+1. 调 `_analyze_multi_intent()`
+2. 拿到 clause 分析结果
+3. 如果匹配的 intent 少于 2 个,不接受
+4. 逐个比对 workflow 模板
+5. 如果模板命中,则生成 `PlannedStep`
+
+### 16.3 模板命中条件
+
+需要同时满足:
+
+- `matched_ids[:len(intent_sequence)] == template.intent_sequence`
+- 若模板定义了 `trigger_keywords`,文本中必须都出现
+
+这是一种严格模板匹配,不是模糊相似模板匹配。
+
+---
+
+## 17. HeuristicWorkflowPlanner 细节
+
+### 17.1 输入分析
+
+`_analyze_multi_intent()` 做这些事:
+
+1. 如果配置了多标签 detector,先对整句做 multi-intent detect
+2. 生成 `detector_prior`
+3. 按连接词和标点做 clause split
+4. 对每个 clause 做 heuristic + classifier + detector 融合
+5. 汇总成 `MultiIntentParseResult`
+
+### 17.2 Clause Split 规则
+
+当前切分词包括:
+
+- 然后
+- 并且
+- 同时
+- 再
+- 顺便
+- 接着
+- 并
+- `,`
+- `,`
+- `;`
+- `;`
+
+### 17.3 Clause 评分信号
+
+每个 clause 对每个 intent 的启发式评分来源:
+
+- keyword 命中
+- example 命中
+- action 命中
+- object 命中
+- qualifier 命中
+- shared context 命中
+- 显式 temperature
+- 显式 order_id
+
+### 17.4 Clause 融合
+
+最终 clause 分数 = 启发式分数 + `model_score * classifier_weight` + detector bonus + 一致性 bonus
+
+补充规则:
+
+- 如果启发式没有命中,但 model 分数足够高,允许 `bert_bootstrap`
+- 如果 clause 内看起来像并列复合子句,还会尝试抽出多个 parallel candidates
+
+### 17.5 Workflow 类型推断
+
+- 如果文本有条件模式:
+ - `如果`
+ - `若`
+ - `还没`
+ - `未发货`
+ - `没发货`
+ - 则推断 `conditional`
+- 否则若存在多 clause,通常推断 `sequence`
+- 匹配数不足 2 个时,仍回落为 `single`
+
+### 17.6 条件流程修正
+
+`_apply_conditional_hints()` 当前专门处理:
+
+- `cs_query_order -> cs_cancel_order`
+- 且文本包含“还没发货 / 未发货 / 没发货”
+
+则自动补:
+
+- `depends_on=[query_step]`
+- `condition.field=order_status`
+- `condition.operator=equals`
+- `condition.value=pending_shipment`
+- `requires_confirmation=true`
+
+---
+
+## 18. DashScopeWorkflowPlanner 细节
+
+### 18.1 调用方式
+
+云端 planner 使用 DashScope 兼容 OpenAI 的 `POST /chat/completions`
+
+配置项:
+
+- `planner_base_url`
+- `planner_api_key`
+- `planner_model_name`
+- `planner_timeout_seconds`
+
+### 18.2 Prompt 设计目标
+
+云端 planner 的 system prompt 要求:
+
+- 只返回严格 JSON
+- 只能使用 catalog 中已有的 `intent_id`
+- 单命令返回一个 step
+- 多命令返回 sequence steps
+- 条件命令返回 conditional steps
+- 显式抽取 slots
+- 高风险动作标记 `requires_confirmation=true`
+
+### 18.3 结果归一化
+
+云端返回后会做:
+
+1. 提取 content
+2. 去掉 markdown code fence
+3. 解析 JSON
+4. 校验 intent 是否在 catalog 中
+5. 合并 cloud slots + clause slots + full_text slots
+6. 归一化 depends_on 和 condition
+7. 如果文本本身是条件句,再补条件 hints
+
+### 18.4 云端 planner 失败分支
+
+若出现以下问题:
+
+- 未配置
+- HTTP 请求失败
+- 超时
+- 返回空内容
+- JSON 非法
+
+则返回 fallback 结果:
+
+- backend 记为 `dashscope-fallback`
+- 实际 steps 来自本地 heuristic planner
+
+---
+
+## 19. 单步执行流程
+
+当 planner 没接管,且 fusion 决策为 `execute` 时,系统进入单步执行。
+
+### 19.1 单步执行顺序
+
+1. 如果当前识别的 intent 与 session 上一个 intent 不同:
+ - 清空 `pending_slots`
+ - 清空 `slots`
+ - 清空 `workflow`
+2. 更新 `session.current_intent`
+3. `status=understanding`
+4. 抽取槽位
+5. 更新 `session.slots`
+6. 更新 `context_memory`
+7. 调 `_build_response_from_session()`
+
+### 19.2 `_build_response_from_session()` 分支
+
+如果缺槽位:
+
+- `status=waiting_slot`
+- 返回 `ask_slot`
+- 生成单步 workflow 展示缺失字段
+
+如果槽位齐全:
+
+- 直接调用 plugin
+- `status=completed`
+- 返回 `workflow_result`
+
+### 19.3 单步执行图
+
+```mermaid
+flowchart TD
+ A[decision=execute] --> B[extract slots]
+ B --> C[update session.slots]
+ C --> D{pending slots?}
+ D -->|yes| E[ask_slot + waiting_slot]
+ D -->|no| F[plugins.execute]
+ F --> G[workflow_result]
+ G --> H[record turn + save session]
+```
+
+---
+
+## 20. 多步 Workflow 执行流程
+
+### 20.1 启动
+
+如果 planner 返回:
+
+- `accepted=True`
+- 且 `steps` 非空
+
+则 `AgentService._start_planned_workflow()` 会:
+
+1. 调 `_build_planned_workflow()`
+2. 将 workflow 写入 session
+3. 将 routing_debug 写入 session
+4. 立即调用 `_continue_planned_workflow()`
+
+### 20.2 WorkflowStep 结构
+
+每一步包含:
+
+- `step`
+- `step_id`
+- `intent_id`
+- `plugin_id`
+- `action`
+- `status`
+- `depends_on`
+- `slots`
+- `condition`
+- `requires_confirmation`
+
+### 20.3 `_continue_planned_workflow()` 的核心逻辑
+
+系统按 step 顺序遍历:
+
+1. 如果 step 已完成或已跳过,跳过
+2. 如果依赖步骤未完成,跳过
+3. 合并 session slots 与 step slots
+4. 做 intent 级 slot normalize
+5. 检查当前 step 是否缺必填槽位
+6. 如果缺槽位,暂停整个 workflow,返回 `ask_slot`
+7. 若有 condition,先评估条件
+8. 条件不满足则 `skipped`
+9. 如果此步需要确认且还未确认,返回 `ask_confirmation`
+10. 否则执行 plugin
+11. 记录 step result
+12. 更新 session slots 与 context memory
+13. 收集每步 message
+14. 全部结束后生成自然语言 workflow summary
+
+### 20.4 多步执行图
+
+```mermaid
+flowchart TD
+ A[workflow ready] --> B[for step in steps]
+ B --> C{已完成或已跳过?}
+ C -->|yes| B
+ C -->|no| D{depends_on satisfied?}
+ D -->|no| B
+ D -->|yes| E[merge slots]
+ E --> F{缺槽位?}
+ F -->|yes| G[ask_slot + pause workflow]
+ F -->|no| H{condition exists?}
+ H -->|yes| I[评估条件]
+ I -->|false| J[skip step]
+ I -->|true/none| K{requires confirmation?}
+ H -->|no| K
+ K -->|yes| L[ask_confirmation + pause workflow]
+ K -->|no| M[plugins.execute]
+ M --> N[记录 step_results]
+ N --> B
+ B --> O[全部结束]
+ O --> P[workflow_summary]
+```
+
+---
+
+## 21. 条件流程与确认流程
+
+### 21.1 条件流程
+
+目前条件执行能力是 workflow 层完成的,不是 plugin 层完成的。
+
+机制如下:
+
+1. 某 step 带 `condition`
+2. 条件里描述:
+ - `source_step`
+ - `field`
+ - `operator`
+ - `value`
+3. 执行依赖步骤后,从 `workflow.meta.step_results[source_step]` 里取 `data`
+4. 读出对应 field
+5. 做 equals / not_equals / in 判断
+6. 如果不满足:
+ - step.status = skipped
+ - 拼接 skip message
+
+### 21.2 当前确认机制
+
+确认触发来源有两种:
+
+1. workflow step 显式写了 `requires_confirmation`
+2. `DialogRuleEngine.requires_confirmation(intent_id, risk_level)` 返回 true
+
+当前典型需要确认的动作:
+
+- `cs_cancel_order`
+- 风险等级为 `high` 的动作
+
+### 21.3 确认处理流程
+
+当 workflow 卡在确认步骤时:
+
+1. `status=waiting_confirmation`
+2. `pending_slots=["confirmation"]`
+3. session.workflow.meta 里写入 `pending_confirmation`
+
+之后用户通过 `fill-slots` 或后续续聊输入:
+
+- 如果明确为正确认:
+ - 将 step_id 加入 `confirmed_steps`
+ - 继续跑 workflow
+- 如果明确为负确认:
+ - 将该 step 标记 `skipped`
+ - 继续后面的 workflow
+- 如果无法判断:
+ - 返回 `confirm_retry`
+
+### 21.4 确认时序图
+
+```mermaid
+sequenceDiagram
+ participant U as 用户
+ participant A as AgentService
+ participant W as Workflow
+ participant P as Plugin
+
+ A->>W: 发现当前 step requires_confirmation
+ W-->>U: ask_confirmation
+ U->>A: 确认 / 取消 / 模糊回复
+ A->>A: parse_confirmation_decision
+ alt 明确确认
+ A->>W: 标记 confirmed_steps
+ A->>P: 执行该 step
+ P-->>A: success
+ A-->>U: workflow_result
+ else 明确取消
+ A->>W: 标记 step skipped
+ A-->>U: 后续 summary
+ else 无法判断
+ A-->>U: confirm_retry
+ end
+```
+
+---
+
+## 22. Fill-Slots 续跑流程
+
+`handle_fill_slots()` 是状态恢复和续跑的重要入口。
+
+### 22.1 主要分支
+
+1. 读取 session
+2. 如果无 session 或无 current_intent,fallback
+3. 更新 dialog act
+4. 检查 stop request
+5. 如果在 `waiting_confirmation`,优先尝试确认处理
+6. 如果是 social turn,也可先走社交
+7. 如果还在 `waiting_confirmation`,继续确认流程
+8. 如果 session 内已有非 single workflow:
+ - 只抽本轮补充槽位
+ - 继续 `_continue_planned_workflow()`
+9. 否则:
+ - 按当前单 intent 抽槽并继续 `_build_response_from_session()`
+
+### 22.2 为什么 fill-slots 很关键
+
+它让系统具备这些能力:
+
+- 缺槽位后可续跑
+- 条件确认后可续跑
+- 多步 workflow 在中断后可继续
+- 不需要整轮重新识别 planner
+
+---
+
+## 23. Plugin 执行层
+
+### 23.1 抽象方式
+
+当前插件层由 `PluginRegistry` 统一管理:
+
+- `register(plugin_id, handler)`
+- `execute(plugin_id, slots)`
+
+### 23.2 当前插件实现
+
+现在实际接的是 `MockPluginExecutor`,它注册了一批 mock handler,包括:
+
+客服类:
+
+- `plugin.order.query`
+- `plugin.logistics.query`
+- `plugin.order.cancel`
+- `plugin.service.transfer_human`
+
+座舱类:
+
+- `plugin.cabin.navigation`
+- `plugin.cabin.navigation.cancel`
+- `plugin.cabin.ac.on`
+- `plugin.cabin.ac.off`
+- `plugin.cabin.ac_control`
+- `plugin.cabin.fan.up`
+- `plugin.cabin.fan.down`
+- `plugin.cabin.defog.front_on`
+- `plugin.cabin.defog.rear_on`
+- `plugin.cabin.window.open`
+- `plugin.cabin.window.close`
+- `plugin.cabin.sunroof.open`
+- `plugin.cabin.sunroof.close`
+- `plugin.cabin.doors.lock`
+- `plugin.cabin.doors.unlock`
+- `plugin.cabin.music_play`
+- `plugin.cabin.music.pause`
+- `plugin.cabin.music.next`
+- `plugin.cabin.music.previous`
+- `plugin.cabin.volume.up`
+- `plugin.cabin.volume.down`
+- `plugin.cabin.volume.mute`
+- `plugin.cabin.lights.on`
+- `plugin.cabin.lights.off`
+- `plugin.cabin.seat_heat.on`
+- `plugin.cabin.seat_heat.off`
+- `plugin.cabin.mirror.fold`
+- `plugin.cabin.mirror.unfold`
+- `plugin.cabin.wiper.on`
+- `plugin.cabin.wiper.off`
+
+### 23.3 plugin 返回结构
+
+每个 plugin 返回统一 dict:
+
+- `success`
+- `message`
+- `data`
+
+这使得:
+
+- ResponsePolicy 能统一生成自然回复
+- workflow condition 能统一读取 `data.field`
+
+---
+
+## 24. ResponsePolicy 与最终话术
+
+### 24.1 ResponsePolicy 职责
+
+`ResponsePolicy` 是统一话术策略层,负责:
+
+- `ask_for_slot`
+- `workflow_result`
+- `workflow_summary`
+- `ask_for_confirmation`
+- `confirm_retry`
+- `confirm_cancelled`
+- `step_skipped`
+- `ack`
+- `reject`
+- `short_social`
+- `open_social_fallback`
+- `with_pending_hint`
+- `pending_task_hint`
+- `task_stopped`
+- `clarify`
+- `fallback`
+
+### 24.2 workflow_summary 的特殊点
+
+多步结果不是简单拼接,而会做一定“车机式口语化聚合”,例如:
+
+- `车窗已经打开了`
+- `空调也调到 20 度了`
+- `也开始播放 民谣 了`
+
+最终形态类似:
+
+- `好,车窗已经打开了,空调也调到 20 度了。`
+
+### 24.3 clarify / reject / fallback 区别
+
+`clarify`
+
+- 已知能力内
+- 但候选有歧义
+
+`reject`
+
+- 当前判断超能力边界
+- 或 planner 明确指出 out of scope
+
+`fallback`
+
+- 没有稳定理解
+- 也没有足够候选可澄清
+
+---
+
+## 25. Debug 与可观测性
+
+当前项目对调试非常友好,主要体现在:
+
+- route 每个 stage 都保留详细 debug
+- rewrite 会带 applied / reason / metadata
+- planner 会追加 planner stage 到 routing_debug
+- clause_analysis 会放入 planner metadata
+- multi_intent_detector 原始 top scores 会保留
+- processing breakdown 会附带每阶段耗时
+
+因此一次响应通常能回放出:
+
+1. 原始输入
+2. 是否改写
+3. route 经过哪些 stage
+4. 每个 stage 给了什么 candidates
+5. fusion 为什么 execute / clarify / reject / route_to_cloud
+6. planner 是否触发
+7. planner 为什么 accepted / rejected
+8. workflow 长什么样
+9. 每步执行结果如何
+
+---
+
+## 26. 当前支持的核心能力
+
+### 26.1 客服域
+
+- 查订单
+- 查物流
+- 取消订单
+- 转人工
+
+### 26.2 座舱域
+
+- 导航去某地
+- 结束导航
+- 打开/关闭空调
+- 调空调温度
+- 调大/调小风量
+- 前挡除雾
+- 后挡除雾
+- 打开/关闭车窗
+- 打开/关闭天窗
+- 锁/解锁车门
+- 播放/暂停音乐
+- 上一首/下一首
+- 调大/调小音量
+- 静音
+- 打开/关闭车灯
+- 打开/关闭座椅加热
+- 折叠/展开后视镜
+- 打开/关闭雨刷
+
+### 26.3 对话辅助能力
+
+- 问候
+- 感谢
+- 再见
+- 能力问答
+- 开放闲聊
+- 多轮短句改写
+- 条件执行
+- 高风险确认
+- 停止当前任务
+
+---
+
+## 27. 分支矩阵
+
+### 27.1 输入到输出的主要分支
+
+| 输入类型 | 前置判断 | 走向 | 最终输出类型 |
+| --- | --- | --- | --- |
+| 停止词 + 有活动任务 | stop rule | reset task | `text/stopped` |
+| 问候/感谢/闲聊 | social route | social responder | `text/social` |
+| 单命令高置信 | fusion execute | 单步执行 | `workflow_result` |
+| 单命令缺槽位 | execute + missing slots | ask slot | `ask_slot` |
+| 多命令/条件句 | planner accepted | workflow | `workflow_result / ask_slot / ask_confirmation` |
+| 本地歧义 | fusion clarify | clarify | `clarify` |
+| 本地像已知意图但不稳 | route_to_cloud | clarify / fallback / reject | `clarify/fallback/reject` |
+| 完全未知 | reject | reject | `reject` |
+| session 丢失或无 current intent 的 fill-slots | invalid continuation | fallback | `fallback` |
+
+### 27.2 route_to_cloud 的三种最终表现
+
+当 fusion 决策为 `route_to_cloud` 时,不一定真的“去云端执行完就返回结果”,当前表现取决于 planner stage 和候选情况:
+
+1. planner 明确提示 out-of-scope
+ - 返回 `reject`
+2. 还有可用候选 intent
+ - 返回 `clarify`
+3. 没候选也没明确拒绝
+ - 返回 `fallback`
+
+---
+
+## 28. 当前技术栈与模型清单
+
+### 28.1 基础框架
+
+- Python
+- FastAPI
+- Pydantic Settings
+- YAML / JSON 配置文件
+
+### 28.2 本地理解层
+
+- keyword matcher
+- heuristic retrieval matcher
+- mock classifier
+- local BERT classifier
+- local multi-label BERT detector
+
+### 28.3 云端能力层
+
+- DashScope OpenAI-compatible chat completion
+- 云端 workflow planner
+- 云端 social responder
+
+### 28.4 状态与数据层
+
+- In-memory session
+- Redis session
+
+### 28.5 执行层
+
+- PluginRegistry
+- MockPluginExecutor
+
+### 28.6 前端与调试
+
+- demo.html
+- runtime backend 切换
+- routing debug panel
+- workflow JSON 展示
+
+---
+
+## 29. 真实请求样例时序
+
+### 29.1 单命令:打开车窗
+
+```mermaid
+sequenceDiagram
+ participant U as 用户
+ participant API as FastAPI
+ participant S as AgentService
+ participant R as Router
+ participant P as Plugin
+
+ U->>API: /chat 打开车窗
+ API->>S: handle_chat
+ S->>S: get/create session
+ S->>S: rewrite(无改写)
+ S->>R: route
+ R-->>S: decision=execute,intent=cabin_window_open
+ S->>S: extract slots(空)
+ S->>P: plugin.cabin.window.open
+ P-->>S: success + message
+ S-->>API: workflow_result
+ API-->>U: 好的,已打开车窗
+```
+
+### 29.2 条件句:查订单,如果没发货就取消
+
+```mermaid
+sequenceDiagram
+ participant U as 用户
+ participant S as AgentService
+ participant PL as Planner
+ participant W as Workflow
+ participant P as Plugin
+
+ U->>S: 查订单A123,如果没发货就取消
+ S->>PL: planner.plan
+ PL-->>S: conditional workflow
+ S->>W: build workflow
+ W->>P: query_order
+ P-->>W: data.order_status=pending_shipment
+ W-->>U: ask_confirmation
+ U->>S: 确认
+ S->>W: continue workflow
+ W->>P: cancel_order
+ P-->>W: success
+ W-->>U: workflow_summary
+```
+
+### 29.3 多轮补槽:导航去哪里
+
+```mermaid
+sequenceDiagram
+ participant U as 用户
+ participant S as AgentService
+ participant P as Plugin
+
+ U->>S: 导航
+ S-->>U: ask_slot(请告诉我要去哪里)
+ U->>S: 去公司
+ S->>S: fill-slots
+ S->>P: plugin.cabin.navigation(destination=公司)
+ P-->>S: success
+ S-->>U: workflow_result
+```
+
+---
+
+## 30. 当前边界与限制
+
+### 30.1 还不是完整语音链路
+
+当前项目只有文本 Agent 服务:
+
+- 没有内建 ASR
+- 没有内建 TTS
+- 没有真正的车机设备控制链路
+
+### 30.2 plugin 仍然是 mock
+
+虽然 plugin 结构已经有了,但当前执行结果仍然是 mock handler 返回,不是真实业务系统结果。
+
+### 30.3 LLM matcher 尚未实现
+
+`matcher_pipeline` 虽然支持 `llm` 这个 stage 名字,但实现仍是 placeholder。
+
+### 30.4 流式 ack 与真实执行未完全打通
+
+`chat-stream` 中 1 秒后的 `ack` 仍然依赖输入文本 token,不是插件真实启动事件。
+
+### 30.5 多意图 detector 已独立训练,但泛化仍需继续补数据
+
+目前多标签 detector 已接入为真正训练过的多标签模型,但对独立口语化长尾场景仍需要继续补强训练数据。
+
+### 30.6 NER / Token Classification 尚未接入
+
+当前动作-对象-槽位边界主要依赖:
+
+- heuristic slot extraction
+- clause heuristic
+- classifier 与 detector 融合
+
+还没有真正的 token classification 层。
+
+---
+
+## 31. 一句话总结当前项目真实流程
+
+当前项目的真实运行方式可以概括为:
+
+```text
+FastAPI 接收请求
+-> AgentService 读取 session
+-> 先处理 stop / social
+-> rewrite 做短句补全
+-> keyword/classifier/retrieval 多阶段并行打分
+-> fusion 决定 execute / clarify / reject / route_to_cloud
+-> 复杂句触发 local-first planner
+-> 生成 single/sequence/conditional workflow
+-> 缺槽位就 ask_slot
+-> 高风险就 ask_confirmation
+-> PluginRegistry 执行
+-> ResponsePolicy 生成最终自然回复
+-> Session 持久化并返回完整 debug 与时延指标
+```
+
+---
+
+## 32. 后续阅读建议
+
+如果要继续往下深挖,建议按这个顺序看代码:
+
+1. `app/main.py`
+2. `app/core/bootstrap.py`
+3. `app/services/agent_service.py`
+4. `app/services/router.py`
+5. `app/services/planner.py`
+6. `app/services/classifier.py`
+7. `app/services/multi_intent_detector.py`
+8. `app/services/rewrite_engine.py`
+9. `app/services/social.py`
+10. `app/services/session_store.py`
+11. `config/domain.yml`
+12. `config/workflows.yml`
+
diff --git a/intelligent_cabin/archive/docs/design.md b/intelligent_cabin/archive/docs/design.md
new file mode 100644
index 0000000..938d01b
--- /dev/null
+++ b/intelligent_cabin/archive/docs/design.md
@@ -0,0 +1,2104 @@
+# 面向客服/售后/前台/智能座舱的高响应 Agent 技术方案
+
+## 1. 文档目标
+
+本文档用于设计一套可落地的 Agent 系统,满足以下核心诉求:
+
+- 响应快:用户发起操作后,系统能够在极短时间内给出首响应或执行反馈。
+- 执行准:对高频业务请求识别准确,对复杂请求可拆解、可校验、可执行。
+- 可多轮:支持上下文记忆、槽位补全、断点续跑和任务恢复。
+- 可扩展:适配客服、售后、前台接待、智能座舱等不同业务场景。
+- 可运营:意图、槽位、规则、话术、插件均支持配置化管理。
+
+本方案不是单纯的问答机器人,而是一个“可理解用户意图、可生成执行计划、可调用业务能力完成任务”的 Agent 平台。
+
+## 2. 目标场景
+
+### 2.1 客服场景
+
+- 查询订单、物流、退款进度
+- 识别催单、投诉、转人工、取消订单等诉求
+- 多轮追问补全订单号、手机号、收货人等信息
+
+### 2.2 售后场景
+
+- 退货、换货、维修、预约上门
+- 收集故障描述、图片、时间、地址等槽位
+- 根据政策规则决定是否可直接处理、升级或转人工
+
+### 2.3 前台场景
+
+- 来访登记、会议室预约、路线引导、通知被访人
+- 识别身份、预约信息、时间、地点等关键字段
+- 支持多步骤任务执行和结果确认
+
+### 2.4 智能座舱场景
+
+- 导航、空调、车窗、音乐、电话、座椅等车控指令
+- 识别复合指令,如“打开空调并导航去公司”
+- 在驾驶场景下保证低延迟、强确定性和安全边界
+
+## 3. 总体设计原则
+
+### 3.1 快慢分层
+
+高频、标准化、可确定执行的请求走“快路径”;复杂、低频、跨任务、带条件逻辑的请求走“慢路径”。
+
+- 快路径:小模型分类 + 规则校验 + 直接执行
+- 慢路径:RAG 召回 + LLM 精判 + 工作流生成 + 插件执行
+
+这样可以同时满足“响应速度”和“复杂理解能力”。
+
+### 3.2 LLM 不直接控制业务
+
+LLM 只负责:
+
+- 意图识别与精判
+- 多意图拆分
+- 槽位提取
+- 执行计划生成
+- 回复文案生成
+
+真正的业务执行由规则引擎、状态管理器和插件执行器完成,避免 LLM 幻觉带来的误操作。
+
+### 3.3 会话状态中心是核心
+
+多轮对话不能依赖模型“记忆”,必须建设独立的 Session State。
+
+状态中心负责:
+
+- 保存当前会话上下文
+- 保存已识别意图和已填充槽位
+- 保存当前任务状态和执行进度
+- 记录待补充信息和断点恢复位置
+
+### 3.4 配置优先、插件扩展
+
+以下能力尽量配置化,而不是写死在代码中:
+
+- 意图定义
+- 槽位定义
+- 规则表达式
+- 反问话术
+- 权限与风控限制
+- 插件路由关系
+
+## 4. 建设目标
+
+### 4.1 业务目标
+
+- 支持不少于 100 个可配置意图
+- 支持单意图、多意图、条件意图三类输入
+- 支持跨轮补充槽位并继续执行
+- 支持知识问答、事务办理、设备控制三类能力
+
+### 4.2 体验目标
+
+- 首字响应时间小于 800ms
+- 高频标准请求平均响应时间 500ms 到 1500ms
+- 复杂规划请求平均响应时间 1500ms 到 3500ms
+- 多轮槽位补全过程中保持上下文一致
+
+### 4.3 质量目标
+
+- 高频意图识别准确率大于 95%
+- 槽位抽取 F1 大于 90%
+- 高风险动作误执行率接近 0
+- 转人工触发符合业务策略并可追踪
+
+## 5. 能力边界与功能点
+
+### 5.1 核心能力
+
+- 意图识别:识别用户到底要做什么
+- 槽位提取:提取时间、地点、金额、对象、设备等参数
+- 多意图拆分:识别一句话中多个任务
+- 逻辑解析:识别顺序、条件、重试、并行关系
+- 会话管理:跟踪当前任务、历史轮次和上下文变量
+- 任务执行:调用业务接口、设备控制接口或人工服务接口
+- 结果回复:结构化返回执行结果,必要时生成自然语言
+
+### 5.2 平台能力
+
+- 意图知识库管理
+- 规则与话术配置平台
+- 插件注册中心
+- 会话状态存储
+- 指标监控与日志追踪
+- 安全审计与权限控制
+
+### 5.3 场景化能力
+
+- 客服:FAQ、工单、订单操作、转人工
+- 售后:退换修、预约、故障诊断、流程推进
+- 前台:访客接待、通知、预约、引导
+- 智能座舱:设备控制、导航、多设备联动、安全确认
+
+## 6. 系统总体架构
+
+```text
+用户输入
+ -> 接入层(Web/App/语音/车机)
+ -> 预处理层(ASR/文本归一化/敏感词/语言检测)
+ -> 路由层
+ -> 快路径:意图分类模型 + 规则匹配 + 插件执行
+ -> 慢路径:向量召回 + LLM 精判 + Workflow 生成
+ -> 状态中心(Session/Context/Slots/Current Step)
+ -> 执行引擎(规则引擎 + 插件调度 + 断点恢复)
+ -> 回复生成层(模板/LLM)
+ -> 用户
+```
+
+## 7. 核心处理链路
+
+### 7.1 快路径
+
+适用于客服、前台、座舱中的高频标准请求,例如:
+
+- “查一下我的订单”
+- “打开空调”
+- “帮我通知张三来前台”
+
+执行流程:
+
+1. 对输入做标准化与轻量实体提取
+2. 进入轻量意图分类模型
+3. 命中高置信度意图后,进行槽位校验
+4. 槽位齐全则直接调用插件执行
+5. 槽位缺失则触发反问并记录状态
+
+优势:
+
+- 延迟低
+- 成本低
+- 可控性强
+
+### 7.2 慢路径
+
+适用于复杂请求,例如:
+
+- “帮我查一下订单,如果还没发货就取消”
+- “导航去公司,然后把空调调到 22 度,再给我播放轻音乐”
+- “我要退货,若超过 7 天就帮我转人工”
+
+执行流程:
+
+1. 向量召回 Top-K 候选意图
+2. LLM 对候选意图做精判
+3. 对输入做多意图拆分
+4. 生成结构化 Workflow JSON
+5. 执行引擎按步骤调度插件
+6. 缺槽位时暂停并反问
+7. 用户补充后从断点恢复执行
+
+## 8. 推荐的多层 Agent 架构
+
+### 8.1 第 1 层:输入理解层
+
+职责:
+
+- 文本清洗
+- 口语归一化
+- 同义词映射
+- 设备指令别名统一
+- 敏感/危险指令预过滤
+
+### 8.2 第 2 层:意图路由层
+
+职责:
+
+- 判断是否命中高频快路径
+- 判断是否需要进入复杂规划链路
+- 判断是问答类、事务类还是控制类任务
+
+推荐策略:
+
+- 高频意图使用专门分类器
+- 低频和新增意图使用向量召回
+- 复杂指令交给 LLM 做精判和拆解
+
+### 8.3 第 3 层:会话状态层
+
+核心数据:
+
+- session_id
+- user_id / device_id
+- current_intent
+- current_workflow
+- completed_steps
+- pending_slots
+- business_context
+- risk_level
+
+### 8.4 第 4 层:执行编排层
+
+职责:
+
+- 执行工作流
+- 管理步骤状态
+- 根据规则判断分支
+- 调用插件
+- 处理重试、超时和回滚
+
+### 8.5 第 5 层:能力插件层
+
+插件示例:
+
+- 查询订单插件
+- 取消订单插件
+- 创建售后工单插件
+- 访客登记插件
+- 通知员工插件
+- 导航插件
+- 空调控制插件
+- 音乐控制插件
+
+### 8.6 第 6 层:回复生成层
+
+优先级建议:
+
+- 优先模板化返回
+- 复杂解释场景再用 LLM 生成自然语言
+- 高风险动作必须做明确确认和结果回执
+
+## 9. 意图、槽位、工作流设计
+
+### 9.1 意图设计
+
+建议每个意图至少包含:
+
+- intent_id
+- intent_name
+- domain
+- description
+- examples
+- boundary
+- required_slots
+- optional_slots
+- execution_plugin
+- risk_level
+
+示例:
+
+```json
+{
+ "intent_id": "cabin_set_ac_temperature",
+ "intent_name": "设置空调温度",
+ "domain": "cabin_control",
+ "required_slots": ["temperature"],
+ "optional_slots": ["zone"],
+ "execution_plugin": "ac_control_plugin",
+ "risk_level": "low"
+}
+```
+
+### 9.2 槽位设计
+
+每个槽位建议配置:
+
+- 名称
+- 类型
+- 是否必填
+- 默认值
+- 校验规则
+- 提问模板
+- 错误提示
+- 来源优先级
+
+### 9.3 Workflow 设计
+
+复杂请求最终统一转成结构化执行计划。
+
+示例:
+
+```json
+{
+ "workflow_id": "wf_1001",
+ "logic_type": "sequence",
+ "steps": [
+ {
+ "step": 1,
+ "intent": "query_order_status",
+ "slots": {
+ "order_id": "A123"
+ }
+ },
+ {
+ "step": 2,
+ "condition": "order_status == 'pending_shipment'",
+ "intent": "cancel_order"
+ }
+ ]
+}
+```
+
+## 10. 多轮对话设计
+
+### 10.1 多轮的本质
+
+多轮不是每一轮都重新做完整识别,而是:
+
+- 首轮生成任务或命中任务
+- 后续轮次只做补槽位、确认、修正、继续执行
+
+### 10.2 状态机设计
+
+建议会话状态包括:
+
+- `idle`:空闲
+- `understanding`:理解中
+- `waiting_slot`:等待用户补充信息
+- `ready_to_execute`:准备执行
+- `executing`:执行中
+- `paused`:中断等待
+- `completed`:完成
+- `fallback`:兜底或转人工
+
+### 10.3 断点续跑
+
+示例:
+
+1. 用户说“我要退货”
+2. 系统识别退货意图,但缺少订单号
+3. 系统反问“请提供订单号”
+4. 用户回复“A123”
+5. 系统只做槽位提取,不重新做全量规划
+6. 系统恢复原任务继续执行
+
+### 10.4 多轮省略恢复与上下文改写
+
+参考车机场景的公开方案,多轮对话不能只靠“读取上一轮状态”,还应增加“相邻轮改写”和“高频缓存命中”能力。
+
+适用场景:
+
+- “音量调大” -> “再大一点”
+- “导航去公司” -> “不要高速”
+- “查一下北京天气” -> “上海呢”
+
+建议新增一层 `context rewrite engine`,位于 `Session State` 和 `Router` 之间:
+
+1. 读取上一轮已确认的主任务、领域和关键槽位
+2. 将“当前轮短句 + 上一轮已确认语义”送入高频缓存引擎查询
+3. 若命中缓存模板,直接改写为完整指令
+4. 若缓存未命中,再使用轻量改写模型生成补全后的标准句
+5. 改写后再进入意图识别与槽位提取
+
+示例:
+
+- 上一轮:`空调调高`
+- 当前轮:`再高一点`
+- 改写后:`把空调温度再调高一点`
+
+缓存建议:
+
+- key:`previous_intent + current_utterance_pattern`
+- value:`rewritten_text / target_intent / slot_delta`
+- 数据来源:高频真实语料、线上点击日志、人工标注样本
+
+收益:
+
+- 显著提升省略表达、连续调节、改口表达的识别率
+- 避免每一轮都走完整大模型规划
+- 将多轮短句场景时延压缩到接近单轮快路径
+
+## 11. 模型方案
+
+### 11.1 选型原则
+
+- 高频场景优先低延迟
+- 复杂场景优先理解能力
+- 高风险场景优先可控和可审计
+- 模型职责必须拆开,不要一个模型包打天下
+
+### 11.2 推荐模型组合
+
+#### A. 轻量意图识别模型
+
+用途:
+
+- 高频标准请求分类
+- 第一时间做快路径路由
+
+推荐方向:
+
+- BERT / RoBERTa 中文分类模型
+- 小型指令模型蒸馏版
+- ONNX / TensorRT 部署后的轻量分类模型
+
+适合场景:
+
+- 客服高频查询
+- 前台固定流程
+- 座舱高频控制
+
+#### B. 向量召回模型
+
+用途:
+
+- 动态意图库检索
+- 召回候选意图与候选技能
+
+推荐方向:
+
+- BGE-M3
+- BCE Embedding
+- text-embedding 系列中文向量模型
+
+#### C. 主 LLM
+
+用途:
+
+- 候选意图精判
+- 多意图拆分
+- 槽位抽取
+- Workflow 生成
+- 自然语言回复
+
+推荐方向:
+
+- 通义千问系列
+- DeepSeek 系列
+- GLM 系列
+- GPT 类模型
+
+建议:
+
+- 线上使用支持函数调用、结构化输出、低温度推理的模型
+- 对复杂规划与多轮状态更新使用 JSON schema 约束输出
+
+#### D. ASR / TTS 模型
+
+用于前台语音交互和智能座舱:
+
+- ASR:语音转文本
+- TTS:语音播报反馈
+- VAD:语音活动检测,提升交互流畅度
+
+### 11.3 推荐模型职责拆分
+
+- 小模型:意图分类、风险识别、简单槽位抽取
+- 向量模型:候选意图召回
+- 大模型:复杂理解、规划和自然语言生成
+- 规则引擎:确定性判断与业务约束
+
+这是兼顾速度、成本和准确性的最佳组合。
+
+### 11.4 端云协同模型分工
+
+要达到接近车机助手的体验,必须采用“本地优先、云端增强、结果融合”的模型架构,而不是所有请求都走一个远端大模型。
+
+建议分工如下:
+
+- 本地 ASR / 文本归一化:负责第一时间得到稳定文本或拼音特征
+- 本地快分支 1:关键词/规则/Trie 高频模式匹配
+- 本地快分支 2:轻量 BERT 意图分类模型
+- 本地快分支 3:多轮缓存改写 + 连续调节识别
+- 本地快分支 4:轻量检索或 FAQ 命中
+- 云端慢分支:复杂语义理解、多意图拆分、条件规划、知识问答、RAG、API 预测
+
+融合原则:
+
+- 本地结果若达到最高置信等级,则直接触发首响应与本地执行
+- 云端结果若在可接受时间窗口内返回,则可覆盖或补充本地结果
+- 对高风险动作,云端只能提供建议,最终执行仍由规则与插件层裁决
+
+### 11.5 声学语义大模型的落地方式
+
+参考公开专利中的“声学编码 + 字符转写 + 检索增强 + 大模型”思路,后续如果要做语音版车机,不建议继续把 ASR、NLU、知识检索和 API 预测完全割裂成独立长链路。
+
+推荐两阶段落地:
+
+- 第一期:保留模块化工程架构,但缩短串行链路,做到 `ASR -> local router -> plugin/cloud planner`
+- 第二期:引入端到端语音语义模型,使其直接输出:
+ - intent
+ - slots
+ - candidate_api
+ - reject / clarify / execute decision
+
+这样可以同时保留工程可控性和后续车机语音体验的升级空间。
+
+## 12. 技术栈建议
+
+### 12.1 服务端
+
+- Python:适合快速构建 AI 编排、模型接入、规则处理
+- FastAPI:提供高性能 API 服务
+- Celery / 队列系统:处理异步任务和外部接口调用
+
+如果团队更偏 Java,也可使用:
+
+- Java + Spring Boot
+- LangChain4j 或自研 Agent 编排层
+
+### 12.2 检索与存储
+
+- Redis:会话状态、热点缓存、限流计数
+- PostgreSQL:业务数据、配置中心、日志审计
+- Elasticsearch:检索与日志分析
+- Qdrant / Milvus:向量检索与意图知识库召回
+
+### 12.3 Agent 编排与规则
+
+- 自研 Workflow Engine 或基于状态机的编排引擎
+- JSON Schema:约束结构化输出
+- 规则引擎:表达式解析、条件判断、路由控制
+
+### 12.4 前端与接入
+
+- Web 前端 / App SDK
+- 呼叫中心接入
+- 企业 IM 接入
+- 车机系统接入
+- 语音网关接入
+
+### 12.5 可观测与运维
+
+- Prometheus + Grafana:监控
+- OpenTelemetry:链路追踪
+- Loki / ELK:日志采集与分析
+
+## 13. 响应速度优化方案
+
+这是本系统成败的关键。
+
+### 13.1 低延迟设计
+
+- 高频意图前置分类,不直接把所有请求都交给 LLM
+- 热门意图和常用知识走缓存
+- 首响应和最终响应分离,先反馈“正在处理”
+- LLM 使用流式输出
+- 复杂任务异步执行,前台先返回受理状态
+
+### 13.2 结构化提速
+
+- 只给 LLM 候选意图,不让模型自由发散
+- 后续轮次只做槽位提取,不重复做全流程规划
+- 采用模板化回复代替不必要的长文本生成
+
+### 13.3 工程提速
+
+- 模型服务常驻内存
+- Embedding 批量化和缓存
+- 插件接口超时控制与降级
+- 预加载高频配置与词典
+
+### 13.4 参考车机方案的极速响应架构
+
+为了逼近“小鹏 P7 类”体验,建议在当前快慢路径基础上,升级为“本地多支路并发 + 结果分级融合 + 云端延迟覆盖”的架构。
+
+```text
+用户输入
+ -> 并发启动本地多支路
+ -> Branch A: keyword / rule / trie
+ -> Branch B: local bert classifier
+ -> Branch C: context rewrite + cache engine
+ -> Branch D: retrieval matcher
+ -> 结果分级器
+ -> high grade: 直接首响应 / 直接执行
+ -> medium grade: 等待 100~300ms 观察其他分支
+ -> low grade: 进入云端理解
+ -> 云端 planner / rag / llm
+ -> 融合器输出目标结果
+```
+
+分级融合建议使用以下特征:
+
+- ASR 置信度 / 清晰度
+- 本地意图分类置信度
+- 领域置信度
+- 槽位完备度
+- 是否命中高频缓存
+- 是否命中历史会话上下文
+- 是否属于高风险动作
+
+推荐时延预算:
+
+- 0~150ms:文本标准化、关键词、Trie、缓存改写
+- 150~350ms:本地 BERT / 本地检索 / 本地槽位提取
+- 350~600ms:返回首响应或执行简单任务
+- 600~1500ms:云端补充复杂理解或条件规划结果
+
+首响应策略:
+
+- 能本地直接执行的,优先回短反馈,如“好的,正在导航”
+- 需要云端复杂规划的,先回受理反馈,如“收到,我先帮你确认一下”
+- 云端超时不阻塞首响应,必要时走兜底或稍后补充结果
+
+该策略是实现 `<1s` 体验的关键,不要求所有任务都在 1 秒内完成,但要求绝大多数任务在 1 秒内给出可感知反馈。
+
+## 14. 准确率与执行可靠性设计
+
+### 14.1 准确率保障
+
+- 高频意图单独建模
+- 意图边界描述清晰化
+- 引入负样本和相似意图对比训练
+- 使用 RAG 缩小候选范围后再让 LLM 精判
+
+### 14.2 执行可靠性保障
+
+- 高风险动作必须二次确认
+- 插件执行前后都记录审计日志
+- 核心步骤支持幂等、重试和回滚
+- 输出必须是结构化结果,禁止自由文本直接驱动操作
+
+### 14.3 风控策略
+
+- 敏感词和危险动作拦截
+- 用户身份和权限校验
+- 场景安全等级区分
+- 智能座舱中行车状态下限制高风险控制动作
+
+### 14.4 多命令拆分与任务栈
+
+为了支持“打开空调并导航去公司,再播放轻音乐”这一类车机复合指令,建议在路由层之后增加 `command splitter` 和 `task stack manager`。
+
+输出结构建议:
+
+```json
+{
+ "task_id": "task_001",
+ "logic_type": "sequence",
+ "commands": [
+ {"intent": "cabin_set_ac", "slots": {"temperature": 22}},
+ {"intent": "cabin_nav_to", "slots": {"destination": "公司"}},
+ {"intent": "cabin_play_music", "slots": {"genre": "轻音乐"}}
+ ]
+}
+```
+
+执行要求:
+
+- 简单并列命令支持顺序执行
+- 需要条件判断的命令转为 workflow condition
+- 允许用户在执行中打断、改口和取消后续任务
+- 为每个任务保留任务栈、当前步骤和已完成步骤
+
+打断策略:
+
+- 新请求与当前任务冲突时,允许暂停旧任务并保存上下文
+- 明确打断词出现时,清空当前任务栈或清理对应子任务上下文
+- 对高风险动作,打断后不得默认自动恢复
+
+### 14.5 拒答、澄清与简短反馈策略
+
+要实现“反馈迅速而简短,不会的内容有合适拒绝话术”,不能只靠模型生成,应建设统一的 `response policy layer`。
+
+回复规则:
+
+- 简单执行成功:一句话短反馈,长度优先控制在 8~20 个字
+- 缺槽位:只追问一个最关键槽位,不一次性问太多
+- 不支持的请求:明确说明边界并给出可做事项
+- 风险动作:先确认再执行
+- 云端失败:给出降级反馈,不暴露内部错误
+
+建议内置 5 类模板:
+
+- `ack`:收到,马上处理
+- `clarify`:信息不够,请补一个关键字段
+- `confirm`:高风险动作确认
+- `reject`:能力边界拒答
+- `fallback`:系统忙或结果不稳定时的兜底
+
+示例:
+
+- `ack`:`好的,正在为你导航`
+- `clarify`:`请告诉我订单号`
+- `confirm`:`确认要取消这个订单吗`
+- `reject`:`这个我暂时做不了,但我可以帮你导航、查订单或调空调`
+- `fallback`:`我先记下你的需求,稍后再试一次`
+
+核心原则:
+
+- 首反馈短
+- 首反馈稳
+- 不会就明确拒答
+- 不确定就先澄清
+- 不让模型自由发挥高风险话术
+
+## 15. 配置化设计
+
+建议把以下内容全部放入配置中心:
+
+- 意图定义
+- 槽位定义
+- 规则表达式
+- 反问模板
+- 插件映射
+- 风险等级
+- 转人工策略
+- 场景开关
+
+这样新增业务时,尽量做到“不改核心代码,只加配置和插件”。
+
+## 16. 效果预期
+
+### 16.1 对业务的价值
+
+- 降低人工客服和前台重复劳动
+- 提升售后处理自动化比例
+- 提高智能座舱交互的自然度和完成率
+- 缩短用户从提问到执行完成的路径
+
+### 16.2 对用户的体验
+
+- 回答更快
+- 多轮更顺
+- 执行更稳
+- 出错可解释
+- 失败可转人工
+
+### 16.3 可量化指标
+
+- 首响应耗时
+- 请求完成率
+- 单轮解决率
+- 多轮补槽成功率
+- 插件执行成功率
+- 转人工率
+- 用户满意度
+
+## 17. 分阶段落地建议
+
+### 17.1 第一阶段:POC
+
+目标:
+
+- 先验证快路径和多轮补槽是否可用
+
+范围:
+
+- 10 到 20 个高频意图
+- 单领域试点,如客服或智能座舱
+
+方案:
+
+- 轻量分类模型 + Redis 状态中心 + 少量插件 + 模板回复
+
+### 17.2 第二阶段:商用 MVP
+
+目标:
+
+- 覆盖主要业务链路,支持转人工和监控闭环
+
+范围:
+
+- 50 到 100 个意图
+- 问答 + 事务 + 执行三类能力
+
+方案:
+
+- 分类模型 + 向量召回 + LLM 精判 + 执行引擎 + 配置中心
+
+### 17.3 第三阶段:平台化
+
+目标:
+
+- 多场景复用,支持客服、售后、前台、座舱统一底座
+
+范围:
+
+- 多租户、多场景、多插件
+
+方案:
+
+- 插件平台、规则平台、意图库平台、评测平台、可观测平台全面建设
+
+## 18. 最终建议
+
+对于“回答迅速且执行准确”的 Agent,不建议直接用单一大模型硬做,而应采用以下混合架构:
+
+- 高频请求:小模型分类直达执行
+- 动态意图:向量召回缩小范围
+- 复杂请求:LLM 做拆分、精判和工作流生成
+- 多轮会话:状态中心负责记忆与恢复
+- 最终执行:插件和规则引擎负责落地
+
+一句话总结:
+
+这是一个“快路径保证速度、慢路径保证理解、状态中心保证多轮、插件执行保证结果”的 Agent 架构。
+
+如果后续继续推进,下一步建议补两份文档:
+
+- 一份《系统架构图 + 时序图》
+- 一份《意图表、槽位表、插件表、接口协议表》
+
+## 19. 系统架构图
+
+### 19.1 总体架构图
+
+```mermaid
+flowchart LR
+ A[用户
App / Web / 呼叫中心 / 车机] --> B[接入层
API Gateway / WS / 语音网关]
+ B --> C[预处理层
ASR / 文本归一化 / 安全过滤 / 语言识别]
+ C --> D[意图路由层]
+
+ D --> E[快路径
轻量分类模型 + 规则匹配]
+ D --> F[慢路径
向量召回 + LLM 精判 + Workflow 生成]
+
+ E --> G[槽位校验]
+ F --> H[复杂任务解析]
+
+ G --> I[状态中心
Session / Slots / Context / Current Step]
+ H --> I
+
+ I --> J[执行引擎
状态机 / 规则引擎 / 插件调度]
+ J --> K[插件层
订单 / 售后 / 前台 / 座舱 / 转人工]
+
+ K --> L[业务系统
CRM / ERP / 工单 / 地图 / IoT / 车控]
+ J --> M[回复生成层
模板回复 / LLM 润色 / TTS]
+ M --> N[用户反馈]
+
+ I --> O[Redis]
+ J --> P[PostgreSQL]
+ F --> Q[向量库 Qdrant / Milvus]
+ J --> R[监控审计
日志 / Trace / Metrics]
+```
+
+### 19.2 模块职责说明
+
+- 接入层:统一承接文本、语音、车机和 IM 渠道请求。
+- 预处理层:负责 ASR、文本标准化、敏感词过滤、别名归一。
+- 意图路由层:判断进入快路径还是慢路径。
+- 状态中心:保存会话、槽位、上下文和当前执行进度。
+- 执行引擎:按规则与工作流调度插件,控制暂停、恢复、重试和回滚。
+- 插件层:承接具体业务动作,保证执行可控和可审计。
+
+## 20. 核心时序图
+
+### 20.1 高频请求快路径时序图
+
+适用场景:
+
+- “打开空调”
+- “查询订单”
+- “通知张三到前台”
+
+```mermaid
+sequenceDiagram
+ participant U as 用户
+ participant G as 接入层
+ participant R as 路由层
+ participant C as 轻量分类模型
+ participant S as 状态中心
+ participant E as 执行引擎
+ participant P as 业务插件
+ participant B as 业务系统
+
+ U->>G: 发起请求
+ G->>R: 预处理后的文本
+ R->>C: 意图分类
+ C-->>R: 高频意图 + 置信度
+ R->>S: 读取/更新会话状态
+ R->>E: 发起执行请求
+ E->>P: 调用目标插件
+ P->>B: 调用业务接口
+ B-->>P: 返回结果
+ P-->>E: 执行结果
+ E->>S: 更新步骤状态
+ E-->>G: 结构化结果
+ G-->>U: 返回执行结果
+```
+
+### 20.2 复杂请求慢路径时序图
+
+适用场景:
+
+- “查订单,如果没发货就取消”
+- “导航去公司,再把空调调到 22 度”
+
+```mermaid
+sequenceDiagram
+ participant U as 用户
+ participant G as 接入层
+ participant R as 路由层
+ participant V as 向量召回
+ participant L as LLM
+ participant S as 状态中心
+ participant E as 执行引擎
+ participant P as 插件层
+
+ U->>G: 发起复杂请求
+ G->>R: 预处理后的输入
+ R->>V: 召回候选意图 Top-K
+ V-->>R: 候选意图列表
+ R->>L: 候选意图 + 用户输入
+ L-->>R: 精判结果 + Workflow JSON
+ R->>S: 保存 workflow 和 slots
+ R->>E: 启动执行
+ E->>P: 按步骤调度插件
+ P-->>E: 每步执行结果
+ E->>S: 更新 current_step / context
+ E-->>G: 汇总结果
+ G-->>U: 返回执行反馈
+```
+
+### 20.3 多轮补槽与断点续跑时序图
+
+适用场景:
+
+- “我要退货”
+- “帮我预约维修”
+- “导航去机场,走高速”
+
+```mermaid
+sequenceDiagram
+ participant U as 用户
+ participant G as 接入层
+ participant R as 路由层
+ participant L as LLM/抽取模型
+ participant S as 状态中心
+ participant E as 执行引擎
+ participant P as 插件层
+
+ U->>G: 我要退货
+ G->>R: 首轮请求
+ R->>L: 识别意图并抽取槽位
+ L-->>R: 退货意图,缺少 order_id
+ R->>S: 保存 pending_slots=order_id
+ R-->>G: 生成追问
+ G-->>U: 请提供订单号
+
+ U->>G: A123456
+ G->>S: 带 session_id 读取上下文
+ S-->>G: 返回待补槽位信息
+ G->>L: 仅做槽位提取
+ L-->>G: order_id=A123456
+ G->>S: 更新槽位并置为 ready_to_execute
+ G->>E: 从断点恢复执行
+ E->>P: 调用退货插件
+ P-->>E: 返回结果
+ E->>S: 更新为 completed
+ E-->>G: 执行成功
+ G-->>U: 已为你提交退货申请
+```
+
+## 21. 场景执行图
+
+### 21.1 智能座舱复合指令执行图
+
+示例指令:
+
+- “打开空调到 22 度,导航去公司,再播放轻音乐”
+
+```mermaid
+flowchart TD
+ A[用户输入复合指令] --> B[意图拆分]
+ B --> C1[设置空调]
+ B --> C2[导航到公司]
+ B --> C3[播放轻音乐]
+
+ C1 --> D[槽位校验 temperature=22]
+ C2 --> E[槽位校验 destination=公司]
+ C3 --> F[槽位校验 genre=轻音乐]
+
+ D --> G[空调插件]
+ E --> H[导航插件]
+ F --> I[音乐插件]
+
+ G --> J[更新座舱上下文]
+ H --> J
+ I --> J
+ J --> K[统一反馈执行结果]
+```
+
+### 21.2 客服售后条件流程图
+
+示例指令:
+
+- “帮我查订单,如果还没发货就取消”
+
+```mermaid
+flowchart TD
+ A[用户输入] --> B[识别查询订单 + 取消订单]
+ B --> C[生成条件工作流]
+ C --> D[执行查询订单插件]
+ D --> E{是否已发货}
+ E -- 否 --> F[执行取消订单插件]
+ E -- 是 --> G[返回不可取消说明]
+ F --> H[返回取消成功]
+ G --> I[结束]
+ H --> I
+```
+
+## 22. 时序图对应的工程说明
+
+### 22.1 为什么要先路由再规划
+
+- 不是所有请求都需要 LLM。
+- 高频请求先经过快路径,能够显著降低响应延迟和调用成本。
+- 复杂请求才进入召回与规划链路,保证资源集中用在真正困难的问题上。
+
+### 22.2 为什么多轮只做补槽不重规划
+
+- 这样可以减少模型重复推理,显著缩短第二轮及后续轮次响应时间。
+- 可以避免上下文漂移,保证任务持续围绕原始目标推进。
+- 更适合客服、售后、前台、座舱这类明确任务型交互。
+
+### 22.3 为什么执行一定要经过状态中心
+
+- 执行过程需要可追踪、可暂停、可恢复。
+- 插件失败、超时、用户打断等情况都需要状态中心统一管理。
+- 后续做审计、风控、会话分析时,也必须依赖完整状态记录。
+
+## 23. 下一步详细设计建议
+
+在当前架构图和时序图基础上,建议下一步输出以下内容:
+
+1. 意图清单:按客服、售后、前台、座舱四大域拆分。
+2. 槽位字典:定义每个意图所需字段、校验规则和追问模板。
+3. 插件接口表:定义入参、出参、幂等键、超时与错误码。
+4. MVP 范围:先选 10 到 20 个高频意图,构建第一版闭环。
+
+## 24. 意图清单初稿
+
+### 24.1 字段说明
+
+建议每个意图至少包含以下字段:
+
+- `intent_id`:意图唯一标识
+- `intent_name`:意图名称
+- `domain`:所属业务域
+- `type`:问答 / 事务 / 控制
+- `priority`:优先级
+- `risk_level`:风险等级
+- `entry_path`:快路径 / 慢路径
+- `required_slots`:必填槽位
+- `plugin_id`:执行插件标识
+
+### 24.2 客服域意图表
+
+| intent_id | intent_name | type | risk_level | entry_path | required_slots | plugin_id |
+| --- | --- | --- | --- | --- | --- | --- |
+| cs_query_order | 查询订单状态 | 事务 | low | 快路径 | order_id | plugin.order.query |
+| cs_query_logistics | 查询物流 | 事务 | low | 快路径 | order_id | plugin.logistics.query |
+| cs_cancel_order | 取消订单 | 事务 | medium | 快路径 | order_id | plugin.order.cancel |
+| cs_refund_status | 查询退款进度 | 事务 | low | 快路径 | refund_id/order_id | plugin.refund.query |
+| cs_transfer_human | 转人工 | 事务 | low | 快路径 | reason | plugin.service.transfer_human |
+| cs_complaint_submit | 提交投诉 | 事务 | medium | 慢路径 | complaint_type, content | plugin.ticket.complaint |
+
+### 24.3 售后域意图表
+
+| intent_id | intent_name | type | risk_level | entry_path | required_slots | plugin_id |
+| --- | --- | --- | --- | --- | --- | --- |
+| af_apply_return | 申请退货 | 事务 | medium | 快路径 | order_id, reason | plugin.aftersale.return |
+| af_apply_exchange | 申请换货 | 事务 | medium | 慢路径 | order_id, reason | plugin.aftersale.exchange |
+| af_apply_repair | 申请维修 | 事务 | medium | 慢路径 | product_id, fault_desc | plugin.aftersale.repair |
+| af_book_service | 预约上门服务 | 事务 | medium | 慢路径 | address, time_range, phone | plugin.aftersale.booking |
+| af_query_ticket | 查询工单进度 | 事务 | low | 快路径 | ticket_id | plugin.ticket.query |
+| af_upload_material | 补充售后材料 | 事务 | low | 快路径 | ticket_id, material_type | plugin.ticket.material |
+
+### 24.4 前台域意图表
+
+| intent_id | intent_name | type | risk_level | entry_path | required_slots | plugin_id |
+| --- | --- | --- | --- | --- | --- | --- |
+| front_visitor_register | 来访登记 | 事务 | medium | 慢路径 | visitor_name, phone, host_name | plugin.frontdesk.visitor_register |
+| front_notify_host | 通知被访人 | 事务 | low | 快路径 | host_name | plugin.frontdesk.notify_host |
+| front_book_meeting_room | 预约会议室 | 事务 | medium | 慢路径 | room_name, start_time, end_time | plugin.frontdesk.book_room |
+| front_route_guide | 路线引导 | 问答 | low | 快路径 | destination | plugin.frontdesk.route_guide |
+| front_check_appointment | 查询预约信息 | 事务 | low | 快路径 | phone/appointment_id | plugin.frontdesk.query_appointment |
+| front_print_badge | 打印访客证 | 控制 | medium | 快路径 | visitor_name, company | plugin.frontdesk.print_badge |
+
+### 24.5 智能座舱域意图表
+
+| intent_id | intent_name | type | risk_level | entry_path | required_slots | plugin_id |
+| --- | --- | --- | --- | --- | --- | --- |
+| cabin_nav_to | 导航到目的地 | 控制 | medium | 快路径 | destination | plugin.cabin.navigation |
+| cabin_set_ac | 设置空调 | 控制 | low | 快路径 | temperature | plugin.cabin.ac_control |
+| cabin_window_control | 控制车窗 | 控制 | medium | 快路径 | position, action | plugin.cabin.window_control |
+| cabin_play_music | 播放音乐 | 控制 | low | 快路径 | song/genre | plugin.cabin.music_play |
+| cabin_call_contact | 拨打电话 | 控制 | high | 慢路径 | contact_name | plugin.cabin.call_contact |
+| cabin_multi_command | 复合指令执行 | 控制 | medium | 慢路径 | workflow | plugin.cabin.workflow_executor |
+
+### 24.6 通用兜底意图
+
+| intent_id | intent_name | type | risk_level | entry_path | required_slots | plugin_id |
+| --- | --- | --- | --- | --- | --- | --- |
+| common_faq | 知识问答 | 问答 | low | 快路径 | 无 | plugin.knowledge.faq |
+| common_clarify | 澄清意图 | 问答 | low | 慢路径 | 无 | plugin.dialog.clarify |
+| common_reject | 拒绝执行 | 问答 | high | 快路径 | 无 | plugin.guard.reject |
+| common_fallback | 兜底处理 | 问答 | low | 慢路径 | 无 | plugin.dialog.fallback |
+
+## 25. 槽位字典初稿
+
+### 25.1 通用槽位表
+
+| slot_name | type | required | example | validate_rule | ask_template | used_by |
+| --- | --- | --- | --- | --- | --- | --- |
+| order_id | string | 是 | A123456 | 长度 6-32,字母数字 | 请提供订单号 | 客服、售后 |
+| refund_id | string | 否 | R2025001 | 长度 6-32 | 请提供退款单号 | 客服 |
+| ticket_id | string | 是 | T90001 | 长度 4-32 | 请提供工单号 | 售后 |
+| appointment_id | string | 否 | AP2026001 | 长度 4-32 | 请提供预约编号 | 前台 |
+| product_id | string | 是 | SKU12345 | 长度 4-64 | 请提供商品编号或设备编号 | 售后 |
+| reason | string | 是 | 不想要了 | 长度 2-200 | 请说明原因 | 客服、售后 |
+| fault_desc | string | 是 | 无法开机 | 长度 5-300 | 请描述故障现象 | 售后 |
+| complaint_type | enum | 是 | 服务问题 | 枚举校验 | 请问是商品问题、物流问题还是服务问题 | 客服 |
+| content | string | 是 | 客服态度差 | 长度 5-500 | 请描述具体情况 | 客服 |
+| phone | string | 是 | 13800138000 | 手机号格式 | 请提供手机号 | 售后、前台 |
+| time_range | string | 是 | 明天下午 2 点到 4 点 | 可解析时间范围 | 请提供预约时间 | 售后、前台 |
+| address | string | 是 | 上海浦东新区 XX 路 | 长度 5-200 | 请提供服务地址 | 售后 |
+| material_type | enum | 是 | 故障图片 | 枚举校验 | 请说明要补充的材料类型 | 售后 |
+| visitor_name | string | 是 | 张三 | 长度 2-50 | 请提供来访人姓名 | 前台 |
+| host_name | string | 是 | 李经理 | 长度 2-50 | 请问要拜访谁 | 前台 |
+| company | string | 否 | 某某科技 | 长度 2-100 | 请提供访客单位名称 | 前台 |
+| room_name | string | 是 | 3F-A01 | 会议室编码格式 | 请提供会议室名称或编号 | 前台 |
+| start_time | datetime | 是 | 2026-05-10 14:00 | 标准时间格式 | 请提供开始时间 | 前台 |
+| end_time | datetime | 是 | 2026-05-10 15:00 | 晚于开始时间 | 请提供结束时间 | 前台 |
+| destination | string | 是 | 公司/虹桥机场 | POI 或地址可解析 | 请告诉我要去哪里 | 前台、座舱 |
+| temperature | number | 是 | 22 | 16-30 | 请问要设置多少度 | 座舱 |
+| position | enum | 是 | 主驾窗 | 枚举校验 | 请问要控制哪个车窗 | 座舱 |
+| action | enum | 是 | 打开/关闭 | 枚举校验 | 请问要打开还是关闭 | 座舱 |
+| song | string | 否 | 夜曲 | 长度 1-100 | 请问要播放哪首歌 | 座舱 |
+| genre | string | 否 | 轻音乐 | 长度 1-50 | 请问要听什么类型的音乐 | 座舱 |
+| contact_name | string | 是 | 王总 | 长度 2-50 | 请问要拨打给谁 | 座舱 |
+| workflow | json | 是 | 复合动作 JSON | JSON Schema 校验 | 正在解析复合指令 | 座舱 |
+
+### 25.2 槽位配置建议
+
+每个槽位建议增加如下元数据:
+
+- `normalize_fn`:归一化方法,例如金额、时间、地址标准化
+- `source_priority`:优先从用户当前输入、历史会话还是业务上下文中取值
+- `confirm_required`:是否需要用户确认
+- `risk_binding`:是否与风险动作绑定
+- `rewrite_prompt`:槽位识别失败时的重试提示
+
+### 25.3 槽位提取策略
+
+- 首轮请求:意图识别与槽位提取同时进行
+- 补槽轮次:只提取 `pending_slots`
+- 高风险槽位:提取后必须二次确认
+- 可继承槽位:如 `phone`、`host_name`,可从历史会话或用户档案中补全
+
+## 26. 插件接口规范初稿
+
+### 26.1 插件统一接口
+
+所有业务插件建议遵循统一接口,便于执行引擎调度:
+
+```json
+{
+ "plugin_id": "plugin.order.cancel",
+ "request_id": "req_001",
+ "session_id": "sess_001",
+ "user_id": "user_001",
+ "intent_id": "cs_cancel_order",
+ "slots": {
+ "order_id": "A123456",
+ "reason": "不想要了"
+ },
+ "context": {
+ "channel": "app",
+ "trace_id": "trace_001"
+ }
+}
+```
+
+统一响应格式建议如下:
+
+```json
+{
+ "success": true,
+ "code": "OK",
+ "message": "订单取消成功",
+ "data": {
+ "order_id": "A123456",
+ "status": "cancelled"
+ },
+ "need_confirm": false,
+ "need_more_slots": [],
+ "retryable": false
+}
+```
+
+### 26.2 插件表初稿
+
+| plugin_id | plugin_name | domain | input_slots | output_fields | timeout_ms | retry_policy | idempotent_key |
+| --- | --- | --- | --- | --- | --- | --- | --- |
+| plugin.order.query | 查询订单 | 客服 | order_id | order_status, pay_status | 1500 | 失败重试 1 次 | session_id + order_id |
+| plugin.logistics.query | 查询物流 | 客服 | order_id | logistics_status, trace_list | 1500 | 失败重试 1 次 | session_id + order_id |
+| plugin.order.cancel | 取消订单 | 客服 | order_id, reason | cancel_status | 2000 | 不自动重试 | session_id + order_id |
+| plugin.service.transfer_human | 转人工 | 客服 | reason | queue_no, wait_time | 1000 | 不自动重试 | session_id + reason |
+| plugin.aftersale.return | 申请退货 | 售后 | order_id, reason | return_ticket_id | 2000 | 不自动重试 | session_id + order_id |
+| plugin.aftersale.repair | 申请维修 | 售后 | product_id, fault_desc | repair_ticket_id | 2500 | 不自动重试 | session_id + product_id |
+| plugin.aftersale.booking | 上门预约 | 售后 | address, time_range, phone | booking_id | 2500 | 失败重试 1 次 | session_id + phone + time_range |
+| plugin.frontdesk.visitor_register | 来访登记 | 前台 | visitor_name, phone, host_name | visit_id, qr_code | 2000 | 不自动重试 | session_id + phone |
+| plugin.frontdesk.notify_host | 通知被访人 | 前台 | host_name | notify_status | 1000 | 失败重试 1 次 | session_id + host_name |
+| plugin.frontdesk.book_room | 预约会议室 | 前台 | room_name, start_time, end_time | booking_status, booking_id | 2000 | 不自动重试 | session_id + room_name + start_time |
+| plugin.cabin.navigation | 导航 | 座舱 | destination | route_id, eta | 1200 | 失败重试 1 次 | session_id + destination |
+| plugin.cabin.ac_control | 空调控制 | 座舱 | temperature | ac_status | 800 | 不自动重试 | session_id + temperature |
+| plugin.cabin.window_control | 车窗控制 | 座舱 | position, action | window_status | 800 | 不自动重试 | session_id + position + action |
+| plugin.cabin.music_play | 音乐播放 | 座舱 | song/genre | play_status, media_id | 1000 | 失败重试 1 次 | session_id + song + genre |
+
+### 26.3 插件错误码建议
+
+| code | meaning | action |
+| --- | --- | --- |
+| OK | 执行成功 | 正常返回 |
+| MISSING_SLOT | 缺少必要槽位 | 转为追问流程 |
+| INVALID_SLOT | 槽位不合法 | 触发重试提示 |
+| NEED_CONFIRM | 需要用户确认 | 进入确认节点 |
+| NO_PERMISSION | 权限不足 | 拒绝执行并解释原因 |
+| RISK_BLOCKED | 风险拦截 | 终止执行并记录审计 |
+| BIZ_TIMEOUT | 下游超时 | 可重试或降级 |
+| BIZ_FAILED | 业务失败 | 给出失败原因 |
+| SYSTEM_ERROR | 系统异常 | 兜底或转人工 |
+
+### 26.4 插件开发约束
+
+- 插件必须无状态,状态统一交给状态中心管理。
+- 插件必须返回结构化结果,不能只返回自然语言。
+- 高风险插件必须支持 `need_confirm` 控制。
+- 写操作类插件必须支持幂等键。
+- 插件必须记录 trace_id,支持全链路审计。
+
+## 27. 接口协议建议
+
+### 27.1 对话入口接口
+
+`POST /api/v1/agent/chat`
+
+请求示例:
+
+```json
+{
+ "session_id": "sess_001",
+ "user_id": "user_001",
+ "channel": "app",
+ "input_text": "帮我查一下订单,如果没发货就取消",
+ "input_type": "text",
+ "metadata": {
+ "device_id": "dev_001",
+ "tenant_id": "tenant_a"
+ }
+}
+```
+
+响应示例:
+
+```json
+{
+ "session_id": "sess_001",
+ "reply_type": "workflow_result",
+ "reply_text": "已为你查询订单,当前未发货,正在为你取消。",
+ "intent": "cs_cancel_order",
+ "status": "executing",
+ "pending_slots": [],
+ "workflow_id": "wf_001",
+ "trace_id": "trace_001"
+}
+```
+
+### 27.2 补槽接口
+
+`POST /api/v1/agent/fill-slots`
+
+请求示例:
+
+```json
+{
+ "session_id": "sess_001",
+ "user_id": "user_001",
+ "input_text": "订单号是 A123456"
+}
+```
+
+响应示例:
+
+```json
+{
+ "session_id": "sess_001",
+ "status": "ready_to_execute",
+ "filled_slots": {
+ "order_id": "A123456"
+ },
+ "pending_slots": [],
+ "reply_text": "收到,正在继续为你处理。"
+}
+```
+
+### 27.3 管理后台接口建议
+
+- `GET /api/v1/intents`
+- `POST /api/v1/intents`
+- `GET /api/v1/slots`
+- `POST /api/v1/plugins/register`
+- `GET /api/v1/sessions/{session_id}`
+- `GET /api/v1/traces/{trace_id}`
+
+## 28. MVP 一期范围建议
+
+### 28.1 一期目标
+
+目标不是一开始覆盖所有场景,而是优先打通一条“能快速响应、能多轮补槽、能真正执行”的闭环。
+
+### 28.2 推荐一期场景
+
+建议先选两个最有代表性的场景:
+
+- 客服:查询订单、查物流、取消订单、转人工
+- 智能座舱:导航、空调控制、音乐播放、复合指令
+
+这样可以同时覆盖:
+
+- 标准事务型任务
+- 高实时控制型任务
+- 多轮补槽能力
+- 复杂复合指令能力
+
+### 28.3 一期推荐意图
+
+建议第一期先落 12 个意图:
+
+| domain | intent_id | intent_name | priority |
+| --- | --- | --- | --- |
+| 客服 | cs_query_order | 查询订单状态 | P0 |
+| 客服 | cs_query_logistics | 查询物流 | P0 |
+| 客服 | cs_cancel_order | 取消订单 | P0 |
+| 客服 | cs_transfer_human | 转人工 | P0 |
+| 售后 | af_apply_return | 申请退货 | P1 |
+| 售后 | af_query_ticket | 查询工单进度 | P1 |
+| 前台 | front_notify_host | 通知被访人 | P1 |
+| 前台 | front_route_guide | 路线引导 | P1 |
+| 座舱 | cabin_nav_to | 导航到目的地 | P0 |
+| 座舱 | cabin_set_ac | 设置空调 | P0 |
+| 座舱 | cabin_play_music | 播放音乐 | P0 |
+| 座舱 | cabin_multi_command | 复合指令执行 | P0 |
+
+### 28.4 一期必须具备的能力
+
+- 会话状态中心
+- 快路径意图分类
+- 基础槽位提取
+- 补槽追问与断点恢复
+- 插件统一协议
+- 至少 8 个可执行插件
+- 基础监控和审计日志
+
+### 28.5 一期不建议过早投入的能力
+
+- 全量复杂规则平台
+- 多租户运营后台
+- 自动训练平台
+- 端到端自主规划型 Agent
+
+### 28.6 一期验收标准
+
+| metric | target |
+| --- | --- |
+| 高频快路径平均响应时间 | <= 1.5s |
+| 复杂慢路径平均响应时间 | <= 3.5s |
+| 多轮补槽成功率 | >= 85% |
+| 插件执行成功率 | >= 95% |
+| 高频意图识别准确率 | >= 95% |
+| 高风险误执行率 | 0 |
+
+## 29. 开发拆分建议
+
+### 29.1 服务拆分
+
+- `gateway-service`:统一接入与鉴权
+- `nlu-service`:分类、抽取、召回、精判
+- `session-service`:会话状态管理
+- `orchestrator-service`:工作流执行与插件调度
+- `plugin-service`:业务插件实现
+- `ops-console`:配置与观测后台
+
+### 29.2 迭代顺序
+
+1. 先做会话状态中心和统一协议。
+2. 再做快路径分类与基础插件闭环。
+3. 然后接入向量召回和 LLM 精判。
+4. 最后补复合指令、多轮恢复、监控审计。
+
+### 29.3 人员建议
+
+- 后端工程师:2 人
+- AI/NLP 工程师:1 到 2 人
+- 前端或客户端工程师:1 人
+- 测试工程师:1 人
+- 产品经理:1 人
+
+## 30. 下一步建议
+
+基于当前文档,下一步最适合继续补的是:
+
+1. 数据库表结构设计
+2. Redis Session 结构设计
+3. Workflow JSON Schema
+4. 插件 SDK 规范
+5. 评测集与测试用例设计
+
+## 31. 数据库表结构设计
+
+### 31.1 设计原则
+
+- 业务配置与运行态数据分离。
+- 高并发状态放 Redis,持久化和审计放 PostgreSQL。
+- 配置表优先满足可运营、可灰度、可版本化。
+- 运行表优先满足可追踪、可排障、可回放。
+
+### 31.2 核心表清单
+
+| table_name | purpose |
+| --- | --- |
+| intents | 意图定义表 |
+| intent_examples | 意图示例语料表 |
+| slots | 槽位定义表 |
+| intent_slot_bindings | 意图和槽位绑定表 |
+| plugins | 插件注册表 |
+| plugin_routes | 意图到插件路由表 |
+| workflow_templates | 工作流模板表 |
+| sessions | 会话主表 |
+| session_messages | 会话消息表 |
+| task_executions | 任务执行表 |
+| task_steps | 任务步骤表 |
+| plugin_calls | 插件调用日志表 |
+| audit_logs | 审计日志表 |
+| evaluation_cases | 评测样本表 |
+
+### 31.3 关键表字段示例
+
+#### intents
+
+| field | type | desc |
+| --- | --- | --- |
+| id | bigint pk | 主键 |
+| intent_id | varchar(64) unique | 意图唯一标识 |
+| intent_name | varchar(128) | 意图名称 |
+| domain | varchar(64) | 业务域 |
+| type | varchar(32) | 问答/事务/控制 |
+| risk_level | varchar(16) | 风险等级 |
+| entry_path | varchar(16) | 快路径/慢路径 |
+| enabled | boolean | 是否启用 |
+| version | int | 配置版本 |
+| description | text | 说明 |
+| created_at | timestamp | 创建时间 |
+| updated_at | timestamp | 更新时间 |
+
+#### slots
+
+| field | type | desc |
+| --- | --- | --- |
+| id | bigint pk | 主键 |
+| slot_name | varchar(64) unique | 槽位名称 |
+| slot_type | varchar(32) | string/number/enum/json |
+| required | boolean | 是否必填 |
+| validate_rule | varchar(256) | 校验规则 |
+| ask_template | varchar(256) | 追问模板 |
+| normalize_fn | varchar(64) | 归一化方法 |
+| confirm_required | boolean | 是否需要确认 |
+| enabled | boolean | 是否启用 |
+| created_at | timestamp | 创建时间 |
+| updated_at | timestamp | 更新时间 |
+
+#### intent_slot_bindings
+
+| field | type | desc |
+| --- | --- | --- |
+| id | bigint pk | 主键 |
+| intent_id | varchar(64) | 意图标识 |
+| slot_name | varchar(64) | 槽位名称 |
+| required | boolean | 对该意图是否必填 |
+| priority | int | 提问优先级 |
+| source_priority | varchar(128) | 来源优先级 |
+| created_at | timestamp | 创建时间 |
+
+#### plugins
+
+| field | type | desc |
+| --- | --- | --- |
+| id | bigint pk | 主键 |
+| plugin_id | varchar(128) unique | 插件标识 |
+| plugin_name | varchar(128) | 插件名称 |
+| domain | varchar(64) | 所属域 |
+| endpoint | varchar(256) | 插件地址或服务名 |
+| timeout_ms | int | 超时时间 |
+| retry_policy | varchar(64) | 重试策略 |
+| idempotent_rule | varchar(128) | 幂等规则 |
+| enabled | boolean | 是否启用 |
+| created_at | timestamp | 创建时间 |
+| updated_at | timestamp | 更新时间 |
+
+#### sessions
+
+| field | type | desc |
+| --- | --- | --- |
+| id | bigint pk | 主键 |
+| session_id | varchar(64) unique | 会话标识 |
+| user_id | varchar(64) | 用户标识 |
+| channel | varchar(32) | 渠道 |
+| current_intent | varchar(64) | 当前意图 |
+| current_status | varchar(32) | 当前状态 |
+| current_workflow_id | varchar(64) | 当前工作流 |
+| risk_level | varchar(16) | 当前风险等级 |
+| last_message_at | timestamp | 最后活跃时间 |
+| created_at | timestamp | 创建时间 |
+| updated_at | timestamp | 更新时间 |
+
+#### session_messages
+
+| field | type | desc |
+| --- | --- | --- |
+| id | bigint pk | 主键 |
+| session_id | varchar(64) | 会话标识 |
+| role | varchar(16) | user/assistant/system |
+| message_text | text | 文本内容 |
+| structured_payload | jsonb | 结构化载荷 |
+| trace_id | varchar(64) | 链路标识 |
+| created_at | timestamp | 创建时间 |
+
+#### task_executions
+
+| field | type | desc |
+| --- | --- | --- |
+| id | bigint pk | 主键 |
+| task_id | varchar(64) unique | 任务标识 |
+| session_id | varchar(64) | 会话标识 |
+| workflow_id | varchar(64) | 工作流标识 |
+| status | varchar(32) | pending/running/paused/completed/failed |
+| current_step | int | 当前步骤 |
+| context_snapshot | jsonb | 上下文快照 |
+| error_code | varchar(64) | 错误码 |
+| error_message | varchar(256) | 错误信息 |
+| created_at | timestamp | 创建时间 |
+| updated_at | timestamp | 更新时间 |
+
+#### task_steps
+
+| field | type | desc |
+| --- | --- | --- |
+| id | bigint pk | 主键 |
+| task_id | varchar(64) | 任务标识 |
+| step_no | int | 步骤号 |
+| intent_id | varchar(64) | 步骤意图 |
+| plugin_id | varchar(128) | 插件标识 |
+| status | varchar(32) | 步骤状态 |
+| input_payload | jsonb | 入参 |
+| output_payload | jsonb | 出参 |
+| started_at | timestamp | 开始时间 |
+| ended_at | timestamp | 结束时间 |
+
+#### plugin_calls
+
+| field | type | desc |
+| --- | --- | --- |
+| id | bigint pk | 主键 |
+| trace_id | varchar(64) | 链路标识 |
+| task_id | varchar(64) | 任务标识 |
+| plugin_id | varchar(128) | 插件标识 |
+| request_payload | jsonb | 请求内容 |
+| response_payload | jsonb | 响应内容 |
+| success | boolean | 是否成功 |
+| latency_ms | int | 调用耗时 |
+| created_at | timestamp | 创建时间 |
+
+### 31.4 建表索引建议
+
+- `intents(intent_id)` 唯一索引
+- `slots(slot_name)` 唯一索引
+- `plugins(plugin_id)` 唯一索引
+- `sessions(session_id)` 唯一索引
+- `sessions(user_id, updated_at)` 组合索引
+- `session_messages(session_id, created_at)` 组合索引
+- `task_executions(session_id, status)` 组合索引
+- `plugin_calls(trace_id)` 普通索引
+
+## 32. Redis Session 结构设计
+
+### 32.1 设计目标
+
+- 支持毫秒级读取会话状态
+- 支持多轮补槽和断点恢复
+- 支持任务并发控制和幂等去重
+- 支持热点上下文缓存
+
+### 32.2 Key 设计
+
+| key_pattern | type | purpose | ttl |
+| --- | --- | --- | --- |
+| `agent:session:{session_id}` | Hash | 会话主状态 | 24h |
+| `agent:slots:{session_id}` | Hash | 当前已填槽位 | 24h |
+| `agent:pending:{session_id}` | List | 待补槽位队列 | 24h |
+| `agent:workflow:{session_id}` | String | 当前 Workflow JSON | 24h |
+| `agent:context:{session_id}` | String | 上下文快照 JSON | 24h |
+| `agent:lock:{session_id}` | String | 会话执行锁 | 30s |
+| `agent:idempotent:{key}` | String | 幂等去重键 | 10m |
+| `agent:cache:intent:{text_hash}` | String | 高频意图缓存 | 30m |
+
+### 32.3 Session Hash 示例
+
+Key: `agent:session:sess_001`
+
+```json
+{
+ "session_id": "sess_001",
+ "user_id": "user_001",
+ "channel": "app",
+ "status": "waiting_slot",
+ "current_intent": "af_apply_return",
+ "workflow_id": "wf_001",
+ "current_step": "1",
+ "risk_level": "medium",
+ "last_active_at": "2026-05-09T10:00:00Z"
+}
+```
+
+### 32.4 Slots Hash 示例
+
+Key: `agent:slots:sess_001`
+
+```json
+{
+ "order_id": "A123456",
+ "reason": "不想要了"
+}
+```
+
+### 32.5 Pending Slots List 示例
+
+Key: `agent:pending:sess_001`
+
+```json
+[
+ "order_id",
+ "reason"
+]
+```
+
+### 32.6 Context JSON 示例
+
+Key: `agent:context:sess_001`
+
+```json
+{
+ "biz_context": {
+ "order_status": "pending_shipment"
+ },
+ "history_summary": "用户发起退货申请",
+ "plugin_results": {
+ "plugin.order.query": {
+ "success": true,
+ "status": "pending_shipment"
+ }
+ }
+}
+```
+
+### 32.7 Redis 操作建议
+
+- 进入执行前对 `agent:lock:{session_id}` 加分布式锁。
+- 每次补槽后同时更新 `session`、`slots`、`pending`。
+- 工作流执行完成后,可保留短时缓存用于追问和结果追溯。
+- 长会话可异步落盘 PostgreSQL 后缩短 Redis TTL。
+
+## 33. Workflow JSON Schema 设计
+
+### 33.1 设计目标
+
+- 让 LLM 输出严格受控
+- 让执行引擎易于解析
+- 支持单步、顺序、条件、并行和补槽暂停
+
+### 33.2 Workflow 顶层结构
+
+```json
+{
+ "workflow_id": "wf_001",
+ "workflow_type": "sequence",
+ "domain": "customer_service",
+ "intent_id": "cs_cancel_order",
+ "status": "ready",
+ "risk_level": "medium",
+ "slots": {
+ "order_id": "A123456"
+ },
+ "missing_slots": [],
+ "steps": [],
+ "meta": {
+ "source": "llm_planner",
+ "version": "1.0"
+ }
+}
+```
+
+### 33.3 Step 结构
+
+```json
+{
+ "step": 1,
+ "step_id": "step_001",
+ "intent_id": "cs_query_order",
+ "plugin_id": "plugin.order.query",
+ "action": "query_order",
+ "status": "pending",
+ "depends_on": [],
+ "slots": {
+ "order_id": "A123456"
+ },
+ "on_success": "next",
+ "on_failure": "fallback",
+ "timeout_ms": 1500
+}
+```
+
+### 33.4 条件步骤结构
+
+```json
+{
+ "step": 2,
+ "step_id": "step_002",
+ "type": "condition",
+ "condition": {
+ "expr": "context.order_status == 'pending_shipment'"
+ },
+ "if_true": {
+ "intent_id": "cs_cancel_order",
+ "plugin_id": "plugin.order.cancel"
+ },
+ "if_false": {
+ "action": "reply",
+ "message": "订单已发货,暂时无法取消。"
+ }
+}
+```
+
+### 33.5 补槽暂停结构
+
+```json
+{
+ "status": "waiting_slot",
+ "missing_slots": [
+ {
+ "slot_name": "order_id",
+ "ask_template": "请提供订单号",
+ "priority": 1
+ }
+ ]
+}
+```
+
+### 33.6 JSON Schema 示例
+
+```json
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "AgentWorkflow",
+ "type": "object",
+ "required": ["workflow_id", "workflow_type", "intent_id", "status", "steps"],
+ "properties": {
+ "workflow_id": {
+ "type": "string"
+ },
+ "workflow_type": {
+ "type": "string",
+ "enum": ["single", "sequence", "conditional", "parallel"]
+ },
+ "domain": {
+ "type": "string"
+ },
+ "intent_id": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string",
+ "enum": ["ready", "waiting_slot", "running", "completed", "failed"]
+ },
+ "risk_level": {
+ "type": "string",
+ "enum": ["low", "medium", "high"]
+ },
+ "slots": {
+ "type": "object"
+ },
+ "missing_slots": {
+ "type": "array"
+ },
+ "steps": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": ["step", "step_id"],
+ "properties": {
+ "step": {
+ "type": "integer"
+ },
+ "step_id": {
+ "type": "string"
+ },
+ "intent_id": {
+ "type": "string"
+ },
+ "plugin_id": {
+ "type": "string"
+ },
+ "action": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string"
+ },
+ "depends_on": {
+ "type": "array"
+ },
+ "slots": {
+ "type": "object"
+ }
+ }
+ }
+ },
+ "meta": {
+ "type": "object"
+ }
+ }
+}
+```
+
+### 33.7 约束建议
+
+- LLM 只能从候选意图和候选插件中选择,不能自由生成未知标识。
+- 所有工作流必须通过 JSON Schema 校验后才能进入执行引擎。
+- 高风险动作必须显式输出 `risk_level` 和 `need_confirm`。
+- 补槽状态和执行状态必须严格区分,避免重复执行。
+
+## 34. 开工建议
+
+在完成以上设计后,建议按以下顺序正式开工:
+
+1. 初始化后端项目骨架。
+2. 实现配置模型、会话模型和 Workflow Schema。
+3. 打通 `/chat` 和 `/fill-slots` 两个核心接口。
+4. 先接入 mock 插件,完成完整闭环。
+5. 再逐步接入真实业务系统和模型服务。
+
+## 35. 多标签 Detector 过渡方案
+
+### 35.1 背景
+
+当前多意图链路已经具备以下结构:
+
+- `clause split` 负责切分明显并列或条件语句
+- `clause classifier` 负责对单个子句提供语义补偿
+- `multi_intent_detector` 负责在整句粒度提供多标签先验
+- `planner fusion` 负责合并 heuristic、classifier 和 detector 的信号
+
+现阶段的问题不在 `planner` 主骨架,而在 detector 的训练方式。当前 detector 基于单标签分类头的 logits 做 sigmoid 解释,只能作为过渡信号,不能代表真正学到的“多标签共现关系”。
+
+### 35.2 迁移目标
+
+本阶段的目标不是重写规划器,而是把 detector 从“推理时解释型多标签”升级成“训练时显式监督的多标签模型”。
+
+迁移后应满足:
+
+- `planner` 继续消费 `detector_prior`,主骨架保持稳定
+- detector 使用独立模型目录,不与单标签 classifier 共享分类头
+- 训练样本显式表达一个句子对应多个 intent 的监督关系
+- 评测指标从单一准确率升级为多标签指标
+- 为下一阶段 `NER / token classification` 提供更稳定的候选意图集合
+
+### 35.3 数据格式
+
+保留现有单标签训练数据:
+
+```json
+{"text": "打开车窗", "intent_id": "cabin_window_open"}
+```
+
+新增多标签训练数据:
+
+```json
+{"text": "打开车窗并播放音乐", "intent_ids": ["cabin_window_open", "cabin_play_music"]}
+```
+
+约束建议:
+
+- 单标签样本可以直接提升为 `intent_ids` 长度为 1 的多标签样本
+- 多标签样本优先覆盖座舱高频并列控制场景
+- `__social__` 与 `__out_of_scope__` 不作为多标签共现目标,避免污染业务动作组合学习
+- 多标签语料要覆盖口语连接词、顺序词、弱连接和省略表达
+
+### 35.4 模型与训练
+
+建议为 detector 使用独立训练脚本和独立输出目录:
+
+- 训练脚本:`scripts/train_local_bert_multi_intent.py`
+- 评测脚本:`scripts/eval_local_bert_multi_intent.py`
+- 模型目录:`models/local_bert_multi_intent/`
+
+训练方式:
+
+- 底座继续使用本地 MacBERT
+- 任务类型设置为 `multi_label_classification`
+- 标签为多热向量,损失函数为 `BCEWithLogitsLoss`
+- 输出为每个意图的独立概率,不再依赖单标签 softmax 头的副产物
+
+### 35.5 运行时接入
+
+运行时只替换 detector 的模型来源和解释方式,不改 `planner` 主逻辑。
+
+接入原则:
+
+- `classifier` 继续服务单子句语义分类
+- `multi_intent_detector` 独立加载多标签模型
+- detector 输出仍然是 `candidates -> detector_prior`
+- detector 默认屏蔽 `__social__` 和 `__out_of_scope__`
+- 当 detector 不可用时,planner 仍可退化到 `clause split + clause classifier + heuristic`
+
+### 35.6 与 NER 的衔接
+
+在真正多标签 detector 稳定前,不建议直接推进 `NER / token classification` 作为主增量。
+
+原因:
+
+- NER 擅长抽取边界,不擅长先决定整句有几个意图
+- 如果上游 detector 仍是假多标签,NER 很容易围绕错误意图做精细抽取
+- 先把多标签 detector 训练扎实,可以让 NER 在“候选意图集合已收敛”的前提下工作
+
+因此推荐顺序固定为:
+
+1. 真正多标签 detector
+2. detector 线上评测和阈值稳定
+3. NER / token classification
+
+### 35.7 本阶段验收标准
+
+本阶段完成后至少应满足:
+
+- detector 支持独立训练、独立加载、独立评测
+- 对典型并列座舱指令,`recall@k` 和 `micro_f1` 明显优于现有 sigmoid 解释方案
+- `planner` 主骨架无需改写,现有 fusion 逻辑保持兼容
+- 后续引入 NER 时,只需增加边界抽取模块,不必再次调整 detector 接口
+
+## 36. Joint NLU 升级方案
+
+### 36.1 目标
+
+本阶段不再继续扩旧的 heuristic 槽位提取逻辑,而是把本地 NLU 快链路升级成真正的 `Joint Intent + Slot` 联合识别。
+
+升级目标:
+
+- 用一个共享编码器同时完成意图识别和槽位抽取
+- 替换当前 `HeuristicSlotExtractor` 的主路径职责
+- 保留 `planner / workflow / session / response policy` 主骨架
+- 多意图整句仍走 `clause split + multi-intent detector + planner`
+- 单句或单 clause 的语义理解改为 `JointBERT`
+
+### 36.2 为什么不直接推倒整条链
+
+当前系统已经有稳定的上层编排能力:
+
+- `fusion` 负责 `execute / clarify / reject / route_to_cloud`
+- `planner` 负责 `sequence / conditional workflow`
+- `workflow executor` 负责多步执行、条件判断、确认和补槽
+
+这些能力并不是 `JointBERT` 能替代的。
+
+因此本次升级只替换本地理解层,不重写上层编排层。
+
+### 36.3 新架构边界
+
+升级后的本地链路定义为:
+
+```text
+text
+-> rewrite
+-> Joint NLU
+ - intent head
+ - slot tagging head
+-> fusion / planner
+-> workflow executor
+```
+
+新的职责划分:
+
+- `JointBERT`:单句或单 clause 的 intent + slot
+- `multi-intent detector`:整句多标签先验
+- `planner`:多意图、条件句、多步骤 workflow
+- `workflow executor`:补槽、确认、执行、汇总
+
+### 36.4 Joint NLU 数据格式
+
+新增联合训练数据,采用 span 标注格式:
+
+```json
+{
+ "text": "把空调调到22度",
+ "intent_id": "cabin_set_ac",
+ "slots": [
+ {"slot_name": "temperature", "value": "22度", "start": 6, "end": 9}
+ ]
+}
+```
+
+说明:
+
+- 单条样本只标注一个主意图
+- 多意图句在训练阶段优先拆成 clause 级样本
+- 无槽位意图的 `slots` 为空数组
+- 运行时将 span 转换为 token-level BIO 标签
+
+### 36.5 模型结构
+
+采用共享编码器的双头结构:
+
+- 编码器:`MacBERT`
+- 意图头:句级单标签分类
+- 槽位头:token classification,输出 BIO 标签
+
+第一版先不引入复杂的 slot-gate,先保证:
+
+- 共享编码器
+- 联合训练
+- 意图与槽位共享语义表征
+
+在当前项目里,这已经比“句分类 + 规则抽槽”前进一步。
+
+### 36.6 接入方式
+
+运行时新增 `JointNLU` 服务,供两处复用:
+
+1. `classifier backend = joint_bert`
+ - 用联合模型的 intent head 输出意图分数
+2. `slot_extractor backend = joint_bert`
+ - 用联合模型的 slot head 输出槽位
+
+要求:
+
+- 两个 backend 共享同一个模型实例,避免重复冷启动
+- 对同一文本允许做短时预测缓存,避免一次请求重复前向
+- 若联合模型不可用,直接报错或显式 fallback,不继续隐式走旧 heuristic 逻辑
+
+### 36.7 与多意图链路的关系
+
+`JointBERT` 不直接负责整句多意图 workflow 规划。
+
+多意图流程保持:
+
+1. `multi-intent detector` 对整句给出多标签先验
+2. `planner` 进行 clause split
+3. 每个 clause 用 `Joint NLU` 做 intent + slot
+4. `planner` 汇总 clause 结果为 workflow
+
+这样做的原因:
+
+- 经典 JointBERT 更适合单句单意图
+- 当前系统已经有成熟的 clause-level planner 骨架
+- 直接让一个单模型接管整句多步骤规划,风险更高
+
+### 36.8 替换原则
+
+本次升级的明确原则:
+
+- 默认主链路不再依赖 `HeuristicSlotExtractor`
+- planner 内部的 clause slots 也优先改为 `Joint NLU`
+- 原 heuristic 抽槽只保留为测试对照或应急兜底,不再作为主路径
+
+### 36.9 验收标准
+
+升级完成后至少满足:
+
+- 单步任务的槽位抽取来自 `Joint NLU`
+- 缺槽位逻辑、确认逻辑、多步 workflow 逻辑保持兼容
+- `router` 和 `planner` 都能读取联合模型输出
+- 本地常见控制句的槽位抽取精度高于旧 heuristic
+- 冷启动通过 warmup 控制,首轮推理不发生首次懒加载抖动
diff --git a/intelligent_cabin/archive/docs/solution_review.md b/intelligent_cabin/archive/docs/solution_review.md
new file mode 100644
index 0000000..e6f64c8
--- /dev/null
+++ b/intelligent_cabin/archive/docs/solution_review.md
@@ -0,0 +1,467 @@
+# 对齐车机方案的实施流程复审
+
+## 1. 目标
+
+本文档用于重新审视当前项目的实现方向,并将“对齐小鹏车机类方案”的核心流程、分支决策和典型场景演示明确下来。
+
+目标不是做一个普通聊天机器人,而是做一个面向车机/客服/前台场景的低延迟执行型 Agent:
+
+- 简单请求本地快速闭环
+- 复杂请求云端增强处理
+- 多轮短句能够恢复上下文
+- 多命令能够拆分为 workflow 执行
+- 超出能力边界时明确拒绝或澄清
+
+---
+
+## 2. 对齐车机方案的核心原则
+
+结合前面参考的小鹏公开专利,可以抽象出下面几个工程原则:
+
+- 本地优先,云端增强,不是所有请求都直接走远端大模型
+- 本地不是单模型,而是多支路并发
+- 快反馈和最终反馈分离,首反馈必须短而稳
+- 多轮短句优先靠上下文改写和缓存恢复,不是每轮重做完整规划
+- 高风险动作必须确认
+- 超能力边界时必须拒答,不能强行分类执行
+
+---
+
+## 3. 总体流程图
+
+```mermaid
+flowchart TD
+ A[用户语音输入] --> B[ASR 转文本]
+ B --> C[文本归一化]
+ C --> D[本地多支路并发]
+
+ D --> D1[keyword / rule / trie]
+ D --> D2[local bert classifier]
+ D --> D3[context rewrite / cache]
+ D --> D4[retrieval matcher]
+
+ D1 --> E[本地融合分级器]
+ D2 --> E
+ D3 --> E
+ D4 --> E
+
+ E -->|高置信| F[直接执行或直接生成 workflow]
+ E -->|中置信| G[等待 100~300ms 观察补充分支/云端结果]
+ E -->|低置信| H[云端 planner / LLM / RAG]
+
+ G --> H
+ H --> I[生成 intent / workflow / clarify / reject]
+
+ F --> J[插件执行]
+ I --> J
+
+ J --> K[首反馈 ack / progress]
+ J --> L[最终反馈 result / clarify / reject]
+```
+
+---
+
+## 4. 本地与云端分工
+
+### 4.1 本地快链路
+
+本地负责:
+
+- 高频固定控制类命令
+- 已知业务集合内的快速意图识别
+- 短句、省略句、连续调节的上下文恢复
+- 简单任务的直接执行
+- `<1s` 以内的首响应
+
+本地组件:
+
+- `keyword / rule / trie`
+- `local bert classifier`
+- `context rewrite / cache`
+- `retrieval matcher`
+- `fusion grader`
+
+### 4.2 云端慢链路
+
+云端负责:
+
+- 多命令拆分
+- 条件型请求理解
+- 歧义消解
+- 复杂问答
+- planner 级 workflow 生成
+
+---
+
+## 5. 本地分级决策图
+
+```mermaid
+flowchart TD
+ A[本地多分支结果] --> B{融合分级}
+ B -->|high| C[直接执行]
+ B -->|medium| D[等待 100~300ms]
+ B -->|low| E[不直接执行]
+
+ D --> F{云端是否及时返回}
+ F -->|是| G[采用云端结果或覆盖本地]
+ F -->|否| H{本地是否达到最低执行阈值}
+
+ H -->|是| I[执行本地结果]
+ H -->|否| J[澄清或拒答]
+
+ E --> K[云端理解 / clarify / reject]
+```
+
+关键修正点:
+
+- 不是“本地 BERT 有结果就执行”
+- 不是“云端没返回就一定执行本地”
+- 必须先判断本地结果是否达到最低可执行阈值
+- 高风险动作即使高置信,也不能直接执行
+
+---
+
+## 6. 用户反馈状态图
+
+```mermaid
+stateDiagram-v2
+ [*] --> Received
+ Received --> Ack: 已接收请求
+ Ack --> ExecutingFast: 本地快执行
+ Ack --> WaitingCloud: 等待云端/复杂规划
+ Ack --> Clarify: 缺关键槽位
+ Ack --> Confirm: 高风险动作
+ Ack --> Reject: 超能力边界
+
+ ExecutingFast --> Result
+ WaitingCloud --> Result
+ Clarify --> Result
+ Confirm --> Result
+ Reject --> [*]
+ Result --> [*]
+```
+
+反馈规则:
+
+- `ack`:收到,马上处理
+- `progress`:正在为你处理
+- `result`:执行完成或查询完成
+- `clarify`:信息不足,补一个关键字段
+- `confirm`:高风险动作确认
+- `reject`:能力边界拒答
+
+---
+
+## 7. 反馈模板策略
+
+### 7.1 快执行
+
+适用:
+
+- 打开车窗
+- 调低空调
+- 播放音乐
+- 导航去公司
+
+推荐反馈:
+
+- 首反馈:`好的,正在打开车窗`
+- 最终反馈:`车窗已打开`
+
+如果设备动作极快,也可以直接播报最终反馈:
+
+- `车窗已打开`
+
+### 7.2 慢执行
+
+适用:
+
+- 查订单
+- 查物流
+- 多命令复杂规划
+- 条件型任务
+
+推荐反馈:
+
+- 首反馈:`收到,我先帮你查一下`
+- 最终反馈:`订单还没发货`
+
+### 7.3 复合命令
+
+例如:
+
+- `打开车窗,空调调低至20度`
+
+推荐反馈:
+
+- 首反馈:`好的,正在为你打开车窗并调低空调`
+- 最终反馈:`车窗已打开,空调已调到20度`
+
+### 7.4 边界外请求
+
+例如:
+
+- `打开飞机门`
+
+推荐反馈:
+
+- `这个我暂时做不了,但我可以帮你导航、查订单、调空调或播放音乐`
+
+---
+
+## 8. 多轮上下文恢复流程
+
+```mermaid
+flowchart TD
+ A[当前轮输入: 再低一点] --> B[读取 session context]
+ B --> C{是否命中高频改写缓存}
+ C -->|是| D[改写为完整句]
+ C -->|否| E[轻量改写模型/规则补全]
+ D --> F[进入 router]
+ E --> F
+ F --> G[意图识别 + 槽位提取 + 执行]
+```
+
+说明:
+
+- 这里的“上下文能力”不是 BERT 自己缓存的
+- 而是 Agent 在 `session state` 中保存上轮任务和关键槽位
+- 再由 `rewrite engine` 完成短句恢复
+
+---
+
+## 9. 典型场景流程演示
+
+### 9.1 场景一:快执行单命令
+
+用户输入:
+
+- `打开车窗`
+
+处理流程:
+
+1. ASR 转文本:`打开车窗`
+2. 文本归一化
+3. 本地多支路并发
+4. 若本地高置信命中 `cabin_open_window`
+5. 直接执行车窗插件
+6. 播报:`车窗已打开`
+
+时序演示:
+
+```mermaid
+sequenceDiagram
+ participant U as 用户
+ participant A as ASR
+ participant R as 本地路由
+ participant P as 插件执行
+ participant T as TTS
+
+ U->>A: 打开车窗
+ A->>R: 打开车窗
+ R->>P: 执行 open_window
+ P-->>R: success
+ R->>T: 车窗已打开
+ T-->>U: 车窗已打开
+```
+
+### 9.2 场景二:复合命令快执行
+
+用户输入:
+
+- `打开车窗,空调调低至20度`
+
+处理流程:
+
+1. 文本进入本地路由
+2. 判断为多命令
+3. planner 或本地 splitter 输出两个 step
+4. 生成 sequence workflow
+5. 顺序执行:
+ - 打开车窗
+ - 空调调到 20 度
+6. 汇总反馈:`车窗已打开,空调已调到20度`
+
+时序演示:
+
+```mermaid
+sequenceDiagram
+ participant U as 用户
+ participant A as ASR
+ participant F as 融合分级器
+ participant W as Workflow
+ participant P as 插件层
+ participant T as TTS
+
+ U->>A: 打开车窗,空调调低至20度
+ A->>F: 规范化文本
+ F->>W: 输出 sequence workflow
+ W->>P: step1 open_window
+ P-->>W: success
+ W->>P: step2 set_ac(20)
+ P-->>W: success
+ W->>T: 车窗已打开,空调已调到20度
+ T-->>U: 车窗已打开,空调已调到20度
+```
+
+### 9.3 场景三:慢执行查询
+
+用户输入:
+
+- `帮我查一下订单A123456`
+
+处理流程:
+
+1. 本地高频分支命中订单查询
+2. 首反馈先给:
+ - `收到,我帮你查一下`
+3. 调用订单查询插件
+4. 最终反馈:
+ - `订单A123456当前待发货`
+
+### 9.4 场景四:条件型请求
+
+用户输入:
+
+- `查一下订单A123456,如果还没发货就取消`
+
+处理流程:
+
+1. 本地识别该请求复杂,进入云端 planner
+2. planner 输出 conditional workflow:
+ - step1: query_order
+ - step2: cancel_order
+ - condition: order_status == pending_shipment
+3. 先执行 step1
+4. 若满足条件,则进入确认
+5. 用户回复确认后,再执行取消
+6. 最终反馈:
+ - `订单A123456已取消`
+
+时序演示:
+
+```mermaid
+sequenceDiagram
+ participant U as 用户
+ participant R as 本地融合器
+ participant C as 云端 Planner
+ participant W as Workflow
+ participant P as 插件层
+ participant T as TTS
+
+ U->>R: 查一下订单A123456,如果还没发货就取消
+ R->>C: 复杂条件请求
+ C-->>W: conditional workflow
+ W->>P: step1 query_order
+ P-->>W: order_status=pending_shipment
+ W->>T: 即将取消订单,仅在订单未发货时取消。请回复确认或取消
+ T-->>U: 确认提示
+ U->>W: 确认
+ W->>P: step2 cancel_order
+ P-->>W: success
+ W->>T: 订单A123456已取消
+ T-->>U: 订单A123456已取消
+```
+
+### 9.5 场景五:多轮短句恢复
+
+对话过程:
+
+1. 用户:`把空调调到22度`
+2. 系统:`空调已调到22度`
+3. 用户:`再低一点`
+4. 系统读取 `last_intent=cabin_set_ac` 和 `last_temperature=22`
+5. rewrite engine 改写为:`把空调调到21度`
+6. 再进入意图识别和执行
+7. 系统反馈:`空调已调到21度`
+
+### 9.6 场景六:边界外请求
+
+用户输入:
+
+- `打开飞机门`
+
+正确处理:
+
+1. 本地分支都无法稳定支持
+2. 若低于执行阈值,不得直接执行已有意图
+3. 进入:
+ - reject
+ - 或云端澄清
+4. 反馈:
+ - `这个我暂时做不了,但我可以帮你导航、查订单、调空调或播放音乐`
+
+这类场景必须通过 `unknown / out_of_scope` 机制处理,不能靠封闭集分类硬选。
+
+---
+
+## 10. 当前项目与目标方案的对应关系
+
+### 10.1 已经具备的能力
+
+- 本地 `keyword / classifier / retrieval / fusion`
+- 本地 BERT 分类器
+- `session state`
+- `context rewrite`
+- `planner`
+- `sequence / conditional workflow`
+- 高风险确认
+- demo 调试面板
+
+### 10.2 还需要补齐的关键能力
+
+- `unknown / out_of_scope`
+- 低分拒识策略
+- 明确的 `execute / reject / route_to_cloud` 决策建议
+- 更多真实车机意图
+- 真实插件接入
+- 语音前端与 ASR/TTS 完整接入
+
+---
+
+## 11. 当前阶段的正式实施结论
+
+当前方向可以继续,但必须明确:
+
+- 本地 BERT 是本地快分支之一,不是整个系统的唯一裁决者
+- 最终执行依据应来自“本地融合分级器 + planner + 风险规则”
+- 用户体验的关键不只是识别正确,还包括:
+ - 首反馈是否快
+ - 多轮是否顺
+ - 边界是否清楚
+ - 风险是否可控
+
+因此,当前正式方案应定义为:
+
+```text
+车机型 Agent = 本地并发快链路
+ + 上下文改写缓存
+ + 分级融合决策
+ + 云端 planner
+ + workflow 执行
+ + 风险确认
+ + reject / clarify / fallback 策略
+```
+
+---
+
+## 12. 下一步执行优先级
+
+建议按以下顺序继续实现:
+
+1. 补 `unknown / out_of_scope` 和拒识阈值
+2. 输出统一执行建议:
+ - `execute`
+ - `clarify`
+ - `reject`
+ - `route_to_cloud`
+3. 扩真实车机场景意图:
+ - 车窗
+ - 车门
+ - 座椅
+ - 灯光
+ - 后视镜
+ - 除雾
+4. 强化 rewrite/cache 高频模式
+5. 接真实插件与真实语音链路
+
diff --git a/intelligent_cabin/archive/patents/202510261979_CN120089140A.pdf b/intelligent_cabin/archive/patents/202510261979_CN120089140A.pdf
new file mode 100644
index 0000000..955dca9
Binary files /dev/null and b/intelligent_cabin/archive/patents/202510261979_CN120089140A.pdf differ
diff --git a/intelligent_cabin/archive/patents/CN114299931B.pdf b/intelligent_cabin/archive/patents/CN114299931B.pdf
new file mode 100644
index 0000000..849c5b1
Binary files /dev/null and b/intelligent_cabin/archive/patents/CN114299931B.pdf differ
diff --git a/intelligent_cabin/archive/patents/CN115394300A.pdf b/intelligent_cabin/archive/patents/CN115394300A.pdf
new file mode 100644
index 0000000..5465596
Binary files /dev/null and b/intelligent_cabin/archive/patents/CN115394300A.pdf differ
diff --git a/intelligent_cabin/archive/patents/texts/202510261979_CN120089140A.txt b/intelligent_cabin/archive/patents/texts/202510261979_CN120089140A.txt
new file mode 100644
index 0000000..d943007
--- /dev/null
+++ b/intelligent_cabin/archive/patents/texts/202510261979_CN120089140A.txt
@@ -0,0 +1,1195 @@
+(19)国家知识产权局
+
+(12)发明专利申请
+(10)申请公布号 CN 120089140 A
+(43)申请公布日 2025.06.03
+(21)申请号 202510261979 .6
+(22)申请日 2025 .03 .05
+
+G06F 40/253 (2020 .01)
+G06F 40/30 (2020 .01)
+
+(71)申请人 广州小鹏汽车科技有限公司
+地址 510000 广东省广州市天河区岑村松
+岗大街8号
+(72)发明人 王小平 赵群 李晓辰 支淑婷
+孟菲 王文杰
+(74)专利代理机构 北京清亦华知识产权代理事
+务所(普通合伙) 11201
+专利代理师 魏宇晴
+(51)Int .Cl .
+
+G10L 15/26 (2006 .01)
+G10L 15/02 (2006 .01)
+G10L 15/18 (2013 .01)
+G06F 40/211 (2020 .01)
+
+CN 120089140 A
+
+权利要求书2页
+
+(54)发明名称
+声学语义大模型、服务器、语音交互方法和
+存储介质
+(57)摘要
+本申请公开了一种声学语义大模型、服务
+器、语音交互方法和计算机可读存储介质。声学
+语义大模型包括声学编码模块、字符转写模块、
+知识检索模块和大语言模型模块。声学编码模块
+被配置为根据输入的语音请求,
+生成语音请求的
+声学特征向量。字符转写模块被配置为将语音请
+求转写为相对应的字符序列,字符序列包括语音
+请求中各文字相对应的字符。知识检索模块被配
+置为根据字符序列,自外部知识库中,获取补充
+信息。大语言模型模块被配置为根据声学特征向
+量和补充信息,确定自然语言处理结果。如此,通
+过端到端的声学语义大模型,减少了多个模块的
+串行处理,降低了处理语音请求的时延,提升了
+模型响应速度,从而增强用户体验。
+
+说明书13页
+
+附图4页
+
+CN 120089140 A
+
+权
+
+利
+
+要
+
+求
+
+书
+
+1/2 页
+
+1 .一种声学语义大模型,其特征在于,所述声学语义大模型包括声学编码模块、字符转
+写模块、
+知识检索模块和大语言模型模块;
+所述声学编码模块被配置为根据输入的语音请求,生成所述语音请求的声学特征向
+量;
+所述字符转写模块被配置为将所述语音请求转写为相对应的字符序列,所述字符序列
+包括所述语音请求中各文字相对应的字符;
+所述知识检索模块被配置为根据所述字符序列,
+自外部知识库中,获取补充信息;
+所述大语言模型模块被配置为根据所述声学特征向量和所述补充信息,确定自然语言
+处理结果。
+2 .根据权利要求1所述的声学语义大模型,其特征在于,所述声学编码模块被配置为:
+对所述语音请求进行特征提取处理,
+生成语义声学特征;
+对所述语义声学特征进行编码处理,
+生成所述声学特征向量。
+3 .根据权利要求1所述的声学语义大模型,其特征在于,所述字符转写模块被配置为:
+基于预设算法,对所述声学特征向量进行映射处理,以将所述语音请求转写为所述字
+符序列。
+4 .根据权利要求1所述的声学语义大模型,其特征在于,所述外部知识库基于键信息和
+值信息构建,
+其中,所述键信息基于汉语拼音和英文字母构建,所述值信息基于汉字构建;
+所述外部知识库包括基础知识库,并以预定周期对所述基础知识库进行迭代更新。
+5 .根据权利要求4所述的声学语义大模型,其特征在于,所述字符包括汉语拼音和/或
+英文字母,所述知识检索模块被配置为:
+根据所述字符序列,
+自所述外部知识库中,
+确定与所述字符序列相对应的候选键信息;
+根据所述候选键信息,将与所述候选键信息相对应的候选值信息,确定为所述候选信
+息;
+根据所述候选信息的引用次数排序结果,
+自所述候选信息中,
+确定所述补充信息。
+6 .根据权利要求1所述的声学语义大模型,其特征在于,所述大语言模型模块被配置
+为:
+对所述声学特征向量和所述补充信息进行融合处理,
+生成融合信息;
+根据所述融合信息,
+确定所述自然语言处理结果。
+7 .根据权利要求6所述的声学语义大模型,其特征在于,所述大语言模型模块被配置
+为:
+对所述融合信息进行槽位识别,
+得到槽位识别结果;
+对所述融合信息进行应用程序接口预测,
+得到预测应用接口;
+根据所述槽位识别结果和所述预测应用接口、
+选择所述预测应用接口执行应用程序接
+口参数填充,
+得到所述自然语言处理结果。
+8 .一种服务器,其特征在于,所述服务器包括处理器和存储器,所述存储器上存储有计
+算机程序,当所述计算机程序被所述处理器执行时,实现权利要求1‑7任一项所述的声学语
+义大模型。
+9 .一种语音交互方法,其特征在于,所述语音交互方法基于如权利要求1‑7任意一项所
+述的声学语义大模型,所述方法包括:
+2
+
+CN 120089140 A
+
+权
+
+利
+
+要
+
+求
+
+书
+
+2/2 页
+
+获取当前语音请求;
+基于所述声学语义大模型,根据所述当前语音请求,确定与所述当前语音请求相对应
+的车辆控制指令,进行所述语音交互。
+10 .一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理
+器执行的情况下,
+实现如权利要求9所述的方法的步骤。
+
+3
+
+CN 120089140 A
+
+说
+
+明
+
+书
+
+1/13 页
+
+声学语义大模型、服务器、语音交互方法和存储介质
+技术领域
+[0001] 本申请涉及语音交互领域,
+更具体而言,涉及一种声学语义大模型、服务器、语音
+交互方法和计算机可读存储介质。
+背景技术
+[0002] 相关技术中,
+为方便用户驾驶车辆,车载智能助手通常通过多个模块对语音请求
+的串行处理,包括通过声学拒识模块对语音请求进行声学拒识处理、通过语音识别模块对
+语音请求进行语音识别处理、
+基于知识检索模块对语音请求进行检索处理和利用自然语言
+处理模块对语音请求进行自然语言处理。然而如此,需要等待每个串行模块对语音请求的
+处理完成后,才能生成能够满足用户需求的自然语言理解结果,整体耗时较长,用户体验较
+差。
+发明内容
+[0003] 本申请提供了一种声学语义大模型、
+服务器、语音交互方法和计算机可读存储介
+质。
+[0004] 本申请实施方式提供一种声学语义大模型,
+所述声学语义大模型包括声学编码模
+块、
+字符转写模块、
+知识检索模块和大语言模型模块;
+[0005] 所述声学编码模块被配置为根据输入的语音请求,
+生成所述语音请求的声学特征
+向量;
+[0006] 所述字符转写模块被配置为将所述语音请求转写为相对应的字符序列,
+所述字符
+序列包括所述语音请求中各文字相对应的字符;
+[0007] 所述知识检索模块被配置为根据所述字符序列,
+自外部知识库中,获取补充信息;
+[0008] 所述大语言模型模块被配置为根据所述声学特征向量和所述补充信息,
+确定自然
+语言处理结果。
+[0009] 如此,
+声学语义大模型包括声学编码模块、
+字符转写模块、知识检索模块和大语言
+模型模块。其中,声学编码模块能够根据输入的语音请求,生成语音请求的声学特征向量。
+字符转写模块能够将语音请求转写为相对应的字符序列,字符序列包括语音请求中各文字
+相对应的字符。知识检索模块能够根据字符序列,
+自外部知识库中,获取补充信息。大语言
+模型模块能够根据声学特征向量和补充信息,确定自然语言处理结果。
+这样,通过端到端的
+声学语义大模型,减少了多个模块的串行处理,
+降低了处理语音请求的时延,提升了模型响
+应速度,从而增强用户体验。并且,通过汉语拼音或英文字母的匹配进行知识检索,避免了
+汉字解码的困难,提升了语音请求的识别准确性,从而增强声学语义大模型的语义理解能
+力和鲁棒性。
+[0010] 某些实施方式中,
+所述声学编码模块被配置为:
+[0011] 对所述语音请求进行特征提取处理,
+生成语义声学特征;
+[0012] 对所述语义声学特征进行编码处理,
+生成所述声学特征向量。
+4
+
+CN 120089140 A
+
+说
+
+明
+
+[0013]
+
+书
+
+2/13 页
+
+如此,声学编码模块能够对语音请求进行特征提取处理,
+生成语义声学特征。并能
+够对语义声学特征进行编码处理,生成声学特征向量。这样,通过提取语义声学特征,能够
+准确地捕捉语音信号的语义信息,并能够降低噪声等因素对语音识别的影响,提高声学语
+义大模型的语义理解能力和鲁棒性。
+[0014] 在某些实施方式中,
+所述字符转写模块被配置为:
+[0015] 基于预设算法,
+对所述声学特征向量进行映射处理,以将所述语音请求转写为所
+述字符序列。
+[0016] 如此,
+字符转写模块能够基于预设算法,对声学特征向量进行映射处理,
+以将语音
+请求转写为字符序列。
+这样,通过预设算法对声学特征向量进行映射处理,能够准确地将语
+音信号转换为字符序列,为后续的知识检索提供基础。
+[0017] 在某些实施方式中,
+所述外部知识库基于键信息和值信息构建,其中,所述键信息
+基于汉语拼音和英文字母构建,所述值信息基于汉字构建;
+[0018] 所述外部知识库包括基础知识库,
+并以预定周期对所述基础知识库进行迭代更
+新。
+[0019] 如此,
+外部知识库基于键信息和值信息构建,其中,键信息基于汉语拼音和英文字
+母构建,值信息基于汉字构建。此外,外部知识库包括基础知识库,并以预定周期对基础知
+识库进行迭代更新。
+这样,
+由于拼音和字母的索引方式比直接使用汉字更为简单和快速,通
+过使用汉语拼音和英文字母作为键信息,能够快速进行索引和检索。并且,通过预定周期对
+基础知识库进行迭代更新,
+可以确保外部知识库中内容的实时性。
+[0020] 在某些实施方式中,
+所述字符包括汉语拼音和/或英文字母,所述知识检索模块被
+配置为:
+[0021] 根据所述字符序列,
+自所述外部知识库中,确定与所述字符序列相对应的候选键
+信息;
+[0022] 根据所述候选键信息,
+将与所述候选键信息相对应的候选值信息,确定为所述候
+选信息;
+[0023] 根据所述候选信息的引用次数排序结果,
+自所述候选信息中,
+确定所述补充信息。
+[0024] 如此,
+知识检索模块能够根据字符序列,
+自外部知识库中,确定与字符序列相对应
+的候选键信息。接着,知识检索模块能够根据候选键信息,将与候选键信息相对应的候选值
+信息,确定为候选信息。最后,知识检索模块能够根据候选信息的引用次数排序结果,
+自候
+选信息中,确定补充信息。这样,通过候选键信息和字符序列的匹配,可以确保检索到的补
+充信息与用户输入的字符序列相匹配,从而提高知识检索的准确性。并且,通过候选信息引
+用次数的排序,
+可以优先选择引用次数最高的信息,从而合理地处理多义字的情况。
+[0025] 在某些实施方式中,
+所述大语言模型模块被配置为:
+[0026] 对所述声学特征向量和所述补充信息进行融合处理,
+生成融合信息;
+[0027] 根据所述融合信息,
+确定所述自然语言处理结果。
+[0028] 如此,
+大语言模型模块能够对声学特征向量和补充信息进行融合处理,生成融合
+信息。接着,大语言模型模块能够根据融合信息,确定自然语言处理结果。
+这样,通过融合声
+学特征向量和补充信息,能够帮助大语言模型准确地理解用户意图,从而提高识别准确率,
+增强用户体验。
+5
+
+CN 120089140 A
+
+说
+
+明
+
+书
+
+3/13 页
+
+[0029]
+
+在某些实施方式中,所述大语言模型模块被配置为:
+[0030] 对所述融合信息进行槽位识别,
+得到槽位识别结果;
+[0031] 对所述融合信息进行应用程序接口预测,
+得到预测应用接口;
+[0032] 根据所述槽位识别结果和所述预测应用接口、
+选择所述预测应用接口执行应用程
+序接口参数填充,
+得到所述自然语言处理结果。
+[0033] 如此,
+大语言模型模块能够对融合信息进行槽位识别,得到槽位识别结果。接着,
+大语言模型模块能够对融合信息进行应用程序接口预测,得到预测应用接口。最后,大语言
+模型模块能够根据槽位识别结果和预测应用接口、
+选择预测应用接口执行应用程序接口参
+数填充,得到自然语言处理结果。这样,通过槽位识别,大语言模型能够准确地理解用户指
+令中各个实体的含义,从而提升用户体验。通过应用接口预测和参数填充,大语言模型能够
+根据用户指令选择合适的接口并填充相应的参数,实现灵活的指令处理,从而提升用户体
+验。
+[0034] 本申请实施方式提供了一种服务器,
+所述服务器部署有上述的声学语义大模型。
+[0035] 本申请实施方式提供一种语音交互方法,
+所述方法包括:
+[0036] 获取当前语音请求;
+[0037] 基于所述声学语义大模型,
+根据所述当前语音请求,确定与所述当前语音请求相
+对应的车辆控制指令,进行所述语音交互。
+[0038] 如此,
+获取当前语音请求。接着,基于声学语义大模型,根据当前语音请求,确定与
+当前语音请求相对应的车辆控制指令,进行语音交互。这样,基于上述的声学语义大模型,
+能够迅速且准确地对用户语音请求进行处理,增强用户体验。
+[0039] 本申请实施方式提供了一种计算机可读存储介质,
+其上存储有计算机程序,所述
+计算机程序被处理器执行的情况下,
+实现如上述的语音交互方法的步骤。
+[0040] 本申请的实施方式的附加方面和优点将在下面的描述中部分给出,
+部分将从下面
+的描述中变得明显,或通过本申请的实施方式的实践了解到。
+附图说明
+[0041] 本申请的上述和/或附加的方面和优点从结合下面附图对实施方式的描述中将变
+得明显和容易理解,其中:
+[0042] 图1是本申请实施方式的声学语义大模型的结构示意图;
+[0043] 图2是本申请实施方式的语音交互方法的流程示意图之一;
+[0044] 图3是本申请实施方式的语音交互方法的流程示意图之二;
+[0045] 图4是本申请实施方式的语音交互方法的流程示意图之三;
+[0046] 图5是本申请实施方式的语音交互方法的流程示意图之四;
+[0047] 图6是本申请实施方式的语音交互方法的流程示意图之五;
+[0048] 图7是本申请实施方式的语音交互方法的流程示意图之六;
+[0049] 图8是本申请实施方式的语音交互方法的流程示意图之七。
+具体实施方式
+[0050] 下面详细描述本申请的实施方式,
+实施方式的示例在附图中示出,其中,相同或类
+6
+
+CN 120089140 A
+
+说
+
+明
+
+书
+
+4/13 页
+
+似的标号自始至终表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附
+图描述的实施方式是示例性的,仅用于解释本申请的实施方式,而不能理解为对本申请的
+实施方式的限制。
+[0051] 相关技术中,
+为了方便用户在驾驶车辆时能够安全、
+有效地进行交互,往往使用车
+载智能助手辅助用户及时车辆。对于用户发出的语音请求,车载智能助手普遍采用多个模
+块对语音请求进行串行处理:
+[0052] 首先,
+通过声学拒识模块对用户的语音请求进行声学拒识处理,声学拒识模型分
+析语音请求的音频质量,判断是否为噪声或受损音频。若语音请求的音频质量不良 (如背景
+嘈杂或断断续续),则判定为无效语音请求,直接拒识,
+结束流程。若语音请求的音频质量良
+好,则判定为有效语音请求,放行语音请求至下一模块。
+[0053] 接着,
+有效语音请求会被送入语音识别模块,语音识别模块能够将用户的语音请
+求转换为文字,即对语音信号进行解码,将其转换为可理解的文本信息。然而,若是用户语
+音请求表述不标准,语音识别模块可能无法将用户语音请求转换为正确的文本信息。例如,
+用户语音请求为“我想我妈了,帮我打电话给她”,语音识别模块有可能因为口音问题,将语
+音请求转换为“我想我马了,帮我打电话给她”。这样,后续步骤将基于错误文本“我想我马
+了,帮我打电话给她”进行,
+无法满足用户需求。
+[0054] 然后,
+转换后的文本信息会进入知识检索模块,知识检索模块能够根据用户的请
+求,在车载智能助手的知识库中检索相关的信息。若检索到相关条目,将其作为补充知识。
+若未检索到(如无匹配内容或相似度低于阈值),则不添加额外知识。例如,如果用户询问附
+近的餐馆,知识检索模块会搜索用户当前的位置信息,并检索附近的餐馆信息。
+[0055] 最后,
+检索到的信息会进入自然语言处理模块,自然语言处理模块能够理解文本
+信息和补充信息的含义,包括但不限于词法分析、句法分析、
+语义理解等,最终生成满足用
+户需求的自然语言理解结果。
+[0056] 然而,
+上述串行处理流程需要依次等待每个模块完成处理,导致整体响应时间较
+长,用户体验较差,
+尤其是在需要快速响应的场景下,例如导航或紧急呼叫等。
+[0057] 基于上述的问题,
+请参阅图1,本申请实施方式提供一种声学语义大模型1000,声
+学语义大模型1000包括声学编码模块100、
+字符转写模块200、
+知识检索模块300和大语言模
+型模块400。
+[0058] 其中,
+声学编码模块100能够根据输入的语音请求,生成语音请求的声学特征向
+量;
+[0059] 字符转写模块200能够将语音请求转写为相对应的字符序列,
+字符序列包括语音
+请求中各文字相对应的字符;
+[0060] 知识检索模块300能够根据字符序列,
+自外部知识库中,获取补充信息;
+[0061] 大语言模型模块400能够根据声学特征向量和补充信息,
+确定自然语言处理结果。
+[0062] 具体地,
+声学语义大模型1000是一个端到端系统,通过将声学编码处理、拼音转写
+处理、
+知识检索处理和自然语言处理融合在一起,实现了端到端的处理,避免了传统方案中
+各个模块之间需要单独训练和调优的复杂性,从而提高了系统的响应速度。在某些实施方
+式中,声学语义大模型1000通常采用深度学习技术构建,例如卷积神经网络(CNN)、循环神
+经网络(RNN)或Transformer模型等,在此不做限定。声学语义大模型1000能够有效地捕捉
+7
+
+CN 120089140 A
+
+说
+
+明
+
+书
+
+5/13 页
+
+语音信号的复杂特征和语义信息,从而提高语音识别和语义理解的准确率。并且,声学语义
+大模型1000通过转写为字符序列,能够适应不同的说话人、
+口音和噪声环境,具有很强的鲁
+棒性。需要说明地,该声学语义大模型1000不仅能够部署在车载智能助中,在智能家居、智
+能客服等领域也有着广泛的应用前景。
+[0063] 声学编码模块100是声学语义大模型1000中负责将语音信号转换为声学特征向量
+的模块,通过信号处理技术,例如傅里叶变换、滤波器组等,将语音信号转换成声学特征向
+量,为后续的任务提供数据信息支持。声学编码模块100相当于传统方案中声学拒识模块和
+语音识别模块的结合,能够实现声学拒识模块和语音识别模块的部分功能。
+这样,声学编码
+模块100将声学特征提取和语音识别融合在一起,实现了端到端的处理,从而提高了系统的
+响应速度。
+[0064] 语音请求指的是用户通过语音方式向智能座舱系统发出的指令或提问,
+包括多种
+类型的信息。例如,例如,
+“播放歌手A的歌曲B”、
+“导航去北京”、
+“今天的天气怎么样”、
+“附近
+有什么餐厅”、
+“打开空调”和“讲个笑话”等。
+[0065] 声学特征向量指的是从语音请求中提取的能够表征语音请求声学特性的多维向
+量,包括语音请求的重要信息,例如音高、
+音强和音色等,是语音识别、
+语音合成和说话人识
+别等语音处理任务的基础。
+[0066] 字符转写模块200是声学语义大模型1000中将语音识别模型输出的声学特征向量
+转换为拼音序列的模块,为知识检索模块300提供输入,并提高大语言模型模块400的准确
+率。
+[0067] 字符序列指的是由汉语拼音和/或英文字母等字符组成的序列,
+用于表示语音请
+求中的文字信息,
+可以用于检索与语音请求相关的知识。
+[0068] 知识检索模块300是声学语义大模型1000中根据字符序列从外部知识库中检索相
+关知识的模块,能够从外部知识库中获取补充信息,并应用于后续模块。
+[0069] 外部知识库存储有各种知识信息,
+能够为知识检索模块300提供知识来源。
+[0070] 补充信息指的是从外部知识库中检索到的与拼音序列相关的知识,
+为大语言模型
+模块400提供额外的知识,帮助其更好地理解输入文本,并做出更准确的响应。
+[0071] 大语言模型模块400指的是声学语义大模型1000中根据声学特征向量和补充信
+息,确定自然语言处理结果的模块,能够理解和生成自然语言,并进行语义理解和意图识
+别,输出自然语言处理结果,如应用程序接口API和对应的填充参数。在某些实施方式中,大
+语言模型模块400中的大语言模型可以是如BERT等基于Transformer的模型,在此不做限
+定。
+[0072] 首先,
+声学编码模块100接收输入的语音请求,并将语音请求转换为声学特征向
+量。接着,字符转写模块200将语音请求转写为相对应的字符序列,字符序列包括语音请求
+中各文字相对应的字符,即汉语拼音和/或英文字母。由于汉语拼音和英文字母的粒度较
+粗,解码准确性更高。然后,知识检索模块300根据拼音序列,从外部知识库中检索与用户输
+入相关的额外知识,例如歌曲信息、
+地名信息等。最后,大语言模型模块400结合声学特征向
+量和检索到的额外知识,理解用户意图并生成自然语言处理结果,例如API和Arguments。
+[0073] 综上,
+本申请提供的声学语义大模型1000包括声学编码模块100、字符转写模块
+200、
+知识检索模块300和大语言模型模块400。其中,声学编码模块100能够根据输入的语音
+8
+
+CN 120089140 A
+
+说
+
+明
+
+书
+
+6/13 页
+
+请求,
+生成语音请求的声学特征向量。字符转写模块200能够将语音请求转写为相对应的字
+符序列,字符序列包括语音请求中各文字相对应的字符。知识检索模块300能够根据字符序
+列,
+自外部知识库中,获取补充信息。大语言模型模块400能够根据声学特征向量和补充信
+息,确定自然语言处理结果。这样,通过端到端的声学语义大模型1000,减少了多个模块的
+串行处理,
+降低了处理语音请求的时延,提升了模型响应速度,从而增强用户体验。并且,通
+过汉语拼音或英文字母的匹配进行知识检索,避免了汉字解码的困难,提升了语音请求的
+识别准确性,从而增强声学语义大模型1000的语义理解能力和鲁棒性。
+[0074] 在某些实施方式中,
+声学编码模块100能够对语音请求进行特征提取处理,
+生成语
+义声学特征。并能够对语义声学特征进行编码处理,
+生成声学特征向量。
+[0075] 具体地,
+特征提取处理指的是从原始语音请求中提取出与语音识别、语义理解等
+任务相关的有用信息的过程,包括噪声处理、归一化处理、帧处理,特征计算处理和特征归
+一化处理等。
+特征提取处理类似于人类听觉系统对声音的感知过程,即,从声音中提取出有
+用的信息,例如声音的音高、
+音量、
+音色等,并根据这些信息理解声音的含义。
+特征提取处理
+通过模拟人类听觉系统对声音的感知过程,将语音信号转换成计算机可以理解的特征,以
+便进行后续的语音识别、
+语义理解等任务。
+[0076] 语义声学特征指的是从语音请求信号中提取出的与语义信息相关的声学特征,
+是
+连接语音信号和语义信息之间的桥梁。语义声学特征包括音素特征、音节特征和韵律特征
+等语音请求信号中与语义相关的信息。
+[0077] 其中,
+音素特征指的是指与单个音素相关的声学特征,包括音素时长、
+音素能量和
+音素频率等,音素是语音学中用来描述语音的最小单位,它具有区别意义的作用。例如,汉
+语中的“妈”和“马”的发音区别在于“a”和“a”的音素不同,前者是开口呼,后者是合口呼。音
+素时长指的是音素在语音中的持续时间。音素能量指的是音素的能量强度。音素频率指的
+是音素的频率成分。
+[0078] 音节特征指的是指与单个音节相关的声学特征,
+包括音节时长、
+音节能量、
+音节时
+长分布和音节能量分布等,音节是语音结构的基本单位,
+由一个或多个音素组成,并包括一
+个核心音素。音节是语言中可以独立发音的最小单位,例如汉语中的“啊”和“衣”等都是一
+个音节。音节时长指的是音节在语音中的持续时间。音节能量指的是音节的能量强度。音节
+时长分布指的是音节内部各音素时长的分布情况。音节能量分布指的是音节内部各音素能
+量的分布情况。
+[0079] 韵律特征指的是与语音韵律相关的声学特征,
+包括语调、
+语速和停顿等。语调指的
+是语音的升降变化,例如升调、
+降调、
+平调等。
+语速指的是语音的快慢程度。停顿指的是语音
+的停顿位置和停顿时间。
+[0080] 以“播放歌手A的歌曲B”
+这个语音请求为例,
+语义声学特征包括以下内容:
+[0081] 音素特征:
+例如“b”、
+“o”、
+“f”、
+“a”、
+“ng”等音素的时长、
+能量等。
+[0082] 音节特征:
+例如“bo”、
+“fang”、
+“ge”、
+“shou”、
+“A”、
+“ge”、
+“qu”、
+“B”等音节的时长、
+能
+量和时长分布等。
+[0083] 韵律特征:
+例如语调的升降、
+语速的快慢、
+停顿的位置等。
+[0084] 声学特征向量指的是将语音请求信号转换成计算机可以理解的数学形式,
+包括语
+音信号中与语义相关的信息,可以用于后续的自然语言处理和知识检索等。声学特征向量
+9
+
+CN 120089140 A
+
+说
+
+明
+
+书
+
+7/13 页
+
+通常包括如梅尔频率倒谱系数特征值、音素特征值、音节特征值和韵律特征值等多个特征
+值。梅尔频率倒谱系数特征值(Mel‑frequency Cepstral Coefficients,MFCC)是一种常用
+的语音特征参数,它通过将语音信号转换到梅尔频率域,并对对数谱进行离散余弦变换来
+提取特征。
+[0085] 声学编码模块100首先对输入的语音请求进行特征提取,
+生成语义声学特征。接
+着,声学编码模块100将语义声学特征编码成声学特征向量。
+这些声学特征向量是高维空间
+中的点,能够代表语音信号的复杂特性。
+[0086] 如此,
+声学编码模块100能够对语音请求进行特征提取处理,生成语义声学特征。
+并能够对语义声学特征进行编码处理,生成声学特征向量。这样,通过提取语义声学特征,
+能够准确地捕捉语音信号的语义信息,并能够降低噪声等因素对语音识别的影响,提高声
+学语义大模型1000的语义理解能力和鲁棒性。
+[0087] 在某些实施方式中,
+字符转写模块200能够基于预设算法,对声学特征向量进行映
+射处理,
+以将语音请求转写为字符序列。
+[0088] 具体地,
+字符转写模块200是一个预训练完成的模型,能够将声学特征向量映射为
+字符序列。在某些实施方式中,字符转写模块200能够将Recurrent Neural Network、
+Convolutional Neural Network和ransformer深度神经网络模型其中之一作为基座模型。
+随后,根据预设训练数据对基座模型进行训练,并选择相应预设算法,构建得到字符转写模
+块200。需要说明地,根据预设训练数据对基座模型进行训练时,主要学习将声学特征向量
+映射为汉语拼音和如何将声学特征向量映射为26个英文字母。相比于使用汉字进行训练,
+通过使用拼音和英文字母进行训练,字符转写模块200的建模的粒度更粗、建模难度更低,
+并且训练完成的字符转写模块200解码准确性更高。例如,用户语音请求“我想我妈(由于地
+域性的口音,说成了第三声)了,帮我打电话给她”,若是直接转为汉字可能就是“我想我马
+了,帮我打电话给她”,影响后续处理。而转为汉语拼音“wo xiang wo ma le ,bang wo da
+dian hua gei ta”,在后续大语言模型模块400进行处理时,能够发现并纠正。
+[0089] 此外,
+使用拼音和英文字母进行建模,可以在外部知识库中根据拼音和英文字母
+进行知识匹配,例如可以匹配“ge shou A”和“ge qu B”等拼音序列,从而提高知识检索的
+准确性。并且,
+使用拼音和英文字母进行建模,可以更好地处理新词、
+热词和地名,即使模型
+训练时没有见过这些词,也能够通过拼音进行匹配,例如可以解码出“ge qu B”等新词,从
+而提高字符转写模块200的鲁棒性。
+[0090] 预设算法指的是字符转写模块200中的解码算法,
+用于指导字符序列转写的过程。
+在某些实施方式中,预设算法能够是贪心算法、Beam Search算法、Prefix Beam Search算
+法和Modified Beam Search算法中的任意一种,在此不做限定。在本申请实施方式所举示
+例中,考虑到声学语义大模型1000的时延要求,使用贪心算法作为预设算法。
+贪心算法一种
+启发式搜索算法,
+通过在每一步选择当前看起来最优的选项,
+来尝试找到问题的最优解。
+[0091] 拼音转写模块接收声学编码模块100输出的声学特征向量。
+接着,拼音转写模块使
+用预设算法对声学特征向量进行映射处理,将声学特征向量转换为字符序列,这些字符序
+列对应于输入声学语义大模型1000的语音请求。
+[0092] 如此,
+字符转写模块200能够基于预设算法,对声学特征向量进行映射处理,以将
+语音请求转写为字符序列。
+这样,通过预设算法对声学特征向量进行映射处理,能够准确地
+10
+
+CN 120089140 A
+
+说
+
+明
+
+书
+
+8/13 页
+
+将语音信号转换为字符序列,为后续的知识检索提供基础。
+[0093] 在某些实施方式中,
+外部知识库基于键信息和值信息构建,其中,键信息基于汉语
+拼音和英文字母构建,值信息基于汉字构建。并且。外部知识库包括基础知识库,并以预定
+周期对基础知识库进行迭代更新。
+[0094] 具体地,
+外部知识库基于键信息和值信息构建。其中,键信息(Key)由汉语拼音和
+英文字母构建,这意味着外部知识库中的每个条目都通过拼音和字母进行索引,而不是直
+接使用汉字,相比于直接使用汉字进行匹配,拼音匹配可以更好地应对新词、
+热词和地名等
+变化,例如用户可以说“qi che shou ce”,外部知识库能够找到“汽车使用手册”的相关信
+息。值信息(Value)由汉字构建,即具体的知识内容,
+使用汉字进行描述,每个键信息都对应
+一个或多个值信息。在某些实施方式中,外部知识库的构建流程如下:
+第一,进行数据收集,
+从互联网、
+书籍、
+百科全书等来源收集知识数据,例如歌词、
+电影台词、
+新闻等。
+第二,进行数
+据清洗,对收集到的数据进行清洗,去除噪声、重复信息等,并进行分词和词性标注。第三,
+将清洗后的数据构建成键值对形式,其中键信息基于汉语拼音和英文字母构建,值信息基
+于汉字构建。例如,将“汽车”的键信息设置为“qi che”,值信息设置为“汽车是一种代步工
+具”。
+第四,知识库构建,将构建好的键值对存储在外部知识库中,并按照拼音字母顺序进行
+组织。
+[0095] 外部知识库以基础知识库作为外部知识库的主体部分,
+基础知识库中包括大量的
+基础知识和信息。并且,基础知识库会定期进行更新,以保证知识的时效性和准确性,更好
+地满足用户的需求。
+更新周期是预定的,
+可以是每天、
+每周、
+每月等。
+[0096] 如此,
+外部知识库基于键信息和值信息构建,其中,键信息基于汉语拼音和英文字
+母构建,值信息基于汉字构建。此外,外部知识库包括基础知识库,并以预定周期对基础知
+识库进行迭代更新。
+这样,
+由于拼音和字母的索引方式比直接使用汉字更为简单和快速,通
+过使用汉语拼音和英文字母作为键信息,能够快速进行索引和检索。并且,通过预定周期对
+基础知识库进行迭代更新,
+可以确保外部知识库中内容的实时性。
+[0097] 在某些实施方式中,
+知识检索模块300能够根据字符序列,自外部知识库中,确定
+与字符序列相对应的候选键信息。
+[0098] 接着,
+知识检索模块300能够根据候选键信息,将与候选键信息相对应的候选值信
+息,
+确定为候选信息。
+[0099] 最后,
+知识检索模块300能够根据候选信息的引用次数排序结果,
+自候选信息中,
+确定补充信息。
+[0100] 具体地,
+候选键信息是与用户输入的字符序列相匹配的信息,可以作为检索知识
+库的线索,即“索引”或“关键词”,能够帮助我们缩小检索范围,快速找到与用户输入相关的
+信息。例如,输入字符序列为“qi che”,候选键信息可能为“qi che an quan”、
+“qi che jia
+shi qing kuang”和“qi che bao yang qing kuang”等。
+[0101] 候选值信息是指与候选键信息相对应的,
+从外部知识库中提取出来的信息。候选
+值信息是与输入的字符序列相关的,可以帮助用户获取更全面的信息,即“详细信息”,提供
+了与用户输入相关的更具体的信息。
+[0102] 候选信息指的知识检索过程中,
+从外部知识库中检索到的与输入的字符序列相关
+的所有知识片段。
+11
+
+CN 120089140 A
+
+说
+
+明
+
+[0103]
+
+书
+
+9/13 页
+
+候选信息的引用次数指的是每个候选信息在知识库中被引用的次数,可以理解为
+该候选信息的重要程度或热度。引用次数排序结果指的是根据候选信息的引用次数,将这
+些候选信息按照重要程度或热度进行排序。例如,输入的字符序列为“ge shou A”进行知识
+检索,知识库中检索到了以下三个与“ge shou A”相关的候选信息:候选信息A:ge shou A,
+著名歌手,代表作有《ge qu B》、
+《ge qu C》等。候选信息B:ge shou A,知名演员,代表作有
+《ying shi D》、
+《ying shi F》等。候选信息C:ge shou A,著名篮球运动员,效力于知名球
+队。假设候选信息A的引用次数最高,候选信息B的引用次数次之,候选信息C的引用次数最
+低。那么,根据候选信息的引用次数排序结果,排名由高到低,这三个候选信息将被排序为:
+候选信息A、
+候选信息B和候选信息C。
+这样,通过候选信息的排序,可以优先选择引用次数最
+高的信息,从而更好地处理多义字的情况。
+[0104] 需要说明地,
+知识检索模块300采用检索增强生成技术(Retrieval Augmented
+Generation,RAG),RAG知识检索技术是一种结合信息检索和自然语言生成的技术,旨在利
+用外部知识库来增强模型的性能。
+[0105] 如此,
+知识检索模块300能够根据字符序列,自外部知识库中,确定与字符序列相
+对应的候选键信息。接着,知识检索模块300能够根据候选键信息,将与候选键信息相对应
+的候选值信息,确定为候选信息。最后,知识检索模块300能够根据候选信息的引用次数排
+序结果,
+自候选信息中,确定补充信息。
+这样,通过候选键信息和字符序列的匹配,可以确保
+检索到的补充信息与用户输入的字符序列相匹配,从而提高知识检索的准确性。并且,通过
+候选信息引用次数的排序,可以优先选择引用次数最高的信息,从而合理地处理多义字的
+情况。
+[0106] 在某些实施方式中,
+大语言模型模块400能够对声学特征向量和补充信息进行融
+合处理,
+生成融合信息。
+[0107] 接着,
+大语言模型模块400能够根据融合信息,
+确定自然语言处理结果。
+[0108] 具体地,
+融合处理指的是将声学特征向量和补充信息结合起来,以便大语言模型
+模块400更好地理解和处理用户语音请求。在某些实施方式中,融合处理的方式包括特征拼
+接和特征加权拼接等,
+特征拼接指的是将声学特征向量和补充信息直接拼接成一个更长的
+特征向量。
+特征加权拼接指的是对声学特征向量和补充信息进行加权,
+然后进行拼接。
+[0109] 将声学特征向量和补充信息输入到大语言模型模块400,
+该模块会对这些信息进
+行融合处理,
+结合声学特征向量和补充信息,
+生成语义理解更加全面的融合信息。声学特征
+向量包含了丰富的声学信息,补充信息则提供了额外的语义信息,两者的融合能够帮助大
+语言模型更准确地理解用户意图,从而提高识别准确率。
+[0110] 接着,
+大语言模型模块400根据融合信息,确定自然语言处理结果,例如识别用户
+指令、
+回答用户问题等。
+[0111] 如此,
+大语言模型模块400能够对声学特征向量和补充信息进行融合处理,
+生成融
+合信息。接着,大语言模型模块400能够根据融合信息,确定自然语言处理结果。这样,通过
+融合声学特征向量和补充信息,能够帮助大语言模型准确地理解用户意图,从而提高识别
+准确率,增强用户体验。
+[0112] 在某些实施方式中,
+大语言模型模块400能够对融合信息进行槽位识别,得到槽位
+识别结果。
+12
+
+CN 120089140 A
+[0113]
+
+说
+
+明
+
+书
+
+10/13 页
+
+接着,大语言模型模块400能够对融合信息进行应用程序接口预测,得到预测应用
+
+接口。
+[0114]
+
+最后,大语言模型模块400能够根据槽位识别结果和预测应用接口、
+选择预测应用
+接口执行应用程序接口参数填充,
+得到自然语言处理结果。
+[0115] 具体地,
+槽位识别指的是从用户的输入中提取特定的信息片段,这些信息片段通
+常被称为"槽位"(slots)。槽位通常是完成某个任务或请求所必需的关键信息,如时间、
+地
+点、
+对象等。
+以用户语音请求为“明天温度多少”为例,进行槽位识别可以得到的槽位信息包
+括[“明天”——日期(Date)],即槽位信息包括槽位取值和槽位类型,其中“明天”为槽位取
+值,日期(Date)为槽位类型。以用户语音请求“导航到地址Q”为例,进行槽位识别可以得到
+的槽位信息为[“地址Q”——地名(Place)],其中“中关村”为槽位取值,
+地名(Place)为槽位
+类型。槽位识别是自然语言处理中的一个重要任务,其目标是识别文本中的特定实体和属
+性,并将其与预定义的槽位对应起来。槽位识别可以帮助大语言模型模块400理解用户的意
+图,并生成更准确、
+更自然的回复。
+[0116] 槽位识别结果指的是对语音请求进行槽位识别,
+得到的命名实体。如上述的槽位
+信息[“明天”——日期(Date)]和槽位信息[“地址Q”——地名(Place)]等。
+[0117] 应用程序接口预测指的是根据输入文本的语义,
+预测出与输入文本对应的操作类
+型,并生成相应的应用程序接口调用指令。应用程序接口预测可以帮助大语言模型模块400
+理解用户的意图,并执行相应的操作。
+[0118] 应用程序接口参数填充是自然语言处理中的一个任务,
+其目标是根据输入文本的
+语义和应用程序接口调用指令,为应用程序接口调用指令中的参数指定具体的值。
+[0119] 大语言模型模块400首先对融合信息进行槽位识别,
+将用户的指令分解为不同的
+槽位,例如歌曲名、
+歌手名和播放模式等。接着,大语言模型模块400根据融合信息进行应用
+程序接口预测,预测用户需要执行的应用程序接口,例如“播放歌曲”和“查询天气”等。最
+后,大语言模型模块400根据槽位识别结果和预测应用接口,选择相应的预测应用接口执行
+应用程序接口参数填充,例如将歌曲名和歌手名作为参数填充到“播放歌曲”接口中。
+[0120] 最终,
+大语言模型模块400输出自然语言处理结果,例如识别用户指令为“播放歌
+曲”,并调用音乐播放器播放用户指定的歌曲。
+[0121] 如此,
+大语言模型模块400能够对融合信息进行槽位识别,得到槽位识别结果。接
+着,大语言模型模块400能够对融合信息进行应用程序接口预测,得到预测应用接口。最后,
+大语言模型模块400能够根据槽位识别结果和预测应用接口、选择预测应用接口执行应用
+程序接口参数填充,得到自然语言处理结果。这样,通过槽位识别,大语言模型能够准确地
+理解用户指令中各个实体的含义,从而提升用户体验。通过应用接口预测和参数填充,大语
+言模型能够根据用户指令选择合适的接口并填充相应的参数,实现灵活的指令处理,从而
+提升用户体验。
+[0122] 本申请实施方式提供了一种服务器,
+服务器部署有上述的声学语义大模型1000。
+[0123] 具体地,
+服务器是运行应用程序并提供服务的硬件设备,能够为声学语义大模型
+1000提供运行环境,包括计算资源、
+存储空间和网络连接等。并能够将训练好的声学语义大
+模型1000部署到线上环境,
+使其能够对外提供服务。需要说明地,车辆的算力足够声学语义
+大模型1000使用时,服务器能够部署在车辆本地。
+反之,则部署在云端。
+13
+
+CN 120089140 A
+
+说
+
+明
+
+[0124]
+
+书
+
+11/13 页
+
+服务器接收来自用户的语音输入,并将处理结果返回给用户。
+[0125] 如此,
+服务器将声学语义大模型1000集成到一个完整的系统中,实现从语音输入
+到自然语言处理结果输出的端到端流程,快速响应用户的语音指令,并提供准确的结果,从
+而提升用户体验。
+[0126] 请参阅图2,
+本申请实施方式提供一种语音交互方法,方法包括:
+[0127] 01:
+获取当前语音请求;
+[0128] 02:
+基于声学语义大模型,根据当前语音请求,确定与当前语音请求相对应的车辆
+控制指令,进行语音交互。
+[0129] 具体地,
+系统通过麦克风等硬件设备接收用户发出的当前语音请求。接着,声学语
+义大模型1000对当前语音请求进行理解和分析,识别出用户的意图和目标,并将其转换为
+车辆可以理解的车辆控制指令。
+[0130] 请参阅图3,
+在某些实施方式中,步骤02(基于声学语义大模型,根据当前语音请
+求,
+确定与当前语音请求相对应的车辆控制指令),
+包括:
+[0131] 021:
+根据输入的语音请求,
+生成语音请求的声学特征向量;
+[0132] 022:
+将语音请求转写为相对应的字符序列;
+[0133] 023:
+根据字符序列,
+自外部知识库中,获取补充信息;
+[0134] 024:
+根据声学特征向量和补充信息,
+确定自然语言处理结果。
+[0135] 如此,
+通过端到端的声学语义大模型,减少了多个模块的串行处理,
+降低了处理语
+音请求的时延,提升了模型响应速度,从而增强用户体验。并且,通过汉语拼音或英文字母
+的匹配进行知识检索,避免了汉字解码的困难,提升了语音请求的识别准确性,从而增强声
+学语义大模型的语义理解能力和鲁棒性。
+[0136] 请参阅图4,
+在某些实施方式中,步骤021(根据输入的语音请求,生成语音请求的
+声学特征向量),
+包括:
+[0137] 0211:
+对语音请求进行特征提取处理,
+生成语义声学特征;
+[0138] 0212:
+对语义声学特征进行编码处理,
+生成声学特征向量。
+[0139] 如此,
+通过提取语义声学特征,能够准确地捕捉语音信号的语义信息,并能够降低
+噪声等因素对语音识别的影响,
+提高声学语义大模型的语义理解能力和鲁棒性。
+[0140] 请参阅图5,
+在某些实施方式中,步骤022(将语音请求转写为相对应的字符序列),
+包括:
+[0141] 0221:
+基于预设算法,对声学特征向量进行映射处理,
+以将语音请求转写为字符序
+列。
+[0142] 如此,
+通过预设算法对声学特征向量进行映射处理,能够准确地将语音信号转换
+为字符序列,为后续的知识检索提供基础。
+[0143] 在某些实施方式中,
+外部知识库基于键信息和值信息构建,其中,键信息基于汉语
+拼音和英文字母构建,值信息基于汉字构建。并且,外部知识库包括基础知识库,并以预定
+周期对基础知识库进行迭代更新。
+[0144] 如此,
+由于拼音和字母的索引方式比直接使用汉字更为简单和快速,通过使用汉
+语拼音和英文字母作为键信息,能够快速进行索引和检索。并且,通过预定周期对基础知识
+库进行迭代更新,
+可以确保外部知识库中内容的实时性。
+14
+
+CN 120089140 A
+
+说
+
+明
+
+[0145]
+
+书
+
+12/13 页
+
+请参阅图6,在某些实施方式中,字符包括汉语拼音和/或英文字母,步骤023(根据
+字符序列,
+自外部知识库中,获取补充信息),
+包括:
+[0146] 0231:
+根据字符序列,
+自外部知识库中,
+确定与字符序列相对应的候选键信息;
+[0147] 0232:
+根据候选键信息,将与候选键信息相对应的候选值信息,
+确定为候选信息;
+[0148] 0233:
+根据候选信息的引用次数排序结果,
+自候选信息中,
+确定补充信息。
+[0149] 如此,
+通过候选键信息和字符序列的匹配,可以确保检索到的补充信息与用户输
+入的字符序列相匹配,从而提高知识检索的准确性。并且,通过候选信息引用次数的排序,
+可以优先选择引用次数最高的信息,从而合理地处理多义字的情况。
+[0150] 请参阅图7,
+在某些实施方式中,步骤024(根据声学特征向量和补充信息,确定自
+然语言处理结果),
+包括:
+[0151] 0241:
+对声学特征向量和补充信息进行融合处理,
+生成融合信息;
+[0152] 0242:
+根据融合信息,
+确定自然语言处理结果。
+[0153] 如此,
+通过融合声学特征向量和补充信息,能够帮助大语言模型准确地理解用户
+意图,从而提高识别准确率,增强用户体验。
+[0154] 请参阅图8,
+在某些实施方式中,步骤0242(根据融合信息,确定自然语言处理结
+果),
+包括:
+[0155] 02421:
+对融合信息进行槽位识别,
+得到槽位识别结果;
+[0156] 02422:
+对融合信息进行应用程序接口预测,
+得到预测应用接口;
+[0157] 02423:
+根据槽位识别结果和预测应用接口、
+选择预测应用接口执行应用程序接口
+参数填充,
+得到自然语言处理结果。
+[0158] 如此,
+通过槽位识别,大语言模型能够准确地理解用户指令中各个实体的含义,从
+而提升用户体验。通过应用接口预测和参数填充,大语言模型能够根据用户指令选择合适
+的接口并填充相应的参数,
+实现灵活的指令处理,从而提升用户体验。
+[0159] 需要说明地,
+本申请实施提供的语音交互方法基于前述声学语义大模型1000实
+现。具体而言,语音交互方法的各个步骤均依赖于声学语义大模型1000的各个模块。即,步
+骤021及其子步骤0211和子步骤0212基于声学编码模块100实现,步骤022及其子步骤0221
+基于字符转写模块200实现,步骤023及其子步骤0231、子步骤0232和子步骤0233基于知识
+检索模块300实现,步骤024、步骤024的子步骤0241和子步骤0242、
+及子步骤0242的次步骤
+02421、
+次步骤02422和次步骤02423基于大语言模型模块400实现。其中,关于语音交互方法
+的方法步骤中涉及的技术术语和解释说明,请参考对声学语义大模型各个模块的详细描
+述,
+此处不再赘述。
+[0160] 综上,
+本申请实施方式提供的语音交互方法,基于上述的声学语义大模型1000实
+现,能够迅速且准确地对用户语音请求进行处理,增强用户体验。
+[0161] 本申请还提供了一种计算机可读存储介质,
+其上存储有计算机程序。当计算机程
+序处理器执行的情况下实现如上述的车辆控制方法的步骤。
+[0162] 可以理解,
+计算机程序包括计算机程序代码。
+计算机程序代码可以为源代码形式、
+对象代码形式、
+可执行文件或某些中间形式等。
+计算机可读存储介质可以包括:能够携带计
+算机程序代码的任何实体或装置、
+记录介质、U盘、
+移动硬盘、磁碟、光盘、
+计算机存储器、只
+读存储器(ROM,Read‑Only Memory)、
+随机存取存储器(RAM,Random Access Memory)、
+以及
+15
+
+CN 120089140 A
+
+说
+
+明
+
+书
+
+13/13 页
+
+软件分发介质等。
+[0163] 在本说明书的描述中,
+参考术语“具体地”、
+“进一步地”、
+“特别地”、
+“可以理解地”
+等的描述意指结合实施方式或示例描述的具体特征、
+结构、材料或者特点包含于本申请的
+至少一个实施方式或示例中。在本说明书中,对上述术语的示意性表述不预定指的是相同
+的实施方式或示例。而且,描述的具体特征、
+结构、材料或者特点可以在任何的一个或多个
+实施方式或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可
+以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
+[0164] 流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,
+表示包括
+一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、
+片段或部
+分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺
+序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,
+这应被本申请
+的实施例所属技术领域的技术人员所理解。
+[0165] 尽管上面已经示出和描述了本申请的实施方式,
+可以理解的是,上述实施方式是
+示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对
+上述实施方式进行变化、
+修改、
+替换和变型。
+
+16
+
+CN 120089140 A
+
+说
+
+明
+
+书
+
+图1
+
+图2
+
+17
+
+附
+
+图
+
+1/4 页
+
+CN 120089140 A
+
+说
+
+明
+
+书
+
+图3
+
+图4
+
+18
+
+附
+
+图
+
+2/4 页
+
+CN 120089140 A
+
+说
+
+明
+
+书
+
+图5
+
+图6
+
+19
+
+附
+
+图
+
+3/4 页
+
+CN 120089140 A
+
+说
+
+明
+
+书
+
+图7
+
+图8
+
+20
+
+附
+
+图
+
+4/4 页
+
+
\ No newline at end of file
diff --git a/intelligent_cabin/archive/patents/texts/CN114299931B.txt b/intelligent_cabin/archive/patents/texts/CN114299931B.txt
new file mode 100644
index 0000000..9f9ab02
--- /dev/null
+++ b/intelligent_cabin/archive/patents/texts/CN114299931B.txt
@@ -0,0 +1,1095 @@
+(19)国家知识产权局
+
+(12)发明专利
+(10)授权公告号 CN 114299931 B
+(45)授权公告日 2025.05.30
+(21)申请号 202111574477 .7
+(22)申请日 2021 .12 .21
+(65)同一申请的已公布的文献号
+申请公布号 CN 114299931 A
+(43)申请公布日 2022 .04 .08
+(73)专利权人 广州小鹏汽车科技有限公司
+地址 510000 广东省广州市天河区岑村松
+岗大街8号
+
+G10L 15/22 (2006 .01)
+G10L 15/26 (2006 .01)
+G10L 25/51 (2013 .01)
+G06F 40/30 (2020 .01)
+B60R 16/023 (2006 .01)
+(56)对比文件
+CN 112581955 A ,2021 .03 .30
+CN 113806470 A ,2021 .12 .17
+审查员 白雪旻
+
+(72)发明人 赵群 张天宇 王亭玉 孙文平
+潘晓彤 赵恒艺
+(74)专利代理机构 北京清亦华知识产权代理事
+务所(普通合伙) 11201
+专利代理师 赵静
+
+CN 114299931 B
+
+(51)Int .Cl .
+G10L 15/06 (2013 .01)
+(54)发明名称
+语音交互方法及其装置、
+服务器和可读存储
+介质
+(57)摘要
+本发明公开了一种语音交互方法及其装置、
+服务器和可读存储介质。该语音交互方法包括:
+接收车辆转发的对车辆预设功能调节的当前轮
+的语音请求,
+预设功能指模拟对车辆零部件的操
+作进行刻度调节的功能;读取对车辆预设功能调
+节的上一轮的语音请求;根据当前轮的语音请求
+和上一轮的语音请求在缓存引擎中进行缓存查
+询;在缓存查询的结果为未能查询到对应缓存的
+情况下,利用上一轮的语音请求对当前轮的语音
+请求进行改写;对改写后的当前轮的语音请求进
+行意图识别;根据意图识别的结果完成语音交
+互。本发明结合两轮语音请求,使用高频缓存引
+擎与意图识别相结合的方式识别语音请求的意
+图,
+实现多轮语音请求下,用户意图的准确识别。
+
+权利要求书2页
+
+说明书11页
+
+附图7页
+
+CN 114299931 B
+
+权
+
+利
+
+要
+
+求
+
+书
+
+1/2 页
+
+1 .一种语音交互方法,其特征在于,
+包括:
+接收车辆转发的对车辆预设功能调节的当前轮的语音请求,所述预设功能指模拟对车
+辆零部件的操作进行刻度调节的功能;
+读取对车辆预设功能调节的上一轮的语音请求;
+根据所述当前轮的语音请求和所述上一轮的语音请求在缓存引擎中进行缓存查询;
+在所述缓存查询的结果为未能查询到对应缓存的情况下,利用所述上一轮的语音请求
+对所述当前轮的语音请求进行改写;
+对改写后的所述当前轮的语音请求进行意图识别;
+根据所述意图识别的结果完成语音交互;
+所述语音交互方法包括:
+将出现频率大于预设频率的相邻两轮语音请求添加到所述缓存引擎。
+2 .根据权利要求1所述的语音交互方法,其特征在于,所述语音交互方法包括:
+建立当前轮的语音请求与预设意图之间的映射关系。
+3 .根据权利要求2所述的语音交互方法,其特征在于,所述语音交互方法包括:
+在所述缓存查询的结果为查询到对应缓存的情况下,根据所述映射关系确定所述当前
+轮的语音请求对应的预设意图为目标意图以完成语音交互。
+4 .根据权利要求1所述的语音交互方法,其特征在于,所述利用所述上一轮的语音请求
+对所述当前轮的语音请求进行改写,
+包括:
+通过改写训练数据训练得到改写模型,所述改写训练数据包括相邻两轮语音请求;
+利用所述上一轮的语音请求和所述改写模型对所述当前轮的语音请求进行改写。
+5 .根据权利要求1所述的语音交互方法,其特征在于,所述对改写后的所述当前轮的语
+音请求进行意图识别,
+包括:
+通过意图训练数据训练得到意图识别模型,所述意图训练数据与可进行刻度调节的车
+辆零部件和所述车辆零部件的刻度调节范围相关;
+利用所述意图识别模型对改写后的所述当前轮的语音请求进行意图识别。
+6 .根据权利要求5所述的语音交互方法,其特征在于,所述根据所述意图识别的结果完
+成语音交互,
+包括:
+获取所述意图识别的结果对应各个预设意图的意图判别概率;
+将所述意图判别概率大于概率阈值的一个所述预设意图确定为所述当前轮的语音请
+求对应的目标意图以完成语音交互。
+7 .根据权利要求6所述的语音交互方法,其特征在于,所述预设意图包括:音量调大、
+音
+量调小、
+风量调大、
+风量调小、温度调高、温度调低、
+地图放大、
+地图缩小、屏幕调亮、屏幕调
+暗、屏幕上滑、屏幕下滑、
+仪表调亮、
+仪表调暗、氛围灯调亮、氛围灯调暗、座椅向前、座椅向
+后、
+座椅升高、
+座椅降低、
+椅背向前、
+椅背向后、
+车窗上升和车窗下降中的至少一种。
+8 .根据权利要求6所述的语音交互方法,其特征在于,所述语音交互方法包括:
+在各个所述预设意图的所述意图判别概率均不大于概率阈值的情况下,确定所述当前
+轮的语音请求的意图为非刻度调节意图。
+9 .一种语音交互装置,其特征在于,所述语音交互装置包括:
+接收指令模块,所述接收指令模块用于接收车辆转发的对车辆预设功能调节的当前轮
+2
+
+CN 114299931 B
+
+权
+
+利
+
+要
+
+求
+
+书
+
+2/2 页
+
+的语音请求,所述预设功能指模拟对车辆零部件的操作进行刻度调节的功能;
+读取指令模块,所述读取指令模块用于读取对车辆预设功能调节的上一轮的语音请
+求;
+查询模块,所述查询模块用于根据所述当前轮的语音请求和所述上一轮的语音请求在
+缓存引擎中进行缓存查询;
+改写模块,所述改写模块用于在所述缓存查询的结果为未能查询到对应缓存的情况
+下,利用所述上一轮的语音请求对所述当前轮的语音请求进行改写;
+意图识别模块,所述意图识别模块用于对改写后的所述当前轮的语音请求进行意图识
+别;
+交互模块,所述交互模块用于根据所述意图识别的结果完成语音交互;
+所述查询模块还用于将出现频率大于预设频率的相邻两轮语音请求添加到所述缓存
+引擎。
+10 .一种服务器,其特征在于,所述服务器包括处理器和存储器,所述存储器上存储有
+计算机程序,当所述计算机程序被所述处理器执行时,实现权利要求1‑8任一项所述的语音
+交互方法。
+11 .一种包含有计算机程序的非易失性计算机可读存储介质,其特征在于,当所述计算
+机程序被一个或多个处理器执行时,
+实现权利要求1‑8任一项所述的语音交互方法。
+
+3
+
+CN 114299931 B
+
+说
+
+明
+
+书
+
+1/11 页
+
+语音交互方法及其装置、服务器和可读存储介质
+技术领域
+[0001] 本发明涉及语音技术领域,
+特别涉及一种语音交互方法及其装置、服务器和可读
+存储介质。
+背景技术
+[0002] 目前在智能汽车场景中,
+可以应用语音交互实现用户对车辆零部件的控制,比如
+“打开车窗”,
+“音量调高”等,但是,对于用户希望进行连续调节的场景,在语音场景下体现
+为多轮交互,用户在上一轮语音交互后很自然地省略后续每轮对话的部分内容,例如以下
+用户跟语音助手小P的对话:
+[0003]
+用户:
+今天天气怎么样?
+[0004] 小P:
+广州今天晴天26‑30°
+。
+[0005]
+用户:上海(的天气)呢?
+[0006]
+在多轮对话中,像上述第一个示例中用户字面含义是问上海,但其实是想问上海
+的天气,将部分内容省略符合人对话的习惯,但是这样可能会导致车辆的车载系统对某些
+轮次的语音请求不能准确识别,或者提示听不懂。
+[0007] 进一步地,
+如果用户需要调整音量,可以通过对车上调整汽车音量的机械旋钮进
+行操作,将机械旋钮旋转到想要的音量,但是如果使用语音调整音量,只能够调大或者调
+小。在如下第二个示例中:
+[0008]
+用户:音量调大
+[0009] 小P:
+音量已调大
+[0010]
+用户:
+大大大
+[0011] 从第二个示例可以看出,
+当前车辆的车载系统对当前轮的大大大不能准确识别,
+或者提示听不懂,这样情况不能满足用户对类似机械旋钮一样精准的刻度连续调节的需
+求。
+发明内容
+[0012] 本发明实施方式提供一种语音交互方法及其装置、
+服务器和可读存储介质。
+[0013] 本发明实施方式提供一种语音交互方法。
+该语音交互方法包括:接收车辆转发的
+对车辆预设功能调节的当前轮的语音请求,所述预设功能指模拟对车辆零部件的操作进行
+刻度调节的功能;读取对车辆预设功能调节的上一轮的语音请求;根据所述当前轮的语音
+请求和所述上一轮的语音请求在缓存引擎中进行缓存查询;在所述缓存查询的结果为未能
+查询到对应缓存的情况下,利用所述上一轮的语音请求对所述当前轮的语音请求进行改
+写;对改写后的所述当前轮的语音请求进行意图识别;根据所述意图识别的结果完成语音
+交互。
+[0014] 如此,
+本发明的语音交互方法可以在接收到用户对于车辆零部件进行刻度调节的
+语音请求后,通过读取上一轮的语音请求,
+结合两轮语音请求查询是否命中缓存,在查询不
+4
+
+CN 114299931 B
+
+说
+
+明
+
+书
+
+2/11 页
+
+到对应缓存的情况下,利用上一轮的语音请求改写当前轮的语音请求,使得改写后的语音
+请求可以被车辆的车载系统识别出相应的意图,进而根据意图识别的结果以语音交互方式
+实现对车辆零部件进行刻度调节。
+使用高频缓存引擎与意图识别相结合的方式识别语音请
+求的意图,
+实现多轮语音请求下,用户意图的准确识别。
+[0015] 所述语音交互方法包括:将出现频率大于预设频率的相邻两轮语音请求添加到所
+述缓存引擎。
+[0016] 如此,
+本发明缓存引擎的缓存由出现频率大于预设频率相邻两轮语音请求构成,
+实现高频集语音请求的统计。
+[0017] 所述语音交互方法包括:
+建立当前轮的语音请求与预设意图之间的映射关系。
+[0018] 如此,
+本发明建立当前轮的语音请求与预设意图之间的映射关系后,将每个预设
+意图与对应的相邻两轮语音请求相关联,从而在缓存引擎中查询可以实现语音请求对应意
+图的确定。
+[0019] 所述语音交互方法包括:
+在所述缓存查询的结果为查询到对应缓存的情况下,根
+据所述映射关系确定所述当前轮的语音请求对应的预设意图为目标意图以完成语音交互。
+[0020] 如此,
+本发明在缓存引擎中查询到当前轮的语音请求和相邻的上一轮的语音请
+求,根据建立好的映射关系,可以直接确定当前轮的语音请求的目标意图,从而可以根据确
+定好的当前轮的语音请求对应的目标意图完成语音交互。
+[0021] 所述利用所述上一轮的语音请求对所述当前轮的语音请求进行改写,
+包括:通过
+改写训练数据训练得到改写模型,所述改写训练数据包括相邻两轮语音请求;利用所述上
+一轮的语音请求和所述改写模型对所述当前轮的语音请求进行改写。
+[0022] 如此,
+本发明通过机器学习的方式,
+由相邻两轮语音请求训练得到改写模型,从而
+根据上一轮的语音请求和改写模型可以实现对当前轮的语音请求的改写,使得改写后的语
+音请求可以被车辆的车载系统识别出相应的意图。
+[0023] 所述对改写后的所述当前轮的语音请求进行意图识别,
+包括:通过意图训练数据
+训练得到意图识别模型,所述意图训练数据与可进行刻度调节的车辆零部件和所述车辆零
+部件的刻度调节范围相关;利用所述意图识别模型对改写后的所述当前轮的语音请求进行
+意图识别。
+[0024] 如此,
+本发明通过机器学习的方式,由可进行刻度调节的车辆零部件和所述车辆
+零部件的刻度调节范围对应的训练数据训练得到意图识别模型,进而对改写后的语音请求
+进行意图识别,
+实现用户意图的准确识别。
+[0025] 所述根据所述意图识别的结果完成语音交互,
+包括:获取所述意图识别的结果对
+应各个预设意图的意图判别概率;将所述意图判别概率大于概率阈值的一个所述预设意图
+确定为所述当前轮的语音请求对应的目标意图以完成语音交互。
+[0026] 如此,
+本发明的语音交互方法可以获取意图识别的结果对应各个预设意图的意图
+判别概率,将意图判别概率大于概率阈值的一个预设意图确定为语音请求对应的目标意
+图,从而识别用户精准调节车辆零部件的意图。
+[0027] 所述预设意图包括:
+音量调大、音量调小、风量调大、风量调小、温度调高、温度调
+低、
+地图放大、
+地图缩小、
+屏幕调亮、
+屏幕调暗、
+屏幕上滑、
+屏幕下滑、
+仪表调亮、
+仪表调暗、
+氛
+围灯调亮、氛围灯调暗、座椅向前、座椅向后、座椅升高、座椅降低、椅背向前、椅背向后、
+车
+5
+
+CN 114299931 B
+
+说
+
+明
+
+书
+
+3/11 页
+
+窗上升和车窗下降中的至少一种。
+[0028] 如此,
+设置了多种预设意图可以进一步为识别用户的语音交互意图奠定基础。
+[0029] 所述语音交互方法包括:
+在各个所述预设意图的所述意图判别概率均不大于概率
+阈值的情况下,
+确定所述当前轮的语音请求的意图为非刻度调节意图。
+[0030] 如此,
+在各个预设意图的意图判别概率均不大于概率阈值的情况下,确定该语音
+请求为非刻度调节意图,
+可以排除非刻度调节意图的语音请求。
+[0031] 本发明还提供一种语音交互装置。
+所述语音交互装置包括:接收指令模块、
+读取指
+令模块、查询模块、改写模块、意图识别模块和交互模块。所述接收指令模块用于接收车辆
+转发的对车辆预设功能调节的当前轮的语音请求,所述预设功能指模拟对车辆零部件的操
+作进行刻度调节的功能;所述读取指令模块用于读取对车辆预设功能调节的上一轮的语音
+请求;所述查询模块用于根据所述当前轮的语音请求和所述上一轮的语音请求在缓存引擎
+中进行缓存查询;所述改写模块用于在所述缓存查询的结果为未能查询到对应缓存的情况
+下,利用所述上一轮的语音请求对所述当前轮的语音请求进行改写;所述意图识别模块用
+于对改写后的所述当前轮的语音请求进行意图识别;所述交互模块用于根据所述意图识别
+的结果完成语音交互。
+[0032] 如此,
+本发明的语音交互装置可以在接收到用户对于车辆零部件进行刻度调节的
+语音请求后,通过读取上一轮的语音请求,
+结合两轮语音请求查询是否命中缓存,在查询不
+到对应缓存的情况下,利用上一轮的语音请求改写当前轮的语音请求以使得改写后的语音
+请求可以被车辆的车载系统识别出相应的意图,进而根据意图识别结果以语音交互方式实
+现对车辆零部件进行刻度调节。
+使用高频缓存引擎与意图识别相结合的方式识别语音请求
+的意图,
+实现多轮语音请求下,用户意图的准确识别。
+[0033] 本发明提供一种服务器。
+所述服务器包括处理器和存储器,所述存储器上存储有
+计算机程序,当所述计算机程序被所述处理器执行时,实现上述任意一项实施方式所述的
+语音交互方法。
+[0034] 如此,
+本发明的服务器通过处理器执行计算机程序,可以在接收到用户对于车辆
+零部件进行刻度调节的语音请求后,通过读取上一轮的语音请求,结合两轮语音请求查询
+是否命中缓存,在查询不到对应缓存的情况下,利用上一轮的语音请求改写当前轮的语音
+请求以使得改写后的语音请求可以被车辆的车载系统识别出相应的意图,进而根据意图识
+别结果以语音交互方式实现对车辆零部件进行刻度调节。
+使用高频缓存引擎与意图识别相
+结合的方式识别语音请求的意图,
+实现多轮语音请求下,用户意图的准确识别。
+[0035] 本发明实施方式还提供一种包含有计算机程序的非易失性计算机可读存储介质。
+当所述计算机程序被一个或多个处理器执行时,实现上述任意一项实施方式所述的语音交
+互方法。
+[0036] 如此,
+本发明的可读存储介质存储的计算机程序被处理器执行时,可以在接收到
+用户对于车辆零部件进行刻度调节的语音请求后,通过读取上一轮的语音请求,结合两轮
+语音请求查询是否命中缓存,在查询不到对应缓存的情况下,利用上一轮的语音请求改写
+当前轮的语音请求以使得改写后的语音请求可以被车辆的车载系统识别出相应的意图,进
+而根据意图识别结果以语音交互方式实现对车辆零部件进行刻度调节。
+使用高频缓存引擎
+与意图识别相结合的方式识别语音请求的意图,实现多轮语音请求下,用户意图的准确识
+6
+
+CN 114299931 B
+
+说
+
+明
+
+书
+
+4/11 页
+
+别。
+[0037]
+
+本发明实施方式的附加方面和优点将在下面的描述中部分给出,部分将从下面的
+描述中变得明显,或通过本发明的实践了解到。
+
+附图说明
+[0038] 本发明的上述和/或附加的方面和优点可以从结合下面附图对实施方式的描述中
+将变得明显和容易理解,其中:
+[0039] 图1是本发明的语音交互方法的流程示意图;
+[0040] 图2是本发明的语音交互装置的结构示意图;
+[0041] 图3是本发明的语音交互方法的流程示意图;
+[0042] 图4是本发明的语音交互装置的结构示意图;
+[0043] 图5是本发明的语音交互方法的流程示意图;
+[0044] 图6是本发明的语音交互方法的流程示意图;
+[0045] 图7是本发明的语音交互方法的流程示意图;
+[0046] 图8是本发明的语音交互装置的结构示意图;
+[0047] 图9是本发明的语音交互方法的流程示意图;
+[0048] 图10是本发明的语音交互装置的结构示意图;
+[0049] 图11是本发明的语音交互方法的流程示意图;
+[0050] 图12是本发明的语音交互装置中的交互模块的结构示意图;
+[0051] 图13是本发明的服务器的结构示意图;
+[0052] 图14是本发明的计算机可读存储介质的结构示意图。
+具体实施方式
+[0053] 下面详细描述本发明的实施方式,
+所述实施方式的示例在附图中示出,其中,相同
+或类似的标号自始至终表示相同或类似的元件或具有相同或类似功能的元件。下面通过参
+考附图描述的实施方式是示例性的,仅用于解释本发明的实施方式,而不能理解为对本发
+明的实施方式的限制。
+[0054] 目前,
+车辆的语音交互系统在用户进行多轮语音请求的情况下,例如,用户第一轮
+语音请求为“屏幕调亮”,而第二轮语音请求采用精简语音请求“亮亮亮”的情况下,语音交
+互系统不能根据用户的语音请求精准识别出用户第二轮的需求为屏幕亮度提高3个刻度,
+不能正确的下发车辆控制指令,使得屏幕亮度准确提高用户需要的三个亮度,用户体验不
+佳。
+[0055] 为了解决上述问题,
+请参阅图1,本发明提供了一种语音交互方法。该语音交互方
+法包括:
+[0056] 01,
+接收车辆转发的对车辆预设功能调节的当前轮的语音请求,预设功能指模拟
+对车辆零部件的操作进行刻度调节的功能;
+[0057] 02,
+读取对车辆预设功能调节的上一轮的语音请求;
+[0058] 03,
+根据当前轮的语音请求和上一轮的语音请求在缓存引擎中进行缓存查询;
+[0059] 04,
+在缓存查询的结果为未能查询到对应缓存的情况下,利用上一轮的语音请求
+7
+
+CN 114299931 B
+
+说
+
+明
+
+书
+
+5/11 页
+
+对当前轮的语音请求进行改写;
+[0060] 05,
+对改写后的当前轮的语音请求进行意图识别;
+[0061] 06,
+根据意图识别的结果完成语音交互。
+[0062] 请参阅图2,
+本发明还提供一种语音交互装置10。语音交互装置10包括:接收指令
+模块11、
+读取指令模块12、
+查询模块13、
+改写模块14、
+意图识别模块15和交互模块16。
+[0063] 步骤01可以由接收指令模块11实现,
+步骤02可以由读取指令模块12实现,步骤03
+可以由查询模块13实现,步骤04可以由改写模块14实现,步骤05可以由意图识别模块15实
+现和步骤06可以由交互模块16实现。也即是说,接收指令模块11可以用于接收车辆转发的
+对车辆预设功能调节的当前轮的语音请求,
+预设功能指模拟对车辆零部件的操作进行刻度
+调节的功能;读取指令模块12可以用于读取对车辆预设功能调节的上一轮的语音请求;查
+询模块13可以用于根据当前轮的语音请求和上一轮的语音请求在缓存引擎中进行缓存查
+询;改写模块14可以用于在缓存查询的结果为未能查询到对应缓存的情况下,利用上一轮
+的语音请求对当前轮的语音请求进行改写;意图识别模块15可以用于对改写后的当前轮的
+语音请求进行意图识别;交互模块16可以用于根据意图识别的结果完成语音交互。
+[0064]
+用户使用语音交互模拟对车辆零部件进行刻度调节的过程,对应的语音请求可以
+包括但不限于“屏幕亮亮亮”、
+“音量大大大”、
+“座椅后后后”。其中,预设功能是指通过车辆
+零部件完成刻度调节的功能,其中的车辆零部件可以指机械旋钮或按钮等实体部件,这些
+是可以进行调节刻度的部件。
+目前在智能汽车中,对于用户希望进行连续调节的场景,在语
+音场景下体现为多轮交互,比如用户上一轮的语音请求为“音量大大大”,系统音量调大后,
+用户又发出当前轮的语音请求“小一点小一点”,这时候系统针对当前轮的语音请求会不识
+别,或者提示听不懂,不能满足用户对类似机械旋钮一样精准的刻度连续调节的需求。
+[0065] 本发明可以在接收到用户对于车辆预设功能的语音请求后,
+通过读取上一轮的语
+音请求,
+结合两轮语音请求查询是否命中缓存,在查询不到对应缓存的情况下,利用上一轮
+的语音请求改写当前轮的语音请求以使得改写后的语音请求可以被系统识别出相应的意
+图,从而对改写后的当前轮的语音请求进行意图识别后,可以准确识别出用户的意图,进而
+可以根据意图识别结果下发控制指令,
+以控制对应的车辆零部件,完成语音交互。
+使用高频
+缓存引擎与意图识别相结合的方式识别语音请求的意图,实现多轮语音请求下,准确识别
+出通过语音交互来模拟对车辆零部件的操作实现刻度调节的用户意图。
+[0066] 需要说明的是,
+在接收到用户对于车辆预设功能的当前轮的语音请求后,对接收
+到的当前轮的语音请求进行语音识别得到当前轮语音识别文本以便后续处理,例如,对用
+户输入的当前轮的语音请求“屏幕亮亮亮”进行语音识别,得到的当前轮识别文本即为“屏
+幕亮亮亮”。
+[0067]
+在实际情况下可能受到车辆硬件限制,或者因为网络不稳定性,用户表述口语化
+或者方言化等原因导致ASR识别后的文本指令不够清晰准确,可以对接收到的当前轮的语
+音请求进行预处理,
+预处理包括对一些常规文本纠错,比如“音量深深深深深”纠正为“音量
+增增增增增”,
+以及一些无意义词语的去除等,
+比如“啊”,
+“请”等。
+[0068] 请结合图3,
+在步骤01之前,
+语音交互方法可以包括:
+[0069] 011,
+确定车辆零部件的控制范围及非控制范围。
+[0070] 请结合图4,
+语音交互装置10还包括第一确定模块111。
+8
+
+CN 114299931 B
+
+说
+
+明
+
+[0071]
+
+书
+
+6/11 页
+
+步骤011可以由第一确定模块111实现。也即是说,
+第一确定模块111可以用于确定
+车辆零部件的控制范围及非控制范围。
+[0072] 可以理解地,
+车辆并非所有功能的调节都可以、能够或有需要进行精准的刻度调
+节。例如,座椅在各个方向上的移动可以通过车辆零部件进行调节。而车门则没有类似旋
+钮、按键等车辆零部件来实现刻度调节,而通常仅通过车门把手进行开关。因此,座椅调节
+是属于车辆零部件的控制范围、
+而车门调节则属于车辆零部件的非控制范围。
+[0073] 获取车辆零部件的信息,
+根据车辆零部件的信息,确定可通过零部件进行刻度调
+节的硬件,确定为车辆零部件的控制范围,将不可通过车辆零部件进行调节的硬件确定为
+非控制范围。
+[0074] 首先,
+确定在车辆上可以进行刻度调节的零部件,例如:
+“音量旋钮”,
+“屏幕亮度按
+钮”,
+“空调风量旋钮/按钮”,
+“座椅调节旋钮/按钮”等。进一步,确定车辆零部件的控制范围
+可包括:车载音响、
+车辆内的屏幕、
+车辆空调、
+车辆座椅、
+车内的氛围灯、
+车辆外部的车灯、
+或
+车窗等。
+车辆零部件的非控制范围可包括:
+车门、
+后视镜、
+后备箱等。
+[0075]
+在后续语音交互的过程中,可在语音请求针对车辆零部件的非控制范围的情况下
+进行语音提示。
+[0076] 如此,
+通过收集车辆零部件信息,确认可通过零部件进行刻度调节的功能,从而确
+定车辆零部件的控制范围,
+也即是可通过语音交互进行刻度调节的控制范围。
+[0077] 语音交互方法还包括:
+[0078] 012,
+确定车辆零部件的可调节范围。
+[0079] 语音交互装置10还包括第二确定模块112。
+[0080] 步骤012可以由第二确定模块112实现。
+也即是说,
+第二确定模块112用于确定车辆
+零部件的可调节范围。
+[0081] 可以理解,
+在确定车辆零部件的控制范围和非控制范围后,需要针对控制范围中
+的每一个车辆零部件确定的可调节范围。车辆零部件的可调节范围与通过操作该车辆零部
+件进行调节的刻度范围相对应。对应不同车辆零部件,可调节范围可以是档位或量程。例
+如,屏幕亮度按钮累计连续按压5次,屏幕亮度依次调整1至5个档位的亮度至最大亮度,则
+该屏幕亮度按钮的可调节范围为1至5个档位。又如,对座椅进行前后调节的旋钮的总刻度
+值为90,则该座椅调节旋钮的可调节范围为刻度值1~90。
+[0082] 语音交互方法还包括:
+[0083] 013,
+将控制范围和可调节范围映射到预设意图。
+[0084] 语音交互装置100还包括映射模块113。
+[0085] 步骤013可以由映射模块113实现。
+也即是说,映射模块113可以用于将控制范围和
+可调节范围映射到预设意图。
+[0086] 将车辆零部件的控制范围和每个车辆零部件的可调节范围,
+映射到意图识别模型
+所能够理解的意图体系。针对车辆零部件的控制范围中的对象和对应的车辆零部件的可调
+节范围均制定一个相应的预设意图。例如:system_volume_up代表着预设意图“音量调大”
+和system_volume_down代表着预设意图“音量调小”,并且包含了所有可调节的范围说法,
+例如“音量大大大”为预设意图对应的system_volume_up,
+“音量大大大大”也会对此意图。
+如此,
+针对零部件控制范围和车辆零部件的可调节范围制定了一套具体的意图映射体系。
+9
+
+CN 114299931 B
+
+说
+
+明
+
+[0087]
+
+书
+
+7/11 页
+
+预设意图可以包括:音量调大、音量调小、风量调大、风量调小、温度调高、温度调
+低、
+地图放大、
+地图缩小、
+屏幕调亮、
+屏幕调暗、
+屏幕上滑、
+屏幕下滑、
+仪表调亮、
+仪表调暗、
+氛
+围灯调亮、氛围灯调暗、座椅向前、座椅向后、座椅升高、座椅降低、椅背向前、椅背向后、
+车
+窗上升和车窗下降中的至少一种。
+[0088] 如此,
+设置了多种预设意图可以进一步为识别用户的语音交互意图奠定基础,根
+据用户提供的带有精简词的语音请求进行不同意图的识别,从而实现相应的目标意图。
+[0089] 请结合图5,
+语音交互方法包括:
+[0090] 014,
+将出现频率大于预设频率的相邻两轮语音请求添加到缓存引擎。
+[0091] 步骤014可以由查询模块13实现。
+也即是说,查询模块13可以用于将出现频率大于
+预设频率的相邻两轮语音请求添加到缓存引擎。
+[0092] 如此,
+本发明缓存引擎的缓存由出现频率大于预设频率相邻两轮语音请求构成,
+实现高频集语音请求的统计。
+[0093] 首先服务器可以在用户允许的情况下收集一段时间内用户的历史语音请求,
+此处
+收集到的语音请求需要至少包含两轮语音请求。其中,
+预计需要收集超过1万条历史语音请
+求。
+[0094] 其次,
+服务器可以对收集到的历史语音请求进行简单的筛选,以筛选掉明显语义
+不明确的语音请求,以及一些只包含语气词,比如“啊”,
+“哦”等较短的语音请求,留下语义
+明确同时包含具体目的的语音请求,比如“导航到公司”,
+“帮我打开空调”,
+“搜一下附近的
+医院”,
+“播放歌手A的歌曲”,
+“今天天气怎么样”等;并且在筛选中去掉只有一轮的语音请
+求。
+[0095] 服务器可以对筛选后的语音请求进行高频统计,
+统计相邻两轮语音请求的出现频
+率。其中,统计相邻两轮语音请求作为唯一值出现的次数,当出现次数大于一定次数时,可
+以认为对应的相邻两轮语音请求的出现频率大于预设频率。
+[0096] 比如,
+上一轮的语音请求为“音量大一点大一点”,当前轮的语音请求为“小一点”
+的情况,在筛选出来的语音请求中出现的次数超过预定次数,则可以将“音量大一点大一
+点”和“小一点”的相邻两轮语音请求加入到缓存引擎中。
+[0097] 语音交互方法还包括:
+[0098] 015,
+建立当前轮的语音请求与预设意图之间的映射关系。
+[0099] 步骤015可以由查询模块13实现。
+也即是说,查询模块13可以用于建立当前轮的语
+音请求与预设意图之间的映射关系。
+[0100] 如此,
+本发明建立当前轮的语音请求与预设意图之间的映射关系后,将每个预设
+意图与对应的相邻两轮语音请求相关联,从而在缓存引擎中查询可以实现语音请求对应意
+图的确定。
+[0101] 应当理解,
+上一轮的语音请求和当前轮的语音请求为相邻的两轮,其中确定缓存
+引擎的相邻两轮语音请求中,当前轮的语音请求与预设意图之间的映射关系后,即可确定
+上一轮的语音请求和当前轮的语音请求结合是否属于高频集指令,
+以及是否可以根据高频
+集指令对应的预设意图确定当前轮的语音请求的目标意图。
+[0102] 比如,
+上一轮的语音请求为“音量大一点大一点”,当前轮的语音请求为“小一点”,
+那么可以关联“音量大一点大一点”和“小一点”这相邻两轮语音请求中,当前轮的语音请求
+10
+
+CN 114299931 B
+
+说
+
+明
+
+书
+
+8/11 页
+
+“小一点”对应的预设意图为“音量调小”。
+[0103] 请结合图6,
+语音交互方法包括:
+[0104] 07,
+在缓存查询的结果为查询到对应缓存的情况下,根据映射关系确定当前轮的
+语音请求对应的预设意图为目标意图以完成语音交互。
+[0105] 步骤07可以由交互模块16实现。
+也即是说,交互模块16可以用于在缓存查询的结
+果为查询到对应缓存的情况下,根据映射关系确定当前轮的语音请求对应的预设意图为目
+标意图以完成语音交互。
+[0106] 本发明在缓存引擎中查询到与当前轮的语音请求和上一轮的语音请求相应的相
+邻两轮语音请求的情况下,根据建立好的当前轮的语音请求与预设意图之间的映射关系,
+可以直接确定当前轮的语音请求对应的目标意图,从而可以根据确定好的当前轮的语音请
+求对应的目标意图完成语音交互。
+[0107] 例如,
+上一轮的语音请求为“音量大一点大一点”,当前轮的语音请求为“小一点”,
+若在缓存引擎中查询到缓存的相邻两轮语音请求为“音量大一点大一点”和“小一点”,且
+“小一点”对应的预设意图为“音量调小”,则可以直接确定当前轮的语音请求的目标意图为
+查询到的预设意图“音量调小”,从而可以根据“音量调小”的意图通过语音交互模拟对车辆
+零部件的操作,
+实现多轮语音请求下,用户意图的准确识别。
+[0108] 请结合图7,
+步骤04包括:
+[0109] 041,
+通过改写训练数据训练得到改写模型,改写训练数据包括相邻两轮语音请
+求;
+[0110] 042,
+利用上一轮的语音请求和改写模型对当前轮的语音请求进行改写。
+[0111] 请结合图8,
+语音交互装置10包括改写训练模块114。
+[0112] 步骤041可以用于改写训练模块114实现,
+步骤042可以由改写模块14实现。也即是
+说,改写训练模块114可以用于通过改写训练数据训练得到改写模型。改写模块14可以用于
+利用上一轮的语音请求和改写模型对当前轮的语音请求进行改写。
+[0113] 本发明通过机器学习的方式,
+由相邻两轮语音请求训练得到改写模型,从而根据
+上一轮的语音请求和改写模型可以实现对当前轮的语音请求的改写,使得改写后的语音请
+求 可 以 被 车 辆 的 车 载 系 统 识 别 出 相 应 的 意 图 。其 中 ,对 于 改 写 模 型 ,可 使 用 B E R T
+(Bidirectional Encoder Representation from Transformers)和序列标注的方式进行
+模型训练,从而获取训练好的改写模型。
+[0114] 其中,
+改写数据可以是上述筛选后的语音请求中的相邻两轮语音请求经过标注后
+得到,可以由人工对相邻两轮语音请求中的当前轮的语音请求进行改写标注,例如,上一轮
+的语音请求为“音量大一点大一点”,当前轮的语音请求为“小一点”,那么可以将当前轮的
+语音请求改写标注为“音量小一点”。如此,将标注好的相邻两轮语音请求输入到建立好的
+改写模型,在训练过程中,改写模型可以通过特征提取的方式学习如何通过相邻两轮语音
+请求将标注前的当前轮的语音请求改写成标注后的当前轮的语音请求。
+[0115]
+在训练过程中,标注后的语音请求中的相邻两轮语音请求划分为改写训练集和改
+写验证集,划分比例可根据需求设定,在此不作限定。例如改写训练集80%,改写验证集为
+20%。对于建立好的改写模型,先通改写训练集中的至少部分数据用于训练改写模型,然后
+利用改写验证集的至少部分数据对训练后的改写模型的准确率进行改写验证。在改写验证
+11
+
+CN 114299931 B
+
+说
+
+明
+
+书
+
+9/11 页
+
+的准确率没有达到改写准确率阈值的情况下,再次通过改写训练集的至少另一部分数据对
+改写模型进行训练,
+以及再次利用改写验证集的至少另一部分数据对再次训练后的改写模
+型的准确率进行改写验证,如此重复训练和改写验证的过程,直到改写验证的准确率达到
+改写准确率阈值时,
+可以认为改写模型已经达标,
+完成改写模型的训练。
+[0116] 需要说明的是,
+改写训练集和改写验证集中的每个数据均只使用一次,在改写模
+型遍历改写训练集和改写验证集的所有数据均未能训练达标的情况下,可以再次在用户允
+许的情况下收集更多的语音请求,从而筛选并标注得到更多的改写训练数据对改写模型进
+行训练,从而保证改写模型能够准确对语音请求进行改写。
+[0117] 请结合图9,
+步骤05包括:
+[0118] 051,
+通过意图训练数据训练得到意图识别模型,意图训练数据与可进行刻度调节
+的车辆零部件和车辆零部件的刻度调节范围相关;
+[0119] 052,
+利用意图识别模型对改写后的当前轮的语音请求进行意图识别。
+[0120] 请结合图10,
+语音交互装置10包括意图训练模块115。
+[0121] 步骤051可以由意图训练模块115实现,
+步骤052可以由意图识别模块15实现。也即
+是说,意图训练模块115可以用于通过意图训练数据训练得到意图识别模型。意图识别模块
+15可以用于利用意图识别模型对改写后的当前轮的语音请求进行意图识别。
+[0122] 本发明通过机器学习的方式,
+由可进行刻度调节的车辆零部件和车辆零部件的刻
+度调节范围对应的训练数据训练得到意图识别模型,进而对改写后的当前轮的语音请求进
+行意图识别,实现用户意图的准确识别。其中,模型训练可以利用BERT、ALBERT、XLNet、
+RoBERTa等模型。
+[0123] 其中,
+意图训练数据与可进行刻度调节的车辆零部件和零部件的刻度调节范围相
+关。车辆零部件指的是在智能汽车上可以进行刻度调节的零部件,例如:
+“音量旋钮”,
+“屏幕
+亮度按钮”,
+“空调风量旋钮/按钮”,
+“座椅调节旋钮/按钮”等。车辆零部件的可调节范围与
+与通过操作该车辆零部件进行调节的刻度范围相对应。对应不同车辆零部件,可调节范围
+可以是档位或量程。
+[0124] 其中,
+意图训练数据可以是上述筛选后的语音请求中的相邻两轮语音请求中上一
+轮的语音请求经过标注后得到,可以由人工对相邻两轮语音请求中的上一轮的语音请求进
+行意图标注,可以理解,上一轮的语音请求中应当包括用户需要调节的意图相关的内容,例
+如,上一轮的语音请求为“音量大一点大一点”,用户需要调节的是音量调大2次,此时,可以
+通过人工将上一轮的语音请求对应的意图标注为“音量调大”。如此,将标注好的上一轮的
+语音请求给到建立好的意图识别模型,在训练过程中,意图识别模型可以通过特征提取学
+习如何通过输入的语音请求识别出用户想要实现的目标意图。
+[0125] 在训练过程中,
+可以将标注后的上一轮的语音请求划分为意图训练集和意图验证
+集,划分比例可根据需求设定,在此不作限定。例如意图训练集80%,意图验证集为20%。对
+于建立好的意图识别模型,先利用意图训练集中的至少部分数据用于训练意图识别模型,
+然后利用意图验证集的至少部分数据对训练后的意图识别模型的准确率进行意图验证。在
+意图验证的准确率没有达到意图准确率阈值的情况下,再次通过意图训练集的至少另一部
+分数据对意图识别模型进行训练,
+以及再次利用意图验证集的另一部分数据对再次训练后
+的意图识别模型的准确率进行意图验证,如此重复训练和意图验证的过程,直到意图验证
+12
+
+CN 114299931 B
+
+说
+
+明
+
+书
+
+10/11 页
+
+的准确率达到意图准确率阈值时,可以认为意图识别模型已经达标,完成意图识别模型的
+训练。
+[0126] 需要说明的是,
+意图训练集和意图验证集中的每个数据均只使用一次,在意图识
+别模型遍历意图训练集和意图验证集的所有数据均未能训练达标的情况下,可以再次在用
+户允许的情况下收集更多的语音请求,从而筛选并标注得到更多的意图训练数据对意图识
+别模型进行训练,从而保证意图识别模型能够准确识别输入的语音请求对应的意图。
+[0127] 可以理解,
+上述改写模型和意图识别模型的训练可以离线进行训练,将离线训练
+好的改写模型和意图识别模型部署到服务器后,服务器可以在接收到当前轮的语音请求后
+利用上一轮的语音请求改写模型对当前轮的语音请求进行改写,
+以及利用意图识别模型对
+改写后的当前轮的语音请求进行意图识别。
+[0128] 请结合图11,
+步骤06包括:
+[0129] 061,
+获取意图识别的结果对应各个预设意图的意图判别概率;
+[0130] 062,
+将意图判别概率大于概率阈值的一个预设意图确定为当前轮的语音请求对
+应的目标意图以完成语音交互。
+[0131] 请结合图12,
+交互模块16包括获取单元161和意图确定单元162。
+[0132] 步骤061可以由获取单元161实现,
+步骤062可以由意图确定单元162实现。也即是
+说,获取单元161可以用于获取意图识别的结果对应各个预设意图的意图判别概率。意图确
+定单元162可以用于将意图判别概率大于概率阈值的一个预设意图确定为语音请求对应的
+目标意图以完成语音交互。
+[0133] 根据多个类别的预设意图对应的每个预设意图类别的识别结果,
+意图识别模块15
+可以给出各个预设意图相匹配的意图判别概率,则可以得到多个意图判别概率。若概率阈
+值为0 .9,则意图识别的结果为某个类别的预设意图的意图判别概率超过0 .9,那么服务端
+认为该类别的预设意图就是当前用户的语音请求的目标意图。概率阈值也可以为其他数
+值,概率阈值可以为默认设置的数值,
+也可以根据用户需要自行设定,在此不作限制。
+[0134] 如此,
+本发明的语音交互方法可以获取意图识别的结果对应各个预设意图的意图
+判别概率,将意图判别概率大于概率阈值的一个预设意图确定为语音请求对应的目标意
+图,从而实现识别用户精准调节车辆零部件的意图的需求。
+[0135] 语音交互方法包括:
+[0136] 063,
+在各个预设意图的意图判别概率均不大于概率阈值的情况下,确定当前轮的
+语音请求的意图为非刻度调节意图。
+[0137] 步骤063可以由意图确定单元162实现。
+也即是说,意图确定单元162可以用于在各
+个预设意图的意图判别概率均不大于概率阈值的情况下,确定语音请求为非刻度调节意
+图。
+[0138] 例如,
+当根据各个类别的预设意图对应得到的意图判别概率均不大于概率阈值的
+情况,即根据语音请求得到用户的意图识别结果与各个类别预设意图像匹配的概率比较
+低,均低于概率阈值,例如概率阈值可以为0 .9,则确定该语音请求为非刻度调节意图,非刻
+度调节意图指的是对不能用带有刻度的旋钮或按钮调节的零部件的用户意图,例如,用户
+输入的语音请求为“车门开开开”,因为车门不是用带有刻度的旋钮或按钮进行调节的零部
+件,因此,
+该语音请求“车门开开开”是非刻度调节意图。
+13
+
+CN 114299931 B
+
+说
+
+明
+
+[0139]
+
+书
+
+11/11 页
+
+如此,在各个预设意图的意图判别概率均不大于概率阈值的情况下,确定该语音
+请求为非刻度调节意图,
+可以排除非刻度调节意图的语音请求。
+[0140] 请参阅图13,
+本发明还提供一种服务器20。该服务器20包括处理器21和存储器22,
+存储器22上存储有计算机程序221,当计算机程序221被处理器21执行时,实现上述任意一
+个实施例中所述的语音交互方法。
+[0141] 本发明的服务器可以通过处理器21执行计算机程序221,
+可以在接收到用户对于
+车辆预设功能的语音请求后,通过读取上一轮的语音请求,结合两轮语音请求查询是否命
+中缓存,在查询不到对应缓存的情况下,利用上一轮的语音请求改写当前轮的语音请求以
+使得改写后的语音请求可以被系统识别出相应的意图,从而对改写后的当前轮的语音请求
+进行意图识别后,可以准确识别出用户的意图,进而可以根据意图识别结果下发控制指令,
+以控制对应的车辆零部件,完成语音交互。使用高频缓存引擎与意图识别相结合的方式识
+别语音请求的意图,实现多轮语音请求下,准确识别出通过语音交互来模拟对车辆零部件
+的操作实现刻度调节的用户意图。
+[0142] 请参阅图14,
+本发明还提供一种包含有计算机程序31的非易失性计算机可读存储
+介质30。当计算机程序31被一个或多个处理器40执行时,实现上述任意实施条例的语音交
+互方法。
+[0143] 例如,
+计算机程序31被处理器40执行时实现以下数据处理方法的步骤:
+[0144] 01,
+接收车辆转发的对车辆预设功能调节的当前轮的语音请求,预设功能指模拟
+对车辆零部件的操作进行刻度调节的功能;
+[0145] 02,
+读取对车辆预设功能调节的上一轮的语音请求;
+[0146] 03,
+根据当前轮的语音请求和上一轮的语音请求在缓存引擎中进行缓存查询;
+[0147] 04,
+在缓存查询的结果为未能查询到对应缓存的情况下,利用上一轮的语音请求
+对当前轮的语音请求进行改写;
+[0148] 05,
+对改写后的当前轮的语音请求进行意图识别;
+[0149] 06,
+根据意图识别的结果完成语音交互。
+[0150] 可以理解地,
+计算机程序包括计算机程序代码。计算机程序代码可以为源代码形
+式、对象代码形式、可执行文件或某些中间形式等。计算机可读存储介质可以包括:能够携
+带计算机程序代码的任何实体或装置、记录介质、U盘、
+移动硬盘、磁碟、光盘、计算机存储
+器、只读存储器(ROM,
+Read‑Only Memory)、
+随机存取存储器(RAM,
+Random Access Memory)、
+以及软件分发介质等。
+[0151] 本发明的计算机可读存储介质30存储的计算机程序31被处理器40执行时,
+可以在
+接收到用户对于车辆预设功能的语音请求后,通过读取上一轮的语音请求,结合两轮语音
+请求查询是否命中缓存,在查询不到对应缓存的情况下,利用上一轮的语音请求改写当前
+轮的语音请求以使得改写后的语音请求可以被系统识别出相应的意图,从而对改写后的当
+前轮的语音请求进行意图识别后,可以准确识别出用户的意图,进而可以根据意图识别结
+果下发控制指令,
+以控制对应的车辆零部件,完成语音交互。
+使用高频缓存引擎与意图识别
+相结合的方式识别语音请求的意图,实现多轮语音请求下,准确识别出通过语音交互来模
+拟对车辆零部件的操作实现刻度调节的用户意图。
+
+14
+
+CN 114299931 B
+
+说
+
+明
+
+书
+
+图1
+
+15
+
+附
+
+图
+
+1/7 页
+
+CN 114299931 B
+
+说
+
+明
+
+书
+
+图2
+
+图3
+
+16
+
+附
+
+图
+
+2/7 页
+
+CN 114299931 B
+
+说
+
+明
+
+书
+
+图4
+
+图5
+
+17
+
+附
+
+图
+
+3/7 页
+
+CN 114299931 B
+
+说
+
+明
+
+书
+
+图6
+
+图7
+18
+
+附
+
+图
+
+4/7 页
+
+CN 114299931 B
+
+说
+
+明
+
+书
+
+图8
+
+图9
+
+19
+
+附
+
+图
+
+5/7 页
+
+CN 114299931 B
+
+说
+
+明
+
+书
+
+图10
+
+图11
+
+20
+
+附
+
+图
+
+6/7 页
+
+CN 114299931 B
+
+说
+
+明
+
+书
+
+图12
+
+图13
+
+图14
+
+21
+
+附
+
+图
+
+7/7 页
+
+
\ No newline at end of file
diff --git a/intelligent_cabin/archive/patents/texts/CN115394300A.txt b/intelligent_cabin/archive/patents/texts/CN115394300A.txt
new file mode 100644
index 0000000..274928f
--- /dev/null
+++ b/intelligent_cabin/archive/patents/texts/CN115394300A.txt
@@ -0,0 +1,1814 @@
+(19)国家知识产权局
+
+(12)发明专利申请
+(10)申请公布号 CN 115394300 A
+(43)申请公布日 2022.11.25
+(21)申请号 202211332377 .8
+(22)申请日 2022 .10 .28
+(71)申请人 广州小鹏汽车科技有限公司
+地址 510000 广东省广州市天河区岑村松
+岗大街8号
+(72)发明人 唐祥光
+鲍鹏丽
+
+胡梓垣 孙仿逊
+王合心
+
+左佑
+
+(74)专利代理机构 北京清亦华知识产权代理事
+务所(普通合伙) 11201
+专利代理师 雷玉龙
+(51)Int .Cl .
+G10L 15/26 (2006 .01)
+G06F 40/30 (2020 .01)
+
+G10L 15/34 (2013 .01)
+B60R 16/037 (2006 .01)
+权利要求书2页
+
+CN 115394300 A
+
+(54)发明名称
+语音交互方法、语音交互装置、车辆和可读
+存储介质
+(57)摘要
+本发明公开了一种语音交互方法、
+语音交互
+装置、车辆和可读存储介质,
+属于车载语音交互
+技术领域。所述语音交互方法,
+包括:
+获取本地端
+确定的至少一路第一对话结果;
+对第一对话结果
+进行分级处理,
+确定各第一对话结果对应的融合
+等级;
+在未接收到云端发送的第二对话结果,
+且
+将第一对话结果对应的融合等级确定为最高级
+的情况下,
+将最高级对应的第一对话结果确定为
+目标对话结果;
+在接收到云端发送的第二对话结
+果的情况下,
+将第二对话结果确定为目标对话结
+果;
+按目标对话结果执行语音交互。本发明的语
+音交互方法,
+能在保证识别准确性的同时,
+提高
+语音交互系统的响应速度及灵敏性,
+在保证准确
+性的同时体验更快,
+实现极速对话。
+
+说明书16页
+
+附图4页
+
+CN 115394300 A
+
+权
+
+利
+
+要
+
+求
+
+书
+
+1/2 页
+
+1 .一种语音交互方法,
+其特征在于,
+包括:
+获取本地端确定的至少一路第一对话结果;
+所述本地端包括至少一个支路,
+各所述支
+路基于车辆座舱的用户语音请求确定与所述支路对应的第一对话结果,
+各所述支路的计算
+时延不同;
+对所述第一对话结果进行分级处理,
+确定各所述第一对话结果对应的融合等级;
+在未接收到云端发送的第二对话结果,
+且将所述第一对话结果对应的融合等级确定为
+最高级的情况下,
+将所述最高级对应的第一对话结果确定为目标对话结果;
+在接收到云端发送的第二对话结果的情况下,
+将所述第二对话结果确定为目标对话结
+果;
+按所述目标对话结果执行语音交互;
+其中,
+所述第二对话结果为所述云端基于所述用户语音请求确定的。
+2 .根据权利要求1所述的语音交互方法,
+其特征在于,
+在所述用户语音请求包括多个连
+续的子语音请求的情况下,
+所述对所述第一对话结果进行分级处理,
+确定各所述第一对话
+结果对应的融合等级,
+包括:
+在第一目标子对话结果为所述云端识别的结果的情况下,
+确定第二目标子对话结果对
+应的融合等级为第二级;
+在第一目标子对话结果为所述本地端识别的结果的情况下,
+确定第二目标子对话结果
+对应的融合等级为所述最高级;
+其中,
+所述第一目标子对话结果为第一目标子语音请求对应的目标对话结果,
+所述第
+二目标子对话结果为第二目标子语音请求对应的第一对话结果,
+所述第一目标子语音请求
+为所述多个连续的子语音请求中,
+位于所述第二目标子语音请求之前,
+且与所述第二目标
+子语音请求相邻的子语音请求。
+3 .根据权利要求1所述的语音交互方法,
+其特征在于,
+所述对所述第一对话结果进行分
+级处理,
+确定各所述第一对话结果对应的融合等级,
+包括:
+对所述第一对话结果进行基于文本识别结果和所述第一对话结果中的至少一种结果
+的分级处理,
+确定所述第一对话结果对应的融合等级;
+其中,
+所述文本识别结果为对所述用户语音请求进行文本识别确定的 ,
+所述第一对话
+结果为对所述文本识别结果进行语义理解确定的。
+4 .根据权利要求3所述的语音交互方法,
+其特征在于,
+所述对所述第一对话结果进行基
+于文本识别结果和所述第一对话结果中的至少一种结果的分级处理,
+确定所述第一对话结
+果对应的融合等级,
+包括:
+获取所述文本识别结果中的文本识别置信度和文本识别清晰度,
+获取所述第一对话结
+果中的领域、
+所述领域对应的第一置信度、
+意图和所述意图对应的第二置信度;
+基于所述文本识别置信度、文本识别清晰度、所述领域、所述第一置信度、所述意图和
+所述第二置信度中的至少两种,
+确定所述第一对话结果对应的融合等级。
+5 .根据权利要求1‑4任一项所述的语音交互方法,
+其特征在于,
+在所述获取本地端确定
+的至少一路第一对话结果之后,
+且在所述对所述第一对话结果进行分级处理,
+确定各所述
+第一对话结果对应的融合等级之前,
+所述方法还包括:
+基于所述第一对话结果,
+确定所述第一对话结果对应的频率等级和所述第一对话结果
+2
+
+CN 115394300 A
+
+权
+
+利
+
+要
+
+求
+
+书
+
+2/2 页
+
+对应的可信度;
+在所述可信度大于目标阈值,
+且所述频率等级为最高频的情况下,
+确定所述第一对话
+结果对应的融合等级为所述最高级。
+6 .根据权利要求5所述的语音交互方法,
+其特征在于,
+所述基于所述第一对话结果,
+确
+定所述第一对话结果对应的频率等级和所述第一对话结果对应的可信度,
+包括:
+获取文本识别结果中的文本识别清晰度,
+获取所述第一对话结果中的领域对应的第一
+置信度、
+意图对应的第二置信度和所述用户语音请求;
+其中,
+所述文本识别结果为对所述用
+户语音请求进行文本识别确定的;
+采用前缀树匹配所述用户语音请求,
+确定所述频率等级;
+基于所述文本识别清晰度、
+所述第一置信度和所述第二置信度,
+确定所述可信度。
+7 .根据权利要求1‑4任一项所述的语音交互方法,
+其特征在于,
+在所述按所述目标对话
+结果执行语音交互之后,
+所述方法还包括:
+基于所述目标对话结果,
+更新所述用户语音请求对应的初始上下文信息,
+所述初始上
+下文信息为所述本地端或所述云端基于所述用户语音请求确定。
+8 .根据权利要求1‑4任一项所述的语音交互方法,
+其特征在于,
+在所述用户语音请求包
+括多个连续的子语音请求的情况下,
+所述方法还包括:
+接收目标设备发送的打断信号,
+所述打断信号包括被打断的任务ID;
+响应于所述打断信号,
+清空所述任务ID对应的任务栈及所述任务ID对应的上下文信
+息。
+9 .一种语音交互装置,
+其特征在于,
+包括:
+第一获取模块,用于获取本地端确定的至少一路第一对话结果;
+所述本地端包括至少
+一个支路,
+各所述支路基于车辆座舱的用户语音请求确定与所述支路对应的第一对话结
+果,
+各所述支路的计算时延不同;
+第一处理模块,用于对所述第一对话结果进行分级处理,
+确定各所述第一对话结果对
+应的融合等级;
+第二处理模块,用于在未接收到云端发送的第二对话结果,
+且将所述第一对话结果对
+应的融合等级确定为最高级的情况下,
+将所述最高级对应的第一对话结果确定为目标对话
+结果;
+第三处理模块,用于在接收到云端发送的第二对话结果的情况下,
+将所述第二对话结
+果确定为目标对话结果;
+第四处理模块,
+用于按所述目标对话结果执行语音交互;
+其中,
+所述第二对话结果为所述云端基于所述用户语音请求确定的。
+10 .一种车辆,
+包括存储器、
+处理器及存储在存储器上并可在处理器上运行的计算机程
+序,
+其特征在于,
+所述处理器执行所述程序时实现如权利要求1‑8任一项所述的语音交互方
+法。
+11 .一种非暂态计算机可读存储介质,
+其上存储有计算机程序,
+其特征在于,
+该计算机
+程序被处理器执行时实现如权利要求1‑8任一项所述的语音交互方法。
+
+3
+
+CN 115394300 A
+
+说
+
+明
+
+书
+
+1/16 页
+
+语音交互方法、语音交互装置、车辆和可读存储介质
+技术领域
+[0001] 本发明属于车载语音交互技术领域,
+尤其涉及一种语音交互方法、
+语音交互装置、
+车辆和可读存储介质。
+背景技术
+[0002] 随着车载语音系统的广泛应用,
+用户越来越注重车载语音系统的识别精确度以及
+响应速度。相关技术中,
+往往通过将自然语言解析服务放置于云端以提高语音识别的精确
+度,
+但耗时较高,
+导致响应速度较慢,
+从而影响用户的使用体验。
+发明内容
+[0003] 本发明旨在至少解决现有技术中存在的技术问题之一。
+为此,
+本发明提出一种语
+音交互方法、语音交互装置、
+车辆和可读存储介质,
+在保证识别准确性的同时,
+提高语音交
+互系统的响应速度以及灵敏性。
+[0004] 第一方面,
+本发明提供了一种语音交互方法,
+该方法包括:
+所述本地端包括至少一个支路,
+各所
+获取本地端确定的至少一路第一对话结果;
+述支路基于车辆座舱的用户语音请求确定与所述支路对应的第一对话结果,
+各所述支路的
+计算时延不同;
+对所述第一对话结果进行分级处理,
+确定各所述第一对话结果对应的融合等级;
+在未接收到云端发送的第二对话结果,
+且将所述第一对话结果对应的融合等级确
+定为最高级的情况下,
+将所述最高级对应的第一对话结果确定为目标对话结果;
+在接收到云端发送的第二对话结果的情况下,
+将所述第二对话结果确定为目标对
+话结果;
+按所述目标对话结果执行语音交互;
+其中,
+所述第二对话结果为所述云端基于所述用户语音请求确定的。
+[0005] 根据本发明的语音交互方法,
+通过对本地端多支路发送的第一对话结果进行分级
+处理以得到对应的融合等级,
+并基于融合等级以及是否接收到云端发送的第二对话结果来
+确定最终用于执行语音交互的目标对话结果,
+有助于在保证识别准确性的同时,
+提高语音
+交互系统的响应速度以及灵敏性,
+在保证准确性的同时体验更快,
+实现极速对话,
+从而提高
+用户的使用体验。
+[0006] 根据本发明的语音交互方法,
+在所述用户语音请求包括多个连续的子语音请求的
+情况下,
+所述对所述第一对话结果进行分级处理,
+确定各所述第一对话结果对应的融合等
+级,
+包括:
+在第一目标子对话结果为所述云端识别的结果的情况下,
+确定第二目标子对话结
+果对应的融合等级为第二级;
+确定第二目标子对话
+在第一目标子对话结果为所述本地端识别的结果的情况下,
+结果对应的融合等级为所述最高级;
+4
+
+CN 115394300 A
+
+说
+
+明
+
+书
+
+2/16 页
+
+其中,
+所述第一目标子对话结果为第一目标子语音请求对应的目标对话结果,
+所
+述第二目标子对话结果为第二目标子语音请求对应的第一对话结果,
+所述第一目标子语音
+且与所述第二
+请求为所述多个连续的子语音请求中,
+位于所述第二目标子语音请求之前,
+目标子语音请求相邻的子语音请求。
+[0007] 根据本发明的语音交互方法,
+所述对所述第一对话结果进行分级处理,
+确定各所
+述第一对话结果对应的融合等级,
+包括:
+对所述第一对话结果进行基于文本识别结果和所述第一对话结果中的至少一种
+结果的分级处理,
+确定所述第一对话结果对应的融合等级;
+其中,
+所述文本识别结果为对所述用户语音请求进行文本识别确定的,
+所述第一
+对话结果为对所述文本识别结果进行语义理解确定的。
+[0008] 根据本发明的语音交互方法,
+所述对所述第一对话结果进行基于文本识别结果和
+所述第一对话结果中的至少一种结果的分级处理,确定所述第一对话结果对应的融合等
+级,
+包括:
+获取所述文本识别结果中的文本识别置信度和文本识别清晰度,
+获取所述第一对
+话结果中的领域、
+所述领域对应的第一置信度、
+意图和所述意图对应的第二置信度;
+基于所述文本识别置信度、文本识别清晰度、所述领域、所述第一置信度、所述意
+图和所述第二置信度中的至少两种,
+确定所述第一对话结果对应的融合等级。
+[0009] 根据本发明的语音交互方法,
+在所述获取本地端确定的至少一路第一对话结果之
+后,
+且在所述对所述第一对话结果进行分级处理,
+确定各所述第一对话结果对应的融合等
+级之前,
+所述方法还包括:
+基于所述第一对话结果,
+确定所述第一对话结果对应的频率等级和所述第一对话
+结果对应的可信度;
+在所述可信度大于目标阈值,
+且所述频率等级为最高频的情况下,
+确定所述第一
+对话结果对应的融合等级为所述最高级。
+[0010] 根据本发明的语音交互方法,
+所述基于所述第一对话结果,
+确定所述第一对话结
+果对应的频率等级和所述第一对话结果对应的可信度,
+包括:
+获取文本识别结果中的文本识别清晰度,
+获取所述第一对话结果中的领域对应的
+第一置信度、
+意图对应的第二置信度和所述用户语音请求;
+其中,
+所述文本识别结果为对所
+述用户语音请求进行文本识别确定的;
+采用前缀树匹配所述用户语音请求,
+确定所述频率等级;
+基于所述文本识别清晰度、
+所述第一置信度和所述第二置信度,
+确定所述可信度。
+[0011] 根据本发明的语音交互方法,
+在所述按所述目标对话结果执行语音交互之后,
+所
+述方法还包括:
+基于所述目标对话结果,
+更新所述用户语音请求对应的初始上下文信息,
+所述初
+始上下文信息为所述本地端或所述云端基于所述用户语音请求确定。
+[0012] 根据本发明的语音交互方法,
+在所述用户语音请求包括多个连续的子语音请求的
+情况下,
+所述方法还包括:
+接收目标设备发送的打断信号,
+所述打断信号包括被打断的任务ID;
+响应于所述打断信号,
+清空所述任务ID对应的任务栈及所述任务ID对应的上下文
+5
+
+CN 115394300 A
+
+说
+
+明
+
+书
+
+3/16 页
+
+信息。
+[0013]
+
+第二方面,
+本发明提供了一种语音交互装置,
+该装置包括:
+所述本地端包括
+第一获取模块,用于获取本地端确定的至少一路第一对话结果;
+至少一个支路,
+各所述支路基于车辆座舱的用户语音请求确定与所述支路对应的第一对话
+结果,
+各所述支路的计算时延不同;
+第一处理模块,用于对所述第一对话结果进行分级处理,
+确定各所述第一对话结
+果对应的融合等级;
+第二处理模块,用于在未接收到云端发送的第二对话结果,
+且将所述第一对话结
+果对应的融合等级确定为最高级的情况下,
+将所述最高级对应的第一对话结果确定为目标
+对话结果;
+第三处理模块,用于在接收到云端发送的第二对话结果的情况下,
+将所述第二对
+话结果确定为目标对话结果;
+第四处理模块,
+用于按所述目标对话结果执行语音交互;
+其中,
+所述第二对话结果为所述云端基于所述用户语音请求确定的。
+[0014] 根据本发明的语音交互装置,
+通过对本地端多支路发送的第一对话结果进行分级
+处理以得到对应的融合等级,
+并基于融合等级以及是否接收到云端发送的第二对话结果来
+提高语音
+确定最终用于执行语音交互的目标对话结果,
+有助于在保证识别准确性的同时,
+交互系统的响应速度以及灵敏性,
+在保证准确性的同时体验更快,
+实现极速对话,
+从而提高
+用户的使用体验。
+[0015] 第三方面,
+本发明提供了一种车辆,
+包括存储器、
+处理器及存储在所述存储器上并
+可在所述处理器上运行的计算机程序,
+所述处理器执行所述计算机程序时实现如上述第一
+方面所述的语音交互方法。
+[0016] 第四方面,
+本发明提供了一种非暂态计算机可读存储介质,
+其上存储有计算机程
+序,
+所述计算机程序被处理器执行时实现如上述第一方面所述的语音交互方法。
+[0017] 第五方面,
+本发明提供了一种芯片,
+所述芯片包括处理器和通信接口,
+所述通信接
+口和所述处理器耦合,
+所述处理器用于运行程序或指令,
+实现如第一方面所述的语音交互
+方法。
+[0018] 第六方面,
+本发明提供了一种计算机程序产品,
+包括计算机程序,
+所述计算机程序
+被处理器执行时实现如上述第一方面所述的语音交互方法。
+[0019] 本发明的上述一个或多个技术方案,
+至少具有如下技术效果之一:
+通过对本地端多支路发送的第一对话结果进行分级处理以得到对应的融合等级,
+并基于融合等级以及是否接收到云端发送的第二对话结果来确定最终用于执行语音交互
+的目标对话结果,
+有助于在保证识别准确性的同时,
+提高语音交互系统的响应速度以及灵
+敏性,
+在保证准确性的同时体验更快,
+实现极速对话,
+从而提高用户的使用体验。
+[0020] 进一步的,
+通过在多轮对话场景下,
+基于上一轮的结果对下一轮的融合等级进行
+调整,
+实现融合等级的动态分级,
+从而能够保障不同架构不同体系的端云服务能较好地兼
+容,
+降低实施难度。
+[0021] 更进一步的,
+通过在进行分级处理之前,
+对第一对话结果进行高频分级处理,
+以判
+断第一对话结果是否为用户的高频语音指令,
+当确定第一对话结果为用户在车载环境下的
+6
+
+CN 115394300 A
+
+说
+
+明
+
+书
+
+4/16 页
+
+高频语音指令的情况下,
+则将该第一对话结果确定为目标对话结果,
+在保证精确性的基础
+上,
+还能进一步提高响应速率。
+[0022] 再进一步的,
+通过对第一对话结果进行基于文本识别结果和第一对话结果中的至
+少一种结果的分级处理,
+确定第一对话结果对应的融合等级,
+能够提高最终所确定的融合
+等级的精确性以及准确性,
+从而有助于提高语音交互系统的准确性。
+[0023] 本发明的附加方面和优点将在下面的描述中部分给出,
+部分将从下面的描述中变
+得明显,
+或通过本发明的实践了解到。
+附图说明
+[0024] 本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得
+明显和容易理解,
+其中:
+图1是本发明提供的语音交互方法的流程示意图之一;
+图2是本发明提供的语音交互方法的流程示意图之二;
+图3是本发明提供的语音交互方法的流程示意图之三;
+图4是本发明提供的语音交互方法的流程示意图之四;
+图5是本发明提供的语音交互方法的流程示意图之五;
+图6是本发明提供的语音交互装置的结构示意图;
+图7是本发明提供的车辆的结构示意图。
+具体实施方式
+[0025] 下面将结合本发明实施例中的附图,
+对本发明实施例中的技术方案进行清楚地描
+述,
+显然,
+所描述的实施例是本发明一部分实施例,
+而不是全部的实施例。基于本发明中的
+实施例,
+本领域普通技术人员获得的所有其他实施例,
+都属于本发明保护的范围。
+[0026] 本发明的说明书和权利要求书中的术语“第一”、
+“第二”等是用于区别类似的对
+象,
+而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互
+换,
+以便本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施,
+且“第一”、
+“第二”等所区分的对象通常为一类,
+并不限定对象的个数,
+例如第一对象可以是一个,
+也可
+以是多个。此外,
+说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,
+字符
+“/”,
+一般表示前后关联对象是一种“或”的关系。
+[0027]
+相关技术中,
+语音交互有三种方式:
+其一,
+将车载语音系统中的大量神经网络系统部署于云端以进行语音识别,
+然后
+通过本地端来执行语音识别结果,
+通过网络进行云端与本地端的通信;
+然而该方法耗时较
+长,
+且响应速度较慢,
+从而导致用户体验差,
+极大降低了用户的语音交互欲望。
+[0028] 其二,
+同时部署云服务和端服务,
+在本地端无法支持语音识别时再采用云服务进
+行语音识别;
+然而该方法极大地影响了在本地端无法支持语音识别的情况下的响应速度,
+无法满足较为复杂的语音识别情境下的快速响应,
+从而导致用户体验差。
+[0029] 其三,
+采用边缘计算进行语音识别,
+然而该方法需要外接较多的设备,
+导致设计成
+本较高,
+且边缘计算不稳定且算力具有局限性,
+导致语音识别系统的大多功能无法实现,
+影
+响用户的使用体验。
+7
+
+CN 115394300 A
+
+说
+
+明
+
+[0030]
+
+书
+
+5/16 页
+
+下面结合附图 ,
+通过具体的实现方式及其应用场景对本发明提供的语音交互方
+法、
+语音交互装置、
+车辆和可读存储介质进行详细地说明。
+[0031] 其中,
+语音交互方法可应用于终端,
+具体可由,
+终端中的硬件或软件执行。
+[0032] 该终端可以为车机,
+终端可以为包括诸如拾音器或触控面板或其它物理用户接口
+的设备。
+[0033] 以下各个实现方式中,
+描述了包括显示器和触摸敏感表面的终端。然而,
+应当理解
+的是,
+终端可以包括诸如物理键盘、
+鼠标和控制杆的一个或多个其它物理用户接口设备。
+[0034] 本发明提供的语音交互方法,
+该语音交互方法的执行主体可以为车机或者车机中
+能够实现该语音交互方法的功能模块或功能实体(如端云融合管理系统)。在车载环境下,
+由于网络情况复杂,
+比如车辆行驶时,
+由于地点切换导致网络状态动态变化,
+语音交互的复
+杂性以及计算时延也远高于居家环境的语音交互。
+[0035] 如图1所示,
+该语音交互方法包括:
+步骤110、步骤120、步骤130、步骤140和步骤
+150。
+[0036] 步骤110、
+获取本地端确定的至少一路第一对话结果;
+本地端包括至少一个支路,
+各支路基于车辆座舱的用户语音请求确定与支路对应的第一对话结果,
+各支路的计算时延
+不同;
+在该步骤中,用户语音请求为车辆座舱的用户在进行语音交互情境下,
+所发出的
+语音信息。
+[0037] 可以理解的是,
+语音交互场景包括单轮对话场景和多轮对话场景。
+[0038] 其中,
+在单轮对话场景下,用户语音请求为一条请求;
+在多轮对话场景下,用户语
+音请求可以包括多条连续的子语音请求,
+后一条子语音请求为基于上一条子语音请求对应
+的执行结果所发出的后续请求指令。
+[0039] 本地端包括至少一路支路,
+各支路独立对用户语音请求进行识别。
+[0040] 不同的支路设置有不同的算力,
+对应有不同的计算时延,
+例如,
+可阶梯式逐级提升
+各支路的算力。
+[0041] 第一对话结果为由本地端的支路对用户语音请求进行语音识别所得到的结果。
+[0042] 在实际执行过程中,
+各支路应对同一用户语音请求分别进行独立识别,
+以生成与
+各支路对应的第一对话结果。
+[0043] 第一对话结果的确定方式将在下文中进行说明,
+在此暂不作赘述。
+[0044] 步骤120、
+对第一对话结果进行分级处理,
+确定各第一对话结果对应的融合等级;
+在该步骤中,
+融合等级用于表征第一对话结果的优先级。
+[0045]
+例如,
+融合等级可以包括A/B/C/D/E等多个等级,
+各等级对应的优先级依次降低。
+[0046] 可以理解的是,
+不同支路处理得到的第一对话结果的精确度可能各不相同,
+不同
+的精确度对应有不同的优先级。
+[0047] 在后续执行过程中,
+可基于融合等级从得到的多个第一对话结果中确定一个进行
+执行。
+[0048] 在实际执行过程中,
+可以采用预训练的神经网络模型对第一对话结果进行分级处
+理,
+以得到各第一对话结果对应的融合等级,
+其中,
+神经网络模型可以为任意可实现的模
+型。
+8
+
+CN 115394300 A
+
+说
+
+明
+
+[0049]
+
+书
+
+6/16 页
+
+在一些实施方式中,
+步骤120,
+可以包括:
+对第一对话结果进行基于文本识别结果和第一对话结果中的至少一种结果的分
+确定第一对话结果对应的融合等级;
+级处理,
+其中,
+文本识别结果为对用户语音请求进行文本识别确定的,
+第一对话结果为对
+文本识别结果进行语义理解确定的。
+[0050] 在该实施方式中,
+文本识别结果为对用户语音请求进行文本识别(ASR)所得到的。
+[0051] 在得到文本识别结果后,
+对所得到的文本识别结果进行语义理解(NLU)即可获取
+第一对话结果。
+[0052] 在实际执行过程中,
+可对进行ASR处理后得到的文本识别结果进行保存,
+在需要时
+进行调取即可。
+[0053] 在得到第一对话结果后,
+对第一对话结果对应的文本识别结果进行分级处理;
+或
+者对第一对话结果进行分级处理;
+或者对第一对话结果以及第一对话结果对应的文本识别
+即可确定第一对话结果对应的融合等级。
+结果进行分级处理,
+[0054] 根据本发明提供的语音交互方法,
+通过对第一对话结果进行基于文本识别结果和
+第一对话结果中的至少一种结果的分级处理,
+确定第一对话结果对应的融合等级,
+能够提
+高最终所确定的融合等级的精确性以及准确性,
+从而有助于提高语音交互系统的准确性。
+[0055] 在一些实施方式中,
+对第一对话结果进行基于文本识别结果和第一对话结果中的
+确定第一对话结果对应的融合等级,
+可以包括:
+至少一种结果的分级处理,
+获取文本识别结果中的文本识别置信度和文本识别清晰度,
+获取第一对话结果中
+的领域、
+领域对应的第一置信度、
+意图和意图对应的第二置信度;
+基于文本识别置信度、文本识别清晰度、领域、第一置信度、意图和第二置信度中
+的至少两种,
+确定第一对话结果对应的融合等级。
+[0056] 在该实施方式中,
+文本识别结果可以包括文本识别置信度(ASR nbest置信度)和
+文本识别清晰度(ASR清晰度)。
+[0057] 第一对话结果可以包括:
+领域、
+领域对应的第一置信度(即领域置信度)、
+意图以及
+意图对应的第二置信度(即意图置信度)。
+[0058] 对ASR nbest置信度、
+ASR清晰度、领域、第一置信度、意图和第二置信度中的至少
+两种进行处理,
+确定第一对话结果对应的融合等级。
+[0059] 在实际执行过程中,
+可以采用预先训练的分级模型来执行该步骤。
+[0060] 如图2所示,
+在得到第一对话结果和文本识别结果后,
+将ASR nbest置信度、ASR清
+晰度、
+领域、第一置信度、
+意图和第二置信度输入至分级模型,
+由分级模型对ASR nbest置信
+度进行计算方差以及计算均值等处理,
+对ASR清晰度、
+领域、第一置信度、
+意图和第二置信度
+等进行其他处理,
+然后对得到的结果进行cat以及linear等处理,
+以输出第一对话结果对应
+的融合等级。
+[0061] 表1示例了分别对各支路输出的第一对话结果进行分级处理后所得到的各第一对
+话结果对应的融合等级,
+其中,
+第一对话结果为各支路对用户语音请求“打开车窗”进行识
+别后得到的。
+[0062] 表1
+
+9
+
+CN 115394300 A
+
+说
+
+明
+
+书
+
+7/16 页
+
+其中,
+支路2所输出的第一对话结果对应的融合等级最高,
+为A级。
+[0063] 需要说明的是,
+分级模型可以基于样本第一对话结果以及样本第一对话结果对应
+的样本融合等级训练得到;
+或者分级模型可以基于样本文本识别结果以及样本文本识别结
+果对应的样本融合等级训练得到;
+或者分级模型还可以基于样本文本识别结果、样本文本
+识别结果以及与样本文本识别结果对应的样本融合等级训练得到。
+[0064] 下面对分级模型的训练过程进行说明。
+[0065] 1、
+数据采集与标注
+先对样本用户语音请求进行听音,
+并标注其对应的领域以及意图等,
+获取样本领
+域和样本意图;
+将样本领域以及样本意图标注是否在可抢跑清单里面;
+根据样本用户语音的清晰度和完整度判定融合等级(如A/B/C/D/E等),
+并对等级
+进行标注以获取样本融合等级;
+基于上述所获取的数据即可获取分级模型的训练样本。
+[0066] 2、
+训练
+样本用户语音请求过一遍ASR以获取ASR nbest置信度,
+过一遍AJ系统(其他语音
+模型)以获取ASR清晰度;
+将ASR nbest置信度、
+ASR清晰度,
+样本领域及其置信度、
+样本意图及其置信度分别
+编码后即可训练多类模型。
+[0067] 3、
+训练语料示例。
+[0068] 4、
+标注标准可以基于清晰度(可以包括0、
+0 .3、
+0 .6以及1等级别)、
+样本领域置信度
+(可以包括0、
+0 .5以及1等级别),
+样本意图置信度(可以包括0、
+0 .5以及1等级别)和样本用户
+语音请求是否为背景音以及是否属于随意聊天内容等进行降级处理来确定。
+[0069] 在本发明中,
+通过采用预训练的分级模型确定第一对话结果的融合等级,
+可以提
+10
+
+CN 115394300 A
+
+说
+
+明
+
+书
+
+8/16 页
+
+高计算结果的准确性以及计算速率,
+且具有较高的学习能力。
+[0070] 根据本发明提供的语音交互方法,
+基于文本识别置信度、文本识别清晰度、领域、
+确定第一对话结果对应的融合等级,
+能够提
+第一置信度、
+意图和第二置信度中的至少两种,
+高最终所确定的融合等级的精确性以及准确性,
+从而有助于提高语音交互系统的准确性。
+[0071] 步骤130、
+在未接收到云端发送的第二对话结果,
+且将第一对话结果对应的融合等
+级确定为最高级的情况下,
+将最高级对应的第一对话结果确定为目标对话结果;
+在该步骤中,
+目标对话结果为最终用于执行的对话结果。
+[0072] 其中,
+第二对话结果为云端基于用户语音请求确定的,
+该用户语音请求与本地端
+对应的用户语音请求相同。
+[0073] 需要说明的是,
+在本发明中,
+默认将云端发送的第二对话结果对应的融合等级确
+定为最高级,
+即确定为A级。
+[0074] 可以理解的是,
+在车机正常工作时,
+用户唤醒语音交互系统后,
+用户语音请求可以
+通过本地端的至少一条支路以及云端的处理路线进行处理,
+云端的计算时延可能会高于本
+地端部分支路的计算时延。在接收云端发送的第二对话结果之前,
+可能会接收到一路或多
+路本地端的支路所发送的第一对话结果。
+[0075] 在未接收到第二对话结果之前,
+则比较已接收的各支路发送的第一对话结果对应
+的融合等级,
+若确定存在最高级对应的第一对话结果(即A级对应的第一对话结果),
+则将A
+级对应的第一对话结果确定为目标对话结果,
+即由本地端识别得到的该A级对应的第一对
+话结果为本轮用于执行的对话结果。
+[0076] 在未接收到第二对话结果且未得到最高级对应的第一对话结果的情况下,
+则持续
+接收各支路发送的第一对话结果并对第一对话结果进行分级处理,
+基于融合等级进行如下
+处理。
+[0077] 在一些示例中,
+在目标时段内,
+在未接收到第二对话结果且未得到最高级对应的
+第一对话结果的情况下,
+将确定的融合等级为第二级(即B级)的第一对话结果确定为目标
+对话结果。
+[0078] 其中,
+目标时段可以基于用户自定义,
+如设置为自本轮语音交互开始起第3s至第
+5s之间的时段,
+当然,
+也可以基于实际需求设置为其他时间段,
+如第2s至第4秒等,
+本发明不
+作限定。
+[0079] 在另一些示例中,
+在目标时段内,
+在未接收到第二对话结果且未得到最高级对应
+的第一对话结果以及第二级对应的第一对话结果的情况下,
+则结束本轮语音交互。
+[0080]
+例如,
+在第3s‑5s期间,
+在未接收到第二对话结果的情况下,
+若得到融合等级为A级
+的第一对话结果,
+则将融合等级为A级的第一对话结果确定为目标对话结果;
+在第3s‑5s期间,
+在未接收到第二对话结果且未得到A级的第一对话结果的情况
+下,
+则还可以将在第3s‑5s期间得到的融合等级为B级的第一对话结果确定为目标对话结
+果。
+[0081] 在第3s‑5s期间,
+在未接收到第二对话结果,
+未得到A级的第一对话结果,
+且未得到
+融合等级为B级的第一对话结果的情况下,
+则结束本轮语音交互。
+[0082] 步骤140、
+在接收到云端发送的第二对话结果的情况下,
+将第二对话结果确定为目
+标对话结果;
+11
+
+CN 115394300 A
+
+说
+
+明
+
+书
+
+9/16 页
+
+在该步骤中,
+在未得到最高级对应的第一对话结果且接收到云端发送的第二对话
+结果的情况下,
+则将第二对话结果的等级确定为最高级,
+并将第二对话结果确定为目标对
+话结果,
+即由云端识别得到的第二对话结果为本轮用于执行的对话结果。
+[0083] 步骤150、
+按目标对话结果执行语音交互。
+[0084] 在该步骤中,
+目标对话结果为第一对话结果和第二对话结果中的一种。
+[0085] 目标对话结果对应的融合等级为最高级。
+[0086] 执行语音交互可以有多种形式:
+其一,
+执行语音交互对应的控制指令。
+[0087] 比如,
+用户语音请求为“打开天窗”,
+执行语音交互可以包括开启天窗。
+[0088] 其二,
+播报语音回复。
+[0089] 比如,
+用户语音请求为“还有多久到目的地”,
+执行语音交互可以包括播报“离目的
+地还有30分钟路程”。
+[0090] 其三,
+执行语音交互对应的控制指令且播报语音回复。
+[0091] 比如,
+用户语音请求为“打开天窗”,
+执行语音交互可以包括开启天窗且播报“天窗
+已开启”。
+[0092] 在本发明中,
+通过阶梯式配置多通道+端云融合的半无状态特性,
+可以解决云服务
+和端服务协作时无法权衡响应速度和准确性的问题;
+通过端云融合管理技术可以解决端服
+务和云服务完全割裂的问题。
+[0093] 根据本发明提供的语音交互方法,
+通过对本地端多支路发送的第一对话结果进行
+分级处理以得到对应的融合等级,
+并基于融合等级以及是否接收到云端发送的第二对话结
+果来确定最终用于执行语音交互的目标对话结果,
+有助于在保证识别准确性的同时,
+提高
+语音交互系统的响应速度以及灵敏性,
+在保证准确性的同时体验更快,
+实现极速对话,
+从而
+提高用户的使用体验。
+[0094] 在一些实施方式中,
+在步骤110之后且在步骤120之前,
+该方法还可以包括:
+基于第一对话结果,
+确定第一对话结果对应的频率等级和第一对话结果对应的可
+信度;
+在可信度大于目标阈值,
+且频率等级为最高频的情况下,
+确定第一对话结果对应
+的融合等级为最高级。
+[0095] 在该实施方式中,
+频率等级用于表征第一对话结果是否为车辆座舱的用户日常使
+用的高频语音指令。
+[0096] 可以理解的是,
+在车载环境下,
+存在有该环境下特有的高频语音指令,
+如“打开车
+窗”以及“导航至XX地点”等。
+[0097] 目标阈值可以基于用户自定义,
+如设置为0 .99、
+0 .98或0 .8等,
+本发明不作限定,
+在
+实际应用过程中,
+可基于实际需求确定最佳的数值。
+[0098] 在进行分级处理之前,
+可以先进行高频分级处理。通过对第一对话结果进行处理
+以确定第一对话结果对应的频率等级和第一对话结果对应的可信度,
+并将可信度与目标阈
+值进行比较。
+[0099] 需要说明的是,
+在本发明中,
+当基于频率等级和第一对话结果对应的可信度确定
+将第一对话结果的融合等级确定为最高级后,
+则可不进行步骤120,
+跳转至步骤130。
+12
+
+说
+
+CN 115394300 A
+[0100]
+
+例如,
+在可信度
+
+明
+
+书
+
+10/16 页
+
+>0 .99且第一对话结果对应的频率等级为高频的情况下,
+
+则将该第一对话结果对应的融合等级确定为A级;
+在将该第一对话结果对应的融合等级确
+定为A级后,
+在未接收到云端发送的第二对话结果的情况下,
+则将该A级对应的第一对话结
+果确定为目标对话结果。
+[0101] 在实际执行过程中,
+可以采用训练好的高频分级模型对第一对话结果进行高频分
+级处理,
+以确定第一对话结果的融合等级。
+[0102] 可以理解的是,
+高频分级处理对应的算法的时延应低于上文通用的分级处理的算
+法的时延。
+[0103] 如图3所示,
+将第一对话结果输入至高频分级模型,
+获取高频分级模型输出的融合
+等级,
+并判断融合等级。
+[0104] 在高频分级模型输出的融合等级为最高级的情况下,
+则直接将该最高级对应的第
+一对话结果确定为目标对话结果;
+在高频分级模型输出的融合等级非最高级的情况下,
+则将第一对话结果输入至分
+级模型进行进一步地分级处理,
+具体分级处理过程已在上文实施方式中进行了说明,
+在此
+不作赘述。
+[0105] 根据本发明提供的语音交互方法,
+通过在进行分级处理之前,
+对第一对话结果进
+行高频分级处理,
+以判断第一对话结果是否为用户的高频语音指令,
+当确定第一对话结果
+为用户在车载环境下的高频语音指令的情况下,
+则将该第一对话结果确定为目标对话结
+果,
+在保证精确性的基础上,
+还能进一步提高响应速率。
+[0106] 在一些实施方式中,
+基于第一对话结果,
+确定第一对话结果对应的频率等级和第
+一对话结果对应的可信度,
+可以包括:
+获取文本识别结果中的文本识别清晰度,
+获取第一对话结果中的领域对应的第一
+置信度、
+意图对应的第二置信度和用户语音请求;
+其中,
+文本识别结果为对用户语音请求进
+行文本识别确定的;
+采用前缀树匹配用户语音请求,
+确定频率等级;
+基于文本识别清晰度、
+第一置信度和第二置信度,
+确定可信度。
+[0107] 在该实施方式中,
+文本识别清晰度即ASR清晰度。
+[0108] 领域对应的第一置信度以及意图对应的第二置信度即入NLU的领域意图的置信
+度。
+[0109]
+用户语音请求即Query。
+[0110]
+例如,
+在实际执行过程中,
+可以输入NLU的领域意图的置信度、ASR清晰度和Query
+至高频分级模型;
+采用前缀树匹配Query是否属于高频,
+以确定频率等级;
+并通过如下公式
+计算可信度。
+
+[0111]
+
+其中,
+
+为可信度;
+
+为第一置信度;
+
+置信度;
+a、
+b和c分别为调节因子,
+浮点数标量。
+
+13
+
+为第二
+
+CN 115394300 A
+[0112]
+
+在一些示例中,
+当
+
+说
+
+明
+
+书
+
+11/16 页
+
+>0 .99且频率等级属于高频时,
+则将融合等级确定为A,
+
+其他情况分配默认等级D。
+[0113] 根据本发明提供的语音交互方法,
+采用前缀树匹配用户语音请求,
+确定频率等级,
+确定可信度,
+具有较高的准确度和精确
+并基于文本识别清晰度、第一置信度和第二置信度,
+度。
+[0114] 在一些实施方式中,
+在步骤150之后,
+该方法还可以包括:
+基于目标对话结果,
+更新
+用户语音请求对应的初始上下文信息,
+初始上下文信息为本地端或云端基于用户语音请求
+确定。
+[0115] 在该实施方式中,
+初始上下文信息包括初始识别的领域、
+意图和状态等信息。
+[0116] 如图4所示,
+对经NLU处理后得到的第一对话结果进行分级处理,
+并由车载大屏执
+行器采纳某一路结果后,
+将采纳信号(即目标对话结果)和采纳详情通知部署在车载大屏的
+端云融合管理系统,
+由其进行状态和信息的融合。
+[0117] 大屏执行器采用后回传的结果包括领域、
+意图、状态(continue/end)、采纳来源
+(端/云)以及通道ID等信息。
+[0118] 然后更新上下文,
+读取暂存区中与采纳结果最相近的上下文,
+其中,
+若是采用本地
+端的识别结果则根据通道ID读取,
+若是采用云端的识别结果则读取任一个端结果;用回传
+的信息来校验初始上下文信息。
+[0119] 最后基于采纳状态更新任务栈。
+其中,
+如果采纳状态=end,
+则退出语音助手,
+清空
+整个对话管理系统;
+在确定为新任
+如果采纳状态=continue,
+则判定当前用户语音请求是否为新任务,
+务的情况下则退出旧任务,
+进入新任务;
+在确定为旧任务的情况下则更新领域以及意图等
+信息。
+[0120] 根据本发明提供的语音交互方法,
+基于目标对话结果,
+更新用户语音请求对应的
+初始上下文信息,
+在实现快速响应的基础上,
+还能进一步实现信息的及时更新,
+确保端云信
+息保持一致。
+[0121] 下面对多轮对话场景下本发明的实现方式进行说明。
+[0122] 在一些实施方式中,
+在用户语音请求包括多个连续的子语音请求的情况下,
+步骤
+120,
+可以包括:
+在第一目标子对话结果为云端识别的结果的情况下,
+确定第二目标子对话结果对
+应的融合等级为第二级;
+在第一目标子对话结果为本地端识别的结果的情况下,
+确定第二目标子对话结果
+对应的融合等级为最高级;
+其中,
+第一目标子对话结果为第一目标子语音请求对应的目标对话结果,
+第二目
+标子对话结果为第二目标子语音请求对应的第一对话结果,
+第一目标子语音请求为多个连
+续的子语音请求中,
+位于第二目标子语音请求之前,
+且与第二目标子语音请求相邻的子语
+音请求。
+[0123] 在该实施方式中,
+第一目标子语音请求为多轮对话场景下,
+上一轮已执行的子语
+音请求。可以理解的是,
+第一目标子对话结果可能为云端输出的第二对话结果,
+也可能为本
+14
+
+CN 115394300 A
+
+说
+
+明
+
+书
+
+12/16 页
+
+地端某支路输出的第一对话结果。
+[0124]
+第二目标子语音请求为多轮对话场景下,
+本轮将要执行的子语音请求。第二目标
+子对话结果基于上一轮所执行的端的类型来确定。
+[0125] 需要说明的是,
+在多轮对话场景下,
+得出初步的分级结果后,
+在发给车载大屏执行
+器之前,
+需要针对多轮任务的情况做分级调整,
+以保障不同架构不同体系的端云服务能较
+好地兼容,
+降低实施难度。
+[0126]
+例如,
+在多轮对话场景下,
+若上一轮采用是本地端输出的第一对话结果,
+则本轮融
+合等级分级强制确定为A级;
+若上一轮采用的是云端输出的第二对话结果,
+则本轮融合等级分级强制确定为B
+级。
+[0127] 将最终确定的分级结果发送至车载大屏执行器进行执行。
+[0128] 在本发明中,
+通过动态分级技术,
+能够解决以往单纯靠一级服务完全无法承接才
+退化到二级服务的简单协作方式的问题。
+[0129] 根据本发明提供的语音交互方法,
+通过在多轮对话场景下,
+基于上一轮的结果对
+下一轮的融合等级进行调整,
+实现融合等级的动态分级,
+从而能够保障不同架构不同体系
+的端云服务能较好地兼容,
+降低实施难度。
+[0130] 在一些实施方式中,
+在将分级结果发给车载大屏执行器之后,
+且在端云融合前,
+还
+可以将结果暂存至暂存队列。
+[0131] 暂存期间不更新上下文,
+并且可以接受同一个msgId的不同通道多次请求,
+如图5
+所示。
+[0132] 若msgId1在处理后采纳前 ,
+msgId2开始处理并采纳msgId2,则抛弃msgId1 ,且
+msgId1和msgId2的上下文是同一份,
+msgId1并未被采纳来更新上下文(即上下文更新的条
+件是采纳信号)。
+[0133] 在一些实施方式中,
+在用户语音请求包括多个连续的子语音请求的情况下,
+该方
+法还可以包括:
+接收目标设备发送的打断信号,
+打断信号包括被打断的任务ID;
+响应于打断信号,
+清空任务ID对应的任务栈及任务ID对应的上下文信息。
+[0134] 在该实施方式中,
+表2示例了一种分级处理结果以及打断情况下的处理结果。
+[0135] 表2
+
+15
+
+CN 115394300 A
+
+说
+
+明
+
+书
+
+13/16 页
+
+可以理解的是,
+在多轮对话情境下,
+可能会出现异常打断,
+即某一些操作导致当前
+任务无法继续,
+需通过打断源广播出打断信号和打断详情,
+以维护了多轮状态的各个系统
+或者模块进行状态更新。
+[0136] 目标设备可以为任意车载设备,
+如车载大屏或车载大屏的UI管理器等。
+[0137]
+例如,
+在UI变动引起的任务打断的情况下,
+车载大屏的UI管理器给端云融合管理
+系统发送打断信号,
+告知被打断的任务ID;
+端云融合管理系统接收到任务ID判断是否需要
+销毁任务栈里面的对应任务,
+在确定需要清空的情况下则清空任务ID对应的任务栈及任务
+ID对应的上下文信息。
+[0138] 在语音切换意图导致的任务打断的情况下,
+端云融合管理系统给车载大屏UI管理
+器发送打断信号,
+告知被打断的任务ID;
+车载大屏UI管理器判断是否需要销毁UI显示的卡
+片和其维护的其他资源。
+[0139] 根据本发明提供的语音交互方法,
+通过在多轮对话场景下,
+当出现异常打断时,
+发
+送包括被打断的任务ID的打断信号以清空任务ID对应的任务栈及任务ID对应的上下文信
+息,
+能够有效维护更系统的工作状态,
+保证其处于正常工作状态。
+[0140] 本发明提供的语音交互方法,
+执行主体可以为语音交互装置。本发明中以语音交
+互装置执行语音交互方法为例,
+说明本发明提供的语音交互装置。
+
+16
+
+CN 115394300 A
+
+说
+
+明
+
+[0141]
+
+书
+
+14/16 页
+
+本发明还提供一种语音交互装置。
+[0142] 如图6所示,
+该语音交互装置包括:
+第一获取模块610、第一处理模块620、第二处理
+第三处理模块640和第四处理模块650。
+模块630、
+[0143] 第一获取模块610,
+用于获取本地端确定的至少一路第一对话结果;
+本地端包括至
+少一个支路,
+各支路基于车辆座舱的用户语音请求确定与支路对应的第一对话结果,
+各支
+路的计算时延不同;
+第一处理模块620,
+用于对第一对话结果进行分级处理,
+确定各第一对话结果对应
+的融合等级;
+第二处理模块630,
+用于在未接收到云端发送的第二对话结果,
+且将第一对话结果
+对应的融合等级确定为最高级的情况下,
+将最高级对应的第一对话结果确定为目标对话结
+果;
+第三处理模块640,
+用于在接收到云端发送的第二对话结果的情况下,
+将第二对话
+结果确定为目标对话结果;
+第四处理模块650,
+用于按目标对话结果执行语音交互;
+其中,
+第二对话结果为云端基于用户语音请求确定的。
+[0144] 根据本发明提供的语音交互装置,
+通过对本地端多支路发送的第一对话结果进行
+分级处理以得到对应的融合等级,
+并基于融合等级以及是否接收到云端发送的第二对话结
+果来确定最终用于执行语音交互的目标对话结果,
+有助于在保证识别准确性的同时,
+提高
+语音交互系统的响应速度以及灵敏性,
+在保证准确性的同时体验更快,
+实现极速对话,
+从而
+提高用户的使用体验。
+[0145] 在一些示例中,
+在用户语音请求包括多个连续的子语音请求的情况下,
+第一处理
+模块620,
+还可以用于:
+在第一目标子对话结果为云端识别的结果的情况下,
+确定第二目标子对话结果对
+应的融合等级为第二级;
+在第一目标子对话结果为本地端识别的结果的情况下,
+确定第二目标子对话结果
+对应的融合等级为最高级;
+其中,
+第一目标子对话结果为第一目标子语音请求对应的目标对话结果,
+第二目
+标子对话结果为第二目标子语音请求对应的第一对话结果,
+第一目标子语音请求为多个连
+续的子语音请求中,
+位于第二目标子语音请求之前,
+且与第二目标子语音请求相邻的子语
+音请求。
+[0146] 在一些示例中,
+第一处理模块620,
+还可以用于:
+对第一对话结果进行基于文本识别结果和第一对话结果中的至少一种结果的分
+级处理,
+确定第一对话结果对应的融合等级;
+其中,
+文本识别结果为对用户语音请求进行文本识别确定的,
+第一对话结果为对
+文本识别结果进行语义理解确定的。
+[0147] 在一些示例中,
+第一处理模块620,
+还可以用于:
+获取文本识别结果中的文本识别置信度和文本识别清晰度,
+获取第一对话结果中
+的领域、
+领域对应的第一置信度、
+意图和意图对应的第二置信度;
+基于文本识别置信度、文本识别清晰度、领域、第一置信度、意图和第二置信度中
+17
+
+CN 115394300 A
+
+说
+
+明
+
+书
+
+15/16 页
+
+的至少两种,
+确定第一对话结果对应的融合等级。
+[0148] 在一些示例中,
+该装置还可以包括:
+且在对第
+第五处理模块,用于在获取本地端确定的至少一路第一对话结果之后,
+一对话结果进行分级处理,
+确定各第一对话结果对应的融合等级之前,
+基于第一对话结果,
+确定第一对话结果对应的频率等级和第一对话结果对应的可信度;
+第六处理模块,
+用于在可信度大于目标阈值,
+且频率等级为最高频的情况下,
+确定
+第一对话结果对应的融合等级为最高级。
+[0149] 在一些示例中,
+第五处理模块,
+还可以用于:
+获取文本识别结果中的文本识别清晰度,
+获取第一对话结果中的领域对应的第一
+置信度、
+意图对应的第二置信度和用户语音请求;
+其中,
+文本识别结果为对用户语音请求进
+行文本识别确定的;
+采用前缀树匹配用户语音请求,
+确定频率等级;
+基于文本识别清晰度、
+第一置信度和第二置信度,
+确定可信度。
+[0150] 在一些示例中,
+该装置还可以包括:
+第七处理模块,
+用于在按目标对话结果执行语
+音交互之后,
+基于目标对话结果,
+更新用户语音请求对应的初始上下文信息,
+初始上下文信
+息为本地端或云端基于用户语音请求确定。
+[0151] 在一些示例中,
+该装置还可以包括:
+第七处理模块,用于在用户语音请求包括多个连续的子语音请求的情况下,
+接收
+目标设备发送的打断信号,
+打断信号包括被打断的任务ID;
+第八处理模块,用于响应于打断信号,
+清空任务ID对应的任务栈及任务ID对应的
+上下文信息。
+[0152] 本发明中的语音交互装置可以是电子设备,
+也可以是电子设备中的部件,
+例如集
+成电路或芯片。该电子设备可以是终端,
+也可以为除终端之外的其他设备。示例性的,
+电子
+设备可以为车辆或车辆上的车机等,
+本发明不作具体限定。
+[0153] 本发明中的语音交互装置可以为具有操作系统的装置。
+该操作系统可以为安卓
+(Android)操作系统,
+可以为IOS操作系统,
+还可以为其他可能的操作系统,
+本发明不作具体
+限定。
+[0154] 本发明提供的语音交互装置能够实现图1至图5的方法示例实现的各个过程,
+为避
+免重复,
+这里不再赘述。
+[0155] 在一些示例中,
+如图7所示,
+本发明还提供一种车辆700,
+包括处理器701、存储器
+702及存储在存储器702上并可在处理器701上运行的计算机程序,
+该程序被处理器701执行
+时实现上述语音交互方法示例的各个过程,
+且能达到相同的技术效果,
+为避免重复,
+这里不
+再赘述。
+[0156] 本发明还提供一种非暂态计算机可读存储介质,
+该非暂态计算机可读存储介质上
+存储有计算机程序,
+该计算机程序被处理器执行时实现上述语音交互方法示例的各个过
+程,
+且能达到相同的技术效果,
+为避免重复,
+这里不再赘述。
+[0157] 其中,
+所述处理器为上述示例中所述的电子设备中的处理器。所述可读存储介质,
+包括计算机可读存储介质,
+如计算机只读存储器ROM、
+随机存取存储器RAM、磁碟或者光盘
+等。
+18
+
+CN 115394300 A
+
+说
+
+明
+
+[0158]
+
+书
+
+16/16 页
+
+本发明还提供一种计算机程序产品,
+包括计算机程序,
+该计算机程序被处理器执
+行时实现上述语音交互方法。
+[0159] 其中,
+所述处理器为上述示例中所述的电子设备中的处理器。所述可读存储介质,
+包括计算机可读存储介质,
+如计算机只读存储器ROM、
+随机存取存储器RAM、磁碟或者光盘
+等。
+[0160] 本发明另提供了一种芯片,
+所述芯片包括处理器和通信接口,
+所述通信接口和所
+述处理器耦合,
+所述处理器用于运行程序或指令,
+实现上述语音交互方法示例的各个过程,
+且能达到相同的技术效果,
+为避免重复,
+这里不再赘述。
+[0161] 应理解,
+本发明提到的芯片还可以称为系统级芯片、系统芯片、
+芯片系统或片上系
+统芯片等。
+[0162] 需要说明的是,
+在本文中,
+术语“包括”、
+“包含”或者其任何其他变体意在涵盖非排
+他性的包含,
+从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,
+而
+或者是还包括为这种过程、
+方法、
+物品或者装置所固有
+且还包括没有明确列出的其他要素,
+的要素。在没有更多限制的情况下,
+由语句“包括一个……”限定的要素,
+并不排除在包括该
+要素的过程、
+方法、
+物品或者装置中还存在另外的相同要素。此外,
+需要指出的是,
+本发明实
+施方式中的方法和装置的范围不限按示出或讨论的顺序来执行功能,
+还可包括根据所涉及
+例如,
+可以按不同于所描述的次序
+的功能按基本同时的方式或按相反的顺序来执行功能,
+来执行所描述的方法,
+并且还可以添加、
+省去、
+或组合各种步骤。另外,
+参照某些示例所描述
+的特征可在其他示例中被组合。
+[0163] 通过以上的实施方式的描述,
+本领域的技术人员可以清楚地了解到上述示例方法
+可借助软件加必需的通用硬件平台的方式来实现,
+当然也可以通过硬件,
+但很多情况下前
+者是更佳的实施方式。基于这样的理解,
+本发明的技术方案本质上或者说对现有技术做出
+贡献的部分可以以计算机软件产品的形式体现出来,
+该计算机软件产品存储在一个存储介
+质(如ROM/RAM、
+磁碟、
+光盘)中,
+包括若干指令用以使得一台终端(可以是手机,
+计算机,
+服务
+器,
+或者网络设备等)执行本发明各个示例所述的方法。
+[0164] 上面结合附图对本发明的示例进行了描述,
+但是本发明并不局限于上述的具体实
+施方式,
+上述的具体实施方式仅仅是示意性的,
+而不是限制性的,
+本领域的普通技术人员在
+本发明的启示下,
+在不脱离本发明宗旨和权利要求所保护的范围情况下,
+还可做出很多形
+式,
+均属于本发明的保护之内。
+[0165] 在本说明书的描述中,
+参考术语“一个示例”、
+“一些示例”、
+“示意性示例”、
+“示例”、
+“具体示例”、
+或“一些示例”等的描述意指结合该示例或示例描述的具体特征、
+结构、
+材料或
+者特点包含于本发明的至少一个示例或示例中。在本说明书中,
+对上述术语的示意性表述
+不一定指的是相同的示例或示例。而且,
+描述的具体特征、
+结构、
+材料或者特点可以在任何
+的一个或多个示例或示例中以合适的方式结合。
+[0166] 尽管已经示出和描述了本发明的示例,
+本领域的普通技术人员可以理解:
+在不脱
+离本发明的原理和宗旨的情况下可以对这些示例进行多种变化、
+修改、
+替换和变型,
+本发明
+的范围由权利要求及其等同物限定。
+
+19
+
+CN 115394300 A
+
+说
+
+明
+
+书
+
+图1
+
+图2
+
+20
+
+附
+
+图
+
+1/4 页
+
+CN 115394300 A
+
+说
+
+明
+
+书
+
+图3
+
+21
+
+附
+
+图
+
+2/4 页
+
+CN 115394300 A
+
+说
+
+明
+
+书
+
+图4
+
+图5
+22
+
+附
+
+图
+
+3/4 页
+
+CN 115394300 A
+
+说
+
+明
+
+书
+
+图6
+
+图7
+
+23
+
+附
+
+图
+
+4/4 页
+
+
\ No newline at end of file
diff --git a/intelligent_cabin/archive/reports/bert_local_test_report.md b/intelligent_cabin/archive/reports/bert_local_test_report.md
new file mode 100644
index 0000000..5e2ba3f
--- /dev/null
+++ b/intelligent_cabin/archive/reports/bert_local_test_report.md
@@ -0,0 +1,65 @@
+# 本地 BERT 意图识别测试报告
+
+## 概览
+- 模型目录:`/Users/hwp/Documents/trae_projects/intelligent_cabin/models/local_bert_intent`
+- 评测集:`/Users/hwp/Documents/trae_projects/intelligent_cabin/app/data/bert_intent_eval_independent.jsonl`
+- 评测阈值:`0.0`
+- 测试样本数:`42`
+- 总体准确率:`0.9762`
+
+## 训练摘要
+- 基座模型:`hfl/chinese-macbert-base`
+- 训练集 / 验证集:`1557 / 401`
+- 最佳验证准确率:`0.9875`
+- 训练设备:`mps`
+
+## 分类别结果
+- `business`: 33/34 = 0.9706
+- `out_of_scope`: 4/4 = 1.0
+- `social`: 4/4 = 1.0
+
+## 分标签结果
+- `__out_of_scope__` (out_of_scope): 4/4 = 1.0
+- `__social__` (social): 4/4 = 1.0
+- `cabin_ac_off` (business): 1/1 = 1.0
+- `cabin_ac_on` (business): 1/1 = 1.0
+- `cabin_defog_front_on` (business): 1/1 = 1.0
+- `cabin_defog_rear_on` (business): 1/1 = 1.0
+- `cabin_fan_down` (business): 1/1 = 1.0
+- `cabin_fan_up` (business): 1/1 = 1.0
+- `cabin_lights_off` (business): 1/1 = 1.0
+- `cabin_lights_on` (business): 1/1 = 1.0
+- `cabin_lock_doors` (business): 1/1 = 1.0
+- `cabin_mirror_fold` (business): 1/1 = 1.0
+- `cabin_mirror_unfold` (business): 1/1 = 1.0
+- `cabin_nav_cancel` (business): 1/1 = 1.0
+- `cabin_nav_to` (business): 1/1 = 1.0
+- `cabin_next_track` (business): 1/1 = 1.0
+- `cabin_pause_music` (business): 1/1 = 1.0
+- `cabin_play_music` (business): 1/1 = 1.0
+- `cabin_previous_track` (business): 1/1 = 1.0
+- `cabin_seat_heat_off` (business): 1/1 = 1.0
+- `cabin_seat_heat_on` (business): 1/1 = 1.0
+- `cabin_set_ac` (business): 1/1 = 1.0
+- `cabin_sunroof_close` (business): 1/1 = 1.0
+- `cabin_sunroof_open` (business): 1/1 = 1.0
+- `cabin_unlock_doors` (business): 1/1 = 1.0
+- `cabin_volume_down` (business): 1/1 = 1.0
+- `cabin_volume_mute` (business): 1/1 = 1.0
+- `cabin_volume_up` (business): 1/1 = 1.0
+- `cabin_window_close` (business): 1/1 = 1.0
+- `cabin_window_open` (business): 0/1 = 0.0
+- `cabin_wiper_off` (business): 1/1 = 1.0
+- `cabin_wiper_on` (business): 1/1 = 1.0
+- `cs_cancel_order` (business): 1/1 = 1.0
+- `cs_query_logistics` (business): 1/1 = 1.0
+- `cs_query_order` (business): 1/1 = 1.0
+- `cs_transfer_human` (business): 1/1 = 1.0
+
+## 错误样例
+- 文本:`左前窗打开一点` | 类别:`business` | 期望:`cabin_window_open` | 预测:`cabin_defog_front_on` | 分数:`0.9951`
+
+## 结论
+- 当前本地 MacBERT 已具备较强的业务意图识别能力,可作为本地快链路分类器。
+- 误判主要集中在方向相反或语义接近的控制指令,下一步应补充对抗样本和真实口语表达。
+- 上线前建议继续补充 ASR 错字、多轮短句和多意图子句级样本。
diff --git a/intelligent_cabin/archive/reports/bert_local_test_result.json b/intelligent_cabin/archive/reports/bert_local_test_result.json
new file mode 100644
index 0000000..ae459d5
--- /dev/null
+++ b/intelligent_cabin/archive/reports/bert_local_test_result.json
@@ -0,0 +1,426 @@
+{
+ "model_dir": "/Users/hwp/Documents/trae_projects/intelligent_cabin/models/local_bert_intent",
+ "threshold": 0.0,
+ "test_path": "/Users/hwp/Documents/trae_projects/intelligent_cabin/app/data/bert_intent_eval_independent.jsonl",
+ "test_case_count": 42,
+ "accuracy": 0.9762,
+ "train_summary": {
+ "base_model": "hfl/chinese-macbert-base",
+ "epochs": 16,
+ "batch_size": 8,
+ "learning_rate": 2e-05,
+ "train_size": 1557,
+ "dev_size": 401,
+ "best_dev_accuracy": 0.9875,
+ "device": "mps"
+ },
+ "per_category": [
+ {
+ "category": "business",
+ "total": 34,
+ "correct": 33,
+ "accuracy": 0.9706
+ },
+ {
+ "category": "out_of_scope",
+ "total": 4,
+ "correct": 4,
+ "accuracy": 1.0
+ },
+ {
+ "category": "social",
+ "total": 4,
+ "correct": 4,
+ "accuracy": 1.0
+ }
+ ],
+ "per_label": [
+ {
+ "label": "__out_of_scope__",
+ "category": "out_of_scope",
+ "total": 4,
+ "correct": 4,
+ "accuracy": 1.0
+ },
+ {
+ "label": "__social__",
+ "category": "social",
+ "total": 4,
+ "correct": 4,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_ac_off",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_ac_on",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_defog_front_on",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_defog_rear_on",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_fan_down",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_fan_up",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_lights_off",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_lights_on",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_lock_doors",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_mirror_fold",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_mirror_unfold",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_nav_cancel",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_nav_to",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_next_track",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_pause_music",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_play_music",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_previous_track",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_seat_heat_off",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_seat_heat_on",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_set_ac",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_sunroof_close",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_sunroof_open",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_unlock_doors",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_volume_down",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_volume_mute",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_volume_up",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_window_close",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_window_open",
+ "category": "business",
+ "total": 1,
+ "correct": 0,
+ "accuracy": 0.0
+ },
+ {
+ "label": "cabin_wiper_off",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cabin_wiper_on",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cs_cancel_order",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cs_query_logistics",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cs_query_order",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ },
+ {
+ "label": "cs_transfer_human",
+ "category": "business",
+ "total": 1,
+ "correct": 1,
+ "accuracy": 1.0
+ }
+ ],
+ "errors": [
+ {
+ "text": "左前窗打开一点",
+ "category": "business",
+ "expected_label": "cabin_window_open",
+ "predicted_label": "cabin_defog_front_on",
+ "score": 0.9951,
+ "raw_label": "cabin_defog_front_on",
+ "ok": false,
+ "top_candidates": [
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.9951
+ },
+ {
+ "intent_id": "cabin_sunroof_open",
+ "score": 0.0005
+ },
+ {
+ "intent_id": "cabin_lights_on",
+ "score": 0.0004
+ }
+ ]
+ }
+ ],
+ "confusion": {
+ "cabin_ac_off": {
+ "cabin_ac_off": 1
+ },
+ "cabin_ac_on": {
+ "cabin_ac_on": 1
+ },
+ "cabin_defog_front_on": {
+ "cabin_defog_front_on": 1
+ },
+ "cabin_defog_rear_on": {
+ "cabin_defog_rear_on": 1
+ },
+ "cabin_fan_down": {
+ "cabin_fan_down": 1
+ },
+ "cabin_fan_up": {
+ "cabin_fan_up": 1
+ },
+ "cabin_lights_off": {
+ "cabin_lights_off": 1
+ },
+ "cabin_lights_on": {
+ "cabin_lights_on": 1
+ },
+ "cabin_lock_doors": {
+ "cabin_lock_doors": 1
+ },
+ "cabin_mirror_fold": {
+ "cabin_mirror_fold": 1
+ },
+ "cabin_mirror_unfold": {
+ "cabin_mirror_unfold": 1
+ },
+ "cabin_nav_cancel": {
+ "cabin_nav_cancel": 1
+ },
+ "cabin_nav_to": {
+ "cabin_nav_to": 1
+ },
+ "cabin_next_track": {
+ "cabin_next_track": 1
+ },
+ "cabin_pause_music": {
+ "cabin_pause_music": 1
+ },
+ "cabin_play_music": {
+ "cabin_play_music": 1
+ },
+ "cabin_previous_track": {
+ "cabin_previous_track": 1
+ },
+ "cabin_seat_heat_off": {
+ "cabin_seat_heat_off": 1
+ },
+ "cabin_seat_heat_on": {
+ "cabin_seat_heat_on": 1
+ },
+ "cabin_set_ac": {
+ "cabin_set_ac": 1
+ },
+ "cabin_sunroof_close": {
+ "cabin_sunroof_close": 1
+ },
+ "cabin_sunroof_open": {
+ "cabin_sunroof_open": 1
+ },
+ "cabin_unlock_doors": {
+ "cabin_unlock_doors": 1
+ },
+ "cabin_volume_down": {
+ "cabin_volume_down": 1
+ },
+ "cabin_volume_mute": {
+ "cabin_volume_mute": 1
+ },
+ "cabin_volume_up": {
+ "cabin_volume_up": 1
+ },
+ "cabin_window_close": {
+ "cabin_window_close": 1
+ },
+ "cabin_window_open": {
+ "cabin_defog_front_on": 1
+ },
+ "cabin_wiper_off": {
+ "cabin_wiper_off": 1
+ },
+ "cabin_wiper_on": {
+ "cabin_wiper_on": 1
+ },
+ "cs_cancel_order": {
+ "cs_cancel_order": 1
+ },
+ "cs_query_logistics": {
+ "cs_query_logistics": 1
+ },
+ "cs_query_order": {
+ "cs_query_order": 1
+ },
+ "cs_transfer_human": {
+ "cs_transfer_human": 1
+ },
+ "__social__": {
+ "__social__": 4
+ },
+ "__out_of_scope__": {
+ "__out_of_scope__": 4
+ }
+ }
+}
\ No newline at end of file
diff --git a/intelligent_cabin/archive/reports/bert_multi_intent_independent_report.md b/intelligent_cabin/archive/reports/bert_multi_intent_independent_report.md
new file mode 100644
index 0000000..8c9a5ad
--- /dev/null
+++ b/intelligent_cabin/archive/reports/bert_multi_intent_independent_report.md
@@ -0,0 +1,47 @@
+# 本地多标签 Detector 独立评测报告
+
+## 概览
+- 模型目录:`/Users/hwp/Documents/trae_projects/intelligent_cabin/models/local_bert_multi_intent`
+- 评测集:`/Users/hwp/Documents/trae_projects/intelligent_cabin/app/data/bert_intent_multilabel_eval_independent.jsonl`
+- 样本数:`37`
+- 阈值 / top_k / max_labels:`0.45 / 8 / 4`
+- `micro_precision`:`0.9362`
+- `micro_recall`:`0.6377`
+- `micro_f1`:`0.7586`
+- `exact_match`:`0.5135`
+- `multi_sentence_recall`:`0.4138`
+- `single_guard_false_alarm_rate`:`0.0`
+
+## 分类别结果
+- `cabin_parallel`: count=15 micro_f1=0.807 exact_match=0.4667
+- `cabin_sequence`: count=9 micro_f1=0.5385 exact_match=0.3333
+- `cs_conditional`: count=3 micro_f1=0.9091 exact_match=0.6667
+- `cs_sequence`: count=2 micro_f1=0.6667 exact_match=0.0
+- `single_guard`: count=8 micro_f1=0.875 exact_match=0.875
+
+## 主要混淆
+- 漏掉 `cabin_sunroof_open`,同时误报 `cabin_window_open`:`1` 次
+- 漏掉 `cabin_pause_music`,同时误报 `cabin_play_music`:`1` 次
+- 漏掉 `cabin_window_open`,同时误报 `cabin_defog_front_on`:`1` 次
+
+## 错误样例
+- 文本:`锁车门,再把后视镜收起来` | 类别:`cabin_sequence` | 期望:`['cabin_lock_doors', 'cabin_mirror_fold']` | 预测:`[]`
+- 文本:`把车门解锁,再把镜子展开` | 类别:`cabin_sequence` | 期望:`['cabin_mirror_unfold', 'cabin_unlock_doors']` | 预测:`[]`
+- 文本:`路线别导了,音乐也停一下` | 类别:`cabin_parallel` | 期望:`['cabin_nav_cancel', 'cabin_pause_music']` | 预测:`[]`
+- 文本:`雨停了,雨刮关掉,再把窗开一点` | 类别:`cabin_sequence` | 期望:`['cabin_window_open', 'cabin_wiper_off']` | 预测:`[]`
+- 文本:`把天窗合上,然后把音乐暂停` | 类别:`cabin_sequence` | 期望:`['cabin_pause_music', 'cabin_sunroof_close']` | 预测:`[]`
+- 文本:`先把音量调大,再切下一首` | 类别:`cabin_parallel` | 期望:`['cabin_next_track', 'cabin_volume_up']` | 预测:`[]`
+- 文本:`静音之后切回上一首` | 类别:`cabin_sequence` | 期望:`['cabin_previous_track', 'cabin_volume_mute']` | 预测:`[]`
+- 文本:`把天窗打开透口气,再开空调` | 类别:`cabin_parallel` | 期望:`['cabin_ac_on', 'cabin_sunroof_open']` | 预测:`['cabin_ac_on', 'cabin_window_open']`
+- 文本:`音乐停一下,然后导航到公司` | 类别:`cabin_sequence` | 期望:`['cabin_nav_to', 'cabin_pause_music']` | 预测:`['cabin_nav_to', 'cabin_play_music']`
+- 文本:`把左前窗降一点` | 类别:`single_guard` | 期望:`['cabin_window_open']` | 预测:`['cabin_defog_front_on']`
+- 文本:`车里闷,给我透个气,再放点轻松的歌` | 类别:`cabin_parallel` | 期望:`['cabin_play_music', 'cabin_window_open']` | 预测:`['cabin_play_music']`
+- 文本:`把空调开了,风别太小,再来首歌` | 类别:`cabin_parallel` | 期望:`['cabin_ac_on', 'cabin_fan_up', 'cabin_play_music']` | 预测:`['cabin_ac_on', 'cabin_play_music']`
+- 文本:`开导航去徐家汇,顺便把风量调大` | 类别:`cabin_parallel` | 期望:`['cabin_fan_up', 'cabin_nav_to']` | 预测:`['cabin_nav_to']`
+- 文本:`温度调到二十三度,风稍微小一点` | 类别:`cabin_parallel` | 期望:`['cabin_fan_down', 'cabin_set_ac']` | 预测:`['cabin_set_ac']`
+- 文本:`帮我看A812302物流,要是太慢就转人工` | 类别:`cs_conditional` | 期望:`['cs_query_logistics', 'cs_transfer_human']` | 预测:`['cs_query_logistics']`
+
+## 结论建议
+- 先看多意图句是否存在系统性漏召回,再看单意图是否被误报成多意图。
+- 若 `single_guard_false_alarm_rate` 偏高,需要先收紧 detector 阈值或补单意图负样本,再考虑进入 NER。
+- 若 `multi_sentence_recall` 不稳定,应继续补条件句、弱连接句和口语化多动作语料。
diff --git a/intelligent_cabin/archive/reports/bert_multi_intent_independent_result.json b/intelligent_cabin/archive/reports/bert_multi_intent_independent_result.json
new file mode 100644
index 0000000..91c1e83
--- /dev/null
+++ b/intelligent_cabin/archive/reports/bert_multi_intent_independent_result.json
@@ -0,0 +1,2582 @@
+{
+ "model_path": "/Users/hwp/Documents/trae_projects/intelligent_cabin/models/local_bert_multi_intent",
+ "test_path": "/Users/hwp/Documents/trae_projects/intelligent_cabin/app/data/bert_intent_multilabel_eval_independent.jsonl",
+ "threshold": 0.45,
+ "top_k": 8,
+ "max_labels": 4,
+ "sample_count": 37,
+ "metrics": {
+ "micro_precision": 0.9362,
+ "micro_recall": 0.6377,
+ "micro_f1": 0.7586,
+ "exact_match": 0.5135,
+ "multi_sentence_recall": 0.4138,
+ "single_guard_false_alarm_rate": 0.0
+ },
+ "per_category": [
+ {
+ "category": "cabin_parallel",
+ "sample_count": 15,
+ "metrics": {
+ "micro_precision": 0.9583,
+ "micro_recall": 0.697,
+ "micro_f1": 0.807,
+ "exact_match": 0.4667,
+ "multi_sentence_recall": 0.4667,
+ "single_guard_false_alarm_rate": 0.0
+ }
+ },
+ {
+ "category": "cabin_sequence",
+ "sample_count": 9,
+ "metrics": {
+ "micro_precision": 0.875,
+ "micro_recall": 0.3889,
+ "micro_f1": 0.5385,
+ "exact_match": 0.3333,
+ "multi_sentence_recall": 0.3333,
+ "single_guard_false_alarm_rate": 0.0
+ }
+ },
+ {
+ "category": "cs_conditional",
+ "sample_count": 3,
+ "metrics": {
+ "micro_precision": 1.0,
+ "micro_recall": 0.8333,
+ "micro_f1": 0.9091,
+ "exact_match": 0.6667,
+ "multi_sentence_recall": 0.6667,
+ "single_guard_false_alarm_rate": 0.0
+ }
+ },
+ {
+ "category": "cs_sequence",
+ "sample_count": 2,
+ "metrics": {
+ "micro_precision": 1.0,
+ "micro_recall": 0.5,
+ "micro_f1": 0.6667,
+ "exact_match": 0.0,
+ "multi_sentence_recall": 0.0,
+ "single_guard_false_alarm_rate": 0.0
+ }
+ },
+ {
+ "category": "single_guard",
+ "sample_count": 8,
+ "metrics": {
+ "micro_precision": 0.875,
+ "micro_recall": 0.875,
+ "micro_f1": 0.875,
+ "exact_match": 0.875,
+ "multi_sentence_recall": 0.0,
+ "single_guard_false_alarm_rate": 0.0
+ }
+ }
+ ],
+ "top_confusions": [
+ {
+ "expected_missing": "cabin_sunroof_open",
+ "wrong_extra": "cabin_window_open",
+ "count": 1
+ },
+ {
+ "expected_missing": "cabin_pause_music",
+ "wrong_extra": "cabin_play_music",
+ "count": 1
+ },
+ {
+ "expected_missing": "cabin_window_open",
+ "wrong_extra": "cabin_defog_front_on",
+ "count": 1
+ }
+ ],
+ "error_examples": [
+ {
+ "text": "锁车门,再把后视镜收起来",
+ "category": "cabin_sequence",
+ "expected_intent_ids": [
+ "cabin_lock_doors",
+ "cabin_mirror_fold"
+ ],
+ "predicted_intent_ids": [],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=0 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_mirror_fold",
+ "score": 0.3966
+ },
+ {
+ "intent_id": "cabin_unlock_doors",
+ "score": 0.0406
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "score": 0.0313
+ },
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.0293
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0276
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0271
+ },
+ {
+ "intent_id": "cabin_lock_doors",
+ "score": 0.0267
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0257
+ }
+ ]
+ },
+ {
+ "text": "把车门解锁,再把镜子展开",
+ "category": "cabin_sequence",
+ "expected_intent_ids": [
+ "cabin_mirror_unfold",
+ "cabin_unlock_doors"
+ ],
+ "predicted_intent_ids": [],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=0 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_unlock_doors",
+ "score": 0.2038
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.1351
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0637
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "score": 0.0486
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.045
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0298
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0261
+ },
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.0202
+ }
+ ]
+ },
+ {
+ "text": "路线别导了,音乐也停一下",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_nav_cancel",
+ "cabin_pause_music"
+ ],
+ "predicted_intent_ids": [],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=0 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.2378
+ },
+ {
+ "intent_id": "cabin_nav_cancel",
+ "score": 0.1729
+ },
+ {
+ "intent_id": "cs_transfer_human",
+ "score": 0.0294
+ },
+ {
+ "intent_id": "cabin_mirror_fold",
+ "score": 0.0288
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0272
+ },
+ {
+ "intent_id": "cabin_volume_down",
+ "score": 0.0238
+ },
+ {
+ "intent_id": "cabin_next_track",
+ "score": 0.0207
+ },
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.0201
+ }
+ ]
+ },
+ {
+ "text": "雨停了,雨刮关掉,再把窗开一点",
+ "category": "cabin_sequence",
+ "expected_intent_ids": [
+ "cabin_window_open",
+ "cabin_wiper_off"
+ ],
+ "predicted_intent_ids": [],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=0 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_wiper_off",
+ "score": 0.2446
+ },
+ {
+ "intent_id": "cabin_wiper_on",
+ "score": 0.176
+ },
+ {
+ "intent_id": "cabin_ac_off",
+ "score": 0.0339
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.0315
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0291
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0278
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0248
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "score": 0.0223
+ }
+ ]
+ },
+ {
+ "text": "把天窗合上,然后把音乐暂停",
+ "category": "cabin_sequence",
+ "expected_intent_ids": [
+ "cabin_pause_music",
+ "cabin_sunroof_close"
+ ],
+ "predicted_intent_ids": [],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=0 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.2731
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0735
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.0337
+ },
+ {
+ "intent_id": "cabin_nav_cancel",
+ "score": 0.027
+ },
+ {
+ "intent_id": "cabin_volume_down",
+ "score": 0.0262
+ },
+ {
+ "intent_id": "cabin_mirror_fold",
+ "score": 0.0259
+ },
+ {
+ "intent_id": "cabin_sunroof_close",
+ "score": 0.0216
+ },
+ {
+ "intent_id": "cabin_previous_track",
+ "score": 0.0208
+ }
+ ]
+ },
+ {
+ "text": "先把音量调大,再切下一首",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_next_track",
+ "cabin_volume_up"
+ ],
+ "predicted_intent_ids": [],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=0 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_next_track",
+ "score": 0.1388
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0573
+ },
+ {
+ "intent_id": "cabin_volume_up",
+ "score": 0.0556
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0266
+ },
+ {
+ "intent_id": "cabin_previous_track",
+ "score": 0.0256
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.0227
+ },
+ {
+ "intent_id": "cabin_lock_doors",
+ "score": 0.021
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.019
+ }
+ ]
+ },
+ {
+ "text": "静音之后切回上一首",
+ "category": "cabin_sequence",
+ "expected_intent_ids": [
+ "cabin_previous_track",
+ "cabin_volume_mute"
+ ],
+ "predicted_intent_ids": [],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=0 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_volume_mute",
+ "score": 0.3221
+ },
+ {
+ "intent_id": "cabin_volume_down",
+ "score": 0.0552
+ },
+ {
+ "intent_id": "cs_transfer_human",
+ "score": 0.031
+ },
+ {
+ "intent_id": "cabin_previous_track",
+ "score": 0.0289
+ },
+ {
+ "intent_id": "cabin_lock_doors",
+ "score": 0.0251
+ },
+ {
+ "intent_id": "cabin_volume_up",
+ "score": 0.0247
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0239
+ },
+ {
+ "intent_id": "cabin_sunroof_close",
+ "score": 0.0213
+ }
+ ]
+ },
+ {
+ "text": "把天窗打开透口气,再开空调",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_ac_on",
+ "cabin_sunroof_open"
+ ],
+ "predicted_intent_ids": [
+ "cabin_ac_on",
+ "cabin_window_open"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=2 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.7857
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.5555
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.0827
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0748
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0513
+ },
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.0492
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0451
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0421
+ }
+ ]
+ },
+ {
+ "text": "音乐停一下,然后导航到公司",
+ "category": "cabin_sequence",
+ "expected_intent_ids": [
+ "cabin_nav_to",
+ "cabin_pause_music"
+ ],
+ "predicted_intent_ids": [
+ "cabin_nav_to",
+ "cabin_play_music"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=2 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.7234
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.5356
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.1071
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.0318
+ },
+ {
+ "intent_id": "cabin_lights_on",
+ "score": 0.0284
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.027
+ },
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.027
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0187
+ }
+ ]
+ },
+ {
+ "text": "把左前窗降一点",
+ "category": "single_guard",
+ "expected_intent_ids": [
+ "cabin_window_open"
+ ],
+ "predicted_intent_ids": [
+ "cabin_defog_front_on"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.5524
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0541
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0379
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0376
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "score": 0.0363
+ },
+ {
+ "intent_id": "cabin_mirror_fold",
+ "score": 0.0264
+ },
+ {
+ "intent_id": "cabin_sunroof_open",
+ "score": 0.0237
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.0236
+ }
+ ]
+ },
+ {
+ "text": "车里闷,给我透个气,再放点轻松的歌",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_play_music",
+ "cabin_window_open"
+ ],
+ "predicted_intent_ids": [
+ "cabin_play_music"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.9513
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.2538
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.2177
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.1694
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0903
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0392
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0387
+ },
+ {
+ "intent_id": "cabin_sunroof_close",
+ "score": 0.0313
+ }
+ ]
+ },
+ {
+ "text": "把空调开了,风别太小,再来首歌",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_ac_on",
+ "cabin_fan_up",
+ "cabin_play_music"
+ ],
+ "predicted_intent_ids": [
+ "cabin_ac_on",
+ "cabin_play_music"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=2 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.7546
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.6847
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.3138
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.2437
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.1289
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.0679
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.0662
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0591
+ }
+ ]
+ },
+ {
+ "text": "开导航去徐家汇,顺便把风量调大",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_fan_up",
+ "cabin_nav_to"
+ ],
+ "predicted_intent_ids": [
+ "cabin_nav_to"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.6332
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.1716
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.1066
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0919
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0398
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.031
+ },
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.0303
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0223
+ }
+ ]
+ },
+ {
+ "text": "温度调到二十三度,风稍微小一点",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_fan_down",
+ "cabin_set_ac"
+ ],
+ "predicted_intent_ids": [
+ "cabin_set_ac"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.4948
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.339
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.1272
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0348
+ },
+ {
+ "intent_id": "cabin_ac_off",
+ "score": 0.0342
+ },
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.0261
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0256
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.0237
+ }
+ ]
+ },
+ {
+ "text": "帮我看A812302物流,要是太慢就转人工",
+ "category": "cs_conditional",
+ "expected_intent_ids": [
+ "cs_query_logistics",
+ "cs_transfer_human"
+ ],
+ "predicted_intent_ids": [
+ "cs_query_logistics"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.7622
+ },
+ {
+ "intent_id": "cs_transfer_human",
+ "score": 0.1558
+ },
+ {
+ "intent_id": "cs_query_order",
+ "score": 0.0761
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.03
+ },
+ {
+ "intent_id": "cs_cancel_order",
+ "score": 0.0223
+ },
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.0217
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "score": 0.0207
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0197
+ }
+ ]
+ }
+ ],
+ "results": [
+ {
+ "text": "车里闷,给我透个气,再放点轻松的歌",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_play_music",
+ "cabin_window_open"
+ ],
+ "predicted_intent_ids": [
+ "cabin_play_music"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.9513
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.2538
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.2177
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.1694
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0903
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0392
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0387
+ },
+ {
+ "intent_id": "cabin_sunroof_close",
+ "score": 0.0313
+ }
+ ]
+ },
+ {
+ "text": "先把空调开起来,顺手把窗户关好",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_ac_on",
+ "cabin_window_close"
+ ],
+ "predicted_intent_ids": [
+ "cabin_ac_on",
+ "cabin_window_close"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=2 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.8218
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.8106
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.1734
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.0839
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0676
+ },
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.0584
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0544
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "score": 0.0507
+ }
+ ]
+ },
+ {
+ "text": "带我去公司,路上播点民谣",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_nav_to",
+ "cabin_play_music"
+ ],
+ "predicted_intent_ids": [
+ "cabin_nav_to",
+ "cabin_play_music"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=2 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.8145
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.8009
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.2145
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.0544
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.0349
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0335
+ },
+ {
+ "intent_id": "cabin_lights_on",
+ "score": 0.0314
+ },
+ {
+ "intent_id": "cabin_next_track",
+ "score": 0.0266
+ }
+ ]
+ },
+ {
+ "text": "有点热,把温度打到二十一度,再来点音乐",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_play_music",
+ "cabin_set_ac"
+ ],
+ "predicted_intent_ids": [
+ "cabin_set_ac",
+ "cabin_play_music"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=2 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.9261
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.7769
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.0962
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.0945
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0821
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0756
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0574
+ },
+ {
+ "intent_id": "cs_query_order",
+ "score": 0.0416
+ }
+ ]
+ },
+ {
+ "text": "导航去虹桥站,然后把空调打开",
+ "category": "cabin_sequence",
+ "expected_intent_ids": [
+ "cabin_ac_on",
+ "cabin_nav_to"
+ ],
+ "predicted_intent_ids": [
+ "cabin_ac_on",
+ "cabin_nav_to"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=2 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.8224
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.6724
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.1293
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.065
+ },
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.0446
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.04
+ },
+ {
+ "intent_id": "cabin_lights_on",
+ "score": 0.0375
+ },
+ {
+ "intent_id": "cabin_volume_up",
+ "score": 0.0371
+ }
+ ]
+ },
+ {
+ "text": "前挡看不清了,开除雾,风也加大一点",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_defog_front_on",
+ "cabin_fan_up"
+ ],
+ "predicted_intent_ids": [
+ "cabin_defog_front_on",
+ "cabin_fan_up"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=2 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.7406
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.7131
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.1019
+ },
+ {
+ "intent_id": "cabin_next_track",
+ "score": 0.0539
+ },
+ {
+ "intent_id": "cabin_mirror_fold",
+ "score": 0.0496
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "score": 0.0479
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0475
+ },
+ {
+ "intent_id": "cs_query_order",
+ "score": 0.0405
+ }
+ ]
+ },
+ {
+ "text": "后面玻璃有雾,先除雾,再把窗关上",
+ "category": "cabin_sequence",
+ "expected_intent_ids": [
+ "cabin_defog_rear_on",
+ "cabin_window_close"
+ ],
+ "predicted_intent_ids": [
+ "cabin_window_close",
+ "cabin_defog_rear_on"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=2 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.8096
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "score": 0.7042
+ },
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.0704
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0592
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.0537
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0485
+ },
+ {
+ "intent_id": "cabin_sunroof_open",
+ "score": 0.0445
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0442
+ }
+ ]
+ },
+ {
+ "text": "把空调开了,风别太小,再来首歌",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_ac_on",
+ "cabin_fan_up",
+ "cabin_play_music"
+ ],
+ "predicted_intent_ids": [
+ "cabin_ac_on",
+ "cabin_play_music"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=2 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.7546
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.6847
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.3138
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.2437
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.1289
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.0679
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.0662
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0591
+ }
+ ]
+ },
+ {
+ "text": "去浦东机场,车里凉一点,顺便放点歌",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_nav_to",
+ "cabin_play_music",
+ "cabin_set_ac"
+ ],
+ "predicted_intent_ids": [
+ "cabin_play_music",
+ "cabin_nav_to",
+ "cabin_set_ac"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=3 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.8592
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.6897
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.4792
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.3405
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.0717
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.0628
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0531
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.0361
+ }
+ ]
+ },
+ {
+ "text": "先开一点窗,别那么闷,再把温度调低",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_set_ac",
+ "cabin_window_open"
+ ],
+ "predicted_intent_ids": [
+ "cabin_set_ac",
+ "cabin_window_open"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=2 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.8216
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.6359
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.2656
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.218
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.1838
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0775
+ },
+ {
+ "intent_id": "cabin_wiper_off",
+ "score": 0.0396
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0372
+ }
+ ]
+ },
+ {
+ "text": "把四个窗都关了,然后播点轻音乐",
+ "category": "cabin_sequence",
+ "expected_intent_ids": [
+ "cabin_play_music",
+ "cabin_window_close"
+ ],
+ "predicted_intent_ids": [
+ "cabin_play_music",
+ "cabin_window_close"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=2 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.8155
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.7628
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.0844
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0655
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0584
+ },
+ {
+ "intent_id": "cabin_sunroof_close",
+ "score": 0.0397
+ },
+ {
+ "intent_id": "cabin_lights_off",
+ "score": 0.0338
+ },
+ {
+ "intent_id": "cabin_sunroof_open",
+ "score": 0.029
+ }
+ ]
+ },
+ {
+ "text": "把天窗打开透口气,再开空调",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_ac_on",
+ "cabin_sunroof_open"
+ ],
+ "predicted_intent_ids": [
+ "cabin_ac_on",
+ "cabin_window_open"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=2 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.7857
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.5555
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.0827
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0748
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0513
+ },
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.0492
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0451
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0421
+ }
+ ]
+ },
+ {
+ "text": "开导航去徐家汇,顺便把风量调大",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_fan_up",
+ "cabin_nav_to"
+ ],
+ "predicted_intent_ids": [
+ "cabin_nav_to"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.6332
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.1716
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.1066
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0919
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0398
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.031
+ },
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.0303
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0223
+ }
+ ]
+ },
+ {
+ "text": "音乐停一下,然后导航到公司",
+ "category": "cabin_sequence",
+ "expected_intent_ids": [
+ "cabin_nav_to",
+ "cabin_pause_music"
+ ],
+ "predicted_intent_ids": [
+ "cabin_nav_to",
+ "cabin_play_music"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=2 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.7234
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.5356
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.1071
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.0318
+ },
+ {
+ "intent_id": "cabin_lights_on",
+ "score": 0.0284
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.027
+ },
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.027
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0187
+ }
+ ]
+ },
+ {
+ "text": "锁车门,再把后视镜收起来",
+ "category": "cabin_sequence",
+ "expected_intent_ids": [
+ "cabin_lock_doors",
+ "cabin_mirror_fold"
+ ],
+ "predicted_intent_ids": [],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=0 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_mirror_fold",
+ "score": 0.3966
+ },
+ {
+ "intent_id": "cabin_unlock_doors",
+ "score": 0.0406
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "score": 0.0313
+ },
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.0293
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0276
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0271
+ },
+ {
+ "intent_id": "cabin_lock_doors",
+ "score": 0.0267
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0257
+ }
+ ]
+ },
+ {
+ "text": "把车门解锁,再把镜子展开",
+ "category": "cabin_sequence",
+ "expected_intent_ids": [
+ "cabin_mirror_unfold",
+ "cabin_unlock_doors"
+ ],
+ "predicted_intent_ids": [],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=0 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_unlock_doors",
+ "score": 0.2038
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.1351
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0637
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "score": 0.0486
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.045
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0298
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0261
+ },
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.0202
+ }
+ ]
+ },
+ {
+ "text": "路线别导了,音乐也停一下",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_nav_cancel",
+ "cabin_pause_music"
+ ],
+ "predicted_intent_ids": [],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=0 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.2378
+ },
+ {
+ "intent_id": "cabin_nav_cancel",
+ "score": 0.1729
+ },
+ {
+ "intent_id": "cs_transfer_human",
+ "score": 0.0294
+ },
+ {
+ "intent_id": "cabin_mirror_fold",
+ "score": 0.0288
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0272
+ },
+ {
+ "intent_id": "cabin_volume_down",
+ "score": 0.0238
+ },
+ {
+ "intent_id": "cabin_next_track",
+ "score": 0.0207
+ },
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.0201
+ }
+ ]
+ },
+ {
+ "text": "温度调到二十三度,风稍微小一点",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_fan_down",
+ "cabin_set_ac"
+ ],
+ "predicted_intent_ids": [
+ "cabin_set_ac"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.4948
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.339
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.1272
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0348
+ },
+ {
+ "intent_id": "cabin_ac_off",
+ "score": 0.0342
+ },
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.0261
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0256
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.0237
+ }
+ ]
+ },
+ {
+ "text": "查下订单A812301,如果还没发货就取消掉",
+ "category": "cs_conditional",
+ "expected_intent_ids": [
+ "cs_cancel_order",
+ "cs_query_order"
+ ],
+ "predicted_intent_ids": [
+ "cs_cancel_order",
+ "cs_query_order"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=2 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cs_cancel_order",
+ "score": 0.7303
+ },
+ {
+ "intent_id": "cs_query_order",
+ "score": 0.6821
+ },
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.0692
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0578
+ },
+ {
+ "intent_id": "cs_transfer_human",
+ "score": 0.0532
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.0392
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0357
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0328
+ }
+ ]
+ },
+ {
+ "text": "帮我看A812302物流,要是太慢就转人工",
+ "category": "cs_conditional",
+ "expected_intent_ids": [
+ "cs_query_logistics",
+ "cs_transfer_human"
+ ],
+ "predicted_intent_ids": [
+ "cs_query_logistics"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.7622
+ },
+ {
+ "intent_id": "cs_transfer_human",
+ "score": 0.1558
+ },
+ {
+ "intent_id": "cs_query_order",
+ "score": 0.0761
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.03
+ },
+ {
+ "intent_id": "cs_cancel_order",
+ "score": 0.0223
+ },
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.0217
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "score": 0.0207
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0197
+ }
+ ]
+ },
+ {
+ "text": "先查一下A812303这单进度,再帮我转人工客服",
+ "category": "cs_sequence",
+ "expected_intent_ids": [
+ "cs_query_order",
+ "cs_transfer_human"
+ ],
+ "predicted_intent_ids": [
+ "cs_transfer_human"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cs_transfer_human",
+ "score": 0.7768
+ },
+ {
+ "intent_id": "cs_query_order",
+ "score": 0.3466
+ },
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.3133
+ },
+ {
+ "intent_id": "cabin_previous_track",
+ "score": 0.0374
+ },
+ {
+ "intent_id": "cabin_sunroof_open",
+ "score": 0.0347
+ },
+ {
+ "intent_id": "cabin_volume_mute",
+ "score": 0.0322
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.0314
+ },
+ {
+ "intent_id": "cabin_nav_cancel",
+ "score": 0.0307
+ }
+ ]
+ },
+ {
+ "text": "订单A812304先查下状态,再看看物流到了哪",
+ "category": "cs_sequence",
+ "expected_intent_ids": [
+ "cs_query_logistics",
+ "cs_query_order"
+ ],
+ "predicted_intent_ids": [
+ "cs_query_logistics"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.7938
+ },
+ {
+ "intent_id": "cs_query_order",
+ "score": 0.1886
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0281
+ },
+ {
+ "intent_id": "cs_cancel_order",
+ "score": 0.0246
+ },
+ {
+ "intent_id": "cs_transfer_human",
+ "score": 0.0244
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.023
+ },
+ {
+ "intent_id": "cabin_unlock_doors",
+ "score": 0.0206
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0195
+ }
+ ]
+ },
+ {
+ "text": "我想先看看A812305有没有发货,没发的话直接撤单",
+ "category": "cs_conditional",
+ "expected_intent_ids": [
+ "cs_cancel_order",
+ "cs_query_order"
+ ],
+ "predicted_intent_ids": [
+ "cs_cancel_order",
+ "cs_query_order"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=2 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cs_cancel_order",
+ "score": 0.624
+ },
+ {
+ "intent_id": "cs_query_order",
+ "score": 0.5238
+ },
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.1303
+ },
+ {
+ "intent_id": "cs_transfer_human",
+ "score": 0.0431
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0387
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.0286
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0285
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0231
+ }
+ ]
+ },
+ {
+ "text": "把空调关掉",
+ "category": "single_guard",
+ "expected_intent_ids": [
+ "cabin_ac_off"
+ ],
+ "predicted_intent_ids": [
+ "cabin_ac_off"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_ac_off",
+ "score": 0.6784
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.0443
+ },
+ {
+ "intent_id": "cabin_seat_heat_off",
+ "score": 0.0441
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0431
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.041
+ },
+ {
+ "intent_id": "cabin_wiper_off",
+ "score": 0.0406
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0329
+ },
+ {
+ "intent_id": "cabin_lights_off",
+ "score": 0.0289
+ }
+ ]
+ },
+ {
+ "text": "帮我开一下前挡除雾",
+ "category": "single_guard",
+ "expected_intent_ids": [
+ "cabin_defog_front_on"
+ ],
+ "predicted_intent_ids": [
+ "cabin_defog_front_on"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.6609
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0538
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0446
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "score": 0.0396
+ },
+ {
+ "intent_id": "cs_query_order",
+ "score": 0.0311
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0266
+ },
+ {
+ "intent_id": "cabin_sunroof_open",
+ "score": 0.0252
+ },
+ {
+ "intent_id": "cabin_mirror_fold",
+ "score": 0.0247
+ }
+ ]
+ },
+ {
+ "text": "风太大了,往小调一点",
+ "category": "single_guard",
+ "expected_intent_ids": [
+ "cabin_fan_down"
+ ],
+ "predicted_intent_ids": [
+ "cabin_fan_down"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.783
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0674
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0432
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "score": 0.0417
+ },
+ {
+ "intent_id": "cabin_volume_down",
+ "score": 0.0393
+ },
+ {
+ "intent_id": "cabin_previous_track",
+ "score": 0.0377
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.0327
+ },
+ {
+ "intent_id": "cabin_ac_off",
+ "score": 0.0324
+ }
+ ]
+ },
+ {
+ "text": "给我导航到龙阳路",
+ "category": "single_guard",
+ "expected_intent_ids": [
+ "cabin_nav_to"
+ ],
+ "predicted_intent_ids": [
+ "cabin_nav_to"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.8217
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0264
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.024
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0214
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.0212
+ },
+ {
+ "intent_id": "cabin_lights_on",
+ "score": 0.0194
+ },
+ {
+ "intent_id": "cabin_volume_up",
+ "score": 0.0173
+ },
+ {
+ "intent_id": "cabin_wiper_on",
+ "score": 0.0141
+ }
+ ]
+ },
+ {
+ "text": "来点轻音乐",
+ "category": "single_guard",
+ "expected_intent_ids": [
+ "cabin_play_music"
+ ],
+ "predicted_intent_ids": [
+ "cabin_play_music"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.8947
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0407
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.0396
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.032
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.0258
+ },
+ {
+ "intent_id": "cabin_next_track",
+ "score": 0.0215
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0206
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.0167
+ }
+ ]
+ },
+ {
+ "text": "把左前窗降一点",
+ "category": "single_guard",
+ "expected_intent_ids": [
+ "cabin_window_open"
+ ],
+ "predicted_intent_ids": [
+ "cabin_defog_front_on"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.5524
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0541
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0379
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0376
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "score": 0.0363
+ },
+ {
+ "intent_id": "cabin_mirror_fold",
+ "score": 0.0264
+ },
+ {
+ "intent_id": "cabin_sunroof_open",
+ "score": 0.0237
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.0236
+ }
+ ]
+ },
+ {
+ "text": "订单A812306不要了,直接取消",
+ "category": "single_guard",
+ "expected_intent_ids": [
+ "cs_cancel_order"
+ ],
+ "predicted_intent_ids": [
+ "cs_cancel_order"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cs_cancel_order",
+ "score": 0.8392
+ },
+ {
+ "intent_id": "cs_query_order",
+ "score": 0.0384
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0307
+ },
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.0273
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0266
+ },
+ {
+ "intent_id": "cabin_seat_heat_off",
+ "score": 0.0249
+ },
+ {
+ "intent_id": "cabin_wiper_off",
+ "score": 0.0207
+ },
+ {
+ "intent_id": "cabin_sunroof_close",
+ "score": 0.0204
+ }
+ ]
+ },
+ {
+ "text": "A812307这个快递到哪了",
+ "category": "single_guard",
+ "expected_intent_ids": [
+ "cs_query_logistics"
+ ],
+ "predicted_intent_ids": [
+ "cs_query_logistics"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.8186
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0285
+ },
+ {
+ "intent_id": "cs_query_order",
+ "score": 0.0284
+ },
+ {
+ "intent_id": "cabin_unlock_doors",
+ "score": 0.0246
+ },
+ {
+ "intent_id": "cs_cancel_order",
+ "score": 0.0223
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0204
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0199
+ },
+ {
+ "intent_id": "cabin_lights_on",
+ "score": 0.018
+ }
+ ]
+ },
+ {
+ "text": "导航去公司,再把空调开开,歌也放起来",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_ac_on",
+ "cabin_nav_to",
+ "cabin_play_music"
+ ],
+ "predicted_intent_ids": [
+ "cabin_ac_on",
+ "cabin_play_music",
+ "cabin_nav_to"
+ ],
+ "detected": true,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=3 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.8751
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.8661
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.6692
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.161
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.1466
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.0777
+ },
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.0622
+ },
+ {
+ "intent_id": "cabin_lights_on",
+ "score": 0.0571
+ }
+ ]
+ },
+ {
+ "text": "把雨刮打开,顺便关下车窗",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_window_close",
+ "cabin_wiper_on"
+ ],
+ "predicted_intent_ids": [
+ "cabin_window_close"
+ ],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=1 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.4675
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.1444
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0462
+ },
+ {
+ "intent_id": "cabin_wiper_on",
+ "score": 0.035
+ },
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.0292
+ },
+ {
+ "intent_id": "cabin_lights_on",
+ "score": 0.0283
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.023
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0226
+ }
+ ]
+ },
+ {
+ "text": "雨停了,雨刮关掉,再把窗开一点",
+ "category": "cabin_sequence",
+ "expected_intent_ids": [
+ "cabin_window_open",
+ "cabin_wiper_off"
+ ],
+ "predicted_intent_ids": [],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=0 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_wiper_off",
+ "score": 0.2446
+ },
+ {
+ "intent_id": "cabin_wiper_on",
+ "score": 0.176
+ },
+ {
+ "intent_id": "cabin_ac_off",
+ "score": 0.0339
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.0315
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0291
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0278
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0248
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "score": 0.0223
+ }
+ ]
+ },
+ {
+ "text": "把天窗合上,然后把音乐暂停",
+ "category": "cabin_sequence",
+ "expected_intent_ids": [
+ "cabin_pause_music",
+ "cabin_sunroof_close"
+ ],
+ "predicted_intent_ids": [],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=0 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.2731
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0735
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.0337
+ },
+ {
+ "intent_id": "cabin_nav_cancel",
+ "score": 0.027
+ },
+ {
+ "intent_id": "cabin_volume_down",
+ "score": 0.0262
+ },
+ {
+ "intent_id": "cabin_mirror_fold",
+ "score": 0.0259
+ },
+ {
+ "intent_id": "cabin_sunroof_close",
+ "score": 0.0216
+ },
+ {
+ "intent_id": "cabin_previous_track",
+ "score": 0.0208
+ }
+ ]
+ },
+ {
+ "text": "先把音量调大,再切下一首",
+ "category": "cabin_parallel",
+ "expected_intent_ids": [
+ "cabin_next_track",
+ "cabin_volume_up"
+ ],
+ "predicted_intent_ids": [],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=0 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_next_track",
+ "score": 0.1388
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0573
+ },
+ {
+ "intent_id": "cabin_volume_up",
+ "score": 0.0556
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0266
+ },
+ {
+ "intent_id": "cabin_previous_track",
+ "score": 0.0256
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.0227
+ },
+ {
+ "intent_id": "cabin_lock_doors",
+ "score": 0.021
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.019
+ }
+ ]
+ },
+ {
+ "text": "静音之后切回上一首",
+ "category": "cabin_sequence",
+ "expected_intent_ids": [
+ "cabin_previous_track",
+ "cabin_volume_mute"
+ ],
+ "predicted_intent_ids": [],
+ "detected": false,
+ "backend_name": "bert-multi-label",
+ "reason": "bert multi-label candidates=0 threshold=0.45",
+ "raw_top_scores": [
+ {
+ "intent_id": "cabin_volume_mute",
+ "score": 0.3221
+ },
+ {
+ "intent_id": "cabin_volume_down",
+ "score": 0.0552
+ },
+ {
+ "intent_id": "cs_transfer_human",
+ "score": 0.031
+ },
+ {
+ "intent_id": "cabin_previous_track",
+ "score": 0.0289
+ },
+ {
+ "intent_id": "cabin_lock_doors",
+ "score": 0.0251
+ },
+ {
+ "intent_id": "cabin_volume_up",
+ "score": 0.0247
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0239
+ },
+ {
+ "intent_id": "cabin_sunroof_close",
+ "score": 0.0213
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/intelligent_cabin/archive/reports/joint_nlu_independent_report.md b/intelligent_cabin/archive/reports/joint_nlu_independent_report.md
new file mode 100644
index 0000000..e5e656c
--- /dev/null
+++ b/intelligent_cabin/archive/reports/joint_nlu_independent_report.md
@@ -0,0 +1,40 @@
+# Joint NLU 独立评测报告
+
+## 概览
+- 模型目录:`/Users/hwp/Documents/trae_projects/intelligent_cabin/models/local_joint_bert_nlu`
+- 评测集:`/Users/hwp/Documents/trae_projects/intelligent_cabin/app/data/joint_nlu_eval_independent.jsonl`
+- 样本数:`43`
+- `intent_accuracy`:`0.9302`
+- `slot_exact_match`:`1.0`
+- `joint_exact_match`:`0.9302`
+- `slot_micro_precision`:`1.0`
+- `slot_micro_recall`:`1.0`
+- `slot_micro_f1`:`1.0`
+
+## 训练摘要
+- 训练集 / 评测集:`337 / 10`
+- 训练阶段 `intent_accuracy`:`1.0`
+- 训练阶段 `slot_exact_match`:`0.8`
+
+## 分类别结果
+- `failure_replay`: count=12 intent_acc=0.75 slot_exact=1.0 joint_exact=0.75
+- `no_slot_control`: count=14 intent_acc=1.0 slot_exact=1.0 joint_exact=1.0
+- `slot_destination`: count=4 intent_acc=1.0 slot_exact=1.0 joint_exact=1.0
+- `slot_music`: count=5 intent_acc=1.0 slot_exact=1.0 joint_exact=1.0
+- `slot_order`: count=4 intent_acc=1.0 slot_exact=1.0 joint_exact=1.0
+- `slot_temperature`: count=4 intent_acc=1.0 slot_exact=1.0 joint_exact=1.0
+
+## 主要意图混淆
+- 期望 `cabin_window_open`,预测成 `None`:`1` 次
+- 期望 `cabin_window_open`,预测成 `cabin_play_music`:`1` 次
+- 期望 `cabin_fan_up`,预测成 `cabin_fan_down`:`1` 次
+
+## 失败样例回放
+- 文本:`把左前窗降一点` | 类别:`failure_replay` | 期望意图:`cabin_window_open` | 预测意图:`None` | 期望槽位:`{}` | 预测槽位:`{}` | 缺失槽位:`[]` | 多出槽位:`[]`
+- 文本:`给我透个气` | 类别:`failure_replay` | 期望意图:`cabin_window_open` | 预测意图:`cabin_play_music` | 期望槽位:`{}` | 预测槽位:`{}` | 缺失槽位:`[]` | 多出槽位:`[]`
+- 文本:`风别太小` | 类别:`failure_replay` | 期望意图:`cabin_fan_up` | 预测意图:`cabin_fan_down` | 期望槽位:`{}` | 预测槽位:`{}` | 缺失槽位:`[]` | 多出槽位:`[]`
+
+## 结论
+- 先看 `failure_replay` 是否仍然错,能直接判断先前多意图失败到底是联合模型本体问题还是上层组合问题。
+- 若 `slot_music` 或 `slot_destination` 仍不稳,优先补 span 标注,不要回退到规则抽槽。
+- 若 `no_slot_control` 很稳但 `failure_replay` 中仍有大量错误,下一步应补长尾控制语义数据,而不是急着上更复杂结构。
diff --git a/intelligent_cabin/archive/reports/joint_nlu_independent_result.json b/intelligent_cabin/archive/reports/joint_nlu_independent_result.json
new file mode 100644
index 0000000..4d9122b
--- /dev/null
+++ b/intelligent_cabin/archive/reports/joint_nlu_independent_result.json
@@ -0,0 +1,1706 @@
+{
+ "model_path": "/Users/hwp/Documents/trae_projects/intelligent_cabin/models/local_joint_bert_nlu",
+ "test_path": "/Users/hwp/Documents/trae_projects/intelligent_cabin/app/data/joint_nlu_eval_independent.jsonl",
+ "sample_count": 43,
+ "metrics": {
+ "intent_accuracy": 0.9302,
+ "slot_exact_match": 1.0,
+ "joint_exact_match": 0.9302,
+ "slot_micro_precision": 1.0,
+ "slot_micro_recall": 1.0,
+ "slot_micro_f1": 1.0
+ },
+ "per_category": [
+ {
+ "category": "failure_replay",
+ "sample_count": 12,
+ "metrics": {
+ "intent_accuracy": 0.75,
+ "slot_exact_match": 1.0,
+ "joint_exact_match": 0.75,
+ "slot_micro_precision": 0.0,
+ "slot_micro_recall": 0.0,
+ "slot_micro_f1": 0.0
+ }
+ },
+ {
+ "category": "no_slot_control",
+ "sample_count": 14,
+ "metrics": {
+ "intent_accuracy": 1.0,
+ "slot_exact_match": 1.0,
+ "joint_exact_match": 1.0,
+ "slot_micro_precision": 0.0,
+ "slot_micro_recall": 0.0,
+ "slot_micro_f1": 0.0
+ }
+ },
+ {
+ "category": "slot_destination",
+ "sample_count": 4,
+ "metrics": {
+ "intent_accuracy": 1.0,
+ "slot_exact_match": 1.0,
+ "joint_exact_match": 1.0,
+ "slot_micro_precision": 1.0,
+ "slot_micro_recall": 1.0,
+ "slot_micro_f1": 1.0
+ }
+ },
+ {
+ "category": "slot_music",
+ "sample_count": 5,
+ "metrics": {
+ "intent_accuracy": 1.0,
+ "slot_exact_match": 1.0,
+ "joint_exact_match": 1.0,
+ "slot_micro_precision": 1.0,
+ "slot_micro_recall": 1.0,
+ "slot_micro_f1": 1.0
+ }
+ },
+ {
+ "category": "slot_order",
+ "sample_count": 4,
+ "metrics": {
+ "intent_accuracy": 1.0,
+ "slot_exact_match": 1.0,
+ "joint_exact_match": 1.0,
+ "slot_micro_precision": 1.0,
+ "slot_micro_recall": 1.0,
+ "slot_micro_f1": 1.0
+ }
+ },
+ {
+ "category": "slot_temperature",
+ "sample_count": 4,
+ "metrics": {
+ "intent_accuracy": 1.0,
+ "slot_exact_match": 1.0,
+ "joint_exact_match": 1.0,
+ "slot_micro_precision": 1.0,
+ "slot_micro_recall": 1.0,
+ "slot_micro_f1": 1.0
+ }
+ }
+ ],
+ "top_confusions": [
+ {
+ "expected": "cabin_window_open",
+ "predicted": "None",
+ "count": 1
+ },
+ {
+ "expected": "cabin_window_open",
+ "predicted": "cabin_play_music",
+ "count": 1
+ },
+ {
+ "expected": "cabin_fan_up",
+ "predicted": "cabin_fan_down",
+ "count": 1
+ }
+ ],
+ "failure_examples": [
+ {
+ "text": "把左前窗降一点",
+ "category": "failure_replay",
+ "expected_intent_id": "cabin_window_open",
+ "predicted_intent_id": "None",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.2812,
+ "intent_ok": false,
+ "slot_exact": true,
+ "joint_ok": false,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.2812
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.1715
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0986
+ }
+ ]
+ },
+ {
+ "text": "给我透个气",
+ "category": "failure_replay",
+ "expected_intent_id": "cabin_window_open",
+ "predicted_intent_id": "cabin_play_music",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9331,
+ "intent_ok": false,
+ "slot_exact": true,
+ "joint_ok": false,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.9331
+ },
+ {
+ "intent_id": "cabin_next_track",
+ "score": 0.0138
+ },
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.0031
+ }
+ ]
+ },
+ {
+ "text": "风别太小",
+ "category": "failure_replay",
+ "expected_intent_id": "cabin_fan_up",
+ "predicted_intent_id": "cabin_fan_down",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.6053,
+ "intent_ok": false,
+ "slot_exact": true,
+ "joint_ok": false,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.6053
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.1549
+ },
+ {
+ "intent_id": "cabin_volume_down",
+ "score": 0.0286
+ }
+ ]
+ }
+ ],
+ "train_summary": {
+ "train_size": 337,
+ "eval_size": 10,
+ "metrics": {
+ "intent_accuracy": 1.0,
+ "slot_token_accuracy": 0.9412,
+ "slot_exact_match": 0.8,
+ "intent_label_count": 34.0,
+ "slot_label_count": 11.0,
+ "train_loss": 0.2596
+ }
+ },
+ "results": [
+ {
+ "text": "把空调调到22度",
+ "category": "slot_temperature",
+ "expected_intent_id": "cabin_set_ac",
+ "predicted_intent_id": "cabin_set_ac",
+ "expected_slots": {
+ "temperature": 22
+ },
+ "predicted_slots": {
+ "temperature": 22
+ },
+ "intent_score": 0.9879,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.9879
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0017
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.0011
+ }
+ ]
+ },
+ {
+ "text": "空调给我调到20度",
+ "category": "slot_temperature",
+ "expected_intent_id": "cabin_set_ac",
+ "predicted_intent_id": "cabin_set_ac",
+ "expected_slots": {
+ "temperature": 20
+ },
+ "predicted_slots": {
+ "temperature": 20
+ },
+ "intent_score": 0.9897,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.9897
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0014
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.0011
+ }
+ ]
+ },
+ {
+ "text": "车里温度设成24度",
+ "category": "slot_temperature",
+ "expected_intent_id": "cabin_set_ac",
+ "predicted_intent_id": "cabin_set_ac",
+ "expected_slots": {
+ "temperature": 24
+ },
+ "predicted_slots": {
+ "temperature": 24
+ },
+ "intent_score": 0.9908,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.9908
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0009
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.0006
+ }
+ ]
+ },
+ {
+ "text": "把温度打到21度",
+ "category": "slot_temperature",
+ "expected_intent_id": "cabin_set_ac",
+ "predicted_intent_id": "cabin_set_ac",
+ "expected_slots": {
+ "temperature": 21
+ },
+ "predicted_slots": {
+ "temperature": 21
+ },
+ "intent_score": 0.9886,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_set_ac",
+ "score": 0.9886
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0011
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0008
+ }
+ ]
+ },
+ {
+ "text": "导航去公司停车场",
+ "category": "slot_destination",
+ "expected_intent_id": "cabin_nav_to",
+ "predicted_intent_id": "cabin_nav_to",
+ "expected_slots": {
+ "destination": "公司停车场"
+ },
+ "predicted_slots": {
+ "destination": "公司停车场"
+ },
+ "intent_score": 0.9858,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.9858
+ },
+ {
+ "intent_id": "cabin_nav_cancel",
+ "score": 0.0018
+ },
+ {
+ "intent_id": "cabin_lights_on",
+ "score": 0.001
+ }
+ ]
+ },
+ {
+ "text": "带我去浦东机场",
+ "category": "slot_destination",
+ "expected_intent_id": "cabin_nav_to",
+ "predicted_intent_id": "cabin_nav_to",
+ "expected_slots": {
+ "destination": "浦东机场"
+ },
+ "predicted_slots": {
+ "destination": "浦东机场"
+ },
+ "intent_score": 0.9893,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.9893
+ },
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.0008
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0007
+ }
+ ]
+ },
+ {
+ "text": "导航到南京东路",
+ "category": "slot_destination",
+ "expected_intent_id": "cabin_nav_to",
+ "predicted_intent_id": "cabin_nav_to",
+ "expected_slots": {
+ "destination": "南京东路"
+ },
+ "predicted_slots": {
+ "destination": "南京东路"
+ },
+ "intent_score": 0.9893,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.9893
+ },
+ {
+ "intent_id": "cabin_nav_cancel",
+ "score": 0.0012
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0007
+ }
+ ]
+ },
+ {
+ "text": "去虹桥机场",
+ "category": "slot_destination",
+ "expected_intent_id": "cabin_nav_to",
+ "predicted_intent_id": "cabin_nav_to",
+ "expected_slots": {
+ "destination": "虹桥机场"
+ },
+ "predicted_slots": {
+ "destination": "虹桥机场"
+ },
+ "intent_score": 0.9862,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.9862
+ },
+ {
+ "intent_id": "cabin_nav_cancel",
+ "score": 0.0012
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0011
+ }
+ ]
+ },
+ {
+ "text": "查一下订单A123456",
+ "category": "slot_order",
+ "expected_intent_id": "cs_query_order",
+ "predicted_intent_id": "cs_query_order",
+ "expected_slots": {
+ "order_id": "A123456"
+ },
+ "predicted_slots": {
+ "order_id": "A123456"
+ },
+ "intent_score": 0.9921,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cs_query_order",
+ "score": 0.9921
+ },
+ {
+ "intent_id": "cs_cancel_order",
+ "score": 0.001
+ },
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.0007
+ }
+ ]
+ },
+ {
+ "text": "帮我看看订单A808001",
+ "category": "slot_order",
+ "expected_intent_id": "cs_query_order",
+ "predicted_intent_id": "cs_query_order",
+ "expected_slots": {
+ "order_id": "A808001"
+ },
+ "predicted_slots": {
+ "order_id": "A808001"
+ },
+ "intent_score": 0.9922,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cs_query_order",
+ "score": 0.9922
+ },
+ {
+ "intent_id": "cs_cancel_order",
+ "score": 0.0013
+ },
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.0007
+ }
+ ]
+ },
+ {
+ "text": "快递A998877到哪了",
+ "category": "slot_order",
+ "expected_intent_id": "cs_query_logistics",
+ "predicted_intent_id": "cs_query_logistics",
+ "expected_slots": {
+ "order_id": "A998877"
+ },
+ "predicted_slots": {
+ "order_id": "A998877"
+ },
+ "intent_score": 0.9931,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.9931
+ },
+ {
+ "intent_id": "cabin_volume_mute",
+ "score": 0.0005
+ },
+ {
+ "intent_id": "cabin_defog_rear_on",
+ "score": 0.0005
+ }
+ ]
+ },
+ {
+ "text": "取消订单A556677",
+ "category": "slot_order",
+ "expected_intent_id": "cs_cancel_order",
+ "predicted_intent_id": "cs_cancel_order",
+ "expected_slots": {
+ "order_id": "A556677"
+ },
+ "predicted_slots": {
+ "order_id": "A556677"
+ },
+ "intent_score": 0.9911,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cs_cancel_order",
+ "score": 0.9911
+ },
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.001
+ },
+ {
+ "intent_id": "cs_query_order",
+ "score": 0.0007
+ }
+ ]
+ },
+ {
+ "text": "来一首青花瓷",
+ "category": "slot_music",
+ "expected_intent_id": "cabin_play_music",
+ "predicted_intent_id": "cabin_play_music",
+ "expected_slots": {
+ "song": "青花瓷"
+ },
+ "predicted_slots": {
+ "song": "青花瓷"
+ },
+ "intent_score": 0.9881,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.9881
+ },
+ {
+ "intent_id": "cabin_next_track",
+ "score": 0.002
+ },
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.0005
+ }
+ ]
+ },
+ {
+ "text": "播放夜的第七章",
+ "category": "slot_music",
+ "expected_intent_id": "cabin_play_music",
+ "predicted_intent_id": "cabin_play_music",
+ "expected_slots": {
+ "song": "夜的第七章"
+ },
+ "predicted_slots": {
+ "song": "夜的第七章"
+ },
+ "intent_score": 0.9828,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.9828
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "score": 0.0015
+ },
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.0012
+ }
+ ]
+ },
+ {
+ "text": "来点爵士",
+ "category": "slot_music",
+ "expected_intent_id": "cabin_play_music",
+ "predicted_intent_id": "cabin_play_music",
+ "expected_slots": {
+ "genre": "爵士"
+ },
+ "predicted_slots": {
+ "genre": "爵士"
+ },
+ "intent_score": 0.9908,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.9908
+ },
+ {
+ "intent_id": "cabin_next_track",
+ "score": 0.0007
+ },
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.0006
+ }
+ ]
+ },
+ {
+ "text": "放点摇滚",
+ "category": "slot_music",
+ "expected_intent_id": "cabin_play_music",
+ "predicted_intent_id": "cabin_play_music",
+ "expected_slots": {
+ "genre": "摇滚"
+ },
+ "predicted_slots": {
+ "genre": "摇滚"
+ },
+ "intent_score": 0.9915,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.9915
+ },
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.0006
+ },
+ {
+ "intent_id": "cabin_next_track",
+ "score": 0.0006
+ }
+ ]
+ },
+ {
+ "text": "给我播点民谣",
+ "category": "slot_music",
+ "expected_intent_id": "cabin_play_music",
+ "predicted_intent_id": "cabin_play_music",
+ "expected_slots": {
+ "genre": "民谣"
+ },
+ "predicted_slots": {
+ "genre": "民谣"
+ },
+ "intent_score": 0.9917,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 1,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.9917
+ },
+ {
+ "intent_id": "cabin_next_track",
+ "score": 0.0007
+ },
+ {
+ "intent_id": "cabin_sunroof_open",
+ "score": 0.0005
+ }
+ ]
+ },
+ {
+ "text": "把车窗打开",
+ "category": "no_slot_control",
+ "expected_intent_id": "cabin_window_open",
+ "predicted_intent_id": "cabin_window_open",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9474,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.9474
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.0074
+ },
+ {
+ "intent_id": "cabin_sunroof_open",
+ "score": 0.0053
+ }
+ ]
+ },
+ {
+ "text": "把车窗关上",
+ "category": "no_slot_control",
+ "expected_intent_id": "cabin_window_close",
+ "predicted_intent_id": "cabin_window_close",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9544,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.9544
+ },
+ {
+ "intent_id": "cabin_lock_doors",
+ "score": 0.0088
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.0065
+ }
+ ]
+ },
+ {
+ "text": "把天窗打开",
+ "category": "no_slot_control",
+ "expected_intent_id": "cabin_sunroof_open",
+ "predicted_intent_id": "cabin_sunroof_open",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9715,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_sunroof_open",
+ "score": 0.9715
+ },
+ {
+ "intent_id": "cabin_sunroof_close",
+ "score": 0.0032
+ },
+ {
+ "intent_id": "cabin_wiper_on",
+ "score": 0.0018
+ }
+ ]
+ },
+ {
+ "text": "把天窗合上",
+ "category": "no_slot_control",
+ "expected_intent_id": "cabin_sunroof_close",
+ "predicted_intent_id": "cabin_sunroof_close",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.7244,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_sunroof_close",
+ "score": 0.7244
+ },
+ {
+ "intent_id": "cabin_sunroof_open",
+ "score": 0.204
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.008
+ }
+ ]
+ },
+ {
+ "text": "把空调打开",
+ "category": "no_slot_control",
+ "expected_intent_id": "cabin_ac_on",
+ "predicted_intent_id": "cabin_ac_on",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9545,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.9545
+ },
+ {
+ "intent_id": "cabin_ac_off",
+ "score": 0.0079
+ },
+ {
+ "intent_id": "cabin_sunroof_open",
+ "score": 0.0029
+ }
+ ]
+ },
+ {
+ "text": "把空调关掉",
+ "category": "no_slot_control",
+ "expected_intent_id": "cabin_ac_off",
+ "predicted_intent_id": "cabin_ac_off",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9673,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_ac_off",
+ "score": 0.9673
+ },
+ {
+ "intent_id": "cabin_ac_on",
+ "score": 0.0035
+ },
+ {
+ "intent_id": "cabin_lights_off",
+ "score": 0.0032
+ }
+ ]
+ },
+ {
+ "text": "把风量调大一点",
+ "category": "no_slot_control",
+ "expected_intent_id": "cabin_fan_up",
+ "predicted_intent_id": "cabin_fan_up",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.5975,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.5975
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.3425
+ },
+ {
+ "intent_id": "cabin_volume_up",
+ "score": 0.0044
+ }
+ ]
+ },
+ {
+ "text": "风太大了,往小调一点",
+ "category": "no_slot_control",
+ "expected_intent_id": "cabin_fan_down",
+ "predicted_intent_id": "cabin_fan_down",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.6892,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.6892
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.2052
+ },
+ {
+ "intent_id": "cabin_volume_down",
+ "score": 0.014
+ }
+ ]
+ },
+ {
+ "text": "把音乐暂停",
+ "category": "no_slot_control",
+ "expected_intent_id": "cabin_pause_music",
+ "predicted_intent_id": "cabin_pause_music",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9672,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.9672
+ },
+ {
+ "intent_id": "cabin_volume_mute",
+ "score": 0.0039
+ },
+ {
+ "intent_id": "cabin_next_track",
+ "score": 0.0025
+ }
+ ]
+ },
+ {
+ "text": "帮我切到下一首",
+ "category": "no_slot_control",
+ "expected_intent_id": "cabin_next_track",
+ "predicted_intent_id": "cabin_next_track",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9667,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_next_track",
+ "score": 0.9667
+ },
+ {
+ "intent_id": "cabin_previous_track",
+ "score": 0.0104
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.0022
+ }
+ ]
+ },
+ {
+ "text": "切回上一首",
+ "category": "no_slot_control",
+ "expected_intent_id": "cabin_previous_track",
+ "predicted_intent_id": "cabin_previous_track",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9694,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_previous_track",
+ "score": 0.9694
+ },
+ {
+ "intent_id": "cabin_next_track",
+ "score": 0.0096
+ },
+ {
+ "intent_id": "cabin_nav_cancel",
+ "score": 0.0018
+ }
+ ]
+ },
+ {
+ "text": "先静音",
+ "category": "no_slot_control",
+ "expected_intent_id": "cabin_volume_mute",
+ "predicted_intent_id": "cabin_volume_mute",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9763,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_volume_mute",
+ "score": 0.9763
+ },
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.0022
+ },
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.0016
+ }
+ ]
+ },
+ {
+ "text": "把音量调大一点",
+ "category": "no_slot_control",
+ "expected_intent_id": "cabin_volume_up",
+ "predicted_intent_id": "cabin_volume_up",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.6867,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_volume_up",
+ "score": 0.6867
+ },
+ {
+ "intent_id": "cabin_volume_down",
+ "score": 0.2533
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.0067
+ }
+ ]
+ },
+ {
+ "text": "把音量调小一点",
+ "category": "no_slot_control",
+ "expected_intent_id": "cabin_volume_down",
+ "predicted_intent_id": "cabin_volume_down",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.6048,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_volume_down",
+ "score": 0.6048
+ },
+ {
+ "intent_id": "cabin_volume_up",
+ "score": 0.327
+ },
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.009
+ }
+ ]
+ },
+ {
+ "text": "把后视镜收起来",
+ "category": "failure_replay",
+ "expected_intent_id": "cabin_mirror_fold",
+ "predicted_intent_id": "cabin_mirror_fold",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9329,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_mirror_fold",
+ "score": 0.9329
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0315
+ },
+ {
+ "intent_id": "cabin_wiper_off",
+ "score": 0.0046
+ }
+ ]
+ },
+ {
+ "text": "把镜子展开",
+ "category": "failure_replay",
+ "expected_intent_id": "cabin_mirror_unfold",
+ "predicted_intent_id": "cabin_mirror_unfold",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.7236,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.7236
+ },
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.025
+ },
+ {
+ "intent_id": "cabin_mirror_fold",
+ "score": 0.0239
+ }
+ ]
+ },
+ {
+ "text": "锁车门",
+ "category": "failure_replay",
+ "expected_intent_id": "cabin_lock_doors",
+ "predicted_intent_id": "cabin_lock_doors",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9345,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_lock_doors",
+ "score": 0.9345
+ },
+ {
+ "intent_id": "cabin_unlock_doors",
+ "score": 0.0328
+ },
+ {
+ "intent_id": "cabin_window_close",
+ "score": 0.0061
+ }
+ ]
+ },
+ {
+ "text": "把车门解锁",
+ "category": "failure_replay",
+ "expected_intent_id": "cabin_unlock_doors",
+ "predicted_intent_id": "cabin_unlock_doors",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9194,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_unlock_doors",
+ "score": 0.9194
+ },
+ {
+ "intent_id": "cabin_lock_doors",
+ "score": 0.0488
+ },
+ {
+ "intent_id": "cabin_seat_heat_off",
+ "score": 0.0032
+ }
+ ]
+ },
+ {
+ "text": "路线别导了",
+ "category": "failure_replay",
+ "expected_intent_id": "cabin_nav_cancel",
+ "predicted_intent_id": "cabin_nav_cancel",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.6978,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_nav_cancel",
+ "score": 0.6978
+ },
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.069
+ },
+ {
+ "intent_id": "cs_cancel_order",
+ "score": 0.0353
+ }
+ ]
+ },
+ {
+ "text": "音乐停一下",
+ "category": "failure_replay",
+ "expected_intent_id": "cabin_pause_music",
+ "predicted_intent_id": "cabin_pause_music",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9077,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.9077
+ },
+ {
+ "intent_id": "cabin_volume_mute",
+ "score": 0.012
+ },
+ {
+ "intent_id": "cabin_lights_off",
+ "score": 0.009
+ }
+ ]
+ },
+ {
+ "text": "雨刮关掉",
+ "category": "failure_replay",
+ "expected_intent_id": "cabin_wiper_off",
+ "predicted_intent_id": "cabin_wiper_off",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9638,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_wiper_off",
+ "score": 0.9638
+ },
+ {
+ "intent_id": "cabin_wiper_on",
+ "score": 0.0044
+ },
+ {
+ "intent_id": "cabin_lights_off",
+ "score": 0.0033
+ }
+ ]
+ },
+ {
+ "text": "把雨刮打开",
+ "category": "failure_replay",
+ "expected_intent_id": "cabin_wiper_on",
+ "predicted_intent_id": "cabin_wiper_on",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9066,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_wiper_on",
+ "score": 0.9066
+ },
+ {
+ "intent_id": "cabin_wiper_off",
+ "score": 0.0363
+ },
+ {
+ "intent_id": "cabin_sunroof_open",
+ "score": 0.0069
+ }
+ ]
+ },
+ {
+ "text": "把左前窗降一点",
+ "category": "failure_replay",
+ "expected_intent_id": "cabin_window_open",
+ "predicted_intent_id": "None",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.2812,
+ "intent_ok": false,
+ "slot_exact": true,
+ "joint_ok": false,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_defog_front_on",
+ "score": 0.2812
+ },
+ {
+ "intent_id": "cabin_window_open",
+ "score": 0.1715
+ },
+ {
+ "intent_id": "cabin_mirror_unfold",
+ "score": 0.0986
+ }
+ ]
+ },
+ {
+ "text": "给我透个气",
+ "category": "failure_replay",
+ "expected_intent_id": "cabin_window_open",
+ "predicted_intent_id": "cabin_play_music",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9331,
+ "intent_ok": false,
+ "slot_exact": true,
+ "joint_ok": false,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_play_music",
+ "score": 0.9331
+ },
+ {
+ "intent_id": "cabin_next_track",
+ "score": 0.0138
+ },
+ {
+ "intent_id": "cabin_pause_music",
+ "score": 0.0031
+ }
+ ]
+ },
+ {
+ "text": "风别太小",
+ "category": "failure_replay",
+ "expected_intent_id": "cabin_fan_up",
+ "predicted_intent_id": "cabin_fan_down",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.6053,
+ "intent_ok": false,
+ "slot_exact": true,
+ "joint_ok": false,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cabin_fan_down",
+ "score": 0.6053
+ },
+ {
+ "intent_id": "cabin_fan_up",
+ "score": 0.1549
+ },
+ {
+ "intent_id": "cabin_volume_down",
+ "score": 0.0286
+ }
+ ]
+ },
+ {
+ "text": "要是太慢就转人工",
+ "category": "failure_replay",
+ "expected_intent_id": "cs_transfer_human",
+ "predicted_intent_id": "cs_transfer_human",
+ "expected_slots": {},
+ "predicted_slots": {},
+ "intent_score": 0.9849,
+ "intent_ok": true,
+ "slot_exact": true,
+ "joint_ok": true,
+ "slot_diff": {
+ "missing_keys": [],
+ "extra_keys": [],
+ "wrong_values": [],
+ "matched_keys": 0,
+ "exact": true
+ },
+ "top_candidates": [
+ {
+ "intent_id": "cs_transfer_human",
+ "score": 0.9849
+ },
+ {
+ "intent_id": "cs_query_logistics",
+ "score": 0.0018
+ },
+ {
+ "intent_id": "cs_cancel_order",
+ "score": 0.0016
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/intelligent_cabin/archive/scripts/eval_joint_bert_multi_intent_independent.py b/intelligent_cabin/archive/scripts/eval_joint_bert_multi_intent_independent.py
new file mode 100644
index 0000000..cac4865
--- /dev/null
+++ b/intelligent_cabin/archive/scripts/eval_joint_bert_multi_intent_independent.py
@@ -0,0 +1,92 @@
+from __future__ import annotations
+
+import argparse
+import json
+import sys
+from collections import Counter
+from pathlib import Path
+
+PROJECT_ROOT = Path(__file__).resolve().parents[1]
+if str(PROJECT_ROOT) not in sys.path:
+ sys.path.insert(0, str(PROJECT_ROOT))
+
+from app.core.bootstrap import build_intent_registry
+from app.services.joint_nlu import JointBertNLU
+
+
+DEFAULT_TEST_PATH = PROJECT_ROOT / "app/data/bert_intent_multilabel_eval_independent.jsonl"
+
+
+def load_cases(path: Path) -> list[dict[str, object]]:
+ rows: list[dict[str, object]] = []
+ for line in path.read_text(encoding="utf-8").splitlines():
+ line = line.strip()
+ if not line:
+ continue
+ payload = json.loads(line)
+ rows.append(payload)
+ return rows
+
+
+def main() -> None:
+ parser = argparse.ArgumentParser(description="Joint BERT 多意图独立评测")
+ parser.add_argument("--model-path", type=str, default="models/local_joint_bert_nlu")
+ parser.add_argument("--test-path", type=str, default=str(DEFAULT_TEST_PATH))
+ args = parser.parse_args()
+
+ registry = build_intent_registry()
+ nlu = JointBertNLU(model_path=args.model_path)
+ cases = load_cases(Path(args.test_path))
+
+ tp = 0
+ fp = 0
+ fn = 0
+ exact = 0
+ failures: list[dict[str, object]] = []
+ category_correct: Counter[str] = Counter()
+ category_total: Counter[str] = Counter()
+
+ for case in cases:
+ text = str(case["text"])
+ expected = sorted({str(item) for item in case.get("expected_intent_ids", [])})
+ predicted = sorted(item.intent_id for item in nlu.predict_multi_intents(text, registry.list(), top_k=8, max_labels=4))
+ expected_set = set(expected)
+ predicted_set = set(predicted)
+ tp += len(expected_set & predicted_set)
+ fp += len(predicted_set - expected_set)
+ fn += len(expected_set - predicted_set)
+ category = str(case.get("category") or "unknown")
+ category_total[category] += 1
+ if expected_set == predicted_set:
+ exact += 1
+ category_correct[category] += 1
+ else:
+ failures.append(
+ {
+ "text": text,
+ "expected_intent_ids": expected,
+ "predicted_intent_ids": predicted,
+ "category": category,
+ }
+ )
+
+ precision = tp / max(tp + fp, 1)
+ recall = tp / max(tp + fn, 1)
+ f1 = (2 * precision * recall / (precision + recall)) if (precision + recall) else 0.0
+ result = {
+ "sample_count": len(cases),
+ "micro_precision": round(precision, 4),
+ "micro_recall": round(recall, 4),
+ "micro_f1": round(f1, 4),
+ "exact_match": round(exact / max(len(cases), 1), 4),
+ "per_category_exact_match": {
+ category: round(category_correct[category] / max(total, 1), 4)
+ for category, total in sorted(category_total.items())
+ },
+ "failures": failures[:20],
+ }
+ print(json.dumps(result, ensure_ascii=False, indent=2))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/intelligent_cabin/archive/scripts/eval_joint_bert_nlu.py b/intelligent_cabin/archive/scripts/eval_joint_bert_nlu.py
new file mode 100644
index 0000000..83878f9
--- /dev/null
+++ b/intelligent_cabin/archive/scripts/eval_joint_bert_nlu.py
@@ -0,0 +1,59 @@
+from __future__ import annotations
+
+import argparse
+import json
+import sys
+from pathlib import Path
+
+PROJECT_ROOT = Path(__file__).resolve().parents[1]
+if str(PROJECT_ROOT) not in sys.path:
+ sys.path.insert(0, str(PROJECT_ROOT))
+
+from app.core.bootstrap import build_intent_registry
+from app.services.joint_nlu import JointBertNLU
+
+
+def main() -> None:
+ parser = argparse.ArgumentParser(description="评测 Joint BERT NLU 单句意图与槽位输出")
+ parser.add_argument("--text", type=str, required=True, help="待评测文本")
+ parser.add_argument("--model-path", type=str, default="models/local_joint_bert_nlu", help="模型目录")
+ args = parser.parse_args()
+
+ registry = build_intent_registry()
+ nlu = JointBertNLU(model_path=args.model_path)
+ result = nlu.predict(args.text, registry.list())
+ print(
+ json.dumps(
+ {
+ "text": args.text,
+ "intent_id": result.intent_id,
+ "intent_score": round(result.intent_score, 4),
+ "candidates": [
+ {"intent_id": item.intent_id, "score": round(item.score, 4)}
+ for item in result.candidates
+ ],
+ "multi_intent_candidates": [
+ {"intent_id": item.intent_id, "score": round(item.score, 4)}
+ for item in result.multi_intent_candidates
+ ],
+ "slots": result.slots,
+ "slot_items": [
+ {
+ "slot_name": item.slot_name,
+ "value": item.value,
+ "start": item.start,
+ "end": item.end,
+ "score": item.score,
+ }
+ for item in result.slot_items
+ ],
+ "error_message": result.error_message,
+ },
+ ensure_ascii=False,
+ indent=2,
+ )
+ )
+
+
+if __name__ == "__main__":
+ main()
diff --git a/intelligent_cabin/archive/scripts/eval_joint_nlu_independent.py b/intelligent_cabin/archive/scripts/eval_joint_nlu_independent.py
new file mode 100644
index 0000000..c17dc12
--- /dev/null
+++ b/intelligent_cabin/archive/scripts/eval_joint_nlu_independent.py
@@ -0,0 +1,275 @@
+from __future__ import annotations
+
+import argparse
+import json
+import sys
+from collections import Counter, defaultdict
+from pathlib import Path
+
+PROJECT_ROOT = Path(__file__).resolve().parents[1]
+if str(PROJECT_ROOT) not in sys.path:
+ sys.path.insert(0, str(PROJECT_ROOT))
+
+from app.core.bootstrap import build_intent_registry
+from app.services.joint_nlu import JointBertNLU
+
+
+TEST_PATH = PROJECT_ROOT / "app/data/joint_nlu_eval_independent.jsonl"
+MODEL_DIR = PROJECT_ROOT / "models/local_joint_bert_nlu"
+REPORT_DIR = PROJECT_ROOT / "reports"
+RESULT_PATH = REPORT_DIR / "joint_nlu_independent_result.json"
+REPORT_PATH = REPORT_DIR / "joint_nlu_independent_report.md"
+TRAIN_SUMMARY_PATH = MODEL_DIR / "train_summary.json"
+
+
+def load_cases(file_path: Path) -> list[dict[str, object]]:
+ cases: list[dict[str, object]] = []
+ for line in file_path.read_text(encoding="utf-8").splitlines():
+ line = line.strip()
+ if not line:
+ continue
+ payload = json.loads(line)
+ expected_intent_id = str(payload.get("expected_intent_id") or payload.get("intent_id") or "").strip()
+ if not expected_intent_id:
+ continue
+ cases.append(
+ {
+ "text": str(payload["text"]),
+ "expected_intent_id": expected_intent_id,
+ "expected_slots": dict(payload.get("expected_slots") or {}),
+ "category": str(payload.get("category") or "unknown"),
+ }
+ )
+ return cases
+
+
+def load_train_summary(file_path: Path) -> dict[str, object]:
+ if not file_path.exists():
+ return {}
+ return json.loads(file_path.read_text(encoding="utf-8"))
+
+
+def compare_slots(expected: dict[str, object], predicted: dict[str, object]) -> dict[str, object]:
+ expected_keys = set(expected)
+ predicted_keys = set(predicted)
+ missing_keys = sorted(expected_keys - predicted_keys)
+ extra_keys = sorted(predicted_keys - expected_keys)
+ wrong_values: list[dict[str, object]] = []
+ matched_keys = 0
+ for key in sorted(expected_keys & predicted_keys):
+ if expected[key] == predicted[key]:
+ matched_keys += 1
+ else:
+ wrong_values.append(
+ {
+ "slot_name": key,
+ "expected": expected[key],
+ "predicted": predicted[key],
+ }
+ )
+ exact = not missing_keys and not extra_keys and not wrong_values
+ return {
+ "missing_keys": missing_keys,
+ "extra_keys": extra_keys,
+ "wrong_values": wrong_values,
+ "matched_keys": matched_keys,
+ "exact": exact,
+ }
+
+
+def compute_metrics(results: list[dict[str, object]]) -> dict[str, float]:
+ total = len(results)
+ intent_correct = sum(1 for item in results if item["intent_ok"])
+ slot_exact = sum(1 for item in results if item["slot_exact"])
+ joint_exact = sum(1 for item in results if item["joint_ok"])
+
+ slot_tp = 0
+ slot_fp = 0
+ slot_fn = 0
+ for item in results:
+ expected = dict(item["expected_slots"])
+ predicted = dict(item["predicted_slots"])
+ expected_keys = set(expected)
+ predicted_keys = set(predicted)
+ slot_tp += sum(1 for key in expected_keys & predicted_keys if expected[key] == predicted[key])
+ slot_fp += len(predicted_keys - expected_keys)
+ slot_fn += len(expected_keys - predicted_keys)
+ slot_fp += sum(1 for key in expected_keys & predicted_keys if expected[key] != predicted[key])
+ slot_fn += sum(1 for key in expected_keys & predicted_keys if expected[key] != predicted[key])
+
+ precision = slot_tp / (slot_tp + slot_fp) if (slot_tp + slot_fp) else 0.0
+ recall = slot_tp / (slot_tp + slot_fn) if (slot_tp + slot_fn) else 0.0
+ slot_f1 = (2 * precision * recall / (precision + recall)) if (precision + recall) else 0.0
+ return {
+ "intent_accuracy": round(intent_correct / total, 4) if total else 0.0,
+ "slot_exact_match": round(slot_exact / total, 4) if total else 0.0,
+ "joint_exact_match": round(joint_exact / total, 4) if total else 0.0,
+ "slot_micro_precision": round(precision, 4),
+ "slot_micro_recall": round(recall, 4),
+ "slot_micro_f1": round(slot_f1, 4),
+ }
+
+
+def summarize_by_category(results: list[dict[str, object]]) -> list[dict[str, object]]:
+ grouped: dict[str, list[dict[str, object]]] = defaultdict(list)
+ for item in results:
+ grouped[str(item["category"])].append(item)
+ summary: list[dict[str, object]] = []
+ for category, items in sorted(grouped.items()):
+ summary.append(
+ {
+ "category": category,
+ "sample_count": len(items),
+ "metrics": compute_metrics(items),
+ }
+ )
+ return summary
+
+
+def collect_top_confusions(results: list[dict[str, object]], limit: int = 12) -> list[dict[str, object]]:
+ counter: Counter[tuple[str, str]] = Counter()
+ for item in results:
+ if item["intent_ok"]:
+ continue
+ counter[(str(item["expected_intent_id"]), str(item["predicted_intent_id"]))] += 1
+ return [
+ {"expected": expected, "predicted": predicted, "count": count}
+ for (expected, predicted), count in counter.most_common(limit)
+ ]
+
+
+def collect_failures(results: list[dict[str, object]], limit: int = 20) -> list[dict[str, object]]:
+ failures = [item for item in results if not item["joint_ok"]]
+
+ def sort_key(item: dict[str, object]) -> tuple[int, int, int]:
+ slot_errors = len(item["slot_diff"]["missing_keys"]) + len(item["slot_diff"]["extra_keys"]) + len(item["slot_diff"]["wrong_values"])
+ return (0 if item["intent_ok"] else 1, slot_errors, len(str(item["text"])))
+
+ return sorted(failures, key=sort_key, reverse=True)[:limit]
+
+
+def main() -> None:
+ parser = argparse.ArgumentParser(description="Joint NLU 独立评测与失败样例回放")
+ parser.add_argument("--test-path", type=str, default=str(TEST_PATH), help="评测集路径")
+ parser.add_argument("--model-path", type=str, default=str(MODEL_DIR), help="Joint NLU 模型路径")
+ parser.add_argument("--result-path", type=str, default=str(RESULT_PATH), help="结构化结果输出路径")
+ parser.add_argument("--report-path", type=str, default=str(REPORT_PATH), help="Markdown 报告输出路径")
+ args = parser.parse_args()
+
+ cases = load_cases(Path(args.test_path))
+ registry = build_intent_registry()
+ nlu = JointBertNLU(model_path=args.model_path)
+ results: list[dict[str, object]] = []
+ for case in cases:
+ prediction = nlu.predict(str(case["text"]), registry.list())
+ predicted_slots = dict(prediction.slots)
+ slot_diff = compare_slots(dict(case["expected_slots"]), predicted_slots)
+ predicted_intent_id = prediction.intent_id or "None"
+ intent_ok = predicted_intent_id == case["expected_intent_id"]
+ joint_ok = intent_ok and bool(slot_diff["exact"])
+ results.append(
+ {
+ "text": case["text"],
+ "category": case["category"],
+ "expected_intent_id": case["expected_intent_id"],
+ "predicted_intent_id": predicted_intent_id,
+ "expected_slots": case["expected_slots"],
+ "predicted_slots": predicted_slots,
+ "intent_score": round(prediction.intent_score, 4),
+ "intent_ok": intent_ok,
+ "slot_exact": bool(slot_diff["exact"]),
+ "joint_ok": joint_ok,
+ "slot_diff": slot_diff,
+ "top_candidates": [
+ {"intent_id": item.intent_id, "score": round(item.score, 4)}
+ for item in prediction.candidates
+ ],
+ }
+ )
+
+ summary = {
+ "model_path": args.model_path,
+ "test_path": args.test_path,
+ "sample_count": len(results),
+ "metrics": compute_metrics(results),
+ "per_category": summarize_by_category(results),
+ "top_confusions": collect_top_confusions(results),
+ "failure_examples": collect_failures(results),
+ "train_summary": load_train_summary(TRAIN_SUMMARY_PATH),
+ "results": results,
+ }
+ REPORT_DIR.mkdir(parents=True, exist_ok=True)
+ Path(args.result_path).write_text(json.dumps(summary, ensure_ascii=False, indent=2), encoding="utf-8")
+ Path(args.report_path).write_text(render_report(summary), encoding="utf-8")
+ print(json.dumps({"sample_count": summary["sample_count"], "metrics": summary["metrics"]}, ensure_ascii=False))
+
+
+def render_report(summary: dict[str, object]) -> str:
+ metrics = summary["metrics"]
+ per_category = summary["per_category"]
+ confusions = summary["top_confusions"]
+ failures = summary["failure_examples"]
+ train_summary = summary.get("train_summary") or {}
+ lines = [
+ "# Joint NLU 独立评测报告",
+ "",
+ "## 概览",
+ f"- 模型目录:`{summary['model_path']}`",
+ f"- 评测集:`{summary['test_path']}`",
+ f"- 样本数:`{summary['sample_count']}`",
+ f"- `intent_accuracy`:`{metrics['intent_accuracy']}`",
+ f"- `slot_exact_match`:`{metrics['slot_exact_match']}`",
+ f"- `joint_exact_match`:`{metrics['joint_exact_match']}`",
+ f"- `slot_micro_precision`:`{metrics['slot_micro_precision']}`",
+ f"- `slot_micro_recall`:`{metrics['slot_micro_recall']}`",
+ f"- `slot_micro_f1`:`{metrics['slot_micro_f1']}`",
+ "",
+ "## 训练摘要",
+ ]
+ if train_summary:
+ lines.extend(
+ [
+ f"- 训练集 / 评测集:`{train_summary.get('train_size', 'unknown')} / {train_summary.get('eval_size', 'unknown')}`",
+ f"- 训练阶段 `intent_accuracy`:`{train_summary.get('metrics', {}).get('intent_accuracy', 'unknown')}`",
+ f"- 训练阶段 `slot_exact_match`:`{train_summary.get('metrics', {}).get('slot_exact_match', 'unknown')}`",
+ "",
+ ]
+ )
+ else:
+ lines.extend(["- 未找到训练摘要。", ""])
+ lines.extend(["## 分类别结果"])
+ for item in per_category:
+ category_metrics = item["metrics"]
+ lines.append(
+ f"- `{item['category']}`: count={item['sample_count']} intent_acc={category_metrics['intent_accuracy']} slot_exact={category_metrics['slot_exact_match']} joint_exact={category_metrics['joint_exact_match']}"
+ )
+ lines.extend(["", "## 主要意图混淆"])
+ if not confusions:
+ lines.append("- 未发现意图混淆。")
+ else:
+ for item in confusions:
+ lines.append(f"- 期望 `{item['expected']}`,预测成 `{item['predicted']}`:`{item['count']}` 次")
+ lines.extend(["", "## 失败样例回放"])
+ if not failures:
+ lines.append("- 无失败样例。")
+ else:
+ for item in failures:
+ slot_diff = item["slot_diff"]
+ lines.append(
+ f"- 文本:`{item['text']}` | 类别:`{item['category']}` | 期望意图:`{item['expected_intent_id']}` | 预测意图:`{item['predicted_intent_id']}` | 期望槽位:`{item['expected_slots']}` | 预测槽位:`{item['predicted_slots']}` | 缺失槽位:`{slot_diff['missing_keys']}` | 多出槽位:`{slot_diff['extra_keys']}`"
+ )
+ lines.extend(
+ [
+ "",
+ "## 结论",
+ "- 先看 `failure_replay` 是否仍然错,能直接判断先前多意图失败到底是联合模型本体问题还是上层组合问题。",
+ "- 若 `slot_music` 或 `slot_destination` 仍不稳,优先补 span 标注,不要回退到规则抽槽。",
+ "- 若 `no_slot_control` 很稳但 `failure_replay` 中仍有大量错误,下一步应补长尾控制语义数据,而不是急着上更复杂结构。",
+ "",
+ ]
+ )
+ return "\n".join(lines)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/intelligent_cabin/archive/scripts/eval_local_bert_intent.py b/intelligent_cabin/archive/scripts/eval_local_bert_intent.py
new file mode 100644
index 0000000..939ad42
--- /dev/null
+++ b/intelligent_cabin/archive/scripts/eval_local_bert_intent.py
@@ -0,0 +1,231 @@
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter, defaultdict
+from pathlib import Path
+import sys
+
+PROJECT_ROOT = Path(__file__).resolve().parents[1]
+if str(PROJECT_ROOT) not in sys.path:
+ sys.path.insert(0, str(PROJECT_ROOT))
+
+from app.core.bootstrap import build_intent_registry
+from app.services.classifier import BertIntentClassifier
+
+
+TEST_PATH = PROJECT_ROOT / "app/data/bert_intent_eval_independent.jsonl"
+MODEL_DIR = PROJECT_ROOT / "models/local_bert_intent"
+REPORT_DIR = PROJECT_ROOT / "reports"
+REPORT_PATH = REPORT_DIR / "bert_local_test_report.md"
+RESULT_PATH = REPORT_DIR / "bert_local_test_result.json"
+BERT_THRESHOLD = 0.0
+TRAIN_SUMMARY_PATH = MODEL_DIR / "train_summary.json"
+
+
+def load_cases(file_path: Path) -> list[dict[str, str]]:
+ cases: list[dict[str, str]] = []
+ for line in file_path.read_text(encoding="utf-8").splitlines():
+ line = line.strip()
+ if not line:
+ continue
+ payload = json.loads(line)
+ expected_label = str(payload.get("expected_label") or payload.get("intent_id") or "").strip()
+ if not expected_label:
+ continue
+ category = str(payload.get("category") or infer_category(expected_label)).strip()
+ cases.append(
+ {
+ "text": str(payload["text"]),
+ "expected_label": expected_label,
+ "category": category,
+ }
+ )
+ return cases
+
+
+def load_train_summary(file_path: Path) -> dict[str, object]:
+ if not file_path.exists():
+ return {}
+ return json.loads(file_path.read_text(encoding="utf-8"))
+
+
+def infer_category(label: str) -> str:
+ if label == "__social__":
+ return "social"
+ if label == "__out_of_scope__":
+ return "out_of_scope"
+ return "business"
+
+
+def resolve_predicted_label(result) -> str:
+ if result.intent is not None:
+ return result.intent.intent_id
+ if result.raw_label:
+ return str(result.raw_label)
+ return "None"
+
+
+def main() -> None:
+ parser = argparse.ArgumentParser(description="本地 BERT 独立评测脚本")
+ parser.add_argument("--test-path", type=str, default=str(TEST_PATH), help="评测集路径")
+ parser.add_argument("--result-path", type=str, default=str(RESULT_PATH), help="结构化评测结果输出路径")
+ parser.add_argument("--report-path", type=str, default=str(REPORT_PATH), help="Markdown 评测报告输出路径")
+ args = parser.parse_args()
+
+ intent_registry = build_intent_registry()
+ intents = intent_registry.list()
+ classifier = BertIntentClassifier(
+ model_path=str(MODEL_DIR),
+ threshold=BERT_THRESHOLD,
+ label_map_path=str(MODEL_DIR / "label_map.json"),
+ fallback=None,
+ top_k=3,
+ )
+ cases = load_cases(Path(args.test_path))
+
+ results: list[dict[str, object]] = []
+ confusion: dict[str, Counter[str]] = defaultdict(Counter)
+ category_confusion: dict[str, Counter[str]] = defaultdict(Counter)
+ correct = 0
+
+ for case in cases:
+ result = classifier.predict(case["text"], intents)
+ predicted = resolve_predicted_label(result)
+ expected = case["expected_label"]
+ ok = predicted == expected
+ if ok:
+ correct += 1
+ confusion[expected][predicted] += 1
+ category_confusion[case["category"]]["correct" if ok else "wrong"] += 1
+ results.append(
+ {
+ "text": case["text"],
+ "category": case["category"],
+ "expected_label": expected,
+ "predicted_label": predicted,
+ "score": round(result.score, 4),
+ "raw_label": result.raw_label,
+ "ok": ok,
+ "top_candidates": [
+ {"intent_id": intent.intent_id, "score": round(score, 4)}
+ for intent, score in (result.candidates or [])
+ ],
+ }
+ )
+
+ accuracy = correct / len(cases) if cases else 0.0
+ train_summary = load_train_summary(TRAIN_SUMMARY_PATH)
+ per_label_stats: list[dict[str, object]] = []
+ for label in sorted({case["expected_label"] for case in cases}):
+ label_cases = [item for item in results if item["expected_label"] == label]
+ label_correct = sum(1 for item in label_cases if item["ok"])
+ per_label_stats.append(
+ {
+ "label": label,
+ "category": infer_category(label),
+ "total": len(label_cases),
+ "correct": label_correct,
+ "accuracy": round(label_correct / len(label_cases), 4) if label_cases else 0.0,
+ }
+ )
+ per_category_stats: list[dict[str, object]] = []
+ for category in sorted({case["category"] for case in cases}):
+ category_cases = [item for item in results if item["category"] == category]
+ category_correct = sum(1 for item in category_cases if item["ok"])
+ per_category_stats.append(
+ {
+ "category": category,
+ "total": len(category_cases),
+ "correct": category_correct,
+ "accuracy": round(category_correct / len(category_cases), 4) if category_cases else 0.0,
+ }
+ )
+
+ errors = [item for item in results if not item["ok"]]
+ summary = {
+ "model_dir": str(MODEL_DIR),
+ "threshold": BERT_THRESHOLD,
+ "test_path": str(args.test_path),
+ "test_case_count": len(cases),
+ "accuracy": round(accuracy, 4),
+ "train_summary": train_summary,
+ "per_category": per_category_stats,
+ "per_label": per_label_stats,
+ "errors": errors,
+ "confusion": {key: dict(value) for key, value in confusion.items()},
+ }
+
+ REPORT_DIR.mkdir(parents=True, exist_ok=True)
+ Path(args.result_path).write_text(json.dumps(summary, ensure_ascii=False, indent=2), encoding="utf-8")
+ Path(args.report_path).write_text(render_report(summary), encoding="utf-8")
+ print(json.dumps({"accuracy": summary["accuracy"], "test_case_count": len(cases), "error_count": len(errors)}, ensure_ascii=False))
+
+
+def render_report(summary: dict[str, object]) -> str:
+ per_category = summary["per_category"]
+ per_label = summary["per_label"]
+ errors = summary["errors"]
+ train_summary = summary.get("train_summary") or {}
+ lines = [
+ "# 本地 BERT 意图识别测试报告",
+ "",
+ "## 概览",
+ f"- 模型目录:`{summary['model_dir']}`",
+ f"- 评测集:`{summary['test_path']}`",
+ f"- 评测阈值:`{summary['threshold']}`",
+ f"- 测试样本数:`{summary['test_case_count']}`",
+ f"- 总体准确率:`{summary['accuracy']}`",
+ "",
+ "## 训练摘要",
+ ]
+ if train_summary:
+ lines.extend(
+ [
+ f"- 基座模型:`{train_summary.get('base_model', 'unknown')}`",
+ f"- 训练集 / 验证集:`{train_summary.get('train_size', 'unknown')} / {train_summary.get('dev_size', 'unknown')}`",
+ f"- 最佳验证准确率:`{train_summary.get('best_dev_accuracy', 'unknown')}`",
+ f"- 训练设备:`{train_summary.get('device', 'unknown')}`",
+ "",
+ ]
+ )
+ else:
+ lines.extend(["- 未找到训练摘要。", ""])
+
+ lines.extend(
+ [
+ "## 分类别结果",
+ ]
+ )
+ for item in per_category:
+ lines.append(
+ f"- `{item['category']}`: {item['correct']}/{item['total']} = {item['accuracy']}"
+ )
+ lines.extend(["", "## 分标签结果"])
+ for item in per_label:
+ lines.append(
+ f"- `{item['label']}` ({item['category']}): {item['correct']}/{item['total']} = {item['accuracy']}"
+ )
+ lines.extend(["", "## 错误样例"])
+ if not errors:
+ lines.append("- 无错误样例。")
+ else:
+ for item in errors[:10]:
+ lines.append(
+ f"- 文本:`{item['text']}` | 类别:`{item['category']}` | 期望:`{item['expected_label']}` | 预测:`{item['predicted_label']}` | 分数:`{item['score']}`"
+ )
+ lines.extend(
+ [
+ "",
+ "## 结论",
+ "- 当前本地 MacBERT 已具备较强的业务意图识别能力,可作为本地快链路分类器。",
+ "- 误判主要集中在方向相反或语义接近的控制指令,下一步应补充对抗样本和真实口语表达。",
+ "- 上线前建议继续补充 ASR 错字、多轮短句和多意图子句级样本。",
+ "",
+ ]
+ )
+ return "\n".join(lines)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/intelligent_cabin/archive/scripts/eval_local_bert_multi_intent.py b/intelligent_cabin/archive/scripts/eval_local_bert_multi_intent.py
new file mode 100644
index 0000000..0598986
--- /dev/null
+++ b/intelligent_cabin/archive/scripts/eval_local_bert_multi_intent.py
@@ -0,0 +1,123 @@
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+import sys
+
+import torch
+from torch.utils.data import DataLoader
+from transformers import AutoModelForSequenceClassification, AutoTokenizer
+
+PROJECT_ROOT = Path(__file__).resolve().parents[1]
+if str(PROJECT_ROOT) not in sys.path:
+ sys.path.insert(0, str(PROJECT_ROOT))
+
+from scripts.train_local_bert_multi_intent import (
+ BATCH_SIZE,
+ OUTPUT_DIR,
+ TOP_K,
+ THRESHOLD,
+ MultiLabelIntentDataset,
+ load_all_samples,
+ split_samples,
+ set_seed,
+)
+
+
+def parse_args() -> argparse.Namespace:
+ parser = argparse.ArgumentParser(description="Evaluate local BERT multi-intent detector.")
+ parser.add_argument("--model-path", default=str(OUTPUT_DIR), help="Path to trained multi-intent model.")
+ parser.add_argument("--threshold", type=float, default=THRESHOLD, help="Probability threshold.")
+ parser.add_argument("--top-k", type=int, default=TOP_K, help="Top-k for recall@k.")
+ parser.add_argument(
+ "--dataset",
+ choices=("dev", "all"),
+ default="dev",
+ help="Evaluate on the held-out dev split or all combined samples.",
+ )
+ return parser.parse_args()
+
+
+def compute_metrics(
+ probabilities: list[list[float]],
+ targets: list[list[float]],
+ threshold: float,
+ top_k: int,
+) -> dict[str, float]:
+ true_positive = 0
+ false_positive = 0
+ false_negative = 0
+ exact_match = 0
+ recall_at_k_total = 0.0
+ total = len(probabilities)
+ for scores, target in zip(probabilities, targets):
+ predicted = {index for index, score in enumerate(scores) if score >= threshold}
+ expected = {index for index, value in enumerate(target) if value >= 0.5}
+ if predicted == expected:
+ exact_match += 1
+ true_positive += len(predicted & expected)
+ false_positive += len(predicted - expected)
+ false_negative += len(expected - predicted)
+ top_indices = sorted(range(len(scores)), key=lambda index: scores[index], reverse=True)[:top_k]
+ if expected:
+ recall_at_k_total += len(set(top_indices) & expected) / len(expected)
+ precision = true_positive / (true_positive + false_positive) if (true_positive + false_positive) else 0.0
+ recall = true_positive / (true_positive + false_negative) if (true_positive + false_negative) else 0.0
+ micro_f1 = (2 * precision * recall / (precision + recall)) if (precision + recall) else 0.0
+ return {
+ "micro_precision": round(precision, 4),
+ "micro_recall": round(recall, 4),
+ "micro_f1": round(micro_f1, 4),
+ "exact_match": round(exact_match / total, 4) if total else 0.0,
+ "recall_at_k": round(recall_at_k_total / total, 4) if total else 0.0,
+ }
+
+
+def main() -> None:
+ args = parse_args()
+ set_seed(42)
+ samples = load_all_samples()
+ _, dev_samples = split_samples(samples)
+ eval_samples = samples if args.dataset == "all" else dev_samples
+ model_path = Path(args.model_path)
+ if not model_path.exists():
+ raise FileNotFoundError(f"model path not found: {model_path}")
+
+ model = AutoModelForSequenceClassification.from_pretrained(model_path)
+ tokenizer = AutoTokenizer.from_pretrained(model_path)
+ label_to_id = {str(label): int(index) for label, index in (model.config.label2id or {}).items()}
+ if not label_to_id:
+ raise RuntimeError("label2id is missing from model config")
+
+ dataset = MultiLabelIntentDataset(eval_samples, tokenizer, label_to_id)
+ loader = DataLoader(dataset, batch_size=BATCH_SIZE)
+ device = torch.device("mps" if torch.backends.mps.is_available() else "cpu")
+ model.to(device)
+ model.eval()
+
+ probabilities: list[list[float]] = []
+ targets: list[list[float]] = []
+ with torch.no_grad():
+ for batch in loader:
+ input_ids = batch["input_ids"].to(device)
+ attention_mask = batch["attention_mask"].to(device)
+ labels = batch["labels"].to(device)
+ outputs = model(input_ids=input_ids, attention_mask=attention_mask)
+ probabilities.extend(torch.sigmoid(outputs.logits).detach().cpu().tolist())
+ targets.extend(labels.detach().cpu().tolist())
+
+ metrics = compute_metrics(probabilities, targets, threshold=args.threshold, top_k=args.top_k)
+ result = {
+ "model_path": str(model_path),
+ "dataset": args.dataset,
+ "sample_size": len(eval_samples),
+ "threshold": args.threshold,
+ "top_k": args.top_k,
+ "metrics": metrics,
+ }
+ print(json.dumps(result, ensure_ascii=False, indent=2))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/intelligent_cabin/archive/scripts/eval_local_bert_multi_intent_independent.py b/intelligent_cabin/archive/scripts/eval_local_bert_multi_intent_independent.py
new file mode 100644
index 0000000..604f1b3
--- /dev/null
+++ b/intelligent_cabin/archive/scripts/eval_local_bert_multi_intent_independent.py
@@ -0,0 +1,247 @@
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter, defaultdict
+from pathlib import Path
+import sys
+
+
+PROJECT_ROOT = Path(__file__).resolve().parents[1]
+if str(PROJECT_ROOT) not in sys.path:
+ sys.path.insert(0, str(PROJECT_ROOT))
+
+from app.core.bootstrap import build_intent_registry
+from app.services.multi_intent_detector import BertMultiIntentDetector
+
+
+TEST_PATH = PROJECT_ROOT / "app/data/bert_intent_multilabel_eval_independent.jsonl"
+MODEL_DIR = PROJECT_ROOT / "models/local_bert_multi_intent"
+REPORT_DIR = PROJECT_ROOT / "reports"
+RESULT_PATH = REPORT_DIR / "bert_multi_intent_independent_result.json"
+REPORT_PATH = REPORT_DIR / "bert_multi_intent_independent_report.md"
+THRESHOLD = 0.45
+TOP_K = 8
+MAX_LABELS = 4
+
+
+def load_cases(file_path: Path) -> list[dict[str, object]]:
+ cases: list[dict[str, object]] = []
+ for line in file_path.read_text(encoding="utf-8").splitlines():
+ line = line.strip()
+ if not line:
+ continue
+ payload = json.loads(line)
+ expected = sorted({str(item).strip() for item in payload.get("expected_intent_ids") or [] if str(item).strip()})
+ if not expected:
+ continue
+ cases.append(
+ {
+ "text": str(payload["text"]),
+ "expected_intent_ids": expected,
+ "category": str(payload.get("category") or "unknown"),
+ }
+ )
+ return cases
+
+
+def compute_set_metrics(results: list[dict[str, object]]) -> dict[str, float]:
+ true_positive = 0
+ false_positive = 0
+ false_negative = 0
+ exact_match = 0
+ multi_recall_hit = 0
+ single_false_alarm = 0
+ total = len(results)
+ single_guard_total = 0
+ for item in results:
+ expected = set(item["expected_intent_ids"])
+ predicted = set(item["predicted_intent_ids"])
+ if expected == predicted:
+ exact_match += 1
+ true_positive += len(expected & predicted)
+ false_positive += len(predicted - expected)
+ false_negative += len(expected - predicted)
+ if len(expected) >= 2 and expected.issubset(predicted):
+ multi_recall_hit += 1
+ if len(expected) == 1:
+ single_guard_total += 1
+ if len(predicted) > 1:
+ single_false_alarm += 1
+ precision = true_positive / (true_positive + false_positive) if (true_positive + false_positive) else 0.0
+ recall = true_positive / (true_positive + false_negative) if (true_positive + false_negative) else 0.0
+ micro_f1 = (2 * precision * recall / (precision + recall)) if (precision + recall) else 0.0
+ multi_total = sum(1 for item in results if len(item["expected_intent_ids"]) >= 2)
+ return {
+ "micro_precision": round(precision, 4),
+ "micro_recall": round(recall, 4),
+ "micro_f1": round(micro_f1, 4),
+ "exact_match": round(exact_match / total, 4) if total else 0.0,
+ "multi_sentence_recall": round(multi_recall_hit / multi_total, 4) if multi_total else 0.0,
+ "single_guard_false_alarm_rate": round(single_false_alarm / single_guard_total, 4) if single_guard_total else 0.0,
+ }
+
+
+def summarize_by_category(results: list[dict[str, object]]) -> list[dict[str, object]]:
+ grouped: dict[str, list[dict[str, object]]] = defaultdict(list)
+ for item in results:
+ grouped[str(item["category"])].append(item)
+ summary: list[dict[str, object]] = []
+ for category, items in sorted(grouped.items()):
+ summary.append(
+ {
+ "category": category,
+ "sample_count": len(items),
+ "metrics": compute_set_metrics(items),
+ }
+ )
+ return summary
+
+
+def collect_error_examples(results: list[dict[str, object]], limit: int = 15) -> list[dict[str, object]]:
+ errors = [item for item in results if set(item["expected_intent_ids"]) != set(item["predicted_intent_ids"])]
+ def sort_key(item: dict[str, object]) -> tuple[int, int]:
+ expected = set(item["expected_intent_ids"])
+ predicted = set(item["predicted_intent_ids"])
+ miss = len(expected - predicted)
+ extra = len(predicted - expected)
+ return (miss + extra, miss)
+ return sorted(errors, key=sort_key, reverse=True)[:limit]
+
+
+def top_confusions(results: list[dict[str, object]], limit: int = 12) -> list[dict[str, object]]:
+ counter: Counter[tuple[str, str]] = Counter()
+ for item in results:
+ expected = set(item["expected_intent_ids"])
+ predicted = set(item["predicted_intent_ids"])
+ for miss in sorted(expected - predicted):
+ for extra in sorted(predicted - expected):
+ counter[(miss, extra)] += 1
+ return [
+ {"expected_missing": pair[0], "wrong_extra": pair[1], "count": count}
+ for pair, count in counter.most_common(limit)
+ ]
+
+
+def main() -> None:
+ parser = argparse.ArgumentParser(description="本地多标签 detector 独立评测脚本")
+ parser.add_argument("--test-path", type=str, default=str(TEST_PATH), help="独立评测集路径")
+ parser.add_argument("--model-path", type=str, default=str(MODEL_DIR), help="多标签模型路径")
+ parser.add_argument("--threshold", type=float, default=THRESHOLD, help="检测阈值")
+ parser.add_argument("--top-k", type=int, default=TOP_K, help="输出 top-k 原始分数")
+ parser.add_argument("--max-labels", type=int, default=MAX_LABELS, help="最多返回标签数")
+ parser.add_argument("--result-path", type=str, default=str(RESULT_PATH), help="结构化结果输出路径")
+ parser.add_argument("--report-path", type=str, default=str(REPORT_PATH), help="Markdown 报告输出路径")
+ args = parser.parse_args()
+
+ cases = load_cases(Path(args.test_path))
+ intents = build_intent_registry().list()
+ detector = BertMultiIntentDetector(
+ model_path=args.model_path,
+ threshold=args.threshold,
+ top_k=args.top_k,
+ max_labels=args.max_labels,
+ )
+
+ results: list[dict[str, object]] = []
+ for case in cases:
+ detection = detector.detect(str(case["text"]), intents)
+ predicted = [candidate.intent_id for candidate in detection.candidates]
+ raw_top = [
+ {
+ "intent_id": str(item.get("intent_id") or item.get("label") or ""),
+ "score": round(float(item.get("score", 0.0)), 4),
+ }
+ for item in detection.raw_scores
+ ]
+ results.append(
+ {
+ "text": case["text"],
+ "category": case["category"],
+ "expected_intent_ids": case["expected_intent_ids"],
+ "predicted_intent_ids": predicted,
+ "detected": detection.detected,
+ "backend_name": detection.backend_name,
+ "reason": detection.reason,
+ "raw_top_scores": raw_top,
+ }
+ )
+
+ summary = {
+ "model_path": args.model_path,
+ "test_path": args.test_path,
+ "threshold": args.threshold,
+ "top_k": args.top_k,
+ "max_labels": args.max_labels,
+ "sample_count": len(results),
+ "metrics": compute_set_metrics(results),
+ "per_category": summarize_by_category(results),
+ "top_confusions": top_confusions(results),
+ "error_examples": collect_error_examples(results),
+ "results": results,
+ }
+
+ REPORT_DIR.mkdir(parents=True, exist_ok=True)
+ Path(args.result_path).write_text(json.dumps(summary, ensure_ascii=False, indent=2), encoding="utf-8")
+ Path(args.report_path).write_text(render_report(summary), encoding="utf-8")
+ print(json.dumps({"sample_count": len(results), "metrics": summary["metrics"]}, ensure_ascii=False))
+
+
+def render_report(summary: dict[str, object]) -> str:
+ metrics = summary["metrics"]
+ per_category = summary["per_category"]
+ confusions = summary["top_confusions"]
+ errors = summary["error_examples"]
+ lines = [
+ "# 本地多标签 Detector 独立评测报告",
+ "",
+ "## 概览",
+ f"- 模型目录:`{summary['model_path']}`",
+ f"- 评测集:`{summary['test_path']}`",
+ f"- 样本数:`{summary['sample_count']}`",
+ f"- 阈值 / top_k / max_labels:`{summary['threshold']} / {summary['top_k']} / {summary['max_labels']}`",
+ f"- `micro_precision`:`{metrics['micro_precision']}`",
+ f"- `micro_recall`:`{metrics['micro_recall']}`",
+ f"- `micro_f1`:`{metrics['micro_f1']}`",
+ f"- `exact_match`:`{metrics['exact_match']}`",
+ f"- `multi_sentence_recall`:`{metrics['multi_sentence_recall']}`",
+ f"- `single_guard_false_alarm_rate`:`{metrics['single_guard_false_alarm_rate']}`",
+ "",
+ "## 分类别结果",
+ ]
+ for item in per_category:
+ category_metrics = item["metrics"]
+ lines.append(
+ f"- `{item['category']}`: count={item['sample_count']} micro_f1={category_metrics['micro_f1']} exact_match={category_metrics['exact_match']}"
+ )
+ lines.extend(["", "## 主要混淆"])
+ if not confusions:
+ lines.append("- 未发现明显混淆对。")
+ else:
+ for item in confusions:
+ lines.append(
+ f"- 漏掉 `{item['expected_missing']}`,同时误报 `{item['wrong_extra']}`:`{item['count']}` 次"
+ )
+ lines.extend(["", "## 错误样例"])
+ if not errors:
+ lines.append("- 无错误样例。")
+ else:
+ for item in errors:
+ lines.append(
+ f"- 文本:`{item['text']}` | 类别:`{item['category']}` | 期望:`{item['expected_intent_ids']}` | 预测:`{item['predicted_intent_ids']}`"
+ )
+ lines.extend(
+ [
+ "",
+ "## 结论建议",
+ "- 先看多意图句是否存在系统性漏召回,再看单意图是否被误报成多意图。",
+ "- 若 `single_guard_false_alarm_rate` 偏高,需要先收紧 detector 阈值或补单意图负样本,再考虑进入 NER。",
+ "- 若 `multi_sentence_recall` 不稳定,应继续补条件句、弱连接句和口语化多动作语料。",
+ "",
+ ]
+ )
+ return "\n".join(lines)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/intelligent_cabin/archive/scripts/test_local_bert_intent.py b/intelligent_cabin/archive/scripts/test_local_bert_intent.py
new file mode 100644
index 0000000..46adcbd
--- /dev/null
+++ b/intelligent_cabin/archive/scripts/test_local_bert_intent.py
@@ -0,0 +1,97 @@
+from __future__ import annotations
+
+import argparse
+import json
+import sys
+from pathlib import Path
+
+PROJECT_ROOT = Path(__file__).resolve().parents[1]
+if str(PROJECT_ROOT) not in sys.path:
+ sys.path.insert(0, str(PROJECT_ROOT))
+
+from app.core.config import settings
+from app.core.bootstrap import build_intent_registry
+from app.services.classifier import BertIntentClassifier
+from app.services.router import build_matcher_pipeline
+
+
+DEFAULT_MODEL_DIR = PROJECT_ROOT / "models/local_bert_intent"
+DEFAULT_LABEL_MAP = DEFAULT_MODEL_DIR / "label_map.json"
+
+
+def build_classifier(threshold: float, top_k: int) -> BertIntentClassifier:
+ return BertIntentClassifier(
+ model_path=str(DEFAULT_MODEL_DIR),
+ threshold=threshold,
+ label_map_path=str(DEFAULT_LABEL_MAP),
+ fallback=None,
+ top_k=top_k,
+ )
+
+
+def predict_once(text: str, threshold: float, top_k: int) -> dict[str, object]:
+ classifier = build_classifier(threshold=threshold, top_k=top_k)
+ registry = build_intent_registry()
+ intents = registry.list()
+ result = classifier.predict(text, intents)
+ matcher = build_matcher_pipeline(
+ registry,
+ ["classifier"],
+ classifier=classifier,
+ route_to_cloud_threshold=settings.local_route_to_cloud_threshold,
+ clarify_margin_threshold=settings.local_clarify_margin_threshold,
+ )
+ route_result = matcher.match(text)
+ fusion_stage = next((stage for stage in reversed(route_result.debug.stages) if stage.stage == "fusion"), None)
+ return {
+ "text": text,
+ "predicted_intent": result.intent.intent_id if result.intent is not None else None,
+ "score": round(result.score, 4),
+ "model_name": result.model_name,
+ "backend": result.backend_name,
+ "raw_label": result.raw_label,
+ "fallback_reason": result.fallback_reason,
+ "error_message": result.error_message,
+ "decision": route_result.debug.decision,
+ "decision_reason": route_result.debug.decision_reason,
+ "confidence_grade": route_result.debug.confidence_grade,
+ "unknown_detected": route_result.debug.unknown_detected,
+ "fusion_top_score": round(fusion_stage.score, 4) if fusion_stage is not None else None,
+ "top_candidates": [
+ {"intent_id": intent.intent_id, "score": round(score, 4)}
+ for intent, score in (result.candidates or [])
+ ],
+ }
+
+
+def interactive_loop(threshold: float, top_k: int) -> None:
+ print("本地 BERT 意图测试已启动,输入一句话直接查看预测结果,输入 exit 退出。")
+ while True:
+ try:
+ text = input("\n请输入问题> ").strip()
+ except EOFError:
+ print()
+ break
+ if not text:
+ continue
+ if text.lower() in {"exit", "quit", "q"}:
+ break
+ result = predict_once(text, threshold=threshold, top_k=top_k)
+ print(json.dumps(result, ensure_ascii=False, indent=2))
+
+
+def main() -> None:
+ parser = argparse.ArgumentParser(description="本地 BERT 意图识别测试脚本")
+ parser.add_argument("--text", type=str, default="", help="单次测试文本")
+ parser.add_argument("--threshold", type=float, default=0.0, help="BERT 置信度阈值")
+ parser.add_argument("--top-k", type=int, default=3, help="返回候选数量")
+ args = parser.parse_args()
+
+ if args.text.strip():
+ print(json.dumps(predict_once(args.text.strip(), threshold=args.threshold, top_k=args.top_k), ensure_ascii=False, indent=2))
+ return
+ interactive_loop(threshold=args.threshold, top_k=args.top_k)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/intelligent_cabin/archive/scripts/train_joint_bert_nlu.py b/intelligent_cabin/archive/scripts/train_joint_bert_nlu.py
new file mode 100644
index 0000000..d85c558
--- /dev/null
+++ b/intelligent_cabin/archive/scripts/train_joint_bert_nlu.py
@@ -0,0 +1,500 @@
+from __future__ import annotations
+
+import json
+import random
+import re
+import sys
+from dataclasses import dataclass
+from pathlib import Path
+
+import torch
+from torch.utils.data import DataLoader, Dataset
+from transformers import AutoTokenizer
+import yaml
+
+PROJECT_ROOT = Path(__file__).resolve().parents[1]
+if str(PROJECT_ROOT) not in sys.path:
+ sys.path.insert(0, str(PROJECT_ROOT))
+
+from app.services.joint_nlu import JointBertForNLU
+
+
+TRAIN_PATH = PROJECT_ROOT / "app/data/bert_intent_train.jsonl"
+MULTI_TRAIN_PATH = PROJECT_ROOT / "app/data/bert_intent_multilabel_train.jsonl"
+SEED_PATH = PROJECT_ROOT / "app/data/joint_nlu_seed.jsonl"
+EVAL_PATH = PROJECT_ROOT / "app/data/joint_nlu_eval.jsonl"
+MULTI_EVAL_PATH = PROJECT_ROOT / "app/data/joint_nlu_multilabel_eval.jsonl"
+DOMAIN_PATH = PROJECT_ROOT / "config/domain.yml"
+OUTPUT_DIR = PROJECT_ROOT / "models/local_joint_bert_nlu"
+DEFAULT_BASE_MODEL = "hfl/chinese-macbert-base"
+MAX_LENGTH = 64
+BATCH_SIZE = 8
+EPOCHS = 8
+LEARNING_RATE = 2e-5
+SEED = 42
+IGNORE_INDEX = -100
+GENRE_KEYWORDS = ("轻音乐", "摇滚", "古典", "民谣", "爵士", "流行", "儿歌")
+DEFAULT_INTENT_THRESHOLD = 0.3
+MULTI_INTENT_REPEAT = 6
+THRESHOLD_CANDIDATES = [0.1, 0.12, 0.15, 0.18, 0.2, 0.22, 0.25, 0.28, 0.3, 0.33, 0.35, 0.38, 0.4, 0.45]
+
+
+@dataclass
+class JointSample:
+ text: str
+ intent_ids: list[str]
+ slots: list[dict[str, object]]
+
+
+class JointDataset(Dataset):
+ def __init__(
+ self,
+ samples: list[JointSample],
+ tokenizer,
+ intent_to_index: dict[str, int],
+ slot_to_index: dict[str, int],
+ ) -> None:
+ self._samples = samples
+ self._tokenizer = tokenizer
+ self._intent_to_index = intent_to_index
+ self._slot_to_index = slot_to_index
+
+ def __len__(self) -> int:
+ return len(self._samples)
+
+ def __getitem__(self, index: int) -> dict[str, torch.Tensor]:
+ sample = self._samples[index]
+ encoded = self._tokenizer(
+ sample.text,
+ truncation=True,
+ max_length=MAX_LENGTH,
+ padding="max_length",
+ return_offsets_mapping=True,
+ return_tensors="pt",
+ )
+ offset_mapping = encoded.pop("offset_mapping")[0].tolist()
+ slot_labels = [IGNORE_INDEX] * len(offset_mapping)
+ char_labels = ["O"] * len(sample.text)
+ for slot in sample.slots:
+ start = int(slot["start"])
+ end = int(slot["end"])
+ slot_name = str(slot["slot_name"])
+ if start < 0 or end > len(sample.text) or start >= end:
+ continue
+ char_labels[start] = f"B-{slot_name}"
+ for pos in range(start + 1, end):
+ char_labels[pos] = f"I-{slot_name}"
+
+ for token_index, (start, end) in enumerate(offset_mapping):
+ if end <= start:
+ continue
+ label = char_labels[start]
+ slot_labels[token_index] = self._slot_to_index.get(label, self._slot_to_index["O"])
+ intent_vector = torch.zeros(len(self._intent_to_index), dtype=torch.float32)
+ for intent_id in sample.intent_ids:
+ if intent_id in self._intent_to_index:
+ intent_vector[self._intent_to_index[intent_id]] = 1.0
+
+ return {
+ "input_ids": encoded["input_ids"][0],
+ "attention_mask": encoded["attention_mask"][0],
+ "intent_labels": intent_vector,
+ "slot_labels": torch.tensor(slot_labels, dtype=torch.long),
+ }
+
+
+def set_seed() -> None:
+ random.seed(SEED)
+ torch.manual_seed(SEED)
+
+
+def load_jsonl(path: Path) -> list[dict[str, object]]:
+ rows: list[dict[str, object]] = []
+ with path.open("r", encoding="utf-8") as handle:
+ for line in handle:
+ line = line.strip()
+ if not line:
+ continue
+ rows.append(json.loads(line))
+ return rows
+
+
+def find_order_id_span(text: str) -> tuple[str, int, int] | None:
+ match = re.search(r"[A-Za-z]\d{5,}", text)
+ if not match:
+ return None
+ return match.group(0), match.start(), match.end()
+
+
+def find_temperature_span(text: str) -> tuple[str, int, int] | None:
+ match = re.search(r"(\d{2}\s*度)", text)
+ if not match:
+ return None
+ return match.group(1), match.start(), match.end()
+
+
+def find_destination_span(text: str) -> tuple[str, int, int] | None:
+ for pattern in (
+ r"导航去(?P.+)",
+ r"导航到(?P.+)",
+ r"带我去(?P.+)",
+ r"送我去(?P.+)",
+ r"去(?P.+)",
+ ):
+ match = re.search(pattern, text)
+ if not match:
+ continue
+ destination = re.split(r"(?:然后|并且|同时|再|,|,|;|;)", match.group("destination"), maxsplit=1)[0].strip(" ,。")
+ if not destination:
+ continue
+ start = text.find(destination)
+ if start >= 0:
+ return destination, start, start + len(destination)
+ return None
+
+
+def find_music_span(text: str) -> tuple[str, str, int, int] | None:
+ for genre in GENRE_KEYWORDS:
+ start = text.find(genre)
+ if start >= 0:
+ return "genre", genre, start, start + len(genre)
+ for trigger in ("播放", "来点", "放点", "听", "来首", "来一首", "放一首"):
+ if trigger not in text:
+ continue
+ target = text.split(trigger, maxsplit=1)[-1]
+ target = re.split(r"(?:然后|并且|同时|再|,|,|;|;)", target, maxsplit=1)[0].strip(" 的一首首个歌曲音乐吧呀啊,。")
+ if not target or target in {"歌", "音乐"}:
+ continue
+ for genre in GENRE_KEYWORDS:
+ if genre in target:
+ start = text.find(genre)
+ return "genre", genre, start, start + len(genre)
+ start = text.find(target)
+ if start >= 0:
+ return "song", target, start, start + len(target)
+ return None
+
+
+def annotate_slots(text: str, intent_id: str) -> list[dict[str, object]]:
+ slots: list[dict[str, object]] = []
+ if intent_id in {"cs_query_order", "cs_query_logistics", "cs_cancel_order"}:
+ matched = find_order_id_span(text)
+ if matched is not None:
+ value, start, end = matched
+ slots.append({"slot_name": "order_id", "value": value, "start": start, "end": end})
+ elif intent_id == "cabin_set_ac":
+ matched = find_temperature_span(text)
+ if matched is not None:
+ value, start, end = matched
+ slots.append({"slot_name": "temperature", "value": value, "start": start, "end": end})
+ elif intent_id == "cabin_nav_to":
+ matched = find_destination_span(text)
+ if matched is not None:
+ value, start, end = matched
+ slots.append({"slot_name": "destination", "value": value, "start": start, "end": end})
+ elif intent_id == "cabin_play_music":
+ matched = find_music_span(text)
+ if matched is not None:
+ slot_name, value, start, end = matched
+ slots.append({"slot_name": slot_name, "value": value, "start": start, "end": end})
+ return slots
+
+
+def annotate_slots_for_intents(text: str, intent_ids: list[str]) -> list[dict[str, object]]:
+ merged: list[dict[str, object]] = []
+ seen: set[tuple[str, int, int]] = set()
+ for intent_id in intent_ids:
+ for slot in annotate_slots(text, intent_id):
+ key = (str(slot["slot_name"]), int(slot["start"]), int(slot["end"]))
+ if key in seen:
+ continue
+ seen.add(key)
+ merged.append(slot)
+ merged.sort(key=lambda item: (int(item["start"]), int(item["end"])))
+ return merged
+
+
+def build_train_samples() -> list[JointSample]:
+ samples: list[JointSample] = []
+ seen: set[tuple[str, tuple[str, ...]]] = set()
+ domain_data = yaml.safe_load(DOMAIN_PATH.read_text(encoding="utf-8")) or {}
+ for intent in domain_data.get("intents", []):
+ intent_id = str(intent.get("intent_id", "")).strip()
+ if not intent_id:
+ continue
+ for text in list(intent.get("examples", [])) + list(intent.get("keywords", [])):
+ text = str(text).strip()
+ if not text:
+ continue
+ key = (text, (intent_id,))
+ if key in seen:
+ continue
+ seen.add(key)
+ samples.append(JointSample(text=text, intent_ids=[intent_id], slots=annotate_slots(text, intent_id)))
+ for row in load_jsonl(TRAIN_PATH):
+ text = str(row["text"])
+ intent_id = str(row["intent_id"])
+ key = (text, (intent_id,))
+ if key in seen:
+ continue
+ seen.add(key)
+ samples.append(JointSample(text=text, intent_ids=[intent_id], slots=annotate_slots(text, intent_id)))
+ for row in load_jsonl(SEED_PATH):
+ text = str(row["text"])
+ intent_id = str(row["intent_id"])
+ key = (text, (intent_id,))
+ if key in seen:
+ continue
+ seen.add(key)
+ samples.append(JointSample(text=text, intent_ids=[intent_id], slots=list(row.get("slots", []))))
+ for row in load_jsonl(MULTI_TRAIN_PATH):
+ text = str(row["text"]).strip()
+ intent_ids = sorted({str(item).strip() for item in row.get("intent_ids", []) if str(item).strip()})
+ if not text or not intent_ids:
+ continue
+ key = (text, tuple(intent_ids))
+ if key in seen:
+ continue
+ seen.add(key)
+ slots = list(row.get("slots") or annotate_slots_for_intents(text, intent_ids))
+ samples.append(JointSample(text=text, intent_ids=intent_ids, slots=slots))
+ if len(intent_ids) >= 2:
+ for _ in range(MULTI_INTENT_REPEAT - 1):
+ samples.append(JointSample(text=text, intent_ids=intent_ids, slots=list(slots)))
+ random.shuffle(samples)
+ return samples
+
+
+def build_eval_samples() -> list[JointSample]:
+ rows = load_jsonl(EVAL_PATH)
+ samples = [
+ JointSample(
+ text=str(row["text"]),
+ intent_ids=[str(row["intent_id"])],
+ slots=list(row.get("slots", [])),
+ )
+ for row in rows
+ ]
+ if MULTI_EVAL_PATH.exists():
+ for row in load_jsonl(MULTI_EVAL_PATH):
+ samples.append(
+ JointSample(
+ text=str(row["text"]),
+ intent_ids=sorted({str(item).strip() for item in row.get("intent_ids", []) if str(item).strip()}),
+ slots=list(row.get("slots") or annotate_slots_for_intents(str(row["text"]), list(row.get("intent_ids", [])))),
+ )
+ )
+ return samples
+
+
+def build_slot_labels(samples: list[JointSample]) -> list[str]:
+ slot_names = sorted({str(slot["slot_name"]) for sample in samples for slot in sample.slots})
+ labels = ["O"]
+ for name in slot_names:
+ labels.append(f"B-{name}")
+ labels.append(f"I-{name}")
+ return labels
+
+
+def compute_metrics(
+ model: JointBertForNLU,
+ dataloader: DataLoader,
+ device: torch.device,
+ intent_labels: list[str],
+ slot_labels: list[str],
+ threshold: float,
+) -> dict[str, float]:
+ model.eval()
+ intent_tp = 0
+ intent_fp = 0
+ intent_fn = 0
+ single_intent_correct = 0
+ single_intent_total = 0
+ intent_exact_match = 0
+ correct_slot_tokens = 0
+ total_slot_tokens = 0
+ exact_slot_samples = 0
+ total_samples = 0
+ with torch.no_grad():
+ for batch in dataloader:
+ batch = {key: value.to(device) for key, value in batch.items()}
+ intent_logits, slot_logits = model(batch["input_ids"], batch["attention_mask"])
+ predicted_probs = torch.sigmoid(intent_logits)
+ predicted_multi = predicted_probs >= threshold
+ gold_multi = batch["intent_labels"] > 0.5
+ intent_tp += int((predicted_multi & gold_multi).sum().item())
+ intent_fp += int((predicted_multi & ~gold_multi).sum().item())
+ intent_fn += int((~predicted_multi & gold_multi).sum().item())
+ intent_exact_match += int((predicted_multi == gold_multi).all(dim=1).sum().item())
+ top_predicted = torch.argmax(predicted_probs, dim=-1)
+ gold_counts = gold_multi.sum(dim=-1)
+ single_mask = gold_counts == 1
+ if int(single_mask.sum().item()) > 0:
+ gold_top = torch.argmax(gold_multi.float(), dim=-1)
+ single_intent_correct += int((top_predicted[single_mask] == gold_top[single_mask]).sum().item())
+ single_intent_total += int(single_mask.sum().item())
+
+ predicted_slots = torch.argmax(slot_logits, dim=-1)
+ mask = batch["slot_labels"] != IGNORE_INDEX
+ correct_slot_tokens += int(((predicted_slots == batch["slot_labels"]) & mask).sum().item())
+ total_slot_tokens += int(mask.sum().item())
+
+ for index in range(batch["slot_labels"].size(0)):
+ gold = batch["slot_labels"][index][mask[index]]
+ pred = predicted_slots[index][mask[index]]
+ exact_slot_samples += int(torch.equal(gold, pred))
+ total_samples += 1
+ precision = intent_tp / max(intent_tp + intent_fp, 1)
+ recall = intent_tp / max(intent_tp + intent_fn, 1)
+ f1 = (2 * precision * recall / (precision + recall)) if (precision + recall) else 0.0
+ return {
+ "intent_threshold": round(threshold, 4),
+ "intent_micro_precision": round(precision, 4),
+ "intent_micro_recall": round(recall, 4),
+ "intent_micro_f1": round(f1, 4),
+ "intent_exact_match": round(intent_exact_match / max(total_samples, 1), 4),
+ "single_intent_top1_accuracy": round(single_intent_correct / max(single_intent_total, 1), 4),
+ "slot_token_accuracy": round(correct_slot_tokens / max(total_slot_tokens, 1), 4),
+ "slot_exact_match": round(exact_slot_samples / max(total_samples, 1), 4),
+ "intent_label_count": float(len(intent_labels)),
+ "slot_label_count": float(len(slot_labels)),
+ }
+
+
+def search_best_threshold(
+ model: JointBertForNLU,
+ dataloader: DataLoader,
+ device: torch.device,
+ intent_labels: list[str],
+ slot_labels: list[str],
+) -> dict[str, float]:
+ best_metrics: dict[str, float] | None = None
+ for threshold in THRESHOLD_CANDIDATES:
+ metrics = compute_metrics(
+ model,
+ dataloader,
+ device,
+ intent_labels,
+ slot_labels,
+ threshold=threshold,
+ )
+ if best_metrics is None:
+ best_metrics = metrics
+ continue
+ current_score = (metrics["intent_micro_f1"], metrics["intent_exact_match"], metrics["slot_exact_match"])
+ best_score = (
+ best_metrics["intent_micro_f1"],
+ best_metrics["intent_exact_match"],
+ best_metrics["slot_exact_match"],
+ )
+ if current_score > best_score:
+ best_metrics = metrics
+ assert best_metrics is not None
+ return best_metrics
+
+
+def build_pos_weight(samples: list[JointSample], intent_labels: list[str]) -> torch.Tensor:
+ positive_counts = {label: 0 for label in intent_labels}
+ for sample in samples:
+ sample_intents = set(sample.intent_ids)
+ for label in intent_labels:
+ if label in sample_intents:
+ positive_counts[label] += 1
+ total = max(len(samples), 1)
+ weights: list[float] = []
+ for label in intent_labels:
+ positives = max(positive_counts[label], 1)
+ negatives = max(total - positives, 1)
+ weight = negatives / positives
+ weights.append(min(max(weight, 1.0), 12.0))
+ return torch.tensor(weights, dtype=torch.float32)
+
+
+def main() -> None:
+ set_seed()
+ train_samples = build_train_samples()
+ eval_samples = build_eval_samples()
+ intent_labels = sorted({intent_id for sample in train_samples + eval_samples for intent_id in sample.intent_ids})
+ slot_labels = build_slot_labels(train_samples + eval_samples)
+ intent_to_index = {label: index for index, label in enumerate(intent_labels)}
+ slot_to_index = {label: index for index, label in enumerate(slot_labels)}
+ tokenizer = AutoTokenizer.from_pretrained(DEFAULT_BASE_MODEL)
+ train_dataset = JointDataset(train_samples, tokenizer, intent_to_index, slot_to_index)
+ eval_dataset = JointDataset(eval_samples, tokenizer, intent_to_index, slot_to_index)
+ train_loader = DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)
+ eval_loader = DataLoader(eval_dataset, batch_size=BATCH_SIZE, shuffle=False)
+
+ device = torch.device("mps" if torch.backends.mps.is_available() else "cpu")
+ model = JointBertForNLU(
+ base_model_name=DEFAULT_BASE_MODEL,
+ num_intents=len(intent_labels),
+ num_slot_labels=len(slot_labels),
+ )
+ model.to(device)
+ optimizer = torch.optim.AdamW(model.parameters(), lr=LEARNING_RATE)
+ pos_weight = build_pos_weight(train_samples, intent_labels).to(device)
+ best_metrics: dict[str, float] | None = None
+ best_state: dict[str, torch.Tensor] | None = None
+
+ for epoch in range(EPOCHS):
+ model.train()
+ epoch_loss = 0.0
+ for batch in train_loader:
+ batch = {key: value.to(device) for key, value in batch.items()}
+ optimizer.zero_grad()
+ intent_logits, slot_logits = model(batch["input_ids"], batch["attention_mask"])
+ intent_loss = torch.nn.functional.binary_cross_entropy_with_logits(
+ intent_logits,
+ batch["intent_labels"],
+ pos_weight=pos_weight,
+ )
+ slot_loss = torch.nn.functional.cross_entropy(
+ slot_logits.view(-1, slot_logits.size(-1)),
+ batch["slot_labels"].view(-1),
+ ignore_index=IGNORE_INDEX,
+ )
+ loss = intent_loss + slot_loss
+ loss.backward()
+ optimizer.step()
+ epoch_loss += float(loss.item())
+
+ metrics = search_best_threshold(model, eval_loader, device, intent_labels, slot_labels)
+ metrics["train_loss"] = round(epoch_loss / max(len(train_loader), 1), 4)
+ print(json.dumps({"epoch": epoch + 1, **metrics}, ensure_ascii=False))
+ if best_metrics is None or metrics["intent_micro_f1"] > best_metrics["intent_micro_f1"]:
+ best_metrics = metrics
+ best_state = {key: value.detach().cpu() for key, value in model.state_dict().items()}
+
+ if best_state is None or best_metrics is None:
+ raise RuntimeError("joint nlu training did not produce a best checkpoint")
+
+ OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
+ tokenizer.save_pretrained(OUTPUT_DIR)
+ torch.save(best_state, OUTPUT_DIR / "model_state.pt")
+ config = {
+ "base_model_name": DEFAULT_BASE_MODEL,
+ "intent_task": "multi_label",
+ "intent_labels": intent_labels,
+ "slot_labels": slot_labels,
+ "max_length": MAX_LENGTH,
+ "intent_threshold": float(best_metrics["intent_threshold"]),
+ "multi_intent_threshold": float(best_metrics["intent_threshold"]),
+ "max_multi_intents": 4,
+ }
+ (OUTPUT_DIR / "joint_nlu_config.json").write_text(json.dumps(config, ensure_ascii=False, indent=2), encoding="utf-8")
+ (OUTPUT_DIR / "train_summary.json").write_text(
+ json.dumps(
+ {
+ "train_size": len(train_samples),
+ "eval_size": len(eval_samples),
+ "metrics": best_metrics,
+ },
+ ensure_ascii=False,
+ indent=2,
+ ),
+ encoding="utf-8",
+ )
+
+
+if __name__ == "__main__":
+ main()
diff --git a/intelligent_cabin/archive/scripts/train_local_bert_intent.py b/intelligent_cabin/archive/scripts/train_local_bert_intent.py
new file mode 100644
index 0000000..d0398e1
--- /dev/null
+++ b/intelligent_cabin/archive/scripts/train_local_bert_intent.py
@@ -0,0 +1,684 @@
+from __future__ import annotations
+
+import json
+import os
+import random
+from dataclasses import dataclass
+from pathlib import Path
+
+import torch
+from torch.utils.data import DataLoader, Dataset
+from transformers import AutoModelForSequenceClassification, AutoTokenizer
+import yaml
+
+
+PROJECT_ROOT = Path(__file__).resolve().parents[1]
+TRAIN_PATH = PROJECT_ROOT / "app/data/bert_intent_train.jsonl"
+DOMAIN_PATH = PROJECT_ROOT / "config/domain.yml"
+OUTPUT_DIR = PROJECT_ROOT / "models/local_bert_intent"
+DEFAULT_BASE_MODEL = "hfl/chinese-macbert-base"
+MAX_LENGTH = 48
+BATCH_SIZE = 8
+EPOCHS = 16
+LEARNING_RATE = 2e-5
+SEED = 42
+
+ORDER_IDS = ["A123456", "A700001", "A800002", "A900005", "A202501", "A808001"]
+DESTINATIONS = ["公司停车场", "浦东机场", "徐家汇", "虹桥机场", "最近的充电站", "南京东路"]
+TEMPERATURES = [18, 20, 21, 22, 23, 24, 26]
+SONGS = ["夜曲", "稻香", "青花瓷", "晴天", "告白气球"]
+GENRES = ["轻音乐", "摇滚", "古典音乐", "民谣", "爵士"]
+SOCIAL_LABEL = "__social__"
+OUT_OF_SCOPE_LABEL = "__out_of_scope__"
+
+TEMPLATES: dict[str, list[str]] = {
+ "cs_query_order": [
+ "查一下订单{order_id}现在什么状态",
+ "我的订单{order_id}到哪一步了",
+ "帮我看看{order_id}这个订单",
+ "确认下{order_id}订单状态",
+ "订单{order_id}现在处理到哪里",
+ "看下{order_id}这单进度",
+ "订单号{order_id}目前怎么样",
+ "帮忙确认订单{order_id}",
+ "订单{order_id}有结果了吗",
+ "帮我追一下订单{order_id}",
+ "订单{order_id}现在受理了吗",
+ "看看{order_id}这单现在啥情况",
+ "帮我查查{order_id}订单进展",
+ "{order_id}这个订单处理好了没",
+ "{order_id}这笔订单现在进展到哪了",
+ ],
+ "cs_query_logistics": [
+ "快递{order_id}到哪儿了",
+ "帮我查{order_id}物流进度",
+ "看看{order_id}配送状态",
+ "订单{order_id}物流更新了吗",
+ "查询{order_id}的快递信息",
+ "我的{order_id}现在派送到哪了",
+ "查一下{order_id}这单物流",
+ "配送单{order_id}走到哪里了",
+ "帮我看下{order_id}快递到没到",
+ "物流单号{order_id}现在在哪",
+ "订单{order_id}物流到哪一步了",
+ "{order_id}这单现在派件了吗",
+ "帮我追踪{order_id}运输轨迹",
+ "{order_id}快件现在运到哪里了",
+ "我想看{order_id}的配送更新",
+ ],
+ "cs_cancel_order": [
+ "帮我取消{order_id}这个订单",
+ "{order_id}别要了给我撤销",
+ "把订单{order_id}取消掉",
+ "我不要{order_id}了",
+ "撤销一下{order_id}订单",
+ "订单{order_id}不要发了",
+ "帮我把{order_id}退掉并取消",
+ "把{order_id}这一单停掉",
+ "{order_id}这单直接取消",
+ "订单号{order_id}撤回一下",
+ "订单{order_id}我不想要了",
+ "{order_id}这笔订单先别发了",
+ "把{order_id}这单给我撤单",
+ "订单{order_id}停掉吧",
+ "{order_id}这个快给我取消了",
+ ],
+ "cs_transfer_human": [
+ "我要找人工客服处理",
+ "现在转人工",
+ "麻烦给我接人工服务",
+ "帮我呼叫真人客服",
+ "别机器人了我要人工",
+ "转真人客服",
+ "我要人工坐席",
+ "帮我接人工处理",
+ "叫人工客服来",
+ "直接给我转人工",
+ "这个问题给我人工跟进",
+ "安排真人客服接手",
+ "机器人处理不了,转人工",
+ "帮我叫个客服专员",
+ "我要人工来处理这事",
+ ],
+ "cabin_nav_to": [
+ "导航到{destination}",
+ "带我去{destination}",
+ "我要去{destination}",
+ "去{destination}",
+ "开导航去{destination}",
+ "帮我导航到{destination}",
+ "送我去{destination}",
+ "现在去{destination}",
+ "带路到{destination}",
+ "去一下{destination}",
+ "规划路线去{destination}",
+ "直接开去{destination}",
+ "给我导到{destination}",
+ "{destination}怎么走,导航一下",
+ "出发去{destination}",
+ ],
+ "cabin_set_ac": [
+ "把空调设到{temperature}度",
+ "车里温度调成{temperature}度",
+ "冷气开到{temperature}度",
+ "空调给我调到{temperature}度",
+ "温度改成{temperature}度",
+ "车内设成{temperature}度",
+ "把温度打到{temperature}度",
+ "空调调为{temperature}度",
+ "帮我把车里调成{temperature}度",
+ "冷风调到{temperature}度",
+ "把车内温度设为{temperature}度",
+ "空调温度改到{temperature}度",
+ "冷气帮我调到{temperature}度",
+ "舱内调成{temperature}度",
+ "给我把温度定在{temperature}度",
+ "把车里弄凉快点",
+ "车里太热了,降一点",
+ "把里面调凉快一点",
+ "有点热,降温",
+ "空调再冷一点",
+ "车内温度低一点",
+ "把里面弄暖和点",
+ "车里太冷了,升一点温度",
+ ],
+ "cabin_ac_on": [
+ "把空调打开",
+ "开一下冷气",
+ "把冷风开起来",
+ "车里热,空调开开",
+ "打开制冷",
+ "空调启动一下",
+ ],
+ "cabin_window_open": [
+ "把车窗打开",
+ "开下窗",
+ "窗户开一点",
+ "帮我透透气",
+ "车里太闷了,开下窗",
+ "顺便开下车窗",
+ "把窗户降一点",
+ "把玻璃打开一点",
+ ],
+ "cabin_window_close": [
+ "把车窗关上",
+ "窗户关一下",
+ "把窗升起来",
+ "外面太吵了,把窗关了",
+ "把窗户关严",
+ ],
+ "cabin_fan_down": [
+ "风别这么大",
+ "风小一点",
+ "别吹这么猛",
+ "把风量调小一点",
+ "出风弱一点",
+ ],
+ "cabin_fan_up": [
+ "风再大一点",
+ "把风量开大点",
+ "出风强一点",
+ "风不够,调大些",
+ ],
+ "cabin_defog_front_on": [
+ "前挡起雾了,除一下",
+ "把前挡风玻璃雾气清掉",
+ "前窗看不清了,开除雾",
+ ],
+ "cabin_defog_rear_on": [
+ "后挡有雾,开下除雾",
+ "后玻璃起雾了,清一下",
+ "后窗看不清了,除雾",
+ ],
+ "cabin_play_music": [
+ "播放一首{genre}",
+ "来点{genre}",
+ "我想听{genre}",
+ "给我播点{genre}",
+ "放一首{song}",
+ "来一首{song}",
+ "播放{song}",
+ "放点音乐,来个{genre}",
+ "我想听首{song}",
+ "给我来点歌,放{song}",
+ "随机放点{genre}",
+ "帮我播首{song}",
+ "来点适合开车听的{genre}",
+ "打开音乐,放{song}",
+ "给我放一些{genre}",
+ "放点歌",
+ "来首歌",
+ "整点音乐",
+ "车里放点歌",
+ "来点能听的",
+ ],
+ SOCIAL_LABEL: [
+ "你好",
+ "嗨",
+ "哈喽",
+ "早上好",
+ "晚上好",
+ "你叫什么名字",
+ "你是谁",
+ "你能做什么",
+ "今天天气不错",
+ "陪我聊聊天",
+ ],
+ OUT_OF_SCOPE_LABEL: [
+ "帮我点个外卖",
+ "订一张去北京的机票",
+ "帮我买杯咖啡",
+ "给我订一家酒店",
+ "人类诞生的意义是什么",
+ "帮我写一份年终总结",
+ "推荐一部电影",
+ "讲个笑话",
+ "帮我做一道数学题",
+ "去美团叫个外卖",
+ ],
+}
+
+INTENT_REPLACEMENTS: dict[str, list[tuple[str, str]]] = {
+ "cs_query_order": [
+ ("订单", "这单"),
+ ("查一下", "看一下"),
+ ("帮我", "麻烦帮我"),
+ ("现在什么状态", "现在啥状态"),
+ ("处理到哪里", "进展到哪里"),
+ ],
+ "cs_query_logistics": [
+ ("物流", "快递"),
+ ("快递", "配送"),
+ ("配送", "派送"),
+ ("帮我", "麻烦帮我"),
+ ("现在在哪", "现在到哪了"),
+ ],
+ "cs_cancel_order": [
+ ("取消", "撤销"),
+ ("撤销", "撤单"),
+ ("订单", "这单"),
+ ("帮我", "麻烦帮我"),
+ ("不要发了", "别发了"),
+ ],
+ "cs_transfer_human": [
+ ("人工客服", "真人客服"),
+ ("人工", "人工坐席"),
+ ("帮我", "麻烦帮我"),
+ ],
+ "cabin_nav_to": [
+ ("导航", "带路"),
+ ("带我", "送我"),
+ ("去", "前往"),
+ ],
+ "cabin_set_ac": [
+ ("空调", "车里温度"),
+ ("调到", "设到"),
+ ("温度", "车内温度"),
+ ("凉快点", "冷一点"),
+ ("暖和点", "热一点"),
+ ],
+ "cabin_ac_on": [
+ ("空调", "冷气"),
+ ("打开", "开"),
+ ("冷风", "制冷"),
+ ],
+ "cabin_window_open": [
+ ("车窗", "窗户"),
+ ("打开", "开"),
+ ("透透气", "通通风"),
+ ],
+ "cabin_window_close": [
+ ("关上", "关掉"),
+ ("车窗", "窗户"),
+ ("关严", "关好"),
+ ],
+ "cabin_fan_down": [
+ ("风量", "风"),
+ ("调小", "调低"),
+ ("别吹这么猛", "风小一点"),
+ ],
+ "cabin_fan_up": [
+ ("风量", "风"),
+ ("调大", "调高"),
+ ],
+ "cabin_defog_front_on": [
+ ("前挡", "前窗"),
+ ("除雾", "除一下"),
+ ],
+ "cabin_defog_rear_on": [
+ ("后挡", "后窗"),
+ ("除雾", "清一下雾"),
+ ],
+ "cabin_play_music": [
+ ("播放", "放"),
+ ("来点", "播点"),
+ ("我想听", "给我来点"),
+ ("放点歌", "来首歌"),
+ ],
+ SOCIAL_LABEL: [
+ ("你好", "您好"),
+ ("哈喽", "hello"),
+ ("你叫什么名字", "怎么称呼你"),
+ ],
+ OUT_OF_SCOPE_LABEL: [
+ ("点个外卖", "叫个外卖"),
+ ("订一家酒店", "订个酒店"),
+ ("讲个笑话", "说个笑话"),
+ ],
+}
+
+
+@dataclass
+class Sample:
+ text: str
+ intent_id: str
+
+
+HARD_NEGATIVE_RAW_SAMPLES: list[tuple[str, str]] = [
+ ("订单A700101物流到哪了", "cs_query_logistics"),
+ ("帮我看下订单A700102配送到哪里了", "cs_query_logistics"),
+ ("订单A700103现在派件了吗", "cs_query_logistics"),
+ ("A700104这单物流有没有更新", "cs_query_logistics"),
+ ("查一下订单A700105运输轨迹", "cs_query_logistics"),
+ ("订单A700106不要了,帮我撤单", "cs_cancel_order"),
+ ("A700107这单别发了,直接取消", "cs_cancel_order"),
+ ("把订单A700108停掉吧", "cs_cancel_order"),
+ ("A700109这个订单我不想要了", "cs_cancel_order"),
+ ("订单A700110给我撤回", "cs_cancel_order"),
+ ("订单A700111现在受理了吗", "cs_query_order"),
+ ("帮我看看A700112这单处理得怎么样了", "cs_query_order"),
+ ("A700113订单目前进展如何", "cs_query_order"),
+ ("查下订单A700114现在什么情况", "cs_query_order"),
+ ("帮我确认订单A700115是否已经处理", "cs_query_order"),
+ ("你好呀", SOCIAL_LABEL),
+ ("嗨,在吗", SOCIAL_LABEL),
+ ("今天天气真不错", SOCIAL_LABEL),
+ ("你叫什么名字呀", SOCIAL_LABEL),
+ ("你是做什么的", SOCIAL_LABEL),
+ ("陪我随便聊聊", SOCIAL_LABEL),
+ ("帮我透透气", "cabin_window_open"),
+ ("车里太闷了,开下窗", "cabin_window_open"),
+ ("把窗户降一点", "cabin_window_open"),
+ ("前挡起雾了,除一下", "cabin_defog_front_on"),
+ ("后挡有雾,开下除雾", "cabin_defog_rear_on"),
+ ("把车里弄凉快点", "cabin_set_ac"),
+ ("车里太热了,降一点", "cabin_set_ac"),
+ ("空调再冷一点", "cabin_set_ac"),
+ ("把里面弄暖和点", "cabin_set_ac"),
+ ("风别这么大", "cabin_fan_down"),
+ ("别吹这么猛", "cabin_fan_down"),
+ ("风再大一点", "cabin_fan_up"),
+ ("放点歌", "cabin_play_music"),
+ ("来首歌", "cabin_play_music"),
+ ("整点音乐", "cabin_play_music"),
+ ("透透气", "cabin_window_open"),
+ ("通通风", "cabin_window_open"),
+ ("车里太闷了", "cabin_window_open"),
+ ("凉快点", "cabin_set_ac"),
+ ("暖和点", "cabin_set_ac"),
+ ("帮我点一份麻辣烫", OUT_OF_SCOPE_LABEL),
+ ("给我订今晚的酒店", OUT_OF_SCOPE_LABEL),
+ ("帮我买张电影票", OUT_OF_SCOPE_LABEL),
+ ("人为什么会做梦", OUT_OF_SCOPE_LABEL),
+ ("帮我做个旅游攻略", OUT_OF_SCOPE_LABEL),
+ ("帮我点肯德基外卖", OUT_OF_SCOPE_LABEL),
+ ("透透气,别给我除雾", "cabin_window_open"),
+ ("后挡有雾,不是开窗,是除雾", "cabin_defog_rear_on"),
+ ("前挡看不清了,除雾不要开窗", "cabin_defog_front_on"),
+ ("凉快点,不是把风量调小", "cabin_set_ac"),
+ ("别吹这么猛,不是降温", "cabin_fan_down"),
+ ("来首歌,不是切下一首", "cabin_play_music"),
+ ("放点歌,不是暂停音乐", "cabin_play_music"),
+]
+
+HARD_NEGATIVE_SAMPLES: list[Sample] = [
+ Sample(text=text, intent_id=intent_id) for text, intent_id in HARD_NEGATIVE_RAW_SAMPLES
+]
+
+
+class IntentDataset(Dataset):
+ def __init__(self, samples: list[Sample], tokenizer, label_to_id: dict[str, int]) -> None:
+ self._samples = samples
+ self._tokenizer = tokenizer
+ self._label_to_id = label_to_id
+
+ def __len__(self) -> int:
+ return len(self._samples)
+
+ def __getitem__(self, index: int) -> dict[str, torch.Tensor]:
+ sample = self._samples[index]
+ encoded = self._tokenizer(
+ sample.text,
+ truncation=True,
+ padding="max_length",
+ max_length=MAX_LENGTH,
+ return_tensors="pt",
+ )
+ return {
+ "input_ids": encoded["input_ids"].squeeze(0),
+ "attention_mask": encoded["attention_mask"].squeeze(0),
+ "labels": torch.tensor(self._label_to_id[sample.intent_id], dtype=torch.long),
+ }
+
+
+def set_seed(seed: int) -> None:
+ random.seed(seed)
+ torch.manual_seed(seed)
+ if torch.backends.mps.is_available():
+ torch.mps.manual_seed(seed)
+
+
+def load_samples(file_path: Path) -> list[Sample]:
+ samples: list[Sample] = []
+ if not file_path.exists():
+ return samples
+ for line in file_path.read_text(encoding="utf-8").splitlines():
+ line = line.strip()
+ if not line:
+ continue
+ payload = json.loads(line)
+ samples.append(Sample(text=str(payload["text"]), intent_id=str(payload["intent_id"])))
+ return samples
+
+
+def load_domain_samples(file_path: Path) -> list[Sample]:
+ if not file_path.exists():
+ return []
+ payload = yaml.safe_load(file_path.read_text(encoding="utf-8")) or {}
+ intents = payload.get("intents", [])
+ samples: list[Sample] = []
+ seen: set[tuple[str, str]] = set()
+ for item in intents:
+ intent_id = str(item.get("intent_id") or "").strip()
+ if not intent_id:
+ continue
+ seed_texts = list(item.get("examples") or [])
+ seed_texts.extend(item.get("keywords") or [])
+ label = str(item.get("label") or "").strip()
+ if label:
+ seed_texts.append(label)
+ for text in seed_texts:
+ normalized = str(text).strip()
+ if not normalized:
+ continue
+ for variant in expand_seed_variants(normalized):
+ key = (variant, intent_id)
+ if key in seen:
+ continue
+ seen.add(key)
+ samples.append(Sample(text=variant, intent_id=intent_id))
+ return samples
+
+
+def expand_seed_variants(text: str) -> list[str]:
+ normalized = text.strip().strip(",。!?;; ")
+ if not normalized:
+ return []
+ variants = {
+ normalized,
+ normalized.replace("一下", "").strip(),
+ normalized.replace("帮我", "").strip(),
+ normalized.replace("请", "").strip(),
+ f"帮我{normalized}",
+ f"请{normalized}",
+ f"{normalized}一下",
+ }
+ cleaned: list[str] = []
+ for item in variants:
+ compact = " ".join(item.split()).strip(",。!?;; ")
+ if compact:
+ cleaned.append(compact)
+ return cleaned
+
+
+def load_training_samples() -> list[Sample]:
+ samples = load_samples(TRAIN_PATH)
+ samples.extend(load_domain_samples(DOMAIN_PATH))
+ deduped: list[Sample] = []
+ seen: set[tuple[str, str]] = set()
+ for sample in samples:
+ key = (sample.text, sample.intent_id)
+ if key in seen:
+ continue
+ seen.add(key)
+ deduped.append(sample)
+ return deduped
+
+
+def augment_samples(samples: list[Sample]) -> list[Sample]:
+ augmented = list(samples)
+ seen = {(sample.text, sample.intent_id) for sample in augmented}
+ for intent_id, templates in TEMPLATES.items():
+ for index, template in enumerate(templates):
+ sample = render_template(intent_id, template, index)
+ key = (sample.text, sample.intent_id)
+ if key not in seen:
+ augmented.append(sample)
+ seen.add(key)
+
+ for sample in HARD_NEGATIVE_SAMPLES:
+ key = (sample.text, sample.intent_id)
+ if key not in seen:
+ augmented.append(sample)
+ seen.add(key)
+
+ for sample in list(augmented):
+ text = sample.text
+ for source, target in INTENT_REPLACEMENTS.get(sample.intent_id, []):
+ if source in text:
+ variant = text.replace(source, target, 1)
+ key = (variant, sample.intent_id)
+ if key not in seen:
+ augmented.append(Sample(text=variant, intent_id=sample.intent_id))
+ seen.add(key)
+
+ compact = text
+ for token in ("帮我", "麻烦", "请", "一下"):
+ if token in compact:
+ compact = compact.replace(token, "", 1)
+ compact = compact.strip(" ,。!?")
+ if compact and compact != text:
+ key = (compact, sample.intent_id)
+ if key not in seen:
+ augmented.append(Sample(text=compact, intent_id=sample.intent_id))
+ seen.add(key)
+ random.shuffle(augmented)
+ return augmented
+
+
+def render_template(intent_id: str, template: str, index: int) -> Sample:
+ order_id = ORDER_IDS[index % len(ORDER_IDS)]
+ destination = DESTINATIONS[index % len(DESTINATIONS)]
+ temperature = TEMPERATURES[index % len(TEMPERATURES)]
+ song = SONGS[index % len(SONGS)]
+ genre = GENRES[index % len(GENRES)]
+ text = template.format(
+ order_id=order_id,
+ destination=destination,
+ temperature=temperature,
+ song=song,
+ genre=genre,
+ )
+ return Sample(text=text, intent_id=intent_id)
+
+
+def split_samples(samples: list[Sample]) -> tuple[list[Sample], list[Sample]]:
+ grouped: dict[str, list[Sample]] = {}
+ for sample in samples:
+ grouped.setdefault(sample.intent_id, []).append(sample)
+ train_samples: list[Sample] = []
+ dev_samples: list[Sample] = []
+ for items in grouped.values():
+ random.shuffle(items)
+ cut = max(1, int(len(items) * 0.8))
+ train_samples.extend(items[:cut])
+ dev_samples.extend(items[cut:])
+ random.shuffle(train_samples)
+ random.shuffle(dev_samples)
+ return train_samples, dev_samples
+
+
+def accuracy(model, loader: DataLoader, device: torch.device) -> float:
+ model.eval()
+ correct = 0
+ total = 0
+ with torch.no_grad():
+ for batch in loader:
+ input_ids = batch["input_ids"].to(device)
+ attention_mask = batch["attention_mask"].to(device)
+ labels = batch["labels"].to(device)
+ outputs = model(input_ids=input_ids, attention_mask=attention_mask)
+ preds = outputs.logits.argmax(dim=-1)
+ correct += int((preds == labels).sum().item())
+ total += int(labels.numel())
+ return correct / total if total else 0.0
+
+
+def resolve_base_model() -> str:
+ configured = os.getenv("AGENT_BERT_BASE_MODEL", "").strip()
+ if configured:
+ return configured
+ return DEFAULT_BASE_MODEL
+
+
+def main() -> None:
+ set_seed(SEED)
+ samples = augment_samples(load_training_samples())
+ intents = sorted({sample.intent_id for sample in samples})
+ label_to_id = {intent_id: index for index, intent_id in enumerate(intents)}
+ id_to_label = {index: intent_id for intent_id, index in label_to_id.items()}
+
+ train_samples, dev_samples = split_samples(samples)
+ base_model = resolve_base_model()
+ tokenizer = AutoTokenizer.from_pretrained(base_model)
+ train_dataset = IntentDataset(train_samples, tokenizer, label_to_id)
+ dev_dataset = IntentDataset(dev_samples, tokenizer, label_to_id)
+
+ train_loader = DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)
+ dev_loader = DataLoader(dev_dataset, batch_size=BATCH_SIZE)
+
+ model = AutoModelForSequenceClassification.from_pretrained(
+ base_model,
+ num_labels=len(intents),
+ id2label=id_to_label,
+ label2id=label_to_id,
+ )
+
+ device = torch.device("mps" if torch.backends.mps.is_available() else "cpu")
+ model.to(device)
+ optimizer = torch.optim.AdamW(model.parameters(), lr=LEARNING_RATE)
+
+ best_dev_acc = 0.0
+ best_state = None
+
+ for epoch in range(1, EPOCHS + 1):
+ model.train()
+ total_loss = 0.0
+ for batch in train_loader:
+ optimizer.zero_grad()
+ input_ids = batch["input_ids"].to(device)
+ attention_mask = batch["attention_mask"].to(device)
+ labels = batch["labels"].to(device)
+ outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels)
+ loss = outputs.loss
+ loss.backward()
+ optimizer.step()
+ total_loss += float(loss.item())
+
+ dev_acc = accuracy(model, dev_loader, device)
+ avg_loss = total_loss / max(len(train_loader), 1)
+ print(f"epoch={epoch} loss={avg_loss:.4f} dev_acc={dev_acc:.4f}")
+ if dev_acc >= best_dev_acc:
+ best_dev_acc = dev_acc
+ best_state = {key: value.detach().cpu().clone() for key, value in model.state_dict().items()}
+
+ if best_state is not None:
+ model.load_state_dict(best_state)
+
+ OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
+ model.save_pretrained(OUTPUT_DIR)
+ tokenizer.save_pretrained(OUTPUT_DIR)
+ label_map = {f"LABEL_{index}": intent_id for index, intent_id in id_to_label.items()}
+ (OUTPUT_DIR / "label_map.json").write_text(
+ json.dumps(label_map, ensure_ascii=False, indent=2),
+ encoding="utf-8",
+ )
+ train_summary = {
+ "base_model": base_model,
+ "epochs": EPOCHS,
+ "batch_size": BATCH_SIZE,
+ "learning_rate": LEARNING_RATE,
+ "train_size": len(train_samples),
+ "dev_size": len(dev_samples),
+ "best_dev_accuracy": round(best_dev_acc, 4),
+ "device": str(device),
+ }
+ (OUTPUT_DIR / "train_summary.json").write_text(
+ json.dumps(train_summary, ensure_ascii=False, indent=2),
+ encoding="utf-8",
+ )
+ print(json.dumps(train_summary, ensure_ascii=False, indent=2))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/intelligent_cabin/archive/scripts/train_local_bert_multi_intent.py b/intelligent_cabin/archive/scripts/train_local_bert_multi_intent.py
new file mode 100644
index 0000000..4fb1d1f
--- /dev/null
+++ b/intelligent_cabin/archive/scripts/train_local_bert_multi_intent.py
@@ -0,0 +1,415 @@
+from __future__ import annotations
+
+import json
+import os
+import random
+from dataclasses import dataclass
+from pathlib import Path
+
+import torch
+from torch.utils.data import DataLoader, Dataset
+from transformers import AutoModelForSequenceClassification, AutoTokenizer
+import yaml
+
+
+PROJECT_ROOT = Path(__file__).resolve().parents[1]
+SINGLE_LABEL_PATH = PROJECT_ROOT / "app/data/bert_intent_train.jsonl"
+MULTI_LABEL_PATH = PROJECT_ROOT / "app/data/bert_intent_multilabel_train.jsonl"
+DOMAIN_PATH = PROJECT_ROOT / "config/domain.yml"
+OUTPUT_DIR = PROJECT_ROOT / "models/local_bert_multi_intent"
+DEFAULT_BASE_MODEL = "hfl/chinese-macbert-base"
+SOCIAL_LABEL = "__social__"
+OUT_OF_SCOPE_LABEL = "__out_of_scope__"
+BLOCKED_LABELS = {SOCIAL_LABEL, OUT_OF_SCOPE_LABEL}
+MAX_LENGTH = 48
+BATCH_SIZE = 8
+EPOCHS = 12
+LEARNING_RATE = 2e-5
+THRESHOLD = 0.5
+TOP_K = 4
+SEED = 42
+
+CONNECTOR_VARIANTS: tuple[tuple[str, str], ...] = (
+ ("并", "然后"),
+ ("然后", "并"),
+ ("顺便", "再"),
+ ("再", "顺便"),
+)
+
+
+@dataclass(frozen=True)
+class MultiLabelSample:
+ text: str
+ intent_ids: tuple[str, ...]
+
+
+class MultiLabelIntentDataset(Dataset):
+ def __init__(
+ self,
+ samples: list[MultiLabelSample],
+ tokenizer,
+ label_to_id: dict[str, int],
+ ) -> None:
+ self._samples = samples
+ self._tokenizer = tokenizer
+ self._label_to_id = label_to_id
+ self._label_size = len(label_to_id)
+
+ def __len__(self) -> int:
+ return len(self._samples)
+
+ def __getitem__(self, index: int) -> dict[str, torch.Tensor]:
+ sample = self._samples[index]
+ encoded = self._tokenizer(
+ sample.text,
+ truncation=True,
+ padding="max_length",
+ max_length=MAX_LENGTH,
+ return_tensors="pt",
+ )
+ labels = torch.zeros(self._label_size, dtype=torch.float32)
+ for intent_id in sample.intent_ids:
+ labels[self._label_to_id[intent_id]] = 1.0
+ return {
+ "input_ids": encoded["input_ids"].squeeze(0),
+ "attention_mask": encoded["attention_mask"].squeeze(0),
+ "labels": labels,
+ }
+
+
+def set_seed(seed: int) -> None:
+ random.seed(seed)
+ torch.manual_seed(seed)
+ if torch.backends.mps.is_available():
+ torch.mps.manual_seed(seed)
+
+
+def resolve_base_model() -> str:
+ configured = os.getenv("AGENT_BERT_BASE_MODEL", "").strip()
+ if configured:
+ return configured
+ return DEFAULT_BASE_MODEL
+
+
+def normalize_text(text: str) -> str:
+ return " ".join(str(text).strip().split())
+
+
+def normalize_intent_ids(intent_ids: list[str] | tuple[str, ...]) -> tuple[str, ...]:
+ cleaned = sorted(
+ {
+ str(intent_id).strip()
+ for intent_id in intent_ids
+ if str(intent_id).strip() and str(intent_id).strip() not in BLOCKED_LABELS
+ }
+ )
+ return tuple(cleaned)
+
+
+def expand_single_label_variants(text: str) -> list[str]:
+ normalized = text.strip().strip(",。!?;; ")
+ if not normalized:
+ return []
+ variants = {
+ normalized,
+ normalized.replace("一下", "").strip(),
+ normalized.replace("帮我", "").strip(),
+ normalized.replace("请", "").strip(),
+ f"帮我{normalized}",
+ f"请{normalized}",
+ f"{normalized}一下",
+ }
+ cleaned: list[str] = []
+ for item in variants:
+ compact = " ".join(item.split()).strip(",。!?;; ")
+ if compact:
+ cleaned.append(compact)
+ return cleaned
+
+
+def load_single_label_samples(file_path: Path) -> list[MultiLabelSample]:
+ samples: list[MultiLabelSample] = []
+ if not file_path.exists():
+ return samples
+ for line in file_path.read_text(encoding="utf-8").splitlines():
+ line = line.strip()
+ if not line:
+ continue
+ payload = json.loads(line)
+ intent_ids = normalize_intent_ids([str(payload.get("intent_id") or "")])
+ if not intent_ids:
+ continue
+ text = normalize_text(str(payload.get("text") or ""))
+ if not text:
+ continue
+ samples.append(MultiLabelSample(text=text, intent_ids=intent_ids))
+ return samples
+
+
+def load_domain_samples(file_path: Path) -> list[MultiLabelSample]:
+ if not file_path.exists():
+ return []
+ payload = yaml.safe_load(file_path.read_text(encoding="utf-8")) or {}
+ intents = payload.get("intents", [])
+ samples: list[MultiLabelSample] = []
+ seen: set[tuple[str, tuple[str, ...]]] = set()
+ for item in intents:
+ intent_ids = normalize_intent_ids([str(item.get("intent_id") or "")])
+ if not intent_ids:
+ continue
+ seed_texts = list(item.get("examples") or [])
+ seed_texts.extend(item.get("keywords") or [])
+ label = str(item.get("label") or "").strip()
+ if label:
+ seed_texts.append(label)
+ for text in seed_texts:
+ normalized = normalize_text(text)
+ if not normalized:
+ continue
+ for variant in expand_single_label_variants(normalized):
+ key = (variant, intent_ids)
+ if key in seen:
+ continue
+ seen.add(key)
+ samples.append(MultiLabelSample(text=variant, intent_ids=intent_ids))
+ return samples
+
+
+def load_multilabel_samples(file_path: Path) -> list[MultiLabelSample]:
+ samples: list[MultiLabelSample] = []
+ if not file_path.exists():
+ return samples
+ for line in file_path.read_text(encoding="utf-8").splitlines():
+ line = line.strip()
+ if not line:
+ continue
+ payload = json.loads(line)
+ intent_ids = normalize_intent_ids(list(payload.get("intent_ids") or []))
+ if len(intent_ids) < 2:
+ continue
+ text = normalize_text(str(payload.get("text") or ""))
+ if not text:
+ continue
+ samples.append(MultiLabelSample(text=text, intent_ids=intent_ids))
+ return samples
+
+
+def augment_multilabel_samples(samples: list[MultiLabelSample]) -> list[MultiLabelSample]:
+ augmented = list(samples)
+ seen = {(sample.text, sample.intent_ids) for sample in augmented}
+ for sample in list(samples):
+ variants = {
+ sample.text,
+ f"帮我{sample.text}",
+ f"请{sample.text}",
+ sample.text.replace(",", ", "),
+ sample.text.replace(",", ""),
+ }
+ for source, target in CONNECTOR_VARIANTS:
+ if source in sample.text:
+ variants.add(sample.text.replace(source, target, 1))
+ for variant in variants:
+ normalized = normalize_text(variant).strip(",。!?;; ")
+ key = (normalized, sample.intent_ids)
+ if normalized and key not in seen:
+ augmented.append(MultiLabelSample(text=normalized, intent_ids=sample.intent_ids))
+ seen.add(key)
+ return augmented
+
+
+def load_all_samples() -> list[MultiLabelSample]:
+ samples = load_single_label_samples(SINGLE_LABEL_PATH)
+ samples.extend(load_domain_samples(DOMAIN_PATH))
+ samples.extend(augment_multilabel_samples(load_multilabel_samples(MULTI_LABEL_PATH)))
+ deduped: list[MultiLabelSample] = []
+ seen: set[tuple[str, tuple[str, ...]]] = set()
+ for sample in samples:
+ key = (sample.text, sample.intent_ids)
+ if key in seen:
+ continue
+ seen.add(key)
+ deduped.append(sample)
+ random.shuffle(deduped)
+ return deduped
+
+
+def split_samples(samples: list[MultiLabelSample]) -> tuple[list[MultiLabelSample], list[MultiLabelSample]]:
+ grouped: dict[tuple[str, ...], list[MultiLabelSample]] = {}
+ for sample in samples:
+ grouped.setdefault(sample.intent_ids, []).append(sample)
+ train_samples: list[MultiLabelSample] = []
+ dev_samples: list[MultiLabelSample] = []
+ for items in grouped.values():
+ random.shuffle(items)
+ if len(items) == 1:
+ train_samples.extend(items)
+ continue
+ cut = max(1, int(len(items) * 0.8))
+ if cut >= len(items):
+ cut = len(items) - 1
+ train_samples.extend(items[:cut])
+ dev_samples.extend(items[cut:])
+ if not dev_samples:
+ dev_samples = train_samples[-max(1, min(32, len(train_samples) // 5 or 1)) :]
+ train_samples = train_samples[: len(train_samples) - len(dev_samples)]
+ random.shuffle(train_samples)
+ random.shuffle(dev_samples)
+ return train_samples, dev_samples
+
+
+def logits_to_probabilities(logits: torch.Tensor) -> list[list[float]]:
+ return torch.sigmoid(logits).detach().cpu().tolist()
+
+
+def compute_metrics(
+ probabilities: list[list[float]],
+ targets: list[list[float]],
+ threshold: float,
+ top_k: int,
+) -> dict[str, float]:
+ true_positive = 0
+ false_positive = 0
+ false_negative = 0
+ exact_match = 0
+ recall_at_k_total = 0.0
+ total = len(probabilities)
+ for scores, target in zip(probabilities, targets):
+ predicted = {index for index, score in enumerate(scores) if score >= threshold}
+ expected = {index for index, value in enumerate(target) if value >= 0.5}
+ if predicted == expected:
+ exact_match += 1
+ true_positive += len(predicted & expected)
+ false_positive += len(predicted - expected)
+ false_negative += len(expected - predicted)
+ top_indices = sorted(range(len(scores)), key=lambda index: scores[index], reverse=True)[:top_k]
+ if expected:
+ recall_at_k_total += len(set(top_indices) & expected) / len(expected)
+ precision = true_positive / (true_positive + false_positive) if (true_positive + false_positive) else 0.0
+ recall = true_positive / (true_positive + false_negative) if (true_positive + false_negative) else 0.0
+ micro_f1 = (2 * precision * recall / (precision + recall)) if (precision + recall) else 0.0
+ return {
+ "micro_precision": round(precision, 4),
+ "micro_recall": round(recall, 4),
+ "micro_f1": round(micro_f1, 4),
+ "exact_match": round(exact_match / total, 4) if total else 0.0,
+ "recall_at_k": round(recall_at_k_total / total, 4) if total else 0.0,
+ }
+
+
+def evaluate(model, loader: DataLoader, device: torch.device, threshold: float, top_k: int) -> tuple[float, dict[str, float]]:
+ model.eval()
+ total_loss = 0.0
+ probabilities: list[list[float]] = []
+ targets: list[list[float]] = []
+ with torch.no_grad():
+ for batch in loader:
+ input_ids = batch["input_ids"].to(device)
+ attention_mask = batch["attention_mask"].to(device)
+ labels = batch["labels"].to(device)
+ outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels)
+ total_loss += float(outputs.loss.item())
+ probabilities.extend(logits_to_probabilities(outputs.logits))
+ targets.extend(labels.detach().cpu().tolist())
+ avg_loss = total_loss / max(len(loader), 1)
+ return avg_loss, compute_metrics(probabilities, targets, threshold=threshold, top_k=top_k)
+
+
+def main() -> None:
+ set_seed(SEED)
+ samples = load_all_samples()
+ intents = sorted({intent_id for sample in samples for intent_id in sample.intent_ids})
+ label_to_id = {intent_id: index for index, intent_id in enumerate(intents)}
+ id_to_label = {index: intent_id for intent_id, index in label_to_id.items()}
+
+ train_samples, dev_samples = split_samples(samples)
+ base_model = resolve_base_model()
+ tokenizer = AutoTokenizer.from_pretrained(base_model)
+ train_dataset = MultiLabelIntentDataset(train_samples, tokenizer, label_to_id)
+ dev_dataset = MultiLabelIntentDataset(dev_samples, tokenizer, label_to_id)
+
+ train_loader = DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)
+ dev_loader = DataLoader(dev_dataset, batch_size=BATCH_SIZE)
+
+ model = AutoModelForSequenceClassification.from_pretrained(
+ base_model,
+ num_labels=len(intents),
+ id2label=id_to_label,
+ label2id=label_to_id,
+ problem_type="multi_label_classification",
+ )
+
+ device = torch.device("mps" if torch.backends.mps.is_available() else "cpu")
+ model.to(device)
+ optimizer = torch.optim.AdamW(model.parameters(), lr=LEARNING_RATE)
+
+ best_dev_f1 = 0.0
+ best_state = None
+ best_metrics: dict[str, float] = {}
+
+ for epoch in range(1, EPOCHS + 1):
+ model.train()
+ total_loss = 0.0
+ for batch in train_loader:
+ optimizer.zero_grad()
+ input_ids = batch["input_ids"].to(device)
+ attention_mask = batch["attention_mask"].to(device)
+ labels = batch["labels"].to(device)
+ outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels)
+ loss = outputs.loss
+ loss.backward()
+ optimizer.step()
+ total_loss += float(loss.item())
+
+ dev_loss, dev_metrics = evaluate(model, dev_loader, device, threshold=THRESHOLD, top_k=TOP_K)
+ avg_loss = total_loss / max(len(train_loader), 1)
+ print(
+ " ".join(
+ [
+ f"epoch={epoch}",
+ f"train_loss={avg_loss:.4f}",
+ f"dev_loss={dev_loss:.4f}",
+ f"dev_micro_f1={dev_metrics['micro_f1']:.4f}",
+ f"dev_exact_match={dev_metrics['exact_match']:.4f}",
+ ]
+ )
+ )
+ if dev_metrics["micro_f1"] >= best_dev_f1:
+ best_dev_f1 = dev_metrics["micro_f1"]
+ best_metrics = dict(dev_metrics)
+ best_state = {key: value.detach().cpu().clone() for key, value in model.state_dict().items()}
+
+ if best_state is not None:
+ model.load_state_dict(best_state)
+
+ OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
+ model.save_pretrained(OUTPUT_DIR)
+ tokenizer.save_pretrained(OUTPUT_DIR)
+ label_map = {f"LABEL_{index}": intent_id for index, intent_id in id_to_label.items()}
+ (OUTPUT_DIR / "label_map.json").write_text(
+ json.dumps(label_map, ensure_ascii=False, indent=2),
+ encoding="utf-8",
+ )
+ train_summary = {
+ "task_type": "multi_label_intent_detection",
+ "base_model": base_model,
+ "epochs": EPOCHS,
+ "batch_size": BATCH_SIZE,
+ "learning_rate": LEARNING_RATE,
+ "threshold": THRESHOLD,
+ "top_k": TOP_K,
+ "train_size": len(train_samples),
+ "dev_size": len(dev_samples),
+ "label_count": len(intents),
+ "labels": intents,
+ "best_dev_metrics": best_metrics,
+ "device": str(device),
+ }
+ (OUTPUT_DIR / "train_summary.json").write_text(
+ json.dumps(train_summary, ensure_ascii=False, indent=2),
+ encoding="utf-8",
+ )
+ print(json.dumps(train_summary, ensure_ascii=False, indent=2))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/intelligent_cabin/archive/tests/test_agent_cloud_route.py b/intelligent_cabin/archive/tests/test_agent_cloud_route.py
new file mode 100644
index 0000000..7e44554
--- /dev/null
+++ b/intelligent_cabin/archive/tests/test_agent_cloud_route.py
@@ -0,0 +1,132 @@
+from __future__ import annotations
+
+import unittest
+
+from app.plugins.base import PluginRegistry
+from app.schemas.chat import ChatRequest
+from app.schemas.debug import IntentCandidate, MatcherStageDebug, RoutingDebug
+from app.schemas.intent import IntentDefinition
+from app.services.agent_service import AgentService
+from app.services.intent_registry import IntentRegistry
+from app.services.planner import PlanningResult
+from app.services.session_store import InMemorySessionStore
+
+
+class _RouteToCloudRouter:
+ def route(self, text: str):
+ _ = text
+ return type(
+ "RouteResult",
+ (),
+ {
+ "intent": None,
+ "debug": RoutingDebug(
+ selected_intent="cabin_nav_to",
+ matched_stage="fusion",
+ decision="route_to_cloud",
+ decision_reason="local signal is not stable enough, routing to cloud planner",
+ confidence_grade="low",
+ stages=[
+ MatcherStageDebug(
+ stage="fusion",
+ accepted=False,
+ selected_intent="cabin_nav_to",
+ score=0.88,
+ reason="route to cloud",
+ candidates=[
+ IntentCandidate(intent_id="cabin_nav_to", score=0.88, reason="fusion", model_name="fusion"),
+ IntentCandidate(intent_id="cabin_play_music", score=0.75, reason="fusion", model_name="fusion"),
+ ],
+ )
+ ],
+ ),
+ },
+ )()
+
+ def extract_slots(self, text: str, intent: IntentDefinition) -> dict[str, object]:
+ _ = (text, intent)
+ return {}
+
+
+class _PlannerRejects:
+ def plan(self, text: str, intents: list[IntentDefinition], context: dict[str, object] | None = None) -> PlanningResult:
+ _ = (text, intents, context)
+ return PlanningResult(
+ accepted=False,
+ workflow_type="single",
+ model_name="qwen3.5-plus",
+ backend="dashscope",
+ reason="cloud planner could not produce a stable executable step",
+ )
+
+
+class _PlannerOutOfScope:
+ def plan(self, text: str, intents: list[IntentDefinition], context: dict[str, object] | None = None) -> PlanningResult:
+ _ = (text, intents, context)
+ return PlanningResult(
+ accepted=False,
+ workflow_type="single",
+ model_name="qwen3.5-plus",
+ backend="dashscope",
+ reason="The provided intent catalog only contains cabin and service actions. There is no matching intent for ordering food via a third-party app action.",
+ )
+
+
+def _intent(intent_id: str) -> IntentDefinition:
+ return IntentDefinition(
+ intent_id=intent_id,
+ plugin_id=f"mock.{intent_id}",
+ domain="cabin",
+ keywords=[],
+ examples=[],
+ )
+
+
+class AgentCloudRouteTests(unittest.TestCase):
+ def test_route_to_cloud_returns_explicit_clarify_feedback_when_planner_does_not_accept(self) -> None:
+ service = AgentService(
+ intent_registry=IntentRegistry([_intent("cabin_nav_to"), _intent("cabin_play_music")]),
+ router=_RouteToCloudRouter(),
+ plugins=PluginRegistry(),
+ session_store=InMemorySessionStore(),
+ planner=_PlannerRejects(),
+ )
+
+ response = service.handle_chat(
+ ChatRequest(
+ session_id="sess_cloud_route",
+ user_id="user_1",
+ input_text="带我过去",
+ )
+ )
+
+ self.assertEqual(response.decision, "route_to_cloud")
+ self.assertEqual(response.reply_type, "clarify")
+ self.assertEqual(response.status, "route_to_cloud")
+ self.assertIn("请确认一下", response.reply_text)
+
+ def test_route_to_cloud_rejects_when_planner_marks_request_out_of_scope(self) -> None:
+ service = AgentService(
+ intent_registry=IntentRegistry([_intent("cabin_nav_to"), _intent("cabin_play_music")]),
+ router=_RouteToCloudRouter(),
+ plugins=PluginRegistry(),
+ session_store=InMemorySessionStore(),
+ planner=_PlannerOutOfScope(),
+ )
+
+ response = service.handle_chat(
+ ChatRequest(
+ session_id="sess_cloud_route_reject",
+ user_id="user_1",
+ input_text="去美团叫个外卖",
+ )
+ )
+
+ self.assertEqual(response.reply_type, "reject")
+ self.assertEqual(response.decision, "reject")
+ self.assertEqual(response.status, "rejected")
+ self.assertIn("做不了", response.reply_text)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/intelligent_cabin/archive/tests/test_bert.py b/intelligent_cabin/archive/tests/test_bert.py
new file mode 100644
index 0000000..fb70dba
--- /dev/null
+++ b/intelligent_cabin/archive/tests/test_bert.py
@@ -0,0 +1,235 @@
+from __future__ import annotations
+
+import argparse
+import json
+import sys
+from pathlib import Path
+
+PROJECT_ROOT = Path(__file__).resolve().parents[1]
+if str(PROJECT_ROOT) not in sys.path:
+ sys.path.insert(0, str(PROJECT_ROOT))
+
+from app.core.config import settings
+from app.core.bootstrap import build_intent_registry
+from app.services.classifier import BertIntentClassifier
+from app.services.router import build_matcher_pipeline
+
+
+DEFAULT_MODEL_DIR = PROJECT_ROOT / "models" / "local_bert_intent"
+NON_BUSINESS_LABELS = {"__social__", "__out_of_scope__"}
+
+
+def resolve_model_path(model_path: str) -> Path:
+ configured = (model_path or settings.classifier_model_path).strip()
+ if configured:
+ return Path(configured)
+ return DEFAULT_MODEL_DIR
+
+
+def resolve_label_map_path(label_map_path: str, model_path: Path) -> Path:
+ configured = (label_map_path or settings.classifier_label_map_path).strip()
+ if configured:
+ return Path(configured)
+ return model_path / "label_map.json"
+
+
+def build_classifier(
+ *,
+ model_path: Path,
+ label_map_path: Path,
+ threshold: float,
+ top_k: int,
+) -> BertIntentClassifier:
+ return BertIntentClassifier(
+ model_path=str(model_path),
+ threshold=threshold,
+ label_map_path=str(label_map_path),
+ fallback=None,
+ top_k=top_k,
+ )
+
+
+def predict_once(
+ text: str,
+ *,
+ model_path: Path,
+ label_map_path: Path,
+ threshold: float,
+ top_k: int,
+ warmup: bool,
+) -> dict[str, object]:
+ registry = build_intent_registry()
+ classifier = build_classifier(
+ model_path=model_path,
+ label_map_path=label_map_path,
+ threshold=threshold,
+ top_k=top_k,
+ )
+ warmup_ok = None
+ if warmup:
+ warmup_ok = classifier.warmup(settings.classifier_warmup_text)
+ if not warmup_ok:
+ error_message = getattr(classifier, "_warmup_error_message", None) or "BERT warmup failed"
+ raise RuntimeError(error_message)
+
+ intents = registry.list()
+ result = classifier.predict(text, intents)
+ matcher = build_matcher_pipeline(
+ registry,
+ ["classifier"],
+ classifier=classifier,
+ route_to_cloud_threshold=settings.local_route_to_cloud_threshold,
+ clarify_margin_threshold=settings.local_clarify_margin_threshold,
+ classifier_execute_score_threshold=settings.local_classifier_execute_score_threshold,
+ classifier_execute_margin_threshold=settings.local_classifier_execute_margin_threshold,
+ )
+ route_result = matcher.match(text)
+ fusion_stage = next((stage for stage in reversed(route_result.debug.stages) if stage.stage == "fusion"), None)
+ classifier_stage = next((stage for stage in reversed(route_result.debug.stages) if stage.stage == "classifier"), None)
+
+ return {
+ "text": text,
+ "config": {
+ "model_path": str(model_path),
+ "label_map_path": str(label_map_path),
+ "threshold": threshold,
+ "top_k": top_k,
+ "warmup_requested": warmup,
+ "warmup_ok": warmup_ok,
+ "warmup_elapsed_ms": getattr(classifier, "_warmup_elapsed_ms", None),
+ "warmup_error_message": getattr(classifier, "_warmup_error_message", None),
+ },
+ "classifier_result": {
+ "predicted_intent": result.intent.intent_id if result.intent is not None else None,
+ "score": round(result.score, 4),
+ "model_name": result.model_name,
+ "backend_name": result.backend_name,
+ "used_fallback": result.used_fallback,
+ "fallback_reason": result.fallback_reason,
+ "error_message": result.error_message,
+ "raw_label": result.raw_label,
+ "raw_candidates": result.raw_candidates or [],
+ "known_candidates": [
+ {"intent_id": intent.intent_id, "score": round(score, 4)}
+ for intent, score in (result.candidates or [])
+ ],
+ },
+ "route_result": {
+ "decision": route_result.debug.decision,
+ "decision_reason": route_result.debug.decision_reason,
+ "matched_stage": route_result.debug.matched_stage,
+ "selected_intent": route_result.debug.selected_intent,
+ "confidence_grade": route_result.debug.confidence_grade,
+ "unknown_detected": route_result.debug.unknown_detected,
+ "classifier_score": round(classifier_stage.score, 4) if classifier_stage is not None else None,
+ "fusion_score": round(fusion_stage.score, 4) if fusion_stage is not None else None,
+ },
+ }
+
+
+def summarize_business_view(result: dict[str, object]) -> dict[str, object]:
+ classifier_result = dict(result.get("classifier_result") or {})
+ route_result = dict(result.get("route_result") or {})
+ predicted_intent = classifier_result.get("predicted_intent")
+ raw_label = classifier_result.get("raw_label")
+ effective_label = raw_label if raw_label in NON_BUSINESS_LABELS else predicted_intent
+ if effective_label in NON_BUSINESS_LABELS:
+ classifier_result["predicted_intent"] = None
+ classifier_result["non_business_label"] = effective_label
+ classifier_result["business_interpretation"] = "non_business_label_detected"
+ route_result["selected_intent"] = None
+ route_result["decision"] = "reject"
+ route_result["decision_reason"] = "classifier detected a non-business label"
+ route_result["unknown_detected"] = True
+ else:
+ classifier_result["non_business_label"] = None
+ classifier_result["business_interpretation"] = "known_business_intent_or_uncertain"
+ return {
+ "text": result.get("text"),
+ "config": result.get("config"),
+ "classifier_result": classifier_result,
+ "route_result": route_result,
+ }
+
+
+def interactive_loop(
+ *,
+ model_path: Path,
+ label_map_path: Path,
+ threshold: float,
+ top_k: int,
+ warmup: bool,
+ mode: str,
+) -> None:
+ print("当前 BERT 测试已启动,输入一句话直接查看预测结果,输入 exit 退出。")
+ print(f"model_path={model_path}")
+ print(f"label_map_path={label_map_path}")
+ print(f"threshold={threshold} top_k={top_k} warmup={warmup} mode={mode}")
+ while True:
+ try:
+ text = input("\n请输入问题> ").strip()
+ except EOFError:
+ print()
+ break
+ if not text:
+ continue
+ if text.lower() in {"exit", "quit", "q"}:
+ break
+ result = predict_once(
+ text,
+ model_path=model_path,
+ label_map_path=label_map_path,
+ threshold=threshold,
+ top_k=top_k,
+ warmup=warmup,
+ )
+ if mode == "business":
+ result = summarize_business_view(result)
+ print(json.dumps(result, ensure_ascii=False, indent=2))
+
+
+def main() -> None:
+ parser = argparse.ArgumentParser(description="当前项目 BERT 意图识别测试脚本")
+ parser.add_argument("--text", type=str, default="", help="单次测试文本")
+ parser.add_argument("--threshold", type=float, default=settings.classifier_bert_threshold, help="BERT 置信度阈值")
+ parser.add_argument("--top-k", type=int, default=settings.classifier_top_k, help="返回候选数量")
+ parser.add_argument("--model-path", type=str, default="", help="模型目录,默认取 .env 或 models/local_bert_intent")
+ parser.add_argument("--label-map-path", type=str, default="", help="标签映射文件,默认取 .env 或 model_path/label_map.json")
+ parser.add_argument("--warmup", action="store_true", help="先执行一次 warmup 再预测")
+ parser.add_argument(
+ "--mode",
+ choices=("classifier", "business"),
+ default="classifier",
+ help="classifier 显示原始分类结果;business 会把非业务标签折叠成未命中业务意图",
+ )
+ args = parser.parse_args()
+
+ model_path = resolve_model_path(args.model_path)
+ label_map_path = resolve_label_map_path(args.label_map_path, model_path)
+
+ if args.text.strip():
+ result = predict_once(
+ args.text.strip(),
+ model_path=model_path,
+ label_map_path=label_map_path,
+ threshold=args.threshold,
+ top_k=args.top_k,
+ warmup=args.warmup,
+ )
+ if args.mode == "business":
+ result = summarize_business_view(result)
+ print(json.dumps(result, ensure_ascii=False, indent=2))
+ return
+
+ interactive_loop(
+ model_path=model_path,
+ label_map_path=label_map_path,
+ threshold=args.threshold,
+ top_k=args.top_k,
+ warmup=args.warmup,
+ mode=args.mode,
+ )
+
+
+if __name__ == "__main__":
+ main()
diff --git a/intelligent_cabin/archive/tests/test_chat_stream.py b/intelligent_cabin/archive/tests/test_chat_stream.py
new file mode 100644
index 0000000..6a8bf6c
--- /dev/null
+++ b/intelligent_cabin/archive/tests/test_chat_stream.py
@@ -0,0 +1,109 @@
+from __future__ import annotations
+
+import json
+import os
+import time
+import unittest
+from unittest.mock import patch
+
+from fastapi.testclient import TestClient
+
+os.environ["AGENT_CLASSIFIER_BACKEND"] = "mock"
+os.environ["AGENT_CLASSIFIER_WARMUP_ENABLED"] = "false"
+
+from app.main import app
+from app.schemas.chat import ChatResponse
+
+
+def _fake_response() -> ChatResponse:
+ return ChatResponse(
+ session_id="sess_stream_1",
+ reply_type="workflow_result",
+ reply_text="好,空调已经打开了。",
+ intent="cabin_ac_on",
+ status="completed",
+ trace_id="trace_stream_1",
+ )
+
+
+class ChatStreamTests(unittest.TestCase):
+ def test_chat_stream_returns_final_only_when_fast(self) -> None:
+ client = TestClient(app)
+ with patch("app.main.agent_service.handle_chat", return_value=_fake_response()):
+ response = client.post(
+ "/api/v1/agent/chat-stream",
+ json={
+ "session_id": "sess_stream_1",
+ "user_id": "user_stream_1",
+ "channel": "test",
+ "input_text": "打开车窗",
+ "input_type": "text",
+ },
+ )
+
+ self.assertEqual(response.status_code, 200)
+ lines = [line.strip() for line in response.text.splitlines() if line.strip()]
+ self.assertEqual(len(lines), 1)
+ final_event = json.loads(lines[0])
+ self.assertEqual(final_event.get("type"), "final")
+
+ def test_chat_stream_returns_ack_then_final_when_slow_request(self) -> None:
+ client = TestClient(app)
+
+ def _slow_handle_chat(_request):
+ time.sleep(1.2)
+ return _fake_response()
+
+ with patch("app.main.agent_service.handle_chat", side_effect=_slow_handle_chat):
+ response = client.post(
+ "/api/v1/agent/chat-stream",
+ json={
+ "session_id": "sess_stream_1",
+ "user_id": "user_stream_1",
+ "channel": "test",
+ "input_text": "打开车窗",
+ "input_type": "text",
+ },
+ )
+
+ self.assertEqual(response.status_code, 200)
+ lines = [line.strip() for line in response.text.splitlines() if line.strip()]
+ self.assertGreaterEqual(len(lines), 2)
+
+ ack_event = json.loads(lines[0])
+ final_event = json.loads(lines[-1])
+ self.assertEqual(ack_event.get("type"), "ack")
+ self.assertEqual(final_event.get("type"), "final")
+ self.assertIn("data", final_event)
+ self.assertIn("reply_text", final_event["data"])
+
+ def test_chat_stream_returns_ack_then_final_when_slow_social_request(self) -> None:
+ client = TestClient(app)
+
+ def _slow_handle_chat(_request):
+ time.sleep(1.2)
+ return _fake_response()
+
+ with patch("app.main.agent_service.handle_chat", side_effect=_slow_handle_chat):
+ response = client.post(
+ "/api/v1/agent/chat-stream",
+ json={
+ "session_id": "sess_stream_1",
+ "user_id": "user_stream_1",
+ "channel": "test",
+ "input_text": "今天天气如何",
+ "input_type": "text",
+ },
+ )
+
+ self.assertEqual(response.status_code, 200)
+ lines = [line.strip() for line in response.text.splitlines() if line.strip()]
+ self.assertGreaterEqual(len(lines), 2)
+ ack_event = json.loads(lines[0])
+ final_event = json.loads(lines[-1])
+ self.assertEqual(ack_event.get("type"), "ack")
+ self.assertEqual(final_event.get("type"), "final")
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/intelligent_cabin/archive/tests/test_config_loader.py b/intelligent_cabin/archive/tests/test_config_loader.py
new file mode 100644
index 0000000..a318153
--- /dev/null
+++ b/intelligent_cabin/archive/tests/test_config_loader.py
@@ -0,0 +1,90 @@
+from __future__ import annotations
+
+import unittest
+from unittest.mock import patch
+
+from app.core.bootstrap import build_planner, load_runtime_bundle
+from app.core.config import settings
+from app.services.planner import CompositeWorkflowPlanner
+from app.services.config_loader import ConfigLoader
+from app.services.dialog_rules import DialogRuleEngine
+from app.services.response_policy import ResponsePolicy
+
+
+class ConfigLoaderTests(unittest.TestCase):
+ def test_loader_reads_domain_actions_and_responses(self) -> None:
+ bundle = ConfigLoader(
+ domain_path="config/domain.yml",
+ action_path="config/actions.yml",
+ response_path="config/responses.yml",
+ form_path="config/forms.yml",
+ rule_path="config/rules.yml",
+ dialog_act_path="config/dialog_acts.yml",
+ workflow_path="config/workflows.yml",
+ legacy_intent_path="app/data/intents.json",
+ ).load()
+
+ self.assertGreaterEqual(len(bundle.intent_registry.list()), 30)
+ self.assertEqual(bundle.intent_registry.get("cabin_window_open").plugin_id, "plugin.cabin.window.open")
+ self.assertEqual(bundle.intent_hints.get("cabin_window_open"), "打开车窗")
+ self.assertEqual(bundle.response_templates.get("task_stopped"), "好的,已停止当前任务。")
+ self.assertEqual(bundle.intent_registry.get("cabin_set_ac").required_slots, ["temperature"])
+ self.assertTrue(bundle.dialog_rules.is_stop_request("先不要了"))
+ self.assertEqual(bundle.dialog_rules.parse_confirmation_decision("确认"), True)
+ self.assertEqual(bundle.dialog_act_engine.detect("你好"), "chitchat")
+ self.assertGreaterEqual(len(bundle.workflow_templates.templates), 2)
+
+ def test_bootstrap_runtime_bundle_is_available(self) -> None:
+ bundle = load_runtime_bundle()
+
+ self.assertGreaterEqual(len(bundle.intent_registry.list()), 30)
+ self.assertIn("fallback", bundle.response_templates)
+ self.assertEqual(bundle.dialog_act_engine.detect("确认"), "affirm")
+
+ def test_response_policy_can_be_driven_by_config_templates(self) -> None:
+ policy = ResponsePolicy(
+ templates={"reject": "这个能力暂未开通。"},
+ intent_hints={"cabin_window_open": "开车窗"},
+ )
+
+ self.assertEqual(policy.reject(), "这个能力暂未开通。")
+ self.assertEqual(policy.clarify(["cabin_window_open"]), "请确认一下,你是想开车窗吗?")
+
+ def test_response_policy_formats_multi_step_summary_naturally(self) -> None:
+ policy = ResponsePolicy()
+
+ summary = policy.workflow_summary(["好的,已打开空调。", "已将空调调到 20 度。"])
+
+ self.assertEqual(summary, "好,空调已经打开了,也调到 20 度了。")
+
+ def test_response_policy_formats_multi_step_summary_in_vehicle_style(self) -> None:
+ policy = ResponsePolicy()
+
+ summary = policy.workflow_summary(["好的,已打开空调。", "好的,已关闭车窗。"])
+
+ self.assertEqual(summary, "好,空调已经打开了,车窗也帮你关上了。")
+
+ def test_build_planner_prefers_local_planners_before_cloud(self) -> None:
+ with patch.object(settings, "planner_backend", "dashscope"):
+ planner = build_planner()
+
+ self.assertIsInstance(planner, CompositeWorkflowPlanner)
+ self.assertIsInstance(planner._planners[0], CompositeWorkflowPlanner)
+
+ def test_dialog_rule_engine_supports_configured_confirmation_and_stop(self) -> None:
+ rules = DialogRuleEngine(
+ stop_phrases=("先不用了",),
+ positive_confirmation_tokens=("好,继续",),
+ negative_confirmation_tokens=("取消吧",),
+ confirmation_required_intents=("foo",),
+ confirmation_required_risk_levels=("high",),
+ )
+
+ self.assertTrue(rules.is_stop_request("先不用了"))
+ self.assertTrue(rules.parse_confirmation_decision("好,继续"))
+ self.assertFalse(rules.parse_confirmation_decision("取消吧"))
+ self.assertTrue(rules.requires_confirmation("foo", "low"))
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/intelligent_cabin/archive/tests/test_dialog_continuation_and_multi_intent.py b/intelligent_cabin/archive/tests/test_dialog_continuation_and_multi_intent.py
new file mode 100644
index 0000000..50a951c
--- /dev/null
+++ b/intelligent_cabin/archive/tests/test_dialog_continuation_and_multi_intent.py
@@ -0,0 +1,202 @@
+from __future__ import annotations
+
+import unittest
+
+from app.plugins.base import PluginRegistry
+from app.plugins.mock import MockPluginExecutor
+from app.schemas.chat import ChatRequest
+from app.schemas.debug import IntentCandidate, MatcherStageDebug, RoutingDebug
+from app.schemas.workflow import Workflow, WorkflowStep
+from app.services.agent_service import AgentService
+from app.services.intent_registry import IntentRegistry
+from app.services.planner import HeuristicWorkflowPlanner
+from app.services.response_policy import ResponsePolicy
+from app.services.rewrite_engine import ContextRewriteEngine
+from app.services.router import RouteMatchResult
+from app.services.session_store import InMemorySessionStore
+
+
+class _FailIfCalledPlanner:
+ def plan(self, text, intents, context=None):
+ _ = (intents, context)
+ raise AssertionError(f"planner should not be called for single intent request: {text}")
+
+
+class _ScriptedRouter:
+ def __init__(self, registry: IntentRegistry) -> None:
+ self._registry = registry
+ self._route_map = {
+ "来点music": self._route_result("cabin_play_music", ["cabin_play_music"]),
+ "打开车窗和空调": self._route_result("cabin_window_open", ["cabin_window_open", "cabin_ac_on"]),
+ "关闭车窗": self._route_result("cabin_window_close", ["cabin_window_close", "cabin_window_open"]),
+ }
+ self._slot_map = {
+ ("播放黄昏", "cabin_play_music"): {"song": "黄昏"},
+ ("来一首黄昏", "cabin_play_music"): {"song": "黄昏"},
+ ("来点黄昏", "cabin_play_music"): {"song": "黄昏"},
+ }
+
+ def route(self, text: str) -> RouteMatchResult:
+ if text not in self._route_map:
+ raise AssertionError(f"unexpected route request: {text}")
+ return self._route_map[text]
+
+ def extract_slots(self, text: str, intent) -> dict[str, object]:
+ return dict(self._slot_map.get((text, intent.intent_id), {}))
+
+ def _route_result(self, selected_intent: str, candidates: list[str]) -> RouteMatchResult:
+ intent = self._registry.get(selected_intent)
+ stage = MatcherStageDebug(
+ stage="fusion",
+ accepted=True,
+ selected_intent=selected_intent,
+ score=1.0,
+ candidates=[
+ IntentCandidate(intent_id=intent_id, score=max(0.5, 1.0 - index * 0.1))
+ for index, intent_id in enumerate(candidates)
+ ],
+ )
+ return RouteMatchResult(
+ intent=intent,
+ debug=RoutingDebug(
+ selected_intent=selected_intent,
+ matched_stage="fusion",
+ decision="execute",
+ stages=[stage],
+ ),
+ )
+
+
+class DialogContinuationAndMultiIntentTests(unittest.TestCase):
+ def setUp(self) -> None:
+ self.registry = IntentRegistry.from_json("app/data/intents.json")
+ self.plugins = PluginRegistry()
+ MockPluginExecutor().register(self.plugins)
+ self.service = AgentService(
+ intent_registry=self.registry,
+ router=_ScriptedRouter(self.registry),
+ plugins=self.plugins,
+ session_store=InMemorySessionStore(),
+ rewrite_engine=ContextRewriteEngine(),
+ response_policy=ResponsePolicy(),
+ planner=HeuristicWorkflowPlanner(),
+ )
+
+ def test_music_followup_in_chat_continues_waiting_slot(self) -> None:
+ first = self.service.handle_chat(
+ ChatRequest(
+ session_id="sess_music_followup",
+ user_id="user_1",
+ input_text="来点music",
+ )
+ )
+
+ self.assertEqual(first.reply_type, "ask_slot")
+ self.assertEqual(first.pending_slots, ["media_query"])
+
+ second = self.service.handle_chat(
+ ChatRequest(
+ session_id="sess_music_followup",
+ user_id="user_1",
+ input_text="黄昏",
+ )
+ )
+
+ self.assertEqual(second.reply_type, "workflow_result")
+ self.assertEqual(second.intent, "cabin_play_music")
+ self.assertEqual(second.filled_slots.get("song"), "黄昏")
+ self.assertIn("黄昏", second.reply_text)
+
+ def test_parallel_compound_request_enters_planner(self) -> None:
+ response = self.service.handle_chat(
+ ChatRequest(
+ session_id="sess_parallel_compound",
+ user_id="user_1",
+ input_text="打开车窗和空调",
+ )
+ )
+
+ self.assertEqual(response.reply_type, "workflow_result")
+ self.assertEqual(response.workflow.workflow_type, "sequence")
+ step_intents = [step.intent_id for step in response.workflow.steps]
+ self.assertEqual(step_intents, ["cabin_window_open", "cabin_ac_on"])
+ self.assertIn("车窗", response.reply_text)
+ self.assertIn("空调", response.reply_text)
+
+ def test_single_cabin_intent_does_not_enter_planner_from_top2_domain_candidates(self) -> None:
+ service = AgentService(
+ intent_registry=self.registry,
+ router=_ScriptedRouter(self.registry),
+ plugins=self.plugins,
+ session_store=InMemorySessionStore(),
+ rewrite_engine=ContextRewriteEngine(),
+ response_policy=ResponsePolicy(),
+ planner=_FailIfCalledPlanner(),
+ )
+
+ response = service.handle_chat(
+ ChatRequest(
+ session_id="sess_single_cabin_no_planner",
+ user_id="user_1",
+ input_text="关闭车窗",
+ )
+ )
+
+ self.assertEqual(response.reply_type, "workflow_result")
+ self.assertEqual(response.intent, "cabin_window_close")
+ self.assertEqual(response.routing_debug.decision, "execute")
+ self.assertFalse(any(stage.stage == "planner" for stage in response.routing_debug.stages))
+
+ def test_waiting_confirmation_can_continue_via_chat(self) -> None:
+ session = self.service.session_store.get_or_create("sess_confirm_chat", "user_1")
+ session.current_intent = "cs_cancel_order"
+ session.status = "waiting_confirmation"
+ session.pending_slots = ["confirmation"]
+ session.slots = {"order_id": "A123456"}
+ session.workflow = Workflow(
+ workflow_id="wf_confirm_chat",
+ workflow_type="conditional",
+ domain="customer_service",
+ intent_id="cs_cancel_order",
+ status="waiting_confirmation",
+ risk_level="high",
+ slots={"order_id": "A123456"},
+ steps=[
+ WorkflowStep(
+ step=1,
+ step_id="step_cancel",
+ intent_id="cs_cancel_order",
+ plugin_id="plugin.order.cancel",
+ action="cancel_order",
+ status="waiting_confirmation",
+ slots={"order_id": "A123456"},
+ requires_confirmation=True,
+ )
+ ],
+ meta={
+ "pending_confirmation": {
+ "step_id": "step_cancel",
+ "intent_id": "cs_cancel_order",
+ "detail": "确认取消订单 A123456",
+ },
+ "step_results": {},
+ "confirmed_steps": [],
+ },
+ ).model_dump()
+ self.service.session_store.save(session)
+
+ response = self.service.handle_chat(
+ ChatRequest(
+ session_id="sess_confirm_chat",
+ user_id="user_1",
+ input_text="确认",
+ )
+ )
+
+ self.assertEqual(response.reply_type, "workflow_result")
+ self.assertEqual(response.status, "completed")
+ self.assertIn("A123456", response.reply_text)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/intelligent_cabin/archive/tests/test_intent_coverage_and_stop.py b/intelligent_cabin/archive/tests/test_intent_coverage_and_stop.py
new file mode 100644
index 0000000..ff0020b
--- /dev/null
+++ b/intelligent_cabin/archive/tests/test_intent_coverage_and_stop.py
@@ -0,0 +1,149 @@
+from __future__ import annotations
+
+import unittest
+
+from app.plugins.base import PluginRegistry
+from app.plugins.mock import MockPluginExecutor
+from app.services.classifier import MockIntentClassifier
+from app.services.agent_service import AgentService
+from app.services.intent_registry import IntentRegistry
+from app.services.response_policy import ResponsePolicy
+from app.services.rewrite_engine import ContextRewriteEngine
+from app.services.router import HeuristicSlotExtractor, IntentRouter, build_matcher_pipeline
+from app.services.session_store import InMemorySessionStore
+from app.schemas.chat import ChatRequest, FillSlotsRequest
+
+
+class _BertLikeMockClassifier(MockIntentClassifier):
+ def predict(self, text, intents):
+ result = super().predict(text, intents)
+ result.model_name = "bert-local"
+ result.backend_name = "bert-local"
+ return result
+
+
+def _build_service() -> AgentService:
+ registry = IntentRegistry.from_json("app/data/intents.json")
+ plugins = PluginRegistry()
+ MockPluginExecutor().register(plugins)
+ router = IntentRouter(
+ matcher=build_matcher_pipeline(
+ registry,
+ ["classifier"],
+ classifier=_BertLikeMockClassifier(threshold=0.0, top_k=3),
+ ),
+ slot_extractor=HeuristicSlotExtractor(),
+ )
+ return AgentService(
+ intent_registry=registry,
+ router=router,
+ plugins=plugins,
+ session_store=InMemorySessionStore(),
+ rewrite_engine=ContextRewriteEngine(),
+ response_policy=ResponsePolicy(),
+ planner=None,
+ )
+
+
+class IntentCoverageAndStopTests(unittest.TestCase):
+ def setUp(self) -> None:
+ self.service = _build_service()
+ self.registry = IntentRegistry.from_json("app/data/intents.json")
+
+ def test_intent_catalog_has_at_least_30_items(self) -> None:
+ self.assertGreaterEqual(len(self.registry.list()), 30)
+
+ def test_close_ac_routes_to_power_off(self) -> None:
+ response = self.service.handle_chat(
+ ChatRequest(
+ session_id="sess_close_ac",
+ user_id="user_1",
+ input_text="关闭空调",
+ )
+ )
+
+ self.assertEqual(response.reply_type, "workflow_result")
+ self.assertEqual(response.intent, "cabin_ac_off")
+ self.assertIn("已关闭空调", response.reply_text)
+
+ def test_open_window_is_covered(self) -> None:
+ response = self.service.handle_chat(
+ ChatRequest(
+ session_id="sess_window_open",
+ user_id="user_1",
+ input_text="打开车窗",
+ )
+ )
+
+ self.assertEqual(response.reply_type, "workflow_result")
+ self.assertEqual(response.intent, "cabin_window_open")
+ self.assertIn("已打开车窗", response.reply_text)
+
+ def test_stop_current_task_while_waiting_for_slot(self) -> None:
+ first = self.service.handle_chat(
+ ChatRequest(
+ session_id="sess_stop_task",
+ user_id="user_1",
+ input_text="空调调到",
+ )
+ )
+ self.assertEqual(first.reply_type, "ask_slot")
+ self.assertEqual(first.pending_slots, ["temperature"])
+
+ stopped = self.service.handle_fill_slots(
+ FillSlotsRequest(
+ session_id="sess_stop_task",
+ user_id="user_1",
+ input_text="不用了",
+ )
+ )
+
+ self.assertEqual(stopped.reply_type, "text")
+ self.assertEqual(stopped.status, "stopped")
+ self.assertEqual(stopped.pending_slots, [])
+ self.assertIn("已停止当前任务", stopped.reply_text)
+
+ def test_relative_ac_adjustment_uses_two_degree_step(self) -> None:
+ session = self.service.session_store.get_or_create("sess_ac_lower", "user_1")
+ session.current_intent = "cabin_set_ac"
+ session.context_memory["last_temperature"] = 24
+ self.service.session_store.save(session)
+
+ response = self.service.handle_chat(
+ ChatRequest(
+ session_id="sess_ac_lower",
+ user_id="user_1",
+ input_text="调低一点",
+ )
+ )
+
+ self.assertEqual(response.reply_type, "workflow_result")
+ self.assertEqual(response.intent, "cabin_set_ac")
+ self.assertEqual(response.filled_slots.get("temperature"), 22)
+ self.assertIn("22", response.reply_text)
+
+ def test_relative_ac_adjustment_without_history_uses_default_baseline(self) -> None:
+ session = self.service.session_store.get_or_create("sess_ac_lower_default", "user_1")
+ session.current_intent = "cabin_ac_on"
+ self.service.session_store.save(session)
+
+ response = self.service.handle_chat(
+ ChatRequest(
+ session_id="sess_ac_lower_default",
+ user_id="user_1",
+ input_text="调低一点",
+ )
+ )
+
+ self.assertEqual(response.reply_type, "workflow_result")
+ self.assertEqual(response.intent, "cabin_set_ac")
+ self.assertEqual(response.filled_slots.get("temperature"), 22)
+ self.assertIn("22", response.reply_text)
+
+ def test_temperature_is_clamped_before_execution(self) -> None:
+ self.assertEqual(self.service._normalize_temperature_value(-1), 16)
+ self.assertEqual(self.service._normalize_temperature_value(40), 30)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/intelligent_cabin/archive/tests/test_joint_nlu_integration.py b/intelligent_cabin/archive/tests/test_joint_nlu_integration.py
new file mode 100644
index 0000000..86a83ee
--- /dev/null
+++ b/intelligent_cabin/archive/tests/test_joint_nlu_integration.py
@@ -0,0 +1,93 @@
+from __future__ import annotations
+
+import unittest
+
+from app.schemas.intent import IntentDefinition
+from app.services.classifier import JointBertIntentClassifier
+from app.services.planner import HeuristicWorkflowPlanner
+from app.services.router import JointBertSlotExtractor
+
+
+class FakeJointNLU:
+ def __init__(self) -> None:
+ self._predictions = {
+ "把空调调到22度": {
+ "intent_id": "cabin_set_ac",
+ "intent_score": 0.93,
+ "candidates": [("cabin_set_ac", 0.93), ("cabin_ac_on", 0.04)],
+ "slots": {"temperature": 22},
+ },
+ "导航去公司,然后把空调调到22度": {
+ "intent_id": "cabin_nav_to",
+ "intent_score": 0.88,
+ "candidates": [("cabin_nav_to", 0.88), ("cabin_set_ac", 0.72)],
+ "slots": {"destination": "公司"},
+ },
+ }
+ self._slot_predictions = {
+ ("把空调调到22度", "cabin_set_ac"): {"temperature": 22},
+ ("导航去公司", "cabin_nav_to"): {"destination": "公司"},
+ ("把空调调到22度", "cabin_set_ac"): {"temperature": 22},
+ }
+
+ def warmup(self, sample_text: str = "打开车窗") -> bool:
+ _ = sample_text
+ return True
+
+ def predict(self, text: str, intents: list[IntentDefinition]):
+ from app.services.joint_nlu import JointCandidate, JointNluResult
+
+ raw = self._predictions[text]
+ candidates = [JointCandidate(intent_id=intent_id, score=score) for intent_id, score in raw["candidates"]]
+ return JointNluResult(
+ intent_id=raw["intent_id"],
+ intent_score=raw["intent_score"],
+ candidates=candidates,
+ slots=dict(raw["slots"]),
+ )
+
+ def extract_slots(self, text: str, intent: IntentDefinition):
+ return dict(self._slot_predictions.get((text, intent.intent_id), {}))
+
+ def extract_slots_by_intent_id(self, text: str, intent_id: str, required_slots=None):
+ _ = required_slots
+ return dict(self._slot_predictions.get((text, intent_id), {}))
+
+
+class JointNLUIntegrationTests(unittest.TestCase):
+ def setUp(self) -> None:
+ self.intents = [
+ IntentDefinition(intent_id="cabin_set_ac", plugin_id="x", domain="cabin", required_slots=["temperature"]),
+ IntentDefinition(intent_id="cabin_nav_to", plugin_id="x", domain="cabin", required_slots=["destination"]),
+ IntentDefinition(intent_id="cabin_ac_on", plugin_id="x", domain="cabin"),
+ ]
+ self.fake_nlu = FakeJointNLU()
+
+ def test_joint_classifier_uses_joint_nlu_intent_head(self) -> None:
+ classifier = JointBertIntentClassifier(self.fake_nlu, threshold=0.3, top_k=2)
+
+ result = classifier.predict("把空调调到22度", self.intents)
+
+ self.assertIsNotNone(result.intent)
+ self.assertEqual(result.intent.intent_id, "cabin_set_ac")
+ self.assertEqual(result.raw_candidates[0]["intent_id"], "cabin_set_ac")
+
+ def test_joint_slot_extractor_uses_joint_nlu_slots(self) -> None:
+ extractor = JointBertSlotExtractor(self.fake_nlu)
+
+ slots = extractor.extract("把空调调到22度", self.intents[0])
+
+ self.assertEqual(slots, {"temperature": 22})
+
+ def test_planner_prefers_joint_nlu_slots_for_each_clause(self) -> None:
+ planner = HeuristicWorkflowPlanner(joint_nlu=self.fake_nlu)
+
+ result = planner.plan("导航去公司,然后把空调调到22度", self.intents)
+
+ self.assertTrue(result.accepted)
+ self.assertEqual(result.steps[0].slots, {"destination": "公司"})
+ self.assertEqual(result.steps[1].slots, {"temperature": 22})
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/intelligent_cabin/archive/tests/test_multi_intent_detector.py b/intelligent_cabin/archive/tests/test_multi_intent_detector.py
new file mode 100644
index 0000000..40e5684
--- /dev/null
+++ b/intelligent_cabin/archive/tests/test_multi_intent_detector.py
@@ -0,0 +1,144 @@
+from __future__ import annotations
+
+import unittest
+
+import torch
+
+from app.schemas.intent import IntentDefinition
+from app.services.multi_intent_detector import BertMultiIntentDetector, JointBertMultiIntentDetector
+
+
+class FakeTokenizer:
+ def __call__(self, text, truncation=True, padding=False, return_tensors="pt"):
+ _ = (text, truncation, padding, return_tensors)
+ return {
+ "input_ids": torch.tensor([[101, 102]], dtype=torch.long),
+ "attention_mask": torch.tensor([[1, 1]], dtype=torch.long),
+ }
+
+
+class FakeModel:
+ def __init__(self, logits: list[float], id2label: dict[int, str]) -> None:
+ self.config = type("Config", (), {"id2label": id2label})()
+ self._logits = torch.tensor([logits], dtype=torch.float32)
+
+ def eval(self) -> None:
+ return None
+
+ def __call__(self, **kwargs):
+ _ = kwargs
+ return type("Output", (), {"logits": self._logits})()
+
+
+class RuntimeBackedDetector(BertMultiIntentDetector):
+ def __init__(
+ self,
+ logits: list[float],
+ id2label: dict[int, str],
+ threshold: float = 0.45,
+ top_k: int = 8,
+ max_labels: int = 4,
+ ) -> None:
+ super().__init__(
+ model_path="unused",
+ threshold=threshold,
+ top_k=top_k,
+ max_labels=max_labels,
+ )
+ self._runtime = (torch, FakeTokenizer(), FakeModel(logits, id2label))
+
+ def _get_runtime(self):
+ return self._runtime
+
+
+class MultiIntentDetectorTests(unittest.TestCase):
+ def test_detector_filters_blocked_and_unknown_labels(self) -> None:
+ detector = RuntimeBackedDetector(
+ logits=[2.4, 2.0, 3.2, 2.6],
+ id2label={
+ 0: "cabin_window_open",
+ 1: "cabin_play_music",
+ 2: "__social__",
+ 3: "unknown_intent",
+ },
+ threshold=0.8,
+ top_k=4,
+ )
+ intents = [
+ IntentDefinition(intent_id="cabin_window_open", plugin_id="plugin.window", domain="cabin"),
+ IntentDefinition(intent_id="cabin_play_music", plugin_id="plugin.music", domain="cabin"),
+ ]
+
+ result = detector.detect("打开车窗并播放音乐", intents)
+
+ self.assertTrue(result.detected)
+ self.assertEqual(result.backend_name, "bert-multi-label")
+ self.assertEqual([item.intent_id for item in result.candidates], ["cabin_window_open", "cabin_play_music"])
+
+ def test_detector_respects_threshold_and_max_labels(self) -> None:
+ detector = RuntimeBackedDetector(
+ logits=[2.8, 2.5, 2.2],
+ id2label={
+ 0: "cabin_window_open",
+ 1: "cabin_play_music",
+ 2: "cabin_nav_to",
+ },
+ threshold=0.89,
+ top_k=3,
+ max_labels=2,
+ )
+ intents = [
+ IntentDefinition(intent_id="cabin_window_open", plugin_id="plugin.window", domain="cabin"),
+ IntentDefinition(intent_id="cabin_play_music", plugin_id="plugin.music", domain="cabin"),
+ IntentDefinition(intent_id="cabin_nav_to", plugin_id="plugin.nav", domain="cabin"),
+ ]
+
+ result = detector.detect("开窗放歌去公司", intents)
+
+ self.assertTrue(result.detected)
+ self.assertEqual(len(result.candidates), 2)
+ self.assertEqual([item.intent_id for item in result.candidates], ["cabin_window_open", "cabin_play_music"])
+
+ def test_joint_bert_detector_wraps_shared_runtime(self) -> None:
+ intents = [
+ IntentDefinition(intent_id="cabin_window_open", plugin_id="plugin.window", domain="cabin"),
+ IntentDefinition(intent_id="cabin_play_music", plugin_id="plugin.music", domain="cabin"),
+ ]
+
+ class FakeJointNlu:
+ def __init__(self) -> None:
+ self.calls: list[dict[str, object]] = []
+
+ def predict_multi_intents(self, text, known_intents, threshold=0.45, max_labels=4, top_k=8):
+ self.calls.append(
+ {
+ "text": text,
+ "threshold": threshold,
+ "max_labels": max_labels,
+ "top_k": top_k,
+ "known_count": len(known_intents),
+ }
+ )
+ return [
+ type("Candidate", (), {"intent_id": "cabin_window_open", "score": 0.93})(),
+ type("Candidate", (), {"intent_id": "cabin_play_music", "score": 0.88})(),
+ ]
+
+ def warmup(self, sample_text="") -> bool:
+ _ = sample_text
+ return True
+
+ fake_nlu = FakeJointNlu()
+ detector = JointBertMultiIntentDetector(fake_nlu, threshold=0.5, top_k=6, max_labels=3)
+
+ result = detector.detect("打开车窗并播放音乐", intents)
+
+ self.assertTrue(result.detected)
+ self.assertEqual(result.backend_name, "joint-bert-multi-label")
+ self.assertEqual([item.intent_id for item in result.candidates], ["cabin_window_open", "cabin_play_music"])
+ self.assertEqual(fake_nlu.calls[0]["threshold"], 0.5)
+ self.assertEqual(fake_nlu.calls[0]["top_k"], 6)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/intelligent_cabin/archive/tests/test_router_decisions.py b/intelligent_cabin/archive/tests/test_router_decisions.py
new file mode 100644
index 0000000..0a0e25b
--- /dev/null
+++ b/intelligent_cabin/archive/tests/test_router_decisions.py
@@ -0,0 +1,195 @@
+from __future__ import annotations
+
+import unittest
+
+from app.schemas.debug import IntentCandidate, MatcherStageDebug
+from app.schemas.intent import IntentDefinition
+from app.services.intent_registry import IntentRegistry
+from app.services.router import IntentMatchResult, MultiStageIntentMatcher
+
+
+class _FakeMatcher:
+ def __init__(self, stage_debug: MatcherStageDebug) -> None:
+ self._stage_debug = stage_debug
+
+ def match(self, text: str) -> IntentMatchResult:
+ _ = text
+ return IntentMatchResult(intent=None, stage_debug=self._stage_debug)
+
+
+def _intent(intent_id: str) -> IntentDefinition:
+ return IntentDefinition(
+ intent_id=intent_id,
+ plugin_id=f"mock.{intent_id}",
+ domain="test",
+ keywords=[],
+ examples=[],
+ )
+
+
+class RouterDecisionTests(unittest.TestCase):
+ def setUp(self) -> None:
+ self.registry = IntentRegistry([_intent("alpha"), _intent("beta"), _intent("gamma")])
+
+ def test_execute_when_bert_classifier_is_clear(self) -> None:
+ matcher = MultiStageIntentMatcher(
+ registry=self.registry,
+ matchers=[
+ _FakeMatcher(
+ MatcherStageDebug(
+ stage="classifier",
+ accepted=True,
+ selected_intent="alpha",
+ score=0.92,
+ reason="classifier selected best candidate",
+ backend="joint-bert-local",
+ candidates=[
+ IntentCandidate(intent_id="alpha", score=0.92, reason="classifier", model_name="joint-bert-local"),
+ IntentCandidate(intent_id="beta", score=0.21, reason="classifier", model_name="joint-bert-local"),
+ ],
+ )
+ ),
+ ],
+ )
+
+ result = matcher.match("alpha")
+
+ self.assertEqual(result.debug.decision, "execute")
+ self.assertEqual(result.intent.intent_id if result.intent else None, "alpha")
+
+ def test_clarify_when_bert_top_candidates_are_too_close(self) -> None:
+ matcher = MultiStageIntentMatcher(
+ registry=self.registry,
+ matchers=[
+ _FakeMatcher(
+ MatcherStageDebug(
+ stage="classifier",
+ accepted=True,
+ selected_intent="alpha",
+ score=0.22,
+ reason="classifier selected best candidate",
+ backend="bert-local",
+ metadata={"threshold": 0.2},
+ candidates=[
+ IntentCandidate(intent_id="alpha", score=0.31, reason="classifier", model_name="bert-local"),
+ IntentCandidate(intent_id="beta", score=0.28, reason="classifier", model_name="bert-local"),
+ ],
+ )
+ ),
+ ],
+ route_to_cloud_threshold=0.2,
+ )
+
+ result = matcher.match("ambiguous request")
+
+ self.assertEqual(result.debug.decision, "clarify")
+ self.assertIsNone(result.intent)
+ self.assertEqual(result.debug.confidence_grade, "medium")
+
+ def test_route_to_cloud_when_bert_signal_is_weak_but_known(self) -> None:
+ matcher = MultiStageIntentMatcher(
+ registry=self.registry,
+ matchers=[
+ _FakeMatcher(
+ MatcherStageDebug(
+ stage="classifier",
+ accepted=False,
+ selected_intent="alpha",
+ score=0.29,
+ reason="classifier below execute threshold",
+ backend="joint-bert-local",
+ candidates=[
+ IntentCandidate(intent_id="alpha", score=0.29, reason="classifier", model_name="joint-bert-local"),
+ IntentCandidate(intent_id="beta", score=0.14, reason="classifier", model_name="joint-bert-local"),
+ ],
+ )
+ ),
+ ],
+ )
+
+ result = matcher.match("weak symbolic request")
+
+ self.assertEqual(result.debug.decision, "route_to_cloud")
+ self.assertIsNone(result.intent)
+
+ def test_reject_when_no_branch_has_usable_signal(self) -> None:
+ matcher = MultiStageIntentMatcher(
+ registry=self.registry,
+ matchers=[
+ _FakeMatcher(
+ MatcherStageDebug(
+ stage="classifier",
+ accepted=False,
+ score=0.12,
+ reason="classifier below threshold",
+ backend="bert-local",
+ metadata={"threshold": 0.2},
+ candidates=[],
+ )
+ ),
+ ],
+ )
+
+ result = matcher.match("unknown request")
+
+ self.assertEqual(result.debug.decision, "reject")
+ self.assertTrue(result.debug.unknown_detected)
+ self.assertIsNone(result.intent)
+
+ def test_route_to_cloud_for_low_confidence_classifier_only_bert_signal(self) -> None:
+ matcher = MultiStageIntentMatcher(
+ registry=self.registry,
+ matchers=[
+ _FakeMatcher(
+ MatcherStageDebug(
+ stage="classifier",
+ accepted=True,
+ selected_intent="alpha",
+ score=0.31,
+ reason="classifier selected best candidate",
+ backend="bert-local",
+ metadata={"threshold": 0.0, "top_margin": 0.04},
+ candidates=[
+ IntentCandidate(intent_id="alpha", score=0.31, reason="classifier", model_name="bert-local"),
+ IntentCandidate(intent_id="beta", score=0.27, reason="classifier", model_name="bert-local"),
+ ],
+ )
+ ),
+ ],
+ )
+
+ result = matcher.match("bert only weak request")
+
+ self.assertEqual(result.debug.decision, "route_to_cloud")
+ self.assertIsNone(result.intent)
+
+ def test_execute_for_high_confidence_classifier_only_bert_signal(self) -> None:
+ matcher = MultiStageIntentMatcher(
+ registry=self.registry,
+ matchers=[
+ _FakeMatcher(
+ MatcherStageDebug(
+ stage="classifier",
+ accepted=True,
+ selected_intent="alpha",
+ score=0.92,
+ reason="classifier selected best candidate",
+ backend="bert-local",
+ metadata={"threshold": 0.0, "top_margin": 0.63},
+ candidates=[
+ IntentCandidate(intent_id="alpha", score=0.92, reason="classifier", model_name="bert-local"),
+ IntentCandidate(intent_id="beta", score=0.29, reason="classifier", model_name="bert-local"),
+ ],
+ )
+ ),
+ ],
+ )
+
+ result = matcher.match("bert only strong request")
+
+ self.assertEqual(result.debug.decision, "execute")
+ self.assertEqual(result.intent.intent_id if result.intent else None, "alpha")
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/intelligent_cabin/archive/tests/test_social_chat.py b/intelligent_cabin/archive/tests/test_social_chat.py
new file mode 100644
index 0000000..00058e9
--- /dev/null
+++ b/intelligent_cabin/archive/tests/test_social_chat.py
@@ -0,0 +1,180 @@
+from __future__ import annotations
+
+import unittest
+
+from app.plugins.base import PluginRegistry
+from app.schemas.chat import ChatRequest, FillSlotsRequest
+from app.schemas.debug import RoutingDebug
+from app.schemas.intent import IntentDefinition
+from app.schemas.workflow import Workflow, WorkflowStep
+from app.services.agent_service import AgentService
+from app.services.intent_registry import IntentRegistry
+from app.services.session_store import InMemorySessionStore
+from app.services.social import SocialReplyResult, SocialRouter
+
+
+class _FailingRouter:
+ def route(self, text: str): # pragma: no cover - should not be called in these tests
+ raise AssertionError(f"router should not be called for social input: {text}")
+
+ def extract_slots(self, text: str, intent: IntentDefinition) -> dict[str, object]:
+ _ = (text, intent)
+ return {}
+
+
+class _FakeSocialResponder:
+ def reply(self, text: str, session) -> SocialReplyResult:
+ _ = (text, session)
+ normalized = text.strip()
+ if "你好" in normalized:
+ text = "你好呀,我在,想聊什么都可以。"
+ elif "名字" in normalized or "你是谁" in normalized:
+ text = "我是一名智能座舱助手,你可以直接叫我座舱助手。"
+ elif "天气" in normalized:
+ text = "是啊,今天确实挺舒服的。"
+ else:
+ text = "我在,咱们继续聊。"
+ return SocialReplyResult(
+ text=text,
+ backend="fake-cloud",
+ model_name="fake-social",
+ )
+
+
+def _intent(intent_id: str, plugin_id: str) -> IntentDefinition:
+ return IntentDefinition(
+ intent_id=intent_id,
+ plugin_id=plugin_id,
+ domain="service" if intent_id.startswith("cs_") else "cabin",
+ risk_level="high" if intent_id == "cs_cancel_order" else "low",
+ required_slots=["order_id"] if intent_id == "cs_cancel_order" else [],
+ ask_templates={"order_id": "请告诉我订单号。"} if intent_id == "cs_cancel_order" else {},
+ keywords=[],
+ examples=[],
+ )
+
+
+class SocialChatTests(unittest.TestCase):
+ def setUp(self) -> None:
+ self.session_store = InMemorySessionStore()
+ self.plugins = PluginRegistry()
+ self.plugins.register(
+ "mock.cancel_order",
+ lambda slots: {"success": True, "message": f"已取消订单 {slots.get('order_id', '')}。"},
+ )
+ self.service = AgentService(
+ intent_registry=IntentRegistry([_intent("cs_cancel_order", "mock.cancel_order")]),
+ router=_FailingRouter(),
+ plugins=self.plugins,
+ session_store=self.session_store,
+ social_router=SocialRouter(),
+ social_responder=_FakeSocialResponder(),
+ )
+
+ def test_greeting_social_reply_uses_social_responder(self) -> None:
+ response = self.service.handle_chat(
+ ChatRequest(
+ session_id="sess_social_hi",
+ user_id="user_1",
+ input_text="你好",
+ )
+ )
+
+ self.assertEqual(response.decision, "open_social")
+ self.assertEqual(response.status, "social")
+ self.assertIn("你好呀", response.reply_text)
+
+ def test_capability_social_question_does_not_fall_into_business_intent(self) -> None:
+ response = self.service.handle_chat(
+ ChatRequest(
+ session_id="sess_social_name",
+ user_id="user_1",
+ input_text="你叫什么名字",
+ )
+ )
+
+ self.assertEqual(response.decision, "open_social")
+ self.assertEqual(response.status, "social")
+ self.assertNotEqual(response.reply_type, "ask_slot")
+ self.assertIn("智能座舱助手", response.reply_text)
+
+ def test_open_social_reply_uses_social_responder(self) -> None:
+ response = self.service.handle_chat(
+ ChatRequest(
+ session_id="sess_social_open",
+ user_id="user_1",
+ input_text="今天天气真不错啊",
+ )
+ )
+
+ self.assertEqual(response.decision, "open_social")
+ self.assertEqual(response.status, "social")
+ self.assertIn("挺舒服", response.reply_text)
+
+ def test_social_turn_does_not_break_waiting_confirmation(self) -> None:
+ session = self.session_store.get_or_create("sess_confirm", "user_1")
+ session.current_intent = "cs_cancel_order"
+ session.status = "waiting_confirmation"
+ session.pending_slots = ["confirmation"]
+ session.slots = {"order_id": "A123456"}
+ session.routing_debug = RoutingDebug(selected_intent="cs_cancel_order", decision="execute").model_dump()
+ session.workflow = Workflow(
+ workflow_id="wf_sess_confirm",
+ workflow_type="conditional",
+ domain="service",
+ intent_id="cs_cancel_order",
+ status="waiting_confirmation",
+ risk_level="high",
+ slots={"order_id": "A123456"},
+ steps=[
+ WorkflowStep(
+ step=1,
+ step_id="step_confirm",
+ intent_id="cs_cancel_order",
+ plugin_id="mock.cancel_order",
+ action="cancel_order",
+ status="waiting_confirmation",
+ slots={"order_id": "A123456"},
+ requires_confirmation=True,
+ )
+ ],
+ meta={
+ "pending_confirmation": {
+ "step_id": "step_confirm",
+ "intent_id": "cs_cancel_order",
+ "detail": "确认取消订单 A123456",
+ },
+ "confirmed_steps": [],
+ "step_results": {},
+ },
+ ).model_dump()
+ self.session_store.save(session)
+
+ social_response = self.service.handle_fill_slots(
+ FillSlotsRequest(
+ session_id="sess_confirm",
+ user_id="user_1",
+ input_text="今天天气真不错啊",
+ )
+ )
+
+ self.assertEqual(social_response.decision, "open_social")
+ self.assertEqual(social_response.status, "waiting_confirmation")
+ self.assertEqual(social_response.pending_slots, ["confirmation"])
+ self.assertIn("回复“确认”或“取消”即可", social_response.reply_text)
+
+ confirm_response = self.service.handle_fill_slots(
+ FillSlotsRequest(
+ session_id="sess_confirm",
+ user_id="user_1",
+ input_text="确认",
+ )
+ )
+
+ self.assertEqual(confirm_response.reply_type, "workflow_result")
+ self.assertEqual(confirm_response.status, "completed")
+ self.assertIn("已取消订单", confirm_response.reply_text)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/intelligent_cabin/archive/tests/test_workflow_templates.py b/intelligent_cabin/archive/tests/test_workflow_templates.py
new file mode 100644
index 0000000..d7f2a3c
--- /dev/null
+++ b/intelligent_cabin/archive/tests/test_workflow_templates.py
@@ -0,0 +1,184 @@
+from __future__ import annotations
+
+import unittest
+from pathlib import Path
+
+from app.schemas.configuration import WorkflowTemplatesConfig
+from app.services.classifier import ClassificationResult
+from app.services.multi_intent_detector import MultiIntentCandidate, MultiIntentDetectionResult
+from app.services.planner import CompositeWorkflowPlanner, HeuristicWorkflowPlanner, TemplateWorkflowPlanner
+from app.services.intent_registry import IntentRegistry
+
+
+class FakeClauseClassifier:
+ def __init__(self, predictions: dict[str, list[dict[str, float | str]]]) -> None:
+ self._predictions = predictions
+
+ def predict(self, text, intents):
+ _ = intents
+ return ClassificationResult(
+ intent=None,
+ score=0.0,
+ model_name="fake-bert-clause",
+ backend_name="fake-bert-clause",
+ raw_candidates=self._predictions.get(text, []),
+ )
+
+
+class FakeMultiIntentDetector:
+ def __init__(self, predictions: dict[str, list[tuple[str, float]]]) -> None:
+ self._predictions = predictions
+
+ def detect(self, text, intents):
+ _ = intents
+ candidates = [
+ MultiIntentCandidate(intent_id=intent_id, score=score, label=intent_id)
+ for intent_id, score in self._predictions.get(text, [])
+ ]
+ return MultiIntentDetectionResult(
+ detected=len(candidates) >= 2,
+ candidates=candidates,
+ reason="fake detector",
+ backend_name="fake-multi",
+ )
+
+
+class WorkflowTemplateTests(unittest.TestCase):
+ def setUp(self) -> None:
+ self.registry = IntentRegistry.from_json("app/data/intents.json")
+ self.templates = WorkflowTemplatesConfig.model_validate_json(
+ Path("config/workflows.yml").read_text(encoding="utf-8")
+ )
+
+ def test_template_planner_matches_sequence_template(self) -> None:
+ planner = TemplateWorkflowPlanner(self.templates)
+
+ result = planner.plan("打开车窗,然后把空调调到20度", self.registry.list())
+
+ self.assertTrue(result.accepted)
+ self.assertEqual(result.backend, "local-template")
+ self.assertEqual(result.workflow_type, "sequence")
+ self.assertEqual([step.intent_id for step in result.steps], ["cabin_window_open", "cabin_set_ac"])
+ self.assertEqual(result.steps[1].slots.get("temperature"), 20)
+
+ def test_template_planner_matches_conditional_template(self) -> None:
+ planner = TemplateWorkflowPlanner(self.templates)
+
+ result = planner.plan("查一下订单A123456,如果还没发货就取消", self.registry.list())
+
+ self.assertTrue(result.accepted)
+ self.assertEqual(result.workflow_type, "conditional")
+ self.assertEqual([step.intent_id for step in result.steps], ["cs_query_order", "cs_cancel_order"])
+ self.assertEqual(result.steps[1].depends_on, [1])
+ self.assertTrue(result.steps[1].requires_confirmation)
+
+ def test_composite_planner_falls_back_to_heuristic_when_template_misses(self) -> None:
+ planner = CompositeWorkflowPlanner([TemplateWorkflowPlanner(self.templates), HeuristicWorkflowPlanner()])
+
+ result = planner.plan("打开车窗,并且播放轻音乐", self.registry.list())
+
+ self.assertTrue(result.accepted)
+ self.assertIn(result.backend, {"local-template", "local-heuristic"})
+ self.assertEqual(result.workflow_type, "sequence")
+
+ def test_heuristic_planner_parses_ac_then_window_close_sequence(self) -> None:
+ planner = HeuristicWorkflowPlanner()
+
+ result = planner.plan("打开空调,再把窗户降下来", self.registry.list())
+
+ self.assertTrue(result.accepted)
+ self.assertEqual(result.backend, "local-heuristic")
+ self.assertEqual(result.workflow_type, "sequence")
+ self.assertEqual([step.intent_id for step in result.steps], ["cabin_ac_on", "cabin_window_close"])
+
+ def test_planner_metadata_contains_clause_analysis(self) -> None:
+ planner = HeuristicWorkflowPlanner()
+
+ result = planner.plan("打开空调,然后打开车窗", self.registry.list())
+
+ self.assertTrue(result.accepted)
+ self.assertTrue(result.metadata.get("multi_intent_detected"))
+ clause_analysis = result.metadata.get("clause_analysis", [])
+ self.assertEqual(len(clause_analysis), 2)
+ self.assertEqual(clause_analysis[0].get("selected_intent_id"), "cabin_ac_on")
+ self.assertEqual(clause_analysis[1].get("selected_intent_id"), "cabin_window_open")
+
+ def test_heuristic_planner_supports_shared_action_parallel_objects(self) -> None:
+ planner = HeuristicWorkflowPlanner()
+
+ result = planner.plan("打开空调和车窗", self.registry.list())
+
+ self.assertTrue(result.accepted)
+ self.assertEqual(result.workflow_type, "sequence")
+ self.assertEqual([step.intent_id for step in result.steps], ["cabin_ac_on", "cabin_window_open"])
+
+ def test_heuristic_planner_supports_parallel_objects_with_suffix_action(self) -> None:
+ planner = HeuristicWorkflowPlanner()
+
+ result = planner.plan("把车窗和天窗打开", self.registry.list())
+
+ self.assertTrue(result.accepted)
+ self.assertEqual(result.workflow_type, "sequence")
+ self.assertEqual([step.intent_id for step in result.steps], ["cabin_window_open", "cabin_sunroof_open"])
+
+ def test_heuristic_planner_supports_parallel_clause_with_bing_connector(self) -> None:
+ planner = HeuristicWorkflowPlanner()
+
+ result = planner.plan("打开车窗并播放轻音乐", self.registry.list())
+
+ self.assertTrue(result.accepted)
+ self.assertEqual(result.workflow_type, "sequence")
+ self.assertEqual([step.intent_id for step in result.steps], ["cabin_window_open", "cabin_play_music"])
+
+ def test_heuristic_planner_can_use_clause_classifier_to_rescue_semantic_clause(self) -> None:
+ planner = HeuristicWorkflowPlanner(
+ clause_classifier=FakeClauseClassifier(
+ {
+ "车里太闷了": [
+ {"label": "cabin_window_open", "intent_id": "cabin_window_open", "score": 0.83},
+ ],
+ "来点轻音乐": [
+ {"label": "cabin_play_music", "intent_id": "cabin_play_music", "score": 0.91},
+ ],
+ }
+ )
+ )
+
+ result = planner.plan("车里太闷了,然后来点轻音乐", self.registry.list())
+
+ self.assertTrue(result.accepted)
+ self.assertEqual(result.workflow_type, "sequence")
+ self.assertEqual([step.intent_id for step in result.steps], ["cabin_window_open", "cabin_play_music"])
+ clause_analysis = result.metadata.get("clause_analysis", [])
+ self.assertGreater(clause_analysis[0].get("candidates", [])[0].get("model_score", 0.0), 0.8)
+
+ def test_heuristic_planner_can_use_multi_intent_detector_prior(self) -> None:
+ planner = HeuristicWorkflowPlanner(
+ clause_classifier=FakeClauseClassifier(
+ {
+ "来点轻音乐": [
+ {"label": "cabin_play_music", "intent_id": "cabin_play_music", "score": 0.91},
+ ],
+ }
+ ),
+ multi_intent_detector=FakeMultiIntentDetector(
+ {
+ "顺便开下车窗,再来点轻音乐": [
+ ("cabin_window_open", 0.87),
+ ("cabin_play_music", 0.82),
+ ]
+ }
+ ),
+ )
+
+ result = planner.plan("顺便开下车窗,再来点轻音乐", self.registry.list())
+
+ self.assertTrue(result.accepted)
+ self.assertEqual([step.intent_id for step in result.steps], ["cabin_window_open", "cabin_play_music"])
+ detector_meta = result.metadata.get("multi_intent_detector") or {}
+ self.assertTrue(detector_meta.get("detected"))
+ self.assertEqual(len(detector_meta.get("candidates", [])), 2)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/intelligent_cabin/config/actions.yml b/intelligent_cabin/config/actions.yml
new file mode 100644
index 0000000..a32f0d5
--- /dev/null
+++ b/intelligent_cabin/config/actions.yml
@@ -0,0 +1,38 @@
+{
+ "actions": [
+ { "action_id": "action_cs_query_order", "plugin_id": "plugin.order.query", "risk_level": "low" },
+ { "action_id": "action_cs_query_logistics", "plugin_id": "plugin.logistics.query", "risk_level": "low" },
+ { "action_id": "action_cs_cancel_order", "plugin_id": "plugin.order.cancel", "risk_level": "medium" },
+ { "action_id": "action_cs_transfer_human", "plugin_id": "plugin.service.transfer_human", "risk_level": "low" },
+ { "action_id": "action_cabin_nav_cancel", "plugin_id": "plugin.cabin.navigation.cancel", "risk_level": "low" },
+ { "action_id": "action_cabin_nav_to", "plugin_id": "plugin.cabin.navigation", "risk_level": "medium" },
+ { "action_id": "action_cabin_ac_on", "plugin_id": "plugin.cabin.ac.on", "risk_level": "low" },
+ { "action_id": "action_cabin_ac_off", "plugin_id": "plugin.cabin.ac.off", "risk_level": "low" },
+ { "action_id": "action_cabin_set_ac", "plugin_id": "plugin.cabin.ac_control", "risk_level": "low" },
+ { "action_id": "action_cabin_fan_up", "plugin_id": "plugin.cabin.fan.up", "risk_level": "low" },
+ { "action_id": "action_cabin_fan_down", "plugin_id": "plugin.cabin.fan.down", "risk_level": "low" },
+ { "action_id": "action_cabin_defog_front_on", "plugin_id": "plugin.cabin.defog.front_on", "risk_level": "low" },
+ { "action_id": "action_cabin_defog_rear_on", "plugin_id": "plugin.cabin.defog.rear_on", "risk_level": "low" },
+ { "action_id": "action_cabin_window_open", "plugin_id": "plugin.cabin.window.open", "risk_level": "low" },
+ { "action_id": "action_cabin_window_close", "plugin_id": "plugin.cabin.window.close", "risk_level": "low" },
+ { "action_id": "action_cabin_sunroof_open", "plugin_id": "plugin.cabin.sunroof.open", "risk_level": "low" },
+ { "action_id": "action_cabin_sunroof_close", "plugin_id": "plugin.cabin.sunroof.close", "risk_level": "low" },
+ { "action_id": "action_cabin_lock_doors", "plugin_id": "plugin.cabin.doors.lock", "risk_level": "medium" },
+ { "action_id": "action_cabin_unlock_doors", "plugin_id": "plugin.cabin.doors.unlock", "risk_level": "medium" },
+ { "action_id": "action_cabin_play_music", "plugin_id": "plugin.cabin.music_play", "risk_level": "low" },
+ { "action_id": "action_cabin_pause_music", "plugin_id": "plugin.cabin.music.pause", "risk_level": "low" },
+ { "action_id": "action_cabin_next_track", "plugin_id": "plugin.cabin.music.next", "risk_level": "low" },
+ { "action_id": "action_cabin_previous_track", "plugin_id": "plugin.cabin.music.previous", "risk_level": "low" },
+ { "action_id": "action_cabin_volume_up", "plugin_id": "plugin.cabin.volume.up", "risk_level": "low" },
+ { "action_id": "action_cabin_volume_down", "plugin_id": "plugin.cabin.volume.down", "risk_level": "low" },
+ { "action_id": "action_cabin_volume_mute", "plugin_id": "plugin.cabin.volume.mute", "risk_level": "low" },
+ { "action_id": "action_cabin_lights_on", "plugin_id": "plugin.cabin.lights.on", "risk_level": "low" },
+ { "action_id": "action_cabin_lights_off", "plugin_id": "plugin.cabin.lights.off", "risk_level": "low" },
+ { "action_id": "action_cabin_seat_heat_on", "plugin_id": "plugin.cabin.seat_heat.on", "risk_level": "low" },
+ { "action_id": "action_cabin_seat_heat_off", "plugin_id": "plugin.cabin.seat_heat.off", "risk_level": "low" },
+ { "action_id": "action_cabin_mirror_fold", "plugin_id": "plugin.cabin.mirror.fold", "risk_level": "low" },
+ { "action_id": "action_cabin_mirror_unfold", "plugin_id": "plugin.cabin.mirror.unfold", "risk_level": "low" },
+ { "action_id": "action_cabin_wiper_on", "plugin_id": "plugin.cabin.wiper.on", "risk_level": "low" },
+ { "action_id": "action_cabin_wiper_off", "plugin_id": "plugin.cabin.wiper.off", "risk_level": "low" }
+ ]
+}
diff --git a/intelligent_cabin/config/context_rewrite.yml b/intelligent_cabin/config/context_rewrite.yml
new file mode 100644
index 0000000..a43acd2
--- /dev/null
+++ b/intelligent_cabin/config/context_rewrite.yml
@@ -0,0 +1,76 @@
+# 本地上下文改写引擎配置
+# 用于多轮相对调节的短句改写,如 "再快一点" → "速度设为 85 mm/min"
+# 每个 param_context 对应一类可以相对调节的参数。
+# 部署到不同设备时,只需修改本文件(或切换 AGENT_CONTEXT_REWRITE_CONFIG_PATH)。
+
+param_contexts:
+ # ────────────────────────────────────────────────
+ # 加工速度
+ # ────────────────────────────────────────────────
+ - intent_ids:
+ - wirecut_set_speed
+ slot_name: speed
+ unit: "mm/min"
+ step: 5
+ min_value: 1
+ max_value: 9999
+ default_value: 80
+ up_phrases:
+ - 再快一点
+ - 快一点
+ - 加快
+ - 速度调高
+ - 速度大一点
+ down_phrases:
+ - 再慢一点
+ - 慢一点
+ - 减慢
+ - 速度调低
+ - 速度小一点
+ rewrite_template: "速度设为 {value} mm/min"
+
+ # ────────────────────────────────────────────────
+ # 放电电压(放电码)
+ # ────────────────────────────────────────────────
+ - intent_ids:
+ - wirecut_set_voltage
+ slot_name: voltage
+ unit: ""
+ step: 5
+ min_value: 0
+ max_value: 200
+ default_value: 90
+ up_phrases:
+ - 电压高一点
+ - 电压调高
+ - 放电码高一点
+ - 放电码大一点
+ down_phrases:
+ - 电压低一点
+ - 电压调低
+ - 放电码低一点
+ - 放电码小一点
+ rewrite_template: "电压设为 {value}"
+
+ # ────────────────────────────────────────────────
+ # 放电电流(跟踪值)
+ # ────────────────────────────────────────────────
+ - intent_ids:
+ - wirecut_set_current
+ slot_name: current
+ unit: ""
+ step: 1
+ min_value: 0
+ max_value: 30
+ default_value: 5
+ up_phrases:
+ - 电流大一点
+ - 电流调高
+ - 跟踪值高一点
+ - 跟踪值大一点
+ down_phrases:
+ - 电流小一点
+ - 电流调低
+ - 跟踪值低一点
+ - 跟踪值小一点
+ rewrite_template: "电流设为 {value}"
diff --git a/intelligent_cabin/config/dialog_acts.yml b/intelligent_cabin/config/dialog_acts.yml
new file mode 100644
index 0000000..fbbb929
--- /dev/null
+++ b/intelligent_cabin/config/dialog_acts.yml
@@ -0,0 +1,79 @@
+# Dialog Act 配置
+# act_id : 行为标识,代码内引用此字段
+# phrases : 字符串包含匹配词表,匹配到任意一个即命中该 act
+# numeric_patterns : 正则列表,输入文本匹配任意一个则命中该 act(用于数字类 inform)
+# priority : 可选,数字越小越先检查(默认按声明顺序)
+#
+# 说明:不同设备部署时,修改本文件即可调整对话行为词表,无需改动代码。
+
+acts:
+ - act_id: affirm
+ phrases:
+ - 确认
+ - 好的
+ - 继续
+ - 可以
+ - 确定
+ - 执行
+ - 是
+ - "ok"
+ - "yes"
+
+ - act_id: deny
+ phrases:
+ - 不要
+ - 不行
+ - 否
+ - 不
+ - "no"
+
+ - act_id: cancel
+ phrases:
+ - 取消
+ - 算了
+ - 不用了
+ - 停止
+ - 中止
+ - 放弃
+
+ - act_id: modify
+ phrases:
+ - 改成
+ - 换成
+ - 再低一点
+ - 再高一点
+ - 调大
+ - 调小
+ - 快一点
+ - 慢一点
+
+ - act_id: chitchat
+ phrases:
+ - 你好
+ - 谢谢
+ - 再见
+ - 天气
+ - 真不错
+
+ - act_id: request
+ phrases:
+ - 帮我
+ - 打开
+ - 关闭
+ - 导航
+ - 播放
+ - 查询
+ - 查
+ - 启动
+ - 停止加工
+ - 回零
+ - 加载
+ - 设为
+ - 设置
+
+ # inform:用于用户直接说出数值(作为 slot 填写),如 "85" / "22度" / "0.5"
+ # phrases 留空,完全依赖 numeric_patterns 匹配
+ - act_id: inform
+ phrases: []
+ numeric_patterns:
+ - "\\d+"
diff --git a/intelligent_cabin/config/domain.yml b/intelligent_cabin/config/domain.yml
new file mode 100644
index 0000000..9385ced
--- /dev/null
+++ b/intelligent_cabin/config/domain.yml
@@ -0,0 +1,38 @@
+{
+ "intents": [
+ { "intent_id": "cs_query_order", "domain": "customer_service", "action_id": "action_cs_query_order", "label": "查订单", "required_slots": ["order_id"], "ask_templates": { "order_id": "请提供订单号。" }, "keywords": ["查询订单", "查订单", "订单状态"], "examples": ["帮我查一下订单", "我的订单到哪一步了", "查下订单状态"] },
+ { "intent_id": "cs_query_logistics", "domain": "customer_service", "action_id": "action_cs_query_logistics", "label": "查物流", "required_slots": ["order_id"], "ask_templates": { "order_id": "请提供订单号。" }, "keywords": ["查物流", "物流", "快递"], "examples": ["帮我查一下快递", "看看物流到哪了", "快递什么时候到"] },
+ { "intent_id": "cs_cancel_order", "domain": "customer_service", "action_id": "action_cs_cancel_order", "label": "取消订单", "required_slots": ["order_id"], "ask_templates": { "order_id": "请提供要取消的订单号。" }, "keywords": ["取消订单", "撤销订单"], "examples": ["帮我取消这个订单", "我不想要了取消吧", "撤销刚才的订单"] },
+ { "intent_id": "cs_transfer_human", "domain": "customer_service", "action_id": "action_cs_transfer_human", "label": "转人工", "required_slots": [], "ask_templates": {}, "keywords": ["转人工", "人工客服", "联系客服"], "examples": ["我要人工客服", "帮我转人工", "联系客服"] },
+ { "intent_id": "cabin_nav_cancel", "domain": "cabin", "action_id": "action_cabin_nav_cancel", "label": "结束导航", "required_slots": [], "ask_templates": {}, "keywords": ["取消导航", "结束导航", "停止导航"], "examples": ["把导航关掉", "退出导航", "别导航了"] },
+ { "intent_id": "cabin_nav_to", "domain": "cabin", "action_id": "action_cabin_nav_to", "label": "导航", "required_slots": ["destination"], "ask_templates": { "destination": "请告诉我要导航去哪里。" }, "keywords": ["导航去", "导航到", "带我去"], "examples": ["导航去公司", "带我去机场", "导航到虹桥火车站"] },
+ { "intent_id": "cabin_ac_on", "domain": "cabin", "action_id": "action_cabin_ac_on", "label": "打开空调", "required_slots": [], "ask_templates": {}, "keywords": ["打开空调", "开启空调", "空调打开"], "examples": ["把空调打开", "开空调", "启动空调"] },
+ { "intent_id": "cabin_ac_off", "domain": "cabin", "action_id": "action_cabin_ac_off", "label": "关闭空调", "required_slots": [], "ask_templates": {}, "keywords": ["关闭空调", "关掉空调", "空调关闭"], "examples": ["把空调关掉", "别吹空调了", "空调先关了"] },
+ { "intent_id": "cabin_set_ac", "domain": "cabin", "action_id": "action_cabin_set_ac", "label": "调空调", "required_slots": ["temperature"], "ask_templates": { "temperature": "请告诉我要设置多少度。" }, "keywords": ["空调调到", "温度设成", "设成多少度"], "examples": ["把空调调到22度", "温度设成24度", "空调调到20度"] },
+ { "intent_id": "cabin_fan_up", "domain": "cabin", "action_id": "action_cabin_fan_up", "label": "调大风量", "required_slots": [], "ask_templates": {}, "keywords": ["调大风量", "风量大一点", "风量调高"], "examples": ["把风量调大一点", "空调风再大一点", "风量开大些"] },
+ { "intent_id": "cabin_fan_down", "domain": "cabin", "action_id": "action_cabin_fan_down", "label": "调小风量", "required_slots": [], "ask_templates": {}, "keywords": ["调小风量", "风量小一点", "风量调低"], "examples": ["把风量调小一点", "空调风太大了", "风量关小些"] },
+ { "intent_id": "cabin_defog_front_on", "domain": "cabin", "action_id": "action_cabin_defog_front_on", "label": "打开前挡除雾", "required_slots": [], "ask_templates": {}, "keywords": ["打开前挡除雾", "前挡风除雾", "前窗除雾"], "examples": ["帮我打开前挡除雾", "前挡风玻璃起雾了", "开一下前挡除雾"] },
+ { "intent_id": "cabin_defog_rear_on", "domain": "cabin", "action_id": "action_cabin_defog_rear_on", "label": "打开后挡除雾", "required_slots": [], "ask_templates": {}, "keywords": ["打开后挡除雾", "后挡风除雾", "后窗除雾"], "examples": ["帮我打开后挡除雾", "后挡风玻璃起雾了", "开一下后挡除雾"] },
+ { "intent_id": "cabin_window_open", "domain": "cabin", "action_id": "action_cabin_window_open", "label": "打开车窗", "required_slots": [], "ask_templates": {}, "keywords": ["打开车窗", "开车窗", "车窗打开"], "examples": ["把车窗打开", "帮我开一下车窗", "打开一点车窗"] },
+ { "intent_id": "cabin_window_close", "domain": "cabin", "action_id": "action_cabin_window_close", "label": "关闭车窗", "required_slots": [], "ask_templates": {}, "keywords": ["关闭车窗", "关车窗", "车窗关上"], "examples": ["把车窗关上", "帮我关一下车窗", "车窗全部关闭"] },
+ { "intent_id": "cabin_sunroof_open", "domain": "cabin", "action_id": "action_cabin_sunroof_open", "label": "打开天窗", "required_slots": [], "ask_templates": {}, "keywords": ["打开天窗", "开天窗", "天窗打开"], "examples": ["把天窗打开", "帮我开一下天窗", "天窗打开一点"] },
+ { "intent_id": "cabin_sunroof_close", "domain": "cabin", "action_id": "action_cabin_sunroof_close", "label": "关闭天窗", "required_slots": [], "ask_templates": {}, "keywords": ["关闭天窗", "关天窗", "天窗关上"], "examples": ["把天窗关上", "帮我关一下天窗", "关闭全景天窗"] },
+ { "intent_id": "cabin_lock_doors", "domain": "cabin", "action_id": "action_cabin_lock_doors", "label": "锁车门", "required_slots": [], "ask_templates": {}, "keywords": ["锁车门", "锁门", "车门锁上"], "examples": ["帮我锁车", "把车门锁上", "全部车门上锁"] },
+ { "intent_id": "cabin_unlock_doors", "domain": "cabin", "action_id": "action_cabin_unlock_doors", "label": "解锁车门", "required_slots": [], "ask_templates": {}, "keywords": ["解锁车门", "开锁", "车门解锁"], "examples": ["帮我解锁车门", "把车门打开锁", "全部车门解锁"] },
+ { "intent_id": "cabin_play_music", "domain": "cabin", "action_id": "action_cabin_play_music", "label": "播放音乐", "required_slots": [], "ask_templates": {}, "keywords": ["播放音乐", "来点音乐", "放首歌"], "examples": ["播放轻音乐", "来点歌", "帮我放首歌"] },
+ { "intent_id": "cabin_pause_music", "domain": "cabin", "action_id": "action_cabin_pause_music", "label": "暂停音乐", "required_slots": [], "ask_templates": {}, "keywords": ["暂停音乐", "暂停播放", "音乐暂停"], "examples": ["把音乐暂停", "先别放了", "暂停当前歌曲"] },
+ { "intent_id": "cabin_next_track", "domain": "cabin", "action_id": "action_cabin_next_track", "label": "下一首", "required_slots": [], "ask_templates": {}, "keywords": ["下一首", "切下一首", "换首歌"], "examples": ["帮我切到下一首", "下一首歌", "换一首歌"] },
+ { "intent_id": "cabin_previous_track", "domain": "cabin", "action_id": "action_cabin_previous_track", "label": "上一首", "required_slots": [], "ask_templates": {}, "keywords": ["上一首", "切上一首", "返回上一首"], "examples": ["帮我切到上一首", "上一首歌", "返回刚才那首歌"] },
+ { "intent_id": "cabin_volume_up", "domain": "cabin", "action_id": "action_cabin_volume_up", "label": "调大音量", "required_slots": [], "ask_templates": {}, "keywords": ["调大音量", "音量大一点", "音量调高"], "examples": ["把音量调大一点", "声音太小了", "音量开大些"] },
+ { "intent_id": "cabin_volume_down", "domain": "cabin", "action_id": "action_cabin_volume_down", "label": "调小音量", "required_slots": [], "ask_templates": {}, "keywords": ["调小音量", "音量小一点", "音量调低"], "examples": ["把音量调小一点", "声音太大了", "音量关小些"] },
+ { "intent_id": "cabin_volume_mute", "domain": "cabin", "action_id": "action_cabin_volume_mute", "label": "静音", "required_slots": [], "ask_templates": {}, "keywords": ["静音", "关闭声音", "音量静音"], "examples": ["把声音关掉", "先静音", "音响静音"] },
+ { "intent_id": "cabin_lights_on", "domain": "cabin", "action_id": "action_cabin_lights_on", "label": "打开车灯", "required_slots": [], "ask_templates": {}, "keywords": ["打开车灯", "开灯", "车灯打开"], "examples": ["把车灯打开", "帮我开一下灯", "打开大灯"] },
+ { "intent_id": "cabin_lights_off", "domain": "cabin", "action_id": "action_cabin_lights_off", "label": "关闭车灯", "required_slots": [], "ask_templates": {}, "keywords": ["关闭车灯", "关灯", "车灯关闭"], "examples": ["把车灯关掉", "帮我关一下灯", "关闭大灯"] },
+ { "intent_id": "cabin_seat_heat_on", "domain": "cabin", "action_id": "action_cabin_seat_heat_on", "label": "打开座椅加热", "required_slots": [], "ask_templates": {}, "keywords": ["打开座椅加热", "开座椅加热", "座椅加热打开"], "examples": ["把座椅加热打开", "帮我开一下座椅加热", "打开主驾座椅加热"] },
+ { "intent_id": "cabin_seat_heat_off", "domain": "cabin", "action_id": "action_cabin_seat_heat_off", "label": "关闭座椅加热", "required_slots": [], "ask_templates": {}, "keywords": ["关闭座椅加热", "关座椅加热", "座椅加热关闭"], "examples": ["把座椅加热关掉", "帮我关一下座椅加热", "关闭主驾座椅加热"] },
+ { "intent_id": "cabin_mirror_fold", "domain": "cabin", "action_id": "action_cabin_mirror_fold", "label": "折叠后视镜", "required_slots": [], "ask_templates": {}, "keywords": ["折叠后视镜", "收起后视镜", "后视镜折叠"], "examples": ["把后视镜折叠起来", "帮我收起后视镜", "折叠两侧后视镜"] },
+ { "intent_id": "cabin_mirror_unfold", "domain": "cabin", "action_id": "action_cabin_mirror_unfold", "label": "展开后视镜", "required_slots": [], "ask_templates": {}, "keywords": ["展开后视镜", "打开后视镜", "后视镜展开"], "examples": ["把后视镜展开", "帮我打开后视镜", "展开两侧后视镜"] },
+ { "intent_id": "cabin_wiper_on", "domain": "cabin", "action_id": "action_cabin_wiper_on", "label": "打开雨刷", "required_slots": [], "ask_templates": {}, "keywords": ["打开雨刷", "开雨刷", "雨刷启动"], "examples": ["把雨刷打开", "帮我开一下雨刷", "启动雨刮器"] },
+ { "intent_id": "cabin_wiper_off", "domain": "cabin", "action_id": "action_cabin_wiper_off", "label": "关闭雨刷", "required_slots": [], "ask_templates": {}, "keywords": ["关闭雨刷", "关雨刷", "雨刷停止"], "examples": ["把雨刷关掉", "帮我关一下雨刷", "停止雨刮器"] }
+ ]
+}
diff --git a/intelligent_cabin/config/forms.yml b/intelligent_cabin/config/forms.yml
new file mode 100644
index 0000000..7bc8e18
--- /dev/null
+++ b/intelligent_cabin/config/forms.yml
@@ -0,0 +1,39 @@
+{
+ "forms": [
+ {
+ "intent_id": "cs_query_order",
+ "required_slots": ["order_id"],
+ "ask_templates": {
+ "order_id": "请提供订单号。"
+ }
+ },
+ {
+ "intent_id": "cs_query_logistics",
+ "required_slots": ["order_id"],
+ "ask_templates": {
+ "order_id": "请提供订单号。"
+ }
+ },
+ {
+ "intent_id": "cs_cancel_order",
+ "required_slots": ["order_id"],
+ "ask_templates": {
+ "order_id": "请提供要取消的订单号。"
+ }
+ },
+ {
+ "intent_id": "cabin_nav_to",
+ "required_slots": ["destination"],
+ "ask_templates": {
+ "destination": "请告诉我要导航去哪里。"
+ }
+ },
+ {
+ "intent_id": "cabin_set_ac",
+ "required_slots": ["temperature"],
+ "ask_templates": {
+ "temperature": "请告诉我要设置多少度。"
+ }
+ }
+ ]
+}
diff --git a/intelligent_cabin/config/knowledge/false_weld_alarm.md b/intelligent_cabin/config/knowledge/false_weld_alarm.md
new file mode 100644
index 0000000..8727184
--- /dev/null
+++ b/intelligent_cabin/config/knowledge/false_weld_alarm.md
@@ -0,0 +1,82 @@
+# 虚焊报警处理 — 弯管工序 / 涡流探伤
+
+## 结论
+
+虚焊报警(涡流探伤触发)主要来自**弯管成形形态偏差**,需用激光扫描仪逐一确认模具点位,偏差超限时通过平板 AI 自动调节,再开机生产一小段验证。
+
+---
+
+## 处理步骤
+
+1. **定位报警来源**:确认涡流探伤仪报警段对应的管材来自哪个模具区间。
+2. **激光扫描检测**:使用激光扫描仪逐一扫描弯管工序中每个模具点位。
+3. **偏差判定**:平板 App 自动比对标准形态与当前形态,显示偏差值。
+4. **AI 自动调节**:偏差超出正常误差范围时,在平板上点击「AI 自动调节」。
+5. **验证**:调节完毕后开机生产约 1~2m,重新扫描确认偏差已消除。
+
+---
+
+## 激光扫描仪操作详情
+
+### 准备工作
+
+- 设备:激光轮廓扫描仪(安装在模具出口侧)
+- 前提:停机、管材退出模具区、扫描仪校准完成(上电 30s 后自动完成)
+
+### 扫描步骤
+
+1. 打开平板 App → 选择「弯管检测」→ 点击「开始扫描」
+2. 扫描仪激光线覆盖管材横截面,约 2s 完成单点采集
+3. 移动至下一模具出口,重复扫描
+4. 扫描完成后点击「生成报告」,平板显示差异云图
+
+### 偏差判定标准
+
+| 偏差等级 | 数值范围 | 建议操作 |
+|:---:|:---:|:---:|
+| 正常 | ≤ ±0.15mm | 无需处理 |
+| 警告 | ±0.15~0.30mm | 记录,下次保养时处理 |
+| 超限 | > ±0.30mm | 立即 AI 自动调节 |
+
+### 图片参考
+
+
+> 📷 **图1**:激光扫描仪安装位置(模具出口侧,红色激光线垂直于管材轴线)
+> 本地路径:`/assets/knowledge/laser_scan_setup.jpg`
+
+
+> 📷 **图2**:平板 App 差异云图示意(绿色=正常,黄色=警告,红色=超限)
+> 本地路径:`/assets/knowledge/tablet_deviation_map.jpg`
+
+### 视频教程
+
+
+> 🎬 **视频**:激光扫描仪完整操作流程(约 4 分钟)
+> 本地路径:`/assets/knowledge/laser_scan_tutorial.mp4`
+
+---
+
+## AI 自动调节说明
+
+1. 平板 App 偏差报告页,点击「AI 自动调节」
+2. 系统读取偏差向量,计算每个伺服轴的补偿量
+3. 补偿量写入 PLC,各伺服电机自动移动到新位置(约 15s)
+4. 屏幕显示「调节完成,请验证」
+
+> ⚠️ **注意**:调节期间禁止手动移动任何模具;若调节失败(伺服报警),请联系设备工程师。
+
+---
+
+## 相关设备
+
+- 涡流探伤仪型号:EC-500(上海康肽)
+- 激光扫描仪型号:LJ-X8200(基恩士)
+- 控制平板:焊管机 HMI Pro v2.3
+
+---
+
+## 引用文档
+
+- 《焊管机维护手册》第 7 章:弯管工序成形质量管理
+- 《激光扫描仪操作规程》SOP-QC-003 v1.2
+- 《涡流探伤报警处置流程》SOP-QC-007 v2.0
diff --git a/intelligent_cabin/config/responses.yml b/intelligent_cabin/config/responses.yml
new file mode 100644
index 0000000..1d6ce4d
--- /dev/null
+++ b/intelligent_cabin/config/responses.yml
@@ -0,0 +1,30 @@
+{
+ "templates": {
+ "ask_order_id": "请提供订单号。",
+ "ask_cancel_order_id": "请告诉我订单号。",
+ "ask_destination": "请告诉我要去哪里。",
+ "ask_temperature": "请告诉我要设置多少度。",
+ "workflow_failed": "这次没处理成功,请稍后再试。",
+ "workflow_summary_empty": "好的,已经处理完成。",
+ "confirm_retry": "我需要一个明确确认。请回复“确认”继续,或回复“取消”终止。",
+ "confirm_cancelled": "好的,已取消这一步。",
+ "ack_default": "收到,马上处理。",
+ "ack_cabin": "好的,马上处理。",
+ "ack_service": "收到,我来处理。",
+ "reject": "这个我暂时做不了,但我可以帮你查询、控制或转人工。",
+ "short_social_greeting": "你好,我在。",
+ "short_social_thanks": "不客气。",
+ "short_social_goodbye": "好的,有需要再叫我。",
+ "short_social_capability": "我可以帮你查订单、查物流、取消订单、导航、调空调、播放音乐或转人工。",
+ "short_social_default": "我在。",
+ "open_social_fallback": "可以和你聊两句,你也可以继续告诉我想处理什么。",
+ "pending_confirmation_hint": "当前这一步还在等你确认,回复“确认”或“取消”即可。",
+ "pending_slot_order_id": "当前还缺订单号,你继续告诉我订单号就行。",
+ "pending_slot_temperature": "当前还缺温度,你继续告诉我要设置多少度就行。",
+ "pending_slot_destination": "当前还缺目的地,你继续告诉我要去哪里就行。",
+ "pending_slot_default": "当前还缺一个关键信息,你继续补充就行。",
+ "pending_running": "当前任务还在继续,你也可以直接继续下一个指令。",
+ "task_stopped": "好的,已停止当前任务。",
+ "fallback": "我还没完全听懂,你可以换个简短说法,或告诉我是查询、控制还是转人工。"
+ }
+}
diff --git a/intelligent_cabin/config/rules.yml b/intelligent_cabin/config/rules.yml
new file mode 100644
index 0000000..f054b9e
--- /dev/null
+++ b/intelligent_cabin/config/rules.yml
@@ -0,0 +1,43 @@
+{
+ "stop": {
+ "phrases": [
+ "不用了",
+ "算了",
+ "先不要了",
+ "先这样吧",
+ "停一下",
+ "停止",
+ "停止当前任务",
+ "结束这次操作",
+ "别弄了",
+ "不需要了"
+ ]
+ },
+ "confirmation": {
+ "positive_tokens": [
+ "确认",
+ "好的",
+ "是",
+ "继续",
+ "可以",
+ "确定",
+ "yes",
+ "ok"
+ ],
+ "negative_tokens": [
+ "取消",
+ "不用",
+ "不要",
+ "否",
+ "no",
+ "算了",
+ "停止"
+ ],
+ "required_intents": [
+ "cs_cancel_order"
+ ],
+ "required_risk_levels": [
+ "high"
+ ]
+ }
+}
diff --git a/intelligent_cabin/config/voice_aliases.yml b/intelligent_cabin/config/voice_aliases.yml
new file mode 100644
index 0000000..8298856
--- /dev/null
+++ b/intelligent_cabin/config/voice_aliases.yml
@@ -0,0 +1,95 @@
+# voice_aliases.yml
+# 语音点击匹配词表 · 前端阶段 0 / 阶段 1 使用
+#
+# 说明:
+# - affirm_words / deny_words / cancel_words 用于阶段 0(停止词)和阶段 1a(等待确认状态的 affirm/deny)
+# - intent_aliases 用于各 Artifact 的 voiceActions 语音别名
+# - 部署到不同设备时只需替换本文件,无需改动代码
+#
+# TS 构建时由脚本 scripts/generate-voice-aliases.mjs 读取本文件,
+# 自动生成 src/lib/nlu/voice-aliases.gen.ts
+
+affirm_words:
+ - 确认
+ - 好的
+ - 执行
+ - 是
+ - 对
+ - 继续
+ - 好
+ - 可以
+ - 确定
+ - "ok"
+ - "yes"
+
+deny_words:
+ - 不行
+ - 不要
+ - 不
+ - 否
+ - "no"
+
+cancel_words:
+ - 取消
+ - 算了
+ - 不用了
+ - 停止
+ - 中止
+ - 放弃
+
+# ─── 工控设备别名(按 intent_id 分组)───────────────────────────────────────
+# 这里的 key 与 intelligent_cabin 里 IntentDefinition.intent_id 一一对应。
+# 前端 Artifact 创建时会读取这些别名,填入 ArtifactAction.voiceAliases。
+intent_aliases:
+ wirecut_start_run:
+ - 开始
+ - 启动
+ - 加工
+ - 跑起来
+ - 开始加工
+ - 启动加工
+
+ wirecut_stop_run:
+ - 停
+ - 停机
+ - 急停
+ - 停止
+ - 停止加工
+
+ wirecut_pause_run:
+ - 暂停
+ - 变频暂停
+
+ wirecut_resume_run:
+ - 继续
+ - 恢复
+ - 继续加工
+
+ wirecut_home_all:
+ - 回零
+ - 归零
+ - 回原点
+ - 全轴回零
+
+ wirecut_home_x:
+ - X轴回零
+ - x回零
+
+ wirecut_home_y:
+ - Y轴回零
+ - y回零
+
+ wirecut_set_speed:
+ - 设置速度
+ - 调速度
+ - 修改速度
+
+ wirecut_set_voltage:
+ - 设置电压
+ - 调电压
+ - 修改电压
+
+ wirecut_set_tension:
+ - 设置拉力
+ - 调拉力
+ - 修改拉力
diff --git a/intelligent_cabin/config/workflows.yml b/intelligent_cabin/config/workflows.yml
new file mode 100644
index 0000000..cc4f3ad
--- /dev/null
+++ b/intelligent_cabin/config/workflows.yml
@@ -0,0 +1,34 @@
+{
+ "templates": [
+ {
+ "template_id": "window_then_ac_sequence",
+ "workflow_type": "sequence",
+ "intent_sequence": ["cabin_window_open", "cabin_set_ac"],
+ "trigger_keywords": ["车窗", "空调"],
+ "step_overrides": [
+ {},
+ {}
+ ]
+ },
+ {
+ "template_id": "query_then_cancel_if_pending",
+ "workflow_type": "conditional",
+ "intent_sequence": ["cs_query_order", "cs_cancel_order"],
+ "trigger_keywords": ["订单"],
+ "step_overrides": [
+ {},
+ {
+ "depends_on": [1],
+ "condition": {
+ "source_step": 1,
+ "field": "order_status",
+ "operator": "equals",
+ "value": "pending_shipment",
+ "description": "仅在订单未发货时取消"
+ },
+ "requires_confirmation": true
+ }
+ ]
+ }
+ ]
+}
diff --git a/intelligent_cabin/models/local_bert_intent/config.json b/intelligent_cabin/models/local_bert_intent/config.json
new file mode 100644
index 0000000..ad03e66
--- /dev/null
+++ b/intelligent_cabin/models/local_bert_intent/config.json
@@ -0,0 +1,108 @@
+{
+ "architectures": [
+ "BertForSequenceClassification"
+ ],
+ "attention_probs_dropout_prob": 0.1,
+ "classifier_dropout": null,
+ "directionality": "bidi",
+ "dtype": "float32",
+ "gradient_checkpointing": false,
+ "hidden_act": "gelu",
+ "hidden_dropout_prob": 0.1,
+ "hidden_size": 768,
+ "id2label": {
+ "0": "__out_of_scope__",
+ "1": "__social__",
+ "2": "cabin_ac_off",
+ "3": "cabin_ac_on",
+ "4": "cabin_defog_front_on",
+ "5": "cabin_defog_rear_on",
+ "6": "cabin_fan_down",
+ "7": "cabin_fan_up",
+ "8": "cabin_lights_off",
+ "9": "cabin_lights_on",
+ "10": "cabin_lock_doors",
+ "11": "cabin_mirror_fold",
+ "12": "cabin_mirror_unfold",
+ "13": "cabin_nav_cancel",
+ "14": "cabin_nav_to",
+ "15": "cabin_next_track",
+ "16": "cabin_pause_music",
+ "17": "cabin_play_music",
+ "18": "cabin_previous_track",
+ "19": "cabin_seat_heat_off",
+ "20": "cabin_seat_heat_on",
+ "21": "cabin_set_ac",
+ "22": "cabin_sunroof_close",
+ "23": "cabin_sunroof_open",
+ "24": "cabin_unlock_doors",
+ "25": "cabin_volume_down",
+ "26": "cabin_volume_mute",
+ "27": "cabin_volume_up",
+ "28": "cabin_window_close",
+ "29": "cabin_window_open",
+ "30": "cabin_wiper_off",
+ "31": "cabin_wiper_on",
+ "32": "cs_cancel_order",
+ "33": "cs_query_logistics",
+ "34": "cs_query_order",
+ "35": "cs_transfer_human"
+ },
+ "initializer_range": 0.02,
+ "intermediate_size": 3072,
+ "label2id": {
+ "__out_of_scope__": 0,
+ "__social__": 1,
+ "cabin_ac_off": 2,
+ "cabin_ac_on": 3,
+ "cabin_defog_front_on": 4,
+ "cabin_defog_rear_on": 5,
+ "cabin_fan_down": 6,
+ "cabin_fan_up": 7,
+ "cabin_lights_off": 8,
+ "cabin_lights_on": 9,
+ "cabin_lock_doors": 10,
+ "cabin_mirror_fold": 11,
+ "cabin_mirror_unfold": 12,
+ "cabin_nav_cancel": 13,
+ "cabin_nav_to": 14,
+ "cabin_next_track": 15,
+ "cabin_pause_music": 16,
+ "cabin_play_music": 17,
+ "cabin_previous_track": 18,
+ "cabin_seat_heat_off": 19,
+ "cabin_seat_heat_on": 20,
+ "cabin_set_ac": 21,
+ "cabin_sunroof_close": 22,
+ "cabin_sunroof_open": 23,
+ "cabin_unlock_doors": 24,
+ "cabin_volume_down": 25,
+ "cabin_volume_mute": 26,
+ "cabin_volume_up": 27,
+ "cabin_window_close": 28,
+ "cabin_window_open": 29,
+ "cabin_wiper_off": 30,
+ "cabin_wiper_on": 31,
+ "cs_cancel_order": 32,
+ "cs_query_logistics": 33,
+ "cs_query_order": 34,
+ "cs_transfer_human": 35
+ },
+ "layer_norm_eps": 1e-12,
+ "max_position_embeddings": 512,
+ "model_type": "bert",
+ "num_attention_heads": 12,
+ "num_hidden_layers": 12,
+ "pad_token_id": 0,
+ "pooler_fc_size": 768,
+ "pooler_num_attention_heads": 12,
+ "pooler_num_fc_layers": 3,
+ "pooler_size_per_head": 128,
+ "pooler_type": "first_token_transform",
+ "position_embedding_type": "absolute",
+ "problem_type": "single_label_classification",
+ "transformers_version": "4.57.3",
+ "type_vocab_size": 2,
+ "use_cache": true,
+ "vocab_size": 21128
+}
diff --git a/intelligent_cabin/models/local_bert_intent/label_map.json b/intelligent_cabin/models/local_bert_intent/label_map.json
new file mode 100644
index 0000000..e9c5865
--- /dev/null
+++ b/intelligent_cabin/models/local_bert_intent/label_map.json
@@ -0,0 +1,38 @@
+{
+ "LABEL_0": "__out_of_scope__",
+ "LABEL_1": "__social__",
+ "LABEL_2": "cabin_ac_off",
+ "LABEL_3": "cabin_ac_on",
+ "LABEL_4": "cabin_defog_front_on",
+ "LABEL_5": "cabin_defog_rear_on",
+ "LABEL_6": "cabin_fan_down",
+ "LABEL_7": "cabin_fan_up",
+ "LABEL_8": "cabin_lights_off",
+ "LABEL_9": "cabin_lights_on",
+ "LABEL_10": "cabin_lock_doors",
+ "LABEL_11": "cabin_mirror_fold",
+ "LABEL_12": "cabin_mirror_unfold",
+ "LABEL_13": "cabin_nav_cancel",
+ "LABEL_14": "cabin_nav_to",
+ "LABEL_15": "cabin_next_track",
+ "LABEL_16": "cabin_pause_music",
+ "LABEL_17": "cabin_play_music",
+ "LABEL_18": "cabin_previous_track",
+ "LABEL_19": "cabin_seat_heat_off",
+ "LABEL_20": "cabin_seat_heat_on",
+ "LABEL_21": "cabin_set_ac",
+ "LABEL_22": "cabin_sunroof_close",
+ "LABEL_23": "cabin_sunroof_open",
+ "LABEL_24": "cabin_unlock_doors",
+ "LABEL_25": "cabin_volume_down",
+ "LABEL_26": "cabin_volume_mute",
+ "LABEL_27": "cabin_volume_up",
+ "LABEL_28": "cabin_window_close",
+ "LABEL_29": "cabin_window_open",
+ "LABEL_30": "cabin_wiper_off",
+ "LABEL_31": "cabin_wiper_on",
+ "LABEL_32": "cs_cancel_order",
+ "LABEL_33": "cs_query_logistics",
+ "LABEL_34": "cs_query_order",
+ "LABEL_35": "cs_transfer_human"
+}
\ No newline at end of file
diff --git a/intelligent_cabin/models/local_bert_intent/special_tokens_map.json b/intelligent_cabin/models/local_bert_intent/special_tokens_map.json
new file mode 100644
index 0000000..9bbecc1
--- /dev/null
+++ b/intelligent_cabin/models/local_bert_intent/special_tokens_map.json
@@ -0,0 +1,37 @@
+{
+ "cls_token": {
+ "content": "[CLS]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false
+ },
+ "mask_token": {
+ "content": "[MASK]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false
+ },
+ "pad_token": {
+ "content": "[PAD]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false
+ },
+ "sep_token": {
+ "content": "[SEP]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false
+ },
+ "unk_token": {
+ "content": "[UNK]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false
+ }
+}
diff --git a/intelligent_cabin/models/local_bert_intent/tokenizer.json b/intelligent_cabin/models/local_bert_intent/tokenizer.json
new file mode 100644
index 0000000..6b001d5
--- /dev/null
+++ b/intelligent_cabin/models/local_bert_intent/tokenizer.json
@@ -0,0 +1,21292 @@
+{
+ "version": "1.0",
+ "truncation": {
+ "direction": "Right",
+ "max_length": 48,
+ "strategy": "LongestFirst",
+ "stride": 0
+ },
+ "padding": {
+ "strategy": {
+ "Fixed": 48
+ },
+ "direction": "Right",
+ "pad_to_multiple_of": null,
+ "pad_id": 0,
+ "pad_type_id": 0,
+ "pad_token": "[PAD]"
+ },
+ "added_tokens": [
+ {
+ "id": 0,
+ "content": "[PAD]",
+ "single_word": false,
+ "lstrip": false,
+ "rstrip": false,
+ "normalized": false,
+ "special": true
+ },
+ {
+ "id": 100,
+ "content": "[UNK]",
+ "single_word": false,
+ "lstrip": false,
+ "rstrip": false,
+ "normalized": false,
+ "special": true
+ },
+ {
+ "id": 101,
+ "content": "[CLS]",
+ "single_word": false,
+ "lstrip": false,
+ "rstrip": false,
+ "normalized": false,
+ "special": true
+ },
+ {
+ "id": 102,
+ "content": "[SEP]",
+ "single_word": false,
+ "lstrip": false,
+ "rstrip": false,
+ "normalized": false,
+ "special": true
+ },
+ {
+ "id": 103,
+ "content": "[MASK]",
+ "single_word": false,
+ "lstrip": false,
+ "rstrip": false,
+ "normalized": false,
+ "special": true
+ }
+ ],
+ "normalizer": {
+ "type": "BertNormalizer",
+ "clean_text": true,
+ "handle_chinese_chars": true,
+ "strip_accents": null,
+ "lowercase": true
+ },
+ "pre_tokenizer": {
+ "type": "BertPreTokenizer"
+ },
+ "post_processor": {
+ "type": "TemplateProcessing",
+ "single": [
+ {
+ "SpecialToken": {
+ "id": "[CLS]",
+ "type_id": 0
+ }
+ },
+ {
+ "Sequence": {
+ "id": "A",
+ "type_id": 0
+ }
+ },
+ {
+ "SpecialToken": {
+ "id": "[SEP]",
+ "type_id": 0
+ }
+ }
+ ],
+ "pair": [
+ {
+ "SpecialToken": {
+ "id": "[CLS]",
+ "type_id": 0
+ }
+ },
+ {
+ "Sequence": {
+ "id": "A",
+ "type_id": 0
+ }
+ },
+ {
+ "SpecialToken": {
+ "id": "[SEP]",
+ "type_id": 0
+ }
+ },
+ {
+ "Sequence": {
+ "id": "B",
+ "type_id": 1
+ }
+ },
+ {
+ "SpecialToken": {
+ "id": "[SEP]",
+ "type_id": 1
+ }
+ }
+ ],
+ "special_tokens": {
+ "[CLS]": {
+ "id": "[CLS]",
+ "ids": [
+ 101
+ ],
+ "tokens": [
+ "[CLS]"
+ ]
+ },
+ "[SEP]": {
+ "id": "[SEP]",
+ "ids": [
+ 102
+ ],
+ "tokens": [
+ "[SEP]"
+ ]
+ }
+ }
+ },
+ "decoder": {
+ "type": "WordPiece",
+ "prefix": "##",
+ "cleanup": true
+ },
+ "model": {
+ "type": "WordPiece",
+ "unk_token": "[UNK]",
+ "continuing_subword_prefix": "##",
+ "max_input_chars_per_word": 100,
+ "vocab": {
+ "[PAD]": 0,
+ "[unused1]": 1,
+ "[unused2]": 2,
+ "[unused3]": 3,
+ "[unused4]": 4,
+ "[unused5]": 5,
+ "[unused6]": 6,
+ "[unused7]": 7,
+ "[unused8]": 8,
+ "[unused9]": 9,
+ "[unused10]": 10,
+ "[unused11]": 11,
+ "[unused12]": 12,
+ "[unused13]": 13,
+ "[unused14]": 14,
+ "[unused15]": 15,
+ "[unused16]": 16,
+ "[unused17]": 17,
+ "[unused18]": 18,
+ "[unused19]": 19,
+ "[unused20]": 20,
+ "[unused21]": 21,
+ "[unused22]": 22,
+ "[unused23]": 23,
+ "[unused24]": 24,
+ "[unused25]": 25,
+ "[unused26]": 26,
+ "[unused27]": 27,
+ "[unused28]": 28,
+ "[unused29]": 29,
+ "[unused30]": 30,
+ "[unused31]": 31,
+ "[unused32]": 32,
+ "[unused33]": 33,
+ "[unused34]": 34,
+ "[unused35]": 35,
+ "[unused36]": 36,
+ "[unused37]": 37,
+ "[unused38]": 38,
+ "[unused39]": 39,
+ "[unused40]": 40,
+ "[unused41]": 41,
+ "[unused42]": 42,
+ "[unused43]": 43,
+ "[unused44]": 44,
+ "[unused45]": 45,
+ "[unused46]": 46,
+ "[unused47]": 47,
+ "[unused48]": 48,
+ "[unused49]": 49,
+ "[unused50]": 50,
+ "[unused51]": 51,
+ "[unused52]": 52,
+ "[unused53]": 53,
+ "[unused54]": 54,
+ "[unused55]": 55,
+ "[unused56]": 56,
+ "[unused57]": 57,
+ "[unused58]": 58,
+ "[unused59]": 59,
+ "[unused60]": 60,
+ "[unused61]": 61,
+ "[unused62]": 62,
+ "[unused63]": 63,
+ "[unused64]": 64,
+ "[unused65]": 65,
+ "[unused66]": 66,
+ "[unused67]": 67,
+ "[unused68]": 68,
+ "[unused69]": 69,
+ "[unused70]": 70,
+ "[unused71]": 71,
+ "[unused72]": 72,
+ "[unused73]": 73,
+ "[unused74]": 74,
+ "[unused75]": 75,
+ "[unused76]": 76,
+ "[unused77]": 77,
+ "[unused78]": 78,
+ "[unused79]": 79,
+ "[unused80]": 80,
+ "[unused81]": 81,
+ "[unused82]": 82,
+ "[unused83]": 83,
+ "[unused84]": 84,
+ "[unused85]": 85,
+ "[unused86]": 86,
+ "[unused87]": 87,
+ "[unused88]": 88,
+ "[unused89]": 89,
+ "[unused90]": 90,
+ "[unused91]": 91,
+ "[unused92]": 92,
+ "[unused93]": 93,
+ "[unused94]": 94,
+ "[unused95]": 95,
+ "[unused96]": 96,
+ "[unused97]": 97,
+ "[unused98]": 98,
+ "[unused99]": 99,
+ "[UNK]": 100,
+ "[CLS]": 101,
+ "[SEP]": 102,
+ "[MASK]": 103,
+ "": 104,
+ "": 105,
+ "!": 106,
+ "\"": 107,
+ "#": 108,
+ "$": 109,
+ "%": 110,
+ "&": 111,
+ "'": 112,
+ "(": 113,
+ ")": 114,
+ "*": 115,
+ "+": 116,
+ ",": 117,
+ "-": 118,
+ ".": 119,
+ "/": 120,
+ "0": 121,
+ "1": 122,
+ "2": 123,
+ "3": 124,
+ "4": 125,
+ "5": 126,
+ "6": 127,
+ "7": 128,
+ "8": 129,
+ "9": 130,
+ ":": 131,
+ ";": 132,
+ "<": 133,
+ "=": 134,
+ ">": 135,
+ "?": 136,
+ "@": 137,
+ "[": 138,
+ "\\": 139,
+ "]": 140,
+ "^": 141,
+ "_": 142,
+ "a": 143,
+ "b": 144,
+ "c": 145,
+ "d": 146,
+ "e": 147,
+ "f": 148,
+ "g": 149,
+ "h": 150,
+ "i": 151,
+ "j": 152,
+ "k": 153,
+ "l": 154,
+ "m": 155,
+ "n": 156,
+ "o": 157,
+ "p": 158,
+ "q": 159,
+ "r": 160,
+ "s": 161,
+ "t": 162,
+ "u": 163,
+ "v": 164,
+ "w": 165,
+ "x": 166,
+ "y": 167,
+ "z": 168,
+ "{": 169,
+ "|": 170,
+ "}": 171,
+ "~": 172,
+ "£": 173,
+ "¤": 174,
+ "¥": 175,
+ "§": 176,
+ "©": 177,
+ "«": 178,
+ "®": 179,
+ "°": 180,
+ "±": 181,
+ "²": 182,
+ "³": 183,
+ "µ": 184,
+ "·": 185,
+ "¹": 186,
+ "º": 187,
+ "»": 188,
+ "¼": 189,
+ "×": 190,
+ "ß": 191,
+ "æ": 192,
+ "÷": 193,
+ "ø": 194,
+ "đ": 195,
+ "ŋ": 196,
+ "ɔ": 197,
+ "ə": 198,
+ "ɡ": 199,
+ "ʰ": 200,
+ "ˇ": 201,
+ "ˈ": 202,
+ "ˊ": 203,
+ "ˋ": 204,
+ "ˍ": 205,
+ "ː": 206,
+ "˙": 207,
+ "˚": 208,
+ "ˢ": 209,
+ "α": 210,
+ "β": 211,
+ "γ": 212,
+ "δ": 213,
+ "ε": 214,
+ "η": 215,
+ "θ": 216,
+ "ι": 217,
+ "κ": 218,
+ "λ": 219,
+ "μ": 220,
+ "ν": 221,
+ "ο": 222,
+ "π": 223,
+ "ρ": 224,
+ "ς": 225,
+ "σ": 226,
+ "τ": 227,
+ "υ": 228,
+ "φ": 229,
+ "χ": 230,
+ "ψ": 231,
+ "ω": 232,
+ "а": 233,
+ "б": 234,
+ "в": 235,
+ "г": 236,
+ "д": 237,
+ "е": 238,
+ "ж": 239,
+ "з": 240,
+ "и": 241,
+ "к": 242,
+ "л": 243,
+ "м": 244,
+ "н": 245,
+ "о": 246,
+ "п": 247,
+ "р": 248,
+ "с": 249,
+ "т": 250,
+ "у": 251,
+ "ф": 252,
+ "х": 253,
+ "ц": 254,
+ "ч": 255,
+ "ш": 256,
+ "ы": 257,
+ "ь": 258,
+ "я": 259,
+ "і": 260,
+ "ا": 261,
+ "ب": 262,
+ "ة": 263,
+ "ت": 264,
+ "د": 265,
+ "ر": 266,
+ "س": 267,
+ "ع": 268,
+ "ل": 269,
+ "م": 270,
+ "ن": 271,
+ "ه": 272,
+ "و": 273,
+ "ي": 274,
+ "۩": 275,
+ "ก": 276,
+ "ง": 277,
+ "น": 278,
+ "ม": 279,
+ "ย": 280,
+ "ร": 281,
+ "อ": 282,
+ "า": 283,
+ "เ": 284,
+ "๑": 285,
+ "་": 286,
+ "ღ": 287,
+ "ᄀ": 288,
+ "ᄁ": 289,
+ "ᄂ": 290,
+ "ᄃ": 291,
+ "ᄅ": 292,
+ "ᄆ": 293,
+ "ᄇ": 294,
+ "ᄈ": 295,
+ "ᄉ": 296,
+ "ᄋ": 297,
+ "ᄌ": 298,
+ "ᄎ": 299,
+ "ᄏ": 300,
+ "ᄐ": 301,
+ "ᄑ": 302,
+ "ᄒ": 303,
+ "ᅡ": 304,
+ "ᅢ": 305,
+ "ᅣ": 306,
+ "ᅥ": 307,
+ "ᅦ": 308,
+ "ᅧ": 309,
+ "ᅨ": 310,
+ "ᅩ": 311,
+ "ᅪ": 312,
+ "ᅬ": 313,
+ "ᅭ": 314,
+ "ᅮ": 315,
+ "ᅯ": 316,
+ "ᅲ": 317,
+ "ᅳ": 318,
+ "ᅴ": 319,
+ "ᅵ": 320,
+ "ᆨ": 321,
+ "ᆫ": 322,
+ "ᆯ": 323,
+ "ᆷ": 324,
+ "ᆸ": 325,
+ "ᆺ": 326,
+ "ᆻ": 327,
+ "ᆼ": 328,
+ "ᗜ": 329,
+ "ᵃ": 330,
+ "ᵉ": 331,
+ "ᵍ": 332,
+ "ᵏ": 333,
+ "ᵐ": 334,
+ "ᵒ": 335,
+ "ᵘ": 336,
+ "‖": 337,
+ "„": 338,
+ "†": 339,
+ "•": 340,
+ "‥": 341,
+ "‧": 342,
+ "
": 343,
+ "‰": 344,
+ "′": 345,
+ "″": 346,
+ "‹": 347,
+ "›": 348,
+ "※": 349,
+ "‿": 350,
+ "⁄": 351,
+ "ⁱ": 352,
+ "⁺": 353,
+ "ⁿ": 354,
+ "₁": 355,
+ "₂": 356,
+ "₃": 357,
+ "₄": 358,
+ "€": 359,
+ "℃": 360,
+ "№": 361,
+ "™": 362,
+ "ⅰ": 363,
+ "ⅱ": 364,
+ "ⅲ": 365,
+ "ⅳ": 366,
+ "ⅴ": 367,
+ "←": 368,
+ "↑": 369,
+ "→": 370,
+ "↓": 371,
+ "↔": 372,
+ "↗": 373,
+ "↘": 374,
+ "⇒": 375,
+ "∀": 376,
+ "−": 377,
+ "∕": 378,
+ "∙": 379,
+ "√": 380,
+ "∞": 381,
+ "∟": 382,
+ "∠": 383,
+ "∣": 384,
+ "∥": 385,
+ "∩": 386,
+ "∮": 387,
+ "∶": 388,
+ "∼": 389,
+ "∽": 390,
+ "≈": 391,
+ "≒": 392,
+ "≡": 393,
+ "≤": 394,
+ "≥": 395,
+ "≦": 396,
+ "≧": 397,
+ "≪": 398,
+ "≫": 399,
+ "⊙": 400,
+ "⋅": 401,
+ "⋈": 402,
+ "⋯": 403,
+ "⌒": 404,
+ "①": 405,
+ "②": 406,
+ "③": 407,
+ "④": 408,
+ "⑤": 409,
+ "⑥": 410,
+ "⑦": 411,
+ "⑧": 412,
+ "⑨": 413,
+ "⑩": 414,
+ "⑴": 415,
+ "⑵": 416,
+ "⑶": 417,
+ "⑷": 418,
+ "⑸": 419,
+ "⒈": 420,
+ "⒉": 421,
+ "⒊": 422,
+ "⒋": 423,
+ "ⓒ": 424,
+ "ⓔ": 425,
+ "ⓘ": 426,
+ "─": 427,
+ "━": 428,
+ "│": 429,
+ "┃": 430,
+ "┅": 431,
+ "┆": 432,
+ "┊": 433,
+ "┌": 434,
+ "└": 435,
+ "├": 436,
+ "┣": 437,
+ "═": 438,
+ "║": 439,
+ "╚": 440,
+ "╞": 441,
+ "╠": 442,
+ "╭": 443,
+ "╮": 444,
+ "╯": 445,
+ "╰": 446,
+ "╱": 447,
+ "╳": 448,
+ "▂": 449,
+ "▃": 450,
+ "▅": 451,
+ "▇": 452,
+ "█": 453,
+ "▉": 454,
+ "▋": 455,
+ "▌": 456,
+ "▍": 457,
+ "▎": 458,
+ "■": 459,
+ "□": 460,
+ "▪": 461,
+ "▫": 462,
+ "▬": 463,
+ "▲": 464,
+ "△": 465,
+ "▶": 466,
+ "►": 467,
+ "▼": 468,
+ "▽": 469,
+ "◆": 470,
+ "◇": 471,
+ "○": 472,
+ "◎": 473,
+ "●": 474,
+ "◕": 475,
+ "◠": 476,
+ "◢": 477,
+ "◤": 478,
+ "☀": 479,
+ "★": 480,
+ "☆": 481,
+ "☕": 482,
+ "☞": 483,
+ "☺": 484,
+ "☼": 485,
+ "♀": 486,
+ "♂": 487,
+ "♠": 488,
+ "♡": 489,
+ "♣": 490,
+ "♥": 491,
+ "♦": 492,
+ "♪": 493,
+ "♫": 494,
+ "♬": 495,
+ "✈": 496,
+ "✔": 497,
+ "✕": 498,
+ "✖": 499,
+ "✦": 500,
+ "✨": 501,
+ "✪": 502,
+ "✰": 503,
+ "✿": 504,
+ "❀": 505,
+ "❤": 506,
+ "➜": 507,
+ "➤": 508,
+ "⦿": 509,
+ "、": 510,
+ "。": 511,
+ "〃": 512,
+ "々": 513,
+ "〇": 514,
+ "〈": 515,
+ "〉": 516,
+ "《": 517,
+ "》": 518,
+ "「": 519,
+ "」": 520,
+ "『": 521,
+ "』": 522,
+ "【": 523,
+ "】": 524,
+ "〓": 525,
+ "〔": 526,
+ "〕": 527,
+ "〖": 528,
+ "〗": 529,
+ "〜": 530,
+ "〝": 531,
+ "〞": 532,
+ "ぁ": 533,
+ "あ": 534,
+ "ぃ": 535,
+ "い": 536,
+ "う": 537,
+ "ぇ": 538,
+ "え": 539,
+ "お": 540,
+ "か": 541,
+ "き": 542,
+ "く": 543,
+ "け": 544,
+ "こ": 545,
+ "さ": 546,
+ "し": 547,
+ "す": 548,
+ "せ": 549,
+ "そ": 550,
+ "た": 551,
+ "ち": 552,
+ "っ": 553,
+ "つ": 554,
+ "て": 555,
+ "と": 556,
+ "な": 557,
+ "に": 558,
+ "ぬ": 559,
+ "ね": 560,
+ "の": 561,
+ "は": 562,
+ "ひ": 563,
+ "ふ": 564,
+ "へ": 565,
+ "ほ": 566,
+ "ま": 567,
+ "み": 568,
+ "む": 569,
+ "め": 570,
+ "も": 571,
+ "ゃ": 572,
+ "や": 573,
+ "ゅ": 574,
+ "ゆ": 575,
+ "ょ": 576,
+ "よ": 577,
+ "ら": 578,
+ "り": 579,
+ "る": 580,
+ "れ": 581,
+ "ろ": 582,
+ "わ": 583,
+ "を": 584,
+ "ん": 585,
+ "゜": 586,
+ "ゝ": 587,
+ "ァ": 588,
+ "ア": 589,
+ "ィ": 590,
+ "イ": 591,
+ "ゥ": 592,
+ "ウ": 593,
+ "ェ": 594,
+ "エ": 595,
+ "ォ": 596,
+ "オ": 597,
+ "カ": 598,
+ "キ": 599,
+ "ク": 600,
+ "ケ": 601,
+ "コ": 602,
+ "サ": 603,
+ "シ": 604,
+ "ス": 605,
+ "セ": 606,
+ "ソ": 607,
+ "タ": 608,
+ "チ": 609,
+ "ッ": 610,
+ "ツ": 611,
+ "テ": 612,
+ "ト": 613,
+ "ナ": 614,
+ "ニ": 615,
+ "ヌ": 616,
+ "ネ": 617,
+ "ノ": 618,
+ "ハ": 619,
+ "ヒ": 620,
+ "フ": 621,
+ "ヘ": 622,
+ "ホ": 623,
+ "マ": 624,
+ "ミ": 625,
+ "ム": 626,
+ "メ": 627,
+ "モ": 628,
+ "ャ": 629,
+ "ヤ": 630,
+ "ュ": 631,
+ "ユ": 632,
+ "ョ": 633,
+ "ヨ": 634,
+ "ラ": 635,
+ "リ": 636,
+ "ル": 637,
+ "レ": 638,
+ "ロ": 639,
+ "ワ": 640,
+ "ヲ": 641,
+ "ン": 642,
+ "ヶ": 643,
+ "・": 644,
+ "ー": 645,
+ "ヽ": 646,
+ "ㄅ": 647,
+ "ㄆ": 648,
+ "ㄇ": 649,
+ "ㄉ": 650,
+ "ㄋ": 651,
+ "ㄌ": 652,
+ "ㄍ": 653,
+ "ㄎ": 654,
+ "ㄏ": 655,
+ "ㄒ": 656,
+ "ㄚ": 657,
+ "ㄛ": 658,
+ "ㄞ": 659,
+ "ㄟ": 660,
+ "ㄢ": 661,
+ "ㄤ": 662,
+ "ㄥ": 663,
+ "ㄧ": 664,
+ "ㄨ": 665,
+ "ㆍ": 666,
+ "㈦": 667,
+ "㊣": 668,
+ "㎡": 669,
+ "㗎": 670,
+ "一": 671,
+ "丁": 672,
+ "七": 673,
+ "万": 674,
+ "丈": 675,
+ "三": 676,
+ "上": 677,
+ "下": 678,
+ "不": 679,
+ "与": 680,
+ "丐": 681,
+ "丑": 682,
+ "专": 683,
+ "且": 684,
+ "丕": 685,
+ "世": 686,
+ "丘": 687,
+ "丙": 688,
+ "业": 689,
+ "丛": 690,
+ "东": 691,
+ "丝": 692,
+ "丞": 693,
+ "丟": 694,
+ "両": 695,
+ "丢": 696,
+ "两": 697,
+ "严": 698,
+ "並": 699,
+ "丧": 700,
+ "丨": 701,
+ "个": 702,
+ "丫": 703,
+ "中": 704,
+ "丰": 705,
+ "串": 706,
+ "临": 707,
+ "丶": 708,
+ "丸": 709,
+ "丹": 710,
+ "为": 711,
+ "主": 712,
+ "丼": 713,
+ "丽": 714,
+ "举": 715,
+ "丿": 716,
+ "乂": 717,
+ "乃": 718,
+ "久": 719,
+ "么": 720,
+ "义": 721,
+ "之": 722,
+ "乌": 723,
+ "乍": 724,
+ "乎": 725,
+ "乏": 726,
+ "乐": 727,
+ "乒": 728,
+ "乓": 729,
+ "乔": 730,
+ "乖": 731,
+ "乗": 732,
+ "乘": 733,
+ "乙": 734,
+ "乜": 735,
+ "九": 736,
+ "乞": 737,
+ "也": 738,
+ "习": 739,
+ "乡": 740,
+ "书": 741,
+ "乩": 742,
+ "买": 743,
+ "乱": 744,
+ "乳": 745,
+ "乾": 746,
+ "亀": 747,
+ "亂": 748,
+ "了": 749,
+ "予": 750,
+ "争": 751,
+ "事": 752,
+ "二": 753,
+ "于": 754,
+ "亏": 755,
+ "云": 756,
+ "互": 757,
+ "五": 758,
+ "井": 759,
+ "亘": 760,
+ "亙": 761,
+ "亚": 762,
+ "些": 763,
+ "亜": 764,
+ "亞": 765,
+ "亟": 766,
+ "亡": 767,
+ "亢": 768,
+ "交": 769,
+ "亥": 770,
+ "亦": 771,
+ "产": 772,
+ "亨": 773,
+ "亩": 774,
+ "享": 775,
+ "京": 776,
+ "亭": 777,
+ "亮": 778,
+ "亲": 779,
+ "亳": 780,
+ "亵": 781,
+ "人": 782,
+ "亿": 783,
+ "什": 784,
+ "仁": 785,
+ "仃": 786,
+ "仄": 787,
+ "仅": 788,
+ "仆": 789,
+ "仇": 790,
+ "今": 791,
+ "介": 792,
+ "仍": 793,
+ "从": 794,
+ "仏": 795,
+ "仑": 796,
+ "仓": 797,
+ "仔": 798,
+ "仕": 799,
+ "他": 800,
+ "仗": 801,
+ "付": 802,
+ "仙": 803,
+ "仝": 804,
+ "仞": 805,
+ "仟": 806,
+ "代": 807,
+ "令": 808,
+ "以": 809,
+ "仨": 810,
+ "仪": 811,
+ "们": 812,
+ "仮": 813,
+ "仰": 814,
+ "仲": 815,
+ "件": 816,
+ "价": 817,
+ "任": 818,
+ "份": 819,
+ "仿": 820,
+ "企": 821,
+ "伉": 822,
+ "伊": 823,
+ "伍": 824,
+ "伎": 825,
+ "伏": 826,
+ "伐": 827,
+ "休": 828,
+ "伕": 829,
+ "众": 830,
+ "优": 831,
+ "伙": 832,
+ "会": 833,
+ "伝": 834,
+ "伞": 835,
+ "伟": 836,
+ "传": 837,
+ "伢": 838,
+ "伤": 839,
+ "伦": 840,
+ "伪": 841,
+ "伫": 842,
+ "伯": 843,
+ "估": 844,
+ "伴": 845,
+ "伶": 846,
+ "伸": 847,
+ "伺": 848,
+ "似": 849,
+ "伽": 850,
+ "佃": 851,
+ "但": 852,
+ "佇": 853,
+ "佈": 854,
+ "位": 855,
+ "低": 856,
+ "住": 857,
+ "佐": 858,
+ "佑": 859,
+ "体": 860,
+ "佔": 861,
+ "何": 862,
+ "佗": 863,
+ "佘": 864,
+ "余": 865,
+ "佚": 866,
+ "佛": 867,
+ "作": 868,
+ "佝": 869,
+ "佞": 870,
+ "佟": 871,
+ "你": 872,
+ "佢": 873,
+ "佣": 874,
+ "佤": 875,
+ "佥": 876,
+ "佩": 877,
+ "佬": 878,
+ "佯": 879,
+ "佰": 880,
+ "佳": 881,
+ "併": 882,
+ "佶": 883,
+ "佻": 884,
+ "佼": 885,
+ "使": 886,
+ "侃": 887,
+ "侄": 888,
+ "來": 889,
+ "侈": 890,
+ "例": 891,
+ "侍": 892,
+ "侏": 893,
+ "侑": 894,
+ "侖": 895,
+ "侗": 896,
+ "供": 897,
+ "依": 898,
+ "侠": 899,
+ "価": 900,
+ "侣": 901,
+ "侥": 902,
+ "侦": 903,
+ "侧": 904,
+ "侨": 905,
+ "侬": 906,
+ "侮": 907,
+ "侯": 908,
+ "侵": 909,
+ "侶": 910,
+ "侷": 911,
+ "便": 912,
+ "係": 913,
+ "促": 914,
+ "俄": 915,
+ "俊": 916,
+ "俎": 917,
+ "俏": 918,
+ "俐": 919,
+ "俑": 920,
+ "俗": 921,
+ "俘": 922,
+ "俚": 923,
+ "保": 924,
+ "俞": 925,
+ "俟": 926,
+ "俠": 927,
+ "信": 928,
+ "俨": 929,
+ "俩": 930,
+ "俪": 931,
+ "俬": 932,
+ "俭": 933,
+ "修": 934,
+ "俯": 935,
+ "俱": 936,
+ "俳": 937,
+ "俸": 938,
+ "俺": 939,
+ "俾": 940,
+ "倆": 941,
+ "倉": 942,
+ "個": 943,
+ "倌": 944,
+ "倍": 945,
+ "倏": 946,
+ "們": 947,
+ "倒": 948,
+ "倔": 949,
+ "倖": 950,
+ "倘": 951,
+ "候": 952,
+ "倚": 953,
+ "倜": 954,
+ "借": 955,
+ "倡": 956,
+ "値": 957,
+ "倦": 958,
+ "倩": 959,
+ "倪": 960,
+ "倫": 961,
+ "倬": 962,
+ "倭": 963,
+ "倶": 964,
+ "债": 965,
+ "值": 966,
+ "倾": 967,
+ "偃": 968,
+ "假": 969,
+ "偈": 970,
+ "偉": 971,
+ "偌": 972,
+ "偎": 973,
+ "偏": 974,
+ "偕": 975,
+ "做": 976,
+ "停": 977,
+ "健": 978,
+ "側": 979,
+ "偵": 980,
+ "偶": 981,
+ "偷": 982,
+ "偻": 983,
+ "偽": 984,
+ "偿": 985,
+ "傀": 986,
+ "傅": 987,
+ "傍": 988,
+ "傑": 989,
+ "傘": 990,
+ "備": 991,
+ "傚": 992,
+ "傢": 993,
+ "傣": 994,
+ "傥": 995,
+ "储": 996,
+ "傩": 997,
+ "催": 998,
+ "傭": 999,
+ "傲": 1000,
+ "傳": 1001,
+ "債": 1002,
+ "傷": 1003,
+ "傻": 1004,
+ "傾": 1005,
+ "僅": 1006,
+ "働": 1007,
+ "像": 1008,
+ "僑": 1009,
+ "僕": 1010,
+ "僖": 1011,
+ "僚": 1012,
+ "僥": 1013,
+ "僧": 1014,
+ "僭": 1015,
+ "僮": 1016,
+ "僱": 1017,
+ "僵": 1018,
+ "價": 1019,
+ "僻": 1020,
+ "儀": 1021,
+ "儂": 1022,
+ "億": 1023,
+ "儆": 1024,
+ "儉": 1025,
+ "儋": 1026,
+ "儒": 1027,
+ "儕": 1028,
+ "儘": 1029,
+ "償": 1030,
+ "儡": 1031,
+ "優": 1032,
+ "儲": 1033,
+ "儷": 1034,
+ "儼": 1035,
+ "儿": 1036,
+ "兀": 1037,
+ "允": 1038,
+ "元": 1039,
+ "兄": 1040,
+ "充": 1041,
+ "兆": 1042,
+ "兇": 1043,
+ "先": 1044,
+ "光": 1045,
+ "克": 1046,
+ "兌": 1047,
+ "免": 1048,
+ "児": 1049,
+ "兑": 1050,
+ "兒": 1051,
+ "兔": 1052,
+ "兖": 1053,
+ "党": 1054,
+ "兜": 1055,
+ "兢": 1056,
+ "入": 1057,
+ "內": 1058,
+ "全": 1059,
+ "兩": 1060,
+ "八": 1061,
+ "公": 1062,
+ "六": 1063,
+ "兮": 1064,
+ "兰": 1065,
+ "共": 1066,
+ "兲": 1067,
+ "关": 1068,
+ "兴": 1069,
+ "兵": 1070,
+ "其": 1071,
+ "具": 1072,
+ "典": 1073,
+ "兹": 1074,
+ "养": 1075,
+ "兼": 1076,
+ "兽": 1077,
+ "冀": 1078,
+ "内": 1079,
+ "円": 1080,
+ "冇": 1081,
+ "冈": 1082,
+ "冉": 1083,
+ "冊": 1084,
+ "册": 1085,
+ "再": 1086,
+ "冏": 1087,
+ "冒": 1088,
+ "冕": 1089,
+ "冗": 1090,
+ "写": 1091,
+ "军": 1092,
+ "农": 1093,
+ "冠": 1094,
+ "冢": 1095,
+ "冤": 1096,
+ "冥": 1097,
+ "冨": 1098,
+ "冪": 1099,
+ "冬": 1100,
+ "冯": 1101,
+ "冰": 1102,
+ "冲": 1103,
+ "决": 1104,
+ "况": 1105,
+ "冶": 1106,
+ "冷": 1107,
+ "冻": 1108,
+ "冼": 1109,
+ "冽": 1110,
+ "冾": 1111,
+ "净": 1112,
+ "凄": 1113,
+ "准": 1114,
+ "凇": 1115,
+ "凈": 1116,
+ "凉": 1117,
+ "凋": 1118,
+ "凌": 1119,
+ "凍": 1120,
+ "减": 1121,
+ "凑": 1122,
+ "凛": 1123,
+ "凜": 1124,
+ "凝": 1125,
+ "几": 1126,
+ "凡": 1127,
+ "凤": 1128,
+ "処": 1129,
+ "凪": 1130,
+ "凭": 1131,
+ "凯": 1132,
+ "凰": 1133,
+ "凱": 1134,
+ "凳": 1135,
+ "凶": 1136,
+ "凸": 1137,
+ "凹": 1138,
+ "出": 1139,
+ "击": 1140,
+ "函": 1141,
+ "凿": 1142,
+ "刀": 1143,
+ "刁": 1144,
+ "刃": 1145,
+ "分": 1146,
+ "切": 1147,
+ "刈": 1148,
+ "刊": 1149,
+ "刍": 1150,
+ "刎": 1151,
+ "刑": 1152,
+ "划": 1153,
+ "列": 1154,
+ "刘": 1155,
+ "则": 1156,
+ "刚": 1157,
+ "创": 1158,
+ "初": 1159,
+ "删": 1160,
+ "判": 1161,
+ "別": 1162,
+ "刨": 1163,
+ "利": 1164,
+ "刪": 1165,
+ "别": 1166,
+ "刮": 1167,
+ "到": 1168,
+ "制": 1169,
+ "刷": 1170,
+ "券": 1171,
+ "刹": 1172,
+ "刺": 1173,
+ "刻": 1174,
+ "刽": 1175,
+ "剁": 1176,
+ "剂": 1177,
+ "剃": 1178,
+ "則": 1179,
+ "剉": 1180,
+ "削": 1181,
+ "剋": 1182,
+ "剌": 1183,
+ "前": 1184,
+ "剎": 1185,
+ "剐": 1186,
+ "剑": 1187,
+ "剔": 1188,
+ "剖": 1189,
+ "剛": 1190,
+ "剜": 1191,
+ "剝": 1192,
+ "剣": 1193,
+ "剤": 1194,
+ "剥": 1195,
+ "剧": 1196,
+ "剩": 1197,
+ "剪": 1198,
+ "副": 1199,
+ "割": 1200,
+ "創": 1201,
+ "剷": 1202,
+ "剽": 1203,
+ "剿": 1204,
+ "劃": 1205,
+ "劇": 1206,
+ "劈": 1207,
+ "劉": 1208,
+ "劊": 1209,
+ "劍": 1210,
+ "劏": 1211,
+ "劑": 1212,
+ "力": 1213,
+ "劝": 1214,
+ "办": 1215,
+ "功": 1216,
+ "加": 1217,
+ "务": 1218,
+ "劣": 1219,
+ "动": 1220,
+ "助": 1221,
+ "努": 1222,
+ "劫": 1223,
+ "劭": 1224,
+ "励": 1225,
+ "劲": 1226,
+ "劳": 1227,
+ "労": 1228,
+ "劵": 1229,
+ "効": 1230,
+ "劾": 1231,
+ "势": 1232,
+ "勁": 1233,
+ "勃": 1234,
+ "勇": 1235,
+ "勉": 1236,
+ "勋": 1237,
+ "勐": 1238,
+ "勒": 1239,
+ "動": 1240,
+ "勖": 1241,
+ "勘": 1242,
+ "務": 1243,
+ "勛": 1244,
+ "勝": 1245,
+ "勞": 1246,
+ "募": 1247,
+ "勢": 1248,
+ "勤": 1249,
+ "勧": 1250,
+ "勳": 1251,
+ "勵": 1252,
+ "勸": 1253,
+ "勺": 1254,
+ "勻": 1255,
+ "勾": 1256,
+ "勿": 1257,
+ "匀": 1258,
+ "包": 1259,
+ "匆": 1260,
+ "匈": 1261,
+ "匍": 1262,
+ "匐": 1263,
+ "匕": 1264,
+ "化": 1265,
+ "北": 1266,
+ "匙": 1267,
+ "匝": 1268,
+ "匠": 1269,
+ "匡": 1270,
+ "匣": 1271,
+ "匪": 1272,
+ "匮": 1273,
+ "匯": 1274,
+ "匱": 1275,
+ "匹": 1276,
+ "区": 1277,
+ "医": 1278,
+ "匾": 1279,
+ "匿": 1280,
+ "區": 1281,
+ "十": 1282,
+ "千": 1283,
+ "卅": 1284,
+ "升": 1285,
+ "午": 1286,
+ "卉": 1287,
+ "半": 1288,
+ "卍": 1289,
+ "华": 1290,
+ "协": 1291,
+ "卑": 1292,
+ "卒": 1293,
+ "卓": 1294,
+ "協": 1295,
+ "单": 1296,
+ "卖": 1297,
+ "南": 1298,
+ "単": 1299,
+ "博": 1300,
+ "卜": 1301,
+ "卞": 1302,
+ "卟": 1303,
+ "占": 1304,
+ "卡": 1305,
+ "卢": 1306,
+ "卤": 1307,
+ "卦": 1308,
+ "卧": 1309,
+ "卫": 1310,
+ "卮": 1311,
+ "卯": 1312,
+ "印": 1313,
+ "危": 1314,
+ "即": 1315,
+ "却": 1316,
+ "卵": 1317,
+ "卷": 1318,
+ "卸": 1319,
+ "卻": 1320,
+ "卿": 1321,
+ "厂": 1322,
+ "厄": 1323,
+ "厅": 1324,
+ "历": 1325,
+ "厉": 1326,
+ "压": 1327,
+ "厌": 1328,
+ "厕": 1329,
+ "厘": 1330,
+ "厚": 1331,
+ "厝": 1332,
+ "原": 1333,
+ "厢": 1334,
+ "厥": 1335,
+ "厦": 1336,
+ "厨": 1337,
+ "厩": 1338,
+ "厭": 1339,
+ "厮": 1340,
+ "厲": 1341,
+ "厳": 1342,
+ "去": 1343,
+ "县": 1344,
+ "叁": 1345,
+ "参": 1346,
+ "參": 1347,
+ "又": 1348,
+ "叉": 1349,
+ "及": 1350,
+ "友": 1351,
+ "双": 1352,
+ "反": 1353,
+ "収": 1354,
+ "发": 1355,
+ "叔": 1356,
+ "取": 1357,
+ "受": 1358,
+ "变": 1359,
+ "叙": 1360,
+ "叛": 1361,
+ "叟": 1362,
+ "叠": 1363,
+ "叡": 1364,
+ "叢": 1365,
+ "口": 1366,
+ "古": 1367,
+ "句": 1368,
+ "另": 1369,
+ "叨": 1370,
+ "叩": 1371,
+ "只": 1372,
+ "叫": 1373,
+ "召": 1374,
+ "叭": 1375,
+ "叮": 1376,
+ "可": 1377,
+ "台": 1378,
+ "叱": 1379,
+ "史": 1380,
+ "右": 1381,
+ "叵": 1382,
+ "叶": 1383,
+ "号": 1384,
+ "司": 1385,
+ "叹": 1386,
+ "叻": 1387,
+ "叼": 1388,
+ "叽": 1389,
+ "吁": 1390,
+ "吃": 1391,
+ "各": 1392,
+ "吆": 1393,
+ "合": 1394,
+ "吉": 1395,
+ "吊": 1396,
+ "吋": 1397,
+ "同": 1398,
+ "名": 1399,
+ "后": 1400,
+ "吏": 1401,
+ "吐": 1402,
+ "向": 1403,
+ "吒": 1404,
+ "吓": 1405,
+ "吕": 1406,
+ "吖": 1407,
+ "吗": 1408,
+ "君": 1409,
+ "吝": 1410,
+ "吞": 1411,
+ "吟": 1412,
+ "吠": 1413,
+ "吡": 1414,
+ "否": 1415,
+ "吧": 1416,
+ "吨": 1417,
+ "吩": 1418,
+ "含": 1419,
+ "听": 1420,
+ "吭": 1421,
+ "吮": 1422,
+ "启": 1423,
+ "吱": 1424,
+ "吳": 1425,
+ "吴": 1426,
+ "吵": 1427,
+ "吶": 1428,
+ "吸": 1429,
+ "吹": 1430,
+ "吻": 1431,
+ "吼": 1432,
+ "吽": 1433,
+ "吾": 1434,
+ "呀": 1435,
+ "呂": 1436,
+ "呃": 1437,
+ "呆": 1438,
+ "呈": 1439,
+ "告": 1440,
+ "呋": 1441,
+ "呎": 1442,
+ "呐": 1443,
+ "呓": 1444,
+ "呕": 1445,
+ "呗": 1446,
+ "员": 1447,
+ "呛": 1448,
+ "呜": 1449,
+ "呢": 1450,
+ "呤": 1451,
+ "呦": 1452,
+ "周": 1453,
+ "呱": 1454,
+ "呲": 1455,
+ "味": 1456,
+ "呵": 1457,
+ "呷": 1458,
+ "呸": 1459,
+ "呻": 1460,
+ "呼": 1461,
+ "命": 1462,
+ "咀": 1463,
+ "咁": 1464,
+ "咂": 1465,
+ "咄": 1466,
+ "咆": 1467,
+ "咋": 1468,
+ "和": 1469,
+ "咎": 1470,
+ "咏": 1471,
+ "咐": 1472,
+ "咒": 1473,
+ "咔": 1474,
+ "咕": 1475,
+ "咖": 1476,
+ "咗": 1477,
+ "咘": 1478,
+ "咙": 1479,
+ "咚": 1480,
+ "咛": 1481,
+ "咣": 1482,
+ "咤": 1483,
+ "咦": 1484,
+ "咧": 1485,
+ "咨": 1486,
+ "咩": 1487,
+ "咪": 1488,
+ "咫": 1489,
+ "咬": 1490,
+ "咭": 1491,
+ "咯": 1492,
+ "咱": 1493,
+ "咲": 1494,
+ "咳": 1495,
+ "咸": 1496,
+ "咻": 1497,
+ "咽": 1498,
+ "咿": 1499,
+ "哀": 1500,
+ "品": 1501,
+ "哂": 1502,
+ "哄": 1503,
+ "哆": 1504,
+ "哇": 1505,
+ "哈": 1506,
+ "哉": 1507,
+ "哋": 1508,
+ "哌": 1509,
+ "响": 1510,
+ "哎": 1511,
+ "哏": 1512,
+ "哐": 1513,
+ "哑": 1514,
+ "哒": 1515,
+ "哔": 1516,
+ "哗": 1517,
+ "哟": 1518,
+ "員": 1519,
+ "哥": 1520,
+ "哦": 1521,
+ "哧": 1522,
+ "哨": 1523,
+ "哩": 1524,
+ "哪": 1525,
+ "哭": 1526,
+ "哮": 1527,
+ "哲": 1528,
+ "哺": 1529,
+ "哼": 1530,
+ "哽": 1531,
+ "唁": 1532,
+ "唄": 1533,
+ "唆": 1534,
+ "唇": 1535,
+ "唉": 1536,
+ "唏": 1537,
+ "唐": 1538,
+ "唑": 1539,
+ "唔": 1540,
+ "唠": 1541,
+ "唤": 1542,
+ "唧": 1543,
+ "唬": 1544,
+ "售": 1545,
+ "唯": 1546,
+ "唰": 1547,
+ "唱": 1548,
+ "唳": 1549,
+ "唷": 1550,
+ "唸": 1551,
+ "唾": 1552,
+ "啃": 1553,
+ "啄": 1554,
+ "商": 1555,
+ "啉": 1556,
+ "啊": 1557,
+ "問": 1558,
+ "啓": 1559,
+ "啕": 1560,
+ "啖": 1561,
+ "啜": 1562,
+ "啞": 1563,
+ "啟": 1564,
+ "啡": 1565,
+ "啤": 1566,
+ "啥": 1567,
+ "啦": 1568,
+ "啧": 1569,
+ "啪": 1570,
+ "啫": 1571,
+ "啬": 1572,
+ "啮": 1573,
+ "啰": 1574,
+ "啱": 1575,
+ "啲": 1576,
+ "啵": 1577,
+ "啶": 1578,
+ "啷": 1579,
+ "啸": 1580,
+ "啻": 1581,
+ "啼": 1582,
+ "啾": 1583,
+ "喀": 1584,
+ "喂": 1585,
+ "喃": 1586,
+ "善": 1587,
+ "喆": 1588,
+ "喇": 1589,
+ "喉": 1590,
+ "喊": 1591,
+ "喋": 1592,
+ "喎": 1593,
+ "喏": 1594,
+ "喔": 1595,
+ "喘": 1596,
+ "喙": 1597,
+ "喚": 1598,
+ "喜": 1599,
+ "喝": 1600,
+ "喟": 1601,
+ "喧": 1602,
+ "喪": 1603,
+ "喫": 1604,
+ "喬": 1605,
+ "單": 1606,
+ "喰": 1607,
+ "喱": 1608,
+ "喲": 1609,
+ "喳": 1610,
+ "喵": 1611,
+ "営": 1612,
+ "喷": 1613,
+ "喹": 1614,
+ "喺": 1615,
+ "喻": 1616,
+ "喽": 1617,
+ "嗅": 1618,
+ "嗆": 1619,
+ "嗇": 1620,
+ "嗎": 1621,
+ "嗑": 1622,
+ "嗒": 1623,
+ "嗓": 1624,
+ "嗔": 1625,
+ "嗖": 1626,
+ "嗚": 1627,
+ "嗜": 1628,
+ "嗝": 1629,
+ "嗟": 1630,
+ "嗡": 1631,
+ "嗣": 1632,
+ "嗤": 1633,
+ "嗦": 1634,
+ "嗨": 1635,
+ "嗪": 1636,
+ "嗬": 1637,
+ "嗯": 1638,
+ "嗰": 1639,
+ "嗲": 1640,
+ "嗳": 1641,
+ "嗶": 1642,
+ "嗷": 1643,
+ "嗽": 1644,
+ "嘀": 1645,
+ "嘅": 1646,
+ "嘆": 1647,
+ "嘈": 1648,
+ "嘉": 1649,
+ "嘌": 1650,
+ "嘍": 1651,
+ "嘎": 1652,
+ "嘔": 1653,
+ "嘖": 1654,
+ "嘗": 1655,
+ "嘘": 1656,
+ "嘚": 1657,
+ "嘛": 1658,
+ "嘜": 1659,
+ "嘞": 1660,
+ "嘟": 1661,
+ "嘢": 1662,
+ "嘣": 1663,
+ "嘤": 1664,
+ "嘧": 1665,
+ "嘩": 1666,
+ "嘭": 1667,
+ "嘮": 1668,
+ "嘯": 1669,
+ "嘰": 1670,
+ "嘱": 1671,
+ "嘲": 1672,
+ "嘴": 1673,
+ "嘶": 1674,
+ "嘸": 1675,
+ "嘹": 1676,
+ "嘻": 1677,
+ "嘿": 1678,
+ "噁": 1679,
+ "噌": 1680,
+ "噎": 1681,
+ "噓": 1682,
+ "噔": 1683,
+ "噗": 1684,
+ "噙": 1685,
+ "噜": 1686,
+ "噠": 1687,
+ "噢": 1688,
+ "噤": 1689,
+ "器": 1690,
+ "噩": 1691,
+ "噪": 1692,
+ "噬": 1693,
+ "噱": 1694,
+ "噴": 1695,
+ "噶": 1696,
+ "噸": 1697,
+ "噹": 1698,
+ "噻": 1699,
+ "噼": 1700,
+ "嚀": 1701,
+ "嚇": 1702,
+ "嚎": 1703,
+ "嚏": 1704,
+ "嚐": 1705,
+ "嚓": 1706,
+ "嚕": 1707,
+ "嚟": 1708,
+ "嚣": 1709,
+ "嚥": 1710,
+ "嚨": 1711,
+ "嚮": 1712,
+ "嚴": 1713,
+ "嚷": 1714,
+ "嚼": 1715,
+ "囂": 1716,
+ "囉": 1717,
+ "囊": 1718,
+ "囍": 1719,
+ "囑": 1720,
+ "囔": 1721,
+ "囗": 1722,
+ "囚": 1723,
+ "四": 1724,
+ "囝": 1725,
+ "回": 1726,
+ "囟": 1727,
+ "因": 1728,
+ "囡": 1729,
+ "团": 1730,
+ "団": 1731,
+ "囤": 1732,
+ "囧": 1733,
+ "囪": 1734,
+ "囫": 1735,
+ "园": 1736,
+ "困": 1737,
+ "囱": 1738,
+ "囲": 1739,
+ "図": 1740,
+ "围": 1741,
+ "囹": 1742,
+ "固": 1743,
+ "国": 1744,
+ "图": 1745,
+ "囿": 1746,
+ "圃": 1747,
+ "圄": 1748,
+ "圆": 1749,
+ "圈": 1750,
+ "國": 1751,
+ "圍": 1752,
+ "圏": 1753,
+ "園": 1754,
+ "圓": 1755,
+ "圖": 1756,
+ "團": 1757,
+ "圜": 1758,
+ "土": 1759,
+ "圣": 1760,
+ "圧": 1761,
+ "在": 1762,
+ "圩": 1763,
+ "圭": 1764,
+ "地": 1765,
+ "圳": 1766,
+ "场": 1767,
+ "圻": 1768,
+ "圾": 1769,
+ "址": 1770,
+ "坂": 1771,
+ "均": 1772,
+ "坊": 1773,
+ "坍": 1774,
+ "坎": 1775,
+ "坏": 1776,
+ "坐": 1777,
+ "坑": 1778,
+ "块": 1779,
+ "坚": 1780,
+ "坛": 1781,
+ "坝": 1782,
+ "坞": 1783,
+ "坟": 1784,
+ "坠": 1785,
+ "坡": 1786,
+ "坤": 1787,
+ "坦": 1788,
+ "坨": 1789,
+ "坪": 1790,
+ "坯": 1791,
+ "坳": 1792,
+ "坵": 1793,
+ "坷": 1794,
+ "垂": 1795,
+ "垃": 1796,
+ "垄": 1797,
+ "型": 1798,
+ "垒": 1799,
+ "垚": 1800,
+ "垛": 1801,
+ "垠": 1802,
+ "垢": 1803,
+ "垣": 1804,
+ "垦": 1805,
+ "垩": 1806,
+ "垫": 1807,
+ "垭": 1808,
+ "垮": 1809,
+ "垵": 1810,
+ "埂": 1811,
+ "埃": 1812,
+ "埋": 1813,
+ "城": 1814,
+ "埔": 1815,
+ "埕": 1816,
+ "埗": 1817,
+ "域": 1818,
+ "埠": 1819,
+ "埤": 1820,
+ "埵": 1821,
+ "執": 1822,
+ "埸": 1823,
+ "培": 1824,
+ "基": 1825,
+ "埼": 1826,
+ "堀": 1827,
+ "堂": 1828,
+ "堃": 1829,
+ "堅": 1830,
+ "堆": 1831,
+ "堇": 1832,
+ "堑": 1833,
+ "堕": 1834,
+ "堙": 1835,
+ "堡": 1836,
+ "堤": 1837,
+ "堪": 1838,
+ "堯": 1839,
+ "堰": 1840,
+ "報": 1841,
+ "場": 1842,
+ "堵": 1843,
+ "堺": 1844,
+ "堿": 1845,
+ "塊": 1846,
+ "塌": 1847,
+ "塑": 1848,
+ "塔": 1849,
+ "塗": 1850,
+ "塘": 1851,
+ "塚": 1852,
+ "塞": 1853,
+ "塢": 1854,
+ "塩": 1855,
+ "填": 1856,
+ "塬": 1857,
+ "塭": 1858,
+ "塵": 1859,
+ "塾": 1860,
+ "墀": 1861,
+ "境": 1862,
+ "墅": 1863,
+ "墉": 1864,
+ "墊": 1865,
+ "墒": 1866,
+ "墓": 1867,
+ "増": 1868,
+ "墘": 1869,
+ "墙": 1870,
+ "墜": 1871,
+ "增": 1872,
+ "墟": 1873,
+ "墨": 1874,
+ "墩": 1875,
+ "墮": 1876,
+ "墳": 1877,
+ "墻": 1878,
+ "墾": 1879,
+ "壁": 1880,
+ "壅": 1881,
+ "壆": 1882,
+ "壇": 1883,
+ "壊": 1884,
+ "壑": 1885,
+ "壓": 1886,
+ "壕": 1887,
+ "壘": 1888,
+ "壞": 1889,
+ "壟": 1890,
+ "壢": 1891,
+ "壤": 1892,
+ "壩": 1893,
+ "士": 1894,
+ "壬": 1895,
+ "壮": 1896,
+ "壯": 1897,
+ "声": 1898,
+ "売": 1899,
+ "壳": 1900,
+ "壶": 1901,
+ "壹": 1902,
+ "壺": 1903,
+ "壽": 1904,
+ "处": 1905,
+ "备": 1906,
+ "変": 1907,
+ "复": 1908,
+ "夏": 1909,
+ "夔": 1910,
+ "夕": 1911,
+ "外": 1912,
+ "夙": 1913,
+ "多": 1914,
+ "夜": 1915,
+ "够": 1916,
+ "夠": 1917,
+ "夢": 1918,
+ "夥": 1919,
+ "大": 1920,
+ "天": 1921,
+ "太": 1922,
+ "夫": 1923,
+ "夭": 1924,
+ "央": 1925,
+ "夯": 1926,
+ "失": 1927,
+ "头": 1928,
+ "夷": 1929,
+ "夸": 1930,
+ "夹": 1931,
+ "夺": 1932,
+ "夾": 1933,
+ "奂": 1934,
+ "奄": 1935,
+ "奇": 1936,
+ "奈": 1937,
+ "奉": 1938,
+ "奋": 1939,
+ "奎": 1940,
+ "奏": 1941,
+ "奐": 1942,
+ "契": 1943,
+ "奔": 1944,
+ "奕": 1945,
+ "奖": 1946,
+ "套": 1947,
+ "奘": 1948,
+ "奚": 1949,
+ "奠": 1950,
+ "奢": 1951,
+ "奥": 1952,
+ "奧": 1953,
+ "奪": 1954,
+ "奬": 1955,
+ "奮": 1956,
+ "女": 1957,
+ "奴": 1958,
+ "奶": 1959,
+ "奸": 1960,
+ "她": 1961,
+ "好": 1962,
+ "如": 1963,
+ "妃": 1964,
+ "妄": 1965,
+ "妆": 1966,
+ "妇": 1967,
+ "妈": 1968,
+ "妊": 1969,
+ "妍": 1970,
+ "妒": 1971,
+ "妓": 1972,
+ "妖": 1973,
+ "妘": 1974,
+ "妙": 1975,
+ "妝": 1976,
+ "妞": 1977,
+ "妣": 1978,
+ "妤": 1979,
+ "妥": 1980,
+ "妨": 1981,
+ "妩": 1982,
+ "妪": 1983,
+ "妮": 1984,
+ "妲": 1985,
+ "妳": 1986,
+ "妹": 1987,
+ "妻": 1988,
+ "妾": 1989,
+ "姆": 1990,
+ "姉": 1991,
+ "姊": 1992,
+ "始": 1993,
+ "姍": 1994,
+ "姐": 1995,
+ "姑": 1996,
+ "姒": 1997,
+ "姓": 1998,
+ "委": 1999,
+ "姗": 2000,
+ "姚": 2001,
+ "姜": 2002,
+ "姝": 2003,
+ "姣": 2004,
+ "姥": 2005,
+ "姦": 2006,
+ "姨": 2007,
+ "姪": 2008,
+ "姫": 2009,
+ "姬": 2010,
+ "姹": 2011,
+ "姻": 2012,
+ "姿": 2013,
+ "威": 2014,
+ "娃": 2015,
+ "娄": 2016,
+ "娅": 2017,
+ "娆": 2018,
+ "娇": 2019,
+ "娉": 2020,
+ "娑": 2021,
+ "娓": 2022,
+ "娘": 2023,
+ "娛": 2024,
+ "娜": 2025,
+ "娟": 2026,
+ "娠": 2027,
+ "娣": 2028,
+ "娥": 2029,
+ "娩": 2030,
+ "娱": 2031,
+ "娲": 2032,
+ "娴": 2033,
+ "娶": 2034,
+ "娼": 2035,
+ "婀": 2036,
+ "婁": 2037,
+ "婆": 2038,
+ "婉": 2039,
+ "婊": 2040,
+ "婕": 2041,
+ "婚": 2042,
+ "婢": 2043,
+ "婦": 2044,
+ "婧": 2045,
+ "婪": 2046,
+ "婭": 2047,
+ "婴": 2048,
+ "婵": 2049,
+ "婶": 2050,
+ "婷": 2051,
+ "婺": 2052,
+ "婿": 2053,
+ "媒": 2054,
+ "媚": 2055,
+ "媛": 2056,
+ "媞": 2057,
+ "媧": 2058,
+ "媲": 2059,
+ "媳": 2060,
+ "媽": 2061,
+ "媾": 2062,
+ "嫁": 2063,
+ "嫂": 2064,
+ "嫉": 2065,
+ "嫌": 2066,
+ "嫑": 2067,
+ "嫔": 2068,
+ "嫖": 2069,
+ "嫘": 2070,
+ "嫚": 2071,
+ "嫡": 2072,
+ "嫣": 2073,
+ "嫦": 2074,
+ "嫩": 2075,
+ "嫲": 2076,
+ "嫵": 2077,
+ "嫻": 2078,
+ "嬅": 2079,
+ "嬉": 2080,
+ "嬌": 2081,
+ "嬗": 2082,
+ "嬛": 2083,
+ "嬢": 2084,
+ "嬤": 2085,
+ "嬪": 2086,
+ "嬰": 2087,
+ "嬴": 2088,
+ "嬷": 2089,
+ "嬸": 2090,
+ "嬿": 2091,
+ "孀": 2092,
+ "孃": 2093,
+ "子": 2094,
+ "孑": 2095,
+ "孔": 2096,
+ "孕": 2097,
+ "孖": 2098,
+ "字": 2099,
+ "存": 2100,
+ "孙": 2101,
+ "孚": 2102,
+ "孛": 2103,
+ "孜": 2104,
+ "孝": 2105,
+ "孟": 2106,
+ "孢": 2107,
+ "季": 2108,
+ "孤": 2109,
+ "学": 2110,
+ "孩": 2111,
+ "孪": 2112,
+ "孫": 2113,
+ "孬": 2114,
+ "孰": 2115,
+ "孱": 2116,
+ "孳": 2117,
+ "孵": 2118,
+ "學": 2119,
+ "孺": 2120,
+ "孽": 2121,
+ "孿": 2122,
+ "宁": 2123,
+ "它": 2124,
+ "宅": 2125,
+ "宇": 2126,
+ "守": 2127,
+ "安": 2128,
+ "宋": 2129,
+ "完": 2130,
+ "宏": 2131,
+ "宓": 2132,
+ "宕": 2133,
+ "宗": 2134,
+ "官": 2135,
+ "宙": 2136,
+ "定": 2137,
+ "宛": 2138,
+ "宜": 2139,
+ "宝": 2140,
+ "实": 2141,
+ "実": 2142,
+ "宠": 2143,
+ "审": 2144,
+ "客": 2145,
+ "宣": 2146,
+ "室": 2147,
+ "宥": 2148,
+ "宦": 2149,
+ "宪": 2150,
+ "宫": 2151,
+ "宮": 2152,
+ "宰": 2153,
+ "害": 2154,
+ "宴": 2155,
+ "宵": 2156,
+ "家": 2157,
+ "宸": 2158,
+ "容": 2159,
+ "宽": 2160,
+ "宾": 2161,
+ "宿": 2162,
+ "寂": 2163,
+ "寄": 2164,
+ "寅": 2165,
+ "密": 2166,
+ "寇": 2167,
+ "富": 2168,
+ "寐": 2169,
+ "寒": 2170,
+ "寓": 2171,
+ "寛": 2172,
+ "寝": 2173,
+ "寞": 2174,
+ "察": 2175,
+ "寡": 2176,
+ "寢": 2177,
+ "寥": 2178,
+ "實": 2179,
+ "寧": 2180,
+ "寨": 2181,
+ "審": 2182,
+ "寫": 2183,
+ "寬": 2184,
+ "寮": 2185,
+ "寰": 2186,
+ "寵": 2187,
+ "寶": 2188,
+ "寸": 2189,
+ "对": 2190,
+ "寺": 2191,
+ "寻": 2192,
+ "导": 2193,
+ "対": 2194,
+ "寿": 2195,
+ "封": 2196,
+ "専": 2197,
+ "射": 2198,
+ "将": 2199,
+ "將": 2200,
+ "專": 2201,
+ "尉": 2202,
+ "尊": 2203,
+ "尋": 2204,
+ "對": 2205,
+ "導": 2206,
+ "小": 2207,
+ "少": 2208,
+ "尔": 2209,
+ "尕": 2210,
+ "尖": 2211,
+ "尘": 2212,
+ "尚": 2213,
+ "尝": 2214,
+ "尤": 2215,
+ "尧": 2216,
+ "尬": 2217,
+ "就": 2218,
+ "尴": 2219,
+ "尷": 2220,
+ "尸": 2221,
+ "尹": 2222,
+ "尺": 2223,
+ "尻": 2224,
+ "尼": 2225,
+ "尽": 2226,
+ "尾": 2227,
+ "尿": 2228,
+ "局": 2229,
+ "屁": 2230,
+ "层": 2231,
+ "屄": 2232,
+ "居": 2233,
+ "屆": 2234,
+ "屈": 2235,
+ "屉": 2236,
+ "届": 2237,
+ "屋": 2238,
+ "屌": 2239,
+ "屍": 2240,
+ "屎": 2241,
+ "屏": 2242,
+ "屐": 2243,
+ "屑": 2244,
+ "展": 2245,
+ "屜": 2246,
+ "属": 2247,
+ "屠": 2248,
+ "屡": 2249,
+ "屢": 2250,
+ "層": 2251,
+ "履": 2252,
+ "屬": 2253,
+ "屯": 2254,
+ "山": 2255,
+ "屹": 2256,
+ "屿": 2257,
+ "岀": 2258,
+ "岁": 2259,
+ "岂": 2260,
+ "岌": 2261,
+ "岐": 2262,
+ "岑": 2263,
+ "岔": 2264,
+ "岖": 2265,
+ "岗": 2266,
+ "岘": 2267,
+ "岙": 2268,
+ "岚": 2269,
+ "岛": 2270,
+ "岡": 2271,
+ "岩": 2272,
+ "岫": 2273,
+ "岬": 2274,
+ "岭": 2275,
+ "岱": 2276,
+ "岳": 2277,
+ "岷": 2278,
+ "岸": 2279,
+ "峇": 2280,
+ "峋": 2281,
+ "峒": 2282,
+ "峙": 2283,
+ "峡": 2284,
+ "峤": 2285,
+ "峥": 2286,
+ "峦": 2287,
+ "峨": 2288,
+ "峪": 2289,
+ "峭": 2290,
+ "峯": 2291,
+ "峰": 2292,
+ "峴": 2293,
+ "島": 2294,
+ "峻": 2295,
+ "峽": 2296,
+ "崁": 2297,
+ "崂": 2298,
+ "崆": 2299,
+ "崇": 2300,
+ "崎": 2301,
+ "崑": 2302,
+ "崔": 2303,
+ "崖": 2304,
+ "崗": 2305,
+ "崙": 2306,
+ "崛": 2307,
+ "崧": 2308,
+ "崩": 2309,
+ "崭": 2310,
+ "崴": 2311,
+ "崽": 2312,
+ "嵇": 2313,
+ "嵊": 2314,
+ "嵋": 2315,
+ "嵌": 2316,
+ "嵐": 2317,
+ "嵘": 2318,
+ "嵩": 2319,
+ "嵬": 2320,
+ "嵯": 2321,
+ "嶂": 2322,
+ "嶄": 2323,
+ "嶇": 2324,
+ "嶋": 2325,
+ "嶙": 2326,
+ "嶺": 2327,
+ "嶼": 2328,
+ "嶽": 2329,
+ "巅": 2330,
+ "巍": 2331,
+ "巒": 2332,
+ "巔": 2333,
+ "巖": 2334,
+ "川": 2335,
+ "州": 2336,
+ "巡": 2337,
+ "巢": 2338,
+ "工": 2339,
+ "左": 2340,
+ "巧": 2341,
+ "巨": 2342,
+ "巩": 2343,
+ "巫": 2344,
+ "差": 2345,
+ "己": 2346,
+ "已": 2347,
+ "巳": 2348,
+ "巴": 2349,
+ "巷": 2350,
+ "巻": 2351,
+ "巽": 2352,
+ "巾": 2353,
+ "巿": 2354,
+ "币": 2355,
+ "市": 2356,
+ "布": 2357,
+ "帅": 2358,
+ "帆": 2359,
+ "师": 2360,
+ "希": 2361,
+ "帐": 2362,
+ "帑": 2363,
+ "帕": 2364,
+ "帖": 2365,
+ "帘": 2366,
+ "帚": 2367,
+ "帛": 2368,
+ "帜": 2369,
+ "帝": 2370,
+ "帥": 2371,
+ "带": 2372,
+ "帧": 2373,
+ "師": 2374,
+ "席": 2375,
+ "帮": 2376,
+ "帯": 2377,
+ "帰": 2378,
+ "帳": 2379,
+ "帶": 2380,
+ "帷": 2381,
+ "常": 2382,
+ "帼": 2383,
+ "帽": 2384,
+ "幀": 2385,
+ "幂": 2386,
+ "幄": 2387,
+ "幅": 2388,
+ "幌": 2389,
+ "幔": 2390,
+ "幕": 2391,
+ "幟": 2392,
+ "幡": 2393,
+ "幢": 2394,
+ "幣": 2395,
+ "幫": 2396,
+ "干": 2397,
+ "平": 2398,
+ "年": 2399,
+ "并": 2400,
+ "幸": 2401,
+ "幹": 2402,
+ "幺": 2403,
+ "幻": 2404,
+ "幼": 2405,
+ "幽": 2406,
+ "幾": 2407,
+ "广": 2408,
+ "庁": 2409,
+ "広": 2410,
+ "庄": 2411,
+ "庆": 2412,
+ "庇": 2413,
+ "床": 2414,
+ "序": 2415,
+ "庐": 2416,
+ "库": 2417,
+ "应": 2418,
+ "底": 2419,
+ "庖": 2420,
+ "店": 2421,
+ "庙": 2422,
+ "庚": 2423,
+ "府": 2424,
+ "庞": 2425,
+ "废": 2426,
+ "庠": 2427,
+ "度": 2428,
+ "座": 2429,
+ "庫": 2430,
+ "庭": 2431,
+ "庵": 2432,
+ "庶": 2433,
+ "康": 2434,
+ "庸": 2435,
+ "庹": 2436,
+ "庾": 2437,
+ "廁": 2438,
+ "廂": 2439,
+ "廃": 2440,
+ "廈": 2441,
+ "廉": 2442,
+ "廊": 2443,
+ "廓": 2444,
+ "廖": 2445,
+ "廚": 2446,
+ "廝": 2447,
+ "廟": 2448,
+ "廠": 2449,
+ "廢": 2450,
+ "廣": 2451,
+ "廬": 2452,
+ "廳": 2453,
+ "延": 2454,
+ "廷": 2455,
+ "建": 2456,
+ "廿": 2457,
+ "开": 2458,
+ "弁": 2459,
+ "异": 2460,
+ "弃": 2461,
+ "弄": 2462,
+ "弈": 2463,
+ "弊": 2464,
+ "弋": 2465,
+ "式": 2466,
+ "弑": 2467,
+ "弒": 2468,
+ "弓": 2469,
+ "弔": 2470,
+ "引": 2471,
+ "弗": 2472,
+ "弘": 2473,
+ "弛": 2474,
+ "弟": 2475,
+ "张": 2476,
+ "弥": 2477,
+ "弦": 2478,
+ "弧": 2479,
+ "弩": 2480,
+ "弭": 2481,
+ "弯": 2482,
+ "弱": 2483,
+ "張": 2484,
+ "強": 2485,
+ "弹": 2486,
+ "强": 2487,
+ "弼": 2488,
+ "弾": 2489,
+ "彅": 2490,
+ "彆": 2491,
+ "彈": 2492,
+ "彌": 2493,
+ "彎": 2494,
+ "归": 2495,
+ "当": 2496,
+ "录": 2497,
+ "彗": 2498,
+ "彙": 2499,
+ "彝": 2500,
+ "形": 2501,
+ "彤": 2502,
+ "彥": 2503,
+ "彦": 2504,
+ "彧": 2505,
+ "彩": 2506,
+ "彪": 2507,
+ "彫": 2508,
+ "彬": 2509,
+ "彭": 2510,
+ "彰": 2511,
+ "影": 2512,
+ "彷": 2513,
+ "役": 2514,
+ "彻": 2515,
+ "彼": 2516,
+ "彿": 2517,
+ "往": 2518,
+ "征": 2519,
+ "径": 2520,
+ "待": 2521,
+ "徇": 2522,
+ "很": 2523,
+ "徉": 2524,
+ "徊": 2525,
+ "律": 2526,
+ "後": 2527,
+ "徐": 2528,
+ "徑": 2529,
+ "徒": 2530,
+ "従": 2531,
+ "徕": 2532,
+ "得": 2533,
+ "徘": 2534,
+ "徙": 2535,
+ "徜": 2536,
+ "從": 2537,
+ "徠": 2538,
+ "御": 2539,
+ "徨": 2540,
+ "復": 2541,
+ "循": 2542,
+ "徬": 2543,
+ "微": 2544,
+ "徳": 2545,
+ "徴": 2546,
+ "徵": 2547,
+ "德": 2548,
+ "徹": 2549,
+ "徼": 2550,
+ "徽": 2551,
+ "心": 2552,
+ "必": 2553,
+ "忆": 2554,
+ "忌": 2555,
+ "忍": 2556,
+ "忏": 2557,
+ "忐": 2558,
+ "忑": 2559,
+ "忒": 2560,
+ "忖": 2561,
+ "志": 2562,
+ "忘": 2563,
+ "忙": 2564,
+ "応": 2565,
+ "忠": 2566,
+ "忡": 2567,
+ "忤": 2568,
+ "忧": 2569,
+ "忪": 2570,
+ "快": 2571,
+ "忱": 2572,
+ "念": 2573,
+ "忻": 2574,
+ "忽": 2575,
+ "忿": 2576,
+ "怀": 2577,
+ "态": 2578,
+ "怂": 2579,
+ "怅": 2580,
+ "怆": 2581,
+ "怎": 2582,
+ "怏": 2583,
+ "怒": 2584,
+ "怔": 2585,
+ "怕": 2586,
+ "怖": 2587,
+ "怙": 2588,
+ "怜": 2589,
+ "思": 2590,
+ "怠": 2591,
+ "怡": 2592,
+ "急": 2593,
+ "怦": 2594,
+ "性": 2595,
+ "怨": 2596,
+ "怪": 2597,
+ "怯": 2598,
+ "怵": 2599,
+ "总": 2600,
+ "怼": 2601,
+ "恁": 2602,
+ "恃": 2603,
+ "恆": 2604,
+ "恋": 2605,
+ "恍": 2606,
+ "恐": 2607,
+ "恒": 2608,
+ "恕": 2609,
+ "恙": 2610,
+ "恚": 2611,
+ "恢": 2612,
+ "恣": 2613,
+ "恤": 2614,
+ "恥": 2615,
+ "恨": 2616,
+ "恩": 2617,
+ "恪": 2618,
+ "恫": 2619,
+ "恬": 2620,
+ "恭": 2621,
+ "息": 2622,
+ "恰": 2623,
+ "恳": 2624,
+ "恵": 2625,
+ "恶": 2626,
+ "恸": 2627,
+ "恺": 2628,
+ "恻": 2629,
+ "恼": 2630,
+ "恿": 2631,
+ "悄": 2632,
+ "悅": 2633,
+ "悉": 2634,
+ "悌": 2635,
+ "悍": 2636,
+ "悔": 2637,
+ "悖": 2638,
+ "悚": 2639,
+ "悟": 2640,
+ "悠": 2641,
+ "患": 2642,
+ "悦": 2643,
+ "您": 2644,
+ "悩": 2645,
+ "悪": 2646,
+ "悬": 2647,
+ "悯": 2648,
+ "悱": 2649,
+ "悲": 2650,
+ "悴": 2651,
+ "悵": 2652,
+ "悶": 2653,
+ "悸": 2654,
+ "悻": 2655,
+ "悼": 2656,
+ "悽": 2657,
+ "情": 2658,
+ "惆": 2659,
+ "惇": 2660,
+ "惊": 2661,
+ "惋": 2662,
+ "惑": 2663,
+ "惕": 2664,
+ "惘": 2665,
+ "惚": 2666,
+ "惜": 2667,
+ "惟": 2668,
+ "惠": 2669,
+ "惡": 2670,
+ "惦": 2671,
+ "惧": 2672,
+ "惨": 2673,
+ "惩": 2674,
+ "惫": 2675,
+ "惬": 2676,
+ "惭": 2677,
+ "惮": 2678,
+ "惯": 2679,
+ "惰": 2680,
+ "惱": 2681,
+ "想": 2682,
+ "惴": 2683,
+ "惶": 2684,
+ "惹": 2685,
+ "惺": 2686,
+ "愁": 2687,
+ "愆": 2688,
+ "愈": 2689,
+ "愉": 2690,
+ "愍": 2691,
+ "意": 2692,
+ "愕": 2693,
+ "愚": 2694,
+ "愛": 2695,
+ "愜": 2696,
+ "感": 2697,
+ "愣": 2698,
+ "愤": 2699,
+ "愧": 2700,
+ "愫": 2701,
+ "愷": 2702,
+ "愿": 2703,
+ "慄": 2704,
+ "慈": 2705,
+ "態": 2706,
+ "慌": 2707,
+ "慎": 2708,
+ "慑": 2709,
+ "慕": 2710,
+ "慘": 2711,
+ "慚": 2712,
+ "慟": 2713,
+ "慢": 2714,
+ "慣": 2715,
+ "慧": 2716,
+ "慨": 2717,
+ "慫": 2718,
+ "慮": 2719,
+ "慰": 2720,
+ "慳": 2721,
+ "慵": 2722,
+ "慶": 2723,
+ "慷": 2724,
+ "慾": 2725,
+ "憂": 2726,
+ "憊": 2727,
+ "憋": 2728,
+ "憎": 2729,
+ "憐": 2730,
+ "憑": 2731,
+ "憔": 2732,
+ "憚": 2733,
+ "憤": 2734,
+ "憧": 2735,
+ "憨": 2736,
+ "憩": 2737,
+ "憫": 2738,
+ "憬": 2739,
+ "憲": 2740,
+ "憶": 2741,
+ "憾": 2742,
+ "懂": 2743,
+ "懇": 2744,
+ "懈": 2745,
+ "應": 2746,
+ "懊": 2747,
+ "懋": 2748,
+ "懑": 2749,
+ "懒": 2750,
+ "懦": 2751,
+ "懲": 2752,
+ "懵": 2753,
+ "懶": 2754,
+ "懷": 2755,
+ "懸": 2756,
+ "懺": 2757,
+ "懼": 2758,
+ "懾": 2759,
+ "懿": 2760,
+ "戀": 2761,
+ "戈": 2762,
+ "戊": 2763,
+ "戌": 2764,
+ "戍": 2765,
+ "戎": 2766,
+ "戏": 2767,
+ "成": 2768,
+ "我": 2769,
+ "戒": 2770,
+ "戕": 2771,
+ "或": 2772,
+ "战": 2773,
+ "戚": 2774,
+ "戛": 2775,
+ "戟": 2776,
+ "戡": 2777,
+ "戦": 2778,
+ "截": 2779,
+ "戬": 2780,
+ "戮": 2781,
+ "戰": 2782,
+ "戲": 2783,
+ "戳": 2784,
+ "戴": 2785,
+ "戶": 2786,
+ "户": 2787,
+ "戸": 2788,
+ "戻": 2789,
+ "戾": 2790,
+ "房": 2791,
+ "所": 2792,
+ "扁": 2793,
+ "扇": 2794,
+ "扈": 2795,
+ "扉": 2796,
+ "手": 2797,
+ "才": 2798,
+ "扎": 2799,
+ "扑": 2800,
+ "扒": 2801,
+ "打": 2802,
+ "扔": 2803,
+ "払": 2804,
+ "托": 2805,
+ "扛": 2806,
+ "扣": 2807,
+ "扦": 2808,
+ "执": 2809,
+ "扩": 2810,
+ "扪": 2811,
+ "扫": 2812,
+ "扬": 2813,
+ "扭": 2814,
+ "扮": 2815,
+ "扯": 2816,
+ "扰": 2817,
+ "扱": 2818,
+ "扳": 2819,
+ "扶": 2820,
+ "批": 2821,
+ "扼": 2822,
+ "找": 2823,
+ "承": 2824,
+ "技": 2825,
+ "抄": 2826,
+ "抉": 2827,
+ "把": 2828,
+ "抑": 2829,
+ "抒": 2830,
+ "抓": 2831,
+ "投": 2832,
+ "抖": 2833,
+ "抗": 2834,
+ "折": 2835,
+ "抚": 2836,
+ "抛": 2837,
+ "抜": 2838,
+ "択": 2839,
+ "抟": 2840,
+ "抠": 2841,
+ "抡": 2842,
+ "抢": 2843,
+ "护": 2844,
+ "报": 2845,
+ "抨": 2846,
+ "披": 2847,
+ "抬": 2848,
+ "抱": 2849,
+ "抵": 2850,
+ "抹": 2851,
+ "押": 2852,
+ "抽": 2853,
+ "抿": 2854,
+ "拂": 2855,
+ "拄": 2856,
+ "担": 2857,
+ "拆": 2858,
+ "拇": 2859,
+ "拈": 2860,
+ "拉": 2861,
+ "拋": 2862,
+ "拌": 2863,
+ "拍": 2864,
+ "拎": 2865,
+ "拐": 2866,
+ "拒": 2867,
+ "拓": 2868,
+ "拔": 2869,
+ "拖": 2870,
+ "拗": 2871,
+ "拘": 2872,
+ "拙": 2873,
+ "拚": 2874,
+ "招": 2875,
+ "拜": 2876,
+ "拟": 2877,
+ "拡": 2878,
+ "拢": 2879,
+ "拣": 2880,
+ "拥": 2881,
+ "拦": 2882,
+ "拧": 2883,
+ "拨": 2884,
+ "择": 2885,
+ "括": 2886,
+ "拭": 2887,
+ "拮": 2888,
+ "拯": 2889,
+ "拱": 2890,
+ "拳": 2891,
+ "拴": 2892,
+ "拷": 2893,
+ "拼": 2894,
+ "拽": 2895,
+ "拾": 2896,
+ "拿": 2897,
+ "持": 2898,
+ "挂": 2899,
+ "指": 2900,
+ "挈": 2901,
+ "按": 2902,
+ "挎": 2903,
+ "挑": 2904,
+ "挖": 2905,
+ "挙": 2906,
+ "挚": 2907,
+ "挛": 2908,
+ "挝": 2909,
+ "挞": 2910,
+ "挟": 2911,
+ "挠": 2912,
+ "挡": 2913,
+ "挣": 2914,
+ "挤": 2915,
+ "挥": 2916,
+ "挨": 2917,
+ "挪": 2918,
+ "挫": 2919,
+ "振": 2920,
+ "挲": 2921,
+ "挹": 2922,
+ "挺": 2923,
+ "挽": 2924,
+ "挾": 2925,
+ "捂": 2926,
+ "捅": 2927,
+ "捆": 2928,
+ "捉": 2929,
+ "捋": 2930,
+ "捌": 2931,
+ "捍": 2932,
+ "捎": 2933,
+ "捏": 2934,
+ "捐": 2935,
+ "捕": 2936,
+ "捞": 2937,
+ "损": 2938,
+ "捡": 2939,
+ "换": 2940,
+ "捣": 2941,
+ "捧": 2942,
+ "捨": 2943,
+ "捩": 2944,
+ "据": 2945,
+ "捱": 2946,
+ "捲": 2947,
+ "捶": 2948,
+ "捷": 2949,
+ "捺": 2950,
+ "捻": 2951,
+ "掀": 2952,
+ "掂": 2953,
+ "掃": 2954,
+ "掇": 2955,
+ "授": 2956,
+ "掉": 2957,
+ "掌": 2958,
+ "掏": 2959,
+ "掐": 2960,
+ "排": 2961,
+ "掖": 2962,
+ "掘": 2963,
+ "掙": 2964,
+ "掛": 2965,
+ "掠": 2966,
+ "採": 2967,
+ "探": 2968,
+ "掣": 2969,
+ "接": 2970,
+ "控": 2971,
+ "推": 2972,
+ "掩": 2973,
+ "措": 2974,
+ "掬": 2975,
+ "掰": 2976,
+ "掲": 2977,
+ "掳": 2978,
+ "掴": 2979,
+ "掷": 2980,
+ "掸": 2981,
+ "掺": 2982,
+ "揀": 2983,
+ "揃": 2984,
+ "揄": 2985,
+ "揆": 2986,
+ "揉": 2987,
+ "揍": 2988,
+ "描": 2989,
+ "提": 2990,
+ "插": 2991,
+ "揖": 2992,
+ "揚": 2993,
+ "換": 2994,
+ "握": 2995,
+ "揣": 2996,
+ "揩": 2997,
+ "揪": 2998,
+ "揭": 2999,
+ "揮": 3000,
+ "援": 3001,
+ "揶": 3002,
+ "揸": 3003,
+ "揹": 3004,
+ "揽": 3005,
+ "搀": 3006,
+ "搁": 3007,
+ "搂": 3008,
+ "搅": 3009,
+ "損": 3010,
+ "搏": 3011,
+ "搐": 3012,
+ "搓": 3013,
+ "搔": 3014,
+ "搖": 3015,
+ "搗": 3016,
+ "搜": 3017,
+ "搞": 3018,
+ "搡": 3019,
+ "搪": 3020,
+ "搬": 3021,
+ "搭": 3022,
+ "搵": 3023,
+ "搶": 3024,
+ "携": 3025,
+ "搽": 3026,
+ "摀": 3027,
+ "摁": 3028,
+ "摄": 3029,
+ "摆": 3030,
+ "摇": 3031,
+ "摈": 3032,
+ "摊": 3033,
+ "摒": 3034,
+ "摔": 3035,
+ "摘": 3036,
+ "摞": 3037,
+ "摟": 3038,
+ "摧": 3039,
+ "摩": 3040,
+ "摯": 3041,
+ "摳": 3042,
+ "摸": 3043,
+ "摹": 3044,
+ "摺": 3045,
+ "摻": 3046,
+ "撂": 3047,
+ "撃": 3048,
+ "撅": 3049,
+ "撇": 3050,
+ "撈": 3051,
+ "撐": 3052,
+ "撑": 3053,
+ "撒": 3054,
+ "撓": 3055,
+ "撕": 3056,
+ "撚": 3057,
+ "撞": 3058,
+ "撤": 3059,
+ "撥": 3060,
+ "撩": 3061,
+ "撫": 3062,
+ "撬": 3063,
+ "播": 3064,
+ "撮": 3065,
+ "撰": 3066,
+ "撲": 3067,
+ "撵": 3068,
+ "撷": 3069,
+ "撸": 3070,
+ "撻": 3071,
+ "撼": 3072,
+ "撿": 3073,
+ "擀": 3074,
+ "擁": 3075,
+ "擂": 3076,
+ "擄": 3077,
+ "擅": 3078,
+ "擇": 3079,
+ "擊": 3080,
+ "擋": 3081,
+ "操": 3082,
+ "擎": 3083,
+ "擒": 3084,
+ "擔": 3085,
+ "擘": 3086,
+ "據": 3087,
+ "擞": 3088,
+ "擠": 3089,
+ "擡": 3090,
+ "擢": 3091,
+ "擦": 3092,
+ "擬": 3093,
+ "擰": 3094,
+ "擱": 3095,
+ "擲": 3096,
+ "擴": 3097,
+ "擷": 3098,
+ "擺": 3099,
+ "擼": 3100,
+ "擾": 3101,
+ "攀": 3102,
+ "攏": 3103,
+ "攒": 3104,
+ "攔": 3105,
+ "攘": 3106,
+ "攙": 3107,
+ "攜": 3108,
+ "攝": 3109,
+ "攞": 3110,
+ "攢": 3111,
+ "攣": 3112,
+ "攤": 3113,
+ "攥": 3114,
+ "攪": 3115,
+ "攫": 3116,
+ "攬": 3117,
+ "支": 3118,
+ "收": 3119,
+ "攸": 3120,
+ "改": 3121,
+ "攻": 3122,
+ "放": 3123,
+ "政": 3124,
+ "故": 3125,
+ "效": 3126,
+ "敌": 3127,
+ "敍": 3128,
+ "敎": 3129,
+ "敏": 3130,
+ "救": 3131,
+ "敕": 3132,
+ "敖": 3133,
+ "敗": 3134,
+ "敘": 3135,
+ "教": 3136,
+ "敛": 3137,
+ "敝": 3138,
+ "敞": 3139,
+ "敢": 3140,
+ "散": 3141,
+ "敦": 3142,
+ "敬": 3143,
+ "数": 3144,
+ "敲": 3145,
+ "整": 3146,
+ "敵": 3147,
+ "敷": 3148,
+ "數": 3149,
+ "斂": 3150,
+ "斃": 3151,
+ "文": 3152,
+ "斋": 3153,
+ "斌": 3154,
+ "斎": 3155,
+ "斐": 3156,
+ "斑": 3157,
+ "斓": 3158,
+ "斗": 3159,
+ "料": 3160,
+ "斛": 3161,
+ "斜": 3162,
+ "斟": 3163,
+ "斡": 3164,
+ "斤": 3165,
+ "斥": 3166,
+ "斧": 3167,
+ "斩": 3168,
+ "斫": 3169,
+ "斬": 3170,
+ "断": 3171,
+ "斯": 3172,
+ "新": 3173,
+ "斷": 3174,
+ "方": 3175,
+ "於": 3176,
+ "施": 3177,
+ "旁": 3178,
+ "旃": 3179,
+ "旅": 3180,
+ "旋": 3181,
+ "旌": 3182,
+ "旎": 3183,
+ "族": 3184,
+ "旖": 3185,
+ "旗": 3186,
+ "无": 3187,
+ "既": 3188,
+ "日": 3189,
+ "旦": 3190,
+ "旧": 3191,
+ "旨": 3192,
+ "早": 3193,
+ "旬": 3194,
+ "旭": 3195,
+ "旮": 3196,
+ "旱": 3197,
+ "时": 3198,
+ "旷": 3199,
+ "旺": 3200,
+ "旻": 3201,
+ "昀": 3202,
+ "昂": 3203,
+ "昆": 3204,
+ "昇": 3205,
+ "昉": 3206,
+ "昊": 3207,
+ "昌": 3208,
+ "明": 3209,
+ "昏": 3210,
+ "易": 3211,
+ "昔": 3212,
+ "昕": 3213,
+ "昙": 3214,
+ "星": 3215,
+ "映": 3216,
+ "春": 3217,
+ "昧": 3218,
+ "昨": 3219,
+ "昭": 3220,
+ "是": 3221,
+ "昱": 3222,
+ "昴": 3223,
+ "昵": 3224,
+ "昶": 3225,
+ "昼": 3226,
+ "显": 3227,
+ "晁": 3228,
+ "時": 3229,
+ "晃": 3230,
+ "晉": 3231,
+ "晋": 3232,
+ "晌": 3233,
+ "晏": 3234,
+ "晒": 3235,
+ "晓": 3236,
+ "晔": 3237,
+ "晕": 3238,
+ "晖": 3239,
+ "晗": 3240,
+ "晚": 3241,
+ "晝": 3242,
+ "晞": 3243,
+ "晟": 3244,
+ "晤": 3245,
+ "晦": 3246,
+ "晨": 3247,
+ "晩": 3248,
+ "普": 3249,
+ "景": 3250,
+ "晰": 3251,
+ "晴": 3252,
+ "晶": 3253,
+ "晷": 3254,
+ "智": 3255,
+ "晾": 3256,
+ "暂": 3257,
+ "暄": 3258,
+ "暇": 3259,
+ "暈": 3260,
+ "暉": 3261,
+ "暌": 3262,
+ "暐": 3263,
+ "暑": 3264,
+ "暖": 3265,
+ "暗": 3266,
+ "暝": 3267,
+ "暢": 3268,
+ "暧": 3269,
+ "暨": 3270,
+ "暫": 3271,
+ "暮": 3272,
+ "暱": 3273,
+ "暴": 3274,
+ "暸": 3275,
+ "暹": 3276,
+ "曄": 3277,
+ "曆": 3278,
+ "曇": 3279,
+ "曉": 3280,
+ "曖": 3281,
+ "曙": 3282,
+ "曜": 3283,
+ "曝": 3284,
+ "曠": 3285,
+ "曦": 3286,
+ "曬": 3287,
+ "曰": 3288,
+ "曲": 3289,
+ "曳": 3290,
+ "更": 3291,
+ "書": 3292,
+ "曹": 3293,
+ "曼": 3294,
+ "曾": 3295,
+ "替": 3296,
+ "最": 3297,
+ "會": 3298,
+ "月": 3299,
+ "有": 3300,
+ "朋": 3301,
+ "服": 3302,
+ "朐": 3303,
+ "朔": 3304,
+ "朕": 3305,
+ "朗": 3306,
+ "望": 3307,
+ "朝": 3308,
+ "期": 3309,
+ "朦": 3310,
+ "朧": 3311,
+ "木": 3312,
+ "未": 3313,
+ "末": 3314,
+ "本": 3315,
+ "札": 3316,
+ "朮": 3317,
+ "术": 3318,
+ "朱": 3319,
+ "朴": 3320,
+ "朵": 3321,
+ "机": 3322,
+ "朽": 3323,
+ "杀": 3324,
+ "杂": 3325,
+ "权": 3326,
+ "杆": 3327,
+ "杈": 3328,
+ "杉": 3329,
+ "李": 3330,
+ "杏": 3331,
+ "材": 3332,
+ "村": 3333,
+ "杓": 3334,
+ "杖": 3335,
+ "杜": 3336,
+ "杞": 3337,
+ "束": 3338,
+ "杠": 3339,
+ "条": 3340,
+ "来": 3341,
+ "杨": 3342,
+ "杭": 3343,
+ "杯": 3344,
+ "杰": 3345,
+ "東": 3346,
+ "杳": 3347,
+ "杵": 3348,
+ "杷": 3349,
+ "杼": 3350,
+ "松": 3351,
+ "板": 3352,
+ "极": 3353,
+ "构": 3354,
+ "枇": 3355,
+ "枉": 3356,
+ "枋": 3357,
+ "析": 3358,
+ "枕": 3359,
+ "林": 3360,
+ "枚": 3361,
+ "果": 3362,
+ "枝": 3363,
+ "枢": 3364,
+ "枣": 3365,
+ "枪": 3366,
+ "枫": 3367,
+ "枭": 3368,
+ "枯": 3369,
+ "枰": 3370,
+ "枱": 3371,
+ "枳": 3372,
+ "架": 3373,
+ "枷": 3374,
+ "枸": 3375,
+ "柄": 3376,
+ "柏": 3377,
+ "某": 3378,
+ "柑": 3379,
+ "柒": 3380,
+ "染": 3381,
+ "柔": 3382,
+ "柘": 3383,
+ "柚": 3384,
+ "柜": 3385,
+ "柞": 3386,
+ "柠": 3387,
+ "柢": 3388,
+ "查": 3389,
+ "柩": 3390,
+ "柬": 3391,
+ "柯": 3392,
+ "柱": 3393,
+ "柳": 3394,
+ "柴": 3395,
+ "柵": 3396,
+ "査": 3397,
+ "柿": 3398,
+ "栀": 3399,
+ "栃": 3400,
+ "栄": 3401,
+ "栅": 3402,
+ "标": 3403,
+ "栈": 3404,
+ "栉": 3405,
+ "栋": 3406,
+ "栎": 3407,
+ "栏": 3408,
+ "树": 3409,
+ "栓": 3410,
+ "栖": 3411,
+ "栗": 3412,
+ "校": 3413,
+ "栩": 3414,
+ "株": 3415,
+ "样": 3416,
+ "核": 3417,
+ "根": 3418,
+ "格": 3419,
+ "栽": 3420,
+ "栾": 3421,
+ "桀": 3422,
+ "桁": 3423,
+ "桂": 3424,
+ "桃": 3425,
+ "桅": 3426,
+ "框": 3427,
+ "案": 3428,
+ "桉": 3429,
+ "桌": 3430,
+ "桎": 3431,
+ "桐": 3432,
+ "桑": 3433,
+ "桓": 3434,
+ "桔": 3435,
+ "桜": 3436,
+ "桠": 3437,
+ "桡": 3438,
+ "桢": 3439,
+ "档": 3440,
+ "桥": 3441,
+ "桦": 3442,
+ "桧": 3443,
+ "桨": 3444,
+ "桩": 3445,
+ "桶": 3446,
+ "桿": 3447,
+ "梁": 3448,
+ "梅": 3449,
+ "梆": 3450,
+ "梏": 3451,
+ "梓": 3452,
+ "梗": 3453,
+ "條": 3454,
+ "梟": 3455,
+ "梢": 3456,
+ "梦": 3457,
+ "梧": 3458,
+ "梨": 3459,
+ "梭": 3460,
+ "梯": 3461,
+ "械": 3462,
+ "梳": 3463,
+ "梵": 3464,
+ "梶": 3465,
+ "检": 3466,
+ "棂": 3467,
+ "棄": 3468,
+ "棉": 3469,
+ "棋": 3470,
+ "棍": 3471,
+ "棒": 3472,
+ "棕": 3473,
+ "棗": 3474,
+ "棘": 3475,
+ "棚": 3476,
+ "棟": 3477,
+ "棠": 3478,
+ "棣": 3479,
+ "棧": 3480,
+ "森": 3481,
+ "棱": 3482,
+ "棲": 3483,
+ "棵": 3484,
+ "棹": 3485,
+ "棺": 3486,
+ "椁": 3487,
+ "椅": 3488,
+ "椋": 3489,
+ "植": 3490,
+ "椎": 3491,
+ "椒": 3492,
+ "検": 3493,
+ "椪": 3494,
+ "椭": 3495,
+ "椰": 3496,
+ "椹": 3497,
+ "椽": 3498,
+ "椿": 3499,
+ "楂": 3500,
+ "楊": 3501,
+ "楓": 3502,
+ "楔": 3503,
+ "楚": 3504,
+ "楝": 3505,
+ "楞": 3506,
+ "楠": 3507,
+ "楣": 3508,
+ "楨": 3509,
+ "楫": 3510,
+ "業": 3511,
+ "楮": 3512,
+ "極": 3513,
+ "楷": 3514,
+ "楸": 3515,
+ "楹": 3516,
+ "楼": 3517,
+ "楽": 3518,
+ "概": 3519,
+ "榄": 3520,
+ "榆": 3521,
+ "榈": 3522,
+ "榉": 3523,
+ "榔": 3524,
+ "榕": 3525,
+ "榖": 3526,
+ "榛": 3527,
+ "榜": 3528,
+ "榨": 3529,
+ "榫": 3530,
+ "榭": 3531,
+ "榮": 3532,
+ "榱": 3533,
+ "榴": 3534,
+ "榷": 3535,
+ "榻": 3536,
+ "槁": 3537,
+ "槃": 3538,
+ "構": 3539,
+ "槌": 3540,
+ "槍": 3541,
+ "槎": 3542,
+ "槐": 3543,
+ "槓": 3544,
+ "様": 3545,
+ "槛": 3546,
+ "槟": 3547,
+ "槤": 3548,
+ "槭": 3549,
+ "槲": 3550,
+ "槳": 3551,
+ "槻": 3552,
+ "槽": 3553,
+ "槿": 3554,
+ "樁": 3555,
+ "樂": 3556,
+ "樊": 3557,
+ "樑": 3558,
+ "樓": 3559,
+ "標": 3560,
+ "樞": 3561,
+ "樟": 3562,
+ "模": 3563,
+ "樣": 3564,
+ "権": 3565,
+ "横": 3566,
+ "樫": 3567,
+ "樯": 3568,
+ "樱": 3569,
+ "樵": 3570,
+ "樸": 3571,
+ "樹": 3572,
+ "樺": 3573,
+ "樽": 3574,
+ "樾": 3575,
+ "橄": 3576,
+ "橇": 3577,
+ "橋": 3578,
+ "橐": 3579,
+ "橘": 3580,
+ "橙": 3581,
+ "機": 3582,
+ "橡": 3583,
+ "橢": 3584,
+ "橫": 3585,
+ "橱": 3586,
+ "橹": 3587,
+ "橼": 3588,
+ "檀": 3589,
+ "檄": 3590,
+ "檎": 3591,
+ "檐": 3592,
+ "檔": 3593,
+ "檗": 3594,
+ "檜": 3595,
+ "檢": 3596,
+ "檬": 3597,
+ "檯": 3598,
+ "檳": 3599,
+ "檸": 3600,
+ "檻": 3601,
+ "櫃": 3602,
+ "櫚": 3603,
+ "櫛": 3604,
+ "櫥": 3605,
+ "櫸": 3606,
+ "櫻": 3607,
+ "欄": 3608,
+ "權": 3609,
+ "欒": 3610,
+ "欖": 3611,
+ "欠": 3612,
+ "次": 3613,
+ "欢": 3614,
+ "欣": 3615,
+ "欧": 3616,
+ "欲": 3617,
+ "欸": 3618,
+ "欺": 3619,
+ "欽": 3620,
+ "款": 3621,
+ "歆": 3622,
+ "歇": 3623,
+ "歉": 3624,
+ "歌": 3625,
+ "歎": 3626,
+ "歐": 3627,
+ "歓": 3628,
+ "歙": 3629,
+ "歛": 3630,
+ "歡": 3631,
+ "止": 3632,
+ "正": 3633,
+ "此": 3634,
+ "步": 3635,
+ "武": 3636,
+ "歧": 3637,
+ "歩": 3638,
+ "歪": 3639,
+ "歯": 3640,
+ "歲": 3641,
+ "歳": 3642,
+ "歴": 3643,
+ "歷": 3644,
+ "歸": 3645,
+ "歹": 3646,
+ "死": 3647,
+ "歼": 3648,
+ "殁": 3649,
+ "殃": 3650,
+ "殆": 3651,
+ "殇": 3652,
+ "殉": 3653,
+ "殊": 3654,
+ "残": 3655,
+ "殒": 3656,
+ "殓": 3657,
+ "殖": 3658,
+ "殘": 3659,
+ "殞": 3660,
+ "殡": 3661,
+ "殤": 3662,
+ "殭": 3663,
+ "殯": 3664,
+ "殲": 3665,
+ "殴": 3666,
+ "段": 3667,
+ "殷": 3668,
+ "殺": 3669,
+ "殼": 3670,
+ "殿": 3671,
+ "毀": 3672,
+ "毁": 3673,
+ "毂": 3674,
+ "毅": 3675,
+ "毆": 3676,
+ "毋": 3677,
+ "母": 3678,
+ "毎": 3679,
+ "每": 3680,
+ "毒": 3681,
+ "毓": 3682,
+ "比": 3683,
+ "毕": 3684,
+ "毗": 3685,
+ "毘": 3686,
+ "毙": 3687,
+ "毛": 3688,
+ "毡": 3689,
+ "毫": 3690,
+ "毯": 3691,
+ "毽": 3692,
+ "氈": 3693,
+ "氏": 3694,
+ "氐": 3695,
+ "民": 3696,
+ "氓": 3697,
+ "气": 3698,
+ "氖": 3699,
+ "気": 3700,
+ "氙": 3701,
+ "氛": 3702,
+ "氟": 3703,
+ "氡": 3704,
+ "氢": 3705,
+ "氣": 3706,
+ "氤": 3707,
+ "氦": 3708,
+ "氧": 3709,
+ "氨": 3710,
+ "氪": 3711,
+ "氫": 3712,
+ "氮": 3713,
+ "氯": 3714,
+ "氰": 3715,
+ "氲": 3716,
+ "水": 3717,
+ "氷": 3718,
+ "永": 3719,
+ "氹": 3720,
+ "氾": 3721,
+ "汀": 3722,
+ "汁": 3723,
+ "求": 3724,
+ "汆": 3725,
+ "汇": 3726,
+ "汉": 3727,
+ "汎": 3728,
+ "汐": 3729,
+ "汕": 3730,
+ "汗": 3731,
+ "汙": 3732,
+ "汛": 3733,
+ "汝": 3734,
+ "汞": 3735,
+ "江": 3736,
+ "池": 3737,
+ "污": 3738,
+ "汤": 3739,
+ "汨": 3740,
+ "汩": 3741,
+ "汪": 3742,
+ "汰": 3743,
+ "汲": 3744,
+ "汴": 3745,
+ "汶": 3746,
+ "汹": 3747,
+ "決": 3748,
+ "汽": 3749,
+ "汾": 3750,
+ "沁": 3751,
+ "沂": 3752,
+ "沃": 3753,
+ "沅": 3754,
+ "沈": 3755,
+ "沉": 3756,
+ "沌": 3757,
+ "沏": 3758,
+ "沐": 3759,
+ "沒": 3760,
+ "沓": 3761,
+ "沖": 3762,
+ "沙": 3763,
+ "沛": 3764,
+ "沟": 3765,
+ "没": 3766,
+ "沢": 3767,
+ "沣": 3768,
+ "沥": 3769,
+ "沦": 3770,
+ "沧": 3771,
+ "沪": 3772,
+ "沫": 3773,
+ "沭": 3774,
+ "沮": 3775,
+ "沱": 3776,
+ "河": 3777,
+ "沸": 3778,
+ "油": 3779,
+ "治": 3780,
+ "沼": 3781,
+ "沽": 3782,
+ "沾": 3783,
+ "沿": 3784,
+ "況": 3785,
+ "泄": 3786,
+ "泉": 3787,
+ "泊": 3788,
+ "泌": 3789,
+ "泓": 3790,
+ "法": 3791,
+ "泗": 3792,
+ "泛": 3793,
+ "泞": 3794,
+ "泠": 3795,
+ "泡": 3796,
+ "波": 3797,
+ "泣": 3798,
+ "泥": 3799,
+ "注": 3800,
+ "泪": 3801,
+ "泫": 3802,
+ "泮": 3803,
+ "泯": 3804,
+ "泰": 3805,
+ "泱": 3806,
+ "泳": 3807,
+ "泵": 3808,
+ "泷": 3809,
+ "泸": 3810,
+ "泻": 3811,
+ "泼": 3812,
+ "泽": 3813,
+ "泾": 3814,
+ "洁": 3815,
+ "洄": 3816,
+ "洋": 3817,
+ "洒": 3818,
+ "洗": 3819,
+ "洙": 3820,
+ "洛": 3821,
+ "洞": 3822,
+ "津": 3823,
+ "洩": 3824,
+ "洪": 3825,
+ "洮": 3826,
+ "洱": 3827,
+ "洲": 3828,
+ "洵": 3829,
+ "洶": 3830,
+ "洸": 3831,
+ "洹": 3832,
+ "活": 3833,
+ "洼": 3834,
+ "洽": 3835,
+ "派": 3836,
+ "流": 3837,
+ "浃": 3838,
+ "浄": 3839,
+ "浅": 3840,
+ "浆": 3841,
+ "浇": 3842,
+ "浊": 3843,
+ "测": 3844,
+ "济": 3845,
+ "浏": 3846,
+ "浑": 3847,
+ "浒": 3848,
+ "浓": 3849,
+ "浔": 3850,
+ "浙": 3851,
+ "浚": 3852,
+ "浜": 3853,
+ "浣": 3854,
+ "浦": 3855,
+ "浩": 3856,
+ "浪": 3857,
+ "浬": 3858,
+ "浮": 3859,
+ "浯": 3860,
+ "浴": 3861,
+ "海": 3862,
+ "浸": 3863,
+ "涂": 3864,
+ "涅": 3865,
+ "涇": 3866,
+ "消": 3867,
+ "涉": 3868,
+ "涌": 3869,
+ "涎": 3870,
+ "涓": 3871,
+ "涔": 3872,
+ "涕": 3873,
+ "涙": 3874,
+ "涛": 3875,
+ "涝": 3876,
+ "涞": 3877,
+ "涟": 3878,
+ "涠": 3879,
+ "涡": 3880,
+ "涣": 3881,
+ "涤": 3882,
+ "润": 3883,
+ "涧": 3884,
+ "涨": 3885,
+ "涩": 3886,
+ "涪": 3887,
+ "涮": 3888,
+ "涯": 3889,
+ "液": 3890,
+ "涵": 3891,
+ "涸": 3892,
+ "涼": 3893,
+ "涿": 3894,
+ "淀": 3895,
+ "淄": 3896,
+ "淅": 3897,
+ "淆": 3898,
+ "淇": 3899,
+ "淋": 3900,
+ "淌": 3901,
+ "淑": 3902,
+ "淒": 3903,
+ "淖": 3904,
+ "淘": 3905,
+ "淙": 3906,
+ "淚": 3907,
+ "淞": 3908,
+ "淡": 3909,
+ "淤": 3910,
+ "淦": 3911,
+ "淨": 3912,
+ "淩": 3913,
+ "淪": 3914,
+ "淫": 3915,
+ "淬": 3916,
+ "淮": 3917,
+ "深": 3918,
+ "淳": 3919,
+ "淵": 3920,
+ "混": 3921,
+ "淹": 3922,
+ "淺": 3923,
+ "添": 3924,
+ "淼": 3925,
+ "清": 3926,
+ "済": 3927,
+ "渉": 3928,
+ "渊": 3929,
+ "渋": 3930,
+ "渍": 3931,
+ "渎": 3932,
+ "渐": 3933,
+ "渔": 3934,
+ "渗": 3935,
+ "渙": 3936,
+ "渚": 3937,
+ "減": 3938,
+ "渝": 3939,
+ "渠": 3940,
+ "渡": 3941,
+ "渣": 3942,
+ "渤": 3943,
+ "渥": 3944,
+ "渦": 3945,
+ "温": 3946,
+ "測": 3947,
+ "渭": 3948,
+ "港": 3949,
+ "渲": 3950,
+ "渴": 3951,
+ "游": 3952,
+ "渺": 3953,
+ "渾": 3954,
+ "湃": 3955,
+ "湄": 3956,
+ "湊": 3957,
+ "湍": 3958,
+ "湖": 3959,
+ "湘": 3960,
+ "湛": 3961,
+ "湟": 3962,
+ "湧": 3963,
+ "湫": 3964,
+ "湮": 3965,
+ "湯": 3966,
+ "湳": 3967,
+ "湾": 3968,
+ "湿": 3969,
+ "満": 3970,
+ "溃": 3971,
+ "溅": 3972,
+ "溉": 3973,
+ "溏": 3974,
+ "源": 3975,
+ "準": 3976,
+ "溜": 3977,
+ "溝": 3978,
+ "溟": 3979,
+ "溢": 3980,
+ "溥": 3981,
+ "溧": 3982,
+ "溪": 3983,
+ "溫": 3984,
+ "溯": 3985,
+ "溱": 3986,
+ "溴": 3987,
+ "溶": 3988,
+ "溺": 3989,
+ "溼": 3990,
+ "滁": 3991,
+ "滂": 3992,
+ "滄": 3993,
+ "滅": 3994,
+ "滇": 3995,
+ "滋": 3996,
+ "滌": 3997,
+ "滑": 3998,
+ "滓": 3999,
+ "滔": 4000,
+ "滕": 4001,
+ "滙": 4002,
+ "滚": 4003,
+ "滝": 4004,
+ "滞": 4005,
+ "滟": 4006,
+ "满": 4007,
+ "滢": 4008,
+ "滤": 4009,
+ "滥": 4010,
+ "滦": 4011,
+ "滨": 4012,
+ "滩": 4013,
+ "滬": 4014,
+ "滯": 4015,
+ "滲": 4016,
+ "滴": 4017,
+ "滷": 4018,
+ "滸": 4019,
+ "滾": 4020,
+ "滿": 4021,
+ "漁": 4022,
+ "漂": 4023,
+ "漆": 4024,
+ "漉": 4025,
+ "漏": 4026,
+ "漓": 4027,
+ "演": 4028,
+ "漕": 4029,
+ "漠": 4030,
+ "漢": 4031,
+ "漣": 4032,
+ "漩": 4033,
+ "漪": 4034,
+ "漫": 4035,
+ "漬": 4036,
+ "漯": 4037,
+ "漱": 4038,
+ "漲": 4039,
+ "漳": 4040,
+ "漸": 4041,
+ "漾": 4042,
+ "漿": 4043,
+ "潆": 4044,
+ "潇": 4045,
+ "潋": 4046,
+ "潍": 4047,
+ "潑": 4048,
+ "潔": 4049,
+ "潘": 4050,
+ "潛": 4051,
+ "潜": 4052,
+ "潞": 4053,
+ "潟": 4054,
+ "潢": 4055,
+ "潤": 4056,
+ "潦": 4057,
+ "潧": 4058,
+ "潭": 4059,
+ "潮": 4060,
+ "潰": 4061,
+ "潴": 4062,
+ "潸": 4063,
+ "潺": 4064,
+ "潼": 4065,
+ "澀": 4066,
+ "澄": 4067,
+ "澆": 4068,
+ "澈": 4069,
+ "澍": 4070,
+ "澎": 4071,
+ "澗": 4072,
+ "澜": 4073,
+ "澡": 4074,
+ "澤": 4075,
+ "澧": 4076,
+ "澱": 4077,
+ "澳": 4078,
+ "澹": 4079,
+ "激": 4080,
+ "濁": 4081,
+ "濂": 4082,
+ "濃": 4083,
+ "濑": 4084,
+ "濒": 4085,
+ "濕": 4086,
+ "濘": 4087,
+ "濛": 4088,
+ "濟": 4089,
+ "濠": 4090,
+ "濡": 4091,
+ "濤": 4092,
+ "濫": 4093,
+ "濬": 4094,
+ "濮": 4095,
+ "濯": 4096,
+ "濱": 4097,
+ "濺": 4098,
+ "濾": 4099,
+ "瀅": 4100,
+ "瀆": 4101,
+ "瀉": 4102,
+ "瀋": 4103,
+ "瀏": 4104,
+ "瀑": 4105,
+ "瀕": 4106,
+ "瀘": 4107,
+ "瀚": 4108,
+ "瀛": 4109,
+ "瀝": 4110,
+ "瀞": 4111,
+ "瀟": 4112,
+ "瀧": 4113,
+ "瀨": 4114,
+ "瀬": 4115,
+ "瀰": 4116,
+ "瀾": 4117,
+ "灌": 4118,
+ "灏": 4119,
+ "灑": 4120,
+ "灘": 4121,
+ "灝": 4122,
+ "灞": 4123,
+ "灣": 4124,
+ "火": 4125,
+ "灬": 4126,
+ "灭": 4127,
+ "灯": 4128,
+ "灰": 4129,
+ "灵": 4130,
+ "灶": 4131,
+ "灸": 4132,
+ "灼": 4133,
+ "災": 4134,
+ "灾": 4135,
+ "灿": 4136,
+ "炀": 4137,
+ "炁": 4138,
+ "炅": 4139,
+ "炉": 4140,
+ "炊": 4141,
+ "炎": 4142,
+ "炒": 4143,
+ "炔": 4144,
+ "炕": 4145,
+ "炖": 4146,
+ "炙": 4147,
+ "炜": 4148,
+ "炫": 4149,
+ "炬": 4150,
+ "炭": 4151,
+ "炮": 4152,
+ "炯": 4153,
+ "炳": 4154,
+ "炷": 4155,
+ "炸": 4156,
+ "点": 4157,
+ "為": 4158,
+ "炼": 4159,
+ "炽": 4160,
+ "烁": 4161,
+ "烂": 4162,
+ "烃": 4163,
+ "烈": 4164,
+ "烊": 4165,
+ "烏": 4166,
+ "烘": 4167,
+ "烙": 4168,
+ "烛": 4169,
+ "烟": 4170,
+ "烤": 4171,
+ "烦": 4172,
+ "烧": 4173,
+ "烨": 4174,
+ "烩": 4175,
+ "烫": 4176,
+ "烬": 4177,
+ "热": 4178,
+ "烯": 4179,
+ "烷": 4180,
+ "烹": 4181,
+ "烽": 4182,
+ "焉": 4183,
+ "焊": 4184,
+ "焕": 4185,
+ "焖": 4186,
+ "焗": 4187,
+ "焘": 4188,
+ "焙": 4189,
+ "焚": 4190,
+ "焜": 4191,
+ "無": 4192,
+ "焦": 4193,
+ "焯": 4194,
+ "焰": 4195,
+ "焱": 4196,
+ "然": 4197,
+ "焼": 4198,
+ "煅": 4199,
+ "煉": 4200,
+ "煊": 4201,
+ "煌": 4202,
+ "煎": 4203,
+ "煒": 4204,
+ "煖": 4205,
+ "煙": 4206,
+ "煜": 4207,
+ "煞": 4208,
+ "煤": 4209,
+ "煥": 4210,
+ "煦": 4211,
+ "照": 4212,
+ "煨": 4213,
+ "煩": 4214,
+ "煮": 4215,
+ "煲": 4216,
+ "煸": 4217,
+ "煽": 4218,
+ "熄": 4219,
+ "熊": 4220,
+ "熏": 4221,
+ "熒": 4222,
+ "熔": 4223,
+ "熙": 4224,
+ "熟": 4225,
+ "熠": 4226,
+ "熨": 4227,
+ "熬": 4228,
+ "熱": 4229,
+ "熵": 4230,
+ "熹": 4231,
+ "熾": 4232,
+ "燁": 4233,
+ "燃": 4234,
+ "燄": 4235,
+ "燈": 4236,
+ "燉": 4237,
+ "燊": 4238,
+ "燎": 4239,
+ "燒": 4240,
+ "燔": 4241,
+ "燕": 4242,
+ "燙": 4243,
+ "燜": 4244,
+ "營": 4245,
+ "燥": 4246,
+ "燦": 4247,
+ "燧": 4248,
+ "燭": 4249,
+ "燮": 4250,
+ "燴": 4251,
+ "燻": 4252,
+ "燼": 4253,
+ "燿": 4254,
+ "爆": 4255,
+ "爍": 4256,
+ "爐": 4257,
+ "爛": 4258,
+ "爪": 4259,
+ "爬": 4260,
+ "爭": 4261,
+ "爰": 4262,
+ "爱": 4263,
+ "爲": 4264,
+ "爵": 4265,
+ "父": 4266,
+ "爷": 4267,
+ "爸": 4268,
+ "爹": 4269,
+ "爺": 4270,
+ "爻": 4271,
+ "爽": 4272,
+ "爾": 4273,
+ "牆": 4274,
+ "片": 4275,
+ "版": 4276,
+ "牌": 4277,
+ "牍": 4278,
+ "牒": 4279,
+ "牙": 4280,
+ "牛": 4281,
+ "牝": 4282,
+ "牟": 4283,
+ "牠": 4284,
+ "牡": 4285,
+ "牢": 4286,
+ "牦": 4287,
+ "牧": 4288,
+ "物": 4289,
+ "牯": 4290,
+ "牲": 4291,
+ "牴": 4292,
+ "牵": 4293,
+ "特": 4294,
+ "牺": 4295,
+ "牽": 4296,
+ "犀": 4297,
+ "犁": 4298,
+ "犄": 4299,
+ "犊": 4300,
+ "犍": 4301,
+ "犒": 4302,
+ "犢": 4303,
+ "犧": 4304,
+ "犬": 4305,
+ "犯": 4306,
+ "状": 4307,
+ "犷": 4308,
+ "犸": 4309,
+ "犹": 4310,
+ "狀": 4311,
+ "狂": 4312,
+ "狄": 4313,
+ "狈": 4314,
+ "狎": 4315,
+ "狐": 4316,
+ "狒": 4317,
+ "狗": 4318,
+ "狙": 4319,
+ "狞": 4320,
+ "狠": 4321,
+ "狡": 4322,
+ "狩": 4323,
+ "独": 4324,
+ "狭": 4325,
+ "狮": 4326,
+ "狰": 4327,
+ "狱": 4328,
+ "狸": 4329,
+ "狹": 4330,
+ "狼": 4331,
+ "狽": 4332,
+ "猎": 4333,
+ "猕": 4334,
+ "猖": 4335,
+ "猗": 4336,
+ "猙": 4337,
+ "猛": 4338,
+ "猜": 4339,
+ "猝": 4340,
+ "猥": 4341,
+ "猩": 4342,
+ "猪": 4343,
+ "猫": 4344,
+ "猬": 4345,
+ "献": 4346,
+ "猴": 4347,
+ "猶": 4348,
+ "猷": 4349,
+ "猾": 4350,
+ "猿": 4351,
+ "獄": 4352,
+ "獅": 4353,
+ "獎": 4354,
+ "獐": 4355,
+ "獒": 4356,
+ "獗": 4357,
+ "獠": 4358,
+ "獣": 4359,
+ "獨": 4360,
+ "獭": 4361,
+ "獰": 4362,
+ "獲": 4363,
+ "獵": 4364,
+ "獷": 4365,
+ "獸": 4366,
+ "獺": 4367,
+ "獻": 4368,
+ "獼": 4369,
+ "獾": 4370,
+ "玄": 4371,
+ "率": 4372,
+ "玉": 4373,
+ "王": 4374,
+ "玑": 4375,
+ "玖": 4376,
+ "玛": 4377,
+ "玟": 4378,
+ "玠": 4379,
+ "玥": 4380,
+ "玩": 4381,
+ "玫": 4382,
+ "玮": 4383,
+ "环": 4384,
+ "现": 4385,
+ "玲": 4386,
+ "玳": 4387,
+ "玷": 4388,
+ "玺": 4389,
+ "玻": 4390,
+ "珀": 4391,
+ "珂": 4392,
+ "珅": 4393,
+ "珈": 4394,
+ "珉": 4395,
+ "珊": 4396,
+ "珍": 4397,
+ "珏": 4398,
+ "珐": 4399,
+ "珑": 4400,
+ "珙": 4401,
+ "珞": 4402,
+ "珠": 4403,
+ "珣": 4404,
+ "珥": 4405,
+ "珩": 4406,
+ "珪": 4407,
+ "班": 4408,
+ "珮": 4409,
+ "珲": 4410,
+ "珺": 4411,
+ "現": 4412,
+ "球": 4413,
+ "琅": 4414,
+ "理": 4415,
+ "琇": 4416,
+ "琉": 4417,
+ "琊": 4418,
+ "琍": 4419,
+ "琏": 4420,
+ "琐": 4421,
+ "琛": 4422,
+ "琢": 4423,
+ "琥": 4424,
+ "琦": 4425,
+ "琨": 4426,
+ "琪": 4427,
+ "琬": 4428,
+ "琮": 4429,
+ "琰": 4430,
+ "琲": 4431,
+ "琳": 4432,
+ "琴": 4433,
+ "琵": 4434,
+ "琶": 4435,
+ "琺": 4436,
+ "琼": 4437,
+ "瑀": 4438,
+ "瑁": 4439,
+ "瑄": 4440,
+ "瑋": 4441,
+ "瑕": 4442,
+ "瑗": 4443,
+ "瑙": 4444,
+ "瑚": 4445,
+ "瑛": 4446,
+ "瑜": 4447,
+ "瑞": 4448,
+ "瑟": 4449,
+ "瑠": 4450,
+ "瑣": 4451,
+ "瑤": 4452,
+ "瑩": 4453,
+ "瑪": 4454,
+ "瑯": 4455,
+ "瑰": 4456,
+ "瑶": 4457,
+ "瑾": 4458,
+ "璀": 4459,
+ "璁": 4460,
+ "璃": 4461,
+ "璇": 4462,
+ "璉": 4463,
+ "璋": 4464,
+ "璎": 4465,
+ "璐": 4466,
+ "璜": 4467,
+ "璞": 4468,
+ "璟": 4469,
+ "璧": 4470,
+ "璨": 4471,
+ "環": 4472,
+ "璽": 4473,
+ "璿": 4474,
+ "瓊": 4475,
+ "瓏": 4476,
+ "瓒": 4477,
+ "瓜": 4478,
+ "瓢": 4479,
+ "瓣": 4480,
+ "瓤": 4481,
+ "瓦": 4482,
+ "瓮": 4483,
+ "瓯": 4484,
+ "瓴": 4485,
+ "瓶": 4486,
+ "瓷": 4487,
+ "甄": 4488,
+ "甌": 4489,
+ "甕": 4490,
+ "甘": 4491,
+ "甙": 4492,
+ "甚": 4493,
+ "甜": 4494,
+ "生": 4495,
+ "產": 4496,
+ "産": 4497,
+ "甥": 4498,
+ "甦": 4499,
+ "用": 4500,
+ "甩": 4501,
+ "甫": 4502,
+ "甬": 4503,
+ "甭": 4504,
+ "甯": 4505,
+ "田": 4506,
+ "由": 4507,
+ "甲": 4508,
+ "申": 4509,
+ "电": 4510,
+ "男": 4511,
+ "甸": 4512,
+ "町": 4513,
+ "画": 4514,
+ "甾": 4515,
+ "畀": 4516,
+ "畅": 4517,
+ "界": 4518,
+ "畏": 4519,
+ "畑": 4520,
+ "畔": 4521,
+ "留": 4522,
+ "畜": 4523,
+ "畝": 4524,
+ "畢": 4525,
+ "略": 4526,
+ "畦": 4527,
+ "番": 4528,
+ "畫": 4529,
+ "異": 4530,
+ "畲": 4531,
+ "畳": 4532,
+ "畴": 4533,
+ "當": 4534,
+ "畸": 4535,
+ "畹": 4536,
+ "畿": 4537,
+ "疆": 4538,
+ "疇": 4539,
+ "疊": 4540,
+ "疏": 4541,
+ "疑": 4542,
+ "疔": 4543,
+ "疖": 4544,
+ "疗": 4545,
+ "疙": 4546,
+ "疚": 4547,
+ "疝": 4548,
+ "疟": 4549,
+ "疡": 4550,
+ "疣": 4551,
+ "疤": 4552,
+ "疥": 4553,
+ "疫": 4554,
+ "疮": 4555,
+ "疯": 4556,
+ "疱": 4557,
+ "疲": 4558,
+ "疳": 4559,
+ "疵": 4560,
+ "疸": 4561,
+ "疹": 4562,
+ "疼": 4563,
+ "疽": 4564,
+ "疾": 4565,
+ "痂": 4566,
+ "病": 4567,
+ "症": 4568,
+ "痈": 4569,
+ "痉": 4570,
+ "痊": 4571,
+ "痍": 4572,
+ "痒": 4573,
+ "痔": 4574,
+ "痕": 4575,
+ "痘": 4576,
+ "痙": 4577,
+ "痛": 4578,
+ "痞": 4579,
+ "痠": 4580,
+ "痢": 4581,
+ "痣": 4582,
+ "痤": 4583,
+ "痧": 4584,
+ "痨": 4585,
+ "痪": 4586,
+ "痫": 4587,
+ "痰": 4588,
+ "痱": 4589,
+ "痴": 4590,
+ "痹": 4591,
+ "痺": 4592,
+ "痼": 4593,
+ "痿": 4594,
+ "瘀": 4595,
+ "瘁": 4596,
+ "瘋": 4597,
+ "瘍": 4598,
+ "瘓": 4599,
+ "瘘": 4600,
+ "瘙": 4601,
+ "瘟": 4602,
+ "瘠": 4603,
+ "瘡": 4604,
+ "瘢": 4605,
+ "瘤": 4606,
+ "瘦": 4607,
+ "瘧": 4608,
+ "瘩": 4609,
+ "瘪": 4610,
+ "瘫": 4611,
+ "瘴": 4612,
+ "瘸": 4613,
+ "瘾": 4614,
+ "療": 4615,
+ "癇": 4616,
+ "癌": 4617,
+ "癒": 4618,
+ "癖": 4619,
+ "癜": 4620,
+ "癞": 4621,
+ "癡": 4622,
+ "癢": 4623,
+ "癣": 4624,
+ "癥": 4625,
+ "癫": 4626,
+ "癬": 4627,
+ "癮": 4628,
+ "癱": 4629,
+ "癲": 4630,
+ "癸": 4631,
+ "発": 4632,
+ "登": 4633,
+ "發": 4634,
+ "白": 4635,
+ "百": 4636,
+ "皂": 4637,
+ "的": 4638,
+ "皆": 4639,
+ "皇": 4640,
+ "皈": 4641,
+ "皋": 4642,
+ "皎": 4643,
+ "皑": 4644,
+ "皓": 4645,
+ "皖": 4646,
+ "皙": 4647,
+ "皚": 4648,
+ "皮": 4649,
+ "皰": 4650,
+ "皱": 4651,
+ "皴": 4652,
+ "皺": 4653,
+ "皿": 4654,
+ "盂": 4655,
+ "盃": 4656,
+ "盅": 4657,
+ "盆": 4658,
+ "盈": 4659,
+ "益": 4660,
+ "盎": 4661,
+ "盏": 4662,
+ "盐": 4663,
+ "监": 4664,
+ "盒": 4665,
+ "盔": 4666,
+ "盖": 4667,
+ "盗": 4668,
+ "盘": 4669,
+ "盛": 4670,
+ "盜": 4671,
+ "盞": 4672,
+ "盟": 4673,
+ "盡": 4674,
+ "監": 4675,
+ "盤": 4676,
+ "盥": 4677,
+ "盧": 4678,
+ "盪": 4679,
+ "目": 4680,
+ "盯": 4681,
+ "盱": 4682,
+ "盲": 4683,
+ "直": 4684,
+ "相": 4685,
+ "盹": 4686,
+ "盼": 4687,
+ "盾": 4688,
+ "省": 4689,
+ "眈": 4690,
+ "眉": 4691,
+ "看": 4692,
+ "県": 4693,
+ "眙": 4694,
+ "眞": 4695,
+ "真": 4696,
+ "眠": 4697,
+ "眦": 4698,
+ "眨": 4699,
+ "眩": 4700,
+ "眯": 4701,
+ "眶": 4702,
+ "眷": 4703,
+ "眸": 4704,
+ "眺": 4705,
+ "眼": 4706,
+ "眾": 4707,
+ "着": 4708,
+ "睁": 4709,
+ "睇": 4710,
+ "睏": 4711,
+ "睐": 4712,
+ "睑": 4713,
+ "睛": 4714,
+ "睜": 4715,
+ "睞": 4716,
+ "睡": 4717,
+ "睢": 4718,
+ "督": 4719,
+ "睥": 4720,
+ "睦": 4721,
+ "睨": 4722,
+ "睪": 4723,
+ "睫": 4724,
+ "睬": 4725,
+ "睹": 4726,
+ "睽": 4727,
+ "睾": 4728,
+ "睿": 4729,
+ "瞄": 4730,
+ "瞅": 4731,
+ "瞇": 4732,
+ "瞋": 4733,
+ "瞌": 4734,
+ "瞎": 4735,
+ "瞑": 4736,
+ "瞒": 4737,
+ "瞓": 4738,
+ "瞞": 4739,
+ "瞟": 4740,
+ "瞠": 4741,
+ "瞥": 4742,
+ "瞧": 4743,
+ "瞩": 4744,
+ "瞪": 4745,
+ "瞬": 4746,
+ "瞭": 4747,
+ "瞰": 4748,
+ "瞳": 4749,
+ "瞻": 4750,
+ "瞼": 4751,
+ "瞿": 4752,
+ "矇": 4753,
+ "矍": 4754,
+ "矗": 4755,
+ "矚": 4756,
+ "矛": 4757,
+ "矜": 4758,
+ "矢": 4759,
+ "矣": 4760,
+ "知": 4761,
+ "矩": 4762,
+ "矫": 4763,
+ "短": 4764,
+ "矮": 4765,
+ "矯": 4766,
+ "石": 4767,
+ "矶": 4768,
+ "矽": 4769,
+ "矾": 4770,
+ "矿": 4771,
+ "码": 4772,
+ "砂": 4773,
+ "砌": 4774,
+ "砍": 4775,
+ "砒": 4776,
+ "研": 4777,
+ "砖": 4778,
+ "砗": 4779,
+ "砚": 4780,
+ "砝": 4781,
+ "砣": 4782,
+ "砥": 4783,
+ "砧": 4784,
+ "砭": 4785,
+ "砰": 4786,
+ "砲": 4787,
+ "破": 4788,
+ "砷": 4789,
+ "砸": 4790,
+ "砺": 4791,
+ "砼": 4792,
+ "砾": 4793,
+ "础": 4794,
+ "硅": 4795,
+ "硐": 4796,
+ "硒": 4797,
+ "硕": 4798,
+ "硝": 4799,
+ "硫": 4800,
+ "硬": 4801,
+ "确": 4802,
+ "硯": 4803,
+ "硼": 4804,
+ "碁": 4805,
+ "碇": 4806,
+ "碉": 4807,
+ "碌": 4808,
+ "碍": 4809,
+ "碎": 4810,
+ "碑": 4811,
+ "碓": 4812,
+ "碗": 4813,
+ "碘": 4814,
+ "碚": 4815,
+ "碛": 4816,
+ "碟": 4817,
+ "碣": 4818,
+ "碧": 4819,
+ "碩": 4820,
+ "碰": 4821,
+ "碱": 4822,
+ "碳": 4823,
+ "碴": 4824,
+ "確": 4825,
+ "碼": 4826,
+ "碾": 4827,
+ "磁": 4828,
+ "磅": 4829,
+ "磊": 4830,
+ "磋": 4831,
+ "磐": 4832,
+ "磕": 4833,
+ "磚": 4834,
+ "磡": 4835,
+ "磨": 4836,
+ "磬": 4837,
+ "磯": 4838,
+ "磲": 4839,
+ "磷": 4840,
+ "磺": 4841,
+ "礁": 4842,
+ "礎": 4843,
+ "礙": 4844,
+ "礡": 4845,
+ "礦": 4846,
+ "礪": 4847,
+ "礫": 4848,
+ "礴": 4849,
+ "示": 4850,
+ "礼": 4851,
+ "社": 4852,
+ "祀": 4853,
+ "祁": 4854,
+ "祂": 4855,
+ "祇": 4856,
+ "祈": 4857,
+ "祉": 4858,
+ "祎": 4859,
+ "祐": 4860,
+ "祕": 4861,
+ "祖": 4862,
+ "祗": 4863,
+ "祚": 4864,
+ "祛": 4865,
+ "祜": 4866,
+ "祝": 4867,
+ "神": 4868,
+ "祟": 4869,
+ "祠": 4870,
+ "祢": 4871,
+ "祥": 4872,
+ "票": 4873,
+ "祭": 4874,
+ "祯": 4875,
+ "祷": 4876,
+ "祸": 4877,
+ "祺": 4878,
+ "祿": 4879,
+ "禀": 4880,
+ "禁": 4881,
+ "禄": 4882,
+ "禅": 4883,
+ "禍": 4884,
+ "禎": 4885,
+ "福": 4886,
+ "禛": 4887,
+ "禦": 4888,
+ "禧": 4889,
+ "禪": 4890,
+ "禮": 4891,
+ "禱": 4892,
+ "禹": 4893,
+ "禺": 4894,
+ "离": 4895,
+ "禽": 4896,
+ "禾": 4897,
+ "禿": 4898,
+ "秀": 4899,
+ "私": 4900,
+ "秃": 4901,
+ "秆": 4902,
+ "秉": 4903,
+ "秋": 4904,
+ "种": 4905,
+ "科": 4906,
+ "秒": 4907,
+ "秘": 4908,
+ "租": 4909,
+ "秣": 4910,
+ "秤": 4911,
+ "秦": 4912,
+ "秧": 4913,
+ "秩": 4914,
+ "秭": 4915,
+ "积": 4916,
+ "称": 4917,
+ "秸": 4918,
+ "移": 4919,
+ "秽": 4920,
+ "稀": 4921,
+ "稅": 4922,
+ "程": 4923,
+ "稍": 4924,
+ "税": 4925,
+ "稔": 4926,
+ "稗": 4927,
+ "稚": 4928,
+ "稜": 4929,
+ "稞": 4930,
+ "稟": 4931,
+ "稠": 4932,
+ "稣": 4933,
+ "種": 4934,
+ "稱": 4935,
+ "稲": 4936,
+ "稳": 4937,
+ "稷": 4938,
+ "稹": 4939,
+ "稻": 4940,
+ "稼": 4941,
+ "稽": 4942,
+ "稿": 4943,
+ "穀": 4944,
+ "穂": 4945,
+ "穆": 4946,
+ "穌": 4947,
+ "積": 4948,
+ "穎": 4949,
+ "穗": 4950,
+ "穢": 4951,
+ "穩": 4952,
+ "穫": 4953,
+ "穴": 4954,
+ "究": 4955,
+ "穷": 4956,
+ "穹": 4957,
+ "空": 4958,
+ "穿": 4959,
+ "突": 4960,
+ "窃": 4961,
+ "窄": 4962,
+ "窈": 4963,
+ "窍": 4964,
+ "窑": 4965,
+ "窒": 4966,
+ "窓": 4967,
+ "窕": 4968,
+ "窖": 4969,
+ "窗": 4970,
+ "窘": 4971,
+ "窜": 4972,
+ "窝": 4973,
+ "窟": 4974,
+ "窠": 4975,
+ "窥": 4976,
+ "窦": 4977,
+ "窨": 4978,
+ "窩": 4979,
+ "窪": 4980,
+ "窮": 4981,
+ "窯": 4982,
+ "窺": 4983,
+ "窿": 4984,
+ "竄": 4985,
+ "竅": 4986,
+ "竇": 4987,
+ "竊": 4988,
+ "立": 4989,
+ "竖": 4990,
+ "站": 4991,
+ "竜": 4992,
+ "竞": 4993,
+ "竟": 4994,
+ "章": 4995,
+ "竣": 4996,
+ "童": 4997,
+ "竭": 4998,
+ "端": 4999,
+ "競": 5000,
+ "竹": 5001,
+ "竺": 5002,
+ "竽": 5003,
+ "竿": 5004,
+ "笃": 5005,
+ "笆": 5006,
+ "笈": 5007,
+ "笋": 5008,
+ "笏": 5009,
+ "笑": 5010,
+ "笔": 5011,
+ "笙": 5012,
+ "笛": 5013,
+ "笞": 5014,
+ "笠": 5015,
+ "符": 5016,
+ "笨": 5017,
+ "第": 5018,
+ "笹": 5019,
+ "笺": 5020,
+ "笼": 5021,
+ "筆": 5022,
+ "等": 5023,
+ "筊": 5024,
+ "筋": 5025,
+ "筍": 5026,
+ "筏": 5027,
+ "筐": 5028,
+ "筑": 5029,
+ "筒": 5030,
+ "答": 5031,
+ "策": 5032,
+ "筛": 5033,
+ "筝": 5034,
+ "筠": 5035,
+ "筱": 5036,
+ "筲": 5037,
+ "筵": 5038,
+ "筷": 5039,
+ "筹": 5040,
+ "签": 5041,
+ "简": 5042,
+ "箇": 5043,
+ "箋": 5044,
+ "箍": 5045,
+ "箏": 5046,
+ "箐": 5047,
+ "箔": 5048,
+ "箕": 5049,
+ "算": 5050,
+ "箝": 5051,
+ "管": 5052,
+ "箩": 5053,
+ "箫": 5054,
+ "箭": 5055,
+ "箱": 5056,
+ "箴": 5057,
+ "箸": 5058,
+ "節": 5059,
+ "篁": 5060,
+ "範": 5061,
+ "篆": 5062,
+ "篇": 5063,
+ "築": 5064,
+ "篑": 5065,
+ "篓": 5066,
+ "篙": 5067,
+ "篝": 5068,
+ "篠": 5069,
+ "篡": 5070,
+ "篤": 5071,
+ "篩": 5072,
+ "篪": 5073,
+ "篮": 5074,
+ "篱": 5075,
+ "篷": 5076,
+ "簇": 5077,
+ "簌": 5078,
+ "簍": 5079,
+ "簡": 5080,
+ "簦": 5081,
+ "簧": 5082,
+ "簪": 5083,
+ "簫": 5084,
+ "簷": 5085,
+ "簸": 5086,
+ "簽": 5087,
+ "簾": 5088,
+ "簿": 5089,
+ "籁": 5090,
+ "籃": 5091,
+ "籌": 5092,
+ "籍": 5093,
+ "籐": 5094,
+ "籟": 5095,
+ "籠": 5096,
+ "籤": 5097,
+ "籬": 5098,
+ "籮": 5099,
+ "籲": 5100,
+ "米": 5101,
+ "类": 5102,
+ "籼": 5103,
+ "籽": 5104,
+ "粄": 5105,
+ "粉": 5106,
+ "粑": 5107,
+ "粒": 5108,
+ "粕": 5109,
+ "粗": 5110,
+ "粘": 5111,
+ "粟": 5112,
+ "粤": 5113,
+ "粥": 5114,
+ "粧": 5115,
+ "粪": 5116,
+ "粮": 5117,
+ "粱": 5118,
+ "粲": 5119,
+ "粳": 5120,
+ "粵": 5121,
+ "粹": 5122,
+ "粼": 5123,
+ "粽": 5124,
+ "精": 5125,
+ "粿": 5126,
+ "糅": 5127,
+ "糊": 5128,
+ "糍": 5129,
+ "糕": 5130,
+ "糖": 5131,
+ "糗": 5132,
+ "糙": 5133,
+ "糜": 5134,
+ "糞": 5135,
+ "糟": 5136,
+ "糠": 5137,
+ "糧": 5138,
+ "糬": 5139,
+ "糯": 5140,
+ "糰": 5141,
+ "糸": 5142,
+ "系": 5143,
+ "糾": 5144,
+ "紀": 5145,
+ "紂": 5146,
+ "約": 5147,
+ "紅": 5148,
+ "紉": 5149,
+ "紊": 5150,
+ "紋": 5151,
+ "納": 5152,
+ "紐": 5153,
+ "紓": 5154,
+ "純": 5155,
+ "紗": 5156,
+ "紘": 5157,
+ "紙": 5158,
+ "級": 5159,
+ "紛": 5160,
+ "紜": 5161,
+ "素": 5162,
+ "紡": 5163,
+ "索": 5164,
+ "紧": 5165,
+ "紫": 5166,
+ "紮": 5167,
+ "累": 5168,
+ "細": 5169,
+ "紳": 5170,
+ "紹": 5171,
+ "紺": 5172,
+ "終": 5173,
+ "絃": 5174,
+ "組": 5175,
+ "絆": 5176,
+ "経": 5177,
+ "結": 5178,
+ "絕": 5179,
+ "絞": 5180,
+ "絡": 5181,
+ "絢": 5182,
+ "給": 5183,
+ "絨": 5184,
+ "絮": 5185,
+ "統": 5186,
+ "絲": 5187,
+ "絳": 5188,
+ "絵": 5189,
+ "絶": 5190,
+ "絹": 5191,
+ "綁": 5192,
+ "綏": 5193,
+ "綑": 5194,
+ "經": 5195,
+ "継": 5196,
+ "続": 5197,
+ "綜": 5198,
+ "綠": 5199,
+ "綢": 5200,
+ "綦": 5201,
+ "綫": 5202,
+ "綬": 5203,
+ "維": 5204,
+ "綱": 5205,
+ "網": 5206,
+ "綴": 5207,
+ "綵": 5208,
+ "綸": 5209,
+ "綺": 5210,
+ "綻": 5211,
+ "綽": 5212,
+ "綾": 5213,
+ "綿": 5214,
+ "緊": 5215,
+ "緋": 5216,
+ "総": 5217,
+ "緑": 5218,
+ "緒": 5219,
+ "緘": 5220,
+ "線": 5221,
+ "緝": 5222,
+ "緞": 5223,
+ "締": 5224,
+ "緣": 5225,
+ "編": 5226,
+ "緩": 5227,
+ "緬": 5228,
+ "緯": 5229,
+ "練": 5230,
+ "緹": 5231,
+ "緻": 5232,
+ "縁": 5233,
+ "縄": 5234,
+ "縈": 5235,
+ "縛": 5236,
+ "縝": 5237,
+ "縣": 5238,
+ "縫": 5239,
+ "縮": 5240,
+ "縱": 5241,
+ "縴": 5242,
+ "縷": 5243,
+ "總": 5244,
+ "績": 5245,
+ "繁": 5246,
+ "繃": 5247,
+ "繆": 5248,
+ "繇": 5249,
+ "繋": 5250,
+ "織": 5251,
+ "繕": 5252,
+ "繚": 5253,
+ "繞": 5254,
+ "繡": 5255,
+ "繩": 5256,
+ "繪": 5257,
+ "繫": 5258,
+ "繭": 5259,
+ "繳": 5260,
+ "繹": 5261,
+ "繼": 5262,
+ "繽": 5263,
+ "纂": 5264,
+ "續": 5265,
+ "纍": 5266,
+ "纏": 5267,
+ "纓": 5268,
+ "纔": 5269,
+ "纖": 5270,
+ "纜": 5271,
+ "纠": 5272,
+ "红": 5273,
+ "纣": 5274,
+ "纤": 5275,
+ "约": 5276,
+ "级": 5277,
+ "纨": 5278,
+ "纪": 5279,
+ "纫": 5280,
+ "纬": 5281,
+ "纭": 5282,
+ "纯": 5283,
+ "纰": 5284,
+ "纱": 5285,
+ "纲": 5286,
+ "纳": 5287,
+ "纵": 5288,
+ "纶": 5289,
+ "纷": 5290,
+ "纸": 5291,
+ "纹": 5292,
+ "纺": 5293,
+ "纽": 5294,
+ "纾": 5295,
+ "线": 5296,
+ "绀": 5297,
+ "练": 5298,
+ "组": 5299,
+ "绅": 5300,
+ "细": 5301,
+ "织": 5302,
+ "终": 5303,
+ "绊": 5304,
+ "绍": 5305,
+ "绎": 5306,
+ "经": 5307,
+ "绑": 5308,
+ "绒": 5309,
+ "结": 5310,
+ "绔": 5311,
+ "绕": 5312,
+ "绘": 5313,
+ "给": 5314,
+ "绚": 5315,
+ "绛": 5316,
+ "络": 5317,
+ "绝": 5318,
+ "绞": 5319,
+ "统": 5320,
+ "绡": 5321,
+ "绢": 5322,
+ "绣": 5323,
+ "绥": 5324,
+ "绦": 5325,
+ "继": 5326,
+ "绩": 5327,
+ "绪": 5328,
+ "绫": 5329,
+ "续": 5330,
+ "绮": 5331,
+ "绯": 5332,
+ "绰": 5333,
+ "绳": 5334,
+ "维": 5335,
+ "绵": 5336,
+ "绶": 5337,
+ "绷": 5338,
+ "绸": 5339,
+ "绻": 5340,
+ "综": 5341,
+ "绽": 5342,
+ "绾": 5343,
+ "绿": 5344,
+ "缀": 5345,
+ "缄": 5346,
+ "缅": 5347,
+ "缆": 5348,
+ "缇": 5349,
+ "缈": 5350,
+ "缉": 5351,
+ "缎": 5352,
+ "缓": 5353,
+ "缔": 5354,
+ "缕": 5355,
+ "编": 5356,
+ "缘": 5357,
+ "缙": 5358,
+ "缚": 5359,
+ "缜": 5360,
+ "缝": 5361,
+ "缠": 5362,
+ "缢": 5363,
+ "缤": 5364,
+ "缥": 5365,
+ "缨": 5366,
+ "缩": 5367,
+ "缪": 5368,
+ "缭": 5369,
+ "缮": 5370,
+ "缰": 5371,
+ "缱": 5372,
+ "缴": 5373,
+ "缸": 5374,
+ "缺": 5375,
+ "缽": 5376,
+ "罂": 5377,
+ "罄": 5378,
+ "罌": 5379,
+ "罐": 5380,
+ "网": 5381,
+ "罔": 5382,
+ "罕": 5383,
+ "罗": 5384,
+ "罚": 5385,
+ "罡": 5386,
+ "罢": 5387,
+ "罩": 5388,
+ "罪": 5389,
+ "置": 5390,
+ "罰": 5391,
+ "署": 5392,
+ "罵": 5393,
+ "罷": 5394,
+ "罹": 5395,
+ "羁": 5396,
+ "羅": 5397,
+ "羈": 5398,
+ "羊": 5399,
+ "羌": 5400,
+ "美": 5401,
+ "羔": 5402,
+ "羚": 5403,
+ "羞": 5404,
+ "羟": 5405,
+ "羡": 5406,
+ "羣": 5407,
+ "群": 5408,
+ "羥": 5409,
+ "羧": 5410,
+ "羨": 5411,
+ "義": 5412,
+ "羯": 5413,
+ "羲": 5414,
+ "羸": 5415,
+ "羹": 5416,
+ "羽": 5417,
+ "羿": 5418,
+ "翁": 5419,
+ "翅": 5420,
+ "翊": 5421,
+ "翌": 5422,
+ "翎": 5423,
+ "習": 5424,
+ "翔": 5425,
+ "翘": 5426,
+ "翟": 5427,
+ "翠": 5428,
+ "翡": 5429,
+ "翦": 5430,
+ "翩": 5431,
+ "翰": 5432,
+ "翱": 5433,
+ "翳": 5434,
+ "翹": 5435,
+ "翻": 5436,
+ "翼": 5437,
+ "耀": 5438,
+ "老": 5439,
+ "考": 5440,
+ "耄": 5441,
+ "者": 5442,
+ "耆": 5443,
+ "耋": 5444,
+ "而": 5445,
+ "耍": 5446,
+ "耐": 5447,
+ "耒": 5448,
+ "耕": 5449,
+ "耗": 5450,
+ "耘": 5451,
+ "耙": 5452,
+ "耦": 5453,
+ "耨": 5454,
+ "耳": 5455,
+ "耶": 5456,
+ "耷": 5457,
+ "耸": 5458,
+ "耻": 5459,
+ "耽": 5460,
+ "耿": 5461,
+ "聂": 5462,
+ "聆": 5463,
+ "聊": 5464,
+ "聋": 5465,
+ "职": 5466,
+ "聒": 5467,
+ "联": 5468,
+ "聖": 5469,
+ "聘": 5470,
+ "聚": 5471,
+ "聞": 5472,
+ "聪": 5473,
+ "聯": 5474,
+ "聰": 5475,
+ "聲": 5476,
+ "聳": 5477,
+ "聴": 5478,
+ "聶": 5479,
+ "職": 5480,
+ "聽": 5481,
+ "聾": 5482,
+ "聿": 5483,
+ "肃": 5484,
+ "肄": 5485,
+ "肅": 5486,
+ "肆": 5487,
+ "肇": 5488,
+ "肉": 5489,
+ "肋": 5490,
+ "肌": 5491,
+ "肏": 5492,
+ "肓": 5493,
+ "肖": 5494,
+ "肘": 5495,
+ "肚": 5496,
+ "肛": 5497,
+ "肝": 5498,
+ "肠": 5499,
+ "股": 5500,
+ "肢": 5501,
+ "肤": 5502,
+ "肥": 5503,
+ "肩": 5504,
+ "肪": 5505,
+ "肮": 5506,
+ "肯": 5507,
+ "肱": 5508,
+ "育": 5509,
+ "肴": 5510,
+ "肺": 5511,
+ "肽": 5512,
+ "肾": 5513,
+ "肿": 5514,
+ "胀": 5515,
+ "胁": 5516,
+ "胃": 5517,
+ "胄": 5518,
+ "胆": 5519,
+ "背": 5520,
+ "胍": 5521,
+ "胎": 5522,
+ "胖": 5523,
+ "胚": 5524,
+ "胛": 5525,
+ "胜": 5526,
+ "胝": 5527,
+ "胞": 5528,
+ "胡": 5529,
+ "胤": 5530,
+ "胥": 5531,
+ "胧": 5532,
+ "胫": 5533,
+ "胭": 5534,
+ "胯": 5535,
+ "胰": 5536,
+ "胱": 5537,
+ "胳": 5538,
+ "胴": 5539,
+ "胶": 5540,
+ "胸": 5541,
+ "胺": 5542,
+ "能": 5543,
+ "脂": 5544,
+ "脅": 5545,
+ "脆": 5546,
+ "脇": 5547,
+ "脈": 5548,
+ "脉": 5549,
+ "脊": 5550,
+ "脍": 5551,
+ "脏": 5552,
+ "脐": 5553,
+ "脑": 5554,
+ "脓": 5555,
+ "脖": 5556,
+ "脘": 5557,
+ "脚": 5558,
+ "脛": 5559,
+ "脣": 5560,
+ "脩": 5561,
+ "脫": 5562,
+ "脯": 5563,
+ "脱": 5564,
+ "脲": 5565,
+ "脳": 5566,
+ "脸": 5567,
+ "脹": 5568,
+ "脾": 5569,
+ "腆": 5570,
+ "腈": 5571,
+ "腊": 5572,
+ "腋": 5573,
+ "腌": 5574,
+ "腎": 5575,
+ "腐": 5576,
+ "腑": 5577,
+ "腓": 5578,
+ "腔": 5579,
+ "腕": 5580,
+ "腥": 5581,
+ "腦": 5582,
+ "腩": 5583,
+ "腫": 5584,
+ "腭": 5585,
+ "腮": 5586,
+ "腰": 5587,
+ "腱": 5588,
+ "腳": 5589,
+ "腴": 5590,
+ "腸": 5591,
+ "腹": 5592,
+ "腺": 5593,
+ "腻": 5594,
+ "腼": 5595,
+ "腾": 5596,
+ "腿": 5597,
+ "膀": 5598,
+ "膈": 5599,
+ "膊": 5600,
+ "膏": 5601,
+ "膑": 5602,
+ "膘": 5603,
+ "膚": 5604,
+ "膛": 5605,
+ "膜": 5606,
+ "膝": 5607,
+ "膠": 5608,
+ "膦": 5609,
+ "膨": 5610,
+ "膩": 5611,
+ "膳": 5612,
+ "膺": 5613,
+ "膻": 5614,
+ "膽": 5615,
+ "膾": 5616,
+ "膿": 5617,
+ "臀": 5618,
+ "臂": 5619,
+ "臃": 5620,
+ "臆": 5621,
+ "臉": 5622,
+ "臊": 5623,
+ "臍": 5624,
+ "臓": 5625,
+ "臘": 5626,
+ "臟": 5627,
+ "臣": 5628,
+ "臥": 5629,
+ "臧": 5630,
+ "臨": 5631,
+ "自": 5632,
+ "臬": 5633,
+ "臭": 5634,
+ "至": 5635,
+ "致": 5636,
+ "臺": 5637,
+ "臻": 5638,
+ "臼": 5639,
+ "臾": 5640,
+ "舀": 5641,
+ "舂": 5642,
+ "舅": 5643,
+ "舆": 5644,
+ "與": 5645,
+ "興": 5646,
+ "舉": 5647,
+ "舊": 5648,
+ "舌": 5649,
+ "舍": 5650,
+ "舎": 5651,
+ "舐": 5652,
+ "舒": 5653,
+ "舔": 5654,
+ "舖": 5655,
+ "舗": 5656,
+ "舛": 5657,
+ "舜": 5658,
+ "舞": 5659,
+ "舟": 5660,
+ "航": 5661,
+ "舫": 5662,
+ "般": 5663,
+ "舰": 5664,
+ "舱": 5665,
+ "舵": 5666,
+ "舶": 5667,
+ "舷": 5668,
+ "舸": 5669,
+ "船": 5670,
+ "舺": 5671,
+ "舾": 5672,
+ "艇": 5673,
+ "艋": 5674,
+ "艘": 5675,
+ "艙": 5676,
+ "艦": 5677,
+ "艮": 5678,
+ "良": 5679,
+ "艰": 5680,
+ "艱": 5681,
+ "色": 5682,
+ "艳": 5683,
+ "艷": 5684,
+ "艹": 5685,
+ "艺": 5686,
+ "艾": 5687,
+ "节": 5688,
+ "芃": 5689,
+ "芈": 5690,
+ "芊": 5691,
+ "芋": 5692,
+ "芍": 5693,
+ "芎": 5694,
+ "芒": 5695,
+ "芙": 5696,
+ "芜": 5697,
+ "芝": 5698,
+ "芡": 5699,
+ "芥": 5700,
+ "芦": 5701,
+ "芩": 5702,
+ "芪": 5703,
+ "芫": 5704,
+ "芬": 5705,
+ "芭": 5706,
+ "芮": 5707,
+ "芯": 5708,
+ "花": 5709,
+ "芳": 5710,
+ "芷": 5711,
+ "芸": 5712,
+ "芹": 5713,
+ "芻": 5714,
+ "芽": 5715,
+ "芾": 5716,
+ "苁": 5717,
+ "苄": 5718,
+ "苇": 5719,
+ "苋": 5720,
+ "苍": 5721,
+ "苏": 5722,
+ "苑": 5723,
+ "苒": 5724,
+ "苓": 5725,
+ "苔": 5726,
+ "苕": 5727,
+ "苗": 5728,
+ "苛": 5729,
+ "苜": 5730,
+ "苞": 5731,
+ "苟": 5732,
+ "苡": 5733,
+ "苣": 5734,
+ "若": 5735,
+ "苦": 5736,
+ "苫": 5737,
+ "苯": 5738,
+ "英": 5739,
+ "苷": 5740,
+ "苹": 5741,
+ "苻": 5742,
+ "茁": 5743,
+ "茂": 5744,
+ "范": 5745,
+ "茄": 5746,
+ "茅": 5747,
+ "茉": 5748,
+ "茎": 5749,
+ "茏": 5750,
+ "茗": 5751,
+ "茜": 5752,
+ "茧": 5753,
+ "茨": 5754,
+ "茫": 5755,
+ "茬": 5756,
+ "茭": 5757,
+ "茯": 5758,
+ "茱": 5759,
+ "茲": 5760,
+ "茴": 5761,
+ "茵": 5762,
+ "茶": 5763,
+ "茸": 5764,
+ "茹": 5765,
+ "茼": 5766,
+ "荀": 5767,
+ "荃": 5768,
+ "荆": 5769,
+ "草": 5770,
+ "荊": 5771,
+ "荏": 5772,
+ "荐": 5773,
+ "荒": 5774,
+ "荔": 5775,
+ "荖": 5776,
+ "荘": 5777,
+ "荚": 5778,
+ "荞": 5779,
+ "荟": 5780,
+ "荠": 5781,
+ "荡": 5782,
+ "荣": 5783,
+ "荤": 5784,
+ "荥": 5785,
+ "荧": 5786,
+ "荨": 5787,
+ "荪": 5788,
+ "荫": 5789,
+ "药": 5790,
+ "荳": 5791,
+ "荷": 5792,
+ "荸": 5793,
+ "荻": 5794,
+ "荼": 5795,
+ "荽": 5796,
+ "莅": 5797,
+ "莆": 5798,
+ "莉": 5799,
+ "莊": 5800,
+ "莎": 5801,
+ "莒": 5802,
+ "莓": 5803,
+ "莖": 5804,
+ "莘": 5805,
+ "莞": 5806,
+ "莠": 5807,
+ "莢": 5808,
+ "莧": 5809,
+ "莪": 5810,
+ "莫": 5811,
+ "莱": 5812,
+ "莲": 5813,
+ "莴": 5814,
+ "获": 5815,
+ "莹": 5816,
+ "莺": 5817,
+ "莽": 5818,
+ "莿": 5819,
+ "菀": 5820,
+ "菁": 5821,
+ "菅": 5822,
+ "菇": 5823,
+ "菈": 5824,
+ "菊": 5825,
+ "菌": 5826,
+ "菏": 5827,
+ "菓": 5828,
+ "菖": 5829,
+ "菘": 5830,
+ "菜": 5831,
+ "菟": 5832,
+ "菠": 5833,
+ "菡": 5834,
+ "菩": 5835,
+ "華": 5836,
+ "菱": 5837,
+ "菲": 5838,
+ "菸": 5839,
+ "菽": 5840,
+ "萁": 5841,
+ "萃": 5842,
+ "萄": 5843,
+ "萊": 5844,
+ "萋": 5845,
+ "萌": 5846,
+ "萍": 5847,
+ "萎": 5848,
+ "萘": 5849,
+ "萝": 5850,
+ "萤": 5851,
+ "营": 5852,
+ "萦": 5853,
+ "萧": 5854,
+ "萨": 5855,
+ "萩": 5856,
+ "萬": 5857,
+ "萱": 5858,
+ "萵": 5859,
+ "萸": 5860,
+ "萼": 5861,
+ "落": 5862,
+ "葆": 5863,
+ "葉": 5864,
+ "著": 5865,
+ "葚": 5866,
+ "葛": 5867,
+ "葡": 5868,
+ "董": 5869,
+ "葦": 5870,
+ "葩": 5871,
+ "葫": 5872,
+ "葬": 5873,
+ "葭": 5874,
+ "葯": 5875,
+ "葱": 5876,
+ "葳": 5877,
+ "葵": 5878,
+ "葷": 5879,
+ "葺": 5880,
+ "蒂": 5881,
+ "蒋": 5882,
+ "蒐": 5883,
+ "蒔": 5884,
+ "蒙": 5885,
+ "蒜": 5886,
+ "蒞": 5887,
+ "蒟": 5888,
+ "蒡": 5889,
+ "蒨": 5890,
+ "蒲": 5891,
+ "蒸": 5892,
+ "蒹": 5893,
+ "蒻": 5894,
+ "蒼": 5895,
+ "蒿": 5896,
+ "蓁": 5897,
+ "蓄": 5898,
+ "蓆": 5899,
+ "蓉": 5900,
+ "蓋": 5901,
+ "蓑": 5902,
+ "蓓": 5903,
+ "蓖": 5904,
+ "蓝": 5905,
+ "蓟": 5906,
+ "蓦": 5907,
+ "蓬": 5908,
+ "蓮": 5909,
+ "蓼": 5910,
+ "蓿": 5911,
+ "蔑": 5912,
+ "蔓": 5913,
+ "蔔": 5914,
+ "蔗": 5915,
+ "蔘": 5916,
+ "蔚": 5917,
+ "蔡": 5918,
+ "蔣": 5919,
+ "蔥": 5920,
+ "蔫": 5921,
+ "蔬": 5922,
+ "蔭": 5923,
+ "蔵": 5924,
+ "蔷": 5925,
+ "蔺": 5926,
+ "蔻": 5927,
+ "蔼": 5928,
+ "蔽": 5929,
+ "蕁": 5930,
+ "蕃": 5931,
+ "蕈": 5932,
+ "蕉": 5933,
+ "蕊": 5934,
+ "蕎": 5935,
+ "蕙": 5936,
+ "蕤": 5937,
+ "蕨": 5938,
+ "蕩": 5939,
+ "蕪": 5940,
+ "蕭": 5941,
+ "蕲": 5942,
+ "蕴": 5943,
+ "蕻": 5944,
+ "蕾": 5945,
+ "薄": 5946,
+ "薅": 5947,
+ "薇": 5948,
+ "薈": 5949,
+ "薊": 5950,
+ "薏": 5951,
+ "薑": 5952,
+ "薔": 5953,
+ "薙": 5954,
+ "薛": 5955,
+ "薦": 5956,
+ "薨": 5957,
+ "薩": 5958,
+ "薪": 5959,
+ "薬": 5960,
+ "薯": 5961,
+ "薰": 5962,
+ "薹": 5963,
+ "藉": 5964,
+ "藍": 5965,
+ "藏": 5966,
+ "藐": 5967,
+ "藓": 5968,
+ "藕": 5969,
+ "藜": 5970,
+ "藝": 5971,
+ "藤": 5972,
+ "藥": 5973,
+ "藩": 5974,
+ "藹": 5975,
+ "藻": 5976,
+ "藿": 5977,
+ "蘆": 5978,
+ "蘇": 5979,
+ "蘊": 5980,
+ "蘋": 5981,
+ "蘑": 5982,
+ "蘚": 5983,
+ "蘭": 5984,
+ "蘸": 5985,
+ "蘼": 5986,
+ "蘿": 5987,
+ "虎": 5988,
+ "虏": 5989,
+ "虐": 5990,
+ "虑": 5991,
+ "虔": 5992,
+ "處": 5993,
+ "虚": 5994,
+ "虛": 5995,
+ "虜": 5996,
+ "虞": 5997,
+ "號": 5998,
+ "虢": 5999,
+ "虧": 6000,
+ "虫": 6001,
+ "虬": 6002,
+ "虱": 6003,
+ "虹": 6004,
+ "虻": 6005,
+ "虽": 6006,
+ "虾": 6007,
+ "蚀": 6008,
+ "蚁": 6009,
+ "蚂": 6010,
+ "蚊": 6011,
+ "蚌": 6012,
+ "蚓": 6013,
+ "蚕": 6014,
+ "蚜": 6015,
+ "蚝": 6016,
+ "蚣": 6017,
+ "蚤": 6018,
+ "蚩": 6019,
+ "蚪": 6020,
+ "蚯": 6021,
+ "蚱": 6022,
+ "蚵": 6023,
+ "蛀": 6024,
+ "蛆": 6025,
+ "蛇": 6026,
+ "蛊": 6027,
+ "蛋": 6028,
+ "蛎": 6029,
+ "蛐": 6030,
+ "蛔": 6031,
+ "蛙": 6032,
+ "蛛": 6033,
+ "蛟": 6034,
+ "蛤": 6035,
+ "蛭": 6036,
+ "蛮": 6037,
+ "蛰": 6038,
+ "蛳": 6039,
+ "蛹": 6040,
+ "蛻": 6041,
+ "蛾": 6042,
+ "蜀": 6043,
+ "蜂": 6044,
+ "蜃": 6045,
+ "蜆": 6046,
+ "蜇": 6047,
+ "蜈": 6048,
+ "蜊": 6049,
+ "蜍": 6050,
+ "蜒": 6051,
+ "蜓": 6052,
+ "蜕": 6053,
+ "蜗": 6054,
+ "蜘": 6055,
+ "蜚": 6056,
+ "蜜": 6057,
+ "蜡": 6058,
+ "蜢": 6059,
+ "蜥": 6060,
+ "蜱": 6061,
+ "蜴": 6062,
+ "蜷": 6063,
+ "蜻": 6064,
+ "蜿": 6065,
+ "蝇": 6066,
+ "蝈": 6067,
+ "蝉": 6068,
+ "蝌": 6069,
+ "蝎": 6070,
+ "蝕": 6071,
+ "蝗": 6072,
+ "蝙": 6073,
+ "蝟": 6074,
+ "蝠": 6075,
+ "蝦": 6076,
+ "蝨": 6077,
+ "蝴": 6078,
+ "蝶": 6079,
+ "蝸": 6080,
+ "蝼": 6081,
+ "螂": 6082,
+ "螃": 6083,
+ "融": 6084,
+ "螞": 6085,
+ "螢": 6086,
+ "螨": 6087,
+ "螯": 6088,
+ "螳": 6089,
+ "螺": 6090,
+ "蟀": 6091,
+ "蟄": 6092,
+ "蟆": 6093,
+ "蟋": 6094,
+ "蟎": 6095,
+ "蟑": 6096,
+ "蟒": 6097,
+ "蟠": 6098,
+ "蟬": 6099,
+ "蟲": 6100,
+ "蟹": 6101,
+ "蟻": 6102,
+ "蟾": 6103,
+ "蠅": 6104,
+ "蠍": 6105,
+ "蠔": 6106,
+ "蠕": 6107,
+ "蠛": 6108,
+ "蠟": 6109,
+ "蠡": 6110,
+ "蠢": 6111,
+ "蠣": 6112,
+ "蠱": 6113,
+ "蠶": 6114,
+ "蠹": 6115,
+ "蠻": 6116,
+ "血": 6117,
+ "衄": 6118,
+ "衅": 6119,
+ "衆": 6120,
+ "行": 6121,
+ "衍": 6122,
+ "術": 6123,
+ "衔": 6124,
+ "街": 6125,
+ "衙": 6126,
+ "衛": 6127,
+ "衝": 6128,
+ "衞": 6129,
+ "衡": 6130,
+ "衢": 6131,
+ "衣": 6132,
+ "补": 6133,
+ "表": 6134,
+ "衩": 6135,
+ "衫": 6136,
+ "衬": 6137,
+ "衮": 6138,
+ "衰": 6139,
+ "衲": 6140,
+ "衷": 6141,
+ "衹": 6142,
+ "衾": 6143,
+ "衿": 6144,
+ "袁": 6145,
+ "袂": 6146,
+ "袄": 6147,
+ "袅": 6148,
+ "袈": 6149,
+ "袋": 6150,
+ "袍": 6151,
+ "袒": 6152,
+ "袖": 6153,
+ "袜": 6154,
+ "袞": 6155,
+ "袤": 6156,
+ "袪": 6157,
+ "被": 6158,
+ "袭": 6159,
+ "袱": 6160,
+ "裁": 6161,
+ "裂": 6162,
+ "装": 6163,
+ "裆": 6164,
+ "裊": 6165,
+ "裏": 6166,
+ "裔": 6167,
+ "裕": 6168,
+ "裘": 6169,
+ "裙": 6170,
+ "補": 6171,
+ "裝": 6172,
+ "裟": 6173,
+ "裡": 6174,
+ "裤": 6175,
+ "裨": 6176,
+ "裱": 6177,
+ "裳": 6178,
+ "裴": 6179,
+ "裸": 6180,
+ "裹": 6181,
+ "製": 6182,
+ "裾": 6183,
+ "褂": 6184,
+ "複": 6185,
+ "褐": 6186,
+ "褒": 6187,
+ "褓": 6188,
+ "褔": 6189,
+ "褚": 6190,
+ "褥": 6191,
+ "褪": 6192,
+ "褫": 6193,
+ "褲": 6194,
+ "褶": 6195,
+ "褻": 6196,
+ "襁": 6197,
+ "襄": 6198,
+ "襟": 6199,
+ "襠": 6200,
+ "襪": 6201,
+ "襬": 6202,
+ "襯": 6203,
+ "襲": 6204,
+ "西": 6205,
+ "要": 6206,
+ "覃": 6207,
+ "覆": 6208,
+ "覇": 6209,
+ "見": 6210,
+ "規": 6211,
+ "覓": 6212,
+ "視": 6213,
+ "覚": 6214,
+ "覦": 6215,
+ "覧": 6216,
+ "親": 6217,
+ "覬": 6218,
+ "観": 6219,
+ "覷": 6220,
+ "覺": 6221,
+ "覽": 6222,
+ "觀": 6223,
+ "见": 6224,
+ "观": 6225,
+ "规": 6226,
+ "觅": 6227,
+ "视": 6228,
+ "览": 6229,
+ "觉": 6230,
+ "觊": 6231,
+ "觎": 6232,
+ "觐": 6233,
+ "觑": 6234,
+ "角": 6235,
+ "觞": 6236,
+ "解": 6237,
+ "觥": 6238,
+ "触": 6239,
+ "觸": 6240,
+ "言": 6241,
+ "訂": 6242,
+ "計": 6243,
+ "訊": 6244,
+ "討": 6245,
+ "訓": 6246,
+ "訕": 6247,
+ "訖": 6248,
+ "託": 6249,
+ "記": 6250,
+ "訛": 6251,
+ "訝": 6252,
+ "訟": 6253,
+ "訣": 6254,
+ "訥": 6255,
+ "訪": 6256,
+ "設": 6257,
+ "許": 6258,
+ "訳": 6259,
+ "訴": 6260,
+ "訶": 6261,
+ "診": 6262,
+ "註": 6263,
+ "証": 6264,
+ "詆": 6265,
+ "詐": 6266,
+ "詔": 6267,
+ "評": 6268,
+ "詛": 6269,
+ "詞": 6270,
+ "詠": 6271,
+ "詡": 6272,
+ "詢": 6273,
+ "詣": 6274,
+ "試": 6275,
+ "詩": 6276,
+ "詫": 6277,
+ "詬": 6278,
+ "詭": 6279,
+ "詮": 6280,
+ "詰": 6281,
+ "話": 6282,
+ "該": 6283,
+ "詳": 6284,
+ "詹": 6285,
+ "詼": 6286,
+ "誅": 6287,
+ "誇": 6288,
+ "誉": 6289,
+ "誌": 6290,
+ "認": 6291,
+ "誓": 6292,
+ "誕": 6293,
+ "誘": 6294,
+ "語": 6295,
+ "誠": 6296,
+ "誡": 6297,
+ "誣": 6298,
+ "誤": 6299,
+ "誥": 6300,
+ "誦": 6301,
+ "誨": 6302,
+ "說": 6303,
+ "説": 6304,
+ "読": 6305,
+ "誰": 6306,
+ "課": 6307,
+ "誹": 6308,
+ "誼": 6309,
+ "調": 6310,
+ "諄": 6311,
+ "談": 6312,
+ "請": 6313,
+ "諏": 6314,
+ "諒": 6315,
+ "論": 6316,
+ "諗": 6317,
+ "諜": 6318,
+ "諡": 6319,
+ "諦": 6320,
+ "諧": 6321,
+ "諫": 6322,
+ "諭": 6323,
+ "諮": 6324,
+ "諱": 6325,
+ "諳": 6326,
+ "諷": 6327,
+ "諸": 6328,
+ "諺": 6329,
+ "諾": 6330,
+ "謀": 6331,
+ "謁": 6332,
+ "謂": 6333,
+ "謄": 6334,
+ "謊": 6335,
+ "謎": 6336,
+ "謐": 6337,
+ "謔": 6338,
+ "謗": 6339,
+ "謙": 6340,
+ "講": 6341,
+ "謝": 6342,
+ "謠": 6343,
+ "謨": 6344,
+ "謬": 6345,
+ "謹": 6346,
+ "謾": 6347,
+ "譁": 6348,
+ "證": 6349,
+ "譎": 6350,
+ "譏": 6351,
+ "識": 6352,
+ "譙": 6353,
+ "譚": 6354,
+ "譜": 6355,
+ "警": 6356,
+ "譬": 6357,
+ "譯": 6358,
+ "議": 6359,
+ "譲": 6360,
+ "譴": 6361,
+ "護": 6362,
+ "譽": 6363,
+ "讀": 6364,
+ "變": 6365,
+ "讓": 6366,
+ "讚": 6367,
+ "讞": 6368,
+ "计": 6369,
+ "订": 6370,
+ "认": 6371,
+ "讥": 6372,
+ "讧": 6373,
+ "讨": 6374,
+ "让": 6375,
+ "讪": 6376,
+ "讫": 6377,
+ "训": 6378,
+ "议": 6379,
+ "讯": 6380,
+ "记": 6381,
+ "讲": 6382,
+ "讳": 6383,
+ "讴": 6384,
+ "讶": 6385,
+ "讷": 6386,
+ "许": 6387,
+ "讹": 6388,
+ "论": 6389,
+ "讼": 6390,
+ "讽": 6391,
+ "设": 6392,
+ "访": 6393,
+ "诀": 6394,
+ "证": 6395,
+ "诃": 6396,
+ "评": 6397,
+ "诅": 6398,
+ "识": 6399,
+ "诈": 6400,
+ "诉": 6401,
+ "诊": 6402,
+ "诋": 6403,
+ "词": 6404,
+ "诏": 6405,
+ "译": 6406,
+ "试": 6407,
+ "诗": 6408,
+ "诘": 6409,
+ "诙": 6410,
+ "诚": 6411,
+ "诛": 6412,
+ "话": 6413,
+ "诞": 6414,
+ "诟": 6415,
+ "诠": 6416,
+ "诡": 6417,
+ "询": 6418,
+ "诣": 6419,
+ "诤": 6420,
+ "该": 6421,
+ "详": 6422,
+ "诧": 6423,
+ "诩": 6424,
+ "诫": 6425,
+ "诬": 6426,
+ "语": 6427,
+ "误": 6428,
+ "诰": 6429,
+ "诱": 6430,
+ "诲": 6431,
+ "说": 6432,
+ "诵": 6433,
+ "诶": 6434,
+ "请": 6435,
+ "诸": 6436,
+ "诺": 6437,
+ "读": 6438,
+ "诽": 6439,
+ "课": 6440,
+ "诿": 6441,
+ "谀": 6442,
+ "谁": 6443,
+ "调": 6444,
+ "谄": 6445,
+ "谅": 6446,
+ "谆": 6447,
+ "谈": 6448,
+ "谊": 6449,
+ "谋": 6450,
+ "谌": 6451,
+ "谍": 6452,
+ "谎": 6453,
+ "谏": 6454,
+ "谐": 6455,
+ "谑": 6456,
+ "谒": 6457,
+ "谓": 6458,
+ "谔": 6459,
+ "谕": 6460,
+ "谗": 6461,
+ "谘": 6462,
+ "谙": 6463,
+ "谚": 6464,
+ "谛": 6465,
+ "谜": 6466,
+ "谟": 6467,
+ "谢": 6468,
+ "谣": 6469,
+ "谤": 6470,
+ "谥": 6471,
+ "谦": 6472,
+ "谧": 6473,
+ "谨": 6474,
+ "谩": 6475,
+ "谪": 6476,
+ "谬": 6477,
+ "谭": 6478,
+ "谯": 6479,
+ "谱": 6480,
+ "谲": 6481,
+ "谴": 6482,
+ "谶": 6483,
+ "谷": 6484,
+ "豁": 6485,
+ "豆": 6486,
+ "豇": 6487,
+ "豈": 6488,
+ "豉": 6489,
+ "豊": 6490,
+ "豌": 6491,
+ "豎": 6492,
+ "豐": 6493,
+ "豔": 6494,
+ "豚": 6495,
+ "象": 6496,
+ "豢": 6497,
+ "豪": 6498,
+ "豫": 6499,
+ "豬": 6500,
+ "豹": 6501,
+ "豺": 6502,
+ "貂": 6503,
+ "貅": 6504,
+ "貌": 6505,
+ "貓": 6506,
+ "貔": 6507,
+ "貘": 6508,
+ "貝": 6509,
+ "貞": 6510,
+ "負": 6511,
+ "財": 6512,
+ "貢": 6513,
+ "貧": 6514,
+ "貨": 6515,
+ "販": 6516,
+ "貪": 6517,
+ "貫": 6518,
+ "責": 6519,
+ "貯": 6520,
+ "貰": 6521,
+ "貳": 6522,
+ "貴": 6523,
+ "貶": 6524,
+ "買": 6525,
+ "貸": 6526,
+ "費": 6527,
+ "貼": 6528,
+ "貽": 6529,
+ "貿": 6530,
+ "賀": 6531,
+ "賁": 6532,
+ "賂": 6533,
+ "賃": 6534,
+ "賄": 6535,
+ "資": 6536,
+ "賈": 6537,
+ "賊": 6538,
+ "賑": 6539,
+ "賓": 6540,
+ "賜": 6541,
+ "賞": 6542,
+ "賠": 6543,
+ "賡": 6544,
+ "賢": 6545,
+ "賣": 6546,
+ "賤": 6547,
+ "賦": 6548,
+ "質": 6549,
+ "賬": 6550,
+ "賭": 6551,
+ "賴": 6552,
+ "賺": 6553,
+ "購": 6554,
+ "賽": 6555,
+ "贅": 6556,
+ "贈": 6557,
+ "贊": 6558,
+ "贍": 6559,
+ "贏": 6560,
+ "贓": 6561,
+ "贖": 6562,
+ "贛": 6563,
+ "贝": 6564,
+ "贞": 6565,
+ "负": 6566,
+ "贡": 6567,
+ "财": 6568,
+ "责": 6569,
+ "贤": 6570,
+ "败": 6571,
+ "账": 6572,
+ "货": 6573,
+ "质": 6574,
+ "贩": 6575,
+ "贪": 6576,
+ "贫": 6577,
+ "贬": 6578,
+ "购": 6579,
+ "贮": 6580,
+ "贯": 6581,
+ "贰": 6582,
+ "贱": 6583,
+ "贲": 6584,
+ "贴": 6585,
+ "贵": 6586,
+ "贷": 6587,
+ "贸": 6588,
+ "费": 6589,
+ "贺": 6590,
+ "贻": 6591,
+ "贼": 6592,
+ "贾": 6593,
+ "贿": 6594,
+ "赁": 6595,
+ "赂": 6596,
+ "赃": 6597,
+ "资": 6598,
+ "赅": 6599,
+ "赈": 6600,
+ "赊": 6601,
+ "赋": 6602,
+ "赌": 6603,
+ "赎": 6604,
+ "赏": 6605,
+ "赐": 6606,
+ "赓": 6607,
+ "赔": 6608,
+ "赖": 6609,
+ "赘": 6610,
+ "赚": 6611,
+ "赛": 6612,
+ "赝": 6613,
+ "赞": 6614,
+ "赠": 6615,
+ "赡": 6616,
+ "赢": 6617,
+ "赣": 6618,
+ "赤": 6619,
+ "赦": 6620,
+ "赧": 6621,
+ "赫": 6622,
+ "赭": 6623,
+ "走": 6624,
+ "赳": 6625,
+ "赴": 6626,
+ "赵": 6627,
+ "赶": 6628,
+ "起": 6629,
+ "趁": 6630,
+ "超": 6631,
+ "越": 6632,
+ "趋": 6633,
+ "趕": 6634,
+ "趙": 6635,
+ "趟": 6636,
+ "趣": 6637,
+ "趨": 6638,
+ "足": 6639,
+ "趴": 6640,
+ "趵": 6641,
+ "趸": 6642,
+ "趺": 6643,
+ "趾": 6644,
+ "跃": 6645,
+ "跄": 6646,
+ "跆": 6647,
+ "跋": 6648,
+ "跌": 6649,
+ "跎": 6650,
+ "跑": 6651,
+ "跖": 6652,
+ "跚": 6653,
+ "跛": 6654,
+ "距": 6655,
+ "跟": 6656,
+ "跡": 6657,
+ "跤": 6658,
+ "跨": 6659,
+ "跩": 6660,
+ "跪": 6661,
+ "路": 6662,
+ "跳": 6663,
+ "践": 6664,
+ "跷": 6665,
+ "跹": 6666,
+ "跺": 6667,
+ "跻": 6668,
+ "踉": 6669,
+ "踊": 6670,
+ "踌": 6671,
+ "踏": 6672,
+ "踐": 6673,
+ "踝": 6674,
+ "踞": 6675,
+ "踟": 6676,
+ "踢": 6677,
+ "踩": 6678,
+ "踪": 6679,
+ "踮": 6680,
+ "踱": 6681,
+ "踴": 6682,
+ "踵": 6683,
+ "踹": 6684,
+ "蹂": 6685,
+ "蹄": 6686,
+ "蹇": 6687,
+ "蹈": 6688,
+ "蹉": 6689,
+ "蹊": 6690,
+ "蹋": 6691,
+ "蹑": 6692,
+ "蹒": 6693,
+ "蹙": 6694,
+ "蹟": 6695,
+ "蹣": 6696,
+ "蹤": 6697,
+ "蹦": 6698,
+ "蹩": 6699,
+ "蹬": 6700,
+ "蹭": 6701,
+ "蹲": 6702,
+ "蹴": 6703,
+ "蹶": 6704,
+ "蹺": 6705,
+ "蹼": 6706,
+ "蹿": 6707,
+ "躁": 6708,
+ "躇": 6709,
+ "躉": 6710,
+ "躊": 6711,
+ "躋": 6712,
+ "躍": 6713,
+ "躏": 6714,
+ "躪": 6715,
+ "身": 6716,
+ "躬": 6717,
+ "躯": 6718,
+ "躲": 6719,
+ "躺": 6720,
+ "軀": 6721,
+ "車": 6722,
+ "軋": 6723,
+ "軌": 6724,
+ "軍": 6725,
+ "軒": 6726,
+ "軟": 6727,
+ "転": 6728,
+ "軸": 6729,
+ "軼": 6730,
+ "軽": 6731,
+ "軾": 6732,
+ "較": 6733,
+ "載": 6734,
+ "輒": 6735,
+ "輓": 6736,
+ "輔": 6737,
+ "輕": 6738,
+ "輛": 6739,
+ "輝": 6740,
+ "輟": 6741,
+ "輩": 6742,
+ "輪": 6743,
+ "輯": 6744,
+ "輸": 6745,
+ "輻": 6746,
+ "輾": 6747,
+ "輿": 6748,
+ "轄": 6749,
+ "轅": 6750,
+ "轆": 6751,
+ "轉": 6752,
+ "轍": 6753,
+ "轎": 6754,
+ "轟": 6755,
+ "车": 6756,
+ "轧": 6757,
+ "轨": 6758,
+ "轩": 6759,
+ "转": 6760,
+ "轭": 6761,
+ "轮": 6762,
+ "软": 6763,
+ "轰": 6764,
+ "轲": 6765,
+ "轴": 6766,
+ "轶": 6767,
+ "轻": 6768,
+ "轼": 6769,
+ "载": 6770,
+ "轿": 6771,
+ "较": 6772,
+ "辄": 6773,
+ "辅": 6774,
+ "辆": 6775,
+ "辇": 6776,
+ "辈": 6777,
+ "辉": 6778,
+ "辊": 6779,
+ "辍": 6780,
+ "辐": 6781,
+ "辑": 6782,
+ "输": 6783,
+ "辕": 6784,
+ "辖": 6785,
+ "辗": 6786,
+ "辘": 6787,
+ "辙": 6788,
+ "辛": 6789,
+ "辜": 6790,
+ "辞": 6791,
+ "辟": 6792,
+ "辣": 6793,
+ "辦": 6794,
+ "辨": 6795,
+ "辩": 6796,
+ "辫": 6797,
+ "辭": 6798,
+ "辮": 6799,
+ "辯": 6800,
+ "辰": 6801,
+ "辱": 6802,
+ "農": 6803,
+ "边": 6804,
+ "辺": 6805,
+ "辻": 6806,
+ "込": 6807,
+ "辽": 6808,
+ "达": 6809,
+ "迁": 6810,
+ "迂": 6811,
+ "迄": 6812,
+ "迅": 6813,
+ "过": 6814,
+ "迈": 6815,
+ "迎": 6816,
+ "运": 6817,
+ "近": 6818,
+ "返": 6819,
+ "还": 6820,
+ "这": 6821,
+ "进": 6822,
+ "远": 6823,
+ "违": 6824,
+ "连": 6825,
+ "迟": 6826,
+ "迢": 6827,
+ "迤": 6828,
+ "迥": 6829,
+ "迦": 6830,
+ "迩": 6831,
+ "迪": 6832,
+ "迫": 6833,
+ "迭": 6834,
+ "述": 6835,
+ "迴": 6836,
+ "迷": 6837,
+ "迸": 6838,
+ "迹": 6839,
+ "迺": 6840,
+ "追": 6841,
+ "退": 6842,
+ "送": 6843,
+ "适": 6844,
+ "逃": 6845,
+ "逅": 6846,
+ "逆": 6847,
+ "选": 6848,
+ "逊": 6849,
+ "逍": 6850,
+ "透": 6851,
+ "逐": 6852,
+ "递": 6853,
+ "途": 6854,
+ "逕": 6855,
+ "逗": 6856,
+ "這": 6857,
+ "通": 6858,
+ "逛": 6859,
+ "逝": 6860,
+ "逞": 6861,
+ "速": 6862,
+ "造": 6863,
+ "逢": 6864,
+ "連": 6865,
+ "逮": 6866,
+ "週": 6867,
+ "進": 6868,
+ "逵": 6869,
+ "逶": 6870,
+ "逸": 6871,
+ "逻": 6872,
+ "逼": 6873,
+ "逾": 6874,
+ "遁": 6875,
+ "遂": 6876,
+ "遅": 6877,
+ "遇": 6878,
+ "遊": 6879,
+ "運": 6880,
+ "遍": 6881,
+ "過": 6882,
+ "遏": 6883,
+ "遐": 6884,
+ "遑": 6885,
+ "遒": 6886,
+ "道": 6887,
+ "達": 6888,
+ "違": 6889,
+ "遗": 6890,
+ "遙": 6891,
+ "遛": 6892,
+ "遜": 6893,
+ "遞": 6894,
+ "遠": 6895,
+ "遢": 6896,
+ "遣": 6897,
+ "遥": 6898,
+ "遨": 6899,
+ "適": 6900,
+ "遭": 6901,
+ "遮": 6902,
+ "遲": 6903,
+ "遴": 6904,
+ "遵": 6905,
+ "遶": 6906,
+ "遷": 6907,
+ "選": 6908,
+ "遺": 6909,
+ "遼": 6910,
+ "遽": 6911,
+ "避": 6912,
+ "邀": 6913,
+ "邁": 6914,
+ "邂": 6915,
+ "邃": 6916,
+ "還": 6917,
+ "邇": 6918,
+ "邈": 6919,
+ "邊": 6920,
+ "邋": 6921,
+ "邏": 6922,
+ "邑": 6923,
+ "邓": 6924,
+ "邕": 6925,
+ "邛": 6926,
+ "邝": 6927,
+ "邢": 6928,
+ "那": 6929,
+ "邦": 6930,
+ "邨": 6931,
+ "邪": 6932,
+ "邬": 6933,
+ "邮": 6934,
+ "邯": 6935,
+ "邰": 6936,
+ "邱": 6937,
+ "邳": 6938,
+ "邵": 6939,
+ "邸": 6940,
+ "邹": 6941,
+ "邺": 6942,
+ "邻": 6943,
+ "郁": 6944,
+ "郅": 6945,
+ "郊": 6946,
+ "郎": 6947,
+ "郑": 6948,
+ "郜": 6949,
+ "郝": 6950,
+ "郡": 6951,
+ "郢": 6952,
+ "郤": 6953,
+ "郦": 6954,
+ "郧": 6955,
+ "部": 6956,
+ "郫": 6957,
+ "郭": 6958,
+ "郴": 6959,
+ "郵": 6960,
+ "郷": 6961,
+ "郸": 6962,
+ "都": 6963,
+ "鄂": 6964,
+ "鄉": 6965,
+ "鄒": 6966,
+ "鄔": 6967,
+ "鄙": 6968,
+ "鄞": 6969,
+ "鄢": 6970,
+ "鄧": 6971,
+ "鄭": 6972,
+ "鄰": 6973,
+ "鄱": 6974,
+ "鄲": 6975,
+ "鄺": 6976,
+ "酉": 6977,
+ "酊": 6978,
+ "酋": 6979,
+ "酌": 6980,
+ "配": 6981,
+ "酐": 6982,
+ "酒": 6983,
+ "酗": 6984,
+ "酚": 6985,
+ "酝": 6986,
+ "酢": 6987,
+ "酣": 6988,
+ "酥": 6989,
+ "酩": 6990,
+ "酪": 6991,
+ "酬": 6992,
+ "酮": 6993,
+ "酯": 6994,
+ "酰": 6995,
+ "酱": 6996,
+ "酵": 6997,
+ "酶": 6998,
+ "酷": 6999,
+ "酸": 7000,
+ "酿": 7001,
+ "醃": 7002,
+ "醇": 7003,
+ "醉": 7004,
+ "醋": 7005,
+ "醍": 7006,
+ "醐": 7007,
+ "醒": 7008,
+ "醚": 7009,
+ "醛": 7010,
+ "醜": 7011,
+ "醞": 7012,
+ "醣": 7013,
+ "醪": 7014,
+ "醫": 7015,
+ "醬": 7016,
+ "醮": 7017,
+ "醯": 7018,
+ "醴": 7019,
+ "醺": 7020,
+ "釀": 7021,
+ "釁": 7022,
+ "采": 7023,
+ "釉": 7024,
+ "释": 7025,
+ "釋": 7026,
+ "里": 7027,
+ "重": 7028,
+ "野": 7029,
+ "量": 7030,
+ "釐": 7031,
+ "金": 7032,
+ "釗": 7033,
+ "釘": 7034,
+ "釜": 7035,
+ "針": 7036,
+ "釣": 7037,
+ "釦": 7038,
+ "釧": 7039,
+ "釵": 7040,
+ "鈀": 7041,
+ "鈉": 7042,
+ "鈍": 7043,
+ "鈎": 7044,
+ "鈔": 7045,
+ "鈕": 7046,
+ "鈞": 7047,
+ "鈣": 7048,
+ "鈦": 7049,
+ "鈪": 7050,
+ "鈴": 7051,
+ "鈺": 7052,
+ "鈾": 7053,
+ "鉀": 7054,
+ "鉄": 7055,
+ "鉅": 7056,
+ "鉉": 7057,
+ "鉑": 7058,
+ "鉗": 7059,
+ "鉚": 7060,
+ "鉛": 7061,
+ "鉤": 7062,
+ "鉴": 7063,
+ "鉻": 7064,
+ "銀": 7065,
+ "銃": 7066,
+ "銅": 7067,
+ "銑": 7068,
+ "銓": 7069,
+ "銖": 7070,
+ "銘": 7071,
+ "銜": 7072,
+ "銬": 7073,
+ "銭": 7074,
+ "銮": 7075,
+ "銳": 7076,
+ "銷": 7077,
+ "銹": 7078,
+ "鋁": 7079,
+ "鋅": 7080,
+ "鋒": 7081,
+ "鋤": 7082,
+ "鋪": 7083,
+ "鋰": 7084,
+ "鋸": 7085,
+ "鋼": 7086,
+ "錄": 7087,
+ "錐": 7088,
+ "錘": 7089,
+ "錚": 7090,
+ "錠": 7091,
+ "錢": 7092,
+ "錦": 7093,
+ "錨": 7094,
+ "錫": 7095,
+ "錮": 7096,
+ "錯": 7097,
+ "録": 7098,
+ "錳": 7099,
+ "錶": 7100,
+ "鍊": 7101,
+ "鍋": 7102,
+ "鍍": 7103,
+ "鍛": 7104,
+ "鍥": 7105,
+ "鍰": 7106,
+ "鍵": 7107,
+ "鍺": 7108,
+ "鍾": 7109,
+ "鎂": 7110,
+ "鎊": 7111,
+ "鎌": 7112,
+ "鎏": 7113,
+ "鎔": 7114,
+ "鎖": 7115,
+ "鎗": 7116,
+ "鎚": 7117,
+ "鎧": 7118,
+ "鎬": 7119,
+ "鎮": 7120,
+ "鎳": 7121,
+ "鏈": 7122,
+ "鏖": 7123,
+ "鏗": 7124,
+ "鏘": 7125,
+ "鏞": 7126,
+ "鏟": 7127,
+ "鏡": 7128,
+ "鏢": 7129,
+ "鏤": 7130,
+ "鏽": 7131,
+ "鐘": 7132,
+ "鐮": 7133,
+ "鐲": 7134,
+ "鐳": 7135,
+ "鐵": 7136,
+ "鐸": 7137,
+ "鐺": 7138,
+ "鑄": 7139,
+ "鑊": 7140,
+ "鑑": 7141,
+ "鑒": 7142,
+ "鑣": 7143,
+ "鑫": 7144,
+ "鑰": 7145,
+ "鑲": 7146,
+ "鑼": 7147,
+ "鑽": 7148,
+ "鑾": 7149,
+ "鑿": 7150,
+ "针": 7151,
+ "钉": 7152,
+ "钊": 7153,
+ "钎": 7154,
+ "钏": 7155,
+ "钒": 7156,
+ "钓": 7157,
+ "钗": 7158,
+ "钙": 7159,
+ "钛": 7160,
+ "钜": 7161,
+ "钝": 7162,
+ "钞": 7163,
+ "钟": 7164,
+ "钠": 7165,
+ "钡": 7166,
+ "钢": 7167,
+ "钣": 7168,
+ "钤": 7169,
+ "钥": 7170,
+ "钦": 7171,
+ "钧": 7172,
+ "钨": 7173,
+ "钩": 7174,
+ "钮": 7175,
+ "钯": 7176,
+ "钰": 7177,
+ "钱": 7178,
+ "钳": 7179,
+ "钴": 7180,
+ "钵": 7181,
+ "钺": 7182,
+ "钻": 7183,
+ "钼": 7184,
+ "钾": 7185,
+ "钿": 7186,
+ "铀": 7187,
+ "铁": 7188,
+ "铂": 7189,
+ "铃": 7190,
+ "铄": 7191,
+ "铅": 7192,
+ "铆": 7193,
+ "铉": 7194,
+ "铎": 7195,
+ "铐": 7196,
+ "铛": 7197,
+ "铜": 7198,
+ "铝": 7199,
+ "铠": 7200,
+ "铡": 7201,
+ "铢": 7202,
+ "铣": 7203,
+ "铤": 7204,
+ "铨": 7205,
+ "铩": 7206,
+ "铬": 7207,
+ "铭": 7208,
+ "铮": 7209,
+ "铰": 7210,
+ "铲": 7211,
+ "铵": 7212,
+ "银": 7213,
+ "铸": 7214,
+ "铺": 7215,
+ "链": 7216,
+ "铿": 7217,
+ "销": 7218,
+ "锁": 7219,
+ "锂": 7220,
+ "锄": 7221,
+ "锅": 7222,
+ "锆": 7223,
+ "锈": 7224,
+ "锉": 7225,
+ "锋": 7226,
+ "锌": 7227,
+ "锏": 7228,
+ "锐": 7229,
+ "锑": 7230,
+ "错": 7231,
+ "锚": 7232,
+ "锟": 7233,
+ "锡": 7234,
+ "锢": 7235,
+ "锣": 7236,
+ "锤": 7237,
+ "锥": 7238,
+ "锦": 7239,
+ "锭": 7240,
+ "键": 7241,
+ "锯": 7242,
+ "锰": 7243,
+ "锲": 7244,
+ "锵": 7245,
+ "锹": 7246,
+ "锺": 7247,
+ "锻": 7248,
+ "镀": 7249,
+ "镁": 7250,
+ "镂": 7251,
+ "镇": 7252,
+ "镉": 7253,
+ "镌": 7254,
+ "镍": 7255,
+ "镐": 7256,
+ "镑": 7257,
+ "镕": 7258,
+ "镖": 7259,
+ "镗": 7260,
+ "镛": 7261,
+ "镜": 7262,
+ "镣": 7263,
+ "镭": 7264,
+ "镯": 7265,
+ "镰": 7266,
+ "镳": 7267,
+ "镶": 7268,
+ "長": 7269,
+ "长": 7270,
+ "門": 7271,
+ "閃": 7272,
+ "閉": 7273,
+ "開": 7274,
+ "閎": 7275,
+ "閏": 7276,
+ "閑": 7277,
+ "閒": 7278,
+ "間": 7279,
+ "閔": 7280,
+ "閘": 7281,
+ "閡": 7282,
+ "関": 7283,
+ "閣": 7284,
+ "閥": 7285,
+ "閨": 7286,
+ "閩": 7287,
+ "閱": 7288,
+ "閲": 7289,
+ "閹": 7290,
+ "閻": 7291,
+ "閾": 7292,
+ "闆": 7293,
+ "闇": 7294,
+ "闊": 7295,
+ "闌": 7296,
+ "闍": 7297,
+ "闔": 7298,
+ "闕": 7299,
+ "闖": 7300,
+ "闘": 7301,
+ "關": 7302,
+ "闡": 7303,
+ "闢": 7304,
+ "门": 7305,
+ "闪": 7306,
+ "闫": 7307,
+ "闭": 7308,
+ "问": 7309,
+ "闯": 7310,
+ "闰": 7311,
+ "闲": 7312,
+ "间": 7313,
+ "闵": 7314,
+ "闷": 7315,
+ "闸": 7316,
+ "闹": 7317,
+ "闺": 7318,
+ "闻": 7319,
+ "闽": 7320,
+ "闾": 7321,
+ "阀": 7322,
+ "阁": 7323,
+ "阂": 7324,
+ "阅": 7325,
+ "阆": 7326,
+ "阇": 7327,
+ "阈": 7328,
+ "阉": 7329,
+ "阎": 7330,
+ "阐": 7331,
+ "阑": 7332,
+ "阔": 7333,
+ "阕": 7334,
+ "阖": 7335,
+ "阙": 7336,
+ "阚": 7337,
+ "阜": 7338,
+ "队": 7339,
+ "阡": 7340,
+ "阪": 7341,
+ "阮": 7342,
+ "阱": 7343,
+ "防": 7344,
+ "阳": 7345,
+ "阴": 7346,
+ "阵": 7347,
+ "阶": 7348,
+ "阻": 7349,
+ "阿": 7350,
+ "陀": 7351,
+ "陂": 7352,
+ "附": 7353,
+ "际": 7354,
+ "陆": 7355,
+ "陇": 7356,
+ "陈": 7357,
+ "陋": 7358,
+ "陌": 7359,
+ "降": 7360,
+ "限": 7361,
+ "陕": 7362,
+ "陛": 7363,
+ "陝": 7364,
+ "陞": 7365,
+ "陟": 7366,
+ "陡": 7367,
+ "院": 7368,
+ "陣": 7369,
+ "除": 7370,
+ "陨": 7371,
+ "险": 7372,
+ "陪": 7373,
+ "陰": 7374,
+ "陲": 7375,
+ "陳": 7376,
+ "陵": 7377,
+ "陶": 7378,
+ "陷": 7379,
+ "陸": 7380,
+ "険": 7381,
+ "陽": 7382,
+ "隅": 7383,
+ "隆": 7384,
+ "隈": 7385,
+ "隊": 7386,
+ "隋": 7387,
+ "隍": 7388,
+ "階": 7389,
+ "随": 7390,
+ "隐": 7391,
+ "隔": 7392,
+ "隕": 7393,
+ "隘": 7394,
+ "隙": 7395,
+ "際": 7396,
+ "障": 7397,
+ "隠": 7398,
+ "隣": 7399,
+ "隧": 7400,
+ "隨": 7401,
+ "險": 7402,
+ "隱": 7403,
+ "隴": 7404,
+ "隶": 7405,
+ "隸": 7406,
+ "隻": 7407,
+ "隼": 7408,
+ "隽": 7409,
+ "难": 7410,
+ "雀": 7411,
+ "雁": 7412,
+ "雄": 7413,
+ "雅": 7414,
+ "集": 7415,
+ "雇": 7416,
+ "雉": 7417,
+ "雋": 7418,
+ "雌": 7419,
+ "雍": 7420,
+ "雎": 7421,
+ "雏": 7422,
+ "雑": 7423,
+ "雒": 7424,
+ "雕": 7425,
+ "雖": 7426,
+ "雙": 7427,
+ "雛": 7428,
+ "雜": 7429,
+ "雞": 7430,
+ "離": 7431,
+ "難": 7432,
+ "雨": 7433,
+ "雪": 7434,
+ "雯": 7435,
+ "雰": 7436,
+ "雲": 7437,
+ "雳": 7438,
+ "零": 7439,
+ "雷": 7440,
+ "雹": 7441,
+ "電": 7442,
+ "雾": 7443,
+ "需": 7444,
+ "霁": 7445,
+ "霄": 7446,
+ "霆": 7447,
+ "震": 7448,
+ "霈": 7449,
+ "霉": 7450,
+ "霊": 7451,
+ "霍": 7452,
+ "霎": 7453,
+ "霏": 7454,
+ "霑": 7455,
+ "霓": 7456,
+ "霖": 7457,
+ "霜": 7458,
+ "霞": 7459,
+ "霧": 7460,
+ "霭": 7461,
+ "霰": 7462,
+ "露": 7463,
+ "霸": 7464,
+ "霹": 7465,
+ "霽": 7466,
+ "霾": 7467,
+ "靂": 7468,
+ "靄": 7469,
+ "靈": 7470,
+ "青": 7471,
+ "靓": 7472,
+ "靖": 7473,
+ "静": 7474,
+ "靚": 7475,
+ "靛": 7476,
+ "靜": 7477,
+ "非": 7478,
+ "靠": 7479,
+ "靡": 7480,
+ "面": 7481,
+ "靥": 7482,
+ "靦": 7483,
+ "革": 7484,
+ "靳": 7485,
+ "靴": 7486,
+ "靶": 7487,
+ "靼": 7488,
+ "鞅": 7489,
+ "鞋": 7490,
+ "鞍": 7491,
+ "鞏": 7492,
+ "鞑": 7493,
+ "鞘": 7494,
+ "鞠": 7495,
+ "鞣": 7496,
+ "鞦": 7497,
+ "鞭": 7498,
+ "韆": 7499,
+ "韋": 7500,
+ "韌": 7501,
+ "韓": 7502,
+ "韜": 7503,
+ "韦": 7504,
+ "韧": 7505,
+ "韩": 7506,
+ "韬": 7507,
+ "韭": 7508,
+ "音": 7509,
+ "韵": 7510,
+ "韶": 7511,
+ "韻": 7512,
+ "響": 7513,
+ "頁": 7514,
+ "頂": 7515,
+ "頃": 7516,
+ "項": 7517,
+ "順": 7518,
+ "須": 7519,
+ "頌": 7520,
+ "預": 7521,
+ "頑": 7522,
+ "頒": 7523,
+ "頓": 7524,
+ "頗": 7525,
+ "領": 7526,
+ "頜": 7527,
+ "頡": 7528,
+ "頤": 7529,
+ "頫": 7530,
+ "頭": 7531,
+ "頰": 7532,
+ "頷": 7533,
+ "頸": 7534,
+ "頹": 7535,
+ "頻": 7536,
+ "頼": 7537,
+ "顆": 7538,
+ "題": 7539,
+ "額": 7540,
+ "顎": 7541,
+ "顏": 7542,
+ "顔": 7543,
+ "願": 7544,
+ "顛": 7545,
+ "類": 7546,
+ "顧": 7547,
+ "顫": 7548,
+ "顯": 7549,
+ "顱": 7550,
+ "顴": 7551,
+ "页": 7552,
+ "顶": 7553,
+ "顷": 7554,
+ "项": 7555,
+ "顺": 7556,
+ "须": 7557,
+ "顼": 7558,
+ "顽": 7559,
+ "顾": 7560,
+ "顿": 7561,
+ "颁": 7562,
+ "颂": 7563,
+ "预": 7564,
+ "颅": 7565,
+ "领": 7566,
+ "颇": 7567,
+ "颈": 7568,
+ "颉": 7569,
+ "颊": 7570,
+ "颌": 7571,
+ "颍": 7572,
+ "颐": 7573,
+ "频": 7574,
+ "颓": 7575,
+ "颔": 7576,
+ "颖": 7577,
+ "颗": 7578,
+ "题": 7579,
+ "颚": 7580,
+ "颛": 7581,
+ "颜": 7582,
+ "额": 7583,
+ "颞": 7584,
+ "颠": 7585,
+ "颡": 7586,
+ "颢": 7587,
+ "颤": 7588,
+ "颦": 7589,
+ "颧": 7590,
+ "風": 7591,
+ "颯": 7592,
+ "颱": 7593,
+ "颳": 7594,
+ "颶": 7595,
+ "颼": 7596,
+ "飄": 7597,
+ "飆": 7598,
+ "风": 7599,
+ "飒": 7600,
+ "飓": 7601,
+ "飕": 7602,
+ "飘": 7603,
+ "飙": 7604,
+ "飚": 7605,
+ "飛": 7606,
+ "飞": 7607,
+ "食": 7608,
+ "飢": 7609,
+ "飨": 7610,
+ "飩": 7611,
+ "飪": 7612,
+ "飯": 7613,
+ "飲": 7614,
+ "飼": 7615,
+ "飽": 7616,
+ "飾": 7617,
+ "餃": 7618,
+ "餅": 7619,
+ "餉": 7620,
+ "養": 7621,
+ "餌": 7622,
+ "餐": 7623,
+ "餒": 7624,
+ "餓": 7625,
+ "餘": 7626,
+ "餚": 7627,
+ "餛": 7628,
+ "餞": 7629,
+ "餡": 7630,
+ "館": 7631,
+ "餮": 7632,
+ "餵": 7633,
+ "餾": 7634,
+ "饅": 7635,
+ "饈": 7636,
+ "饋": 7637,
+ "饌": 7638,
+ "饍": 7639,
+ "饑": 7640,
+ "饒": 7641,
+ "饕": 7642,
+ "饗": 7643,
+ "饞": 7644,
+ "饥": 7645,
+ "饨": 7646,
+ "饪": 7647,
+ "饬": 7648,
+ "饭": 7649,
+ "饮": 7650,
+ "饯": 7651,
+ "饰": 7652,
+ "饱": 7653,
+ "饲": 7654,
+ "饴": 7655,
+ "饵": 7656,
+ "饶": 7657,
+ "饷": 7658,
+ "饺": 7659,
+ "饼": 7660,
+ "饽": 7661,
+ "饿": 7662,
+ "馀": 7663,
+ "馁": 7664,
+ "馄": 7665,
+ "馅": 7666,
+ "馆": 7667,
+ "馈": 7668,
+ "馋": 7669,
+ "馍": 7670,
+ "馏": 7671,
+ "馒": 7672,
+ "馔": 7673,
+ "首": 7674,
+ "馗": 7675,
+ "香": 7676,
+ "馥": 7677,
+ "馨": 7678,
+ "馬": 7679,
+ "馭": 7680,
+ "馮": 7681,
+ "馳": 7682,
+ "馴": 7683,
+ "駁": 7684,
+ "駄": 7685,
+ "駅": 7686,
+ "駆": 7687,
+ "駐": 7688,
+ "駒": 7689,
+ "駕": 7690,
+ "駛": 7691,
+ "駝": 7692,
+ "駭": 7693,
+ "駱": 7694,
+ "駿": 7695,
+ "騁": 7696,
+ "騎": 7697,
+ "騏": 7698,
+ "験": 7699,
+ "騙": 7700,
+ "騨": 7701,
+ "騰": 7702,
+ "騷": 7703,
+ "驀": 7704,
+ "驅": 7705,
+ "驊": 7706,
+ "驍": 7707,
+ "驒": 7708,
+ "驕": 7709,
+ "驗": 7710,
+ "驚": 7711,
+ "驛": 7712,
+ "驟": 7713,
+ "驢": 7714,
+ "驥": 7715,
+ "马": 7716,
+ "驭": 7717,
+ "驮": 7718,
+ "驯": 7719,
+ "驰": 7720,
+ "驱": 7721,
+ "驳": 7722,
+ "驴": 7723,
+ "驶": 7724,
+ "驷": 7725,
+ "驸": 7726,
+ "驹": 7727,
+ "驻": 7728,
+ "驼": 7729,
+ "驾": 7730,
+ "驿": 7731,
+ "骁": 7732,
+ "骂": 7733,
+ "骄": 7734,
+ "骅": 7735,
+ "骆": 7736,
+ "骇": 7737,
+ "骈": 7738,
+ "骊": 7739,
+ "骋": 7740,
+ "验": 7741,
+ "骏": 7742,
+ "骐": 7743,
+ "骑": 7744,
+ "骗": 7745,
+ "骚": 7746,
+ "骛": 7747,
+ "骜": 7748,
+ "骞": 7749,
+ "骠": 7750,
+ "骡": 7751,
+ "骤": 7752,
+ "骥": 7753,
+ "骧": 7754,
+ "骨": 7755,
+ "骯": 7756,
+ "骰": 7757,
+ "骶": 7758,
+ "骷": 7759,
+ "骸": 7760,
+ "骼": 7761,
+ "髂": 7762,
+ "髅": 7763,
+ "髋": 7764,
+ "髏": 7765,
+ "髒": 7766,
+ "髓": 7767,
+ "體": 7768,
+ "髖": 7769,
+ "高": 7770,
+ "髦": 7771,
+ "髪": 7772,
+ "髮": 7773,
+ "髯": 7774,
+ "髻": 7775,
+ "鬃": 7776,
+ "鬆": 7777,
+ "鬍": 7778,
+ "鬓": 7779,
+ "鬚": 7780,
+ "鬟": 7781,
+ "鬢": 7782,
+ "鬣": 7783,
+ "鬥": 7784,
+ "鬧": 7785,
+ "鬱": 7786,
+ "鬼": 7787,
+ "魁": 7788,
+ "魂": 7789,
+ "魄": 7790,
+ "魅": 7791,
+ "魇": 7792,
+ "魍": 7793,
+ "魏": 7794,
+ "魔": 7795,
+ "魘": 7796,
+ "魚": 7797,
+ "魯": 7798,
+ "魷": 7799,
+ "鮑": 7800,
+ "鮨": 7801,
+ "鮪": 7802,
+ "鮭": 7803,
+ "鮮": 7804,
+ "鯉": 7805,
+ "鯊": 7806,
+ "鯖": 7807,
+ "鯛": 7808,
+ "鯨": 7809,
+ "鯰": 7810,
+ "鯽": 7811,
+ "鰍": 7812,
+ "鰓": 7813,
+ "鰭": 7814,
+ "鰲": 7815,
+ "鰻": 7816,
+ "鰾": 7817,
+ "鱈": 7818,
+ "鱉": 7819,
+ "鱔": 7820,
+ "鱗": 7821,
+ "鱷": 7822,
+ "鱸": 7823,
+ "鱼": 7824,
+ "鱿": 7825,
+ "鲁": 7826,
+ "鲈": 7827,
+ "鲍": 7828,
+ "鲑": 7829,
+ "鲛": 7830,
+ "鲜": 7831,
+ "鲟": 7832,
+ "鲢": 7833,
+ "鲤": 7834,
+ "鲨": 7835,
+ "鲫": 7836,
+ "鲱": 7837,
+ "鲲": 7838,
+ "鲶": 7839,
+ "鲷": 7840,
+ "鲸": 7841,
+ "鳃": 7842,
+ "鳄": 7843,
+ "鳅": 7844,
+ "鳌": 7845,
+ "鳍": 7846,
+ "鳕": 7847,
+ "鳖": 7848,
+ "鳗": 7849,
+ "鳝": 7850,
+ "鳞": 7851,
+ "鳥": 7852,
+ "鳩": 7853,
+ "鳳": 7854,
+ "鳴": 7855,
+ "鳶": 7856,
+ "鴉": 7857,
+ "鴕": 7858,
+ "鴛": 7859,
+ "鴦": 7860,
+ "鴨": 7861,
+ "鴻": 7862,
+ "鴿": 7863,
+ "鵑": 7864,
+ "鵜": 7865,
+ "鵝": 7866,
+ "鵡": 7867,
+ "鵬": 7868,
+ "鵰": 7869,
+ "鵲": 7870,
+ "鶘": 7871,
+ "鶩": 7872,
+ "鶯": 7873,
+ "鶴": 7874,
+ "鷗": 7875,
+ "鷲": 7876,
+ "鷹": 7877,
+ "鷺": 7878,
+ "鸚": 7879,
+ "鸞": 7880,
+ "鸟": 7881,
+ "鸠": 7882,
+ "鸡": 7883,
+ "鸢": 7884,
+ "鸣": 7885,
+ "鸥": 7886,
+ "鸦": 7887,
+ "鸨": 7888,
+ "鸪": 7889,
+ "鸭": 7890,
+ "鸯": 7891,
+ "鸳": 7892,
+ "鸵": 7893,
+ "鸽": 7894,
+ "鸾": 7895,
+ "鸿": 7896,
+ "鹂": 7897,
+ "鹃": 7898,
+ "鹄": 7899,
+ "鹅": 7900,
+ "鹈": 7901,
+ "鹉": 7902,
+ "鹊": 7903,
+ "鹌": 7904,
+ "鹏": 7905,
+ "鹑": 7906,
+ "鹕": 7907,
+ "鹘": 7908,
+ "鹜": 7909,
+ "鹞": 7910,
+ "鹤": 7911,
+ "鹦": 7912,
+ "鹧": 7913,
+ "鹫": 7914,
+ "鹭": 7915,
+ "鹰": 7916,
+ "鹳": 7917,
+ "鹵": 7918,
+ "鹹": 7919,
+ "鹼": 7920,
+ "鹽": 7921,
+ "鹿": 7922,
+ "麂": 7923,
+ "麋": 7924,
+ "麒": 7925,
+ "麓": 7926,
+ "麗": 7927,
+ "麝": 7928,
+ "麟": 7929,
+ "麥": 7930,
+ "麦": 7931,
+ "麩": 7932,
+ "麴": 7933,
+ "麵": 7934,
+ "麸": 7935,
+ "麺": 7936,
+ "麻": 7937,
+ "麼": 7938,
+ "麽": 7939,
+ "麾": 7940,
+ "黃": 7941,
+ "黄": 7942,
+ "黍": 7943,
+ "黎": 7944,
+ "黏": 7945,
+ "黑": 7946,
+ "黒": 7947,
+ "黔": 7948,
+ "默": 7949,
+ "黛": 7950,
+ "黜": 7951,
+ "黝": 7952,
+ "點": 7953,
+ "黠": 7954,
+ "黨": 7955,
+ "黯": 7956,
+ "黴": 7957,
+ "鼋": 7958,
+ "鼎": 7959,
+ "鼐": 7960,
+ "鼓": 7961,
+ "鼠": 7962,
+ "鼬": 7963,
+ "鼹": 7964,
+ "鼻": 7965,
+ "鼾": 7966,
+ "齁": 7967,
+ "齊": 7968,
+ "齋": 7969,
+ "齐": 7970,
+ "齒": 7971,
+ "齡": 7972,
+ "齢": 7973,
+ "齣": 7974,
+ "齦": 7975,
+ "齿": 7976,
+ "龄": 7977,
+ "龅": 7978,
+ "龈": 7979,
+ "龊": 7980,
+ "龋": 7981,
+ "龌": 7982,
+ "龍": 7983,
+ "龐": 7984,
+ "龔": 7985,
+ "龕": 7986,
+ "龙": 7987,
+ "龚": 7988,
+ "龛": 7989,
+ "龜": 7990,
+ "龟": 7991,
+ "︰": 7992,
+ "︱": 7993,
+ "︶": 7994,
+ "︿": 7995,
+ "﹁": 7996,
+ "﹂": 7997,
+ "﹍": 7998,
+ "﹏": 7999,
+ "﹐": 8000,
+ "﹑": 8001,
+ "﹒": 8002,
+ "﹔": 8003,
+ "﹕": 8004,
+ "﹖": 8005,
+ "﹗": 8006,
+ "﹙": 8007,
+ "﹚": 8008,
+ "﹝": 8009,
+ "﹞": 8010,
+ "﹡": 8011,
+ "﹣": 8012,
+ "!": 8013,
+ """: 8014,
+ "#": 8015,
+ "$": 8016,
+ "%": 8017,
+ "&": 8018,
+ "'": 8019,
+ "(": 8020,
+ ")": 8021,
+ "*": 8022,
+ "+": 8023,
+ ",": 8024,
+ "-": 8025,
+ ".": 8026,
+ "/": 8027,
+ "0": 8028,
+ "1": 8029,
+ "2": 8030,
+ "3": 8031,
+ "4": 8032,
+ "5": 8033,
+ "6": 8034,
+ "7": 8035,
+ "8": 8036,
+ "9": 8037,
+ ":": 8038,
+ ";": 8039,
+ "<": 8040,
+ "=": 8041,
+ ">": 8042,
+ "?": 8043,
+ "@": 8044,
+ "[": 8045,
+ "\": 8046,
+ "]": 8047,
+ "^": 8048,
+ "_": 8049,
+ "`": 8050,
+ "a": 8051,
+ "b": 8052,
+ "c": 8053,
+ "d": 8054,
+ "e": 8055,
+ "f": 8056,
+ "g": 8057,
+ "h": 8058,
+ "i": 8059,
+ "j": 8060,
+ "k": 8061,
+ "l": 8062,
+ "m": 8063,
+ "n": 8064,
+ "o": 8065,
+ "p": 8066,
+ "q": 8067,
+ "r": 8068,
+ "s": 8069,
+ "t": 8070,
+ "u": 8071,
+ "v": 8072,
+ "w": 8073,
+ "x": 8074,
+ "y": 8075,
+ "z": 8076,
+ "{": 8077,
+ "|": 8078,
+ "}": 8079,
+ "~": 8080,
+ "。": 8081,
+ "「": 8082,
+ "」": 8083,
+ "、": 8084,
+ "・": 8085,
+ "ッ": 8086,
+ "ー": 8087,
+ "イ": 8088,
+ "ク": 8089,
+ "シ": 8090,
+ "ス": 8091,
+ "ト": 8092,
+ "ノ": 8093,
+ "フ": 8094,
+ "ラ": 8095,
+ "ル": 8096,
+ "ン": 8097,
+ "゙": 8098,
+ "゚": 8099,
+ " ̄": 8100,
+ "¥": 8101,
+ "👍": 8102,
+ "🔥": 8103,
+ "😂": 8104,
+ "😎": 8105,
+ "...": 8106,
+ "yam": 8107,
+ "10": 8108,
+ "2017": 8109,
+ "12": 8110,
+ "11": 8111,
+ "2016": 8112,
+ "20": 8113,
+ "30": 8114,
+ "15": 8115,
+ "06": 8116,
+ "lofter": 8117,
+ "##s": 8118,
+ "2015": 8119,
+ "by": 8120,
+ "16": 8121,
+ "14": 8122,
+ "18": 8123,
+ "13": 8124,
+ "24": 8125,
+ "17": 8126,
+ "2014": 8127,
+ "21": 8128,
+ "##0": 8129,
+ "22": 8130,
+ "19": 8131,
+ "25": 8132,
+ "23": 8133,
+ "com": 8134,
+ "100": 8135,
+ "00": 8136,
+ "05": 8137,
+ "2013": 8138,
+ "##a": 8139,
+ "03": 8140,
+ "09": 8141,
+ "08": 8142,
+ "28": 8143,
+ "##2": 8144,
+ "50": 8145,
+ "01": 8146,
+ "04": 8147,
+ "##1": 8148,
+ "27": 8149,
+ "02": 8150,
+ "2012": 8151,
+ "##3": 8152,
+ "26": 8153,
+ "##e": 8154,
+ "07": 8155,
+ "##8": 8156,
+ "##5": 8157,
+ "##6": 8158,
+ "##4": 8159,
+ "##9": 8160,
+ "##7": 8161,
+ "29": 8162,
+ "2011": 8163,
+ "40": 8164,
+ "##t": 8165,
+ "2010": 8166,
+ "##o": 8167,
+ "##d": 8168,
+ "##i": 8169,
+ "2009": 8170,
+ "##n": 8171,
+ "app": 8172,
+ "www": 8173,
+ "the": 8174,
+ "##m": 8175,
+ "31": 8176,
+ "##c": 8177,
+ "##l": 8178,
+ "##y": 8179,
+ "##r": 8180,
+ "##g": 8181,
+ "2008": 8182,
+ "60": 8183,
+ "http": 8184,
+ "200": 8185,
+ "qq": 8186,
+ "##p": 8187,
+ "80": 8188,
+ "##f": 8189,
+ "google": 8190,
+ "pixnet": 8191,
+ "90": 8192,
+ "cookies": 8193,
+ "tripadvisor": 8194,
+ "500": 8195,
+ "##er": 8196,
+ "##k": 8197,
+ "35": 8198,
+ "##h": 8199,
+ "facebook": 8200,
+ "2007": 8201,
+ "2000": 8202,
+ "70": 8203,
+ "##b": 8204,
+ "of": 8205,
+ "##x": 8206,
+ "##u": 8207,
+ "45": 8208,
+ "300": 8209,
+ "iphone": 8210,
+ "32": 8211,
+ "1000": 8212,
+ "2006": 8213,
+ "48": 8214,
+ "ip": 8215,
+ "36": 8216,
+ "in": 8217,
+ "38": 8218,
+ "3d": 8219,
+ "##w": 8220,
+ "##ing": 8221,
+ "55": 8222,
+ "ctrip": 8223,
+ "##on": 8224,
+ "##v": 8225,
+ "33": 8226,
+ "##の": 8227,
+ "to": 8228,
+ "34": 8229,
+ "400": 8230,
+ "id": 8231,
+ "2005": 8232,
+ "it": 8233,
+ "37": 8234,
+ "windows": 8235,
+ "llc": 8236,
+ "top": 8237,
+ "99": 8238,
+ "42": 8239,
+ "39": 8240,
+ "000": 8241,
+ "led": 8242,
+ "at": 8243,
+ "##an": 8244,
+ "41": 8245,
+ "51": 8246,
+ "52": 8247,
+ "46": 8248,
+ "49": 8249,
+ "43": 8250,
+ "53": 8251,
+ "44": 8252,
+ "##z": 8253,
+ "android": 8254,
+ "58": 8255,
+ "and": 8256,
+ "59": 8257,
+ "2004": 8258,
+ "56": 8259,
+ "vr": 8260,
+ "##か": 8261,
+ "5000": 8262,
+ "2003": 8263,
+ "47": 8264,
+ "blogthis": 8265,
+ "twitter": 8266,
+ "54": 8267,
+ "##le": 8268,
+ "150": 8269,
+ "ok": 8270,
+ "2018": 8271,
+ "57": 8272,
+ "75": 8273,
+ "cn": 8274,
+ "no": 8275,
+ "ios": 8276,
+ "##in": 8277,
+ "##mm": 8278,
+ "##00": 8279,
+ "800": 8280,
+ "on": 8281,
+ "te": 8282,
+ "3000": 8283,
+ "65": 8284,
+ "2001": 8285,
+ "360": 8286,
+ "95": 8287,
+ "ig": 8288,
+ "lv": 8289,
+ "120": 8290,
+ "##ng": 8291,
+ "##を": 8292,
+ "##us": 8293,
+ "##に": 8294,
+ "pc": 8295,
+ "てす": 8296,
+ "──": 8297,
+ "600": 8298,
+ "##te": 8299,
+ "85": 8300,
+ "2002": 8301,
+ "88": 8302,
+ "##ed": 8303,
+ "html": 8304,
+ "ncc": 8305,
+ "wifi": 8306,
+ "email": 8307,
+ "64": 8308,
+ "blog": 8309,
+ "is": 8310,
+ "##10": 8311,
+ "##て": 8312,
+ "mail": 8313,
+ "online": 8314,
+ "##al": 8315,
+ "dvd": 8316,
+ "##ic": 8317,
+ "studio": 8318,
+ "##は": 8319,
+ "##℃": 8320,
+ "##ia": 8321,
+ "##と": 8322,
+ "line": 8323,
+ "vip": 8324,
+ "72": 8325,
+ "##q": 8326,
+ "98": 8327,
+ "##ce": 8328,
+ "##en": 8329,
+ "for": 8330,
+ "##is": 8331,
+ "##ra": 8332,
+ "##es": 8333,
+ "##j": 8334,
+ "usb": 8335,
+ "net": 8336,
+ "cp": 8337,
+ "1999": 8338,
+ "asia": 8339,
+ "4g": 8340,
+ "##cm": 8341,
+ "diy": 8342,
+ "new": 8343,
+ "3c": 8344,
+ "##お": 8345,
+ "ta": 8346,
+ "66": 8347,
+ "language": 8348,
+ "vs": 8349,
+ "apple": 8350,
+ "tw": 8351,
+ "86": 8352,
+ "web": 8353,
+ "##ne": 8354,
+ "ipad": 8355,
+ "62": 8356,
+ "you": 8357,
+ "##re": 8358,
+ "101": 8359,
+ "68": 8360,
+ "##tion": 8361,
+ "ps": 8362,
+ "de": 8363,
+ "bt": 8364,
+ "pony": 8365,
+ "atm": 8366,
+ "##2017": 8367,
+ "1998": 8368,
+ "67": 8369,
+ "##ch": 8370,
+ "ceo": 8371,
+ "##or": 8372,
+ "go": 8373,
+ "##na": 8374,
+ "av": 8375,
+ "pro": 8376,
+ "cafe": 8377,
+ "96": 8378,
+ "pinterest": 8379,
+ "97": 8380,
+ "63": 8381,
+ "pixstyleme3c": 8382,
+ "##ta": 8383,
+ "more": 8384,
+ "said": 8385,
+ "##2016": 8386,
+ "1997": 8387,
+ "mp3": 8388,
+ "700": 8389,
+ "##ll": 8390,
+ "nba": 8391,
+ "jun": 8392,
+ "##20": 8393,
+ "92": 8394,
+ "tv": 8395,
+ "1995": 8396,
+ "pm": 8397,
+ "61": 8398,
+ "76": 8399,
+ "nbsp": 8400,
+ "250": 8401,
+ "##ie": 8402,
+ "linux": 8403,
+ "##ma": 8404,
+ "cd": 8405,
+ "110": 8406,
+ "hd": 8407,
+ "##17": 8408,
+ "78": 8409,
+ "##ion": 8410,
+ "77": 8411,
+ "6000": 8412,
+ "am": 8413,
+ "##th": 8414,
+ "##st": 8415,
+ "94": 8416,
+ "##se": 8417,
+ "##et": 8418,
+ "69": 8419,
+ "180": 8420,
+ "gdp": 8421,
+ "my": 8422,
+ "105": 8423,
+ "81": 8424,
+ "abc": 8425,
+ "89": 8426,
+ "flash": 8427,
+ "79": 8428,
+ "one": 8429,
+ "93": 8430,
+ "1990": 8431,
+ "1996": 8432,
+ "##ck": 8433,
+ "gps": 8434,
+ "##も": 8435,
+ "##ly": 8436,
+ "web885": 8437,
+ "106": 8438,
+ "2020": 8439,
+ "91": 8440,
+ "##ge": 8441,
+ "4000": 8442,
+ "1500": 8443,
+ "xd": 8444,
+ "boss": 8445,
+ "isbn": 8446,
+ "1994": 8447,
+ "org": 8448,
+ "##ry": 8449,
+ "me": 8450,
+ "love": 8451,
+ "##11": 8452,
+ "0fork": 8453,
+ "73": 8454,
+ "##12": 8455,
+ "3g": 8456,
+ "##ter": 8457,
+ "##ar": 8458,
+ "71": 8459,
+ "82": 8460,
+ "##la": 8461,
+ "hotel": 8462,
+ "130": 8463,
+ "1970": 8464,
+ "pk": 8465,
+ "83": 8466,
+ "87": 8467,
+ "140": 8468,
+ "ie": 8469,
+ "##os": 8470,
+ "##30": 8471,
+ "##el": 8472,
+ "74": 8473,
+ "##50": 8474,
+ "seo": 8475,
+ "cpu": 8476,
+ "##ml": 8477,
+ "p2p": 8478,
+ "84": 8479,
+ "may": 8480,
+ "##る": 8481,
+ "sun": 8482,
+ "tue": 8483,
+ "internet": 8484,
+ "cc": 8485,
+ "posted": 8486,
+ "youtube": 8487,
+ "##at": 8488,
+ "##ン": 8489,
+ "##man": 8490,
+ "ii": 8491,
+ "##ル": 8492,
+ "##15": 8493,
+ "abs": 8494,
+ "nt": 8495,
+ "pdf": 8496,
+ "yahoo": 8497,
+ "ago": 8498,
+ "1980": 8499,
+ "##it": 8500,
+ "news": 8501,
+ "mac": 8502,
+ "104": 8503,
+ "##てす": 8504,
+ "##me": 8505,
+ "##り": 8506,
+ "java": 8507,
+ "1992": 8508,
+ "spa": 8509,
+ "##de": 8510,
+ "##nt": 8511,
+ "hk": 8512,
+ "all": 8513,
+ "plus": 8514,
+ "la": 8515,
+ "1993": 8516,
+ "##mb": 8517,
+ "##16": 8518,
+ "##ve": 8519,
+ "west": 8520,
+ "##da": 8521,
+ "160": 8522,
+ "air": 8523,
+ "##い": 8524,
+ "##ps": 8525,
+ "から": 8526,
+ "##to": 8527,
+ "1989": 8528,
+ "logo": 8529,
+ "htc": 8530,
+ "php": 8531,
+ "https": 8532,
+ "fi": 8533,
+ "momo": 8534,
+ "##son": 8535,
+ "sat": 8536,
+ "##ke": 8537,
+ "##80": 8538,
+ "ebd": 8539,
+ "suv": 8540,
+ "wi": 8541,
+ "day": 8542,
+ "apk": 8543,
+ "##88": 8544,
+ "##um": 8545,
+ "mv": 8546,
+ "galaxy": 8547,
+ "wiki": 8548,
+ "or": 8549,
+ "brake": 8550,
+ "##ス": 8551,
+ "1200": 8552,
+ "する": 8553,
+ "this": 8554,
+ "1991": 8555,
+ "mon": 8556,
+ "##こ": 8557,
+ "❤2017": 8558,
+ "po": 8559,
+ "##ない": 8560,
+ "javascript": 8561,
+ "life": 8562,
+ "home": 8563,
+ "june": 8564,
+ "##ss": 8565,
+ "system": 8566,
+ "900": 8567,
+ "##ー": 8568,
+ "##0": 8569,
+ "pp": 8570,
+ "1988": 8571,
+ "world": 8572,
+ "fb": 8573,
+ "4k": 8574,
+ "br": 8575,
+ "##as": 8576,
+ "ic": 8577,
+ "ai": 8578,
+ "leonardo": 8579,
+ "safari": 8580,
+ "##60": 8581,
+ "live": 8582,
+ "free": 8583,
+ "xx": 8584,
+ "wed": 8585,
+ "win7": 8586,
+ "kiehl": 8587,
+ "##co": 8588,
+ "lg": 8589,
+ "o2o": 8590,
+ "##go": 8591,
+ "us": 8592,
+ "235": 8593,
+ "1949": 8594,
+ "mm": 8595,
+ "しい": 8596,
+ "vfm": 8597,
+ "kanye": 8598,
+ "##90": 8599,
+ "##2015": 8600,
+ "##id": 8601,
+ "jr": 8602,
+ "##ey": 8603,
+ "123": 8604,
+ "rss": 8605,
+ "##sa": 8606,
+ "##ro": 8607,
+ "##am": 8608,
+ "##no": 8609,
+ "thu": 8610,
+ "fri": 8611,
+ "350": 8612,
+ "##sh": 8613,
+ "##ki": 8614,
+ "103": 8615,
+ "comments": 8616,
+ "name": 8617,
+ "##のて": 8618,
+ "##pe": 8619,
+ "##ine": 8620,
+ "max": 8621,
+ "1987": 8622,
+ "8000": 8623,
+ "uber": 8624,
+ "##mi": 8625,
+ "##ton": 8626,
+ "wordpress": 8627,
+ "office": 8628,
+ "1986": 8629,
+ "1985": 8630,
+ "##ment": 8631,
+ "107": 8632,
+ "bd": 8633,
+ "win10": 8634,
+ "##ld": 8635,
+ "##li": 8636,
+ "gmail": 8637,
+ "bb": 8638,
+ "dior": 8639,
+ "##rs": 8640,
+ "##ri": 8641,
+ "##rd": 8642,
+ "##ます": 8643,
+ "up": 8644,
+ "cad": 8645,
+ "##®": 8646,
+ "dr": 8647,
+ "して": 8648,
+ "read": 8649,
+ "##21": 8650,
+ "をお": 8651,
+ "##io": 8652,
+ "##99": 8653,
+ "url": 8654,
+ "1984": 8655,
+ "pvc": 8656,
+ "paypal": 8657,
+ "show": 8658,
+ "policy": 8659,
+ "##40": 8660,
+ "##ty": 8661,
+ "##18": 8662,
+ "with": 8663,
+ "##★": 8664,
+ "##01": 8665,
+ "txt": 8666,
+ "102": 8667,
+ "##ba": 8668,
+ "dna": 8669,
+ "from": 8670,
+ "post": 8671,
+ "mini": 8672,
+ "ar": 8673,
+ "taiwan": 8674,
+ "john": 8675,
+ "##ga": 8676,
+ "privacy": 8677,
+ "agoda": 8678,
+ "##13": 8679,
+ "##ny": 8680,
+ "word": 8681,
+ "##24": 8682,
+ "##22": 8683,
+ "##by": 8684,
+ "##ur": 8685,
+ "##hz": 8686,
+ "1982": 8687,
+ "##ang": 8688,
+ "265": 8689,
+ "cookie": 8690,
+ "netscape": 8691,
+ "108": 8692,
+ "##ka": 8693,
+ "##~": 8694,
+ "##ad": 8695,
+ "house": 8696,
+ "share": 8697,
+ "note": 8698,
+ "ibm": 8699,
+ "code": 8700,
+ "hello": 8701,
+ "nike": 8702,
+ "sim": 8703,
+ "survey": 8704,
+ "##016": 8705,
+ "1979": 8706,
+ "1950": 8707,
+ "wikia": 8708,
+ "##32": 8709,
+ "##017": 8710,
+ "5g": 8711,
+ "cbc": 8712,
+ "##tor": 8713,
+ "##kg": 8714,
+ "1983": 8715,
+ "##rt": 8716,
+ "##14": 8717,
+ "campaign": 8718,
+ "store": 8719,
+ "2500": 8720,
+ "os": 8721,
+ "##ct": 8722,
+ "##ts": 8723,
+ "##°": 8724,
+ "170": 8725,
+ "api": 8726,
+ "##ns": 8727,
+ "365": 8728,
+ "excel": 8729,
+ "##な": 8730,
+ "##ao": 8731,
+ "##ら": 8732,
+ "##し": 8733,
+ "~~": 8734,
+ "##nd": 8735,
+ "university": 8736,
+ "163": 8737,
+ "には": 8738,
+ "518": 8739,
+ "##70": 8740,
+ "##ya": 8741,
+ "##il": 8742,
+ "##25": 8743,
+ "pierre": 8744,
+ "ipo": 8745,
+ "0020": 8746,
+ "897": 8747,
+ "##23": 8748,
+ "hotels": 8749,
+ "##ian": 8750,
+ "のお": 8751,
+ "125": 8752,
+ "years": 8753,
+ "6606": 8754,
+ "##ers": 8755,
+ "##26": 8756,
+ "high": 8757,
+ "##day": 8758,
+ "time": 8759,
+ "##ay": 8760,
+ "bug": 8761,
+ "##line": 8762,
+ "##く": 8763,
+ "##す": 8764,
+ "##be": 8765,
+ "xp": 8766,
+ "talk2yam": 8767,
+ "yamservice": 8768,
+ "10000": 8769,
+ "coco": 8770,
+ "##dy": 8771,
+ "sony": 8772,
+ "##ies": 8773,
+ "1978": 8774,
+ "microsoft": 8775,
+ "david": 8776,
+ "people": 8777,
+ "##ha": 8778,
+ "1960": 8779,
+ "instagram": 8780,
+ "intel": 8781,
+ "その": 8782,
+ "##ot": 8783,
+ "iso": 8784,
+ "1981": 8785,
+ "##va": 8786,
+ "115": 8787,
+ "##mo": 8788,
+ "##land": 8789,
+ "xxx": 8790,
+ "man": 8791,
+ "co": 8792,
+ "ltxsw": 8793,
+ "##ation": 8794,
+ "baby": 8795,
+ "220": 8796,
+ "##pa": 8797,
+ "##ol": 8798,
+ "1945": 8799,
+ "7000": 8800,
+ "tag": 8801,
+ "450": 8802,
+ "##ue": 8803,
+ "msn": 8804,
+ "##31": 8805,
+ "oppo": 8806,
+ "##ト": 8807,
+ "##ca": 8808,
+ "control": 8809,
+ "##om": 8810,
+ "st": 8811,
+ "chrome": 8812,
+ "##ure": 8813,
+ "##ん": 8814,
+ "be": 8815,
+ "##き": 8816,
+ "lol": 8817,
+ "##19": 8818,
+ "した": 8819,
+ "##bo": 8820,
+ "240": 8821,
+ "lady": 8822,
+ "##100": 8823,
+ "##way": 8824,
+ "##から": 8825,
+ "4600": 8826,
+ "##ko": 8827,
+ "##do": 8828,
+ "##un": 8829,
+ "4s": 8830,
+ "corporation": 8831,
+ "168": 8832,
+ "##ni": 8833,
+ "herme": 8834,
+ "##28": 8835,
+ "cp": 8836,
+ "978": 8837,
+ "##up": 8838,
+ "##06": 8839,
+ "ui": 8840,
+ "##ds": 8841,
+ "ppt": 8842,
+ "admin": 8843,
+ "three": 8844,
+ "します": 8845,
+ "bbc": 8846,
+ "re": 8847,
+ "128": 8848,
+ "##48": 8849,
+ "ca": 8850,
+ "##015": 8851,
+ "##35": 8852,
+ "hp": 8853,
+ "##ee": 8854,
+ "tpp": 8855,
+ "##た": 8856,
+ "##ive": 8857,
+ "××": 8858,
+ "root": 8859,
+ "##cc": 8860,
+ "##ました": 8861,
+ "##ble": 8862,
+ "##ity": 8863,
+ "adobe": 8864,
+ "park": 8865,
+ "114": 8866,
+ "et": 8867,
+ "oled": 8868,
+ "city": 8869,
+ "##ex": 8870,
+ "##ler": 8871,
+ "##ap": 8872,
+ "china": 8873,
+ "##book": 8874,
+ "20000": 8875,
+ "view": 8876,
+ "##ice": 8877,
+ "global": 8878,
+ "##km": 8879,
+ "your": 8880,
+ "hong": 8881,
+ "##mg": 8882,
+ "out": 8883,
+ "##ms": 8884,
+ "ng": 8885,
+ "ebay": 8886,
+ "##29": 8887,
+ "menu": 8888,
+ "ubuntu": 8889,
+ "##cy": 8890,
+ "rom": 8891,
+ "##view": 8892,
+ "open": 8893,
+ "ktv": 8894,
+ "do": 8895,
+ "server": 8896,
+ "##lo": 8897,
+ "if": 8898,
+ "english": 8899,
+ "##ね": 8900,
+ "##5": 8901,
+ "##oo": 8902,
+ "1600": 8903,
+ "##02": 8904,
+ "step1": 8905,
+ "kong": 8906,
+ "club": 8907,
+ "135": 8908,
+ "july": 8909,
+ "inc": 8910,
+ "1976": 8911,
+ "mr": 8912,
+ "hi": 8913,
+ "##net": 8914,
+ "touch": 8915,
+ "##ls": 8916,
+ "##ii": 8917,
+ "michael": 8918,
+ "lcd": 8919,
+ "##05": 8920,
+ "##33": 8921,
+ "phone": 8922,
+ "james": 8923,
+ "step2": 8924,
+ "1300": 8925,
+ "ios9": 8926,
+ "##box": 8927,
+ "dc": 8928,
+ "##2": 8929,
+ "##ley": 8930,
+ "samsung": 8931,
+ "111": 8932,
+ "280": 8933,
+ "pokemon": 8934,
+ "css": 8935,
+ "##ent": 8936,
+ "##les": 8937,
+ "いいえ": 8938,
+ "##1": 8939,
+ "s8": 8940,
+ "atom": 8941,
+ "play": 8942,
+ "bmw": 8943,
+ "##said": 8944,
+ "sa": 8945,
+ "etf": 8946,
+ "ctrl": 8947,
+ "♥yoyo♥": 8948,
+ "##55": 8949,
+ "2025": 8950,
+ "##2014": 8951,
+ "##66": 8952,
+ "adidas": 8953,
+ "amazon": 8954,
+ "1958": 8955,
+ "##ber": 8956,
+ "##ner": 8957,
+ "visa": 8958,
+ "##77": 8959,
+ "##der": 8960,
+ "1800": 8961,
+ "connectivity": 8962,
+ "##hi": 8963,
+ "firefox": 8964,
+ "109": 8965,
+ "118": 8966,
+ "hr": 8967,
+ "so": 8968,
+ "style": 8969,
+ "mark": 8970,
+ "pop": 8971,
+ "ol": 8972,
+ "skip": 8973,
+ "1975": 8974,
+ "as": 8975,
+ "##27": 8976,
+ "##ir": 8977,
+ "##61": 8978,
+ "190": 8979,
+ "mba": 8980,
+ "##う": 8981,
+ "##ai": 8982,
+ "le": 8983,
+ "##ver": 8984,
+ "1900": 8985,
+ "cafe2017": 8986,
+ "lte": 8987,
+ "super": 8988,
+ "113": 8989,
+ "129": 8990,
+ "##ron": 8991,
+ "amd": 8992,
+ "like": 8993,
+ "##☆": 8994,
+ "are": 8995,
+ "##ster": 8996,
+ "we": 8997,
+ "##sk": 8998,
+ "paul": 8999,
+ "data": 9000,
+ "international": 9001,
+ "##ft": 9002,
+ "longchamp": 9003,
+ "ssd": 9004,
+ "good": 9005,
+ "##ート": 9006,
+ "##ti": 9007,
+ "reply": 9008,
+ "##my": 9009,
+ "↓↓↓": 9010,
+ "apr": 9011,
+ "star": 9012,
+ "##ker": 9013,
+ "source": 9014,
+ "136": 9015,
+ "js": 9016,
+ "112": 9017,
+ "get": 9018,
+ "force": 9019,
+ "photo": 9020,
+ "##one": 9021,
+ "126": 9022,
+ "##2013": 9023,
+ "##ow": 9024,
+ "link": 9025,
+ "bbs": 9026,
+ "1972": 9027,
+ "goods": 9028,
+ "##lin": 9029,
+ "python": 9030,
+ "119": 9031,
+ "##ip": 9032,
+ "game": 9033,
+ "##ics": 9034,
+ "##ません": 9035,
+ "blue": 9036,
+ "##●": 9037,
+ "520": 9038,
+ "##45": 9039,
+ "page": 9040,
+ "itunes": 9041,
+ "##03": 9042,
+ "1955": 9043,
+ "260": 9044,
+ "1968": 9045,
+ "gt": 9046,
+ "gif": 9047,
+ "618": 9048,
+ "##ff": 9049,
+ "##47": 9050,
+ "group": 9051,
+ "くたさい": 9052,
+ "about": 9053,
+ "bar": 9054,
+ "ganji": 9055,
+ "##nce": 9056,
+ "music": 9057,
+ "lee": 9058,
+ "not": 9059,
+ "1977": 9060,
+ "1971": 9061,
+ "1973": 9062,
+ "##per": 9063,
+ "an": 9064,
+ "faq": 9065,
+ "comment": 9066,
+ "##って": 9067,
+ "days": 9068,
+ "##ock": 9069,
+ "116": 9070,
+ "##bs": 9071,
+ "1974": 9072,
+ "1969": 9073,
+ "v1": 9074,
+ "player": 9075,
+ "1956": 9076,
+ "xbox": 9077,
+ "sql": 9078,
+ "fm": 9079,
+ "f1": 9080,
+ "139": 9081,
+ "##ah": 9082,
+ "210": 9083,
+ "##lv": 9084,
+ "##mp": 9085,
+ "##000": 9086,
+ "melody": 9087,
+ "1957": 9088,
+ "##3": 9089,
+ "550": 9090,
+ "17life": 9091,
+ "199": 9092,
+ "1966": 9093,
+ "xml": 9094,
+ "market": 9095,
+ "##au": 9096,
+ "##71": 9097,
+ "999": 9098,
+ "##04": 9099,
+ "what": 9100,
+ "gl": 9101,
+ "##95": 9102,
+ "##age": 9103,
+ "tips": 9104,
+ "##68": 9105,
+ "book": 9106,
+ "##ting": 9107,
+ "mysql": 9108,
+ "can": 9109,
+ "1959": 9110,
+ "230": 9111,
+ "##ung": 9112,
+ "wonderland": 9113,
+ "watch": 9114,
+ "10℃": 9115,
+ "##ction": 9116,
+ "9000": 9117,
+ "mar": 9118,
+ "mobile": 9119,
+ "1946": 9120,
+ "1962": 9121,
+ "article": 9122,
+ "##db": 9123,
+ "part": 9124,
+ "▲top": 9125,
+ "party": 9126,
+ "って": 9127,
+ "1967": 9128,
+ "1964": 9129,
+ "1948": 9130,
+ "##07": 9131,
+ "##ore": 9132,
+ "##op": 9133,
+ "この": 9134,
+ "dj": 9135,
+ "##78": 9136,
+ "##38": 9137,
+ "010": 9138,
+ "main": 9139,
+ "225": 9140,
+ "1965": 9141,
+ "##ong": 9142,
+ "art": 9143,
+ "320": 9144,
+ "ad": 9145,
+ "134": 9146,
+ "020": 9147,
+ "##73": 9148,
+ "117": 9149,
+ "pm2": 9150,
+ "japan": 9151,
+ "228": 9152,
+ "##08": 9153,
+ "ts": 9154,
+ "1963": 9155,
+ "##ica": 9156,
+ "der": 9157,
+ "sm": 9158,
+ "##36": 9159,
+ "2019": 9160,
+ "##wa": 9161,
+ "ct": 9162,
+ "##7": 9163,
+ "##や": 9164,
+ "##64": 9165,
+ "1937": 9166,
+ "homemesh": 9167,
+ "search": 9168,
+ "##85": 9169,
+ "##れは": 9170,
+ "##tv": 9171,
+ "##di": 9172,
+ "macbook": 9173,
+ "##9": 9174,
+ "##くたさい": 9175,
+ "service": 9176,
+ "##♥": 9177,
+ "type": 9178,
+ "った": 9179,
+ "750": 9180,
+ "##ier": 9181,
+ "##si": 9182,
+ "##75": 9183,
+ "##います": 9184,
+ "##ok": 9185,
+ "best": 9186,
+ "##ット": 9187,
+ "goris": 9188,
+ "lock": 9189,
+ "##った": 9190,
+ "cf": 9191,
+ "3m": 9192,
+ "big": 9193,
+ "##ut": 9194,
+ "ftp": 9195,
+ "carol": 9196,
+ "##vi": 9197,
+ "10": 9198,
+ "1961": 9199,
+ "happy": 9200,
+ "sd": 9201,
+ "##ac": 9202,
+ "122": 9203,
+ "anti": 9204,
+ "pe": 9205,
+ "cnn": 9206,
+ "iii": 9207,
+ "1920": 9208,
+ "138": 9209,
+ "##ラ": 9210,
+ "1940": 9211,
+ "esp": 9212,
+ "jan": 9213,
+ "tags": 9214,
+ "##98": 9215,
+ "##51": 9216,
+ "august": 9217,
+ "vol": 9218,
+ "##86": 9219,
+ "154": 9220,
+ "##™": 9221,
+ "##fs": 9222,
+ "##れ": 9223,
+ "##sion": 9224,
+ "design": 9225,
+ "ac": 9226,
+ "##ム": 9227,
+ "press": 9228,
+ "jordan": 9229,
+ "ppp": 9230,
+ "that": 9231,
+ "key": 9232,
+ "check": 9233,
+ "##6": 9234,
+ "##tt": 9235,
+ "##㎡": 9236,
+ "1080p": 9237,
+ "##lt": 9238,
+ "power": 9239,
+ "##42": 9240,
+ "1952": 9241,
+ "##bc": 9242,
+ "vivi": 9243,
+ "##ック": 9244,
+ "he": 9245,
+ "133": 9246,
+ "121": 9247,
+ "jpg": 9248,
+ "##rry": 9249,
+ "201": 9250,
+ "175": 9251,
+ "3500": 9252,
+ "1947": 9253,
+ "nb": 9254,
+ "##ted": 9255,
+ "##rn": 9256,
+ "しています": 9257,
+ "1954": 9258,
+ "usd": 9259,
+ "##t00": 9260,
+ "master": 9261,
+ "##ンク": 9262,
+ "001": 9263,
+ "model": 9264,
+ "##58": 9265,
+ "al": 9266,
+ "##09": 9267,
+ "1953": 9268,
+ "##34": 9269,
+ "ram": 9270,
+ "goo": 9271,
+ "ても": 9272,
+ "##ui": 9273,
+ "127": 9274,
+ "1930": 9275,
+ "red": 9276,
+ "##ary": 9277,
+ "rpg": 9278,
+ "item": 9279,
+ "##pm": 9280,
+ "##41": 9281,
+ "270": 9282,
+ "##za": 9283,
+ "project": 9284,
+ "##2012": 9285,
+ "hot": 9286,
+ "td": 9287,
+ "blogabstract": 9288,
+ "##ger": 9289,
+ "##62": 9290,
+ "650": 9291,
+ "##44": 9292,
+ "gr2": 9293,
+ "##します": 9294,
+ "##m": 9295,
+ "black": 9296,
+ "electronic": 9297,
+ "nfc": 9298,
+ "year": 9299,
+ "asus": 9300,
+ "また": 9301,
+ "html5": 9302,
+ "cindy": 9303,
+ "##hd": 9304,
+ "m3": 9305,
+ "132": 9306,
+ "esc": 9307,
+ "##od": 9308,
+ "booking": 9309,
+ "##53": 9310,
+ "fed": 9311,
+ "tvb": 9312,
+ "##81": 9313,
+ "##ina": 9314,
+ "mit": 9315,
+ "165": 9316,
+ "##いる": 9317,
+ "chan": 9318,
+ "192": 9319,
+ "distribution": 9320,
+ "next": 9321,
+ "になる": 9322,
+ "peter": 9323,
+ "bios": 9324,
+ "steam": 9325,
+ "cm": 9326,
+ "1941": 9327,
+ "にも": 9328,
+ "pk10": 9329,
+ "##ix": 9330,
+ "##65": 9331,
+ "##91": 9332,
+ "dec": 9333,
+ "nasa": 9334,
+ "##ana": 9335,
+ "icecat": 9336,
+ "00z": 9337,
+ "b1": 9338,
+ "will": 9339,
+ "##46": 9340,
+ "li": 9341,
+ "se": 9342,
+ "##ji": 9343,
+ "##み": 9344,
+ "##ard": 9345,
+ "oct": 9346,
+ "##ain": 9347,
+ "jp": 9348,
+ "##ze": 9349,
+ "##bi": 9350,
+ "cio": 9351,
+ "##56": 9352,
+ "smart": 9353,
+ "h5": 9354,
+ "##39": 9355,
+ "##port": 9356,
+ "curve": 9357,
+ "vpn": 9358,
+ "##nm": 9359,
+ "##dia": 9360,
+ "utc": 9361,
+ "##あり": 9362,
+ "12345678910": 9363,
+ "##52": 9364,
+ "rmvb": 9365,
+ "chanel": 9366,
+ "a4": 9367,
+ "miss": 9368,
+ "##and": 9369,
+ "##im": 9370,
+ "media": 9371,
+ "who": 9372,
+ "##63": 9373,
+ "she": 9374,
+ "girl": 9375,
+ "5s": 9376,
+ "124": 9377,
+ "vera": 9378,
+ "##して": 9379,
+ "class": 9380,
+ "vivo": 9381,
+ "king": 9382,
+ "##フ": 9383,
+ "##ei": 9384,
+ "national": 9385,
+ "ab": 9386,
+ "1951": 9387,
+ "5cm": 9388,
+ "888": 9389,
+ "145": 9390,
+ "ipod": 9391,
+ "ap": 9392,
+ "1100": 9393,
+ "5mm": 9394,
+ "211": 9395,
+ "ms": 9396,
+ "2756": 9397,
+ "##69": 9398,
+ "mp4": 9399,
+ "msci": 9400,
+ "##po": 9401,
+ "##89": 9402,
+ "131": 9403,
+ "mg": 9404,
+ "index": 9405,
+ "380": 9406,
+ "##bit": 9407,
+ "##out": 9408,
+ "##zz": 9409,
+ "##97": 9410,
+ "##67": 9411,
+ "158": 9412,
+ "apec": 9413,
+ "##8": 9414,
+ "photoshop": 9415,
+ "opec": 9416,
+ "¥799": 9417,
+ "ては": 9418,
+ "##96": 9419,
+ "##tes": 9420,
+ "##ast": 9421,
+ "2g": 9422,
+ "○○": 9423,
+ "##ール": 9424,
+ "¥2899": 9425,
+ "##ling": 9426,
+ "##よ": 9427,
+ "##ory": 9428,
+ "1938": 9429,
+ "##ical": 9430,
+ "kitty": 9431,
+ "content": 9432,
+ "##43": 9433,
+ "step3": 9434,
+ "##cn": 9435,
+ "win8": 9436,
+ "155": 9437,
+ "vc": 9438,
+ "1400": 9439,
+ "iphone7": 9440,
+ "robert": 9441,
+ "##した": 9442,
+ "tcl": 9443,
+ "137": 9444,
+ "beauty": 9445,
+ "##87": 9446,
+ "en": 9447,
+ "dollars": 9448,
+ "##ys": 9449,
+ "##oc": 9450,
+ "step": 9451,
+ "pay": 9452,
+ "yy": 9453,
+ "a1": 9454,
+ "##2011": 9455,
+ "##lly": 9456,
+ "##ks": 9457,
+ "##♪": 9458,
+ "1939": 9459,
+ "188": 9460,
+ "download": 9461,
+ "1944": 9462,
+ "sep": 9463,
+ "exe": 9464,
+ "ph": 9465,
+ "います": 9466,
+ "school": 9467,
+ "gb": 9468,
+ "center": 9469,
+ "pr": 9470,
+ "street": 9471,
+ "##board": 9472,
+ "uv": 9473,
+ "##37": 9474,
+ "##lan": 9475,
+ "winrar": 9476,
+ "##que": 9477,
+ "##ua": 9478,
+ "##com": 9479,
+ "1942": 9480,
+ "1936": 9481,
+ "480": 9482,
+ "gpu": 9483,
+ "##4": 9484,
+ "ettoday": 9485,
+ "fu": 9486,
+ "tom": 9487,
+ "##54": 9488,
+ "##ren": 9489,
+ "##via": 9490,
+ "149": 9491,
+ "##72": 9492,
+ "b2b": 9493,
+ "144": 9494,
+ "##79": 9495,
+ "##tch": 9496,
+ "rose": 9497,
+ "arm": 9498,
+ "mb": 9499,
+ "##49": 9500,
+ "##ial": 9501,
+ "##nn": 9502,
+ "nvidia": 9503,
+ "step4": 9504,
+ "mvp": 9505,
+ "00㎡": 9506,
+ "york": 9507,
+ "156": 9508,
+ "##イ": 9509,
+ "how": 9510,
+ "cpi": 9511,
+ "591": 9512,
+ "2765": 9513,
+ "gov": 9514,
+ "kg": 9515,
+ "joe": 9516,
+ "##xx": 9517,
+ "mandy": 9518,
+ "pa": 9519,
+ "##ser": 9520,
+ "copyright": 9521,
+ "fashion": 9522,
+ "1935": 9523,
+ "don": 9524,
+ "##け": 9525,
+ "ecu": 9526,
+ "##ist": 9527,
+ "##art": 9528,
+ "erp": 9529,
+ "wap": 9530,
+ "have": 9531,
+ "##lm": 9532,
+ "talk": 9533,
+ "##ek": 9534,
+ "##ning": 9535,
+ "##if": 9536,
+ "ch": 9537,
+ "##ite": 9538,
+ "video": 9539,
+ "1943": 9540,
+ "cs": 9541,
+ "san": 9542,
+ "iot": 9543,
+ "look": 9544,
+ "##84": 9545,
+ "##2010": 9546,
+ "##ku": 9547,
+ "october": 9548,
+ "##ux": 9549,
+ "trump": 9550,
+ "##hs": 9551,
+ "##ide": 9552,
+ "box": 9553,
+ "141": 9554,
+ "first": 9555,
+ "##ins": 9556,
+ "april": 9557,
+ "##ight": 9558,
+ "##83": 9559,
+ "185": 9560,
+ "angel": 9561,
+ "protected": 9562,
+ "aa": 9563,
+ "151": 9564,
+ "162": 9565,
+ "x1": 9566,
+ "m2": 9567,
+ "##fe": 9568,
+ "##×": 9569,
+ "##ho": 9570,
+ "size": 9571,
+ "143": 9572,
+ "min": 9573,
+ "ofo": 9574,
+ "fun": 9575,
+ "gomaji": 9576,
+ "ex": 9577,
+ "hdmi": 9578,
+ "food": 9579,
+ "dns": 9580,
+ "march": 9581,
+ "chris": 9582,
+ "kevin": 9583,
+ "##のか": 9584,
+ "##lla": 9585,
+ "##pp": 9586,
+ "##ec": 9587,
+ "ag": 9588,
+ "ems": 9589,
+ "6s": 9590,
+ "720p": 9591,
+ "##rm": 9592,
+ "##ham": 9593,
+ "off": 9594,
+ "##92": 9595,
+ "asp": 9596,
+ "team": 9597,
+ "fandom": 9598,
+ "ed": 9599,
+ "299": 9600,
+ "▌♥": 9601,
+ "##ell": 9602,
+ "info": 9603,
+ "されています": 9604,
+ "##82": 9605,
+ "sina": 9606,
+ "4066": 9607,
+ "161": 9608,
+ "##able": 9609,
+ "##ctor": 9610,
+ "330": 9611,
+ "399": 9612,
+ "315": 9613,
+ "dll": 9614,
+ "rights": 9615,
+ "ltd": 9616,
+ "idc": 9617,
+ "jul": 9618,
+ "3kg": 9619,
+ "1927": 9620,
+ "142": 9621,
+ "ma": 9622,
+ "surface": 9623,
+ "##76": 9624,
+ "##ク": 9625,
+ "~~~": 9626,
+ "304": 9627,
+ "mall": 9628,
+ "eps": 9629,
+ "146": 9630,
+ "green": 9631,
+ "##59": 9632,
+ "map": 9633,
+ "space": 9634,
+ "donald": 9635,
+ "v2": 9636,
+ "sodu": 9637,
+ "##light": 9638,
+ "1931": 9639,
+ "148": 9640,
+ "1700": 9641,
+ "まて": 9642,
+ "310": 9643,
+ "reserved": 9644,
+ "htm": 9645,
+ "##han": 9646,
+ "##57": 9647,
+ "2d": 9648,
+ "178": 9649,
+ "mod": 9650,
+ "##ise": 9651,
+ "##tions": 9652,
+ "152": 9653,
+ "ti": 9654,
+ "##shi": 9655,
+ "doc": 9656,
+ "1933": 9657,
+ "icp": 9658,
+ "055": 9659,
+ "wang": 9660,
+ "##ram": 9661,
+ "shopping": 9662,
+ "aug": 9663,
+ "##pi": 9664,
+ "##well": 9665,
+ "now": 9666,
+ "wam": 9667,
+ "b2": 9668,
+ "からお": 9669,
+ "##hu": 9670,
+ "236": 9671,
+ "1928": 9672,
+ "##gb": 9673,
+ "266": 9674,
+ "f2": 9675,
+ "##93": 9676,
+ "153": 9677,
+ "mix": 9678,
+ "##ef": 9679,
+ "##uan": 9680,
+ "bwl": 9681,
+ "##plus": 9682,
+ "##res": 9683,
+ "core": 9684,
+ "##ess": 9685,
+ "tea": 9686,
+ "5℃": 9687,
+ "hktvmall": 9688,
+ "nhk": 9689,
+ "##ate": 9690,
+ "list": 9691,
+ "##ese": 9692,
+ "301": 9693,
+ "feb": 9694,
+ "4m": 9695,
+ "inn": 9696,
+ "ての": 9697,
+ "nov": 9698,
+ "159": 9699,
+ "12345": 9700,
+ "daniel": 9701,
+ "##ci": 9702,
+ "pass": 9703,
+ "##bet": 9704,
+ "##nk": 9705,
+ "coffee": 9706,
+ "202": 9707,
+ "ssl": 9708,
+ "airbnb": 9709,
+ "##ute": 9710,
+ "fbi": 9711,
+ "woshipm": 9712,
+ "skype": 9713,
+ "ea": 9714,
+ "cg": 9715,
+ "sp": 9716,
+ "##fc": 9717,
+ "##www": 9718,
+ "yes": 9719,
+ "edge": 9720,
+ "alt": 9721,
+ "007": 9722,
+ "##94": 9723,
+ "fpga": 9724,
+ "##ght": 9725,
+ "##gs": 9726,
+ "iso9001": 9727,
+ "さい": 9728,
+ "##ile": 9729,
+ "##wood": 9730,
+ "##uo": 9731,
+ "image": 9732,
+ "lin": 9733,
+ "icon": 9734,
+ "american": 9735,
+ "##em": 9736,
+ "1932": 9737,
+ "set": 9738,
+ "says": 9739,
+ "##king": 9740,
+ "##tive": 9741,
+ "blogger": 9742,
+ "##74": 9743,
+ "なと": 9744,
+ "256": 9745,
+ "147": 9746,
+ "##ox": 9747,
+ "##zy": 9748,
+ "##red": 9749,
+ "##ium": 9750,
+ "##lf": 9751,
+ "nokia": 9752,
+ "claire": 9753,
+ "##リ": 9754,
+ "##ding": 9755,
+ "november": 9756,
+ "lohas": 9757,
+ "##500": 9758,
+ "##tic": 9759,
+ "##マ": 9760,
+ "##cs": 9761,
+ "##ある": 9762,
+ "##che": 9763,
+ "##ire": 9764,
+ "##gy": 9765,
+ "##ult": 9766,
+ "db": 9767,
+ "january": 9768,
+ "win": 9769,
+ "##カ": 9770,
+ "166": 9771,
+ "road": 9772,
+ "ptt": 9773,
+ "##ま": 9774,
+ "##つ": 9775,
+ "198": 9776,
+ "##fa": 9777,
+ "##mer": 9778,
+ "anna": 9779,
+ "pchome": 9780,
+ "はい": 9781,
+ "udn": 9782,
+ "ef": 9783,
+ "420": 9784,
+ "##time": 9785,
+ "##tte": 9786,
+ "2030": 9787,
+ "##ア": 9788,
+ "g20": 9789,
+ "white": 9790,
+ "かかります": 9791,
+ "1929": 9792,
+ "308": 9793,
+ "garden": 9794,
+ "eleven": 9795,
+ "di": 9796,
+ "##おります": 9797,
+ "chen": 9798,
+ "309b": 9799,
+ "777": 9800,
+ "172": 9801,
+ "young": 9802,
+ "cosplay": 9803,
+ "ちてない": 9804,
+ "4500": 9805,
+ "bat": 9806,
+ "##123": 9807,
+ "##tra": 9808,
+ "##ては": 9809,
+ "kindle": 9810,
+ "npc": 9811,
+ "steve": 9812,
+ "etc": 9813,
+ "##ern": 9814,
+ "##|": 9815,
+ "call": 9816,
+ "xperia": 9817,
+ "ces": 9818,
+ "travel": 9819,
+ "sk": 9820,
+ "s7": 9821,
+ "##ous": 9822,
+ "1934": 9823,
+ "##int": 9824,
+ "みいたたけます": 9825,
+ "183": 9826,
+ "edu": 9827,
+ "file": 9828,
+ "cho": 9829,
+ "qr": 9830,
+ "##car": 9831,
+ "##our": 9832,
+ "186": 9833,
+ "##ant": 9834,
+ "##d": 9835,
+ "eric": 9836,
+ "1914": 9837,
+ "rends": 9838,
+ "##jo": 9839,
+ "##する": 9840,
+ "mastercard": 9841,
+ "##2000": 9842,
+ "kb": 9843,
+ "##min": 9844,
+ "290": 9845,
+ "##ino": 9846,
+ "vista": 9847,
+ "##ris": 9848,
+ "##ud": 9849,
+ "jack": 9850,
+ "2400": 9851,
+ "##set": 9852,
+ "169": 9853,
+ "pos": 9854,
+ "1912": 9855,
+ "##her": 9856,
+ "##ou": 9857,
+ "taipei": 9858,
+ "しく": 9859,
+ "205": 9860,
+ "beta": 9861,
+ "##ませんか": 9862,
+ "232": 9863,
+ "##fi": 9864,
+ "express": 9865,
+ "255": 9866,
+ "body": 9867,
+ "##ill": 9868,
+ "aphojoy": 9869,
+ "user": 9870,
+ "december": 9871,
+ "meiki": 9872,
+ "##ick": 9873,
+ "tweet": 9874,
+ "richard": 9875,
+ "##av": 9876,
+ "##ᆫ": 9877,
+ "iphone6": 9878,
+ "##dd": 9879,
+ "ちてすか": 9880,
+ "views": 9881,
+ "##mark": 9882,
+ "321": 9883,
+ "pd": 9884,
+ "##00": 9885,
+ "times": 9886,
+ "##▲": 9887,
+ "level": 9888,
+ "##ash": 9889,
+ "10g": 9890,
+ "point": 9891,
+ "5l": 9892,
+ "##ome": 9893,
+ "208": 9894,
+ "koreanmall": 9895,
+ "##ak": 9896,
+ "george": 9897,
+ "q2": 9898,
+ "206": 9899,
+ "wma": 9900,
+ "tcp": 9901,
+ "##200": 9902,
+ "スタッフ": 9903,
+ "full": 9904,
+ "mlb": 9905,
+ "##lle": 9906,
+ "##watch": 9907,
+ "tm": 9908,
+ "run": 9909,
+ "179": 9910,
+ "911": 9911,
+ "smith": 9912,
+ "business": 9913,
+ "##und": 9914,
+ "1919": 9915,
+ "color": 9916,
+ "##tal": 9917,
+ "222": 9918,
+ "171": 9919,
+ "##less": 9920,
+ "moon": 9921,
+ "4399": 9922,
+ "##rl": 9923,
+ "update": 9924,
+ "pcb": 9925,
+ "shop": 9926,
+ "499": 9927,
+ "157": 9928,
+ "little": 9929,
+ "なし": 9930,
+ "end": 9931,
+ "##mhz": 9932,
+ "van": 9933,
+ "dsp": 9934,
+ "easy": 9935,
+ "660": 9936,
+ "##house": 9937,
+ "##key": 9938,
+ "history": 9939,
+ "##o": 9940,
+ "oh": 9941,
+ "##001": 9942,
+ "##hy": 9943,
+ "##web": 9944,
+ "oem": 9945,
+ "let": 9946,
+ "was": 9947,
+ "##2009": 9948,
+ "##gg": 9949,
+ "review": 9950,
+ "##wan": 9951,
+ "182": 9952,
+ "##°c": 9953,
+ "203": 9954,
+ "uc": 9955,
+ "title": 9956,
+ "##val": 9957,
+ "united": 9958,
+ "233": 9959,
+ "2021": 9960,
+ "##ons": 9961,
+ "doi": 9962,
+ "trivago": 9963,
+ "overdope": 9964,
+ "sbs": 9965,
+ "##ance": 9966,
+ "##ち": 9967,
+ "grand": 9968,
+ "special": 9969,
+ "573032185": 9970,
+ "imf": 9971,
+ "216": 9972,
+ "wx17house": 9973,
+ "##so": 9974,
+ "##ーム": 9975,
+ "audi": 9976,
+ "##he": 9977,
+ "london": 9978,
+ "william": 9979,
+ "##rp": 9980,
+ "##ake": 9981,
+ "science": 9982,
+ "beach": 9983,
+ "cfa": 9984,
+ "amp": 9985,
+ "ps4": 9986,
+ "880": 9987,
+ "##800": 9988,
+ "##link": 9989,
+ "##hp": 9990,
+ "crm": 9991,
+ "ferragamo": 9992,
+ "bell": 9993,
+ "make": 9994,
+ "##eng": 9995,
+ "195": 9996,
+ "under": 9997,
+ "zh": 9998,
+ "photos": 9999,
+ "2300": 10000,
+ "##style": 10001,
+ "##ント": 10002,
+ "via": 10003,
+ "176": 10004,
+ "da": 10005,
+ "##gi": 10006,
+ "company": 10007,
+ "i7": 10008,
+ "##ray": 10009,
+ "thomas": 10010,
+ "370": 10011,
+ "ufo": 10012,
+ "i5": 10013,
+ "##max": 10014,
+ "plc": 10015,
+ "ben": 10016,
+ "back": 10017,
+ "research": 10018,
+ "8g": 10019,
+ "173": 10020,
+ "mike": 10021,
+ "##pc": 10022,
+ "##ッフ": 10023,
+ "september": 10024,
+ "189": 10025,
+ "##ace": 10026,
+ "vps": 10027,
+ "february": 10028,
+ "167": 10029,
+ "pantos": 10030,
+ "wp": 10031,
+ "lisa": 10032,
+ "1921": 10033,
+ "★★": 10034,
+ "jquery": 10035,
+ "night": 10036,
+ "long": 10037,
+ "offer": 10038,
+ "##berg": 10039,
+ "##news": 10040,
+ "1911": 10041,
+ "##いて": 10042,
+ "ray": 10043,
+ "fks": 10044,
+ "wto": 10045,
+ "せます": 10046,
+ "over": 10047,
+ "164": 10048,
+ "340": 10049,
+ "##all": 10050,
+ "##rus": 10051,
+ "1924": 10052,
+ "##888": 10053,
+ "##works": 10054,
+ "blogtitle": 10055,
+ "loftpermalink": 10056,
+ "##→": 10057,
+ "187": 10058,
+ "martin": 10059,
+ "test": 10060,
+ "ling": 10061,
+ "km": 10062,
+ "##め": 10063,
+ "15000": 10064,
+ "fda": 10065,
+ "v3": 10066,
+ "##ja": 10067,
+ "##ロ": 10068,
+ "wedding": 10069,
+ "かある": 10070,
+ "outlet": 10071,
+ "family": 10072,
+ "##ea": 10073,
+ "をこ": 10074,
+ "##top": 10075,
+ "story": 10076,
+ "##ness": 10077,
+ "salvatore": 10078,
+ "##lu": 10079,
+ "204": 10080,
+ "swift": 10081,
+ "215": 10082,
+ "room": 10083,
+ "している": 10084,
+ "oracle": 10085,
+ "##ul": 10086,
+ "1925": 10087,
+ "sam": 10088,
+ "b2c": 10089,
+ "week": 10090,
+ "pi": 10091,
+ "rock": 10092,
+ "##のは": 10093,
+ "##a": 10094,
+ "##けと": 10095,
+ "##ean": 10096,
+ "##300": 10097,
+ "##gle": 10098,
+ "cctv": 10099,
+ "after": 10100,
+ "chinese": 10101,
+ "##back": 10102,
+ "powered": 10103,
+ "x2": 10104,
+ "##tan": 10105,
+ "1918": 10106,
+ "##nes": 10107,
+ "##イン": 10108,
+ "canon": 10109,
+ "only": 10110,
+ "181": 10111,
+ "##zi": 10112,
+ "##las": 10113,
+ "say": 10114,
+ "##oe": 10115,
+ "184": 10116,
+ "##sd": 10117,
+ "221": 10118,
+ "##bot": 10119,
+ "##world": 10120,
+ "##zo": 10121,
+ "sky": 10122,
+ "made": 10123,
+ "top100": 10124,
+ "just": 10125,
+ "1926": 10126,
+ "pmi": 10127,
+ "802": 10128,
+ "234": 10129,
+ "gap": 10130,
+ "##vr": 10131,
+ "177": 10132,
+ "les": 10133,
+ "174": 10134,
+ "▲topoct": 10135,
+ "ball": 10136,
+ "vogue": 10137,
+ "vi": 10138,
+ "ing": 10139,
+ "ofweek": 10140,
+ "cos": 10141,
+ "##list": 10142,
+ "##ort": 10143,
+ "▲topmay": 10144,
+ "##なら": 10145,
+ "##lon": 10146,
+ "として": 10147,
+ "last": 10148,
+ "##tc": 10149,
+ "##of": 10150,
+ "##bus": 10151,
+ "##gen": 10152,
+ "real": 10153,
+ "eva": 10154,
+ "##コ": 10155,
+ "a3": 10156,
+ "nas": 10157,
+ "##lie": 10158,
+ "##ria": 10159,
+ "##coin": 10160,
+ "##bt": 10161,
+ "▲topapr": 10162,
+ "his": 10163,
+ "212": 10164,
+ "cat": 10165,
+ "nata": 10166,
+ "vive": 10167,
+ "health": 10168,
+ "⋯⋯": 10169,
+ "drive": 10170,
+ "sir": 10171,
+ "▲topmar": 10172,
+ "du": 10173,
+ "cup": 10174,
+ "##カー": 10175,
+ "##ook": 10176,
+ "##よう": 10177,
+ "##sy": 10178,
+ "alex": 10179,
+ "msg": 10180,
+ "tour": 10181,
+ "しました": 10182,
+ "3ce": 10183,
+ "##word": 10184,
+ "193": 10185,
+ "ebooks": 10186,
+ "r8": 10187,
+ "block": 10188,
+ "318": 10189,
+ "##より": 10190,
+ "2200": 10191,
+ "nice": 10192,
+ "pvp": 10193,
+ "207": 10194,
+ "months": 10195,
+ "1905": 10196,
+ "rewards": 10197,
+ "##ther": 10198,
+ "1917": 10199,
+ "0800": 10200,
+ "##xi": 10201,
+ "##チ": 10202,
+ "##sc": 10203,
+ "micro": 10204,
+ "850": 10205,
+ "gg": 10206,
+ "blogfp": 10207,
+ "op": 10208,
+ "1922": 10209,
+ "daily": 10210,
+ "m1": 10211,
+ "264": 10212,
+ "true": 10213,
+ "##bb": 10214,
+ "ml": 10215,
+ "##tar": 10216,
+ "##のお": 10217,
+ "##ky": 10218,
+ "anthony": 10219,
+ "196": 10220,
+ "253": 10221,
+ "##yo": 10222,
+ "state": 10223,
+ "218": 10224,
+ "##ara": 10225,
+ "##aa": 10226,
+ "##rc": 10227,
+ "##tz": 10228,
+ "##ston": 10229,
+ "より": 10230,
+ "gear": 10231,
+ "##eo": 10232,
+ "##ade": 10233,
+ "ge": 10234,
+ "see": 10235,
+ "1923": 10236,
+ "##win": 10237,
+ "##ura": 10238,
+ "ss": 10239,
+ "heart": 10240,
+ "##den": 10241,
+ "##ita": 10242,
+ "down": 10243,
+ "##sm": 10244,
+ "el": 10245,
+ "png": 10246,
+ "2100": 10247,
+ "610": 10248,
+ "rakuten": 10249,
+ "whatsapp": 10250,
+ "bay": 10251,
+ "dream": 10252,
+ "add": 10253,
+ "##use": 10254,
+ "680": 10255,
+ "311": 10256,
+ "pad": 10257,
+ "gucci": 10258,
+ "mpv": 10259,
+ "##ode": 10260,
+ "##fo": 10261,
+ "island": 10262,
+ "▲topjun": 10263,
+ "##▼": 10264,
+ "223": 10265,
+ "jason": 10266,
+ "214": 10267,
+ "chicago": 10268,
+ "##❤": 10269,
+ "しの": 10270,
+ "##hone": 10271,
+ "io": 10272,
+ "##れる": 10273,
+ "##ことか": 10274,
+ "sogo": 10275,
+ "be2": 10276,
+ "##ology": 10277,
+ "990": 10278,
+ "cloud": 10279,
+ "vcd": 10280,
+ "##con": 10281,
+ "2~3": 10282,
+ "##ford": 10283,
+ "##joy": 10284,
+ "##kb": 10285,
+ "##こさいます": 10286,
+ "##rade": 10287,
+ "but": 10288,
+ "##ach": 10289,
+ "docker": 10290,
+ "##ful": 10291,
+ "rfid": 10292,
+ "ul": 10293,
+ "##ase": 10294,
+ "hit": 10295,
+ "ford": 10296,
+ "##star": 10297,
+ "580": 10298,
+ "##○": 10299,
+ "11": 10300,
+ "a2": 10301,
+ "sdk": 10302,
+ "reading": 10303,
+ "edited": 10304,
+ "##are": 10305,
+ "cmos": 10306,
+ "##mc": 10307,
+ "238": 10308,
+ "siri": 10309,
+ "light": 10310,
+ "##ella": 10311,
+ "##ため": 10312,
+ "bloomberg": 10313,
+ "##read": 10314,
+ "pizza": 10315,
+ "##ison": 10316,
+ "jimmy": 10317,
+ "##vm": 10318,
+ "college": 10319,
+ "node": 10320,
+ "journal": 10321,
+ "ba": 10322,
+ "18k": 10323,
+ "##play": 10324,
+ "245": 10325,
+ "##cer": 10326,
+ "20": 10327,
+ "magic": 10328,
+ "##yu": 10329,
+ "191": 10330,
+ "jump": 10331,
+ "288": 10332,
+ "tt": 10333,
+ "##ings": 10334,
+ "asr": 10335,
+ "##lia": 10336,
+ "3200": 10337,
+ "step5": 10338,
+ "network": 10339,
+ "##cd": 10340,
+ "mc": 10341,
+ "いします": 10342,
+ "1234": 10343,
+ "pixstyleme": 10344,
+ "273": 10345,
+ "##600": 10346,
+ "2800": 10347,
+ "money": 10348,
+ "★★★★★": 10349,
+ "1280": 10350,
+ "12": 10351,
+ "430": 10352,
+ "bl": 10353,
+ "みの": 10354,
+ "act": 10355,
+ "##tus": 10356,
+ "tokyo": 10357,
+ "##rial": 10358,
+ "##life": 10359,
+ "emba": 10360,
+ "##ae": 10361,
+ "saas": 10362,
+ "tcs": 10363,
+ "##rk": 10364,
+ "##wang": 10365,
+ "summer": 10366,
+ "##sp": 10367,
+ "ko": 10368,
+ "##ving": 10369,
+ "390": 10370,
+ "premium": 10371,
+ "##その": 10372,
+ "netflix": 10373,
+ "##ヒ": 10374,
+ "uk": 10375,
+ "mt": 10376,
+ "##lton": 10377,
+ "right": 10378,
+ "frank": 10379,
+ "two": 10380,
+ "209": 10381,
+ "える": 10382,
+ "##ple": 10383,
+ "##cal": 10384,
+ "021": 10385,
+ "##んな": 10386,
+ "##sen": 10387,
+ "##ville": 10388,
+ "hold": 10389,
+ "nexus": 10390,
+ "dd": 10391,
+ "##ius": 10392,
+ "てお": 10393,
+ "##mah": 10394,
+ "##なく": 10395,
+ "tila": 10396,
+ "zero": 10397,
+ "820": 10398,
+ "ce": 10399,
+ "##tin": 10400,
+ "resort": 10401,
+ "##ws": 10402,
+ "charles": 10403,
+ "old": 10404,
+ "p10": 10405,
+ "5d": 10406,
+ "report": 10407,
+ "##360": 10408,
+ "##ru": 10409,
+ "##には": 10410,
+ "bus": 10411,
+ "vans": 10412,
+ "lt": 10413,
+ "##est": 10414,
+ "pv": 10415,
+ "##レ": 10416,
+ "links": 10417,
+ "rebecca": 10418,
+ "##ツ": 10419,
+ "##dm": 10420,
+ "azure": 10421,
+ "##365": 10422,
+ "きな": 10423,
+ "limited": 10424,
+ "bit": 10425,
+ "4gb": 10426,
+ "##mon": 10427,
+ "1910": 10428,
+ "moto": 10429,
+ "##eam": 10430,
+ "213": 10431,
+ "1913": 10432,
+ "var": 10433,
+ "eos": 10434,
+ "なとの": 10435,
+ "226": 10436,
+ "blogspot": 10437,
+ "された": 10438,
+ "699": 10439,
+ "e3": 10440,
+ "dos": 10441,
+ "dm": 10442,
+ "fc": 10443,
+ "##ments": 10444,
+ "##ik": 10445,
+ "##kw": 10446,
+ "boy": 10447,
+ "##bin": 10448,
+ "##ata": 10449,
+ "960": 10450,
+ "er": 10451,
+ "##せ": 10452,
+ "219": 10453,
+ "##vin": 10454,
+ "##tu": 10455,
+ "##ula": 10456,
+ "194": 10457,
+ "##∥": 10458,
+ "station": 10459,
+ "##ろ": 10460,
+ "##ature": 10461,
+ "835": 10462,
+ "files": 10463,
+ "zara": 10464,
+ "hdr": 10465,
+ "top10": 10466,
+ "nature": 10467,
+ "950": 10468,
+ "magazine": 10469,
+ "s6": 10470,
+ "marriott": 10471,
+ "##シ": 10472,
+ "avira": 10473,
+ "case": 10474,
+ "##っと": 10475,
+ "tab": 10476,
+ "##ran": 10477,
+ "tony": 10478,
+ "##home": 10479,
+ "oculus": 10480,
+ "im": 10481,
+ "##ral": 10482,
+ "jean": 10483,
+ "saint": 10484,
+ "cry": 10485,
+ "307": 10486,
+ "rosie": 10487,
+ "##force": 10488,
+ "##ini": 10489,
+ "ice": 10490,
+ "##bert": 10491,
+ "のある": 10492,
+ "##nder": 10493,
+ "##mber": 10494,
+ "pet": 10495,
+ "2600": 10496,
+ "##◆": 10497,
+ "plurk": 10498,
+ "▲topdec": 10499,
+ "##sis": 10500,
+ "00kg": 10501,
+ "▲topnov": 10502,
+ "720": 10503,
+ "##ence": 10504,
+ "tim": 10505,
+ "##ω": 10506,
+ "##nc": 10507,
+ "##ても": 10508,
+ "##name": 10509,
+ "log": 10510,
+ "ips": 10511,
+ "great": 10512,
+ "ikea": 10513,
+ "malaysia": 10514,
+ "unix": 10515,
+ "##イト": 10516,
+ "3600": 10517,
+ "##ncy": 10518,
+ "##nie": 10519,
+ "12000": 10520,
+ "akb48": 10521,
+ "##ye": 10522,
+ "##oid": 10523,
+ "404": 10524,
+ "##chi": 10525,
+ "##いた": 10526,
+ "oa": 10527,
+ "xuehai": 10528,
+ "##1000": 10529,
+ "##orm": 10530,
+ "##rf": 10531,
+ "275": 10532,
+ "さん": 10533,
+ "##ware": 10534,
+ "##リー": 10535,
+ "980": 10536,
+ "ho": 10537,
+ "##pro": 10538,
+ "text": 10539,
+ "##era": 10540,
+ "560": 10541,
+ "bob": 10542,
+ "227": 10543,
+ "##ub": 10544,
+ "##2008": 10545,
+ "8891": 10546,
+ "scp": 10547,
+ "avi": 10548,
+ "##zen": 10549,
+ "2022": 10550,
+ "mi": 10551,
+ "wu": 10552,
+ "museum": 10553,
+ "qvod": 10554,
+ "apache": 10555,
+ "lake": 10556,
+ "jcb": 10557,
+ "▲topaug": 10558,
+ "★★★": 10559,
+ "ni": 10560,
+ "##hr": 10561,
+ "hill": 10562,
+ "302": 10563,
+ "ne": 10564,
+ "weibo": 10565,
+ "490": 10566,
+ "ruby": 10567,
+ "##ーシ": 10568,
+ "##ヶ": 10569,
+ "##row": 10570,
+ "4d": 10571,
+ "▲topjul": 10572,
+ "iv": 10573,
+ "##ish": 10574,
+ "github": 10575,
+ "306": 10576,
+ "mate": 10577,
+ "312": 10578,
+ "##スト": 10579,
+ "##lot": 10580,
+ "##ane": 10581,
+ "andrew": 10582,
+ "のハイト": 10583,
+ "##tina": 10584,
+ "t1": 10585,
+ "rf": 10586,
+ "ed2k": 10587,
+ "##vel": 10588,
+ "##900": 10589,
+ "way": 10590,
+ "final": 10591,
+ "りの": 10592,
+ "ns": 10593,
+ "5a": 10594,
+ "705": 10595,
+ "197": 10596,
+ "##メ": 10597,
+ "sweet": 10598,
+ "bytes": 10599,
+ "##ene": 10600,
+ "▲topjan": 10601,
+ "231": 10602,
+ "##cker": 10603,
+ "##2007": 10604,
+ "##px": 10605,
+ "100g": 10606,
+ "topapp": 10607,
+ "229": 10608,
+ "helpapp": 10609,
+ "rs": 10610,
+ "low": 10611,
+ "14k": 10612,
+ "g4g": 10613,
+ "care": 10614,
+ "630": 10615,
+ "ldquo": 10616,
+ "あり": 10617,
+ "##fork": 10618,
+ "leave": 10619,
+ "rm": 10620,
+ "edition": 10621,
+ "##gan": 10622,
+ "##zon": 10623,
+ "##qq": 10624,
+ "▲topsep": 10625,
+ "##google": 10626,
+ "##ism": 10627,
+ "gold": 10628,
+ "224": 10629,
+ "explorer": 10630,
+ "##zer": 10631,
+ "toyota": 10632,
+ "category": 10633,
+ "select": 10634,
+ "visual": 10635,
+ "##labels": 10636,
+ "restaurant": 10637,
+ "##md": 10638,
+ "posts": 10639,
+ "s1": 10640,
+ "##ico": 10641,
+ "もっと": 10642,
+ "angelababy": 10643,
+ "123456": 10644,
+ "217": 10645,
+ "sports": 10646,
+ "s3": 10647,
+ "mbc": 10648,
+ "1915": 10649,
+ "してくたさい": 10650,
+ "shell": 10651,
+ "x86": 10652,
+ "candy": 10653,
+ "##new": 10654,
+ "kbs": 10655,
+ "face": 10656,
+ "xl": 10657,
+ "470": 10658,
+ "##here": 10659,
+ "4a": 10660,
+ "swissinfo": 10661,
+ "v8": 10662,
+ "▲topfeb": 10663,
+ "dram": 10664,
+ "##ual": 10665,
+ "##vice": 10666,
+ "3a": 10667,
+ "##wer": 10668,
+ "sport": 10669,
+ "q1": 10670,
+ "ios10": 10671,
+ "public": 10672,
+ "int": 10673,
+ "card": 10674,
+ "##c": 10675,
+ "ep": 10676,
+ "au": 10677,
+ "rt": 10678,
+ "##れた": 10679,
+ "1080": 10680,
+ "bill": 10681,
+ "##mll": 10682,
+ "kim": 10683,
+ "30": 10684,
+ "460": 10685,
+ "wan": 10686,
+ "##uk": 10687,
+ "##ミ": 10688,
+ "x3": 10689,
+ "298": 10690,
+ "0t": 10691,
+ "scott": 10692,
+ "##ming": 10693,
+ "239": 10694,
+ "e5": 10695,
+ "##3d": 10696,
+ "h7n9": 10697,
+ "worldcat": 10698,
+ "brown": 10699,
+ "##あります": 10700,
+ "##vo": 10701,
+ "##led": 10702,
+ "##580": 10703,
+ "##ax": 10704,
+ "249": 10705,
+ "410": 10706,
+ "##ert": 10707,
+ "paris": 10708,
+ "##~6": 10709,
+ "polo": 10710,
+ "925": 10711,
+ "##lr": 10712,
+ "599": 10713,
+ "##ナ": 10714,
+ "capital": 10715,
+ "##hing": 10716,
+ "bank": 10717,
+ "cv": 10718,
+ "1g": 10719,
+ "##chat": 10720,
+ "##s": 10721,
+ "##たい": 10722,
+ "adc": 10723,
+ "##ule": 10724,
+ "2m": 10725,
+ "##e": 10726,
+ "digital": 10727,
+ "hotmail": 10728,
+ "268": 10729,
+ "##pad": 10730,
+ "870": 10731,
+ "bbq": 10732,
+ "quot": 10733,
+ "##ring": 10734,
+ "before": 10735,
+ "wali": 10736,
+ "##まて": 10737,
+ "mcu": 10738,
+ "2k": 10739,
+ "2b": 10740,
+ "という": 10741,
+ "costco": 10742,
+ "316": 10743,
+ "north": 10744,
+ "333": 10745,
+ "switch": 10746,
+ "##city": 10747,
+ "##p": 10748,
+ "philips": 10749,
+ "##mann": 10750,
+ "management": 10751,
+ "panasonic": 10752,
+ "##cl": 10753,
+ "##vd": 10754,
+ "##ping": 10755,
+ "##rge": 10756,
+ "alice": 10757,
+ "##lk": 10758,
+ "##ましょう": 10759,
+ "css3": 10760,
+ "##ney": 10761,
+ "vision": 10762,
+ "alpha": 10763,
+ "##ular": 10764,
+ "##400": 10765,
+ "##tter": 10766,
+ "lz": 10767,
+ "にお": 10768,
+ "##ありません": 10769,
+ "mode": 10770,
+ "gre": 10771,
+ "1916": 10772,
+ "pci": 10773,
+ "##tm": 10774,
+ "237": 10775,
+ "1~2": 10776,
+ "##yan": 10777,
+ "##そ": 10778,
+ "について": 10779,
+ "##let": 10780,
+ "##キ": 10781,
+ "work": 10782,
+ "war": 10783,
+ "coach": 10784,
+ "ah": 10785,
+ "mary": 10786,
+ "##ᅵ": 10787,
+ "huang": 10788,
+ "##pt": 10789,
+ "a8": 10790,
+ "pt": 10791,
+ "follow": 10792,
+ "##berry": 10793,
+ "1895": 10794,
+ "##ew": 10795,
+ "a5": 10796,
+ "ghost": 10797,
+ "##ション": 10798,
+ "##wn": 10799,
+ "##og": 10800,
+ "south": 10801,
+ "##code": 10802,
+ "girls": 10803,
+ "##rid": 10804,
+ "action": 10805,
+ "villa": 10806,
+ "git": 10807,
+ "r11": 10808,
+ "table": 10809,
+ "games": 10810,
+ "##cket": 10811,
+ "error": 10812,
+ "##anonymoussaid": 10813,
+ "##ag": 10814,
+ "here": 10815,
+ "##ame": 10816,
+ "##gc": 10817,
+ "qa": 10818,
+ "##■": 10819,
+ "##lis": 10820,
+ "gmp": 10821,
+ "##gin": 10822,
+ "vmalife": 10823,
+ "##cher": 10824,
+ "yu": 10825,
+ "wedding": 10826,
+ "##tis": 10827,
+ "demo": 10828,
+ "dragon": 10829,
+ "530": 10830,
+ "soho": 10831,
+ "social": 10832,
+ "bye": 10833,
+ "##rant": 10834,
+ "river": 10835,
+ "orz": 10836,
+ "acer": 10837,
+ "325": 10838,
+ "##↑": 10839,
+ "##ース": 10840,
+ "##ats": 10841,
+ "261": 10842,
+ "del": 10843,
+ "##ven": 10844,
+ "440": 10845,
+ "ups": 10846,
+ "##ように": 10847,
+ "##ター": 10848,
+ "305": 10849,
+ "value": 10850,
+ "macd": 10851,
+ "yougou": 10852,
+ "##dn": 10853,
+ "661": 10854,
+ "##ano": 10855,
+ "ll": 10856,
+ "##urt": 10857,
+ "##rent": 10858,
+ "continue": 10859,
+ "script": 10860,
+ "##wen": 10861,
+ "##ect": 10862,
+ "paper": 10863,
+ "263": 10864,
+ "319": 10865,
+ "shift": 10866,
+ "##chel": 10867,
+ "##フト": 10868,
+ "##cat": 10869,
+ "258": 10870,
+ "x5": 10871,
+ "fox": 10872,
+ "243": 10873,
+ "##さん": 10874,
+ "car": 10875,
+ "aaa": 10876,
+ "##blog": 10877,
+ "loading": 10878,
+ "##yn": 10879,
+ "##tp": 10880,
+ "kuso": 10881,
+ "799": 10882,
+ "si": 10883,
+ "sns": 10884,
+ "イカせるテンマ": 10885,
+ "ヒンクテンマ3": 10886,
+ "rmb": 10887,
+ "vdc": 10888,
+ "forest": 10889,
+ "central": 10890,
+ "prime": 10891,
+ "help": 10892,
+ "ultra": 10893,
+ "##rmb": 10894,
+ "##ような": 10895,
+ "241": 10896,
+ "square": 10897,
+ "688": 10898,
+ "##しい": 10899,
+ "のないフロクに": 10900,
+ "##field": 10901,
+ "##reen": 10902,
+ "##ors": 10903,
+ "##ju": 10904,
+ "c1": 10905,
+ "start": 10906,
+ "510": 10907,
+ "##air": 10908,
+ "##map": 10909,
+ "cdn": 10910,
+ "##wo": 10911,
+ "cba": 10912,
+ "stephen": 10913,
+ "m8": 10914,
+ "100km": 10915,
+ "##get": 10916,
+ "opera": 10917,
+ "##base": 10918,
+ "##ood": 10919,
+ "vsa": 10920,
+ "com™": 10921,
+ "##aw": 10922,
+ "##ail": 10923,
+ "251": 10924,
+ "なのて": 10925,
+ "count": 10926,
+ "t2": 10927,
+ "##ᅡ": 10928,
+ "##een": 10929,
+ "2700": 10930,
+ "hop": 10931,
+ "##gp": 10932,
+ "vsc": 10933,
+ "tree": 10934,
+ "##eg": 10935,
+ "##ose": 10936,
+ "816": 10937,
+ "285": 10938,
+ "##ories": 10939,
+ "##shop": 10940,
+ "alphago": 10941,
+ "v4": 10942,
+ "1909": 10943,
+ "simon": 10944,
+ "##ᆼ": 10945,
+ "fluke62max": 10946,
+ "zip": 10947,
+ "スホンサー": 10948,
+ "##sta": 10949,
+ "louis": 10950,
+ "cr": 10951,
+ "bas": 10952,
+ "##~10": 10953,
+ "bc": 10954,
+ "##yer": 10955,
+ "hadoop": 10956,
+ "##ube": 10957,
+ "##wi": 10958,
+ "1906": 10959,
+ "0755": 10960,
+ "hola": 10961,
+ "##low": 10962,
+ "place": 10963,
+ "centre": 10964,
+ "5v": 10965,
+ "d3": 10966,
+ "##fer": 10967,
+ "252": 10968,
+ "##750": 10969,
+ "##media": 10970,
+ "281": 10971,
+ "540": 10972,
+ "0l": 10973,
+ "exchange": 10974,
+ "262": 10975,
+ "series": 10976,
+ "##ハー": 10977,
+ "##san": 10978,
+ "eb": 10979,
+ "##bank": 10980,
+ "##k": 10981,
+ "q3": 10982,
+ "##nge": 10983,
+ "##mail": 10984,
+ "take": 10985,
+ "##lp": 10986,
+ "259": 10987,
+ "1888": 10988,
+ "client": 10989,
+ "east": 10990,
+ "cache": 10991,
+ "event": 10992,
+ "vincent": 10993,
+ "##ールを": 10994,
+ "きを": 10995,
+ "##nse": 10996,
+ "sui": 10997,
+ "855": 10998,
+ "adchoice": 10999,
+ "##и": 11000,
+ "##stry": 11001,
+ "##なたの": 11002,
+ "246": 11003,
+ "##zone": 11004,
+ "ga": 11005,
+ "apps": 11006,
+ "sea": 11007,
+ "##ab": 11008,
+ "248": 11009,
+ "cisco": 11010,
+ "##タ": 11011,
+ "##rner": 11012,
+ "kymco": 11013,
+ "##care": 11014,
+ "dha": 11015,
+ "##pu": 11016,
+ "##yi": 11017,
+ "minkoff": 11018,
+ "royal": 11019,
+ "p1": 11020,
+ "への": 11021,
+ "annie": 11022,
+ "269": 11023,
+ "collection": 11024,
+ "kpi": 11025,
+ "playstation": 11026,
+ "257": 11027,
+ "になります": 11028,
+ "866": 11029,
+ "bh": 11030,
+ "##bar": 11031,
+ "queen": 11032,
+ "505": 11033,
+ "radio": 11034,
+ "1904": 11035,
+ "andy": 11036,
+ "armani": 11037,
+ "##xy": 11038,
+ "manager": 11039,
+ "iherb": 11040,
+ "##ery": 11041,
+ "##share": 11042,
+ "spring": 11043,
+ "raid": 11044,
+ "johnson": 11045,
+ "1908": 11046,
+ "##ob": 11047,
+ "volvo": 11048,
+ "hall": 11049,
+ "##ball": 11050,
+ "v6": 11051,
+ "our": 11052,
+ "taylor": 11053,
+ "##hk": 11054,
+ "bi": 11055,
+ "242": 11056,
+ "##cp": 11057,
+ "kate": 11058,
+ "bo": 11059,
+ "water": 11060,
+ "technology": 11061,
+ "##rie": 11062,
+ "サイトは": 11063,
+ "277": 11064,
+ "##ona": 11065,
+ "##sl": 11066,
+ "hpv": 11067,
+ "303": 11068,
+ "gtx": 11069,
+ "hip": 11070,
+ "rdquo": 11071,
+ "jayz": 11072,
+ "stone": 11073,
+ "##lex": 11074,
+ "##rum": 11075,
+ "namespace": 11076,
+ "##やり": 11077,
+ "620": 11078,
+ "##ale": 11079,
+ "##atic": 11080,
+ "des": 11081,
+ "##erson": 11082,
+ "##ql": 11083,
+ "##ves": 11084,
+ "##type": 11085,
+ "enter": 11086,
+ "##この": 11087,
+ "##てきます": 11088,
+ "d2": 11089,
+ "##168": 11090,
+ "##mix": 11091,
+ "##bian": 11092,
+ "との": 11093,
+ "a9": 11094,
+ "jj": 11095,
+ "ky": 11096,
+ "##lc": 11097,
+ "access": 11098,
+ "movie": 11099,
+ "##hc": 11100,
+ "リストに": 11101,
+ "tower": 11102,
+ "##ration": 11103,
+ "##mit": 11104,
+ "ます": 11105,
+ "##nch": 11106,
+ "ua": 11107,
+ "tel": 11108,
+ "prefix": 11109,
+ "##o2": 11110,
+ "1907": 11111,
+ "##point": 11112,
+ "1901": 11113,
+ "ott": 11114,
+ "~10": 11115,
+ "##http": 11116,
+ "##ury": 11117,
+ "baidu": 11118,
+ "##ink": 11119,
+ "member": 11120,
+ "##logy": 11121,
+ "bigbang": 11122,
+ "nownews": 11123,
+ "##js": 11124,
+ "##shot": 11125,
+ "##tb": 11126,
+ "##こと": 11127,
+ "247": 11128,
+ "eba": 11129,
+ "##tics": 11130,
+ "##lus": 11131,
+ "ける": 11132,
+ "v5": 11133,
+ "spark": 11134,
+ "##ama": 11135,
+ "there": 11136,
+ "##ions": 11137,
+ "god": 11138,
+ "##lls": 11139,
+ "##down": 11140,
+ "hiv": 11141,
+ "##ress": 11142,
+ "burberry": 11143,
+ "day2": 11144,
+ "##kv": 11145,
+ "◆◆": 11146,
+ "jeff": 11147,
+ "related": 11148,
+ "film": 11149,
+ "edit": 11150,
+ "joseph": 11151,
+ "283": 11152,
+ "##ark": 11153,
+ "cx": 11154,
+ "32gb": 11155,
+ "order": 11156,
+ "g9": 11157,
+ "30000": 11158,
+ "##ans": 11159,
+ "##tty": 11160,
+ "s5": 11161,
+ "##bee": 11162,
+ "かあります": 11163,
+ "thread": 11164,
+ "xr": 11165,
+ "buy": 11166,
+ "sh": 11167,
+ "005": 11168,
+ "land": 11169,
+ "spotify": 11170,
+ "mx": 11171,
+ "##ari": 11172,
+ "276": 11173,
+ "##verse": 11174,
+ "×email": 11175,
+ "sf": 11176,
+ "why": 11177,
+ "##ことて": 11178,
+ "244": 11179,
+ "7headlines": 11180,
+ "nego": 11181,
+ "sunny": 11182,
+ "dom": 11183,
+ "exo": 11184,
+ "401": 11185,
+ "666": 11186,
+ "positioning": 11187,
+ "fit": 11188,
+ "rgb": 11189,
+ "##tton": 11190,
+ "278": 11191,
+ "kiss": 11192,
+ "alexa": 11193,
+ "adam": 11194,
+ "lp": 11195,
+ "みリストを": 11196,
+ "##g": 11197,
+ "mp": 11198,
+ "##ties": 11199,
+ "##llow": 11200,
+ "amy": 11201,
+ "##du": 11202,
+ "np": 11203,
+ "002": 11204,
+ "institute": 11205,
+ "271": 11206,
+ "##rth": 11207,
+ "##lar": 11208,
+ "2345": 11209,
+ "590": 11210,
+ "##des": 11211,
+ "sidebar": 11212,
+ "15": 11213,
+ "imax": 11214,
+ "site": 11215,
+ "##cky": 11216,
+ "##kit": 11217,
+ "##ime": 11218,
+ "##009": 11219,
+ "season": 11220,
+ "323": 11221,
+ "##fun": 11222,
+ "##ンター": 11223,
+ "##ひ": 11224,
+ "gogoro": 11225,
+ "a7": 11226,
+ "pu": 11227,
+ "lily": 11228,
+ "fire": 11229,
+ "twd600": 11230,
+ "##ッセーシを": 11231,
+ "いて": 11232,
+ "##vis": 11233,
+ "30ml": 11234,
+ "##cture": 11235,
+ "##をお": 11236,
+ "information": 11237,
+ "##オ": 11238,
+ "close": 11239,
+ "friday": 11240,
+ "##くれる": 11241,
+ "yi": 11242,
+ "nick": 11243,
+ "てすか": 11244,
+ "##tta": 11245,
+ "##tel": 11246,
+ "6500": 11247,
+ "##lock": 11248,
+ "cbd": 11249,
+ "economy": 11250,
+ "254": 11251,
+ "かお": 11252,
+ "267": 11253,
+ "tinker": 11254,
+ "double": 11255,
+ "375": 11256,
+ "8gb": 11257,
+ "voice": 11258,
+ "##app": 11259,
+ "oops": 11260,
+ "channel": 11261,
+ "today": 11262,
+ "985": 11263,
+ "##right": 11264,
+ "raw": 11265,
+ "xyz": 11266,
+ "##+": 11267,
+ "jim": 11268,
+ "edm": 11269,
+ "##cent": 11270,
+ "7500": 11271,
+ "supreme": 11272,
+ "814": 11273,
+ "ds": 11274,
+ "##its": 11275,
+ "##asia": 11276,
+ "dropbox": 11277,
+ "##てすか": 11278,
+ "##tti": 11279,
+ "books": 11280,
+ "272": 11281,
+ "100ml": 11282,
+ "##tle": 11283,
+ "##ller": 11284,
+ "##ken": 11285,
+ "##more": 11286,
+ "##boy": 11287,
+ "sex": 11288,
+ "309": 11289,
+ "##dom": 11290,
+ "t3": 11291,
+ "##ider": 11292,
+ "##なります": 11293,
+ "##unch": 11294,
+ "1903": 11295,
+ "810": 11296,
+ "feel": 11297,
+ "5500": 11298,
+ "##かった": 11299,
+ "##put": 11300,
+ "により": 11301,
+ "s2": 11302,
+ "mo": 11303,
+ "##gh": 11304,
+ "men": 11305,
+ "ka": 11306,
+ "amoled": 11307,
+ "div": 11308,
+ "##tr": 11309,
+ "##n1": 11310,
+ "port": 11311,
+ "howard": 11312,
+ "##tags": 11313,
+ "ken": 11314,
+ "dnf": 11315,
+ "##nus": 11316,
+ "adsense": 11317,
+ "##а": 11318,
+ "ide": 11319,
+ "##へ": 11320,
+ "buff": 11321,
+ "thunder": 11322,
+ "##town": 11323,
+ "##ique": 11324,
+ "has": 11325,
+ "##body": 11326,
+ "auto": 11327,
+ "pin": 11328,
+ "##erry": 11329,
+ "tee": 11330,
+ "てした": 11331,
+ "295": 11332,
+ "number": 11333,
+ "##the": 11334,
+ "##013": 11335,
+ "object": 11336,
+ "psp": 11337,
+ "cool": 11338,
+ "udnbkk": 11339,
+ "16gb": 11340,
+ "##mic": 11341,
+ "miui": 11342,
+ "##tro": 11343,
+ "most": 11344,
+ "r2": 11345,
+ "##alk": 11346,
+ "##nity": 11347,
+ "1880": 11348,
+ "±0": 11349,
+ "##いました": 11350,
+ "428": 11351,
+ "s4": 11352,
+ "law": 11353,
+ "version": 11354,
+ "##oa": 11355,
+ "n1": 11356,
+ "sgs": 11357,
+ "docomo": 11358,
+ "##tf": 11359,
+ "##ack": 11360,
+ "henry": 11361,
+ "fc2": 11362,
+ "##ded": 11363,
+ "##sco": 11364,
+ "##014": 11365,
+ "##rite": 11366,
+ "286": 11367,
+ "0mm": 11368,
+ "linkedin": 11369,
+ "##ada": 11370,
+ "##now": 11371,
+ "wii": 11372,
+ "##ndy": 11373,
+ "ucbug": 11374,
+ "##◎": 11375,
+ "sputniknews": 11376,
+ "legalminer": 11377,
+ "##ika": 11378,
+ "##xp": 11379,
+ "2gb": 11380,
+ "##bu": 11381,
+ "q10": 11382,
+ "oo": 11383,
+ "b6": 11384,
+ "come": 11385,
+ "##rman": 11386,
+ "cheese": 11387,
+ "ming": 11388,
+ "maker": 11389,
+ "##gm": 11390,
+ "nikon": 11391,
+ "##fig": 11392,
+ "ppi": 11393,
+ "kelly": 11394,
+ "##ります": 11395,
+ "jchere": 11396,
+ "てきます": 11397,
+ "ted": 11398,
+ "md": 11399,
+ "003": 11400,
+ "fgo": 11401,
+ "tech": 11402,
+ "##tto": 11403,
+ "dan": 11404,
+ "soc": 11405,
+ "##gl": 11406,
+ "##len": 11407,
+ "hair": 11408,
+ "earth": 11409,
+ "640": 11410,
+ "521": 11411,
+ "img": 11412,
+ "##pper": 11413,
+ "##a1": 11414,
+ "##てきる": 11415,
+ "##ロク": 11416,
+ "acca": 11417,
+ "##ition": 11418,
+ "##ference": 11419,
+ "suite": 11420,
+ "##ig": 11421,
+ "outlook": 11422,
+ "##mond": 11423,
+ "##cation": 11424,
+ "398": 11425,
+ "##pr": 11426,
+ "279": 11427,
+ "101vip": 11428,
+ "358": 11429,
+ "##999": 11430,
+ "282": 11431,
+ "64gb": 11432,
+ "3800": 11433,
+ "345": 11434,
+ "airport": 11435,
+ "##over": 11436,
+ "284": 11437,
+ "##おり": 11438,
+ "jones": 11439,
+ "##ith": 11440,
+ "lab": 11441,
+ "##su": 11442,
+ "##いるのて": 11443,
+ "co2": 11444,
+ "town": 11445,
+ "piece": 11446,
+ "##llo": 11447,
+ "no1": 11448,
+ "vmware": 11449,
+ "24h": 11450,
+ "##qi": 11451,
+ "focus": 11452,
+ "reader": 11453,
+ "##admin": 11454,
+ "##ora": 11455,
+ "tb": 11456,
+ "false": 11457,
+ "##log": 11458,
+ "1898": 11459,
+ "know": 11460,
+ "lan": 11461,
+ "838": 11462,
+ "##ces": 11463,
+ "f4": 11464,
+ "##ume": 11465,
+ "motel": 11466,
+ "stop": 11467,
+ "##oper": 11468,
+ "na": 11469,
+ "flickr": 11470,
+ "netcomponents": 11471,
+ "##af": 11472,
+ "##─": 11473,
+ "pose": 11474,
+ "williams": 11475,
+ "local": 11476,
+ "##ound": 11477,
+ "##cg": 11478,
+ "##site": 11479,
+ "##iko": 11480,
+ "いお": 11481,
+ "274": 11482,
+ "5m": 11483,
+ "gsm": 11484,
+ "con": 11485,
+ "##ath": 11486,
+ "1902": 11487,
+ "friends": 11488,
+ "##hip": 11489,
+ "cell": 11490,
+ "317": 11491,
+ "##rey": 11492,
+ "780": 11493,
+ "cream": 11494,
+ "##cks": 11495,
+ "012": 11496,
+ "##dp": 11497,
+ "facebooktwitterpinterestgoogle": 11498,
+ "sso": 11499,
+ "324": 11500,
+ "shtml": 11501,
+ "song": 11502,
+ "swiss": 11503,
+ "##mw": 11504,
+ "##キンク": 11505,
+ "lumia": 11506,
+ "xdd": 11507,
+ "string": 11508,
+ "tiffany": 11509,
+ "522": 11510,
+ "marc": 11511,
+ "られた": 11512,
+ "insee": 11513,
+ "russell": 11514,
+ "sc": 11515,
+ "dell": 11516,
+ "##ations": 11517,
+ "ok": 11518,
+ "camera": 11519,
+ "289": 11520,
+ "##vs": 11521,
+ "##flow": 11522,
+ "##late": 11523,
+ "classic": 11524,
+ "287": 11525,
+ "##nter": 11526,
+ "stay": 11527,
+ "g1": 11528,
+ "mtv": 11529,
+ "512": 11530,
+ "##ever": 11531,
+ "##lab": 11532,
+ "##nger": 11533,
+ "qe": 11534,
+ "sata": 11535,
+ "ryan": 11536,
+ "d1": 11537,
+ "50ml": 11538,
+ "cms": 11539,
+ "##cing": 11540,
+ "su": 11541,
+ "292": 11542,
+ "3300": 11543,
+ "editor": 11544,
+ "296": 11545,
+ "##nap": 11546,
+ "security": 11547,
+ "sunday": 11548,
+ "association": 11549,
+ "##ens": 11550,
+ "##700": 11551,
+ "##bra": 11552,
+ "acg": 11553,
+ "##かり": 11554,
+ "sofascore": 11555,
+ "とは": 11556,
+ "mkv": 11557,
+ "##ign": 11558,
+ "jonathan": 11559,
+ "gary": 11560,
+ "build": 11561,
+ "labels": 11562,
+ "##oto": 11563,
+ "tesla": 11564,
+ "moba": 11565,
+ "qi": 11566,
+ "gohappy": 11567,
+ "general": 11568,
+ "ajax": 11569,
+ "1024": 11570,
+ "##かる": 11571,
+ "サイト": 11572,
+ "society": 11573,
+ "##test": 11574,
+ "##urs": 11575,
+ "wps": 11576,
+ "fedora": 11577,
+ "##ich": 11578,
+ "mozilla": 11579,
+ "328": 11580,
+ "##480": 11581,
+ "##dr": 11582,
+ "usa": 11583,
+ "urn": 11584,
+ "##lina": 11585,
+ "##r": 11586,
+ "grace": 11587,
+ "##die": 11588,
+ "##try": 11589,
+ "##ader": 11590,
+ "1250": 11591,
+ "##なり": 11592,
+ "elle": 11593,
+ "570": 11594,
+ "##chen": 11595,
+ "##ᆯ": 11596,
+ "price": 11597,
+ "##ten": 11598,
+ "uhz": 11599,
+ "##ough": 11600,
+ "eq": 11601,
+ "##hen": 11602,
+ "states": 11603,
+ "push": 11604,
+ "session": 11605,
+ "balance": 11606,
+ "wow": 11607,
+ "506": 11608,
+ "##cus": 11609,
+ "##py": 11610,
+ "when": 11611,
+ "##ward": 11612,
+ "##ep": 11613,
+ "34e": 11614,
+ "wong": 11615,
+ "library": 11616,
+ "prada": 11617,
+ "##サイト": 11618,
+ "##cle": 11619,
+ "running": 11620,
+ "##ree": 11621,
+ "313": 11622,
+ "ck": 11623,
+ "date": 11624,
+ "q4": 11625,
+ "##ctive": 11626,
+ "##ool": 11627,
+ "##>": 11628,
+ "mk": 11629,
+ "##ira": 11630,
+ "##163": 11631,
+ "388": 11632,
+ "die": 11633,
+ "secret": 11634,
+ "rq": 11635,
+ "dota": 11636,
+ "buffet": 11637,
+ "は1ヶ": 11638,
+ "e6": 11639,
+ "##ez": 11640,
+ "pan": 11641,
+ "368": 11642,
+ "ha": 11643,
+ "##card": 11644,
+ "##cha": 11645,
+ "2a": 11646,
+ "##さ": 11647,
+ "alan": 11648,
+ "day3": 11649,
+ "eye": 11650,
+ "f3": 11651,
+ "##end": 11652,
+ "france": 11653,
+ "keep": 11654,
+ "adi": 11655,
+ "rna": 11656,
+ "tvbs": 11657,
+ "##ala": 11658,
+ "solo": 11659,
+ "nova": 11660,
+ "##え": 11661,
+ "##tail": 11662,
+ "##ょう": 11663,
+ "support": 11664,
+ "##ries": 11665,
+ "##なる": 11666,
+ "##ved": 11667,
+ "base": 11668,
+ "copy": 11669,
+ "iis": 11670,
+ "fps": 11671,
+ "##ways": 11672,
+ "hero": 11673,
+ "hgih": 11674,
+ "profile": 11675,
+ "fish": 11676,
+ "mu": 11677,
+ "ssh": 11678,
+ "entertainment": 11679,
+ "chang": 11680,
+ "##wd": 11681,
+ "click": 11682,
+ "cake": 11683,
+ "##ond": 11684,
+ "pre": 11685,
+ "##tom": 11686,
+ "kic": 11687,
+ "pixel": 11688,
+ "##ov": 11689,
+ "##fl": 11690,
+ "product": 11691,
+ "6a": 11692,
+ "##pd": 11693,
+ "dear": 11694,
+ "##gate": 11695,
+ "es": 11696,
+ "yumi": 11697,
+ "audio": 11698,
+ "##²": 11699,
+ "##sky": 11700,
+ "echo": 11701,
+ "bin": 11702,
+ "where": 11703,
+ "##ture": 11704,
+ "329": 11705,
+ "##ape": 11706,
+ "find": 11707,
+ "sap": 11708,
+ "isis": 11709,
+ "##なと": 11710,
+ "nand": 11711,
+ "##101": 11712,
+ "##load": 11713,
+ "##ream": 11714,
+ "band": 11715,
+ "a6": 11716,
+ "525": 11717,
+ "never": 11718,
+ "##post": 11719,
+ "festival": 11720,
+ "50cm": 11721,
+ "##we": 11722,
+ "555": 11723,
+ "guide": 11724,
+ "314": 11725,
+ "zenfone": 11726,
+ "##ike": 11727,
+ "335": 11728,
+ "gd": 11729,
+ "forum": 11730,
+ "jessica": 11731,
+ "strong": 11732,
+ "alexander": 11733,
+ "##ould": 11734,
+ "software": 11735,
+ "allen": 11736,
+ "##ious": 11737,
+ "program": 11738,
+ "360°": 11739,
+ "else": 11740,
+ "lohasthree": 11741,
+ "##gar": 11742,
+ "することかてきます": 11743,
+ "please": 11744,
+ "##れます": 11745,
+ "rc": 11746,
+ "##ggle": 11747,
+ "##ric": 11748,
+ "bim": 11749,
+ "50000": 11750,
+ "##own": 11751,
+ "eclipse": 11752,
+ "355": 11753,
+ "brian": 11754,
+ "3ds": 11755,
+ "##side": 11756,
+ "061": 11757,
+ "361": 11758,
+ "##other": 11759,
+ "##ける": 11760,
+ "##tech": 11761,
+ "##ator": 11762,
+ "485": 11763,
+ "engine": 11764,
+ "##ged": 11765,
+ "##t": 11766,
+ "plaza": 11767,
+ "##fit": 11768,
+ "cia": 11769,
+ "ngo": 11770,
+ "westbrook": 11771,
+ "shi": 11772,
+ "tbs": 11773,
+ "50mm": 11774,
+ "##みませんか": 11775,
+ "sci": 11776,
+ "291": 11777,
+ "reuters": 11778,
+ "##ily": 11779,
+ "contextlink": 11780,
+ "##hn": 11781,
+ "af": 11782,
+ "##cil": 11783,
+ "bridge": 11784,
+ "very": 11785,
+ "##cel": 11786,
+ "1890": 11787,
+ "cambridge": 11788,
+ "##ize": 11789,
+ "15g": 11790,
+ "##aid": 11791,
+ "##data": 11792,
+ "790": 11793,
+ "frm": 11794,
+ "##head": 11795,
+ "award": 11796,
+ "butler": 11797,
+ "##sun": 11798,
+ "meta": 11799,
+ "##mar": 11800,
+ "america": 11801,
+ "ps3": 11802,
+ "puma": 11803,
+ "pmid": 11804,
+ "##すか": 11805,
+ "lc": 11806,
+ "670": 11807,
+ "kitchen": 11808,
+ "##lic": 11809,
+ "オーフン5": 11810,
+ "きなしソフトサーヒス": 11811,
+ "そして": 11812,
+ "day1": 11813,
+ "future": 11814,
+ "★★★★": 11815,
+ "##text": 11816,
+ "##page": 11817,
+ "##rris": 11818,
+ "pm1": 11819,
+ "##ket": 11820,
+ "fans": 11821,
+ "##っています": 11822,
+ "1001": 11823,
+ "christian": 11824,
+ "bot": 11825,
+ "kids": 11826,
+ "trackback": 11827,
+ "##hai": 11828,
+ "c3": 11829,
+ "display": 11830,
+ "##hl": 11831,
+ "n2": 11832,
+ "1896": 11833,
+ "idea": 11834,
+ "さんも": 11835,
+ "##sent": 11836,
+ "airmail": 11837,
+ "##ug": 11838,
+ "##men": 11839,
+ "pwm": 11840,
+ "けます": 11841,
+ "028": 11842,
+ "##lution": 11843,
+ "369": 11844,
+ "852": 11845,
+ "awards": 11846,
+ "schemas": 11847,
+ "354": 11848,
+ "asics": 11849,
+ "wikipedia": 11850,
+ "font": 11851,
+ "##tional": 11852,
+ "##vy": 11853,
+ "c2": 11854,
+ "293": 11855,
+ "##れている": 11856,
+ "##dget": 11857,
+ "##ein": 11858,
+ "っている": 11859,
+ "contact": 11860,
+ "pepper": 11861,
+ "スキル": 11862,
+ "339": 11863,
+ "##~5": 11864,
+ "294": 11865,
+ "##uel": 11866,
+ "##ument": 11867,
+ "730": 11868,
+ "##hang": 11869,
+ "みてす": 11870,
+ "q5": 11871,
+ "##sue": 11872,
+ "rain": 11873,
+ "##ndi": 11874,
+ "wei": 11875,
+ "swatch": 11876,
+ "##cept": 11877,
+ "わせ": 11878,
+ "331": 11879,
+ "popular": 11880,
+ "##ste": 11881,
+ "##tag": 11882,
+ "p2": 11883,
+ "501": 11884,
+ "trc": 11885,
+ "1899": 11886,
+ "##west": 11887,
+ "##live": 11888,
+ "justin": 11889,
+ "honda": 11890,
+ "ping": 11891,
+ "messenger": 11892,
+ "##rap": 11893,
+ "v9": 11894,
+ "543": 11895,
+ "##とは": 11896,
+ "unity": 11897,
+ "appqq": 11898,
+ "はすへて": 11899,
+ "025": 11900,
+ "leo": 11901,
+ "##tone": 11902,
+ "##テ": 11903,
+ "##ass": 11904,
+ "uniqlo": 11905,
+ "##010": 11906,
+ "502": 11907,
+ "her": 11908,
+ "jane": 11909,
+ "memory": 11910,
+ "moneydj": 11911,
+ "##tical": 11912,
+ "human": 11913,
+ "12306": 11914,
+ "していると": 11915,
+ "##m2": 11916,
+ "coc": 11917,
+ "miacare": 11918,
+ "##mn": 11919,
+ "tmt": 11920,
+ "##core": 11921,
+ "vim": 11922,
+ "kk": 11923,
+ "##may": 11924,
+ "fan": 11925,
+ "target": 11926,
+ "use": 11927,
+ "too": 11928,
+ "338": 11929,
+ "435": 11930,
+ "2050": 11931,
+ "867": 11932,
+ "737": 11933,
+ "fast": 11934,
+ "##2c": 11935,
+ "services": 11936,
+ "##ope": 11937,
+ "omega": 11938,
+ "energy": 11939,
+ "##わ": 11940,
+ "pinkoi": 11941,
+ "1a": 11942,
+ "##なから": 11943,
+ "##rain": 11944,
+ "jackson": 11945,
+ "##ement": 11946,
+ "##シャンルの": 11947,
+ "374": 11948,
+ "366": 11949,
+ "そんな": 11950,
+ "p9": 11951,
+ "rd": 11952,
+ "##ᆨ": 11953,
+ "1111": 11954,
+ "##tier": 11955,
+ "##vic": 11956,
+ "zone": 11957,
+ "##│": 11958,
+ "385": 11959,
+ "690": 11960,
+ "dl": 11961,
+ "isofix": 11962,
+ "cpa": 11963,
+ "m4": 11964,
+ "322": 11965,
+ "kimi": 11966,
+ "めて": 11967,
+ "davis": 11968,
+ "##lay": 11969,
+ "lulu": 11970,
+ "##uck": 11971,
+ "050": 11972,
+ "weeks": 11973,
+ "qs": 11974,
+ "##hop": 11975,
+ "920": 11976,
+ "##n": 11977,
+ "ae": 11978,
+ "##ear": 11979,
+ "~5": 11980,
+ "eia": 11981,
+ "405": 11982,
+ "##fly": 11983,
+ "korea": 11984,
+ "jpeg": 11985,
+ "boost": 11986,
+ "##ship": 11987,
+ "small": 11988,
+ "##リア": 11989,
+ "1860": 11990,
+ "eur": 11991,
+ "297": 11992,
+ "425": 11993,
+ "valley": 11994,
+ "##iel": 11995,
+ "simple": 11996,
+ "##ude": 11997,
+ "rn": 11998,
+ "k2": 11999,
+ "##ena": 12000,
+ "されます": 12001,
+ "non": 12002,
+ "patrick": 12003,
+ "しているから": 12004,
+ "##ナー": 12005,
+ "feed": 12006,
+ "5757": 12007,
+ "30g": 12008,
+ "process": 12009,
+ "well": 12010,
+ "qqmei": 12011,
+ "##thing": 12012,
+ "they": 12013,
+ "aws": 12014,
+ "lu": 12015,
+ "pink": 12016,
+ "##ters": 12017,
+ "##kin": 12018,
+ "または": 12019,
+ "board": 12020,
+ "##vertisement": 12021,
+ "wine": 12022,
+ "##ien": 12023,
+ "unicode": 12024,
+ "##dge": 12025,
+ "r1": 12026,
+ "359": 12027,
+ "##tant": 12028,
+ "いを": 12029,
+ "##twitter": 12030,
+ "##3c": 12031,
+ "cool1": 12032,
+ "される": 12033,
+ "##れて": 12034,
+ "##l": 12035,
+ "isp": 12036,
+ "##012": 12037,
+ "standard": 12038,
+ "45㎡2": 12039,
+ "402": 12040,
+ "##150": 12041,
+ "matt": 12042,
+ "##fu": 12043,
+ "326": 12044,
+ "##iner": 12045,
+ "googlemsn": 12046,
+ "pixnetfacebookyahoo": 12047,
+ "##ラン": 12048,
+ "x7": 12049,
+ "886": 12050,
+ "##uce": 12051,
+ "メーカー": 12052,
+ "sao": 12053,
+ "##ev": 12054,
+ "##きました": 12055,
+ "##file": 12056,
+ "9678": 12057,
+ "403": 12058,
+ "xddd": 12059,
+ "shirt": 12060,
+ "6l": 12061,
+ "##rio": 12062,
+ "##hat": 12063,
+ "3mm": 12064,
+ "givenchy": 12065,
+ "ya": 12066,
+ "bang": 12067,
+ "##lio": 12068,
+ "monday": 12069,
+ "crystal": 12070,
+ "ロクイン": 12071,
+ "##abc": 12072,
+ "336": 12073,
+ "head": 12074,
+ "890": 12075,
+ "ubuntuforumwikilinuxpastechat": 12076,
+ "##vc": 12077,
+ "##~20": 12078,
+ "##rity": 12079,
+ "cnc": 12080,
+ "7866": 12081,
+ "ipv6": 12082,
+ "null": 12083,
+ "1897": 12084,
+ "##ost": 12085,
+ "yang": 12086,
+ "imsean": 12087,
+ "tiger": 12088,
+ "##fet": 12089,
+ "##ンス": 12090,
+ "352": 12091,
+ "##=": 12092,
+ "dji": 12093,
+ "327": 12094,
+ "ji": 12095,
+ "maria": 12096,
+ "##come": 12097,
+ "##んて": 12098,
+ "foundation": 12099,
+ "3100": 12100,
+ "##beth": 12101,
+ "##なった": 12102,
+ "1m": 12103,
+ "601": 12104,
+ "active": 12105,
+ "##aft": 12106,
+ "##don": 12107,
+ "3p": 12108,
+ "sr": 12109,
+ "349": 12110,
+ "emma": 12111,
+ "##khz": 12112,
+ "living": 12113,
+ "415": 12114,
+ "353": 12115,
+ "1889": 12116,
+ "341": 12117,
+ "709": 12118,
+ "457": 12119,
+ "sas": 12120,
+ "x6": 12121,
+ "##face": 12122,
+ "pptv": 12123,
+ "x4": 12124,
+ "##mate": 12125,
+ "han": 12126,
+ "sophie": 12127,
+ "##jing": 12128,
+ "337": 12129,
+ "fifa": 12130,
+ "##mand": 12131,
+ "other": 12132,
+ "sale": 12133,
+ "inwedding": 12134,
+ "##gn": 12135,
+ "てきちゃいます": 12136,
+ "##mmy": 12137,
+ "##pmlast": 12138,
+ "bad": 12139,
+ "nana": 12140,
+ "nbc": 12141,
+ "してみてくたさいね": 12142,
+ "なとはお": 12143,
+ "##wu": 12144,
+ "##かあります": 12145,
+ "##あ": 12146,
+ "note7": 12147,
+ "single": 12148,
+ "##340": 12149,
+ "せからこ": 12150,
+ "してくたさい♪この": 12151,
+ "しにはとんとんワークケートを": 12152,
+ "するとあなたにもっとマッチした": 12153,
+ "ならワークケートへ": 12154,
+ "もみつかっちゃうかも": 12155,
+ "ワークケートの": 12156,
+ "##bel": 12157,
+ "window": 12158,
+ "##dio": 12159,
+ "##ht": 12160,
+ "union": 12161,
+ "age": 12162,
+ "382": 12163,
+ "14": 12164,
+ "##ivity": 12165,
+ "##y": 12166,
+ "コメント": 12167,
+ "domain": 12168,
+ "neo": 12169,
+ "##isa": 12170,
+ "##lter": 12171,
+ "5k": 12172,
+ "f5": 12173,
+ "steven": 12174,
+ "##cts": 12175,
+ "powerpoint": 12176,
+ "tft": 12177,
+ "self": 12178,
+ "g2": 12179,
+ "ft": 12180,
+ "##テル": 12181,
+ "zol": 12182,
+ "##act": 12183,
+ "mwc": 12184,
+ "381": 12185,
+ "343": 12186,
+ "もう": 12187,
+ "nbapop": 12188,
+ "408": 12189,
+ "てある": 12190,
+ "eds": 12191,
+ "ace": 12192,
+ "##room": 12193,
+ "previous": 12194,
+ "author": 12195,
+ "tomtom": 12196,
+ "il": 12197,
+ "##ets": 12198,
+ "hu": 12199,
+ "financial": 12200,
+ "☆☆☆": 12201,
+ "っています": 12202,
+ "bp": 12203,
+ "5t": 12204,
+ "chi": 12205,
+ "1gb": 12206,
+ "##hg": 12207,
+ "fairmont": 12208,
+ "cross": 12209,
+ "008": 12210,
+ "gay": 12211,
+ "h2": 12212,
+ "function": 12213,
+ "##けて": 12214,
+ "356": 12215,
+ "also": 12216,
+ "1b": 12217,
+ "625": 12218,
+ "##ータ": 12219,
+ "##raph": 12220,
+ "1894": 12221,
+ "3~5": 12222,
+ "##ils": 12223,
+ "i3": 12224,
+ "334": 12225,
+ "avenue": 12226,
+ "##host": 12227,
+ "による": 12228,
+ "##bon": 12229,
+ "##tsu": 12230,
+ "message": 12231,
+ "navigation": 12232,
+ "50g": 12233,
+ "fintech": 12234,
+ "h6": 12235,
+ "##ことを": 12236,
+ "8cm": 12237,
+ "##ject": 12238,
+ "##vas": 12239,
+ "##firm": 12240,
+ "credit": 12241,
+ "##wf": 12242,
+ "xxxx": 12243,
+ "form": 12244,
+ "##nor": 12245,
+ "##space": 12246,
+ "huawei": 12247,
+ "plan": 12248,
+ "json": 12249,
+ "sbl": 12250,
+ "##dc": 12251,
+ "machine": 12252,
+ "921": 12253,
+ "392": 12254,
+ "wish": 12255,
+ "##120": 12256,
+ "##sol": 12257,
+ "windows7": 12258,
+ "edward": 12259,
+ "##ために": 12260,
+ "development": 12261,
+ "washington": 12262,
+ "##nsis": 12263,
+ "lo": 12264,
+ "818": 12265,
+ "##sio": 12266,
+ "##ym": 12267,
+ "##bor": 12268,
+ "planet": 12269,
+ "##~8": 12270,
+ "##wt": 12271,
+ "ieee": 12272,
+ "gpa": 12273,
+ "##めて": 12274,
+ "camp": 12275,
+ "ann": 12276,
+ "gm": 12277,
+ "##tw": 12278,
+ "##oka": 12279,
+ "connect": 12280,
+ "##rss": 12281,
+ "##work": 12282,
+ "##atus": 12283,
+ "wall": 12284,
+ "chicken": 12285,
+ "soul": 12286,
+ "2mm": 12287,
+ "##times": 12288,
+ "fa": 12289,
+ "##ather": 12290,
+ "##cord": 12291,
+ "009": 12292,
+ "##eep": 12293,
+ "hitachi": 12294,
+ "gui": 12295,
+ "harry": 12296,
+ "##pan": 12297,
+ "e1": 12298,
+ "disney": 12299,
+ "##press": 12300,
+ "##ーション": 12301,
+ "wind": 12302,
+ "386": 12303,
+ "frigidaire": 12304,
+ "##tl": 12305,
+ "liu": 12306,
+ "hsu": 12307,
+ "332": 12308,
+ "basic": 12309,
+ "von": 12310,
+ "ev": 12311,
+ "いた": 12312,
+ "てきる": 12313,
+ "スホンサーサイト": 12314,
+ "learning": 12315,
+ "##ull": 12316,
+ "expedia": 12317,
+ "archives": 12318,
+ "change": 12319,
+ "##wei": 12320,
+ "santa": 12321,
+ "cut": 12322,
+ "ins": 12323,
+ "6gb": 12324,
+ "turbo": 12325,
+ "brand": 12326,
+ "cf1": 12327,
+ "508": 12328,
+ "004": 12329,
+ "return": 12330,
+ "747": 12331,
+ "##rip": 12332,
+ "h1": 12333,
+ "##nis": 12334,
+ "##をこ": 12335,
+ "128gb": 12336,
+ "##にお": 12337,
+ "3t": 12338,
+ "application": 12339,
+ "しており": 12340,
+ "emc": 12341,
+ "rx": 12342,
+ "##oon": 12343,
+ "384": 12344,
+ "quick": 12345,
+ "412": 12346,
+ "15058": 12347,
+ "wilson": 12348,
+ "wing": 12349,
+ "chapter": 12350,
+ "##bug": 12351,
+ "beyond": 12352,
+ "##cms": 12353,
+ "##dar": 12354,
+ "##oh": 12355,
+ "zoom": 12356,
+ "e2": 12357,
+ "trip": 12358,
+ "sb": 12359,
+ "##nba": 12360,
+ "rcep": 12361,
+ "342": 12362,
+ "aspx": 12363,
+ "ci": 12364,
+ "080": 12365,
+ "gc": 12366,
+ "gnu": 12367,
+ "める": 12368,
+ "##count": 12369,
+ "advanced": 12370,
+ "dance": 12371,
+ "dv": 12372,
+ "##url": 12373,
+ "##ging": 12374,
+ "367": 12375,
+ "8591": 12376,
+ "am09": 12377,
+ "shadow": 12378,
+ "battle": 12379,
+ "346": 12380,
+ "##i": 12381,
+ "##cia": 12382,
+ "##という": 12383,
+ "emily": 12384,
+ "##のてす": 12385,
+ "##tation": 12386,
+ "host": 12387,
+ "ff": 12388,
+ "techorz": 12389,
+ "sars": 12390,
+ "##mini": 12391,
+ "##mporary": 12392,
+ "##ering": 12393,
+ "nc": 12394,
+ "4200": 12395,
+ "798": 12396,
+ "##next": 12397,
+ "cma": 12398,
+ "##mbps": 12399,
+ "##gas": 12400,
+ "##ift": 12401,
+ "##dot": 12402,
+ "##ィ": 12403,
+ "455": 12404,
+ "##~17": 12405,
+ "amana": 12406,
+ "##りの": 12407,
+ "426": 12408,
+ "##ros": 12409,
+ "ir": 12410,
+ "00㎡1": 12411,
+ "##eet": 12412,
+ "##ible": 12413,
+ "##↓": 12414,
+ "710": 12415,
+ "ˋ▽ˊ": 12416,
+ "##aka": 12417,
+ "dcs": 12418,
+ "iq": 12419,
+ "##v": 12420,
+ "l1": 12421,
+ "##lor": 12422,
+ "maggie": 12423,
+ "##011": 12424,
+ "##iu": 12425,
+ "588": 12426,
+ "##~1": 12427,
+ "830": 12428,
+ "##gt": 12429,
+ "1tb": 12430,
+ "articles": 12431,
+ "create": 12432,
+ "##burg": 12433,
+ "##iki": 12434,
+ "database": 12435,
+ "fantasy": 12436,
+ "##rex": 12437,
+ "##cam": 12438,
+ "dlc": 12439,
+ "dean": 12440,
+ "##you": 12441,
+ "hard": 12442,
+ "path": 12443,
+ "gaming": 12444,
+ "victoria": 12445,
+ "maps": 12446,
+ "cb": 12447,
+ "##lee": 12448,
+ "##itor": 12449,
+ "overchicstoretvhome": 12450,
+ "systems": 12451,
+ "##xt": 12452,
+ "416": 12453,
+ "p3": 12454,
+ "sarah": 12455,
+ "760": 12456,
+ "##nan": 12457,
+ "407": 12458,
+ "486": 12459,
+ "x9": 12460,
+ "install": 12461,
+ "second": 12462,
+ "626": 12463,
+ "##ann": 12464,
+ "##ph": 12465,
+ "##rcle": 12466,
+ "##nic": 12467,
+ "860": 12468,
+ "##nar": 12469,
+ "ec": 12470,
+ "##とう": 12471,
+ "768": 12472,
+ "metro": 12473,
+ "chocolate": 12474,
+ "##rian": 12475,
+ "~4": 12476,
+ "##table": 12477,
+ "##しています": 12478,
+ "skin": 12479,
+ "##sn": 12480,
+ "395": 12481,
+ "mountain": 12482,
+ "##0mm": 12483,
+ "inparadise": 12484,
+ "6m": 12485,
+ "7x24": 12486,
+ "ib": 12487,
+ "4800": 12488,
+ "##jia": 12489,
+ "eeworld": 12490,
+ "creative": 12491,
+ "g5": 12492,
+ "g3": 12493,
+ "357": 12494,
+ "parker": 12495,
+ "ecfa": 12496,
+ "village": 12497,
+ "からの": 12498,
+ "18000": 12499,
+ "sylvia": 12500,
+ "サーヒス": 12501,
+ "hbl": 12502,
+ "##ques": 12503,
+ "##onsored": 12504,
+ "##x2": 12505,
+ "##きます": 12506,
+ "##v4": 12507,
+ "##tein": 12508,
+ "ie6": 12509,
+ "383": 12510,
+ "##stack": 12511,
+ "389": 12512,
+ "ver": 12513,
+ "##ads": 12514,
+ "##baby": 12515,
+ "sound": 12516,
+ "bbe": 12517,
+ "##110": 12518,
+ "##lone": 12519,
+ "##uid": 12520,
+ "ads": 12521,
+ "022": 12522,
+ "gundam": 12523,
+ "351": 12524,
+ "thinkpad": 12525,
+ "006": 12526,
+ "scrum": 12527,
+ "match": 12528,
+ "##ave": 12529,
+ "mems": 12530,
+ "##470": 12531,
+ "##oy": 12532,
+ "##なりました": 12533,
+ "##talk": 12534,
+ "glass": 12535,
+ "lamigo": 12536,
+ "span": 12537,
+ "##eme": 12538,
+ "job": 12539,
+ "##a5": 12540,
+ "jay": 12541,
+ "wade": 12542,
+ "kde": 12543,
+ "498": 12544,
+ "##lace": 12545,
+ "ocean": 12546,
+ "tvg": 12547,
+ "##covery": 12548,
+ "##r3": 12549,
+ "##ners": 12550,
+ "##rea": 12551,
+ "junior": 12552,
+ "think": 12553,
+ "##aine": 12554,
+ "cover": 12555,
+ "##ision": 12556,
+ "##sia": 12557,
+ "↓↓": 12558,
+ "##bow": 12559,
+ "msi": 12560,
+ "413": 12561,
+ "458": 12562,
+ "406": 12563,
+ "##love": 12564,
+ "711": 12565,
+ "801": 12566,
+ "soft": 12567,
+ "z2": 12568,
+ "##pl": 12569,
+ "456": 12570,
+ "1840": 12571,
+ "mobil": 12572,
+ "mind": 12573,
+ "##uy": 12574,
+ "427": 12575,
+ "nginx": 12576,
+ "##oi": 12577,
+ "めた": 12578,
+ "##rr": 12579,
+ "6221": 12580,
+ "##mple": 12581,
+ "##sson": 12582,
+ "##ーシてす": 12583,
+ "371": 12584,
+ "##nts": 12585,
+ "91tv": 12586,
+ "comhd": 12587,
+ "crv3000": 12588,
+ "##uard": 12589,
+ "1868": 12590,
+ "397": 12591,
+ "deep": 12592,
+ "lost": 12593,
+ "field": 12594,
+ "gallery": 12595,
+ "##bia": 12596,
+ "rate": 12597,
+ "spf": 12598,
+ "redis": 12599,
+ "traction": 12600,
+ "930": 12601,
+ "icloud": 12602,
+ "011": 12603,
+ "なら": 12604,
+ "fe": 12605,
+ "jose": 12606,
+ "372": 12607,
+ "##tory": 12608,
+ "into": 12609,
+ "sohu": 12610,
+ "fx": 12611,
+ "899": 12612,
+ "379": 12613,
+ "kicstart2": 12614,
+ "##hia": 12615,
+ "すく": 12616,
+ "##~3": 12617,
+ "##sit": 12618,
+ "ra": 12619,
+ "24": 12620,
+ "##walk": 12621,
+ "##xure": 12622,
+ "500g": 12623,
+ "##pact": 12624,
+ "pacific": 12625,
+ "xa": 12626,
+ "natural": 12627,
+ "carlo": 12628,
+ "##250": 12629,
+ "##walker": 12630,
+ "1850": 12631,
+ "##can": 12632,
+ "cto": 12633,
+ "gigi": 12634,
+ "516": 12635,
+ "##サー": 12636,
+ "pen": 12637,
+ "##hoo": 12638,
+ "ob": 12639,
+ "matlab": 12640,
+ "##b": 12641,
+ "##yy": 12642,
+ "13913459": 12643,
+ "##iti": 12644,
+ "mango": 12645,
+ "##bbs": 12646,
+ "sense": 12647,
+ "c5": 12648,
+ "oxford": 12649,
+ "##ニア": 12650,
+ "walker": 12651,
+ "jennifer": 12652,
+ "##ola": 12653,
+ "course": 12654,
+ "##bre": 12655,
+ "701": 12656,
+ "##pus": 12657,
+ "##rder": 12658,
+ "lucky": 12659,
+ "075": 12660,
+ "##ぁ": 12661,
+ "ivy": 12662,
+ "なお": 12663,
+ "##nia": 12664,
+ "sotheby": 12665,
+ "side": 12666,
+ "##ugh": 12667,
+ "joy": 12668,
+ "##orage": 12669,
+ "##ush": 12670,
+ "##bat": 12671,
+ "##dt": 12672,
+ "364": 12673,
+ "r9": 12674,
+ "##2d": 12675,
+ "##gio": 12676,
+ "511": 12677,
+ "country": 12678,
+ "wear": 12679,
+ "##lax": 12680,
+ "##~7": 12681,
+ "##moon": 12682,
+ "393": 12683,
+ "seven": 12684,
+ "study": 12685,
+ "411": 12686,
+ "348": 12687,
+ "lonzo": 12688,
+ "8k": 12689,
+ "##ェ": 12690,
+ "evolution": 12691,
+ "##イフ": 12692,
+ "##kk": 12693,
+ "gs": 12694,
+ "kd": 12695,
+ "##レス": 12696,
+ "arduino": 12697,
+ "344": 12698,
+ "b12": 12699,
+ "##lux": 12700,
+ "arpg": 12701,
+ "##rdon": 12702,
+ "cook": 12703,
+ "##x5": 12704,
+ "dark": 12705,
+ "five": 12706,
+ "##als": 12707,
+ "##ida": 12708,
+ "とても": 12709,
+ "sign": 12710,
+ "362": 12711,
+ "##ちの": 12712,
+ "something": 12713,
+ "20mm": 12714,
+ "##nda": 12715,
+ "387": 12716,
+ "##posted": 12717,
+ "fresh": 12718,
+ "tf": 12719,
+ "1870": 12720,
+ "422": 12721,
+ "cam": 12722,
+ "##mine": 12723,
+ "##skip": 12724,
+ "##form": 12725,
+ "##ssion": 12726,
+ "education": 12727,
+ "394": 12728,
+ "##tee": 12729,
+ "dyson": 12730,
+ "stage": 12731,
+ "##jie": 12732,
+ "want": 12733,
+ "##night": 12734,
+ "epson": 12735,
+ "pack": 12736,
+ "あります": 12737,
+ "##ppy": 12738,
+ "テリヘル": 12739,
+ "##█": 12740,
+ "wd": 12741,
+ "##eh": 12742,
+ "##rence": 12743,
+ "left": 12744,
+ "##lvin": 12745,
+ "golden": 12746,
+ "mhz": 12747,
+ "discovery": 12748,
+ "##trix": 12749,
+ "##n2": 12750,
+ "loft": 12751,
+ "##uch": 12752,
+ "##dra": 12753,
+ "##sse": 12754,
+ "speed": 12755,
+ "~1": 12756,
+ "1mdb": 12757,
+ "sorry": 12758,
+ "welcome": 12759,
+ "##urn": 12760,
+ "wave": 12761,
+ "gaga": 12762,
+ "##lmer": 12763,
+ "teddy": 12764,
+ "##160": 12765,
+ "トラックハック": 12766,
+ "せよ": 12767,
+ "611": 12768,
+ "##f2016": 12769,
+ "378": 12770,
+ "rp": 12771,
+ "##sha": 12772,
+ "rar": 12773,
+ "##あなたに": 12774,
+ "##きた": 12775,
+ "840": 12776,
+ "holiday": 12777,
+ "##ュー": 12778,
+ "373": 12779,
+ "074": 12780,
+ "##vg": 12781,
+ "##nos": 12782,
+ "##rail": 12783,
+ "gartner": 12784,
+ "gi": 12785,
+ "6p": 12786,
+ "##dium": 12787,
+ "kit": 12788,
+ "488": 12789,
+ "b3": 12790,
+ "eco": 12791,
+ "##ろう": 12792,
+ "20g": 12793,
+ "sean": 12794,
+ "##stone": 12795,
+ "autocad": 12796,
+ "nu": 12797,
+ "##np": 12798,
+ "f16": 12799,
+ "write": 12800,
+ "029": 12801,
+ "m5": 12802,
+ "##ias": 12803,
+ "images": 12804,
+ "atp": 12805,
+ "##dk": 12806,
+ "fsm": 12807,
+ "504": 12808,
+ "1350": 12809,
+ "ve": 12810,
+ "52kb": 12811,
+ "##xxx": 12812,
+ "##のに": 12813,
+ "##cake": 12814,
+ "414": 12815,
+ "unit": 12816,
+ "lim": 12817,
+ "ru": 12818,
+ "1v": 12819,
+ "##ification": 12820,
+ "published": 12821,
+ "angela": 12822,
+ "16g": 12823,
+ "analytics": 12824,
+ "ak": 12825,
+ "##q": 12826,
+ "##nel": 12827,
+ "gmt": 12828,
+ "##icon": 12829,
+ "again": 12830,
+ "##₂": 12831,
+ "##bby": 12832,
+ "ios11": 12833,
+ "445": 12834,
+ "かこさいます": 12835,
+ "waze": 12836,
+ "いてす": 12837,
+ "##ハ": 12838,
+ "9985": 12839,
+ "##ust": 12840,
+ "##ティー": 12841,
+ "framework": 12842,
+ "##007": 12843,
+ "iptv": 12844,
+ "delete": 12845,
+ "52sykb": 12846,
+ "cl": 12847,
+ "wwdc": 12848,
+ "027": 12849,
+ "30cm": 12850,
+ "##fw": 12851,
+ "##ての": 12852,
+ "1389": 12853,
+ "##xon": 12854,
+ "brandt": 12855,
+ "##ses": 12856,
+ "##dragon": 12857,
+ "tc": 12858,
+ "vetements": 12859,
+ "anne": 12860,
+ "monte": 12861,
+ "modern": 12862,
+ "official": 12863,
+ "##へて": 12864,
+ "##ere": 12865,
+ "##nne": 12866,
+ "##oud": 12867,
+ "もちろん": 12868,
+ "50": 12869,
+ "etnews": 12870,
+ "##a2": 12871,
+ "##graphy": 12872,
+ "421": 12873,
+ "863": 12874,
+ "##ちゃん": 12875,
+ "444": 12876,
+ "##rtex": 12877,
+ "##てお": 12878,
+ "l2": 12879,
+ "##gma": 12880,
+ "mount": 12881,
+ "ccd": 12882,
+ "たと": 12883,
+ "archive": 12884,
+ "morning": 12885,
+ "tan": 12886,
+ "ddos": 12887,
+ "e7": 12888,
+ "##ホ": 12889,
+ "day4": 12890,
+ "##ウ": 12891,
+ "gis": 12892,
+ "453": 12893,
+ "its": 12894,
+ "495": 12895,
+ "factory": 12896,
+ "bruce": 12897,
+ "pg": 12898,
+ "##ito": 12899,
+ "ってくたさい": 12900,
+ "guest": 12901,
+ "cdma": 12902,
+ "##lling": 12903,
+ "536": 12904,
+ "n3": 12905,
+ "しかし": 12906,
+ "3~4": 12907,
+ "mega": 12908,
+ "eyes": 12909,
+ "ro": 12910,
+ "13": 12911,
+ "women": 12912,
+ "dac": 12913,
+ "church": 12914,
+ "##jun": 12915,
+ "singapore": 12916,
+ "##facebook": 12917,
+ "6991": 12918,
+ "starbucks": 12919,
+ "##tos": 12920,
+ "##stin": 12921,
+ "##shine": 12922,
+ "zen": 12923,
+ "##mu": 12924,
+ "tina": 12925,
+ "20℃": 12926,
+ "1893": 12927,
+ "##たけて": 12928,
+ "503": 12929,
+ "465": 12930,
+ "request": 12931,
+ "##gence": 12932,
+ "qt": 12933,
+ "##っ": 12934,
+ "1886": 12935,
+ "347": 12936,
+ "363": 12937,
+ "q7": 12938,
+ "##zzi": 12939,
+ "diary": 12940,
+ "##tore": 12941,
+ "409": 12942,
+ "##ead": 12943,
+ "468": 12944,
+ "cst": 12945,
+ "##osa": 12946,
+ "canada": 12947,
+ "agent": 12948,
+ "va": 12949,
+ "##jiang": 12950,
+ "##ちは": 12951,
+ "##ーク": 12952,
+ "##lam": 12953,
+ "sg": 12954,
+ "##nix": 12955,
+ "##sday": 12956,
+ "##よって": 12957,
+ "g6": 12958,
+ "##master": 12959,
+ "bing": 12960,
+ "##zl": 12961,
+ "charlie": 12962,
+ "16": 12963,
+ "8mm": 12964,
+ "nb40": 12965,
+ "##ーン": 12966,
+ "thai": 12967,
+ "##ルフ": 12968,
+ "ln284ct": 12969,
+ "##itz": 12970,
+ "##2f": 12971,
+ "bonnie": 12972,
+ "##food": 12973,
+ "##lent": 12974,
+ "originals": 12975,
+ "##stro": 12976,
+ "##lts": 12977,
+ "418": 12978,
+ "∟∣": 12979,
+ "##bscribe": 12980,
+ "children": 12981,
+ "ntd": 12982,
+ "yesstyle": 12983,
+ "##かも": 12984,
+ "hmv": 12985,
+ "##tment": 12986,
+ "d5": 12987,
+ "2cm": 12988,
+ "arts": 12989,
+ "sms": 12990,
+ "##pn": 12991,
+ "##я": 12992,
+ "##いい": 12993,
+ "topios9": 12994,
+ "539": 12995,
+ "lifestyle": 12996,
+ "virtual": 12997,
+ "##ague": 12998,
+ "xz": 12999,
+ "##deo": 13000,
+ "muji": 13001,
+ "024": 13002,
+ "unt": 13003,
+ "##nnis": 13004,
+ "##ᅩ": 13005,
+ "faq1": 13006,
+ "1884": 13007,
+ "396": 13008,
+ "##ette": 13009,
+ "fly": 13010,
+ "64㎡": 13011,
+ "はしめまして": 13012,
+ "441": 13013,
+ "curry": 13014,
+ "##pop": 13015,
+ "のこ": 13016,
+ "release": 13017,
+ "##←": 13018,
+ "##◆◆": 13019,
+ "##cast": 13020,
+ "073": 13021,
+ "ありな": 13022,
+ "500ml": 13023,
+ "##ews": 13024,
+ "5c": 13025,
+ "##stle": 13026,
+ "ios7": 13027,
+ "##ima": 13028,
+ "787": 13029,
+ "dog": 13030,
+ "lenovo": 13031,
+ "##r4": 13032,
+ "roger": 13033,
+ "013": 13034,
+ "cbs": 13035,
+ "vornado": 13036,
+ "100m": 13037,
+ "417": 13038,
+ "##desk": 13039,
+ "##クok": 13040,
+ "##ald": 13041,
+ "1867": 13042,
+ "9595": 13043,
+ "2900": 13044,
+ "##van": 13045,
+ "oil": 13046,
+ "##x": 13047,
+ "some": 13048,
+ "break": 13049,
+ "common": 13050,
+ "##jy": 13051,
+ "##lines": 13052,
+ "g7": 13053,
+ "twice": 13054,
+ "419": 13055,
+ "ella": 13056,
+ "nano": 13057,
+ "belle": 13058,
+ "にこ": 13059,
+ "##mes": 13060,
+ "##self": 13061,
+ "##note": 13062,
+ "jb": 13063,
+ "##ことかてきます": 13064,
+ "benz": 13065,
+ "##との": 13066,
+ "##ova": 13067,
+ "451": 13068,
+ "save": 13069,
+ "##wing": 13070,
+ "##ますのて": 13071,
+ "kai": 13072,
+ "りは": 13073,
+ "##hua": 13074,
+ "##rect": 13075,
+ "rainer": 13076,
+ "##unge": 13077,
+ "448": 13078,
+ "##0m": 13079,
+ "adsl": 13080,
+ "##かな": 13081,
+ "guestname": 13082,
+ "##uma": 13083,
+ "##kins": 13084,
+ "##zu": 13085,
+ "tokichoi": 13086,
+ "##price": 13087,
+ "county": 13088,
+ "##med": 13089,
+ "##mus": 13090,
+ "rmk": 13091,
+ "391": 13092,
+ "address": 13093,
+ "vm": 13094,
+ "えて": 13095,
+ "openload": 13096,
+ "##group": 13097,
+ "##hin": 13098,
+ "##iginal": 13099,
+ "amg": 13100,
+ "urban": 13101,
+ "##oz": 13102,
+ "jobs": 13103,
+ "emi": 13104,
+ "##public": 13105,
+ "beautiful": 13106,
+ "##sch": 13107,
+ "album": 13108,
+ "##dden": 13109,
+ "##bell": 13110,
+ "jerry": 13111,
+ "works": 13112,
+ "hostel": 13113,
+ "miller": 13114,
+ "##drive": 13115,
+ "##rmin": 13116,
+ "##10": 13117,
+ "376": 13118,
+ "boot": 13119,
+ "828": 13120,
+ "##370": 13121,
+ "##fx": 13122,
+ "##cm~": 13123,
+ "1885": 13124,
+ "##nome": 13125,
+ "##ctionary": 13126,
+ "##oman": 13127,
+ "##lish": 13128,
+ "##cr": 13129,
+ "##hm": 13130,
+ "433": 13131,
+ "##how": 13132,
+ "432": 13133,
+ "francis": 13134,
+ "xi": 13135,
+ "c919": 13136,
+ "b5": 13137,
+ "evernote": 13138,
+ "##uc": 13139,
+ "vga": 13140,
+ "##3000": 13141,
+ "coupe": 13142,
+ "##urg": 13143,
+ "##cca": 13144,
+ "##uality": 13145,
+ "019": 13146,
+ "6g": 13147,
+ "れる": 13148,
+ "multi": 13149,
+ "##また": 13150,
+ "##ett": 13151,
+ "em": 13152,
+ "hey": 13153,
+ "##ani": 13154,
+ "##tax": 13155,
+ "##rma": 13156,
+ "inside": 13157,
+ "than": 13158,
+ "740": 13159,
+ "leonnhurt": 13160,
+ "##jin": 13161,
+ "ict": 13162,
+ "れた": 13163,
+ "bird": 13164,
+ "notes": 13165,
+ "200mm": 13166,
+ "くの": 13167,
+ "##dical": 13168,
+ "##lli": 13169,
+ "result": 13170,
+ "442": 13171,
+ "iu": 13172,
+ "ee": 13173,
+ "438": 13174,
+ "smap": 13175,
+ "gopro": 13176,
+ "##last": 13177,
+ "yin": 13178,
+ "pure": 13179,
+ "998": 13180,
+ "32g": 13181,
+ "けた": 13182,
+ "5kg": 13183,
+ "##dan": 13184,
+ "##rame": 13185,
+ "mama": 13186,
+ "##oot": 13187,
+ "bean": 13188,
+ "marketing": 13189,
+ "##hur": 13190,
+ "2l": 13191,
+ "bella": 13192,
+ "sync": 13193,
+ "xuite": 13194,
+ "##ground": 13195,
+ "515": 13196,
+ "discuz": 13197,
+ "##getrelax": 13198,
+ "##ince": 13199,
+ "##bay": 13200,
+ "##5s": 13201,
+ "cj": 13202,
+ "##イス": 13203,
+ "gmat": 13204,
+ "apt": 13205,
+ "##pass": 13206,
+ "jing": 13207,
+ "##rix": 13208,
+ "c4": 13209,
+ "rich": 13210,
+ "##とても": 13211,
+ "niusnews": 13212,
+ "##ello": 13213,
+ "bag": 13214,
+ "770": 13215,
+ "##eting": 13216,
+ "##mobile": 13217,
+ "18": 13218,
+ "culture": 13219,
+ "015": 13220,
+ "##のてすか": 13221,
+ "377": 13222,
+ "1020": 13223,
+ "area": 13224,
+ "##ience": 13225,
+ "616": 13226,
+ "details": 13227,
+ "gp": 13228,
+ "universal": 13229,
+ "silver": 13230,
+ "dit": 13231,
+ "はお": 13232,
+ "private": 13233,
+ "ddd": 13234,
+ "u11": 13235,
+ "kanshu": 13236,
+ "##ified": 13237,
+ "fung": 13238,
+ "##nny": 13239,
+ "dx": 13240,
+ "##520": 13241,
+ "tai": 13242,
+ "475": 13243,
+ "023": 13244,
+ "##fr": 13245,
+ "##lean": 13246,
+ "3s": 13247,
+ "##pin": 13248,
+ "429": 13249,
+ "##rin": 13250,
+ "25000": 13251,
+ "ly": 13252,
+ "rick": 13253,
+ "##bility": 13254,
+ "usb3": 13255,
+ "banner": 13256,
+ "##baru": 13257,
+ "##gion": 13258,
+ "metal": 13259,
+ "dt": 13260,
+ "vdf": 13261,
+ "1871": 13262,
+ "karl": 13263,
+ "qualcomm": 13264,
+ "bear": 13265,
+ "1010": 13266,
+ "oldid": 13267,
+ "ian": 13268,
+ "jo": 13269,
+ "##tors": 13270,
+ "population": 13271,
+ "##ernel": 13272,
+ "1882": 13273,
+ "mmorpg": 13274,
+ "##mv": 13275,
+ "##bike": 13276,
+ "603": 13277,
+ "##©": 13278,
+ "ww": 13279,
+ "friend": 13280,
+ "##ager": 13281,
+ "exhibition": 13282,
+ "##del": 13283,
+ "##pods": 13284,
+ "fpx": 13285,
+ "structure": 13286,
+ "##free": 13287,
+ "##tings": 13288,
+ "kl": 13289,
+ "##rley": 13290,
+ "##copyright": 13291,
+ "##mma": 13292,
+ "california": 13293,
+ "3400": 13294,
+ "orange": 13295,
+ "yoga": 13296,
+ "4l": 13297,
+ "canmake": 13298,
+ "honey": 13299,
+ "##anda": 13300,
+ "##コメント": 13301,
+ "595": 13302,
+ "nikkie": 13303,
+ "##ルハイト": 13304,
+ "dhl": 13305,
+ "publishing": 13306,
+ "##mall": 13307,
+ "##gnet": 13308,
+ "20cm": 13309,
+ "513": 13310,
+ "##クセス": 13311,
+ "##┅": 13312,
+ "e88": 13313,
+ "970": 13314,
+ "##dog": 13315,
+ "fishbase": 13316,
+ "##!": 13317,
+ "##\"": 13318,
+ "###": 13319,
+ "##$": 13320,
+ "##%": 13321,
+ "##&": 13322,
+ "##'": 13323,
+ "##(": 13324,
+ "##)": 13325,
+ "##*": 13326,
+ "##+": 13327,
+ "##,": 13328,
+ "##-": 13329,
+ "##.": 13330,
+ "##/": 13331,
+ "##:": 13332,
+ "##;": 13333,
+ "##<": 13334,
+ "##=": 13335,
+ "##>": 13336,
+ "##?": 13337,
+ "##@": 13338,
+ "##[": 13339,
+ "##\\": 13340,
+ "##]": 13341,
+ "##^": 13342,
+ "##_": 13343,
+ "##{": 13344,
+ "##|": 13345,
+ "##}": 13346,
+ "##~": 13347,
+ "##£": 13348,
+ "##¤": 13349,
+ "##¥": 13350,
+ "##§": 13351,
+ "##«": 13352,
+ "##±": 13353,
+ "##³": 13354,
+ "##µ": 13355,
+ "##·": 13356,
+ "##¹": 13357,
+ "##º": 13358,
+ "##»": 13359,
+ "##¼": 13360,
+ "##ß": 13361,
+ "##æ": 13362,
+ "##÷": 13363,
+ "##ø": 13364,
+ "##đ": 13365,
+ "##ŋ": 13366,
+ "##ɔ": 13367,
+ "##ə": 13368,
+ "##ɡ": 13369,
+ "##ʰ": 13370,
+ "##ˇ": 13371,
+ "##ˈ": 13372,
+ "##ˊ": 13373,
+ "##ˋ": 13374,
+ "##ˍ": 13375,
+ "##ː": 13376,
+ "##˙": 13377,
+ "##˚": 13378,
+ "##ˢ": 13379,
+ "##α": 13380,
+ "##β": 13381,
+ "##γ": 13382,
+ "##δ": 13383,
+ "##ε": 13384,
+ "##η": 13385,
+ "##θ": 13386,
+ "##ι": 13387,
+ "##κ": 13388,
+ "##λ": 13389,
+ "##μ": 13390,
+ "##ν": 13391,
+ "##ο": 13392,
+ "##π": 13393,
+ "##ρ": 13394,
+ "##ς": 13395,
+ "##σ": 13396,
+ "##τ": 13397,
+ "##υ": 13398,
+ "##φ": 13399,
+ "##χ": 13400,
+ "##ψ": 13401,
+ "##б": 13402,
+ "##в": 13403,
+ "##г": 13404,
+ "##д": 13405,
+ "##е": 13406,
+ "##ж": 13407,
+ "##з": 13408,
+ "##к": 13409,
+ "##л": 13410,
+ "##м": 13411,
+ "##н": 13412,
+ "##о": 13413,
+ "##п": 13414,
+ "##р": 13415,
+ "##с": 13416,
+ "##т": 13417,
+ "##у": 13418,
+ "##ф": 13419,
+ "##х": 13420,
+ "##ц": 13421,
+ "##ч": 13422,
+ "##ш": 13423,
+ "##ы": 13424,
+ "##ь": 13425,
+ "##і": 13426,
+ "##ا": 13427,
+ "##ب": 13428,
+ "##ة": 13429,
+ "##ت": 13430,
+ "##د": 13431,
+ "##ر": 13432,
+ "##س": 13433,
+ "##ع": 13434,
+ "##ل": 13435,
+ "##م": 13436,
+ "##ن": 13437,
+ "##ه": 13438,
+ "##و": 13439,
+ "##ي": 13440,
+ "##۩": 13441,
+ "##ก": 13442,
+ "##ง": 13443,
+ "##น": 13444,
+ "##ม": 13445,
+ "##ย": 13446,
+ "##ร": 13447,
+ "##อ": 13448,
+ "##า": 13449,
+ "##เ": 13450,
+ "##๑": 13451,
+ "##་": 13452,
+ "##ღ": 13453,
+ "##ᄀ": 13454,
+ "##ᄁ": 13455,
+ "##ᄂ": 13456,
+ "##ᄃ": 13457,
+ "##ᄅ": 13458,
+ "##ᄆ": 13459,
+ "##ᄇ": 13460,
+ "##ᄈ": 13461,
+ "##ᄉ": 13462,
+ "##ᄋ": 13463,
+ "##ᄌ": 13464,
+ "##ᄎ": 13465,
+ "##ᄏ": 13466,
+ "##ᄐ": 13467,
+ "##ᄑ": 13468,
+ "##ᄒ": 13469,
+ "##ᅢ": 13470,
+ "##ᅣ": 13471,
+ "##ᅥ": 13472,
+ "##ᅦ": 13473,
+ "##ᅧ": 13474,
+ "##ᅨ": 13475,
+ "##ᅪ": 13476,
+ "##ᅬ": 13477,
+ "##ᅭ": 13478,
+ "##ᅮ": 13479,
+ "##ᅯ": 13480,
+ "##ᅲ": 13481,
+ "##ᅳ": 13482,
+ "##ᅴ": 13483,
+ "##ᆷ": 13484,
+ "##ᆸ": 13485,
+ "##ᆺ": 13486,
+ "##ᆻ": 13487,
+ "##ᗜ": 13488,
+ "##ᵃ": 13489,
+ "##ᵉ": 13490,
+ "##ᵍ": 13491,
+ "##ᵏ": 13492,
+ "##ᵐ": 13493,
+ "##ᵒ": 13494,
+ "##ᵘ": 13495,
+ "##‖": 13496,
+ "##„": 13497,
+ "##†": 13498,
+ "##•": 13499,
+ "##‥": 13500,
+ "##‧": 13501,
+ "##
": 13502,
+ "##‰": 13503,
+ "##′": 13504,
+ "##″": 13505,
+ "##‹": 13506,
+ "##›": 13507,
+ "##※": 13508,
+ "##‿": 13509,
+ "##⁄": 13510,
+ "##ⁱ": 13511,
+ "##⁺": 13512,
+ "##ⁿ": 13513,
+ "##₁": 13514,
+ "##₃": 13515,
+ "##₄": 13516,
+ "##€": 13517,
+ "##№": 13518,
+ "##ⅰ": 13519,
+ "##ⅱ": 13520,
+ "##ⅲ": 13521,
+ "##ⅳ": 13522,
+ "##ⅴ": 13523,
+ "##↔": 13524,
+ "##↗": 13525,
+ "##↘": 13526,
+ "##⇒": 13527,
+ "##∀": 13528,
+ "##−": 13529,
+ "##∕": 13530,
+ "##∙": 13531,
+ "##√": 13532,
+ "##∞": 13533,
+ "##∟": 13534,
+ "##∠": 13535,
+ "##∣": 13536,
+ "##∩": 13537,
+ "##∮": 13538,
+ "##∶": 13539,
+ "##∼": 13540,
+ "##∽": 13541,
+ "##≈": 13542,
+ "##≒": 13543,
+ "##≡": 13544,
+ "##≤": 13545,
+ "##≥": 13546,
+ "##≦": 13547,
+ "##≧": 13548,
+ "##≪": 13549,
+ "##≫": 13550,
+ "##⊙": 13551,
+ "##⋅": 13552,
+ "##⋈": 13553,
+ "##⋯": 13554,
+ "##⌒": 13555,
+ "##①": 13556,
+ "##②": 13557,
+ "##③": 13558,
+ "##④": 13559,
+ "##⑤": 13560,
+ "##⑥": 13561,
+ "##⑦": 13562,
+ "##⑧": 13563,
+ "##⑨": 13564,
+ "##⑩": 13565,
+ "##⑴": 13566,
+ "##⑵": 13567,
+ "##⑶": 13568,
+ "##⑷": 13569,
+ "##⑸": 13570,
+ "##⒈": 13571,
+ "##⒉": 13572,
+ "##⒊": 13573,
+ "##⒋": 13574,
+ "##ⓒ": 13575,
+ "##ⓔ": 13576,
+ "##ⓘ": 13577,
+ "##━": 13578,
+ "##┃": 13579,
+ "##┆": 13580,
+ "##┊": 13581,
+ "##┌": 13582,
+ "##└": 13583,
+ "##├": 13584,
+ "##┣": 13585,
+ "##═": 13586,
+ "##║": 13587,
+ "##╚": 13588,
+ "##╞": 13589,
+ "##╠": 13590,
+ "##╭": 13591,
+ "##╮": 13592,
+ "##╯": 13593,
+ "##╰": 13594,
+ "##╱": 13595,
+ "##╳": 13596,
+ "##▂": 13597,
+ "##▃": 13598,
+ "##▅": 13599,
+ "##▇": 13600,
+ "##▉": 13601,
+ "##▋": 13602,
+ "##▌": 13603,
+ "##▍": 13604,
+ "##▎": 13605,
+ "##□": 13606,
+ "##▪": 13607,
+ "##▫": 13608,
+ "##▬": 13609,
+ "##△": 13610,
+ "##▶": 13611,
+ "##►": 13612,
+ "##▽": 13613,
+ "##◇": 13614,
+ "##◕": 13615,
+ "##◠": 13616,
+ "##◢": 13617,
+ "##◤": 13618,
+ "##☀": 13619,
+ "##☕": 13620,
+ "##☞": 13621,
+ "##☺": 13622,
+ "##☼": 13623,
+ "##♀": 13624,
+ "##♂": 13625,
+ "##♠": 13626,
+ "##♡": 13627,
+ "##♣": 13628,
+ "##♦": 13629,
+ "##♫": 13630,
+ "##♬": 13631,
+ "##✈": 13632,
+ "##✔": 13633,
+ "##✕": 13634,
+ "##✖": 13635,
+ "##✦": 13636,
+ "##✨": 13637,
+ "##✪": 13638,
+ "##✰": 13639,
+ "##✿": 13640,
+ "##❀": 13641,
+ "##➜": 13642,
+ "##➤": 13643,
+ "##⦿": 13644,
+ "##、": 13645,
+ "##。": 13646,
+ "##〃": 13647,
+ "##々": 13648,
+ "##〇": 13649,
+ "##〈": 13650,
+ "##〉": 13651,
+ "##《": 13652,
+ "##》": 13653,
+ "##「": 13654,
+ "##」": 13655,
+ "##『": 13656,
+ "##』": 13657,
+ "##【": 13658,
+ "##】": 13659,
+ "##〓": 13660,
+ "##〔": 13661,
+ "##〕": 13662,
+ "##〖": 13663,
+ "##〗": 13664,
+ "##〜": 13665,
+ "##〝": 13666,
+ "##〞": 13667,
+ "##ぃ": 13668,
+ "##ぇ": 13669,
+ "##ぬ": 13670,
+ "##ふ": 13671,
+ "##ほ": 13672,
+ "##む": 13673,
+ "##ゃ": 13674,
+ "##ゅ": 13675,
+ "##ゆ": 13676,
+ "##ょ": 13677,
+ "##゜": 13678,
+ "##ゝ": 13679,
+ "##ァ": 13680,
+ "##ゥ": 13681,
+ "##エ": 13682,
+ "##ォ": 13683,
+ "##ケ": 13684,
+ "##サ": 13685,
+ "##セ": 13686,
+ "##ソ": 13687,
+ "##ッ": 13688,
+ "##ニ": 13689,
+ "##ヌ": 13690,
+ "##ネ": 13691,
+ "##ノ": 13692,
+ "##ヘ": 13693,
+ "##モ": 13694,
+ "##ャ": 13695,
+ "##ヤ": 13696,
+ "##ュ": 13697,
+ "##ユ": 13698,
+ "##ョ": 13699,
+ "##ヨ": 13700,
+ "##ワ": 13701,
+ "##ヲ": 13702,
+ "##・": 13703,
+ "##ヽ": 13704,
+ "##ㄅ": 13705,
+ "##ㄆ": 13706,
+ "##ㄇ": 13707,
+ "##ㄉ": 13708,
+ "##ㄋ": 13709,
+ "##ㄌ": 13710,
+ "##ㄍ": 13711,
+ "##ㄎ": 13712,
+ "##ㄏ": 13713,
+ "##ㄒ": 13714,
+ "##ㄚ": 13715,
+ "##ㄛ": 13716,
+ "##ㄞ": 13717,
+ "##ㄟ": 13718,
+ "##ㄢ": 13719,
+ "##ㄤ": 13720,
+ "##ㄥ": 13721,
+ "##ㄧ": 13722,
+ "##ㄨ": 13723,
+ "##ㆍ": 13724,
+ "##㈦": 13725,
+ "##㊣": 13726,
+ "##㗎": 13727,
+ "##一": 13728,
+ "##丁": 13729,
+ "##七": 13730,
+ "##万": 13731,
+ "##丈": 13732,
+ "##三": 13733,
+ "##上": 13734,
+ "##下": 13735,
+ "##不": 13736,
+ "##与": 13737,
+ "##丐": 13738,
+ "##丑": 13739,
+ "##专": 13740,
+ "##且": 13741,
+ "##丕": 13742,
+ "##世": 13743,
+ "##丘": 13744,
+ "##丙": 13745,
+ "##业": 13746,
+ "##丛": 13747,
+ "##东": 13748,
+ "##丝": 13749,
+ "##丞": 13750,
+ "##丟": 13751,
+ "##両": 13752,
+ "##丢": 13753,
+ "##两": 13754,
+ "##严": 13755,
+ "##並": 13756,
+ "##丧": 13757,
+ "##丨": 13758,
+ "##个": 13759,
+ "##丫": 13760,
+ "##中": 13761,
+ "##丰": 13762,
+ "##串": 13763,
+ "##临": 13764,
+ "##丶": 13765,
+ "##丸": 13766,
+ "##丹": 13767,
+ "##为": 13768,
+ "##主": 13769,
+ "##丼": 13770,
+ "##丽": 13771,
+ "##举": 13772,
+ "##丿": 13773,
+ "##乂": 13774,
+ "##乃": 13775,
+ "##久": 13776,
+ "##么": 13777,
+ "##义": 13778,
+ "##之": 13779,
+ "##乌": 13780,
+ "##乍": 13781,
+ "##乎": 13782,
+ "##乏": 13783,
+ "##乐": 13784,
+ "##乒": 13785,
+ "##乓": 13786,
+ "##乔": 13787,
+ "##乖": 13788,
+ "##乗": 13789,
+ "##乘": 13790,
+ "##乙": 13791,
+ "##乜": 13792,
+ "##九": 13793,
+ "##乞": 13794,
+ "##也": 13795,
+ "##习": 13796,
+ "##乡": 13797,
+ "##书": 13798,
+ "##乩": 13799,
+ "##买": 13800,
+ "##乱": 13801,
+ "##乳": 13802,
+ "##乾": 13803,
+ "##亀": 13804,
+ "##亂": 13805,
+ "##了": 13806,
+ "##予": 13807,
+ "##争": 13808,
+ "##事": 13809,
+ "##二": 13810,
+ "##于": 13811,
+ "##亏": 13812,
+ "##云": 13813,
+ "##互": 13814,
+ "##五": 13815,
+ "##井": 13816,
+ "##亘": 13817,
+ "##亙": 13818,
+ "##亚": 13819,
+ "##些": 13820,
+ "##亜": 13821,
+ "##亞": 13822,
+ "##亟": 13823,
+ "##亡": 13824,
+ "##亢": 13825,
+ "##交": 13826,
+ "##亥": 13827,
+ "##亦": 13828,
+ "##产": 13829,
+ "##亨": 13830,
+ "##亩": 13831,
+ "##享": 13832,
+ "##京": 13833,
+ "##亭": 13834,
+ "##亮": 13835,
+ "##亲": 13836,
+ "##亳": 13837,
+ "##亵": 13838,
+ "##人": 13839,
+ "##亿": 13840,
+ "##什": 13841,
+ "##仁": 13842,
+ "##仃": 13843,
+ "##仄": 13844,
+ "##仅": 13845,
+ "##仆": 13846,
+ "##仇": 13847,
+ "##今": 13848,
+ "##介": 13849,
+ "##仍": 13850,
+ "##从": 13851,
+ "##仏": 13852,
+ "##仑": 13853,
+ "##仓": 13854,
+ "##仔": 13855,
+ "##仕": 13856,
+ "##他": 13857,
+ "##仗": 13858,
+ "##付": 13859,
+ "##仙": 13860,
+ "##仝": 13861,
+ "##仞": 13862,
+ "##仟": 13863,
+ "##代": 13864,
+ "##令": 13865,
+ "##以": 13866,
+ "##仨": 13867,
+ "##仪": 13868,
+ "##们": 13869,
+ "##仮": 13870,
+ "##仰": 13871,
+ "##仲": 13872,
+ "##件": 13873,
+ "##价": 13874,
+ "##任": 13875,
+ "##份": 13876,
+ "##仿": 13877,
+ "##企": 13878,
+ "##伉": 13879,
+ "##伊": 13880,
+ "##伍": 13881,
+ "##伎": 13882,
+ "##伏": 13883,
+ "##伐": 13884,
+ "##休": 13885,
+ "##伕": 13886,
+ "##众": 13887,
+ "##优": 13888,
+ "##伙": 13889,
+ "##会": 13890,
+ "##伝": 13891,
+ "##伞": 13892,
+ "##伟": 13893,
+ "##传": 13894,
+ "##伢": 13895,
+ "##伤": 13896,
+ "##伦": 13897,
+ "##伪": 13898,
+ "##伫": 13899,
+ "##伯": 13900,
+ "##估": 13901,
+ "##伴": 13902,
+ "##伶": 13903,
+ "##伸": 13904,
+ "##伺": 13905,
+ "##似": 13906,
+ "##伽": 13907,
+ "##佃": 13908,
+ "##但": 13909,
+ "##佇": 13910,
+ "##佈": 13911,
+ "##位": 13912,
+ "##低": 13913,
+ "##住": 13914,
+ "##佐": 13915,
+ "##佑": 13916,
+ "##体": 13917,
+ "##佔": 13918,
+ "##何": 13919,
+ "##佗": 13920,
+ "##佘": 13921,
+ "##余": 13922,
+ "##佚": 13923,
+ "##佛": 13924,
+ "##作": 13925,
+ "##佝": 13926,
+ "##佞": 13927,
+ "##佟": 13928,
+ "##你": 13929,
+ "##佢": 13930,
+ "##佣": 13931,
+ "##佤": 13932,
+ "##佥": 13933,
+ "##佩": 13934,
+ "##佬": 13935,
+ "##佯": 13936,
+ "##佰": 13937,
+ "##佳": 13938,
+ "##併": 13939,
+ "##佶": 13940,
+ "##佻": 13941,
+ "##佼": 13942,
+ "##使": 13943,
+ "##侃": 13944,
+ "##侄": 13945,
+ "##來": 13946,
+ "##侈": 13947,
+ "##例": 13948,
+ "##侍": 13949,
+ "##侏": 13950,
+ "##侑": 13951,
+ "##侖": 13952,
+ "##侗": 13953,
+ "##供": 13954,
+ "##依": 13955,
+ "##侠": 13956,
+ "##価": 13957,
+ "##侣": 13958,
+ "##侥": 13959,
+ "##侦": 13960,
+ "##侧": 13961,
+ "##侨": 13962,
+ "##侬": 13963,
+ "##侮": 13964,
+ "##侯": 13965,
+ "##侵": 13966,
+ "##侶": 13967,
+ "##侷": 13968,
+ "##便": 13969,
+ "##係": 13970,
+ "##促": 13971,
+ "##俄": 13972,
+ "##俊": 13973,
+ "##俎": 13974,
+ "##俏": 13975,
+ "##俐": 13976,
+ "##俑": 13977,
+ "##俗": 13978,
+ "##俘": 13979,
+ "##俚": 13980,
+ "##保": 13981,
+ "##俞": 13982,
+ "##俟": 13983,
+ "##俠": 13984,
+ "##信": 13985,
+ "##俨": 13986,
+ "##俩": 13987,
+ "##俪": 13988,
+ "##俬": 13989,
+ "##俭": 13990,
+ "##修": 13991,
+ "##俯": 13992,
+ "##俱": 13993,
+ "##俳": 13994,
+ "##俸": 13995,
+ "##俺": 13996,
+ "##俾": 13997,
+ "##倆": 13998,
+ "##倉": 13999,
+ "##個": 14000,
+ "##倌": 14001,
+ "##倍": 14002,
+ "##倏": 14003,
+ "##們": 14004,
+ "##倒": 14005,
+ "##倔": 14006,
+ "##倖": 14007,
+ "##倘": 14008,
+ "##候": 14009,
+ "##倚": 14010,
+ "##倜": 14011,
+ "##借": 14012,
+ "##倡": 14013,
+ "##値": 14014,
+ "##倦": 14015,
+ "##倩": 14016,
+ "##倪": 14017,
+ "##倫": 14018,
+ "##倬": 14019,
+ "##倭": 14020,
+ "##倶": 14021,
+ "##债": 14022,
+ "##值": 14023,
+ "##倾": 14024,
+ "##偃": 14025,
+ "##假": 14026,
+ "##偈": 14027,
+ "##偉": 14028,
+ "##偌": 14029,
+ "##偎": 14030,
+ "##偏": 14031,
+ "##偕": 14032,
+ "##做": 14033,
+ "##停": 14034,
+ "##健": 14035,
+ "##側": 14036,
+ "##偵": 14037,
+ "##偶": 14038,
+ "##偷": 14039,
+ "##偻": 14040,
+ "##偽": 14041,
+ "##偿": 14042,
+ "##傀": 14043,
+ "##傅": 14044,
+ "##傍": 14045,
+ "##傑": 14046,
+ "##傘": 14047,
+ "##備": 14048,
+ "##傚": 14049,
+ "##傢": 14050,
+ "##傣": 14051,
+ "##傥": 14052,
+ "##储": 14053,
+ "##傩": 14054,
+ "##催": 14055,
+ "##傭": 14056,
+ "##傲": 14057,
+ "##傳": 14058,
+ "##債": 14059,
+ "##傷": 14060,
+ "##傻": 14061,
+ "##傾": 14062,
+ "##僅": 14063,
+ "##働": 14064,
+ "##像": 14065,
+ "##僑": 14066,
+ "##僕": 14067,
+ "##僖": 14068,
+ "##僚": 14069,
+ "##僥": 14070,
+ "##僧": 14071,
+ "##僭": 14072,
+ "##僮": 14073,
+ "##僱": 14074,
+ "##僵": 14075,
+ "##價": 14076,
+ "##僻": 14077,
+ "##儀": 14078,
+ "##儂": 14079,
+ "##億": 14080,
+ "##儆": 14081,
+ "##儉": 14082,
+ "##儋": 14083,
+ "##儒": 14084,
+ "##儕": 14085,
+ "##儘": 14086,
+ "##償": 14087,
+ "##儡": 14088,
+ "##優": 14089,
+ "##儲": 14090,
+ "##儷": 14091,
+ "##儼": 14092,
+ "##儿": 14093,
+ "##兀": 14094,
+ "##允": 14095,
+ "##元": 14096,
+ "##兄": 14097,
+ "##充": 14098,
+ "##兆": 14099,
+ "##兇": 14100,
+ "##先": 14101,
+ "##光": 14102,
+ "##克": 14103,
+ "##兌": 14104,
+ "##免": 14105,
+ "##児": 14106,
+ "##兑": 14107,
+ "##兒": 14108,
+ "##兔": 14109,
+ "##兖": 14110,
+ "##党": 14111,
+ "##兜": 14112,
+ "##兢": 14113,
+ "##入": 14114,
+ "##內": 14115,
+ "##全": 14116,
+ "##兩": 14117,
+ "##八": 14118,
+ "##公": 14119,
+ "##六": 14120,
+ "##兮": 14121,
+ "##兰": 14122,
+ "##共": 14123,
+ "##兲": 14124,
+ "##关": 14125,
+ "##兴": 14126,
+ "##兵": 14127,
+ "##其": 14128,
+ "##具": 14129,
+ "##典": 14130,
+ "##兹": 14131,
+ "##养": 14132,
+ "##兼": 14133,
+ "##兽": 14134,
+ "##冀": 14135,
+ "##内": 14136,
+ "##円": 14137,
+ "##冇": 14138,
+ "##冈": 14139,
+ "##冉": 14140,
+ "##冊": 14141,
+ "##册": 14142,
+ "##再": 14143,
+ "##冏": 14144,
+ "##冒": 14145,
+ "##冕": 14146,
+ "##冗": 14147,
+ "##写": 14148,
+ "##军": 14149,
+ "##农": 14150,
+ "##冠": 14151,
+ "##冢": 14152,
+ "##冤": 14153,
+ "##冥": 14154,
+ "##冨": 14155,
+ "##冪": 14156,
+ "##冬": 14157,
+ "##冯": 14158,
+ "##冰": 14159,
+ "##冲": 14160,
+ "##决": 14161,
+ "##况": 14162,
+ "##冶": 14163,
+ "##冷": 14164,
+ "##冻": 14165,
+ "##冼": 14166,
+ "##冽": 14167,
+ "##冾": 14168,
+ "##净": 14169,
+ "##凄": 14170,
+ "##准": 14171,
+ "##凇": 14172,
+ "##凈": 14173,
+ "##凉": 14174,
+ "##凋": 14175,
+ "##凌": 14176,
+ "##凍": 14177,
+ "##减": 14178,
+ "##凑": 14179,
+ "##凛": 14180,
+ "##凜": 14181,
+ "##凝": 14182,
+ "##几": 14183,
+ "##凡": 14184,
+ "##凤": 14185,
+ "##処": 14186,
+ "##凪": 14187,
+ "##凭": 14188,
+ "##凯": 14189,
+ "##凰": 14190,
+ "##凱": 14191,
+ "##凳": 14192,
+ "##凶": 14193,
+ "##凸": 14194,
+ "##凹": 14195,
+ "##出": 14196,
+ "##击": 14197,
+ "##函": 14198,
+ "##凿": 14199,
+ "##刀": 14200,
+ "##刁": 14201,
+ "##刃": 14202,
+ "##分": 14203,
+ "##切": 14204,
+ "##刈": 14205,
+ "##刊": 14206,
+ "##刍": 14207,
+ "##刎": 14208,
+ "##刑": 14209,
+ "##划": 14210,
+ "##列": 14211,
+ "##刘": 14212,
+ "##则": 14213,
+ "##刚": 14214,
+ "##创": 14215,
+ "##初": 14216,
+ "##删": 14217,
+ "##判": 14218,
+ "##別": 14219,
+ "##刨": 14220,
+ "##利": 14221,
+ "##刪": 14222,
+ "##别": 14223,
+ "##刮": 14224,
+ "##到": 14225,
+ "##制": 14226,
+ "##刷": 14227,
+ "##券": 14228,
+ "##刹": 14229,
+ "##刺": 14230,
+ "##刻": 14231,
+ "##刽": 14232,
+ "##剁": 14233,
+ "##剂": 14234,
+ "##剃": 14235,
+ "##則": 14236,
+ "##剉": 14237,
+ "##削": 14238,
+ "##剋": 14239,
+ "##剌": 14240,
+ "##前": 14241,
+ "##剎": 14242,
+ "##剐": 14243,
+ "##剑": 14244,
+ "##剔": 14245,
+ "##剖": 14246,
+ "##剛": 14247,
+ "##剜": 14248,
+ "##剝": 14249,
+ "##剣": 14250,
+ "##剤": 14251,
+ "##剥": 14252,
+ "##剧": 14253,
+ "##剩": 14254,
+ "##剪": 14255,
+ "##副": 14256,
+ "##割": 14257,
+ "##創": 14258,
+ "##剷": 14259,
+ "##剽": 14260,
+ "##剿": 14261,
+ "##劃": 14262,
+ "##劇": 14263,
+ "##劈": 14264,
+ "##劉": 14265,
+ "##劊": 14266,
+ "##劍": 14267,
+ "##劏": 14268,
+ "##劑": 14269,
+ "##力": 14270,
+ "##劝": 14271,
+ "##办": 14272,
+ "##功": 14273,
+ "##加": 14274,
+ "##务": 14275,
+ "##劣": 14276,
+ "##动": 14277,
+ "##助": 14278,
+ "##努": 14279,
+ "##劫": 14280,
+ "##劭": 14281,
+ "##励": 14282,
+ "##劲": 14283,
+ "##劳": 14284,
+ "##労": 14285,
+ "##劵": 14286,
+ "##効": 14287,
+ "##劾": 14288,
+ "##势": 14289,
+ "##勁": 14290,
+ "##勃": 14291,
+ "##勇": 14292,
+ "##勉": 14293,
+ "##勋": 14294,
+ "##勐": 14295,
+ "##勒": 14296,
+ "##動": 14297,
+ "##勖": 14298,
+ "##勘": 14299,
+ "##務": 14300,
+ "##勛": 14301,
+ "##勝": 14302,
+ "##勞": 14303,
+ "##募": 14304,
+ "##勢": 14305,
+ "##勤": 14306,
+ "##勧": 14307,
+ "##勳": 14308,
+ "##勵": 14309,
+ "##勸": 14310,
+ "##勺": 14311,
+ "##勻": 14312,
+ "##勾": 14313,
+ "##勿": 14314,
+ "##匀": 14315,
+ "##包": 14316,
+ "##匆": 14317,
+ "##匈": 14318,
+ "##匍": 14319,
+ "##匐": 14320,
+ "##匕": 14321,
+ "##化": 14322,
+ "##北": 14323,
+ "##匙": 14324,
+ "##匝": 14325,
+ "##匠": 14326,
+ "##匡": 14327,
+ "##匣": 14328,
+ "##匪": 14329,
+ "##匮": 14330,
+ "##匯": 14331,
+ "##匱": 14332,
+ "##匹": 14333,
+ "##区": 14334,
+ "##医": 14335,
+ "##匾": 14336,
+ "##匿": 14337,
+ "##區": 14338,
+ "##十": 14339,
+ "##千": 14340,
+ "##卅": 14341,
+ "##升": 14342,
+ "##午": 14343,
+ "##卉": 14344,
+ "##半": 14345,
+ "##卍": 14346,
+ "##华": 14347,
+ "##协": 14348,
+ "##卑": 14349,
+ "##卒": 14350,
+ "##卓": 14351,
+ "##協": 14352,
+ "##单": 14353,
+ "##卖": 14354,
+ "##南": 14355,
+ "##単": 14356,
+ "##博": 14357,
+ "##卜": 14358,
+ "##卞": 14359,
+ "##卟": 14360,
+ "##占": 14361,
+ "##卡": 14362,
+ "##卢": 14363,
+ "##卤": 14364,
+ "##卦": 14365,
+ "##卧": 14366,
+ "##卫": 14367,
+ "##卮": 14368,
+ "##卯": 14369,
+ "##印": 14370,
+ "##危": 14371,
+ "##即": 14372,
+ "##却": 14373,
+ "##卵": 14374,
+ "##卷": 14375,
+ "##卸": 14376,
+ "##卻": 14377,
+ "##卿": 14378,
+ "##厂": 14379,
+ "##厄": 14380,
+ "##厅": 14381,
+ "##历": 14382,
+ "##厉": 14383,
+ "##压": 14384,
+ "##厌": 14385,
+ "##厕": 14386,
+ "##厘": 14387,
+ "##厚": 14388,
+ "##厝": 14389,
+ "##原": 14390,
+ "##厢": 14391,
+ "##厥": 14392,
+ "##厦": 14393,
+ "##厨": 14394,
+ "##厩": 14395,
+ "##厭": 14396,
+ "##厮": 14397,
+ "##厲": 14398,
+ "##厳": 14399,
+ "##去": 14400,
+ "##县": 14401,
+ "##叁": 14402,
+ "##参": 14403,
+ "##參": 14404,
+ "##又": 14405,
+ "##叉": 14406,
+ "##及": 14407,
+ "##友": 14408,
+ "##双": 14409,
+ "##反": 14410,
+ "##収": 14411,
+ "##发": 14412,
+ "##叔": 14413,
+ "##取": 14414,
+ "##受": 14415,
+ "##变": 14416,
+ "##叙": 14417,
+ "##叛": 14418,
+ "##叟": 14419,
+ "##叠": 14420,
+ "##叡": 14421,
+ "##叢": 14422,
+ "##口": 14423,
+ "##古": 14424,
+ "##句": 14425,
+ "##另": 14426,
+ "##叨": 14427,
+ "##叩": 14428,
+ "##只": 14429,
+ "##叫": 14430,
+ "##召": 14431,
+ "##叭": 14432,
+ "##叮": 14433,
+ "##可": 14434,
+ "##台": 14435,
+ "##叱": 14436,
+ "##史": 14437,
+ "##右": 14438,
+ "##叵": 14439,
+ "##叶": 14440,
+ "##号": 14441,
+ "##司": 14442,
+ "##叹": 14443,
+ "##叻": 14444,
+ "##叼": 14445,
+ "##叽": 14446,
+ "##吁": 14447,
+ "##吃": 14448,
+ "##各": 14449,
+ "##吆": 14450,
+ "##合": 14451,
+ "##吉": 14452,
+ "##吊": 14453,
+ "##吋": 14454,
+ "##同": 14455,
+ "##名": 14456,
+ "##后": 14457,
+ "##吏": 14458,
+ "##吐": 14459,
+ "##向": 14460,
+ "##吒": 14461,
+ "##吓": 14462,
+ "##吕": 14463,
+ "##吖": 14464,
+ "##吗": 14465,
+ "##君": 14466,
+ "##吝": 14467,
+ "##吞": 14468,
+ "##吟": 14469,
+ "##吠": 14470,
+ "##吡": 14471,
+ "##否": 14472,
+ "##吧": 14473,
+ "##吨": 14474,
+ "##吩": 14475,
+ "##含": 14476,
+ "##听": 14477,
+ "##吭": 14478,
+ "##吮": 14479,
+ "##启": 14480,
+ "##吱": 14481,
+ "##吳": 14482,
+ "##吴": 14483,
+ "##吵": 14484,
+ "##吶": 14485,
+ "##吸": 14486,
+ "##吹": 14487,
+ "##吻": 14488,
+ "##吼": 14489,
+ "##吽": 14490,
+ "##吾": 14491,
+ "##呀": 14492,
+ "##呂": 14493,
+ "##呃": 14494,
+ "##呆": 14495,
+ "##呈": 14496,
+ "##告": 14497,
+ "##呋": 14498,
+ "##呎": 14499,
+ "##呐": 14500,
+ "##呓": 14501,
+ "##呕": 14502,
+ "##呗": 14503,
+ "##员": 14504,
+ "##呛": 14505,
+ "##呜": 14506,
+ "##呢": 14507,
+ "##呤": 14508,
+ "##呦": 14509,
+ "##周": 14510,
+ "##呱": 14511,
+ "##呲": 14512,
+ "##味": 14513,
+ "##呵": 14514,
+ "##呷": 14515,
+ "##呸": 14516,
+ "##呻": 14517,
+ "##呼": 14518,
+ "##命": 14519,
+ "##咀": 14520,
+ "##咁": 14521,
+ "##咂": 14522,
+ "##咄": 14523,
+ "##咆": 14524,
+ "##咋": 14525,
+ "##和": 14526,
+ "##咎": 14527,
+ "##咏": 14528,
+ "##咐": 14529,
+ "##咒": 14530,
+ "##咔": 14531,
+ "##咕": 14532,
+ "##咖": 14533,
+ "##咗": 14534,
+ "##咘": 14535,
+ "##咙": 14536,
+ "##咚": 14537,
+ "##咛": 14538,
+ "##咣": 14539,
+ "##咤": 14540,
+ "##咦": 14541,
+ "##咧": 14542,
+ "##咨": 14543,
+ "##咩": 14544,
+ "##咪": 14545,
+ "##咫": 14546,
+ "##咬": 14547,
+ "##咭": 14548,
+ "##咯": 14549,
+ "##咱": 14550,
+ "##咲": 14551,
+ "##咳": 14552,
+ "##咸": 14553,
+ "##咻": 14554,
+ "##咽": 14555,
+ "##咿": 14556,
+ "##哀": 14557,
+ "##品": 14558,
+ "##哂": 14559,
+ "##哄": 14560,
+ "##哆": 14561,
+ "##哇": 14562,
+ "##哈": 14563,
+ "##哉": 14564,
+ "##哋": 14565,
+ "##哌": 14566,
+ "##响": 14567,
+ "##哎": 14568,
+ "##哏": 14569,
+ "##哐": 14570,
+ "##哑": 14571,
+ "##哒": 14572,
+ "##哔": 14573,
+ "##哗": 14574,
+ "##哟": 14575,
+ "##員": 14576,
+ "##哥": 14577,
+ "##哦": 14578,
+ "##哧": 14579,
+ "##哨": 14580,
+ "##哩": 14581,
+ "##哪": 14582,
+ "##哭": 14583,
+ "##哮": 14584,
+ "##哲": 14585,
+ "##哺": 14586,
+ "##哼": 14587,
+ "##哽": 14588,
+ "##唁": 14589,
+ "##唄": 14590,
+ "##唆": 14591,
+ "##唇": 14592,
+ "##唉": 14593,
+ "##唏": 14594,
+ "##唐": 14595,
+ "##唑": 14596,
+ "##唔": 14597,
+ "##唠": 14598,
+ "##唤": 14599,
+ "##唧": 14600,
+ "##唬": 14601,
+ "##售": 14602,
+ "##唯": 14603,
+ "##唰": 14604,
+ "##唱": 14605,
+ "##唳": 14606,
+ "##唷": 14607,
+ "##唸": 14608,
+ "##唾": 14609,
+ "##啃": 14610,
+ "##啄": 14611,
+ "##商": 14612,
+ "##啉": 14613,
+ "##啊": 14614,
+ "##問": 14615,
+ "##啓": 14616,
+ "##啕": 14617,
+ "##啖": 14618,
+ "##啜": 14619,
+ "##啞": 14620,
+ "##啟": 14621,
+ "##啡": 14622,
+ "##啤": 14623,
+ "##啥": 14624,
+ "##啦": 14625,
+ "##啧": 14626,
+ "##啪": 14627,
+ "##啫": 14628,
+ "##啬": 14629,
+ "##啮": 14630,
+ "##啰": 14631,
+ "##啱": 14632,
+ "##啲": 14633,
+ "##啵": 14634,
+ "##啶": 14635,
+ "##啷": 14636,
+ "##啸": 14637,
+ "##啻": 14638,
+ "##啼": 14639,
+ "##啾": 14640,
+ "##喀": 14641,
+ "##喂": 14642,
+ "##喃": 14643,
+ "##善": 14644,
+ "##喆": 14645,
+ "##喇": 14646,
+ "##喉": 14647,
+ "##喊": 14648,
+ "##喋": 14649,
+ "##喎": 14650,
+ "##喏": 14651,
+ "##喔": 14652,
+ "##喘": 14653,
+ "##喙": 14654,
+ "##喚": 14655,
+ "##喜": 14656,
+ "##喝": 14657,
+ "##喟": 14658,
+ "##喧": 14659,
+ "##喪": 14660,
+ "##喫": 14661,
+ "##喬": 14662,
+ "##單": 14663,
+ "##喰": 14664,
+ "##喱": 14665,
+ "##喲": 14666,
+ "##喳": 14667,
+ "##喵": 14668,
+ "##営": 14669,
+ "##喷": 14670,
+ "##喹": 14671,
+ "##喺": 14672,
+ "##喻": 14673,
+ "##喽": 14674,
+ "##嗅": 14675,
+ "##嗆": 14676,
+ "##嗇": 14677,
+ "##嗎": 14678,
+ "##嗑": 14679,
+ "##嗒": 14680,
+ "##嗓": 14681,
+ "##嗔": 14682,
+ "##嗖": 14683,
+ "##嗚": 14684,
+ "##嗜": 14685,
+ "##嗝": 14686,
+ "##嗟": 14687,
+ "##嗡": 14688,
+ "##嗣": 14689,
+ "##嗤": 14690,
+ "##嗦": 14691,
+ "##嗨": 14692,
+ "##嗪": 14693,
+ "##嗬": 14694,
+ "##嗯": 14695,
+ "##嗰": 14696,
+ "##嗲": 14697,
+ "##嗳": 14698,
+ "##嗶": 14699,
+ "##嗷": 14700,
+ "##嗽": 14701,
+ "##嘀": 14702,
+ "##嘅": 14703,
+ "##嘆": 14704,
+ "##嘈": 14705,
+ "##嘉": 14706,
+ "##嘌": 14707,
+ "##嘍": 14708,
+ "##嘎": 14709,
+ "##嘔": 14710,
+ "##嘖": 14711,
+ "##嘗": 14712,
+ "##嘘": 14713,
+ "##嘚": 14714,
+ "##嘛": 14715,
+ "##嘜": 14716,
+ "##嘞": 14717,
+ "##嘟": 14718,
+ "##嘢": 14719,
+ "##嘣": 14720,
+ "##嘤": 14721,
+ "##嘧": 14722,
+ "##嘩": 14723,
+ "##嘭": 14724,
+ "##嘮": 14725,
+ "##嘯": 14726,
+ "##嘰": 14727,
+ "##嘱": 14728,
+ "##嘲": 14729,
+ "##嘴": 14730,
+ "##嘶": 14731,
+ "##嘸": 14732,
+ "##嘹": 14733,
+ "##嘻": 14734,
+ "##嘿": 14735,
+ "##噁": 14736,
+ "##噌": 14737,
+ "##噎": 14738,
+ "##噓": 14739,
+ "##噔": 14740,
+ "##噗": 14741,
+ "##噙": 14742,
+ "##噜": 14743,
+ "##噠": 14744,
+ "##噢": 14745,
+ "##噤": 14746,
+ "##器": 14747,
+ "##噩": 14748,
+ "##噪": 14749,
+ "##噬": 14750,
+ "##噱": 14751,
+ "##噴": 14752,
+ "##噶": 14753,
+ "##噸": 14754,
+ "##噹": 14755,
+ "##噻": 14756,
+ "##噼": 14757,
+ "##嚀": 14758,
+ "##嚇": 14759,
+ "##嚎": 14760,
+ "##嚏": 14761,
+ "##嚐": 14762,
+ "##嚓": 14763,
+ "##嚕": 14764,
+ "##嚟": 14765,
+ "##嚣": 14766,
+ "##嚥": 14767,
+ "##嚨": 14768,
+ "##嚮": 14769,
+ "##嚴": 14770,
+ "##嚷": 14771,
+ "##嚼": 14772,
+ "##囂": 14773,
+ "##囉": 14774,
+ "##囊": 14775,
+ "##囍": 14776,
+ "##囑": 14777,
+ "##囔": 14778,
+ "##囗": 14779,
+ "##囚": 14780,
+ "##四": 14781,
+ "##囝": 14782,
+ "##回": 14783,
+ "##囟": 14784,
+ "##因": 14785,
+ "##囡": 14786,
+ "##团": 14787,
+ "##団": 14788,
+ "##囤": 14789,
+ "##囧": 14790,
+ "##囪": 14791,
+ "##囫": 14792,
+ "##园": 14793,
+ "##困": 14794,
+ "##囱": 14795,
+ "##囲": 14796,
+ "##図": 14797,
+ "##围": 14798,
+ "##囹": 14799,
+ "##固": 14800,
+ "##国": 14801,
+ "##图": 14802,
+ "##囿": 14803,
+ "##圃": 14804,
+ "##圄": 14805,
+ "##圆": 14806,
+ "##圈": 14807,
+ "##國": 14808,
+ "##圍": 14809,
+ "##圏": 14810,
+ "##園": 14811,
+ "##圓": 14812,
+ "##圖": 14813,
+ "##團": 14814,
+ "##圜": 14815,
+ "##土": 14816,
+ "##圣": 14817,
+ "##圧": 14818,
+ "##在": 14819,
+ "##圩": 14820,
+ "##圭": 14821,
+ "##地": 14822,
+ "##圳": 14823,
+ "##场": 14824,
+ "##圻": 14825,
+ "##圾": 14826,
+ "##址": 14827,
+ "##坂": 14828,
+ "##均": 14829,
+ "##坊": 14830,
+ "##坍": 14831,
+ "##坎": 14832,
+ "##坏": 14833,
+ "##坐": 14834,
+ "##坑": 14835,
+ "##块": 14836,
+ "##坚": 14837,
+ "##坛": 14838,
+ "##坝": 14839,
+ "##坞": 14840,
+ "##坟": 14841,
+ "##坠": 14842,
+ "##坡": 14843,
+ "##坤": 14844,
+ "##坦": 14845,
+ "##坨": 14846,
+ "##坪": 14847,
+ "##坯": 14848,
+ "##坳": 14849,
+ "##坵": 14850,
+ "##坷": 14851,
+ "##垂": 14852,
+ "##垃": 14853,
+ "##垄": 14854,
+ "##型": 14855,
+ "##垒": 14856,
+ "##垚": 14857,
+ "##垛": 14858,
+ "##垠": 14859,
+ "##垢": 14860,
+ "##垣": 14861,
+ "##垦": 14862,
+ "##垩": 14863,
+ "##垫": 14864,
+ "##垭": 14865,
+ "##垮": 14866,
+ "##垵": 14867,
+ "##埂": 14868,
+ "##埃": 14869,
+ "##埋": 14870,
+ "##城": 14871,
+ "##埔": 14872,
+ "##埕": 14873,
+ "##埗": 14874,
+ "##域": 14875,
+ "##埠": 14876,
+ "##埤": 14877,
+ "##埵": 14878,
+ "##執": 14879,
+ "##埸": 14880,
+ "##培": 14881,
+ "##基": 14882,
+ "##埼": 14883,
+ "##堀": 14884,
+ "##堂": 14885,
+ "##堃": 14886,
+ "##堅": 14887,
+ "##堆": 14888,
+ "##堇": 14889,
+ "##堑": 14890,
+ "##堕": 14891,
+ "##堙": 14892,
+ "##堡": 14893,
+ "##堤": 14894,
+ "##堪": 14895,
+ "##堯": 14896,
+ "##堰": 14897,
+ "##報": 14898,
+ "##場": 14899,
+ "##堵": 14900,
+ "##堺": 14901,
+ "##堿": 14902,
+ "##塊": 14903,
+ "##塌": 14904,
+ "##塑": 14905,
+ "##塔": 14906,
+ "##塗": 14907,
+ "##塘": 14908,
+ "##塚": 14909,
+ "##塞": 14910,
+ "##塢": 14911,
+ "##塩": 14912,
+ "##填": 14913,
+ "##塬": 14914,
+ "##塭": 14915,
+ "##塵": 14916,
+ "##塾": 14917,
+ "##墀": 14918,
+ "##境": 14919,
+ "##墅": 14920,
+ "##墉": 14921,
+ "##墊": 14922,
+ "##墒": 14923,
+ "##墓": 14924,
+ "##増": 14925,
+ "##墘": 14926,
+ "##墙": 14927,
+ "##墜": 14928,
+ "##增": 14929,
+ "##墟": 14930,
+ "##墨": 14931,
+ "##墩": 14932,
+ "##墮": 14933,
+ "##墳": 14934,
+ "##墻": 14935,
+ "##墾": 14936,
+ "##壁": 14937,
+ "##壅": 14938,
+ "##壆": 14939,
+ "##壇": 14940,
+ "##壊": 14941,
+ "##壑": 14942,
+ "##壓": 14943,
+ "##壕": 14944,
+ "##壘": 14945,
+ "##壞": 14946,
+ "##壟": 14947,
+ "##壢": 14948,
+ "##壤": 14949,
+ "##壩": 14950,
+ "##士": 14951,
+ "##壬": 14952,
+ "##壮": 14953,
+ "##壯": 14954,
+ "##声": 14955,
+ "##売": 14956,
+ "##壳": 14957,
+ "##壶": 14958,
+ "##壹": 14959,
+ "##壺": 14960,
+ "##壽": 14961,
+ "##处": 14962,
+ "##备": 14963,
+ "##変": 14964,
+ "##复": 14965,
+ "##夏": 14966,
+ "##夔": 14967,
+ "##夕": 14968,
+ "##外": 14969,
+ "##夙": 14970,
+ "##多": 14971,
+ "##夜": 14972,
+ "##够": 14973,
+ "##夠": 14974,
+ "##夢": 14975,
+ "##夥": 14976,
+ "##大": 14977,
+ "##天": 14978,
+ "##太": 14979,
+ "##夫": 14980,
+ "##夭": 14981,
+ "##央": 14982,
+ "##夯": 14983,
+ "##失": 14984,
+ "##头": 14985,
+ "##夷": 14986,
+ "##夸": 14987,
+ "##夹": 14988,
+ "##夺": 14989,
+ "##夾": 14990,
+ "##奂": 14991,
+ "##奄": 14992,
+ "##奇": 14993,
+ "##奈": 14994,
+ "##奉": 14995,
+ "##奋": 14996,
+ "##奎": 14997,
+ "##奏": 14998,
+ "##奐": 14999,
+ "##契": 15000,
+ "##奔": 15001,
+ "##奕": 15002,
+ "##奖": 15003,
+ "##套": 15004,
+ "##奘": 15005,
+ "##奚": 15006,
+ "##奠": 15007,
+ "##奢": 15008,
+ "##奥": 15009,
+ "##奧": 15010,
+ "##奪": 15011,
+ "##奬": 15012,
+ "##奮": 15013,
+ "##女": 15014,
+ "##奴": 15015,
+ "##奶": 15016,
+ "##奸": 15017,
+ "##她": 15018,
+ "##好": 15019,
+ "##如": 15020,
+ "##妃": 15021,
+ "##妄": 15022,
+ "##妆": 15023,
+ "##妇": 15024,
+ "##妈": 15025,
+ "##妊": 15026,
+ "##妍": 15027,
+ "##妒": 15028,
+ "##妓": 15029,
+ "##妖": 15030,
+ "##妘": 15031,
+ "##妙": 15032,
+ "##妝": 15033,
+ "##妞": 15034,
+ "##妣": 15035,
+ "##妤": 15036,
+ "##妥": 15037,
+ "##妨": 15038,
+ "##妩": 15039,
+ "##妪": 15040,
+ "##妮": 15041,
+ "##妲": 15042,
+ "##妳": 15043,
+ "##妹": 15044,
+ "##妻": 15045,
+ "##妾": 15046,
+ "##姆": 15047,
+ "##姉": 15048,
+ "##姊": 15049,
+ "##始": 15050,
+ "##姍": 15051,
+ "##姐": 15052,
+ "##姑": 15053,
+ "##姒": 15054,
+ "##姓": 15055,
+ "##委": 15056,
+ "##姗": 15057,
+ "##姚": 15058,
+ "##姜": 15059,
+ "##姝": 15060,
+ "##姣": 15061,
+ "##姥": 15062,
+ "##姦": 15063,
+ "##姨": 15064,
+ "##姪": 15065,
+ "##姫": 15066,
+ "##姬": 15067,
+ "##姹": 15068,
+ "##姻": 15069,
+ "##姿": 15070,
+ "##威": 15071,
+ "##娃": 15072,
+ "##娄": 15073,
+ "##娅": 15074,
+ "##娆": 15075,
+ "##娇": 15076,
+ "##娉": 15077,
+ "##娑": 15078,
+ "##娓": 15079,
+ "##娘": 15080,
+ "##娛": 15081,
+ "##娜": 15082,
+ "##娟": 15083,
+ "##娠": 15084,
+ "##娣": 15085,
+ "##娥": 15086,
+ "##娩": 15087,
+ "##娱": 15088,
+ "##娲": 15089,
+ "##娴": 15090,
+ "##娶": 15091,
+ "##娼": 15092,
+ "##婀": 15093,
+ "##婁": 15094,
+ "##婆": 15095,
+ "##婉": 15096,
+ "##婊": 15097,
+ "##婕": 15098,
+ "##婚": 15099,
+ "##婢": 15100,
+ "##婦": 15101,
+ "##婧": 15102,
+ "##婪": 15103,
+ "##婭": 15104,
+ "##婴": 15105,
+ "##婵": 15106,
+ "##婶": 15107,
+ "##婷": 15108,
+ "##婺": 15109,
+ "##婿": 15110,
+ "##媒": 15111,
+ "##媚": 15112,
+ "##媛": 15113,
+ "##媞": 15114,
+ "##媧": 15115,
+ "##媲": 15116,
+ "##媳": 15117,
+ "##媽": 15118,
+ "##媾": 15119,
+ "##嫁": 15120,
+ "##嫂": 15121,
+ "##嫉": 15122,
+ "##嫌": 15123,
+ "##嫑": 15124,
+ "##嫔": 15125,
+ "##嫖": 15126,
+ "##嫘": 15127,
+ "##嫚": 15128,
+ "##嫡": 15129,
+ "##嫣": 15130,
+ "##嫦": 15131,
+ "##嫩": 15132,
+ "##嫲": 15133,
+ "##嫵": 15134,
+ "##嫻": 15135,
+ "##嬅": 15136,
+ "##嬉": 15137,
+ "##嬌": 15138,
+ "##嬗": 15139,
+ "##嬛": 15140,
+ "##嬢": 15141,
+ "##嬤": 15142,
+ "##嬪": 15143,
+ "##嬰": 15144,
+ "##嬴": 15145,
+ "##嬷": 15146,
+ "##嬸": 15147,
+ "##嬿": 15148,
+ "##孀": 15149,
+ "##孃": 15150,
+ "##子": 15151,
+ "##孑": 15152,
+ "##孔": 15153,
+ "##孕": 15154,
+ "##孖": 15155,
+ "##字": 15156,
+ "##存": 15157,
+ "##孙": 15158,
+ "##孚": 15159,
+ "##孛": 15160,
+ "##孜": 15161,
+ "##孝": 15162,
+ "##孟": 15163,
+ "##孢": 15164,
+ "##季": 15165,
+ "##孤": 15166,
+ "##学": 15167,
+ "##孩": 15168,
+ "##孪": 15169,
+ "##孫": 15170,
+ "##孬": 15171,
+ "##孰": 15172,
+ "##孱": 15173,
+ "##孳": 15174,
+ "##孵": 15175,
+ "##學": 15176,
+ "##孺": 15177,
+ "##孽": 15178,
+ "##孿": 15179,
+ "##宁": 15180,
+ "##它": 15181,
+ "##宅": 15182,
+ "##宇": 15183,
+ "##守": 15184,
+ "##安": 15185,
+ "##宋": 15186,
+ "##完": 15187,
+ "##宏": 15188,
+ "##宓": 15189,
+ "##宕": 15190,
+ "##宗": 15191,
+ "##官": 15192,
+ "##宙": 15193,
+ "##定": 15194,
+ "##宛": 15195,
+ "##宜": 15196,
+ "##宝": 15197,
+ "##实": 15198,
+ "##実": 15199,
+ "##宠": 15200,
+ "##审": 15201,
+ "##客": 15202,
+ "##宣": 15203,
+ "##室": 15204,
+ "##宥": 15205,
+ "##宦": 15206,
+ "##宪": 15207,
+ "##宫": 15208,
+ "##宮": 15209,
+ "##宰": 15210,
+ "##害": 15211,
+ "##宴": 15212,
+ "##宵": 15213,
+ "##家": 15214,
+ "##宸": 15215,
+ "##容": 15216,
+ "##宽": 15217,
+ "##宾": 15218,
+ "##宿": 15219,
+ "##寂": 15220,
+ "##寄": 15221,
+ "##寅": 15222,
+ "##密": 15223,
+ "##寇": 15224,
+ "##富": 15225,
+ "##寐": 15226,
+ "##寒": 15227,
+ "##寓": 15228,
+ "##寛": 15229,
+ "##寝": 15230,
+ "##寞": 15231,
+ "##察": 15232,
+ "##寡": 15233,
+ "##寢": 15234,
+ "##寥": 15235,
+ "##實": 15236,
+ "##寧": 15237,
+ "##寨": 15238,
+ "##審": 15239,
+ "##寫": 15240,
+ "##寬": 15241,
+ "##寮": 15242,
+ "##寰": 15243,
+ "##寵": 15244,
+ "##寶": 15245,
+ "##寸": 15246,
+ "##对": 15247,
+ "##寺": 15248,
+ "##寻": 15249,
+ "##导": 15250,
+ "##対": 15251,
+ "##寿": 15252,
+ "##封": 15253,
+ "##専": 15254,
+ "##射": 15255,
+ "##将": 15256,
+ "##將": 15257,
+ "##專": 15258,
+ "##尉": 15259,
+ "##尊": 15260,
+ "##尋": 15261,
+ "##對": 15262,
+ "##導": 15263,
+ "##小": 15264,
+ "##少": 15265,
+ "##尔": 15266,
+ "##尕": 15267,
+ "##尖": 15268,
+ "##尘": 15269,
+ "##尚": 15270,
+ "##尝": 15271,
+ "##尤": 15272,
+ "##尧": 15273,
+ "##尬": 15274,
+ "##就": 15275,
+ "##尴": 15276,
+ "##尷": 15277,
+ "##尸": 15278,
+ "##尹": 15279,
+ "##尺": 15280,
+ "##尻": 15281,
+ "##尼": 15282,
+ "##尽": 15283,
+ "##尾": 15284,
+ "##尿": 15285,
+ "##局": 15286,
+ "##屁": 15287,
+ "##层": 15288,
+ "##屄": 15289,
+ "##居": 15290,
+ "##屆": 15291,
+ "##屈": 15292,
+ "##屉": 15293,
+ "##届": 15294,
+ "##屋": 15295,
+ "##屌": 15296,
+ "##屍": 15297,
+ "##屎": 15298,
+ "##屏": 15299,
+ "##屐": 15300,
+ "##屑": 15301,
+ "##展": 15302,
+ "##屜": 15303,
+ "##属": 15304,
+ "##屠": 15305,
+ "##屡": 15306,
+ "##屢": 15307,
+ "##層": 15308,
+ "##履": 15309,
+ "##屬": 15310,
+ "##屯": 15311,
+ "##山": 15312,
+ "##屹": 15313,
+ "##屿": 15314,
+ "##岀": 15315,
+ "##岁": 15316,
+ "##岂": 15317,
+ "##岌": 15318,
+ "##岐": 15319,
+ "##岑": 15320,
+ "##岔": 15321,
+ "##岖": 15322,
+ "##岗": 15323,
+ "##岘": 15324,
+ "##岙": 15325,
+ "##岚": 15326,
+ "##岛": 15327,
+ "##岡": 15328,
+ "##岩": 15329,
+ "##岫": 15330,
+ "##岬": 15331,
+ "##岭": 15332,
+ "##岱": 15333,
+ "##岳": 15334,
+ "##岷": 15335,
+ "##岸": 15336,
+ "##峇": 15337,
+ "##峋": 15338,
+ "##峒": 15339,
+ "##峙": 15340,
+ "##峡": 15341,
+ "##峤": 15342,
+ "##峥": 15343,
+ "##峦": 15344,
+ "##峨": 15345,
+ "##峪": 15346,
+ "##峭": 15347,
+ "##峯": 15348,
+ "##峰": 15349,
+ "##峴": 15350,
+ "##島": 15351,
+ "##峻": 15352,
+ "##峽": 15353,
+ "##崁": 15354,
+ "##崂": 15355,
+ "##崆": 15356,
+ "##崇": 15357,
+ "##崎": 15358,
+ "##崑": 15359,
+ "##崔": 15360,
+ "##崖": 15361,
+ "##崗": 15362,
+ "##崙": 15363,
+ "##崛": 15364,
+ "##崧": 15365,
+ "##崩": 15366,
+ "##崭": 15367,
+ "##崴": 15368,
+ "##崽": 15369,
+ "##嵇": 15370,
+ "##嵊": 15371,
+ "##嵋": 15372,
+ "##嵌": 15373,
+ "##嵐": 15374,
+ "##嵘": 15375,
+ "##嵩": 15376,
+ "##嵬": 15377,
+ "##嵯": 15378,
+ "##嶂": 15379,
+ "##嶄": 15380,
+ "##嶇": 15381,
+ "##嶋": 15382,
+ "##嶙": 15383,
+ "##嶺": 15384,
+ "##嶼": 15385,
+ "##嶽": 15386,
+ "##巅": 15387,
+ "##巍": 15388,
+ "##巒": 15389,
+ "##巔": 15390,
+ "##巖": 15391,
+ "##川": 15392,
+ "##州": 15393,
+ "##巡": 15394,
+ "##巢": 15395,
+ "##工": 15396,
+ "##左": 15397,
+ "##巧": 15398,
+ "##巨": 15399,
+ "##巩": 15400,
+ "##巫": 15401,
+ "##差": 15402,
+ "##己": 15403,
+ "##已": 15404,
+ "##巳": 15405,
+ "##巴": 15406,
+ "##巷": 15407,
+ "##巻": 15408,
+ "##巽": 15409,
+ "##巾": 15410,
+ "##巿": 15411,
+ "##币": 15412,
+ "##市": 15413,
+ "##布": 15414,
+ "##帅": 15415,
+ "##帆": 15416,
+ "##师": 15417,
+ "##希": 15418,
+ "##帐": 15419,
+ "##帑": 15420,
+ "##帕": 15421,
+ "##帖": 15422,
+ "##帘": 15423,
+ "##帚": 15424,
+ "##帛": 15425,
+ "##帜": 15426,
+ "##帝": 15427,
+ "##帥": 15428,
+ "##带": 15429,
+ "##帧": 15430,
+ "##師": 15431,
+ "##席": 15432,
+ "##帮": 15433,
+ "##帯": 15434,
+ "##帰": 15435,
+ "##帳": 15436,
+ "##帶": 15437,
+ "##帷": 15438,
+ "##常": 15439,
+ "##帼": 15440,
+ "##帽": 15441,
+ "##幀": 15442,
+ "##幂": 15443,
+ "##幄": 15444,
+ "##幅": 15445,
+ "##幌": 15446,
+ "##幔": 15447,
+ "##幕": 15448,
+ "##幟": 15449,
+ "##幡": 15450,
+ "##幢": 15451,
+ "##幣": 15452,
+ "##幫": 15453,
+ "##干": 15454,
+ "##平": 15455,
+ "##年": 15456,
+ "##并": 15457,
+ "##幸": 15458,
+ "##幹": 15459,
+ "##幺": 15460,
+ "##幻": 15461,
+ "##幼": 15462,
+ "##幽": 15463,
+ "##幾": 15464,
+ "##广": 15465,
+ "##庁": 15466,
+ "##広": 15467,
+ "##庄": 15468,
+ "##庆": 15469,
+ "##庇": 15470,
+ "##床": 15471,
+ "##序": 15472,
+ "##庐": 15473,
+ "##库": 15474,
+ "##应": 15475,
+ "##底": 15476,
+ "##庖": 15477,
+ "##店": 15478,
+ "##庙": 15479,
+ "##庚": 15480,
+ "##府": 15481,
+ "##庞": 15482,
+ "##废": 15483,
+ "##庠": 15484,
+ "##度": 15485,
+ "##座": 15486,
+ "##庫": 15487,
+ "##庭": 15488,
+ "##庵": 15489,
+ "##庶": 15490,
+ "##康": 15491,
+ "##庸": 15492,
+ "##庹": 15493,
+ "##庾": 15494,
+ "##廁": 15495,
+ "##廂": 15496,
+ "##廃": 15497,
+ "##廈": 15498,
+ "##廉": 15499,
+ "##廊": 15500,
+ "##廓": 15501,
+ "##廖": 15502,
+ "##廚": 15503,
+ "##廝": 15504,
+ "##廟": 15505,
+ "##廠": 15506,
+ "##廢": 15507,
+ "##廣": 15508,
+ "##廬": 15509,
+ "##廳": 15510,
+ "##延": 15511,
+ "##廷": 15512,
+ "##建": 15513,
+ "##廿": 15514,
+ "##开": 15515,
+ "##弁": 15516,
+ "##异": 15517,
+ "##弃": 15518,
+ "##弄": 15519,
+ "##弈": 15520,
+ "##弊": 15521,
+ "##弋": 15522,
+ "##式": 15523,
+ "##弑": 15524,
+ "##弒": 15525,
+ "##弓": 15526,
+ "##弔": 15527,
+ "##引": 15528,
+ "##弗": 15529,
+ "##弘": 15530,
+ "##弛": 15531,
+ "##弟": 15532,
+ "##张": 15533,
+ "##弥": 15534,
+ "##弦": 15535,
+ "##弧": 15536,
+ "##弩": 15537,
+ "##弭": 15538,
+ "##弯": 15539,
+ "##弱": 15540,
+ "##張": 15541,
+ "##強": 15542,
+ "##弹": 15543,
+ "##强": 15544,
+ "##弼": 15545,
+ "##弾": 15546,
+ "##彅": 15547,
+ "##彆": 15548,
+ "##彈": 15549,
+ "##彌": 15550,
+ "##彎": 15551,
+ "##归": 15552,
+ "##当": 15553,
+ "##录": 15554,
+ "##彗": 15555,
+ "##彙": 15556,
+ "##彝": 15557,
+ "##形": 15558,
+ "##彤": 15559,
+ "##彥": 15560,
+ "##彦": 15561,
+ "##彧": 15562,
+ "##彩": 15563,
+ "##彪": 15564,
+ "##彫": 15565,
+ "##彬": 15566,
+ "##彭": 15567,
+ "##彰": 15568,
+ "##影": 15569,
+ "##彷": 15570,
+ "##役": 15571,
+ "##彻": 15572,
+ "##彼": 15573,
+ "##彿": 15574,
+ "##往": 15575,
+ "##征": 15576,
+ "##径": 15577,
+ "##待": 15578,
+ "##徇": 15579,
+ "##很": 15580,
+ "##徉": 15581,
+ "##徊": 15582,
+ "##律": 15583,
+ "##後": 15584,
+ "##徐": 15585,
+ "##徑": 15586,
+ "##徒": 15587,
+ "##従": 15588,
+ "##徕": 15589,
+ "##得": 15590,
+ "##徘": 15591,
+ "##徙": 15592,
+ "##徜": 15593,
+ "##從": 15594,
+ "##徠": 15595,
+ "##御": 15596,
+ "##徨": 15597,
+ "##復": 15598,
+ "##循": 15599,
+ "##徬": 15600,
+ "##微": 15601,
+ "##徳": 15602,
+ "##徴": 15603,
+ "##徵": 15604,
+ "##德": 15605,
+ "##徹": 15606,
+ "##徼": 15607,
+ "##徽": 15608,
+ "##心": 15609,
+ "##必": 15610,
+ "##忆": 15611,
+ "##忌": 15612,
+ "##忍": 15613,
+ "##忏": 15614,
+ "##忐": 15615,
+ "##忑": 15616,
+ "##忒": 15617,
+ "##忖": 15618,
+ "##志": 15619,
+ "##忘": 15620,
+ "##忙": 15621,
+ "##応": 15622,
+ "##忠": 15623,
+ "##忡": 15624,
+ "##忤": 15625,
+ "##忧": 15626,
+ "##忪": 15627,
+ "##快": 15628,
+ "##忱": 15629,
+ "##念": 15630,
+ "##忻": 15631,
+ "##忽": 15632,
+ "##忿": 15633,
+ "##怀": 15634,
+ "##态": 15635,
+ "##怂": 15636,
+ "##怅": 15637,
+ "##怆": 15638,
+ "##怎": 15639,
+ "##怏": 15640,
+ "##怒": 15641,
+ "##怔": 15642,
+ "##怕": 15643,
+ "##怖": 15644,
+ "##怙": 15645,
+ "##怜": 15646,
+ "##思": 15647,
+ "##怠": 15648,
+ "##怡": 15649,
+ "##急": 15650,
+ "##怦": 15651,
+ "##性": 15652,
+ "##怨": 15653,
+ "##怪": 15654,
+ "##怯": 15655,
+ "##怵": 15656,
+ "##总": 15657,
+ "##怼": 15658,
+ "##恁": 15659,
+ "##恃": 15660,
+ "##恆": 15661,
+ "##恋": 15662,
+ "##恍": 15663,
+ "##恐": 15664,
+ "##恒": 15665,
+ "##恕": 15666,
+ "##恙": 15667,
+ "##恚": 15668,
+ "##恢": 15669,
+ "##恣": 15670,
+ "##恤": 15671,
+ "##恥": 15672,
+ "##恨": 15673,
+ "##恩": 15674,
+ "##恪": 15675,
+ "##恫": 15676,
+ "##恬": 15677,
+ "##恭": 15678,
+ "##息": 15679,
+ "##恰": 15680,
+ "##恳": 15681,
+ "##恵": 15682,
+ "##恶": 15683,
+ "##恸": 15684,
+ "##恺": 15685,
+ "##恻": 15686,
+ "##恼": 15687,
+ "##恿": 15688,
+ "##悄": 15689,
+ "##悅": 15690,
+ "##悉": 15691,
+ "##悌": 15692,
+ "##悍": 15693,
+ "##悔": 15694,
+ "##悖": 15695,
+ "##悚": 15696,
+ "##悟": 15697,
+ "##悠": 15698,
+ "##患": 15699,
+ "##悦": 15700,
+ "##您": 15701,
+ "##悩": 15702,
+ "##悪": 15703,
+ "##悬": 15704,
+ "##悯": 15705,
+ "##悱": 15706,
+ "##悲": 15707,
+ "##悴": 15708,
+ "##悵": 15709,
+ "##悶": 15710,
+ "##悸": 15711,
+ "##悻": 15712,
+ "##悼": 15713,
+ "##悽": 15714,
+ "##情": 15715,
+ "##惆": 15716,
+ "##惇": 15717,
+ "##惊": 15718,
+ "##惋": 15719,
+ "##惑": 15720,
+ "##惕": 15721,
+ "##惘": 15722,
+ "##惚": 15723,
+ "##惜": 15724,
+ "##惟": 15725,
+ "##惠": 15726,
+ "##惡": 15727,
+ "##惦": 15728,
+ "##惧": 15729,
+ "##惨": 15730,
+ "##惩": 15731,
+ "##惫": 15732,
+ "##惬": 15733,
+ "##惭": 15734,
+ "##惮": 15735,
+ "##惯": 15736,
+ "##惰": 15737,
+ "##惱": 15738,
+ "##想": 15739,
+ "##惴": 15740,
+ "##惶": 15741,
+ "##惹": 15742,
+ "##惺": 15743,
+ "##愁": 15744,
+ "##愆": 15745,
+ "##愈": 15746,
+ "##愉": 15747,
+ "##愍": 15748,
+ "##意": 15749,
+ "##愕": 15750,
+ "##愚": 15751,
+ "##愛": 15752,
+ "##愜": 15753,
+ "##感": 15754,
+ "##愣": 15755,
+ "##愤": 15756,
+ "##愧": 15757,
+ "##愫": 15758,
+ "##愷": 15759,
+ "##愿": 15760,
+ "##慄": 15761,
+ "##慈": 15762,
+ "##態": 15763,
+ "##慌": 15764,
+ "##慎": 15765,
+ "##慑": 15766,
+ "##慕": 15767,
+ "##慘": 15768,
+ "##慚": 15769,
+ "##慟": 15770,
+ "##慢": 15771,
+ "##慣": 15772,
+ "##慧": 15773,
+ "##慨": 15774,
+ "##慫": 15775,
+ "##慮": 15776,
+ "##慰": 15777,
+ "##慳": 15778,
+ "##慵": 15779,
+ "##慶": 15780,
+ "##慷": 15781,
+ "##慾": 15782,
+ "##憂": 15783,
+ "##憊": 15784,
+ "##憋": 15785,
+ "##憎": 15786,
+ "##憐": 15787,
+ "##憑": 15788,
+ "##憔": 15789,
+ "##憚": 15790,
+ "##憤": 15791,
+ "##憧": 15792,
+ "##憨": 15793,
+ "##憩": 15794,
+ "##憫": 15795,
+ "##憬": 15796,
+ "##憲": 15797,
+ "##憶": 15798,
+ "##憾": 15799,
+ "##懂": 15800,
+ "##懇": 15801,
+ "##懈": 15802,
+ "##應": 15803,
+ "##懊": 15804,
+ "##懋": 15805,
+ "##懑": 15806,
+ "##懒": 15807,
+ "##懦": 15808,
+ "##懲": 15809,
+ "##懵": 15810,
+ "##懶": 15811,
+ "##懷": 15812,
+ "##懸": 15813,
+ "##懺": 15814,
+ "##懼": 15815,
+ "##懾": 15816,
+ "##懿": 15817,
+ "##戀": 15818,
+ "##戈": 15819,
+ "##戊": 15820,
+ "##戌": 15821,
+ "##戍": 15822,
+ "##戎": 15823,
+ "##戏": 15824,
+ "##成": 15825,
+ "##我": 15826,
+ "##戒": 15827,
+ "##戕": 15828,
+ "##或": 15829,
+ "##战": 15830,
+ "##戚": 15831,
+ "##戛": 15832,
+ "##戟": 15833,
+ "##戡": 15834,
+ "##戦": 15835,
+ "##截": 15836,
+ "##戬": 15837,
+ "##戮": 15838,
+ "##戰": 15839,
+ "##戲": 15840,
+ "##戳": 15841,
+ "##戴": 15842,
+ "##戶": 15843,
+ "##户": 15844,
+ "##戸": 15845,
+ "##戻": 15846,
+ "##戾": 15847,
+ "##房": 15848,
+ "##所": 15849,
+ "##扁": 15850,
+ "##扇": 15851,
+ "##扈": 15852,
+ "##扉": 15853,
+ "##手": 15854,
+ "##才": 15855,
+ "##扎": 15856,
+ "##扑": 15857,
+ "##扒": 15858,
+ "##打": 15859,
+ "##扔": 15860,
+ "##払": 15861,
+ "##托": 15862,
+ "##扛": 15863,
+ "##扣": 15864,
+ "##扦": 15865,
+ "##执": 15866,
+ "##扩": 15867,
+ "##扪": 15868,
+ "##扫": 15869,
+ "##扬": 15870,
+ "##扭": 15871,
+ "##扮": 15872,
+ "##扯": 15873,
+ "##扰": 15874,
+ "##扱": 15875,
+ "##扳": 15876,
+ "##扶": 15877,
+ "##批": 15878,
+ "##扼": 15879,
+ "##找": 15880,
+ "##承": 15881,
+ "##技": 15882,
+ "##抄": 15883,
+ "##抉": 15884,
+ "##把": 15885,
+ "##抑": 15886,
+ "##抒": 15887,
+ "##抓": 15888,
+ "##投": 15889,
+ "##抖": 15890,
+ "##抗": 15891,
+ "##折": 15892,
+ "##抚": 15893,
+ "##抛": 15894,
+ "##抜": 15895,
+ "##択": 15896,
+ "##抟": 15897,
+ "##抠": 15898,
+ "##抡": 15899,
+ "##抢": 15900,
+ "##护": 15901,
+ "##报": 15902,
+ "##抨": 15903,
+ "##披": 15904,
+ "##抬": 15905,
+ "##抱": 15906,
+ "##抵": 15907,
+ "##抹": 15908,
+ "##押": 15909,
+ "##抽": 15910,
+ "##抿": 15911,
+ "##拂": 15912,
+ "##拄": 15913,
+ "##担": 15914,
+ "##拆": 15915,
+ "##拇": 15916,
+ "##拈": 15917,
+ "##拉": 15918,
+ "##拋": 15919,
+ "##拌": 15920,
+ "##拍": 15921,
+ "##拎": 15922,
+ "##拐": 15923,
+ "##拒": 15924,
+ "##拓": 15925,
+ "##拔": 15926,
+ "##拖": 15927,
+ "##拗": 15928,
+ "##拘": 15929,
+ "##拙": 15930,
+ "##拚": 15931,
+ "##招": 15932,
+ "##拜": 15933,
+ "##拟": 15934,
+ "##拡": 15935,
+ "##拢": 15936,
+ "##拣": 15937,
+ "##拥": 15938,
+ "##拦": 15939,
+ "##拧": 15940,
+ "##拨": 15941,
+ "##择": 15942,
+ "##括": 15943,
+ "##拭": 15944,
+ "##拮": 15945,
+ "##拯": 15946,
+ "##拱": 15947,
+ "##拳": 15948,
+ "##拴": 15949,
+ "##拷": 15950,
+ "##拼": 15951,
+ "##拽": 15952,
+ "##拾": 15953,
+ "##拿": 15954,
+ "##持": 15955,
+ "##挂": 15956,
+ "##指": 15957,
+ "##挈": 15958,
+ "##按": 15959,
+ "##挎": 15960,
+ "##挑": 15961,
+ "##挖": 15962,
+ "##挙": 15963,
+ "##挚": 15964,
+ "##挛": 15965,
+ "##挝": 15966,
+ "##挞": 15967,
+ "##挟": 15968,
+ "##挠": 15969,
+ "##挡": 15970,
+ "##挣": 15971,
+ "##挤": 15972,
+ "##挥": 15973,
+ "##挨": 15974,
+ "##挪": 15975,
+ "##挫": 15976,
+ "##振": 15977,
+ "##挲": 15978,
+ "##挹": 15979,
+ "##挺": 15980,
+ "##挽": 15981,
+ "##挾": 15982,
+ "##捂": 15983,
+ "##捅": 15984,
+ "##捆": 15985,
+ "##捉": 15986,
+ "##捋": 15987,
+ "##捌": 15988,
+ "##捍": 15989,
+ "##捎": 15990,
+ "##捏": 15991,
+ "##捐": 15992,
+ "##捕": 15993,
+ "##捞": 15994,
+ "##损": 15995,
+ "##捡": 15996,
+ "##换": 15997,
+ "##捣": 15998,
+ "##捧": 15999,
+ "##捨": 16000,
+ "##捩": 16001,
+ "##据": 16002,
+ "##捱": 16003,
+ "##捲": 16004,
+ "##捶": 16005,
+ "##捷": 16006,
+ "##捺": 16007,
+ "##捻": 16008,
+ "##掀": 16009,
+ "##掂": 16010,
+ "##掃": 16011,
+ "##掇": 16012,
+ "##授": 16013,
+ "##掉": 16014,
+ "##掌": 16015,
+ "##掏": 16016,
+ "##掐": 16017,
+ "##排": 16018,
+ "##掖": 16019,
+ "##掘": 16020,
+ "##掙": 16021,
+ "##掛": 16022,
+ "##掠": 16023,
+ "##採": 16024,
+ "##探": 16025,
+ "##掣": 16026,
+ "##接": 16027,
+ "##控": 16028,
+ "##推": 16029,
+ "##掩": 16030,
+ "##措": 16031,
+ "##掬": 16032,
+ "##掰": 16033,
+ "##掲": 16034,
+ "##掳": 16035,
+ "##掴": 16036,
+ "##掷": 16037,
+ "##掸": 16038,
+ "##掺": 16039,
+ "##揀": 16040,
+ "##揃": 16041,
+ "##揄": 16042,
+ "##揆": 16043,
+ "##揉": 16044,
+ "##揍": 16045,
+ "##描": 16046,
+ "##提": 16047,
+ "##插": 16048,
+ "##揖": 16049,
+ "##揚": 16050,
+ "##換": 16051,
+ "##握": 16052,
+ "##揣": 16053,
+ "##揩": 16054,
+ "##揪": 16055,
+ "##揭": 16056,
+ "##揮": 16057,
+ "##援": 16058,
+ "##揶": 16059,
+ "##揸": 16060,
+ "##揹": 16061,
+ "##揽": 16062,
+ "##搀": 16063,
+ "##搁": 16064,
+ "##搂": 16065,
+ "##搅": 16066,
+ "##損": 16067,
+ "##搏": 16068,
+ "##搐": 16069,
+ "##搓": 16070,
+ "##搔": 16071,
+ "##搖": 16072,
+ "##搗": 16073,
+ "##搜": 16074,
+ "##搞": 16075,
+ "##搡": 16076,
+ "##搪": 16077,
+ "##搬": 16078,
+ "##搭": 16079,
+ "##搵": 16080,
+ "##搶": 16081,
+ "##携": 16082,
+ "##搽": 16083,
+ "##摀": 16084,
+ "##摁": 16085,
+ "##摄": 16086,
+ "##摆": 16087,
+ "##摇": 16088,
+ "##摈": 16089,
+ "##摊": 16090,
+ "##摒": 16091,
+ "##摔": 16092,
+ "##摘": 16093,
+ "##摞": 16094,
+ "##摟": 16095,
+ "##摧": 16096,
+ "##摩": 16097,
+ "##摯": 16098,
+ "##摳": 16099,
+ "##摸": 16100,
+ "##摹": 16101,
+ "##摺": 16102,
+ "##摻": 16103,
+ "##撂": 16104,
+ "##撃": 16105,
+ "##撅": 16106,
+ "##撇": 16107,
+ "##撈": 16108,
+ "##撐": 16109,
+ "##撑": 16110,
+ "##撒": 16111,
+ "##撓": 16112,
+ "##撕": 16113,
+ "##撚": 16114,
+ "##撞": 16115,
+ "##撤": 16116,
+ "##撥": 16117,
+ "##撩": 16118,
+ "##撫": 16119,
+ "##撬": 16120,
+ "##播": 16121,
+ "##撮": 16122,
+ "##撰": 16123,
+ "##撲": 16124,
+ "##撵": 16125,
+ "##撷": 16126,
+ "##撸": 16127,
+ "##撻": 16128,
+ "##撼": 16129,
+ "##撿": 16130,
+ "##擀": 16131,
+ "##擁": 16132,
+ "##擂": 16133,
+ "##擄": 16134,
+ "##擅": 16135,
+ "##擇": 16136,
+ "##擊": 16137,
+ "##擋": 16138,
+ "##操": 16139,
+ "##擎": 16140,
+ "##擒": 16141,
+ "##擔": 16142,
+ "##擘": 16143,
+ "##據": 16144,
+ "##擞": 16145,
+ "##擠": 16146,
+ "##擡": 16147,
+ "##擢": 16148,
+ "##擦": 16149,
+ "##擬": 16150,
+ "##擰": 16151,
+ "##擱": 16152,
+ "##擲": 16153,
+ "##擴": 16154,
+ "##擷": 16155,
+ "##擺": 16156,
+ "##擼": 16157,
+ "##擾": 16158,
+ "##攀": 16159,
+ "##攏": 16160,
+ "##攒": 16161,
+ "##攔": 16162,
+ "##攘": 16163,
+ "##攙": 16164,
+ "##攜": 16165,
+ "##攝": 16166,
+ "##攞": 16167,
+ "##攢": 16168,
+ "##攣": 16169,
+ "##攤": 16170,
+ "##攥": 16171,
+ "##攪": 16172,
+ "##攫": 16173,
+ "##攬": 16174,
+ "##支": 16175,
+ "##收": 16176,
+ "##攸": 16177,
+ "##改": 16178,
+ "##攻": 16179,
+ "##放": 16180,
+ "##政": 16181,
+ "##故": 16182,
+ "##效": 16183,
+ "##敌": 16184,
+ "##敍": 16185,
+ "##敎": 16186,
+ "##敏": 16187,
+ "##救": 16188,
+ "##敕": 16189,
+ "##敖": 16190,
+ "##敗": 16191,
+ "##敘": 16192,
+ "##教": 16193,
+ "##敛": 16194,
+ "##敝": 16195,
+ "##敞": 16196,
+ "##敢": 16197,
+ "##散": 16198,
+ "##敦": 16199,
+ "##敬": 16200,
+ "##数": 16201,
+ "##敲": 16202,
+ "##整": 16203,
+ "##敵": 16204,
+ "##敷": 16205,
+ "##數": 16206,
+ "##斂": 16207,
+ "##斃": 16208,
+ "##文": 16209,
+ "##斋": 16210,
+ "##斌": 16211,
+ "##斎": 16212,
+ "##斐": 16213,
+ "##斑": 16214,
+ "##斓": 16215,
+ "##斗": 16216,
+ "##料": 16217,
+ "##斛": 16218,
+ "##斜": 16219,
+ "##斟": 16220,
+ "##斡": 16221,
+ "##斤": 16222,
+ "##斥": 16223,
+ "##斧": 16224,
+ "##斩": 16225,
+ "##斫": 16226,
+ "##斬": 16227,
+ "##断": 16228,
+ "##斯": 16229,
+ "##新": 16230,
+ "##斷": 16231,
+ "##方": 16232,
+ "##於": 16233,
+ "##施": 16234,
+ "##旁": 16235,
+ "##旃": 16236,
+ "##旅": 16237,
+ "##旋": 16238,
+ "##旌": 16239,
+ "##旎": 16240,
+ "##族": 16241,
+ "##旖": 16242,
+ "##旗": 16243,
+ "##无": 16244,
+ "##既": 16245,
+ "##日": 16246,
+ "##旦": 16247,
+ "##旧": 16248,
+ "##旨": 16249,
+ "##早": 16250,
+ "##旬": 16251,
+ "##旭": 16252,
+ "##旮": 16253,
+ "##旱": 16254,
+ "##时": 16255,
+ "##旷": 16256,
+ "##旺": 16257,
+ "##旻": 16258,
+ "##昀": 16259,
+ "##昂": 16260,
+ "##昆": 16261,
+ "##昇": 16262,
+ "##昉": 16263,
+ "##昊": 16264,
+ "##昌": 16265,
+ "##明": 16266,
+ "##昏": 16267,
+ "##易": 16268,
+ "##昔": 16269,
+ "##昕": 16270,
+ "##昙": 16271,
+ "##星": 16272,
+ "##映": 16273,
+ "##春": 16274,
+ "##昧": 16275,
+ "##昨": 16276,
+ "##昭": 16277,
+ "##是": 16278,
+ "##昱": 16279,
+ "##昴": 16280,
+ "##昵": 16281,
+ "##昶": 16282,
+ "##昼": 16283,
+ "##显": 16284,
+ "##晁": 16285,
+ "##時": 16286,
+ "##晃": 16287,
+ "##晉": 16288,
+ "##晋": 16289,
+ "##晌": 16290,
+ "##晏": 16291,
+ "##晒": 16292,
+ "##晓": 16293,
+ "##晔": 16294,
+ "##晕": 16295,
+ "##晖": 16296,
+ "##晗": 16297,
+ "##晚": 16298,
+ "##晝": 16299,
+ "##晞": 16300,
+ "##晟": 16301,
+ "##晤": 16302,
+ "##晦": 16303,
+ "##晨": 16304,
+ "##晩": 16305,
+ "##普": 16306,
+ "##景": 16307,
+ "##晰": 16308,
+ "##晴": 16309,
+ "##晶": 16310,
+ "##晷": 16311,
+ "##智": 16312,
+ "##晾": 16313,
+ "##暂": 16314,
+ "##暄": 16315,
+ "##暇": 16316,
+ "##暈": 16317,
+ "##暉": 16318,
+ "##暌": 16319,
+ "##暐": 16320,
+ "##暑": 16321,
+ "##暖": 16322,
+ "##暗": 16323,
+ "##暝": 16324,
+ "##暢": 16325,
+ "##暧": 16326,
+ "##暨": 16327,
+ "##暫": 16328,
+ "##暮": 16329,
+ "##暱": 16330,
+ "##暴": 16331,
+ "##暸": 16332,
+ "##暹": 16333,
+ "##曄": 16334,
+ "##曆": 16335,
+ "##曇": 16336,
+ "##曉": 16337,
+ "##曖": 16338,
+ "##曙": 16339,
+ "##曜": 16340,
+ "##曝": 16341,
+ "##曠": 16342,
+ "##曦": 16343,
+ "##曬": 16344,
+ "##曰": 16345,
+ "##曲": 16346,
+ "##曳": 16347,
+ "##更": 16348,
+ "##書": 16349,
+ "##曹": 16350,
+ "##曼": 16351,
+ "##曾": 16352,
+ "##替": 16353,
+ "##最": 16354,
+ "##會": 16355,
+ "##月": 16356,
+ "##有": 16357,
+ "##朋": 16358,
+ "##服": 16359,
+ "##朐": 16360,
+ "##朔": 16361,
+ "##朕": 16362,
+ "##朗": 16363,
+ "##望": 16364,
+ "##朝": 16365,
+ "##期": 16366,
+ "##朦": 16367,
+ "##朧": 16368,
+ "##木": 16369,
+ "##未": 16370,
+ "##末": 16371,
+ "##本": 16372,
+ "##札": 16373,
+ "##朮": 16374,
+ "##术": 16375,
+ "##朱": 16376,
+ "##朴": 16377,
+ "##朵": 16378,
+ "##机": 16379,
+ "##朽": 16380,
+ "##杀": 16381,
+ "##杂": 16382,
+ "##权": 16383,
+ "##杆": 16384,
+ "##杈": 16385,
+ "##杉": 16386,
+ "##李": 16387,
+ "##杏": 16388,
+ "##材": 16389,
+ "##村": 16390,
+ "##杓": 16391,
+ "##杖": 16392,
+ "##杜": 16393,
+ "##杞": 16394,
+ "##束": 16395,
+ "##杠": 16396,
+ "##条": 16397,
+ "##来": 16398,
+ "##杨": 16399,
+ "##杭": 16400,
+ "##杯": 16401,
+ "##杰": 16402,
+ "##東": 16403,
+ "##杳": 16404,
+ "##杵": 16405,
+ "##杷": 16406,
+ "##杼": 16407,
+ "##松": 16408,
+ "##板": 16409,
+ "##极": 16410,
+ "##构": 16411,
+ "##枇": 16412,
+ "##枉": 16413,
+ "##枋": 16414,
+ "##析": 16415,
+ "##枕": 16416,
+ "##林": 16417,
+ "##枚": 16418,
+ "##果": 16419,
+ "##枝": 16420,
+ "##枢": 16421,
+ "##枣": 16422,
+ "##枪": 16423,
+ "##枫": 16424,
+ "##枭": 16425,
+ "##枯": 16426,
+ "##枰": 16427,
+ "##枱": 16428,
+ "##枳": 16429,
+ "##架": 16430,
+ "##枷": 16431,
+ "##枸": 16432,
+ "##柄": 16433,
+ "##柏": 16434,
+ "##某": 16435,
+ "##柑": 16436,
+ "##柒": 16437,
+ "##染": 16438,
+ "##柔": 16439,
+ "##柘": 16440,
+ "##柚": 16441,
+ "##柜": 16442,
+ "##柞": 16443,
+ "##柠": 16444,
+ "##柢": 16445,
+ "##查": 16446,
+ "##柩": 16447,
+ "##柬": 16448,
+ "##柯": 16449,
+ "##柱": 16450,
+ "##柳": 16451,
+ "##柴": 16452,
+ "##柵": 16453,
+ "##査": 16454,
+ "##柿": 16455,
+ "##栀": 16456,
+ "##栃": 16457,
+ "##栄": 16458,
+ "##栅": 16459,
+ "##标": 16460,
+ "##栈": 16461,
+ "##栉": 16462,
+ "##栋": 16463,
+ "##栎": 16464,
+ "##栏": 16465,
+ "##树": 16466,
+ "##栓": 16467,
+ "##栖": 16468,
+ "##栗": 16469,
+ "##校": 16470,
+ "##栩": 16471,
+ "##株": 16472,
+ "##样": 16473,
+ "##核": 16474,
+ "##根": 16475,
+ "##格": 16476,
+ "##栽": 16477,
+ "##栾": 16478,
+ "##桀": 16479,
+ "##桁": 16480,
+ "##桂": 16481,
+ "##桃": 16482,
+ "##桅": 16483,
+ "##框": 16484,
+ "##案": 16485,
+ "##桉": 16486,
+ "##桌": 16487,
+ "##桎": 16488,
+ "##桐": 16489,
+ "##桑": 16490,
+ "##桓": 16491,
+ "##桔": 16492,
+ "##桜": 16493,
+ "##桠": 16494,
+ "##桡": 16495,
+ "##桢": 16496,
+ "##档": 16497,
+ "##桥": 16498,
+ "##桦": 16499,
+ "##桧": 16500,
+ "##桨": 16501,
+ "##桩": 16502,
+ "##桶": 16503,
+ "##桿": 16504,
+ "##梁": 16505,
+ "##梅": 16506,
+ "##梆": 16507,
+ "##梏": 16508,
+ "##梓": 16509,
+ "##梗": 16510,
+ "##條": 16511,
+ "##梟": 16512,
+ "##梢": 16513,
+ "##梦": 16514,
+ "##梧": 16515,
+ "##梨": 16516,
+ "##梭": 16517,
+ "##梯": 16518,
+ "##械": 16519,
+ "##梳": 16520,
+ "##梵": 16521,
+ "##梶": 16522,
+ "##检": 16523,
+ "##棂": 16524,
+ "##棄": 16525,
+ "##棉": 16526,
+ "##棋": 16527,
+ "##棍": 16528,
+ "##棒": 16529,
+ "##棕": 16530,
+ "##棗": 16531,
+ "##棘": 16532,
+ "##棚": 16533,
+ "##棟": 16534,
+ "##棠": 16535,
+ "##棣": 16536,
+ "##棧": 16537,
+ "##森": 16538,
+ "##棱": 16539,
+ "##棲": 16540,
+ "##棵": 16541,
+ "##棹": 16542,
+ "##棺": 16543,
+ "##椁": 16544,
+ "##椅": 16545,
+ "##椋": 16546,
+ "##植": 16547,
+ "##椎": 16548,
+ "##椒": 16549,
+ "##検": 16550,
+ "##椪": 16551,
+ "##椭": 16552,
+ "##椰": 16553,
+ "##椹": 16554,
+ "##椽": 16555,
+ "##椿": 16556,
+ "##楂": 16557,
+ "##楊": 16558,
+ "##楓": 16559,
+ "##楔": 16560,
+ "##楚": 16561,
+ "##楝": 16562,
+ "##楞": 16563,
+ "##楠": 16564,
+ "##楣": 16565,
+ "##楨": 16566,
+ "##楫": 16567,
+ "##業": 16568,
+ "##楮": 16569,
+ "##極": 16570,
+ "##楷": 16571,
+ "##楸": 16572,
+ "##楹": 16573,
+ "##楼": 16574,
+ "##楽": 16575,
+ "##概": 16576,
+ "##榄": 16577,
+ "##榆": 16578,
+ "##榈": 16579,
+ "##榉": 16580,
+ "##榔": 16581,
+ "##榕": 16582,
+ "##榖": 16583,
+ "##榛": 16584,
+ "##榜": 16585,
+ "##榨": 16586,
+ "##榫": 16587,
+ "##榭": 16588,
+ "##榮": 16589,
+ "##榱": 16590,
+ "##榴": 16591,
+ "##榷": 16592,
+ "##榻": 16593,
+ "##槁": 16594,
+ "##槃": 16595,
+ "##構": 16596,
+ "##槌": 16597,
+ "##槍": 16598,
+ "##槎": 16599,
+ "##槐": 16600,
+ "##槓": 16601,
+ "##様": 16602,
+ "##槛": 16603,
+ "##槟": 16604,
+ "##槤": 16605,
+ "##槭": 16606,
+ "##槲": 16607,
+ "##槳": 16608,
+ "##槻": 16609,
+ "##槽": 16610,
+ "##槿": 16611,
+ "##樁": 16612,
+ "##樂": 16613,
+ "##樊": 16614,
+ "##樑": 16615,
+ "##樓": 16616,
+ "##標": 16617,
+ "##樞": 16618,
+ "##樟": 16619,
+ "##模": 16620,
+ "##樣": 16621,
+ "##権": 16622,
+ "##横": 16623,
+ "##樫": 16624,
+ "##樯": 16625,
+ "##樱": 16626,
+ "##樵": 16627,
+ "##樸": 16628,
+ "##樹": 16629,
+ "##樺": 16630,
+ "##樽": 16631,
+ "##樾": 16632,
+ "##橄": 16633,
+ "##橇": 16634,
+ "##橋": 16635,
+ "##橐": 16636,
+ "##橘": 16637,
+ "##橙": 16638,
+ "##機": 16639,
+ "##橡": 16640,
+ "##橢": 16641,
+ "##橫": 16642,
+ "##橱": 16643,
+ "##橹": 16644,
+ "##橼": 16645,
+ "##檀": 16646,
+ "##檄": 16647,
+ "##檎": 16648,
+ "##檐": 16649,
+ "##檔": 16650,
+ "##檗": 16651,
+ "##檜": 16652,
+ "##檢": 16653,
+ "##檬": 16654,
+ "##檯": 16655,
+ "##檳": 16656,
+ "##檸": 16657,
+ "##檻": 16658,
+ "##櫃": 16659,
+ "##櫚": 16660,
+ "##櫛": 16661,
+ "##櫥": 16662,
+ "##櫸": 16663,
+ "##櫻": 16664,
+ "##欄": 16665,
+ "##權": 16666,
+ "##欒": 16667,
+ "##欖": 16668,
+ "##欠": 16669,
+ "##次": 16670,
+ "##欢": 16671,
+ "##欣": 16672,
+ "##欧": 16673,
+ "##欲": 16674,
+ "##欸": 16675,
+ "##欺": 16676,
+ "##欽": 16677,
+ "##款": 16678,
+ "##歆": 16679,
+ "##歇": 16680,
+ "##歉": 16681,
+ "##歌": 16682,
+ "##歎": 16683,
+ "##歐": 16684,
+ "##歓": 16685,
+ "##歙": 16686,
+ "##歛": 16687,
+ "##歡": 16688,
+ "##止": 16689,
+ "##正": 16690,
+ "##此": 16691,
+ "##步": 16692,
+ "##武": 16693,
+ "##歧": 16694,
+ "##歩": 16695,
+ "##歪": 16696,
+ "##歯": 16697,
+ "##歲": 16698,
+ "##歳": 16699,
+ "##歴": 16700,
+ "##歷": 16701,
+ "##歸": 16702,
+ "##歹": 16703,
+ "##死": 16704,
+ "##歼": 16705,
+ "##殁": 16706,
+ "##殃": 16707,
+ "##殆": 16708,
+ "##殇": 16709,
+ "##殉": 16710,
+ "##殊": 16711,
+ "##残": 16712,
+ "##殒": 16713,
+ "##殓": 16714,
+ "##殖": 16715,
+ "##殘": 16716,
+ "##殞": 16717,
+ "##殡": 16718,
+ "##殤": 16719,
+ "##殭": 16720,
+ "##殯": 16721,
+ "##殲": 16722,
+ "##殴": 16723,
+ "##段": 16724,
+ "##殷": 16725,
+ "##殺": 16726,
+ "##殼": 16727,
+ "##殿": 16728,
+ "##毀": 16729,
+ "##毁": 16730,
+ "##毂": 16731,
+ "##毅": 16732,
+ "##毆": 16733,
+ "##毋": 16734,
+ "##母": 16735,
+ "##毎": 16736,
+ "##每": 16737,
+ "##毒": 16738,
+ "##毓": 16739,
+ "##比": 16740,
+ "##毕": 16741,
+ "##毗": 16742,
+ "##毘": 16743,
+ "##毙": 16744,
+ "##毛": 16745,
+ "##毡": 16746,
+ "##毫": 16747,
+ "##毯": 16748,
+ "##毽": 16749,
+ "##氈": 16750,
+ "##氏": 16751,
+ "##氐": 16752,
+ "##民": 16753,
+ "##氓": 16754,
+ "##气": 16755,
+ "##氖": 16756,
+ "##気": 16757,
+ "##氙": 16758,
+ "##氛": 16759,
+ "##氟": 16760,
+ "##氡": 16761,
+ "##氢": 16762,
+ "##氣": 16763,
+ "##氤": 16764,
+ "##氦": 16765,
+ "##氧": 16766,
+ "##氨": 16767,
+ "##氪": 16768,
+ "##氫": 16769,
+ "##氮": 16770,
+ "##氯": 16771,
+ "##氰": 16772,
+ "##氲": 16773,
+ "##水": 16774,
+ "##氷": 16775,
+ "##永": 16776,
+ "##氹": 16777,
+ "##氾": 16778,
+ "##汀": 16779,
+ "##汁": 16780,
+ "##求": 16781,
+ "##汆": 16782,
+ "##汇": 16783,
+ "##汉": 16784,
+ "##汎": 16785,
+ "##汐": 16786,
+ "##汕": 16787,
+ "##汗": 16788,
+ "##汙": 16789,
+ "##汛": 16790,
+ "##汝": 16791,
+ "##汞": 16792,
+ "##江": 16793,
+ "##池": 16794,
+ "##污": 16795,
+ "##汤": 16796,
+ "##汨": 16797,
+ "##汩": 16798,
+ "##汪": 16799,
+ "##汰": 16800,
+ "##汲": 16801,
+ "##汴": 16802,
+ "##汶": 16803,
+ "##汹": 16804,
+ "##決": 16805,
+ "##汽": 16806,
+ "##汾": 16807,
+ "##沁": 16808,
+ "##沂": 16809,
+ "##沃": 16810,
+ "##沅": 16811,
+ "##沈": 16812,
+ "##沉": 16813,
+ "##沌": 16814,
+ "##沏": 16815,
+ "##沐": 16816,
+ "##沒": 16817,
+ "##沓": 16818,
+ "##沖": 16819,
+ "##沙": 16820,
+ "##沛": 16821,
+ "##沟": 16822,
+ "##没": 16823,
+ "##沢": 16824,
+ "##沣": 16825,
+ "##沥": 16826,
+ "##沦": 16827,
+ "##沧": 16828,
+ "##沪": 16829,
+ "##沫": 16830,
+ "##沭": 16831,
+ "##沮": 16832,
+ "##沱": 16833,
+ "##河": 16834,
+ "##沸": 16835,
+ "##油": 16836,
+ "##治": 16837,
+ "##沼": 16838,
+ "##沽": 16839,
+ "##沾": 16840,
+ "##沿": 16841,
+ "##況": 16842,
+ "##泄": 16843,
+ "##泉": 16844,
+ "##泊": 16845,
+ "##泌": 16846,
+ "##泓": 16847,
+ "##法": 16848,
+ "##泗": 16849,
+ "##泛": 16850,
+ "##泞": 16851,
+ "##泠": 16852,
+ "##泡": 16853,
+ "##波": 16854,
+ "##泣": 16855,
+ "##泥": 16856,
+ "##注": 16857,
+ "##泪": 16858,
+ "##泫": 16859,
+ "##泮": 16860,
+ "##泯": 16861,
+ "##泰": 16862,
+ "##泱": 16863,
+ "##泳": 16864,
+ "##泵": 16865,
+ "##泷": 16866,
+ "##泸": 16867,
+ "##泻": 16868,
+ "##泼": 16869,
+ "##泽": 16870,
+ "##泾": 16871,
+ "##洁": 16872,
+ "##洄": 16873,
+ "##洋": 16874,
+ "##洒": 16875,
+ "##洗": 16876,
+ "##洙": 16877,
+ "##洛": 16878,
+ "##洞": 16879,
+ "##津": 16880,
+ "##洩": 16881,
+ "##洪": 16882,
+ "##洮": 16883,
+ "##洱": 16884,
+ "##洲": 16885,
+ "##洵": 16886,
+ "##洶": 16887,
+ "##洸": 16888,
+ "##洹": 16889,
+ "##活": 16890,
+ "##洼": 16891,
+ "##洽": 16892,
+ "##派": 16893,
+ "##流": 16894,
+ "##浃": 16895,
+ "##浄": 16896,
+ "##浅": 16897,
+ "##浆": 16898,
+ "##浇": 16899,
+ "##浊": 16900,
+ "##测": 16901,
+ "##济": 16902,
+ "##浏": 16903,
+ "##浑": 16904,
+ "##浒": 16905,
+ "##浓": 16906,
+ "##浔": 16907,
+ "##浙": 16908,
+ "##浚": 16909,
+ "##浜": 16910,
+ "##浣": 16911,
+ "##浦": 16912,
+ "##浩": 16913,
+ "##浪": 16914,
+ "##浬": 16915,
+ "##浮": 16916,
+ "##浯": 16917,
+ "##浴": 16918,
+ "##海": 16919,
+ "##浸": 16920,
+ "##涂": 16921,
+ "##涅": 16922,
+ "##涇": 16923,
+ "##消": 16924,
+ "##涉": 16925,
+ "##涌": 16926,
+ "##涎": 16927,
+ "##涓": 16928,
+ "##涔": 16929,
+ "##涕": 16930,
+ "##涙": 16931,
+ "##涛": 16932,
+ "##涝": 16933,
+ "##涞": 16934,
+ "##涟": 16935,
+ "##涠": 16936,
+ "##涡": 16937,
+ "##涣": 16938,
+ "##涤": 16939,
+ "##润": 16940,
+ "##涧": 16941,
+ "##涨": 16942,
+ "##涩": 16943,
+ "##涪": 16944,
+ "##涮": 16945,
+ "##涯": 16946,
+ "##液": 16947,
+ "##涵": 16948,
+ "##涸": 16949,
+ "##涼": 16950,
+ "##涿": 16951,
+ "##淀": 16952,
+ "##淄": 16953,
+ "##淅": 16954,
+ "##淆": 16955,
+ "##淇": 16956,
+ "##淋": 16957,
+ "##淌": 16958,
+ "##淑": 16959,
+ "##淒": 16960,
+ "##淖": 16961,
+ "##淘": 16962,
+ "##淙": 16963,
+ "##淚": 16964,
+ "##淞": 16965,
+ "##淡": 16966,
+ "##淤": 16967,
+ "##淦": 16968,
+ "##淨": 16969,
+ "##淩": 16970,
+ "##淪": 16971,
+ "##淫": 16972,
+ "##淬": 16973,
+ "##淮": 16974,
+ "##深": 16975,
+ "##淳": 16976,
+ "##淵": 16977,
+ "##混": 16978,
+ "##淹": 16979,
+ "##淺": 16980,
+ "##添": 16981,
+ "##淼": 16982,
+ "##清": 16983,
+ "##済": 16984,
+ "##渉": 16985,
+ "##渊": 16986,
+ "##渋": 16987,
+ "##渍": 16988,
+ "##渎": 16989,
+ "##渐": 16990,
+ "##渔": 16991,
+ "##渗": 16992,
+ "##渙": 16993,
+ "##渚": 16994,
+ "##減": 16995,
+ "##渝": 16996,
+ "##渠": 16997,
+ "##渡": 16998,
+ "##渣": 16999,
+ "##渤": 17000,
+ "##渥": 17001,
+ "##渦": 17002,
+ "##温": 17003,
+ "##測": 17004,
+ "##渭": 17005,
+ "##港": 17006,
+ "##渲": 17007,
+ "##渴": 17008,
+ "##游": 17009,
+ "##渺": 17010,
+ "##渾": 17011,
+ "##湃": 17012,
+ "##湄": 17013,
+ "##湊": 17014,
+ "##湍": 17015,
+ "##湖": 17016,
+ "##湘": 17017,
+ "##湛": 17018,
+ "##湟": 17019,
+ "##湧": 17020,
+ "##湫": 17021,
+ "##湮": 17022,
+ "##湯": 17023,
+ "##湳": 17024,
+ "##湾": 17025,
+ "##湿": 17026,
+ "##満": 17027,
+ "##溃": 17028,
+ "##溅": 17029,
+ "##溉": 17030,
+ "##溏": 17031,
+ "##源": 17032,
+ "##準": 17033,
+ "##溜": 17034,
+ "##溝": 17035,
+ "##溟": 17036,
+ "##溢": 17037,
+ "##溥": 17038,
+ "##溧": 17039,
+ "##溪": 17040,
+ "##溫": 17041,
+ "##溯": 17042,
+ "##溱": 17043,
+ "##溴": 17044,
+ "##溶": 17045,
+ "##溺": 17046,
+ "##溼": 17047,
+ "##滁": 17048,
+ "##滂": 17049,
+ "##滄": 17050,
+ "##滅": 17051,
+ "##滇": 17052,
+ "##滋": 17053,
+ "##滌": 17054,
+ "##滑": 17055,
+ "##滓": 17056,
+ "##滔": 17057,
+ "##滕": 17058,
+ "##滙": 17059,
+ "##滚": 17060,
+ "##滝": 17061,
+ "##滞": 17062,
+ "##滟": 17063,
+ "##满": 17064,
+ "##滢": 17065,
+ "##滤": 17066,
+ "##滥": 17067,
+ "##滦": 17068,
+ "##滨": 17069,
+ "##滩": 17070,
+ "##滬": 17071,
+ "##滯": 17072,
+ "##滲": 17073,
+ "##滴": 17074,
+ "##滷": 17075,
+ "##滸": 17076,
+ "##滾": 17077,
+ "##滿": 17078,
+ "##漁": 17079,
+ "##漂": 17080,
+ "##漆": 17081,
+ "##漉": 17082,
+ "##漏": 17083,
+ "##漓": 17084,
+ "##演": 17085,
+ "##漕": 17086,
+ "##漠": 17087,
+ "##漢": 17088,
+ "##漣": 17089,
+ "##漩": 17090,
+ "##漪": 17091,
+ "##漫": 17092,
+ "##漬": 17093,
+ "##漯": 17094,
+ "##漱": 17095,
+ "##漲": 17096,
+ "##漳": 17097,
+ "##漸": 17098,
+ "##漾": 17099,
+ "##漿": 17100,
+ "##潆": 17101,
+ "##潇": 17102,
+ "##潋": 17103,
+ "##潍": 17104,
+ "##潑": 17105,
+ "##潔": 17106,
+ "##潘": 17107,
+ "##潛": 17108,
+ "##潜": 17109,
+ "##潞": 17110,
+ "##潟": 17111,
+ "##潢": 17112,
+ "##潤": 17113,
+ "##潦": 17114,
+ "##潧": 17115,
+ "##潭": 17116,
+ "##潮": 17117,
+ "##潰": 17118,
+ "##潴": 17119,
+ "##潸": 17120,
+ "##潺": 17121,
+ "##潼": 17122,
+ "##澀": 17123,
+ "##澄": 17124,
+ "##澆": 17125,
+ "##澈": 17126,
+ "##澍": 17127,
+ "##澎": 17128,
+ "##澗": 17129,
+ "##澜": 17130,
+ "##澡": 17131,
+ "##澤": 17132,
+ "##澧": 17133,
+ "##澱": 17134,
+ "##澳": 17135,
+ "##澹": 17136,
+ "##激": 17137,
+ "##濁": 17138,
+ "##濂": 17139,
+ "##濃": 17140,
+ "##濑": 17141,
+ "##濒": 17142,
+ "##濕": 17143,
+ "##濘": 17144,
+ "##濛": 17145,
+ "##濟": 17146,
+ "##濠": 17147,
+ "##濡": 17148,
+ "##濤": 17149,
+ "##濫": 17150,
+ "##濬": 17151,
+ "##濮": 17152,
+ "##濯": 17153,
+ "##濱": 17154,
+ "##濺": 17155,
+ "##濾": 17156,
+ "##瀅": 17157,
+ "##瀆": 17158,
+ "##瀉": 17159,
+ "##瀋": 17160,
+ "##瀏": 17161,
+ "##瀑": 17162,
+ "##瀕": 17163,
+ "##瀘": 17164,
+ "##瀚": 17165,
+ "##瀛": 17166,
+ "##瀝": 17167,
+ "##瀞": 17168,
+ "##瀟": 17169,
+ "##瀧": 17170,
+ "##瀨": 17171,
+ "##瀬": 17172,
+ "##瀰": 17173,
+ "##瀾": 17174,
+ "##灌": 17175,
+ "##灏": 17176,
+ "##灑": 17177,
+ "##灘": 17178,
+ "##灝": 17179,
+ "##灞": 17180,
+ "##灣": 17181,
+ "##火": 17182,
+ "##灬": 17183,
+ "##灭": 17184,
+ "##灯": 17185,
+ "##灰": 17186,
+ "##灵": 17187,
+ "##灶": 17188,
+ "##灸": 17189,
+ "##灼": 17190,
+ "##災": 17191,
+ "##灾": 17192,
+ "##灿": 17193,
+ "##炀": 17194,
+ "##炁": 17195,
+ "##炅": 17196,
+ "##炉": 17197,
+ "##炊": 17198,
+ "##炎": 17199,
+ "##炒": 17200,
+ "##炔": 17201,
+ "##炕": 17202,
+ "##炖": 17203,
+ "##炙": 17204,
+ "##炜": 17205,
+ "##炫": 17206,
+ "##炬": 17207,
+ "##炭": 17208,
+ "##炮": 17209,
+ "##炯": 17210,
+ "##炳": 17211,
+ "##炷": 17212,
+ "##炸": 17213,
+ "##点": 17214,
+ "##為": 17215,
+ "##炼": 17216,
+ "##炽": 17217,
+ "##烁": 17218,
+ "##烂": 17219,
+ "##烃": 17220,
+ "##烈": 17221,
+ "##烊": 17222,
+ "##烏": 17223,
+ "##烘": 17224,
+ "##烙": 17225,
+ "##烛": 17226,
+ "##烟": 17227,
+ "##烤": 17228,
+ "##烦": 17229,
+ "##烧": 17230,
+ "##烨": 17231,
+ "##烩": 17232,
+ "##烫": 17233,
+ "##烬": 17234,
+ "##热": 17235,
+ "##烯": 17236,
+ "##烷": 17237,
+ "##烹": 17238,
+ "##烽": 17239,
+ "##焉": 17240,
+ "##焊": 17241,
+ "##焕": 17242,
+ "##焖": 17243,
+ "##焗": 17244,
+ "##焘": 17245,
+ "##焙": 17246,
+ "##焚": 17247,
+ "##焜": 17248,
+ "##無": 17249,
+ "##焦": 17250,
+ "##焯": 17251,
+ "##焰": 17252,
+ "##焱": 17253,
+ "##然": 17254,
+ "##焼": 17255,
+ "##煅": 17256,
+ "##煉": 17257,
+ "##煊": 17258,
+ "##煌": 17259,
+ "##煎": 17260,
+ "##煒": 17261,
+ "##煖": 17262,
+ "##煙": 17263,
+ "##煜": 17264,
+ "##煞": 17265,
+ "##煤": 17266,
+ "##煥": 17267,
+ "##煦": 17268,
+ "##照": 17269,
+ "##煨": 17270,
+ "##煩": 17271,
+ "##煮": 17272,
+ "##煲": 17273,
+ "##煸": 17274,
+ "##煽": 17275,
+ "##熄": 17276,
+ "##熊": 17277,
+ "##熏": 17278,
+ "##熒": 17279,
+ "##熔": 17280,
+ "##熙": 17281,
+ "##熟": 17282,
+ "##熠": 17283,
+ "##熨": 17284,
+ "##熬": 17285,
+ "##熱": 17286,
+ "##熵": 17287,
+ "##熹": 17288,
+ "##熾": 17289,
+ "##燁": 17290,
+ "##燃": 17291,
+ "##燄": 17292,
+ "##燈": 17293,
+ "##燉": 17294,
+ "##燊": 17295,
+ "##燎": 17296,
+ "##燒": 17297,
+ "##燔": 17298,
+ "##燕": 17299,
+ "##燙": 17300,
+ "##燜": 17301,
+ "##營": 17302,
+ "##燥": 17303,
+ "##燦": 17304,
+ "##燧": 17305,
+ "##燭": 17306,
+ "##燮": 17307,
+ "##燴": 17308,
+ "##燻": 17309,
+ "##燼": 17310,
+ "##燿": 17311,
+ "##爆": 17312,
+ "##爍": 17313,
+ "##爐": 17314,
+ "##爛": 17315,
+ "##爪": 17316,
+ "##爬": 17317,
+ "##爭": 17318,
+ "##爰": 17319,
+ "##爱": 17320,
+ "##爲": 17321,
+ "##爵": 17322,
+ "##父": 17323,
+ "##爷": 17324,
+ "##爸": 17325,
+ "##爹": 17326,
+ "##爺": 17327,
+ "##爻": 17328,
+ "##爽": 17329,
+ "##爾": 17330,
+ "##牆": 17331,
+ "##片": 17332,
+ "##版": 17333,
+ "##牌": 17334,
+ "##牍": 17335,
+ "##牒": 17336,
+ "##牙": 17337,
+ "##牛": 17338,
+ "##牝": 17339,
+ "##牟": 17340,
+ "##牠": 17341,
+ "##牡": 17342,
+ "##牢": 17343,
+ "##牦": 17344,
+ "##牧": 17345,
+ "##物": 17346,
+ "##牯": 17347,
+ "##牲": 17348,
+ "##牴": 17349,
+ "##牵": 17350,
+ "##特": 17351,
+ "##牺": 17352,
+ "##牽": 17353,
+ "##犀": 17354,
+ "##犁": 17355,
+ "##犄": 17356,
+ "##犊": 17357,
+ "##犍": 17358,
+ "##犒": 17359,
+ "##犢": 17360,
+ "##犧": 17361,
+ "##犬": 17362,
+ "##犯": 17363,
+ "##状": 17364,
+ "##犷": 17365,
+ "##犸": 17366,
+ "##犹": 17367,
+ "##狀": 17368,
+ "##狂": 17369,
+ "##狄": 17370,
+ "##狈": 17371,
+ "##狎": 17372,
+ "##狐": 17373,
+ "##狒": 17374,
+ "##狗": 17375,
+ "##狙": 17376,
+ "##狞": 17377,
+ "##狠": 17378,
+ "##狡": 17379,
+ "##狩": 17380,
+ "##独": 17381,
+ "##狭": 17382,
+ "##狮": 17383,
+ "##狰": 17384,
+ "##狱": 17385,
+ "##狸": 17386,
+ "##狹": 17387,
+ "##狼": 17388,
+ "##狽": 17389,
+ "##猎": 17390,
+ "##猕": 17391,
+ "##猖": 17392,
+ "##猗": 17393,
+ "##猙": 17394,
+ "##猛": 17395,
+ "##猜": 17396,
+ "##猝": 17397,
+ "##猥": 17398,
+ "##猩": 17399,
+ "##猪": 17400,
+ "##猫": 17401,
+ "##猬": 17402,
+ "##献": 17403,
+ "##猴": 17404,
+ "##猶": 17405,
+ "##猷": 17406,
+ "##猾": 17407,
+ "##猿": 17408,
+ "##獄": 17409,
+ "##獅": 17410,
+ "##獎": 17411,
+ "##獐": 17412,
+ "##獒": 17413,
+ "##獗": 17414,
+ "##獠": 17415,
+ "##獣": 17416,
+ "##獨": 17417,
+ "##獭": 17418,
+ "##獰": 17419,
+ "##獲": 17420,
+ "##獵": 17421,
+ "##獷": 17422,
+ "##獸": 17423,
+ "##獺": 17424,
+ "##獻": 17425,
+ "##獼": 17426,
+ "##獾": 17427,
+ "##玄": 17428,
+ "##率": 17429,
+ "##玉": 17430,
+ "##王": 17431,
+ "##玑": 17432,
+ "##玖": 17433,
+ "##玛": 17434,
+ "##玟": 17435,
+ "##玠": 17436,
+ "##玥": 17437,
+ "##玩": 17438,
+ "##玫": 17439,
+ "##玮": 17440,
+ "##环": 17441,
+ "##现": 17442,
+ "##玲": 17443,
+ "##玳": 17444,
+ "##玷": 17445,
+ "##玺": 17446,
+ "##玻": 17447,
+ "##珀": 17448,
+ "##珂": 17449,
+ "##珅": 17450,
+ "##珈": 17451,
+ "##珉": 17452,
+ "##珊": 17453,
+ "##珍": 17454,
+ "##珏": 17455,
+ "##珐": 17456,
+ "##珑": 17457,
+ "##珙": 17458,
+ "##珞": 17459,
+ "##珠": 17460,
+ "##珣": 17461,
+ "##珥": 17462,
+ "##珩": 17463,
+ "##珪": 17464,
+ "##班": 17465,
+ "##珮": 17466,
+ "##珲": 17467,
+ "##珺": 17468,
+ "##現": 17469,
+ "##球": 17470,
+ "##琅": 17471,
+ "##理": 17472,
+ "##琇": 17473,
+ "##琉": 17474,
+ "##琊": 17475,
+ "##琍": 17476,
+ "##琏": 17477,
+ "##琐": 17478,
+ "##琛": 17479,
+ "##琢": 17480,
+ "##琥": 17481,
+ "##琦": 17482,
+ "##琨": 17483,
+ "##琪": 17484,
+ "##琬": 17485,
+ "##琮": 17486,
+ "##琰": 17487,
+ "##琲": 17488,
+ "##琳": 17489,
+ "##琴": 17490,
+ "##琵": 17491,
+ "##琶": 17492,
+ "##琺": 17493,
+ "##琼": 17494,
+ "##瑀": 17495,
+ "##瑁": 17496,
+ "##瑄": 17497,
+ "##瑋": 17498,
+ "##瑕": 17499,
+ "##瑗": 17500,
+ "##瑙": 17501,
+ "##瑚": 17502,
+ "##瑛": 17503,
+ "##瑜": 17504,
+ "##瑞": 17505,
+ "##瑟": 17506,
+ "##瑠": 17507,
+ "##瑣": 17508,
+ "##瑤": 17509,
+ "##瑩": 17510,
+ "##瑪": 17511,
+ "##瑯": 17512,
+ "##瑰": 17513,
+ "##瑶": 17514,
+ "##瑾": 17515,
+ "##璀": 17516,
+ "##璁": 17517,
+ "##璃": 17518,
+ "##璇": 17519,
+ "##璉": 17520,
+ "##璋": 17521,
+ "##璎": 17522,
+ "##璐": 17523,
+ "##璜": 17524,
+ "##璞": 17525,
+ "##璟": 17526,
+ "##璧": 17527,
+ "##璨": 17528,
+ "##環": 17529,
+ "##璽": 17530,
+ "##璿": 17531,
+ "##瓊": 17532,
+ "##瓏": 17533,
+ "##瓒": 17534,
+ "##瓜": 17535,
+ "##瓢": 17536,
+ "##瓣": 17537,
+ "##瓤": 17538,
+ "##瓦": 17539,
+ "##瓮": 17540,
+ "##瓯": 17541,
+ "##瓴": 17542,
+ "##瓶": 17543,
+ "##瓷": 17544,
+ "##甄": 17545,
+ "##甌": 17546,
+ "##甕": 17547,
+ "##甘": 17548,
+ "##甙": 17549,
+ "##甚": 17550,
+ "##甜": 17551,
+ "##生": 17552,
+ "##產": 17553,
+ "##産": 17554,
+ "##甥": 17555,
+ "##甦": 17556,
+ "##用": 17557,
+ "##甩": 17558,
+ "##甫": 17559,
+ "##甬": 17560,
+ "##甭": 17561,
+ "##甯": 17562,
+ "##田": 17563,
+ "##由": 17564,
+ "##甲": 17565,
+ "##申": 17566,
+ "##电": 17567,
+ "##男": 17568,
+ "##甸": 17569,
+ "##町": 17570,
+ "##画": 17571,
+ "##甾": 17572,
+ "##畀": 17573,
+ "##畅": 17574,
+ "##界": 17575,
+ "##畏": 17576,
+ "##畑": 17577,
+ "##畔": 17578,
+ "##留": 17579,
+ "##畜": 17580,
+ "##畝": 17581,
+ "##畢": 17582,
+ "##略": 17583,
+ "##畦": 17584,
+ "##番": 17585,
+ "##畫": 17586,
+ "##異": 17587,
+ "##畲": 17588,
+ "##畳": 17589,
+ "##畴": 17590,
+ "##當": 17591,
+ "##畸": 17592,
+ "##畹": 17593,
+ "##畿": 17594,
+ "##疆": 17595,
+ "##疇": 17596,
+ "##疊": 17597,
+ "##疏": 17598,
+ "##疑": 17599,
+ "##疔": 17600,
+ "##疖": 17601,
+ "##疗": 17602,
+ "##疙": 17603,
+ "##疚": 17604,
+ "##疝": 17605,
+ "##疟": 17606,
+ "##疡": 17607,
+ "##疣": 17608,
+ "##疤": 17609,
+ "##疥": 17610,
+ "##疫": 17611,
+ "##疮": 17612,
+ "##疯": 17613,
+ "##疱": 17614,
+ "##疲": 17615,
+ "##疳": 17616,
+ "##疵": 17617,
+ "##疸": 17618,
+ "##疹": 17619,
+ "##疼": 17620,
+ "##疽": 17621,
+ "##疾": 17622,
+ "##痂": 17623,
+ "##病": 17624,
+ "##症": 17625,
+ "##痈": 17626,
+ "##痉": 17627,
+ "##痊": 17628,
+ "##痍": 17629,
+ "##痒": 17630,
+ "##痔": 17631,
+ "##痕": 17632,
+ "##痘": 17633,
+ "##痙": 17634,
+ "##痛": 17635,
+ "##痞": 17636,
+ "##痠": 17637,
+ "##痢": 17638,
+ "##痣": 17639,
+ "##痤": 17640,
+ "##痧": 17641,
+ "##痨": 17642,
+ "##痪": 17643,
+ "##痫": 17644,
+ "##痰": 17645,
+ "##痱": 17646,
+ "##痴": 17647,
+ "##痹": 17648,
+ "##痺": 17649,
+ "##痼": 17650,
+ "##痿": 17651,
+ "##瘀": 17652,
+ "##瘁": 17653,
+ "##瘋": 17654,
+ "##瘍": 17655,
+ "##瘓": 17656,
+ "##瘘": 17657,
+ "##瘙": 17658,
+ "##瘟": 17659,
+ "##瘠": 17660,
+ "##瘡": 17661,
+ "##瘢": 17662,
+ "##瘤": 17663,
+ "##瘦": 17664,
+ "##瘧": 17665,
+ "##瘩": 17666,
+ "##瘪": 17667,
+ "##瘫": 17668,
+ "##瘴": 17669,
+ "##瘸": 17670,
+ "##瘾": 17671,
+ "##療": 17672,
+ "##癇": 17673,
+ "##癌": 17674,
+ "##癒": 17675,
+ "##癖": 17676,
+ "##癜": 17677,
+ "##癞": 17678,
+ "##癡": 17679,
+ "##癢": 17680,
+ "##癣": 17681,
+ "##癥": 17682,
+ "##癫": 17683,
+ "##癬": 17684,
+ "##癮": 17685,
+ "##癱": 17686,
+ "##癲": 17687,
+ "##癸": 17688,
+ "##発": 17689,
+ "##登": 17690,
+ "##發": 17691,
+ "##白": 17692,
+ "##百": 17693,
+ "##皂": 17694,
+ "##的": 17695,
+ "##皆": 17696,
+ "##皇": 17697,
+ "##皈": 17698,
+ "##皋": 17699,
+ "##皎": 17700,
+ "##皑": 17701,
+ "##皓": 17702,
+ "##皖": 17703,
+ "##皙": 17704,
+ "##皚": 17705,
+ "##皮": 17706,
+ "##皰": 17707,
+ "##皱": 17708,
+ "##皴": 17709,
+ "##皺": 17710,
+ "##皿": 17711,
+ "##盂": 17712,
+ "##盃": 17713,
+ "##盅": 17714,
+ "##盆": 17715,
+ "##盈": 17716,
+ "##益": 17717,
+ "##盎": 17718,
+ "##盏": 17719,
+ "##盐": 17720,
+ "##监": 17721,
+ "##盒": 17722,
+ "##盔": 17723,
+ "##盖": 17724,
+ "##盗": 17725,
+ "##盘": 17726,
+ "##盛": 17727,
+ "##盜": 17728,
+ "##盞": 17729,
+ "##盟": 17730,
+ "##盡": 17731,
+ "##監": 17732,
+ "##盤": 17733,
+ "##盥": 17734,
+ "##盧": 17735,
+ "##盪": 17736,
+ "##目": 17737,
+ "##盯": 17738,
+ "##盱": 17739,
+ "##盲": 17740,
+ "##直": 17741,
+ "##相": 17742,
+ "##盹": 17743,
+ "##盼": 17744,
+ "##盾": 17745,
+ "##省": 17746,
+ "##眈": 17747,
+ "##眉": 17748,
+ "##看": 17749,
+ "##県": 17750,
+ "##眙": 17751,
+ "##眞": 17752,
+ "##真": 17753,
+ "##眠": 17754,
+ "##眦": 17755,
+ "##眨": 17756,
+ "##眩": 17757,
+ "##眯": 17758,
+ "##眶": 17759,
+ "##眷": 17760,
+ "##眸": 17761,
+ "##眺": 17762,
+ "##眼": 17763,
+ "##眾": 17764,
+ "##着": 17765,
+ "##睁": 17766,
+ "##睇": 17767,
+ "##睏": 17768,
+ "##睐": 17769,
+ "##睑": 17770,
+ "##睛": 17771,
+ "##睜": 17772,
+ "##睞": 17773,
+ "##睡": 17774,
+ "##睢": 17775,
+ "##督": 17776,
+ "##睥": 17777,
+ "##睦": 17778,
+ "##睨": 17779,
+ "##睪": 17780,
+ "##睫": 17781,
+ "##睬": 17782,
+ "##睹": 17783,
+ "##睽": 17784,
+ "##睾": 17785,
+ "##睿": 17786,
+ "##瞄": 17787,
+ "##瞅": 17788,
+ "##瞇": 17789,
+ "##瞋": 17790,
+ "##瞌": 17791,
+ "##瞎": 17792,
+ "##瞑": 17793,
+ "##瞒": 17794,
+ "##瞓": 17795,
+ "##瞞": 17796,
+ "##瞟": 17797,
+ "##瞠": 17798,
+ "##瞥": 17799,
+ "##瞧": 17800,
+ "##瞩": 17801,
+ "##瞪": 17802,
+ "##瞬": 17803,
+ "##瞭": 17804,
+ "##瞰": 17805,
+ "##瞳": 17806,
+ "##瞻": 17807,
+ "##瞼": 17808,
+ "##瞿": 17809,
+ "##矇": 17810,
+ "##矍": 17811,
+ "##矗": 17812,
+ "##矚": 17813,
+ "##矛": 17814,
+ "##矜": 17815,
+ "##矢": 17816,
+ "##矣": 17817,
+ "##知": 17818,
+ "##矩": 17819,
+ "##矫": 17820,
+ "##短": 17821,
+ "##矮": 17822,
+ "##矯": 17823,
+ "##石": 17824,
+ "##矶": 17825,
+ "##矽": 17826,
+ "##矾": 17827,
+ "##矿": 17828,
+ "##码": 17829,
+ "##砂": 17830,
+ "##砌": 17831,
+ "##砍": 17832,
+ "##砒": 17833,
+ "##研": 17834,
+ "##砖": 17835,
+ "##砗": 17836,
+ "##砚": 17837,
+ "##砝": 17838,
+ "##砣": 17839,
+ "##砥": 17840,
+ "##砧": 17841,
+ "##砭": 17842,
+ "##砰": 17843,
+ "##砲": 17844,
+ "##破": 17845,
+ "##砷": 17846,
+ "##砸": 17847,
+ "##砺": 17848,
+ "##砼": 17849,
+ "##砾": 17850,
+ "##础": 17851,
+ "##硅": 17852,
+ "##硐": 17853,
+ "##硒": 17854,
+ "##硕": 17855,
+ "##硝": 17856,
+ "##硫": 17857,
+ "##硬": 17858,
+ "##确": 17859,
+ "##硯": 17860,
+ "##硼": 17861,
+ "##碁": 17862,
+ "##碇": 17863,
+ "##碉": 17864,
+ "##碌": 17865,
+ "##碍": 17866,
+ "##碎": 17867,
+ "##碑": 17868,
+ "##碓": 17869,
+ "##碗": 17870,
+ "##碘": 17871,
+ "##碚": 17872,
+ "##碛": 17873,
+ "##碟": 17874,
+ "##碣": 17875,
+ "##碧": 17876,
+ "##碩": 17877,
+ "##碰": 17878,
+ "##碱": 17879,
+ "##碳": 17880,
+ "##碴": 17881,
+ "##確": 17882,
+ "##碼": 17883,
+ "##碾": 17884,
+ "##磁": 17885,
+ "##磅": 17886,
+ "##磊": 17887,
+ "##磋": 17888,
+ "##磐": 17889,
+ "##磕": 17890,
+ "##磚": 17891,
+ "##磡": 17892,
+ "##磨": 17893,
+ "##磬": 17894,
+ "##磯": 17895,
+ "##磲": 17896,
+ "##磷": 17897,
+ "##磺": 17898,
+ "##礁": 17899,
+ "##礎": 17900,
+ "##礙": 17901,
+ "##礡": 17902,
+ "##礦": 17903,
+ "##礪": 17904,
+ "##礫": 17905,
+ "##礴": 17906,
+ "##示": 17907,
+ "##礼": 17908,
+ "##社": 17909,
+ "##祀": 17910,
+ "##祁": 17911,
+ "##祂": 17912,
+ "##祇": 17913,
+ "##祈": 17914,
+ "##祉": 17915,
+ "##祎": 17916,
+ "##祐": 17917,
+ "##祕": 17918,
+ "##祖": 17919,
+ "##祗": 17920,
+ "##祚": 17921,
+ "##祛": 17922,
+ "##祜": 17923,
+ "##祝": 17924,
+ "##神": 17925,
+ "##祟": 17926,
+ "##祠": 17927,
+ "##祢": 17928,
+ "##祥": 17929,
+ "##票": 17930,
+ "##祭": 17931,
+ "##祯": 17932,
+ "##祷": 17933,
+ "##祸": 17934,
+ "##祺": 17935,
+ "##祿": 17936,
+ "##禀": 17937,
+ "##禁": 17938,
+ "##禄": 17939,
+ "##禅": 17940,
+ "##禍": 17941,
+ "##禎": 17942,
+ "##福": 17943,
+ "##禛": 17944,
+ "##禦": 17945,
+ "##禧": 17946,
+ "##禪": 17947,
+ "##禮": 17948,
+ "##禱": 17949,
+ "##禹": 17950,
+ "##禺": 17951,
+ "##离": 17952,
+ "##禽": 17953,
+ "##禾": 17954,
+ "##禿": 17955,
+ "##秀": 17956,
+ "##私": 17957,
+ "##秃": 17958,
+ "##秆": 17959,
+ "##秉": 17960,
+ "##秋": 17961,
+ "##种": 17962,
+ "##科": 17963,
+ "##秒": 17964,
+ "##秘": 17965,
+ "##租": 17966,
+ "##秣": 17967,
+ "##秤": 17968,
+ "##秦": 17969,
+ "##秧": 17970,
+ "##秩": 17971,
+ "##秭": 17972,
+ "##积": 17973,
+ "##称": 17974,
+ "##秸": 17975,
+ "##移": 17976,
+ "##秽": 17977,
+ "##稀": 17978,
+ "##稅": 17979,
+ "##程": 17980,
+ "##稍": 17981,
+ "##税": 17982,
+ "##稔": 17983,
+ "##稗": 17984,
+ "##稚": 17985,
+ "##稜": 17986,
+ "##稞": 17987,
+ "##稟": 17988,
+ "##稠": 17989,
+ "##稣": 17990,
+ "##種": 17991,
+ "##稱": 17992,
+ "##稲": 17993,
+ "##稳": 17994,
+ "##稷": 17995,
+ "##稹": 17996,
+ "##稻": 17997,
+ "##稼": 17998,
+ "##稽": 17999,
+ "##稿": 18000,
+ "##穀": 18001,
+ "##穂": 18002,
+ "##穆": 18003,
+ "##穌": 18004,
+ "##積": 18005,
+ "##穎": 18006,
+ "##穗": 18007,
+ "##穢": 18008,
+ "##穩": 18009,
+ "##穫": 18010,
+ "##穴": 18011,
+ "##究": 18012,
+ "##穷": 18013,
+ "##穹": 18014,
+ "##空": 18015,
+ "##穿": 18016,
+ "##突": 18017,
+ "##窃": 18018,
+ "##窄": 18019,
+ "##窈": 18020,
+ "##窍": 18021,
+ "##窑": 18022,
+ "##窒": 18023,
+ "##窓": 18024,
+ "##窕": 18025,
+ "##窖": 18026,
+ "##窗": 18027,
+ "##窘": 18028,
+ "##窜": 18029,
+ "##窝": 18030,
+ "##窟": 18031,
+ "##窠": 18032,
+ "##窥": 18033,
+ "##窦": 18034,
+ "##窨": 18035,
+ "##窩": 18036,
+ "##窪": 18037,
+ "##窮": 18038,
+ "##窯": 18039,
+ "##窺": 18040,
+ "##窿": 18041,
+ "##竄": 18042,
+ "##竅": 18043,
+ "##竇": 18044,
+ "##竊": 18045,
+ "##立": 18046,
+ "##竖": 18047,
+ "##站": 18048,
+ "##竜": 18049,
+ "##竞": 18050,
+ "##竟": 18051,
+ "##章": 18052,
+ "##竣": 18053,
+ "##童": 18054,
+ "##竭": 18055,
+ "##端": 18056,
+ "##競": 18057,
+ "##竹": 18058,
+ "##竺": 18059,
+ "##竽": 18060,
+ "##竿": 18061,
+ "##笃": 18062,
+ "##笆": 18063,
+ "##笈": 18064,
+ "##笋": 18065,
+ "##笏": 18066,
+ "##笑": 18067,
+ "##笔": 18068,
+ "##笙": 18069,
+ "##笛": 18070,
+ "##笞": 18071,
+ "##笠": 18072,
+ "##符": 18073,
+ "##笨": 18074,
+ "##第": 18075,
+ "##笹": 18076,
+ "##笺": 18077,
+ "##笼": 18078,
+ "##筆": 18079,
+ "##等": 18080,
+ "##筊": 18081,
+ "##筋": 18082,
+ "##筍": 18083,
+ "##筏": 18084,
+ "##筐": 18085,
+ "##筑": 18086,
+ "##筒": 18087,
+ "##答": 18088,
+ "##策": 18089,
+ "##筛": 18090,
+ "##筝": 18091,
+ "##筠": 18092,
+ "##筱": 18093,
+ "##筲": 18094,
+ "##筵": 18095,
+ "##筷": 18096,
+ "##筹": 18097,
+ "##签": 18098,
+ "##简": 18099,
+ "##箇": 18100,
+ "##箋": 18101,
+ "##箍": 18102,
+ "##箏": 18103,
+ "##箐": 18104,
+ "##箔": 18105,
+ "##箕": 18106,
+ "##算": 18107,
+ "##箝": 18108,
+ "##管": 18109,
+ "##箩": 18110,
+ "##箫": 18111,
+ "##箭": 18112,
+ "##箱": 18113,
+ "##箴": 18114,
+ "##箸": 18115,
+ "##節": 18116,
+ "##篁": 18117,
+ "##範": 18118,
+ "##篆": 18119,
+ "##篇": 18120,
+ "##築": 18121,
+ "##篑": 18122,
+ "##篓": 18123,
+ "##篙": 18124,
+ "##篝": 18125,
+ "##篠": 18126,
+ "##篡": 18127,
+ "##篤": 18128,
+ "##篩": 18129,
+ "##篪": 18130,
+ "##篮": 18131,
+ "##篱": 18132,
+ "##篷": 18133,
+ "##簇": 18134,
+ "##簌": 18135,
+ "##簍": 18136,
+ "##簡": 18137,
+ "##簦": 18138,
+ "##簧": 18139,
+ "##簪": 18140,
+ "##簫": 18141,
+ "##簷": 18142,
+ "##簸": 18143,
+ "##簽": 18144,
+ "##簾": 18145,
+ "##簿": 18146,
+ "##籁": 18147,
+ "##籃": 18148,
+ "##籌": 18149,
+ "##籍": 18150,
+ "##籐": 18151,
+ "##籟": 18152,
+ "##籠": 18153,
+ "##籤": 18154,
+ "##籬": 18155,
+ "##籮": 18156,
+ "##籲": 18157,
+ "##米": 18158,
+ "##类": 18159,
+ "##籼": 18160,
+ "##籽": 18161,
+ "##粄": 18162,
+ "##粉": 18163,
+ "##粑": 18164,
+ "##粒": 18165,
+ "##粕": 18166,
+ "##粗": 18167,
+ "##粘": 18168,
+ "##粟": 18169,
+ "##粤": 18170,
+ "##粥": 18171,
+ "##粧": 18172,
+ "##粪": 18173,
+ "##粮": 18174,
+ "##粱": 18175,
+ "##粲": 18176,
+ "##粳": 18177,
+ "##粵": 18178,
+ "##粹": 18179,
+ "##粼": 18180,
+ "##粽": 18181,
+ "##精": 18182,
+ "##粿": 18183,
+ "##糅": 18184,
+ "##糊": 18185,
+ "##糍": 18186,
+ "##糕": 18187,
+ "##糖": 18188,
+ "##糗": 18189,
+ "##糙": 18190,
+ "##糜": 18191,
+ "##糞": 18192,
+ "##糟": 18193,
+ "##糠": 18194,
+ "##糧": 18195,
+ "##糬": 18196,
+ "##糯": 18197,
+ "##糰": 18198,
+ "##糸": 18199,
+ "##系": 18200,
+ "##糾": 18201,
+ "##紀": 18202,
+ "##紂": 18203,
+ "##約": 18204,
+ "##紅": 18205,
+ "##紉": 18206,
+ "##紊": 18207,
+ "##紋": 18208,
+ "##納": 18209,
+ "##紐": 18210,
+ "##紓": 18211,
+ "##純": 18212,
+ "##紗": 18213,
+ "##紘": 18214,
+ "##紙": 18215,
+ "##級": 18216,
+ "##紛": 18217,
+ "##紜": 18218,
+ "##素": 18219,
+ "##紡": 18220,
+ "##索": 18221,
+ "##紧": 18222,
+ "##紫": 18223,
+ "##紮": 18224,
+ "##累": 18225,
+ "##細": 18226,
+ "##紳": 18227,
+ "##紹": 18228,
+ "##紺": 18229,
+ "##終": 18230,
+ "##絃": 18231,
+ "##組": 18232,
+ "##絆": 18233,
+ "##経": 18234,
+ "##結": 18235,
+ "##絕": 18236,
+ "##絞": 18237,
+ "##絡": 18238,
+ "##絢": 18239,
+ "##給": 18240,
+ "##絨": 18241,
+ "##絮": 18242,
+ "##統": 18243,
+ "##絲": 18244,
+ "##絳": 18245,
+ "##絵": 18246,
+ "##絶": 18247,
+ "##絹": 18248,
+ "##綁": 18249,
+ "##綏": 18250,
+ "##綑": 18251,
+ "##經": 18252,
+ "##継": 18253,
+ "##続": 18254,
+ "##綜": 18255,
+ "##綠": 18256,
+ "##綢": 18257,
+ "##綦": 18258,
+ "##綫": 18259,
+ "##綬": 18260,
+ "##維": 18261,
+ "##綱": 18262,
+ "##網": 18263,
+ "##綴": 18264,
+ "##綵": 18265,
+ "##綸": 18266,
+ "##綺": 18267,
+ "##綻": 18268,
+ "##綽": 18269,
+ "##綾": 18270,
+ "##綿": 18271,
+ "##緊": 18272,
+ "##緋": 18273,
+ "##総": 18274,
+ "##緑": 18275,
+ "##緒": 18276,
+ "##緘": 18277,
+ "##線": 18278,
+ "##緝": 18279,
+ "##緞": 18280,
+ "##締": 18281,
+ "##緣": 18282,
+ "##編": 18283,
+ "##緩": 18284,
+ "##緬": 18285,
+ "##緯": 18286,
+ "##練": 18287,
+ "##緹": 18288,
+ "##緻": 18289,
+ "##縁": 18290,
+ "##縄": 18291,
+ "##縈": 18292,
+ "##縛": 18293,
+ "##縝": 18294,
+ "##縣": 18295,
+ "##縫": 18296,
+ "##縮": 18297,
+ "##縱": 18298,
+ "##縴": 18299,
+ "##縷": 18300,
+ "##總": 18301,
+ "##績": 18302,
+ "##繁": 18303,
+ "##繃": 18304,
+ "##繆": 18305,
+ "##繇": 18306,
+ "##繋": 18307,
+ "##織": 18308,
+ "##繕": 18309,
+ "##繚": 18310,
+ "##繞": 18311,
+ "##繡": 18312,
+ "##繩": 18313,
+ "##繪": 18314,
+ "##繫": 18315,
+ "##繭": 18316,
+ "##繳": 18317,
+ "##繹": 18318,
+ "##繼": 18319,
+ "##繽": 18320,
+ "##纂": 18321,
+ "##續": 18322,
+ "##纍": 18323,
+ "##纏": 18324,
+ "##纓": 18325,
+ "##纔": 18326,
+ "##纖": 18327,
+ "##纜": 18328,
+ "##纠": 18329,
+ "##红": 18330,
+ "##纣": 18331,
+ "##纤": 18332,
+ "##约": 18333,
+ "##级": 18334,
+ "##纨": 18335,
+ "##纪": 18336,
+ "##纫": 18337,
+ "##纬": 18338,
+ "##纭": 18339,
+ "##纯": 18340,
+ "##纰": 18341,
+ "##纱": 18342,
+ "##纲": 18343,
+ "##纳": 18344,
+ "##纵": 18345,
+ "##纶": 18346,
+ "##纷": 18347,
+ "##纸": 18348,
+ "##纹": 18349,
+ "##纺": 18350,
+ "##纽": 18351,
+ "##纾": 18352,
+ "##线": 18353,
+ "##绀": 18354,
+ "##练": 18355,
+ "##组": 18356,
+ "##绅": 18357,
+ "##细": 18358,
+ "##织": 18359,
+ "##终": 18360,
+ "##绊": 18361,
+ "##绍": 18362,
+ "##绎": 18363,
+ "##经": 18364,
+ "##绑": 18365,
+ "##绒": 18366,
+ "##结": 18367,
+ "##绔": 18368,
+ "##绕": 18369,
+ "##绘": 18370,
+ "##给": 18371,
+ "##绚": 18372,
+ "##绛": 18373,
+ "##络": 18374,
+ "##绝": 18375,
+ "##绞": 18376,
+ "##统": 18377,
+ "##绡": 18378,
+ "##绢": 18379,
+ "##绣": 18380,
+ "##绥": 18381,
+ "##绦": 18382,
+ "##继": 18383,
+ "##绩": 18384,
+ "##绪": 18385,
+ "##绫": 18386,
+ "##续": 18387,
+ "##绮": 18388,
+ "##绯": 18389,
+ "##绰": 18390,
+ "##绳": 18391,
+ "##维": 18392,
+ "##绵": 18393,
+ "##绶": 18394,
+ "##绷": 18395,
+ "##绸": 18396,
+ "##绻": 18397,
+ "##综": 18398,
+ "##绽": 18399,
+ "##绾": 18400,
+ "##绿": 18401,
+ "##缀": 18402,
+ "##缄": 18403,
+ "##缅": 18404,
+ "##缆": 18405,
+ "##缇": 18406,
+ "##缈": 18407,
+ "##缉": 18408,
+ "##缎": 18409,
+ "##缓": 18410,
+ "##缔": 18411,
+ "##缕": 18412,
+ "##编": 18413,
+ "##缘": 18414,
+ "##缙": 18415,
+ "##缚": 18416,
+ "##缜": 18417,
+ "##缝": 18418,
+ "##缠": 18419,
+ "##缢": 18420,
+ "##缤": 18421,
+ "##缥": 18422,
+ "##缨": 18423,
+ "##缩": 18424,
+ "##缪": 18425,
+ "##缭": 18426,
+ "##缮": 18427,
+ "##缰": 18428,
+ "##缱": 18429,
+ "##缴": 18430,
+ "##缸": 18431,
+ "##缺": 18432,
+ "##缽": 18433,
+ "##罂": 18434,
+ "##罄": 18435,
+ "##罌": 18436,
+ "##罐": 18437,
+ "##网": 18438,
+ "##罔": 18439,
+ "##罕": 18440,
+ "##罗": 18441,
+ "##罚": 18442,
+ "##罡": 18443,
+ "##罢": 18444,
+ "##罩": 18445,
+ "##罪": 18446,
+ "##置": 18447,
+ "##罰": 18448,
+ "##署": 18449,
+ "##罵": 18450,
+ "##罷": 18451,
+ "##罹": 18452,
+ "##羁": 18453,
+ "##羅": 18454,
+ "##羈": 18455,
+ "##羊": 18456,
+ "##羌": 18457,
+ "##美": 18458,
+ "##羔": 18459,
+ "##羚": 18460,
+ "##羞": 18461,
+ "##羟": 18462,
+ "##羡": 18463,
+ "##羣": 18464,
+ "##群": 18465,
+ "##羥": 18466,
+ "##羧": 18467,
+ "##羨": 18468,
+ "##義": 18469,
+ "##羯": 18470,
+ "##羲": 18471,
+ "##羸": 18472,
+ "##羹": 18473,
+ "##羽": 18474,
+ "##羿": 18475,
+ "##翁": 18476,
+ "##翅": 18477,
+ "##翊": 18478,
+ "##翌": 18479,
+ "##翎": 18480,
+ "##習": 18481,
+ "##翔": 18482,
+ "##翘": 18483,
+ "##翟": 18484,
+ "##翠": 18485,
+ "##翡": 18486,
+ "##翦": 18487,
+ "##翩": 18488,
+ "##翰": 18489,
+ "##翱": 18490,
+ "##翳": 18491,
+ "##翹": 18492,
+ "##翻": 18493,
+ "##翼": 18494,
+ "##耀": 18495,
+ "##老": 18496,
+ "##考": 18497,
+ "##耄": 18498,
+ "##者": 18499,
+ "##耆": 18500,
+ "##耋": 18501,
+ "##而": 18502,
+ "##耍": 18503,
+ "##耐": 18504,
+ "##耒": 18505,
+ "##耕": 18506,
+ "##耗": 18507,
+ "##耘": 18508,
+ "##耙": 18509,
+ "##耦": 18510,
+ "##耨": 18511,
+ "##耳": 18512,
+ "##耶": 18513,
+ "##耷": 18514,
+ "##耸": 18515,
+ "##耻": 18516,
+ "##耽": 18517,
+ "##耿": 18518,
+ "##聂": 18519,
+ "##聆": 18520,
+ "##聊": 18521,
+ "##聋": 18522,
+ "##职": 18523,
+ "##聒": 18524,
+ "##联": 18525,
+ "##聖": 18526,
+ "##聘": 18527,
+ "##聚": 18528,
+ "##聞": 18529,
+ "##聪": 18530,
+ "##聯": 18531,
+ "##聰": 18532,
+ "##聲": 18533,
+ "##聳": 18534,
+ "##聴": 18535,
+ "##聶": 18536,
+ "##職": 18537,
+ "##聽": 18538,
+ "##聾": 18539,
+ "##聿": 18540,
+ "##肃": 18541,
+ "##肄": 18542,
+ "##肅": 18543,
+ "##肆": 18544,
+ "##肇": 18545,
+ "##肉": 18546,
+ "##肋": 18547,
+ "##肌": 18548,
+ "##肏": 18549,
+ "##肓": 18550,
+ "##肖": 18551,
+ "##肘": 18552,
+ "##肚": 18553,
+ "##肛": 18554,
+ "##肝": 18555,
+ "##肠": 18556,
+ "##股": 18557,
+ "##肢": 18558,
+ "##肤": 18559,
+ "##肥": 18560,
+ "##肩": 18561,
+ "##肪": 18562,
+ "##肮": 18563,
+ "##肯": 18564,
+ "##肱": 18565,
+ "##育": 18566,
+ "##肴": 18567,
+ "##肺": 18568,
+ "##肽": 18569,
+ "##肾": 18570,
+ "##肿": 18571,
+ "##胀": 18572,
+ "##胁": 18573,
+ "##胃": 18574,
+ "##胄": 18575,
+ "##胆": 18576,
+ "##背": 18577,
+ "##胍": 18578,
+ "##胎": 18579,
+ "##胖": 18580,
+ "##胚": 18581,
+ "##胛": 18582,
+ "##胜": 18583,
+ "##胝": 18584,
+ "##胞": 18585,
+ "##胡": 18586,
+ "##胤": 18587,
+ "##胥": 18588,
+ "##胧": 18589,
+ "##胫": 18590,
+ "##胭": 18591,
+ "##胯": 18592,
+ "##胰": 18593,
+ "##胱": 18594,
+ "##胳": 18595,
+ "##胴": 18596,
+ "##胶": 18597,
+ "##胸": 18598,
+ "##胺": 18599,
+ "##能": 18600,
+ "##脂": 18601,
+ "##脅": 18602,
+ "##脆": 18603,
+ "##脇": 18604,
+ "##脈": 18605,
+ "##脉": 18606,
+ "##脊": 18607,
+ "##脍": 18608,
+ "##脏": 18609,
+ "##脐": 18610,
+ "##脑": 18611,
+ "##脓": 18612,
+ "##脖": 18613,
+ "##脘": 18614,
+ "##脚": 18615,
+ "##脛": 18616,
+ "##脣": 18617,
+ "##脩": 18618,
+ "##脫": 18619,
+ "##脯": 18620,
+ "##脱": 18621,
+ "##脲": 18622,
+ "##脳": 18623,
+ "##脸": 18624,
+ "##脹": 18625,
+ "##脾": 18626,
+ "##腆": 18627,
+ "##腈": 18628,
+ "##腊": 18629,
+ "##腋": 18630,
+ "##腌": 18631,
+ "##腎": 18632,
+ "##腐": 18633,
+ "##腑": 18634,
+ "##腓": 18635,
+ "##腔": 18636,
+ "##腕": 18637,
+ "##腥": 18638,
+ "##腦": 18639,
+ "##腩": 18640,
+ "##腫": 18641,
+ "##腭": 18642,
+ "##腮": 18643,
+ "##腰": 18644,
+ "##腱": 18645,
+ "##腳": 18646,
+ "##腴": 18647,
+ "##腸": 18648,
+ "##腹": 18649,
+ "##腺": 18650,
+ "##腻": 18651,
+ "##腼": 18652,
+ "##腾": 18653,
+ "##腿": 18654,
+ "##膀": 18655,
+ "##膈": 18656,
+ "##膊": 18657,
+ "##膏": 18658,
+ "##膑": 18659,
+ "##膘": 18660,
+ "##膚": 18661,
+ "##膛": 18662,
+ "##膜": 18663,
+ "##膝": 18664,
+ "##膠": 18665,
+ "##膦": 18666,
+ "##膨": 18667,
+ "##膩": 18668,
+ "##膳": 18669,
+ "##膺": 18670,
+ "##膻": 18671,
+ "##膽": 18672,
+ "##膾": 18673,
+ "##膿": 18674,
+ "##臀": 18675,
+ "##臂": 18676,
+ "##臃": 18677,
+ "##臆": 18678,
+ "##臉": 18679,
+ "##臊": 18680,
+ "##臍": 18681,
+ "##臓": 18682,
+ "##臘": 18683,
+ "##臟": 18684,
+ "##臣": 18685,
+ "##臥": 18686,
+ "##臧": 18687,
+ "##臨": 18688,
+ "##自": 18689,
+ "##臬": 18690,
+ "##臭": 18691,
+ "##至": 18692,
+ "##致": 18693,
+ "##臺": 18694,
+ "##臻": 18695,
+ "##臼": 18696,
+ "##臾": 18697,
+ "##舀": 18698,
+ "##舂": 18699,
+ "##舅": 18700,
+ "##舆": 18701,
+ "##與": 18702,
+ "##興": 18703,
+ "##舉": 18704,
+ "##舊": 18705,
+ "##舌": 18706,
+ "##舍": 18707,
+ "##舎": 18708,
+ "##舐": 18709,
+ "##舒": 18710,
+ "##舔": 18711,
+ "##舖": 18712,
+ "##舗": 18713,
+ "##舛": 18714,
+ "##舜": 18715,
+ "##舞": 18716,
+ "##舟": 18717,
+ "##航": 18718,
+ "##舫": 18719,
+ "##般": 18720,
+ "##舰": 18721,
+ "##舱": 18722,
+ "##舵": 18723,
+ "##舶": 18724,
+ "##舷": 18725,
+ "##舸": 18726,
+ "##船": 18727,
+ "##舺": 18728,
+ "##舾": 18729,
+ "##艇": 18730,
+ "##艋": 18731,
+ "##艘": 18732,
+ "##艙": 18733,
+ "##艦": 18734,
+ "##艮": 18735,
+ "##良": 18736,
+ "##艰": 18737,
+ "##艱": 18738,
+ "##色": 18739,
+ "##艳": 18740,
+ "##艷": 18741,
+ "##艹": 18742,
+ "##艺": 18743,
+ "##艾": 18744,
+ "##节": 18745,
+ "##芃": 18746,
+ "##芈": 18747,
+ "##芊": 18748,
+ "##芋": 18749,
+ "##芍": 18750,
+ "##芎": 18751,
+ "##芒": 18752,
+ "##芙": 18753,
+ "##芜": 18754,
+ "##芝": 18755,
+ "##芡": 18756,
+ "##芥": 18757,
+ "##芦": 18758,
+ "##芩": 18759,
+ "##芪": 18760,
+ "##芫": 18761,
+ "##芬": 18762,
+ "##芭": 18763,
+ "##芮": 18764,
+ "##芯": 18765,
+ "##花": 18766,
+ "##芳": 18767,
+ "##芷": 18768,
+ "##芸": 18769,
+ "##芹": 18770,
+ "##芻": 18771,
+ "##芽": 18772,
+ "##芾": 18773,
+ "##苁": 18774,
+ "##苄": 18775,
+ "##苇": 18776,
+ "##苋": 18777,
+ "##苍": 18778,
+ "##苏": 18779,
+ "##苑": 18780,
+ "##苒": 18781,
+ "##苓": 18782,
+ "##苔": 18783,
+ "##苕": 18784,
+ "##苗": 18785,
+ "##苛": 18786,
+ "##苜": 18787,
+ "##苞": 18788,
+ "##苟": 18789,
+ "##苡": 18790,
+ "##苣": 18791,
+ "##若": 18792,
+ "##苦": 18793,
+ "##苫": 18794,
+ "##苯": 18795,
+ "##英": 18796,
+ "##苷": 18797,
+ "##苹": 18798,
+ "##苻": 18799,
+ "##茁": 18800,
+ "##茂": 18801,
+ "##范": 18802,
+ "##茄": 18803,
+ "##茅": 18804,
+ "##茉": 18805,
+ "##茎": 18806,
+ "##茏": 18807,
+ "##茗": 18808,
+ "##茜": 18809,
+ "##茧": 18810,
+ "##茨": 18811,
+ "##茫": 18812,
+ "##茬": 18813,
+ "##茭": 18814,
+ "##茯": 18815,
+ "##茱": 18816,
+ "##茲": 18817,
+ "##茴": 18818,
+ "##茵": 18819,
+ "##茶": 18820,
+ "##茸": 18821,
+ "##茹": 18822,
+ "##茼": 18823,
+ "##荀": 18824,
+ "##荃": 18825,
+ "##荆": 18826,
+ "##草": 18827,
+ "##荊": 18828,
+ "##荏": 18829,
+ "##荐": 18830,
+ "##荒": 18831,
+ "##荔": 18832,
+ "##荖": 18833,
+ "##荘": 18834,
+ "##荚": 18835,
+ "##荞": 18836,
+ "##荟": 18837,
+ "##荠": 18838,
+ "##荡": 18839,
+ "##荣": 18840,
+ "##荤": 18841,
+ "##荥": 18842,
+ "##荧": 18843,
+ "##荨": 18844,
+ "##荪": 18845,
+ "##荫": 18846,
+ "##药": 18847,
+ "##荳": 18848,
+ "##荷": 18849,
+ "##荸": 18850,
+ "##荻": 18851,
+ "##荼": 18852,
+ "##荽": 18853,
+ "##莅": 18854,
+ "##莆": 18855,
+ "##莉": 18856,
+ "##莊": 18857,
+ "##莎": 18858,
+ "##莒": 18859,
+ "##莓": 18860,
+ "##莖": 18861,
+ "##莘": 18862,
+ "##莞": 18863,
+ "##莠": 18864,
+ "##莢": 18865,
+ "##莧": 18866,
+ "##莪": 18867,
+ "##莫": 18868,
+ "##莱": 18869,
+ "##莲": 18870,
+ "##莴": 18871,
+ "##获": 18872,
+ "##莹": 18873,
+ "##莺": 18874,
+ "##莽": 18875,
+ "##莿": 18876,
+ "##菀": 18877,
+ "##菁": 18878,
+ "##菅": 18879,
+ "##菇": 18880,
+ "##菈": 18881,
+ "##菊": 18882,
+ "##菌": 18883,
+ "##菏": 18884,
+ "##菓": 18885,
+ "##菖": 18886,
+ "##菘": 18887,
+ "##菜": 18888,
+ "##菟": 18889,
+ "##菠": 18890,
+ "##菡": 18891,
+ "##菩": 18892,
+ "##華": 18893,
+ "##菱": 18894,
+ "##菲": 18895,
+ "##菸": 18896,
+ "##菽": 18897,
+ "##萁": 18898,
+ "##萃": 18899,
+ "##萄": 18900,
+ "##萊": 18901,
+ "##萋": 18902,
+ "##萌": 18903,
+ "##萍": 18904,
+ "##萎": 18905,
+ "##萘": 18906,
+ "##萝": 18907,
+ "##萤": 18908,
+ "##营": 18909,
+ "##萦": 18910,
+ "##萧": 18911,
+ "##萨": 18912,
+ "##萩": 18913,
+ "##萬": 18914,
+ "##萱": 18915,
+ "##萵": 18916,
+ "##萸": 18917,
+ "##萼": 18918,
+ "##落": 18919,
+ "##葆": 18920,
+ "##葉": 18921,
+ "##著": 18922,
+ "##葚": 18923,
+ "##葛": 18924,
+ "##葡": 18925,
+ "##董": 18926,
+ "##葦": 18927,
+ "##葩": 18928,
+ "##葫": 18929,
+ "##葬": 18930,
+ "##葭": 18931,
+ "##葯": 18932,
+ "##葱": 18933,
+ "##葳": 18934,
+ "##葵": 18935,
+ "##葷": 18936,
+ "##葺": 18937,
+ "##蒂": 18938,
+ "##蒋": 18939,
+ "##蒐": 18940,
+ "##蒔": 18941,
+ "##蒙": 18942,
+ "##蒜": 18943,
+ "##蒞": 18944,
+ "##蒟": 18945,
+ "##蒡": 18946,
+ "##蒨": 18947,
+ "##蒲": 18948,
+ "##蒸": 18949,
+ "##蒹": 18950,
+ "##蒻": 18951,
+ "##蒼": 18952,
+ "##蒿": 18953,
+ "##蓁": 18954,
+ "##蓄": 18955,
+ "##蓆": 18956,
+ "##蓉": 18957,
+ "##蓋": 18958,
+ "##蓑": 18959,
+ "##蓓": 18960,
+ "##蓖": 18961,
+ "##蓝": 18962,
+ "##蓟": 18963,
+ "##蓦": 18964,
+ "##蓬": 18965,
+ "##蓮": 18966,
+ "##蓼": 18967,
+ "##蓿": 18968,
+ "##蔑": 18969,
+ "##蔓": 18970,
+ "##蔔": 18971,
+ "##蔗": 18972,
+ "##蔘": 18973,
+ "##蔚": 18974,
+ "##蔡": 18975,
+ "##蔣": 18976,
+ "##蔥": 18977,
+ "##蔫": 18978,
+ "##蔬": 18979,
+ "##蔭": 18980,
+ "##蔵": 18981,
+ "##蔷": 18982,
+ "##蔺": 18983,
+ "##蔻": 18984,
+ "##蔼": 18985,
+ "##蔽": 18986,
+ "##蕁": 18987,
+ "##蕃": 18988,
+ "##蕈": 18989,
+ "##蕉": 18990,
+ "##蕊": 18991,
+ "##蕎": 18992,
+ "##蕙": 18993,
+ "##蕤": 18994,
+ "##蕨": 18995,
+ "##蕩": 18996,
+ "##蕪": 18997,
+ "##蕭": 18998,
+ "##蕲": 18999,
+ "##蕴": 19000,
+ "##蕻": 19001,
+ "##蕾": 19002,
+ "##薄": 19003,
+ "##薅": 19004,
+ "##薇": 19005,
+ "##薈": 19006,
+ "##薊": 19007,
+ "##薏": 19008,
+ "##薑": 19009,
+ "##薔": 19010,
+ "##薙": 19011,
+ "##薛": 19012,
+ "##薦": 19013,
+ "##薨": 19014,
+ "##薩": 19015,
+ "##薪": 19016,
+ "##薬": 19017,
+ "##薯": 19018,
+ "##薰": 19019,
+ "##薹": 19020,
+ "##藉": 19021,
+ "##藍": 19022,
+ "##藏": 19023,
+ "##藐": 19024,
+ "##藓": 19025,
+ "##藕": 19026,
+ "##藜": 19027,
+ "##藝": 19028,
+ "##藤": 19029,
+ "##藥": 19030,
+ "##藩": 19031,
+ "##藹": 19032,
+ "##藻": 19033,
+ "##藿": 19034,
+ "##蘆": 19035,
+ "##蘇": 19036,
+ "##蘊": 19037,
+ "##蘋": 19038,
+ "##蘑": 19039,
+ "##蘚": 19040,
+ "##蘭": 19041,
+ "##蘸": 19042,
+ "##蘼": 19043,
+ "##蘿": 19044,
+ "##虎": 19045,
+ "##虏": 19046,
+ "##虐": 19047,
+ "##虑": 19048,
+ "##虔": 19049,
+ "##處": 19050,
+ "##虚": 19051,
+ "##虛": 19052,
+ "##虜": 19053,
+ "##虞": 19054,
+ "##號": 19055,
+ "##虢": 19056,
+ "##虧": 19057,
+ "##虫": 19058,
+ "##虬": 19059,
+ "##虱": 19060,
+ "##虹": 19061,
+ "##虻": 19062,
+ "##虽": 19063,
+ "##虾": 19064,
+ "##蚀": 19065,
+ "##蚁": 19066,
+ "##蚂": 19067,
+ "##蚊": 19068,
+ "##蚌": 19069,
+ "##蚓": 19070,
+ "##蚕": 19071,
+ "##蚜": 19072,
+ "##蚝": 19073,
+ "##蚣": 19074,
+ "##蚤": 19075,
+ "##蚩": 19076,
+ "##蚪": 19077,
+ "##蚯": 19078,
+ "##蚱": 19079,
+ "##蚵": 19080,
+ "##蛀": 19081,
+ "##蛆": 19082,
+ "##蛇": 19083,
+ "##蛊": 19084,
+ "##蛋": 19085,
+ "##蛎": 19086,
+ "##蛐": 19087,
+ "##蛔": 19088,
+ "##蛙": 19089,
+ "##蛛": 19090,
+ "##蛟": 19091,
+ "##蛤": 19092,
+ "##蛭": 19093,
+ "##蛮": 19094,
+ "##蛰": 19095,
+ "##蛳": 19096,
+ "##蛹": 19097,
+ "##蛻": 19098,
+ "##蛾": 19099,
+ "##蜀": 19100,
+ "##蜂": 19101,
+ "##蜃": 19102,
+ "##蜆": 19103,
+ "##蜇": 19104,
+ "##蜈": 19105,
+ "##蜊": 19106,
+ "##蜍": 19107,
+ "##蜒": 19108,
+ "##蜓": 19109,
+ "##蜕": 19110,
+ "##蜗": 19111,
+ "##蜘": 19112,
+ "##蜚": 19113,
+ "##蜜": 19114,
+ "##蜡": 19115,
+ "##蜢": 19116,
+ "##蜥": 19117,
+ "##蜱": 19118,
+ "##蜴": 19119,
+ "##蜷": 19120,
+ "##蜻": 19121,
+ "##蜿": 19122,
+ "##蝇": 19123,
+ "##蝈": 19124,
+ "##蝉": 19125,
+ "##蝌": 19126,
+ "##蝎": 19127,
+ "##蝕": 19128,
+ "##蝗": 19129,
+ "##蝙": 19130,
+ "##蝟": 19131,
+ "##蝠": 19132,
+ "##蝦": 19133,
+ "##蝨": 19134,
+ "##蝴": 19135,
+ "##蝶": 19136,
+ "##蝸": 19137,
+ "##蝼": 19138,
+ "##螂": 19139,
+ "##螃": 19140,
+ "##融": 19141,
+ "##螞": 19142,
+ "##螢": 19143,
+ "##螨": 19144,
+ "##螯": 19145,
+ "##螳": 19146,
+ "##螺": 19147,
+ "##蟀": 19148,
+ "##蟄": 19149,
+ "##蟆": 19150,
+ "##蟋": 19151,
+ "##蟎": 19152,
+ "##蟑": 19153,
+ "##蟒": 19154,
+ "##蟠": 19155,
+ "##蟬": 19156,
+ "##蟲": 19157,
+ "##蟹": 19158,
+ "##蟻": 19159,
+ "##蟾": 19160,
+ "##蠅": 19161,
+ "##蠍": 19162,
+ "##蠔": 19163,
+ "##蠕": 19164,
+ "##蠛": 19165,
+ "##蠟": 19166,
+ "##蠡": 19167,
+ "##蠢": 19168,
+ "##蠣": 19169,
+ "##蠱": 19170,
+ "##蠶": 19171,
+ "##蠹": 19172,
+ "##蠻": 19173,
+ "##血": 19174,
+ "##衄": 19175,
+ "##衅": 19176,
+ "##衆": 19177,
+ "##行": 19178,
+ "##衍": 19179,
+ "##術": 19180,
+ "##衔": 19181,
+ "##街": 19182,
+ "##衙": 19183,
+ "##衛": 19184,
+ "##衝": 19185,
+ "##衞": 19186,
+ "##衡": 19187,
+ "##衢": 19188,
+ "##衣": 19189,
+ "##补": 19190,
+ "##表": 19191,
+ "##衩": 19192,
+ "##衫": 19193,
+ "##衬": 19194,
+ "##衮": 19195,
+ "##衰": 19196,
+ "##衲": 19197,
+ "##衷": 19198,
+ "##衹": 19199,
+ "##衾": 19200,
+ "##衿": 19201,
+ "##袁": 19202,
+ "##袂": 19203,
+ "##袄": 19204,
+ "##袅": 19205,
+ "##袈": 19206,
+ "##袋": 19207,
+ "##袍": 19208,
+ "##袒": 19209,
+ "##袖": 19210,
+ "##袜": 19211,
+ "##袞": 19212,
+ "##袤": 19213,
+ "##袪": 19214,
+ "##被": 19215,
+ "##袭": 19216,
+ "##袱": 19217,
+ "##裁": 19218,
+ "##裂": 19219,
+ "##装": 19220,
+ "##裆": 19221,
+ "##裊": 19222,
+ "##裏": 19223,
+ "##裔": 19224,
+ "##裕": 19225,
+ "##裘": 19226,
+ "##裙": 19227,
+ "##補": 19228,
+ "##裝": 19229,
+ "##裟": 19230,
+ "##裡": 19231,
+ "##裤": 19232,
+ "##裨": 19233,
+ "##裱": 19234,
+ "##裳": 19235,
+ "##裴": 19236,
+ "##裸": 19237,
+ "##裹": 19238,
+ "##製": 19239,
+ "##裾": 19240,
+ "##褂": 19241,
+ "##複": 19242,
+ "##褐": 19243,
+ "##褒": 19244,
+ "##褓": 19245,
+ "##褔": 19246,
+ "##褚": 19247,
+ "##褥": 19248,
+ "##褪": 19249,
+ "##褫": 19250,
+ "##褲": 19251,
+ "##褶": 19252,
+ "##褻": 19253,
+ "##襁": 19254,
+ "##襄": 19255,
+ "##襟": 19256,
+ "##襠": 19257,
+ "##襪": 19258,
+ "##襬": 19259,
+ "##襯": 19260,
+ "##襲": 19261,
+ "##西": 19262,
+ "##要": 19263,
+ "##覃": 19264,
+ "##覆": 19265,
+ "##覇": 19266,
+ "##見": 19267,
+ "##規": 19268,
+ "##覓": 19269,
+ "##視": 19270,
+ "##覚": 19271,
+ "##覦": 19272,
+ "##覧": 19273,
+ "##親": 19274,
+ "##覬": 19275,
+ "##観": 19276,
+ "##覷": 19277,
+ "##覺": 19278,
+ "##覽": 19279,
+ "##觀": 19280,
+ "##见": 19281,
+ "##观": 19282,
+ "##规": 19283,
+ "##觅": 19284,
+ "##视": 19285,
+ "##览": 19286,
+ "##觉": 19287,
+ "##觊": 19288,
+ "##觎": 19289,
+ "##觐": 19290,
+ "##觑": 19291,
+ "##角": 19292,
+ "##觞": 19293,
+ "##解": 19294,
+ "##觥": 19295,
+ "##触": 19296,
+ "##觸": 19297,
+ "##言": 19298,
+ "##訂": 19299,
+ "##計": 19300,
+ "##訊": 19301,
+ "##討": 19302,
+ "##訓": 19303,
+ "##訕": 19304,
+ "##訖": 19305,
+ "##託": 19306,
+ "##記": 19307,
+ "##訛": 19308,
+ "##訝": 19309,
+ "##訟": 19310,
+ "##訣": 19311,
+ "##訥": 19312,
+ "##訪": 19313,
+ "##設": 19314,
+ "##許": 19315,
+ "##訳": 19316,
+ "##訴": 19317,
+ "##訶": 19318,
+ "##診": 19319,
+ "##註": 19320,
+ "##証": 19321,
+ "##詆": 19322,
+ "##詐": 19323,
+ "##詔": 19324,
+ "##評": 19325,
+ "##詛": 19326,
+ "##詞": 19327,
+ "##詠": 19328,
+ "##詡": 19329,
+ "##詢": 19330,
+ "##詣": 19331,
+ "##試": 19332,
+ "##詩": 19333,
+ "##詫": 19334,
+ "##詬": 19335,
+ "##詭": 19336,
+ "##詮": 19337,
+ "##詰": 19338,
+ "##話": 19339,
+ "##該": 19340,
+ "##詳": 19341,
+ "##詹": 19342,
+ "##詼": 19343,
+ "##誅": 19344,
+ "##誇": 19345,
+ "##誉": 19346,
+ "##誌": 19347,
+ "##認": 19348,
+ "##誓": 19349,
+ "##誕": 19350,
+ "##誘": 19351,
+ "##語": 19352,
+ "##誠": 19353,
+ "##誡": 19354,
+ "##誣": 19355,
+ "##誤": 19356,
+ "##誥": 19357,
+ "##誦": 19358,
+ "##誨": 19359,
+ "##說": 19360,
+ "##説": 19361,
+ "##読": 19362,
+ "##誰": 19363,
+ "##課": 19364,
+ "##誹": 19365,
+ "##誼": 19366,
+ "##調": 19367,
+ "##諄": 19368,
+ "##談": 19369,
+ "##請": 19370,
+ "##諏": 19371,
+ "##諒": 19372,
+ "##論": 19373,
+ "##諗": 19374,
+ "##諜": 19375,
+ "##諡": 19376,
+ "##諦": 19377,
+ "##諧": 19378,
+ "##諫": 19379,
+ "##諭": 19380,
+ "##諮": 19381,
+ "##諱": 19382,
+ "##諳": 19383,
+ "##諷": 19384,
+ "##諸": 19385,
+ "##諺": 19386,
+ "##諾": 19387,
+ "##謀": 19388,
+ "##謁": 19389,
+ "##謂": 19390,
+ "##謄": 19391,
+ "##謊": 19392,
+ "##謎": 19393,
+ "##謐": 19394,
+ "##謔": 19395,
+ "##謗": 19396,
+ "##謙": 19397,
+ "##講": 19398,
+ "##謝": 19399,
+ "##謠": 19400,
+ "##謨": 19401,
+ "##謬": 19402,
+ "##謹": 19403,
+ "##謾": 19404,
+ "##譁": 19405,
+ "##證": 19406,
+ "##譎": 19407,
+ "##譏": 19408,
+ "##識": 19409,
+ "##譙": 19410,
+ "##譚": 19411,
+ "##譜": 19412,
+ "##警": 19413,
+ "##譬": 19414,
+ "##譯": 19415,
+ "##議": 19416,
+ "##譲": 19417,
+ "##譴": 19418,
+ "##護": 19419,
+ "##譽": 19420,
+ "##讀": 19421,
+ "##變": 19422,
+ "##讓": 19423,
+ "##讚": 19424,
+ "##讞": 19425,
+ "##计": 19426,
+ "##订": 19427,
+ "##认": 19428,
+ "##讥": 19429,
+ "##讧": 19430,
+ "##讨": 19431,
+ "##让": 19432,
+ "##讪": 19433,
+ "##讫": 19434,
+ "##训": 19435,
+ "##议": 19436,
+ "##讯": 19437,
+ "##记": 19438,
+ "##讲": 19439,
+ "##讳": 19440,
+ "##讴": 19441,
+ "##讶": 19442,
+ "##讷": 19443,
+ "##许": 19444,
+ "##讹": 19445,
+ "##论": 19446,
+ "##讼": 19447,
+ "##讽": 19448,
+ "##设": 19449,
+ "##访": 19450,
+ "##诀": 19451,
+ "##证": 19452,
+ "##诃": 19453,
+ "##评": 19454,
+ "##诅": 19455,
+ "##识": 19456,
+ "##诈": 19457,
+ "##诉": 19458,
+ "##诊": 19459,
+ "##诋": 19460,
+ "##词": 19461,
+ "##诏": 19462,
+ "##译": 19463,
+ "##试": 19464,
+ "##诗": 19465,
+ "##诘": 19466,
+ "##诙": 19467,
+ "##诚": 19468,
+ "##诛": 19469,
+ "##话": 19470,
+ "##诞": 19471,
+ "##诟": 19472,
+ "##诠": 19473,
+ "##诡": 19474,
+ "##询": 19475,
+ "##诣": 19476,
+ "##诤": 19477,
+ "##该": 19478,
+ "##详": 19479,
+ "##诧": 19480,
+ "##诩": 19481,
+ "##诫": 19482,
+ "##诬": 19483,
+ "##语": 19484,
+ "##误": 19485,
+ "##诰": 19486,
+ "##诱": 19487,
+ "##诲": 19488,
+ "##说": 19489,
+ "##诵": 19490,
+ "##诶": 19491,
+ "##请": 19492,
+ "##诸": 19493,
+ "##诺": 19494,
+ "##读": 19495,
+ "##诽": 19496,
+ "##课": 19497,
+ "##诿": 19498,
+ "##谀": 19499,
+ "##谁": 19500,
+ "##调": 19501,
+ "##谄": 19502,
+ "##谅": 19503,
+ "##谆": 19504,
+ "##谈": 19505,
+ "##谊": 19506,
+ "##谋": 19507,
+ "##谌": 19508,
+ "##谍": 19509,
+ "##谎": 19510,
+ "##谏": 19511,
+ "##谐": 19512,
+ "##谑": 19513,
+ "##谒": 19514,
+ "##谓": 19515,
+ "##谔": 19516,
+ "##谕": 19517,
+ "##谗": 19518,
+ "##谘": 19519,
+ "##谙": 19520,
+ "##谚": 19521,
+ "##谛": 19522,
+ "##谜": 19523,
+ "##谟": 19524,
+ "##谢": 19525,
+ "##谣": 19526,
+ "##谤": 19527,
+ "##谥": 19528,
+ "##谦": 19529,
+ "##谧": 19530,
+ "##谨": 19531,
+ "##谩": 19532,
+ "##谪": 19533,
+ "##谬": 19534,
+ "##谭": 19535,
+ "##谯": 19536,
+ "##谱": 19537,
+ "##谲": 19538,
+ "##谴": 19539,
+ "##谶": 19540,
+ "##谷": 19541,
+ "##豁": 19542,
+ "##豆": 19543,
+ "##豇": 19544,
+ "##豈": 19545,
+ "##豉": 19546,
+ "##豊": 19547,
+ "##豌": 19548,
+ "##豎": 19549,
+ "##豐": 19550,
+ "##豔": 19551,
+ "##豚": 19552,
+ "##象": 19553,
+ "##豢": 19554,
+ "##豪": 19555,
+ "##豫": 19556,
+ "##豬": 19557,
+ "##豹": 19558,
+ "##豺": 19559,
+ "##貂": 19560,
+ "##貅": 19561,
+ "##貌": 19562,
+ "##貓": 19563,
+ "##貔": 19564,
+ "##貘": 19565,
+ "##貝": 19566,
+ "##貞": 19567,
+ "##負": 19568,
+ "##財": 19569,
+ "##貢": 19570,
+ "##貧": 19571,
+ "##貨": 19572,
+ "##販": 19573,
+ "##貪": 19574,
+ "##貫": 19575,
+ "##責": 19576,
+ "##貯": 19577,
+ "##貰": 19578,
+ "##貳": 19579,
+ "##貴": 19580,
+ "##貶": 19581,
+ "##買": 19582,
+ "##貸": 19583,
+ "##費": 19584,
+ "##貼": 19585,
+ "##貽": 19586,
+ "##貿": 19587,
+ "##賀": 19588,
+ "##賁": 19589,
+ "##賂": 19590,
+ "##賃": 19591,
+ "##賄": 19592,
+ "##資": 19593,
+ "##賈": 19594,
+ "##賊": 19595,
+ "##賑": 19596,
+ "##賓": 19597,
+ "##賜": 19598,
+ "##賞": 19599,
+ "##賠": 19600,
+ "##賡": 19601,
+ "##賢": 19602,
+ "##賣": 19603,
+ "##賤": 19604,
+ "##賦": 19605,
+ "##質": 19606,
+ "##賬": 19607,
+ "##賭": 19608,
+ "##賴": 19609,
+ "##賺": 19610,
+ "##購": 19611,
+ "##賽": 19612,
+ "##贅": 19613,
+ "##贈": 19614,
+ "##贊": 19615,
+ "##贍": 19616,
+ "##贏": 19617,
+ "##贓": 19618,
+ "##贖": 19619,
+ "##贛": 19620,
+ "##贝": 19621,
+ "##贞": 19622,
+ "##负": 19623,
+ "##贡": 19624,
+ "##财": 19625,
+ "##责": 19626,
+ "##贤": 19627,
+ "##败": 19628,
+ "##账": 19629,
+ "##货": 19630,
+ "##质": 19631,
+ "##贩": 19632,
+ "##贪": 19633,
+ "##贫": 19634,
+ "##贬": 19635,
+ "##购": 19636,
+ "##贮": 19637,
+ "##贯": 19638,
+ "##贰": 19639,
+ "##贱": 19640,
+ "##贲": 19641,
+ "##贴": 19642,
+ "##贵": 19643,
+ "##贷": 19644,
+ "##贸": 19645,
+ "##费": 19646,
+ "##贺": 19647,
+ "##贻": 19648,
+ "##贼": 19649,
+ "##贾": 19650,
+ "##贿": 19651,
+ "##赁": 19652,
+ "##赂": 19653,
+ "##赃": 19654,
+ "##资": 19655,
+ "##赅": 19656,
+ "##赈": 19657,
+ "##赊": 19658,
+ "##赋": 19659,
+ "##赌": 19660,
+ "##赎": 19661,
+ "##赏": 19662,
+ "##赐": 19663,
+ "##赓": 19664,
+ "##赔": 19665,
+ "##赖": 19666,
+ "##赘": 19667,
+ "##赚": 19668,
+ "##赛": 19669,
+ "##赝": 19670,
+ "##赞": 19671,
+ "##赠": 19672,
+ "##赡": 19673,
+ "##赢": 19674,
+ "##赣": 19675,
+ "##赤": 19676,
+ "##赦": 19677,
+ "##赧": 19678,
+ "##赫": 19679,
+ "##赭": 19680,
+ "##走": 19681,
+ "##赳": 19682,
+ "##赴": 19683,
+ "##赵": 19684,
+ "##赶": 19685,
+ "##起": 19686,
+ "##趁": 19687,
+ "##超": 19688,
+ "##越": 19689,
+ "##趋": 19690,
+ "##趕": 19691,
+ "##趙": 19692,
+ "##趟": 19693,
+ "##趣": 19694,
+ "##趨": 19695,
+ "##足": 19696,
+ "##趴": 19697,
+ "##趵": 19698,
+ "##趸": 19699,
+ "##趺": 19700,
+ "##趾": 19701,
+ "##跃": 19702,
+ "##跄": 19703,
+ "##跆": 19704,
+ "##跋": 19705,
+ "##跌": 19706,
+ "##跎": 19707,
+ "##跑": 19708,
+ "##跖": 19709,
+ "##跚": 19710,
+ "##跛": 19711,
+ "##距": 19712,
+ "##跟": 19713,
+ "##跡": 19714,
+ "##跤": 19715,
+ "##跨": 19716,
+ "##跩": 19717,
+ "##跪": 19718,
+ "##路": 19719,
+ "##跳": 19720,
+ "##践": 19721,
+ "##跷": 19722,
+ "##跹": 19723,
+ "##跺": 19724,
+ "##跻": 19725,
+ "##踉": 19726,
+ "##踊": 19727,
+ "##踌": 19728,
+ "##踏": 19729,
+ "##踐": 19730,
+ "##踝": 19731,
+ "##踞": 19732,
+ "##踟": 19733,
+ "##踢": 19734,
+ "##踩": 19735,
+ "##踪": 19736,
+ "##踮": 19737,
+ "##踱": 19738,
+ "##踴": 19739,
+ "##踵": 19740,
+ "##踹": 19741,
+ "##蹂": 19742,
+ "##蹄": 19743,
+ "##蹇": 19744,
+ "##蹈": 19745,
+ "##蹉": 19746,
+ "##蹊": 19747,
+ "##蹋": 19748,
+ "##蹑": 19749,
+ "##蹒": 19750,
+ "##蹙": 19751,
+ "##蹟": 19752,
+ "##蹣": 19753,
+ "##蹤": 19754,
+ "##蹦": 19755,
+ "##蹩": 19756,
+ "##蹬": 19757,
+ "##蹭": 19758,
+ "##蹲": 19759,
+ "##蹴": 19760,
+ "##蹶": 19761,
+ "##蹺": 19762,
+ "##蹼": 19763,
+ "##蹿": 19764,
+ "##躁": 19765,
+ "##躇": 19766,
+ "##躉": 19767,
+ "##躊": 19768,
+ "##躋": 19769,
+ "##躍": 19770,
+ "##躏": 19771,
+ "##躪": 19772,
+ "##身": 19773,
+ "##躬": 19774,
+ "##躯": 19775,
+ "##躲": 19776,
+ "##躺": 19777,
+ "##軀": 19778,
+ "##車": 19779,
+ "##軋": 19780,
+ "##軌": 19781,
+ "##軍": 19782,
+ "##軒": 19783,
+ "##軟": 19784,
+ "##転": 19785,
+ "##軸": 19786,
+ "##軼": 19787,
+ "##軽": 19788,
+ "##軾": 19789,
+ "##較": 19790,
+ "##載": 19791,
+ "##輒": 19792,
+ "##輓": 19793,
+ "##輔": 19794,
+ "##輕": 19795,
+ "##輛": 19796,
+ "##輝": 19797,
+ "##輟": 19798,
+ "##輩": 19799,
+ "##輪": 19800,
+ "##輯": 19801,
+ "##輸": 19802,
+ "##輻": 19803,
+ "##輾": 19804,
+ "##輿": 19805,
+ "##轄": 19806,
+ "##轅": 19807,
+ "##轆": 19808,
+ "##轉": 19809,
+ "##轍": 19810,
+ "##轎": 19811,
+ "##轟": 19812,
+ "##车": 19813,
+ "##轧": 19814,
+ "##轨": 19815,
+ "##轩": 19816,
+ "##转": 19817,
+ "##轭": 19818,
+ "##轮": 19819,
+ "##软": 19820,
+ "##轰": 19821,
+ "##轲": 19822,
+ "##轴": 19823,
+ "##轶": 19824,
+ "##轻": 19825,
+ "##轼": 19826,
+ "##载": 19827,
+ "##轿": 19828,
+ "##较": 19829,
+ "##辄": 19830,
+ "##辅": 19831,
+ "##辆": 19832,
+ "##辇": 19833,
+ "##辈": 19834,
+ "##辉": 19835,
+ "##辊": 19836,
+ "##辍": 19837,
+ "##辐": 19838,
+ "##辑": 19839,
+ "##输": 19840,
+ "##辕": 19841,
+ "##辖": 19842,
+ "##辗": 19843,
+ "##辘": 19844,
+ "##辙": 19845,
+ "##辛": 19846,
+ "##辜": 19847,
+ "##辞": 19848,
+ "##辟": 19849,
+ "##辣": 19850,
+ "##辦": 19851,
+ "##辨": 19852,
+ "##辩": 19853,
+ "##辫": 19854,
+ "##辭": 19855,
+ "##辮": 19856,
+ "##辯": 19857,
+ "##辰": 19858,
+ "##辱": 19859,
+ "##農": 19860,
+ "##边": 19861,
+ "##辺": 19862,
+ "##辻": 19863,
+ "##込": 19864,
+ "##辽": 19865,
+ "##达": 19866,
+ "##迁": 19867,
+ "##迂": 19868,
+ "##迄": 19869,
+ "##迅": 19870,
+ "##过": 19871,
+ "##迈": 19872,
+ "##迎": 19873,
+ "##运": 19874,
+ "##近": 19875,
+ "##返": 19876,
+ "##还": 19877,
+ "##这": 19878,
+ "##进": 19879,
+ "##远": 19880,
+ "##违": 19881,
+ "##连": 19882,
+ "##迟": 19883,
+ "##迢": 19884,
+ "##迤": 19885,
+ "##迥": 19886,
+ "##迦": 19887,
+ "##迩": 19888,
+ "##迪": 19889,
+ "##迫": 19890,
+ "##迭": 19891,
+ "##述": 19892,
+ "##迴": 19893,
+ "##迷": 19894,
+ "##迸": 19895,
+ "##迹": 19896,
+ "##迺": 19897,
+ "##追": 19898,
+ "##退": 19899,
+ "##送": 19900,
+ "##适": 19901,
+ "##逃": 19902,
+ "##逅": 19903,
+ "##逆": 19904,
+ "##选": 19905,
+ "##逊": 19906,
+ "##逍": 19907,
+ "##透": 19908,
+ "##逐": 19909,
+ "##递": 19910,
+ "##途": 19911,
+ "##逕": 19912,
+ "##逗": 19913,
+ "##這": 19914,
+ "##通": 19915,
+ "##逛": 19916,
+ "##逝": 19917,
+ "##逞": 19918,
+ "##速": 19919,
+ "##造": 19920,
+ "##逢": 19921,
+ "##連": 19922,
+ "##逮": 19923,
+ "##週": 19924,
+ "##進": 19925,
+ "##逵": 19926,
+ "##逶": 19927,
+ "##逸": 19928,
+ "##逻": 19929,
+ "##逼": 19930,
+ "##逾": 19931,
+ "##遁": 19932,
+ "##遂": 19933,
+ "##遅": 19934,
+ "##遇": 19935,
+ "##遊": 19936,
+ "##運": 19937,
+ "##遍": 19938,
+ "##過": 19939,
+ "##遏": 19940,
+ "##遐": 19941,
+ "##遑": 19942,
+ "##遒": 19943,
+ "##道": 19944,
+ "##達": 19945,
+ "##違": 19946,
+ "##遗": 19947,
+ "##遙": 19948,
+ "##遛": 19949,
+ "##遜": 19950,
+ "##遞": 19951,
+ "##遠": 19952,
+ "##遢": 19953,
+ "##遣": 19954,
+ "##遥": 19955,
+ "##遨": 19956,
+ "##適": 19957,
+ "##遭": 19958,
+ "##遮": 19959,
+ "##遲": 19960,
+ "##遴": 19961,
+ "##遵": 19962,
+ "##遶": 19963,
+ "##遷": 19964,
+ "##選": 19965,
+ "##遺": 19966,
+ "##遼": 19967,
+ "##遽": 19968,
+ "##避": 19969,
+ "##邀": 19970,
+ "##邁": 19971,
+ "##邂": 19972,
+ "##邃": 19973,
+ "##還": 19974,
+ "##邇": 19975,
+ "##邈": 19976,
+ "##邊": 19977,
+ "##邋": 19978,
+ "##邏": 19979,
+ "##邑": 19980,
+ "##邓": 19981,
+ "##邕": 19982,
+ "##邛": 19983,
+ "##邝": 19984,
+ "##邢": 19985,
+ "##那": 19986,
+ "##邦": 19987,
+ "##邨": 19988,
+ "##邪": 19989,
+ "##邬": 19990,
+ "##邮": 19991,
+ "##邯": 19992,
+ "##邰": 19993,
+ "##邱": 19994,
+ "##邳": 19995,
+ "##邵": 19996,
+ "##邸": 19997,
+ "##邹": 19998,
+ "##邺": 19999,
+ "##邻": 20000,
+ "##郁": 20001,
+ "##郅": 20002,
+ "##郊": 20003,
+ "##郎": 20004,
+ "##郑": 20005,
+ "##郜": 20006,
+ "##郝": 20007,
+ "##郡": 20008,
+ "##郢": 20009,
+ "##郤": 20010,
+ "##郦": 20011,
+ "##郧": 20012,
+ "##部": 20013,
+ "##郫": 20014,
+ "##郭": 20015,
+ "##郴": 20016,
+ "##郵": 20017,
+ "##郷": 20018,
+ "##郸": 20019,
+ "##都": 20020,
+ "##鄂": 20021,
+ "##鄉": 20022,
+ "##鄒": 20023,
+ "##鄔": 20024,
+ "##鄙": 20025,
+ "##鄞": 20026,
+ "##鄢": 20027,
+ "##鄧": 20028,
+ "##鄭": 20029,
+ "##鄰": 20030,
+ "##鄱": 20031,
+ "##鄲": 20032,
+ "##鄺": 20033,
+ "##酉": 20034,
+ "##酊": 20035,
+ "##酋": 20036,
+ "##酌": 20037,
+ "##配": 20038,
+ "##酐": 20039,
+ "##酒": 20040,
+ "##酗": 20041,
+ "##酚": 20042,
+ "##酝": 20043,
+ "##酢": 20044,
+ "##酣": 20045,
+ "##酥": 20046,
+ "##酩": 20047,
+ "##酪": 20048,
+ "##酬": 20049,
+ "##酮": 20050,
+ "##酯": 20051,
+ "##酰": 20052,
+ "##酱": 20053,
+ "##酵": 20054,
+ "##酶": 20055,
+ "##酷": 20056,
+ "##酸": 20057,
+ "##酿": 20058,
+ "##醃": 20059,
+ "##醇": 20060,
+ "##醉": 20061,
+ "##醋": 20062,
+ "##醍": 20063,
+ "##醐": 20064,
+ "##醒": 20065,
+ "##醚": 20066,
+ "##醛": 20067,
+ "##醜": 20068,
+ "##醞": 20069,
+ "##醣": 20070,
+ "##醪": 20071,
+ "##醫": 20072,
+ "##醬": 20073,
+ "##醮": 20074,
+ "##醯": 20075,
+ "##醴": 20076,
+ "##醺": 20077,
+ "##釀": 20078,
+ "##釁": 20079,
+ "##采": 20080,
+ "##釉": 20081,
+ "##释": 20082,
+ "##釋": 20083,
+ "##里": 20084,
+ "##重": 20085,
+ "##野": 20086,
+ "##量": 20087,
+ "##釐": 20088,
+ "##金": 20089,
+ "##釗": 20090,
+ "##釘": 20091,
+ "##釜": 20092,
+ "##針": 20093,
+ "##釣": 20094,
+ "##釦": 20095,
+ "##釧": 20096,
+ "##釵": 20097,
+ "##鈀": 20098,
+ "##鈉": 20099,
+ "##鈍": 20100,
+ "##鈎": 20101,
+ "##鈔": 20102,
+ "##鈕": 20103,
+ "##鈞": 20104,
+ "##鈣": 20105,
+ "##鈦": 20106,
+ "##鈪": 20107,
+ "##鈴": 20108,
+ "##鈺": 20109,
+ "##鈾": 20110,
+ "##鉀": 20111,
+ "##鉄": 20112,
+ "##鉅": 20113,
+ "##鉉": 20114,
+ "##鉑": 20115,
+ "##鉗": 20116,
+ "##鉚": 20117,
+ "##鉛": 20118,
+ "##鉤": 20119,
+ "##鉴": 20120,
+ "##鉻": 20121,
+ "##銀": 20122,
+ "##銃": 20123,
+ "##銅": 20124,
+ "##銑": 20125,
+ "##銓": 20126,
+ "##銖": 20127,
+ "##銘": 20128,
+ "##銜": 20129,
+ "##銬": 20130,
+ "##銭": 20131,
+ "##銮": 20132,
+ "##銳": 20133,
+ "##銷": 20134,
+ "##銹": 20135,
+ "##鋁": 20136,
+ "##鋅": 20137,
+ "##鋒": 20138,
+ "##鋤": 20139,
+ "##鋪": 20140,
+ "##鋰": 20141,
+ "##鋸": 20142,
+ "##鋼": 20143,
+ "##錄": 20144,
+ "##錐": 20145,
+ "##錘": 20146,
+ "##錚": 20147,
+ "##錠": 20148,
+ "##錢": 20149,
+ "##錦": 20150,
+ "##錨": 20151,
+ "##錫": 20152,
+ "##錮": 20153,
+ "##錯": 20154,
+ "##録": 20155,
+ "##錳": 20156,
+ "##錶": 20157,
+ "##鍊": 20158,
+ "##鍋": 20159,
+ "##鍍": 20160,
+ "##鍛": 20161,
+ "##鍥": 20162,
+ "##鍰": 20163,
+ "##鍵": 20164,
+ "##鍺": 20165,
+ "##鍾": 20166,
+ "##鎂": 20167,
+ "##鎊": 20168,
+ "##鎌": 20169,
+ "##鎏": 20170,
+ "##鎔": 20171,
+ "##鎖": 20172,
+ "##鎗": 20173,
+ "##鎚": 20174,
+ "##鎧": 20175,
+ "##鎬": 20176,
+ "##鎮": 20177,
+ "##鎳": 20178,
+ "##鏈": 20179,
+ "##鏖": 20180,
+ "##鏗": 20181,
+ "##鏘": 20182,
+ "##鏞": 20183,
+ "##鏟": 20184,
+ "##鏡": 20185,
+ "##鏢": 20186,
+ "##鏤": 20187,
+ "##鏽": 20188,
+ "##鐘": 20189,
+ "##鐮": 20190,
+ "##鐲": 20191,
+ "##鐳": 20192,
+ "##鐵": 20193,
+ "##鐸": 20194,
+ "##鐺": 20195,
+ "##鑄": 20196,
+ "##鑊": 20197,
+ "##鑑": 20198,
+ "##鑒": 20199,
+ "##鑣": 20200,
+ "##鑫": 20201,
+ "##鑰": 20202,
+ "##鑲": 20203,
+ "##鑼": 20204,
+ "##鑽": 20205,
+ "##鑾": 20206,
+ "##鑿": 20207,
+ "##针": 20208,
+ "##钉": 20209,
+ "##钊": 20210,
+ "##钎": 20211,
+ "##钏": 20212,
+ "##钒": 20213,
+ "##钓": 20214,
+ "##钗": 20215,
+ "##钙": 20216,
+ "##钛": 20217,
+ "##钜": 20218,
+ "##钝": 20219,
+ "##钞": 20220,
+ "##钟": 20221,
+ "##钠": 20222,
+ "##钡": 20223,
+ "##钢": 20224,
+ "##钣": 20225,
+ "##钤": 20226,
+ "##钥": 20227,
+ "##钦": 20228,
+ "##钧": 20229,
+ "##钨": 20230,
+ "##钩": 20231,
+ "##钮": 20232,
+ "##钯": 20233,
+ "##钰": 20234,
+ "##钱": 20235,
+ "##钳": 20236,
+ "##钴": 20237,
+ "##钵": 20238,
+ "##钺": 20239,
+ "##钻": 20240,
+ "##钼": 20241,
+ "##钾": 20242,
+ "##钿": 20243,
+ "##铀": 20244,
+ "##铁": 20245,
+ "##铂": 20246,
+ "##铃": 20247,
+ "##铄": 20248,
+ "##铅": 20249,
+ "##铆": 20250,
+ "##铉": 20251,
+ "##铎": 20252,
+ "##铐": 20253,
+ "##铛": 20254,
+ "##铜": 20255,
+ "##铝": 20256,
+ "##铠": 20257,
+ "##铡": 20258,
+ "##铢": 20259,
+ "##铣": 20260,
+ "##铤": 20261,
+ "##铨": 20262,
+ "##铩": 20263,
+ "##铬": 20264,
+ "##铭": 20265,
+ "##铮": 20266,
+ "##铰": 20267,
+ "##铲": 20268,
+ "##铵": 20269,
+ "##银": 20270,
+ "##铸": 20271,
+ "##铺": 20272,
+ "##链": 20273,
+ "##铿": 20274,
+ "##销": 20275,
+ "##锁": 20276,
+ "##锂": 20277,
+ "##锄": 20278,
+ "##锅": 20279,
+ "##锆": 20280,
+ "##锈": 20281,
+ "##锉": 20282,
+ "##锋": 20283,
+ "##锌": 20284,
+ "##锏": 20285,
+ "##锐": 20286,
+ "##锑": 20287,
+ "##错": 20288,
+ "##锚": 20289,
+ "##锟": 20290,
+ "##锡": 20291,
+ "##锢": 20292,
+ "##锣": 20293,
+ "##锤": 20294,
+ "##锥": 20295,
+ "##锦": 20296,
+ "##锭": 20297,
+ "##键": 20298,
+ "##锯": 20299,
+ "##锰": 20300,
+ "##锲": 20301,
+ "##锵": 20302,
+ "##锹": 20303,
+ "##锺": 20304,
+ "##锻": 20305,
+ "##镀": 20306,
+ "##镁": 20307,
+ "##镂": 20308,
+ "##镇": 20309,
+ "##镉": 20310,
+ "##镌": 20311,
+ "##镍": 20312,
+ "##镐": 20313,
+ "##镑": 20314,
+ "##镕": 20315,
+ "##镖": 20316,
+ "##镗": 20317,
+ "##镛": 20318,
+ "##镜": 20319,
+ "##镣": 20320,
+ "##镭": 20321,
+ "##镯": 20322,
+ "##镰": 20323,
+ "##镳": 20324,
+ "##镶": 20325,
+ "##長": 20326,
+ "##长": 20327,
+ "##門": 20328,
+ "##閃": 20329,
+ "##閉": 20330,
+ "##開": 20331,
+ "##閎": 20332,
+ "##閏": 20333,
+ "##閑": 20334,
+ "##閒": 20335,
+ "##間": 20336,
+ "##閔": 20337,
+ "##閘": 20338,
+ "##閡": 20339,
+ "##関": 20340,
+ "##閣": 20341,
+ "##閥": 20342,
+ "##閨": 20343,
+ "##閩": 20344,
+ "##閱": 20345,
+ "##閲": 20346,
+ "##閹": 20347,
+ "##閻": 20348,
+ "##閾": 20349,
+ "##闆": 20350,
+ "##闇": 20351,
+ "##闊": 20352,
+ "##闌": 20353,
+ "##闍": 20354,
+ "##闔": 20355,
+ "##闕": 20356,
+ "##闖": 20357,
+ "##闘": 20358,
+ "##關": 20359,
+ "##闡": 20360,
+ "##闢": 20361,
+ "##门": 20362,
+ "##闪": 20363,
+ "##闫": 20364,
+ "##闭": 20365,
+ "##问": 20366,
+ "##闯": 20367,
+ "##闰": 20368,
+ "##闲": 20369,
+ "##间": 20370,
+ "##闵": 20371,
+ "##闷": 20372,
+ "##闸": 20373,
+ "##闹": 20374,
+ "##闺": 20375,
+ "##闻": 20376,
+ "##闽": 20377,
+ "##闾": 20378,
+ "##阀": 20379,
+ "##阁": 20380,
+ "##阂": 20381,
+ "##阅": 20382,
+ "##阆": 20383,
+ "##阇": 20384,
+ "##阈": 20385,
+ "##阉": 20386,
+ "##阎": 20387,
+ "##阐": 20388,
+ "##阑": 20389,
+ "##阔": 20390,
+ "##阕": 20391,
+ "##阖": 20392,
+ "##阙": 20393,
+ "##阚": 20394,
+ "##阜": 20395,
+ "##队": 20396,
+ "##阡": 20397,
+ "##阪": 20398,
+ "##阮": 20399,
+ "##阱": 20400,
+ "##防": 20401,
+ "##阳": 20402,
+ "##阴": 20403,
+ "##阵": 20404,
+ "##阶": 20405,
+ "##阻": 20406,
+ "##阿": 20407,
+ "##陀": 20408,
+ "##陂": 20409,
+ "##附": 20410,
+ "##际": 20411,
+ "##陆": 20412,
+ "##陇": 20413,
+ "##陈": 20414,
+ "##陋": 20415,
+ "##陌": 20416,
+ "##降": 20417,
+ "##限": 20418,
+ "##陕": 20419,
+ "##陛": 20420,
+ "##陝": 20421,
+ "##陞": 20422,
+ "##陟": 20423,
+ "##陡": 20424,
+ "##院": 20425,
+ "##陣": 20426,
+ "##除": 20427,
+ "##陨": 20428,
+ "##险": 20429,
+ "##陪": 20430,
+ "##陰": 20431,
+ "##陲": 20432,
+ "##陳": 20433,
+ "##陵": 20434,
+ "##陶": 20435,
+ "##陷": 20436,
+ "##陸": 20437,
+ "##険": 20438,
+ "##陽": 20439,
+ "##隅": 20440,
+ "##隆": 20441,
+ "##隈": 20442,
+ "##隊": 20443,
+ "##隋": 20444,
+ "##隍": 20445,
+ "##階": 20446,
+ "##随": 20447,
+ "##隐": 20448,
+ "##隔": 20449,
+ "##隕": 20450,
+ "##隘": 20451,
+ "##隙": 20452,
+ "##際": 20453,
+ "##障": 20454,
+ "##隠": 20455,
+ "##隣": 20456,
+ "##隧": 20457,
+ "##隨": 20458,
+ "##險": 20459,
+ "##隱": 20460,
+ "##隴": 20461,
+ "##隶": 20462,
+ "##隸": 20463,
+ "##隻": 20464,
+ "##隼": 20465,
+ "##隽": 20466,
+ "##难": 20467,
+ "##雀": 20468,
+ "##雁": 20469,
+ "##雄": 20470,
+ "##雅": 20471,
+ "##集": 20472,
+ "##雇": 20473,
+ "##雉": 20474,
+ "##雋": 20475,
+ "##雌": 20476,
+ "##雍": 20477,
+ "##雎": 20478,
+ "##雏": 20479,
+ "##雑": 20480,
+ "##雒": 20481,
+ "##雕": 20482,
+ "##雖": 20483,
+ "##雙": 20484,
+ "##雛": 20485,
+ "##雜": 20486,
+ "##雞": 20487,
+ "##離": 20488,
+ "##難": 20489,
+ "##雨": 20490,
+ "##雪": 20491,
+ "##雯": 20492,
+ "##雰": 20493,
+ "##雲": 20494,
+ "##雳": 20495,
+ "##零": 20496,
+ "##雷": 20497,
+ "##雹": 20498,
+ "##電": 20499,
+ "##雾": 20500,
+ "##需": 20501,
+ "##霁": 20502,
+ "##霄": 20503,
+ "##霆": 20504,
+ "##震": 20505,
+ "##霈": 20506,
+ "##霉": 20507,
+ "##霊": 20508,
+ "##霍": 20509,
+ "##霎": 20510,
+ "##霏": 20511,
+ "##霑": 20512,
+ "##霓": 20513,
+ "##霖": 20514,
+ "##霜": 20515,
+ "##霞": 20516,
+ "##霧": 20517,
+ "##霭": 20518,
+ "##霰": 20519,
+ "##露": 20520,
+ "##霸": 20521,
+ "##霹": 20522,
+ "##霽": 20523,
+ "##霾": 20524,
+ "##靂": 20525,
+ "##靄": 20526,
+ "##靈": 20527,
+ "##青": 20528,
+ "##靓": 20529,
+ "##靖": 20530,
+ "##静": 20531,
+ "##靚": 20532,
+ "##靛": 20533,
+ "##靜": 20534,
+ "##非": 20535,
+ "##靠": 20536,
+ "##靡": 20537,
+ "##面": 20538,
+ "##靥": 20539,
+ "##靦": 20540,
+ "##革": 20541,
+ "##靳": 20542,
+ "##靴": 20543,
+ "##靶": 20544,
+ "##靼": 20545,
+ "##鞅": 20546,
+ "##鞋": 20547,
+ "##鞍": 20548,
+ "##鞏": 20549,
+ "##鞑": 20550,
+ "##鞘": 20551,
+ "##鞠": 20552,
+ "##鞣": 20553,
+ "##鞦": 20554,
+ "##鞭": 20555,
+ "##韆": 20556,
+ "##韋": 20557,
+ "##韌": 20558,
+ "##韓": 20559,
+ "##韜": 20560,
+ "##韦": 20561,
+ "##韧": 20562,
+ "##韩": 20563,
+ "##韬": 20564,
+ "##韭": 20565,
+ "##音": 20566,
+ "##韵": 20567,
+ "##韶": 20568,
+ "##韻": 20569,
+ "##響": 20570,
+ "##頁": 20571,
+ "##頂": 20572,
+ "##頃": 20573,
+ "##項": 20574,
+ "##順": 20575,
+ "##須": 20576,
+ "##頌": 20577,
+ "##預": 20578,
+ "##頑": 20579,
+ "##頒": 20580,
+ "##頓": 20581,
+ "##頗": 20582,
+ "##領": 20583,
+ "##頜": 20584,
+ "##頡": 20585,
+ "##頤": 20586,
+ "##頫": 20587,
+ "##頭": 20588,
+ "##頰": 20589,
+ "##頷": 20590,
+ "##頸": 20591,
+ "##頹": 20592,
+ "##頻": 20593,
+ "##頼": 20594,
+ "##顆": 20595,
+ "##題": 20596,
+ "##額": 20597,
+ "##顎": 20598,
+ "##顏": 20599,
+ "##顔": 20600,
+ "##願": 20601,
+ "##顛": 20602,
+ "##類": 20603,
+ "##顧": 20604,
+ "##顫": 20605,
+ "##顯": 20606,
+ "##顱": 20607,
+ "##顴": 20608,
+ "##页": 20609,
+ "##顶": 20610,
+ "##顷": 20611,
+ "##项": 20612,
+ "##顺": 20613,
+ "##须": 20614,
+ "##顼": 20615,
+ "##顽": 20616,
+ "##顾": 20617,
+ "##顿": 20618,
+ "##颁": 20619,
+ "##颂": 20620,
+ "##预": 20621,
+ "##颅": 20622,
+ "##领": 20623,
+ "##颇": 20624,
+ "##颈": 20625,
+ "##颉": 20626,
+ "##颊": 20627,
+ "##颌": 20628,
+ "##颍": 20629,
+ "##颐": 20630,
+ "##频": 20631,
+ "##颓": 20632,
+ "##颔": 20633,
+ "##颖": 20634,
+ "##颗": 20635,
+ "##题": 20636,
+ "##颚": 20637,
+ "##颛": 20638,
+ "##颜": 20639,
+ "##额": 20640,
+ "##颞": 20641,
+ "##颠": 20642,
+ "##颡": 20643,
+ "##颢": 20644,
+ "##颤": 20645,
+ "##颦": 20646,
+ "##颧": 20647,
+ "##風": 20648,
+ "##颯": 20649,
+ "##颱": 20650,
+ "##颳": 20651,
+ "##颶": 20652,
+ "##颼": 20653,
+ "##飄": 20654,
+ "##飆": 20655,
+ "##风": 20656,
+ "##飒": 20657,
+ "##飓": 20658,
+ "##飕": 20659,
+ "##飘": 20660,
+ "##飙": 20661,
+ "##飚": 20662,
+ "##飛": 20663,
+ "##飞": 20664,
+ "##食": 20665,
+ "##飢": 20666,
+ "##飨": 20667,
+ "##飩": 20668,
+ "##飪": 20669,
+ "##飯": 20670,
+ "##飲": 20671,
+ "##飼": 20672,
+ "##飽": 20673,
+ "##飾": 20674,
+ "##餃": 20675,
+ "##餅": 20676,
+ "##餉": 20677,
+ "##養": 20678,
+ "##餌": 20679,
+ "##餐": 20680,
+ "##餒": 20681,
+ "##餓": 20682,
+ "##餘": 20683,
+ "##餚": 20684,
+ "##餛": 20685,
+ "##餞": 20686,
+ "##餡": 20687,
+ "##館": 20688,
+ "##餮": 20689,
+ "##餵": 20690,
+ "##餾": 20691,
+ "##饅": 20692,
+ "##饈": 20693,
+ "##饋": 20694,
+ "##饌": 20695,
+ "##饍": 20696,
+ "##饑": 20697,
+ "##饒": 20698,
+ "##饕": 20699,
+ "##饗": 20700,
+ "##饞": 20701,
+ "##饥": 20702,
+ "##饨": 20703,
+ "##饪": 20704,
+ "##饬": 20705,
+ "##饭": 20706,
+ "##饮": 20707,
+ "##饯": 20708,
+ "##饰": 20709,
+ "##饱": 20710,
+ "##饲": 20711,
+ "##饴": 20712,
+ "##饵": 20713,
+ "##饶": 20714,
+ "##饷": 20715,
+ "##饺": 20716,
+ "##饼": 20717,
+ "##饽": 20718,
+ "##饿": 20719,
+ "##馀": 20720,
+ "##馁": 20721,
+ "##馄": 20722,
+ "##馅": 20723,
+ "##馆": 20724,
+ "##馈": 20725,
+ "##馋": 20726,
+ "##馍": 20727,
+ "##馏": 20728,
+ "##馒": 20729,
+ "##馔": 20730,
+ "##首": 20731,
+ "##馗": 20732,
+ "##香": 20733,
+ "##馥": 20734,
+ "##馨": 20735,
+ "##馬": 20736,
+ "##馭": 20737,
+ "##馮": 20738,
+ "##馳": 20739,
+ "##馴": 20740,
+ "##駁": 20741,
+ "##駄": 20742,
+ "##駅": 20743,
+ "##駆": 20744,
+ "##駐": 20745,
+ "##駒": 20746,
+ "##駕": 20747,
+ "##駛": 20748,
+ "##駝": 20749,
+ "##駭": 20750,
+ "##駱": 20751,
+ "##駿": 20752,
+ "##騁": 20753,
+ "##騎": 20754,
+ "##騏": 20755,
+ "##験": 20756,
+ "##騙": 20757,
+ "##騨": 20758,
+ "##騰": 20759,
+ "##騷": 20760,
+ "##驀": 20761,
+ "##驅": 20762,
+ "##驊": 20763,
+ "##驍": 20764,
+ "##驒": 20765,
+ "##驕": 20766,
+ "##驗": 20767,
+ "##驚": 20768,
+ "##驛": 20769,
+ "##驟": 20770,
+ "##驢": 20771,
+ "##驥": 20772,
+ "##马": 20773,
+ "##驭": 20774,
+ "##驮": 20775,
+ "##驯": 20776,
+ "##驰": 20777,
+ "##驱": 20778,
+ "##驳": 20779,
+ "##驴": 20780,
+ "##驶": 20781,
+ "##驷": 20782,
+ "##驸": 20783,
+ "##驹": 20784,
+ "##驻": 20785,
+ "##驼": 20786,
+ "##驾": 20787,
+ "##驿": 20788,
+ "##骁": 20789,
+ "##骂": 20790,
+ "##骄": 20791,
+ "##骅": 20792,
+ "##骆": 20793,
+ "##骇": 20794,
+ "##骈": 20795,
+ "##骊": 20796,
+ "##骋": 20797,
+ "##验": 20798,
+ "##骏": 20799,
+ "##骐": 20800,
+ "##骑": 20801,
+ "##骗": 20802,
+ "##骚": 20803,
+ "##骛": 20804,
+ "##骜": 20805,
+ "##骞": 20806,
+ "##骠": 20807,
+ "##骡": 20808,
+ "##骤": 20809,
+ "##骥": 20810,
+ "##骧": 20811,
+ "##骨": 20812,
+ "##骯": 20813,
+ "##骰": 20814,
+ "##骶": 20815,
+ "##骷": 20816,
+ "##骸": 20817,
+ "##骼": 20818,
+ "##髂": 20819,
+ "##髅": 20820,
+ "##髋": 20821,
+ "##髏": 20822,
+ "##髒": 20823,
+ "##髓": 20824,
+ "##體": 20825,
+ "##髖": 20826,
+ "##高": 20827,
+ "##髦": 20828,
+ "##髪": 20829,
+ "##髮": 20830,
+ "##髯": 20831,
+ "##髻": 20832,
+ "##鬃": 20833,
+ "##鬆": 20834,
+ "##鬍": 20835,
+ "##鬓": 20836,
+ "##鬚": 20837,
+ "##鬟": 20838,
+ "##鬢": 20839,
+ "##鬣": 20840,
+ "##鬥": 20841,
+ "##鬧": 20842,
+ "##鬱": 20843,
+ "##鬼": 20844,
+ "##魁": 20845,
+ "##魂": 20846,
+ "##魄": 20847,
+ "##魅": 20848,
+ "##魇": 20849,
+ "##魍": 20850,
+ "##魏": 20851,
+ "##魔": 20852,
+ "##魘": 20853,
+ "##魚": 20854,
+ "##魯": 20855,
+ "##魷": 20856,
+ "##鮑": 20857,
+ "##鮨": 20858,
+ "##鮪": 20859,
+ "##鮭": 20860,
+ "##鮮": 20861,
+ "##鯉": 20862,
+ "##鯊": 20863,
+ "##鯖": 20864,
+ "##鯛": 20865,
+ "##鯨": 20866,
+ "##鯰": 20867,
+ "##鯽": 20868,
+ "##鰍": 20869,
+ "##鰓": 20870,
+ "##鰭": 20871,
+ "##鰲": 20872,
+ "##鰻": 20873,
+ "##鰾": 20874,
+ "##鱈": 20875,
+ "##鱉": 20876,
+ "##鱔": 20877,
+ "##鱗": 20878,
+ "##鱷": 20879,
+ "##鱸": 20880,
+ "##鱼": 20881,
+ "##鱿": 20882,
+ "##鲁": 20883,
+ "##鲈": 20884,
+ "##鲍": 20885,
+ "##鲑": 20886,
+ "##鲛": 20887,
+ "##鲜": 20888,
+ "##鲟": 20889,
+ "##鲢": 20890,
+ "##鲤": 20891,
+ "##鲨": 20892,
+ "##鲫": 20893,
+ "##鲱": 20894,
+ "##鲲": 20895,
+ "##鲶": 20896,
+ "##鲷": 20897,
+ "##鲸": 20898,
+ "##鳃": 20899,
+ "##鳄": 20900,
+ "##鳅": 20901,
+ "##鳌": 20902,
+ "##鳍": 20903,
+ "##鳕": 20904,
+ "##鳖": 20905,
+ "##鳗": 20906,
+ "##鳝": 20907,
+ "##鳞": 20908,
+ "##鳥": 20909,
+ "##鳩": 20910,
+ "##鳳": 20911,
+ "##鳴": 20912,
+ "##鳶": 20913,
+ "##鴉": 20914,
+ "##鴕": 20915,
+ "##鴛": 20916,
+ "##鴦": 20917,
+ "##鴨": 20918,
+ "##鴻": 20919,
+ "##鴿": 20920,
+ "##鵑": 20921,
+ "##鵜": 20922,
+ "##鵝": 20923,
+ "##鵡": 20924,
+ "##鵬": 20925,
+ "##鵰": 20926,
+ "##鵲": 20927,
+ "##鶘": 20928,
+ "##鶩": 20929,
+ "##鶯": 20930,
+ "##鶴": 20931,
+ "##鷗": 20932,
+ "##鷲": 20933,
+ "##鷹": 20934,
+ "##鷺": 20935,
+ "##鸚": 20936,
+ "##鸞": 20937,
+ "##鸟": 20938,
+ "##鸠": 20939,
+ "##鸡": 20940,
+ "##鸢": 20941,
+ "##鸣": 20942,
+ "##鸥": 20943,
+ "##鸦": 20944,
+ "##鸨": 20945,
+ "##鸪": 20946,
+ "##鸭": 20947,
+ "##鸯": 20948,
+ "##鸳": 20949,
+ "##鸵": 20950,
+ "##鸽": 20951,
+ "##鸾": 20952,
+ "##鸿": 20953,
+ "##鹂": 20954,
+ "##鹃": 20955,
+ "##鹄": 20956,
+ "##鹅": 20957,
+ "##鹈": 20958,
+ "##鹉": 20959,
+ "##鹊": 20960,
+ "##鹌": 20961,
+ "##鹏": 20962,
+ "##鹑": 20963,
+ "##鹕": 20964,
+ "##鹘": 20965,
+ "##鹜": 20966,
+ "##鹞": 20967,
+ "##鹤": 20968,
+ "##鹦": 20969,
+ "##鹧": 20970,
+ "##鹫": 20971,
+ "##鹭": 20972,
+ "##鹰": 20973,
+ "##鹳": 20974,
+ "##鹵": 20975,
+ "##鹹": 20976,
+ "##鹼": 20977,
+ "##鹽": 20978,
+ "##鹿": 20979,
+ "##麂": 20980,
+ "##麋": 20981,
+ "##麒": 20982,
+ "##麓": 20983,
+ "##麗": 20984,
+ "##麝": 20985,
+ "##麟": 20986,
+ "##麥": 20987,
+ "##麦": 20988,
+ "##麩": 20989,
+ "##麴": 20990,
+ "##麵": 20991,
+ "##麸": 20992,
+ "##麺": 20993,
+ "##麻": 20994,
+ "##麼": 20995,
+ "##麽": 20996,
+ "##麾": 20997,
+ "##黃": 20998,
+ "##黄": 20999,
+ "##黍": 21000,
+ "##黎": 21001,
+ "##黏": 21002,
+ "##黑": 21003,
+ "##黒": 21004,
+ "##黔": 21005,
+ "##默": 21006,
+ "##黛": 21007,
+ "##黜": 21008,
+ "##黝": 21009,
+ "##點": 21010,
+ "##黠": 21011,
+ "##黨": 21012,
+ "##黯": 21013,
+ "##黴": 21014,
+ "##鼋": 21015,
+ "##鼎": 21016,
+ "##鼐": 21017,
+ "##鼓": 21018,
+ "##鼠": 21019,
+ "##鼬": 21020,
+ "##鼹": 21021,
+ "##鼻": 21022,
+ "##鼾": 21023,
+ "##齁": 21024,
+ "##齊": 21025,
+ "##齋": 21026,
+ "##齐": 21027,
+ "##齒": 21028,
+ "##齡": 21029,
+ "##齢": 21030,
+ "##齣": 21031,
+ "##齦": 21032,
+ "##齿": 21033,
+ "##龄": 21034,
+ "##龅": 21035,
+ "##龈": 21036,
+ "##龊": 21037,
+ "##龋": 21038,
+ "##龌": 21039,
+ "##龍": 21040,
+ "##龐": 21041,
+ "##龔": 21042,
+ "##龕": 21043,
+ "##龙": 21044,
+ "##龚": 21045,
+ "##龛": 21046,
+ "##龜": 21047,
+ "##龟": 21048,
+ "##︰": 21049,
+ "##︱": 21050,
+ "##︶": 21051,
+ "##︿": 21052,
+ "##﹁": 21053,
+ "##﹂": 21054,
+ "##﹍": 21055,
+ "##﹏": 21056,
+ "##﹐": 21057,
+ "##﹑": 21058,
+ "##﹒": 21059,
+ "##﹔": 21060,
+ "##﹕": 21061,
+ "##﹖": 21062,
+ "##﹗": 21063,
+ "##﹙": 21064,
+ "##﹚": 21065,
+ "##﹝": 21066,
+ "##﹞": 21067,
+ "##﹡": 21068,
+ "##﹣": 21069,
+ "##!": 21070,
+ "##"": 21071,
+ "###": 21072,
+ "##$": 21073,
+ "##%": 21074,
+ "##&": 21075,
+ "##'": 21076,
+ "##(": 21077,
+ "##)": 21078,
+ "##*": 21079,
+ "##,": 21080,
+ "##-": 21081,
+ "##.": 21082,
+ "##/": 21083,
+ "##:": 21084,
+ "##;": 21085,
+ "##<": 21086,
+ "##?": 21087,
+ "##@": 21088,
+ "##[": 21089,
+ "##\": 21090,
+ "##]": 21091,
+ "##^": 21092,
+ "##_": 21093,
+ "##`": 21094,
+ "##f": 21095,
+ "##h": 21096,
+ "##j": 21097,
+ "##u": 21098,
+ "##w": 21099,
+ "##z": 21100,
+ "##{": 21101,
+ "##}": 21102,
+ "##。": 21103,
+ "##「": 21104,
+ "##」": 21105,
+ "##、": 21106,
+ "##・": 21107,
+ "##ッ": 21108,
+ "##ー": 21109,
+ "##イ": 21110,
+ "##ク": 21111,
+ "##シ": 21112,
+ "##ス": 21113,
+ "##ト": 21114,
+ "##ノ": 21115,
+ "##フ": 21116,
+ "##ラ": 21117,
+ "##ル": 21118,
+ "##ン": 21119,
+ "##゙": 21120,
+ "##゚": 21121,
+ "## ̄": 21122,
+ "##¥": 21123,
+ "##👍": 21124,
+ "##🔥": 21125,
+ "##😂": 21126,
+ "##😎": 21127
+ }
+ }
+}
\ No newline at end of file
diff --git a/intelligent_cabin/models/local_bert_intent/tokenizer_config.json b/intelligent_cabin/models/local_bert_intent/tokenizer_config.json
new file mode 100644
index 0000000..bb71a3d
--- /dev/null
+++ b/intelligent_cabin/models/local_bert_intent/tokenizer_config.json
@@ -0,0 +1,56 @@
+{
+ "added_tokens_decoder": {
+ "0": {
+ "content": "[PAD]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false,
+ "special": true
+ },
+ "100": {
+ "content": "[UNK]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false,
+ "special": true
+ },
+ "101": {
+ "content": "[CLS]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false,
+ "special": true
+ },
+ "102": {
+ "content": "[SEP]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false,
+ "special": true
+ },
+ "103": {
+ "content": "[MASK]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false,
+ "special": true
+ }
+ },
+ "clean_up_tokenization_spaces": false,
+ "cls_token": "[CLS]",
+ "do_lower_case": true,
+ "extra_special_tokens": {},
+ "mask_token": "[MASK]",
+ "model_max_length": 1000000000000000019884624838656,
+ "pad_token": "[PAD]",
+ "sep_token": "[SEP]",
+ "strip_accents": null,
+ "tokenize_chinese_chars": true,
+ "tokenizer_class": "BertTokenizer",
+ "unk_token": "[UNK]"
+}
diff --git a/intelligent_cabin/models/local_bert_intent/train_summary.json b/intelligent_cabin/models/local_bert_intent/train_summary.json
new file mode 100644
index 0000000..3459bcc
--- /dev/null
+++ b/intelligent_cabin/models/local_bert_intent/train_summary.json
@@ -0,0 +1,10 @@
+{
+ "base_model": "hfl/chinese-macbert-base",
+ "epochs": 16,
+ "batch_size": 8,
+ "learning_rate": 2e-05,
+ "train_size": 1557,
+ "dev_size": 401,
+ "best_dev_accuracy": 0.9875,
+ "device": "mps"
+}
\ No newline at end of file
diff --git a/intelligent_cabin/models/local_bert_intent/vocab.txt b/intelligent_cabin/models/local_bert_intent/vocab.txt
new file mode 100644
index 0000000..ca4f978
--- /dev/null
+++ b/intelligent_cabin/models/local_bert_intent/vocab.txt
@@ -0,0 +1,21128 @@
+[PAD]
+[unused1]
+[unused2]
+[unused3]
+[unused4]
+[unused5]
+[unused6]
+[unused7]
+[unused8]
+[unused9]
+[unused10]
+[unused11]
+[unused12]
+[unused13]
+[unused14]
+[unused15]
+[unused16]
+[unused17]
+[unused18]
+[unused19]
+[unused20]
+[unused21]
+[unused22]
+[unused23]
+[unused24]
+[unused25]
+[unused26]
+[unused27]
+[unused28]
+[unused29]
+[unused30]
+[unused31]
+[unused32]
+[unused33]
+[unused34]
+[unused35]
+[unused36]
+[unused37]
+[unused38]
+[unused39]
+[unused40]
+[unused41]
+[unused42]
+[unused43]
+[unused44]
+[unused45]
+[unused46]
+[unused47]
+[unused48]
+[unused49]
+[unused50]
+[unused51]
+[unused52]
+[unused53]
+[unused54]
+[unused55]
+[unused56]
+[unused57]
+[unused58]
+[unused59]
+[unused60]
+[unused61]
+[unused62]
+[unused63]
+[unused64]
+[unused65]
+[unused66]
+[unused67]
+[unused68]
+[unused69]
+[unused70]
+[unused71]
+[unused72]
+[unused73]
+[unused74]
+[unused75]
+[unused76]
+[unused77]
+[unused78]
+[unused79]
+[unused80]
+[unused81]
+[unused82]
+[unused83]
+[unused84]
+[unused85]
+[unused86]
+[unused87]
+[unused88]
+[unused89]
+[unused90]
+[unused91]
+[unused92]
+[unused93]
+[unused94]
+[unused95]
+[unused96]
+[unused97]
+[unused98]
+[unused99]
+[UNK]
+[CLS]
+[SEP]
+[MASK]
+
+
+!
+"
+#
+$
+%
+&
+'
+(
+)
+*
++
+,
+-
+.
+/
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+:
+;
+<
+=
+>
+?
+@
+[
+\
+]
+^
+_
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+{
+|
+}
+~
+£
+¤
+¥
+§
+©
+«
+®
+°
+±
+²
+³
+µ
+·
+¹
+º
+»
+¼
+×
+ß
+æ
+÷
+ø
+đ
+ŋ
+ɔ
+ə
+ɡ
+ʰ
+ˇ
+ˈ
+ˊ
+ˋ
+ˍ
+ː
+˙
+˚
+ˢ
+α
+β
+γ
+δ
+ε
+η
+θ
+ι
+κ
+λ
+μ
+ν
+ο
+π
+ρ
+ς
+σ
+τ
+υ
+φ
+χ
+ψ
+ω
+а
+б
+в
+г
+д
+е
+ж
+з
+и
+к
+л
+м
+н
+о
+п
+р
+с
+т
+у
+ф
+х
+ц
+ч
+ш
+ы
+ь
+я
+і
+ا
+ب
+ة
+ت
+د
+ر
+س
+ع
+ل
+م
+ن
+ه
+و
+ي
+۩
+ก
+ง
+น
+ม
+ย
+ร
+อ
+า
+เ
+๑
+་
+ღ
+ᄀ
+ᄁ
+ᄂ
+ᄃ
+ᄅ
+ᄆ
+ᄇ
+ᄈ
+ᄉ
+ᄋ
+ᄌ
+ᄎ
+ᄏ
+ᄐ
+ᄑ
+ᄒ
+ᅡ
+ᅢ
+ᅣ
+ᅥ
+ᅦ
+ᅧ
+ᅨ
+ᅩ
+ᅪ
+ᅬ
+ᅭ
+ᅮ
+ᅯ
+ᅲ
+ᅳ
+ᅴ
+ᅵ
+ᆨ
+ᆫ
+ᆯ
+ᆷ
+ᆸ
+ᆺ
+ᆻ
+ᆼ
+ᗜ
+ᵃ
+ᵉ
+ᵍ
+ᵏ
+ᵐ
+ᵒ
+ᵘ
+‖
+„
+†
+•
+‥
+‧
+
+‰
+′
+″
+‹
+›
+※
+‿
+⁄
+ⁱ
+⁺
+ⁿ
+₁
+₂
+₃
+₄
+€
+℃
+№
+™
+ⅰ
+ⅱ
+ⅲ
+ⅳ
+ⅴ
+←
+↑
+→
+↓
+↔
+↗
+↘
+⇒
+∀
+−
+∕
+∙
+√
+∞
+∟
+∠
+∣
+∥
+∩
+∮
+∶
+∼
+∽
+≈
+≒
+≡
+≤
+≥
+≦
+≧
+≪
+≫
+⊙
+⋅
+⋈
+⋯
+⌒
+①
+②
+③
+④
+⑤
+⑥
+⑦
+⑧
+⑨
+⑩
+⑴
+⑵
+⑶
+⑷
+⑸
+⒈
+⒉
+⒊
+⒋
+ⓒ
+ⓔ
+ⓘ
+─
+━
+│
+┃
+┅
+┆
+┊
+┌
+└
+├
+┣
+═
+║
+╚
+╞
+╠
+╭
+╮
+╯
+╰
+╱
+╳
+▂
+▃
+▅
+▇
+█
+▉
+▋
+▌
+▍
+▎
+■
+□
+▪
+▫
+▬
+▲
+△
+▶
+►
+▼
+▽
+◆
+◇
+○
+◎
+●
+◕
+◠
+◢
+◤
+☀
+★
+☆
+☕
+☞
+☺
+☼
+♀
+♂
+♠
+♡
+♣
+♥
+♦
+♪
+♫
+♬
+✈
+✔
+✕
+✖
+✦
+✨
+✪
+✰
+✿
+❀
+❤
+➜
+➤
+⦿
+、
+。
+〃
+々
+〇
+〈
+〉
+《
+》
+「
+」
+『
+』
+【
+】
+〓
+〔
+〕
+〖
+〗
+〜
+〝
+〞
+ぁ
+あ
+ぃ
+い
+う
+ぇ
+え
+お
+か
+き
+く
+け
+こ
+さ
+し
+す
+せ
+そ
+た
+ち
+っ
+つ
+て
+と
+な
+に
+ぬ
+ね
+の
+は
+ひ
+ふ
+へ
+ほ
+ま
+み
+む
+め
+も
+ゃ
+や
+ゅ
+ゆ
+ょ
+よ
+ら
+り
+る
+れ
+ろ
+わ
+を
+ん
+゜
+ゝ
+ァ
+ア
+ィ
+イ
+ゥ
+ウ
+ェ
+エ
+ォ
+オ
+カ
+キ
+ク
+ケ
+コ
+サ
+シ
+ス
+セ
+ソ
+タ
+チ
+ッ
+ツ
+テ
+ト
+ナ
+ニ
+ヌ
+ネ
+ノ
+ハ
+ヒ
+フ
+ヘ
+ホ
+マ
+ミ
+ム
+メ
+モ
+ャ
+ヤ
+ュ
+ユ
+ョ
+ヨ
+ラ
+リ
+ル
+レ
+ロ
+ワ
+ヲ
+ン
+ヶ
+・
+ー
+ヽ
+ㄅ
+ㄆ
+ㄇ
+ㄉ
+ㄋ
+ㄌ
+ㄍ
+ㄎ
+ㄏ
+ㄒ
+ㄚ
+ㄛ
+ㄞ
+ㄟ
+ㄢ
+ㄤ
+ㄥ
+ㄧ
+ㄨ
+ㆍ
+㈦
+㊣
+㎡
+㗎
+一
+丁
+七
+万
+丈
+三
+上
+下
+不
+与
+丐
+丑
+专
+且
+丕
+世
+丘
+丙
+业
+丛
+东
+丝
+丞
+丟
+両
+丢
+两
+严
+並
+丧
+丨
+个
+丫
+中
+丰
+串
+临
+丶
+丸
+丹
+为
+主
+丼
+丽
+举
+丿
+乂
+乃
+久
+么
+义
+之
+乌
+乍
+乎
+乏
+乐
+乒
+乓
+乔
+乖
+乗
+乘
+乙
+乜
+九
+乞
+也
+习
+乡
+书
+乩
+买
+乱
+乳
+乾
+亀
+亂
+了
+予
+争
+事
+二
+于
+亏
+云
+互
+五
+井
+亘
+亙
+亚
+些
+亜
+亞
+亟
+亡
+亢
+交
+亥
+亦
+产
+亨
+亩
+享
+京
+亭
+亮
+亲
+亳
+亵
+人
+亿
+什
+仁
+仃
+仄
+仅
+仆
+仇
+今
+介
+仍
+从
+仏
+仑
+仓
+仔
+仕
+他
+仗
+付
+仙
+仝
+仞
+仟
+代
+令
+以
+仨
+仪
+们
+仮
+仰
+仲
+件
+价
+任
+份
+仿
+企
+伉
+伊
+伍
+伎
+伏
+伐
+休
+伕
+众
+优
+伙
+会
+伝
+伞
+伟
+传
+伢
+伤
+伦
+伪
+伫
+伯
+估
+伴
+伶
+伸
+伺
+似
+伽
+佃
+但
+佇
+佈
+位
+低
+住
+佐
+佑
+体
+佔
+何
+佗
+佘
+余
+佚
+佛
+作
+佝
+佞
+佟
+你
+佢
+佣
+佤
+佥
+佩
+佬
+佯
+佰
+佳
+併
+佶
+佻
+佼
+使
+侃
+侄
+來
+侈
+例
+侍
+侏
+侑
+侖
+侗
+供
+依
+侠
+価
+侣
+侥
+侦
+侧
+侨
+侬
+侮
+侯
+侵
+侶
+侷
+便
+係
+促
+俄
+俊
+俎
+俏
+俐
+俑
+俗
+俘
+俚
+保
+俞
+俟
+俠
+信
+俨
+俩
+俪
+俬
+俭
+修
+俯
+俱
+俳
+俸
+俺
+俾
+倆
+倉
+個
+倌
+倍
+倏
+們
+倒
+倔
+倖
+倘
+候
+倚
+倜
+借
+倡
+値
+倦
+倩
+倪
+倫
+倬
+倭
+倶
+债
+值
+倾
+偃
+假
+偈
+偉
+偌
+偎
+偏
+偕
+做
+停
+健
+側
+偵
+偶
+偷
+偻
+偽
+偿
+傀
+傅
+傍
+傑
+傘
+備
+傚
+傢
+傣
+傥
+储
+傩
+催
+傭
+傲
+傳
+債
+傷
+傻
+傾
+僅
+働
+像
+僑
+僕
+僖
+僚
+僥
+僧
+僭
+僮
+僱
+僵
+價
+僻
+儀
+儂
+億
+儆
+儉
+儋
+儒
+儕
+儘
+償
+儡
+優
+儲
+儷
+儼
+儿
+兀
+允
+元
+兄
+充
+兆
+兇
+先
+光
+克
+兌
+免
+児
+兑
+兒
+兔
+兖
+党
+兜
+兢
+入
+內
+全
+兩
+八
+公
+六
+兮
+兰
+共
+兲
+关
+兴
+兵
+其
+具
+典
+兹
+养
+兼
+兽
+冀
+内
+円
+冇
+冈
+冉
+冊
+册
+再
+冏
+冒
+冕
+冗
+写
+军
+农
+冠
+冢
+冤
+冥
+冨
+冪
+冬
+冯
+冰
+冲
+决
+况
+冶
+冷
+冻
+冼
+冽
+冾
+净
+凄
+准
+凇
+凈
+凉
+凋
+凌
+凍
+减
+凑
+凛
+凜
+凝
+几
+凡
+凤
+処
+凪
+凭
+凯
+凰
+凱
+凳
+凶
+凸
+凹
+出
+击
+函
+凿
+刀
+刁
+刃
+分
+切
+刈
+刊
+刍
+刎
+刑
+划
+列
+刘
+则
+刚
+创
+初
+删
+判
+別
+刨
+利
+刪
+别
+刮
+到
+制
+刷
+券
+刹
+刺
+刻
+刽
+剁
+剂
+剃
+則
+剉
+削
+剋
+剌
+前
+剎
+剐
+剑
+剔
+剖
+剛
+剜
+剝
+剣
+剤
+剥
+剧
+剩
+剪
+副
+割
+創
+剷
+剽
+剿
+劃
+劇
+劈
+劉
+劊
+劍
+劏
+劑
+力
+劝
+办
+功
+加
+务
+劣
+动
+助
+努
+劫
+劭
+励
+劲
+劳
+労
+劵
+効
+劾
+势
+勁
+勃
+勇
+勉
+勋
+勐
+勒
+動
+勖
+勘
+務
+勛
+勝
+勞
+募
+勢
+勤
+勧
+勳
+勵
+勸
+勺
+勻
+勾
+勿
+匀
+包
+匆
+匈
+匍
+匐
+匕
+化
+北
+匙
+匝
+匠
+匡
+匣
+匪
+匮
+匯
+匱
+匹
+区
+医
+匾
+匿
+區
+十
+千
+卅
+升
+午
+卉
+半
+卍
+华
+协
+卑
+卒
+卓
+協
+单
+卖
+南
+単
+博
+卜
+卞
+卟
+占
+卡
+卢
+卤
+卦
+卧
+卫
+卮
+卯
+印
+危
+即
+却
+卵
+卷
+卸
+卻
+卿
+厂
+厄
+厅
+历
+厉
+压
+厌
+厕
+厘
+厚
+厝
+原
+厢
+厥
+厦
+厨
+厩
+厭
+厮
+厲
+厳
+去
+县
+叁
+参
+參
+又
+叉
+及
+友
+双
+反
+収
+发
+叔
+取
+受
+变
+叙
+叛
+叟
+叠
+叡
+叢
+口
+古
+句
+另
+叨
+叩
+只
+叫
+召
+叭
+叮
+可
+台
+叱
+史
+右
+叵
+叶
+号
+司
+叹
+叻
+叼
+叽
+吁
+吃
+各
+吆
+合
+吉
+吊
+吋
+同
+名
+后
+吏
+吐
+向
+吒
+吓
+吕
+吖
+吗
+君
+吝
+吞
+吟
+吠
+吡
+否
+吧
+吨
+吩
+含
+听
+吭
+吮
+启
+吱
+吳
+吴
+吵
+吶
+吸
+吹
+吻
+吼
+吽
+吾
+呀
+呂
+呃
+呆
+呈
+告
+呋
+呎
+呐
+呓
+呕
+呗
+员
+呛
+呜
+呢
+呤
+呦
+周
+呱
+呲
+味
+呵
+呷
+呸
+呻
+呼
+命
+咀
+咁
+咂
+咄
+咆
+咋
+和
+咎
+咏
+咐
+咒
+咔
+咕
+咖
+咗
+咘
+咙
+咚
+咛
+咣
+咤
+咦
+咧
+咨
+咩
+咪
+咫
+咬
+咭
+咯
+咱
+咲
+咳
+咸
+咻
+咽
+咿
+哀
+品
+哂
+哄
+哆
+哇
+哈
+哉
+哋
+哌
+响
+哎
+哏
+哐
+哑
+哒
+哔
+哗
+哟
+員
+哥
+哦
+哧
+哨
+哩
+哪
+哭
+哮
+哲
+哺
+哼
+哽
+唁
+唄
+唆
+唇
+唉
+唏
+唐
+唑
+唔
+唠
+唤
+唧
+唬
+售
+唯
+唰
+唱
+唳
+唷
+唸
+唾
+啃
+啄
+商
+啉
+啊
+問
+啓
+啕
+啖
+啜
+啞
+啟
+啡
+啤
+啥
+啦
+啧
+啪
+啫
+啬
+啮
+啰
+啱
+啲
+啵
+啶
+啷
+啸
+啻
+啼
+啾
+喀
+喂
+喃
+善
+喆
+喇
+喉
+喊
+喋
+喎
+喏
+喔
+喘
+喙
+喚
+喜
+喝
+喟
+喧
+喪
+喫
+喬
+單
+喰
+喱
+喲
+喳
+喵
+営
+喷
+喹
+喺
+喻
+喽
+嗅
+嗆
+嗇
+嗎
+嗑
+嗒
+嗓
+嗔
+嗖
+嗚
+嗜
+嗝
+嗟
+嗡
+嗣
+嗤
+嗦
+嗨
+嗪
+嗬
+嗯
+嗰
+嗲
+嗳
+嗶
+嗷
+嗽
+嘀
+嘅
+嘆
+嘈
+嘉
+嘌
+嘍
+嘎
+嘔
+嘖
+嘗
+嘘
+嘚
+嘛
+嘜
+嘞
+嘟
+嘢
+嘣
+嘤
+嘧
+嘩
+嘭
+嘮
+嘯
+嘰
+嘱
+嘲
+嘴
+嘶
+嘸
+嘹
+嘻
+嘿
+噁
+噌
+噎
+噓
+噔
+噗
+噙
+噜
+噠
+噢
+噤
+器
+噩
+噪
+噬
+噱
+噴
+噶
+噸
+噹
+噻
+噼
+嚀
+嚇
+嚎
+嚏
+嚐
+嚓
+嚕
+嚟
+嚣
+嚥
+嚨
+嚮
+嚴
+嚷
+嚼
+囂
+囉
+囊
+囍
+囑
+囔
+囗
+囚
+四
+囝
+回
+囟
+因
+囡
+团
+団
+囤
+囧
+囪
+囫
+园
+困
+囱
+囲
+図
+围
+囹
+固
+国
+图
+囿
+圃
+圄
+圆
+圈
+國
+圍
+圏
+園
+圓
+圖
+團
+圜
+土
+圣
+圧
+在
+圩
+圭
+地
+圳
+场
+圻
+圾
+址
+坂
+均
+坊
+坍
+坎
+坏
+坐
+坑
+块
+坚
+坛
+坝
+坞
+坟
+坠
+坡
+坤
+坦
+坨
+坪
+坯
+坳
+坵
+坷
+垂
+垃
+垄
+型
+垒
+垚
+垛
+垠
+垢
+垣
+垦
+垩
+垫
+垭
+垮
+垵
+埂
+埃
+埋
+城
+埔
+埕
+埗
+域
+埠
+埤
+埵
+執
+埸
+培
+基
+埼
+堀
+堂
+堃
+堅
+堆
+堇
+堑
+堕
+堙
+堡
+堤
+堪
+堯
+堰
+報
+場
+堵
+堺
+堿
+塊
+塌
+塑
+塔
+塗
+塘
+塚
+塞
+塢
+塩
+填
+塬
+塭
+塵
+塾
+墀
+境
+墅
+墉
+墊
+墒
+墓
+増
+墘
+墙
+墜
+增
+墟
+墨
+墩
+墮
+墳
+墻
+墾
+壁
+壅
+壆
+壇
+壊
+壑
+壓
+壕
+壘
+壞
+壟
+壢
+壤
+壩
+士
+壬
+壮
+壯
+声
+売
+壳
+壶
+壹
+壺
+壽
+处
+备
+変
+复
+夏
+夔
+夕
+外
+夙
+多
+夜
+够
+夠
+夢
+夥
+大
+天
+太
+夫
+夭
+央
+夯
+失
+头
+夷
+夸
+夹
+夺
+夾
+奂
+奄
+奇
+奈
+奉
+奋
+奎
+奏
+奐
+契
+奔
+奕
+奖
+套
+奘
+奚
+奠
+奢
+奥
+奧
+奪
+奬
+奮
+女
+奴
+奶
+奸
+她
+好
+如
+妃
+妄
+妆
+妇
+妈
+妊
+妍
+妒
+妓
+妖
+妘
+妙
+妝
+妞
+妣
+妤
+妥
+妨
+妩
+妪
+妮
+妲
+妳
+妹
+妻
+妾
+姆
+姉
+姊
+始
+姍
+姐
+姑
+姒
+姓
+委
+姗
+姚
+姜
+姝
+姣
+姥
+姦
+姨
+姪
+姫
+姬
+姹
+姻
+姿
+威
+娃
+娄
+娅
+娆
+娇
+娉
+娑
+娓
+娘
+娛
+娜
+娟
+娠
+娣
+娥
+娩
+娱
+娲
+娴
+娶
+娼
+婀
+婁
+婆
+婉
+婊
+婕
+婚
+婢
+婦
+婧
+婪
+婭
+婴
+婵
+婶
+婷
+婺
+婿
+媒
+媚
+媛
+媞
+媧
+媲
+媳
+媽
+媾
+嫁
+嫂
+嫉
+嫌
+嫑
+嫔
+嫖
+嫘
+嫚
+嫡
+嫣
+嫦
+嫩
+嫲
+嫵
+嫻
+嬅
+嬉
+嬌
+嬗
+嬛
+嬢
+嬤
+嬪
+嬰
+嬴
+嬷
+嬸
+嬿
+孀
+孃
+子
+孑
+孔
+孕
+孖
+字
+存
+孙
+孚
+孛
+孜
+孝
+孟
+孢
+季
+孤
+学
+孩
+孪
+孫
+孬
+孰
+孱
+孳
+孵
+學
+孺
+孽
+孿
+宁
+它
+宅
+宇
+守
+安
+宋
+完
+宏
+宓
+宕
+宗
+官
+宙
+定
+宛
+宜
+宝
+实
+実
+宠
+审
+客
+宣
+室
+宥
+宦
+宪
+宫
+宮
+宰
+害
+宴
+宵
+家
+宸
+容
+宽
+宾
+宿
+寂
+寄
+寅
+密
+寇
+富
+寐
+寒
+寓
+寛
+寝
+寞
+察
+寡
+寢
+寥
+實
+寧
+寨
+審
+寫
+寬
+寮
+寰
+寵
+寶
+寸
+对
+寺
+寻
+导
+対
+寿
+封
+専
+射
+将
+將
+專
+尉
+尊
+尋
+對
+導
+小
+少
+尔
+尕
+尖
+尘
+尚
+尝
+尤
+尧
+尬
+就
+尴
+尷
+尸
+尹
+尺
+尻
+尼
+尽
+尾
+尿
+局
+屁
+层
+屄
+居
+屆
+屈
+屉
+届
+屋
+屌
+屍
+屎
+屏
+屐
+屑
+展
+屜
+属
+屠
+屡
+屢
+層
+履
+屬
+屯
+山
+屹
+屿
+岀
+岁
+岂
+岌
+岐
+岑
+岔
+岖
+岗
+岘
+岙
+岚
+岛
+岡
+岩
+岫
+岬
+岭
+岱
+岳
+岷
+岸
+峇
+峋
+峒
+峙
+峡
+峤
+峥
+峦
+峨
+峪
+峭
+峯
+峰
+峴
+島
+峻
+峽
+崁
+崂
+崆
+崇
+崎
+崑
+崔
+崖
+崗
+崙
+崛
+崧
+崩
+崭
+崴
+崽
+嵇
+嵊
+嵋
+嵌
+嵐
+嵘
+嵩
+嵬
+嵯
+嶂
+嶄
+嶇
+嶋
+嶙
+嶺
+嶼
+嶽
+巅
+巍
+巒
+巔
+巖
+川
+州
+巡
+巢
+工
+左
+巧
+巨
+巩
+巫
+差
+己
+已
+巳
+巴
+巷
+巻
+巽
+巾
+巿
+币
+市
+布
+帅
+帆
+师
+希
+帐
+帑
+帕
+帖
+帘
+帚
+帛
+帜
+帝
+帥
+带
+帧
+師
+席
+帮
+帯
+帰
+帳
+帶
+帷
+常
+帼
+帽
+幀
+幂
+幄
+幅
+幌
+幔
+幕
+幟
+幡
+幢
+幣
+幫
+干
+平
+年
+并
+幸
+幹
+幺
+幻
+幼
+幽
+幾
+广
+庁
+広
+庄
+庆
+庇
+床
+序
+庐
+库
+应
+底
+庖
+店
+庙
+庚
+府
+庞
+废
+庠
+度
+座
+庫
+庭
+庵
+庶
+康
+庸
+庹
+庾
+廁
+廂
+廃
+廈
+廉
+廊
+廓
+廖
+廚
+廝
+廟
+廠
+廢
+廣
+廬
+廳
+延
+廷
+建
+廿
+开
+弁
+异
+弃
+弄
+弈
+弊
+弋
+式
+弑
+弒
+弓
+弔
+引
+弗
+弘
+弛
+弟
+张
+弥
+弦
+弧
+弩
+弭
+弯
+弱
+張
+強
+弹
+强
+弼
+弾
+彅
+彆
+彈
+彌
+彎
+归
+当
+录
+彗
+彙
+彝
+形
+彤
+彥
+彦
+彧
+彩
+彪
+彫
+彬
+彭
+彰
+影
+彷
+役
+彻
+彼
+彿
+往
+征
+径
+待
+徇
+很
+徉
+徊
+律
+後
+徐
+徑
+徒
+従
+徕
+得
+徘
+徙
+徜
+從
+徠
+御
+徨
+復
+循
+徬
+微
+徳
+徴
+徵
+德
+徹
+徼
+徽
+心
+必
+忆
+忌
+忍
+忏
+忐
+忑
+忒
+忖
+志
+忘
+忙
+応
+忠
+忡
+忤
+忧
+忪
+快
+忱
+念
+忻
+忽
+忿
+怀
+态
+怂
+怅
+怆
+怎
+怏
+怒
+怔
+怕
+怖
+怙
+怜
+思
+怠
+怡
+急
+怦
+性
+怨
+怪
+怯
+怵
+总
+怼
+恁
+恃
+恆
+恋
+恍
+恐
+恒
+恕
+恙
+恚
+恢
+恣
+恤
+恥
+恨
+恩
+恪
+恫
+恬
+恭
+息
+恰
+恳
+恵
+恶
+恸
+恺
+恻
+恼
+恿
+悄
+悅
+悉
+悌
+悍
+悔
+悖
+悚
+悟
+悠
+患
+悦
+您
+悩
+悪
+悬
+悯
+悱
+悲
+悴
+悵
+悶
+悸
+悻
+悼
+悽
+情
+惆
+惇
+惊
+惋
+惑
+惕
+惘
+惚
+惜
+惟
+惠
+惡
+惦
+惧
+惨
+惩
+惫
+惬
+惭
+惮
+惯
+惰
+惱
+想
+惴
+惶
+惹
+惺
+愁
+愆
+愈
+愉
+愍
+意
+愕
+愚
+愛
+愜
+感
+愣
+愤
+愧
+愫
+愷
+愿
+慄
+慈
+態
+慌
+慎
+慑
+慕
+慘
+慚
+慟
+慢
+慣
+慧
+慨
+慫
+慮
+慰
+慳
+慵
+慶
+慷
+慾
+憂
+憊
+憋
+憎
+憐
+憑
+憔
+憚
+憤
+憧
+憨
+憩
+憫
+憬
+憲
+憶
+憾
+懂
+懇
+懈
+應
+懊
+懋
+懑
+懒
+懦
+懲
+懵
+懶
+懷
+懸
+懺
+懼
+懾
+懿
+戀
+戈
+戊
+戌
+戍
+戎
+戏
+成
+我
+戒
+戕
+或
+战
+戚
+戛
+戟
+戡
+戦
+截
+戬
+戮
+戰
+戲
+戳
+戴
+戶
+户
+戸
+戻
+戾
+房
+所
+扁
+扇
+扈
+扉
+手
+才
+扎
+扑
+扒
+打
+扔
+払
+托
+扛
+扣
+扦
+执
+扩
+扪
+扫
+扬
+扭
+扮
+扯
+扰
+扱
+扳
+扶
+批
+扼
+找
+承
+技
+抄
+抉
+把
+抑
+抒
+抓
+投
+抖
+抗
+折
+抚
+抛
+抜
+択
+抟
+抠
+抡
+抢
+护
+报
+抨
+披
+抬
+抱
+抵
+抹
+押
+抽
+抿
+拂
+拄
+担
+拆
+拇
+拈
+拉
+拋
+拌
+拍
+拎
+拐
+拒
+拓
+拔
+拖
+拗
+拘
+拙
+拚
+招
+拜
+拟
+拡
+拢
+拣
+拥
+拦
+拧
+拨
+择
+括
+拭
+拮
+拯
+拱
+拳
+拴
+拷
+拼
+拽
+拾
+拿
+持
+挂
+指
+挈
+按
+挎
+挑
+挖
+挙
+挚
+挛
+挝
+挞
+挟
+挠
+挡
+挣
+挤
+挥
+挨
+挪
+挫
+振
+挲
+挹
+挺
+挽
+挾
+捂
+捅
+捆
+捉
+捋
+捌
+捍
+捎
+捏
+捐
+捕
+捞
+损
+捡
+换
+捣
+捧
+捨
+捩
+据
+捱
+捲
+捶
+捷
+捺
+捻
+掀
+掂
+掃
+掇
+授
+掉
+掌
+掏
+掐
+排
+掖
+掘
+掙
+掛
+掠
+採
+探
+掣
+接
+控
+推
+掩
+措
+掬
+掰
+掲
+掳
+掴
+掷
+掸
+掺
+揀
+揃
+揄
+揆
+揉
+揍
+描
+提
+插
+揖
+揚
+換
+握
+揣
+揩
+揪
+揭
+揮
+援
+揶
+揸
+揹
+揽
+搀
+搁
+搂
+搅
+損
+搏
+搐
+搓
+搔
+搖
+搗
+搜
+搞
+搡
+搪
+搬
+搭
+搵
+搶
+携
+搽
+摀
+摁
+摄
+摆
+摇
+摈
+摊
+摒
+摔
+摘
+摞
+摟
+摧
+摩
+摯
+摳
+摸
+摹
+摺
+摻
+撂
+撃
+撅
+撇
+撈
+撐
+撑
+撒
+撓
+撕
+撚
+撞
+撤
+撥
+撩
+撫
+撬
+播
+撮
+撰
+撲
+撵
+撷
+撸
+撻
+撼
+撿
+擀
+擁
+擂
+擄
+擅
+擇
+擊
+擋
+操
+擎
+擒
+擔
+擘
+據
+擞
+擠
+擡
+擢
+擦
+擬
+擰
+擱
+擲
+擴
+擷
+擺
+擼
+擾
+攀
+攏
+攒
+攔
+攘
+攙
+攜
+攝
+攞
+攢
+攣
+攤
+攥
+攪
+攫
+攬
+支
+收
+攸
+改
+攻
+放
+政
+故
+效
+敌
+敍
+敎
+敏
+救
+敕
+敖
+敗
+敘
+教
+敛
+敝
+敞
+敢
+散
+敦
+敬
+数
+敲
+整
+敵
+敷
+數
+斂
+斃
+文
+斋
+斌
+斎
+斐
+斑
+斓
+斗
+料
+斛
+斜
+斟
+斡
+斤
+斥
+斧
+斩
+斫
+斬
+断
+斯
+新
+斷
+方
+於
+施
+旁
+旃
+旅
+旋
+旌
+旎
+族
+旖
+旗
+无
+既
+日
+旦
+旧
+旨
+早
+旬
+旭
+旮
+旱
+时
+旷
+旺
+旻
+昀
+昂
+昆
+昇
+昉
+昊
+昌
+明
+昏
+易
+昔
+昕
+昙
+星
+映
+春
+昧
+昨
+昭
+是
+昱
+昴
+昵
+昶
+昼
+显
+晁
+時
+晃
+晉
+晋
+晌
+晏
+晒
+晓
+晔
+晕
+晖
+晗
+晚
+晝
+晞
+晟
+晤
+晦
+晨
+晩
+普
+景
+晰
+晴
+晶
+晷
+智
+晾
+暂
+暄
+暇
+暈
+暉
+暌
+暐
+暑
+暖
+暗
+暝
+暢
+暧
+暨
+暫
+暮
+暱
+暴
+暸
+暹
+曄
+曆
+曇
+曉
+曖
+曙
+曜
+曝
+曠
+曦
+曬
+曰
+曲
+曳
+更
+書
+曹
+曼
+曾
+替
+最
+會
+月
+有
+朋
+服
+朐
+朔
+朕
+朗
+望
+朝
+期
+朦
+朧
+木
+未
+末
+本
+札
+朮
+术
+朱
+朴
+朵
+机
+朽
+杀
+杂
+权
+杆
+杈
+杉
+李
+杏
+材
+村
+杓
+杖
+杜
+杞
+束
+杠
+条
+来
+杨
+杭
+杯
+杰
+東
+杳
+杵
+杷
+杼
+松
+板
+极
+构
+枇
+枉
+枋
+析
+枕
+林
+枚
+果
+枝
+枢
+枣
+枪
+枫
+枭
+枯
+枰
+枱
+枳
+架
+枷
+枸
+柄
+柏
+某
+柑
+柒
+染
+柔
+柘
+柚
+柜
+柞
+柠
+柢
+查
+柩
+柬
+柯
+柱
+柳
+柴
+柵
+査
+柿
+栀
+栃
+栄
+栅
+标
+栈
+栉
+栋
+栎
+栏
+树
+栓
+栖
+栗
+校
+栩
+株
+样
+核
+根
+格
+栽
+栾
+桀
+桁
+桂
+桃
+桅
+框
+案
+桉
+桌
+桎
+桐
+桑
+桓
+桔
+桜
+桠
+桡
+桢
+档
+桥
+桦
+桧
+桨
+桩
+桶
+桿
+梁
+梅
+梆
+梏
+梓
+梗
+條
+梟
+梢
+梦
+梧
+梨
+梭
+梯
+械
+梳
+梵
+梶
+检
+棂
+棄
+棉
+棋
+棍
+棒
+棕
+棗
+棘
+棚
+棟
+棠
+棣
+棧
+森
+棱
+棲
+棵
+棹
+棺
+椁
+椅
+椋
+植
+椎
+椒
+検
+椪
+椭
+椰
+椹
+椽
+椿
+楂
+楊
+楓
+楔
+楚
+楝
+楞
+楠
+楣
+楨
+楫
+業
+楮
+極
+楷
+楸
+楹
+楼
+楽
+概
+榄
+榆
+榈
+榉
+榔
+榕
+榖
+榛
+榜
+榨
+榫
+榭
+榮
+榱
+榴
+榷
+榻
+槁
+槃
+構
+槌
+槍
+槎
+槐
+槓
+様
+槛
+槟
+槤
+槭
+槲
+槳
+槻
+槽
+槿
+樁
+樂
+樊
+樑
+樓
+標
+樞
+樟
+模
+樣
+権
+横
+樫
+樯
+樱
+樵
+樸
+樹
+樺
+樽
+樾
+橄
+橇
+橋
+橐
+橘
+橙
+機
+橡
+橢
+橫
+橱
+橹
+橼
+檀
+檄
+檎
+檐
+檔
+檗
+檜
+檢
+檬
+檯
+檳
+檸
+檻
+櫃
+櫚
+櫛
+櫥
+櫸
+櫻
+欄
+權
+欒
+欖
+欠
+次
+欢
+欣
+欧
+欲
+欸
+欺
+欽
+款
+歆
+歇
+歉
+歌
+歎
+歐
+歓
+歙
+歛
+歡
+止
+正
+此
+步
+武
+歧
+歩
+歪
+歯
+歲
+歳
+歴
+歷
+歸
+歹
+死
+歼
+殁
+殃
+殆
+殇
+殉
+殊
+残
+殒
+殓
+殖
+殘
+殞
+殡
+殤
+殭
+殯
+殲
+殴
+段
+殷
+殺
+殼
+殿
+毀
+毁
+毂
+毅
+毆
+毋
+母
+毎
+每
+毒
+毓
+比
+毕
+毗
+毘
+毙
+毛
+毡
+毫
+毯
+毽
+氈
+氏
+氐
+民
+氓
+气
+氖
+気
+氙
+氛
+氟
+氡
+氢
+氣
+氤
+氦
+氧
+氨
+氪
+氫
+氮
+氯
+氰
+氲
+水
+氷
+永
+氹
+氾
+汀
+汁
+求
+汆
+汇
+汉
+汎
+汐
+汕
+汗
+汙
+汛
+汝
+汞
+江
+池
+污
+汤
+汨
+汩
+汪
+汰
+汲
+汴
+汶
+汹
+決
+汽
+汾
+沁
+沂
+沃
+沅
+沈
+沉
+沌
+沏
+沐
+沒
+沓
+沖
+沙
+沛
+沟
+没
+沢
+沣
+沥
+沦
+沧
+沪
+沫
+沭
+沮
+沱
+河
+沸
+油
+治
+沼
+沽
+沾
+沿
+況
+泄
+泉
+泊
+泌
+泓
+法
+泗
+泛
+泞
+泠
+泡
+波
+泣
+泥
+注
+泪
+泫
+泮
+泯
+泰
+泱
+泳
+泵
+泷
+泸
+泻
+泼
+泽
+泾
+洁
+洄
+洋
+洒
+洗
+洙
+洛
+洞
+津
+洩
+洪
+洮
+洱
+洲
+洵
+洶
+洸
+洹
+活
+洼
+洽
+派
+流
+浃
+浄
+浅
+浆
+浇
+浊
+测
+济
+浏
+浑
+浒
+浓
+浔
+浙
+浚
+浜
+浣
+浦
+浩
+浪
+浬
+浮
+浯
+浴
+海
+浸
+涂
+涅
+涇
+消
+涉
+涌
+涎
+涓
+涔
+涕
+涙
+涛
+涝
+涞
+涟
+涠
+涡
+涣
+涤
+润
+涧
+涨
+涩
+涪
+涮
+涯
+液
+涵
+涸
+涼
+涿
+淀
+淄
+淅
+淆
+淇
+淋
+淌
+淑
+淒
+淖
+淘
+淙
+淚
+淞
+淡
+淤
+淦
+淨
+淩
+淪
+淫
+淬
+淮
+深
+淳
+淵
+混
+淹
+淺
+添
+淼
+清
+済
+渉
+渊
+渋
+渍
+渎
+渐
+渔
+渗
+渙
+渚
+減
+渝
+渠
+渡
+渣
+渤
+渥
+渦
+温
+測
+渭
+港
+渲
+渴
+游
+渺
+渾
+湃
+湄
+湊
+湍
+湖
+湘
+湛
+湟
+湧
+湫
+湮
+湯
+湳
+湾
+湿
+満
+溃
+溅
+溉
+溏
+源
+準
+溜
+溝
+溟
+溢
+溥
+溧
+溪
+溫
+溯
+溱
+溴
+溶
+溺
+溼
+滁
+滂
+滄
+滅
+滇
+滋
+滌
+滑
+滓
+滔
+滕
+滙
+滚
+滝
+滞
+滟
+满
+滢
+滤
+滥
+滦
+滨
+滩
+滬
+滯
+滲
+滴
+滷
+滸
+滾
+滿
+漁
+漂
+漆
+漉
+漏
+漓
+演
+漕
+漠
+漢
+漣
+漩
+漪
+漫
+漬
+漯
+漱
+漲
+漳
+漸
+漾
+漿
+潆
+潇
+潋
+潍
+潑
+潔
+潘
+潛
+潜
+潞
+潟
+潢
+潤
+潦
+潧
+潭
+潮
+潰
+潴
+潸
+潺
+潼
+澀
+澄
+澆
+澈
+澍
+澎
+澗
+澜
+澡
+澤
+澧
+澱
+澳
+澹
+激
+濁
+濂
+濃
+濑
+濒
+濕
+濘
+濛
+濟
+濠
+濡
+濤
+濫
+濬
+濮
+濯
+濱
+濺
+濾
+瀅
+瀆
+瀉
+瀋
+瀏
+瀑
+瀕
+瀘
+瀚
+瀛
+瀝
+瀞
+瀟
+瀧
+瀨
+瀬
+瀰
+瀾
+灌
+灏
+灑
+灘
+灝
+灞
+灣
+火
+灬
+灭
+灯
+灰
+灵
+灶
+灸
+灼
+災
+灾
+灿
+炀
+炁
+炅
+炉
+炊
+炎
+炒
+炔
+炕
+炖
+炙
+炜
+炫
+炬
+炭
+炮
+炯
+炳
+炷
+炸
+点
+為
+炼
+炽
+烁
+烂
+烃
+烈
+烊
+烏
+烘
+烙
+烛
+烟
+烤
+烦
+烧
+烨
+烩
+烫
+烬
+热
+烯
+烷
+烹
+烽
+焉
+焊
+焕
+焖
+焗
+焘
+焙
+焚
+焜
+無
+焦
+焯
+焰
+焱
+然
+焼
+煅
+煉
+煊
+煌
+煎
+煒
+煖
+煙
+煜
+煞
+煤
+煥
+煦
+照
+煨
+煩
+煮
+煲
+煸
+煽
+熄
+熊
+熏
+熒
+熔
+熙
+熟
+熠
+熨
+熬
+熱
+熵
+熹
+熾
+燁
+燃
+燄
+燈
+燉
+燊
+燎
+燒
+燔
+燕
+燙
+燜
+營
+燥
+燦
+燧
+燭
+燮
+燴
+燻
+燼
+燿
+爆
+爍
+爐
+爛
+爪
+爬
+爭
+爰
+爱
+爲
+爵
+父
+爷
+爸
+爹
+爺
+爻
+爽
+爾
+牆
+片
+版
+牌
+牍
+牒
+牙
+牛
+牝
+牟
+牠
+牡
+牢
+牦
+牧
+物
+牯
+牲
+牴
+牵
+特
+牺
+牽
+犀
+犁
+犄
+犊
+犍
+犒
+犢
+犧
+犬
+犯
+状
+犷
+犸
+犹
+狀
+狂
+狄
+狈
+狎
+狐
+狒
+狗
+狙
+狞
+狠
+狡
+狩
+独
+狭
+狮
+狰
+狱
+狸
+狹
+狼
+狽
+猎
+猕
+猖
+猗
+猙
+猛
+猜
+猝
+猥
+猩
+猪
+猫
+猬
+献
+猴
+猶
+猷
+猾
+猿
+獄
+獅
+獎
+獐
+獒
+獗
+獠
+獣
+獨
+獭
+獰
+獲
+獵
+獷
+獸
+獺
+獻
+獼
+獾
+玄
+率
+玉
+王
+玑
+玖
+玛
+玟
+玠
+玥
+玩
+玫
+玮
+环
+现
+玲
+玳
+玷
+玺
+玻
+珀
+珂
+珅
+珈
+珉
+珊
+珍
+珏
+珐
+珑
+珙
+珞
+珠
+珣
+珥
+珩
+珪
+班
+珮
+珲
+珺
+現
+球
+琅
+理
+琇
+琉
+琊
+琍
+琏
+琐
+琛
+琢
+琥
+琦
+琨
+琪
+琬
+琮
+琰
+琲
+琳
+琴
+琵
+琶
+琺
+琼
+瑀
+瑁
+瑄
+瑋
+瑕
+瑗
+瑙
+瑚
+瑛
+瑜
+瑞
+瑟
+瑠
+瑣
+瑤
+瑩
+瑪
+瑯
+瑰
+瑶
+瑾
+璀
+璁
+璃
+璇
+璉
+璋
+璎
+璐
+璜
+璞
+璟
+璧
+璨
+環
+璽
+璿
+瓊
+瓏
+瓒
+瓜
+瓢
+瓣
+瓤
+瓦
+瓮
+瓯
+瓴
+瓶
+瓷
+甄
+甌
+甕
+甘
+甙
+甚
+甜
+生
+產
+産
+甥
+甦
+用
+甩
+甫
+甬
+甭
+甯
+田
+由
+甲
+申
+电
+男
+甸
+町
+画
+甾
+畀
+畅
+界
+畏
+畑
+畔
+留
+畜
+畝
+畢
+略
+畦
+番
+畫
+異
+畲
+畳
+畴
+當
+畸
+畹
+畿
+疆
+疇
+疊
+疏
+疑
+疔
+疖
+疗
+疙
+疚
+疝
+疟
+疡
+疣
+疤
+疥
+疫
+疮
+疯
+疱
+疲
+疳
+疵
+疸
+疹
+疼
+疽
+疾
+痂
+病
+症
+痈
+痉
+痊
+痍
+痒
+痔
+痕
+痘
+痙
+痛
+痞
+痠
+痢
+痣
+痤
+痧
+痨
+痪
+痫
+痰
+痱
+痴
+痹
+痺
+痼
+痿
+瘀
+瘁
+瘋
+瘍
+瘓
+瘘
+瘙
+瘟
+瘠
+瘡
+瘢
+瘤
+瘦
+瘧
+瘩
+瘪
+瘫
+瘴
+瘸
+瘾
+療
+癇
+癌
+癒
+癖
+癜
+癞
+癡
+癢
+癣
+癥
+癫
+癬
+癮
+癱
+癲
+癸
+発
+登
+發
+白
+百
+皂
+的
+皆
+皇
+皈
+皋
+皎
+皑
+皓
+皖
+皙
+皚
+皮
+皰
+皱
+皴
+皺
+皿
+盂
+盃
+盅
+盆
+盈
+益
+盎
+盏
+盐
+监
+盒
+盔
+盖
+盗
+盘
+盛
+盜
+盞
+盟
+盡
+監
+盤
+盥
+盧
+盪
+目
+盯
+盱
+盲
+直
+相
+盹
+盼
+盾
+省
+眈
+眉
+看
+県
+眙
+眞
+真
+眠
+眦
+眨
+眩
+眯
+眶
+眷
+眸
+眺
+眼
+眾
+着
+睁
+睇
+睏
+睐
+睑
+睛
+睜
+睞
+睡
+睢
+督
+睥
+睦
+睨
+睪
+睫
+睬
+睹
+睽
+睾
+睿
+瞄
+瞅
+瞇
+瞋
+瞌
+瞎
+瞑
+瞒
+瞓
+瞞
+瞟
+瞠
+瞥
+瞧
+瞩
+瞪
+瞬
+瞭
+瞰
+瞳
+瞻
+瞼
+瞿
+矇
+矍
+矗
+矚
+矛
+矜
+矢
+矣
+知
+矩
+矫
+短
+矮
+矯
+石
+矶
+矽
+矾
+矿
+码
+砂
+砌
+砍
+砒
+研
+砖
+砗
+砚
+砝
+砣
+砥
+砧
+砭
+砰
+砲
+破
+砷
+砸
+砺
+砼
+砾
+础
+硅
+硐
+硒
+硕
+硝
+硫
+硬
+确
+硯
+硼
+碁
+碇
+碉
+碌
+碍
+碎
+碑
+碓
+碗
+碘
+碚
+碛
+碟
+碣
+碧
+碩
+碰
+碱
+碳
+碴
+確
+碼
+碾
+磁
+磅
+磊
+磋
+磐
+磕
+磚
+磡
+磨
+磬
+磯
+磲
+磷
+磺
+礁
+礎
+礙
+礡
+礦
+礪
+礫
+礴
+示
+礼
+社
+祀
+祁
+祂
+祇
+祈
+祉
+祎
+祐
+祕
+祖
+祗
+祚
+祛
+祜
+祝
+神
+祟
+祠
+祢
+祥
+票
+祭
+祯
+祷
+祸
+祺
+祿
+禀
+禁
+禄
+禅
+禍
+禎
+福
+禛
+禦
+禧
+禪
+禮
+禱
+禹
+禺
+离
+禽
+禾
+禿
+秀
+私
+秃
+秆
+秉
+秋
+种
+科
+秒
+秘
+租
+秣
+秤
+秦
+秧
+秩
+秭
+积
+称
+秸
+移
+秽
+稀
+稅
+程
+稍
+税
+稔
+稗
+稚
+稜
+稞
+稟
+稠
+稣
+種
+稱
+稲
+稳
+稷
+稹
+稻
+稼
+稽
+稿
+穀
+穂
+穆
+穌
+積
+穎
+穗
+穢
+穩
+穫
+穴
+究
+穷
+穹
+空
+穿
+突
+窃
+窄
+窈
+窍
+窑
+窒
+窓
+窕
+窖
+窗
+窘
+窜
+窝
+窟
+窠
+窥
+窦
+窨
+窩
+窪
+窮
+窯
+窺
+窿
+竄
+竅
+竇
+竊
+立
+竖
+站
+竜
+竞
+竟
+章
+竣
+童
+竭
+端
+競
+竹
+竺
+竽
+竿
+笃
+笆
+笈
+笋
+笏
+笑
+笔
+笙
+笛
+笞
+笠
+符
+笨
+第
+笹
+笺
+笼
+筆
+等
+筊
+筋
+筍
+筏
+筐
+筑
+筒
+答
+策
+筛
+筝
+筠
+筱
+筲
+筵
+筷
+筹
+签
+简
+箇
+箋
+箍
+箏
+箐
+箔
+箕
+算
+箝
+管
+箩
+箫
+箭
+箱
+箴
+箸
+節
+篁
+範
+篆
+篇
+築
+篑
+篓
+篙
+篝
+篠
+篡
+篤
+篩
+篪
+篮
+篱
+篷
+簇
+簌
+簍
+簡
+簦
+簧
+簪
+簫
+簷
+簸
+簽
+簾
+簿
+籁
+籃
+籌
+籍
+籐
+籟
+籠
+籤
+籬
+籮
+籲
+米
+类
+籼
+籽
+粄
+粉
+粑
+粒
+粕
+粗
+粘
+粟
+粤
+粥
+粧
+粪
+粮
+粱
+粲
+粳
+粵
+粹
+粼
+粽
+精
+粿
+糅
+糊
+糍
+糕
+糖
+糗
+糙
+糜
+糞
+糟
+糠
+糧
+糬
+糯
+糰
+糸
+系
+糾
+紀
+紂
+約
+紅
+紉
+紊
+紋
+納
+紐
+紓
+純
+紗
+紘
+紙
+級
+紛
+紜
+素
+紡
+索
+紧
+紫
+紮
+累
+細
+紳
+紹
+紺
+終
+絃
+組
+絆
+経
+結
+絕
+絞
+絡
+絢
+給
+絨
+絮
+統
+絲
+絳
+絵
+絶
+絹
+綁
+綏
+綑
+經
+継
+続
+綜
+綠
+綢
+綦
+綫
+綬
+維
+綱
+網
+綴
+綵
+綸
+綺
+綻
+綽
+綾
+綿
+緊
+緋
+総
+緑
+緒
+緘
+線
+緝
+緞
+締
+緣
+編
+緩
+緬
+緯
+練
+緹
+緻
+縁
+縄
+縈
+縛
+縝
+縣
+縫
+縮
+縱
+縴
+縷
+總
+績
+繁
+繃
+繆
+繇
+繋
+織
+繕
+繚
+繞
+繡
+繩
+繪
+繫
+繭
+繳
+繹
+繼
+繽
+纂
+續
+纍
+纏
+纓
+纔
+纖
+纜
+纠
+红
+纣
+纤
+约
+级
+纨
+纪
+纫
+纬
+纭
+纯
+纰
+纱
+纲
+纳
+纵
+纶
+纷
+纸
+纹
+纺
+纽
+纾
+线
+绀
+练
+组
+绅
+细
+织
+终
+绊
+绍
+绎
+经
+绑
+绒
+结
+绔
+绕
+绘
+给
+绚
+绛
+络
+绝
+绞
+统
+绡
+绢
+绣
+绥
+绦
+继
+绩
+绪
+绫
+续
+绮
+绯
+绰
+绳
+维
+绵
+绶
+绷
+绸
+绻
+综
+绽
+绾
+绿
+缀
+缄
+缅
+缆
+缇
+缈
+缉
+缎
+缓
+缔
+缕
+编
+缘
+缙
+缚
+缜
+缝
+缠
+缢
+缤
+缥
+缨
+缩
+缪
+缭
+缮
+缰
+缱
+缴
+缸
+缺
+缽
+罂
+罄
+罌
+罐
+网
+罔
+罕
+罗
+罚
+罡
+罢
+罩
+罪
+置
+罰
+署
+罵
+罷
+罹
+羁
+羅
+羈
+羊
+羌
+美
+羔
+羚
+羞
+羟
+羡
+羣
+群
+羥
+羧
+羨
+義
+羯
+羲
+羸
+羹
+羽
+羿
+翁
+翅
+翊
+翌
+翎
+習
+翔
+翘
+翟
+翠
+翡
+翦
+翩
+翰
+翱
+翳
+翹
+翻
+翼
+耀
+老
+考
+耄
+者
+耆
+耋
+而
+耍
+耐
+耒
+耕
+耗
+耘
+耙
+耦
+耨
+耳
+耶
+耷
+耸
+耻
+耽
+耿
+聂
+聆
+聊
+聋
+职
+聒
+联
+聖
+聘
+聚
+聞
+聪
+聯
+聰
+聲
+聳
+聴
+聶
+職
+聽
+聾
+聿
+肃
+肄
+肅
+肆
+肇
+肉
+肋
+肌
+肏
+肓
+肖
+肘
+肚
+肛
+肝
+肠
+股
+肢
+肤
+肥
+肩
+肪
+肮
+肯
+肱
+育
+肴
+肺
+肽
+肾
+肿
+胀
+胁
+胃
+胄
+胆
+背
+胍
+胎
+胖
+胚
+胛
+胜
+胝
+胞
+胡
+胤
+胥
+胧
+胫
+胭
+胯
+胰
+胱
+胳
+胴
+胶
+胸
+胺
+能
+脂
+脅
+脆
+脇
+脈
+脉
+脊
+脍
+脏
+脐
+脑
+脓
+脖
+脘
+脚
+脛
+脣
+脩
+脫
+脯
+脱
+脲
+脳
+脸
+脹
+脾
+腆
+腈
+腊
+腋
+腌
+腎
+腐
+腑
+腓
+腔
+腕
+腥
+腦
+腩
+腫
+腭
+腮
+腰
+腱
+腳
+腴
+腸
+腹
+腺
+腻
+腼
+腾
+腿
+膀
+膈
+膊
+膏
+膑
+膘
+膚
+膛
+膜
+膝
+膠
+膦
+膨
+膩
+膳
+膺
+膻
+膽
+膾
+膿
+臀
+臂
+臃
+臆
+臉
+臊
+臍
+臓
+臘
+臟
+臣
+臥
+臧
+臨
+自
+臬
+臭
+至
+致
+臺
+臻
+臼
+臾
+舀
+舂
+舅
+舆
+與
+興
+舉
+舊
+舌
+舍
+舎
+舐
+舒
+舔
+舖
+舗
+舛
+舜
+舞
+舟
+航
+舫
+般
+舰
+舱
+舵
+舶
+舷
+舸
+船
+舺
+舾
+艇
+艋
+艘
+艙
+艦
+艮
+良
+艰
+艱
+色
+艳
+艷
+艹
+艺
+艾
+节
+芃
+芈
+芊
+芋
+芍
+芎
+芒
+芙
+芜
+芝
+芡
+芥
+芦
+芩
+芪
+芫
+芬
+芭
+芮
+芯
+花
+芳
+芷
+芸
+芹
+芻
+芽
+芾
+苁
+苄
+苇
+苋
+苍
+苏
+苑
+苒
+苓
+苔
+苕
+苗
+苛
+苜
+苞
+苟
+苡
+苣
+若
+苦
+苫
+苯
+英
+苷
+苹
+苻
+茁
+茂
+范
+茄
+茅
+茉
+茎
+茏
+茗
+茜
+茧
+茨
+茫
+茬
+茭
+茯
+茱
+茲
+茴
+茵
+茶
+茸
+茹
+茼
+荀
+荃
+荆
+草
+荊
+荏
+荐
+荒
+荔
+荖
+荘
+荚
+荞
+荟
+荠
+荡
+荣
+荤
+荥
+荧
+荨
+荪
+荫
+药
+荳
+荷
+荸
+荻
+荼
+荽
+莅
+莆
+莉
+莊
+莎
+莒
+莓
+莖
+莘
+莞
+莠
+莢
+莧
+莪
+莫
+莱
+莲
+莴
+获
+莹
+莺
+莽
+莿
+菀
+菁
+菅
+菇
+菈
+菊
+菌
+菏
+菓
+菖
+菘
+菜
+菟
+菠
+菡
+菩
+華
+菱
+菲
+菸
+菽
+萁
+萃
+萄
+萊
+萋
+萌
+萍
+萎
+萘
+萝
+萤
+营
+萦
+萧
+萨
+萩
+萬
+萱
+萵
+萸
+萼
+落
+葆
+葉
+著
+葚
+葛
+葡
+董
+葦
+葩
+葫
+葬
+葭
+葯
+葱
+葳
+葵
+葷
+葺
+蒂
+蒋
+蒐
+蒔
+蒙
+蒜
+蒞
+蒟
+蒡
+蒨
+蒲
+蒸
+蒹
+蒻
+蒼
+蒿
+蓁
+蓄
+蓆
+蓉
+蓋
+蓑
+蓓
+蓖
+蓝
+蓟
+蓦
+蓬
+蓮
+蓼
+蓿
+蔑
+蔓
+蔔
+蔗
+蔘
+蔚
+蔡
+蔣
+蔥
+蔫
+蔬
+蔭
+蔵
+蔷
+蔺
+蔻
+蔼
+蔽
+蕁
+蕃
+蕈
+蕉
+蕊
+蕎
+蕙
+蕤
+蕨
+蕩
+蕪
+蕭
+蕲
+蕴
+蕻
+蕾
+薄
+薅
+薇
+薈
+薊
+薏
+薑
+薔
+薙
+薛
+薦
+薨
+薩
+薪
+薬
+薯
+薰
+薹
+藉
+藍
+藏
+藐
+藓
+藕
+藜
+藝
+藤
+藥
+藩
+藹
+藻
+藿
+蘆
+蘇
+蘊
+蘋
+蘑
+蘚
+蘭
+蘸
+蘼
+蘿
+虎
+虏
+虐
+虑
+虔
+處
+虚
+虛
+虜
+虞
+號
+虢
+虧
+虫
+虬
+虱
+虹
+虻
+虽
+虾
+蚀
+蚁
+蚂
+蚊
+蚌
+蚓
+蚕
+蚜
+蚝
+蚣
+蚤
+蚩
+蚪
+蚯
+蚱
+蚵
+蛀
+蛆
+蛇
+蛊
+蛋
+蛎
+蛐
+蛔
+蛙
+蛛
+蛟
+蛤
+蛭
+蛮
+蛰
+蛳
+蛹
+蛻
+蛾
+蜀
+蜂
+蜃
+蜆
+蜇
+蜈
+蜊
+蜍
+蜒
+蜓
+蜕
+蜗
+蜘
+蜚
+蜜
+蜡
+蜢
+蜥
+蜱
+蜴
+蜷
+蜻
+蜿
+蝇
+蝈
+蝉
+蝌
+蝎
+蝕
+蝗
+蝙
+蝟
+蝠
+蝦
+蝨
+蝴
+蝶
+蝸
+蝼
+螂
+螃
+融
+螞
+螢
+螨
+螯
+螳
+螺
+蟀
+蟄
+蟆
+蟋
+蟎
+蟑
+蟒
+蟠
+蟬
+蟲
+蟹
+蟻
+蟾
+蠅
+蠍
+蠔
+蠕
+蠛
+蠟
+蠡
+蠢
+蠣
+蠱
+蠶
+蠹
+蠻
+血
+衄
+衅
+衆
+行
+衍
+術
+衔
+街
+衙
+衛
+衝
+衞
+衡
+衢
+衣
+补
+表
+衩
+衫
+衬
+衮
+衰
+衲
+衷
+衹
+衾
+衿
+袁
+袂
+袄
+袅
+袈
+袋
+袍
+袒
+袖
+袜
+袞
+袤
+袪
+被
+袭
+袱
+裁
+裂
+装
+裆
+裊
+裏
+裔
+裕
+裘
+裙
+補
+裝
+裟
+裡
+裤
+裨
+裱
+裳
+裴
+裸
+裹
+製
+裾
+褂
+複
+褐
+褒
+褓
+褔
+褚
+褥
+褪
+褫
+褲
+褶
+褻
+襁
+襄
+襟
+襠
+襪
+襬
+襯
+襲
+西
+要
+覃
+覆
+覇
+見
+規
+覓
+視
+覚
+覦
+覧
+親
+覬
+観
+覷
+覺
+覽
+觀
+见
+观
+规
+觅
+视
+览
+觉
+觊
+觎
+觐
+觑
+角
+觞
+解
+觥
+触
+觸
+言
+訂
+計
+訊
+討
+訓
+訕
+訖
+託
+記
+訛
+訝
+訟
+訣
+訥
+訪
+設
+許
+訳
+訴
+訶
+診
+註
+証
+詆
+詐
+詔
+評
+詛
+詞
+詠
+詡
+詢
+詣
+試
+詩
+詫
+詬
+詭
+詮
+詰
+話
+該
+詳
+詹
+詼
+誅
+誇
+誉
+誌
+認
+誓
+誕
+誘
+語
+誠
+誡
+誣
+誤
+誥
+誦
+誨
+說
+説
+読
+誰
+課
+誹
+誼
+調
+諄
+談
+請
+諏
+諒
+論
+諗
+諜
+諡
+諦
+諧
+諫
+諭
+諮
+諱
+諳
+諷
+諸
+諺
+諾
+謀
+謁
+謂
+謄
+謊
+謎
+謐
+謔
+謗
+謙
+講
+謝
+謠
+謨
+謬
+謹
+謾
+譁
+證
+譎
+譏
+識
+譙
+譚
+譜
+警
+譬
+譯
+議
+譲
+譴
+護
+譽
+讀
+變
+讓
+讚
+讞
+计
+订
+认
+讥
+讧
+讨
+让
+讪
+讫
+训
+议
+讯
+记
+讲
+讳
+讴
+讶
+讷
+许
+讹
+论
+讼
+讽
+设
+访
+诀
+证
+诃
+评
+诅
+识
+诈
+诉
+诊
+诋
+词
+诏
+译
+试
+诗
+诘
+诙
+诚
+诛
+话
+诞
+诟
+诠
+诡
+询
+诣
+诤
+该
+详
+诧
+诩
+诫
+诬
+语
+误
+诰
+诱
+诲
+说
+诵
+诶
+请
+诸
+诺
+读
+诽
+课
+诿
+谀
+谁
+调
+谄
+谅
+谆
+谈
+谊
+谋
+谌
+谍
+谎
+谏
+谐
+谑
+谒
+谓
+谔
+谕
+谗
+谘
+谙
+谚
+谛
+谜
+谟
+谢
+谣
+谤
+谥
+谦
+谧
+谨
+谩
+谪
+谬
+谭
+谯
+谱
+谲
+谴
+谶
+谷
+豁
+豆
+豇
+豈
+豉
+豊
+豌
+豎
+豐
+豔
+豚
+象
+豢
+豪
+豫
+豬
+豹
+豺
+貂
+貅
+貌
+貓
+貔
+貘
+貝
+貞
+負
+財
+貢
+貧
+貨
+販
+貪
+貫
+責
+貯
+貰
+貳
+貴
+貶
+買
+貸
+費
+貼
+貽
+貿
+賀
+賁
+賂
+賃
+賄
+資
+賈
+賊
+賑
+賓
+賜
+賞
+賠
+賡
+賢
+賣
+賤
+賦
+質
+賬
+賭
+賴
+賺
+購
+賽
+贅
+贈
+贊
+贍
+贏
+贓
+贖
+贛
+贝
+贞
+负
+贡
+财
+责
+贤
+败
+账
+货
+质
+贩
+贪
+贫
+贬
+购
+贮
+贯
+贰
+贱
+贲
+贴
+贵
+贷
+贸
+费
+贺
+贻
+贼
+贾
+贿
+赁
+赂
+赃
+资
+赅
+赈
+赊
+赋
+赌
+赎
+赏
+赐
+赓
+赔
+赖
+赘
+赚
+赛
+赝
+赞
+赠
+赡
+赢
+赣
+赤
+赦
+赧
+赫
+赭
+走
+赳
+赴
+赵
+赶
+起
+趁
+超
+越
+趋
+趕
+趙
+趟
+趣
+趨
+足
+趴
+趵
+趸
+趺
+趾
+跃
+跄
+跆
+跋
+跌
+跎
+跑
+跖
+跚
+跛
+距
+跟
+跡
+跤
+跨
+跩
+跪
+路
+跳
+践
+跷
+跹
+跺
+跻
+踉
+踊
+踌
+踏
+踐
+踝
+踞
+踟
+踢
+踩
+踪
+踮
+踱
+踴
+踵
+踹
+蹂
+蹄
+蹇
+蹈
+蹉
+蹊
+蹋
+蹑
+蹒
+蹙
+蹟
+蹣
+蹤
+蹦
+蹩
+蹬
+蹭
+蹲
+蹴
+蹶
+蹺
+蹼
+蹿
+躁
+躇
+躉
+躊
+躋
+躍
+躏
+躪
+身
+躬
+躯
+躲
+躺
+軀
+車
+軋
+軌
+軍
+軒
+軟
+転
+軸
+軼
+軽
+軾
+較
+載
+輒
+輓
+輔
+輕
+輛
+輝
+輟
+輩
+輪
+輯
+輸
+輻
+輾
+輿
+轄
+轅
+轆
+轉
+轍
+轎
+轟
+车
+轧
+轨
+轩
+转
+轭
+轮
+软
+轰
+轲
+轴
+轶
+轻
+轼
+载
+轿
+较
+辄
+辅
+辆
+辇
+辈
+辉
+辊
+辍
+辐
+辑
+输
+辕
+辖
+辗
+辘
+辙
+辛
+辜
+辞
+辟
+辣
+辦
+辨
+辩
+辫
+辭
+辮
+辯
+辰
+辱
+農
+边
+辺
+辻
+込
+辽
+达
+迁
+迂
+迄
+迅
+过
+迈
+迎
+运
+近
+返
+还
+这
+进
+远
+违
+连
+迟
+迢
+迤
+迥
+迦
+迩
+迪
+迫
+迭
+述
+迴
+迷
+迸
+迹
+迺
+追
+退
+送
+适
+逃
+逅
+逆
+选
+逊
+逍
+透
+逐
+递
+途
+逕
+逗
+這
+通
+逛
+逝
+逞
+速
+造
+逢
+連
+逮
+週
+進
+逵
+逶
+逸
+逻
+逼
+逾
+遁
+遂
+遅
+遇
+遊
+運
+遍
+過
+遏
+遐
+遑
+遒
+道
+達
+違
+遗
+遙
+遛
+遜
+遞
+遠
+遢
+遣
+遥
+遨
+適
+遭
+遮
+遲
+遴
+遵
+遶
+遷
+選
+遺
+遼
+遽
+避
+邀
+邁
+邂
+邃
+還
+邇
+邈
+邊
+邋
+邏
+邑
+邓
+邕
+邛
+邝
+邢
+那
+邦
+邨
+邪
+邬
+邮
+邯
+邰
+邱
+邳
+邵
+邸
+邹
+邺
+邻
+郁
+郅
+郊
+郎
+郑
+郜
+郝
+郡
+郢
+郤
+郦
+郧
+部
+郫
+郭
+郴
+郵
+郷
+郸
+都
+鄂
+鄉
+鄒
+鄔
+鄙
+鄞
+鄢
+鄧
+鄭
+鄰
+鄱
+鄲
+鄺
+酉
+酊
+酋
+酌
+配
+酐
+酒
+酗
+酚
+酝
+酢
+酣
+酥
+酩
+酪
+酬
+酮
+酯
+酰
+酱
+酵
+酶
+酷
+酸
+酿
+醃
+醇
+醉
+醋
+醍
+醐
+醒
+醚
+醛
+醜
+醞
+醣
+醪
+醫
+醬
+醮
+醯
+醴
+醺
+釀
+釁
+采
+釉
+释
+釋
+里
+重
+野
+量
+釐
+金
+釗
+釘
+釜
+針
+釣
+釦
+釧
+釵
+鈀
+鈉
+鈍
+鈎
+鈔
+鈕
+鈞
+鈣
+鈦
+鈪
+鈴
+鈺
+鈾
+鉀
+鉄
+鉅
+鉉
+鉑
+鉗
+鉚
+鉛
+鉤
+鉴
+鉻
+銀
+銃
+銅
+銑
+銓
+銖
+銘
+銜
+銬
+銭
+銮
+銳
+銷
+銹
+鋁
+鋅
+鋒
+鋤
+鋪
+鋰
+鋸
+鋼
+錄
+錐
+錘
+錚
+錠
+錢
+錦
+錨
+錫
+錮
+錯
+録
+錳
+錶
+鍊
+鍋
+鍍
+鍛
+鍥
+鍰
+鍵
+鍺
+鍾
+鎂
+鎊
+鎌
+鎏
+鎔
+鎖
+鎗
+鎚
+鎧
+鎬
+鎮
+鎳
+鏈
+鏖
+鏗
+鏘
+鏞
+鏟
+鏡
+鏢
+鏤
+鏽
+鐘
+鐮
+鐲
+鐳
+鐵
+鐸
+鐺
+鑄
+鑊
+鑑
+鑒
+鑣
+鑫
+鑰
+鑲
+鑼
+鑽
+鑾
+鑿
+针
+钉
+钊
+钎
+钏
+钒
+钓
+钗
+钙
+钛
+钜
+钝
+钞
+钟
+钠
+钡
+钢
+钣
+钤
+钥
+钦
+钧
+钨
+钩
+钮
+钯
+钰
+钱
+钳
+钴
+钵
+钺
+钻
+钼
+钾
+钿
+铀
+铁
+铂
+铃
+铄
+铅
+铆
+铉
+铎
+铐
+铛
+铜
+铝
+铠
+铡
+铢
+铣
+铤
+铨
+铩
+铬
+铭
+铮
+铰
+铲
+铵
+银
+铸
+铺
+链
+铿
+销
+锁
+锂
+锄
+锅
+锆
+锈
+锉
+锋
+锌
+锏
+锐
+锑
+错
+锚
+锟
+锡
+锢
+锣
+锤
+锥
+锦
+锭
+键
+锯
+锰
+锲
+锵
+锹
+锺
+锻
+镀
+镁
+镂
+镇
+镉
+镌
+镍
+镐
+镑
+镕
+镖
+镗
+镛
+镜
+镣
+镭
+镯
+镰
+镳
+镶
+長
+长
+門
+閃
+閉
+開
+閎
+閏
+閑
+閒
+間
+閔
+閘
+閡
+関
+閣
+閥
+閨
+閩
+閱
+閲
+閹
+閻
+閾
+闆
+闇
+闊
+闌
+闍
+闔
+闕
+闖
+闘
+關
+闡
+闢
+门
+闪
+闫
+闭
+问
+闯
+闰
+闲
+间
+闵
+闷
+闸
+闹
+闺
+闻
+闽
+闾
+阀
+阁
+阂
+阅
+阆
+阇
+阈
+阉
+阎
+阐
+阑
+阔
+阕
+阖
+阙
+阚
+阜
+队
+阡
+阪
+阮
+阱
+防
+阳
+阴
+阵
+阶
+阻
+阿
+陀
+陂
+附
+际
+陆
+陇
+陈
+陋
+陌
+降
+限
+陕
+陛
+陝
+陞
+陟
+陡
+院
+陣
+除
+陨
+险
+陪
+陰
+陲
+陳
+陵
+陶
+陷
+陸
+険
+陽
+隅
+隆
+隈
+隊
+隋
+隍
+階
+随
+隐
+隔
+隕
+隘
+隙
+際
+障
+隠
+隣
+隧
+隨
+險
+隱
+隴
+隶
+隸
+隻
+隼
+隽
+难
+雀
+雁
+雄
+雅
+集
+雇
+雉
+雋
+雌
+雍
+雎
+雏
+雑
+雒
+雕
+雖
+雙
+雛
+雜
+雞
+離
+難
+雨
+雪
+雯
+雰
+雲
+雳
+零
+雷
+雹
+電
+雾
+需
+霁
+霄
+霆
+震
+霈
+霉
+霊
+霍
+霎
+霏
+霑
+霓
+霖
+霜
+霞
+霧
+霭
+霰
+露
+霸
+霹
+霽
+霾
+靂
+靄
+靈
+青
+靓
+靖
+静
+靚
+靛
+靜
+非
+靠
+靡
+面
+靥
+靦
+革
+靳
+靴
+靶
+靼
+鞅
+鞋
+鞍
+鞏
+鞑
+鞘
+鞠
+鞣
+鞦
+鞭
+韆
+韋
+韌
+韓
+韜
+韦
+韧
+韩
+韬
+韭
+音
+韵
+韶
+韻
+響
+頁
+頂
+頃
+項
+順
+須
+頌
+預
+頑
+頒
+頓
+頗
+領
+頜
+頡
+頤
+頫
+頭
+頰
+頷
+頸
+頹
+頻
+頼
+顆
+題
+額
+顎
+顏
+顔
+願
+顛
+類
+顧
+顫
+顯
+顱
+顴
+页
+顶
+顷
+项
+顺
+须
+顼
+顽
+顾
+顿
+颁
+颂
+预
+颅
+领
+颇
+颈
+颉
+颊
+颌
+颍
+颐
+频
+颓
+颔
+颖
+颗
+题
+颚
+颛
+颜
+额
+颞
+颠
+颡
+颢
+颤
+颦
+颧
+風
+颯
+颱
+颳
+颶
+颼
+飄
+飆
+风
+飒
+飓
+飕
+飘
+飙
+飚
+飛
+飞
+食
+飢
+飨
+飩
+飪
+飯
+飲
+飼
+飽
+飾
+餃
+餅
+餉
+養
+餌
+餐
+餒
+餓
+餘
+餚
+餛
+餞
+餡
+館
+餮
+餵
+餾
+饅
+饈
+饋
+饌
+饍
+饑
+饒
+饕
+饗
+饞
+饥
+饨
+饪
+饬
+饭
+饮
+饯
+饰
+饱
+饲
+饴
+饵
+饶
+饷
+饺
+饼
+饽
+饿
+馀
+馁
+馄
+馅
+馆
+馈
+馋
+馍
+馏
+馒
+馔
+首
+馗
+香
+馥
+馨
+馬
+馭
+馮
+馳
+馴
+駁
+駄
+駅
+駆
+駐
+駒
+駕
+駛
+駝
+駭
+駱
+駿
+騁
+騎
+騏
+験
+騙
+騨
+騰
+騷
+驀
+驅
+驊
+驍
+驒
+驕
+驗
+驚
+驛
+驟
+驢
+驥
+马
+驭
+驮
+驯
+驰
+驱
+驳
+驴
+驶
+驷
+驸
+驹
+驻
+驼
+驾
+驿
+骁
+骂
+骄
+骅
+骆
+骇
+骈
+骊
+骋
+验
+骏
+骐
+骑
+骗
+骚
+骛
+骜
+骞
+骠
+骡
+骤
+骥
+骧
+骨
+骯
+骰
+骶
+骷
+骸
+骼
+髂
+髅
+髋
+髏
+髒
+髓
+體
+髖
+高
+髦
+髪
+髮
+髯
+髻
+鬃
+鬆
+鬍
+鬓
+鬚
+鬟
+鬢
+鬣
+鬥
+鬧
+鬱
+鬼
+魁
+魂
+魄
+魅
+魇
+魍
+魏
+魔
+魘
+魚
+魯
+魷
+鮑
+鮨
+鮪
+鮭
+鮮
+鯉
+鯊
+鯖
+鯛
+鯨
+鯰
+鯽
+鰍
+鰓
+鰭
+鰲
+鰻
+鰾
+鱈
+鱉
+鱔
+鱗
+鱷
+鱸
+鱼
+鱿
+鲁
+鲈
+鲍
+鲑
+鲛
+鲜
+鲟
+鲢
+鲤
+鲨
+鲫
+鲱
+鲲
+鲶
+鲷
+鲸
+鳃
+鳄
+鳅
+鳌
+鳍
+鳕
+鳖
+鳗
+鳝
+鳞
+鳥
+鳩
+鳳
+鳴
+鳶
+鴉
+鴕
+鴛
+鴦
+鴨
+鴻
+鴿
+鵑
+鵜
+鵝
+鵡
+鵬
+鵰
+鵲
+鶘
+鶩
+鶯
+鶴
+鷗
+鷲
+鷹
+鷺
+鸚
+鸞
+鸟
+鸠
+鸡
+鸢
+鸣
+鸥
+鸦
+鸨
+鸪
+鸭
+鸯
+鸳
+鸵
+鸽
+鸾
+鸿
+鹂
+鹃
+鹄
+鹅
+鹈
+鹉
+鹊
+鹌
+鹏
+鹑
+鹕
+鹘
+鹜
+鹞
+鹤
+鹦
+鹧
+鹫
+鹭
+鹰
+鹳
+鹵
+鹹
+鹼
+鹽
+鹿
+麂
+麋
+麒
+麓
+麗
+麝
+麟
+麥
+麦
+麩
+麴
+麵
+麸
+麺
+麻
+麼
+麽
+麾
+黃
+黄
+黍
+黎
+黏
+黑
+黒
+黔
+默
+黛
+黜
+黝
+點
+黠
+黨
+黯
+黴
+鼋
+鼎
+鼐
+鼓
+鼠
+鼬
+鼹
+鼻
+鼾
+齁
+齊
+齋
+齐
+齒
+齡
+齢
+齣
+齦
+齿
+龄
+龅
+龈
+龊
+龋
+龌
+龍
+龐
+龔
+龕
+龙
+龚
+龛
+龜
+龟
+︰
+︱
+︶
+︿
+﹁
+﹂
+﹍
+﹏
+﹐
+﹑
+﹒
+﹔
+﹕
+﹖
+﹗
+﹙
+﹚
+﹝
+﹞
+﹡
+﹣
+!
+"
+#
+$
+%
+&
+'
+(
+)
+*
++
+,
+-
+.
+/
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+:
+;
+<
+=
+>
+?
+@
+[
+\
+]
+^
+_
+`
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+{
+|
+}
+~
+。
+「
+」
+、
+・
+ッ
+ー
+イ
+ク
+シ
+ス
+ト
+ノ
+フ
+ラ
+ル
+ン
+゙
+゚
+ ̄
+¥
+👍
+🔥
+😂
+😎
+...
+yam
+10
+2017
+12
+11
+2016
+20
+30
+15
+06
+lofter
+##s
+2015
+by
+16
+14
+18
+13
+24
+17
+2014
+21
+##0
+22
+19
+25
+23
+com
+100
+00
+05
+2013
+##a
+03
+09
+08
+28
+##2
+50
+01
+04
+##1
+27
+02
+2012
+##3
+26
+##e
+07
+##8
+##5
+##6
+##4
+##9
+##7
+29
+2011
+40
+##t
+2010
+##o
+##d
+##i
+2009
+##n
+app
+www
+the
+##m
+31
+##c
+##l
+##y
+##r
+##g
+2008
+60
+http
+200
+qq
+##p
+80
+##f
+google
+pixnet
+90
+cookies
+tripadvisor
+500
+##er
+##k
+35
+##h
+facebook
+2007
+2000
+70
+##b
+of
+##x
+##u
+45
+300
+iphone
+32
+1000
+2006
+48
+ip
+36
+in
+38
+3d
+##w
+##ing
+55
+ctrip
+##on
+##v
+33
+##の
+to
+34
+400
+id
+2005
+it
+37
+windows
+llc
+top
+99
+42
+39
+000
+led
+at
+##an
+41
+51
+52
+46
+49
+43
+53
+44
+##z
+android
+58
+and
+59
+2004
+56
+vr
+##か
+5000
+2003
+47
+blogthis
+twitter
+54
+##le
+150
+ok
+2018
+57
+75
+cn
+no
+ios
+##in
+##mm
+##00
+800
+on
+te
+3000
+65
+2001
+360
+95
+ig
+lv
+120
+##ng
+##を
+##us
+##に
+pc
+てす
+──
+600
+##te
+85
+2002
+88
+##ed
+html
+ncc
+wifi
+email
+64
+blog
+is
+##10
+##て
+mail
+online
+##al
+dvd
+##ic
+studio
+##は
+##℃
+##ia
+##と
+line
+vip
+72
+##q
+98
+##ce
+##en
+for
+##is
+##ra
+##es
+##j
+usb
+net
+cp
+1999
+asia
+4g
+##cm
+diy
+new
+3c
+##お
+ta
+66
+language
+vs
+apple
+tw
+86
+web
+##ne
+ipad
+62
+you
+##re
+101
+68
+##tion
+ps
+de
+bt
+pony
+atm
+##2017
+1998
+67
+##ch
+ceo
+##or
+go
+##na
+av
+pro
+cafe
+96
+pinterest
+97
+63
+pixstyleme3c
+##ta
+more
+said
+##2016
+1997
+mp3
+700
+##ll
+nba
+jun
+##20
+92
+tv
+1995
+pm
+61
+76
+nbsp
+250
+##ie
+linux
+##ma
+cd
+110
+hd
+##17
+78
+##ion
+77
+6000
+am
+##th
+##st
+94
+##se
+##et
+69
+180
+gdp
+my
+105
+81
+abc
+89
+flash
+79
+one
+93
+1990
+1996
+##ck
+gps
+##も
+##ly
+web885
+106
+2020
+91
+##ge
+4000
+1500
+xd
+boss
+isbn
+1994
+org
+##ry
+me
+love
+##11
+0fork
+73
+##12
+3g
+##ter
+##ar
+71
+82
+##la
+hotel
+130
+1970
+pk
+83
+87
+140
+ie
+##os
+##30
+##el
+74
+##50
+seo
+cpu
+##ml
+p2p
+84
+may
+##る
+sun
+tue
+internet
+cc
+posted
+youtube
+##at
+##ン
+##man
+ii
+##ル
+##15
+abs
+nt
+pdf
+yahoo
+ago
+1980
+##it
+news
+mac
+104
+##てす
+##me
+##り
+java
+1992
+spa
+##de
+##nt
+hk
+all
+plus
+la
+1993
+##mb
+##16
+##ve
+west
+##da
+160
+air
+##い
+##ps
+から
+##to
+1989
+logo
+htc
+php
+https
+fi
+momo
+##son
+sat
+##ke
+##80
+ebd
+suv
+wi
+day
+apk
+##88
+##um
+mv
+galaxy
+wiki
+or
+brake
+##ス
+1200
+する
+this
+1991
+mon
+##こ
+❤2017
+po
+##ない
+javascript
+life
+home
+june
+##ss
+system
+900
+##ー
+##0
+pp
+1988
+world
+fb
+4k
+br
+##as
+ic
+ai
+leonardo
+safari
+##60
+live
+free
+xx
+wed
+win7
+kiehl
+##co
+lg
+o2o
+##go
+us
+235
+1949
+mm
+しい
+vfm
+kanye
+##90
+##2015
+##id
+jr
+##ey
+123
+rss
+##sa
+##ro
+##am
+##no
+thu
+fri
+350
+##sh
+##ki
+103
+comments
+name
+##のて
+##pe
+##ine
+max
+1987
+8000
+uber
+##mi
+##ton
+wordpress
+office
+1986
+1985
+##ment
+107
+bd
+win10
+##ld
+##li
+gmail
+bb
+dior
+##rs
+##ri
+##rd
+##ます
+up
+cad
+##®
+dr
+して
+read
+##21
+をお
+##io
+##99
+url
+1984
+pvc
+paypal
+show
+policy
+##40
+##ty
+##18
+with
+##★
+##01
+txt
+102
+##ba
+dna
+from
+post
+mini
+ar
+taiwan
+john
+##ga
+privacy
+agoda
+##13
+##ny
+word
+##24
+##22
+##by
+##ur
+##hz
+1982
+##ang
+265
+cookie
+netscape
+108
+##ka
+##~
+##ad
+house
+share
+note
+ibm
+code
+hello
+nike
+sim
+survey
+##016
+1979
+1950
+wikia
+##32
+##017
+5g
+cbc
+##tor
+##kg
+1983
+##rt
+##14
+campaign
+store
+2500
+os
+##ct
+##ts
+##°
+170
+api
+##ns
+365
+excel
+##な
+##ao
+##ら
+##し
+~~
+##nd
+university
+163
+には
+518
+##70
+##ya
+##il
+##25
+pierre
+ipo
+0020
+897
+##23
+hotels
+##ian
+のお
+125
+years
+6606
+##ers
+##26
+high
+##day
+time
+##ay
+bug
+##line
+##く
+##す
+##be
+xp
+talk2yam
+yamservice
+10000
+coco
+##dy
+sony
+##ies
+1978
+microsoft
+david
+people
+##ha
+1960
+instagram
+intel
+その
+##ot
+iso
+1981
+##va
+115
+##mo
+##land
+xxx
+man
+co
+ltxsw
+##ation
+baby
+220
+##pa
+##ol
+1945
+7000
+tag
+450
+##ue
+msn
+##31
+oppo
+##ト
+##ca
+control
+##om
+st
+chrome
+##ure
+##ん
+be
+##き
+lol
+##19
+した
+##bo
+240
+lady
+##100
+##way
+##から
+4600
+##ko
+##do
+##un
+4s
+corporation
+168
+##ni
+herme
+##28
+cp
+978
+##up
+##06
+ui
+##ds
+ppt
+admin
+three
+します
+bbc
+re
+128
+##48
+ca
+##015
+##35
+hp
+##ee
+tpp
+##た
+##ive
+××
+root
+##cc
+##ました
+##ble
+##ity
+adobe
+park
+114
+et
+oled
+city
+##ex
+##ler
+##ap
+china
+##book
+20000
+view
+##ice
+global
+##km
+your
+hong
+##mg
+out
+##ms
+ng
+ebay
+##29
+menu
+ubuntu
+##cy
+rom
+##view
+open
+ktv
+do
+server
+##lo
+if
+english
+##ね
+##5
+##oo
+1600
+##02
+step1
+kong
+club
+135
+july
+inc
+1976
+mr
+hi
+##net
+touch
+##ls
+##ii
+michael
+lcd
+##05
+##33
+phone
+james
+step2
+1300
+ios9
+##box
+dc
+##2
+##ley
+samsung
+111
+280
+pokemon
+css
+##ent
+##les
+いいえ
+##1
+s8
+atom
+play
+bmw
+##said
+sa
+etf
+ctrl
+♥yoyo♥
+##55
+2025
+##2014
+##66
+adidas
+amazon
+1958
+##ber
+##ner
+visa
+##77
+##der
+1800
+connectivity
+##hi
+firefox
+109
+118
+hr
+so
+style
+mark
+pop
+ol
+skip
+1975
+as
+##27
+##ir
+##61
+190
+mba
+##う
+##ai
+le
+##ver
+1900
+cafe2017
+lte
+super
+113
+129
+##ron
+amd
+like
+##☆
+are
+##ster
+we
+##sk
+paul
+data
+international
+##ft
+longchamp
+ssd
+good
+##ート
+##ti
+reply
+##my
+↓↓↓
+apr
+star
+##ker
+source
+136
+js
+112
+get
+force
+photo
+##one
+126
+##2013
+##ow
+link
+bbs
+1972
+goods
+##lin
+python
+119
+##ip
+game
+##ics
+##ません
+blue
+##●
+520
+##45
+page
+itunes
+##03
+1955
+260
+1968
+gt
+gif
+618
+##ff
+##47
+group
+くたさい
+about
+bar
+ganji
+##nce
+music
+lee
+not
+1977
+1971
+1973
+##per
+an
+faq
+comment
+##って
+days
+##ock
+116
+##bs
+1974
+1969
+v1
+player
+1956
+xbox
+sql
+fm
+f1
+139
+##ah
+210
+##lv
+##mp
+##000
+melody
+1957
+##3
+550
+17life
+199
+1966
+xml
+market
+##au
+##71
+999
+##04
+what
+gl
+##95
+##age
+tips
+##68
+book
+##ting
+mysql
+can
+1959
+230
+##ung
+wonderland
+watch
+10℃
+##ction
+9000
+mar
+mobile
+1946
+1962
+article
+##db
+part
+▲top
+party
+って
+1967
+1964
+1948
+##07
+##ore
+##op
+この
+dj
+##78
+##38
+010
+main
+225
+1965
+##ong
+art
+320
+ad
+134
+020
+##73
+117
+pm2
+japan
+228
+##08
+ts
+1963
+##ica
+der
+sm
+##36
+2019
+##wa
+ct
+##7
+##や
+##64
+1937
+homemesh
+search
+##85
+##れは
+##tv
+##di
+macbook
+##9
+##くたさい
+service
+##♥
+type
+った
+750
+##ier
+##si
+##75
+##います
+##ok
+best
+##ット
+goris
+lock
+##った
+cf
+3m
+big
+##ut
+ftp
+carol
+##vi
+10
+1961
+happy
+sd
+##ac
+122
+anti
+pe
+cnn
+iii
+1920
+138
+##ラ
+1940
+esp
+jan
+tags
+##98
+##51
+august
+vol
+##86
+154
+##™
+##fs
+##れ
+##sion
+design
+ac
+##ム
+press
+jordan
+ppp
+that
+key
+check
+##6
+##tt
+##㎡
+1080p
+##lt
+power
+##42
+1952
+##bc
+vivi
+##ック
+he
+133
+121
+jpg
+##rry
+201
+175
+3500
+1947
+nb
+##ted
+##rn
+しています
+1954
+usd
+##t00
+master
+##ンク
+001
+model
+##58
+al
+##09
+1953
+##34
+ram
+goo
+ても
+##ui
+127
+1930
+red
+##ary
+rpg
+item
+##pm
+##41
+270
+##za
+project
+##2012
+hot
+td
+blogabstract
+##ger
+##62
+650
+##44
+gr2
+##します
+##m
+black
+electronic
+nfc
+year
+asus
+また
+html5
+cindy
+##hd
+m3
+132
+esc
+##od
+booking
+##53
+fed
+tvb
+##81
+##ina
+mit
+165
+##いる
+chan
+192
+distribution
+next
+になる
+peter
+bios
+steam
+cm
+1941
+にも
+pk10
+##ix
+##65
+##91
+dec
+nasa
+##ana
+icecat
+00z
+b1
+will
+##46
+li
+se
+##ji
+##み
+##ard
+oct
+##ain
+jp
+##ze
+##bi
+cio
+##56
+smart
+h5
+##39
+##port
+curve
+vpn
+##nm
+##dia
+utc
+##あり
+12345678910
+##52
+rmvb
+chanel
+a4
+miss
+##and
+##im
+media
+who
+##63
+she
+girl
+5s
+124
+vera
+##して
+class
+vivo
+king
+##フ
+##ei
+national
+ab
+1951
+5cm
+888
+145
+ipod
+ap
+1100
+5mm
+211
+ms
+2756
+##69
+mp4
+msci
+##po
+##89
+131
+mg
+index
+380
+##bit
+##out
+##zz
+##97
+##67
+158
+apec
+##8
+photoshop
+opec
+¥799
+ては
+##96
+##tes
+##ast
+2g
+○○
+##ール
+¥2899
+##ling
+##よ
+##ory
+1938
+##ical
+kitty
+content
+##43
+step3
+##cn
+win8
+155
+vc
+1400
+iphone7
+robert
+##した
+tcl
+137
+beauty
+##87
+en
+dollars
+##ys
+##oc
+step
+pay
+yy
+a1
+##2011
+##lly
+##ks
+##♪
+1939
+188
+download
+1944
+sep
+exe
+ph
+います
+school
+gb
+center
+pr
+street
+##board
+uv
+##37
+##lan
+winrar
+##que
+##ua
+##com
+1942
+1936
+480
+gpu
+##4
+ettoday
+fu
+tom
+##54
+##ren
+##via
+149
+##72
+b2b
+144
+##79
+##tch
+rose
+arm
+mb
+##49
+##ial
+##nn
+nvidia
+step4
+mvp
+00㎡
+york
+156
+##イ
+how
+cpi
+591
+2765
+gov
+kg
+joe
+##xx
+mandy
+pa
+##ser
+copyright
+fashion
+1935
+don
+##け
+ecu
+##ist
+##art
+erp
+wap
+have
+##lm
+talk
+##ek
+##ning
+##if
+ch
+##ite
+video
+1943
+cs
+san
+iot
+look
+##84
+##2010
+##ku
+october
+##ux
+trump
+##hs
+##ide
+box
+141
+first
+##ins
+april
+##ight
+##83
+185
+angel
+protected
+aa
+151
+162
+x1
+m2
+##fe
+##×
+##ho
+size
+143
+min
+ofo
+fun
+gomaji
+ex
+hdmi
+food
+dns
+march
+chris
+kevin
+##のか
+##lla
+##pp
+##ec
+ag
+ems
+6s
+720p
+##rm
+##ham
+off
+##92
+asp
+team
+fandom
+ed
+299
+▌♥
+##ell
+info
+されています
+##82
+sina
+4066
+161
+##able
+##ctor
+330
+399
+315
+dll
+rights
+ltd
+idc
+jul
+3kg
+1927
+142
+ma
+surface
+##76
+##ク
+~~~
+304
+mall
+eps
+146
+green
+##59
+map
+space
+donald
+v2
+sodu
+##light
+1931
+148
+1700
+まて
+310
+reserved
+htm
+##han
+##57
+2d
+178
+mod
+##ise
+##tions
+152
+ti
+##shi
+doc
+1933
+icp
+055
+wang
+##ram
+shopping
+aug
+##pi
+##well
+now
+wam
+b2
+からお
+##hu
+236
+1928
+##gb
+266
+f2
+##93
+153
+mix
+##ef
+##uan
+bwl
+##plus
+##res
+core
+##ess
+tea
+5℃
+hktvmall
+nhk
+##ate
+list
+##ese
+301
+feb
+4m
+inn
+ての
+nov
+159
+12345
+daniel
+##ci
+pass
+##bet
+##nk
+coffee
+202
+ssl
+airbnb
+##ute
+fbi
+woshipm
+skype
+ea
+cg
+sp
+##fc
+##www
+yes
+edge
+alt
+007
+##94
+fpga
+##ght
+##gs
+iso9001
+さい
+##ile
+##wood
+##uo
+image
+lin
+icon
+american
+##em
+1932
+set
+says
+##king
+##tive
+blogger
+##74
+なと
+256
+147
+##ox
+##zy
+##red
+##ium
+##lf
+nokia
+claire
+##リ
+##ding
+november
+lohas
+##500
+##tic
+##マ
+##cs
+##ある
+##che
+##ire
+##gy
+##ult
+db
+january
+win
+##カ
+166
+road
+ptt
+##ま
+##つ
+198
+##fa
+##mer
+anna
+pchome
+はい
+udn
+ef
+420
+##time
+##tte
+2030
+##ア
+g20
+white
+かかります
+1929
+308
+garden
+eleven
+di
+##おります
+chen
+309b
+777
+172
+young
+cosplay
+ちてない
+4500
+bat
+##123
+##tra
+##ては
+kindle
+npc
+steve
+etc
+##ern
+##|
+call
+xperia
+ces
+travel
+sk
+s7
+##ous
+1934
+##int
+みいたたけます
+183
+edu
+file
+cho
+qr
+##car
+##our
+186
+##ant
+##d
+eric
+1914
+rends
+##jo
+##する
+mastercard
+##2000
+kb
+##min
+290
+##ino
+vista
+##ris
+##ud
+jack
+2400
+##set
+169
+pos
+1912
+##her
+##ou
+taipei
+しく
+205
+beta
+##ませんか
+232
+##fi
+express
+255
+body
+##ill
+aphojoy
+user
+december
+meiki
+##ick
+tweet
+richard
+##av
+##ᆫ
+iphone6
+##dd
+ちてすか
+views
+##mark
+321
+pd
+##00
+times
+##▲
+level
+##ash
+10g
+point
+5l
+##ome
+208
+koreanmall
+##ak
+george
+q2
+206
+wma
+tcp
+##200
+スタッフ
+full
+mlb
+##lle
+##watch
+tm
+run
+179
+911
+smith
+business
+##und
+1919
+color
+##tal
+222
+171
+##less
+moon
+4399
+##rl
+update
+pcb
+shop
+499
+157
+little
+なし
+end
+##mhz
+van
+dsp
+easy
+660
+##house
+##key
+history
+##o
+oh
+##001
+##hy
+##web
+oem
+let
+was
+##2009
+##gg
+review
+##wan
+182
+##°c
+203
+uc
+title
+##val
+united
+233
+2021
+##ons
+doi
+trivago
+overdope
+sbs
+##ance
+##ち
+grand
+special
+573032185
+imf
+216
+wx17house
+##so
+##ーム
+audi
+##he
+london
+william
+##rp
+##ake
+science
+beach
+cfa
+amp
+ps4
+880
+##800
+##link
+##hp
+crm
+ferragamo
+bell
+make
+##eng
+195
+under
+zh
+photos
+2300
+##style
+##ント
+via
+176
+da
+##gi
+company
+i7
+##ray
+thomas
+370
+ufo
+i5
+##max
+plc
+ben
+back
+research
+8g
+173
+mike
+##pc
+##ッフ
+september
+189
+##ace
+vps
+february
+167
+pantos
+wp
+lisa
+1921
+★★
+jquery
+night
+long
+offer
+##berg
+##news
+1911
+##いて
+ray
+fks
+wto
+せます
+over
+164
+340
+##all
+##rus
+1924
+##888
+##works
+blogtitle
+loftpermalink
+##→
+187
+martin
+test
+ling
+km
+##め
+15000
+fda
+v3
+##ja
+##ロ
+wedding
+かある
+outlet
+family
+##ea
+をこ
+##top
+story
+##ness
+salvatore
+##lu
+204
+swift
+215
+room
+している
+oracle
+##ul
+1925
+sam
+b2c
+week
+pi
+rock
+##のは
+##a
+##けと
+##ean
+##300
+##gle
+cctv
+after
+chinese
+##back
+powered
+x2
+##tan
+1918
+##nes
+##イン
+canon
+only
+181
+##zi
+##las
+say
+##oe
+184
+##sd
+221
+##bot
+##world
+##zo
+sky
+made
+top100
+just
+1926
+pmi
+802
+234
+gap
+##vr
+177
+les
+174
+▲topoct
+ball
+vogue
+vi
+ing
+ofweek
+cos
+##list
+##ort
+▲topmay
+##なら
+##lon
+として
+last
+##tc
+##of
+##bus
+##gen
+real
+eva
+##コ
+a3
+nas
+##lie
+##ria
+##coin
+##bt
+▲topapr
+his
+212
+cat
+nata
+vive
+health
+⋯⋯
+drive
+sir
+▲topmar
+du
+cup
+##カー
+##ook
+##よう
+##sy
+alex
+msg
+tour
+しました
+3ce
+##word
+193
+ebooks
+r8
+block
+318
+##より
+2200
+nice
+pvp
+207
+months
+1905
+rewards
+##ther
+1917
+0800
+##xi
+##チ
+##sc
+micro
+850
+gg
+blogfp
+op
+1922
+daily
+m1
+264
+true
+##bb
+ml
+##tar
+##のお
+##ky
+anthony
+196
+253
+##yo
+state
+218
+##ara
+##aa
+##rc
+##tz
+##ston
+より
+gear
+##eo
+##ade
+ge
+see
+1923
+##win
+##ura
+ss
+heart
+##den
+##ita
+down
+##sm
+el
+png
+2100
+610
+rakuten
+whatsapp
+bay
+dream
+add
+##use
+680
+311
+pad
+gucci
+mpv
+##ode
+##fo
+island
+▲topjun
+##▼
+223
+jason
+214
+chicago
+##❤
+しの
+##hone
+io
+##れる
+##ことか
+sogo
+be2
+##ology
+990
+cloud
+vcd
+##con
+2~3
+##ford
+##joy
+##kb
+##こさいます
+##rade
+but
+##ach
+docker
+##ful
+rfid
+ul
+##ase
+hit
+ford
+##star
+580
+##○
+11
+a2
+sdk
+reading
+edited
+##are
+cmos
+##mc
+238
+siri
+light
+##ella
+##ため
+bloomberg
+##read
+pizza
+##ison
+jimmy
+##vm
+college
+node
+journal
+ba
+18k
+##play
+245
+##cer
+20
+magic
+##yu
+191
+jump
+288
+tt
+##ings
+asr
+##lia
+3200
+step5
+network
+##cd
+mc
+いします
+1234
+pixstyleme
+273
+##600
+2800
+money
+★★★★★
+1280
+12
+430
+bl
+みの
+act
+##tus
+tokyo
+##rial
+##life
+emba
+##ae
+saas
+tcs
+##rk
+##wang
+summer
+##sp
+ko
+##ving
+390
+premium
+##その
+netflix
+##ヒ
+uk
+mt
+##lton
+right
+frank
+two
+209
+える
+##ple
+##cal
+021
+##んな
+##sen
+##ville
+hold
+nexus
+dd
+##ius
+てお
+##mah
+##なく
+tila
+zero
+820
+ce
+##tin
+resort
+##ws
+charles
+old
+p10
+5d
+report
+##360
+##ru
+##には
+bus
+vans
+lt
+##est
+pv
+##レ
+links
+rebecca
+##ツ
+##dm
+azure
+##365
+きな
+limited
+bit
+4gb
+##mon
+1910
+moto
+##eam
+213
+1913
+var
+eos
+なとの
+226
+blogspot
+された
+699
+e3
+dos
+dm
+fc
+##ments
+##ik
+##kw
+boy
+##bin
+##ata
+960
+er
+##せ
+219
+##vin
+##tu
+##ula
+194
+##∥
+station
+##ろ
+##ature
+835
+files
+zara
+hdr
+top10
+nature
+950
+magazine
+s6
+marriott
+##シ
+avira
+case
+##っと
+tab
+##ran
+tony
+##home
+oculus
+im
+##ral
+jean
+saint
+cry
+307
+rosie
+##force
+##ini
+ice
+##bert
+のある
+##nder
+##mber
+pet
+2600
+##◆
+plurk
+▲topdec
+##sis
+00kg
+▲topnov
+720
+##ence
+tim
+##ω
+##nc
+##ても
+##name
+log
+ips
+great
+ikea
+malaysia
+unix
+##イト
+3600
+##ncy
+##nie
+12000
+akb48
+##ye
+##oid
+404
+##chi
+##いた
+oa
+xuehai
+##1000
+##orm
+##rf
+275
+さん
+##ware
+##リー
+980
+ho
+##pro
+text
+##era
+560
+bob
+227
+##ub
+##2008
+8891
+scp
+avi
+##zen
+2022
+mi
+wu
+museum
+qvod
+apache
+lake
+jcb
+▲topaug
+★★★
+ni
+##hr
+hill
+302
+ne
+weibo
+490
+ruby
+##ーシ
+##ヶ
+##row
+4d
+▲topjul
+iv
+##ish
+github
+306
+mate
+312
+##スト
+##lot
+##ane
+andrew
+のハイト
+##tina
+t1
+rf
+ed2k
+##vel
+##900
+way
+final
+りの
+ns
+5a
+705
+197
+##メ
+sweet
+bytes
+##ene
+▲topjan
+231
+##cker
+##2007
+##px
+100g
+topapp
+229
+helpapp
+rs
+low
+14k
+g4g
+care
+630
+ldquo
+あり
+##fork
+leave
+rm
+edition
+##gan
+##zon
+##qq
+▲topsep
+##google
+##ism
+gold
+224
+explorer
+##zer
+toyota
+category
+select
+visual
+##labels
+restaurant
+##md
+posts
+s1
+##ico
+もっと
+angelababy
+123456
+217
+sports
+s3
+mbc
+1915
+してくたさい
+shell
+x86
+candy
+##new
+kbs
+face
+xl
+470
+##here
+4a
+swissinfo
+v8
+▲topfeb
+dram
+##ual
+##vice
+3a
+##wer
+sport
+q1
+ios10
+public
+int
+card
+##c
+ep
+au
+rt
+##れた
+1080
+bill
+##mll
+kim
+30
+460
+wan
+##uk
+##ミ
+x3
+298
+0t
+scott
+##ming
+239
+e5
+##3d
+h7n9
+worldcat
+brown
+##あります
+##vo
+##led
+##580
+##ax
+249
+410
+##ert
+paris
+##~6
+polo
+925
+##lr
+599
+##ナ
+capital
+##hing
+bank
+cv
+1g
+##chat
+##s
+##たい
+adc
+##ule
+2m
+##e
+digital
+hotmail
+268
+##pad
+870
+bbq
+quot
+##ring
+before
+wali
+##まて
+mcu
+2k
+2b
+という
+costco
+316
+north
+333
+switch
+##city
+##p
+philips
+##mann
+management
+panasonic
+##cl
+##vd
+##ping
+##rge
+alice
+##lk
+##ましょう
+css3
+##ney
+vision
+alpha
+##ular
+##400
+##tter
+lz
+にお
+##ありません
+mode
+gre
+1916
+pci
+##tm
+237
+1~2
+##yan
+##そ
+について
+##let
+##キ
+work
+war
+coach
+ah
+mary
+##ᅵ
+huang
+##pt
+a8
+pt
+follow
+##berry
+1895
+##ew
+a5
+ghost
+##ション
+##wn
+##og
+south
+##code
+girls
+##rid
+action
+villa
+git
+r11
+table
+games
+##cket
+error
+##anonymoussaid
+##ag
+here
+##ame
+##gc
+qa
+##■
+##lis
+gmp
+##gin
+vmalife
+##cher
+yu
+wedding
+##tis
+demo
+dragon
+530
+soho
+social
+bye
+##rant
+river
+orz
+acer
+325
+##↑
+##ース
+##ats
+261
+del
+##ven
+440
+ups
+##ように
+##ター
+305
+value
+macd
+yougou
+##dn
+661
+##ano
+ll
+##urt
+##rent
+continue
+script
+##wen
+##ect
+paper
+263
+319
+shift
+##chel
+##フト
+##cat
+258
+x5
+fox
+243
+##さん
+car
+aaa
+##blog
+loading
+##yn
+##tp
+kuso
+799
+si
+sns
+イカせるテンマ
+ヒンクテンマ3
+rmb
+vdc
+forest
+central
+prime
+help
+ultra
+##rmb
+##ような
+241
+square
+688
+##しい
+のないフロクに
+##field
+##reen
+##ors
+##ju
+c1
+start
+510
+##air
+##map
+cdn
+##wo
+cba
+stephen
+m8
+100km
+##get
+opera
+##base
+##ood
+vsa
+com™
+##aw
+##ail
+251
+なのて
+count
+t2
+##ᅡ
+##een
+2700
+hop
+##gp
+vsc
+tree
+##eg
+##ose
+816
+285
+##ories
+##shop
+alphago
+v4
+1909
+simon
+##ᆼ
+fluke62max
+zip
+スホンサー
+##sta
+louis
+cr
+bas
+##~10
+bc
+##yer
+hadoop
+##ube
+##wi
+1906
+0755
+hola
+##low
+place
+centre
+5v
+d3
+##fer
+252
+##750
+##media
+281
+540
+0l
+exchange
+262
+series
+##ハー
+##san
+eb
+##bank
+##k
+q3
+##nge
+##mail
+take
+##lp
+259
+1888
+client
+east
+cache
+event
+vincent
+##ールを
+きを
+##nse
+sui
+855
+adchoice
+##и
+##stry
+##なたの
+246
+##zone
+ga
+apps
+sea
+##ab
+248
+cisco
+##タ
+##rner
+kymco
+##care
+dha
+##pu
+##yi
+minkoff
+royal
+p1
+への
+annie
+269
+collection
+kpi
+playstation
+257
+になります
+866
+bh
+##bar
+queen
+505
+radio
+1904
+andy
+armani
+##xy
+manager
+iherb
+##ery
+##share
+spring
+raid
+johnson
+1908
+##ob
+volvo
+hall
+##ball
+v6
+our
+taylor
+##hk
+bi
+242
+##cp
+kate
+bo
+water
+technology
+##rie
+サイトは
+277
+##ona
+##sl
+hpv
+303
+gtx
+hip
+rdquo
+jayz
+stone
+##lex
+##rum
+namespace
+##やり
+620
+##ale
+##atic
+des
+##erson
+##ql
+##ves
+##type
+enter
+##この
+##てきます
+d2
+##168
+##mix
+##bian
+との
+a9
+jj
+ky
+##lc
+access
+movie
+##hc
+リストに
+tower
+##ration
+##mit
+ます
+##nch
+ua
+tel
+prefix
+##o2
+1907
+##point
+1901
+ott
+~10
+##http
+##ury
+baidu
+##ink
+member
+##logy
+bigbang
+nownews
+##js
+##shot
+##tb
+##こと
+247
+eba
+##tics
+##lus
+ける
+v5
+spark
+##ama
+there
+##ions
+god
+##lls
+##down
+hiv
+##ress
+burberry
+day2
+##kv
+◆◆
+jeff
+related
+film
+edit
+joseph
+283
+##ark
+cx
+32gb
+order
+g9
+30000
+##ans
+##tty
+s5
+##bee
+かあります
+thread
+xr
+buy
+sh
+005
+land
+spotify
+mx
+##ari
+276
+##verse
+×email
+sf
+why
+##ことて
+244
+7headlines
+nego
+sunny
+dom
+exo
+401
+666
+positioning
+fit
+rgb
+##tton
+278
+kiss
+alexa
+adam
+lp
+みリストを
+##g
+mp
+##ties
+##llow
+amy
+##du
+np
+002
+institute
+271
+##rth
+##lar
+2345
+590
+##des
+sidebar
+15
+imax
+site
+##cky
+##kit
+##ime
+##009
+season
+323
+##fun
+##ンター
+##ひ
+gogoro
+a7
+pu
+lily
+fire
+twd600
+##ッセーシを
+いて
+##vis
+30ml
+##cture
+##をお
+information
+##オ
+close
+friday
+##くれる
+yi
+nick
+てすか
+##tta
+##tel
+6500
+##lock
+cbd
+economy
+254
+かお
+267
+tinker
+double
+375
+8gb
+voice
+##app
+oops
+channel
+today
+985
+##right
+raw
+xyz
+##+
+jim
+edm
+##cent
+7500
+supreme
+814
+ds
+##its
+##asia
+dropbox
+##てすか
+##tti
+books
+272
+100ml
+##tle
+##ller
+##ken
+##more
+##boy
+sex
+309
+##dom
+t3
+##ider
+##なります
+##unch
+1903
+810
+feel
+5500
+##かった
+##put
+により
+s2
+mo
+##gh
+men
+ka
+amoled
+div
+##tr
+##n1
+port
+howard
+##tags
+ken
+dnf
+##nus
+adsense
+##а
+ide
+##へ
+buff
+thunder
+##town
+##ique
+has
+##body
+auto
+pin
+##erry
+tee
+てした
+295
+number
+##the
+##013
+object
+psp
+cool
+udnbkk
+16gb
+##mic
+miui
+##tro
+most
+r2
+##alk
+##nity
+1880
+±0
+##いました
+428
+s4
+law
+version
+##oa
+n1
+sgs
+docomo
+##tf
+##ack
+henry
+fc2
+##ded
+##sco
+##014
+##rite
+286
+0mm
+linkedin
+##ada
+##now
+wii
+##ndy
+ucbug
+##◎
+sputniknews
+legalminer
+##ika
+##xp
+2gb
+##bu
+q10
+oo
+b6
+come
+##rman
+cheese
+ming
+maker
+##gm
+nikon
+##fig
+ppi
+kelly
+##ります
+jchere
+てきます
+ted
+md
+003
+fgo
+tech
+##tto
+dan
+soc
+##gl
+##len
+hair
+earth
+640
+521
+img
+##pper
+##a1
+##てきる
+##ロク
+acca
+##ition
+##ference
+suite
+##ig
+outlook
+##mond
+##cation
+398
+##pr
+279
+101vip
+358
+##999
+282
+64gb
+3800
+345
+airport
+##over
+284
+##おり
+jones
+##ith
+lab
+##su
+##いるのて
+co2
+town
+piece
+##llo
+no1
+vmware
+24h
+##qi
+focus
+reader
+##admin
+##ora
+tb
+false
+##log
+1898
+know
+lan
+838
+##ces
+f4
+##ume
+motel
+stop
+##oper
+na
+flickr
+netcomponents
+##af
+##─
+pose
+williams
+local
+##ound
+##cg
+##site
+##iko
+いお
+274
+5m
+gsm
+con
+##ath
+1902
+friends
+##hip
+cell
+317
+##rey
+780
+cream
+##cks
+012
+##dp
+facebooktwitterpinterestgoogle
+sso
+324
+shtml
+song
+swiss
+##mw
+##キンク
+lumia
+xdd
+string
+tiffany
+522
+marc
+られた
+insee
+russell
+sc
+dell
+##ations
+ok
+camera
+289
+##vs
+##flow
+##late
+classic
+287
+##nter
+stay
+g1
+mtv
+512
+##ever
+##lab
+##nger
+qe
+sata
+ryan
+d1
+50ml
+cms
+##cing
+su
+292
+3300
+editor
+296
+##nap
+security
+sunday
+association
+##ens
+##700
+##bra
+acg
+##かり
+sofascore
+とは
+mkv
+##ign
+jonathan
+gary
+build
+labels
+##oto
+tesla
+moba
+qi
+gohappy
+general
+ajax
+1024
+##かる
+サイト
+society
+##test
+##urs
+wps
+fedora
+##ich
+mozilla
+328
+##480
+##dr
+usa
+urn
+##lina
+##r
+grace
+##die
+##try
+##ader
+1250
+##なり
+elle
+570
+##chen
+##ᆯ
+price
+##ten
+uhz
+##ough
+eq
+##hen
+states
+push
+session
+balance
+wow
+506
+##cus
+##py
+when
+##ward
+##ep
+34e
+wong
+library
+prada
+##サイト
+##cle
+running
+##ree
+313
+ck
+date
+q4
+##ctive
+##ool
+##>
+mk
+##ira
+##163
+388
+die
+secret
+rq
+dota
+buffet
+は1ヶ
+e6
+##ez
+pan
+368
+ha
+##card
+##cha
+2a
+##さ
+alan
+day3
+eye
+f3
+##end
+france
+keep
+adi
+rna
+tvbs
+##ala
+solo
+nova
+##え
+##tail
+##ょう
+support
+##ries
+##なる
+##ved
+base
+copy
+iis
+fps
+##ways
+hero
+hgih
+profile
+fish
+mu
+ssh
+entertainment
+chang
+##wd
+click
+cake
+##ond
+pre
+##tom
+kic
+pixel
+##ov
+##fl
+product
+6a
+##pd
+dear
+##gate
+es
+yumi
+audio
+##²
+##sky
+echo
+bin
+where
+##ture
+329
+##ape
+find
+sap
+isis
+##なと
+nand
+##101
+##load
+##ream
+band
+a6
+525
+never
+##post
+festival
+50cm
+##we
+555
+guide
+314
+zenfone
+##ike
+335
+gd
+forum
+jessica
+strong
+alexander
+##ould
+software
+allen
+##ious
+program
+360°
+else
+lohasthree
+##gar
+することかてきます
+please
+##れます
+rc
+##ggle
+##ric
+bim
+50000
+##own
+eclipse
+355
+brian
+3ds
+##side
+061
+361
+##other
+##ける
+##tech
+##ator
+485
+engine
+##ged
+##t
+plaza
+##fit
+cia
+ngo
+westbrook
+shi
+tbs
+50mm
+##みませんか
+sci
+291
+reuters
+##ily
+contextlink
+##hn
+af
+##cil
+bridge
+very
+##cel
+1890
+cambridge
+##ize
+15g
+##aid
+##data
+790
+frm
+##head
+award
+butler
+##sun
+meta
+##mar
+america
+ps3
+puma
+pmid
+##すか
+lc
+670
+kitchen
+##lic
+オーフン5
+きなしソフトサーヒス
+そして
+day1
+future
+★★★★
+##text
+##page
+##rris
+pm1
+##ket
+fans
+##っています
+1001
+christian
+bot
+kids
+trackback
+##hai
+c3
+display
+##hl
+n2
+1896
+idea
+さんも
+##sent
+airmail
+##ug
+##men
+pwm
+けます
+028
+##lution
+369
+852
+awards
+schemas
+354
+asics
+wikipedia
+font
+##tional
+##vy
+c2
+293
+##れている
+##dget
+##ein
+っている
+contact
+pepper
+スキル
+339
+##~5
+294
+##uel
+##ument
+730
+##hang
+みてす
+q5
+##sue
+rain
+##ndi
+wei
+swatch
+##cept
+わせ
+331
+popular
+##ste
+##tag
+p2
+501
+trc
+1899
+##west
+##live
+justin
+honda
+ping
+messenger
+##rap
+v9
+543
+##とは
+unity
+appqq
+はすへて
+025
+leo
+##tone
+##テ
+##ass
+uniqlo
+##010
+502
+her
+jane
+memory
+moneydj
+##tical
+human
+12306
+していると
+##m2
+coc
+miacare
+##mn
+tmt
+##core
+vim
+kk
+##may
+fan
+target
+use
+too
+338
+435
+2050
+867
+737
+fast
+##2c
+services
+##ope
+omega
+energy
+##わ
+pinkoi
+1a
+##なから
+##rain
+jackson
+##ement
+##シャンルの
+374
+366
+そんな
+p9
+rd
+##ᆨ
+1111
+##tier
+##vic
+zone
+##│
+385
+690
+dl
+isofix
+cpa
+m4
+322
+kimi
+めて
+davis
+##lay
+lulu
+##uck
+050
+weeks
+qs
+##hop
+920
+##n
+ae
+##ear
+~5
+eia
+405
+##fly
+korea
+jpeg
+boost
+##ship
+small
+##リア
+1860
+eur
+297
+425
+valley
+##iel
+simple
+##ude
+rn
+k2
+##ena
+されます
+non
+patrick
+しているから
+##ナー
+feed
+5757
+30g
+process
+well
+qqmei
+##thing
+they
+aws
+lu
+pink
+##ters
+##kin
+または
+board
+##vertisement
+wine
+##ien
+unicode
+##dge
+r1
+359
+##tant
+いを
+##twitter
+##3c
+cool1
+される
+##れて
+##l
+isp
+##012
+standard
+45㎡2
+402
+##150
+matt
+##fu
+326
+##iner
+googlemsn
+pixnetfacebookyahoo
+##ラン
+x7
+886
+##uce
+メーカー
+sao
+##ev
+##きました
+##file
+9678
+403
+xddd
+shirt
+6l
+##rio
+##hat
+3mm
+givenchy
+ya
+bang
+##lio
+monday
+crystal
+ロクイン
+##abc
+336
+head
+890
+ubuntuforumwikilinuxpastechat
+##vc
+##~20
+##rity
+cnc
+7866
+ipv6
+null
+1897
+##ost
+yang
+imsean
+tiger
+##fet
+##ンス
+352
+##=
+dji
+327
+ji
+maria
+##come
+##んて
+foundation
+3100
+##beth
+##なった
+1m
+601
+active
+##aft
+##don
+3p
+sr
+349
+emma
+##khz
+living
+415
+353
+1889
+341
+709
+457
+sas
+x6
+##face
+pptv
+x4
+##mate
+han
+sophie
+##jing
+337
+fifa
+##mand
+other
+sale
+inwedding
+##gn
+てきちゃいます
+##mmy
+##pmlast
+bad
+nana
+nbc
+してみてくたさいね
+なとはお
+##wu
+##かあります
+##あ
+note7
+single
+##340
+せからこ
+してくたさい♪この
+しにはとんとんワークケートを
+するとあなたにもっとマッチした
+ならワークケートへ
+もみつかっちゃうかも
+ワークケートの
+##bel
+window
+##dio
+##ht
+union
+age
+382
+14
+##ivity
+##y
+コメント
+domain
+neo
+##isa
+##lter
+5k
+f5
+steven
+##cts
+powerpoint
+tft
+self
+g2
+ft
+##テル
+zol
+##act
+mwc
+381
+343
+もう
+nbapop
+408
+てある
+eds
+ace
+##room
+previous
+author
+tomtom
+il
+##ets
+hu
+financial
+☆☆☆
+っています
+bp
+5t
+chi
+1gb
+##hg
+fairmont
+cross
+008
+gay
+h2
+function
+##けて
+356
+also
+1b
+625
+##ータ
+##raph
+1894
+3~5
+##ils
+i3
+334
+avenue
+##host
+による
+##bon
+##tsu
+message
+navigation
+50g
+fintech
+h6
+##ことを
+8cm
+##ject
+##vas
+##firm
+credit
+##wf
+xxxx
+form
+##nor
+##space
+huawei
+plan
+json
+sbl
+##dc
+machine
+921
+392
+wish
+##120
+##sol
+windows7
+edward
+##ために
+development
+washington
+##nsis
+lo
+818
+##sio
+##ym
+##bor
+planet
+##~8
+##wt
+ieee
+gpa
+##めて
+camp
+ann
+gm
+##tw
+##oka
+connect
+##rss
+##work
+##atus
+wall
+chicken
+soul
+2mm
+##times
+fa
+##ather
+##cord
+009
+##eep
+hitachi
+gui
+harry
+##pan
+e1
+disney
+##press
+##ーション
+wind
+386
+frigidaire
+##tl
+liu
+hsu
+332
+basic
+von
+ev
+いた
+てきる
+スホンサーサイト
+learning
+##ull
+expedia
+archives
+change
+##wei
+santa
+cut
+ins
+6gb
+turbo
+brand
+cf1
+508
+004
+return
+747
+##rip
+h1
+##nis
+##をこ
+128gb
+##にお
+3t
+application
+しており
+emc
+rx
+##oon
+384
+quick
+412
+15058
+wilson
+wing
+chapter
+##bug
+beyond
+##cms
+##dar
+##oh
+zoom
+e2
+trip
+sb
+##nba
+rcep
+342
+aspx
+ci
+080
+gc
+gnu
+める
+##count
+advanced
+dance
+dv
+##url
+##ging
+367
+8591
+am09
+shadow
+battle
+346
+##i
+##cia
+##という
+emily
+##のてす
+##tation
+host
+ff
+techorz
+sars
+##mini
+##mporary
+##ering
+nc
+4200
+798
+##next
+cma
+##mbps
+##gas
+##ift
+##dot
+##ィ
+455
+##~17
+amana
+##りの
+426
+##ros
+ir
+00㎡1
+##eet
+##ible
+##↓
+710
+ˋ▽ˊ
+##aka
+dcs
+iq
+##v
+l1
+##lor
+maggie
+##011
+##iu
+588
+##~1
+830
+##gt
+1tb
+articles
+create
+##burg
+##iki
+database
+fantasy
+##rex
+##cam
+dlc
+dean
+##you
+hard
+path
+gaming
+victoria
+maps
+cb
+##lee
+##itor
+overchicstoretvhome
+systems
+##xt
+416
+p3
+sarah
+760
+##nan
+407
+486
+x9
+install
+second
+626
+##ann
+##ph
+##rcle
+##nic
+860
+##nar
+ec
+##とう
+768
+metro
+chocolate
+##rian
+~4
+##table
+##しています
+skin
+##sn
+395
+mountain
+##0mm
+inparadise
+6m
+7x24
+ib
+4800
+##jia
+eeworld
+creative
+g5
+g3
+357
+parker
+ecfa
+village
+からの
+18000
+sylvia
+サーヒス
+hbl
+##ques
+##onsored
+##x2
+##きます
+##v4
+##tein
+ie6
+383
+##stack
+389
+ver
+##ads
+##baby
+sound
+bbe
+##110
+##lone
+##uid
+ads
+022
+gundam
+351
+thinkpad
+006
+scrum
+match
+##ave
+mems
+##470
+##oy
+##なりました
+##talk
+glass
+lamigo
+span
+##eme
+job
+##a5
+jay
+wade
+kde
+498
+##lace
+ocean
+tvg
+##covery
+##r3
+##ners
+##rea
+junior
+think
+##aine
+cover
+##ision
+##sia
+↓↓
+##bow
+msi
+413
+458
+406
+##love
+711
+801
+soft
+z2
+##pl
+456
+1840
+mobil
+mind
+##uy
+427
+nginx
+##oi
+めた
+##rr
+6221
+##mple
+##sson
+##ーシてす
+371
+##nts
+91tv
+comhd
+crv3000
+##uard
+1868
+397
+deep
+lost
+field
+gallery
+##bia
+rate
+spf
+redis
+traction
+930
+icloud
+011
+なら
+fe
+jose
+372
+##tory
+into
+sohu
+fx
+899
+379
+kicstart2
+##hia
+すく
+##~3
+##sit
+ra
+24
+##walk
+##xure
+500g
+##pact
+pacific
+xa
+natural
+carlo
+##250
+##walker
+1850
+##can
+cto
+gigi
+516
+##サー
+pen
+##hoo
+ob
+matlab
+##b
+##yy
+13913459
+##iti
+mango
+##bbs
+sense
+c5
+oxford
+##ニア
+walker
+jennifer
+##ola
+course
+##bre
+701
+##pus
+##rder
+lucky
+075
+##ぁ
+ivy
+なお
+##nia
+sotheby
+side
+##ugh
+joy
+##orage
+##ush
+##bat
+##dt
+364
+r9
+##2d
+##gio
+511
+country
+wear
+##lax
+##~7
+##moon
+393
+seven
+study
+411
+348
+lonzo
+8k
+##ェ
+evolution
+##イフ
+##kk
+gs
+kd
+##レス
+arduino
+344
+b12
+##lux
+arpg
+##rdon
+cook
+##x5
+dark
+five
+##als
+##ida
+とても
+sign
+362
+##ちの
+something
+20mm
+##nda
+387
+##posted
+fresh
+tf
+1870
+422
+cam
+##mine
+##skip
+##form
+##ssion
+education
+394
+##tee
+dyson
+stage
+##jie
+want
+##night
+epson
+pack
+あります
+##ppy
+テリヘル
+##█
+wd
+##eh
+##rence
+left
+##lvin
+golden
+mhz
+discovery
+##trix
+##n2
+loft
+##uch
+##dra
+##sse
+speed
+~1
+1mdb
+sorry
+welcome
+##urn
+wave
+gaga
+##lmer
+teddy
+##160
+トラックハック
+せよ
+611
+##f2016
+378
+rp
+##sha
+rar
+##あなたに
+##きた
+840
+holiday
+##ュー
+373
+074
+##vg
+##nos
+##rail
+gartner
+gi
+6p
+##dium
+kit
+488
+b3
+eco
+##ろう
+20g
+sean
+##stone
+autocad
+nu
+##np
+f16
+write
+029
+m5
+##ias
+images
+atp
+##dk
+fsm
+504
+1350
+ve
+52kb
+##xxx
+##のに
+##cake
+414
+unit
+lim
+ru
+1v
+##ification
+published
+angela
+16g
+analytics
+ak
+##q
+##nel
+gmt
+##icon
+again
+##₂
+##bby
+ios11
+445
+かこさいます
+waze
+いてす
+##ハ
+9985
+##ust
+##ティー
+framework
+##007
+iptv
+delete
+52sykb
+cl
+wwdc
+027
+30cm
+##fw
+##ての
+1389
+##xon
+brandt
+##ses
+##dragon
+tc
+vetements
+anne
+monte
+modern
+official
+##へて
+##ere
+##nne
+##oud
+もちろん
+50
+etnews
+##a2
+##graphy
+421
+863
+##ちゃん
+444
+##rtex
+##てお
+l2
+##gma
+mount
+ccd
+たと
+archive
+morning
+tan
+ddos
+e7
+##ホ
+day4
+##ウ
+gis
+453
+its
+495
+factory
+bruce
+pg
+##ito
+ってくたさい
+guest
+cdma
+##lling
+536
+n3
+しかし
+3~4
+mega
+eyes
+ro
+13
+women
+dac
+church
+##jun
+singapore
+##facebook
+6991
+starbucks
+##tos
+##stin
+##shine
+zen
+##mu
+tina
+20℃
+1893
+##たけて
+503
+465
+request
+##gence
+qt
+##っ
+1886
+347
+363
+q7
+##zzi
+diary
+##tore
+409
+##ead
+468
+cst
+##osa
+canada
+agent
+va
+##jiang
+##ちは
+##ーク
+##lam
+sg
+##nix
+##sday
+##よって
+g6
+##master
+bing
+##zl
+charlie
+16
+8mm
+nb40
+##ーン
+thai
+##ルフ
+ln284ct
+##itz
+##2f
+bonnie
+##food
+##lent
+originals
+##stro
+##lts
+418
+∟∣
+##bscribe
+children
+ntd
+yesstyle
+##かも
+hmv
+##tment
+d5
+2cm
+arts
+sms
+##pn
+##я
+##いい
+topios9
+539
+lifestyle
+virtual
+##ague
+xz
+##deo
+muji
+024
+unt
+##nnis
+##ᅩ
+faq1
+1884
+396
+##ette
+fly
+64㎡
+はしめまして
+441
+curry
+##pop
+のこ
+release
+##←
+##◆◆
+##cast
+073
+ありな
+500ml
+##ews
+5c
+##stle
+ios7
+##ima
+787
+dog
+lenovo
+##r4
+roger
+013
+cbs
+vornado
+100m
+417
+##desk
+##クok
+##ald
+1867
+9595
+2900
+##van
+oil
+##x
+some
+break
+common
+##jy
+##lines
+g7
+twice
+419
+ella
+nano
+belle
+にこ
+##mes
+##self
+##note
+jb
+##ことかてきます
+benz
+##との
+##ova
+451
+save
+##wing
+##ますのて
+kai
+りは
+##hua
+##rect
+rainer
+##unge
+448
+##0m
+adsl
+##かな
+guestname
+##uma
+##kins
+##zu
+tokichoi
+##price
+county
+##med
+##mus
+rmk
+391
+address
+vm
+えて
+openload
+##group
+##hin
+##iginal
+amg
+urban
+##oz
+jobs
+emi
+##public
+beautiful
+##sch
+album
+##dden
+##bell
+jerry
+works
+hostel
+miller
+##drive
+##rmin
+##10
+376
+boot
+828
+##370
+##fx
+##cm~
+1885
+##nome
+##ctionary
+##oman
+##lish
+##cr
+##hm
+433
+##how
+432
+francis
+xi
+c919
+b5
+evernote
+##uc
+vga
+##3000
+coupe
+##urg
+##cca
+##uality
+019
+6g
+れる
+multi
+##また
+##ett
+em
+hey
+##ani
+##tax
+##rma
+inside
+than
+740
+leonnhurt
+##jin
+ict
+れた
+bird
+notes
+200mm
+くの
+##dical
+##lli
+result
+442
+iu
+ee
+438
+smap
+gopro
+##last
+yin
+pure
+998
+32g
+けた
+5kg
+##dan
+##rame
+mama
+##oot
+bean
+marketing
+##hur
+2l
+bella
+sync
+xuite
+##ground
+515
+discuz
+##getrelax
+##ince
+##bay
+##5s
+cj
+##イス
+gmat
+apt
+##pass
+jing
+##rix
+c4
+rich
+##とても
+niusnews
+##ello
+bag
+770
+##eting
+##mobile
+18
+culture
+015
+##のてすか
+377
+1020
+area
+##ience
+616
+details
+gp
+universal
+silver
+dit
+はお
+private
+ddd
+u11
+kanshu
+##ified
+fung
+##nny
+dx
+##520
+tai
+475
+023
+##fr
+##lean
+3s
+##pin
+429
+##rin
+25000
+ly
+rick
+##bility
+usb3
+banner
+##baru
+##gion
+metal
+dt
+vdf
+1871
+karl
+qualcomm
+bear
+1010
+oldid
+ian
+jo
+##tors
+population
+##ernel
+1882
+mmorpg
+##mv
+##bike
+603
+##©
+ww
+friend
+##ager
+exhibition
+##del
+##pods
+fpx
+structure
+##free
+##tings
+kl
+##rley
+##copyright
+##mma
+california
+3400
+orange
+yoga
+4l
+canmake
+honey
+##anda
+##コメント
+595
+nikkie
+##ルハイト
+dhl
+publishing
+##mall
+##gnet
+20cm
+513
+##クセス
+##┅
+e88
+970
+##dog
+fishbase
+##!
+##"
+###
+##$
+##%
+##&
+##'
+##(
+##)
+##*
+##+
+##,
+##-
+##.
+##/
+##:
+##;
+##<
+##=
+##>
+##?
+##@
+##[
+##\
+##]
+##^
+##_
+##{
+##|
+##}
+##~
+##£
+##¤
+##¥
+##§
+##«
+##±
+##³
+##µ
+##·
+##¹
+##º
+##»
+##¼
+##ß
+##æ
+##÷
+##ø
+##đ
+##ŋ
+##ɔ
+##ə
+##ɡ
+##ʰ
+##ˇ
+##ˈ
+##ˊ
+##ˋ
+##ˍ
+##ː
+##˙
+##˚
+##ˢ
+##α
+##β
+##γ
+##δ
+##ε
+##η
+##θ
+##ι
+##κ
+##λ
+##μ
+##ν
+##ο
+##π
+##ρ
+##ς
+##σ
+##τ
+##υ
+##φ
+##χ
+##ψ
+##б
+##в
+##г
+##д
+##е
+##ж
+##з
+##к
+##л
+##м
+##н
+##о
+##п
+##р
+##с
+##т
+##у
+##ф
+##х
+##ц
+##ч
+##ш
+##ы
+##ь
+##і
+##ا
+##ب
+##ة
+##ت
+##د
+##ر
+##س
+##ع
+##ل
+##م
+##ن
+##ه
+##و
+##ي
+##۩
+##ก
+##ง
+##น
+##ม
+##ย
+##ร
+##อ
+##า
+##เ
+##๑
+##་
+##ღ
+##ᄀ
+##ᄁ
+##ᄂ
+##ᄃ
+##ᄅ
+##ᄆ
+##ᄇ
+##ᄈ
+##ᄉ
+##ᄋ
+##ᄌ
+##ᄎ
+##ᄏ
+##ᄐ
+##ᄑ
+##ᄒ
+##ᅢ
+##ᅣ
+##ᅥ
+##ᅦ
+##ᅧ
+##ᅨ
+##ᅪ
+##ᅬ
+##ᅭ
+##ᅮ
+##ᅯ
+##ᅲ
+##ᅳ
+##ᅴ
+##ᆷ
+##ᆸ
+##ᆺ
+##ᆻ
+##ᗜ
+##ᵃ
+##ᵉ
+##ᵍ
+##ᵏ
+##ᵐ
+##ᵒ
+##ᵘ
+##‖
+##„
+##†
+##•
+##‥
+##‧
+##
+##‰
+##′
+##″
+##‹
+##›
+##※
+##‿
+##⁄
+##ⁱ
+##⁺
+##ⁿ
+##₁
+##₃
+##₄
+##€
+##№
+##ⅰ
+##ⅱ
+##ⅲ
+##ⅳ
+##ⅴ
+##↔
+##↗
+##↘
+##⇒
+##∀
+##−
+##∕
+##∙
+##√
+##∞
+##∟
+##∠
+##∣
+##∩
+##∮
+##∶
+##∼
+##∽
+##≈
+##≒
+##≡
+##≤
+##≥
+##≦
+##≧
+##≪
+##≫
+##⊙
+##⋅
+##⋈
+##⋯
+##⌒
+##①
+##②
+##③
+##④
+##⑤
+##⑥
+##⑦
+##⑧
+##⑨
+##⑩
+##⑴
+##⑵
+##⑶
+##⑷
+##⑸
+##⒈
+##⒉
+##⒊
+##⒋
+##ⓒ
+##ⓔ
+##ⓘ
+##━
+##┃
+##┆
+##┊
+##┌
+##└
+##├
+##┣
+##═
+##║
+##╚
+##╞
+##╠
+##╭
+##╮
+##╯
+##╰
+##╱
+##╳
+##▂
+##▃
+##▅
+##▇
+##▉
+##▋
+##▌
+##▍
+##▎
+##□
+##▪
+##▫
+##▬
+##△
+##▶
+##►
+##▽
+##◇
+##◕
+##◠
+##◢
+##◤
+##☀
+##☕
+##☞
+##☺
+##☼
+##♀
+##♂
+##♠
+##♡
+##♣
+##♦
+##♫
+##♬
+##✈
+##✔
+##✕
+##✖
+##✦
+##✨
+##✪
+##✰
+##✿
+##❀
+##➜
+##➤
+##⦿
+##、
+##。
+##〃
+##々
+##〇
+##〈
+##〉
+##《
+##》
+##「
+##」
+##『
+##』
+##【
+##】
+##〓
+##〔
+##〕
+##〖
+##〗
+##〜
+##〝
+##〞
+##ぃ
+##ぇ
+##ぬ
+##ふ
+##ほ
+##む
+##ゃ
+##ゅ
+##ゆ
+##ょ
+##゜
+##ゝ
+##ァ
+##ゥ
+##エ
+##ォ
+##ケ
+##サ
+##セ
+##ソ
+##ッ
+##ニ
+##ヌ
+##ネ
+##ノ
+##ヘ
+##モ
+##ャ
+##ヤ
+##ュ
+##ユ
+##ョ
+##ヨ
+##ワ
+##ヲ
+##・
+##ヽ
+##ㄅ
+##ㄆ
+##ㄇ
+##ㄉ
+##ㄋ
+##ㄌ
+##ㄍ
+##ㄎ
+##ㄏ
+##ㄒ
+##ㄚ
+##ㄛ
+##ㄞ
+##ㄟ
+##ㄢ
+##ㄤ
+##ㄥ
+##ㄧ
+##ㄨ
+##ㆍ
+##㈦
+##㊣
+##㗎
+##一
+##丁
+##七
+##万
+##丈
+##三
+##上
+##下
+##不
+##与
+##丐
+##丑
+##专
+##且
+##丕
+##世
+##丘
+##丙
+##业
+##丛
+##东
+##丝
+##丞
+##丟
+##両
+##丢
+##两
+##严
+##並
+##丧
+##丨
+##个
+##丫
+##中
+##丰
+##串
+##临
+##丶
+##丸
+##丹
+##为
+##主
+##丼
+##丽
+##举
+##丿
+##乂
+##乃
+##久
+##么
+##义
+##之
+##乌
+##乍
+##乎
+##乏
+##乐
+##乒
+##乓
+##乔
+##乖
+##乗
+##乘
+##乙
+##乜
+##九
+##乞
+##也
+##习
+##乡
+##书
+##乩
+##买
+##乱
+##乳
+##乾
+##亀
+##亂
+##了
+##予
+##争
+##事
+##二
+##于
+##亏
+##云
+##互
+##五
+##井
+##亘
+##亙
+##亚
+##些
+##亜
+##亞
+##亟
+##亡
+##亢
+##交
+##亥
+##亦
+##产
+##亨
+##亩
+##享
+##京
+##亭
+##亮
+##亲
+##亳
+##亵
+##人
+##亿
+##什
+##仁
+##仃
+##仄
+##仅
+##仆
+##仇
+##今
+##介
+##仍
+##从
+##仏
+##仑
+##仓
+##仔
+##仕
+##他
+##仗
+##付
+##仙
+##仝
+##仞
+##仟
+##代
+##令
+##以
+##仨
+##仪
+##们
+##仮
+##仰
+##仲
+##件
+##价
+##任
+##份
+##仿
+##企
+##伉
+##伊
+##伍
+##伎
+##伏
+##伐
+##休
+##伕
+##众
+##优
+##伙
+##会
+##伝
+##伞
+##伟
+##传
+##伢
+##伤
+##伦
+##伪
+##伫
+##伯
+##估
+##伴
+##伶
+##伸
+##伺
+##似
+##伽
+##佃
+##但
+##佇
+##佈
+##位
+##低
+##住
+##佐
+##佑
+##体
+##佔
+##何
+##佗
+##佘
+##余
+##佚
+##佛
+##作
+##佝
+##佞
+##佟
+##你
+##佢
+##佣
+##佤
+##佥
+##佩
+##佬
+##佯
+##佰
+##佳
+##併
+##佶
+##佻
+##佼
+##使
+##侃
+##侄
+##來
+##侈
+##例
+##侍
+##侏
+##侑
+##侖
+##侗
+##供
+##依
+##侠
+##価
+##侣
+##侥
+##侦
+##侧
+##侨
+##侬
+##侮
+##侯
+##侵
+##侶
+##侷
+##便
+##係
+##促
+##俄
+##俊
+##俎
+##俏
+##俐
+##俑
+##俗
+##俘
+##俚
+##保
+##俞
+##俟
+##俠
+##信
+##俨
+##俩
+##俪
+##俬
+##俭
+##修
+##俯
+##俱
+##俳
+##俸
+##俺
+##俾
+##倆
+##倉
+##個
+##倌
+##倍
+##倏
+##們
+##倒
+##倔
+##倖
+##倘
+##候
+##倚
+##倜
+##借
+##倡
+##値
+##倦
+##倩
+##倪
+##倫
+##倬
+##倭
+##倶
+##债
+##值
+##倾
+##偃
+##假
+##偈
+##偉
+##偌
+##偎
+##偏
+##偕
+##做
+##停
+##健
+##側
+##偵
+##偶
+##偷
+##偻
+##偽
+##偿
+##傀
+##傅
+##傍
+##傑
+##傘
+##備
+##傚
+##傢
+##傣
+##傥
+##储
+##傩
+##催
+##傭
+##傲
+##傳
+##債
+##傷
+##傻
+##傾
+##僅
+##働
+##像
+##僑
+##僕
+##僖
+##僚
+##僥
+##僧
+##僭
+##僮
+##僱
+##僵
+##價
+##僻
+##儀
+##儂
+##億
+##儆
+##儉
+##儋
+##儒
+##儕
+##儘
+##償
+##儡
+##優
+##儲
+##儷
+##儼
+##儿
+##兀
+##允
+##元
+##兄
+##充
+##兆
+##兇
+##先
+##光
+##克
+##兌
+##免
+##児
+##兑
+##兒
+##兔
+##兖
+##党
+##兜
+##兢
+##入
+##內
+##全
+##兩
+##八
+##公
+##六
+##兮
+##兰
+##共
+##兲
+##关
+##兴
+##兵
+##其
+##具
+##典
+##兹
+##养
+##兼
+##兽
+##冀
+##内
+##円
+##冇
+##冈
+##冉
+##冊
+##册
+##再
+##冏
+##冒
+##冕
+##冗
+##写
+##军
+##农
+##冠
+##冢
+##冤
+##冥
+##冨
+##冪
+##冬
+##冯
+##冰
+##冲
+##决
+##况
+##冶
+##冷
+##冻
+##冼
+##冽
+##冾
+##净
+##凄
+##准
+##凇
+##凈
+##凉
+##凋
+##凌
+##凍
+##减
+##凑
+##凛
+##凜
+##凝
+##几
+##凡
+##凤
+##処
+##凪
+##凭
+##凯
+##凰
+##凱
+##凳
+##凶
+##凸
+##凹
+##出
+##击
+##函
+##凿
+##刀
+##刁
+##刃
+##分
+##切
+##刈
+##刊
+##刍
+##刎
+##刑
+##划
+##列
+##刘
+##则
+##刚
+##创
+##初
+##删
+##判
+##別
+##刨
+##利
+##刪
+##别
+##刮
+##到
+##制
+##刷
+##券
+##刹
+##刺
+##刻
+##刽
+##剁
+##剂
+##剃
+##則
+##剉
+##削
+##剋
+##剌
+##前
+##剎
+##剐
+##剑
+##剔
+##剖
+##剛
+##剜
+##剝
+##剣
+##剤
+##剥
+##剧
+##剩
+##剪
+##副
+##割
+##創
+##剷
+##剽
+##剿
+##劃
+##劇
+##劈
+##劉
+##劊
+##劍
+##劏
+##劑
+##力
+##劝
+##办
+##功
+##加
+##务
+##劣
+##动
+##助
+##努
+##劫
+##劭
+##励
+##劲
+##劳
+##労
+##劵
+##効
+##劾
+##势
+##勁
+##勃
+##勇
+##勉
+##勋
+##勐
+##勒
+##動
+##勖
+##勘
+##務
+##勛
+##勝
+##勞
+##募
+##勢
+##勤
+##勧
+##勳
+##勵
+##勸
+##勺
+##勻
+##勾
+##勿
+##匀
+##包
+##匆
+##匈
+##匍
+##匐
+##匕
+##化
+##北
+##匙
+##匝
+##匠
+##匡
+##匣
+##匪
+##匮
+##匯
+##匱
+##匹
+##区
+##医
+##匾
+##匿
+##區
+##十
+##千
+##卅
+##升
+##午
+##卉
+##半
+##卍
+##华
+##协
+##卑
+##卒
+##卓
+##協
+##单
+##卖
+##南
+##単
+##博
+##卜
+##卞
+##卟
+##占
+##卡
+##卢
+##卤
+##卦
+##卧
+##卫
+##卮
+##卯
+##印
+##危
+##即
+##却
+##卵
+##卷
+##卸
+##卻
+##卿
+##厂
+##厄
+##厅
+##历
+##厉
+##压
+##厌
+##厕
+##厘
+##厚
+##厝
+##原
+##厢
+##厥
+##厦
+##厨
+##厩
+##厭
+##厮
+##厲
+##厳
+##去
+##县
+##叁
+##参
+##參
+##又
+##叉
+##及
+##友
+##双
+##反
+##収
+##发
+##叔
+##取
+##受
+##变
+##叙
+##叛
+##叟
+##叠
+##叡
+##叢
+##口
+##古
+##句
+##另
+##叨
+##叩
+##只
+##叫
+##召
+##叭
+##叮
+##可
+##台
+##叱
+##史
+##右
+##叵
+##叶
+##号
+##司
+##叹
+##叻
+##叼
+##叽
+##吁
+##吃
+##各
+##吆
+##合
+##吉
+##吊
+##吋
+##同
+##名
+##后
+##吏
+##吐
+##向
+##吒
+##吓
+##吕
+##吖
+##吗
+##君
+##吝
+##吞
+##吟
+##吠
+##吡
+##否
+##吧
+##吨
+##吩
+##含
+##听
+##吭
+##吮
+##启
+##吱
+##吳
+##吴
+##吵
+##吶
+##吸
+##吹
+##吻
+##吼
+##吽
+##吾
+##呀
+##呂
+##呃
+##呆
+##呈
+##告
+##呋
+##呎
+##呐
+##呓
+##呕
+##呗
+##员
+##呛
+##呜
+##呢
+##呤
+##呦
+##周
+##呱
+##呲
+##味
+##呵
+##呷
+##呸
+##呻
+##呼
+##命
+##咀
+##咁
+##咂
+##咄
+##咆
+##咋
+##和
+##咎
+##咏
+##咐
+##咒
+##咔
+##咕
+##咖
+##咗
+##咘
+##咙
+##咚
+##咛
+##咣
+##咤
+##咦
+##咧
+##咨
+##咩
+##咪
+##咫
+##咬
+##咭
+##咯
+##咱
+##咲
+##咳
+##咸
+##咻
+##咽
+##咿
+##哀
+##品
+##哂
+##哄
+##哆
+##哇
+##哈
+##哉
+##哋
+##哌
+##响
+##哎
+##哏
+##哐
+##哑
+##哒
+##哔
+##哗
+##哟
+##員
+##哥
+##哦
+##哧
+##哨
+##哩
+##哪
+##哭
+##哮
+##哲
+##哺
+##哼
+##哽
+##唁
+##唄
+##唆
+##唇
+##唉
+##唏
+##唐
+##唑
+##唔
+##唠
+##唤
+##唧
+##唬
+##售
+##唯
+##唰
+##唱
+##唳
+##唷
+##唸
+##唾
+##啃
+##啄
+##商
+##啉
+##啊
+##問
+##啓
+##啕
+##啖
+##啜
+##啞
+##啟
+##啡
+##啤
+##啥
+##啦
+##啧
+##啪
+##啫
+##啬
+##啮
+##啰
+##啱
+##啲
+##啵
+##啶
+##啷
+##啸
+##啻
+##啼
+##啾
+##喀
+##喂
+##喃
+##善
+##喆
+##喇
+##喉
+##喊
+##喋
+##喎
+##喏
+##喔
+##喘
+##喙
+##喚
+##喜
+##喝
+##喟
+##喧
+##喪
+##喫
+##喬
+##單
+##喰
+##喱
+##喲
+##喳
+##喵
+##営
+##喷
+##喹
+##喺
+##喻
+##喽
+##嗅
+##嗆
+##嗇
+##嗎
+##嗑
+##嗒
+##嗓
+##嗔
+##嗖
+##嗚
+##嗜
+##嗝
+##嗟
+##嗡
+##嗣
+##嗤
+##嗦
+##嗨
+##嗪
+##嗬
+##嗯
+##嗰
+##嗲
+##嗳
+##嗶
+##嗷
+##嗽
+##嘀
+##嘅
+##嘆
+##嘈
+##嘉
+##嘌
+##嘍
+##嘎
+##嘔
+##嘖
+##嘗
+##嘘
+##嘚
+##嘛
+##嘜
+##嘞
+##嘟
+##嘢
+##嘣
+##嘤
+##嘧
+##嘩
+##嘭
+##嘮
+##嘯
+##嘰
+##嘱
+##嘲
+##嘴
+##嘶
+##嘸
+##嘹
+##嘻
+##嘿
+##噁
+##噌
+##噎
+##噓
+##噔
+##噗
+##噙
+##噜
+##噠
+##噢
+##噤
+##器
+##噩
+##噪
+##噬
+##噱
+##噴
+##噶
+##噸
+##噹
+##噻
+##噼
+##嚀
+##嚇
+##嚎
+##嚏
+##嚐
+##嚓
+##嚕
+##嚟
+##嚣
+##嚥
+##嚨
+##嚮
+##嚴
+##嚷
+##嚼
+##囂
+##囉
+##囊
+##囍
+##囑
+##囔
+##囗
+##囚
+##四
+##囝
+##回
+##囟
+##因
+##囡
+##团
+##団
+##囤
+##囧
+##囪
+##囫
+##园
+##困
+##囱
+##囲
+##図
+##围
+##囹
+##固
+##国
+##图
+##囿
+##圃
+##圄
+##圆
+##圈
+##國
+##圍
+##圏
+##園
+##圓
+##圖
+##團
+##圜
+##土
+##圣
+##圧
+##在
+##圩
+##圭
+##地
+##圳
+##场
+##圻
+##圾
+##址
+##坂
+##均
+##坊
+##坍
+##坎
+##坏
+##坐
+##坑
+##块
+##坚
+##坛
+##坝
+##坞
+##坟
+##坠
+##坡
+##坤
+##坦
+##坨
+##坪
+##坯
+##坳
+##坵
+##坷
+##垂
+##垃
+##垄
+##型
+##垒
+##垚
+##垛
+##垠
+##垢
+##垣
+##垦
+##垩
+##垫
+##垭
+##垮
+##垵
+##埂
+##埃
+##埋
+##城
+##埔
+##埕
+##埗
+##域
+##埠
+##埤
+##埵
+##執
+##埸
+##培
+##基
+##埼
+##堀
+##堂
+##堃
+##堅
+##堆
+##堇
+##堑
+##堕
+##堙
+##堡
+##堤
+##堪
+##堯
+##堰
+##報
+##場
+##堵
+##堺
+##堿
+##塊
+##塌
+##塑
+##塔
+##塗
+##塘
+##塚
+##塞
+##塢
+##塩
+##填
+##塬
+##塭
+##塵
+##塾
+##墀
+##境
+##墅
+##墉
+##墊
+##墒
+##墓
+##増
+##墘
+##墙
+##墜
+##增
+##墟
+##墨
+##墩
+##墮
+##墳
+##墻
+##墾
+##壁
+##壅
+##壆
+##壇
+##壊
+##壑
+##壓
+##壕
+##壘
+##壞
+##壟
+##壢
+##壤
+##壩
+##士
+##壬
+##壮
+##壯
+##声
+##売
+##壳
+##壶
+##壹
+##壺
+##壽
+##处
+##备
+##変
+##复
+##夏
+##夔
+##夕
+##外
+##夙
+##多
+##夜
+##够
+##夠
+##夢
+##夥
+##大
+##天
+##太
+##夫
+##夭
+##央
+##夯
+##失
+##头
+##夷
+##夸
+##夹
+##夺
+##夾
+##奂
+##奄
+##奇
+##奈
+##奉
+##奋
+##奎
+##奏
+##奐
+##契
+##奔
+##奕
+##奖
+##套
+##奘
+##奚
+##奠
+##奢
+##奥
+##奧
+##奪
+##奬
+##奮
+##女
+##奴
+##奶
+##奸
+##她
+##好
+##如
+##妃
+##妄
+##妆
+##妇
+##妈
+##妊
+##妍
+##妒
+##妓
+##妖
+##妘
+##妙
+##妝
+##妞
+##妣
+##妤
+##妥
+##妨
+##妩
+##妪
+##妮
+##妲
+##妳
+##妹
+##妻
+##妾
+##姆
+##姉
+##姊
+##始
+##姍
+##姐
+##姑
+##姒
+##姓
+##委
+##姗
+##姚
+##姜
+##姝
+##姣
+##姥
+##姦
+##姨
+##姪
+##姫
+##姬
+##姹
+##姻
+##姿
+##威
+##娃
+##娄
+##娅
+##娆
+##娇
+##娉
+##娑
+##娓
+##娘
+##娛
+##娜
+##娟
+##娠
+##娣
+##娥
+##娩
+##娱
+##娲
+##娴
+##娶
+##娼
+##婀
+##婁
+##婆
+##婉
+##婊
+##婕
+##婚
+##婢
+##婦
+##婧
+##婪
+##婭
+##婴
+##婵
+##婶
+##婷
+##婺
+##婿
+##媒
+##媚
+##媛
+##媞
+##媧
+##媲
+##媳
+##媽
+##媾
+##嫁
+##嫂
+##嫉
+##嫌
+##嫑
+##嫔
+##嫖
+##嫘
+##嫚
+##嫡
+##嫣
+##嫦
+##嫩
+##嫲
+##嫵
+##嫻
+##嬅
+##嬉
+##嬌
+##嬗
+##嬛
+##嬢
+##嬤
+##嬪
+##嬰
+##嬴
+##嬷
+##嬸
+##嬿
+##孀
+##孃
+##子
+##孑
+##孔
+##孕
+##孖
+##字
+##存
+##孙
+##孚
+##孛
+##孜
+##孝
+##孟
+##孢
+##季
+##孤
+##学
+##孩
+##孪
+##孫
+##孬
+##孰
+##孱
+##孳
+##孵
+##學
+##孺
+##孽
+##孿
+##宁
+##它
+##宅
+##宇
+##守
+##安
+##宋
+##完
+##宏
+##宓
+##宕
+##宗
+##官
+##宙
+##定
+##宛
+##宜
+##宝
+##实
+##実
+##宠
+##审
+##客
+##宣
+##室
+##宥
+##宦
+##宪
+##宫
+##宮
+##宰
+##害
+##宴
+##宵
+##家
+##宸
+##容
+##宽
+##宾
+##宿
+##寂
+##寄
+##寅
+##密
+##寇
+##富
+##寐
+##寒
+##寓
+##寛
+##寝
+##寞
+##察
+##寡
+##寢
+##寥
+##實
+##寧
+##寨
+##審
+##寫
+##寬
+##寮
+##寰
+##寵
+##寶
+##寸
+##对
+##寺
+##寻
+##导
+##対
+##寿
+##封
+##専
+##射
+##将
+##將
+##專
+##尉
+##尊
+##尋
+##對
+##導
+##小
+##少
+##尔
+##尕
+##尖
+##尘
+##尚
+##尝
+##尤
+##尧
+##尬
+##就
+##尴
+##尷
+##尸
+##尹
+##尺
+##尻
+##尼
+##尽
+##尾
+##尿
+##局
+##屁
+##层
+##屄
+##居
+##屆
+##屈
+##屉
+##届
+##屋
+##屌
+##屍
+##屎
+##屏
+##屐
+##屑
+##展
+##屜
+##属
+##屠
+##屡
+##屢
+##層
+##履
+##屬
+##屯
+##山
+##屹
+##屿
+##岀
+##岁
+##岂
+##岌
+##岐
+##岑
+##岔
+##岖
+##岗
+##岘
+##岙
+##岚
+##岛
+##岡
+##岩
+##岫
+##岬
+##岭
+##岱
+##岳
+##岷
+##岸
+##峇
+##峋
+##峒
+##峙
+##峡
+##峤
+##峥
+##峦
+##峨
+##峪
+##峭
+##峯
+##峰
+##峴
+##島
+##峻
+##峽
+##崁
+##崂
+##崆
+##崇
+##崎
+##崑
+##崔
+##崖
+##崗
+##崙
+##崛
+##崧
+##崩
+##崭
+##崴
+##崽
+##嵇
+##嵊
+##嵋
+##嵌
+##嵐
+##嵘
+##嵩
+##嵬
+##嵯
+##嶂
+##嶄
+##嶇
+##嶋
+##嶙
+##嶺
+##嶼
+##嶽
+##巅
+##巍
+##巒
+##巔
+##巖
+##川
+##州
+##巡
+##巢
+##工
+##左
+##巧
+##巨
+##巩
+##巫
+##差
+##己
+##已
+##巳
+##巴
+##巷
+##巻
+##巽
+##巾
+##巿
+##币
+##市
+##布
+##帅
+##帆
+##师
+##希
+##帐
+##帑
+##帕
+##帖
+##帘
+##帚
+##帛
+##帜
+##帝
+##帥
+##带
+##帧
+##師
+##席
+##帮
+##帯
+##帰
+##帳
+##帶
+##帷
+##常
+##帼
+##帽
+##幀
+##幂
+##幄
+##幅
+##幌
+##幔
+##幕
+##幟
+##幡
+##幢
+##幣
+##幫
+##干
+##平
+##年
+##并
+##幸
+##幹
+##幺
+##幻
+##幼
+##幽
+##幾
+##广
+##庁
+##広
+##庄
+##庆
+##庇
+##床
+##序
+##庐
+##库
+##应
+##底
+##庖
+##店
+##庙
+##庚
+##府
+##庞
+##废
+##庠
+##度
+##座
+##庫
+##庭
+##庵
+##庶
+##康
+##庸
+##庹
+##庾
+##廁
+##廂
+##廃
+##廈
+##廉
+##廊
+##廓
+##廖
+##廚
+##廝
+##廟
+##廠
+##廢
+##廣
+##廬
+##廳
+##延
+##廷
+##建
+##廿
+##开
+##弁
+##异
+##弃
+##弄
+##弈
+##弊
+##弋
+##式
+##弑
+##弒
+##弓
+##弔
+##引
+##弗
+##弘
+##弛
+##弟
+##张
+##弥
+##弦
+##弧
+##弩
+##弭
+##弯
+##弱
+##張
+##強
+##弹
+##强
+##弼
+##弾
+##彅
+##彆
+##彈
+##彌
+##彎
+##归
+##当
+##录
+##彗
+##彙
+##彝
+##形
+##彤
+##彥
+##彦
+##彧
+##彩
+##彪
+##彫
+##彬
+##彭
+##彰
+##影
+##彷
+##役
+##彻
+##彼
+##彿
+##往
+##征
+##径
+##待
+##徇
+##很
+##徉
+##徊
+##律
+##後
+##徐
+##徑
+##徒
+##従
+##徕
+##得
+##徘
+##徙
+##徜
+##從
+##徠
+##御
+##徨
+##復
+##循
+##徬
+##微
+##徳
+##徴
+##徵
+##德
+##徹
+##徼
+##徽
+##心
+##必
+##忆
+##忌
+##忍
+##忏
+##忐
+##忑
+##忒
+##忖
+##志
+##忘
+##忙
+##応
+##忠
+##忡
+##忤
+##忧
+##忪
+##快
+##忱
+##念
+##忻
+##忽
+##忿
+##怀
+##态
+##怂
+##怅
+##怆
+##怎
+##怏
+##怒
+##怔
+##怕
+##怖
+##怙
+##怜
+##思
+##怠
+##怡
+##急
+##怦
+##性
+##怨
+##怪
+##怯
+##怵
+##总
+##怼
+##恁
+##恃
+##恆
+##恋
+##恍
+##恐
+##恒
+##恕
+##恙
+##恚
+##恢
+##恣
+##恤
+##恥
+##恨
+##恩
+##恪
+##恫
+##恬
+##恭
+##息
+##恰
+##恳
+##恵
+##恶
+##恸
+##恺
+##恻
+##恼
+##恿
+##悄
+##悅
+##悉
+##悌
+##悍
+##悔
+##悖
+##悚
+##悟
+##悠
+##患
+##悦
+##您
+##悩
+##悪
+##悬
+##悯
+##悱
+##悲
+##悴
+##悵
+##悶
+##悸
+##悻
+##悼
+##悽
+##情
+##惆
+##惇
+##惊
+##惋
+##惑
+##惕
+##惘
+##惚
+##惜
+##惟
+##惠
+##惡
+##惦
+##惧
+##惨
+##惩
+##惫
+##惬
+##惭
+##惮
+##惯
+##惰
+##惱
+##想
+##惴
+##惶
+##惹
+##惺
+##愁
+##愆
+##愈
+##愉
+##愍
+##意
+##愕
+##愚
+##愛
+##愜
+##感
+##愣
+##愤
+##愧
+##愫
+##愷
+##愿
+##慄
+##慈
+##態
+##慌
+##慎
+##慑
+##慕
+##慘
+##慚
+##慟
+##慢
+##慣
+##慧
+##慨
+##慫
+##慮
+##慰
+##慳
+##慵
+##慶
+##慷
+##慾
+##憂
+##憊
+##憋
+##憎
+##憐
+##憑
+##憔
+##憚
+##憤
+##憧
+##憨
+##憩
+##憫
+##憬
+##憲
+##憶
+##憾
+##懂
+##懇
+##懈
+##應
+##懊
+##懋
+##懑
+##懒
+##懦
+##懲
+##懵
+##懶
+##懷
+##懸
+##懺
+##懼
+##懾
+##懿
+##戀
+##戈
+##戊
+##戌
+##戍
+##戎
+##戏
+##成
+##我
+##戒
+##戕
+##或
+##战
+##戚
+##戛
+##戟
+##戡
+##戦
+##截
+##戬
+##戮
+##戰
+##戲
+##戳
+##戴
+##戶
+##户
+##戸
+##戻
+##戾
+##房
+##所
+##扁
+##扇
+##扈
+##扉
+##手
+##才
+##扎
+##扑
+##扒
+##打
+##扔
+##払
+##托
+##扛
+##扣
+##扦
+##执
+##扩
+##扪
+##扫
+##扬
+##扭
+##扮
+##扯
+##扰
+##扱
+##扳
+##扶
+##批
+##扼
+##找
+##承
+##技
+##抄
+##抉
+##把
+##抑
+##抒
+##抓
+##投
+##抖
+##抗
+##折
+##抚
+##抛
+##抜
+##択
+##抟
+##抠
+##抡
+##抢
+##护
+##报
+##抨
+##披
+##抬
+##抱
+##抵
+##抹
+##押
+##抽
+##抿
+##拂
+##拄
+##担
+##拆
+##拇
+##拈
+##拉
+##拋
+##拌
+##拍
+##拎
+##拐
+##拒
+##拓
+##拔
+##拖
+##拗
+##拘
+##拙
+##拚
+##招
+##拜
+##拟
+##拡
+##拢
+##拣
+##拥
+##拦
+##拧
+##拨
+##择
+##括
+##拭
+##拮
+##拯
+##拱
+##拳
+##拴
+##拷
+##拼
+##拽
+##拾
+##拿
+##持
+##挂
+##指
+##挈
+##按
+##挎
+##挑
+##挖
+##挙
+##挚
+##挛
+##挝
+##挞
+##挟
+##挠
+##挡
+##挣
+##挤
+##挥
+##挨
+##挪
+##挫
+##振
+##挲
+##挹
+##挺
+##挽
+##挾
+##捂
+##捅
+##捆
+##捉
+##捋
+##捌
+##捍
+##捎
+##捏
+##捐
+##捕
+##捞
+##损
+##捡
+##换
+##捣
+##捧
+##捨
+##捩
+##据
+##捱
+##捲
+##捶
+##捷
+##捺
+##捻
+##掀
+##掂
+##掃
+##掇
+##授
+##掉
+##掌
+##掏
+##掐
+##排
+##掖
+##掘
+##掙
+##掛
+##掠
+##採
+##探
+##掣
+##接
+##控
+##推
+##掩
+##措
+##掬
+##掰
+##掲
+##掳
+##掴
+##掷
+##掸
+##掺
+##揀
+##揃
+##揄
+##揆
+##揉
+##揍
+##描
+##提
+##插
+##揖
+##揚
+##換
+##握
+##揣
+##揩
+##揪
+##揭
+##揮
+##援
+##揶
+##揸
+##揹
+##揽
+##搀
+##搁
+##搂
+##搅
+##損
+##搏
+##搐
+##搓
+##搔
+##搖
+##搗
+##搜
+##搞
+##搡
+##搪
+##搬
+##搭
+##搵
+##搶
+##携
+##搽
+##摀
+##摁
+##摄
+##摆
+##摇
+##摈
+##摊
+##摒
+##摔
+##摘
+##摞
+##摟
+##摧
+##摩
+##摯
+##摳
+##摸
+##摹
+##摺
+##摻
+##撂
+##撃
+##撅
+##撇
+##撈
+##撐
+##撑
+##撒
+##撓
+##撕
+##撚
+##撞
+##撤
+##撥
+##撩
+##撫
+##撬
+##播
+##撮
+##撰
+##撲
+##撵
+##撷
+##撸
+##撻
+##撼
+##撿
+##擀
+##擁
+##擂
+##擄
+##擅
+##擇
+##擊
+##擋
+##操
+##擎
+##擒
+##擔
+##擘
+##據
+##擞
+##擠
+##擡
+##擢
+##擦
+##擬
+##擰
+##擱
+##擲
+##擴
+##擷
+##擺
+##擼
+##擾
+##攀
+##攏
+##攒
+##攔
+##攘
+##攙
+##攜
+##攝
+##攞
+##攢
+##攣
+##攤
+##攥
+##攪
+##攫
+##攬
+##支
+##收
+##攸
+##改
+##攻
+##放
+##政
+##故
+##效
+##敌
+##敍
+##敎
+##敏
+##救
+##敕
+##敖
+##敗
+##敘
+##教
+##敛
+##敝
+##敞
+##敢
+##散
+##敦
+##敬
+##数
+##敲
+##整
+##敵
+##敷
+##數
+##斂
+##斃
+##文
+##斋
+##斌
+##斎
+##斐
+##斑
+##斓
+##斗
+##料
+##斛
+##斜
+##斟
+##斡
+##斤
+##斥
+##斧
+##斩
+##斫
+##斬
+##断
+##斯
+##新
+##斷
+##方
+##於
+##施
+##旁
+##旃
+##旅
+##旋
+##旌
+##旎
+##族
+##旖
+##旗
+##无
+##既
+##日
+##旦
+##旧
+##旨
+##早
+##旬
+##旭
+##旮
+##旱
+##时
+##旷
+##旺
+##旻
+##昀
+##昂
+##昆
+##昇
+##昉
+##昊
+##昌
+##明
+##昏
+##易
+##昔
+##昕
+##昙
+##星
+##映
+##春
+##昧
+##昨
+##昭
+##是
+##昱
+##昴
+##昵
+##昶
+##昼
+##显
+##晁
+##時
+##晃
+##晉
+##晋
+##晌
+##晏
+##晒
+##晓
+##晔
+##晕
+##晖
+##晗
+##晚
+##晝
+##晞
+##晟
+##晤
+##晦
+##晨
+##晩
+##普
+##景
+##晰
+##晴
+##晶
+##晷
+##智
+##晾
+##暂
+##暄
+##暇
+##暈
+##暉
+##暌
+##暐
+##暑
+##暖
+##暗
+##暝
+##暢
+##暧
+##暨
+##暫
+##暮
+##暱
+##暴
+##暸
+##暹
+##曄
+##曆
+##曇
+##曉
+##曖
+##曙
+##曜
+##曝
+##曠
+##曦
+##曬
+##曰
+##曲
+##曳
+##更
+##書
+##曹
+##曼
+##曾
+##替
+##最
+##會
+##月
+##有
+##朋
+##服
+##朐
+##朔
+##朕
+##朗
+##望
+##朝
+##期
+##朦
+##朧
+##木
+##未
+##末
+##本
+##札
+##朮
+##术
+##朱
+##朴
+##朵
+##机
+##朽
+##杀
+##杂
+##权
+##杆
+##杈
+##杉
+##李
+##杏
+##材
+##村
+##杓
+##杖
+##杜
+##杞
+##束
+##杠
+##条
+##来
+##杨
+##杭
+##杯
+##杰
+##東
+##杳
+##杵
+##杷
+##杼
+##松
+##板
+##极
+##构
+##枇
+##枉
+##枋
+##析
+##枕
+##林
+##枚
+##果
+##枝
+##枢
+##枣
+##枪
+##枫
+##枭
+##枯
+##枰
+##枱
+##枳
+##架
+##枷
+##枸
+##柄
+##柏
+##某
+##柑
+##柒
+##染
+##柔
+##柘
+##柚
+##柜
+##柞
+##柠
+##柢
+##查
+##柩
+##柬
+##柯
+##柱
+##柳
+##柴
+##柵
+##査
+##柿
+##栀
+##栃
+##栄
+##栅
+##标
+##栈
+##栉
+##栋
+##栎
+##栏
+##树
+##栓
+##栖
+##栗
+##校
+##栩
+##株
+##样
+##核
+##根
+##格
+##栽
+##栾
+##桀
+##桁
+##桂
+##桃
+##桅
+##框
+##案
+##桉
+##桌
+##桎
+##桐
+##桑
+##桓
+##桔
+##桜
+##桠
+##桡
+##桢
+##档
+##桥
+##桦
+##桧
+##桨
+##桩
+##桶
+##桿
+##梁
+##梅
+##梆
+##梏
+##梓
+##梗
+##條
+##梟
+##梢
+##梦
+##梧
+##梨
+##梭
+##梯
+##械
+##梳
+##梵
+##梶
+##检
+##棂
+##棄
+##棉
+##棋
+##棍
+##棒
+##棕
+##棗
+##棘
+##棚
+##棟
+##棠
+##棣
+##棧
+##森
+##棱
+##棲
+##棵
+##棹
+##棺
+##椁
+##椅
+##椋
+##植
+##椎
+##椒
+##検
+##椪
+##椭
+##椰
+##椹
+##椽
+##椿
+##楂
+##楊
+##楓
+##楔
+##楚
+##楝
+##楞
+##楠
+##楣
+##楨
+##楫
+##業
+##楮
+##極
+##楷
+##楸
+##楹
+##楼
+##楽
+##概
+##榄
+##榆
+##榈
+##榉
+##榔
+##榕
+##榖
+##榛
+##榜
+##榨
+##榫
+##榭
+##榮
+##榱
+##榴
+##榷
+##榻
+##槁
+##槃
+##構
+##槌
+##槍
+##槎
+##槐
+##槓
+##様
+##槛
+##槟
+##槤
+##槭
+##槲
+##槳
+##槻
+##槽
+##槿
+##樁
+##樂
+##樊
+##樑
+##樓
+##標
+##樞
+##樟
+##模
+##樣
+##権
+##横
+##樫
+##樯
+##樱
+##樵
+##樸
+##樹
+##樺
+##樽
+##樾
+##橄
+##橇
+##橋
+##橐
+##橘
+##橙
+##機
+##橡
+##橢
+##橫
+##橱
+##橹
+##橼
+##檀
+##檄
+##檎
+##檐
+##檔
+##檗
+##檜
+##檢
+##檬
+##檯
+##檳
+##檸
+##檻
+##櫃
+##櫚
+##櫛
+##櫥
+##櫸
+##櫻
+##欄
+##權
+##欒
+##欖
+##欠
+##次
+##欢
+##欣
+##欧
+##欲
+##欸
+##欺
+##欽
+##款
+##歆
+##歇
+##歉
+##歌
+##歎
+##歐
+##歓
+##歙
+##歛
+##歡
+##止
+##正
+##此
+##步
+##武
+##歧
+##歩
+##歪
+##歯
+##歲
+##歳
+##歴
+##歷
+##歸
+##歹
+##死
+##歼
+##殁
+##殃
+##殆
+##殇
+##殉
+##殊
+##残
+##殒
+##殓
+##殖
+##殘
+##殞
+##殡
+##殤
+##殭
+##殯
+##殲
+##殴
+##段
+##殷
+##殺
+##殼
+##殿
+##毀
+##毁
+##毂
+##毅
+##毆
+##毋
+##母
+##毎
+##每
+##毒
+##毓
+##比
+##毕
+##毗
+##毘
+##毙
+##毛
+##毡
+##毫
+##毯
+##毽
+##氈
+##氏
+##氐
+##民
+##氓
+##气
+##氖
+##気
+##氙
+##氛
+##氟
+##氡
+##氢
+##氣
+##氤
+##氦
+##氧
+##氨
+##氪
+##氫
+##氮
+##氯
+##氰
+##氲
+##水
+##氷
+##永
+##氹
+##氾
+##汀
+##汁
+##求
+##汆
+##汇
+##汉
+##汎
+##汐
+##汕
+##汗
+##汙
+##汛
+##汝
+##汞
+##江
+##池
+##污
+##汤
+##汨
+##汩
+##汪
+##汰
+##汲
+##汴
+##汶
+##汹
+##決
+##汽
+##汾
+##沁
+##沂
+##沃
+##沅
+##沈
+##沉
+##沌
+##沏
+##沐
+##沒
+##沓
+##沖
+##沙
+##沛
+##沟
+##没
+##沢
+##沣
+##沥
+##沦
+##沧
+##沪
+##沫
+##沭
+##沮
+##沱
+##河
+##沸
+##油
+##治
+##沼
+##沽
+##沾
+##沿
+##況
+##泄
+##泉
+##泊
+##泌
+##泓
+##法
+##泗
+##泛
+##泞
+##泠
+##泡
+##波
+##泣
+##泥
+##注
+##泪
+##泫
+##泮
+##泯
+##泰
+##泱
+##泳
+##泵
+##泷
+##泸
+##泻
+##泼
+##泽
+##泾
+##洁
+##洄
+##洋
+##洒
+##洗
+##洙
+##洛
+##洞
+##津
+##洩
+##洪
+##洮
+##洱
+##洲
+##洵
+##洶
+##洸
+##洹
+##活
+##洼
+##洽
+##派
+##流
+##浃
+##浄
+##浅
+##浆
+##浇
+##浊
+##测
+##济
+##浏
+##浑
+##浒
+##浓
+##浔
+##浙
+##浚
+##浜
+##浣
+##浦
+##浩
+##浪
+##浬
+##浮
+##浯
+##浴
+##海
+##浸
+##涂
+##涅
+##涇
+##消
+##涉
+##涌
+##涎
+##涓
+##涔
+##涕
+##涙
+##涛
+##涝
+##涞
+##涟
+##涠
+##涡
+##涣
+##涤
+##润
+##涧
+##涨
+##涩
+##涪
+##涮
+##涯
+##液
+##涵
+##涸
+##涼
+##涿
+##淀
+##淄
+##淅
+##淆
+##淇
+##淋
+##淌
+##淑
+##淒
+##淖
+##淘
+##淙
+##淚
+##淞
+##淡
+##淤
+##淦
+##淨
+##淩
+##淪
+##淫
+##淬
+##淮
+##深
+##淳
+##淵
+##混
+##淹
+##淺
+##添
+##淼
+##清
+##済
+##渉
+##渊
+##渋
+##渍
+##渎
+##渐
+##渔
+##渗
+##渙
+##渚
+##減
+##渝
+##渠
+##渡
+##渣
+##渤
+##渥
+##渦
+##温
+##測
+##渭
+##港
+##渲
+##渴
+##游
+##渺
+##渾
+##湃
+##湄
+##湊
+##湍
+##湖
+##湘
+##湛
+##湟
+##湧
+##湫
+##湮
+##湯
+##湳
+##湾
+##湿
+##満
+##溃
+##溅
+##溉
+##溏
+##源
+##準
+##溜
+##溝
+##溟
+##溢
+##溥
+##溧
+##溪
+##溫
+##溯
+##溱
+##溴
+##溶
+##溺
+##溼
+##滁
+##滂
+##滄
+##滅
+##滇
+##滋
+##滌
+##滑
+##滓
+##滔
+##滕
+##滙
+##滚
+##滝
+##滞
+##滟
+##满
+##滢
+##滤
+##滥
+##滦
+##滨
+##滩
+##滬
+##滯
+##滲
+##滴
+##滷
+##滸
+##滾
+##滿
+##漁
+##漂
+##漆
+##漉
+##漏
+##漓
+##演
+##漕
+##漠
+##漢
+##漣
+##漩
+##漪
+##漫
+##漬
+##漯
+##漱
+##漲
+##漳
+##漸
+##漾
+##漿
+##潆
+##潇
+##潋
+##潍
+##潑
+##潔
+##潘
+##潛
+##潜
+##潞
+##潟
+##潢
+##潤
+##潦
+##潧
+##潭
+##潮
+##潰
+##潴
+##潸
+##潺
+##潼
+##澀
+##澄
+##澆
+##澈
+##澍
+##澎
+##澗
+##澜
+##澡
+##澤
+##澧
+##澱
+##澳
+##澹
+##激
+##濁
+##濂
+##濃
+##濑
+##濒
+##濕
+##濘
+##濛
+##濟
+##濠
+##濡
+##濤
+##濫
+##濬
+##濮
+##濯
+##濱
+##濺
+##濾
+##瀅
+##瀆
+##瀉
+##瀋
+##瀏
+##瀑
+##瀕
+##瀘
+##瀚
+##瀛
+##瀝
+##瀞
+##瀟
+##瀧
+##瀨
+##瀬
+##瀰
+##瀾
+##灌
+##灏
+##灑
+##灘
+##灝
+##灞
+##灣
+##火
+##灬
+##灭
+##灯
+##灰
+##灵
+##灶
+##灸
+##灼
+##災
+##灾
+##灿
+##炀
+##炁
+##炅
+##炉
+##炊
+##炎
+##炒
+##炔
+##炕
+##炖
+##炙
+##炜
+##炫
+##炬
+##炭
+##炮
+##炯
+##炳
+##炷
+##炸
+##点
+##為
+##炼
+##炽
+##烁
+##烂
+##烃
+##烈
+##烊
+##烏
+##烘
+##烙
+##烛
+##烟
+##烤
+##烦
+##烧
+##烨
+##烩
+##烫
+##烬
+##热
+##烯
+##烷
+##烹
+##烽
+##焉
+##焊
+##焕
+##焖
+##焗
+##焘
+##焙
+##焚
+##焜
+##無
+##焦
+##焯
+##焰
+##焱
+##然
+##焼
+##煅
+##煉
+##煊
+##煌
+##煎
+##煒
+##煖
+##煙
+##煜
+##煞
+##煤
+##煥
+##煦
+##照
+##煨
+##煩
+##煮
+##煲
+##煸
+##煽
+##熄
+##熊
+##熏
+##熒
+##熔
+##熙
+##熟
+##熠
+##熨
+##熬
+##熱
+##熵
+##熹
+##熾
+##燁
+##燃
+##燄
+##燈
+##燉
+##燊
+##燎
+##燒
+##燔
+##燕
+##燙
+##燜
+##營
+##燥
+##燦
+##燧
+##燭
+##燮
+##燴
+##燻
+##燼
+##燿
+##爆
+##爍
+##爐
+##爛
+##爪
+##爬
+##爭
+##爰
+##爱
+##爲
+##爵
+##父
+##爷
+##爸
+##爹
+##爺
+##爻
+##爽
+##爾
+##牆
+##片
+##版
+##牌
+##牍
+##牒
+##牙
+##牛
+##牝
+##牟
+##牠
+##牡
+##牢
+##牦
+##牧
+##物
+##牯
+##牲
+##牴
+##牵
+##特
+##牺
+##牽
+##犀
+##犁
+##犄
+##犊
+##犍
+##犒
+##犢
+##犧
+##犬
+##犯
+##状
+##犷
+##犸
+##犹
+##狀
+##狂
+##狄
+##狈
+##狎
+##狐
+##狒
+##狗
+##狙
+##狞
+##狠
+##狡
+##狩
+##独
+##狭
+##狮
+##狰
+##狱
+##狸
+##狹
+##狼
+##狽
+##猎
+##猕
+##猖
+##猗
+##猙
+##猛
+##猜
+##猝
+##猥
+##猩
+##猪
+##猫
+##猬
+##献
+##猴
+##猶
+##猷
+##猾
+##猿
+##獄
+##獅
+##獎
+##獐
+##獒
+##獗
+##獠
+##獣
+##獨
+##獭
+##獰
+##獲
+##獵
+##獷
+##獸
+##獺
+##獻
+##獼
+##獾
+##玄
+##率
+##玉
+##王
+##玑
+##玖
+##玛
+##玟
+##玠
+##玥
+##玩
+##玫
+##玮
+##环
+##现
+##玲
+##玳
+##玷
+##玺
+##玻
+##珀
+##珂
+##珅
+##珈
+##珉
+##珊
+##珍
+##珏
+##珐
+##珑
+##珙
+##珞
+##珠
+##珣
+##珥
+##珩
+##珪
+##班
+##珮
+##珲
+##珺
+##現
+##球
+##琅
+##理
+##琇
+##琉
+##琊
+##琍
+##琏
+##琐
+##琛
+##琢
+##琥
+##琦
+##琨
+##琪
+##琬
+##琮
+##琰
+##琲
+##琳
+##琴
+##琵
+##琶
+##琺
+##琼
+##瑀
+##瑁
+##瑄
+##瑋
+##瑕
+##瑗
+##瑙
+##瑚
+##瑛
+##瑜
+##瑞
+##瑟
+##瑠
+##瑣
+##瑤
+##瑩
+##瑪
+##瑯
+##瑰
+##瑶
+##瑾
+##璀
+##璁
+##璃
+##璇
+##璉
+##璋
+##璎
+##璐
+##璜
+##璞
+##璟
+##璧
+##璨
+##環
+##璽
+##璿
+##瓊
+##瓏
+##瓒
+##瓜
+##瓢
+##瓣
+##瓤
+##瓦
+##瓮
+##瓯
+##瓴
+##瓶
+##瓷
+##甄
+##甌
+##甕
+##甘
+##甙
+##甚
+##甜
+##生
+##產
+##産
+##甥
+##甦
+##用
+##甩
+##甫
+##甬
+##甭
+##甯
+##田
+##由
+##甲
+##申
+##电
+##男
+##甸
+##町
+##画
+##甾
+##畀
+##畅
+##界
+##畏
+##畑
+##畔
+##留
+##畜
+##畝
+##畢
+##略
+##畦
+##番
+##畫
+##異
+##畲
+##畳
+##畴
+##當
+##畸
+##畹
+##畿
+##疆
+##疇
+##疊
+##疏
+##疑
+##疔
+##疖
+##疗
+##疙
+##疚
+##疝
+##疟
+##疡
+##疣
+##疤
+##疥
+##疫
+##疮
+##疯
+##疱
+##疲
+##疳
+##疵
+##疸
+##疹
+##疼
+##疽
+##疾
+##痂
+##病
+##症
+##痈
+##痉
+##痊
+##痍
+##痒
+##痔
+##痕
+##痘
+##痙
+##痛
+##痞
+##痠
+##痢
+##痣
+##痤
+##痧
+##痨
+##痪
+##痫
+##痰
+##痱
+##痴
+##痹
+##痺
+##痼
+##痿
+##瘀
+##瘁
+##瘋
+##瘍
+##瘓
+##瘘
+##瘙
+##瘟
+##瘠
+##瘡
+##瘢
+##瘤
+##瘦
+##瘧
+##瘩
+##瘪
+##瘫
+##瘴
+##瘸
+##瘾
+##療
+##癇
+##癌
+##癒
+##癖
+##癜
+##癞
+##癡
+##癢
+##癣
+##癥
+##癫
+##癬
+##癮
+##癱
+##癲
+##癸
+##発
+##登
+##發
+##白
+##百
+##皂
+##的
+##皆
+##皇
+##皈
+##皋
+##皎
+##皑
+##皓
+##皖
+##皙
+##皚
+##皮
+##皰
+##皱
+##皴
+##皺
+##皿
+##盂
+##盃
+##盅
+##盆
+##盈
+##益
+##盎
+##盏
+##盐
+##监
+##盒
+##盔
+##盖
+##盗
+##盘
+##盛
+##盜
+##盞
+##盟
+##盡
+##監
+##盤
+##盥
+##盧
+##盪
+##目
+##盯
+##盱
+##盲
+##直
+##相
+##盹
+##盼
+##盾
+##省
+##眈
+##眉
+##看
+##県
+##眙
+##眞
+##真
+##眠
+##眦
+##眨
+##眩
+##眯
+##眶
+##眷
+##眸
+##眺
+##眼
+##眾
+##着
+##睁
+##睇
+##睏
+##睐
+##睑
+##睛
+##睜
+##睞
+##睡
+##睢
+##督
+##睥
+##睦
+##睨
+##睪
+##睫
+##睬
+##睹
+##睽
+##睾
+##睿
+##瞄
+##瞅
+##瞇
+##瞋
+##瞌
+##瞎
+##瞑
+##瞒
+##瞓
+##瞞
+##瞟
+##瞠
+##瞥
+##瞧
+##瞩
+##瞪
+##瞬
+##瞭
+##瞰
+##瞳
+##瞻
+##瞼
+##瞿
+##矇
+##矍
+##矗
+##矚
+##矛
+##矜
+##矢
+##矣
+##知
+##矩
+##矫
+##短
+##矮
+##矯
+##石
+##矶
+##矽
+##矾
+##矿
+##码
+##砂
+##砌
+##砍
+##砒
+##研
+##砖
+##砗
+##砚
+##砝
+##砣
+##砥
+##砧
+##砭
+##砰
+##砲
+##破
+##砷
+##砸
+##砺
+##砼
+##砾
+##础
+##硅
+##硐
+##硒
+##硕
+##硝
+##硫
+##硬
+##确
+##硯
+##硼
+##碁
+##碇
+##碉
+##碌
+##碍
+##碎
+##碑
+##碓
+##碗
+##碘
+##碚
+##碛
+##碟
+##碣
+##碧
+##碩
+##碰
+##碱
+##碳
+##碴
+##確
+##碼
+##碾
+##磁
+##磅
+##磊
+##磋
+##磐
+##磕
+##磚
+##磡
+##磨
+##磬
+##磯
+##磲
+##磷
+##磺
+##礁
+##礎
+##礙
+##礡
+##礦
+##礪
+##礫
+##礴
+##示
+##礼
+##社
+##祀
+##祁
+##祂
+##祇
+##祈
+##祉
+##祎
+##祐
+##祕
+##祖
+##祗
+##祚
+##祛
+##祜
+##祝
+##神
+##祟
+##祠
+##祢
+##祥
+##票
+##祭
+##祯
+##祷
+##祸
+##祺
+##祿
+##禀
+##禁
+##禄
+##禅
+##禍
+##禎
+##福
+##禛
+##禦
+##禧
+##禪
+##禮
+##禱
+##禹
+##禺
+##离
+##禽
+##禾
+##禿
+##秀
+##私
+##秃
+##秆
+##秉
+##秋
+##种
+##科
+##秒
+##秘
+##租
+##秣
+##秤
+##秦
+##秧
+##秩
+##秭
+##积
+##称
+##秸
+##移
+##秽
+##稀
+##稅
+##程
+##稍
+##税
+##稔
+##稗
+##稚
+##稜
+##稞
+##稟
+##稠
+##稣
+##種
+##稱
+##稲
+##稳
+##稷
+##稹
+##稻
+##稼
+##稽
+##稿
+##穀
+##穂
+##穆
+##穌
+##積
+##穎
+##穗
+##穢
+##穩
+##穫
+##穴
+##究
+##穷
+##穹
+##空
+##穿
+##突
+##窃
+##窄
+##窈
+##窍
+##窑
+##窒
+##窓
+##窕
+##窖
+##窗
+##窘
+##窜
+##窝
+##窟
+##窠
+##窥
+##窦
+##窨
+##窩
+##窪
+##窮
+##窯
+##窺
+##窿
+##竄
+##竅
+##竇
+##竊
+##立
+##竖
+##站
+##竜
+##竞
+##竟
+##章
+##竣
+##童
+##竭
+##端
+##競
+##竹
+##竺
+##竽
+##竿
+##笃
+##笆
+##笈
+##笋
+##笏
+##笑
+##笔
+##笙
+##笛
+##笞
+##笠
+##符
+##笨
+##第
+##笹
+##笺
+##笼
+##筆
+##等
+##筊
+##筋
+##筍
+##筏
+##筐
+##筑
+##筒
+##答
+##策
+##筛
+##筝
+##筠
+##筱
+##筲
+##筵
+##筷
+##筹
+##签
+##简
+##箇
+##箋
+##箍
+##箏
+##箐
+##箔
+##箕
+##算
+##箝
+##管
+##箩
+##箫
+##箭
+##箱
+##箴
+##箸
+##節
+##篁
+##範
+##篆
+##篇
+##築
+##篑
+##篓
+##篙
+##篝
+##篠
+##篡
+##篤
+##篩
+##篪
+##篮
+##篱
+##篷
+##簇
+##簌
+##簍
+##簡
+##簦
+##簧
+##簪
+##簫
+##簷
+##簸
+##簽
+##簾
+##簿
+##籁
+##籃
+##籌
+##籍
+##籐
+##籟
+##籠
+##籤
+##籬
+##籮
+##籲
+##米
+##类
+##籼
+##籽
+##粄
+##粉
+##粑
+##粒
+##粕
+##粗
+##粘
+##粟
+##粤
+##粥
+##粧
+##粪
+##粮
+##粱
+##粲
+##粳
+##粵
+##粹
+##粼
+##粽
+##精
+##粿
+##糅
+##糊
+##糍
+##糕
+##糖
+##糗
+##糙
+##糜
+##糞
+##糟
+##糠
+##糧
+##糬
+##糯
+##糰
+##糸
+##系
+##糾
+##紀
+##紂
+##約
+##紅
+##紉
+##紊
+##紋
+##納
+##紐
+##紓
+##純
+##紗
+##紘
+##紙
+##級
+##紛
+##紜
+##素
+##紡
+##索
+##紧
+##紫
+##紮
+##累
+##細
+##紳
+##紹
+##紺
+##終
+##絃
+##組
+##絆
+##経
+##結
+##絕
+##絞
+##絡
+##絢
+##給
+##絨
+##絮
+##統
+##絲
+##絳
+##絵
+##絶
+##絹
+##綁
+##綏
+##綑
+##經
+##継
+##続
+##綜
+##綠
+##綢
+##綦
+##綫
+##綬
+##維
+##綱
+##網
+##綴
+##綵
+##綸
+##綺
+##綻
+##綽
+##綾
+##綿
+##緊
+##緋
+##総
+##緑
+##緒
+##緘
+##線
+##緝
+##緞
+##締
+##緣
+##編
+##緩
+##緬
+##緯
+##練
+##緹
+##緻
+##縁
+##縄
+##縈
+##縛
+##縝
+##縣
+##縫
+##縮
+##縱
+##縴
+##縷
+##總
+##績
+##繁
+##繃
+##繆
+##繇
+##繋
+##織
+##繕
+##繚
+##繞
+##繡
+##繩
+##繪
+##繫
+##繭
+##繳
+##繹
+##繼
+##繽
+##纂
+##續
+##纍
+##纏
+##纓
+##纔
+##纖
+##纜
+##纠
+##红
+##纣
+##纤
+##约
+##级
+##纨
+##纪
+##纫
+##纬
+##纭
+##纯
+##纰
+##纱
+##纲
+##纳
+##纵
+##纶
+##纷
+##纸
+##纹
+##纺
+##纽
+##纾
+##线
+##绀
+##练
+##组
+##绅
+##细
+##织
+##终
+##绊
+##绍
+##绎
+##经
+##绑
+##绒
+##结
+##绔
+##绕
+##绘
+##给
+##绚
+##绛
+##络
+##绝
+##绞
+##统
+##绡
+##绢
+##绣
+##绥
+##绦
+##继
+##绩
+##绪
+##绫
+##续
+##绮
+##绯
+##绰
+##绳
+##维
+##绵
+##绶
+##绷
+##绸
+##绻
+##综
+##绽
+##绾
+##绿
+##缀
+##缄
+##缅
+##缆
+##缇
+##缈
+##缉
+##缎
+##缓
+##缔
+##缕
+##编
+##缘
+##缙
+##缚
+##缜
+##缝
+##缠
+##缢
+##缤
+##缥
+##缨
+##缩
+##缪
+##缭
+##缮
+##缰
+##缱
+##缴
+##缸
+##缺
+##缽
+##罂
+##罄
+##罌
+##罐
+##网
+##罔
+##罕
+##罗
+##罚
+##罡
+##罢
+##罩
+##罪
+##置
+##罰
+##署
+##罵
+##罷
+##罹
+##羁
+##羅
+##羈
+##羊
+##羌
+##美
+##羔
+##羚
+##羞
+##羟
+##羡
+##羣
+##群
+##羥
+##羧
+##羨
+##義
+##羯
+##羲
+##羸
+##羹
+##羽
+##羿
+##翁
+##翅
+##翊
+##翌
+##翎
+##習
+##翔
+##翘
+##翟
+##翠
+##翡
+##翦
+##翩
+##翰
+##翱
+##翳
+##翹
+##翻
+##翼
+##耀
+##老
+##考
+##耄
+##者
+##耆
+##耋
+##而
+##耍
+##耐
+##耒
+##耕
+##耗
+##耘
+##耙
+##耦
+##耨
+##耳
+##耶
+##耷
+##耸
+##耻
+##耽
+##耿
+##聂
+##聆
+##聊
+##聋
+##职
+##聒
+##联
+##聖
+##聘
+##聚
+##聞
+##聪
+##聯
+##聰
+##聲
+##聳
+##聴
+##聶
+##職
+##聽
+##聾
+##聿
+##肃
+##肄
+##肅
+##肆
+##肇
+##肉
+##肋
+##肌
+##肏
+##肓
+##肖
+##肘
+##肚
+##肛
+##肝
+##肠
+##股
+##肢
+##肤
+##肥
+##肩
+##肪
+##肮
+##肯
+##肱
+##育
+##肴
+##肺
+##肽
+##肾
+##肿
+##胀
+##胁
+##胃
+##胄
+##胆
+##背
+##胍
+##胎
+##胖
+##胚
+##胛
+##胜
+##胝
+##胞
+##胡
+##胤
+##胥
+##胧
+##胫
+##胭
+##胯
+##胰
+##胱
+##胳
+##胴
+##胶
+##胸
+##胺
+##能
+##脂
+##脅
+##脆
+##脇
+##脈
+##脉
+##脊
+##脍
+##脏
+##脐
+##脑
+##脓
+##脖
+##脘
+##脚
+##脛
+##脣
+##脩
+##脫
+##脯
+##脱
+##脲
+##脳
+##脸
+##脹
+##脾
+##腆
+##腈
+##腊
+##腋
+##腌
+##腎
+##腐
+##腑
+##腓
+##腔
+##腕
+##腥
+##腦
+##腩
+##腫
+##腭
+##腮
+##腰
+##腱
+##腳
+##腴
+##腸
+##腹
+##腺
+##腻
+##腼
+##腾
+##腿
+##膀
+##膈
+##膊
+##膏
+##膑
+##膘
+##膚
+##膛
+##膜
+##膝
+##膠
+##膦
+##膨
+##膩
+##膳
+##膺
+##膻
+##膽
+##膾
+##膿
+##臀
+##臂
+##臃
+##臆
+##臉
+##臊
+##臍
+##臓
+##臘
+##臟
+##臣
+##臥
+##臧
+##臨
+##自
+##臬
+##臭
+##至
+##致
+##臺
+##臻
+##臼
+##臾
+##舀
+##舂
+##舅
+##舆
+##與
+##興
+##舉
+##舊
+##舌
+##舍
+##舎
+##舐
+##舒
+##舔
+##舖
+##舗
+##舛
+##舜
+##舞
+##舟
+##航
+##舫
+##般
+##舰
+##舱
+##舵
+##舶
+##舷
+##舸
+##船
+##舺
+##舾
+##艇
+##艋
+##艘
+##艙
+##艦
+##艮
+##良
+##艰
+##艱
+##色
+##艳
+##艷
+##艹
+##艺
+##艾
+##节
+##芃
+##芈
+##芊
+##芋
+##芍
+##芎
+##芒
+##芙
+##芜
+##芝
+##芡
+##芥
+##芦
+##芩
+##芪
+##芫
+##芬
+##芭
+##芮
+##芯
+##花
+##芳
+##芷
+##芸
+##芹
+##芻
+##芽
+##芾
+##苁
+##苄
+##苇
+##苋
+##苍
+##苏
+##苑
+##苒
+##苓
+##苔
+##苕
+##苗
+##苛
+##苜
+##苞
+##苟
+##苡
+##苣
+##若
+##苦
+##苫
+##苯
+##英
+##苷
+##苹
+##苻
+##茁
+##茂
+##范
+##茄
+##茅
+##茉
+##茎
+##茏
+##茗
+##茜
+##茧
+##茨
+##茫
+##茬
+##茭
+##茯
+##茱
+##茲
+##茴
+##茵
+##茶
+##茸
+##茹
+##茼
+##荀
+##荃
+##荆
+##草
+##荊
+##荏
+##荐
+##荒
+##荔
+##荖
+##荘
+##荚
+##荞
+##荟
+##荠
+##荡
+##荣
+##荤
+##荥
+##荧
+##荨
+##荪
+##荫
+##药
+##荳
+##荷
+##荸
+##荻
+##荼
+##荽
+##莅
+##莆
+##莉
+##莊
+##莎
+##莒
+##莓
+##莖
+##莘
+##莞
+##莠
+##莢
+##莧
+##莪
+##莫
+##莱
+##莲
+##莴
+##获
+##莹
+##莺
+##莽
+##莿
+##菀
+##菁
+##菅
+##菇
+##菈
+##菊
+##菌
+##菏
+##菓
+##菖
+##菘
+##菜
+##菟
+##菠
+##菡
+##菩
+##華
+##菱
+##菲
+##菸
+##菽
+##萁
+##萃
+##萄
+##萊
+##萋
+##萌
+##萍
+##萎
+##萘
+##萝
+##萤
+##营
+##萦
+##萧
+##萨
+##萩
+##萬
+##萱
+##萵
+##萸
+##萼
+##落
+##葆
+##葉
+##著
+##葚
+##葛
+##葡
+##董
+##葦
+##葩
+##葫
+##葬
+##葭
+##葯
+##葱
+##葳
+##葵
+##葷
+##葺
+##蒂
+##蒋
+##蒐
+##蒔
+##蒙
+##蒜
+##蒞
+##蒟
+##蒡
+##蒨
+##蒲
+##蒸
+##蒹
+##蒻
+##蒼
+##蒿
+##蓁
+##蓄
+##蓆
+##蓉
+##蓋
+##蓑
+##蓓
+##蓖
+##蓝
+##蓟
+##蓦
+##蓬
+##蓮
+##蓼
+##蓿
+##蔑
+##蔓
+##蔔
+##蔗
+##蔘
+##蔚
+##蔡
+##蔣
+##蔥
+##蔫
+##蔬
+##蔭
+##蔵
+##蔷
+##蔺
+##蔻
+##蔼
+##蔽
+##蕁
+##蕃
+##蕈
+##蕉
+##蕊
+##蕎
+##蕙
+##蕤
+##蕨
+##蕩
+##蕪
+##蕭
+##蕲
+##蕴
+##蕻
+##蕾
+##薄
+##薅
+##薇
+##薈
+##薊
+##薏
+##薑
+##薔
+##薙
+##薛
+##薦
+##薨
+##薩
+##薪
+##薬
+##薯
+##薰
+##薹
+##藉
+##藍
+##藏
+##藐
+##藓
+##藕
+##藜
+##藝
+##藤
+##藥
+##藩
+##藹
+##藻
+##藿
+##蘆
+##蘇
+##蘊
+##蘋
+##蘑
+##蘚
+##蘭
+##蘸
+##蘼
+##蘿
+##虎
+##虏
+##虐
+##虑
+##虔
+##處
+##虚
+##虛
+##虜
+##虞
+##號
+##虢
+##虧
+##虫
+##虬
+##虱
+##虹
+##虻
+##虽
+##虾
+##蚀
+##蚁
+##蚂
+##蚊
+##蚌
+##蚓
+##蚕
+##蚜
+##蚝
+##蚣
+##蚤
+##蚩
+##蚪
+##蚯
+##蚱
+##蚵
+##蛀
+##蛆
+##蛇
+##蛊
+##蛋
+##蛎
+##蛐
+##蛔
+##蛙
+##蛛
+##蛟
+##蛤
+##蛭
+##蛮
+##蛰
+##蛳
+##蛹
+##蛻
+##蛾
+##蜀
+##蜂
+##蜃
+##蜆
+##蜇
+##蜈
+##蜊
+##蜍
+##蜒
+##蜓
+##蜕
+##蜗
+##蜘
+##蜚
+##蜜
+##蜡
+##蜢
+##蜥
+##蜱
+##蜴
+##蜷
+##蜻
+##蜿
+##蝇
+##蝈
+##蝉
+##蝌
+##蝎
+##蝕
+##蝗
+##蝙
+##蝟
+##蝠
+##蝦
+##蝨
+##蝴
+##蝶
+##蝸
+##蝼
+##螂
+##螃
+##融
+##螞
+##螢
+##螨
+##螯
+##螳
+##螺
+##蟀
+##蟄
+##蟆
+##蟋
+##蟎
+##蟑
+##蟒
+##蟠
+##蟬
+##蟲
+##蟹
+##蟻
+##蟾
+##蠅
+##蠍
+##蠔
+##蠕
+##蠛
+##蠟
+##蠡
+##蠢
+##蠣
+##蠱
+##蠶
+##蠹
+##蠻
+##血
+##衄
+##衅
+##衆
+##行
+##衍
+##術
+##衔
+##街
+##衙
+##衛
+##衝
+##衞
+##衡
+##衢
+##衣
+##补
+##表
+##衩
+##衫
+##衬
+##衮
+##衰
+##衲
+##衷
+##衹
+##衾
+##衿
+##袁
+##袂
+##袄
+##袅
+##袈
+##袋
+##袍
+##袒
+##袖
+##袜
+##袞
+##袤
+##袪
+##被
+##袭
+##袱
+##裁
+##裂
+##装
+##裆
+##裊
+##裏
+##裔
+##裕
+##裘
+##裙
+##補
+##裝
+##裟
+##裡
+##裤
+##裨
+##裱
+##裳
+##裴
+##裸
+##裹
+##製
+##裾
+##褂
+##複
+##褐
+##褒
+##褓
+##褔
+##褚
+##褥
+##褪
+##褫
+##褲
+##褶
+##褻
+##襁
+##襄
+##襟
+##襠
+##襪
+##襬
+##襯
+##襲
+##西
+##要
+##覃
+##覆
+##覇
+##見
+##規
+##覓
+##視
+##覚
+##覦
+##覧
+##親
+##覬
+##観
+##覷
+##覺
+##覽
+##觀
+##见
+##观
+##规
+##觅
+##视
+##览
+##觉
+##觊
+##觎
+##觐
+##觑
+##角
+##觞
+##解
+##觥
+##触
+##觸
+##言
+##訂
+##計
+##訊
+##討
+##訓
+##訕
+##訖
+##託
+##記
+##訛
+##訝
+##訟
+##訣
+##訥
+##訪
+##設
+##許
+##訳
+##訴
+##訶
+##診
+##註
+##証
+##詆
+##詐
+##詔
+##評
+##詛
+##詞
+##詠
+##詡
+##詢
+##詣
+##試
+##詩
+##詫
+##詬
+##詭
+##詮
+##詰
+##話
+##該
+##詳
+##詹
+##詼
+##誅
+##誇
+##誉
+##誌
+##認
+##誓
+##誕
+##誘
+##語
+##誠
+##誡
+##誣
+##誤
+##誥
+##誦
+##誨
+##說
+##説
+##読
+##誰
+##課
+##誹
+##誼
+##調
+##諄
+##談
+##請
+##諏
+##諒
+##論
+##諗
+##諜
+##諡
+##諦
+##諧
+##諫
+##諭
+##諮
+##諱
+##諳
+##諷
+##諸
+##諺
+##諾
+##謀
+##謁
+##謂
+##謄
+##謊
+##謎
+##謐
+##謔
+##謗
+##謙
+##講
+##謝
+##謠
+##謨
+##謬
+##謹
+##謾
+##譁
+##證
+##譎
+##譏
+##識
+##譙
+##譚
+##譜
+##警
+##譬
+##譯
+##議
+##譲
+##譴
+##護
+##譽
+##讀
+##變
+##讓
+##讚
+##讞
+##计
+##订
+##认
+##讥
+##讧
+##讨
+##让
+##讪
+##讫
+##训
+##议
+##讯
+##记
+##讲
+##讳
+##讴
+##讶
+##讷
+##许
+##讹
+##论
+##讼
+##讽
+##设
+##访
+##诀
+##证
+##诃
+##评
+##诅
+##识
+##诈
+##诉
+##诊
+##诋
+##词
+##诏
+##译
+##试
+##诗
+##诘
+##诙
+##诚
+##诛
+##话
+##诞
+##诟
+##诠
+##诡
+##询
+##诣
+##诤
+##该
+##详
+##诧
+##诩
+##诫
+##诬
+##语
+##误
+##诰
+##诱
+##诲
+##说
+##诵
+##诶
+##请
+##诸
+##诺
+##读
+##诽
+##课
+##诿
+##谀
+##谁
+##调
+##谄
+##谅
+##谆
+##谈
+##谊
+##谋
+##谌
+##谍
+##谎
+##谏
+##谐
+##谑
+##谒
+##谓
+##谔
+##谕
+##谗
+##谘
+##谙
+##谚
+##谛
+##谜
+##谟
+##谢
+##谣
+##谤
+##谥
+##谦
+##谧
+##谨
+##谩
+##谪
+##谬
+##谭
+##谯
+##谱
+##谲
+##谴
+##谶
+##谷
+##豁
+##豆
+##豇
+##豈
+##豉
+##豊
+##豌
+##豎
+##豐
+##豔
+##豚
+##象
+##豢
+##豪
+##豫
+##豬
+##豹
+##豺
+##貂
+##貅
+##貌
+##貓
+##貔
+##貘
+##貝
+##貞
+##負
+##財
+##貢
+##貧
+##貨
+##販
+##貪
+##貫
+##責
+##貯
+##貰
+##貳
+##貴
+##貶
+##買
+##貸
+##費
+##貼
+##貽
+##貿
+##賀
+##賁
+##賂
+##賃
+##賄
+##資
+##賈
+##賊
+##賑
+##賓
+##賜
+##賞
+##賠
+##賡
+##賢
+##賣
+##賤
+##賦
+##質
+##賬
+##賭
+##賴
+##賺
+##購
+##賽
+##贅
+##贈
+##贊
+##贍
+##贏
+##贓
+##贖
+##贛
+##贝
+##贞
+##负
+##贡
+##财
+##责
+##贤
+##败
+##账
+##货
+##质
+##贩
+##贪
+##贫
+##贬
+##购
+##贮
+##贯
+##贰
+##贱
+##贲
+##贴
+##贵
+##贷
+##贸
+##费
+##贺
+##贻
+##贼
+##贾
+##贿
+##赁
+##赂
+##赃
+##资
+##赅
+##赈
+##赊
+##赋
+##赌
+##赎
+##赏
+##赐
+##赓
+##赔
+##赖
+##赘
+##赚
+##赛
+##赝
+##赞
+##赠
+##赡
+##赢
+##赣
+##赤
+##赦
+##赧
+##赫
+##赭
+##走
+##赳
+##赴
+##赵
+##赶
+##起
+##趁
+##超
+##越
+##趋
+##趕
+##趙
+##趟
+##趣
+##趨
+##足
+##趴
+##趵
+##趸
+##趺
+##趾
+##跃
+##跄
+##跆
+##跋
+##跌
+##跎
+##跑
+##跖
+##跚
+##跛
+##距
+##跟
+##跡
+##跤
+##跨
+##跩
+##跪
+##路
+##跳
+##践
+##跷
+##跹
+##跺
+##跻
+##踉
+##踊
+##踌
+##踏
+##踐
+##踝
+##踞
+##踟
+##踢
+##踩
+##踪
+##踮
+##踱
+##踴
+##踵
+##踹
+##蹂
+##蹄
+##蹇
+##蹈
+##蹉
+##蹊
+##蹋
+##蹑
+##蹒
+##蹙
+##蹟
+##蹣
+##蹤
+##蹦
+##蹩
+##蹬
+##蹭
+##蹲
+##蹴
+##蹶
+##蹺
+##蹼
+##蹿
+##躁
+##躇
+##躉
+##躊
+##躋
+##躍
+##躏
+##躪
+##身
+##躬
+##躯
+##躲
+##躺
+##軀
+##車
+##軋
+##軌
+##軍
+##軒
+##軟
+##転
+##軸
+##軼
+##軽
+##軾
+##較
+##載
+##輒
+##輓
+##輔
+##輕
+##輛
+##輝
+##輟
+##輩
+##輪
+##輯
+##輸
+##輻
+##輾
+##輿
+##轄
+##轅
+##轆
+##轉
+##轍
+##轎
+##轟
+##车
+##轧
+##轨
+##轩
+##转
+##轭
+##轮
+##软
+##轰
+##轲
+##轴
+##轶
+##轻
+##轼
+##载
+##轿
+##较
+##辄
+##辅
+##辆
+##辇
+##辈
+##辉
+##辊
+##辍
+##辐
+##辑
+##输
+##辕
+##辖
+##辗
+##辘
+##辙
+##辛
+##辜
+##辞
+##辟
+##辣
+##辦
+##辨
+##辩
+##辫
+##辭
+##辮
+##辯
+##辰
+##辱
+##農
+##边
+##辺
+##辻
+##込
+##辽
+##达
+##迁
+##迂
+##迄
+##迅
+##过
+##迈
+##迎
+##运
+##近
+##返
+##还
+##这
+##进
+##远
+##违
+##连
+##迟
+##迢
+##迤
+##迥
+##迦
+##迩
+##迪
+##迫
+##迭
+##述
+##迴
+##迷
+##迸
+##迹
+##迺
+##追
+##退
+##送
+##适
+##逃
+##逅
+##逆
+##选
+##逊
+##逍
+##透
+##逐
+##递
+##途
+##逕
+##逗
+##這
+##通
+##逛
+##逝
+##逞
+##速
+##造
+##逢
+##連
+##逮
+##週
+##進
+##逵
+##逶
+##逸
+##逻
+##逼
+##逾
+##遁
+##遂
+##遅
+##遇
+##遊
+##運
+##遍
+##過
+##遏
+##遐
+##遑
+##遒
+##道
+##達
+##違
+##遗
+##遙
+##遛
+##遜
+##遞
+##遠
+##遢
+##遣
+##遥
+##遨
+##適
+##遭
+##遮
+##遲
+##遴
+##遵
+##遶
+##遷
+##選
+##遺
+##遼
+##遽
+##避
+##邀
+##邁
+##邂
+##邃
+##還
+##邇
+##邈
+##邊
+##邋
+##邏
+##邑
+##邓
+##邕
+##邛
+##邝
+##邢
+##那
+##邦
+##邨
+##邪
+##邬
+##邮
+##邯
+##邰
+##邱
+##邳
+##邵
+##邸
+##邹
+##邺
+##邻
+##郁
+##郅
+##郊
+##郎
+##郑
+##郜
+##郝
+##郡
+##郢
+##郤
+##郦
+##郧
+##部
+##郫
+##郭
+##郴
+##郵
+##郷
+##郸
+##都
+##鄂
+##鄉
+##鄒
+##鄔
+##鄙
+##鄞
+##鄢
+##鄧
+##鄭
+##鄰
+##鄱
+##鄲
+##鄺
+##酉
+##酊
+##酋
+##酌
+##配
+##酐
+##酒
+##酗
+##酚
+##酝
+##酢
+##酣
+##酥
+##酩
+##酪
+##酬
+##酮
+##酯
+##酰
+##酱
+##酵
+##酶
+##酷
+##酸
+##酿
+##醃
+##醇
+##醉
+##醋
+##醍
+##醐
+##醒
+##醚
+##醛
+##醜
+##醞
+##醣
+##醪
+##醫
+##醬
+##醮
+##醯
+##醴
+##醺
+##釀
+##釁
+##采
+##釉
+##释
+##釋
+##里
+##重
+##野
+##量
+##釐
+##金
+##釗
+##釘
+##釜
+##針
+##釣
+##釦
+##釧
+##釵
+##鈀
+##鈉
+##鈍
+##鈎
+##鈔
+##鈕
+##鈞
+##鈣
+##鈦
+##鈪
+##鈴
+##鈺
+##鈾
+##鉀
+##鉄
+##鉅
+##鉉
+##鉑
+##鉗
+##鉚
+##鉛
+##鉤
+##鉴
+##鉻
+##銀
+##銃
+##銅
+##銑
+##銓
+##銖
+##銘
+##銜
+##銬
+##銭
+##銮
+##銳
+##銷
+##銹
+##鋁
+##鋅
+##鋒
+##鋤
+##鋪
+##鋰
+##鋸
+##鋼
+##錄
+##錐
+##錘
+##錚
+##錠
+##錢
+##錦
+##錨
+##錫
+##錮
+##錯
+##録
+##錳
+##錶
+##鍊
+##鍋
+##鍍
+##鍛
+##鍥
+##鍰
+##鍵
+##鍺
+##鍾
+##鎂
+##鎊
+##鎌
+##鎏
+##鎔
+##鎖
+##鎗
+##鎚
+##鎧
+##鎬
+##鎮
+##鎳
+##鏈
+##鏖
+##鏗
+##鏘
+##鏞
+##鏟
+##鏡
+##鏢
+##鏤
+##鏽
+##鐘
+##鐮
+##鐲
+##鐳
+##鐵
+##鐸
+##鐺
+##鑄
+##鑊
+##鑑
+##鑒
+##鑣
+##鑫
+##鑰
+##鑲
+##鑼
+##鑽
+##鑾
+##鑿
+##针
+##钉
+##钊
+##钎
+##钏
+##钒
+##钓
+##钗
+##钙
+##钛
+##钜
+##钝
+##钞
+##钟
+##钠
+##钡
+##钢
+##钣
+##钤
+##钥
+##钦
+##钧
+##钨
+##钩
+##钮
+##钯
+##钰
+##钱
+##钳
+##钴
+##钵
+##钺
+##钻
+##钼
+##钾
+##钿
+##铀
+##铁
+##铂
+##铃
+##铄
+##铅
+##铆
+##铉
+##铎
+##铐
+##铛
+##铜
+##铝
+##铠
+##铡
+##铢
+##铣
+##铤
+##铨
+##铩
+##铬
+##铭
+##铮
+##铰
+##铲
+##铵
+##银
+##铸
+##铺
+##链
+##铿
+##销
+##锁
+##锂
+##锄
+##锅
+##锆
+##锈
+##锉
+##锋
+##锌
+##锏
+##锐
+##锑
+##错
+##锚
+##锟
+##锡
+##锢
+##锣
+##锤
+##锥
+##锦
+##锭
+##键
+##锯
+##锰
+##锲
+##锵
+##锹
+##锺
+##锻
+##镀
+##镁
+##镂
+##镇
+##镉
+##镌
+##镍
+##镐
+##镑
+##镕
+##镖
+##镗
+##镛
+##镜
+##镣
+##镭
+##镯
+##镰
+##镳
+##镶
+##長
+##长
+##門
+##閃
+##閉
+##開
+##閎
+##閏
+##閑
+##閒
+##間
+##閔
+##閘
+##閡
+##関
+##閣
+##閥
+##閨
+##閩
+##閱
+##閲
+##閹
+##閻
+##閾
+##闆
+##闇
+##闊
+##闌
+##闍
+##闔
+##闕
+##闖
+##闘
+##關
+##闡
+##闢
+##门
+##闪
+##闫
+##闭
+##问
+##闯
+##闰
+##闲
+##间
+##闵
+##闷
+##闸
+##闹
+##闺
+##闻
+##闽
+##闾
+##阀
+##阁
+##阂
+##阅
+##阆
+##阇
+##阈
+##阉
+##阎
+##阐
+##阑
+##阔
+##阕
+##阖
+##阙
+##阚
+##阜
+##队
+##阡
+##阪
+##阮
+##阱
+##防
+##阳
+##阴
+##阵
+##阶
+##阻
+##阿
+##陀
+##陂
+##附
+##际
+##陆
+##陇
+##陈
+##陋
+##陌
+##降
+##限
+##陕
+##陛
+##陝
+##陞
+##陟
+##陡
+##院
+##陣
+##除
+##陨
+##险
+##陪
+##陰
+##陲
+##陳
+##陵
+##陶
+##陷
+##陸
+##険
+##陽
+##隅
+##隆
+##隈
+##隊
+##隋
+##隍
+##階
+##随
+##隐
+##隔
+##隕
+##隘
+##隙
+##際
+##障
+##隠
+##隣
+##隧
+##隨
+##險
+##隱
+##隴
+##隶
+##隸
+##隻
+##隼
+##隽
+##难
+##雀
+##雁
+##雄
+##雅
+##集
+##雇
+##雉
+##雋
+##雌
+##雍
+##雎
+##雏
+##雑
+##雒
+##雕
+##雖
+##雙
+##雛
+##雜
+##雞
+##離
+##難
+##雨
+##雪
+##雯
+##雰
+##雲
+##雳
+##零
+##雷
+##雹
+##電
+##雾
+##需
+##霁
+##霄
+##霆
+##震
+##霈
+##霉
+##霊
+##霍
+##霎
+##霏
+##霑
+##霓
+##霖
+##霜
+##霞
+##霧
+##霭
+##霰
+##露
+##霸
+##霹
+##霽
+##霾
+##靂
+##靄
+##靈
+##青
+##靓
+##靖
+##静
+##靚
+##靛
+##靜
+##非
+##靠
+##靡
+##面
+##靥
+##靦
+##革
+##靳
+##靴
+##靶
+##靼
+##鞅
+##鞋
+##鞍
+##鞏
+##鞑
+##鞘
+##鞠
+##鞣
+##鞦
+##鞭
+##韆
+##韋
+##韌
+##韓
+##韜
+##韦
+##韧
+##韩
+##韬
+##韭
+##音
+##韵
+##韶
+##韻
+##響
+##頁
+##頂
+##頃
+##項
+##順
+##須
+##頌
+##預
+##頑
+##頒
+##頓
+##頗
+##領
+##頜
+##頡
+##頤
+##頫
+##頭
+##頰
+##頷
+##頸
+##頹
+##頻
+##頼
+##顆
+##題
+##額
+##顎
+##顏
+##顔
+##願
+##顛
+##類
+##顧
+##顫
+##顯
+##顱
+##顴
+##页
+##顶
+##顷
+##项
+##顺
+##须
+##顼
+##顽
+##顾
+##顿
+##颁
+##颂
+##预
+##颅
+##领
+##颇
+##颈
+##颉
+##颊
+##颌
+##颍
+##颐
+##频
+##颓
+##颔
+##颖
+##颗
+##题
+##颚
+##颛
+##颜
+##额
+##颞
+##颠
+##颡
+##颢
+##颤
+##颦
+##颧
+##風
+##颯
+##颱
+##颳
+##颶
+##颼
+##飄
+##飆
+##风
+##飒
+##飓
+##飕
+##飘
+##飙
+##飚
+##飛
+##飞
+##食
+##飢
+##飨
+##飩
+##飪
+##飯
+##飲
+##飼
+##飽
+##飾
+##餃
+##餅
+##餉
+##養
+##餌
+##餐
+##餒
+##餓
+##餘
+##餚
+##餛
+##餞
+##餡
+##館
+##餮
+##餵
+##餾
+##饅
+##饈
+##饋
+##饌
+##饍
+##饑
+##饒
+##饕
+##饗
+##饞
+##饥
+##饨
+##饪
+##饬
+##饭
+##饮
+##饯
+##饰
+##饱
+##饲
+##饴
+##饵
+##饶
+##饷
+##饺
+##饼
+##饽
+##饿
+##馀
+##馁
+##馄
+##馅
+##馆
+##馈
+##馋
+##馍
+##馏
+##馒
+##馔
+##首
+##馗
+##香
+##馥
+##馨
+##馬
+##馭
+##馮
+##馳
+##馴
+##駁
+##駄
+##駅
+##駆
+##駐
+##駒
+##駕
+##駛
+##駝
+##駭
+##駱
+##駿
+##騁
+##騎
+##騏
+##験
+##騙
+##騨
+##騰
+##騷
+##驀
+##驅
+##驊
+##驍
+##驒
+##驕
+##驗
+##驚
+##驛
+##驟
+##驢
+##驥
+##马
+##驭
+##驮
+##驯
+##驰
+##驱
+##驳
+##驴
+##驶
+##驷
+##驸
+##驹
+##驻
+##驼
+##驾
+##驿
+##骁
+##骂
+##骄
+##骅
+##骆
+##骇
+##骈
+##骊
+##骋
+##验
+##骏
+##骐
+##骑
+##骗
+##骚
+##骛
+##骜
+##骞
+##骠
+##骡
+##骤
+##骥
+##骧
+##骨
+##骯
+##骰
+##骶
+##骷
+##骸
+##骼
+##髂
+##髅
+##髋
+##髏
+##髒
+##髓
+##體
+##髖
+##高
+##髦
+##髪
+##髮
+##髯
+##髻
+##鬃
+##鬆
+##鬍
+##鬓
+##鬚
+##鬟
+##鬢
+##鬣
+##鬥
+##鬧
+##鬱
+##鬼
+##魁
+##魂
+##魄
+##魅
+##魇
+##魍
+##魏
+##魔
+##魘
+##魚
+##魯
+##魷
+##鮑
+##鮨
+##鮪
+##鮭
+##鮮
+##鯉
+##鯊
+##鯖
+##鯛
+##鯨
+##鯰
+##鯽
+##鰍
+##鰓
+##鰭
+##鰲
+##鰻
+##鰾
+##鱈
+##鱉
+##鱔
+##鱗
+##鱷
+##鱸
+##鱼
+##鱿
+##鲁
+##鲈
+##鲍
+##鲑
+##鲛
+##鲜
+##鲟
+##鲢
+##鲤
+##鲨
+##鲫
+##鲱
+##鲲
+##鲶
+##鲷
+##鲸
+##鳃
+##鳄
+##鳅
+##鳌
+##鳍
+##鳕
+##鳖
+##鳗
+##鳝
+##鳞
+##鳥
+##鳩
+##鳳
+##鳴
+##鳶
+##鴉
+##鴕
+##鴛
+##鴦
+##鴨
+##鴻
+##鴿
+##鵑
+##鵜
+##鵝
+##鵡
+##鵬
+##鵰
+##鵲
+##鶘
+##鶩
+##鶯
+##鶴
+##鷗
+##鷲
+##鷹
+##鷺
+##鸚
+##鸞
+##鸟
+##鸠
+##鸡
+##鸢
+##鸣
+##鸥
+##鸦
+##鸨
+##鸪
+##鸭
+##鸯
+##鸳
+##鸵
+##鸽
+##鸾
+##鸿
+##鹂
+##鹃
+##鹄
+##鹅
+##鹈
+##鹉
+##鹊
+##鹌
+##鹏
+##鹑
+##鹕
+##鹘
+##鹜
+##鹞
+##鹤
+##鹦
+##鹧
+##鹫
+##鹭
+##鹰
+##鹳
+##鹵
+##鹹
+##鹼
+##鹽
+##鹿
+##麂
+##麋
+##麒
+##麓
+##麗
+##麝
+##麟
+##麥
+##麦
+##麩
+##麴
+##麵
+##麸
+##麺
+##麻
+##麼
+##麽
+##麾
+##黃
+##黄
+##黍
+##黎
+##黏
+##黑
+##黒
+##黔
+##默
+##黛
+##黜
+##黝
+##點
+##黠
+##黨
+##黯
+##黴
+##鼋
+##鼎
+##鼐
+##鼓
+##鼠
+##鼬
+##鼹
+##鼻
+##鼾
+##齁
+##齊
+##齋
+##齐
+##齒
+##齡
+##齢
+##齣
+##齦
+##齿
+##龄
+##龅
+##龈
+##龊
+##龋
+##龌
+##龍
+##龐
+##龔
+##龕
+##龙
+##龚
+##龛
+##龜
+##龟
+##︰
+##︱
+##︶
+##︿
+##﹁
+##﹂
+##﹍
+##﹏
+##﹐
+##﹑
+##﹒
+##﹔
+##﹕
+##﹖
+##﹗
+##﹙
+##﹚
+##﹝
+##﹞
+##﹡
+##﹣
+##!
+##"
+###
+##$
+##%
+##&
+##'
+##(
+##)
+##*
+##,
+##-
+##.
+##/
+##:
+##;
+##<
+##?
+##@
+##[
+##\
+##]
+##^
+##_
+##`
+##f
+##h
+##j
+##u
+##w
+##z
+##{
+##}
+##。
+##「
+##」
+##、
+##・
+##ッ
+##ー
+##イ
+##ク
+##シ
+##ス
+##ト
+##ノ
+##フ
+##ラ
+##ル
+##ン
+##゙
+##゚
+## ̄
+##¥
+##👍
+##🔥
+##😂
+##😎
diff --git a/intelligent_cabin/models/local_bert_multi_intent/config.json b/intelligent_cabin/models/local_bert_multi_intent/config.json
new file mode 100644
index 0000000..1216363
--- /dev/null
+++ b/intelligent_cabin/models/local_bert_multi_intent/config.json
@@ -0,0 +1,104 @@
+{
+ "architectures": [
+ "BertForSequenceClassification"
+ ],
+ "attention_probs_dropout_prob": 0.1,
+ "classifier_dropout": null,
+ "directionality": "bidi",
+ "dtype": "float32",
+ "gradient_checkpointing": false,
+ "hidden_act": "gelu",
+ "hidden_dropout_prob": 0.1,
+ "hidden_size": 768,
+ "id2label": {
+ "0": "cabin_ac_off",
+ "1": "cabin_ac_on",
+ "2": "cabin_defog_front_on",
+ "3": "cabin_defog_rear_on",
+ "4": "cabin_fan_down",
+ "5": "cabin_fan_up",
+ "6": "cabin_lights_off",
+ "7": "cabin_lights_on",
+ "8": "cabin_lock_doors",
+ "9": "cabin_mirror_fold",
+ "10": "cabin_mirror_unfold",
+ "11": "cabin_nav_cancel",
+ "12": "cabin_nav_to",
+ "13": "cabin_next_track",
+ "14": "cabin_pause_music",
+ "15": "cabin_play_music",
+ "16": "cabin_previous_track",
+ "17": "cabin_seat_heat_off",
+ "18": "cabin_seat_heat_on",
+ "19": "cabin_set_ac",
+ "20": "cabin_sunroof_close",
+ "21": "cabin_sunroof_open",
+ "22": "cabin_unlock_doors",
+ "23": "cabin_volume_down",
+ "24": "cabin_volume_mute",
+ "25": "cabin_volume_up",
+ "26": "cabin_window_close",
+ "27": "cabin_window_open",
+ "28": "cabin_wiper_off",
+ "29": "cabin_wiper_on",
+ "30": "cs_cancel_order",
+ "31": "cs_query_logistics",
+ "32": "cs_query_order",
+ "33": "cs_transfer_human"
+ },
+ "initializer_range": 0.02,
+ "intermediate_size": 3072,
+ "label2id": {
+ "cabin_ac_off": 0,
+ "cabin_ac_on": 1,
+ "cabin_defog_front_on": 2,
+ "cabin_defog_rear_on": 3,
+ "cabin_fan_down": 4,
+ "cabin_fan_up": 5,
+ "cabin_lights_off": 6,
+ "cabin_lights_on": 7,
+ "cabin_lock_doors": 8,
+ "cabin_mirror_fold": 9,
+ "cabin_mirror_unfold": 10,
+ "cabin_nav_cancel": 11,
+ "cabin_nav_to": 12,
+ "cabin_next_track": 13,
+ "cabin_pause_music": 14,
+ "cabin_play_music": 15,
+ "cabin_previous_track": 16,
+ "cabin_seat_heat_off": 17,
+ "cabin_seat_heat_on": 18,
+ "cabin_set_ac": 19,
+ "cabin_sunroof_close": 20,
+ "cabin_sunroof_open": 21,
+ "cabin_unlock_doors": 22,
+ "cabin_volume_down": 23,
+ "cabin_volume_mute": 24,
+ "cabin_volume_up": 25,
+ "cabin_window_close": 26,
+ "cabin_window_open": 27,
+ "cabin_wiper_off": 28,
+ "cabin_wiper_on": 29,
+ "cs_cancel_order": 30,
+ "cs_query_logistics": 31,
+ "cs_query_order": 32,
+ "cs_transfer_human": 33
+ },
+ "layer_norm_eps": 1e-12,
+ "max_position_embeddings": 512,
+ "model_type": "bert",
+ "num_attention_heads": 12,
+ "num_hidden_layers": 12,
+ "pad_token_id": 0,
+ "pooler_fc_size": 768,
+ "pooler_num_attention_heads": 12,
+ "pooler_num_fc_layers": 3,
+ "pooler_size_per_head": 128,
+ "pooler_type": "first_token_transform",
+ "position_embedding_type": "absolute",
+ "problem_type": "multi_label_classification",
+ "transformers_version": "4.57.3",
+ "type_vocab_size": 2,
+ "use_cache": true,
+ "vocab_size": 21128
+}
diff --git a/intelligent_cabin/models/local_bert_multi_intent/label_map.json b/intelligent_cabin/models/local_bert_multi_intent/label_map.json
new file mode 100644
index 0000000..434734d
--- /dev/null
+++ b/intelligent_cabin/models/local_bert_multi_intent/label_map.json
@@ -0,0 +1,36 @@
+{
+ "LABEL_0": "cabin_ac_off",
+ "LABEL_1": "cabin_ac_on",
+ "LABEL_2": "cabin_defog_front_on",
+ "LABEL_3": "cabin_defog_rear_on",
+ "LABEL_4": "cabin_fan_down",
+ "LABEL_5": "cabin_fan_up",
+ "LABEL_6": "cabin_lights_off",
+ "LABEL_7": "cabin_lights_on",
+ "LABEL_8": "cabin_lock_doors",
+ "LABEL_9": "cabin_mirror_fold",
+ "LABEL_10": "cabin_mirror_unfold",
+ "LABEL_11": "cabin_nav_cancel",
+ "LABEL_12": "cabin_nav_to",
+ "LABEL_13": "cabin_next_track",
+ "LABEL_14": "cabin_pause_music",
+ "LABEL_15": "cabin_play_music",
+ "LABEL_16": "cabin_previous_track",
+ "LABEL_17": "cabin_seat_heat_off",
+ "LABEL_18": "cabin_seat_heat_on",
+ "LABEL_19": "cabin_set_ac",
+ "LABEL_20": "cabin_sunroof_close",
+ "LABEL_21": "cabin_sunroof_open",
+ "LABEL_22": "cabin_unlock_doors",
+ "LABEL_23": "cabin_volume_down",
+ "LABEL_24": "cabin_volume_mute",
+ "LABEL_25": "cabin_volume_up",
+ "LABEL_26": "cabin_window_close",
+ "LABEL_27": "cabin_window_open",
+ "LABEL_28": "cabin_wiper_off",
+ "LABEL_29": "cabin_wiper_on",
+ "LABEL_30": "cs_cancel_order",
+ "LABEL_31": "cs_query_logistics",
+ "LABEL_32": "cs_query_order",
+ "LABEL_33": "cs_transfer_human"
+}
\ No newline at end of file
diff --git a/intelligent_cabin/models/local_bert_multi_intent/special_tokens_map.json b/intelligent_cabin/models/local_bert_multi_intent/special_tokens_map.json
new file mode 100644
index 0000000..9bbecc1
--- /dev/null
+++ b/intelligent_cabin/models/local_bert_multi_intent/special_tokens_map.json
@@ -0,0 +1,37 @@
+{
+ "cls_token": {
+ "content": "[CLS]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false
+ },
+ "mask_token": {
+ "content": "[MASK]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false
+ },
+ "pad_token": {
+ "content": "[PAD]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false
+ },
+ "sep_token": {
+ "content": "[SEP]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false
+ },
+ "unk_token": {
+ "content": "[UNK]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false
+ }
+}
diff --git a/intelligent_cabin/models/local_bert_multi_intent/tokenizer.json b/intelligent_cabin/models/local_bert_multi_intent/tokenizer.json
new file mode 100644
index 0000000..6b001d5
--- /dev/null
+++ b/intelligent_cabin/models/local_bert_multi_intent/tokenizer.json
@@ -0,0 +1,21292 @@
+{
+ "version": "1.0",
+ "truncation": {
+ "direction": "Right",
+ "max_length": 48,
+ "strategy": "LongestFirst",
+ "stride": 0
+ },
+ "padding": {
+ "strategy": {
+ "Fixed": 48
+ },
+ "direction": "Right",
+ "pad_to_multiple_of": null,
+ "pad_id": 0,
+ "pad_type_id": 0,
+ "pad_token": "[PAD]"
+ },
+ "added_tokens": [
+ {
+ "id": 0,
+ "content": "[PAD]",
+ "single_word": false,
+ "lstrip": false,
+ "rstrip": false,
+ "normalized": false,
+ "special": true
+ },
+ {
+ "id": 100,
+ "content": "[UNK]",
+ "single_word": false,
+ "lstrip": false,
+ "rstrip": false,
+ "normalized": false,
+ "special": true
+ },
+ {
+ "id": 101,
+ "content": "[CLS]",
+ "single_word": false,
+ "lstrip": false,
+ "rstrip": false,
+ "normalized": false,
+ "special": true
+ },
+ {
+ "id": 102,
+ "content": "[SEP]",
+ "single_word": false,
+ "lstrip": false,
+ "rstrip": false,
+ "normalized": false,
+ "special": true
+ },
+ {
+ "id": 103,
+ "content": "[MASK]",
+ "single_word": false,
+ "lstrip": false,
+ "rstrip": false,
+ "normalized": false,
+ "special": true
+ }
+ ],
+ "normalizer": {
+ "type": "BertNormalizer",
+ "clean_text": true,
+ "handle_chinese_chars": true,
+ "strip_accents": null,
+ "lowercase": true
+ },
+ "pre_tokenizer": {
+ "type": "BertPreTokenizer"
+ },
+ "post_processor": {
+ "type": "TemplateProcessing",
+ "single": [
+ {
+ "SpecialToken": {
+ "id": "[CLS]",
+ "type_id": 0
+ }
+ },
+ {
+ "Sequence": {
+ "id": "A",
+ "type_id": 0
+ }
+ },
+ {
+ "SpecialToken": {
+ "id": "[SEP]",
+ "type_id": 0
+ }
+ }
+ ],
+ "pair": [
+ {
+ "SpecialToken": {
+ "id": "[CLS]",
+ "type_id": 0
+ }
+ },
+ {
+ "Sequence": {
+ "id": "A",
+ "type_id": 0
+ }
+ },
+ {
+ "SpecialToken": {
+ "id": "[SEP]",
+ "type_id": 0
+ }
+ },
+ {
+ "Sequence": {
+ "id": "B",
+ "type_id": 1
+ }
+ },
+ {
+ "SpecialToken": {
+ "id": "[SEP]",
+ "type_id": 1
+ }
+ }
+ ],
+ "special_tokens": {
+ "[CLS]": {
+ "id": "[CLS]",
+ "ids": [
+ 101
+ ],
+ "tokens": [
+ "[CLS]"
+ ]
+ },
+ "[SEP]": {
+ "id": "[SEP]",
+ "ids": [
+ 102
+ ],
+ "tokens": [
+ "[SEP]"
+ ]
+ }
+ }
+ },
+ "decoder": {
+ "type": "WordPiece",
+ "prefix": "##",
+ "cleanup": true
+ },
+ "model": {
+ "type": "WordPiece",
+ "unk_token": "[UNK]",
+ "continuing_subword_prefix": "##",
+ "max_input_chars_per_word": 100,
+ "vocab": {
+ "[PAD]": 0,
+ "[unused1]": 1,
+ "[unused2]": 2,
+ "[unused3]": 3,
+ "[unused4]": 4,
+ "[unused5]": 5,
+ "[unused6]": 6,
+ "[unused7]": 7,
+ "[unused8]": 8,
+ "[unused9]": 9,
+ "[unused10]": 10,
+ "[unused11]": 11,
+ "[unused12]": 12,
+ "[unused13]": 13,
+ "[unused14]": 14,
+ "[unused15]": 15,
+ "[unused16]": 16,
+ "[unused17]": 17,
+ "[unused18]": 18,
+ "[unused19]": 19,
+ "[unused20]": 20,
+ "[unused21]": 21,
+ "[unused22]": 22,
+ "[unused23]": 23,
+ "[unused24]": 24,
+ "[unused25]": 25,
+ "[unused26]": 26,
+ "[unused27]": 27,
+ "[unused28]": 28,
+ "[unused29]": 29,
+ "[unused30]": 30,
+ "[unused31]": 31,
+ "[unused32]": 32,
+ "[unused33]": 33,
+ "[unused34]": 34,
+ "[unused35]": 35,
+ "[unused36]": 36,
+ "[unused37]": 37,
+ "[unused38]": 38,
+ "[unused39]": 39,
+ "[unused40]": 40,
+ "[unused41]": 41,
+ "[unused42]": 42,
+ "[unused43]": 43,
+ "[unused44]": 44,
+ "[unused45]": 45,
+ "[unused46]": 46,
+ "[unused47]": 47,
+ "[unused48]": 48,
+ "[unused49]": 49,
+ "[unused50]": 50,
+ "[unused51]": 51,
+ "[unused52]": 52,
+ "[unused53]": 53,
+ "[unused54]": 54,
+ "[unused55]": 55,
+ "[unused56]": 56,
+ "[unused57]": 57,
+ "[unused58]": 58,
+ "[unused59]": 59,
+ "[unused60]": 60,
+ "[unused61]": 61,
+ "[unused62]": 62,
+ "[unused63]": 63,
+ "[unused64]": 64,
+ "[unused65]": 65,
+ "[unused66]": 66,
+ "[unused67]": 67,
+ "[unused68]": 68,
+ "[unused69]": 69,
+ "[unused70]": 70,
+ "[unused71]": 71,
+ "[unused72]": 72,
+ "[unused73]": 73,
+ "[unused74]": 74,
+ "[unused75]": 75,
+ "[unused76]": 76,
+ "[unused77]": 77,
+ "[unused78]": 78,
+ "[unused79]": 79,
+ "[unused80]": 80,
+ "[unused81]": 81,
+ "[unused82]": 82,
+ "[unused83]": 83,
+ "[unused84]": 84,
+ "[unused85]": 85,
+ "[unused86]": 86,
+ "[unused87]": 87,
+ "[unused88]": 88,
+ "[unused89]": 89,
+ "[unused90]": 90,
+ "[unused91]": 91,
+ "[unused92]": 92,
+ "[unused93]": 93,
+ "[unused94]": 94,
+ "[unused95]": 95,
+ "[unused96]": 96,
+ "[unused97]": 97,
+ "[unused98]": 98,
+ "[unused99]": 99,
+ "[UNK]": 100,
+ "[CLS]": 101,
+ "[SEP]": 102,
+ "[MASK]": 103,
+ "": 104,
+ "": 105,
+ "!": 106,
+ "\"": 107,
+ "#": 108,
+ "$": 109,
+ "%": 110,
+ "&": 111,
+ "'": 112,
+ "(": 113,
+ ")": 114,
+ "*": 115,
+ "+": 116,
+ ",": 117,
+ "-": 118,
+ ".": 119,
+ "/": 120,
+ "0": 121,
+ "1": 122,
+ "2": 123,
+ "3": 124,
+ "4": 125,
+ "5": 126,
+ "6": 127,
+ "7": 128,
+ "8": 129,
+ "9": 130,
+ ":": 131,
+ ";": 132,
+ "<": 133,
+ "=": 134,
+ ">": 135,
+ "?": 136,
+ "@": 137,
+ "[": 138,
+ "\\": 139,
+ "]": 140,
+ "^": 141,
+ "_": 142,
+ "a": 143,
+ "b": 144,
+ "c": 145,
+ "d": 146,
+ "e": 147,
+ "f": 148,
+ "g": 149,
+ "h": 150,
+ "i": 151,
+ "j": 152,
+ "k": 153,
+ "l": 154,
+ "m": 155,
+ "n": 156,
+ "o": 157,
+ "p": 158,
+ "q": 159,
+ "r": 160,
+ "s": 161,
+ "t": 162,
+ "u": 163,
+ "v": 164,
+ "w": 165,
+ "x": 166,
+ "y": 167,
+ "z": 168,
+ "{": 169,
+ "|": 170,
+ "}": 171,
+ "~": 172,
+ "£": 173,
+ "¤": 174,
+ "¥": 175,
+ "§": 176,
+ "©": 177,
+ "«": 178,
+ "®": 179,
+ "°": 180,
+ "±": 181,
+ "²": 182,
+ "³": 183,
+ "µ": 184,
+ "·": 185,
+ "¹": 186,
+ "º": 187,
+ "»": 188,
+ "¼": 189,
+ "×": 190,
+ "ß": 191,
+ "æ": 192,
+ "÷": 193,
+ "ø": 194,
+ "đ": 195,
+ "ŋ": 196,
+ "ɔ": 197,
+ "ə": 198,
+ "ɡ": 199,
+ "ʰ": 200,
+ "ˇ": 201,
+ "ˈ": 202,
+ "ˊ": 203,
+ "ˋ": 204,
+ "ˍ": 205,
+ "ː": 206,
+ "˙": 207,
+ "˚": 208,
+ "ˢ": 209,
+ "α": 210,
+ "β": 211,
+ "γ": 212,
+ "δ": 213,
+ "ε": 214,
+ "η": 215,
+ "θ": 216,
+ "ι": 217,
+ "κ": 218,
+ "λ": 219,
+ "μ": 220,
+ "ν": 221,
+ "ο": 222,
+ "π": 223,
+ "ρ": 224,
+ "ς": 225,
+ "σ": 226,
+ "τ": 227,
+ "υ": 228,
+ "φ": 229,
+ "χ": 230,
+ "ψ": 231,
+ "ω": 232,
+ "а": 233,
+ "б": 234,
+ "в": 235,
+ "г": 236,
+ "д": 237,
+ "е": 238,
+ "ж": 239,
+ "з": 240,
+ "и": 241,
+ "к": 242,
+ "л": 243,
+ "м": 244,
+ "н": 245,
+ "о": 246,
+ "п": 247,
+ "р": 248,
+ "с": 249,
+ "т": 250,
+ "у": 251,
+ "ф": 252,
+ "х": 253,
+ "ц": 254,
+ "ч": 255,
+ "ш": 256,
+ "ы": 257,
+ "ь": 258,
+ "я": 259,
+ "і": 260,
+ "ا": 261,
+ "ب": 262,
+ "ة": 263,
+ "ت": 264,
+ "د": 265,
+ "ر": 266,
+ "س": 267,
+ "ع": 268,
+ "ل": 269,
+ "م": 270,
+ "ن": 271,
+ "ه": 272,
+ "و": 273,
+ "ي": 274,
+ "۩": 275,
+ "ก": 276,
+ "ง": 277,
+ "น": 278,
+ "ม": 279,
+ "ย": 280,
+ "ร": 281,
+ "อ": 282,
+ "า": 283,
+ "เ": 284,
+ "๑": 285,
+ "་": 286,
+ "ღ": 287,
+ "ᄀ": 288,
+ "ᄁ": 289,
+ "ᄂ": 290,
+ "ᄃ": 291,
+ "ᄅ": 292,
+ "ᄆ": 293,
+ "ᄇ": 294,
+ "ᄈ": 295,
+ "ᄉ": 296,
+ "ᄋ": 297,
+ "ᄌ": 298,
+ "ᄎ": 299,
+ "ᄏ": 300,
+ "ᄐ": 301,
+ "ᄑ": 302,
+ "ᄒ": 303,
+ "ᅡ": 304,
+ "ᅢ": 305,
+ "ᅣ": 306,
+ "ᅥ": 307,
+ "ᅦ": 308,
+ "ᅧ": 309,
+ "ᅨ": 310,
+ "ᅩ": 311,
+ "ᅪ": 312,
+ "ᅬ": 313,
+ "ᅭ": 314,
+ "ᅮ": 315,
+ "ᅯ": 316,
+ "ᅲ": 317,
+ "ᅳ": 318,
+ "ᅴ": 319,
+ "ᅵ": 320,
+ "ᆨ": 321,
+ "ᆫ": 322,
+ "ᆯ": 323,
+ "ᆷ": 324,
+ "ᆸ": 325,
+ "ᆺ": 326,
+ "ᆻ": 327,
+ "ᆼ": 328,
+ "ᗜ": 329,
+ "ᵃ": 330,
+ "ᵉ": 331,
+ "ᵍ": 332,
+ "ᵏ": 333,
+ "ᵐ": 334,
+ "ᵒ": 335,
+ "ᵘ": 336,
+ "‖": 337,
+ "„": 338,
+ "†": 339,
+ "•": 340,
+ "‥": 341,
+ "‧": 342,
+ "
": 343,
+ "‰": 344,
+ "′": 345,
+ "″": 346,
+ "‹": 347,
+ "›": 348,
+ "※": 349,
+ "‿": 350,
+ "⁄": 351,
+ "ⁱ": 352,
+ "⁺": 353,
+ "ⁿ": 354,
+ "₁": 355,
+ "₂": 356,
+ "₃": 357,
+ "₄": 358,
+ "€": 359,
+ "℃": 360,
+ "№": 361,
+ "™": 362,
+ "ⅰ": 363,
+ "ⅱ": 364,
+ "ⅲ": 365,
+ "ⅳ": 366,
+ "ⅴ": 367,
+ "←": 368,
+ "↑": 369,
+ "→": 370,
+ "↓": 371,
+ "↔": 372,
+ "↗": 373,
+ "↘": 374,
+ "⇒": 375,
+ "∀": 376,
+ "−": 377,
+ "∕": 378,
+ "∙": 379,
+ "√": 380,
+ "∞": 381,
+ "∟": 382,
+ "∠": 383,
+ "∣": 384,
+ "∥": 385,
+ "∩": 386,
+ "∮": 387,
+ "∶": 388,
+ "∼": 389,
+ "∽": 390,
+ "≈": 391,
+ "≒": 392,
+ "≡": 393,
+ "≤": 394,
+ "≥": 395,
+ "≦": 396,
+ "≧": 397,
+ "≪": 398,
+ "≫": 399,
+ "⊙": 400,
+ "⋅": 401,
+ "⋈": 402,
+ "⋯": 403,
+ "⌒": 404,
+ "①": 405,
+ "②": 406,
+ "③": 407,
+ "④": 408,
+ "⑤": 409,
+ "⑥": 410,
+ "⑦": 411,
+ "⑧": 412,
+ "⑨": 413,
+ "⑩": 414,
+ "⑴": 415,
+ "⑵": 416,
+ "⑶": 417,
+ "⑷": 418,
+ "⑸": 419,
+ "⒈": 420,
+ "⒉": 421,
+ "⒊": 422,
+ "⒋": 423,
+ "ⓒ": 424,
+ "ⓔ": 425,
+ "ⓘ": 426,
+ "─": 427,
+ "━": 428,
+ "│": 429,
+ "┃": 430,
+ "┅": 431,
+ "┆": 432,
+ "┊": 433,
+ "┌": 434,
+ "└": 435,
+ "├": 436,
+ "┣": 437,
+ "═": 438,
+ "║": 439,
+ "╚": 440,
+ "╞": 441,
+ "╠": 442,
+ "╭": 443,
+ "╮": 444,
+ "╯": 445,
+ "╰": 446,
+ "╱": 447,
+ "╳": 448,
+ "▂": 449,
+ "▃": 450,
+ "▅": 451,
+ "▇": 452,
+ "█": 453,
+ "▉": 454,
+ "▋": 455,
+ "▌": 456,
+ "▍": 457,
+ "▎": 458,
+ "■": 459,
+ "□": 460,
+ "▪": 461,
+ "▫": 462,
+ "▬": 463,
+ "▲": 464,
+ "△": 465,
+ "▶": 466,
+ "►": 467,
+ "▼": 468,
+ "▽": 469,
+ "◆": 470,
+ "◇": 471,
+ "○": 472,
+ "◎": 473,
+ "●": 474,
+ "◕": 475,
+ "◠": 476,
+ "◢": 477,
+ "◤": 478,
+ "☀": 479,
+ "★": 480,
+ "☆": 481,
+ "☕": 482,
+ "☞": 483,
+ "☺": 484,
+ "☼": 485,
+ "♀": 486,
+ "♂": 487,
+ "♠": 488,
+ "♡": 489,
+ "♣": 490,
+ "♥": 491,
+ "♦": 492,
+ "♪": 493,
+ "♫": 494,
+ "♬": 495,
+ "✈": 496,
+ "✔": 497,
+ "✕": 498,
+ "✖": 499,
+ "✦": 500,
+ "✨": 501,
+ "✪": 502,
+ "✰": 503,
+ "✿": 504,
+ "❀": 505,
+ "❤": 506,
+ "➜": 507,
+ "➤": 508,
+ "⦿": 509,
+ "、": 510,
+ "。": 511,
+ "〃": 512,
+ "々": 513,
+ "〇": 514,
+ "〈": 515,
+ "〉": 516,
+ "《": 517,
+ "》": 518,
+ "「": 519,
+ "」": 520,
+ "『": 521,
+ "』": 522,
+ "【": 523,
+ "】": 524,
+ "〓": 525,
+ "〔": 526,
+ "〕": 527,
+ "〖": 528,
+ "〗": 529,
+ "〜": 530,
+ "〝": 531,
+ "〞": 532,
+ "ぁ": 533,
+ "あ": 534,
+ "ぃ": 535,
+ "い": 536,
+ "う": 537,
+ "ぇ": 538,
+ "え": 539,
+ "お": 540,
+ "か": 541,
+ "き": 542,
+ "く": 543,
+ "け": 544,
+ "こ": 545,
+ "さ": 546,
+ "し": 547,
+ "す": 548,
+ "せ": 549,
+ "そ": 550,
+ "た": 551,
+ "ち": 552,
+ "っ": 553,
+ "つ": 554,
+ "て": 555,
+ "と": 556,
+ "な": 557,
+ "に": 558,
+ "ぬ": 559,
+ "ね": 560,
+ "の": 561,
+ "は": 562,
+ "ひ": 563,
+ "ふ": 564,
+ "へ": 565,
+ "ほ": 566,
+ "ま": 567,
+ "み": 568,
+ "む": 569,
+ "め": 570,
+ "も": 571,
+ "ゃ": 572,
+ "や": 573,
+ "ゅ": 574,
+ "ゆ": 575,
+ "ょ": 576,
+ "よ": 577,
+ "ら": 578,
+ "り": 579,
+ "る": 580,
+ "れ": 581,
+ "ろ": 582,
+ "わ": 583,
+ "を": 584,
+ "ん": 585,
+ "゜": 586,
+ "ゝ": 587,
+ "ァ": 588,
+ "ア": 589,
+ "ィ": 590,
+ "イ": 591,
+ "ゥ": 592,
+ "ウ": 593,
+ "ェ": 594,
+ "エ": 595,
+ "ォ": 596,
+ "オ": 597,
+ "カ": 598,
+ "キ": 599,
+ "ク": 600,
+ "ケ": 601,
+ "コ": 602,
+ "サ": 603,
+ "シ": 604,
+ "ス": 605,
+ "セ": 606,
+ "ソ": 607,
+ "タ": 608,
+ "チ": 609,
+ "ッ": 610,
+ "ツ": 611,
+ "テ": 612,
+ "ト": 613,
+ "ナ": 614,
+ "ニ": 615,
+ "ヌ": 616,
+ "ネ": 617,
+ "ノ": 618,
+ "ハ": 619,
+ "ヒ": 620,
+ "フ": 621,
+ "ヘ": 622,
+ "ホ": 623,
+ "マ": 624,
+ "ミ": 625,
+ "ム": 626,
+ "メ": 627,
+ "モ": 628,
+ "ャ": 629,
+ "ヤ": 630,
+ "ュ": 631,
+ "ユ": 632,
+ "ョ": 633,
+ "ヨ": 634,
+ "ラ": 635,
+ "リ": 636,
+ "ル": 637,
+ "レ": 638,
+ "ロ": 639,
+ "ワ": 640,
+ "ヲ": 641,
+ "ン": 642,
+ "ヶ": 643,
+ "・": 644,
+ "ー": 645,
+ "ヽ": 646,
+ "ㄅ": 647,
+ "ㄆ": 648,
+ "ㄇ": 649,
+ "ㄉ": 650,
+ "ㄋ": 651,
+ "ㄌ": 652,
+ "ㄍ": 653,
+ "ㄎ": 654,
+ "ㄏ": 655,
+ "ㄒ": 656,
+ "ㄚ": 657,
+ "ㄛ": 658,
+ "ㄞ": 659,
+ "ㄟ": 660,
+ "ㄢ": 661,
+ "ㄤ": 662,
+ "ㄥ": 663,
+ "ㄧ": 664,
+ "ㄨ": 665,
+ "ㆍ": 666,
+ "㈦": 667,
+ "㊣": 668,
+ "㎡": 669,
+ "㗎": 670,
+ "一": 671,
+ "丁": 672,
+ "七": 673,
+ "万": 674,
+ "丈": 675,
+ "三": 676,
+ "上": 677,
+ "下": 678,
+ "不": 679,
+ "与": 680,
+ "丐": 681,
+ "丑": 682,
+ "专": 683,
+ "且": 684,
+ "丕": 685,
+ "世": 686,
+ "丘": 687,
+ "丙": 688,
+ "业": 689,
+ "丛": 690,
+ "东": 691,
+ "丝": 692,
+ "丞": 693,
+ "丟": 694,
+ "両": 695,
+ "丢": 696,
+ "两": 697,
+ "严": 698,
+ "並": 699,
+ "丧": 700,
+ "丨": 701,
+ "个": 702,
+ "丫": 703,
+ "中": 704,
+ "丰": 705,
+ "串": 706,
+ "临": 707,
+ "丶": 708,
+ "丸": 709,
+ "丹": 710,
+ "为": 711,
+ "主": 712,
+ "丼": 713,
+ "丽": 714,
+ "举": 715,
+ "丿": 716,
+ "乂": 717,
+ "乃": 718,
+ "久": 719,
+ "么": 720,
+ "义": 721,
+ "之": 722,
+ "乌": 723,
+ "乍": 724,
+ "乎": 725,
+ "乏": 726,
+ "乐": 727,
+ "乒": 728,
+ "乓": 729,
+ "乔": 730,
+ "乖": 731,
+ "乗": 732,
+ "乘": 733,
+ "乙": 734,
+ "乜": 735,
+ "九": 736,
+ "乞": 737,
+ "也": 738,
+ "习": 739,
+ "乡": 740,
+ "书": 741,
+ "乩": 742,
+ "买": 743,
+ "乱": 744,
+ "乳": 745,
+ "乾": 746,
+ "亀": 747,
+ "亂": 748,
+ "了": 749,
+ "予": 750,
+ "争": 751,
+ "事": 752,
+ "二": 753,
+ "于": 754,
+ "亏": 755,
+ "云": 756,
+ "互": 757,
+ "五": 758,
+ "井": 759,
+ "亘": 760,
+ "亙": 761,
+ "亚": 762,
+ "些": 763,
+ "亜": 764,
+ "亞": 765,
+ "亟": 766,
+ "亡": 767,
+ "亢": 768,
+ "交": 769,
+ "亥": 770,
+ "亦": 771,
+ "产": 772,
+ "亨": 773,
+ "亩": 774,
+ "享": 775,
+ "京": 776,
+ "亭": 777,
+ "亮": 778,
+ "亲": 779,
+ "亳": 780,
+ "亵": 781,
+ "人": 782,
+ "亿": 783,
+ "什": 784,
+ "仁": 785,
+ "仃": 786,
+ "仄": 787,
+ "仅": 788,
+ "仆": 789,
+ "仇": 790,
+ "今": 791,
+ "介": 792,
+ "仍": 793,
+ "从": 794,
+ "仏": 795,
+ "仑": 796,
+ "仓": 797,
+ "仔": 798,
+ "仕": 799,
+ "他": 800,
+ "仗": 801,
+ "付": 802,
+ "仙": 803,
+ "仝": 804,
+ "仞": 805,
+ "仟": 806,
+ "代": 807,
+ "令": 808,
+ "以": 809,
+ "仨": 810,
+ "仪": 811,
+ "们": 812,
+ "仮": 813,
+ "仰": 814,
+ "仲": 815,
+ "件": 816,
+ "价": 817,
+ "任": 818,
+ "份": 819,
+ "仿": 820,
+ "企": 821,
+ "伉": 822,
+ "伊": 823,
+ "伍": 824,
+ "伎": 825,
+ "伏": 826,
+ "伐": 827,
+ "休": 828,
+ "伕": 829,
+ "众": 830,
+ "优": 831,
+ "伙": 832,
+ "会": 833,
+ "伝": 834,
+ "伞": 835,
+ "伟": 836,
+ "传": 837,
+ "伢": 838,
+ "伤": 839,
+ "伦": 840,
+ "伪": 841,
+ "伫": 842,
+ "伯": 843,
+ "估": 844,
+ "伴": 845,
+ "伶": 846,
+ "伸": 847,
+ "伺": 848,
+ "似": 849,
+ "伽": 850,
+ "佃": 851,
+ "但": 852,
+ "佇": 853,
+ "佈": 854,
+ "位": 855,
+ "低": 856,
+ "住": 857,
+ "佐": 858,
+ "佑": 859,
+ "体": 860,
+ "佔": 861,
+ "何": 862,
+ "佗": 863,
+ "佘": 864,
+ "余": 865,
+ "佚": 866,
+ "佛": 867,
+ "作": 868,
+ "佝": 869,
+ "佞": 870,
+ "佟": 871,
+ "你": 872,
+ "佢": 873,
+ "佣": 874,
+ "佤": 875,
+ "佥": 876,
+ "佩": 877,
+ "佬": 878,
+ "佯": 879,
+ "佰": 880,
+ "佳": 881,
+ "併": 882,
+ "佶": 883,
+ "佻": 884,
+ "佼": 885,
+ "使": 886,
+ "侃": 887,
+ "侄": 888,
+ "來": 889,
+ "侈": 890,
+ "例": 891,
+ "侍": 892,
+ "侏": 893,
+ "侑": 894,
+ "侖": 895,
+ "侗": 896,
+ "供": 897,
+ "依": 898,
+ "侠": 899,
+ "価": 900,
+ "侣": 901,
+ "侥": 902,
+ "侦": 903,
+ "侧": 904,
+ "侨": 905,
+ "侬": 906,
+ "侮": 907,
+ "侯": 908,
+ "侵": 909,
+ "侶": 910,
+ "侷": 911,
+ "便": 912,
+ "係": 913,
+ "促": 914,
+ "俄": 915,
+ "俊": 916,
+ "俎": 917,
+ "俏": 918,
+ "俐": 919,
+ "俑": 920,
+ "俗": 921,
+ "俘": 922,
+ "俚": 923,
+ "保": 924,
+ "俞": 925,
+ "俟": 926,
+ "俠": 927,
+ "信": 928,
+ "俨": 929,
+ "俩": 930,
+ "俪": 931,
+ "俬": 932,
+ "俭": 933,
+ "修": 934,
+ "俯": 935,
+ "俱": 936,
+ "俳": 937,
+ "俸": 938,
+ "俺": 939,
+ "俾": 940,
+ "倆": 941,
+ "倉": 942,
+ "個": 943,
+ "倌": 944,
+ "倍": 945,
+ "倏": 946,
+ "們": 947,
+ "倒": 948,
+ "倔": 949,
+ "倖": 950,
+ "倘": 951,
+ "候": 952,
+ "倚": 953,
+ "倜": 954,
+ "借": 955,
+ "倡": 956,
+ "値": 957,
+ "倦": 958,
+ "倩": 959,
+ "倪": 960,
+ "倫": 961,
+ "倬": 962,
+ "倭": 963,
+ "倶": 964,
+ "债": 965,
+ "值": 966,
+ "倾": 967,
+ "偃": 968,
+ "假": 969,
+ "偈": 970,
+ "偉": 971,
+ "偌": 972,
+ "偎": 973,
+ "偏": 974,
+ "偕": 975,
+ "做": 976,
+ "停": 977,
+ "健": 978,
+ "側": 979,
+ "偵": 980,
+ "偶": 981,
+ "偷": 982,
+ "偻": 983,
+ "偽": 984,
+ "偿": 985,
+ "傀": 986,
+ "傅": 987,
+ "傍": 988,
+ "傑": 989,
+ "傘": 990,
+ "備": 991,
+ "傚": 992,
+ "傢": 993,
+ "傣": 994,
+ "傥": 995,
+ "储": 996,
+ "傩": 997,
+ "催": 998,
+ "傭": 999,
+ "傲": 1000,
+ "傳": 1001,
+ "債": 1002,
+ "傷": 1003,
+ "傻": 1004,
+ "傾": 1005,
+ "僅": 1006,
+ "働": 1007,
+ "像": 1008,
+ "僑": 1009,
+ "僕": 1010,
+ "僖": 1011,
+ "僚": 1012,
+ "僥": 1013,
+ "僧": 1014,
+ "僭": 1015,
+ "僮": 1016,
+ "僱": 1017,
+ "僵": 1018,
+ "價": 1019,
+ "僻": 1020,
+ "儀": 1021,
+ "儂": 1022,
+ "億": 1023,
+ "儆": 1024,
+ "儉": 1025,
+ "儋": 1026,
+ "儒": 1027,
+ "儕": 1028,
+ "儘": 1029,
+ "償": 1030,
+ "儡": 1031,
+ "優": 1032,
+ "儲": 1033,
+ "儷": 1034,
+ "儼": 1035,
+ "儿": 1036,
+ "兀": 1037,
+ "允": 1038,
+ "元": 1039,
+ "兄": 1040,
+ "充": 1041,
+ "兆": 1042,
+ "兇": 1043,
+ "先": 1044,
+ "光": 1045,
+ "克": 1046,
+ "兌": 1047,
+ "免": 1048,
+ "児": 1049,
+ "兑": 1050,
+ "兒": 1051,
+ "兔": 1052,
+ "兖": 1053,
+ "党": 1054,
+ "兜": 1055,
+ "兢": 1056,
+ "入": 1057,
+ "內": 1058,
+ "全": 1059,
+ "兩": 1060,
+ "八": 1061,
+ "公": 1062,
+ "六": 1063,
+ "兮": 1064,
+ "兰": 1065,
+ "共": 1066,
+ "兲": 1067,
+ "关": 1068,
+ "兴": 1069,
+ "兵": 1070,
+ "其": 1071,
+ "具": 1072,
+ "典": 1073,
+ "兹": 1074,
+ "养": 1075,
+ "兼": 1076,
+ "兽": 1077,
+ "冀": 1078,
+ "内": 1079,
+ "円": 1080,
+ "冇": 1081,
+ "冈": 1082,
+ "冉": 1083,
+ "冊": 1084,
+ "册": 1085,
+ "再": 1086,
+ "冏": 1087,
+ "冒": 1088,
+ "冕": 1089,
+ "冗": 1090,
+ "写": 1091,
+ "军": 1092,
+ "农": 1093,
+ "冠": 1094,
+ "冢": 1095,
+ "冤": 1096,
+ "冥": 1097,
+ "冨": 1098,
+ "冪": 1099,
+ "冬": 1100,
+ "冯": 1101,
+ "冰": 1102,
+ "冲": 1103,
+ "决": 1104,
+ "况": 1105,
+ "冶": 1106,
+ "冷": 1107,
+ "冻": 1108,
+ "冼": 1109,
+ "冽": 1110,
+ "冾": 1111,
+ "净": 1112,
+ "凄": 1113,
+ "准": 1114,
+ "凇": 1115,
+ "凈": 1116,
+ "凉": 1117,
+ "凋": 1118,
+ "凌": 1119,
+ "凍": 1120,
+ "减": 1121,
+ "凑": 1122,
+ "凛": 1123,
+ "凜": 1124,
+ "凝": 1125,
+ "几": 1126,
+ "凡": 1127,
+ "凤": 1128,
+ "処": 1129,
+ "凪": 1130,
+ "凭": 1131,
+ "凯": 1132,
+ "凰": 1133,
+ "凱": 1134,
+ "凳": 1135,
+ "凶": 1136,
+ "凸": 1137,
+ "凹": 1138,
+ "出": 1139,
+ "击": 1140,
+ "函": 1141,
+ "凿": 1142,
+ "刀": 1143,
+ "刁": 1144,
+ "刃": 1145,
+ "分": 1146,
+ "切": 1147,
+ "刈": 1148,
+ "刊": 1149,
+ "刍": 1150,
+ "刎": 1151,
+ "刑": 1152,
+ "划": 1153,
+ "列": 1154,
+ "刘": 1155,
+ "则": 1156,
+ "刚": 1157,
+ "创": 1158,
+ "初": 1159,
+ "删": 1160,
+ "判": 1161,
+ "別": 1162,
+ "刨": 1163,
+ "利": 1164,
+ "刪": 1165,
+ "别": 1166,
+ "刮": 1167,
+ "到": 1168,
+ "制": 1169,
+ "刷": 1170,
+ "券": 1171,
+ "刹": 1172,
+ "刺": 1173,
+ "刻": 1174,
+ "刽": 1175,
+ "剁": 1176,
+ "剂": 1177,
+ "剃": 1178,
+ "則": 1179,
+ "剉": 1180,
+ "削": 1181,
+ "剋": 1182,
+ "剌": 1183,
+ "前": 1184,
+ "剎": 1185,
+ "剐": 1186,
+ "剑": 1187,
+ "剔": 1188,
+ "剖": 1189,
+ "剛": 1190,
+ "剜": 1191,
+ "剝": 1192,
+ "剣": 1193,
+ "剤": 1194,
+ "剥": 1195,
+ "剧": 1196,
+ "剩": 1197,
+ "剪": 1198,
+ "副": 1199,
+ "割": 1200,
+ "創": 1201,
+ "剷": 1202,
+ "剽": 1203,
+ "剿": 1204,
+ "劃": 1205,
+ "劇": 1206,
+ "劈": 1207,
+ "劉": 1208,
+ "劊": 1209,
+ "劍": 1210,
+ "劏": 1211,
+ "劑": 1212,
+ "力": 1213,
+ "劝": 1214,
+ "办": 1215,
+ "功": 1216,
+ "加": 1217,
+ "务": 1218,
+ "劣": 1219,
+ "动": 1220,
+ "助": 1221,
+ "努": 1222,
+ "劫": 1223,
+ "劭": 1224,
+ "励": 1225,
+ "劲": 1226,
+ "劳": 1227,
+ "労": 1228,
+ "劵": 1229,
+ "効": 1230,
+ "劾": 1231,
+ "势": 1232,
+ "勁": 1233,
+ "勃": 1234,
+ "勇": 1235,
+ "勉": 1236,
+ "勋": 1237,
+ "勐": 1238,
+ "勒": 1239,
+ "動": 1240,
+ "勖": 1241,
+ "勘": 1242,
+ "務": 1243,
+ "勛": 1244,
+ "勝": 1245,
+ "勞": 1246,
+ "募": 1247,
+ "勢": 1248,
+ "勤": 1249,
+ "勧": 1250,
+ "勳": 1251,
+ "勵": 1252,
+ "勸": 1253,
+ "勺": 1254,
+ "勻": 1255,
+ "勾": 1256,
+ "勿": 1257,
+ "匀": 1258,
+ "包": 1259,
+ "匆": 1260,
+ "匈": 1261,
+ "匍": 1262,
+ "匐": 1263,
+ "匕": 1264,
+ "化": 1265,
+ "北": 1266,
+ "匙": 1267,
+ "匝": 1268,
+ "匠": 1269,
+ "匡": 1270,
+ "匣": 1271,
+ "匪": 1272,
+ "匮": 1273,
+ "匯": 1274,
+ "匱": 1275,
+ "匹": 1276,
+ "区": 1277,
+ "医": 1278,
+ "匾": 1279,
+ "匿": 1280,
+ "區": 1281,
+ "十": 1282,
+ "千": 1283,
+ "卅": 1284,
+ "升": 1285,
+ "午": 1286,
+ "卉": 1287,
+ "半": 1288,
+ "卍": 1289,
+ "华": 1290,
+ "协": 1291,
+ "卑": 1292,
+ "卒": 1293,
+ "卓": 1294,
+ "協": 1295,
+ "单": 1296,
+ "卖": 1297,
+ "南": 1298,
+ "単": 1299,
+ "博": 1300,
+ "卜": 1301,
+ "卞": 1302,
+ "卟": 1303,
+ "占": 1304,
+ "卡": 1305,
+ "卢": 1306,
+ "卤": 1307,
+ "卦": 1308,
+ "卧": 1309,
+ "卫": 1310,
+ "卮": 1311,
+ "卯": 1312,
+ "印": 1313,
+ "危": 1314,
+ "即": 1315,
+ "却": 1316,
+ "卵": 1317,
+ "卷": 1318,
+ "卸": 1319,
+ "卻": 1320,
+ "卿": 1321,
+ "厂": 1322,
+ "厄": 1323,
+ "厅": 1324,
+ "历": 1325,
+ "厉": 1326,
+ "压": 1327,
+ "厌": 1328,
+ "厕": 1329,
+ "厘": 1330,
+ "厚": 1331,
+ "厝": 1332,
+ "原": 1333,
+ "厢": 1334,
+ "厥": 1335,
+ "厦": 1336,
+ "厨": 1337,
+ "厩": 1338,
+ "厭": 1339,
+ "厮": 1340,
+ "厲": 1341,
+ "厳": 1342,
+ "去": 1343,
+ "县": 1344,
+ "叁": 1345,
+ "参": 1346,
+ "參": 1347,
+ "又": 1348,
+ "叉": 1349,
+ "及": 1350,
+ "友": 1351,
+ "双": 1352,
+ "反": 1353,
+ "収": 1354,
+ "发": 1355,
+ "叔": 1356,
+ "取": 1357,
+ "受": 1358,
+ "变": 1359,
+ "叙": 1360,
+ "叛": 1361,
+ "叟": 1362,
+ "叠": 1363,
+ "叡": 1364,
+ "叢": 1365,
+ "口": 1366,
+ "古": 1367,
+ "句": 1368,
+ "另": 1369,
+ "叨": 1370,
+ "叩": 1371,
+ "只": 1372,
+ "叫": 1373,
+ "召": 1374,
+ "叭": 1375,
+ "叮": 1376,
+ "可": 1377,
+ "台": 1378,
+ "叱": 1379,
+ "史": 1380,
+ "右": 1381,
+ "叵": 1382,
+ "叶": 1383,
+ "号": 1384,
+ "司": 1385,
+ "叹": 1386,
+ "叻": 1387,
+ "叼": 1388,
+ "叽": 1389,
+ "吁": 1390,
+ "吃": 1391,
+ "各": 1392,
+ "吆": 1393,
+ "合": 1394,
+ "吉": 1395,
+ "吊": 1396,
+ "吋": 1397,
+ "同": 1398,
+ "名": 1399,
+ "后": 1400,
+ "吏": 1401,
+ "吐": 1402,
+ "向": 1403,
+ "吒": 1404,
+ "吓": 1405,
+ "吕": 1406,
+ "吖": 1407,
+ "吗": 1408,
+ "君": 1409,
+ "吝": 1410,
+ "吞": 1411,
+ "吟": 1412,
+ "吠": 1413,
+ "吡": 1414,
+ "否": 1415,
+ "吧": 1416,
+ "吨": 1417,
+ "吩": 1418,
+ "含": 1419,
+ "听": 1420,
+ "吭": 1421,
+ "吮": 1422,
+ "启": 1423,
+ "吱": 1424,
+ "吳": 1425,
+ "吴": 1426,
+ "吵": 1427,
+ "吶": 1428,
+ "吸": 1429,
+ "吹": 1430,
+ "吻": 1431,
+ "吼": 1432,
+ "吽": 1433,
+ "吾": 1434,
+ "呀": 1435,
+ "呂": 1436,
+ "呃": 1437,
+ "呆": 1438,
+ "呈": 1439,
+ "告": 1440,
+ "呋": 1441,
+ "呎": 1442,
+ "呐": 1443,
+ "呓": 1444,
+ "呕": 1445,
+ "呗": 1446,
+ "员": 1447,
+ "呛": 1448,
+ "呜": 1449,
+ "呢": 1450,
+ "呤": 1451,
+ "呦": 1452,
+ "周": 1453,
+ "呱": 1454,
+ "呲": 1455,
+ "味": 1456,
+ "呵": 1457,
+ "呷": 1458,
+ "呸": 1459,
+ "呻": 1460,
+ "呼": 1461,
+ "命": 1462,
+ "咀": 1463,
+ "咁": 1464,
+ "咂": 1465,
+ "咄": 1466,
+ "咆": 1467,
+ "咋": 1468,
+ "和": 1469,
+ "咎": 1470,
+ "咏": 1471,
+ "咐": 1472,
+ "咒": 1473,
+ "咔": 1474,
+ "咕": 1475,
+ "咖": 1476,
+ "咗": 1477,
+ "咘": 1478,
+ "咙": 1479,
+ "咚": 1480,
+ "咛": 1481,
+ "咣": 1482,
+ "咤": 1483,
+ "咦": 1484,
+ "咧": 1485,
+ "咨": 1486,
+ "咩": 1487,
+ "咪": 1488,
+ "咫": 1489,
+ "咬": 1490,
+ "咭": 1491,
+ "咯": 1492,
+ "咱": 1493,
+ "咲": 1494,
+ "咳": 1495,
+ "咸": 1496,
+ "咻": 1497,
+ "咽": 1498,
+ "咿": 1499,
+ "哀": 1500,
+ "品": 1501,
+ "哂": 1502,
+ "哄": 1503,
+ "哆": 1504,
+ "哇": 1505,
+ "哈": 1506,
+ "哉": 1507,
+ "哋": 1508,
+ "哌": 1509,
+ "响": 1510,
+ "哎": 1511,
+ "哏": 1512,
+ "哐": 1513,
+ "哑": 1514,
+ "哒": 1515,
+ "哔": 1516,
+ "哗": 1517,
+ "哟": 1518,
+ "員": 1519,
+ "哥": 1520,
+ "哦": 1521,
+ "哧": 1522,
+ "哨": 1523,
+ "哩": 1524,
+ "哪": 1525,
+ "哭": 1526,
+ "哮": 1527,
+ "哲": 1528,
+ "哺": 1529,
+ "哼": 1530,
+ "哽": 1531,
+ "唁": 1532,
+ "唄": 1533,
+ "唆": 1534,
+ "唇": 1535,
+ "唉": 1536,
+ "唏": 1537,
+ "唐": 1538,
+ "唑": 1539,
+ "唔": 1540,
+ "唠": 1541,
+ "唤": 1542,
+ "唧": 1543,
+ "唬": 1544,
+ "售": 1545,
+ "唯": 1546,
+ "唰": 1547,
+ "唱": 1548,
+ "唳": 1549,
+ "唷": 1550,
+ "唸": 1551,
+ "唾": 1552,
+ "啃": 1553,
+ "啄": 1554,
+ "商": 1555,
+ "啉": 1556,
+ "啊": 1557,
+ "問": 1558,
+ "啓": 1559,
+ "啕": 1560,
+ "啖": 1561,
+ "啜": 1562,
+ "啞": 1563,
+ "啟": 1564,
+ "啡": 1565,
+ "啤": 1566,
+ "啥": 1567,
+ "啦": 1568,
+ "啧": 1569,
+ "啪": 1570,
+ "啫": 1571,
+ "啬": 1572,
+ "啮": 1573,
+ "啰": 1574,
+ "啱": 1575,
+ "啲": 1576,
+ "啵": 1577,
+ "啶": 1578,
+ "啷": 1579,
+ "啸": 1580,
+ "啻": 1581,
+ "啼": 1582,
+ "啾": 1583,
+ "喀": 1584,
+ "喂": 1585,
+ "喃": 1586,
+ "善": 1587,
+ "喆": 1588,
+ "喇": 1589,
+ "喉": 1590,
+ "喊": 1591,
+ "喋": 1592,
+ "喎": 1593,
+ "喏": 1594,
+ "喔": 1595,
+ "喘": 1596,
+ "喙": 1597,
+ "喚": 1598,
+ "喜": 1599,
+ "喝": 1600,
+ "喟": 1601,
+ "喧": 1602,
+ "喪": 1603,
+ "喫": 1604,
+ "喬": 1605,
+ "單": 1606,
+ "喰": 1607,
+ "喱": 1608,
+ "喲": 1609,
+ "喳": 1610,
+ "喵": 1611,
+ "営": 1612,
+ "喷": 1613,
+ "喹": 1614,
+ "喺": 1615,
+ "喻": 1616,
+ "喽": 1617,
+ "嗅": 1618,
+ "嗆": 1619,
+ "嗇": 1620,
+ "嗎": 1621,
+ "嗑": 1622,
+ "嗒": 1623,
+ "嗓": 1624,
+ "嗔": 1625,
+ "嗖": 1626,
+ "嗚": 1627,
+ "嗜": 1628,
+ "嗝": 1629,
+ "嗟": 1630,
+ "嗡": 1631,
+ "嗣": 1632,
+ "嗤": 1633,
+ "嗦": 1634,
+ "嗨": 1635,
+ "嗪": 1636,
+ "嗬": 1637,
+ "嗯": 1638,
+ "嗰": 1639,
+ "嗲": 1640,
+ "嗳": 1641,
+ "嗶": 1642,
+ "嗷": 1643,
+ "嗽": 1644,
+ "嘀": 1645,
+ "嘅": 1646,
+ "嘆": 1647,
+ "嘈": 1648,
+ "嘉": 1649,
+ "嘌": 1650,
+ "嘍": 1651,
+ "嘎": 1652,
+ "嘔": 1653,
+ "嘖": 1654,
+ "嘗": 1655,
+ "嘘": 1656,
+ "嘚": 1657,
+ "嘛": 1658,
+ "嘜": 1659,
+ "嘞": 1660,
+ "嘟": 1661,
+ "嘢": 1662,
+ "嘣": 1663,
+ "嘤": 1664,
+ "嘧": 1665,
+ "嘩": 1666,
+ "嘭": 1667,
+ "嘮": 1668,
+ "嘯": 1669,
+ "嘰": 1670,
+ "嘱": 1671,
+ "嘲": 1672,
+ "嘴": 1673,
+ "嘶": 1674,
+ "嘸": 1675,
+ "嘹": 1676,
+ "嘻": 1677,
+ "嘿": 1678,
+ "噁": 1679,
+ "噌": 1680,
+ "噎": 1681,
+ "噓": 1682,
+ "噔": 1683,
+ "噗": 1684,
+ "噙": 1685,
+ "噜": 1686,
+ "噠": 1687,
+ "噢": 1688,
+ "噤": 1689,
+ "器": 1690,
+ "噩": 1691,
+ "噪": 1692,
+ "噬": 1693,
+ "噱": 1694,
+ "噴": 1695,
+ "噶": 1696,
+ "噸": 1697,
+ "噹": 1698,
+ "噻": 1699,
+ "噼": 1700,
+ "嚀": 1701,
+ "嚇": 1702,
+ "嚎": 1703,
+ "嚏": 1704,
+ "嚐": 1705,
+ "嚓": 1706,
+ "嚕": 1707,
+ "嚟": 1708,
+ "嚣": 1709,
+ "嚥": 1710,
+ "嚨": 1711,
+ "嚮": 1712,
+ "嚴": 1713,
+ "嚷": 1714,
+ "嚼": 1715,
+ "囂": 1716,
+ "囉": 1717,
+ "囊": 1718,
+ "囍": 1719,
+ "囑": 1720,
+ "囔": 1721,
+ "囗": 1722,
+ "囚": 1723,
+ "四": 1724,
+ "囝": 1725,
+ "回": 1726,
+ "囟": 1727,
+ "因": 1728,
+ "囡": 1729,
+ "团": 1730,
+ "団": 1731,
+ "囤": 1732,
+ "囧": 1733,
+ "囪": 1734,
+ "囫": 1735,
+ "园": 1736,
+ "困": 1737,
+ "囱": 1738,
+ "囲": 1739,
+ "図": 1740,
+ "围": 1741,
+ "囹": 1742,
+ "固": 1743,
+ "国": 1744,
+ "图": 1745,
+ "囿": 1746,
+ "圃": 1747,
+ "圄": 1748,
+ "圆": 1749,
+ "圈": 1750,
+ "國": 1751,
+ "圍": 1752,
+ "圏": 1753,
+ "園": 1754,
+ "圓": 1755,
+ "圖": 1756,
+ "團": 1757,
+ "圜": 1758,
+ "土": 1759,
+ "圣": 1760,
+ "圧": 1761,
+ "在": 1762,
+ "圩": 1763,
+ "圭": 1764,
+ "地": 1765,
+ "圳": 1766,
+ "场": 1767,
+ "圻": 1768,
+ "圾": 1769,
+ "址": 1770,
+ "坂": 1771,
+ "均": 1772,
+ "坊": 1773,
+ "坍": 1774,
+ "坎": 1775,
+ "坏": 1776,
+ "坐": 1777,
+ "坑": 1778,
+ "块": 1779,
+ "坚": 1780,
+ "坛": 1781,
+ "坝": 1782,
+ "坞": 1783,
+ "坟": 1784,
+ "坠": 1785,
+ "坡": 1786,
+ "坤": 1787,
+ "坦": 1788,
+ "坨": 1789,
+ "坪": 1790,
+ "坯": 1791,
+ "坳": 1792,
+ "坵": 1793,
+ "坷": 1794,
+ "垂": 1795,
+ "垃": 1796,
+ "垄": 1797,
+ "型": 1798,
+ "垒": 1799,
+ "垚": 1800,
+ "垛": 1801,
+ "垠": 1802,
+ "垢": 1803,
+ "垣": 1804,
+ "垦": 1805,
+ "垩": 1806,
+ "垫": 1807,
+ "垭": 1808,
+ "垮": 1809,
+ "垵": 1810,
+ "埂": 1811,
+ "埃": 1812,
+ "埋": 1813,
+ "城": 1814,
+ "埔": 1815,
+ "埕": 1816,
+ "埗": 1817,
+ "域": 1818,
+ "埠": 1819,
+ "埤": 1820,
+ "埵": 1821,
+ "執": 1822,
+ "埸": 1823,
+ "培": 1824,
+ "基": 1825,
+ "埼": 1826,
+ "堀": 1827,
+ "堂": 1828,
+ "堃": 1829,
+ "堅": 1830,
+ "堆": 1831,
+ "堇": 1832,
+ "堑": 1833,
+ "堕": 1834,
+ "堙": 1835,
+ "堡": 1836,
+ "堤": 1837,
+ "堪": 1838,
+ "堯": 1839,
+ "堰": 1840,
+ "報": 1841,
+ "場": 1842,
+ "堵": 1843,
+ "堺": 1844,
+ "堿": 1845,
+ "塊": 1846,
+ "塌": 1847,
+ "塑": 1848,
+ "塔": 1849,
+ "塗": 1850,
+ "塘": 1851,
+ "塚": 1852,
+ "塞": 1853,
+ "塢": 1854,
+ "塩": 1855,
+ "填": 1856,
+ "塬": 1857,
+ "塭": 1858,
+ "塵": 1859,
+ "塾": 1860,
+ "墀": 1861,
+ "境": 1862,
+ "墅": 1863,
+ "墉": 1864,
+ "墊": 1865,
+ "墒": 1866,
+ "墓": 1867,
+ "増": 1868,
+ "墘": 1869,
+ "墙": 1870,
+ "墜": 1871,
+ "增": 1872,
+ "墟": 1873,
+ "墨": 1874,
+ "墩": 1875,
+ "墮": 1876,
+ "墳": 1877,
+ "墻": 1878,
+ "墾": 1879,
+ "壁": 1880,
+ "壅": 1881,
+ "壆": 1882,
+ "壇": 1883,
+ "壊": 1884,
+ "壑": 1885,
+ "壓": 1886,
+ "壕": 1887,
+ "壘": 1888,
+ "壞": 1889,
+ "壟": 1890,
+ "壢": 1891,
+ "壤": 1892,
+ "壩": 1893,
+ "士": 1894,
+ "壬": 1895,
+ "壮": 1896,
+ "壯": 1897,
+ "声": 1898,
+ "売": 1899,
+ "壳": 1900,
+ "壶": 1901,
+ "壹": 1902,
+ "壺": 1903,
+ "壽": 1904,
+ "处": 1905,
+ "备": 1906,
+ "変": 1907,
+ "复": 1908,
+ "夏": 1909,
+ "夔": 1910,
+ "夕": 1911,
+ "外": 1912,
+ "夙": 1913,
+ "多": 1914,
+ "夜": 1915,
+ "够": 1916,
+ "夠": 1917,
+ "夢": 1918,
+ "夥": 1919,
+ "大": 1920,
+ "天": 1921,
+ "太": 1922,
+ "夫": 1923,
+ "夭": 1924,
+ "央": 1925,
+ "夯": 1926,
+ "失": 1927,
+ "头": 1928,
+ "夷": 1929,
+ "夸": 1930,
+ "夹": 1931,
+ "夺": 1932,
+ "夾": 1933,
+ "奂": 1934,
+ "奄": 1935,
+ "奇": 1936,
+ "奈": 1937,
+ "奉": 1938,
+ "奋": 1939,
+ "奎": 1940,
+ "奏": 1941,
+ "奐": 1942,
+ "契": 1943,
+ "奔": 1944,
+ "奕": 1945,
+ "奖": 1946,
+ "套": 1947,
+ "奘": 1948,
+ "奚": 1949,
+ "奠": 1950,
+ "奢": 1951,
+ "奥": 1952,
+ "奧": 1953,
+ "奪": 1954,
+ "奬": 1955,
+ "奮": 1956,
+ "女": 1957,
+ "奴": 1958,
+ "奶": 1959,
+ "奸": 1960,
+ "她": 1961,
+ "好": 1962,
+ "如": 1963,
+ "妃": 1964,
+ "妄": 1965,
+ "妆": 1966,
+ "妇": 1967,
+ "妈": 1968,
+ "妊": 1969,
+ "妍": 1970,
+ "妒": 1971,
+ "妓": 1972,
+ "妖": 1973,
+ "妘": 1974,
+ "妙": 1975,
+ "妝": 1976,
+ "妞": 1977,
+ "妣": 1978,
+ "妤": 1979,
+ "妥": 1980,
+ "妨": 1981,
+ "妩": 1982,
+ "妪": 1983,
+ "妮": 1984,
+ "妲": 1985,
+ "妳": 1986,
+ "妹": 1987,
+ "妻": 1988,
+ "妾": 1989,
+ "姆": 1990,
+ "姉": 1991,
+ "姊": 1992,
+ "始": 1993,
+ "姍": 1994,
+ "姐": 1995,
+ "姑": 1996,
+ "姒": 1997,
+ "姓": 1998,
+ "委": 1999,
+ "姗": 2000,
+ "姚": 2001,
+ "姜": 2002,
+ "姝": 2003,
+ "姣": 2004,
+ "姥": 2005,
+ "姦": 2006,
+ "姨": 2007,
+ "姪": 2008,
+ "姫": 2009,
+ "姬": 2010,
+ "姹": 2011,
+ "姻": 2012,
+ "姿": 2013,
+ "威": 2014,
+ "娃": 2015,
+ "娄": 2016,
+ "娅": 2017,
+ "娆": 2018,
+ "娇": 2019,
+ "娉": 2020,
+ "娑": 2021,
+ "娓": 2022,
+ "娘": 2023,
+ "娛": 2024,
+ "娜": 2025,
+ "娟": 2026,
+ "娠": 2027,
+ "娣": 2028,
+ "娥": 2029,
+ "娩": 2030,
+ "娱": 2031,
+ "娲": 2032,
+ "娴": 2033,
+ "娶": 2034,
+ "娼": 2035,
+ "婀": 2036,
+ "婁": 2037,
+ "婆": 2038,
+ "婉": 2039,
+ "婊": 2040,
+ "婕": 2041,
+ "婚": 2042,
+ "婢": 2043,
+ "婦": 2044,
+ "婧": 2045,
+ "婪": 2046,
+ "婭": 2047,
+ "婴": 2048,
+ "婵": 2049,
+ "婶": 2050,
+ "婷": 2051,
+ "婺": 2052,
+ "婿": 2053,
+ "媒": 2054,
+ "媚": 2055,
+ "媛": 2056,
+ "媞": 2057,
+ "媧": 2058,
+ "媲": 2059,
+ "媳": 2060,
+ "媽": 2061,
+ "媾": 2062,
+ "嫁": 2063,
+ "嫂": 2064,
+ "嫉": 2065,
+ "嫌": 2066,
+ "嫑": 2067,
+ "嫔": 2068,
+ "嫖": 2069,
+ "嫘": 2070,
+ "嫚": 2071,
+ "嫡": 2072,
+ "嫣": 2073,
+ "嫦": 2074,
+ "嫩": 2075,
+ "嫲": 2076,
+ "嫵": 2077,
+ "嫻": 2078,
+ "嬅": 2079,
+ "嬉": 2080,
+ "嬌": 2081,
+ "嬗": 2082,
+ "嬛": 2083,
+ "嬢": 2084,
+ "嬤": 2085,
+ "嬪": 2086,
+ "嬰": 2087,
+ "嬴": 2088,
+ "嬷": 2089,
+ "嬸": 2090,
+ "嬿": 2091,
+ "孀": 2092,
+ "孃": 2093,
+ "子": 2094,
+ "孑": 2095,
+ "孔": 2096,
+ "孕": 2097,
+ "孖": 2098,
+ "字": 2099,
+ "存": 2100,
+ "孙": 2101,
+ "孚": 2102,
+ "孛": 2103,
+ "孜": 2104,
+ "孝": 2105,
+ "孟": 2106,
+ "孢": 2107,
+ "季": 2108,
+ "孤": 2109,
+ "学": 2110,
+ "孩": 2111,
+ "孪": 2112,
+ "孫": 2113,
+ "孬": 2114,
+ "孰": 2115,
+ "孱": 2116,
+ "孳": 2117,
+ "孵": 2118,
+ "學": 2119,
+ "孺": 2120,
+ "孽": 2121,
+ "孿": 2122,
+ "宁": 2123,
+ "它": 2124,
+ "宅": 2125,
+ "宇": 2126,
+ "守": 2127,
+ "安": 2128,
+ "宋": 2129,
+ "完": 2130,
+ "宏": 2131,
+ "宓": 2132,
+ "宕": 2133,
+ "宗": 2134,
+ "官": 2135,
+ "宙": 2136,
+ "定": 2137,
+ "宛": 2138,
+ "宜": 2139,
+ "宝": 2140,
+ "实": 2141,
+ "実": 2142,
+ "宠": 2143,
+ "审": 2144,
+ "客": 2145,
+ "宣": 2146,
+ "室": 2147,
+ "宥": 2148,
+ "宦": 2149,
+ "宪": 2150,
+ "宫": 2151,
+ "宮": 2152,
+ "宰": 2153,
+ "害": 2154,
+ "宴": 2155,
+ "宵": 2156,
+ "家": 2157,
+ "宸": 2158,
+ "容": 2159,
+ "宽": 2160,
+ "宾": 2161,
+ "宿": 2162,
+ "寂": 2163,
+ "寄": 2164,
+ "寅": 2165,
+ "密": 2166,
+ "寇": 2167,
+ "富": 2168,
+ "寐": 2169,
+ "寒": 2170,
+ "寓": 2171,
+ "寛": 2172,
+ "寝": 2173,
+ "寞": 2174,
+ "察": 2175,
+ "寡": 2176,
+ "寢": 2177,
+ "寥": 2178,
+ "實": 2179,
+ "寧": 2180,
+ "寨": 2181,
+ "審": 2182,
+ "寫": 2183,
+ "寬": 2184,
+ "寮": 2185,
+ "寰": 2186,
+ "寵": 2187,
+ "寶": 2188,
+ "寸": 2189,
+ "对": 2190,
+ "寺": 2191,
+ "寻": 2192,
+ "导": 2193,
+ "対": 2194,
+ "寿": 2195,
+ "封": 2196,
+ "専": 2197,
+ "射": 2198,
+ "将": 2199,
+ "將": 2200,
+ "專": 2201,
+ "尉": 2202,
+ "尊": 2203,
+ "尋": 2204,
+ "對": 2205,
+ "導": 2206,
+ "小": 2207,
+ "少": 2208,
+ "尔": 2209,
+ "尕": 2210,
+ "尖": 2211,
+ "尘": 2212,
+ "尚": 2213,
+ "尝": 2214,
+ "尤": 2215,
+ "尧": 2216,
+ "尬": 2217,
+ "就": 2218,
+ "尴": 2219,
+ "尷": 2220,
+ "尸": 2221,
+ "尹": 2222,
+ "尺": 2223,
+ "尻": 2224,
+ "尼": 2225,
+ "尽": 2226,
+ "尾": 2227,
+ "尿": 2228,
+ "局": 2229,
+ "屁": 2230,
+ "层": 2231,
+ "屄": 2232,
+ "居": 2233,
+ "屆": 2234,
+ "屈": 2235,
+ "屉": 2236,
+ "届": 2237,
+ "屋": 2238,
+ "屌": 2239,
+ "屍": 2240,
+ "屎": 2241,
+ "屏": 2242,
+ "屐": 2243,
+ "屑": 2244,
+ "展": 2245,
+ "屜": 2246,
+ "属": 2247,
+ "屠": 2248,
+ "屡": 2249,
+ "屢": 2250,
+ "層": 2251,
+ "履": 2252,
+ "屬": 2253,
+ "屯": 2254,
+ "山": 2255,
+ "屹": 2256,
+ "屿": 2257,
+ "岀": 2258,
+ "岁": 2259,
+ "岂": 2260,
+ "岌": 2261,
+ "岐": 2262,
+ "岑": 2263,
+ "岔": 2264,
+ "岖": 2265,
+ "岗": 2266,
+ "岘": 2267,
+ "岙": 2268,
+ "岚": 2269,
+ "岛": 2270,
+ "岡": 2271,
+ "岩": 2272,
+ "岫": 2273,
+ "岬": 2274,
+ "岭": 2275,
+ "岱": 2276,
+ "岳": 2277,
+ "岷": 2278,
+ "岸": 2279,
+ "峇": 2280,
+ "峋": 2281,
+ "峒": 2282,
+ "峙": 2283,
+ "峡": 2284,
+ "峤": 2285,
+ "峥": 2286,
+ "峦": 2287,
+ "峨": 2288,
+ "峪": 2289,
+ "峭": 2290,
+ "峯": 2291,
+ "峰": 2292,
+ "峴": 2293,
+ "島": 2294,
+ "峻": 2295,
+ "峽": 2296,
+ "崁": 2297,
+ "崂": 2298,
+ "崆": 2299,
+ "崇": 2300,
+ "崎": 2301,
+ "崑": 2302,
+ "崔": 2303,
+ "崖": 2304,
+ "崗": 2305,
+ "崙": 2306,
+ "崛": 2307,
+ "崧": 2308,
+ "崩": 2309,
+ "崭": 2310,
+ "崴": 2311,
+ "崽": 2312,
+ "嵇": 2313,
+ "嵊": 2314,
+ "嵋": 2315,
+ "嵌": 2316,
+ "嵐": 2317,
+ "嵘": 2318,
+ "嵩": 2319,
+ "嵬": 2320,
+ "嵯": 2321,
+ "嶂": 2322,
+ "嶄": 2323,
+ "嶇": 2324,
+ "嶋": 2325,
+ "嶙": 2326,
+ "嶺": 2327,
+ "嶼": 2328,
+ "嶽": 2329,
+ "巅": 2330,
+ "巍": 2331,
+ "巒": 2332,
+ "巔": 2333,
+ "巖": 2334,
+ "川": 2335,
+ "州": 2336,
+ "巡": 2337,
+ "巢": 2338,
+ "工": 2339,
+ "左": 2340,
+ "巧": 2341,
+ "巨": 2342,
+ "巩": 2343,
+ "巫": 2344,
+ "差": 2345,
+ "己": 2346,
+ "已": 2347,
+ "巳": 2348,
+ "巴": 2349,
+ "巷": 2350,
+ "巻": 2351,
+ "巽": 2352,
+ "巾": 2353,
+ "巿": 2354,
+ "币": 2355,
+ "市": 2356,
+ "布": 2357,
+ "帅": 2358,
+ "帆": 2359,
+ "师": 2360,
+ "希": 2361,
+ "帐": 2362,
+ "帑": 2363,
+ "帕": 2364,
+ "帖": 2365,
+ "帘": 2366,
+ "帚": 2367,
+ "帛": 2368,
+ "帜": 2369,
+ "帝": 2370,
+ "帥": 2371,
+ "带": 2372,
+ "帧": 2373,
+ "師": 2374,
+ "席": 2375,
+ "帮": 2376,
+ "帯": 2377,
+ "帰": 2378,
+ "帳": 2379,
+ "帶": 2380,
+ "帷": 2381,
+ "常": 2382,
+ "帼": 2383,
+ "帽": 2384,
+ "幀": 2385,
+ "幂": 2386,
+ "幄": 2387,
+ "幅": 2388,
+ "幌": 2389,
+ "幔": 2390,
+ "幕": 2391,
+ "幟": 2392,
+ "幡": 2393,
+ "幢": 2394,
+ "幣": 2395,
+ "幫": 2396,
+ "干": 2397,
+ "平": 2398,
+ "年": 2399,
+ "并": 2400,
+ "幸": 2401,
+ "幹": 2402,
+ "幺": 2403,
+ "幻": 2404,
+ "幼": 2405,
+ "幽": 2406,
+ "幾": 2407,
+ "广": 2408,
+ "庁": 2409,
+ "広": 2410,
+ "庄": 2411,
+ "庆": 2412,
+ "庇": 2413,
+ "床": 2414,
+ "序": 2415,
+ "庐": 2416,
+ "库": 2417,
+ "应": 2418,
+ "底": 2419,
+ "庖": 2420,
+ "店": 2421,
+ "庙": 2422,
+ "庚": 2423,
+ "府": 2424,
+ "庞": 2425,
+ "废": 2426,
+ "庠": 2427,
+ "度": 2428,
+ "座": 2429,
+ "庫": 2430,
+ "庭": 2431,
+ "庵": 2432,
+ "庶": 2433,
+ "康": 2434,
+ "庸": 2435,
+ "庹": 2436,
+ "庾": 2437,
+ "廁": 2438,
+ "廂": 2439,
+ "廃": 2440,
+ "廈": 2441,
+ "廉": 2442,
+ "廊": 2443,
+ "廓": 2444,
+ "廖": 2445,
+ "廚": 2446,
+ "廝": 2447,
+ "廟": 2448,
+ "廠": 2449,
+ "廢": 2450,
+ "廣": 2451,
+ "廬": 2452,
+ "廳": 2453,
+ "延": 2454,
+ "廷": 2455,
+ "建": 2456,
+ "廿": 2457,
+ "开": 2458,
+ "弁": 2459,
+ "异": 2460,
+ "弃": 2461,
+ "弄": 2462,
+ "弈": 2463,
+ "弊": 2464,
+ "弋": 2465,
+ "式": 2466,
+ "弑": 2467,
+ "弒": 2468,
+ "弓": 2469,
+ "弔": 2470,
+ "引": 2471,
+ "弗": 2472,
+ "弘": 2473,
+ "弛": 2474,
+ "弟": 2475,
+ "张": 2476,
+ "弥": 2477,
+ "弦": 2478,
+ "弧": 2479,
+ "弩": 2480,
+ "弭": 2481,
+ "弯": 2482,
+ "弱": 2483,
+ "張": 2484,
+ "強": 2485,
+ "弹": 2486,
+ "强": 2487,
+ "弼": 2488,
+ "弾": 2489,
+ "彅": 2490,
+ "彆": 2491,
+ "彈": 2492,
+ "彌": 2493,
+ "彎": 2494,
+ "归": 2495,
+ "当": 2496,
+ "录": 2497,
+ "彗": 2498,
+ "彙": 2499,
+ "彝": 2500,
+ "形": 2501,
+ "彤": 2502,
+ "彥": 2503,
+ "彦": 2504,
+ "彧": 2505,
+ "彩": 2506,
+ "彪": 2507,
+ "彫": 2508,
+ "彬": 2509,
+ "彭": 2510,
+ "彰": 2511,
+ "影": 2512,
+ "彷": 2513,
+ "役": 2514,
+ "彻": 2515,
+ "彼": 2516,
+ "彿": 2517,
+ "往": 2518,
+ "征": 2519,
+ "径": 2520,
+ "待": 2521,
+ "徇": 2522,
+ "很": 2523,
+ "徉": 2524,
+ "徊": 2525,
+ "律": 2526,
+ "後": 2527,
+ "徐": 2528,
+ "徑": 2529,
+ "徒": 2530,
+ "従": 2531,
+ "徕": 2532,
+ "得": 2533,
+ "徘": 2534,
+ "徙": 2535,
+ "徜": 2536,
+ "從": 2537,
+ "徠": 2538,
+ "御": 2539,
+ "徨": 2540,
+ "復": 2541,
+ "循": 2542,
+ "徬": 2543,
+ "微": 2544,
+ "徳": 2545,
+ "徴": 2546,
+ "徵": 2547,
+ "德": 2548,
+ "徹": 2549,
+ "徼": 2550,
+ "徽": 2551,
+ "心": 2552,
+ "必": 2553,
+ "忆": 2554,
+ "忌": 2555,
+ "忍": 2556,
+ "忏": 2557,
+ "忐": 2558,
+ "忑": 2559,
+ "忒": 2560,
+ "忖": 2561,
+ "志": 2562,
+ "忘": 2563,
+ "忙": 2564,
+ "応": 2565,
+ "忠": 2566,
+ "忡": 2567,
+ "忤": 2568,
+ "忧": 2569,
+ "忪": 2570,
+ "快": 2571,
+ "忱": 2572,
+ "念": 2573,
+ "忻": 2574,
+ "忽": 2575,
+ "忿": 2576,
+ "怀": 2577,
+ "态": 2578,
+ "怂": 2579,
+ "怅": 2580,
+ "怆": 2581,
+ "怎": 2582,
+ "怏": 2583,
+ "怒": 2584,
+ "怔": 2585,
+ "怕": 2586,
+ "怖": 2587,
+ "怙": 2588,
+ "怜": 2589,
+ "思": 2590,
+ "怠": 2591,
+ "怡": 2592,
+ "急": 2593,
+ "怦": 2594,
+ "性": 2595,
+ "怨": 2596,
+ "怪": 2597,
+ "怯": 2598,
+ "怵": 2599,
+ "总": 2600,
+ "怼": 2601,
+ "恁": 2602,
+ "恃": 2603,
+ "恆": 2604,
+ "恋": 2605,
+ "恍": 2606,
+ "恐": 2607,
+ "恒": 2608,
+ "恕": 2609,
+ "恙": 2610,
+ "恚": 2611,
+ "恢": 2612,
+ "恣": 2613,
+ "恤": 2614,
+ "恥": 2615,
+ "恨": 2616,
+ "恩": 2617,
+ "恪": 2618,
+ "恫": 2619,
+ "恬": 2620,
+ "恭": 2621,
+ "息": 2622,
+ "恰": 2623,
+ "恳": 2624,
+ "恵": 2625,
+ "恶": 2626,
+ "恸": 2627,
+ "恺": 2628,
+ "恻": 2629,
+ "恼": 2630,
+ "恿": 2631,
+ "悄": 2632,
+ "悅": 2633,
+ "悉": 2634,
+ "悌": 2635,
+ "悍": 2636,
+ "悔": 2637,
+ "悖": 2638,
+ "悚": 2639,
+ "悟": 2640,
+ "悠": 2641,
+ "患": 2642,
+ "悦": 2643,
+ "您": 2644,
+ "悩": 2645,
+ "悪": 2646,
+ "悬": 2647,
+ "悯": 2648,
+ "悱": 2649,
+ "悲": 2650,
+ "悴": 2651,
+ "悵": 2652,
+ "悶": 2653,
+ "悸": 2654,
+ "悻": 2655,
+ "悼": 2656,
+ "悽": 2657,
+ "情": 2658,
+ "惆": 2659,
+ "惇": 2660,
+ "惊": 2661,
+ "惋": 2662,
+ "惑": 2663,
+ "惕": 2664,
+ "惘": 2665,
+ "惚": 2666,
+ "惜": 2667,
+ "惟": 2668,
+ "惠": 2669,
+ "惡": 2670,
+ "惦": 2671,
+ "惧": 2672,
+ "惨": 2673,
+ "惩": 2674,
+ "惫": 2675,
+ "惬": 2676,
+ "惭": 2677,
+ "惮": 2678,
+ "惯": 2679,
+ "惰": 2680,
+ "惱": 2681,
+ "想": 2682,
+ "惴": 2683,
+ "惶": 2684,
+ "惹": 2685,
+ "惺": 2686,
+ "愁": 2687,
+ "愆": 2688,
+ "愈": 2689,
+ "愉": 2690,
+ "愍": 2691,
+ "意": 2692,
+ "愕": 2693,
+ "愚": 2694,
+ "愛": 2695,
+ "愜": 2696,
+ "感": 2697,
+ "愣": 2698,
+ "愤": 2699,
+ "愧": 2700,
+ "愫": 2701,
+ "愷": 2702,
+ "愿": 2703,
+ "慄": 2704,
+ "慈": 2705,
+ "態": 2706,
+ "慌": 2707,
+ "慎": 2708,
+ "慑": 2709,
+ "慕": 2710,
+ "慘": 2711,
+ "慚": 2712,
+ "慟": 2713,
+ "慢": 2714,
+ "慣": 2715,
+ "慧": 2716,
+ "慨": 2717,
+ "慫": 2718,
+ "慮": 2719,
+ "慰": 2720,
+ "慳": 2721,
+ "慵": 2722,
+ "慶": 2723,
+ "慷": 2724,
+ "慾": 2725,
+ "憂": 2726,
+ "憊": 2727,
+ "憋": 2728,
+ "憎": 2729,
+ "憐": 2730,
+ "憑": 2731,
+ "憔": 2732,
+ "憚": 2733,
+ "憤": 2734,
+ "憧": 2735,
+ "憨": 2736,
+ "憩": 2737,
+ "憫": 2738,
+ "憬": 2739,
+ "憲": 2740,
+ "憶": 2741,
+ "憾": 2742,
+ "懂": 2743,
+ "懇": 2744,
+ "懈": 2745,
+ "應": 2746,
+ "懊": 2747,
+ "懋": 2748,
+ "懑": 2749,
+ "懒": 2750,
+ "懦": 2751,
+ "懲": 2752,
+ "懵": 2753,
+ "懶": 2754,
+ "懷": 2755,
+ "懸": 2756,
+ "懺": 2757,
+ "懼": 2758,
+ "懾": 2759,
+ "懿": 2760,
+ "戀": 2761,
+ "戈": 2762,
+ "戊": 2763,
+ "戌": 2764,
+ "戍": 2765,
+ "戎": 2766,
+ "戏": 2767,
+ "成": 2768,
+ "我": 2769,
+ "戒": 2770,
+ "戕": 2771,
+ "或": 2772,
+ "战": 2773,
+ "戚": 2774,
+ "戛": 2775,
+ "戟": 2776,
+ "戡": 2777,
+ "戦": 2778,
+ "截": 2779,
+ "戬": 2780,
+ "戮": 2781,
+ "戰": 2782,
+ "戲": 2783,
+ "戳": 2784,
+ "戴": 2785,
+ "戶": 2786,
+ "户": 2787,
+ "戸": 2788,
+ "戻": 2789,
+ "戾": 2790,
+ "房": 2791,
+ "所": 2792,
+ "扁": 2793,
+ "扇": 2794,
+ "扈": 2795,
+ "扉": 2796,
+ "手": 2797,
+ "才": 2798,
+ "扎": 2799,
+ "扑": 2800,
+ "扒": 2801,
+ "打": 2802,
+ "扔": 2803,
+ "払": 2804,
+ "托": 2805,
+ "扛": 2806,
+ "扣": 2807,
+ "扦": 2808,
+ "执": 2809,
+ "扩": 2810,
+ "扪": 2811,
+ "扫": 2812,
+ "扬": 2813,
+ "扭": 2814,
+ "扮": 2815,
+ "扯": 2816,
+ "扰": 2817,
+ "扱": 2818,
+ "扳": 2819,
+ "扶": 2820,
+ "批": 2821,
+ "扼": 2822,
+ "找": 2823,
+ "承": 2824,
+ "技": 2825,
+ "抄": 2826,
+ "抉": 2827,
+ "把": 2828,
+ "抑": 2829,
+ "抒": 2830,
+ "抓": 2831,
+ "投": 2832,
+ "抖": 2833,
+ "抗": 2834,
+ "折": 2835,
+ "抚": 2836,
+ "抛": 2837,
+ "抜": 2838,
+ "択": 2839,
+ "抟": 2840,
+ "抠": 2841,
+ "抡": 2842,
+ "抢": 2843,
+ "护": 2844,
+ "报": 2845,
+ "抨": 2846,
+ "披": 2847,
+ "抬": 2848,
+ "抱": 2849,
+ "抵": 2850,
+ "抹": 2851,
+ "押": 2852,
+ "抽": 2853,
+ "抿": 2854,
+ "拂": 2855,
+ "拄": 2856,
+ "担": 2857,
+ "拆": 2858,
+ "拇": 2859,
+ "拈": 2860,
+ "拉": 2861,
+ "拋": 2862,
+ "拌": 2863,
+ "拍": 2864,
+ "拎": 2865,
+ "拐": 2866,
+ "拒": 2867,
+ "拓": 2868,
+ "拔": 2869,
+ "拖": 2870,
+ "拗": 2871,
+ "拘": 2872,
+ "拙": 2873,
+ "拚": 2874,
+ "招": 2875,
+ "拜": 2876,
+ "拟": 2877,
+ "拡": 2878,
+ "拢": 2879,
+ "拣": 2880,
+ "拥": 2881,
+ "拦": 2882,
+ "拧": 2883,
+ "拨": 2884,
+ "择": 2885,
+ "括": 2886,
+ "拭": 2887,
+ "拮": 2888,
+ "拯": 2889,
+ "拱": 2890,
+ "拳": 2891,
+ "拴": 2892,
+ "拷": 2893,
+ "拼": 2894,
+ "拽": 2895,
+ "拾": 2896,
+ "拿": 2897,
+ "持": 2898,
+ "挂": 2899,
+ "指": 2900,
+ "挈": 2901,
+ "按": 2902,
+ "挎": 2903,
+ "挑": 2904,
+ "挖": 2905,
+ "挙": 2906,
+ "挚": 2907,
+ "挛": 2908,
+ "挝": 2909,
+ "挞": 2910,
+ "挟": 2911,
+ "挠": 2912,
+ "挡": 2913,
+ "挣": 2914,
+ "挤": 2915,
+ "挥": 2916,
+ "挨": 2917,
+ "挪": 2918,
+ "挫": 2919,
+ "振": 2920,
+ "挲": 2921,
+ "挹": 2922,
+ "挺": 2923,
+ "挽": 2924,
+ "挾": 2925,
+ "捂": 2926,
+ "捅": 2927,
+ "捆": 2928,
+ "捉": 2929,
+ "捋": 2930,
+ "捌": 2931,
+ "捍": 2932,
+ "捎": 2933,
+ "捏": 2934,
+ "捐": 2935,
+ "捕": 2936,
+ "捞": 2937,
+ "损": 2938,
+ "捡": 2939,
+ "换": 2940,
+ "捣": 2941,
+ "捧": 2942,
+ "捨": 2943,
+ "捩": 2944,
+ "据": 2945,
+ "捱": 2946,
+ "捲": 2947,
+ "捶": 2948,
+ "捷": 2949,
+ "捺": 2950,
+ "捻": 2951,
+ "掀": 2952,
+ "掂": 2953,
+ "掃": 2954,
+ "掇": 2955,
+ "授": 2956,
+ "掉": 2957,
+ "掌": 2958,
+ "掏": 2959,
+ "掐": 2960,
+ "排": 2961,
+ "掖": 2962,
+ "掘": 2963,
+ "掙": 2964,
+ "掛": 2965,
+ "掠": 2966,
+ "採": 2967,
+ "探": 2968,
+ "掣": 2969,
+ "接": 2970,
+ "控": 2971,
+ "推": 2972,
+ "掩": 2973,
+ "措": 2974,
+ "掬": 2975,
+ "掰": 2976,
+ "掲": 2977,
+ "掳": 2978,
+ "掴": 2979,
+ "掷": 2980,
+ "掸": 2981,
+ "掺": 2982,
+ "揀": 2983,
+ "揃": 2984,
+ "揄": 2985,
+ "揆": 2986,
+ "揉": 2987,
+ "揍": 2988,
+ "描": 2989,
+ "提": 2990,
+ "插": 2991,
+ "揖": 2992,
+ "揚": 2993,
+ "換": 2994,
+ "握": 2995,
+ "揣": 2996,
+ "揩": 2997,
+ "揪": 2998,
+ "揭": 2999,
+ "揮": 3000,
+ "援": 3001,
+ "揶": 3002,
+ "揸": 3003,
+ "揹": 3004,
+ "揽": 3005,
+ "搀": 3006,
+ "搁": 3007,
+ "搂": 3008,
+ "搅": 3009,
+ "損": 3010,
+ "搏": 3011,
+ "搐": 3012,
+ "搓": 3013,
+ "搔": 3014,
+ "搖": 3015,
+ "搗": 3016,
+ "搜": 3017,
+ "搞": 3018,
+ "搡": 3019,
+ "搪": 3020,
+ "搬": 3021,
+ "搭": 3022,
+ "搵": 3023,
+ "搶": 3024,
+ "携": 3025,
+ "搽": 3026,
+ "摀": 3027,
+ "摁": 3028,
+ "摄": 3029,
+ "摆": 3030,
+ "摇": 3031,
+ "摈": 3032,
+ "摊": 3033,
+ "摒": 3034,
+ "摔": 3035,
+ "摘": 3036,
+ "摞": 3037,
+ "摟": 3038,
+ "摧": 3039,
+ "摩": 3040,
+ "摯": 3041,
+ "摳": 3042,
+ "摸": 3043,
+ "摹": 3044,
+ "摺": 3045,
+ "摻": 3046,
+ "撂": 3047,
+ "撃": 3048,
+ "撅": 3049,
+ "撇": 3050,
+ "撈": 3051,
+ "撐": 3052,
+ "撑": 3053,
+ "撒": 3054,
+ "撓": 3055,
+ "撕": 3056,
+ "撚": 3057,
+ "撞": 3058,
+ "撤": 3059,
+ "撥": 3060,
+ "撩": 3061,
+ "撫": 3062,
+ "撬": 3063,
+ "播": 3064,
+ "撮": 3065,
+ "撰": 3066,
+ "撲": 3067,
+ "撵": 3068,
+ "撷": 3069,
+ "撸": 3070,
+ "撻": 3071,
+ "撼": 3072,
+ "撿": 3073,
+ "擀": 3074,
+ "擁": 3075,
+ "擂": 3076,
+ "擄": 3077,
+ "擅": 3078,
+ "擇": 3079,
+ "擊": 3080,
+ "擋": 3081,
+ "操": 3082,
+ "擎": 3083,
+ "擒": 3084,
+ "擔": 3085,
+ "擘": 3086,
+ "據": 3087,
+ "擞": 3088,
+ "擠": 3089,
+ "擡": 3090,
+ "擢": 3091,
+ "擦": 3092,
+ "擬": 3093,
+ "擰": 3094,
+ "擱": 3095,
+ "擲": 3096,
+ "擴": 3097,
+ "擷": 3098,
+ "擺": 3099,
+ "擼": 3100,
+ "擾": 3101,
+ "攀": 3102,
+ "攏": 3103,
+ "攒": 3104,
+ "攔": 3105,
+ "攘": 3106,
+ "攙": 3107,
+ "攜": 3108,
+ "攝": 3109,
+ "攞": 3110,
+ "攢": 3111,
+ "攣": 3112,
+ "攤": 3113,
+ "攥": 3114,
+ "攪": 3115,
+ "攫": 3116,
+ "攬": 3117,
+ "支": 3118,
+ "收": 3119,
+ "攸": 3120,
+ "改": 3121,
+ "攻": 3122,
+ "放": 3123,
+ "政": 3124,
+ "故": 3125,
+ "效": 3126,
+ "敌": 3127,
+ "敍": 3128,
+ "敎": 3129,
+ "敏": 3130,
+ "救": 3131,
+ "敕": 3132,
+ "敖": 3133,
+ "敗": 3134,
+ "敘": 3135,
+ "教": 3136,
+ "敛": 3137,
+ "敝": 3138,
+ "敞": 3139,
+ "敢": 3140,
+ "散": 3141,
+ "敦": 3142,
+ "敬": 3143,
+ "数": 3144,
+ "敲": 3145,
+ "整": 3146,
+ "敵": 3147,
+ "敷": 3148,
+ "數": 3149,
+ "斂": 3150,
+ "斃": 3151,
+ "文": 3152,
+ "斋": 3153,
+ "斌": 3154,
+ "斎": 3155,
+ "斐": 3156,
+ "斑": 3157,
+ "斓": 3158,
+ "斗": 3159,
+ "料": 3160,
+ "斛": 3161,
+ "斜": 3162,
+ "斟": 3163,
+ "斡": 3164,
+ "斤": 3165,
+ "斥": 3166,
+ "斧": 3167,
+ "斩": 3168,
+ "斫": 3169,
+ "斬": 3170,
+ "断": 3171,
+ "斯": 3172,
+ "新": 3173,
+ "斷": 3174,
+ "方": 3175,
+ "於": 3176,
+ "施": 3177,
+ "旁": 3178,
+ "旃": 3179,
+ "旅": 3180,
+ "旋": 3181,
+ "旌": 3182,
+ "旎": 3183,
+ "族": 3184,
+ "旖": 3185,
+ "旗": 3186,
+ "无": 3187,
+ "既": 3188,
+ "日": 3189,
+ "旦": 3190,
+ "旧": 3191,
+ "旨": 3192,
+ "早": 3193,
+ "旬": 3194,
+ "旭": 3195,
+ "旮": 3196,
+ "旱": 3197,
+ "时": 3198,
+ "旷": 3199,
+ "旺": 3200,
+ "旻": 3201,
+ "昀": 3202,
+ "昂": 3203,
+ "昆": 3204,
+ "昇": 3205,
+ "昉": 3206,
+ "昊": 3207,
+ "昌": 3208,
+ "明": 3209,
+ "昏": 3210,
+ "易": 3211,
+ "昔": 3212,
+ "昕": 3213,
+ "昙": 3214,
+ "星": 3215,
+ "映": 3216,
+ "春": 3217,
+ "昧": 3218,
+ "昨": 3219,
+ "昭": 3220,
+ "是": 3221,
+ "昱": 3222,
+ "昴": 3223,
+ "昵": 3224,
+ "昶": 3225,
+ "昼": 3226,
+ "显": 3227,
+ "晁": 3228,
+ "時": 3229,
+ "晃": 3230,
+ "晉": 3231,
+ "晋": 3232,
+ "晌": 3233,
+ "晏": 3234,
+ "晒": 3235,
+ "晓": 3236,
+ "晔": 3237,
+ "晕": 3238,
+ "晖": 3239,
+ "晗": 3240,
+ "晚": 3241,
+ "晝": 3242,
+ "晞": 3243,
+ "晟": 3244,
+ "晤": 3245,
+ "晦": 3246,
+ "晨": 3247,
+ "晩": 3248,
+ "普": 3249,
+ "景": 3250,
+ "晰": 3251,
+ "晴": 3252,
+ "晶": 3253,
+ "晷": 3254,
+ "智": 3255,
+ "晾": 3256,
+ "暂": 3257,
+ "暄": 3258,
+ "暇": 3259,
+ "暈": 3260,
+ "暉": 3261,
+ "暌": 3262,
+ "暐": 3263,
+ "暑": 3264,
+ "暖": 3265,
+ "暗": 3266,
+ "暝": 3267,
+ "暢": 3268,
+ "暧": 3269,
+ "暨": 3270,
+ "暫": 3271,
+ "暮": 3272,
+ "暱": 3273,
+ "暴": 3274,
+ "暸": 3275,
+ "暹": 3276,
+ "曄": 3277,
+ "曆": 3278,
+ "曇": 3279,
+ "曉": 3280,
+ "曖": 3281,
+ "曙": 3282,
+ "曜": 3283,
+ "曝": 3284,
+ "曠": 3285,
+ "曦": 3286,
+ "曬": 3287,
+ "曰": 3288,
+ "曲": 3289,
+ "曳": 3290,
+ "更": 3291,
+ "書": 3292,
+ "曹": 3293,
+ "曼": 3294,
+ "曾": 3295,
+ "替": 3296,
+ "最": 3297,
+ "會": 3298,
+ "月": 3299,
+ "有": 3300,
+ "朋": 3301,
+ "服": 3302,
+ "朐": 3303,
+ "朔": 3304,
+ "朕": 3305,
+ "朗": 3306,
+ "望": 3307,
+ "朝": 3308,
+ "期": 3309,
+ "朦": 3310,
+ "朧": 3311,
+ "木": 3312,
+ "未": 3313,
+ "末": 3314,
+ "本": 3315,
+ "札": 3316,
+ "朮": 3317,
+ "术": 3318,
+ "朱": 3319,
+ "朴": 3320,
+ "朵": 3321,
+ "机": 3322,
+ "朽": 3323,
+ "杀": 3324,
+ "杂": 3325,
+ "权": 3326,
+ "杆": 3327,
+ "杈": 3328,
+ "杉": 3329,
+ "李": 3330,
+ "杏": 3331,
+ "材": 3332,
+ "村": 3333,
+ "杓": 3334,
+ "杖": 3335,
+ "杜": 3336,
+ "杞": 3337,
+ "束": 3338,
+ "杠": 3339,
+ "条": 3340,
+ "来": 3341,
+ "杨": 3342,
+ "杭": 3343,
+ "杯": 3344,
+ "杰": 3345,
+ "東": 3346,
+ "杳": 3347,
+ "杵": 3348,
+ "杷": 3349,
+ "杼": 3350,
+ "松": 3351,
+ "板": 3352,
+ "极": 3353,
+ "构": 3354,
+ "枇": 3355,
+ "枉": 3356,
+ "枋": 3357,
+ "析": 3358,
+ "枕": 3359,
+ "林": 3360,
+ "枚": 3361,
+ "果": 3362,
+ "枝": 3363,
+ "枢": 3364,
+ "枣": 3365,
+ "枪": 3366,
+ "枫": 3367,
+ "枭": 3368,
+ "枯": 3369,
+ "枰": 3370,
+ "枱": 3371,
+ "枳": 3372,
+ "架": 3373,
+ "枷": 3374,
+ "枸": 3375,
+ "柄": 3376,
+ "柏": 3377,
+ "某": 3378,
+ "柑": 3379,
+ "柒": 3380,
+ "染": 3381,
+ "柔": 3382,
+ "柘": 3383,
+ "柚": 3384,
+ "柜": 3385,
+ "柞": 3386,
+ "柠": 3387,
+ "柢": 3388,
+ "查": 3389,
+ "柩": 3390,
+ "柬": 3391,
+ "柯": 3392,
+ "柱": 3393,
+ "柳": 3394,
+ "柴": 3395,
+ "柵": 3396,
+ "査": 3397,
+ "柿": 3398,
+ "栀": 3399,
+ "栃": 3400,
+ "栄": 3401,
+ "栅": 3402,
+ "标": 3403,
+ "栈": 3404,
+ "栉": 3405,
+ "栋": 3406,
+ "栎": 3407,
+ "栏": 3408,
+ "树": 3409,
+ "栓": 3410,
+ "栖": 3411,
+ "栗": 3412,
+ "校": 3413,
+ "栩": 3414,
+ "株": 3415,
+ "样": 3416,
+ "核": 3417,
+ "根": 3418,
+ "格": 3419,
+ "栽": 3420,
+ "栾": 3421,
+ "桀": 3422,
+ "桁": 3423,
+ "桂": 3424,
+ "桃": 3425,
+ "桅": 3426,
+ "框": 3427,
+ "案": 3428,
+ "桉": 3429,
+ "桌": 3430,
+ "桎": 3431,
+ "桐": 3432,
+ "桑": 3433,
+ "桓": 3434,
+ "桔": 3435,
+ "桜": 3436,
+ "桠": 3437,
+ "桡": 3438,
+ "桢": 3439,
+ "档": 3440,
+ "桥": 3441,
+ "桦": 3442,
+ "桧": 3443,
+ "桨": 3444,
+ "桩": 3445,
+ "桶": 3446,
+ "桿": 3447,
+ "梁": 3448,
+ "梅": 3449,
+ "梆": 3450,
+ "梏": 3451,
+ "梓": 3452,
+ "梗": 3453,
+ "條": 3454,
+ "梟": 3455,
+ "梢": 3456,
+ "梦": 3457,
+ "梧": 3458,
+ "梨": 3459,
+ "梭": 3460,
+ "梯": 3461,
+ "械": 3462,
+ "梳": 3463,
+ "梵": 3464,
+ "梶": 3465,
+ "检": 3466,
+ "棂": 3467,
+ "棄": 3468,
+ "棉": 3469,
+ "棋": 3470,
+ "棍": 3471,
+ "棒": 3472,
+ "棕": 3473,
+ "棗": 3474,
+ "棘": 3475,
+ "棚": 3476,
+ "棟": 3477,
+ "棠": 3478,
+ "棣": 3479,
+ "棧": 3480,
+ "森": 3481,
+ "棱": 3482,
+ "棲": 3483,
+ "棵": 3484,
+ "棹": 3485,
+ "棺": 3486,
+ "椁": 3487,
+ "椅": 3488,
+ "椋": 3489,
+ "植": 3490,
+ "椎": 3491,
+ "椒": 3492,
+ "検": 3493,
+ "椪": 3494,
+ "椭": 3495,
+ "椰": 3496,
+ "椹": 3497,
+ "椽": 3498,
+ "椿": 3499,
+ "楂": 3500,
+ "楊": 3501,
+ "楓": 3502,
+ "楔": 3503,
+ "楚": 3504,
+ "楝": 3505,
+ "楞": 3506,
+ "楠": 3507,
+ "楣": 3508,
+ "楨": 3509,
+ "楫": 3510,
+ "業": 3511,
+ "楮": 3512,
+ "極": 3513,
+ "楷": 3514,
+ "楸": 3515,
+ "楹": 3516,
+ "楼": 3517,
+ "楽": 3518,
+ "概": 3519,
+ "榄": 3520,
+ "榆": 3521,
+ "榈": 3522,
+ "榉": 3523,
+ "榔": 3524,
+ "榕": 3525,
+ "榖": 3526,
+ "榛": 3527,
+ "榜": 3528,
+ "榨": 3529,
+ "榫": 3530,
+ "榭": 3531,
+ "榮": 3532,
+ "榱": 3533,
+ "榴": 3534,
+ "榷": 3535,
+ "榻": 3536,
+ "槁": 3537,
+ "槃": 3538,
+ "構": 3539,
+ "槌": 3540,
+ "槍": 3541,
+ "槎": 3542,
+ "槐": 3543,
+ "槓": 3544,
+ "様": 3545,
+ "槛": 3546,
+ "槟": 3547,
+ "槤": 3548,
+ "槭": 3549,
+ "槲": 3550,
+ "槳": 3551,
+ "槻": 3552,
+ "槽": 3553,
+ "槿": 3554,
+ "樁": 3555,
+ "樂": 3556,
+ "樊": 3557,
+ "樑": 3558,
+ "樓": 3559,
+ "標": 3560,
+ "樞": 3561,
+ "樟": 3562,
+ "模": 3563,
+ "樣": 3564,
+ "権": 3565,
+ "横": 3566,
+ "樫": 3567,
+ "樯": 3568,
+ "樱": 3569,
+ "樵": 3570,
+ "樸": 3571,
+ "樹": 3572,
+ "樺": 3573,
+ "樽": 3574,
+ "樾": 3575,
+ "橄": 3576,
+ "橇": 3577,
+ "橋": 3578,
+ "橐": 3579,
+ "橘": 3580,
+ "橙": 3581,
+ "機": 3582,
+ "橡": 3583,
+ "橢": 3584,
+ "橫": 3585,
+ "橱": 3586,
+ "橹": 3587,
+ "橼": 3588,
+ "檀": 3589,
+ "檄": 3590,
+ "檎": 3591,
+ "檐": 3592,
+ "檔": 3593,
+ "檗": 3594,
+ "檜": 3595,
+ "檢": 3596,
+ "檬": 3597,
+ "檯": 3598,
+ "檳": 3599,
+ "檸": 3600,
+ "檻": 3601,
+ "櫃": 3602,
+ "櫚": 3603,
+ "櫛": 3604,
+ "櫥": 3605,
+ "櫸": 3606,
+ "櫻": 3607,
+ "欄": 3608,
+ "權": 3609,
+ "欒": 3610,
+ "欖": 3611,
+ "欠": 3612,
+ "次": 3613,
+ "欢": 3614,
+ "欣": 3615,
+ "欧": 3616,
+ "欲": 3617,
+ "欸": 3618,
+ "欺": 3619,
+ "欽": 3620,
+ "款": 3621,
+ "歆": 3622,
+ "歇": 3623,
+ "歉": 3624,
+ "歌": 3625,
+ "歎": 3626,
+ "歐": 3627,
+ "歓": 3628,
+ "歙": 3629,
+ "歛": 3630,
+ "歡": 3631,
+ "止": 3632,
+ "正": 3633,
+ "此": 3634,
+ "步": 3635,
+ "武": 3636,
+ "歧": 3637,
+ "歩": 3638,
+ "歪": 3639,
+ "歯": 3640,
+ "歲": 3641,
+ "歳": 3642,
+ "歴": 3643,
+ "歷": 3644,
+ "歸": 3645,
+ "歹": 3646,
+ "死": 3647,
+ "歼": 3648,
+ "殁": 3649,
+ "殃": 3650,
+ "殆": 3651,
+ "殇": 3652,
+ "殉": 3653,
+ "殊": 3654,
+ "残": 3655,
+ "殒": 3656,
+ "殓": 3657,
+ "殖": 3658,
+ "殘": 3659,
+ "殞": 3660,
+ "殡": 3661,
+ "殤": 3662,
+ "殭": 3663,
+ "殯": 3664,
+ "殲": 3665,
+ "殴": 3666,
+ "段": 3667,
+ "殷": 3668,
+ "殺": 3669,
+ "殼": 3670,
+ "殿": 3671,
+ "毀": 3672,
+ "毁": 3673,
+ "毂": 3674,
+ "毅": 3675,
+ "毆": 3676,
+ "毋": 3677,
+ "母": 3678,
+ "毎": 3679,
+ "每": 3680,
+ "毒": 3681,
+ "毓": 3682,
+ "比": 3683,
+ "毕": 3684,
+ "毗": 3685,
+ "毘": 3686,
+ "毙": 3687,
+ "毛": 3688,
+ "毡": 3689,
+ "毫": 3690,
+ "毯": 3691,
+ "毽": 3692,
+ "氈": 3693,
+ "氏": 3694,
+ "氐": 3695,
+ "民": 3696,
+ "氓": 3697,
+ "气": 3698,
+ "氖": 3699,
+ "気": 3700,
+ "氙": 3701,
+ "氛": 3702,
+ "氟": 3703,
+ "氡": 3704,
+ "氢": 3705,
+ "氣": 3706,
+ "氤": 3707,
+ "氦": 3708,
+ "氧": 3709,
+ "氨": 3710,
+ "氪": 3711,
+ "氫": 3712,
+ "氮": 3713,
+ "氯": 3714,
+ "氰": 3715,
+ "氲": 3716,
+ "水": 3717,
+ "氷": 3718,
+ "永": 3719,
+ "氹": 3720,
+ "氾": 3721,
+ "汀": 3722,
+ "汁": 3723,
+ "求": 3724,
+ "汆": 3725,
+ "汇": 3726,
+ "汉": 3727,
+ "汎": 3728,
+ "汐": 3729,
+ "汕": 3730,
+ "汗": 3731,
+ "汙": 3732,
+ "汛": 3733,
+ "汝": 3734,
+ "汞": 3735,
+ "江": 3736,
+ "池": 3737,
+ "污": 3738,
+ "汤": 3739,
+ "汨": 3740,
+ "汩": 3741,
+ "汪": 3742,
+ "汰": 3743,
+ "汲": 3744,
+ "汴": 3745,
+ "汶": 3746,
+ "汹": 3747,
+ "決": 3748,
+ "汽": 3749,
+ "汾": 3750,
+ "沁": 3751,
+ "沂": 3752,
+ "沃": 3753,
+ "沅": 3754,
+ "沈": 3755,
+ "沉": 3756,
+ "沌": 3757,
+ "沏": 3758,
+ "沐": 3759,
+ "沒": 3760,
+ "沓": 3761,
+ "沖": 3762,
+ "沙": 3763,
+ "沛": 3764,
+ "沟": 3765,
+ "没": 3766,
+ "沢": 3767,
+ "沣": 3768,
+ "沥": 3769,
+ "沦": 3770,
+ "沧": 3771,
+ "沪": 3772,
+ "沫": 3773,
+ "沭": 3774,
+ "沮": 3775,
+ "沱": 3776,
+ "河": 3777,
+ "沸": 3778,
+ "油": 3779,
+ "治": 3780,
+ "沼": 3781,
+ "沽": 3782,
+ "沾": 3783,
+ "沿": 3784,
+ "況": 3785,
+ "泄": 3786,
+ "泉": 3787,
+ "泊": 3788,
+ "泌": 3789,
+ "泓": 3790,
+ "法": 3791,
+ "泗": 3792,
+ "泛": 3793,
+ "泞": 3794,
+ "泠": 3795,
+ "泡": 3796,
+ "波": 3797,
+ "泣": 3798,
+ "泥": 3799,
+ "注": 3800,
+ "泪": 3801,
+ "泫": 3802,
+ "泮": 3803,
+ "泯": 3804,
+ "泰": 3805,
+ "泱": 3806,
+ "泳": 3807,
+ "泵": 3808,
+ "泷": 3809,
+ "泸": 3810,
+ "泻": 3811,
+ "泼": 3812,
+ "泽": 3813,
+ "泾": 3814,
+ "洁": 3815,
+ "洄": 3816,
+ "洋": 3817,
+ "洒": 3818,
+ "洗": 3819,
+ "洙": 3820,
+ "洛": 3821,
+ "洞": 3822,
+ "津": 3823,
+ "洩": 3824,
+ "洪": 3825,
+ "洮": 3826,
+ "洱": 3827,
+ "洲": 3828,
+ "洵": 3829,
+ "洶": 3830,
+ "洸": 3831,
+ "洹": 3832,
+ "活": 3833,
+ "洼": 3834,
+ "洽": 3835,
+ "派": 3836,
+ "流": 3837,
+ "浃": 3838,
+ "浄": 3839,
+ "浅": 3840,
+ "浆": 3841,
+ "浇": 3842,
+ "浊": 3843,
+ "测": 3844,
+ "济": 3845,
+ "浏": 3846,
+ "浑": 3847,
+ "浒": 3848,
+ "浓": 3849,
+ "浔": 3850,
+ "浙": 3851,
+ "浚": 3852,
+ "浜": 3853,
+ "浣": 3854,
+ "浦": 3855,
+ "浩": 3856,
+ "浪": 3857,
+ "浬": 3858,
+ "浮": 3859,
+ "浯": 3860,
+ "浴": 3861,
+ "海": 3862,
+ "浸": 3863,
+ "涂": 3864,
+ "涅": 3865,
+ "涇": 3866,
+ "消": 3867,
+ "涉": 3868,
+ "涌": 3869,
+ "涎": 3870,
+ "涓": 3871,
+ "涔": 3872,
+ "涕": 3873,
+ "涙": 3874,
+ "涛": 3875,
+ "涝": 3876,
+ "涞": 3877,
+ "涟": 3878,
+ "涠": 3879,
+ "涡": 3880,
+ "涣": 3881,
+ "涤": 3882,
+ "润": 3883,
+ "涧": 3884,
+ "涨": 3885,
+ "涩": 3886,
+ "涪": 3887,
+ "涮": 3888,
+ "涯": 3889,
+ "液": 3890,
+ "涵": 3891,
+ "涸": 3892,
+ "涼": 3893,
+ "涿": 3894,
+ "淀": 3895,
+ "淄": 3896,
+ "淅": 3897,
+ "淆": 3898,
+ "淇": 3899,
+ "淋": 3900,
+ "淌": 3901,
+ "淑": 3902,
+ "淒": 3903,
+ "淖": 3904,
+ "淘": 3905,
+ "淙": 3906,
+ "淚": 3907,
+ "淞": 3908,
+ "淡": 3909,
+ "淤": 3910,
+ "淦": 3911,
+ "淨": 3912,
+ "淩": 3913,
+ "淪": 3914,
+ "淫": 3915,
+ "淬": 3916,
+ "淮": 3917,
+ "深": 3918,
+ "淳": 3919,
+ "淵": 3920,
+ "混": 3921,
+ "淹": 3922,
+ "淺": 3923,
+ "添": 3924,
+ "淼": 3925,
+ "清": 3926,
+ "済": 3927,
+ "渉": 3928,
+ "渊": 3929,
+ "渋": 3930,
+ "渍": 3931,
+ "渎": 3932,
+ "渐": 3933,
+ "渔": 3934,
+ "渗": 3935,
+ "渙": 3936,
+ "渚": 3937,
+ "減": 3938,
+ "渝": 3939,
+ "渠": 3940,
+ "渡": 3941,
+ "渣": 3942,
+ "渤": 3943,
+ "渥": 3944,
+ "渦": 3945,
+ "温": 3946,
+ "測": 3947,
+ "渭": 3948,
+ "港": 3949,
+ "渲": 3950,
+ "渴": 3951,
+ "游": 3952,
+ "渺": 3953,
+ "渾": 3954,
+ "湃": 3955,
+ "湄": 3956,
+ "湊": 3957,
+ "湍": 3958,
+ "湖": 3959,
+ "湘": 3960,
+ "湛": 3961,
+ "湟": 3962,
+ "湧": 3963,
+ "湫": 3964,
+ "湮": 3965,
+ "湯": 3966,
+ "湳": 3967,
+ "湾": 3968,
+ "湿": 3969,
+ "満": 3970,
+ "溃": 3971,
+ "溅": 3972,
+ "溉": 3973,
+ "溏": 3974,
+ "源": 3975,
+ "準": 3976,
+ "溜": 3977,
+ "溝": 3978,
+ "溟": 3979,
+ "溢": 3980,
+ "溥": 3981,
+ "溧": 3982,
+ "溪": 3983,
+ "溫": 3984,
+ "溯": 3985,
+ "溱": 3986,
+ "溴": 3987,
+ "溶": 3988,
+ "溺": 3989,
+ "溼": 3990,
+ "滁": 3991,
+ "滂": 3992,
+ "滄": 3993,
+ "滅": 3994,
+ "滇": 3995,
+ "滋": 3996,
+ "滌": 3997,
+ "滑": 3998,
+ "滓": 3999,
+ "滔": 4000,
+ "滕": 4001,
+ "滙": 4002,
+ "滚": 4003,
+ "滝": 4004,
+ "滞": 4005,
+ "滟": 4006,
+ "满": 4007,
+ "滢": 4008,
+ "滤": 4009,
+ "滥": 4010,
+ "滦": 4011,
+ "滨": 4012,
+ "滩": 4013,
+ "滬": 4014,
+ "滯": 4015,
+ "滲": 4016,
+ "滴": 4017,
+ "滷": 4018,
+ "滸": 4019,
+ "滾": 4020,
+ "滿": 4021,
+ "漁": 4022,
+ "漂": 4023,
+ "漆": 4024,
+ "漉": 4025,
+ "漏": 4026,
+ "漓": 4027,
+ "演": 4028,
+ "漕": 4029,
+ "漠": 4030,
+ "漢": 4031,
+ "漣": 4032,
+ "漩": 4033,
+ "漪": 4034,
+ "漫": 4035,
+ "漬": 4036,
+ "漯": 4037,
+ "漱": 4038,
+ "漲": 4039,
+ "漳": 4040,
+ "漸": 4041,
+ "漾": 4042,
+ "漿": 4043,
+ "潆": 4044,
+ "潇": 4045,
+ "潋": 4046,
+ "潍": 4047,
+ "潑": 4048,
+ "潔": 4049,
+ "潘": 4050,
+ "潛": 4051,
+ "潜": 4052,
+ "潞": 4053,
+ "潟": 4054,
+ "潢": 4055,
+ "潤": 4056,
+ "潦": 4057,
+ "潧": 4058,
+ "潭": 4059,
+ "潮": 4060,
+ "潰": 4061,
+ "潴": 4062,
+ "潸": 4063,
+ "潺": 4064,
+ "潼": 4065,
+ "澀": 4066,
+ "澄": 4067,
+ "澆": 4068,
+ "澈": 4069,
+ "澍": 4070,
+ "澎": 4071,
+ "澗": 4072,
+ "澜": 4073,
+ "澡": 4074,
+ "澤": 4075,
+ "澧": 4076,
+ "澱": 4077,
+ "澳": 4078,
+ "澹": 4079,
+ "激": 4080,
+ "濁": 4081,
+ "濂": 4082,
+ "濃": 4083,
+ "濑": 4084,
+ "濒": 4085,
+ "濕": 4086,
+ "濘": 4087,
+ "濛": 4088,
+ "濟": 4089,
+ "濠": 4090,
+ "濡": 4091,
+ "濤": 4092,
+ "濫": 4093,
+ "濬": 4094,
+ "濮": 4095,
+ "濯": 4096,
+ "濱": 4097,
+ "濺": 4098,
+ "濾": 4099,
+ "瀅": 4100,
+ "瀆": 4101,
+ "瀉": 4102,
+ "瀋": 4103,
+ "瀏": 4104,
+ "瀑": 4105,
+ "瀕": 4106,
+ "瀘": 4107,
+ "瀚": 4108,
+ "瀛": 4109,
+ "瀝": 4110,
+ "瀞": 4111,
+ "瀟": 4112,
+ "瀧": 4113,
+ "瀨": 4114,
+ "瀬": 4115,
+ "瀰": 4116,
+ "瀾": 4117,
+ "灌": 4118,
+ "灏": 4119,
+ "灑": 4120,
+ "灘": 4121,
+ "灝": 4122,
+ "灞": 4123,
+ "灣": 4124,
+ "火": 4125,
+ "灬": 4126,
+ "灭": 4127,
+ "灯": 4128,
+ "灰": 4129,
+ "灵": 4130,
+ "灶": 4131,
+ "灸": 4132,
+ "灼": 4133,
+ "災": 4134,
+ "灾": 4135,
+ "灿": 4136,
+ "炀": 4137,
+ "炁": 4138,
+ "炅": 4139,
+ "炉": 4140,
+ "炊": 4141,
+ "炎": 4142,
+ "炒": 4143,
+ "炔": 4144,
+ "炕": 4145,
+ "炖": 4146,
+ "炙": 4147,
+ "炜": 4148,
+ "炫": 4149,
+ "炬": 4150,
+ "炭": 4151,
+ "炮": 4152,
+ "炯": 4153,
+ "炳": 4154,
+ "炷": 4155,
+ "炸": 4156,
+ "点": 4157,
+ "為": 4158,
+ "炼": 4159,
+ "炽": 4160,
+ "烁": 4161,
+ "烂": 4162,
+ "烃": 4163,
+ "烈": 4164,
+ "烊": 4165,
+ "烏": 4166,
+ "烘": 4167,
+ "烙": 4168,
+ "烛": 4169,
+ "烟": 4170,
+ "烤": 4171,
+ "烦": 4172,
+ "烧": 4173,
+ "烨": 4174,
+ "烩": 4175,
+ "烫": 4176,
+ "烬": 4177,
+ "热": 4178,
+ "烯": 4179,
+ "烷": 4180,
+ "烹": 4181,
+ "烽": 4182,
+ "焉": 4183,
+ "焊": 4184,
+ "焕": 4185,
+ "焖": 4186,
+ "焗": 4187,
+ "焘": 4188,
+ "焙": 4189,
+ "焚": 4190,
+ "焜": 4191,
+ "無": 4192,
+ "焦": 4193,
+ "焯": 4194,
+ "焰": 4195,
+ "焱": 4196,
+ "然": 4197,
+ "焼": 4198,
+ "煅": 4199,
+ "煉": 4200,
+ "煊": 4201,
+ "煌": 4202,
+ "煎": 4203,
+ "煒": 4204,
+ "煖": 4205,
+ "煙": 4206,
+ "煜": 4207,
+ "煞": 4208,
+ "煤": 4209,
+ "煥": 4210,
+ "煦": 4211,
+ "照": 4212,
+ "煨": 4213,
+ "煩": 4214,
+ "煮": 4215,
+ "煲": 4216,
+ "煸": 4217,
+ "煽": 4218,
+ "熄": 4219,
+ "熊": 4220,
+ "熏": 4221,
+ "熒": 4222,
+ "熔": 4223,
+ "熙": 4224,
+ "熟": 4225,
+ "熠": 4226,
+ "熨": 4227,
+ "熬": 4228,
+ "熱": 4229,
+ "熵": 4230,
+ "熹": 4231,
+ "熾": 4232,
+ "燁": 4233,
+ "燃": 4234,
+ "燄": 4235,
+ "燈": 4236,
+ "燉": 4237,
+ "燊": 4238,
+ "燎": 4239,
+ "燒": 4240,
+ "燔": 4241,
+ "燕": 4242,
+ "燙": 4243,
+ "燜": 4244,
+ "營": 4245,
+ "燥": 4246,
+ "燦": 4247,
+ "燧": 4248,
+ "燭": 4249,
+ "燮": 4250,
+ "燴": 4251,
+ "燻": 4252,
+ "燼": 4253,
+ "燿": 4254,
+ "爆": 4255,
+ "爍": 4256,
+ "爐": 4257,
+ "爛": 4258,
+ "爪": 4259,
+ "爬": 4260,
+ "爭": 4261,
+ "爰": 4262,
+ "爱": 4263,
+ "爲": 4264,
+ "爵": 4265,
+ "父": 4266,
+ "爷": 4267,
+ "爸": 4268,
+ "爹": 4269,
+ "爺": 4270,
+ "爻": 4271,
+ "爽": 4272,
+ "爾": 4273,
+ "牆": 4274,
+ "片": 4275,
+ "版": 4276,
+ "牌": 4277,
+ "牍": 4278,
+ "牒": 4279,
+ "牙": 4280,
+ "牛": 4281,
+ "牝": 4282,
+ "牟": 4283,
+ "牠": 4284,
+ "牡": 4285,
+ "牢": 4286,
+ "牦": 4287,
+ "牧": 4288,
+ "物": 4289,
+ "牯": 4290,
+ "牲": 4291,
+ "牴": 4292,
+ "牵": 4293,
+ "特": 4294,
+ "牺": 4295,
+ "牽": 4296,
+ "犀": 4297,
+ "犁": 4298,
+ "犄": 4299,
+ "犊": 4300,
+ "犍": 4301,
+ "犒": 4302,
+ "犢": 4303,
+ "犧": 4304,
+ "犬": 4305,
+ "犯": 4306,
+ "状": 4307,
+ "犷": 4308,
+ "犸": 4309,
+ "犹": 4310,
+ "狀": 4311,
+ "狂": 4312,
+ "狄": 4313,
+ "狈": 4314,
+ "狎": 4315,
+ "狐": 4316,
+ "狒": 4317,
+ "狗": 4318,
+ "狙": 4319,
+ "狞": 4320,
+ "狠": 4321,
+ "狡": 4322,
+ "狩": 4323,
+ "独": 4324,
+ "狭": 4325,
+ "狮": 4326,
+ "狰": 4327,
+ "狱": 4328,
+ "狸": 4329,
+ "狹": 4330,
+ "狼": 4331,
+ "狽": 4332,
+ "猎": 4333,
+ "猕": 4334,
+ "猖": 4335,
+ "猗": 4336,
+ "猙": 4337,
+ "猛": 4338,
+ "猜": 4339,
+ "猝": 4340,
+ "猥": 4341,
+ "猩": 4342,
+ "猪": 4343,
+ "猫": 4344,
+ "猬": 4345,
+ "献": 4346,
+ "猴": 4347,
+ "猶": 4348,
+ "猷": 4349,
+ "猾": 4350,
+ "猿": 4351,
+ "獄": 4352,
+ "獅": 4353,
+ "獎": 4354,
+ "獐": 4355,
+ "獒": 4356,
+ "獗": 4357,
+ "獠": 4358,
+ "獣": 4359,
+ "獨": 4360,
+ "獭": 4361,
+ "獰": 4362,
+ "獲": 4363,
+ "獵": 4364,
+ "獷": 4365,
+ "獸": 4366,
+ "獺": 4367,
+ "獻": 4368,
+ "獼": 4369,
+ "獾": 4370,
+ "玄": 4371,
+ "率": 4372,
+ "玉": 4373,
+ "王": 4374,
+ "玑": 4375,
+ "玖": 4376,
+ "玛": 4377,
+ "玟": 4378,
+ "玠": 4379,
+ "玥": 4380,
+ "玩": 4381,
+ "玫": 4382,
+ "玮": 4383,
+ "环": 4384,
+ "现": 4385,
+ "玲": 4386,
+ "玳": 4387,
+ "玷": 4388,
+ "玺": 4389,
+ "玻": 4390,
+ "珀": 4391,
+ "珂": 4392,
+ "珅": 4393,
+ "珈": 4394,
+ "珉": 4395,
+ "珊": 4396,
+ "珍": 4397,
+ "珏": 4398,
+ "珐": 4399,
+ "珑": 4400,
+ "珙": 4401,
+ "珞": 4402,
+ "珠": 4403,
+ "珣": 4404,
+ "珥": 4405,
+ "珩": 4406,
+ "珪": 4407,
+ "班": 4408,
+ "珮": 4409,
+ "珲": 4410,
+ "珺": 4411,
+ "現": 4412,
+ "球": 4413,
+ "琅": 4414,
+ "理": 4415,
+ "琇": 4416,
+ "琉": 4417,
+ "琊": 4418,
+ "琍": 4419,
+ "琏": 4420,
+ "琐": 4421,
+ "琛": 4422,
+ "琢": 4423,
+ "琥": 4424,
+ "琦": 4425,
+ "琨": 4426,
+ "琪": 4427,
+ "琬": 4428,
+ "琮": 4429,
+ "琰": 4430,
+ "琲": 4431,
+ "琳": 4432,
+ "琴": 4433,
+ "琵": 4434,
+ "琶": 4435,
+ "琺": 4436,
+ "琼": 4437,
+ "瑀": 4438,
+ "瑁": 4439,
+ "瑄": 4440,
+ "瑋": 4441,
+ "瑕": 4442,
+ "瑗": 4443,
+ "瑙": 4444,
+ "瑚": 4445,
+ "瑛": 4446,
+ "瑜": 4447,
+ "瑞": 4448,
+ "瑟": 4449,
+ "瑠": 4450,
+ "瑣": 4451,
+ "瑤": 4452,
+ "瑩": 4453,
+ "瑪": 4454,
+ "瑯": 4455,
+ "瑰": 4456,
+ "瑶": 4457,
+ "瑾": 4458,
+ "璀": 4459,
+ "璁": 4460,
+ "璃": 4461,
+ "璇": 4462,
+ "璉": 4463,
+ "璋": 4464,
+ "璎": 4465,
+ "璐": 4466,
+ "璜": 4467,
+ "璞": 4468,
+ "璟": 4469,
+ "璧": 4470,
+ "璨": 4471,
+ "環": 4472,
+ "璽": 4473,
+ "璿": 4474,
+ "瓊": 4475,
+ "瓏": 4476,
+ "瓒": 4477,
+ "瓜": 4478,
+ "瓢": 4479,
+ "瓣": 4480,
+ "瓤": 4481,
+ "瓦": 4482,
+ "瓮": 4483,
+ "瓯": 4484,
+ "瓴": 4485,
+ "瓶": 4486,
+ "瓷": 4487,
+ "甄": 4488,
+ "甌": 4489,
+ "甕": 4490,
+ "甘": 4491,
+ "甙": 4492,
+ "甚": 4493,
+ "甜": 4494,
+ "生": 4495,
+ "產": 4496,
+ "産": 4497,
+ "甥": 4498,
+ "甦": 4499,
+ "用": 4500,
+ "甩": 4501,
+ "甫": 4502,
+ "甬": 4503,
+ "甭": 4504,
+ "甯": 4505,
+ "田": 4506,
+ "由": 4507,
+ "甲": 4508,
+ "申": 4509,
+ "电": 4510,
+ "男": 4511,
+ "甸": 4512,
+ "町": 4513,
+ "画": 4514,
+ "甾": 4515,
+ "畀": 4516,
+ "畅": 4517,
+ "界": 4518,
+ "畏": 4519,
+ "畑": 4520,
+ "畔": 4521,
+ "留": 4522,
+ "畜": 4523,
+ "畝": 4524,
+ "畢": 4525,
+ "略": 4526,
+ "畦": 4527,
+ "番": 4528,
+ "畫": 4529,
+ "異": 4530,
+ "畲": 4531,
+ "畳": 4532,
+ "畴": 4533,
+ "當": 4534,
+ "畸": 4535,
+ "畹": 4536,
+ "畿": 4537,
+ "疆": 4538,
+ "疇": 4539,
+ "疊": 4540,
+ "疏": 4541,
+ "疑": 4542,
+ "疔": 4543,
+ "疖": 4544,
+ "疗": 4545,
+ "疙": 4546,
+ "疚": 4547,
+ "疝": 4548,
+ "疟": 4549,
+ "疡": 4550,
+ "疣": 4551,
+ "疤": 4552,
+ "疥": 4553,
+ "疫": 4554,
+ "疮": 4555,
+ "疯": 4556,
+ "疱": 4557,
+ "疲": 4558,
+ "疳": 4559,
+ "疵": 4560,
+ "疸": 4561,
+ "疹": 4562,
+ "疼": 4563,
+ "疽": 4564,
+ "疾": 4565,
+ "痂": 4566,
+ "病": 4567,
+ "症": 4568,
+ "痈": 4569,
+ "痉": 4570,
+ "痊": 4571,
+ "痍": 4572,
+ "痒": 4573,
+ "痔": 4574,
+ "痕": 4575,
+ "痘": 4576,
+ "痙": 4577,
+ "痛": 4578,
+ "痞": 4579,
+ "痠": 4580,
+ "痢": 4581,
+ "痣": 4582,
+ "痤": 4583,
+ "痧": 4584,
+ "痨": 4585,
+ "痪": 4586,
+ "痫": 4587,
+ "痰": 4588,
+ "痱": 4589,
+ "痴": 4590,
+ "痹": 4591,
+ "痺": 4592,
+ "痼": 4593,
+ "痿": 4594,
+ "瘀": 4595,
+ "瘁": 4596,
+ "瘋": 4597,
+ "瘍": 4598,
+ "瘓": 4599,
+ "瘘": 4600,
+ "瘙": 4601,
+ "瘟": 4602,
+ "瘠": 4603,
+ "瘡": 4604,
+ "瘢": 4605,
+ "瘤": 4606,
+ "瘦": 4607,
+ "瘧": 4608,
+ "瘩": 4609,
+ "瘪": 4610,
+ "瘫": 4611,
+ "瘴": 4612,
+ "瘸": 4613,
+ "瘾": 4614,
+ "療": 4615,
+ "癇": 4616,
+ "癌": 4617,
+ "癒": 4618,
+ "癖": 4619,
+ "癜": 4620,
+ "癞": 4621,
+ "癡": 4622,
+ "癢": 4623,
+ "癣": 4624,
+ "癥": 4625,
+ "癫": 4626,
+ "癬": 4627,
+ "癮": 4628,
+ "癱": 4629,
+ "癲": 4630,
+ "癸": 4631,
+ "発": 4632,
+ "登": 4633,
+ "發": 4634,
+ "白": 4635,
+ "百": 4636,
+ "皂": 4637,
+ "的": 4638,
+ "皆": 4639,
+ "皇": 4640,
+ "皈": 4641,
+ "皋": 4642,
+ "皎": 4643,
+ "皑": 4644,
+ "皓": 4645,
+ "皖": 4646,
+ "皙": 4647,
+ "皚": 4648,
+ "皮": 4649,
+ "皰": 4650,
+ "皱": 4651,
+ "皴": 4652,
+ "皺": 4653,
+ "皿": 4654,
+ "盂": 4655,
+ "盃": 4656,
+ "盅": 4657,
+ "盆": 4658,
+ "盈": 4659,
+ "益": 4660,
+ "盎": 4661,
+ "盏": 4662,
+ "盐": 4663,
+ "监": 4664,
+ "盒": 4665,
+ "盔": 4666,
+ "盖": 4667,
+ "盗": 4668,
+ "盘": 4669,
+ "盛": 4670,
+ "盜": 4671,
+ "盞": 4672,
+ "盟": 4673,
+ "盡": 4674,
+ "監": 4675,
+ "盤": 4676,
+ "盥": 4677,
+ "盧": 4678,
+ "盪": 4679,
+ "目": 4680,
+ "盯": 4681,
+ "盱": 4682,
+ "盲": 4683,
+ "直": 4684,
+ "相": 4685,
+ "盹": 4686,
+ "盼": 4687,
+ "盾": 4688,
+ "省": 4689,
+ "眈": 4690,
+ "眉": 4691,
+ "看": 4692,
+ "県": 4693,
+ "眙": 4694,
+ "眞": 4695,
+ "真": 4696,
+ "眠": 4697,
+ "眦": 4698,
+ "眨": 4699,
+ "眩": 4700,
+ "眯": 4701,
+ "眶": 4702,
+ "眷": 4703,
+ "眸": 4704,
+ "眺": 4705,
+ "眼": 4706,
+ "眾": 4707,
+ "着": 4708,
+ "睁": 4709,
+ "睇": 4710,
+ "睏": 4711,
+ "睐": 4712,
+ "睑": 4713,
+ "睛": 4714,
+ "睜": 4715,
+ "睞": 4716,
+ "睡": 4717,
+ "睢": 4718,
+ "督": 4719,
+ "睥": 4720,
+ "睦": 4721,
+ "睨": 4722,
+ "睪": 4723,
+ "睫": 4724,
+ "睬": 4725,
+ "睹": 4726,
+ "睽": 4727,
+ "睾": 4728,
+ "睿": 4729,
+ "瞄": 4730,
+ "瞅": 4731,
+ "瞇": 4732,
+ "瞋": 4733,
+ "瞌": 4734,
+ "瞎": 4735,
+ "瞑": 4736,
+ "瞒": 4737,
+ "瞓": 4738,
+ "瞞": 4739,
+ "瞟": 4740,
+ "瞠": 4741,
+ "瞥": 4742,
+ "瞧": 4743,
+ "瞩": 4744,
+ "瞪": 4745,
+ "瞬": 4746,
+ "瞭": 4747,
+ "瞰": 4748,
+ "瞳": 4749,
+ "瞻": 4750,
+ "瞼": 4751,
+ "瞿": 4752,
+ "矇": 4753,
+ "矍": 4754,
+ "矗": 4755,
+ "矚": 4756,
+ "矛": 4757,
+ "矜": 4758,
+ "矢": 4759,
+ "矣": 4760,
+ "知": 4761,
+ "矩": 4762,
+ "矫": 4763,
+ "短": 4764,
+ "矮": 4765,
+ "矯": 4766,
+ "石": 4767,
+ "矶": 4768,
+ "矽": 4769,
+ "矾": 4770,
+ "矿": 4771,
+ "码": 4772,
+ "砂": 4773,
+ "砌": 4774,
+ "砍": 4775,
+ "砒": 4776,
+ "研": 4777,
+ "砖": 4778,
+ "砗": 4779,
+ "砚": 4780,
+ "砝": 4781,
+ "砣": 4782,
+ "砥": 4783,
+ "砧": 4784,
+ "砭": 4785,
+ "砰": 4786,
+ "砲": 4787,
+ "破": 4788,
+ "砷": 4789,
+ "砸": 4790,
+ "砺": 4791,
+ "砼": 4792,
+ "砾": 4793,
+ "础": 4794,
+ "硅": 4795,
+ "硐": 4796,
+ "硒": 4797,
+ "硕": 4798,
+ "硝": 4799,
+ "硫": 4800,
+ "硬": 4801,
+ "确": 4802,
+ "硯": 4803,
+ "硼": 4804,
+ "碁": 4805,
+ "碇": 4806,
+ "碉": 4807,
+ "碌": 4808,
+ "碍": 4809,
+ "碎": 4810,
+ "碑": 4811,
+ "碓": 4812,
+ "碗": 4813,
+ "碘": 4814,
+ "碚": 4815,
+ "碛": 4816,
+ "碟": 4817,
+ "碣": 4818,
+ "碧": 4819,
+ "碩": 4820,
+ "碰": 4821,
+ "碱": 4822,
+ "碳": 4823,
+ "碴": 4824,
+ "確": 4825,
+ "碼": 4826,
+ "碾": 4827,
+ "磁": 4828,
+ "磅": 4829,
+ "磊": 4830,
+ "磋": 4831,
+ "磐": 4832,
+ "磕": 4833,
+ "磚": 4834,
+ "磡": 4835,
+ "磨": 4836,
+ "磬": 4837,
+ "磯": 4838,
+ "磲": 4839,
+ "磷": 4840,
+ "磺": 4841,
+ "礁": 4842,
+ "礎": 4843,
+ "礙": 4844,
+ "礡": 4845,
+ "礦": 4846,
+ "礪": 4847,
+ "礫": 4848,
+ "礴": 4849,
+ "示": 4850,
+ "礼": 4851,
+ "社": 4852,
+ "祀": 4853,
+ "祁": 4854,
+ "祂": 4855,
+ "祇": 4856,
+ "祈": 4857,
+ "祉": 4858,
+ "祎": 4859,
+ "祐": 4860,
+ "祕": 4861,
+ "祖": 4862,
+ "祗": 4863,
+ "祚": 4864,
+ "祛": 4865,
+ "祜": 4866,
+ "祝": 4867,
+ "神": 4868,
+ "祟": 4869,
+ "祠": 4870,
+ "祢": 4871,
+ "祥": 4872,
+ "票": 4873,
+ "祭": 4874,
+ "祯": 4875,
+ "祷": 4876,
+ "祸": 4877,
+ "祺": 4878,
+ "祿": 4879,
+ "禀": 4880,
+ "禁": 4881,
+ "禄": 4882,
+ "禅": 4883,
+ "禍": 4884,
+ "禎": 4885,
+ "福": 4886,
+ "禛": 4887,
+ "禦": 4888,
+ "禧": 4889,
+ "禪": 4890,
+ "禮": 4891,
+ "禱": 4892,
+ "禹": 4893,
+ "禺": 4894,
+ "离": 4895,
+ "禽": 4896,
+ "禾": 4897,
+ "禿": 4898,
+ "秀": 4899,
+ "私": 4900,
+ "秃": 4901,
+ "秆": 4902,
+ "秉": 4903,
+ "秋": 4904,
+ "种": 4905,
+ "科": 4906,
+ "秒": 4907,
+ "秘": 4908,
+ "租": 4909,
+ "秣": 4910,
+ "秤": 4911,
+ "秦": 4912,
+ "秧": 4913,
+ "秩": 4914,
+ "秭": 4915,
+ "积": 4916,
+ "称": 4917,
+ "秸": 4918,
+ "移": 4919,
+ "秽": 4920,
+ "稀": 4921,
+ "稅": 4922,
+ "程": 4923,
+ "稍": 4924,
+ "税": 4925,
+ "稔": 4926,
+ "稗": 4927,
+ "稚": 4928,
+ "稜": 4929,
+ "稞": 4930,
+ "稟": 4931,
+ "稠": 4932,
+ "稣": 4933,
+ "種": 4934,
+ "稱": 4935,
+ "稲": 4936,
+ "稳": 4937,
+ "稷": 4938,
+ "稹": 4939,
+ "稻": 4940,
+ "稼": 4941,
+ "稽": 4942,
+ "稿": 4943,
+ "穀": 4944,
+ "穂": 4945,
+ "穆": 4946,
+ "穌": 4947,
+ "積": 4948,
+ "穎": 4949,
+ "穗": 4950,
+ "穢": 4951,
+ "穩": 4952,
+ "穫": 4953,
+ "穴": 4954,
+ "究": 4955,
+ "穷": 4956,
+ "穹": 4957,
+ "空": 4958,
+ "穿": 4959,
+ "突": 4960,
+ "窃": 4961,
+ "窄": 4962,
+ "窈": 4963,
+ "窍": 4964,
+ "窑": 4965,
+ "窒": 4966,
+ "窓": 4967,
+ "窕": 4968,
+ "窖": 4969,
+ "窗": 4970,
+ "窘": 4971,
+ "窜": 4972,
+ "窝": 4973,
+ "窟": 4974,
+ "窠": 4975,
+ "窥": 4976,
+ "窦": 4977,
+ "窨": 4978,
+ "窩": 4979,
+ "窪": 4980,
+ "窮": 4981,
+ "窯": 4982,
+ "窺": 4983,
+ "窿": 4984,
+ "竄": 4985,
+ "竅": 4986,
+ "竇": 4987,
+ "竊": 4988,
+ "立": 4989,
+ "竖": 4990,
+ "站": 4991,
+ "竜": 4992,
+ "竞": 4993,
+ "竟": 4994,
+ "章": 4995,
+ "竣": 4996,
+ "童": 4997,
+ "竭": 4998,
+ "端": 4999,
+ "競": 5000,
+ "竹": 5001,
+ "竺": 5002,
+ "竽": 5003,
+ "竿": 5004,
+ "笃": 5005,
+ "笆": 5006,
+ "笈": 5007,
+ "笋": 5008,
+ "笏": 5009,
+ "笑": 5010,
+ "笔": 5011,
+ "笙": 5012,
+ "笛": 5013,
+ "笞": 5014,
+ "笠": 5015,
+ "符": 5016,
+ "笨": 5017,
+ "第": 5018,
+ "笹": 5019,
+ "笺": 5020,
+ "笼": 5021,
+ "筆": 5022,
+ "等": 5023,
+ "筊": 5024,
+ "筋": 5025,
+ "筍": 5026,
+ "筏": 5027,
+ "筐": 5028,
+ "筑": 5029,
+ "筒": 5030,
+ "答": 5031,
+ "策": 5032,
+ "筛": 5033,
+ "筝": 5034,
+ "筠": 5035,
+ "筱": 5036,
+ "筲": 5037,
+ "筵": 5038,
+ "筷": 5039,
+ "筹": 5040,
+ "签": 5041,
+ "简": 5042,
+ "箇": 5043,
+ "箋": 5044,
+ "箍": 5045,
+ "箏": 5046,
+ "箐": 5047,
+ "箔": 5048,
+ "箕": 5049,
+ "算": 5050,
+ "箝": 5051,
+ "管": 5052,
+ "箩": 5053,
+ "箫": 5054,
+ "箭": 5055,
+ "箱": 5056,
+ "箴": 5057,
+ "箸": 5058,
+ "節": 5059,
+ "篁": 5060,
+ "範": 5061,
+ "篆": 5062,
+ "篇": 5063,
+ "築": 5064,
+ "篑": 5065,
+ "篓": 5066,
+ "篙": 5067,
+ "篝": 5068,
+ "篠": 5069,
+ "篡": 5070,
+ "篤": 5071,
+ "篩": 5072,
+ "篪": 5073,
+ "篮": 5074,
+ "篱": 5075,
+ "篷": 5076,
+ "簇": 5077,
+ "簌": 5078,
+ "簍": 5079,
+ "簡": 5080,
+ "簦": 5081,
+ "簧": 5082,
+ "簪": 5083,
+ "簫": 5084,
+ "簷": 5085,
+ "簸": 5086,
+ "簽": 5087,
+ "簾": 5088,
+ "簿": 5089,
+ "籁": 5090,
+ "籃": 5091,
+ "籌": 5092,
+ "籍": 5093,
+ "籐": 5094,
+ "籟": 5095,
+ "籠": 5096,
+ "籤": 5097,
+ "籬": 5098,
+ "籮": 5099,
+ "籲": 5100,
+ "米": 5101,
+ "类": 5102,
+ "籼": 5103,
+ "籽": 5104,
+ "粄": 5105,
+ "粉": 5106,
+ "粑": 5107,
+ "粒": 5108,
+ "粕": 5109,
+ "粗": 5110,
+ "粘": 5111,
+ "粟": 5112,
+ "粤": 5113,
+ "粥": 5114,
+ "粧": 5115,
+ "粪": 5116,
+ "粮": 5117,
+ "粱": 5118,
+ "粲": 5119,
+ "粳": 5120,
+ "粵": 5121,
+ "粹": 5122,
+ "粼": 5123,
+ "粽": 5124,
+ "精": 5125,
+ "粿": 5126,
+ "糅": 5127,
+ "糊": 5128,
+ "糍": 5129,
+ "糕": 5130,
+ "糖": 5131,
+ "糗": 5132,
+ "糙": 5133,
+ "糜": 5134,
+ "糞": 5135,
+ "糟": 5136,
+ "糠": 5137,
+ "糧": 5138,
+ "糬": 5139,
+ "糯": 5140,
+ "糰": 5141,
+ "糸": 5142,
+ "系": 5143,
+ "糾": 5144,
+ "紀": 5145,
+ "紂": 5146,
+ "約": 5147,
+ "紅": 5148,
+ "紉": 5149,
+ "紊": 5150,
+ "紋": 5151,
+ "納": 5152,
+ "紐": 5153,
+ "紓": 5154,
+ "純": 5155,
+ "紗": 5156,
+ "紘": 5157,
+ "紙": 5158,
+ "級": 5159,
+ "紛": 5160,
+ "紜": 5161,
+ "素": 5162,
+ "紡": 5163,
+ "索": 5164,
+ "紧": 5165,
+ "紫": 5166,
+ "紮": 5167,
+ "累": 5168,
+ "細": 5169,
+ "紳": 5170,
+ "紹": 5171,
+ "紺": 5172,
+ "終": 5173,
+ "絃": 5174,
+ "組": 5175,
+ "絆": 5176,
+ "経": 5177,
+ "結": 5178,
+ "絕": 5179,
+ "絞": 5180,
+ "絡": 5181,
+ "絢": 5182,
+ "給": 5183,
+ "絨": 5184,
+ "絮": 5185,
+ "統": 5186,
+ "絲": 5187,
+ "絳": 5188,
+ "絵": 5189,
+ "絶": 5190,
+ "絹": 5191,
+ "綁": 5192,
+ "綏": 5193,
+ "綑": 5194,
+ "經": 5195,
+ "継": 5196,
+ "続": 5197,
+ "綜": 5198,
+ "綠": 5199,
+ "綢": 5200,
+ "綦": 5201,
+ "綫": 5202,
+ "綬": 5203,
+ "維": 5204,
+ "綱": 5205,
+ "網": 5206,
+ "綴": 5207,
+ "綵": 5208,
+ "綸": 5209,
+ "綺": 5210,
+ "綻": 5211,
+ "綽": 5212,
+ "綾": 5213,
+ "綿": 5214,
+ "緊": 5215,
+ "緋": 5216,
+ "総": 5217,
+ "緑": 5218,
+ "緒": 5219,
+ "緘": 5220,
+ "線": 5221,
+ "緝": 5222,
+ "緞": 5223,
+ "締": 5224,
+ "緣": 5225,
+ "編": 5226,
+ "緩": 5227,
+ "緬": 5228,
+ "緯": 5229,
+ "練": 5230,
+ "緹": 5231,
+ "緻": 5232,
+ "縁": 5233,
+ "縄": 5234,
+ "縈": 5235,
+ "縛": 5236,
+ "縝": 5237,
+ "縣": 5238,
+ "縫": 5239,
+ "縮": 5240,
+ "縱": 5241,
+ "縴": 5242,
+ "縷": 5243,
+ "總": 5244,
+ "績": 5245,
+ "繁": 5246,
+ "繃": 5247,
+ "繆": 5248,
+ "繇": 5249,
+ "繋": 5250,
+ "織": 5251,
+ "繕": 5252,
+ "繚": 5253,
+ "繞": 5254,
+ "繡": 5255,
+ "繩": 5256,
+ "繪": 5257,
+ "繫": 5258,
+ "繭": 5259,
+ "繳": 5260,
+ "繹": 5261,
+ "繼": 5262,
+ "繽": 5263,
+ "纂": 5264,
+ "續": 5265,
+ "纍": 5266,
+ "纏": 5267,
+ "纓": 5268,
+ "纔": 5269,
+ "纖": 5270,
+ "纜": 5271,
+ "纠": 5272,
+ "红": 5273,
+ "纣": 5274,
+ "纤": 5275,
+ "约": 5276,
+ "级": 5277,
+ "纨": 5278,
+ "纪": 5279,
+ "纫": 5280,
+ "纬": 5281,
+ "纭": 5282,
+ "纯": 5283,
+ "纰": 5284,
+ "纱": 5285,
+ "纲": 5286,
+ "纳": 5287,
+ "纵": 5288,
+ "纶": 5289,
+ "纷": 5290,
+ "纸": 5291,
+ "纹": 5292,
+ "纺": 5293,
+ "纽": 5294,
+ "纾": 5295,
+ "线": 5296,
+ "绀": 5297,
+ "练": 5298,
+ "组": 5299,
+ "绅": 5300,
+ "细": 5301,
+ "织": 5302,
+ "终": 5303,
+ "绊": 5304,
+ "绍": 5305,
+ "绎": 5306,
+ "经": 5307,
+ "绑": 5308,
+ "绒": 5309,
+ "结": 5310,
+ "绔": 5311,
+ "绕": 5312,
+ "绘": 5313,
+ "给": 5314,
+ "绚": 5315,
+ "绛": 5316,
+ "络": 5317,
+ "绝": 5318,
+ "绞": 5319,
+ "统": 5320,
+ "绡": 5321,
+ "绢": 5322,
+ "绣": 5323,
+ "绥": 5324,
+ "绦": 5325,
+ "继": 5326,
+ "绩": 5327,
+ "绪": 5328,
+ "绫": 5329,
+ "续": 5330,
+ "绮": 5331,
+ "绯": 5332,
+ "绰": 5333,
+ "绳": 5334,
+ "维": 5335,
+ "绵": 5336,
+ "绶": 5337,
+ "绷": 5338,
+ "绸": 5339,
+ "绻": 5340,
+ "综": 5341,
+ "绽": 5342,
+ "绾": 5343,
+ "绿": 5344,
+ "缀": 5345,
+ "缄": 5346,
+ "缅": 5347,
+ "缆": 5348,
+ "缇": 5349,
+ "缈": 5350,
+ "缉": 5351,
+ "缎": 5352,
+ "缓": 5353,
+ "缔": 5354,
+ "缕": 5355,
+ "编": 5356,
+ "缘": 5357,
+ "缙": 5358,
+ "缚": 5359,
+ "缜": 5360,
+ "缝": 5361,
+ "缠": 5362,
+ "缢": 5363,
+ "缤": 5364,
+ "缥": 5365,
+ "缨": 5366,
+ "缩": 5367,
+ "缪": 5368,
+ "缭": 5369,
+ "缮": 5370,
+ "缰": 5371,
+ "缱": 5372,
+ "缴": 5373,
+ "缸": 5374,
+ "缺": 5375,
+ "缽": 5376,
+ "罂": 5377,
+ "罄": 5378,
+ "罌": 5379,
+ "罐": 5380,
+ "网": 5381,
+ "罔": 5382,
+ "罕": 5383,
+ "罗": 5384,
+ "罚": 5385,
+ "罡": 5386,
+ "罢": 5387,
+ "罩": 5388,
+ "罪": 5389,
+ "置": 5390,
+ "罰": 5391,
+ "署": 5392,
+ "罵": 5393,
+ "罷": 5394,
+ "罹": 5395,
+ "羁": 5396,
+ "羅": 5397,
+ "羈": 5398,
+ "羊": 5399,
+ "羌": 5400,
+ "美": 5401,
+ "羔": 5402,
+ "羚": 5403,
+ "羞": 5404,
+ "羟": 5405,
+ "羡": 5406,
+ "羣": 5407,
+ "群": 5408,
+ "羥": 5409,
+ "羧": 5410,
+ "羨": 5411,
+ "義": 5412,
+ "羯": 5413,
+ "羲": 5414,
+ "羸": 5415,
+ "羹": 5416,
+ "羽": 5417,
+ "羿": 5418,
+ "翁": 5419,
+ "翅": 5420,
+ "翊": 5421,
+ "翌": 5422,
+ "翎": 5423,
+ "習": 5424,
+ "翔": 5425,
+ "翘": 5426,
+ "翟": 5427,
+ "翠": 5428,
+ "翡": 5429,
+ "翦": 5430,
+ "翩": 5431,
+ "翰": 5432,
+ "翱": 5433,
+ "翳": 5434,
+ "翹": 5435,
+ "翻": 5436,
+ "翼": 5437,
+ "耀": 5438,
+ "老": 5439,
+ "考": 5440,
+ "耄": 5441,
+ "者": 5442,
+ "耆": 5443,
+ "耋": 5444,
+ "而": 5445,
+ "耍": 5446,
+ "耐": 5447,
+ "耒": 5448,
+ "耕": 5449,
+ "耗": 5450,
+ "耘": 5451,
+ "耙": 5452,
+ "耦": 5453,
+ "耨": 5454,
+ "耳": 5455,
+ "耶": 5456,
+ "耷": 5457,
+ "耸": 5458,
+ "耻": 5459,
+ "耽": 5460,
+ "耿": 5461,
+ "聂": 5462,
+ "聆": 5463,
+ "聊": 5464,
+ "聋": 5465,
+ "职": 5466,
+ "聒": 5467,
+ "联": 5468,
+ "聖": 5469,
+ "聘": 5470,
+ "聚": 5471,
+ "聞": 5472,
+ "聪": 5473,
+ "聯": 5474,
+ "聰": 5475,
+ "聲": 5476,
+ "聳": 5477,
+ "聴": 5478,
+ "聶": 5479,
+ "職": 5480,
+ "聽": 5481,
+ "聾": 5482,
+ "聿": 5483,
+ "肃": 5484,
+ "肄": 5485,
+ "肅": 5486,
+ "肆": 5487,
+ "肇": 5488,
+ "肉": 5489,
+ "肋": 5490,
+ "肌": 5491,
+ "肏": 5492,
+ "肓": 5493,
+ "肖": 5494,
+ "肘": 5495,
+ "肚": 5496,
+ "肛": 5497,
+ "肝": 5498,
+ "肠": 5499,
+ "股": 5500,
+ "肢": 5501,
+ "肤": 5502,
+ "肥": 5503,
+ "肩": 5504,
+ "肪": 5505,
+ "肮": 5506,
+ "肯": 5507,
+ "肱": 5508,
+ "育": 5509,
+ "肴": 5510,
+ "肺": 5511,
+ "肽": 5512,
+ "肾": 5513,
+ "肿": 5514,
+ "胀": 5515,
+ "胁": 5516,
+ "胃": 5517,
+ "胄": 5518,
+ "胆": 5519,
+ "背": 5520,
+ "胍": 5521,
+ "胎": 5522,
+ "胖": 5523,
+ "胚": 5524,
+ "胛": 5525,
+ "胜": 5526,
+ "胝": 5527,
+ "胞": 5528,
+ "胡": 5529,
+ "胤": 5530,
+ "胥": 5531,
+ "胧": 5532,
+ "胫": 5533,
+ "胭": 5534,
+ "胯": 5535,
+ "胰": 5536,
+ "胱": 5537,
+ "胳": 5538,
+ "胴": 5539,
+ "胶": 5540,
+ "胸": 5541,
+ "胺": 5542,
+ "能": 5543,
+ "脂": 5544,
+ "脅": 5545,
+ "脆": 5546,
+ "脇": 5547,
+ "脈": 5548,
+ "脉": 5549,
+ "脊": 5550,
+ "脍": 5551,
+ "脏": 5552,
+ "脐": 5553,
+ "脑": 5554,
+ "脓": 5555,
+ "脖": 5556,
+ "脘": 5557,
+ "脚": 5558,
+ "脛": 5559,
+ "脣": 5560,
+ "脩": 5561,
+ "脫": 5562,
+ "脯": 5563,
+ "脱": 5564,
+ "脲": 5565,
+ "脳": 5566,
+ "脸": 5567,
+ "脹": 5568,
+ "脾": 5569,
+ "腆": 5570,
+ "腈": 5571,
+ "腊": 5572,
+ "腋": 5573,
+ "腌": 5574,
+ "腎": 5575,
+ "腐": 5576,
+ "腑": 5577,
+ "腓": 5578,
+ "腔": 5579,
+ "腕": 5580,
+ "腥": 5581,
+ "腦": 5582,
+ "腩": 5583,
+ "腫": 5584,
+ "腭": 5585,
+ "腮": 5586,
+ "腰": 5587,
+ "腱": 5588,
+ "腳": 5589,
+ "腴": 5590,
+ "腸": 5591,
+ "腹": 5592,
+ "腺": 5593,
+ "腻": 5594,
+ "腼": 5595,
+ "腾": 5596,
+ "腿": 5597,
+ "膀": 5598,
+ "膈": 5599,
+ "膊": 5600,
+ "膏": 5601,
+ "膑": 5602,
+ "膘": 5603,
+ "膚": 5604,
+ "膛": 5605,
+ "膜": 5606,
+ "膝": 5607,
+ "膠": 5608,
+ "膦": 5609,
+ "膨": 5610,
+ "膩": 5611,
+ "膳": 5612,
+ "膺": 5613,
+ "膻": 5614,
+ "膽": 5615,
+ "膾": 5616,
+ "膿": 5617,
+ "臀": 5618,
+ "臂": 5619,
+ "臃": 5620,
+ "臆": 5621,
+ "臉": 5622,
+ "臊": 5623,
+ "臍": 5624,
+ "臓": 5625,
+ "臘": 5626,
+ "臟": 5627,
+ "臣": 5628,
+ "臥": 5629,
+ "臧": 5630,
+ "臨": 5631,
+ "自": 5632,
+ "臬": 5633,
+ "臭": 5634,
+ "至": 5635,
+ "致": 5636,
+ "臺": 5637,
+ "臻": 5638,
+ "臼": 5639,
+ "臾": 5640,
+ "舀": 5641,
+ "舂": 5642,
+ "舅": 5643,
+ "舆": 5644,
+ "與": 5645,
+ "興": 5646,
+ "舉": 5647,
+ "舊": 5648,
+ "舌": 5649,
+ "舍": 5650,
+ "舎": 5651,
+ "舐": 5652,
+ "舒": 5653,
+ "舔": 5654,
+ "舖": 5655,
+ "舗": 5656,
+ "舛": 5657,
+ "舜": 5658,
+ "舞": 5659,
+ "舟": 5660,
+ "航": 5661,
+ "舫": 5662,
+ "般": 5663,
+ "舰": 5664,
+ "舱": 5665,
+ "舵": 5666,
+ "舶": 5667,
+ "舷": 5668,
+ "舸": 5669,
+ "船": 5670,
+ "舺": 5671,
+ "舾": 5672,
+ "艇": 5673,
+ "艋": 5674,
+ "艘": 5675,
+ "艙": 5676,
+ "艦": 5677,
+ "艮": 5678,
+ "良": 5679,
+ "艰": 5680,
+ "艱": 5681,
+ "色": 5682,
+ "艳": 5683,
+ "艷": 5684,
+ "艹": 5685,
+ "艺": 5686,
+ "艾": 5687,
+ "节": 5688,
+ "芃": 5689,
+ "芈": 5690,
+ "芊": 5691,
+ "芋": 5692,
+ "芍": 5693,
+ "芎": 5694,
+ "芒": 5695,
+ "芙": 5696,
+ "芜": 5697,
+ "芝": 5698,
+ "芡": 5699,
+ "芥": 5700,
+ "芦": 5701,
+ "芩": 5702,
+ "芪": 5703,
+ "芫": 5704,
+ "芬": 5705,
+ "芭": 5706,
+ "芮": 5707,
+ "芯": 5708,
+ "花": 5709,
+ "芳": 5710,
+ "芷": 5711,
+ "芸": 5712,
+ "芹": 5713,
+ "芻": 5714,
+ "芽": 5715,
+ "芾": 5716,
+ "苁": 5717,
+ "苄": 5718,
+ "苇": 5719,
+ "苋": 5720,
+ "苍": 5721,
+ "苏": 5722,
+ "苑": 5723,
+ "苒": 5724,
+ "苓": 5725,
+ "苔": 5726,
+ "苕": 5727,
+ "苗": 5728,
+ "苛": 5729,
+ "苜": 5730,
+ "苞": 5731,
+ "苟": 5732,
+ "苡": 5733,
+ "苣": 5734,
+ "若": 5735,
+ "苦": 5736,
+ "苫": 5737,
+ "苯": 5738,
+ "英": 5739,
+ "苷": 5740,
+ "苹": 5741,
+ "苻": 5742,
+ "茁": 5743,
+ "茂": 5744,
+ "范": 5745,
+ "茄": 5746,
+ "茅": 5747,
+ "茉": 5748,
+ "茎": 5749,
+ "茏": 5750,
+ "茗": 5751,
+ "茜": 5752,
+ "茧": 5753,
+ "茨": 5754,
+ "茫": 5755,
+ "茬": 5756,
+ "茭": 5757,
+ "茯": 5758,
+ "茱": 5759,
+ "茲": 5760,
+ "茴": 5761,
+ "茵": 5762,
+ "茶": 5763,
+ "茸": 5764,
+ "茹": 5765,
+ "茼": 5766,
+ "荀": 5767,
+ "荃": 5768,
+ "荆": 5769,
+ "草": 5770,
+ "荊": 5771,
+ "荏": 5772,
+ "荐": 5773,
+ "荒": 5774,
+ "荔": 5775,
+ "荖": 5776,
+ "荘": 5777,
+ "荚": 5778,
+ "荞": 5779,
+ "荟": 5780,
+ "荠": 5781,
+ "荡": 5782,
+ "荣": 5783,
+ "荤": 5784,
+ "荥": 5785,
+ "荧": 5786,
+ "荨": 5787,
+ "荪": 5788,
+ "荫": 5789,
+ "药": 5790,
+ "荳": 5791,
+ "荷": 5792,
+ "荸": 5793,
+ "荻": 5794,
+ "荼": 5795,
+ "荽": 5796,
+ "莅": 5797,
+ "莆": 5798,
+ "莉": 5799,
+ "莊": 5800,
+ "莎": 5801,
+ "莒": 5802,
+ "莓": 5803,
+ "莖": 5804,
+ "莘": 5805,
+ "莞": 5806,
+ "莠": 5807,
+ "莢": 5808,
+ "莧": 5809,
+ "莪": 5810,
+ "莫": 5811,
+ "莱": 5812,
+ "莲": 5813,
+ "莴": 5814,
+ "获": 5815,
+ "莹": 5816,
+ "莺": 5817,
+ "莽": 5818,
+ "莿": 5819,
+ "菀": 5820,
+ "菁": 5821,
+ "菅": 5822,
+ "菇": 5823,
+ "菈": 5824,
+ "菊": 5825,
+ "菌": 5826,
+ "菏": 5827,
+ "菓": 5828,
+ "菖": 5829,
+ "菘": 5830,
+ "菜": 5831,
+ "菟": 5832,
+ "菠": 5833,
+ "菡": 5834,
+ "菩": 5835,
+ "華": 5836,
+ "菱": 5837,
+ "菲": 5838,
+ "菸": 5839,
+ "菽": 5840,
+ "萁": 5841,
+ "萃": 5842,
+ "萄": 5843,
+ "萊": 5844,
+ "萋": 5845,
+ "萌": 5846,
+ "萍": 5847,
+ "萎": 5848,
+ "萘": 5849,
+ "萝": 5850,
+ "萤": 5851,
+ "营": 5852,
+ "萦": 5853,
+ "萧": 5854,
+ "萨": 5855,
+ "萩": 5856,
+ "萬": 5857,
+ "萱": 5858,
+ "萵": 5859,
+ "萸": 5860,
+ "萼": 5861,
+ "落": 5862,
+ "葆": 5863,
+ "葉": 5864,
+ "著": 5865,
+ "葚": 5866,
+ "葛": 5867,
+ "葡": 5868,
+ "董": 5869,
+ "葦": 5870,
+ "葩": 5871,
+ "葫": 5872,
+ "葬": 5873,
+ "葭": 5874,
+ "葯": 5875,
+ "葱": 5876,
+ "葳": 5877,
+ "葵": 5878,
+ "葷": 5879,
+ "葺": 5880,
+ "蒂": 5881,
+ "蒋": 5882,
+ "蒐": 5883,
+ "蒔": 5884,
+ "蒙": 5885,
+ "蒜": 5886,
+ "蒞": 5887,
+ "蒟": 5888,
+ "蒡": 5889,
+ "蒨": 5890,
+ "蒲": 5891,
+ "蒸": 5892,
+ "蒹": 5893,
+ "蒻": 5894,
+ "蒼": 5895,
+ "蒿": 5896,
+ "蓁": 5897,
+ "蓄": 5898,
+ "蓆": 5899,
+ "蓉": 5900,
+ "蓋": 5901,
+ "蓑": 5902,
+ "蓓": 5903,
+ "蓖": 5904,
+ "蓝": 5905,
+ "蓟": 5906,
+ "蓦": 5907,
+ "蓬": 5908,
+ "蓮": 5909,
+ "蓼": 5910,
+ "蓿": 5911,
+ "蔑": 5912,
+ "蔓": 5913,
+ "蔔": 5914,
+ "蔗": 5915,
+ "蔘": 5916,
+ "蔚": 5917,
+ "蔡": 5918,
+ "蔣": 5919,
+ "蔥": 5920,
+ "蔫": 5921,
+ "蔬": 5922,
+ "蔭": 5923,
+ "蔵": 5924,
+ "蔷": 5925,
+ "蔺": 5926,
+ "蔻": 5927,
+ "蔼": 5928,
+ "蔽": 5929,
+ "蕁": 5930,
+ "蕃": 5931,
+ "蕈": 5932,
+ "蕉": 5933,
+ "蕊": 5934,
+ "蕎": 5935,
+ "蕙": 5936,
+ "蕤": 5937,
+ "蕨": 5938,
+ "蕩": 5939,
+ "蕪": 5940,
+ "蕭": 5941,
+ "蕲": 5942,
+ "蕴": 5943,
+ "蕻": 5944,
+ "蕾": 5945,
+ "薄": 5946,
+ "薅": 5947,
+ "薇": 5948,
+ "薈": 5949,
+ "薊": 5950,
+ "薏": 5951,
+ "薑": 5952,
+ "薔": 5953,
+ "薙": 5954,
+ "薛": 5955,
+ "薦": 5956,
+ "薨": 5957,
+ "薩": 5958,
+ "薪": 5959,
+ "薬": 5960,
+ "薯": 5961,
+ "薰": 5962,
+ "薹": 5963,
+ "藉": 5964,
+ "藍": 5965,
+ "藏": 5966,
+ "藐": 5967,
+ "藓": 5968,
+ "藕": 5969,
+ "藜": 5970,
+ "藝": 5971,
+ "藤": 5972,
+ "藥": 5973,
+ "藩": 5974,
+ "藹": 5975,
+ "藻": 5976,
+ "藿": 5977,
+ "蘆": 5978,
+ "蘇": 5979,
+ "蘊": 5980,
+ "蘋": 5981,
+ "蘑": 5982,
+ "蘚": 5983,
+ "蘭": 5984,
+ "蘸": 5985,
+ "蘼": 5986,
+ "蘿": 5987,
+ "虎": 5988,
+ "虏": 5989,
+ "虐": 5990,
+ "虑": 5991,
+ "虔": 5992,
+ "處": 5993,
+ "虚": 5994,
+ "虛": 5995,
+ "虜": 5996,
+ "虞": 5997,
+ "號": 5998,
+ "虢": 5999,
+ "虧": 6000,
+ "虫": 6001,
+ "虬": 6002,
+ "虱": 6003,
+ "虹": 6004,
+ "虻": 6005,
+ "虽": 6006,
+ "虾": 6007,
+ "蚀": 6008,
+ "蚁": 6009,
+ "蚂": 6010,
+ "蚊": 6011,
+ "蚌": 6012,
+ "蚓": 6013,
+ "蚕": 6014,
+ "蚜": 6015,
+ "蚝": 6016,
+ "蚣": 6017,
+ "蚤": 6018,
+ "蚩": 6019,
+ "蚪": 6020,
+ "蚯": 6021,
+ "蚱": 6022,
+ "蚵": 6023,
+ "蛀": 6024,
+ "蛆": 6025,
+ "蛇": 6026,
+ "蛊": 6027,
+ "蛋": 6028,
+ "蛎": 6029,
+ "蛐": 6030,
+ "蛔": 6031,
+ "蛙": 6032,
+ "蛛": 6033,
+ "蛟": 6034,
+ "蛤": 6035,
+ "蛭": 6036,
+ "蛮": 6037,
+ "蛰": 6038,
+ "蛳": 6039,
+ "蛹": 6040,
+ "蛻": 6041,
+ "蛾": 6042,
+ "蜀": 6043,
+ "蜂": 6044,
+ "蜃": 6045,
+ "蜆": 6046,
+ "蜇": 6047,
+ "蜈": 6048,
+ "蜊": 6049,
+ "蜍": 6050,
+ "蜒": 6051,
+ "蜓": 6052,
+ "蜕": 6053,
+ "蜗": 6054,
+ "蜘": 6055,
+ "蜚": 6056,
+ "蜜": 6057,
+ "蜡": 6058,
+ "蜢": 6059,
+ "蜥": 6060,
+ "蜱": 6061,
+ "蜴": 6062,
+ "蜷": 6063,
+ "蜻": 6064,
+ "蜿": 6065,
+ "蝇": 6066,
+ "蝈": 6067,
+ "蝉": 6068,
+ "蝌": 6069,
+ "蝎": 6070,
+ "蝕": 6071,
+ "蝗": 6072,
+ "蝙": 6073,
+ "蝟": 6074,
+ "蝠": 6075,
+ "蝦": 6076,
+ "蝨": 6077,
+ "蝴": 6078,
+ "蝶": 6079,
+ "蝸": 6080,
+ "蝼": 6081,
+ "螂": 6082,
+ "螃": 6083,
+ "融": 6084,
+ "螞": 6085,
+ "螢": 6086,
+ "螨": 6087,
+ "螯": 6088,
+ "螳": 6089,
+ "螺": 6090,
+ "蟀": 6091,
+ "蟄": 6092,
+ "蟆": 6093,
+ "蟋": 6094,
+ "蟎": 6095,
+ "蟑": 6096,
+ "蟒": 6097,
+ "蟠": 6098,
+ "蟬": 6099,
+ "蟲": 6100,
+ "蟹": 6101,
+ "蟻": 6102,
+ "蟾": 6103,
+ "蠅": 6104,
+ "蠍": 6105,
+ "蠔": 6106,
+ "蠕": 6107,
+ "蠛": 6108,
+ "蠟": 6109,
+ "蠡": 6110,
+ "蠢": 6111,
+ "蠣": 6112,
+ "蠱": 6113,
+ "蠶": 6114,
+ "蠹": 6115,
+ "蠻": 6116,
+ "血": 6117,
+ "衄": 6118,
+ "衅": 6119,
+ "衆": 6120,
+ "行": 6121,
+ "衍": 6122,
+ "術": 6123,
+ "衔": 6124,
+ "街": 6125,
+ "衙": 6126,
+ "衛": 6127,
+ "衝": 6128,
+ "衞": 6129,
+ "衡": 6130,
+ "衢": 6131,
+ "衣": 6132,
+ "补": 6133,
+ "表": 6134,
+ "衩": 6135,
+ "衫": 6136,
+ "衬": 6137,
+ "衮": 6138,
+ "衰": 6139,
+ "衲": 6140,
+ "衷": 6141,
+ "衹": 6142,
+ "衾": 6143,
+ "衿": 6144,
+ "袁": 6145,
+ "袂": 6146,
+ "袄": 6147,
+ "袅": 6148,
+ "袈": 6149,
+ "袋": 6150,
+ "袍": 6151,
+ "袒": 6152,
+ "袖": 6153,
+ "袜": 6154,
+ "袞": 6155,
+ "袤": 6156,
+ "袪": 6157,
+ "被": 6158,
+ "袭": 6159,
+ "袱": 6160,
+ "裁": 6161,
+ "裂": 6162,
+ "装": 6163,
+ "裆": 6164,
+ "裊": 6165,
+ "裏": 6166,
+ "裔": 6167,
+ "裕": 6168,
+ "裘": 6169,
+ "裙": 6170,
+ "補": 6171,
+ "裝": 6172,
+ "裟": 6173,
+ "裡": 6174,
+ "裤": 6175,
+ "裨": 6176,
+ "裱": 6177,
+ "裳": 6178,
+ "裴": 6179,
+ "裸": 6180,
+ "裹": 6181,
+ "製": 6182,
+ "裾": 6183,
+ "褂": 6184,
+ "複": 6185,
+ "褐": 6186,
+ "褒": 6187,
+ "褓": 6188,
+ "褔": 6189,
+ "褚": 6190,
+ "褥": 6191,
+ "褪": 6192,
+ "褫": 6193,
+ "褲": 6194,
+ "褶": 6195,
+ "褻": 6196,
+ "襁": 6197,
+ "襄": 6198,
+ "襟": 6199,
+ "襠": 6200,
+ "襪": 6201,
+ "襬": 6202,
+ "襯": 6203,
+ "襲": 6204,
+ "西": 6205,
+ "要": 6206,
+ "覃": 6207,
+ "覆": 6208,
+ "覇": 6209,
+ "見": 6210,
+ "規": 6211,
+ "覓": 6212,
+ "視": 6213,
+ "覚": 6214,
+ "覦": 6215,
+ "覧": 6216,
+ "親": 6217,
+ "覬": 6218,
+ "観": 6219,
+ "覷": 6220,
+ "覺": 6221,
+ "覽": 6222,
+ "觀": 6223,
+ "见": 6224,
+ "观": 6225,
+ "规": 6226,
+ "觅": 6227,
+ "视": 6228,
+ "览": 6229,
+ "觉": 6230,
+ "觊": 6231,
+ "觎": 6232,
+ "觐": 6233,
+ "觑": 6234,
+ "角": 6235,
+ "觞": 6236,
+ "解": 6237,
+ "觥": 6238,
+ "触": 6239,
+ "觸": 6240,
+ "言": 6241,
+ "訂": 6242,
+ "計": 6243,
+ "訊": 6244,
+ "討": 6245,
+ "訓": 6246,
+ "訕": 6247,
+ "訖": 6248,
+ "託": 6249,
+ "記": 6250,
+ "訛": 6251,
+ "訝": 6252,
+ "訟": 6253,
+ "訣": 6254,
+ "訥": 6255,
+ "訪": 6256,
+ "設": 6257,
+ "許": 6258,
+ "訳": 6259,
+ "訴": 6260,
+ "訶": 6261,
+ "診": 6262,
+ "註": 6263,
+ "証": 6264,
+ "詆": 6265,
+ "詐": 6266,
+ "詔": 6267,
+ "評": 6268,
+ "詛": 6269,
+ "詞": 6270,
+ "詠": 6271,
+ "詡": 6272,
+ "詢": 6273,
+ "詣": 6274,
+ "試": 6275,
+ "詩": 6276,
+ "詫": 6277,
+ "詬": 6278,
+ "詭": 6279,
+ "詮": 6280,
+ "詰": 6281,
+ "話": 6282,
+ "該": 6283,
+ "詳": 6284,
+ "詹": 6285,
+ "詼": 6286,
+ "誅": 6287,
+ "誇": 6288,
+ "誉": 6289,
+ "誌": 6290,
+ "認": 6291,
+ "誓": 6292,
+ "誕": 6293,
+ "誘": 6294,
+ "語": 6295,
+ "誠": 6296,
+ "誡": 6297,
+ "誣": 6298,
+ "誤": 6299,
+ "誥": 6300,
+ "誦": 6301,
+ "誨": 6302,
+ "說": 6303,
+ "説": 6304,
+ "読": 6305,
+ "誰": 6306,
+ "課": 6307,
+ "誹": 6308,
+ "誼": 6309,
+ "調": 6310,
+ "諄": 6311,
+ "談": 6312,
+ "請": 6313,
+ "諏": 6314,
+ "諒": 6315,
+ "論": 6316,
+ "諗": 6317,
+ "諜": 6318,
+ "諡": 6319,
+ "諦": 6320,
+ "諧": 6321,
+ "諫": 6322,
+ "諭": 6323,
+ "諮": 6324,
+ "諱": 6325,
+ "諳": 6326,
+ "諷": 6327,
+ "諸": 6328,
+ "諺": 6329,
+ "諾": 6330,
+ "謀": 6331,
+ "謁": 6332,
+ "謂": 6333,
+ "謄": 6334,
+ "謊": 6335,
+ "謎": 6336,
+ "謐": 6337,
+ "謔": 6338,
+ "謗": 6339,
+ "謙": 6340,
+ "講": 6341,
+ "謝": 6342,
+ "謠": 6343,
+ "謨": 6344,
+ "謬": 6345,
+ "謹": 6346,
+ "謾": 6347,
+ "譁": 6348,
+ "證": 6349,
+ "譎": 6350,
+ "譏": 6351,
+ "識": 6352,
+ "譙": 6353,
+ "譚": 6354,
+ "譜": 6355,
+ "警": 6356,
+ "譬": 6357,
+ "譯": 6358,
+ "議": 6359,
+ "譲": 6360,
+ "譴": 6361,
+ "護": 6362,
+ "譽": 6363,
+ "讀": 6364,
+ "變": 6365,
+ "讓": 6366,
+ "讚": 6367,
+ "讞": 6368,
+ "计": 6369,
+ "订": 6370,
+ "认": 6371,
+ "讥": 6372,
+ "讧": 6373,
+ "讨": 6374,
+ "让": 6375,
+ "讪": 6376,
+ "讫": 6377,
+ "训": 6378,
+ "议": 6379,
+ "讯": 6380,
+ "记": 6381,
+ "讲": 6382,
+ "讳": 6383,
+ "讴": 6384,
+ "讶": 6385,
+ "讷": 6386,
+ "许": 6387,
+ "讹": 6388,
+ "论": 6389,
+ "讼": 6390,
+ "讽": 6391,
+ "设": 6392,
+ "访": 6393,
+ "诀": 6394,
+ "证": 6395,
+ "诃": 6396,
+ "评": 6397,
+ "诅": 6398,
+ "识": 6399,
+ "诈": 6400,
+ "诉": 6401,
+ "诊": 6402,
+ "诋": 6403,
+ "词": 6404,
+ "诏": 6405,
+ "译": 6406,
+ "试": 6407,
+ "诗": 6408,
+ "诘": 6409,
+ "诙": 6410,
+ "诚": 6411,
+ "诛": 6412,
+ "话": 6413,
+ "诞": 6414,
+ "诟": 6415,
+ "诠": 6416,
+ "诡": 6417,
+ "询": 6418,
+ "诣": 6419,
+ "诤": 6420,
+ "该": 6421,
+ "详": 6422,
+ "诧": 6423,
+ "诩": 6424,
+ "诫": 6425,
+ "诬": 6426,
+ "语": 6427,
+ "误": 6428,
+ "诰": 6429,
+ "诱": 6430,
+ "诲": 6431,
+ "说": 6432,
+ "诵": 6433,
+ "诶": 6434,
+ "请": 6435,
+ "诸": 6436,
+ "诺": 6437,
+ "读": 6438,
+ "诽": 6439,
+ "课": 6440,
+ "诿": 6441,
+ "谀": 6442,
+ "谁": 6443,
+ "调": 6444,
+ "谄": 6445,
+ "谅": 6446,
+ "谆": 6447,
+ "谈": 6448,
+ "谊": 6449,
+ "谋": 6450,
+ "谌": 6451,
+ "谍": 6452,
+ "谎": 6453,
+ "谏": 6454,
+ "谐": 6455,
+ "谑": 6456,
+ "谒": 6457,
+ "谓": 6458,
+ "谔": 6459,
+ "谕": 6460,
+ "谗": 6461,
+ "谘": 6462,
+ "谙": 6463,
+ "谚": 6464,
+ "谛": 6465,
+ "谜": 6466,
+ "谟": 6467,
+ "谢": 6468,
+ "谣": 6469,
+ "谤": 6470,
+ "谥": 6471,
+ "谦": 6472,
+ "谧": 6473,
+ "谨": 6474,
+ "谩": 6475,
+ "谪": 6476,
+ "谬": 6477,
+ "谭": 6478,
+ "谯": 6479,
+ "谱": 6480,
+ "谲": 6481,
+ "谴": 6482,
+ "谶": 6483,
+ "谷": 6484,
+ "豁": 6485,
+ "豆": 6486,
+ "豇": 6487,
+ "豈": 6488,
+ "豉": 6489,
+ "豊": 6490,
+ "豌": 6491,
+ "豎": 6492,
+ "豐": 6493,
+ "豔": 6494,
+ "豚": 6495,
+ "象": 6496,
+ "豢": 6497,
+ "豪": 6498,
+ "豫": 6499,
+ "豬": 6500,
+ "豹": 6501,
+ "豺": 6502,
+ "貂": 6503,
+ "貅": 6504,
+ "貌": 6505,
+ "貓": 6506,
+ "貔": 6507,
+ "貘": 6508,
+ "貝": 6509,
+ "貞": 6510,
+ "負": 6511,
+ "財": 6512,
+ "貢": 6513,
+ "貧": 6514,
+ "貨": 6515,
+ "販": 6516,
+ "貪": 6517,
+ "貫": 6518,
+ "責": 6519,
+ "貯": 6520,
+ "貰": 6521,
+ "貳": 6522,
+ "貴": 6523,
+ "貶": 6524,
+ "買": 6525,
+ "貸": 6526,
+ "費": 6527,
+ "貼": 6528,
+ "貽": 6529,
+ "貿": 6530,
+ "賀": 6531,
+ "賁": 6532,
+ "賂": 6533,
+ "賃": 6534,
+ "賄": 6535,
+ "資": 6536,
+ "賈": 6537,
+ "賊": 6538,
+ "賑": 6539,
+ "賓": 6540,
+ "賜": 6541,
+ "賞": 6542,
+ "賠": 6543,
+ "賡": 6544,
+ "賢": 6545,
+ "賣": 6546,
+ "賤": 6547,
+ "賦": 6548,
+ "質": 6549,
+ "賬": 6550,
+ "賭": 6551,
+ "賴": 6552,
+ "賺": 6553,
+ "購": 6554,
+ "賽": 6555,
+ "贅": 6556,
+ "贈": 6557,
+ "贊": 6558,
+ "贍": 6559,
+ "贏": 6560,
+ "贓": 6561,
+ "贖": 6562,
+ "贛": 6563,
+ "贝": 6564,
+ "贞": 6565,
+ "负": 6566,
+ "贡": 6567,
+ "财": 6568,
+ "责": 6569,
+ "贤": 6570,
+ "败": 6571,
+ "账": 6572,
+ "货": 6573,
+ "质": 6574,
+ "贩": 6575,
+ "贪": 6576,
+ "贫": 6577,
+ "贬": 6578,
+ "购": 6579,
+ "贮": 6580,
+ "贯": 6581,
+ "贰": 6582,
+ "贱": 6583,
+ "贲": 6584,
+ "贴": 6585,
+ "贵": 6586,
+ "贷": 6587,
+ "贸": 6588,
+ "费": 6589,
+ "贺": 6590,
+ "贻": 6591,
+ "贼": 6592,
+ "贾": 6593,
+ "贿": 6594,
+ "赁": 6595,
+ "赂": 6596,
+ "赃": 6597,
+ "资": 6598,
+ "赅": 6599,
+ "赈": 6600,
+ "赊": 6601,
+ "赋": 6602,
+ "赌": 6603,
+ "赎": 6604,
+ "赏": 6605,
+ "赐": 6606,
+ "赓": 6607,
+ "赔": 6608,
+ "赖": 6609,
+ "赘": 6610,
+ "赚": 6611,
+ "赛": 6612,
+ "赝": 6613,
+ "赞": 6614,
+ "赠": 6615,
+ "赡": 6616,
+ "赢": 6617,
+ "赣": 6618,
+ "赤": 6619,
+ "赦": 6620,
+ "赧": 6621,
+ "赫": 6622,
+ "赭": 6623,
+ "走": 6624,
+ "赳": 6625,
+ "赴": 6626,
+ "赵": 6627,
+ "赶": 6628,
+ "起": 6629,
+ "趁": 6630,
+ "超": 6631,
+ "越": 6632,
+ "趋": 6633,
+ "趕": 6634,
+ "趙": 6635,
+ "趟": 6636,
+ "趣": 6637,
+ "趨": 6638,
+ "足": 6639,
+ "趴": 6640,
+ "趵": 6641,
+ "趸": 6642,
+ "趺": 6643,
+ "趾": 6644,
+ "跃": 6645,
+ "跄": 6646,
+ "跆": 6647,
+ "跋": 6648,
+ "跌": 6649,
+ "跎": 6650,
+ "跑": 6651,
+ "跖": 6652,
+ "跚": 6653,
+ "跛": 6654,
+ "距": 6655,
+ "跟": 6656,
+ "跡": 6657,
+ "跤": 6658,
+ "跨": 6659,
+ "跩": 6660,
+ "跪": 6661,
+ "路": 6662,
+ "跳": 6663,
+ "践": 6664,
+ "跷": 6665,
+ "跹": 6666,
+ "跺": 6667,
+ "跻": 6668,
+ "踉": 6669,
+ "踊": 6670,
+ "踌": 6671,
+ "踏": 6672,
+ "踐": 6673,
+ "踝": 6674,
+ "踞": 6675,
+ "踟": 6676,
+ "踢": 6677,
+ "踩": 6678,
+ "踪": 6679,
+ "踮": 6680,
+ "踱": 6681,
+ "踴": 6682,
+ "踵": 6683,
+ "踹": 6684,
+ "蹂": 6685,
+ "蹄": 6686,
+ "蹇": 6687,
+ "蹈": 6688,
+ "蹉": 6689,
+ "蹊": 6690,
+ "蹋": 6691,
+ "蹑": 6692,
+ "蹒": 6693,
+ "蹙": 6694,
+ "蹟": 6695,
+ "蹣": 6696,
+ "蹤": 6697,
+ "蹦": 6698,
+ "蹩": 6699,
+ "蹬": 6700,
+ "蹭": 6701,
+ "蹲": 6702,
+ "蹴": 6703,
+ "蹶": 6704,
+ "蹺": 6705,
+ "蹼": 6706,
+ "蹿": 6707,
+ "躁": 6708,
+ "躇": 6709,
+ "躉": 6710,
+ "躊": 6711,
+ "躋": 6712,
+ "躍": 6713,
+ "躏": 6714,
+ "躪": 6715,
+ "身": 6716,
+ "躬": 6717,
+ "躯": 6718,
+ "躲": 6719,
+ "躺": 6720,
+ "軀": 6721,
+ "車": 6722,
+ "軋": 6723,
+ "軌": 6724,
+ "軍": 6725,
+ "軒": 6726,
+ "軟": 6727,
+ "転": 6728,
+ "軸": 6729,
+ "軼": 6730,
+ "軽": 6731,
+ "軾": 6732,
+ "較": 6733,
+ "載": 6734,
+ "輒": 6735,
+ "輓": 6736,
+ "輔": 6737,
+ "輕": 6738,
+ "輛": 6739,
+ "輝": 6740,
+ "輟": 6741,
+ "輩": 6742,
+ "輪": 6743,
+ "輯": 6744,
+ "輸": 6745,
+ "輻": 6746,
+ "輾": 6747,
+ "輿": 6748,
+ "轄": 6749,
+ "轅": 6750,
+ "轆": 6751,
+ "轉": 6752,
+ "轍": 6753,
+ "轎": 6754,
+ "轟": 6755,
+ "车": 6756,
+ "轧": 6757,
+ "轨": 6758,
+ "轩": 6759,
+ "转": 6760,
+ "轭": 6761,
+ "轮": 6762,
+ "软": 6763,
+ "轰": 6764,
+ "轲": 6765,
+ "轴": 6766,
+ "轶": 6767,
+ "轻": 6768,
+ "轼": 6769,
+ "载": 6770,
+ "轿": 6771,
+ "较": 6772,
+ "辄": 6773,
+ "辅": 6774,
+ "辆": 6775,
+ "辇": 6776,
+ "辈": 6777,
+ "辉": 6778,
+ "辊": 6779,
+ "辍": 6780,
+ "辐": 6781,
+ "辑": 6782,
+ "输": 6783,
+ "辕": 6784,
+ "辖": 6785,
+ "辗": 6786,
+ "辘": 6787,
+ "辙": 6788,
+ "辛": 6789,
+ "辜": 6790,
+ "辞": 6791,
+ "辟": 6792,
+ "辣": 6793,
+ "辦": 6794,
+ "辨": 6795,
+ "辩": 6796,
+ "辫": 6797,
+ "辭": 6798,
+ "辮": 6799,
+ "辯": 6800,
+ "辰": 6801,
+ "辱": 6802,
+ "農": 6803,
+ "边": 6804,
+ "辺": 6805,
+ "辻": 6806,
+ "込": 6807,
+ "辽": 6808,
+ "达": 6809,
+ "迁": 6810,
+ "迂": 6811,
+ "迄": 6812,
+ "迅": 6813,
+ "过": 6814,
+ "迈": 6815,
+ "迎": 6816,
+ "运": 6817,
+ "近": 6818,
+ "返": 6819,
+ "还": 6820,
+ "这": 6821,
+ "进": 6822,
+ "远": 6823,
+ "违": 6824,
+ "连": 6825,
+ "迟": 6826,
+ "迢": 6827,
+ "迤": 6828,
+ "迥": 6829,
+ "迦": 6830,
+ "迩": 6831,
+ "迪": 6832,
+ "迫": 6833,
+ "迭": 6834,
+ "述": 6835,
+ "迴": 6836,
+ "迷": 6837,
+ "迸": 6838,
+ "迹": 6839,
+ "迺": 6840,
+ "追": 6841,
+ "退": 6842,
+ "送": 6843,
+ "适": 6844,
+ "逃": 6845,
+ "逅": 6846,
+ "逆": 6847,
+ "选": 6848,
+ "逊": 6849,
+ "逍": 6850,
+ "透": 6851,
+ "逐": 6852,
+ "递": 6853,
+ "途": 6854,
+ "逕": 6855,
+ "逗": 6856,
+ "這": 6857,
+ "通": 6858,
+ "逛": 6859,
+ "逝": 6860,
+ "逞": 6861,
+ "速": 6862,
+ "造": 6863,
+ "逢": 6864,
+ "連": 6865,
+ "逮": 6866,
+ "週": 6867,
+ "進": 6868,
+ "逵": 6869,
+ "逶": 6870,
+ "逸": 6871,
+ "逻": 6872,
+ "逼": 6873,
+ "逾": 6874,
+ "遁": 6875,
+ "遂": 6876,
+ "遅": 6877,
+ "遇": 6878,
+ "遊": 6879,
+ "運": 6880,
+ "遍": 6881,
+ "過": 6882,
+ "遏": 6883,
+ "遐": 6884,
+ "遑": 6885,
+ "遒": 6886,
+ "道": 6887,
+ "達": 6888,
+ "違": 6889,
+ "遗": 6890,
+ "遙": 6891,
+ "遛": 6892,
+ "遜": 6893,
+ "遞": 6894,
+ "遠": 6895,
+ "遢": 6896,
+ "遣": 6897,
+ "遥": 6898,
+ "遨": 6899,
+ "適": 6900,
+ "遭": 6901,
+ "遮": 6902,
+ "遲": 6903,
+ "遴": 6904,
+ "遵": 6905,
+ "遶": 6906,
+ "遷": 6907,
+ "選": 6908,
+ "遺": 6909,
+ "遼": 6910,
+ "遽": 6911,
+ "避": 6912,
+ "邀": 6913,
+ "邁": 6914,
+ "邂": 6915,
+ "邃": 6916,
+ "還": 6917,
+ "邇": 6918,
+ "邈": 6919,
+ "邊": 6920,
+ "邋": 6921,
+ "邏": 6922,
+ "邑": 6923,
+ "邓": 6924,
+ "邕": 6925,
+ "邛": 6926,
+ "邝": 6927,
+ "邢": 6928,
+ "那": 6929,
+ "邦": 6930,
+ "邨": 6931,
+ "邪": 6932,
+ "邬": 6933,
+ "邮": 6934,
+ "邯": 6935,
+ "邰": 6936,
+ "邱": 6937,
+ "邳": 6938,
+ "邵": 6939,
+ "邸": 6940,
+ "邹": 6941,
+ "邺": 6942,
+ "邻": 6943,
+ "郁": 6944,
+ "郅": 6945,
+ "郊": 6946,
+ "郎": 6947,
+ "郑": 6948,
+ "郜": 6949,
+ "郝": 6950,
+ "郡": 6951,
+ "郢": 6952,
+ "郤": 6953,
+ "郦": 6954,
+ "郧": 6955,
+ "部": 6956,
+ "郫": 6957,
+ "郭": 6958,
+ "郴": 6959,
+ "郵": 6960,
+ "郷": 6961,
+ "郸": 6962,
+ "都": 6963,
+ "鄂": 6964,
+ "鄉": 6965,
+ "鄒": 6966,
+ "鄔": 6967,
+ "鄙": 6968,
+ "鄞": 6969,
+ "鄢": 6970,
+ "鄧": 6971,
+ "鄭": 6972,
+ "鄰": 6973,
+ "鄱": 6974,
+ "鄲": 6975,
+ "鄺": 6976,
+ "酉": 6977,
+ "酊": 6978,
+ "酋": 6979,
+ "酌": 6980,
+ "配": 6981,
+ "酐": 6982,
+ "酒": 6983,
+ "酗": 6984,
+ "酚": 6985,
+ "酝": 6986,
+ "酢": 6987,
+ "酣": 6988,
+ "酥": 6989,
+ "酩": 6990,
+ "酪": 6991,
+ "酬": 6992,
+ "酮": 6993,
+ "酯": 6994,
+ "酰": 6995,
+ "酱": 6996,
+ "酵": 6997,
+ "酶": 6998,
+ "酷": 6999,
+ "酸": 7000,
+ "酿": 7001,
+ "醃": 7002,
+ "醇": 7003,
+ "醉": 7004,
+ "醋": 7005,
+ "醍": 7006,
+ "醐": 7007,
+ "醒": 7008,
+ "醚": 7009,
+ "醛": 7010,
+ "醜": 7011,
+ "醞": 7012,
+ "醣": 7013,
+ "醪": 7014,
+ "醫": 7015,
+ "醬": 7016,
+ "醮": 7017,
+ "醯": 7018,
+ "醴": 7019,
+ "醺": 7020,
+ "釀": 7021,
+ "釁": 7022,
+ "采": 7023,
+ "釉": 7024,
+ "释": 7025,
+ "釋": 7026,
+ "里": 7027,
+ "重": 7028,
+ "野": 7029,
+ "量": 7030,
+ "釐": 7031,
+ "金": 7032,
+ "釗": 7033,
+ "釘": 7034,
+ "釜": 7035,
+ "針": 7036,
+ "釣": 7037,
+ "釦": 7038,
+ "釧": 7039,
+ "釵": 7040,
+ "鈀": 7041,
+ "鈉": 7042,
+ "鈍": 7043,
+ "鈎": 7044,
+ "鈔": 7045,
+ "鈕": 7046,
+ "鈞": 7047,
+ "鈣": 7048,
+ "鈦": 7049,
+ "鈪": 7050,
+ "鈴": 7051,
+ "鈺": 7052,
+ "鈾": 7053,
+ "鉀": 7054,
+ "鉄": 7055,
+ "鉅": 7056,
+ "鉉": 7057,
+ "鉑": 7058,
+ "鉗": 7059,
+ "鉚": 7060,
+ "鉛": 7061,
+ "鉤": 7062,
+ "鉴": 7063,
+ "鉻": 7064,
+ "銀": 7065,
+ "銃": 7066,
+ "銅": 7067,
+ "銑": 7068,
+ "銓": 7069,
+ "銖": 7070,
+ "銘": 7071,
+ "銜": 7072,
+ "銬": 7073,
+ "銭": 7074,
+ "銮": 7075,
+ "銳": 7076,
+ "銷": 7077,
+ "銹": 7078,
+ "鋁": 7079,
+ "鋅": 7080,
+ "鋒": 7081,
+ "鋤": 7082,
+ "鋪": 7083,
+ "鋰": 7084,
+ "鋸": 7085,
+ "鋼": 7086,
+ "錄": 7087,
+ "錐": 7088,
+ "錘": 7089,
+ "錚": 7090,
+ "錠": 7091,
+ "錢": 7092,
+ "錦": 7093,
+ "錨": 7094,
+ "錫": 7095,
+ "錮": 7096,
+ "錯": 7097,
+ "録": 7098,
+ "錳": 7099,
+ "錶": 7100,
+ "鍊": 7101,
+ "鍋": 7102,
+ "鍍": 7103,
+ "鍛": 7104,
+ "鍥": 7105,
+ "鍰": 7106,
+ "鍵": 7107,
+ "鍺": 7108,
+ "鍾": 7109,
+ "鎂": 7110,
+ "鎊": 7111,
+ "鎌": 7112,
+ "鎏": 7113,
+ "鎔": 7114,
+ "鎖": 7115,
+ "鎗": 7116,
+ "鎚": 7117,
+ "鎧": 7118,
+ "鎬": 7119,
+ "鎮": 7120,
+ "鎳": 7121,
+ "鏈": 7122,
+ "鏖": 7123,
+ "鏗": 7124,
+ "鏘": 7125,
+ "鏞": 7126,
+ "鏟": 7127,
+ "鏡": 7128,
+ "鏢": 7129,
+ "鏤": 7130,
+ "鏽": 7131,
+ "鐘": 7132,
+ "鐮": 7133,
+ "鐲": 7134,
+ "鐳": 7135,
+ "鐵": 7136,
+ "鐸": 7137,
+ "鐺": 7138,
+ "鑄": 7139,
+ "鑊": 7140,
+ "鑑": 7141,
+ "鑒": 7142,
+ "鑣": 7143,
+ "鑫": 7144,
+ "鑰": 7145,
+ "鑲": 7146,
+ "鑼": 7147,
+ "鑽": 7148,
+ "鑾": 7149,
+ "鑿": 7150,
+ "针": 7151,
+ "钉": 7152,
+ "钊": 7153,
+ "钎": 7154,
+ "钏": 7155,
+ "钒": 7156,
+ "钓": 7157,
+ "钗": 7158,
+ "钙": 7159,
+ "钛": 7160,
+ "钜": 7161,
+ "钝": 7162,
+ "钞": 7163,
+ "钟": 7164,
+ "钠": 7165,
+ "钡": 7166,
+ "钢": 7167,
+ "钣": 7168,
+ "钤": 7169,
+ "钥": 7170,
+ "钦": 7171,
+ "钧": 7172,
+ "钨": 7173,
+ "钩": 7174,
+ "钮": 7175,
+ "钯": 7176,
+ "钰": 7177,
+ "钱": 7178,
+ "钳": 7179,
+ "钴": 7180,
+ "钵": 7181,
+ "钺": 7182,
+ "钻": 7183,
+ "钼": 7184,
+ "钾": 7185,
+ "钿": 7186,
+ "铀": 7187,
+ "铁": 7188,
+ "铂": 7189,
+ "铃": 7190,
+ "铄": 7191,
+ "铅": 7192,
+ "铆": 7193,
+ "铉": 7194,
+ "铎": 7195,
+ "铐": 7196,
+ "铛": 7197,
+ "铜": 7198,
+ "铝": 7199,
+ "铠": 7200,
+ "铡": 7201,
+ "铢": 7202,
+ "铣": 7203,
+ "铤": 7204,
+ "铨": 7205,
+ "铩": 7206,
+ "铬": 7207,
+ "铭": 7208,
+ "铮": 7209,
+ "铰": 7210,
+ "铲": 7211,
+ "铵": 7212,
+ "银": 7213,
+ "铸": 7214,
+ "铺": 7215,
+ "链": 7216,
+ "铿": 7217,
+ "销": 7218,
+ "锁": 7219,
+ "锂": 7220,
+ "锄": 7221,
+ "锅": 7222,
+ "锆": 7223,
+ "锈": 7224,
+ "锉": 7225,
+ "锋": 7226,
+ "锌": 7227,
+ "锏": 7228,
+ "锐": 7229,
+ "锑": 7230,
+ "错": 7231,
+ "锚": 7232,
+ "锟": 7233,
+ "锡": 7234,
+ "锢": 7235,
+ "锣": 7236,
+ "锤": 7237,
+ "锥": 7238,
+ "锦": 7239,
+ "锭": 7240,
+ "键": 7241,
+ "锯": 7242,
+ "锰": 7243,
+ "锲": 7244,
+ "锵": 7245,
+ "锹": 7246,
+ "锺": 7247,
+ "锻": 7248,
+ "镀": 7249,
+ "镁": 7250,
+ "镂": 7251,
+ "镇": 7252,
+ "镉": 7253,
+ "镌": 7254,
+ "镍": 7255,
+ "镐": 7256,
+ "镑": 7257,
+ "镕": 7258,
+ "镖": 7259,
+ "镗": 7260,
+ "镛": 7261,
+ "镜": 7262,
+ "镣": 7263,
+ "镭": 7264,
+ "镯": 7265,
+ "镰": 7266,
+ "镳": 7267,
+ "镶": 7268,
+ "長": 7269,
+ "长": 7270,
+ "門": 7271,
+ "閃": 7272,
+ "閉": 7273,
+ "開": 7274,
+ "閎": 7275,
+ "閏": 7276,
+ "閑": 7277,
+ "閒": 7278,
+ "間": 7279,
+ "閔": 7280,
+ "閘": 7281,
+ "閡": 7282,
+ "関": 7283,
+ "閣": 7284,
+ "閥": 7285,
+ "閨": 7286,
+ "閩": 7287,
+ "閱": 7288,
+ "閲": 7289,
+ "閹": 7290,
+ "閻": 7291,
+ "閾": 7292,
+ "闆": 7293,
+ "闇": 7294,
+ "闊": 7295,
+ "闌": 7296,
+ "闍": 7297,
+ "闔": 7298,
+ "闕": 7299,
+ "闖": 7300,
+ "闘": 7301,
+ "關": 7302,
+ "闡": 7303,
+ "闢": 7304,
+ "门": 7305,
+ "闪": 7306,
+ "闫": 7307,
+ "闭": 7308,
+ "问": 7309,
+ "闯": 7310,
+ "闰": 7311,
+ "闲": 7312,
+ "间": 7313,
+ "闵": 7314,
+ "闷": 7315,
+ "闸": 7316,
+ "闹": 7317,
+ "闺": 7318,
+ "闻": 7319,
+ "闽": 7320,
+ "闾": 7321,
+ "阀": 7322,
+ "阁": 7323,
+ "阂": 7324,
+ "阅": 7325,
+ "阆": 7326,
+ "阇": 7327,
+ "阈": 7328,
+ "阉": 7329,
+ "阎": 7330,
+ "阐": 7331,
+ "阑": 7332,
+ "阔": 7333,
+ "阕": 7334,
+ "阖": 7335,
+ "阙": 7336,
+ "阚": 7337,
+ "阜": 7338,
+ "队": 7339,
+ "阡": 7340,
+ "阪": 7341,
+ "阮": 7342,
+ "阱": 7343,
+ "防": 7344,
+ "阳": 7345,
+ "阴": 7346,
+ "阵": 7347,
+ "阶": 7348,
+ "阻": 7349,
+ "阿": 7350,
+ "陀": 7351,
+ "陂": 7352,
+ "附": 7353,
+ "际": 7354,
+ "陆": 7355,
+ "陇": 7356,
+ "陈": 7357,
+ "陋": 7358,
+ "陌": 7359,
+ "降": 7360,
+ "限": 7361,
+ "陕": 7362,
+ "陛": 7363,
+ "陝": 7364,
+ "陞": 7365,
+ "陟": 7366,
+ "陡": 7367,
+ "院": 7368,
+ "陣": 7369,
+ "除": 7370,
+ "陨": 7371,
+ "险": 7372,
+ "陪": 7373,
+ "陰": 7374,
+ "陲": 7375,
+ "陳": 7376,
+ "陵": 7377,
+ "陶": 7378,
+ "陷": 7379,
+ "陸": 7380,
+ "険": 7381,
+ "陽": 7382,
+ "隅": 7383,
+ "隆": 7384,
+ "隈": 7385,
+ "隊": 7386,
+ "隋": 7387,
+ "隍": 7388,
+ "階": 7389,
+ "随": 7390,
+ "隐": 7391,
+ "隔": 7392,
+ "隕": 7393,
+ "隘": 7394,
+ "隙": 7395,
+ "際": 7396,
+ "障": 7397,
+ "隠": 7398,
+ "隣": 7399,
+ "隧": 7400,
+ "隨": 7401,
+ "險": 7402,
+ "隱": 7403,
+ "隴": 7404,
+ "隶": 7405,
+ "隸": 7406,
+ "隻": 7407,
+ "隼": 7408,
+ "隽": 7409,
+ "难": 7410,
+ "雀": 7411,
+ "雁": 7412,
+ "雄": 7413,
+ "雅": 7414,
+ "集": 7415,
+ "雇": 7416,
+ "雉": 7417,
+ "雋": 7418,
+ "雌": 7419,
+ "雍": 7420,
+ "雎": 7421,
+ "雏": 7422,
+ "雑": 7423,
+ "雒": 7424,
+ "雕": 7425,
+ "雖": 7426,
+ "雙": 7427,
+ "雛": 7428,
+ "雜": 7429,
+ "雞": 7430,
+ "離": 7431,
+ "難": 7432,
+ "雨": 7433,
+ "雪": 7434,
+ "雯": 7435,
+ "雰": 7436,
+ "雲": 7437,
+ "雳": 7438,
+ "零": 7439,
+ "雷": 7440,
+ "雹": 7441,
+ "電": 7442,
+ "雾": 7443,
+ "需": 7444,
+ "霁": 7445,
+ "霄": 7446,
+ "霆": 7447,
+ "震": 7448,
+ "霈": 7449,
+ "霉": 7450,
+ "霊": 7451,
+ "霍": 7452,
+ "霎": 7453,
+ "霏": 7454,
+ "霑": 7455,
+ "霓": 7456,
+ "霖": 7457,
+ "霜": 7458,
+ "霞": 7459,
+ "霧": 7460,
+ "霭": 7461,
+ "霰": 7462,
+ "露": 7463,
+ "霸": 7464,
+ "霹": 7465,
+ "霽": 7466,
+ "霾": 7467,
+ "靂": 7468,
+ "靄": 7469,
+ "靈": 7470,
+ "青": 7471,
+ "靓": 7472,
+ "靖": 7473,
+ "静": 7474,
+ "靚": 7475,
+ "靛": 7476,
+ "靜": 7477,
+ "非": 7478,
+ "靠": 7479,
+ "靡": 7480,
+ "面": 7481,
+ "靥": 7482,
+ "靦": 7483,
+ "革": 7484,
+ "靳": 7485,
+ "靴": 7486,
+ "靶": 7487,
+ "靼": 7488,
+ "鞅": 7489,
+ "鞋": 7490,
+ "鞍": 7491,
+ "鞏": 7492,
+ "鞑": 7493,
+ "鞘": 7494,
+ "鞠": 7495,
+ "鞣": 7496,
+ "鞦": 7497,
+ "鞭": 7498,
+ "韆": 7499,
+ "韋": 7500,
+ "韌": 7501,
+ "韓": 7502,
+ "韜": 7503,
+ "韦": 7504,
+ "韧": 7505,
+ "韩": 7506,
+ "韬": 7507,
+ "韭": 7508,
+ "音": 7509,
+ "韵": 7510,
+ "韶": 7511,
+ "韻": 7512,
+ "響": 7513,
+ "頁": 7514,
+ "頂": 7515,
+ "頃": 7516,
+ "項": 7517,
+ "順": 7518,
+ "須": 7519,
+ "頌": 7520,
+ "預": 7521,
+ "頑": 7522,
+ "頒": 7523,
+ "頓": 7524,
+ "頗": 7525,
+ "領": 7526,
+ "頜": 7527,
+ "頡": 7528,
+ "頤": 7529,
+ "頫": 7530,
+ "頭": 7531,
+ "頰": 7532,
+ "頷": 7533,
+ "頸": 7534,
+ "頹": 7535,
+ "頻": 7536,
+ "頼": 7537,
+ "顆": 7538,
+ "題": 7539,
+ "額": 7540,
+ "顎": 7541,
+ "顏": 7542,
+ "顔": 7543,
+ "願": 7544,
+ "顛": 7545,
+ "類": 7546,
+ "顧": 7547,
+ "顫": 7548,
+ "顯": 7549,
+ "顱": 7550,
+ "顴": 7551,
+ "页": 7552,
+ "顶": 7553,
+ "顷": 7554,
+ "项": 7555,
+ "顺": 7556,
+ "须": 7557,
+ "顼": 7558,
+ "顽": 7559,
+ "顾": 7560,
+ "顿": 7561,
+ "颁": 7562,
+ "颂": 7563,
+ "预": 7564,
+ "颅": 7565,
+ "领": 7566,
+ "颇": 7567,
+ "颈": 7568,
+ "颉": 7569,
+ "颊": 7570,
+ "颌": 7571,
+ "颍": 7572,
+ "颐": 7573,
+ "频": 7574,
+ "颓": 7575,
+ "颔": 7576,
+ "颖": 7577,
+ "颗": 7578,
+ "题": 7579,
+ "颚": 7580,
+ "颛": 7581,
+ "颜": 7582,
+ "额": 7583,
+ "颞": 7584,
+ "颠": 7585,
+ "颡": 7586,
+ "颢": 7587,
+ "颤": 7588,
+ "颦": 7589,
+ "颧": 7590,
+ "風": 7591,
+ "颯": 7592,
+ "颱": 7593,
+ "颳": 7594,
+ "颶": 7595,
+ "颼": 7596,
+ "飄": 7597,
+ "飆": 7598,
+ "风": 7599,
+ "飒": 7600,
+ "飓": 7601,
+ "飕": 7602,
+ "飘": 7603,
+ "飙": 7604,
+ "飚": 7605,
+ "飛": 7606,
+ "飞": 7607,
+ "食": 7608,
+ "飢": 7609,
+ "飨": 7610,
+ "飩": 7611,
+ "飪": 7612,
+ "飯": 7613,
+ "飲": 7614,
+ "飼": 7615,
+ "飽": 7616,
+ "飾": 7617,
+ "餃": 7618,
+ "餅": 7619,
+ "餉": 7620,
+ "養": 7621,
+ "餌": 7622,
+ "餐": 7623,
+ "餒": 7624,
+ "餓": 7625,
+ "餘": 7626,
+ "餚": 7627,
+ "餛": 7628,
+ "餞": 7629,
+ "餡": 7630,
+ "館": 7631,
+ "餮": 7632,
+ "餵": 7633,
+ "餾": 7634,
+ "饅": 7635,
+ "饈": 7636,
+ "饋": 7637,
+ "饌": 7638,
+ "饍": 7639,
+ "饑": 7640,
+ "饒": 7641,
+ "饕": 7642,
+ "饗": 7643,
+ "饞": 7644,
+ "饥": 7645,
+ "饨": 7646,
+ "饪": 7647,
+ "饬": 7648,
+ "饭": 7649,
+ "饮": 7650,
+ "饯": 7651,
+ "饰": 7652,
+ "饱": 7653,
+ "饲": 7654,
+ "饴": 7655,
+ "饵": 7656,
+ "饶": 7657,
+ "饷": 7658,
+ "饺": 7659,
+ "饼": 7660,
+ "饽": 7661,
+ "饿": 7662,
+ "馀": 7663,
+ "馁": 7664,
+ "馄": 7665,
+ "馅": 7666,
+ "馆": 7667,
+ "馈": 7668,
+ "馋": 7669,
+ "馍": 7670,
+ "馏": 7671,
+ "馒": 7672,
+ "馔": 7673,
+ "首": 7674,
+ "馗": 7675,
+ "香": 7676,
+ "馥": 7677,
+ "馨": 7678,
+ "馬": 7679,
+ "馭": 7680,
+ "馮": 7681,
+ "馳": 7682,
+ "馴": 7683,
+ "駁": 7684,
+ "駄": 7685,
+ "駅": 7686,
+ "駆": 7687,
+ "駐": 7688,
+ "駒": 7689,
+ "駕": 7690,
+ "駛": 7691,
+ "駝": 7692,
+ "駭": 7693,
+ "駱": 7694,
+ "駿": 7695,
+ "騁": 7696,
+ "騎": 7697,
+ "騏": 7698,
+ "験": 7699,
+ "騙": 7700,
+ "騨": 7701,
+ "騰": 7702,
+ "騷": 7703,
+ "驀": 7704,
+ "驅": 7705,
+ "驊": 7706,
+ "驍": 7707,
+ "驒": 7708,
+ "驕": 7709,
+ "驗": 7710,
+ "驚": 7711,
+ "驛": 7712,
+ "驟": 7713,
+ "驢": 7714,
+ "驥": 7715,
+ "马": 7716,
+ "驭": 7717,
+ "驮": 7718,
+ "驯": 7719,
+ "驰": 7720,
+ "驱": 7721,
+ "驳": 7722,
+ "驴": 7723,
+ "驶": 7724,
+ "驷": 7725,
+ "驸": 7726,
+ "驹": 7727,
+ "驻": 7728,
+ "驼": 7729,
+ "驾": 7730,
+ "驿": 7731,
+ "骁": 7732,
+ "骂": 7733,
+ "骄": 7734,
+ "骅": 7735,
+ "骆": 7736,
+ "骇": 7737,
+ "骈": 7738,
+ "骊": 7739,
+ "骋": 7740,
+ "验": 7741,
+ "骏": 7742,
+ "骐": 7743,
+ "骑": 7744,
+ "骗": 7745,
+ "骚": 7746,
+ "骛": 7747,
+ "骜": 7748,
+ "骞": 7749,
+ "骠": 7750,
+ "骡": 7751,
+ "骤": 7752,
+ "骥": 7753,
+ "骧": 7754,
+ "骨": 7755,
+ "骯": 7756,
+ "骰": 7757,
+ "骶": 7758,
+ "骷": 7759,
+ "骸": 7760,
+ "骼": 7761,
+ "髂": 7762,
+ "髅": 7763,
+ "髋": 7764,
+ "髏": 7765,
+ "髒": 7766,
+ "髓": 7767,
+ "體": 7768,
+ "髖": 7769,
+ "高": 7770,
+ "髦": 7771,
+ "髪": 7772,
+ "髮": 7773,
+ "髯": 7774,
+ "髻": 7775,
+ "鬃": 7776,
+ "鬆": 7777,
+ "鬍": 7778,
+ "鬓": 7779,
+ "鬚": 7780,
+ "鬟": 7781,
+ "鬢": 7782,
+ "鬣": 7783,
+ "鬥": 7784,
+ "鬧": 7785,
+ "鬱": 7786,
+ "鬼": 7787,
+ "魁": 7788,
+ "魂": 7789,
+ "魄": 7790,
+ "魅": 7791,
+ "魇": 7792,
+ "魍": 7793,
+ "魏": 7794,
+ "魔": 7795,
+ "魘": 7796,
+ "魚": 7797,
+ "魯": 7798,
+ "魷": 7799,
+ "鮑": 7800,
+ "鮨": 7801,
+ "鮪": 7802,
+ "鮭": 7803,
+ "鮮": 7804,
+ "鯉": 7805,
+ "鯊": 7806,
+ "鯖": 7807,
+ "鯛": 7808,
+ "鯨": 7809,
+ "鯰": 7810,
+ "鯽": 7811,
+ "鰍": 7812,
+ "鰓": 7813,
+ "鰭": 7814,
+ "鰲": 7815,
+ "鰻": 7816,
+ "鰾": 7817,
+ "鱈": 7818,
+ "鱉": 7819,
+ "鱔": 7820,
+ "鱗": 7821,
+ "鱷": 7822,
+ "鱸": 7823,
+ "鱼": 7824,
+ "鱿": 7825,
+ "鲁": 7826,
+ "鲈": 7827,
+ "鲍": 7828,
+ "鲑": 7829,
+ "鲛": 7830,
+ "鲜": 7831,
+ "鲟": 7832,
+ "鲢": 7833,
+ "鲤": 7834,
+ "鲨": 7835,
+ "鲫": 7836,
+ "鲱": 7837,
+ "鲲": 7838,
+ "鲶": 7839,
+ "鲷": 7840,
+ "鲸": 7841,
+ "鳃": 7842,
+ "鳄": 7843,
+ "鳅": 7844,
+ "鳌": 7845,
+ "鳍": 7846,
+ "鳕": 7847,
+ "鳖": 7848,
+ "鳗": 7849,
+ "鳝": 7850,
+ "鳞": 7851,
+ "鳥": 7852,
+ "鳩": 7853,
+ "鳳": 7854,
+ "鳴": 7855,
+ "鳶": 7856,
+ "鴉": 7857,
+ "鴕": 7858,
+ "鴛": 7859,
+ "鴦": 7860,
+ "鴨": 7861,
+ "鴻": 7862,
+ "鴿": 7863,
+ "鵑": 7864,
+ "鵜": 7865,
+ "鵝": 7866,
+ "鵡": 7867,
+ "鵬": 7868,
+ "鵰": 7869,
+ "鵲": 7870,
+ "鶘": 7871,
+ "鶩": 7872,
+ "鶯": 7873,
+ "鶴": 7874,
+ "鷗": 7875,
+ "鷲": 7876,
+ "鷹": 7877,
+ "鷺": 7878,
+ "鸚": 7879,
+ "鸞": 7880,
+ "鸟": 7881,
+ "鸠": 7882,
+ "鸡": 7883,
+ "鸢": 7884,
+ "鸣": 7885,
+ "鸥": 7886,
+ "鸦": 7887,
+ "鸨": 7888,
+ "鸪": 7889,
+ "鸭": 7890,
+ "鸯": 7891,
+ "鸳": 7892,
+ "鸵": 7893,
+ "鸽": 7894,
+ "鸾": 7895,
+ "鸿": 7896,
+ "鹂": 7897,
+ "鹃": 7898,
+ "鹄": 7899,
+ "鹅": 7900,
+ "鹈": 7901,
+ "鹉": 7902,
+ "鹊": 7903,
+ "鹌": 7904,
+ "鹏": 7905,
+ "鹑": 7906,
+ "鹕": 7907,
+ "鹘": 7908,
+ "鹜": 7909,
+ "鹞": 7910,
+ "鹤": 7911,
+ "鹦": 7912,
+ "鹧": 7913,
+ "鹫": 7914,
+ "鹭": 7915,
+ "鹰": 7916,
+ "鹳": 7917,
+ "鹵": 7918,
+ "鹹": 7919,
+ "鹼": 7920,
+ "鹽": 7921,
+ "鹿": 7922,
+ "麂": 7923,
+ "麋": 7924,
+ "麒": 7925,
+ "麓": 7926,
+ "麗": 7927,
+ "麝": 7928,
+ "麟": 7929,
+ "麥": 7930,
+ "麦": 7931,
+ "麩": 7932,
+ "麴": 7933,
+ "麵": 7934,
+ "麸": 7935,
+ "麺": 7936,
+ "麻": 7937,
+ "麼": 7938,
+ "麽": 7939,
+ "麾": 7940,
+ "黃": 7941,
+ "黄": 7942,
+ "黍": 7943,
+ "黎": 7944,
+ "黏": 7945,
+ "黑": 7946,
+ "黒": 7947,
+ "黔": 7948,
+ "默": 7949,
+ "黛": 7950,
+ "黜": 7951,
+ "黝": 7952,
+ "點": 7953,
+ "黠": 7954,
+ "黨": 7955,
+ "黯": 7956,
+ "黴": 7957,
+ "鼋": 7958,
+ "鼎": 7959,
+ "鼐": 7960,
+ "鼓": 7961,
+ "鼠": 7962,
+ "鼬": 7963,
+ "鼹": 7964,
+ "鼻": 7965,
+ "鼾": 7966,
+ "齁": 7967,
+ "齊": 7968,
+ "齋": 7969,
+ "齐": 7970,
+ "齒": 7971,
+ "齡": 7972,
+ "齢": 7973,
+ "齣": 7974,
+ "齦": 7975,
+ "齿": 7976,
+ "龄": 7977,
+ "龅": 7978,
+ "龈": 7979,
+ "龊": 7980,
+ "龋": 7981,
+ "龌": 7982,
+ "龍": 7983,
+ "龐": 7984,
+ "龔": 7985,
+ "龕": 7986,
+ "龙": 7987,
+ "龚": 7988,
+ "龛": 7989,
+ "龜": 7990,
+ "龟": 7991,
+ "︰": 7992,
+ "︱": 7993,
+ "︶": 7994,
+ "︿": 7995,
+ "﹁": 7996,
+ "﹂": 7997,
+ "﹍": 7998,
+ "﹏": 7999,
+ "﹐": 8000,
+ "﹑": 8001,
+ "﹒": 8002,
+ "﹔": 8003,
+ "﹕": 8004,
+ "﹖": 8005,
+ "﹗": 8006,
+ "﹙": 8007,
+ "﹚": 8008,
+ "﹝": 8009,
+ "﹞": 8010,
+ "﹡": 8011,
+ "﹣": 8012,
+ "!": 8013,
+ """: 8014,
+ "#": 8015,
+ "$": 8016,
+ "%": 8017,
+ "&": 8018,
+ "'": 8019,
+ "(": 8020,
+ ")": 8021,
+ "*": 8022,
+ "+": 8023,
+ ",": 8024,
+ "-": 8025,
+ ".": 8026,
+ "/": 8027,
+ "0": 8028,
+ "1": 8029,
+ "2": 8030,
+ "3": 8031,
+ "4": 8032,
+ "5": 8033,
+ "6": 8034,
+ "7": 8035,
+ "8": 8036,
+ "9": 8037,
+ ":": 8038,
+ ";": 8039,
+ "<": 8040,
+ "=": 8041,
+ ">": 8042,
+ "?": 8043,
+ "@": 8044,
+ "[": 8045,
+ "\": 8046,
+ "]": 8047,
+ "^": 8048,
+ "_": 8049,
+ "`": 8050,
+ "a": 8051,
+ "b": 8052,
+ "c": 8053,
+ "d": 8054,
+ "e": 8055,
+ "f": 8056,
+ "g": 8057,
+ "h": 8058,
+ "i": 8059,
+ "j": 8060,
+ "k": 8061,
+ "l": 8062,
+ "m": 8063,
+ "n": 8064,
+ "o": 8065,
+ "p": 8066,
+ "q": 8067,
+ "r": 8068,
+ "s": 8069,
+ "t": 8070,
+ "u": 8071,
+ "v": 8072,
+ "w": 8073,
+ "x": 8074,
+ "y": 8075,
+ "z": 8076,
+ "{": 8077,
+ "|": 8078,
+ "}": 8079,
+ "~": 8080,
+ "。": 8081,
+ "「": 8082,
+ "」": 8083,
+ "、": 8084,
+ "・": 8085,
+ "ッ": 8086,
+ "ー": 8087,
+ "イ": 8088,
+ "ク": 8089,
+ "シ": 8090,
+ "ス": 8091,
+ "ト": 8092,
+ "ノ": 8093,
+ "フ": 8094,
+ "ラ": 8095,
+ "ル": 8096,
+ "ン": 8097,
+ "゙": 8098,
+ "゚": 8099,
+ " ̄": 8100,
+ "¥": 8101,
+ "👍": 8102,
+ "🔥": 8103,
+ "😂": 8104,
+ "😎": 8105,
+ "...": 8106,
+ "yam": 8107,
+ "10": 8108,
+ "2017": 8109,
+ "12": 8110,
+ "11": 8111,
+ "2016": 8112,
+ "20": 8113,
+ "30": 8114,
+ "15": 8115,
+ "06": 8116,
+ "lofter": 8117,
+ "##s": 8118,
+ "2015": 8119,
+ "by": 8120,
+ "16": 8121,
+ "14": 8122,
+ "18": 8123,
+ "13": 8124,
+ "24": 8125,
+ "17": 8126,
+ "2014": 8127,
+ "21": 8128,
+ "##0": 8129,
+ "22": 8130,
+ "19": 8131,
+ "25": 8132,
+ "23": 8133,
+ "com": 8134,
+ "100": 8135,
+ "00": 8136,
+ "05": 8137,
+ "2013": 8138,
+ "##a": 8139,
+ "03": 8140,
+ "09": 8141,
+ "08": 8142,
+ "28": 8143,
+ "##2": 8144,
+ "50": 8145,
+ "01": 8146,
+ "04": 8147,
+ "##1": 8148,
+ "27": 8149,
+ "02": 8150,
+ "2012": 8151,
+ "##3": 8152,
+ "26": 8153,
+ "##e": 8154,
+ "07": 8155,
+ "##8": 8156,
+ "##5": 8157,
+ "##6": 8158,
+ "##4": 8159,
+ "##9": 8160,
+ "##7": 8161,
+ "29": 8162,
+ "2011": 8163,
+ "40": 8164,
+ "##t": 8165,
+ "2010": 8166,
+ "##o": 8167,
+ "##d": 8168,
+ "##i": 8169,
+ "2009": 8170,
+ "##n": 8171,
+ "app": 8172,
+ "www": 8173,
+ "the": 8174,
+ "##m": 8175,
+ "31": 8176,
+ "##c": 8177,
+ "##l": 8178,
+ "##y": 8179,
+ "##r": 8180,
+ "##g": 8181,
+ "2008": 8182,
+ "60": 8183,
+ "http": 8184,
+ "200": 8185,
+ "qq": 8186,
+ "##p": 8187,
+ "80": 8188,
+ "##f": 8189,
+ "google": 8190,
+ "pixnet": 8191,
+ "90": 8192,
+ "cookies": 8193,
+ "tripadvisor": 8194,
+ "500": 8195,
+ "##er": 8196,
+ "##k": 8197,
+ "35": 8198,
+ "##h": 8199,
+ "facebook": 8200,
+ "2007": 8201,
+ "2000": 8202,
+ "70": 8203,
+ "##b": 8204,
+ "of": 8205,
+ "##x": 8206,
+ "##u": 8207,
+ "45": 8208,
+ "300": 8209,
+ "iphone": 8210,
+ "32": 8211,
+ "1000": 8212,
+ "2006": 8213,
+ "48": 8214,
+ "ip": 8215,
+ "36": 8216,
+ "in": 8217,
+ "38": 8218,
+ "3d": 8219,
+ "##w": 8220,
+ "##ing": 8221,
+ "55": 8222,
+ "ctrip": 8223,
+ "##on": 8224,
+ "##v": 8225,
+ "33": 8226,
+ "##の": 8227,
+ "to": 8228,
+ "34": 8229,
+ "400": 8230,
+ "id": 8231,
+ "2005": 8232,
+ "it": 8233,
+ "37": 8234,
+ "windows": 8235,
+ "llc": 8236,
+ "top": 8237,
+ "99": 8238,
+ "42": 8239,
+ "39": 8240,
+ "000": 8241,
+ "led": 8242,
+ "at": 8243,
+ "##an": 8244,
+ "41": 8245,
+ "51": 8246,
+ "52": 8247,
+ "46": 8248,
+ "49": 8249,
+ "43": 8250,
+ "53": 8251,
+ "44": 8252,
+ "##z": 8253,
+ "android": 8254,
+ "58": 8255,
+ "and": 8256,
+ "59": 8257,
+ "2004": 8258,
+ "56": 8259,
+ "vr": 8260,
+ "##か": 8261,
+ "5000": 8262,
+ "2003": 8263,
+ "47": 8264,
+ "blogthis": 8265,
+ "twitter": 8266,
+ "54": 8267,
+ "##le": 8268,
+ "150": 8269,
+ "ok": 8270,
+ "2018": 8271,
+ "57": 8272,
+ "75": 8273,
+ "cn": 8274,
+ "no": 8275,
+ "ios": 8276,
+ "##in": 8277,
+ "##mm": 8278,
+ "##00": 8279,
+ "800": 8280,
+ "on": 8281,
+ "te": 8282,
+ "3000": 8283,
+ "65": 8284,
+ "2001": 8285,
+ "360": 8286,
+ "95": 8287,
+ "ig": 8288,
+ "lv": 8289,
+ "120": 8290,
+ "##ng": 8291,
+ "##を": 8292,
+ "##us": 8293,
+ "##に": 8294,
+ "pc": 8295,
+ "てす": 8296,
+ "──": 8297,
+ "600": 8298,
+ "##te": 8299,
+ "85": 8300,
+ "2002": 8301,
+ "88": 8302,
+ "##ed": 8303,
+ "html": 8304,
+ "ncc": 8305,
+ "wifi": 8306,
+ "email": 8307,
+ "64": 8308,
+ "blog": 8309,
+ "is": 8310,
+ "##10": 8311,
+ "##て": 8312,
+ "mail": 8313,
+ "online": 8314,
+ "##al": 8315,
+ "dvd": 8316,
+ "##ic": 8317,
+ "studio": 8318,
+ "##は": 8319,
+ "##℃": 8320,
+ "##ia": 8321,
+ "##と": 8322,
+ "line": 8323,
+ "vip": 8324,
+ "72": 8325,
+ "##q": 8326,
+ "98": 8327,
+ "##ce": 8328,
+ "##en": 8329,
+ "for": 8330,
+ "##is": 8331,
+ "##ra": 8332,
+ "##es": 8333,
+ "##j": 8334,
+ "usb": 8335,
+ "net": 8336,
+ "cp": 8337,
+ "1999": 8338,
+ "asia": 8339,
+ "4g": 8340,
+ "##cm": 8341,
+ "diy": 8342,
+ "new": 8343,
+ "3c": 8344,
+ "##お": 8345,
+ "ta": 8346,
+ "66": 8347,
+ "language": 8348,
+ "vs": 8349,
+ "apple": 8350,
+ "tw": 8351,
+ "86": 8352,
+ "web": 8353,
+ "##ne": 8354,
+ "ipad": 8355,
+ "62": 8356,
+ "you": 8357,
+ "##re": 8358,
+ "101": 8359,
+ "68": 8360,
+ "##tion": 8361,
+ "ps": 8362,
+ "de": 8363,
+ "bt": 8364,
+ "pony": 8365,
+ "atm": 8366,
+ "##2017": 8367,
+ "1998": 8368,
+ "67": 8369,
+ "##ch": 8370,
+ "ceo": 8371,
+ "##or": 8372,
+ "go": 8373,
+ "##na": 8374,
+ "av": 8375,
+ "pro": 8376,
+ "cafe": 8377,
+ "96": 8378,
+ "pinterest": 8379,
+ "97": 8380,
+ "63": 8381,
+ "pixstyleme3c": 8382,
+ "##ta": 8383,
+ "more": 8384,
+ "said": 8385,
+ "##2016": 8386,
+ "1997": 8387,
+ "mp3": 8388,
+ "700": 8389,
+ "##ll": 8390,
+ "nba": 8391,
+ "jun": 8392,
+ "##20": 8393,
+ "92": 8394,
+ "tv": 8395,
+ "1995": 8396,
+ "pm": 8397,
+ "61": 8398,
+ "76": 8399,
+ "nbsp": 8400,
+ "250": 8401,
+ "##ie": 8402,
+ "linux": 8403,
+ "##ma": 8404,
+ "cd": 8405,
+ "110": 8406,
+ "hd": 8407,
+ "##17": 8408,
+ "78": 8409,
+ "##ion": 8410,
+ "77": 8411,
+ "6000": 8412,
+ "am": 8413,
+ "##th": 8414,
+ "##st": 8415,
+ "94": 8416,
+ "##se": 8417,
+ "##et": 8418,
+ "69": 8419,
+ "180": 8420,
+ "gdp": 8421,
+ "my": 8422,
+ "105": 8423,
+ "81": 8424,
+ "abc": 8425,
+ "89": 8426,
+ "flash": 8427,
+ "79": 8428,
+ "one": 8429,
+ "93": 8430,
+ "1990": 8431,
+ "1996": 8432,
+ "##ck": 8433,
+ "gps": 8434,
+ "##も": 8435,
+ "##ly": 8436,
+ "web885": 8437,
+ "106": 8438,
+ "2020": 8439,
+ "91": 8440,
+ "##ge": 8441,
+ "4000": 8442,
+ "1500": 8443,
+ "xd": 8444,
+ "boss": 8445,
+ "isbn": 8446,
+ "1994": 8447,
+ "org": 8448,
+ "##ry": 8449,
+ "me": 8450,
+ "love": 8451,
+ "##11": 8452,
+ "0fork": 8453,
+ "73": 8454,
+ "##12": 8455,
+ "3g": 8456,
+ "##ter": 8457,
+ "##ar": 8458,
+ "71": 8459,
+ "82": 8460,
+ "##la": 8461,
+ "hotel": 8462,
+ "130": 8463,
+ "1970": 8464,
+ "pk": 8465,
+ "83": 8466,
+ "87": 8467,
+ "140": 8468,
+ "ie": 8469,
+ "##os": 8470,
+ "##30": 8471,
+ "##el": 8472,
+ "74": 8473,
+ "##50": 8474,
+ "seo": 8475,
+ "cpu": 8476,
+ "##ml": 8477,
+ "p2p": 8478,
+ "84": 8479,
+ "may": 8480,
+ "##る": 8481,
+ "sun": 8482,
+ "tue": 8483,
+ "internet": 8484,
+ "cc": 8485,
+ "posted": 8486,
+ "youtube": 8487,
+ "##at": 8488,
+ "##ン": 8489,
+ "##man": 8490,
+ "ii": 8491,
+ "##ル": 8492,
+ "##15": 8493,
+ "abs": 8494,
+ "nt": 8495,
+ "pdf": 8496,
+ "yahoo": 8497,
+ "ago": 8498,
+ "1980": 8499,
+ "##it": 8500,
+ "news": 8501,
+ "mac": 8502,
+ "104": 8503,
+ "##てす": 8504,
+ "##me": 8505,
+ "##り": 8506,
+ "java": 8507,
+ "1992": 8508,
+ "spa": 8509,
+ "##de": 8510,
+ "##nt": 8511,
+ "hk": 8512,
+ "all": 8513,
+ "plus": 8514,
+ "la": 8515,
+ "1993": 8516,
+ "##mb": 8517,
+ "##16": 8518,
+ "##ve": 8519,
+ "west": 8520,
+ "##da": 8521,
+ "160": 8522,
+ "air": 8523,
+ "##い": 8524,
+ "##ps": 8525,
+ "から": 8526,
+ "##to": 8527,
+ "1989": 8528,
+ "logo": 8529,
+ "htc": 8530,
+ "php": 8531,
+ "https": 8532,
+ "fi": 8533,
+ "momo": 8534,
+ "##son": 8535,
+ "sat": 8536,
+ "##ke": 8537,
+ "##80": 8538,
+ "ebd": 8539,
+ "suv": 8540,
+ "wi": 8541,
+ "day": 8542,
+ "apk": 8543,
+ "##88": 8544,
+ "##um": 8545,
+ "mv": 8546,
+ "galaxy": 8547,
+ "wiki": 8548,
+ "or": 8549,
+ "brake": 8550,
+ "##ス": 8551,
+ "1200": 8552,
+ "する": 8553,
+ "this": 8554,
+ "1991": 8555,
+ "mon": 8556,
+ "##こ": 8557,
+ "❤2017": 8558,
+ "po": 8559,
+ "##ない": 8560,
+ "javascript": 8561,
+ "life": 8562,
+ "home": 8563,
+ "june": 8564,
+ "##ss": 8565,
+ "system": 8566,
+ "900": 8567,
+ "##ー": 8568,
+ "##0": 8569,
+ "pp": 8570,
+ "1988": 8571,
+ "world": 8572,
+ "fb": 8573,
+ "4k": 8574,
+ "br": 8575,
+ "##as": 8576,
+ "ic": 8577,
+ "ai": 8578,
+ "leonardo": 8579,
+ "safari": 8580,
+ "##60": 8581,
+ "live": 8582,
+ "free": 8583,
+ "xx": 8584,
+ "wed": 8585,
+ "win7": 8586,
+ "kiehl": 8587,
+ "##co": 8588,
+ "lg": 8589,
+ "o2o": 8590,
+ "##go": 8591,
+ "us": 8592,
+ "235": 8593,
+ "1949": 8594,
+ "mm": 8595,
+ "しい": 8596,
+ "vfm": 8597,
+ "kanye": 8598,
+ "##90": 8599,
+ "##2015": 8600,
+ "##id": 8601,
+ "jr": 8602,
+ "##ey": 8603,
+ "123": 8604,
+ "rss": 8605,
+ "##sa": 8606,
+ "##ro": 8607,
+ "##am": 8608,
+ "##no": 8609,
+ "thu": 8610,
+ "fri": 8611,
+ "350": 8612,
+ "##sh": 8613,
+ "##ki": 8614,
+ "103": 8615,
+ "comments": 8616,
+ "name": 8617,
+ "##のて": 8618,
+ "##pe": 8619,
+ "##ine": 8620,
+ "max": 8621,
+ "1987": 8622,
+ "8000": 8623,
+ "uber": 8624,
+ "##mi": 8625,
+ "##ton": 8626,
+ "wordpress": 8627,
+ "office": 8628,
+ "1986": 8629,
+ "1985": 8630,
+ "##ment": 8631,
+ "107": 8632,
+ "bd": 8633,
+ "win10": 8634,
+ "##ld": 8635,
+ "##li": 8636,
+ "gmail": 8637,
+ "bb": 8638,
+ "dior": 8639,
+ "##rs": 8640,
+ "##ri": 8641,
+ "##rd": 8642,
+ "##ます": 8643,
+ "up": 8644,
+ "cad": 8645,
+ "##®": 8646,
+ "dr": 8647,
+ "して": 8648,
+ "read": 8649,
+ "##21": 8650,
+ "をお": 8651,
+ "##io": 8652,
+ "##99": 8653,
+ "url": 8654,
+ "1984": 8655,
+ "pvc": 8656,
+ "paypal": 8657,
+ "show": 8658,
+ "policy": 8659,
+ "##40": 8660,
+ "##ty": 8661,
+ "##18": 8662,
+ "with": 8663,
+ "##★": 8664,
+ "##01": 8665,
+ "txt": 8666,
+ "102": 8667,
+ "##ba": 8668,
+ "dna": 8669,
+ "from": 8670,
+ "post": 8671,
+ "mini": 8672,
+ "ar": 8673,
+ "taiwan": 8674,
+ "john": 8675,
+ "##ga": 8676,
+ "privacy": 8677,
+ "agoda": 8678,
+ "##13": 8679,
+ "##ny": 8680,
+ "word": 8681,
+ "##24": 8682,
+ "##22": 8683,
+ "##by": 8684,
+ "##ur": 8685,
+ "##hz": 8686,
+ "1982": 8687,
+ "##ang": 8688,
+ "265": 8689,
+ "cookie": 8690,
+ "netscape": 8691,
+ "108": 8692,
+ "##ka": 8693,
+ "##~": 8694,
+ "##ad": 8695,
+ "house": 8696,
+ "share": 8697,
+ "note": 8698,
+ "ibm": 8699,
+ "code": 8700,
+ "hello": 8701,
+ "nike": 8702,
+ "sim": 8703,
+ "survey": 8704,
+ "##016": 8705,
+ "1979": 8706,
+ "1950": 8707,
+ "wikia": 8708,
+ "##32": 8709,
+ "##017": 8710,
+ "5g": 8711,
+ "cbc": 8712,
+ "##tor": 8713,
+ "##kg": 8714,
+ "1983": 8715,
+ "##rt": 8716,
+ "##14": 8717,
+ "campaign": 8718,
+ "store": 8719,
+ "2500": 8720,
+ "os": 8721,
+ "##ct": 8722,
+ "##ts": 8723,
+ "##°": 8724,
+ "170": 8725,
+ "api": 8726,
+ "##ns": 8727,
+ "365": 8728,
+ "excel": 8729,
+ "##な": 8730,
+ "##ao": 8731,
+ "##ら": 8732,
+ "##し": 8733,
+ "~~": 8734,
+ "##nd": 8735,
+ "university": 8736,
+ "163": 8737,
+ "には": 8738,
+ "518": 8739,
+ "##70": 8740,
+ "##ya": 8741,
+ "##il": 8742,
+ "##25": 8743,
+ "pierre": 8744,
+ "ipo": 8745,
+ "0020": 8746,
+ "897": 8747,
+ "##23": 8748,
+ "hotels": 8749,
+ "##ian": 8750,
+ "のお": 8751,
+ "125": 8752,
+ "years": 8753,
+ "6606": 8754,
+ "##ers": 8755,
+ "##26": 8756,
+ "high": 8757,
+ "##day": 8758,
+ "time": 8759,
+ "##ay": 8760,
+ "bug": 8761,
+ "##line": 8762,
+ "##く": 8763,
+ "##す": 8764,
+ "##be": 8765,
+ "xp": 8766,
+ "talk2yam": 8767,
+ "yamservice": 8768,
+ "10000": 8769,
+ "coco": 8770,
+ "##dy": 8771,
+ "sony": 8772,
+ "##ies": 8773,
+ "1978": 8774,
+ "microsoft": 8775,
+ "david": 8776,
+ "people": 8777,
+ "##ha": 8778,
+ "1960": 8779,
+ "instagram": 8780,
+ "intel": 8781,
+ "その": 8782,
+ "##ot": 8783,
+ "iso": 8784,
+ "1981": 8785,
+ "##va": 8786,
+ "115": 8787,
+ "##mo": 8788,
+ "##land": 8789,
+ "xxx": 8790,
+ "man": 8791,
+ "co": 8792,
+ "ltxsw": 8793,
+ "##ation": 8794,
+ "baby": 8795,
+ "220": 8796,
+ "##pa": 8797,
+ "##ol": 8798,
+ "1945": 8799,
+ "7000": 8800,
+ "tag": 8801,
+ "450": 8802,
+ "##ue": 8803,
+ "msn": 8804,
+ "##31": 8805,
+ "oppo": 8806,
+ "##ト": 8807,
+ "##ca": 8808,
+ "control": 8809,
+ "##om": 8810,
+ "st": 8811,
+ "chrome": 8812,
+ "##ure": 8813,
+ "##ん": 8814,
+ "be": 8815,
+ "##き": 8816,
+ "lol": 8817,
+ "##19": 8818,
+ "した": 8819,
+ "##bo": 8820,
+ "240": 8821,
+ "lady": 8822,
+ "##100": 8823,
+ "##way": 8824,
+ "##から": 8825,
+ "4600": 8826,
+ "##ko": 8827,
+ "##do": 8828,
+ "##un": 8829,
+ "4s": 8830,
+ "corporation": 8831,
+ "168": 8832,
+ "##ni": 8833,
+ "herme": 8834,
+ "##28": 8835,
+ "cp": 8836,
+ "978": 8837,
+ "##up": 8838,
+ "##06": 8839,
+ "ui": 8840,
+ "##ds": 8841,
+ "ppt": 8842,
+ "admin": 8843,
+ "three": 8844,
+ "します": 8845,
+ "bbc": 8846,
+ "re": 8847,
+ "128": 8848,
+ "##48": 8849,
+ "ca": 8850,
+ "##015": 8851,
+ "##35": 8852,
+ "hp": 8853,
+ "##ee": 8854,
+ "tpp": 8855,
+ "##た": 8856,
+ "##ive": 8857,
+ "××": 8858,
+ "root": 8859,
+ "##cc": 8860,
+ "##ました": 8861,
+ "##ble": 8862,
+ "##ity": 8863,
+ "adobe": 8864,
+ "park": 8865,
+ "114": 8866,
+ "et": 8867,
+ "oled": 8868,
+ "city": 8869,
+ "##ex": 8870,
+ "##ler": 8871,
+ "##ap": 8872,
+ "china": 8873,
+ "##book": 8874,
+ "20000": 8875,
+ "view": 8876,
+ "##ice": 8877,
+ "global": 8878,
+ "##km": 8879,
+ "your": 8880,
+ "hong": 8881,
+ "##mg": 8882,
+ "out": 8883,
+ "##ms": 8884,
+ "ng": 8885,
+ "ebay": 8886,
+ "##29": 8887,
+ "menu": 8888,
+ "ubuntu": 8889,
+ "##cy": 8890,
+ "rom": 8891,
+ "##view": 8892,
+ "open": 8893,
+ "ktv": 8894,
+ "do": 8895,
+ "server": 8896,
+ "##lo": 8897,
+ "if": 8898,
+ "english": 8899,
+ "##ね": 8900,
+ "##5": 8901,
+ "##oo": 8902,
+ "1600": 8903,
+ "##02": 8904,
+ "step1": 8905,
+ "kong": 8906,
+ "club": 8907,
+ "135": 8908,
+ "july": 8909,
+ "inc": 8910,
+ "1976": 8911,
+ "mr": 8912,
+ "hi": 8913,
+ "##net": 8914,
+ "touch": 8915,
+ "##ls": 8916,
+ "##ii": 8917,
+ "michael": 8918,
+ "lcd": 8919,
+ "##05": 8920,
+ "##33": 8921,
+ "phone": 8922,
+ "james": 8923,
+ "step2": 8924,
+ "1300": 8925,
+ "ios9": 8926,
+ "##box": 8927,
+ "dc": 8928,
+ "##2": 8929,
+ "##ley": 8930,
+ "samsung": 8931,
+ "111": 8932,
+ "280": 8933,
+ "pokemon": 8934,
+ "css": 8935,
+ "##ent": 8936,
+ "##les": 8937,
+ "いいえ": 8938,
+ "##1": 8939,
+ "s8": 8940,
+ "atom": 8941,
+ "play": 8942,
+ "bmw": 8943,
+ "##said": 8944,
+ "sa": 8945,
+ "etf": 8946,
+ "ctrl": 8947,
+ "♥yoyo♥": 8948,
+ "##55": 8949,
+ "2025": 8950,
+ "##2014": 8951,
+ "##66": 8952,
+ "adidas": 8953,
+ "amazon": 8954,
+ "1958": 8955,
+ "##ber": 8956,
+ "##ner": 8957,
+ "visa": 8958,
+ "##77": 8959,
+ "##der": 8960,
+ "1800": 8961,
+ "connectivity": 8962,
+ "##hi": 8963,
+ "firefox": 8964,
+ "109": 8965,
+ "118": 8966,
+ "hr": 8967,
+ "so": 8968,
+ "style": 8969,
+ "mark": 8970,
+ "pop": 8971,
+ "ol": 8972,
+ "skip": 8973,
+ "1975": 8974,
+ "as": 8975,
+ "##27": 8976,
+ "##ir": 8977,
+ "##61": 8978,
+ "190": 8979,
+ "mba": 8980,
+ "##う": 8981,
+ "##ai": 8982,
+ "le": 8983,
+ "##ver": 8984,
+ "1900": 8985,
+ "cafe2017": 8986,
+ "lte": 8987,
+ "super": 8988,
+ "113": 8989,
+ "129": 8990,
+ "##ron": 8991,
+ "amd": 8992,
+ "like": 8993,
+ "##☆": 8994,
+ "are": 8995,
+ "##ster": 8996,
+ "we": 8997,
+ "##sk": 8998,
+ "paul": 8999,
+ "data": 9000,
+ "international": 9001,
+ "##ft": 9002,
+ "longchamp": 9003,
+ "ssd": 9004,
+ "good": 9005,
+ "##ート": 9006,
+ "##ti": 9007,
+ "reply": 9008,
+ "##my": 9009,
+ "↓↓↓": 9010,
+ "apr": 9011,
+ "star": 9012,
+ "##ker": 9013,
+ "source": 9014,
+ "136": 9015,
+ "js": 9016,
+ "112": 9017,
+ "get": 9018,
+ "force": 9019,
+ "photo": 9020,
+ "##one": 9021,
+ "126": 9022,
+ "##2013": 9023,
+ "##ow": 9024,
+ "link": 9025,
+ "bbs": 9026,
+ "1972": 9027,
+ "goods": 9028,
+ "##lin": 9029,
+ "python": 9030,
+ "119": 9031,
+ "##ip": 9032,
+ "game": 9033,
+ "##ics": 9034,
+ "##ません": 9035,
+ "blue": 9036,
+ "##●": 9037,
+ "520": 9038,
+ "##45": 9039,
+ "page": 9040,
+ "itunes": 9041,
+ "##03": 9042,
+ "1955": 9043,
+ "260": 9044,
+ "1968": 9045,
+ "gt": 9046,
+ "gif": 9047,
+ "618": 9048,
+ "##ff": 9049,
+ "##47": 9050,
+ "group": 9051,
+ "くたさい": 9052,
+ "about": 9053,
+ "bar": 9054,
+ "ganji": 9055,
+ "##nce": 9056,
+ "music": 9057,
+ "lee": 9058,
+ "not": 9059,
+ "1977": 9060,
+ "1971": 9061,
+ "1973": 9062,
+ "##per": 9063,
+ "an": 9064,
+ "faq": 9065,
+ "comment": 9066,
+ "##って": 9067,
+ "days": 9068,
+ "##ock": 9069,
+ "116": 9070,
+ "##bs": 9071,
+ "1974": 9072,
+ "1969": 9073,
+ "v1": 9074,
+ "player": 9075,
+ "1956": 9076,
+ "xbox": 9077,
+ "sql": 9078,
+ "fm": 9079,
+ "f1": 9080,
+ "139": 9081,
+ "##ah": 9082,
+ "210": 9083,
+ "##lv": 9084,
+ "##mp": 9085,
+ "##000": 9086,
+ "melody": 9087,
+ "1957": 9088,
+ "##3": 9089,
+ "550": 9090,
+ "17life": 9091,
+ "199": 9092,
+ "1966": 9093,
+ "xml": 9094,
+ "market": 9095,
+ "##au": 9096,
+ "##71": 9097,
+ "999": 9098,
+ "##04": 9099,
+ "what": 9100,
+ "gl": 9101,
+ "##95": 9102,
+ "##age": 9103,
+ "tips": 9104,
+ "##68": 9105,
+ "book": 9106,
+ "##ting": 9107,
+ "mysql": 9108,
+ "can": 9109,
+ "1959": 9110,
+ "230": 9111,
+ "##ung": 9112,
+ "wonderland": 9113,
+ "watch": 9114,
+ "10℃": 9115,
+ "##ction": 9116,
+ "9000": 9117,
+ "mar": 9118,
+ "mobile": 9119,
+ "1946": 9120,
+ "1962": 9121,
+ "article": 9122,
+ "##db": 9123,
+ "part": 9124,
+ "▲top": 9125,
+ "party": 9126,
+ "って": 9127,
+ "1967": 9128,
+ "1964": 9129,
+ "1948": 9130,
+ "##07": 9131,
+ "##ore": 9132,
+ "##op": 9133,
+ "この": 9134,
+ "dj": 9135,
+ "##78": 9136,
+ "##38": 9137,
+ "010": 9138,
+ "main": 9139,
+ "225": 9140,
+ "1965": 9141,
+ "##ong": 9142,
+ "art": 9143,
+ "320": 9144,
+ "ad": 9145,
+ "134": 9146,
+ "020": 9147,
+ "##73": 9148,
+ "117": 9149,
+ "pm2": 9150,
+ "japan": 9151,
+ "228": 9152,
+ "##08": 9153,
+ "ts": 9154,
+ "1963": 9155,
+ "##ica": 9156,
+ "der": 9157,
+ "sm": 9158,
+ "##36": 9159,
+ "2019": 9160,
+ "##wa": 9161,
+ "ct": 9162,
+ "##7": 9163,
+ "##や": 9164,
+ "##64": 9165,
+ "1937": 9166,
+ "homemesh": 9167,
+ "search": 9168,
+ "##85": 9169,
+ "##れは": 9170,
+ "##tv": 9171,
+ "##di": 9172,
+ "macbook": 9173,
+ "##9": 9174,
+ "##くたさい": 9175,
+ "service": 9176,
+ "##♥": 9177,
+ "type": 9178,
+ "った": 9179,
+ "750": 9180,
+ "##ier": 9181,
+ "##si": 9182,
+ "##75": 9183,
+ "##います": 9184,
+ "##ok": 9185,
+ "best": 9186,
+ "##ット": 9187,
+ "goris": 9188,
+ "lock": 9189,
+ "##った": 9190,
+ "cf": 9191,
+ "3m": 9192,
+ "big": 9193,
+ "##ut": 9194,
+ "ftp": 9195,
+ "carol": 9196,
+ "##vi": 9197,
+ "10": 9198,
+ "1961": 9199,
+ "happy": 9200,
+ "sd": 9201,
+ "##ac": 9202,
+ "122": 9203,
+ "anti": 9204,
+ "pe": 9205,
+ "cnn": 9206,
+ "iii": 9207,
+ "1920": 9208,
+ "138": 9209,
+ "##ラ": 9210,
+ "1940": 9211,
+ "esp": 9212,
+ "jan": 9213,
+ "tags": 9214,
+ "##98": 9215,
+ "##51": 9216,
+ "august": 9217,
+ "vol": 9218,
+ "##86": 9219,
+ "154": 9220,
+ "##™": 9221,
+ "##fs": 9222,
+ "##れ": 9223,
+ "##sion": 9224,
+ "design": 9225,
+ "ac": 9226,
+ "##ム": 9227,
+ "press": 9228,
+ "jordan": 9229,
+ "ppp": 9230,
+ "that": 9231,
+ "key": 9232,
+ "check": 9233,
+ "##6": 9234,
+ "##tt": 9235,
+ "##㎡": 9236,
+ "1080p": 9237,
+ "##lt": 9238,
+ "power": 9239,
+ "##42": 9240,
+ "1952": 9241,
+ "##bc": 9242,
+ "vivi": 9243,
+ "##ック": 9244,
+ "he": 9245,
+ "133": 9246,
+ "121": 9247,
+ "jpg": 9248,
+ "##rry": 9249,
+ "201": 9250,
+ "175": 9251,
+ "3500": 9252,
+ "1947": 9253,
+ "nb": 9254,
+ "##ted": 9255,
+ "##rn": 9256,
+ "しています": 9257,
+ "1954": 9258,
+ "usd": 9259,
+ "##t00": 9260,
+ "master": 9261,
+ "##ンク": 9262,
+ "001": 9263,
+ "model": 9264,
+ "##58": 9265,
+ "al": 9266,
+ "##09": 9267,
+ "1953": 9268,
+ "##34": 9269,
+ "ram": 9270,
+ "goo": 9271,
+ "ても": 9272,
+ "##ui": 9273,
+ "127": 9274,
+ "1930": 9275,
+ "red": 9276,
+ "##ary": 9277,
+ "rpg": 9278,
+ "item": 9279,
+ "##pm": 9280,
+ "##41": 9281,
+ "270": 9282,
+ "##za": 9283,
+ "project": 9284,
+ "##2012": 9285,
+ "hot": 9286,
+ "td": 9287,
+ "blogabstract": 9288,
+ "##ger": 9289,
+ "##62": 9290,
+ "650": 9291,
+ "##44": 9292,
+ "gr2": 9293,
+ "##します": 9294,
+ "##m": 9295,
+ "black": 9296,
+ "electronic": 9297,
+ "nfc": 9298,
+ "year": 9299,
+ "asus": 9300,
+ "また": 9301,
+ "html5": 9302,
+ "cindy": 9303,
+ "##hd": 9304,
+ "m3": 9305,
+ "132": 9306,
+ "esc": 9307,
+ "##od": 9308,
+ "booking": 9309,
+ "##53": 9310,
+ "fed": 9311,
+ "tvb": 9312,
+ "##81": 9313,
+ "##ina": 9314,
+ "mit": 9315,
+ "165": 9316,
+ "##いる": 9317,
+ "chan": 9318,
+ "192": 9319,
+ "distribution": 9320,
+ "next": 9321,
+ "になる": 9322,
+ "peter": 9323,
+ "bios": 9324,
+ "steam": 9325,
+ "cm": 9326,
+ "1941": 9327,
+ "にも": 9328,
+ "pk10": 9329,
+ "##ix": 9330,
+ "##65": 9331,
+ "##91": 9332,
+ "dec": 9333,
+ "nasa": 9334,
+ "##ana": 9335,
+ "icecat": 9336,
+ "00z": 9337,
+ "b1": 9338,
+ "will": 9339,
+ "##46": 9340,
+ "li": 9341,
+ "se": 9342,
+ "##ji": 9343,
+ "##み": 9344,
+ "##ard": 9345,
+ "oct": 9346,
+ "##ain": 9347,
+ "jp": 9348,
+ "##ze": 9349,
+ "##bi": 9350,
+ "cio": 9351,
+ "##56": 9352,
+ "smart": 9353,
+ "h5": 9354,
+ "##39": 9355,
+ "##port": 9356,
+ "curve": 9357,
+ "vpn": 9358,
+ "##nm": 9359,
+ "##dia": 9360,
+ "utc": 9361,
+ "##あり": 9362,
+ "12345678910": 9363,
+ "##52": 9364,
+ "rmvb": 9365,
+ "chanel": 9366,
+ "a4": 9367,
+ "miss": 9368,
+ "##and": 9369,
+ "##im": 9370,
+ "media": 9371,
+ "who": 9372,
+ "##63": 9373,
+ "she": 9374,
+ "girl": 9375,
+ "5s": 9376,
+ "124": 9377,
+ "vera": 9378,
+ "##して": 9379,
+ "class": 9380,
+ "vivo": 9381,
+ "king": 9382,
+ "##フ": 9383,
+ "##ei": 9384,
+ "national": 9385,
+ "ab": 9386,
+ "1951": 9387,
+ "5cm": 9388,
+ "888": 9389,
+ "145": 9390,
+ "ipod": 9391,
+ "ap": 9392,
+ "1100": 9393,
+ "5mm": 9394,
+ "211": 9395,
+ "ms": 9396,
+ "2756": 9397,
+ "##69": 9398,
+ "mp4": 9399,
+ "msci": 9400,
+ "##po": 9401,
+ "##89": 9402,
+ "131": 9403,
+ "mg": 9404,
+ "index": 9405,
+ "380": 9406,
+ "##bit": 9407,
+ "##out": 9408,
+ "##zz": 9409,
+ "##97": 9410,
+ "##67": 9411,
+ "158": 9412,
+ "apec": 9413,
+ "##8": 9414,
+ "photoshop": 9415,
+ "opec": 9416,
+ "¥799": 9417,
+ "ては": 9418,
+ "##96": 9419,
+ "##tes": 9420,
+ "##ast": 9421,
+ "2g": 9422,
+ "○○": 9423,
+ "##ール": 9424,
+ "¥2899": 9425,
+ "##ling": 9426,
+ "##よ": 9427,
+ "##ory": 9428,
+ "1938": 9429,
+ "##ical": 9430,
+ "kitty": 9431,
+ "content": 9432,
+ "##43": 9433,
+ "step3": 9434,
+ "##cn": 9435,
+ "win8": 9436,
+ "155": 9437,
+ "vc": 9438,
+ "1400": 9439,
+ "iphone7": 9440,
+ "robert": 9441,
+ "##した": 9442,
+ "tcl": 9443,
+ "137": 9444,
+ "beauty": 9445,
+ "##87": 9446,
+ "en": 9447,
+ "dollars": 9448,
+ "##ys": 9449,
+ "##oc": 9450,
+ "step": 9451,
+ "pay": 9452,
+ "yy": 9453,
+ "a1": 9454,
+ "##2011": 9455,
+ "##lly": 9456,
+ "##ks": 9457,
+ "##♪": 9458,
+ "1939": 9459,
+ "188": 9460,
+ "download": 9461,
+ "1944": 9462,
+ "sep": 9463,
+ "exe": 9464,
+ "ph": 9465,
+ "います": 9466,
+ "school": 9467,
+ "gb": 9468,
+ "center": 9469,
+ "pr": 9470,
+ "street": 9471,
+ "##board": 9472,
+ "uv": 9473,
+ "##37": 9474,
+ "##lan": 9475,
+ "winrar": 9476,
+ "##que": 9477,
+ "##ua": 9478,
+ "##com": 9479,
+ "1942": 9480,
+ "1936": 9481,
+ "480": 9482,
+ "gpu": 9483,
+ "##4": 9484,
+ "ettoday": 9485,
+ "fu": 9486,
+ "tom": 9487,
+ "##54": 9488,
+ "##ren": 9489,
+ "##via": 9490,
+ "149": 9491,
+ "##72": 9492,
+ "b2b": 9493,
+ "144": 9494,
+ "##79": 9495,
+ "##tch": 9496,
+ "rose": 9497,
+ "arm": 9498,
+ "mb": 9499,
+ "##49": 9500,
+ "##ial": 9501,
+ "##nn": 9502,
+ "nvidia": 9503,
+ "step4": 9504,
+ "mvp": 9505,
+ "00㎡": 9506,
+ "york": 9507,
+ "156": 9508,
+ "##イ": 9509,
+ "how": 9510,
+ "cpi": 9511,
+ "591": 9512,
+ "2765": 9513,
+ "gov": 9514,
+ "kg": 9515,
+ "joe": 9516,
+ "##xx": 9517,
+ "mandy": 9518,
+ "pa": 9519,
+ "##ser": 9520,
+ "copyright": 9521,
+ "fashion": 9522,
+ "1935": 9523,
+ "don": 9524,
+ "##け": 9525,
+ "ecu": 9526,
+ "##ist": 9527,
+ "##art": 9528,
+ "erp": 9529,
+ "wap": 9530,
+ "have": 9531,
+ "##lm": 9532,
+ "talk": 9533,
+ "##ek": 9534,
+ "##ning": 9535,
+ "##if": 9536,
+ "ch": 9537,
+ "##ite": 9538,
+ "video": 9539,
+ "1943": 9540,
+ "cs": 9541,
+ "san": 9542,
+ "iot": 9543,
+ "look": 9544,
+ "##84": 9545,
+ "##2010": 9546,
+ "##ku": 9547,
+ "october": 9548,
+ "##ux": 9549,
+ "trump": 9550,
+ "##hs": 9551,
+ "##ide": 9552,
+ "box": 9553,
+ "141": 9554,
+ "first": 9555,
+ "##ins": 9556,
+ "april": 9557,
+ "##ight": 9558,
+ "##83": 9559,
+ "185": 9560,
+ "angel": 9561,
+ "protected": 9562,
+ "aa": 9563,
+ "151": 9564,
+ "162": 9565,
+ "x1": 9566,
+ "m2": 9567,
+ "##fe": 9568,
+ "##×": 9569,
+ "##ho": 9570,
+ "size": 9571,
+ "143": 9572,
+ "min": 9573,
+ "ofo": 9574,
+ "fun": 9575,
+ "gomaji": 9576,
+ "ex": 9577,
+ "hdmi": 9578,
+ "food": 9579,
+ "dns": 9580,
+ "march": 9581,
+ "chris": 9582,
+ "kevin": 9583,
+ "##のか": 9584,
+ "##lla": 9585,
+ "##pp": 9586,
+ "##ec": 9587,
+ "ag": 9588,
+ "ems": 9589,
+ "6s": 9590,
+ "720p": 9591,
+ "##rm": 9592,
+ "##ham": 9593,
+ "off": 9594,
+ "##92": 9595,
+ "asp": 9596,
+ "team": 9597,
+ "fandom": 9598,
+ "ed": 9599,
+ "299": 9600,
+ "▌♥": 9601,
+ "##ell": 9602,
+ "info": 9603,
+ "されています": 9604,
+ "##82": 9605,
+ "sina": 9606,
+ "4066": 9607,
+ "161": 9608,
+ "##able": 9609,
+ "##ctor": 9610,
+ "330": 9611,
+ "399": 9612,
+ "315": 9613,
+ "dll": 9614,
+ "rights": 9615,
+ "ltd": 9616,
+ "idc": 9617,
+ "jul": 9618,
+ "3kg": 9619,
+ "1927": 9620,
+ "142": 9621,
+ "ma": 9622,
+ "surface": 9623,
+ "##76": 9624,
+ "##ク": 9625,
+ "~~~": 9626,
+ "304": 9627,
+ "mall": 9628,
+ "eps": 9629,
+ "146": 9630,
+ "green": 9631,
+ "##59": 9632,
+ "map": 9633,
+ "space": 9634,
+ "donald": 9635,
+ "v2": 9636,
+ "sodu": 9637,
+ "##light": 9638,
+ "1931": 9639,
+ "148": 9640,
+ "1700": 9641,
+ "まて": 9642,
+ "310": 9643,
+ "reserved": 9644,
+ "htm": 9645,
+ "##han": 9646,
+ "##57": 9647,
+ "2d": 9648,
+ "178": 9649,
+ "mod": 9650,
+ "##ise": 9651,
+ "##tions": 9652,
+ "152": 9653,
+ "ti": 9654,
+ "##shi": 9655,
+ "doc": 9656,
+ "1933": 9657,
+ "icp": 9658,
+ "055": 9659,
+ "wang": 9660,
+ "##ram": 9661,
+ "shopping": 9662,
+ "aug": 9663,
+ "##pi": 9664,
+ "##well": 9665,
+ "now": 9666,
+ "wam": 9667,
+ "b2": 9668,
+ "からお": 9669,
+ "##hu": 9670,
+ "236": 9671,
+ "1928": 9672,
+ "##gb": 9673,
+ "266": 9674,
+ "f2": 9675,
+ "##93": 9676,
+ "153": 9677,
+ "mix": 9678,
+ "##ef": 9679,
+ "##uan": 9680,
+ "bwl": 9681,
+ "##plus": 9682,
+ "##res": 9683,
+ "core": 9684,
+ "##ess": 9685,
+ "tea": 9686,
+ "5℃": 9687,
+ "hktvmall": 9688,
+ "nhk": 9689,
+ "##ate": 9690,
+ "list": 9691,
+ "##ese": 9692,
+ "301": 9693,
+ "feb": 9694,
+ "4m": 9695,
+ "inn": 9696,
+ "ての": 9697,
+ "nov": 9698,
+ "159": 9699,
+ "12345": 9700,
+ "daniel": 9701,
+ "##ci": 9702,
+ "pass": 9703,
+ "##bet": 9704,
+ "##nk": 9705,
+ "coffee": 9706,
+ "202": 9707,
+ "ssl": 9708,
+ "airbnb": 9709,
+ "##ute": 9710,
+ "fbi": 9711,
+ "woshipm": 9712,
+ "skype": 9713,
+ "ea": 9714,
+ "cg": 9715,
+ "sp": 9716,
+ "##fc": 9717,
+ "##www": 9718,
+ "yes": 9719,
+ "edge": 9720,
+ "alt": 9721,
+ "007": 9722,
+ "##94": 9723,
+ "fpga": 9724,
+ "##ght": 9725,
+ "##gs": 9726,
+ "iso9001": 9727,
+ "さい": 9728,
+ "##ile": 9729,
+ "##wood": 9730,
+ "##uo": 9731,
+ "image": 9732,
+ "lin": 9733,
+ "icon": 9734,
+ "american": 9735,
+ "##em": 9736,
+ "1932": 9737,
+ "set": 9738,
+ "says": 9739,
+ "##king": 9740,
+ "##tive": 9741,
+ "blogger": 9742,
+ "##74": 9743,
+ "なと": 9744,
+ "256": 9745,
+ "147": 9746,
+ "##ox": 9747,
+ "##zy": 9748,
+ "##red": 9749,
+ "##ium": 9750,
+ "##lf": 9751,
+ "nokia": 9752,
+ "claire": 9753,
+ "##リ": 9754,
+ "##ding": 9755,
+ "november": 9756,
+ "lohas": 9757,
+ "##500": 9758,
+ "##tic": 9759,
+ "##マ": 9760,
+ "##cs": 9761,
+ "##ある": 9762,
+ "##che": 9763,
+ "##ire": 9764,
+ "##gy": 9765,
+ "##ult": 9766,
+ "db": 9767,
+ "january": 9768,
+ "win": 9769,
+ "##カ": 9770,
+ "166": 9771,
+ "road": 9772,
+ "ptt": 9773,
+ "##ま": 9774,
+ "##つ": 9775,
+ "198": 9776,
+ "##fa": 9777,
+ "##mer": 9778,
+ "anna": 9779,
+ "pchome": 9780,
+ "はい": 9781,
+ "udn": 9782,
+ "ef": 9783,
+ "420": 9784,
+ "##time": 9785,
+ "##tte": 9786,
+ "2030": 9787,
+ "##ア": 9788,
+ "g20": 9789,
+ "white": 9790,
+ "かかります": 9791,
+ "1929": 9792,
+ "308": 9793,
+ "garden": 9794,
+ "eleven": 9795,
+ "di": 9796,
+ "##おります": 9797,
+ "chen": 9798,
+ "309b": 9799,
+ "777": 9800,
+ "172": 9801,
+ "young": 9802,
+ "cosplay": 9803,
+ "ちてない": 9804,
+ "4500": 9805,
+ "bat": 9806,
+ "##123": 9807,
+ "##tra": 9808,
+ "##ては": 9809,
+ "kindle": 9810,
+ "npc": 9811,
+ "steve": 9812,
+ "etc": 9813,
+ "##ern": 9814,
+ "##|": 9815,
+ "call": 9816,
+ "xperia": 9817,
+ "ces": 9818,
+ "travel": 9819,
+ "sk": 9820,
+ "s7": 9821,
+ "##ous": 9822,
+ "1934": 9823,
+ "##int": 9824,
+ "みいたたけます": 9825,
+ "183": 9826,
+ "edu": 9827,
+ "file": 9828,
+ "cho": 9829,
+ "qr": 9830,
+ "##car": 9831,
+ "##our": 9832,
+ "186": 9833,
+ "##ant": 9834,
+ "##d": 9835,
+ "eric": 9836,
+ "1914": 9837,
+ "rends": 9838,
+ "##jo": 9839,
+ "##する": 9840,
+ "mastercard": 9841,
+ "##2000": 9842,
+ "kb": 9843,
+ "##min": 9844,
+ "290": 9845,
+ "##ino": 9846,
+ "vista": 9847,
+ "##ris": 9848,
+ "##ud": 9849,
+ "jack": 9850,
+ "2400": 9851,
+ "##set": 9852,
+ "169": 9853,
+ "pos": 9854,
+ "1912": 9855,
+ "##her": 9856,
+ "##ou": 9857,
+ "taipei": 9858,
+ "しく": 9859,
+ "205": 9860,
+ "beta": 9861,
+ "##ませんか": 9862,
+ "232": 9863,
+ "##fi": 9864,
+ "express": 9865,
+ "255": 9866,
+ "body": 9867,
+ "##ill": 9868,
+ "aphojoy": 9869,
+ "user": 9870,
+ "december": 9871,
+ "meiki": 9872,
+ "##ick": 9873,
+ "tweet": 9874,
+ "richard": 9875,
+ "##av": 9876,
+ "##ᆫ": 9877,
+ "iphone6": 9878,
+ "##dd": 9879,
+ "ちてすか": 9880,
+ "views": 9881,
+ "##mark": 9882,
+ "321": 9883,
+ "pd": 9884,
+ "##00": 9885,
+ "times": 9886,
+ "##▲": 9887,
+ "level": 9888,
+ "##ash": 9889,
+ "10g": 9890,
+ "point": 9891,
+ "5l": 9892,
+ "##ome": 9893,
+ "208": 9894,
+ "koreanmall": 9895,
+ "##ak": 9896,
+ "george": 9897,
+ "q2": 9898,
+ "206": 9899,
+ "wma": 9900,
+ "tcp": 9901,
+ "##200": 9902,
+ "スタッフ": 9903,
+ "full": 9904,
+ "mlb": 9905,
+ "##lle": 9906,
+ "##watch": 9907,
+ "tm": 9908,
+ "run": 9909,
+ "179": 9910,
+ "911": 9911,
+ "smith": 9912,
+ "business": 9913,
+ "##und": 9914,
+ "1919": 9915,
+ "color": 9916,
+ "##tal": 9917,
+ "222": 9918,
+ "171": 9919,
+ "##less": 9920,
+ "moon": 9921,
+ "4399": 9922,
+ "##rl": 9923,
+ "update": 9924,
+ "pcb": 9925,
+ "shop": 9926,
+ "499": 9927,
+ "157": 9928,
+ "little": 9929,
+ "なし": 9930,
+ "end": 9931,
+ "##mhz": 9932,
+ "van": 9933,
+ "dsp": 9934,
+ "easy": 9935,
+ "660": 9936,
+ "##house": 9937,
+ "##key": 9938,
+ "history": 9939,
+ "##o": 9940,
+ "oh": 9941,
+ "##001": 9942,
+ "##hy": 9943,
+ "##web": 9944,
+ "oem": 9945,
+ "let": 9946,
+ "was": 9947,
+ "##2009": 9948,
+ "##gg": 9949,
+ "review": 9950,
+ "##wan": 9951,
+ "182": 9952,
+ "##°c": 9953,
+ "203": 9954,
+ "uc": 9955,
+ "title": 9956,
+ "##val": 9957,
+ "united": 9958,
+ "233": 9959,
+ "2021": 9960,
+ "##ons": 9961,
+ "doi": 9962,
+ "trivago": 9963,
+ "overdope": 9964,
+ "sbs": 9965,
+ "##ance": 9966,
+ "##ち": 9967,
+ "grand": 9968,
+ "special": 9969,
+ "573032185": 9970,
+ "imf": 9971,
+ "216": 9972,
+ "wx17house": 9973,
+ "##so": 9974,
+ "##ーム": 9975,
+ "audi": 9976,
+ "##he": 9977,
+ "london": 9978,
+ "william": 9979,
+ "##rp": 9980,
+ "##ake": 9981,
+ "science": 9982,
+ "beach": 9983,
+ "cfa": 9984,
+ "amp": 9985,
+ "ps4": 9986,
+ "880": 9987,
+ "##800": 9988,
+ "##link": 9989,
+ "##hp": 9990,
+ "crm": 9991,
+ "ferragamo": 9992,
+ "bell": 9993,
+ "make": 9994,
+ "##eng": 9995,
+ "195": 9996,
+ "under": 9997,
+ "zh": 9998,
+ "photos": 9999,
+ "2300": 10000,
+ "##style": 10001,
+ "##ント": 10002,
+ "via": 10003,
+ "176": 10004,
+ "da": 10005,
+ "##gi": 10006,
+ "company": 10007,
+ "i7": 10008,
+ "##ray": 10009,
+ "thomas": 10010,
+ "370": 10011,
+ "ufo": 10012,
+ "i5": 10013,
+ "##max": 10014,
+ "plc": 10015,
+ "ben": 10016,
+ "back": 10017,
+ "research": 10018,
+ "8g": 10019,
+ "173": 10020,
+ "mike": 10021,
+ "##pc": 10022,
+ "##ッフ": 10023,
+ "september": 10024,
+ "189": 10025,
+ "##ace": 10026,
+ "vps": 10027,
+ "february": 10028,
+ "167": 10029,
+ "pantos": 10030,
+ "wp": 10031,
+ "lisa": 10032,
+ "1921": 10033,
+ "★★": 10034,
+ "jquery": 10035,
+ "night": 10036,
+ "long": 10037,
+ "offer": 10038,
+ "##berg": 10039,
+ "##news": 10040,
+ "1911": 10041,
+ "##いて": 10042,
+ "ray": 10043,
+ "fks": 10044,
+ "wto": 10045,
+ "せます": 10046,
+ "over": 10047,
+ "164": 10048,
+ "340": 10049,
+ "##all": 10050,
+ "##rus": 10051,
+ "1924": 10052,
+ "##888": 10053,
+ "##works": 10054,
+ "blogtitle": 10055,
+ "loftpermalink": 10056,
+ "##→": 10057,
+ "187": 10058,
+ "martin": 10059,
+ "test": 10060,
+ "ling": 10061,
+ "km": 10062,
+ "##め": 10063,
+ "15000": 10064,
+ "fda": 10065,
+ "v3": 10066,
+ "##ja": 10067,
+ "##ロ": 10068,
+ "wedding": 10069,
+ "かある": 10070,
+ "outlet": 10071,
+ "family": 10072,
+ "##ea": 10073,
+ "をこ": 10074,
+ "##top": 10075,
+ "story": 10076,
+ "##ness": 10077,
+ "salvatore": 10078,
+ "##lu": 10079,
+ "204": 10080,
+ "swift": 10081,
+ "215": 10082,
+ "room": 10083,
+ "している": 10084,
+ "oracle": 10085,
+ "##ul": 10086,
+ "1925": 10087,
+ "sam": 10088,
+ "b2c": 10089,
+ "week": 10090,
+ "pi": 10091,
+ "rock": 10092,
+ "##のは": 10093,
+ "##a": 10094,
+ "##けと": 10095,
+ "##ean": 10096,
+ "##300": 10097,
+ "##gle": 10098,
+ "cctv": 10099,
+ "after": 10100,
+ "chinese": 10101,
+ "##back": 10102,
+ "powered": 10103,
+ "x2": 10104,
+ "##tan": 10105,
+ "1918": 10106,
+ "##nes": 10107,
+ "##イン": 10108,
+ "canon": 10109,
+ "only": 10110,
+ "181": 10111,
+ "##zi": 10112,
+ "##las": 10113,
+ "say": 10114,
+ "##oe": 10115,
+ "184": 10116,
+ "##sd": 10117,
+ "221": 10118,
+ "##bot": 10119,
+ "##world": 10120,
+ "##zo": 10121,
+ "sky": 10122,
+ "made": 10123,
+ "top100": 10124,
+ "just": 10125,
+ "1926": 10126,
+ "pmi": 10127,
+ "802": 10128,
+ "234": 10129,
+ "gap": 10130,
+ "##vr": 10131,
+ "177": 10132,
+ "les": 10133,
+ "174": 10134,
+ "▲topoct": 10135,
+ "ball": 10136,
+ "vogue": 10137,
+ "vi": 10138,
+ "ing": 10139,
+ "ofweek": 10140,
+ "cos": 10141,
+ "##list": 10142,
+ "##ort": 10143,
+ "▲topmay": 10144,
+ "##なら": 10145,
+ "##lon": 10146,
+ "として": 10147,
+ "last": 10148,
+ "##tc": 10149,
+ "##of": 10150,
+ "##bus": 10151,
+ "##gen": 10152,
+ "real": 10153,
+ "eva": 10154,
+ "##コ": 10155,
+ "a3": 10156,
+ "nas": 10157,
+ "##lie": 10158,
+ "##ria": 10159,
+ "##coin": 10160,
+ "##bt": 10161,
+ "▲topapr": 10162,
+ "his": 10163,
+ "212": 10164,
+ "cat": 10165,
+ "nata": 10166,
+ "vive": 10167,
+ "health": 10168,
+ "⋯⋯": 10169,
+ "drive": 10170,
+ "sir": 10171,
+ "▲topmar": 10172,
+ "du": 10173,
+ "cup": 10174,
+ "##カー": 10175,
+ "##ook": 10176,
+ "##よう": 10177,
+ "##sy": 10178,
+ "alex": 10179,
+ "msg": 10180,
+ "tour": 10181,
+ "しました": 10182,
+ "3ce": 10183,
+ "##word": 10184,
+ "193": 10185,
+ "ebooks": 10186,
+ "r8": 10187,
+ "block": 10188,
+ "318": 10189,
+ "##より": 10190,
+ "2200": 10191,
+ "nice": 10192,
+ "pvp": 10193,
+ "207": 10194,
+ "months": 10195,
+ "1905": 10196,
+ "rewards": 10197,
+ "##ther": 10198,
+ "1917": 10199,
+ "0800": 10200,
+ "##xi": 10201,
+ "##チ": 10202,
+ "##sc": 10203,
+ "micro": 10204,
+ "850": 10205,
+ "gg": 10206,
+ "blogfp": 10207,
+ "op": 10208,
+ "1922": 10209,
+ "daily": 10210,
+ "m1": 10211,
+ "264": 10212,
+ "true": 10213,
+ "##bb": 10214,
+ "ml": 10215,
+ "##tar": 10216,
+ "##のお": 10217,
+ "##ky": 10218,
+ "anthony": 10219,
+ "196": 10220,
+ "253": 10221,
+ "##yo": 10222,
+ "state": 10223,
+ "218": 10224,
+ "##ara": 10225,
+ "##aa": 10226,
+ "##rc": 10227,
+ "##tz": 10228,
+ "##ston": 10229,
+ "より": 10230,
+ "gear": 10231,
+ "##eo": 10232,
+ "##ade": 10233,
+ "ge": 10234,
+ "see": 10235,
+ "1923": 10236,
+ "##win": 10237,
+ "##ura": 10238,
+ "ss": 10239,
+ "heart": 10240,
+ "##den": 10241,
+ "##ita": 10242,
+ "down": 10243,
+ "##sm": 10244,
+ "el": 10245,
+ "png": 10246,
+ "2100": 10247,
+ "610": 10248,
+ "rakuten": 10249,
+ "whatsapp": 10250,
+ "bay": 10251,
+ "dream": 10252,
+ "add": 10253,
+ "##use": 10254,
+ "680": 10255,
+ "311": 10256,
+ "pad": 10257,
+ "gucci": 10258,
+ "mpv": 10259,
+ "##ode": 10260,
+ "##fo": 10261,
+ "island": 10262,
+ "▲topjun": 10263,
+ "##▼": 10264,
+ "223": 10265,
+ "jason": 10266,
+ "214": 10267,
+ "chicago": 10268,
+ "##❤": 10269,
+ "しの": 10270,
+ "##hone": 10271,
+ "io": 10272,
+ "##れる": 10273,
+ "##ことか": 10274,
+ "sogo": 10275,
+ "be2": 10276,
+ "##ology": 10277,
+ "990": 10278,
+ "cloud": 10279,
+ "vcd": 10280,
+ "##con": 10281,
+ "2~3": 10282,
+ "##ford": 10283,
+ "##joy": 10284,
+ "##kb": 10285,
+ "##こさいます": 10286,
+ "##rade": 10287,
+ "but": 10288,
+ "##ach": 10289,
+ "docker": 10290,
+ "##ful": 10291,
+ "rfid": 10292,
+ "ul": 10293,
+ "##ase": 10294,
+ "hit": 10295,
+ "ford": 10296,
+ "##star": 10297,
+ "580": 10298,
+ "##○": 10299,
+ "11": 10300,
+ "a2": 10301,
+ "sdk": 10302,
+ "reading": 10303,
+ "edited": 10304,
+ "##are": 10305,
+ "cmos": 10306,
+ "##mc": 10307,
+ "238": 10308,
+ "siri": 10309,
+ "light": 10310,
+ "##ella": 10311,
+ "##ため": 10312,
+ "bloomberg": 10313,
+ "##read": 10314,
+ "pizza": 10315,
+ "##ison": 10316,
+ "jimmy": 10317,
+ "##vm": 10318,
+ "college": 10319,
+ "node": 10320,
+ "journal": 10321,
+ "ba": 10322,
+ "18k": 10323,
+ "##play": 10324,
+ "245": 10325,
+ "##cer": 10326,
+ "20": 10327,
+ "magic": 10328,
+ "##yu": 10329,
+ "191": 10330,
+ "jump": 10331,
+ "288": 10332,
+ "tt": 10333,
+ "##ings": 10334,
+ "asr": 10335,
+ "##lia": 10336,
+ "3200": 10337,
+ "step5": 10338,
+ "network": 10339,
+ "##cd": 10340,
+ "mc": 10341,
+ "いします": 10342,
+ "1234": 10343,
+ "pixstyleme": 10344,
+ "273": 10345,
+ "##600": 10346,
+ "2800": 10347,
+ "money": 10348,
+ "★★★★★": 10349,
+ "1280": 10350,
+ "12": 10351,
+ "430": 10352,
+ "bl": 10353,
+ "みの": 10354,
+ "act": 10355,
+ "##tus": 10356,
+ "tokyo": 10357,
+ "##rial": 10358,
+ "##life": 10359,
+ "emba": 10360,
+ "##ae": 10361,
+ "saas": 10362,
+ "tcs": 10363,
+ "##rk": 10364,
+ "##wang": 10365,
+ "summer": 10366,
+ "##sp": 10367,
+ "ko": 10368,
+ "##ving": 10369,
+ "390": 10370,
+ "premium": 10371,
+ "##その": 10372,
+ "netflix": 10373,
+ "##ヒ": 10374,
+ "uk": 10375,
+ "mt": 10376,
+ "##lton": 10377,
+ "right": 10378,
+ "frank": 10379,
+ "two": 10380,
+ "209": 10381,
+ "える": 10382,
+ "##ple": 10383,
+ "##cal": 10384,
+ "021": 10385,
+ "##んな": 10386,
+ "##sen": 10387,
+ "##ville": 10388,
+ "hold": 10389,
+ "nexus": 10390,
+ "dd": 10391,
+ "##ius": 10392,
+ "てお": 10393,
+ "##mah": 10394,
+ "##なく": 10395,
+ "tila": 10396,
+ "zero": 10397,
+ "820": 10398,
+ "ce": 10399,
+ "##tin": 10400,
+ "resort": 10401,
+ "##ws": 10402,
+ "charles": 10403,
+ "old": 10404,
+ "p10": 10405,
+ "5d": 10406,
+ "report": 10407,
+ "##360": 10408,
+ "##ru": 10409,
+ "##には": 10410,
+ "bus": 10411,
+ "vans": 10412,
+ "lt": 10413,
+ "##est": 10414,
+ "pv": 10415,
+ "##レ": 10416,
+ "links": 10417,
+ "rebecca": 10418,
+ "##ツ": 10419,
+ "##dm": 10420,
+ "azure": 10421,
+ "##365": 10422,
+ "きな": 10423,
+ "limited": 10424,
+ "bit": 10425,
+ "4gb": 10426,
+ "##mon": 10427,
+ "1910": 10428,
+ "moto": 10429,
+ "##eam": 10430,
+ "213": 10431,
+ "1913": 10432,
+ "var": 10433,
+ "eos": 10434,
+ "なとの": 10435,
+ "226": 10436,
+ "blogspot": 10437,
+ "された": 10438,
+ "699": 10439,
+ "e3": 10440,
+ "dos": 10441,
+ "dm": 10442,
+ "fc": 10443,
+ "##ments": 10444,
+ "##ik": 10445,
+ "##kw": 10446,
+ "boy": 10447,
+ "##bin": 10448,
+ "##ata": 10449,
+ "960": 10450,
+ "er": 10451,
+ "##せ": 10452,
+ "219": 10453,
+ "##vin": 10454,
+ "##tu": 10455,
+ "##ula": 10456,
+ "194": 10457,
+ "##∥": 10458,
+ "station": 10459,
+ "##ろ": 10460,
+ "##ature": 10461,
+ "835": 10462,
+ "files": 10463,
+ "zara": 10464,
+ "hdr": 10465,
+ "top10": 10466,
+ "nature": 10467,
+ "950": 10468,
+ "magazine": 10469,
+ "s6": 10470,
+ "marriott": 10471,
+ "##シ": 10472,
+ "avira": 10473,
+ "case": 10474,
+ "##っと": 10475,
+ "tab": 10476,
+ "##ran": 10477,
+ "tony": 10478,
+ "##home": 10479,
+ "oculus": 10480,
+ "im": 10481,
+ "##ral": 10482,
+ "jean": 10483,
+ "saint": 10484,
+ "cry": 10485,
+ "307": 10486,
+ "rosie": 10487,
+ "##force": 10488,
+ "##ini": 10489,
+ "ice": 10490,
+ "##bert": 10491,
+ "のある": 10492,
+ "##nder": 10493,
+ "##mber": 10494,
+ "pet": 10495,
+ "2600": 10496,
+ "##◆": 10497,
+ "plurk": 10498,
+ "▲topdec": 10499,
+ "##sis": 10500,
+ "00kg": 10501,
+ "▲topnov": 10502,
+ "720": 10503,
+ "##ence": 10504,
+ "tim": 10505,
+ "##ω": 10506,
+ "##nc": 10507,
+ "##ても": 10508,
+ "##name": 10509,
+ "log": 10510,
+ "ips": 10511,
+ "great": 10512,
+ "ikea": 10513,
+ "malaysia": 10514,
+ "unix": 10515,
+ "##イト": 10516,
+ "3600": 10517,
+ "##ncy": 10518,
+ "##nie": 10519,
+ "12000": 10520,
+ "akb48": 10521,
+ "##ye": 10522,
+ "##oid": 10523,
+ "404": 10524,
+ "##chi": 10525,
+ "##いた": 10526,
+ "oa": 10527,
+ "xuehai": 10528,
+ "##1000": 10529,
+ "##orm": 10530,
+ "##rf": 10531,
+ "275": 10532,
+ "さん": 10533,
+ "##ware": 10534,
+ "##リー": 10535,
+ "980": 10536,
+ "ho": 10537,
+ "##pro": 10538,
+ "text": 10539,
+ "##era": 10540,
+ "560": 10541,
+ "bob": 10542,
+ "227": 10543,
+ "##ub": 10544,
+ "##2008": 10545,
+ "8891": 10546,
+ "scp": 10547,
+ "avi": 10548,
+ "##zen": 10549,
+ "2022": 10550,
+ "mi": 10551,
+ "wu": 10552,
+ "museum": 10553,
+ "qvod": 10554,
+ "apache": 10555,
+ "lake": 10556,
+ "jcb": 10557,
+ "▲topaug": 10558,
+ "★★★": 10559,
+ "ni": 10560,
+ "##hr": 10561,
+ "hill": 10562,
+ "302": 10563,
+ "ne": 10564,
+ "weibo": 10565,
+ "490": 10566,
+ "ruby": 10567,
+ "##ーシ": 10568,
+ "##ヶ": 10569,
+ "##row": 10570,
+ "4d": 10571,
+ "▲topjul": 10572,
+ "iv": 10573,
+ "##ish": 10574,
+ "github": 10575,
+ "306": 10576,
+ "mate": 10577,
+ "312": 10578,
+ "##スト": 10579,
+ "##lot": 10580,
+ "##ane": 10581,
+ "andrew": 10582,
+ "のハイト": 10583,
+ "##tina": 10584,
+ "t1": 10585,
+ "rf": 10586,
+ "ed2k": 10587,
+ "##vel": 10588,
+ "##900": 10589,
+ "way": 10590,
+ "final": 10591,
+ "りの": 10592,
+ "ns": 10593,
+ "5a": 10594,
+ "705": 10595,
+ "197": 10596,
+ "##メ": 10597,
+ "sweet": 10598,
+ "bytes": 10599,
+ "##ene": 10600,
+ "▲topjan": 10601,
+ "231": 10602,
+ "##cker": 10603,
+ "##2007": 10604,
+ "##px": 10605,
+ "100g": 10606,
+ "topapp": 10607,
+ "229": 10608,
+ "helpapp": 10609,
+ "rs": 10610,
+ "low": 10611,
+ "14k": 10612,
+ "g4g": 10613,
+ "care": 10614,
+ "630": 10615,
+ "ldquo": 10616,
+ "あり": 10617,
+ "##fork": 10618,
+ "leave": 10619,
+ "rm": 10620,
+ "edition": 10621,
+ "##gan": 10622,
+ "##zon": 10623,
+ "##qq": 10624,
+ "▲topsep": 10625,
+ "##google": 10626,
+ "##ism": 10627,
+ "gold": 10628,
+ "224": 10629,
+ "explorer": 10630,
+ "##zer": 10631,
+ "toyota": 10632,
+ "category": 10633,
+ "select": 10634,
+ "visual": 10635,
+ "##labels": 10636,
+ "restaurant": 10637,
+ "##md": 10638,
+ "posts": 10639,
+ "s1": 10640,
+ "##ico": 10641,
+ "もっと": 10642,
+ "angelababy": 10643,
+ "123456": 10644,
+ "217": 10645,
+ "sports": 10646,
+ "s3": 10647,
+ "mbc": 10648,
+ "1915": 10649,
+ "してくたさい": 10650,
+ "shell": 10651,
+ "x86": 10652,
+ "candy": 10653,
+ "##new": 10654,
+ "kbs": 10655,
+ "face": 10656,
+ "xl": 10657,
+ "470": 10658,
+ "##here": 10659,
+ "4a": 10660,
+ "swissinfo": 10661,
+ "v8": 10662,
+ "▲topfeb": 10663,
+ "dram": 10664,
+ "##ual": 10665,
+ "##vice": 10666,
+ "3a": 10667,
+ "##wer": 10668,
+ "sport": 10669,
+ "q1": 10670,
+ "ios10": 10671,
+ "public": 10672,
+ "int": 10673,
+ "card": 10674,
+ "##c": 10675,
+ "ep": 10676,
+ "au": 10677,
+ "rt": 10678,
+ "##れた": 10679,
+ "1080": 10680,
+ "bill": 10681,
+ "##mll": 10682,
+ "kim": 10683,
+ "30": 10684,
+ "460": 10685,
+ "wan": 10686,
+ "##uk": 10687,
+ "##ミ": 10688,
+ "x3": 10689,
+ "298": 10690,
+ "0t": 10691,
+ "scott": 10692,
+ "##ming": 10693,
+ "239": 10694,
+ "e5": 10695,
+ "##3d": 10696,
+ "h7n9": 10697,
+ "worldcat": 10698,
+ "brown": 10699,
+ "##あります": 10700,
+ "##vo": 10701,
+ "##led": 10702,
+ "##580": 10703,
+ "##ax": 10704,
+ "249": 10705,
+ "410": 10706,
+ "##ert": 10707,
+ "paris": 10708,
+ "##~6": 10709,
+ "polo": 10710,
+ "925": 10711,
+ "##lr": 10712,
+ "599": 10713,
+ "##ナ": 10714,
+ "capital": 10715,
+ "##hing": 10716,
+ "bank": 10717,
+ "cv": 10718,
+ "1g": 10719,
+ "##chat": 10720,
+ "##s": 10721,
+ "##たい": 10722,
+ "adc": 10723,
+ "##ule": 10724,
+ "2m": 10725,
+ "##e": 10726,
+ "digital": 10727,
+ "hotmail": 10728,
+ "268": 10729,
+ "##pad": 10730,
+ "870": 10731,
+ "bbq": 10732,
+ "quot": 10733,
+ "##ring": 10734,
+ "before": 10735,
+ "wali": 10736,
+ "##まて": 10737,
+ "mcu": 10738,
+ "2k": 10739,
+ "2b": 10740,
+ "という": 10741,
+ "costco": 10742,
+ "316": 10743,
+ "north": 10744,
+ "333": 10745,
+ "switch": 10746,
+ "##city": 10747,
+ "##p": 10748,
+ "philips": 10749,
+ "##mann": 10750,
+ "management": 10751,
+ "panasonic": 10752,
+ "##cl": 10753,
+ "##vd": 10754,
+ "##ping": 10755,
+ "##rge": 10756,
+ "alice": 10757,
+ "##lk": 10758,
+ "##ましょう": 10759,
+ "css3": 10760,
+ "##ney": 10761,
+ "vision": 10762,
+ "alpha": 10763,
+ "##ular": 10764,
+ "##400": 10765,
+ "##tter": 10766,
+ "lz": 10767,
+ "にお": 10768,
+ "##ありません": 10769,
+ "mode": 10770,
+ "gre": 10771,
+ "1916": 10772,
+ "pci": 10773,
+ "##tm": 10774,
+ "237": 10775,
+ "1~2": 10776,
+ "##yan": 10777,
+ "##そ": 10778,
+ "について": 10779,
+ "##let": 10780,
+ "##キ": 10781,
+ "work": 10782,
+ "war": 10783,
+ "coach": 10784,
+ "ah": 10785,
+ "mary": 10786,
+ "##ᅵ": 10787,
+ "huang": 10788,
+ "##pt": 10789,
+ "a8": 10790,
+ "pt": 10791,
+ "follow": 10792,
+ "##berry": 10793,
+ "1895": 10794,
+ "##ew": 10795,
+ "a5": 10796,
+ "ghost": 10797,
+ "##ション": 10798,
+ "##wn": 10799,
+ "##og": 10800,
+ "south": 10801,
+ "##code": 10802,
+ "girls": 10803,
+ "##rid": 10804,
+ "action": 10805,
+ "villa": 10806,
+ "git": 10807,
+ "r11": 10808,
+ "table": 10809,
+ "games": 10810,
+ "##cket": 10811,
+ "error": 10812,
+ "##anonymoussaid": 10813,
+ "##ag": 10814,
+ "here": 10815,
+ "##ame": 10816,
+ "##gc": 10817,
+ "qa": 10818,
+ "##■": 10819,
+ "##lis": 10820,
+ "gmp": 10821,
+ "##gin": 10822,
+ "vmalife": 10823,
+ "##cher": 10824,
+ "yu": 10825,
+ "wedding": 10826,
+ "##tis": 10827,
+ "demo": 10828,
+ "dragon": 10829,
+ "530": 10830,
+ "soho": 10831,
+ "social": 10832,
+ "bye": 10833,
+ "##rant": 10834,
+ "river": 10835,
+ "orz": 10836,
+ "acer": 10837,
+ "325": 10838,
+ "##↑": 10839,
+ "##ース": 10840,
+ "##ats": 10841,
+ "261": 10842,
+ "del": 10843,
+ "##ven": 10844,
+ "440": 10845,
+ "ups": 10846,
+ "##ように": 10847,
+ "##ター": 10848,
+ "305": 10849,
+ "value": 10850,
+ "macd": 10851,
+ "yougou": 10852,
+ "##dn": 10853,
+ "661": 10854,
+ "##ano": 10855,
+ "ll": 10856,
+ "##urt": 10857,
+ "##rent": 10858,
+ "continue": 10859,
+ "script": 10860,
+ "##wen": 10861,
+ "##ect": 10862,
+ "paper": 10863,
+ "263": 10864,
+ "319": 10865,
+ "shift": 10866,
+ "##chel": 10867,
+ "##フト": 10868,
+ "##cat": 10869,
+ "258": 10870,
+ "x5": 10871,
+ "fox": 10872,
+ "243": 10873,
+ "##さん": 10874,
+ "car": 10875,
+ "aaa": 10876,
+ "##blog": 10877,
+ "loading": 10878,
+ "##yn": 10879,
+ "##tp": 10880,
+ "kuso": 10881,
+ "799": 10882,
+ "si": 10883,
+ "sns": 10884,
+ "イカせるテンマ": 10885,
+ "ヒンクテンマ3": 10886,
+ "rmb": 10887,
+ "vdc": 10888,
+ "forest": 10889,
+ "central": 10890,
+ "prime": 10891,
+ "help": 10892,
+ "ultra": 10893,
+ "##rmb": 10894,
+ "##ような": 10895,
+ "241": 10896,
+ "square": 10897,
+ "688": 10898,
+ "##しい": 10899,
+ "のないフロクに": 10900,
+ "##field": 10901,
+ "##reen": 10902,
+ "##ors": 10903,
+ "##ju": 10904,
+ "c1": 10905,
+ "start": 10906,
+ "510": 10907,
+ "##air": 10908,
+ "##map": 10909,
+ "cdn": 10910,
+ "##wo": 10911,
+ "cba": 10912,
+ "stephen": 10913,
+ "m8": 10914,
+ "100km": 10915,
+ "##get": 10916,
+ "opera": 10917,
+ "##base": 10918,
+ "##ood": 10919,
+ "vsa": 10920,
+ "com™": 10921,
+ "##aw": 10922,
+ "##ail": 10923,
+ "251": 10924,
+ "なのて": 10925,
+ "count": 10926,
+ "t2": 10927,
+ "##ᅡ": 10928,
+ "##een": 10929,
+ "2700": 10930,
+ "hop": 10931,
+ "##gp": 10932,
+ "vsc": 10933,
+ "tree": 10934,
+ "##eg": 10935,
+ "##ose": 10936,
+ "816": 10937,
+ "285": 10938,
+ "##ories": 10939,
+ "##shop": 10940,
+ "alphago": 10941,
+ "v4": 10942,
+ "1909": 10943,
+ "simon": 10944,
+ "##ᆼ": 10945,
+ "fluke62max": 10946,
+ "zip": 10947,
+ "スホンサー": 10948,
+ "##sta": 10949,
+ "louis": 10950,
+ "cr": 10951,
+ "bas": 10952,
+ "##~10": 10953,
+ "bc": 10954,
+ "##yer": 10955,
+ "hadoop": 10956,
+ "##ube": 10957,
+ "##wi": 10958,
+ "1906": 10959,
+ "0755": 10960,
+ "hola": 10961,
+ "##low": 10962,
+ "place": 10963,
+ "centre": 10964,
+ "5v": 10965,
+ "d3": 10966,
+ "##fer": 10967,
+ "252": 10968,
+ "##750": 10969,
+ "##media": 10970,
+ "281": 10971,
+ "540": 10972,
+ "0l": 10973,
+ "exchange": 10974,
+ "262": 10975,
+ "series": 10976,
+ "##ハー": 10977,
+ "##san": 10978,
+ "eb": 10979,
+ "##bank": 10980,
+ "##k": 10981,
+ "q3": 10982,
+ "##nge": 10983,
+ "##mail": 10984,
+ "take": 10985,
+ "##lp": 10986,
+ "259": 10987,
+ "1888": 10988,
+ "client": 10989,
+ "east": 10990,
+ "cache": 10991,
+ "event": 10992,
+ "vincent": 10993,
+ "##ールを": 10994,
+ "きを": 10995,
+ "##nse": 10996,
+ "sui": 10997,
+ "855": 10998,
+ "adchoice": 10999,
+ "##и": 11000,
+ "##stry": 11001,
+ "##なたの": 11002,
+ "246": 11003,
+ "##zone": 11004,
+ "ga": 11005,
+ "apps": 11006,
+ "sea": 11007,
+ "##ab": 11008,
+ "248": 11009,
+ "cisco": 11010,
+ "##タ": 11011,
+ "##rner": 11012,
+ "kymco": 11013,
+ "##care": 11014,
+ "dha": 11015,
+ "##pu": 11016,
+ "##yi": 11017,
+ "minkoff": 11018,
+ "royal": 11019,
+ "p1": 11020,
+ "への": 11021,
+ "annie": 11022,
+ "269": 11023,
+ "collection": 11024,
+ "kpi": 11025,
+ "playstation": 11026,
+ "257": 11027,
+ "になります": 11028,
+ "866": 11029,
+ "bh": 11030,
+ "##bar": 11031,
+ "queen": 11032,
+ "505": 11033,
+ "radio": 11034,
+ "1904": 11035,
+ "andy": 11036,
+ "armani": 11037,
+ "##xy": 11038,
+ "manager": 11039,
+ "iherb": 11040,
+ "##ery": 11041,
+ "##share": 11042,
+ "spring": 11043,
+ "raid": 11044,
+ "johnson": 11045,
+ "1908": 11046,
+ "##ob": 11047,
+ "volvo": 11048,
+ "hall": 11049,
+ "##ball": 11050,
+ "v6": 11051,
+ "our": 11052,
+ "taylor": 11053,
+ "##hk": 11054,
+ "bi": 11055,
+ "242": 11056,
+ "##cp": 11057,
+ "kate": 11058,
+ "bo": 11059,
+ "water": 11060,
+ "technology": 11061,
+ "##rie": 11062,
+ "サイトは": 11063,
+ "277": 11064,
+ "##ona": 11065,
+ "##sl": 11066,
+ "hpv": 11067,
+ "303": 11068,
+ "gtx": 11069,
+ "hip": 11070,
+ "rdquo": 11071,
+ "jayz": 11072,
+ "stone": 11073,
+ "##lex": 11074,
+ "##rum": 11075,
+ "namespace": 11076,
+ "##やり": 11077,
+ "620": 11078,
+ "##ale": 11079,
+ "##atic": 11080,
+ "des": 11081,
+ "##erson": 11082,
+ "##ql": 11083,
+ "##ves": 11084,
+ "##type": 11085,
+ "enter": 11086,
+ "##この": 11087,
+ "##てきます": 11088,
+ "d2": 11089,
+ "##168": 11090,
+ "##mix": 11091,
+ "##bian": 11092,
+ "との": 11093,
+ "a9": 11094,
+ "jj": 11095,
+ "ky": 11096,
+ "##lc": 11097,
+ "access": 11098,
+ "movie": 11099,
+ "##hc": 11100,
+ "リストに": 11101,
+ "tower": 11102,
+ "##ration": 11103,
+ "##mit": 11104,
+ "ます": 11105,
+ "##nch": 11106,
+ "ua": 11107,
+ "tel": 11108,
+ "prefix": 11109,
+ "##o2": 11110,
+ "1907": 11111,
+ "##point": 11112,
+ "1901": 11113,
+ "ott": 11114,
+ "~10": 11115,
+ "##http": 11116,
+ "##ury": 11117,
+ "baidu": 11118,
+ "##ink": 11119,
+ "member": 11120,
+ "##logy": 11121,
+ "bigbang": 11122,
+ "nownews": 11123,
+ "##js": 11124,
+ "##shot": 11125,
+ "##tb": 11126,
+ "##こと": 11127,
+ "247": 11128,
+ "eba": 11129,
+ "##tics": 11130,
+ "##lus": 11131,
+ "ける": 11132,
+ "v5": 11133,
+ "spark": 11134,
+ "##ama": 11135,
+ "there": 11136,
+ "##ions": 11137,
+ "god": 11138,
+ "##lls": 11139,
+ "##down": 11140,
+ "hiv": 11141,
+ "##ress": 11142,
+ "burberry": 11143,
+ "day2": 11144,
+ "##kv": 11145,
+ "◆◆": 11146,
+ "jeff": 11147,
+ "related": 11148,
+ "film": 11149,
+ "edit": 11150,
+ "joseph": 11151,
+ "283": 11152,
+ "##ark": 11153,
+ "cx": 11154,
+ "32gb": 11155,
+ "order": 11156,
+ "g9": 11157,
+ "30000": 11158,
+ "##ans": 11159,
+ "##tty": 11160,
+ "s5": 11161,
+ "##bee": 11162,
+ "かあります": 11163,
+ "thread": 11164,
+ "xr": 11165,
+ "buy": 11166,
+ "sh": 11167,
+ "005": 11168,
+ "land": 11169,
+ "spotify": 11170,
+ "mx": 11171,
+ "##ari": 11172,
+ "276": 11173,
+ "##verse": 11174,
+ "×email": 11175,
+ "sf": 11176,
+ "why": 11177,
+ "##ことて": 11178,
+ "244": 11179,
+ "7headlines": 11180,
+ "nego": 11181,
+ "sunny": 11182,
+ "dom": 11183,
+ "exo": 11184,
+ "401": 11185,
+ "666": 11186,
+ "positioning": 11187,
+ "fit": 11188,
+ "rgb": 11189,
+ "##tton": 11190,
+ "278": 11191,
+ "kiss": 11192,
+ "alexa": 11193,
+ "adam": 11194,
+ "lp": 11195,
+ "みリストを": 11196,
+ "##g": 11197,
+ "mp": 11198,
+ "##ties": 11199,
+ "##llow": 11200,
+ "amy": 11201,
+ "##du": 11202,
+ "np": 11203,
+ "002": 11204,
+ "institute": 11205,
+ "271": 11206,
+ "##rth": 11207,
+ "##lar": 11208,
+ "2345": 11209,
+ "590": 11210,
+ "##des": 11211,
+ "sidebar": 11212,
+ "15": 11213,
+ "imax": 11214,
+ "site": 11215,
+ "##cky": 11216,
+ "##kit": 11217,
+ "##ime": 11218,
+ "##009": 11219,
+ "season": 11220,
+ "323": 11221,
+ "##fun": 11222,
+ "##ンター": 11223,
+ "##ひ": 11224,
+ "gogoro": 11225,
+ "a7": 11226,
+ "pu": 11227,
+ "lily": 11228,
+ "fire": 11229,
+ "twd600": 11230,
+ "##ッセーシを": 11231,
+ "いて": 11232,
+ "##vis": 11233,
+ "30ml": 11234,
+ "##cture": 11235,
+ "##をお": 11236,
+ "information": 11237,
+ "##オ": 11238,
+ "close": 11239,
+ "friday": 11240,
+ "##くれる": 11241,
+ "yi": 11242,
+ "nick": 11243,
+ "てすか": 11244,
+ "##tta": 11245,
+ "##tel": 11246,
+ "6500": 11247,
+ "##lock": 11248,
+ "cbd": 11249,
+ "economy": 11250,
+ "254": 11251,
+ "かお": 11252,
+ "267": 11253,
+ "tinker": 11254,
+ "double": 11255,
+ "375": 11256,
+ "8gb": 11257,
+ "voice": 11258,
+ "##app": 11259,
+ "oops": 11260,
+ "channel": 11261,
+ "today": 11262,
+ "985": 11263,
+ "##right": 11264,
+ "raw": 11265,
+ "xyz": 11266,
+ "##+": 11267,
+ "jim": 11268,
+ "edm": 11269,
+ "##cent": 11270,
+ "7500": 11271,
+ "supreme": 11272,
+ "814": 11273,
+ "ds": 11274,
+ "##its": 11275,
+ "##asia": 11276,
+ "dropbox": 11277,
+ "##てすか": 11278,
+ "##tti": 11279,
+ "books": 11280,
+ "272": 11281,
+ "100ml": 11282,
+ "##tle": 11283,
+ "##ller": 11284,
+ "##ken": 11285,
+ "##more": 11286,
+ "##boy": 11287,
+ "sex": 11288,
+ "309": 11289,
+ "##dom": 11290,
+ "t3": 11291,
+ "##ider": 11292,
+ "##なります": 11293,
+ "##unch": 11294,
+ "1903": 11295,
+ "810": 11296,
+ "feel": 11297,
+ "5500": 11298,
+ "##かった": 11299,
+ "##put": 11300,
+ "により": 11301,
+ "s2": 11302,
+ "mo": 11303,
+ "##gh": 11304,
+ "men": 11305,
+ "ka": 11306,
+ "amoled": 11307,
+ "div": 11308,
+ "##tr": 11309,
+ "##n1": 11310,
+ "port": 11311,
+ "howard": 11312,
+ "##tags": 11313,
+ "ken": 11314,
+ "dnf": 11315,
+ "##nus": 11316,
+ "adsense": 11317,
+ "##а": 11318,
+ "ide": 11319,
+ "##へ": 11320,
+ "buff": 11321,
+ "thunder": 11322,
+ "##town": 11323,
+ "##ique": 11324,
+ "has": 11325,
+ "##body": 11326,
+ "auto": 11327,
+ "pin": 11328,
+ "##erry": 11329,
+ "tee": 11330,
+ "てした": 11331,
+ "295": 11332,
+ "number": 11333,
+ "##the": 11334,
+ "##013": 11335,
+ "object": 11336,
+ "psp": 11337,
+ "cool": 11338,
+ "udnbkk": 11339,
+ "16gb": 11340,
+ "##mic": 11341,
+ "miui": 11342,
+ "##tro": 11343,
+ "most": 11344,
+ "r2": 11345,
+ "##alk": 11346,
+ "##nity": 11347,
+ "1880": 11348,
+ "±0": 11349,
+ "##いました": 11350,
+ "428": 11351,
+ "s4": 11352,
+ "law": 11353,
+ "version": 11354,
+ "##oa": 11355,
+ "n1": 11356,
+ "sgs": 11357,
+ "docomo": 11358,
+ "##tf": 11359,
+ "##ack": 11360,
+ "henry": 11361,
+ "fc2": 11362,
+ "##ded": 11363,
+ "##sco": 11364,
+ "##014": 11365,
+ "##rite": 11366,
+ "286": 11367,
+ "0mm": 11368,
+ "linkedin": 11369,
+ "##ada": 11370,
+ "##now": 11371,
+ "wii": 11372,
+ "##ndy": 11373,
+ "ucbug": 11374,
+ "##◎": 11375,
+ "sputniknews": 11376,
+ "legalminer": 11377,
+ "##ika": 11378,
+ "##xp": 11379,
+ "2gb": 11380,
+ "##bu": 11381,
+ "q10": 11382,
+ "oo": 11383,
+ "b6": 11384,
+ "come": 11385,
+ "##rman": 11386,
+ "cheese": 11387,
+ "ming": 11388,
+ "maker": 11389,
+ "##gm": 11390,
+ "nikon": 11391,
+ "##fig": 11392,
+ "ppi": 11393,
+ "kelly": 11394,
+ "##ります": 11395,
+ "jchere": 11396,
+ "てきます": 11397,
+ "ted": 11398,
+ "md": 11399,
+ "003": 11400,
+ "fgo": 11401,
+ "tech": 11402,
+ "##tto": 11403,
+ "dan": 11404,
+ "soc": 11405,
+ "##gl": 11406,
+ "##len": 11407,
+ "hair": 11408,
+ "earth": 11409,
+ "640": 11410,
+ "521": 11411,
+ "img": 11412,
+ "##pper": 11413,
+ "##a1": 11414,
+ "##てきる": 11415,
+ "##ロク": 11416,
+ "acca": 11417,
+ "##ition": 11418,
+ "##ference": 11419,
+ "suite": 11420,
+ "##ig": 11421,
+ "outlook": 11422,
+ "##mond": 11423,
+ "##cation": 11424,
+ "398": 11425,
+ "##pr": 11426,
+ "279": 11427,
+ "101vip": 11428,
+ "358": 11429,
+ "##999": 11430,
+ "282": 11431,
+ "64gb": 11432,
+ "3800": 11433,
+ "345": 11434,
+ "airport": 11435,
+ "##over": 11436,
+ "284": 11437,
+ "##おり": 11438,
+ "jones": 11439,
+ "##ith": 11440,
+ "lab": 11441,
+ "##su": 11442,
+ "##いるのて": 11443,
+ "co2": 11444,
+ "town": 11445,
+ "piece": 11446,
+ "##llo": 11447,
+ "no1": 11448,
+ "vmware": 11449,
+ "24h": 11450,
+ "##qi": 11451,
+ "focus": 11452,
+ "reader": 11453,
+ "##admin": 11454,
+ "##ora": 11455,
+ "tb": 11456,
+ "false": 11457,
+ "##log": 11458,
+ "1898": 11459,
+ "know": 11460,
+ "lan": 11461,
+ "838": 11462,
+ "##ces": 11463,
+ "f4": 11464,
+ "##ume": 11465,
+ "motel": 11466,
+ "stop": 11467,
+ "##oper": 11468,
+ "na": 11469,
+ "flickr": 11470,
+ "netcomponents": 11471,
+ "##af": 11472,
+ "##─": 11473,
+ "pose": 11474,
+ "williams": 11475,
+ "local": 11476,
+ "##ound": 11477,
+ "##cg": 11478,
+ "##site": 11479,
+ "##iko": 11480,
+ "いお": 11481,
+ "274": 11482,
+ "5m": 11483,
+ "gsm": 11484,
+ "con": 11485,
+ "##ath": 11486,
+ "1902": 11487,
+ "friends": 11488,
+ "##hip": 11489,
+ "cell": 11490,
+ "317": 11491,
+ "##rey": 11492,
+ "780": 11493,
+ "cream": 11494,
+ "##cks": 11495,
+ "012": 11496,
+ "##dp": 11497,
+ "facebooktwitterpinterestgoogle": 11498,
+ "sso": 11499,
+ "324": 11500,
+ "shtml": 11501,
+ "song": 11502,
+ "swiss": 11503,
+ "##mw": 11504,
+ "##キンク": 11505,
+ "lumia": 11506,
+ "xdd": 11507,
+ "string": 11508,
+ "tiffany": 11509,
+ "522": 11510,
+ "marc": 11511,
+ "られた": 11512,
+ "insee": 11513,
+ "russell": 11514,
+ "sc": 11515,
+ "dell": 11516,
+ "##ations": 11517,
+ "ok": 11518,
+ "camera": 11519,
+ "289": 11520,
+ "##vs": 11521,
+ "##flow": 11522,
+ "##late": 11523,
+ "classic": 11524,
+ "287": 11525,
+ "##nter": 11526,
+ "stay": 11527,
+ "g1": 11528,
+ "mtv": 11529,
+ "512": 11530,
+ "##ever": 11531,
+ "##lab": 11532,
+ "##nger": 11533,
+ "qe": 11534,
+ "sata": 11535,
+ "ryan": 11536,
+ "d1": 11537,
+ "50ml": 11538,
+ "cms": 11539,
+ "##cing": 11540,
+ "su": 11541,
+ "292": 11542,
+ "3300": 11543,
+ "editor": 11544,
+ "296": 11545,
+ "##nap": 11546,
+ "security": 11547,
+ "sunday": 11548,
+ "association": 11549,
+ "##ens": 11550,
+ "##700": 11551,
+ "##bra": 11552,
+ "acg": 11553,
+ "##かり": 11554,
+ "sofascore": 11555,
+ "とは": 11556,
+ "mkv": 11557,
+ "##ign": 11558,
+ "jonathan": 11559,
+ "gary": 11560,
+ "build": 11561,
+ "labels": 11562,
+ "##oto": 11563,
+ "tesla": 11564,
+ "moba": 11565,
+ "qi": 11566,
+ "gohappy": 11567,
+ "general": 11568,
+ "ajax": 11569,
+ "1024": 11570,
+ "##かる": 11571,
+ "サイト": 11572,
+ "society": 11573,
+ "##test": 11574,
+ "##urs": 11575,
+ "wps": 11576,
+ "fedora": 11577,
+ "##ich": 11578,
+ "mozilla": 11579,
+ "328": 11580,
+ "##480": 11581,
+ "##dr": 11582,
+ "usa": 11583,
+ "urn": 11584,
+ "##lina": 11585,
+ "##r": 11586,
+ "grace": 11587,
+ "##die": 11588,
+ "##try": 11589,
+ "##ader": 11590,
+ "1250": 11591,
+ "##なり": 11592,
+ "elle": 11593,
+ "570": 11594,
+ "##chen": 11595,
+ "##ᆯ": 11596,
+ "price": 11597,
+ "##ten": 11598,
+ "uhz": 11599,
+ "##ough": 11600,
+ "eq": 11601,
+ "##hen": 11602,
+ "states": 11603,
+ "push": 11604,
+ "session": 11605,
+ "balance": 11606,
+ "wow": 11607,
+ "506": 11608,
+ "##cus": 11609,
+ "##py": 11610,
+ "when": 11611,
+ "##ward": 11612,
+ "##ep": 11613,
+ "34e": 11614,
+ "wong": 11615,
+ "library": 11616,
+ "prada": 11617,
+ "##サイト": 11618,
+ "##cle": 11619,
+ "running": 11620,
+ "##ree": 11621,
+ "313": 11622,
+ "ck": 11623,
+ "date": 11624,
+ "q4": 11625,
+ "##ctive": 11626,
+ "##ool": 11627,
+ "##>": 11628,
+ "mk": 11629,
+ "##ira": 11630,
+ "##163": 11631,
+ "388": 11632,
+ "die": 11633,
+ "secret": 11634,
+ "rq": 11635,
+ "dota": 11636,
+ "buffet": 11637,
+ "は1ヶ": 11638,
+ "e6": 11639,
+ "##ez": 11640,
+ "pan": 11641,
+ "368": 11642,
+ "ha": 11643,
+ "##card": 11644,
+ "##cha": 11645,
+ "2a": 11646,
+ "##さ": 11647,
+ "alan": 11648,
+ "day3": 11649,
+ "eye": 11650,
+ "f3": 11651,
+ "##end": 11652,
+ "france": 11653,
+ "keep": 11654,
+ "adi": 11655,
+ "rna": 11656,
+ "tvbs": 11657,
+ "##ala": 11658,
+ "solo": 11659,
+ "nova": 11660,
+ "##え": 11661,
+ "##tail": 11662,
+ "##ょう": 11663,
+ "support": 11664,
+ "##ries": 11665,
+ "##なる": 11666,
+ "##ved": 11667,
+ "base": 11668,
+ "copy": 11669,
+ "iis": 11670,
+ "fps": 11671,
+ "##ways": 11672,
+ "hero": 11673,
+ "hgih": 11674,
+ "profile": 11675,
+ "fish": 11676,
+ "mu": 11677,
+ "ssh": 11678,
+ "entertainment": 11679,
+ "chang": 11680,
+ "##wd": 11681,
+ "click": 11682,
+ "cake": 11683,
+ "##ond": 11684,
+ "pre": 11685,
+ "##tom": 11686,
+ "kic": 11687,
+ "pixel": 11688,
+ "##ov": 11689,
+ "##fl": 11690,
+ "product": 11691,
+ "6a": 11692,
+ "##pd": 11693,
+ "dear": 11694,
+ "##gate": 11695,
+ "es": 11696,
+ "yumi": 11697,
+ "audio": 11698,
+ "##²": 11699,
+ "##sky": 11700,
+ "echo": 11701,
+ "bin": 11702,
+ "where": 11703,
+ "##ture": 11704,
+ "329": 11705,
+ "##ape": 11706,
+ "find": 11707,
+ "sap": 11708,
+ "isis": 11709,
+ "##なと": 11710,
+ "nand": 11711,
+ "##101": 11712,
+ "##load": 11713,
+ "##ream": 11714,
+ "band": 11715,
+ "a6": 11716,
+ "525": 11717,
+ "never": 11718,
+ "##post": 11719,
+ "festival": 11720,
+ "50cm": 11721,
+ "##we": 11722,
+ "555": 11723,
+ "guide": 11724,
+ "314": 11725,
+ "zenfone": 11726,
+ "##ike": 11727,
+ "335": 11728,
+ "gd": 11729,
+ "forum": 11730,
+ "jessica": 11731,
+ "strong": 11732,
+ "alexander": 11733,
+ "##ould": 11734,
+ "software": 11735,
+ "allen": 11736,
+ "##ious": 11737,
+ "program": 11738,
+ "360°": 11739,
+ "else": 11740,
+ "lohasthree": 11741,
+ "##gar": 11742,
+ "することかてきます": 11743,
+ "please": 11744,
+ "##れます": 11745,
+ "rc": 11746,
+ "##ggle": 11747,
+ "##ric": 11748,
+ "bim": 11749,
+ "50000": 11750,
+ "##own": 11751,
+ "eclipse": 11752,
+ "355": 11753,
+ "brian": 11754,
+ "3ds": 11755,
+ "##side": 11756,
+ "061": 11757,
+ "361": 11758,
+ "##other": 11759,
+ "##ける": 11760,
+ "##tech": 11761,
+ "##ator": 11762,
+ "485": 11763,
+ "engine": 11764,
+ "##ged": 11765,
+ "##t": 11766,
+ "plaza": 11767,
+ "##fit": 11768,
+ "cia": 11769,
+ "ngo": 11770,
+ "westbrook": 11771,
+ "shi": 11772,
+ "tbs": 11773,
+ "50mm": 11774,
+ "##みませんか": 11775,
+ "sci": 11776,
+ "291": 11777,
+ "reuters": 11778,
+ "##ily": 11779,
+ "contextlink": 11780,
+ "##hn": 11781,
+ "af": 11782,
+ "##cil": 11783,
+ "bridge": 11784,
+ "very": 11785,
+ "##cel": 11786,
+ "1890": 11787,
+ "cambridge": 11788,
+ "##ize": 11789,
+ "15g": 11790,
+ "##aid": 11791,
+ "##data": 11792,
+ "790": 11793,
+ "frm": 11794,
+ "##head": 11795,
+ "award": 11796,
+ "butler": 11797,
+ "##sun": 11798,
+ "meta": 11799,
+ "##mar": 11800,
+ "america": 11801,
+ "ps3": 11802,
+ "puma": 11803,
+ "pmid": 11804,
+ "##すか": 11805,
+ "lc": 11806,
+ "670": 11807,
+ "kitchen": 11808,
+ "##lic": 11809,
+ "オーフン5": 11810,
+ "きなしソフトサーヒス": 11811,
+ "そして": 11812,
+ "day1": 11813,
+ "future": 11814,
+ "★★★★": 11815,
+ "##text": 11816,
+ "##page": 11817,
+ "##rris": 11818,
+ "pm1": 11819,
+ "##ket": 11820,
+ "fans": 11821,
+ "##っています": 11822,
+ "1001": 11823,
+ "christian": 11824,
+ "bot": 11825,
+ "kids": 11826,
+ "trackback": 11827,
+ "##hai": 11828,
+ "c3": 11829,
+ "display": 11830,
+ "##hl": 11831,
+ "n2": 11832,
+ "1896": 11833,
+ "idea": 11834,
+ "さんも": 11835,
+ "##sent": 11836,
+ "airmail": 11837,
+ "##ug": 11838,
+ "##men": 11839,
+ "pwm": 11840,
+ "けます": 11841,
+ "028": 11842,
+ "##lution": 11843,
+ "369": 11844,
+ "852": 11845,
+ "awards": 11846,
+ "schemas": 11847,
+ "354": 11848,
+ "asics": 11849,
+ "wikipedia": 11850,
+ "font": 11851,
+ "##tional": 11852,
+ "##vy": 11853,
+ "c2": 11854,
+ "293": 11855,
+ "##れている": 11856,
+ "##dget": 11857,
+ "##ein": 11858,
+ "っている": 11859,
+ "contact": 11860,
+ "pepper": 11861,
+ "スキル": 11862,
+ "339": 11863,
+ "##~5": 11864,
+ "294": 11865,
+ "##uel": 11866,
+ "##ument": 11867,
+ "730": 11868,
+ "##hang": 11869,
+ "みてす": 11870,
+ "q5": 11871,
+ "##sue": 11872,
+ "rain": 11873,
+ "##ndi": 11874,
+ "wei": 11875,
+ "swatch": 11876,
+ "##cept": 11877,
+ "わせ": 11878,
+ "331": 11879,
+ "popular": 11880,
+ "##ste": 11881,
+ "##tag": 11882,
+ "p2": 11883,
+ "501": 11884,
+ "trc": 11885,
+ "1899": 11886,
+ "##west": 11887,
+ "##live": 11888,
+ "justin": 11889,
+ "honda": 11890,
+ "ping": 11891,
+ "messenger": 11892,
+ "##rap": 11893,
+ "v9": 11894,
+ "543": 11895,
+ "##とは": 11896,
+ "unity": 11897,
+ "appqq": 11898,
+ "はすへて": 11899,
+ "025": 11900,
+ "leo": 11901,
+ "##tone": 11902,
+ "##テ": 11903,
+ "##ass": 11904,
+ "uniqlo": 11905,
+ "##010": 11906,
+ "502": 11907,
+ "her": 11908,
+ "jane": 11909,
+ "memory": 11910,
+ "moneydj": 11911,
+ "##tical": 11912,
+ "human": 11913,
+ "12306": 11914,
+ "していると": 11915,
+ "##m2": 11916,
+ "coc": 11917,
+ "miacare": 11918,
+ "##mn": 11919,
+ "tmt": 11920,
+ "##core": 11921,
+ "vim": 11922,
+ "kk": 11923,
+ "##may": 11924,
+ "fan": 11925,
+ "target": 11926,
+ "use": 11927,
+ "too": 11928,
+ "338": 11929,
+ "435": 11930,
+ "2050": 11931,
+ "867": 11932,
+ "737": 11933,
+ "fast": 11934,
+ "##2c": 11935,
+ "services": 11936,
+ "##ope": 11937,
+ "omega": 11938,
+ "energy": 11939,
+ "##わ": 11940,
+ "pinkoi": 11941,
+ "1a": 11942,
+ "##なから": 11943,
+ "##rain": 11944,
+ "jackson": 11945,
+ "##ement": 11946,
+ "##シャンルの": 11947,
+ "374": 11948,
+ "366": 11949,
+ "そんな": 11950,
+ "p9": 11951,
+ "rd": 11952,
+ "##ᆨ": 11953,
+ "1111": 11954,
+ "##tier": 11955,
+ "##vic": 11956,
+ "zone": 11957,
+ "##│": 11958,
+ "385": 11959,
+ "690": 11960,
+ "dl": 11961,
+ "isofix": 11962,
+ "cpa": 11963,
+ "m4": 11964,
+ "322": 11965,
+ "kimi": 11966,
+ "めて": 11967,
+ "davis": 11968,
+ "##lay": 11969,
+ "lulu": 11970,
+ "##uck": 11971,
+ "050": 11972,
+ "weeks": 11973,
+ "qs": 11974,
+ "##hop": 11975,
+ "920": 11976,
+ "##n": 11977,
+ "ae": 11978,
+ "##ear": 11979,
+ "~5": 11980,
+ "eia": 11981,
+ "405": 11982,
+ "##fly": 11983,
+ "korea": 11984,
+ "jpeg": 11985,
+ "boost": 11986,
+ "##ship": 11987,
+ "small": 11988,
+ "##リア": 11989,
+ "1860": 11990,
+ "eur": 11991,
+ "297": 11992,
+ "425": 11993,
+ "valley": 11994,
+ "##iel": 11995,
+ "simple": 11996,
+ "##ude": 11997,
+ "rn": 11998,
+ "k2": 11999,
+ "##ena": 12000,
+ "されます": 12001,
+ "non": 12002,
+ "patrick": 12003,
+ "しているから": 12004,
+ "##ナー": 12005,
+ "feed": 12006,
+ "5757": 12007,
+ "30g": 12008,
+ "process": 12009,
+ "well": 12010,
+ "qqmei": 12011,
+ "##thing": 12012,
+ "they": 12013,
+ "aws": 12014,
+ "lu": 12015,
+ "pink": 12016,
+ "##ters": 12017,
+ "##kin": 12018,
+ "または": 12019,
+ "board": 12020,
+ "##vertisement": 12021,
+ "wine": 12022,
+ "##ien": 12023,
+ "unicode": 12024,
+ "##dge": 12025,
+ "r1": 12026,
+ "359": 12027,
+ "##tant": 12028,
+ "いを": 12029,
+ "##twitter": 12030,
+ "##3c": 12031,
+ "cool1": 12032,
+ "される": 12033,
+ "##れて": 12034,
+ "##l": 12035,
+ "isp": 12036,
+ "##012": 12037,
+ "standard": 12038,
+ "45㎡2": 12039,
+ "402": 12040,
+ "##150": 12041,
+ "matt": 12042,
+ "##fu": 12043,
+ "326": 12044,
+ "##iner": 12045,
+ "googlemsn": 12046,
+ "pixnetfacebookyahoo": 12047,
+ "##ラン": 12048,
+ "x7": 12049,
+ "886": 12050,
+ "##uce": 12051,
+ "メーカー": 12052,
+ "sao": 12053,
+ "##ev": 12054,
+ "##きました": 12055,
+ "##file": 12056,
+ "9678": 12057,
+ "403": 12058,
+ "xddd": 12059,
+ "shirt": 12060,
+ "6l": 12061,
+ "##rio": 12062,
+ "##hat": 12063,
+ "3mm": 12064,
+ "givenchy": 12065,
+ "ya": 12066,
+ "bang": 12067,
+ "##lio": 12068,
+ "monday": 12069,
+ "crystal": 12070,
+ "ロクイン": 12071,
+ "##abc": 12072,
+ "336": 12073,
+ "head": 12074,
+ "890": 12075,
+ "ubuntuforumwikilinuxpastechat": 12076,
+ "##vc": 12077,
+ "##~20": 12078,
+ "##rity": 12079,
+ "cnc": 12080,
+ "7866": 12081,
+ "ipv6": 12082,
+ "null": 12083,
+ "1897": 12084,
+ "##ost": 12085,
+ "yang": 12086,
+ "imsean": 12087,
+ "tiger": 12088,
+ "##fet": 12089,
+ "##ンス": 12090,
+ "352": 12091,
+ "##=": 12092,
+ "dji": 12093,
+ "327": 12094,
+ "ji": 12095,
+ "maria": 12096,
+ "##come": 12097,
+ "##んて": 12098,
+ "foundation": 12099,
+ "3100": 12100,
+ "##beth": 12101,
+ "##なった": 12102,
+ "1m": 12103,
+ "601": 12104,
+ "active": 12105,
+ "##aft": 12106,
+ "##don": 12107,
+ "3p": 12108,
+ "sr": 12109,
+ "349": 12110,
+ "emma": 12111,
+ "##khz": 12112,
+ "living": 12113,
+ "415": 12114,
+ "353": 12115,
+ "1889": 12116,
+ "341": 12117,
+ "709": 12118,
+ "457": 12119,
+ "sas": 12120,
+ "x6": 12121,
+ "##face": 12122,
+ "pptv": 12123,
+ "x4": 12124,
+ "##mate": 12125,
+ "han": 12126,
+ "sophie": 12127,
+ "##jing": 12128,
+ "337": 12129,
+ "fifa": 12130,
+ "##mand": 12131,
+ "other": 12132,
+ "sale": 12133,
+ "inwedding": 12134,
+ "##gn": 12135,
+ "てきちゃいます": 12136,
+ "##mmy": 12137,
+ "##pmlast": 12138,
+ "bad": 12139,
+ "nana": 12140,
+ "nbc": 12141,
+ "してみてくたさいね": 12142,
+ "なとはお": 12143,
+ "##wu": 12144,
+ "##かあります": 12145,
+ "##あ": 12146,
+ "note7": 12147,
+ "single": 12148,
+ "##340": 12149,
+ "せからこ": 12150,
+ "してくたさい♪この": 12151,
+ "しにはとんとんワークケートを": 12152,
+ "するとあなたにもっとマッチした": 12153,
+ "ならワークケートへ": 12154,
+ "もみつかっちゃうかも": 12155,
+ "ワークケートの": 12156,
+ "##bel": 12157,
+ "window": 12158,
+ "##dio": 12159,
+ "##ht": 12160,
+ "union": 12161,
+ "age": 12162,
+ "382": 12163,
+ "14": 12164,
+ "##ivity": 12165,
+ "##y": 12166,
+ "コメント": 12167,
+ "domain": 12168,
+ "neo": 12169,
+ "##isa": 12170,
+ "##lter": 12171,
+ "5k": 12172,
+ "f5": 12173,
+ "steven": 12174,
+ "##cts": 12175,
+ "powerpoint": 12176,
+ "tft": 12177,
+ "self": 12178,
+ "g2": 12179,
+ "ft": 12180,
+ "##テル": 12181,
+ "zol": 12182,
+ "##act": 12183,
+ "mwc": 12184,
+ "381": 12185,
+ "343": 12186,
+ "もう": 12187,
+ "nbapop": 12188,
+ "408": 12189,
+ "てある": 12190,
+ "eds": 12191,
+ "ace": 12192,
+ "##room": 12193,
+ "previous": 12194,
+ "author": 12195,
+ "tomtom": 12196,
+ "il": 12197,
+ "##ets": 12198,
+ "hu": 12199,
+ "financial": 12200,
+ "☆☆☆": 12201,
+ "っています": 12202,
+ "bp": 12203,
+ "5t": 12204,
+ "chi": 12205,
+ "1gb": 12206,
+ "##hg": 12207,
+ "fairmont": 12208,
+ "cross": 12209,
+ "008": 12210,
+ "gay": 12211,
+ "h2": 12212,
+ "function": 12213,
+ "##けて": 12214,
+ "356": 12215,
+ "also": 12216,
+ "1b": 12217,
+ "625": 12218,
+ "##ータ": 12219,
+ "##raph": 12220,
+ "1894": 12221,
+ "3~5": 12222,
+ "##ils": 12223,
+ "i3": 12224,
+ "334": 12225,
+ "avenue": 12226,
+ "##host": 12227,
+ "による": 12228,
+ "##bon": 12229,
+ "##tsu": 12230,
+ "message": 12231,
+ "navigation": 12232,
+ "50g": 12233,
+ "fintech": 12234,
+ "h6": 12235,
+ "##ことを": 12236,
+ "8cm": 12237,
+ "##ject": 12238,
+ "##vas": 12239,
+ "##firm": 12240,
+ "credit": 12241,
+ "##wf": 12242,
+ "xxxx": 12243,
+ "form": 12244,
+ "##nor": 12245,
+ "##space": 12246,
+ "huawei": 12247,
+ "plan": 12248,
+ "json": 12249,
+ "sbl": 12250,
+ "##dc": 12251,
+ "machine": 12252,
+ "921": 12253,
+ "392": 12254,
+ "wish": 12255,
+ "##120": 12256,
+ "##sol": 12257,
+ "windows7": 12258,
+ "edward": 12259,
+ "##ために": 12260,
+ "development": 12261,
+ "washington": 12262,
+ "##nsis": 12263,
+ "lo": 12264,
+ "818": 12265,
+ "##sio": 12266,
+ "##ym": 12267,
+ "##bor": 12268,
+ "planet": 12269,
+ "##~8": 12270,
+ "##wt": 12271,
+ "ieee": 12272,
+ "gpa": 12273,
+ "##めて": 12274,
+ "camp": 12275,
+ "ann": 12276,
+ "gm": 12277,
+ "##tw": 12278,
+ "##oka": 12279,
+ "connect": 12280,
+ "##rss": 12281,
+ "##work": 12282,
+ "##atus": 12283,
+ "wall": 12284,
+ "chicken": 12285,
+ "soul": 12286,
+ "2mm": 12287,
+ "##times": 12288,
+ "fa": 12289,
+ "##ather": 12290,
+ "##cord": 12291,
+ "009": 12292,
+ "##eep": 12293,
+ "hitachi": 12294,
+ "gui": 12295,
+ "harry": 12296,
+ "##pan": 12297,
+ "e1": 12298,
+ "disney": 12299,
+ "##press": 12300,
+ "##ーション": 12301,
+ "wind": 12302,
+ "386": 12303,
+ "frigidaire": 12304,
+ "##tl": 12305,
+ "liu": 12306,
+ "hsu": 12307,
+ "332": 12308,
+ "basic": 12309,
+ "von": 12310,
+ "ev": 12311,
+ "いた": 12312,
+ "てきる": 12313,
+ "スホンサーサイト": 12314,
+ "learning": 12315,
+ "##ull": 12316,
+ "expedia": 12317,
+ "archives": 12318,
+ "change": 12319,
+ "##wei": 12320,
+ "santa": 12321,
+ "cut": 12322,
+ "ins": 12323,
+ "6gb": 12324,
+ "turbo": 12325,
+ "brand": 12326,
+ "cf1": 12327,
+ "508": 12328,
+ "004": 12329,
+ "return": 12330,
+ "747": 12331,
+ "##rip": 12332,
+ "h1": 12333,
+ "##nis": 12334,
+ "##をこ": 12335,
+ "128gb": 12336,
+ "##にお": 12337,
+ "3t": 12338,
+ "application": 12339,
+ "しており": 12340,
+ "emc": 12341,
+ "rx": 12342,
+ "##oon": 12343,
+ "384": 12344,
+ "quick": 12345,
+ "412": 12346,
+ "15058": 12347,
+ "wilson": 12348,
+ "wing": 12349,
+ "chapter": 12350,
+ "##bug": 12351,
+ "beyond": 12352,
+ "##cms": 12353,
+ "##dar": 12354,
+ "##oh": 12355,
+ "zoom": 12356,
+ "e2": 12357,
+ "trip": 12358,
+ "sb": 12359,
+ "##nba": 12360,
+ "rcep": 12361,
+ "342": 12362,
+ "aspx": 12363,
+ "ci": 12364,
+ "080": 12365,
+ "gc": 12366,
+ "gnu": 12367,
+ "める": 12368,
+ "##count": 12369,
+ "advanced": 12370,
+ "dance": 12371,
+ "dv": 12372,
+ "##url": 12373,
+ "##ging": 12374,
+ "367": 12375,
+ "8591": 12376,
+ "am09": 12377,
+ "shadow": 12378,
+ "battle": 12379,
+ "346": 12380,
+ "##i": 12381,
+ "##cia": 12382,
+ "##という": 12383,
+ "emily": 12384,
+ "##のてす": 12385,
+ "##tation": 12386,
+ "host": 12387,
+ "ff": 12388,
+ "techorz": 12389,
+ "sars": 12390,
+ "##mini": 12391,
+ "##mporary": 12392,
+ "##ering": 12393,
+ "nc": 12394,
+ "4200": 12395,
+ "798": 12396,
+ "##next": 12397,
+ "cma": 12398,
+ "##mbps": 12399,
+ "##gas": 12400,
+ "##ift": 12401,
+ "##dot": 12402,
+ "##ィ": 12403,
+ "455": 12404,
+ "##~17": 12405,
+ "amana": 12406,
+ "##りの": 12407,
+ "426": 12408,
+ "##ros": 12409,
+ "ir": 12410,
+ "00㎡1": 12411,
+ "##eet": 12412,
+ "##ible": 12413,
+ "##↓": 12414,
+ "710": 12415,
+ "ˋ▽ˊ": 12416,
+ "##aka": 12417,
+ "dcs": 12418,
+ "iq": 12419,
+ "##v": 12420,
+ "l1": 12421,
+ "##lor": 12422,
+ "maggie": 12423,
+ "##011": 12424,
+ "##iu": 12425,
+ "588": 12426,
+ "##~1": 12427,
+ "830": 12428,
+ "##gt": 12429,
+ "1tb": 12430,
+ "articles": 12431,
+ "create": 12432,
+ "##burg": 12433,
+ "##iki": 12434,
+ "database": 12435,
+ "fantasy": 12436,
+ "##rex": 12437,
+ "##cam": 12438,
+ "dlc": 12439,
+ "dean": 12440,
+ "##you": 12441,
+ "hard": 12442,
+ "path": 12443,
+ "gaming": 12444,
+ "victoria": 12445,
+ "maps": 12446,
+ "cb": 12447,
+ "##lee": 12448,
+ "##itor": 12449,
+ "overchicstoretvhome": 12450,
+ "systems": 12451,
+ "##xt": 12452,
+ "416": 12453,
+ "p3": 12454,
+ "sarah": 12455,
+ "760": 12456,
+ "##nan": 12457,
+ "407": 12458,
+ "486": 12459,
+ "x9": 12460,
+ "install": 12461,
+ "second": 12462,
+ "626": 12463,
+ "##ann": 12464,
+ "##ph": 12465,
+ "##rcle": 12466,
+ "##nic": 12467,
+ "860": 12468,
+ "##nar": 12469,
+ "ec": 12470,
+ "##とう": 12471,
+ "768": 12472,
+ "metro": 12473,
+ "chocolate": 12474,
+ "##rian": 12475,
+ "~4": 12476,
+ "##table": 12477,
+ "##しています": 12478,
+ "skin": 12479,
+ "##sn": 12480,
+ "395": 12481,
+ "mountain": 12482,
+ "##0mm": 12483,
+ "inparadise": 12484,
+ "6m": 12485,
+ "7x24": 12486,
+ "ib": 12487,
+ "4800": 12488,
+ "##jia": 12489,
+ "eeworld": 12490,
+ "creative": 12491,
+ "g5": 12492,
+ "g3": 12493,
+ "357": 12494,
+ "parker": 12495,
+ "ecfa": 12496,
+ "village": 12497,
+ "からの": 12498,
+ "18000": 12499,
+ "sylvia": 12500,
+ "サーヒス": 12501,
+ "hbl": 12502,
+ "##ques": 12503,
+ "##onsored": 12504,
+ "##x2": 12505,
+ "##きます": 12506,
+ "##v4": 12507,
+ "##tein": 12508,
+ "ie6": 12509,
+ "383": 12510,
+ "##stack": 12511,
+ "389": 12512,
+ "ver": 12513,
+ "##ads": 12514,
+ "##baby": 12515,
+ "sound": 12516,
+ "bbe": 12517,
+ "##110": 12518,
+ "##lone": 12519,
+ "##uid": 12520,
+ "ads": 12521,
+ "022": 12522,
+ "gundam": 12523,
+ "351": 12524,
+ "thinkpad": 12525,
+ "006": 12526,
+ "scrum": 12527,
+ "match": 12528,
+ "##ave": 12529,
+ "mems": 12530,
+ "##470": 12531,
+ "##oy": 12532,
+ "##なりました": 12533,
+ "##talk": 12534,
+ "glass": 12535,
+ "lamigo": 12536,
+ "span": 12537,
+ "##eme": 12538,
+ "job": 12539,
+ "##a5": 12540,
+ "jay": 12541,
+ "wade": 12542,
+ "kde": 12543,
+ "498": 12544,
+ "##lace": 12545,
+ "ocean": 12546,
+ "tvg": 12547,
+ "##covery": 12548,
+ "##r3": 12549,
+ "##ners": 12550,
+ "##rea": 12551,
+ "junior": 12552,
+ "think": 12553,
+ "##aine": 12554,
+ "cover": 12555,
+ "##ision": 12556,
+ "##sia": 12557,
+ "↓↓": 12558,
+ "##bow": 12559,
+ "msi": 12560,
+ "413": 12561,
+ "458": 12562,
+ "406": 12563,
+ "##love": 12564,
+ "711": 12565,
+ "801": 12566,
+ "soft": 12567,
+ "z2": 12568,
+ "##pl": 12569,
+ "456": 12570,
+ "1840": 12571,
+ "mobil": 12572,
+ "mind": 12573,
+ "##uy": 12574,
+ "427": 12575,
+ "nginx": 12576,
+ "##oi": 12577,
+ "めた": 12578,
+ "##rr": 12579,
+ "6221": 12580,
+ "##mple": 12581,
+ "##sson": 12582,
+ "##ーシてす": 12583,
+ "371": 12584,
+ "##nts": 12585,
+ "91tv": 12586,
+ "comhd": 12587,
+ "crv3000": 12588,
+ "##uard": 12589,
+ "1868": 12590,
+ "397": 12591,
+ "deep": 12592,
+ "lost": 12593,
+ "field": 12594,
+ "gallery": 12595,
+ "##bia": 12596,
+ "rate": 12597,
+ "spf": 12598,
+ "redis": 12599,
+ "traction": 12600,
+ "930": 12601,
+ "icloud": 12602,
+ "011": 12603,
+ "なら": 12604,
+ "fe": 12605,
+ "jose": 12606,
+ "372": 12607,
+ "##tory": 12608,
+ "into": 12609,
+ "sohu": 12610,
+ "fx": 12611,
+ "899": 12612,
+ "379": 12613,
+ "kicstart2": 12614,
+ "##hia": 12615,
+ "すく": 12616,
+ "##~3": 12617,
+ "##sit": 12618,
+ "ra": 12619,
+ "24": 12620,
+ "##walk": 12621,
+ "##xure": 12622,
+ "500g": 12623,
+ "##pact": 12624,
+ "pacific": 12625,
+ "xa": 12626,
+ "natural": 12627,
+ "carlo": 12628,
+ "##250": 12629,
+ "##walker": 12630,
+ "1850": 12631,
+ "##can": 12632,
+ "cto": 12633,
+ "gigi": 12634,
+ "516": 12635,
+ "##サー": 12636,
+ "pen": 12637,
+ "##hoo": 12638,
+ "ob": 12639,
+ "matlab": 12640,
+ "##b": 12641,
+ "##yy": 12642,
+ "13913459": 12643,
+ "##iti": 12644,
+ "mango": 12645,
+ "##bbs": 12646,
+ "sense": 12647,
+ "c5": 12648,
+ "oxford": 12649,
+ "##ニア": 12650,
+ "walker": 12651,
+ "jennifer": 12652,
+ "##ola": 12653,
+ "course": 12654,
+ "##bre": 12655,
+ "701": 12656,
+ "##pus": 12657,
+ "##rder": 12658,
+ "lucky": 12659,
+ "075": 12660,
+ "##ぁ": 12661,
+ "ivy": 12662,
+ "なお": 12663,
+ "##nia": 12664,
+ "sotheby": 12665,
+ "side": 12666,
+ "##ugh": 12667,
+ "joy": 12668,
+ "##orage": 12669,
+ "##ush": 12670,
+ "##bat": 12671,
+ "##dt": 12672,
+ "364": 12673,
+ "r9": 12674,
+ "##2d": 12675,
+ "##gio": 12676,
+ "511": 12677,
+ "country": 12678,
+ "wear": 12679,
+ "##lax": 12680,
+ "##~7": 12681,
+ "##moon": 12682,
+ "393": 12683,
+ "seven": 12684,
+ "study": 12685,
+ "411": 12686,
+ "348": 12687,
+ "lonzo": 12688,
+ "8k": 12689,
+ "##ェ": 12690,
+ "evolution": 12691,
+ "##イフ": 12692,
+ "##kk": 12693,
+ "gs": 12694,
+ "kd": 12695,
+ "##レス": 12696,
+ "arduino": 12697,
+ "344": 12698,
+ "b12": 12699,
+ "##lux": 12700,
+ "arpg": 12701,
+ "##rdon": 12702,
+ "cook": 12703,
+ "##x5": 12704,
+ "dark": 12705,
+ "five": 12706,
+ "##als": 12707,
+ "##ida": 12708,
+ "とても": 12709,
+ "sign": 12710,
+ "362": 12711,
+ "##ちの": 12712,
+ "something": 12713,
+ "20mm": 12714,
+ "##nda": 12715,
+ "387": 12716,
+ "##posted": 12717,
+ "fresh": 12718,
+ "tf": 12719,
+ "1870": 12720,
+ "422": 12721,
+ "cam": 12722,
+ "##mine": 12723,
+ "##skip": 12724,
+ "##form": 12725,
+ "##ssion": 12726,
+ "education": 12727,
+ "394": 12728,
+ "##tee": 12729,
+ "dyson": 12730,
+ "stage": 12731,
+ "##jie": 12732,
+ "want": 12733,
+ "##night": 12734,
+ "epson": 12735,
+ "pack": 12736,
+ "あります": 12737,
+ "##ppy": 12738,
+ "テリヘル": 12739,
+ "##█": 12740,
+ "wd": 12741,
+ "##eh": 12742,
+ "##rence": 12743,
+ "left": 12744,
+ "##lvin": 12745,
+ "golden": 12746,
+ "mhz": 12747,
+ "discovery": 12748,
+ "##trix": 12749,
+ "##n2": 12750,
+ "loft": 12751,
+ "##uch": 12752,
+ "##dra": 12753,
+ "##sse": 12754,
+ "speed": 12755,
+ "~1": 12756,
+ "1mdb": 12757,
+ "sorry": 12758,
+ "welcome": 12759,
+ "##urn": 12760,
+ "wave": 12761,
+ "gaga": 12762,
+ "##lmer": 12763,
+ "teddy": 12764,
+ "##160": 12765,
+ "トラックハック": 12766,
+ "せよ": 12767,
+ "611": 12768,
+ "##f2016": 12769,
+ "378": 12770,
+ "rp": 12771,
+ "##sha": 12772,
+ "rar": 12773,
+ "##あなたに": 12774,
+ "##きた": 12775,
+ "840": 12776,
+ "holiday": 12777,
+ "##ュー": 12778,
+ "373": 12779,
+ "074": 12780,
+ "##vg": 12781,
+ "##nos": 12782,
+ "##rail": 12783,
+ "gartner": 12784,
+ "gi": 12785,
+ "6p": 12786,
+ "##dium": 12787,
+ "kit": 12788,
+ "488": 12789,
+ "b3": 12790,
+ "eco": 12791,
+ "##ろう": 12792,
+ "20g": 12793,
+ "sean": 12794,
+ "##stone": 12795,
+ "autocad": 12796,
+ "nu": 12797,
+ "##np": 12798,
+ "f16": 12799,
+ "write": 12800,
+ "029": 12801,
+ "m5": 12802,
+ "##ias": 12803,
+ "images": 12804,
+ "atp": 12805,
+ "##dk": 12806,
+ "fsm": 12807,
+ "504": 12808,
+ "1350": 12809,
+ "ve": 12810,
+ "52kb": 12811,
+ "##xxx": 12812,
+ "##のに": 12813,
+ "##cake": 12814,
+ "414": 12815,
+ "unit": 12816,
+ "lim": 12817,
+ "ru": 12818,
+ "1v": 12819,
+ "##ification": 12820,
+ "published": 12821,
+ "angela": 12822,
+ "16g": 12823,
+ "analytics": 12824,
+ "ak": 12825,
+ "##q": 12826,
+ "##nel": 12827,
+ "gmt": 12828,
+ "##icon": 12829,
+ "again": 12830,
+ "##₂": 12831,
+ "##bby": 12832,
+ "ios11": 12833,
+ "445": 12834,
+ "かこさいます": 12835,
+ "waze": 12836,
+ "いてす": 12837,
+ "##ハ": 12838,
+ "9985": 12839,
+ "##ust": 12840,
+ "##ティー": 12841,
+ "framework": 12842,
+ "##007": 12843,
+ "iptv": 12844,
+ "delete": 12845,
+ "52sykb": 12846,
+ "cl": 12847,
+ "wwdc": 12848,
+ "027": 12849,
+ "30cm": 12850,
+ "##fw": 12851,
+ "##ての": 12852,
+ "1389": 12853,
+ "##xon": 12854,
+ "brandt": 12855,
+ "##ses": 12856,
+ "##dragon": 12857,
+ "tc": 12858,
+ "vetements": 12859,
+ "anne": 12860,
+ "monte": 12861,
+ "modern": 12862,
+ "official": 12863,
+ "##へて": 12864,
+ "##ere": 12865,
+ "##nne": 12866,
+ "##oud": 12867,
+ "もちろん": 12868,
+ "50": 12869,
+ "etnews": 12870,
+ "##a2": 12871,
+ "##graphy": 12872,
+ "421": 12873,
+ "863": 12874,
+ "##ちゃん": 12875,
+ "444": 12876,
+ "##rtex": 12877,
+ "##てお": 12878,
+ "l2": 12879,
+ "##gma": 12880,
+ "mount": 12881,
+ "ccd": 12882,
+ "たと": 12883,
+ "archive": 12884,
+ "morning": 12885,
+ "tan": 12886,
+ "ddos": 12887,
+ "e7": 12888,
+ "##ホ": 12889,
+ "day4": 12890,
+ "##ウ": 12891,
+ "gis": 12892,
+ "453": 12893,
+ "its": 12894,
+ "495": 12895,
+ "factory": 12896,
+ "bruce": 12897,
+ "pg": 12898,
+ "##ito": 12899,
+ "ってくたさい": 12900,
+ "guest": 12901,
+ "cdma": 12902,
+ "##lling": 12903,
+ "536": 12904,
+ "n3": 12905,
+ "しかし": 12906,
+ "3~4": 12907,
+ "mega": 12908,
+ "eyes": 12909,
+ "ro": 12910,
+ "13": 12911,
+ "women": 12912,
+ "dac": 12913,
+ "church": 12914,
+ "##jun": 12915,
+ "singapore": 12916,
+ "##facebook": 12917,
+ "6991": 12918,
+ "starbucks": 12919,
+ "##tos": 12920,
+ "##stin": 12921,
+ "##shine": 12922,
+ "zen": 12923,
+ "##mu": 12924,
+ "tina": 12925,
+ "20℃": 12926,
+ "1893": 12927,
+ "##たけて": 12928,
+ "503": 12929,
+ "465": 12930,
+ "request": 12931,
+ "##gence": 12932,
+ "qt": 12933,
+ "##っ": 12934,
+ "1886": 12935,
+ "347": 12936,
+ "363": 12937,
+ "q7": 12938,
+ "##zzi": 12939,
+ "diary": 12940,
+ "##tore": 12941,
+ "409": 12942,
+ "##ead": 12943,
+ "468": 12944,
+ "cst": 12945,
+ "##osa": 12946,
+ "canada": 12947,
+ "agent": 12948,
+ "va": 12949,
+ "##jiang": 12950,
+ "##ちは": 12951,
+ "##ーク": 12952,
+ "##lam": 12953,
+ "sg": 12954,
+ "##nix": 12955,
+ "##sday": 12956,
+ "##よって": 12957,
+ "g6": 12958,
+ "##master": 12959,
+ "bing": 12960,
+ "##zl": 12961,
+ "charlie": 12962,
+ "16": 12963,
+ "8mm": 12964,
+ "nb40": 12965,
+ "##ーン": 12966,
+ "thai": 12967,
+ "##ルフ": 12968,
+ "ln284ct": 12969,
+ "##itz": 12970,
+ "##2f": 12971,
+ "bonnie": 12972,
+ "##food": 12973,
+ "##lent": 12974,
+ "originals": 12975,
+ "##stro": 12976,
+ "##lts": 12977,
+ "418": 12978,
+ "∟∣": 12979,
+ "##bscribe": 12980,
+ "children": 12981,
+ "ntd": 12982,
+ "yesstyle": 12983,
+ "##かも": 12984,
+ "hmv": 12985,
+ "##tment": 12986,
+ "d5": 12987,
+ "2cm": 12988,
+ "arts": 12989,
+ "sms": 12990,
+ "##pn": 12991,
+ "##я": 12992,
+ "##いい": 12993,
+ "topios9": 12994,
+ "539": 12995,
+ "lifestyle": 12996,
+ "virtual": 12997,
+ "##ague": 12998,
+ "xz": 12999,
+ "##deo": 13000,
+ "muji": 13001,
+ "024": 13002,
+ "unt": 13003,
+ "##nnis": 13004,
+ "##ᅩ": 13005,
+ "faq1": 13006,
+ "1884": 13007,
+ "396": 13008,
+ "##ette": 13009,
+ "fly": 13010,
+ "64㎡": 13011,
+ "はしめまして": 13012,
+ "441": 13013,
+ "curry": 13014,
+ "##pop": 13015,
+ "のこ": 13016,
+ "release": 13017,
+ "##←": 13018,
+ "##◆◆": 13019,
+ "##cast": 13020,
+ "073": 13021,
+ "ありな": 13022,
+ "500ml": 13023,
+ "##ews": 13024,
+ "5c": 13025,
+ "##stle": 13026,
+ "ios7": 13027,
+ "##ima": 13028,
+ "787": 13029,
+ "dog": 13030,
+ "lenovo": 13031,
+ "##r4": 13032,
+ "roger": 13033,
+ "013": 13034,
+ "cbs": 13035,
+ "vornado": 13036,
+ "100m": 13037,
+ "417": 13038,
+ "##desk": 13039,
+ "##クok": 13040,
+ "##ald": 13041,
+ "1867": 13042,
+ "9595": 13043,
+ "2900": 13044,
+ "##van": 13045,
+ "oil": 13046,
+ "##x": 13047,
+ "some": 13048,
+ "break": 13049,
+ "common": 13050,
+ "##jy": 13051,
+ "##lines": 13052,
+ "g7": 13053,
+ "twice": 13054,
+ "419": 13055,
+ "ella": 13056,
+ "nano": 13057,
+ "belle": 13058,
+ "にこ": 13059,
+ "##mes": 13060,
+ "##self": 13061,
+ "##note": 13062,
+ "jb": 13063,
+ "##ことかてきます": 13064,
+ "benz": 13065,
+ "##との": 13066,
+ "##ova": 13067,
+ "451": 13068,
+ "save": 13069,
+ "##wing": 13070,
+ "##ますのて": 13071,
+ "kai": 13072,
+ "りは": 13073,
+ "##hua": 13074,
+ "##rect": 13075,
+ "rainer": 13076,
+ "##unge": 13077,
+ "448": 13078,
+ "##0m": 13079,
+ "adsl": 13080,
+ "##かな": 13081,
+ "guestname": 13082,
+ "##uma": 13083,
+ "##kins": 13084,
+ "##zu": 13085,
+ "tokichoi": 13086,
+ "##price": 13087,
+ "county": 13088,
+ "##med": 13089,
+ "##mus": 13090,
+ "rmk": 13091,
+ "391": 13092,
+ "address": 13093,
+ "vm": 13094,
+ "えて": 13095,
+ "openload": 13096,
+ "##group": 13097,
+ "##hin": 13098,
+ "##iginal": 13099,
+ "amg": 13100,
+ "urban": 13101,
+ "##oz": 13102,
+ "jobs": 13103,
+ "emi": 13104,
+ "##public": 13105,
+ "beautiful": 13106,
+ "##sch": 13107,
+ "album": 13108,
+ "##dden": 13109,
+ "##bell": 13110,
+ "jerry": 13111,
+ "works": 13112,
+ "hostel": 13113,
+ "miller": 13114,
+ "##drive": 13115,
+ "##rmin": 13116,
+ "##10": 13117,
+ "376": 13118,
+ "boot": 13119,
+ "828": 13120,
+ "##370": 13121,
+ "##fx": 13122,
+ "##cm~": 13123,
+ "1885": 13124,
+ "##nome": 13125,
+ "##ctionary": 13126,
+ "##oman": 13127,
+ "##lish": 13128,
+ "##cr": 13129,
+ "##hm": 13130,
+ "433": 13131,
+ "##how": 13132,
+ "432": 13133,
+ "francis": 13134,
+ "xi": 13135,
+ "c919": 13136,
+ "b5": 13137,
+ "evernote": 13138,
+ "##uc": 13139,
+ "vga": 13140,
+ "##3000": 13141,
+ "coupe": 13142,
+ "##urg": 13143,
+ "##cca": 13144,
+ "##uality": 13145,
+ "019": 13146,
+ "6g": 13147,
+ "れる": 13148,
+ "multi": 13149,
+ "##また": 13150,
+ "##ett": 13151,
+ "em": 13152,
+ "hey": 13153,
+ "##ani": 13154,
+ "##tax": 13155,
+ "##rma": 13156,
+ "inside": 13157,
+ "than": 13158,
+ "740": 13159,
+ "leonnhurt": 13160,
+ "##jin": 13161,
+ "ict": 13162,
+ "れた": 13163,
+ "bird": 13164,
+ "notes": 13165,
+ "200mm": 13166,
+ "くの": 13167,
+ "##dical": 13168,
+ "##lli": 13169,
+ "result": 13170,
+ "442": 13171,
+ "iu": 13172,
+ "ee": 13173,
+ "438": 13174,
+ "smap": 13175,
+ "gopro": 13176,
+ "##last": 13177,
+ "yin": 13178,
+ "pure": 13179,
+ "998": 13180,
+ "32g": 13181,
+ "けた": 13182,
+ "5kg": 13183,
+ "##dan": 13184,
+ "##rame": 13185,
+ "mama": 13186,
+ "##oot": 13187,
+ "bean": 13188,
+ "marketing": 13189,
+ "##hur": 13190,
+ "2l": 13191,
+ "bella": 13192,
+ "sync": 13193,
+ "xuite": 13194,
+ "##ground": 13195,
+ "515": 13196,
+ "discuz": 13197,
+ "##getrelax": 13198,
+ "##ince": 13199,
+ "##bay": 13200,
+ "##5s": 13201,
+ "cj": 13202,
+ "##イス": 13203,
+ "gmat": 13204,
+ "apt": 13205,
+ "##pass": 13206,
+ "jing": 13207,
+ "##rix": 13208,
+ "c4": 13209,
+ "rich": 13210,
+ "##とても": 13211,
+ "niusnews": 13212,
+ "##ello": 13213,
+ "bag": 13214,
+ "770": 13215,
+ "##eting": 13216,
+ "##mobile": 13217,
+ "18": 13218,
+ "culture": 13219,
+ "015": 13220,
+ "##のてすか": 13221,
+ "377": 13222,
+ "1020": 13223,
+ "area": 13224,
+ "##ience": 13225,
+ "616": 13226,
+ "details": 13227,
+ "gp": 13228,
+ "universal": 13229,
+ "silver": 13230,
+ "dit": 13231,
+ "はお": 13232,
+ "private": 13233,
+ "ddd": 13234,
+ "u11": 13235,
+ "kanshu": 13236,
+ "##ified": 13237,
+ "fung": 13238,
+ "##nny": 13239,
+ "dx": 13240,
+ "##520": 13241,
+ "tai": 13242,
+ "475": 13243,
+ "023": 13244,
+ "##fr": 13245,
+ "##lean": 13246,
+ "3s": 13247,
+ "##pin": 13248,
+ "429": 13249,
+ "##rin": 13250,
+ "25000": 13251,
+ "ly": 13252,
+ "rick": 13253,
+ "##bility": 13254,
+ "usb3": 13255,
+ "banner": 13256,
+ "##baru": 13257,
+ "##gion": 13258,
+ "metal": 13259,
+ "dt": 13260,
+ "vdf": 13261,
+ "1871": 13262,
+ "karl": 13263,
+ "qualcomm": 13264,
+ "bear": 13265,
+ "1010": 13266,
+ "oldid": 13267,
+ "ian": 13268,
+ "jo": 13269,
+ "##tors": 13270,
+ "population": 13271,
+ "##ernel": 13272,
+ "1882": 13273,
+ "mmorpg": 13274,
+ "##mv": 13275,
+ "##bike": 13276,
+ "603": 13277,
+ "##©": 13278,
+ "ww": 13279,
+ "friend": 13280,
+ "##ager": 13281,
+ "exhibition": 13282,
+ "##del": 13283,
+ "##pods": 13284,
+ "fpx": 13285,
+ "structure": 13286,
+ "##free": 13287,
+ "##tings": 13288,
+ "kl": 13289,
+ "##rley": 13290,
+ "##copyright": 13291,
+ "##mma": 13292,
+ "california": 13293,
+ "3400": 13294,
+ "orange": 13295,
+ "yoga": 13296,
+ "4l": 13297,
+ "canmake": 13298,
+ "honey": 13299,
+ "##anda": 13300,
+ "##コメント": 13301,
+ "595": 13302,
+ "nikkie": 13303,
+ "##ルハイト": 13304,
+ "dhl": 13305,
+ "publishing": 13306,
+ "##mall": 13307,
+ "##gnet": 13308,
+ "20cm": 13309,
+ "513": 13310,
+ "##クセス": 13311,
+ "##┅": 13312,
+ "e88": 13313,
+ "970": 13314,
+ "##dog": 13315,
+ "fishbase": 13316,
+ "##!": 13317,
+ "##\"": 13318,
+ "###": 13319,
+ "##$": 13320,
+ "##%": 13321,
+ "##&": 13322,
+ "##'": 13323,
+ "##(": 13324,
+ "##)": 13325,
+ "##*": 13326,
+ "##+": 13327,
+ "##,": 13328,
+ "##-": 13329,
+ "##.": 13330,
+ "##/": 13331,
+ "##:": 13332,
+ "##;": 13333,
+ "##<": 13334,
+ "##=": 13335,
+ "##>": 13336,
+ "##?": 13337,
+ "##@": 13338,
+ "##[": 13339,
+ "##\\": 13340,
+ "##]": 13341,
+ "##^": 13342,
+ "##_": 13343,
+ "##{": 13344,
+ "##|": 13345,
+ "##}": 13346,
+ "##~": 13347,
+ "##£": 13348,
+ "##¤": 13349,
+ "##¥": 13350,
+ "##§": 13351,
+ "##«": 13352,
+ "##±": 13353,
+ "##³": 13354,
+ "##µ": 13355,
+ "##·": 13356,
+ "##¹": 13357,
+ "##º": 13358,
+ "##»": 13359,
+ "##¼": 13360,
+ "##ß": 13361,
+ "##æ": 13362,
+ "##÷": 13363,
+ "##ø": 13364,
+ "##đ": 13365,
+ "##ŋ": 13366,
+ "##ɔ": 13367,
+ "##ə": 13368,
+ "##ɡ": 13369,
+ "##ʰ": 13370,
+ "##ˇ": 13371,
+ "##ˈ": 13372,
+ "##ˊ": 13373,
+ "##ˋ": 13374,
+ "##ˍ": 13375,
+ "##ː": 13376,
+ "##˙": 13377,
+ "##˚": 13378,
+ "##ˢ": 13379,
+ "##α": 13380,
+ "##β": 13381,
+ "##γ": 13382,
+ "##δ": 13383,
+ "##ε": 13384,
+ "##η": 13385,
+ "##θ": 13386,
+ "##ι": 13387,
+ "##κ": 13388,
+ "##λ": 13389,
+ "##μ": 13390,
+ "##ν": 13391,
+ "##ο": 13392,
+ "##π": 13393,
+ "##ρ": 13394,
+ "##ς": 13395,
+ "##σ": 13396,
+ "##τ": 13397,
+ "##υ": 13398,
+ "##φ": 13399,
+ "##χ": 13400,
+ "##ψ": 13401,
+ "##б": 13402,
+ "##в": 13403,
+ "##г": 13404,
+ "##д": 13405,
+ "##е": 13406,
+ "##ж": 13407,
+ "##з": 13408,
+ "##к": 13409,
+ "##л": 13410,
+ "##м": 13411,
+ "##н": 13412,
+ "##о": 13413,
+ "##п": 13414,
+ "##р": 13415,
+ "##с": 13416,
+ "##т": 13417,
+ "##у": 13418,
+ "##ф": 13419,
+ "##х": 13420,
+ "##ц": 13421,
+ "##ч": 13422,
+ "##ш": 13423,
+ "##ы": 13424,
+ "##ь": 13425,
+ "##і": 13426,
+ "##ا": 13427,
+ "##ب": 13428,
+ "##ة": 13429,
+ "##ت": 13430,
+ "##د": 13431,
+ "##ر": 13432,
+ "##س": 13433,
+ "##ع": 13434,
+ "##ل": 13435,
+ "##م": 13436,
+ "##ن": 13437,
+ "##ه": 13438,
+ "##و": 13439,
+ "##ي": 13440,
+ "##۩": 13441,
+ "##ก": 13442,
+ "##ง": 13443,
+ "##น": 13444,
+ "##ม": 13445,
+ "##ย": 13446,
+ "##ร": 13447,
+ "##อ": 13448,
+ "##า": 13449,
+ "##เ": 13450,
+ "##๑": 13451,
+ "##་": 13452,
+ "##ღ": 13453,
+ "##ᄀ": 13454,
+ "##ᄁ": 13455,
+ "##ᄂ": 13456,
+ "##ᄃ": 13457,
+ "##ᄅ": 13458,
+ "##ᄆ": 13459,
+ "##ᄇ": 13460,
+ "##ᄈ": 13461,
+ "##ᄉ": 13462,
+ "##ᄋ": 13463,
+ "##ᄌ": 13464,
+ "##ᄎ": 13465,
+ "##ᄏ": 13466,
+ "##ᄐ": 13467,
+ "##ᄑ": 13468,
+ "##ᄒ": 13469,
+ "##ᅢ": 13470,
+ "##ᅣ": 13471,
+ "##ᅥ": 13472,
+ "##ᅦ": 13473,
+ "##ᅧ": 13474,
+ "##ᅨ": 13475,
+ "##ᅪ": 13476,
+ "##ᅬ": 13477,
+ "##ᅭ": 13478,
+ "##ᅮ": 13479,
+ "##ᅯ": 13480,
+ "##ᅲ": 13481,
+ "##ᅳ": 13482,
+ "##ᅴ": 13483,
+ "##ᆷ": 13484,
+ "##ᆸ": 13485,
+ "##ᆺ": 13486,
+ "##ᆻ": 13487,
+ "##ᗜ": 13488,
+ "##ᵃ": 13489,
+ "##ᵉ": 13490,
+ "##ᵍ": 13491,
+ "##ᵏ": 13492,
+ "##ᵐ": 13493,
+ "##ᵒ": 13494,
+ "##ᵘ": 13495,
+ "##‖": 13496,
+ "##„": 13497,
+ "##†": 13498,
+ "##•": 13499,
+ "##‥": 13500,
+ "##‧": 13501,
+ "##
": 13502,
+ "##‰": 13503,
+ "##′": 13504,
+ "##″": 13505,
+ "##‹": 13506,
+ "##›": 13507,
+ "##※": 13508,
+ "##‿": 13509,
+ "##⁄": 13510,
+ "##ⁱ": 13511,
+ "##⁺": 13512,
+ "##ⁿ": 13513,
+ "##₁": 13514,
+ "##₃": 13515,
+ "##₄": 13516,
+ "##€": 13517,
+ "##№": 13518,
+ "##ⅰ": 13519,
+ "##ⅱ": 13520,
+ "##ⅲ": 13521,
+ "##ⅳ": 13522,
+ "##ⅴ": 13523,
+ "##↔": 13524,
+ "##↗": 13525,
+ "##↘": 13526,
+ "##⇒": 13527,
+ "##∀": 13528,
+ "##−": 13529,
+ "##∕": 13530,
+ "##∙": 13531,
+ "##√": 13532,
+ "##∞": 13533,
+ "##∟": 13534,
+ "##∠": 13535,
+ "##∣": 13536,
+ "##∩": 13537,
+ "##∮": 13538,
+ "##∶": 13539,
+ "##∼": 13540,
+ "##∽": 13541,
+ "##≈": 13542,
+ "##≒": 13543,
+ "##≡": 13544,
+ "##≤": 13545,
+ "##≥": 13546,
+ "##≦": 13547,
+ "##≧": 13548,
+ "##≪": 13549,
+ "##≫": 13550,
+ "##⊙": 13551,
+ "##⋅": 13552,
+ "##⋈": 13553,
+ "##⋯": 13554,
+ "##⌒": 13555,
+ "##①": 13556,
+ "##②": 13557,
+ "##③": 13558,
+ "##④": 13559,
+ "##⑤": 13560,
+ "##⑥": 13561,
+ "##⑦": 13562,
+ "##⑧": 13563,
+ "##⑨": 13564,
+ "##⑩": 13565,
+ "##⑴": 13566,
+ "##⑵": 13567,
+ "##⑶": 13568,
+ "##⑷": 13569,
+ "##⑸": 13570,
+ "##⒈": 13571,
+ "##⒉": 13572,
+ "##⒊": 13573,
+ "##⒋": 13574,
+ "##ⓒ": 13575,
+ "##ⓔ": 13576,
+ "##ⓘ": 13577,
+ "##━": 13578,
+ "##┃": 13579,
+ "##┆": 13580,
+ "##┊": 13581,
+ "##┌": 13582,
+ "##└": 13583,
+ "##├": 13584,
+ "##┣": 13585,
+ "##═": 13586,
+ "##║": 13587,
+ "##╚": 13588,
+ "##╞": 13589,
+ "##╠": 13590,
+ "##╭": 13591,
+ "##╮": 13592,
+ "##╯": 13593,
+ "##╰": 13594,
+ "##╱": 13595,
+ "##╳": 13596,
+ "##▂": 13597,
+ "##▃": 13598,
+ "##▅": 13599,
+ "##▇": 13600,
+ "##▉": 13601,
+ "##▋": 13602,
+ "##▌": 13603,
+ "##▍": 13604,
+ "##▎": 13605,
+ "##□": 13606,
+ "##▪": 13607,
+ "##▫": 13608,
+ "##▬": 13609,
+ "##△": 13610,
+ "##▶": 13611,
+ "##►": 13612,
+ "##▽": 13613,
+ "##◇": 13614,
+ "##◕": 13615,
+ "##◠": 13616,
+ "##◢": 13617,
+ "##◤": 13618,
+ "##☀": 13619,
+ "##☕": 13620,
+ "##☞": 13621,
+ "##☺": 13622,
+ "##☼": 13623,
+ "##♀": 13624,
+ "##♂": 13625,
+ "##♠": 13626,
+ "##♡": 13627,
+ "##♣": 13628,
+ "##♦": 13629,
+ "##♫": 13630,
+ "##♬": 13631,
+ "##✈": 13632,
+ "##✔": 13633,
+ "##✕": 13634,
+ "##✖": 13635,
+ "##✦": 13636,
+ "##✨": 13637,
+ "##✪": 13638,
+ "##✰": 13639,
+ "##✿": 13640,
+ "##❀": 13641,
+ "##➜": 13642,
+ "##➤": 13643,
+ "##⦿": 13644,
+ "##、": 13645,
+ "##。": 13646,
+ "##〃": 13647,
+ "##々": 13648,
+ "##〇": 13649,
+ "##〈": 13650,
+ "##〉": 13651,
+ "##《": 13652,
+ "##》": 13653,
+ "##「": 13654,
+ "##」": 13655,
+ "##『": 13656,
+ "##』": 13657,
+ "##【": 13658,
+ "##】": 13659,
+ "##〓": 13660,
+ "##〔": 13661,
+ "##〕": 13662,
+ "##〖": 13663,
+ "##〗": 13664,
+ "##〜": 13665,
+ "##〝": 13666,
+ "##〞": 13667,
+ "##ぃ": 13668,
+ "##ぇ": 13669,
+ "##ぬ": 13670,
+ "##ふ": 13671,
+ "##ほ": 13672,
+ "##む": 13673,
+ "##ゃ": 13674,
+ "##ゅ": 13675,
+ "##ゆ": 13676,
+ "##ょ": 13677,
+ "##゜": 13678,
+ "##ゝ": 13679,
+ "##ァ": 13680,
+ "##ゥ": 13681,
+ "##エ": 13682,
+ "##ォ": 13683,
+ "##ケ": 13684,
+ "##サ": 13685,
+ "##セ": 13686,
+ "##ソ": 13687,
+ "##ッ": 13688,
+ "##ニ": 13689,
+ "##ヌ": 13690,
+ "##ネ": 13691,
+ "##ノ": 13692,
+ "##ヘ": 13693,
+ "##モ": 13694,
+ "##ャ": 13695,
+ "##ヤ": 13696,
+ "##ュ": 13697,
+ "##ユ": 13698,
+ "##ョ": 13699,
+ "##ヨ": 13700,
+ "##ワ": 13701,
+ "##ヲ": 13702,
+ "##・": 13703,
+ "##ヽ": 13704,
+ "##ㄅ": 13705,
+ "##ㄆ": 13706,
+ "##ㄇ": 13707,
+ "##ㄉ": 13708,
+ "##ㄋ": 13709,
+ "##ㄌ": 13710,
+ "##ㄍ": 13711,
+ "##ㄎ": 13712,
+ "##ㄏ": 13713,
+ "##ㄒ": 13714,
+ "##ㄚ": 13715,
+ "##ㄛ": 13716,
+ "##ㄞ": 13717,
+ "##ㄟ": 13718,
+ "##ㄢ": 13719,
+ "##ㄤ": 13720,
+ "##ㄥ": 13721,
+ "##ㄧ": 13722,
+ "##ㄨ": 13723,
+ "##ㆍ": 13724,
+ "##㈦": 13725,
+ "##㊣": 13726,
+ "##㗎": 13727,
+ "##一": 13728,
+ "##丁": 13729,
+ "##七": 13730,
+ "##万": 13731,
+ "##丈": 13732,
+ "##三": 13733,
+ "##上": 13734,
+ "##下": 13735,
+ "##不": 13736,
+ "##与": 13737,
+ "##丐": 13738,
+ "##丑": 13739,
+ "##专": 13740,
+ "##且": 13741,
+ "##丕": 13742,
+ "##世": 13743,
+ "##丘": 13744,
+ "##丙": 13745,
+ "##业": 13746,
+ "##丛": 13747,
+ "##东": 13748,
+ "##丝": 13749,
+ "##丞": 13750,
+ "##丟": 13751,
+ "##両": 13752,
+ "##丢": 13753,
+ "##两": 13754,
+ "##严": 13755,
+ "##並": 13756,
+ "##丧": 13757,
+ "##丨": 13758,
+ "##个": 13759,
+ "##丫": 13760,
+ "##中": 13761,
+ "##丰": 13762,
+ "##串": 13763,
+ "##临": 13764,
+ "##丶": 13765,
+ "##丸": 13766,
+ "##丹": 13767,
+ "##为": 13768,
+ "##主": 13769,
+ "##丼": 13770,
+ "##丽": 13771,
+ "##举": 13772,
+ "##丿": 13773,
+ "##乂": 13774,
+ "##乃": 13775,
+ "##久": 13776,
+ "##么": 13777,
+ "##义": 13778,
+ "##之": 13779,
+ "##乌": 13780,
+ "##乍": 13781,
+ "##乎": 13782,
+ "##乏": 13783,
+ "##乐": 13784,
+ "##乒": 13785,
+ "##乓": 13786,
+ "##乔": 13787,
+ "##乖": 13788,
+ "##乗": 13789,
+ "##乘": 13790,
+ "##乙": 13791,
+ "##乜": 13792,
+ "##九": 13793,
+ "##乞": 13794,
+ "##也": 13795,
+ "##习": 13796,
+ "##乡": 13797,
+ "##书": 13798,
+ "##乩": 13799,
+ "##买": 13800,
+ "##乱": 13801,
+ "##乳": 13802,
+ "##乾": 13803,
+ "##亀": 13804,
+ "##亂": 13805,
+ "##了": 13806,
+ "##予": 13807,
+ "##争": 13808,
+ "##事": 13809,
+ "##二": 13810,
+ "##于": 13811,
+ "##亏": 13812,
+ "##云": 13813,
+ "##互": 13814,
+ "##五": 13815,
+ "##井": 13816,
+ "##亘": 13817,
+ "##亙": 13818,
+ "##亚": 13819,
+ "##些": 13820,
+ "##亜": 13821,
+ "##亞": 13822,
+ "##亟": 13823,
+ "##亡": 13824,
+ "##亢": 13825,
+ "##交": 13826,
+ "##亥": 13827,
+ "##亦": 13828,
+ "##产": 13829,
+ "##亨": 13830,
+ "##亩": 13831,
+ "##享": 13832,
+ "##京": 13833,
+ "##亭": 13834,
+ "##亮": 13835,
+ "##亲": 13836,
+ "##亳": 13837,
+ "##亵": 13838,
+ "##人": 13839,
+ "##亿": 13840,
+ "##什": 13841,
+ "##仁": 13842,
+ "##仃": 13843,
+ "##仄": 13844,
+ "##仅": 13845,
+ "##仆": 13846,
+ "##仇": 13847,
+ "##今": 13848,
+ "##介": 13849,
+ "##仍": 13850,
+ "##从": 13851,
+ "##仏": 13852,
+ "##仑": 13853,
+ "##仓": 13854,
+ "##仔": 13855,
+ "##仕": 13856,
+ "##他": 13857,
+ "##仗": 13858,
+ "##付": 13859,
+ "##仙": 13860,
+ "##仝": 13861,
+ "##仞": 13862,
+ "##仟": 13863,
+ "##代": 13864,
+ "##令": 13865,
+ "##以": 13866,
+ "##仨": 13867,
+ "##仪": 13868,
+ "##们": 13869,
+ "##仮": 13870,
+ "##仰": 13871,
+ "##仲": 13872,
+ "##件": 13873,
+ "##价": 13874,
+ "##任": 13875,
+ "##份": 13876,
+ "##仿": 13877,
+ "##企": 13878,
+ "##伉": 13879,
+ "##伊": 13880,
+ "##伍": 13881,
+ "##伎": 13882,
+ "##伏": 13883,
+ "##伐": 13884,
+ "##休": 13885,
+ "##伕": 13886,
+ "##众": 13887,
+ "##优": 13888,
+ "##伙": 13889,
+ "##会": 13890,
+ "##伝": 13891,
+ "##伞": 13892,
+ "##伟": 13893,
+ "##传": 13894,
+ "##伢": 13895,
+ "##伤": 13896,
+ "##伦": 13897,
+ "##伪": 13898,
+ "##伫": 13899,
+ "##伯": 13900,
+ "##估": 13901,
+ "##伴": 13902,
+ "##伶": 13903,
+ "##伸": 13904,
+ "##伺": 13905,
+ "##似": 13906,
+ "##伽": 13907,
+ "##佃": 13908,
+ "##但": 13909,
+ "##佇": 13910,
+ "##佈": 13911,
+ "##位": 13912,
+ "##低": 13913,
+ "##住": 13914,
+ "##佐": 13915,
+ "##佑": 13916,
+ "##体": 13917,
+ "##佔": 13918,
+ "##何": 13919,
+ "##佗": 13920,
+ "##佘": 13921,
+ "##余": 13922,
+ "##佚": 13923,
+ "##佛": 13924,
+ "##作": 13925,
+ "##佝": 13926,
+ "##佞": 13927,
+ "##佟": 13928,
+ "##你": 13929,
+ "##佢": 13930,
+ "##佣": 13931,
+ "##佤": 13932,
+ "##佥": 13933,
+ "##佩": 13934,
+ "##佬": 13935,
+ "##佯": 13936,
+ "##佰": 13937,
+ "##佳": 13938,
+ "##併": 13939,
+ "##佶": 13940,
+ "##佻": 13941,
+ "##佼": 13942,
+ "##使": 13943,
+ "##侃": 13944,
+ "##侄": 13945,
+ "##來": 13946,
+ "##侈": 13947,
+ "##例": 13948,
+ "##侍": 13949,
+ "##侏": 13950,
+ "##侑": 13951,
+ "##侖": 13952,
+ "##侗": 13953,
+ "##供": 13954,
+ "##依": 13955,
+ "##侠": 13956,
+ "##価": 13957,
+ "##侣": 13958,
+ "##侥": 13959,
+ "##侦": 13960,
+ "##侧": 13961,
+ "##侨": 13962,
+ "##侬": 13963,
+ "##侮": 13964,
+ "##侯": 13965,
+ "##侵": 13966,
+ "##侶": 13967,
+ "##侷": 13968,
+ "##便": 13969,
+ "##係": 13970,
+ "##促": 13971,
+ "##俄": 13972,
+ "##俊": 13973,
+ "##俎": 13974,
+ "##俏": 13975,
+ "##俐": 13976,
+ "##俑": 13977,
+ "##俗": 13978,
+ "##俘": 13979,
+ "##俚": 13980,
+ "##保": 13981,
+ "##俞": 13982,
+ "##俟": 13983,
+ "##俠": 13984,
+ "##信": 13985,
+ "##俨": 13986,
+ "##俩": 13987,
+ "##俪": 13988,
+ "##俬": 13989,
+ "##俭": 13990,
+ "##修": 13991,
+ "##俯": 13992,
+ "##俱": 13993,
+ "##俳": 13994,
+ "##俸": 13995,
+ "##俺": 13996,
+ "##俾": 13997,
+ "##倆": 13998,
+ "##倉": 13999,
+ "##個": 14000,
+ "##倌": 14001,
+ "##倍": 14002,
+ "##倏": 14003,
+ "##們": 14004,
+ "##倒": 14005,
+ "##倔": 14006,
+ "##倖": 14007,
+ "##倘": 14008,
+ "##候": 14009,
+ "##倚": 14010,
+ "##倜": 14011,
+ "##借": 14012,
+ "##倡": 14013,
+ "##値": 14014,
+ "##倦": 14015,
+ "##倩": 14016,
+ "##倪": 14017,
+ "##倫": 14018,
+ "##倬": 14019,
+ "##倭": 14020,
+ "##倶": 14021,
+ "##债": 14022,
+ "##值": 14023,
+ "##倾": 14024,
+ "##偃": 14025,
+ "##假": 14026,
+ "##偈": 14027,
+ "##偉": 14028,
+ "##偌": 14029,
+ "##偎": 14030,
+ "##偏": 14031,
+ "##偕": 14032,
+ "##做": 14033,
+ "##停": 14034,
+ "##健": 14035,
+ "##側": 14036,
+ "##偵": 14037,
+ "##偶": 14038,
+ "##偷": 14039,
+ "##偻": 14040,
+ "##偽": 14041,
+ "##偿": 14042,
+ "##傀": 14043,
+ "##傅": 14044,
+ "##傍": 14045,
+ "##傑": 14046,
+ "##傘": 14047,
+ "##備": 14048,
+ "##傚": 14049,
+ "##傢": 14050,
+ "##傣": 14051,
+ "##傥": 14052,
+ "##储": 14053,
+ "##傩": 14054,
+ "##催": 14055,
+ "##傭": 14056,
+ "##傲": 14057,
+ "##傳": 14058,
+ "##債": 14059,
+ "##傷": 14060,
+ "##傻": 14061,
+ "##傾": 14062,
+ "##僅": 14063,
+ "##働": 14064,
+ "##像": 14065,
+ "##僑": 14066,
+ "##僕": 14067,
+ "##僖": 14068,
+ "##僚": 14069,
+ "##僥": 14070,
+ "##僧": 14071,
+ "##僭": 14072,
+ "##僮": 14073,
+ "##僱": 14074,
+ "##僵": 14075,
+ "##價": 14076,
+ "##僻": 14077,
+ "##儀": 14078,
+ "##儂": 14079,
+ "##億": 14080,
+ "##儆": 14081,
+ "##儉": 14082,
+ "##儋": 14083,
+ "##儒": 14084,
+ "##儕": 14085,
+ "##儘": 14086,
+ "##償": 14087,
+ "##儡": 14088,
+ "##優": 14089,
+ "##儲": 14090,
+ "##儷": 14091,
+ "##儼": 14092,
+ "##儿": 14093,
+ "##兀": 14094,
+ "##允": 14095,
+ "##元": 14096,
+ "##兄": 14097,
+ "##充": 14098,
+ "##兆": 14099,
+ "##兇": 14100,
+ "##先": 14101,
+ "##光": 14102,
+ "##克": 14103,
+ "##兌": 14104,
+ "##免": 14105,
+ "##児": 14106,
+ "##兑": 14107,
+ "##兒": 14108,
+ "##兔": 14109,
+ "##兖": 14110,
+ "##党": 14111,
+ "##兜": 14112,
+ "##兢": 14113,
+ "##入": 14114,
+ "##內": 14115,
+ "##全": 14116,
+ "##兩": 14117,
+ "##八": 14118,
+ "##公": 14119,
+ "##六": 14120,
+ "##兮": 14121,
+ "##兰": 14122,
+ "##共": 14123,
+ "##兲": 14124,
+ "##关": 14125,
+ "##兴": 14126,
+ "##兵": 14127,
+ "##其": 14128,
+ "##具": 14129,
+ "##典": 14130,
+ "##兹": 14131,
+ "##养": 14132,
+ "##兼": 14133,
+ "##兽": 14134,
+ "##冀": 14135,
+ "##内": 14136,
+ "##円": 14137,
+ "##冇": 14138,
+ "##冈": 14139,
+ "##冉": 14140,
+ "##冊": 14141,
+ "##册": 14142,
+ "##再": 14143,
+ "##冏": 14144,
+ "##冒": 14145,
+ "##冕": 14146,
+ "##冗": 14147,
+ "##写": 14148,
+ "##军": 14149,
+ "##农": 14150,
+ "##冠": 14151,
+ "##冢": 14152,
+ "##冤": 14153,
+ "##冥": 14154,
+ "##冨": 14155,
+ "##冪": 14156,
+ "##冬": 14157,
+ "##冯": 14158,
+ "##冰": 14159,
+ "##冲": 14160,
+ "##决": 14161,
+ "##况": 14162,
+ "##冶": 14163,
+ "##冷": 14164,
+ "##冻": 14165,
+ "##冼": 14166,
+ "##冽": 14167,
+ "##冾": 14168,
+ "##净": 14169,
+ "##凄": 14170,
+ "##准": 14171,
+ "##凇": 14172,
+ "##凈": 14173,
+ "##凉": 14174,
+ "##凋": 14175,
+ "##凌": 14176,
+ "##凍": 14177,
+ "##减": 14178,
+ "##凑": 14179,
+ "##凛": 14180,
+ "##凜": 14181,
+ "##凝": 14182,
+ "##几": 14183,
+ "##凡": 14184,
+ "##凤": 14185,
+ "##処": 14186,
+ "##凪": 14187,
+ "##凭": 14188,
+ "##凯": 14189,
+ "##凰": 14190,
+ "##凱": 14191,
+ "##凳": 14192,
+ "##凶": 14193,
+ "##凸": 14194,
+ "##凹": 14195,
+ "##出": 14196,
+ "##击": 14197,
+ "##函": 14198,
+ "##凿": 14199,
+ "##刀": 14200,
+ "##刁": 14201,
+ "##刃": 14202,
+ "##分": 14203,
+ "##切": 14204,
+ "##刈": 14205,
+ "##刊": 14206,
+ "##刍": 14207,
+ "##刎": 14208,
+ "##刑": 14209,
+ "##划": 14210,
+ "##列": 14211,
+ "##刘": 14212,
+ "##则": 14213,
+ "##刚": 14214,
+ "##创": 14215,
+ "##初": 14216,
+ "##删": 14217,
+ "##判": 14218,
+ "##別": 14219,
+ "##刨": 14220,
+ "##利": 14221,
+ "##刪": 14222,
+ "##别": 14223,
+ "##刮": 14224,
+ "##到": 14225,
+ "##制": 14226,
+ "##刷": 14227,
+ "##券": 14228,
+ "##刹": 14229,
+ "##刺": 14230,
+ "##刻": 14231,
+ "##刽": 14232,
+ "##剁": 14233,
+ "##剂": 14234,
+ "##剃": 14235,
+ "##則": 14236,
+ "##剉": 14237,
+ "##削": 14238,
+ "##剋": 14239,
+ "##剌": 14240,
+ "##前": 14241,
+ "##剎": 14242,
+ "##剐": 14243,
+ "##剑": 14244,
+ "##剔": 14245,
+ "##剖": 14246,
+ "##剛": 14247,
+ "##剜": 14248,
+ "##剝": 14249,
+ "##剣": 14250,
+ "##剤": 14251,
+ "##剥": 14252,
+ "##剧": 14253,
+ "##剩": 14254,
+ "##剪": 14255,
+ "##副": 14256,
+ "##割": 14257,
+ "##創": 14258,
+ "##剷": 14259,
+ "##剽": 14260,
+ "##剿": 14261,
+ "##劃": 14262,
+ "##劇": 14263,
+ "##劈": 14264,
+ "##劉": 14265,
+ "##劊": 14266,
+ "##劍": 14267,
+ "##劏": 14268,
+ "##劑": 14269,
+ "##力": 14270,
+ "##劝": 14271,
+ "##办": 14272,
+ "##功": 14273,
+ "##加": 14274,
+ "##务": 14275,
+ "##劣": 14276,
+ "##动": 14277,
+ "##助": 14278,
+ "##努": 14279,
+ "##劫": 14280,
+ "##劭": 14281,
+ "##励": 14282,
+ "##劲": 14283,
+ "##劳": 14284,
+ "##労": 14285,
+ "##劵": 14286,
+ "##効": 14287,
+ "##劾": 14288,
+ "##势": 14289,
+ "##勁": 14290,
+ "##勃": 14291,
+ "##勇": 14292,
+ "##勉": 14293,
+ "##勋": 14294,
+ "##勐": 14295,
+ "##勒": 14296,
+ "##動": 14297,
+ "##勖": 14298,
+ "##勘": 14299,
+ "##務": 14300,
+ "##勛": 14301,
+ "##勝": 14302,
+ "##勞": 14303,
+ "##募": 14304,
+ "##勢": 14305,
+ "##勤": 14306,
+ "##勧": 14307,
+ "##勳": 14308,
+ "##勵": 14309,
+ "##勸": 14310,
+ "##勺": 14311,
+ "##勻": 14312,
+ "##勾": 14313,
+ "##勿": 14314,
+ "##匀": 14315,
+ "##包": 14316,
+ "##匆": 14317,
+ "##匈": 14318,
+ "##匍": 14319,
+ "##匐": 14320,
+ "##匕": 14321,
+ "##化": 14322,
+ "##北": 14323,
+ "##匙": 14324,
+ "##匝": 14325,
+ "##匠": 14326,
+ "##匡": 14327,
+ "##匣": 14328,
+ "##匪": 14329,
+ "##匮": 14330,
+ "##匯": 14331,
+ "##匱": 14332,
+ "##匹": 14333,
+ "##区": 14334,
+ "##医": 14335,
+ "##匾": 14336,
+ "##匿": 14337,
+ "##區": 14338,
+ "##十": 14339,
+ "##千": 14340,
+ "##卅": 14341,
+ "##升": 14342,
+ "##午": 14343,
+ "##卉": 14344,
+ "##半": 14345,
+ "##卍": 14346,
+ "##华": 14347,
+ "##协": 14348,
+ "##卑": 14349,
+ "##卒": 14350,
+ "##卓": 14351,
+ "##協": 14352,
+ "##单": 14353,
+ "##卖": 14354,
+ "##南": 14355,
+ "##単": 14356,
+ "##博": 14357,
+ "##卜": 14358,
+ "##卞": 14359,
+ "##卟": 14360,
+ "##占": 14361,
+ "##卡": 14362,
+ "##卢": 14363,
+ "##卤": 14364,
+ "##卦": 14365,
+ "##卧": 14366,
+ "##卫": 14367,
+ "##卮": 14368,
+ "##卯": 14369,
+ "##印": 14370,
+ "##危": 14371,
+ "##即": 14372,
+ "##却": 14373,
+ "##卵": 14374,
+ "##卷": 14375,
+ "##卸": 14376,
+ "##卻": 14377,
+ "##卿": 14378,
+ "##厂": 14379,
+ "##厄": 14380,
+ "##厅": 14381,
+ "##历": 14382,
+ "##厉": 14383,
+ "##压": 14384,
+ "##厌": 14385,
+ "##厕": 14386,
+ "##厘": 14387,
+ "##厚": 14388,
+ "##厝": 14389,
+ "##原": 14390,
+ "##厢": 14391,
+ "##厥": 14392,
+ "##厦": 14393,
+ "##厨": 14394,
+ "##厩": 14395,
+ "##厭": 14396,
+ "##厮": 14397,
+ "##厲": 14398,
+ "##厳": 14399,
+ "##去": 14400,
+ "##县": 14401,
+ "##叁": 14402,
+ "##参": 14403,
+ "##參": 14404,
+ "##又": 14405,
+ "##叉": 14406,
+ "##及": 14407,
+ "##友": 14408,
+ "##双": 14409,
+ "##反": 14410,
+ "##収": 14411,
+ "##发": 14412,
+ "##叔": 14413,
+ "##取": 14414,
+ "##受": 14415,
+ "##变": 14416,
+ "##叙": 14417,
+ "##叛": 14418,
+ "##叟": 14419,
+ "##叠": 14420,
+ "##叡": 14421,
+ "##叢": 14422,
+ "##口": 14423,
+ "##古": 14424,
+ "##句": 14425,
+ "##另": 14426,
+ "##叨": 14427,
+ "##叩": 14428,
+ "##只": 14429,
+ "##叫": 14430,
+ "##召": 14431,
+ "##叭": 14432,
+ "##叮": 14433,
+ "##可": 14434,
+ "##台": 14435,
+ "##叱": 14436,
+ "##史": 14437,
+ "##右": 14438,
+ "##叵": 14439,
+ "##叶": 14440,
+ "##号": 14441,
+ "##司": 14442,
+ "##叹": 14443,
+ "##叻": 14444,
+ "##叼": 14445,
+ "##叽": 14446,
+ "##吁": 14447,
+ "##吃": 14448,
+ "##各": 14449,
+ "##吆": 14450,
+ "##合": 14451,
+ "##吉": 14452,
+ "##吊": 14453,
+ "##吋": 14454,
+ "##同": 14455,
+ "##名": 14456,
+ "##后": 14457,
+ "##吏": 14458,
+ "##吐": 14459,
+ "##向": 14460,
+ "##吒": 14461,
+ "##吓": 14462,
+ "##吕": 14463,
+ "##吖": 14464,
+ "##吗": 14465,
+ "##君": 14466,
+ "##吝": 14467,
+ "##吞": 14468,
+ "##吟": 14469,
+ "##吠": 14470,
+ "##吡": 14471,
+ "##否": 14472,
+ "##吧": 14473,
+ "##吨": 14474,
+ "##吩": 14475,
+ "##含": 14476,
+ "##听": 14477,
+ "##吭": 14478,
+ "##吮": 14479,
+ "##启": 14480,
+ "##吱": 14481,
+ "##吳": 14482,
+ "##吴": 14483,
+ "##吵": 14484,
+ "##吶": 14485,
+ "##吸": 14486,
+ "##吹": 14487,
+ "##吻": 14488,
+ "##吼": 14489,
+ "##吽": 14490,
+ "##吾": 14491,
+ "##呀": 14492,
+ "##呂": 14493,
+ "##呃": 14494,
+ "##呆": 14495,
+ "##呈": 14496,
+ "##告": 14497,
+ "##呋": 14498,
+ "##呎": 14499,
+ "##呐": 14500,
+ "##呓": 14501,
+ "##呕": 14502,
+ "##呗": 14503,
+ "##员": 14504,
+ "##呛": 14505,
+ "##呜": 14506,
+ "##呢": 14507,
+ "##呤": 14508,
+ "##呦": 14509,
+ "##周": 14510,
+ "##呱": 14511,
+ "##呲": 14512,
+ "##味": 14513,
+ "##呵": 14514,
+ "##呷": 14515,
+ "##呸": 14516,
+ "##呻": 14517,
+ "##呼": 14518,
+ "##命": 14519,
+ "##咀": 14520,
+ "##咁": 14521,
+ "##咂": 14522,
+ "##咄": 14523,
+ "##咆": 14524,
+ "##咋": 14525,
+ "##和": 14526,
+ "##咎": 14527,
+ "##咏": 14528,
+ "##咐": 14529,
+ "##咒": 14530,
+ "##咔": 14531,
+ "##咕": 14532,
+ "##咖": 14533,
+ "##咗": 14534,
+ "##咘": 14535,
+ "##咙": 14536,
+ "##咚": 14537,
+ "##咛": 14538,
+ "##咣": 14539,
+ "##咤": 14540,
+ "##咦": 14541,
+ "##咧": 14542,
+ "##咨": 14543,
+ "##咩": 14544,
+ "##咪": 14545,
+ "##咫": 14546,
+ "##咬": 14547,
+ "##咭": 14548,
+ "##咯": 14549,
+ "##咱": 14550,
+ "##咲": 14551,
+ "##咳": 14552,
+ "##咸": 14553,
+ "##咻": 14554,
+ "##咽": 14555,
+ "##咿": 14556,
+ "##哀": 14557,
+ "##品": 14558,
+ "##哂": 14559,
+ "##哄": 14560,
+ "##哆": 14561,
+ "##哇": 14562,
+ "##哈": 14563,
+ "##哉": 14564,
+ "##哋": 14565,
+ "##哌": 14566,
+ "##响": 14567,
+ "##哎": 14568,
+ "##哏": 14569,
+ "##哐": 14570,
+ "##哑": 14571,
+ "##哒": 14572,
+ "##哔": 14573,
+ "##哗": 14574,
+ "##哟": 14575,
+ "##員": 14576,
+ "##哥": 14577,
+ "##哦": 14578,
+ "##哧": 14579,
+ "##哨": 14580,
+ "##哩": 14581,
+ "##哪": 14582,
+ "##哭": 14583,
+ "##哮": 14584,
+ "##哲": 14585,
+ "##哺": 14586,
+ "##哼": 14587,
+ "##哽": 14588,
+ "##唁": 14589,
+ "##唄": 14590,
+ "##唆": 14591,
+ "##唇": 14592,
+ "##唉": 14593,
+ "##唏": 14594,
+ "##唐": 14595,
+ "##唑": 14596,
+ "##唔": 14597,
+ "##唠": 14598,
+ "##唤": 14599,
+ "##唧": 14600,
+ "##唬": 14601,
+ "##售": 14602,
+ "##唯": 14603,
+ "##唰": 14604,
+ "##唱": 14605,
+ "##唳": 14606,
+ "##唷": 14607,
+ "##唸": 14608,
+ "##唾": 14609,
+ "##啃": 14610,
+ "##啄": 14611,
+ "##商": 14612,
+ "##啉": 14613,
+ "##啊": 14614,
+ "##問": 14615,
+ "##啓": 14616,
+ "##啕": 14617,
+ "##啖": 14618,
+ "##啜": 14619,
+ "##啞": 14620,
+ "##啟": 14621,
+ "##啡": 14622,
+ "##啤": 14623,
+ "##啥": 14624,
+ "##啦": 14625,
+ "##啧": 14626,
+ "##啪": 14627,
+ "##啫": 14628,
+ "##啬": 14629,
+ "##啮": 14630,
+ "##啰": 14631,
+ "##啱": 14632,
+ "##啲": 14633,
+ "##啵": 14634,
+ "##啶": 14635,
+ "##啷": 14636,
+ "##啸": 14637,
+ "##啻": 14638,
+ "##啼": 14639,
+ "##啾": 14640,
+ "##喀": 14641,
+ "##喂": 14642,
+ "##喃": 14643,
+ "##善": 14644,
+ "##喆": 14645,
+ "##喇": 14646,
+ "##喉": 14647,
+ "##喊": 14648,
+ "##喋": 14649,
+ "##喎": 14650,
+ "##喏": 14651,
+ "##喔": 14652,
+ "##喘": 14653,
+ "##喙": 14654,
+ "##喚": 14655,
+ "##喜": 14656,
+ "##喝": 14657,
+ "##喟": 14658,
+ "##喧": 14659,
+ "##喪": 14660,
+ "##喫": 14661,
+ "##喬": 14662,
+ "##單": 14663,
+ "##喰": 14664,
+ "##喱": 14665,
+ "##喲": 14666,
+ "##喳": 14667,
+ "##喵": 14668,
+ "##営": 14669,
+ "##喷": 14670,
+ "##喹": 14671,
+ "##喺": 14672,
+ "##喻": 14673,
+ "##喽": 14674,
+ "##嗅": 14675,
+ "##嗆": 14676,
+ "##嗇": 14677,
+ "##嗎": 14678,
+ "##嗑": 14679,
+ "##嗒": 14680,
+ "##嗓": 14681,
+ "##嗔": 14682,
+ "##嗖": 14683,
+ "##嗚": 14684,
+ "##嗜": 14685,
+ "##嗝": 14686,
+ "##嗟": 14687,
+ "##嗡": 14688,
+ "##嗣": 14689,
+ "##嗤": 14690,
+ "##嗦": 14691,
+ "##嗨": 14692,
+ "##嗪": 14693,
+ "##嗬": 14694,
+ "##嗯": 14695,
+ "##嗰": 14696,
+ "##嗲": 14697,
+ "##嗳": 14698,
+ "##嗶": 14699,
+ "##嗷": 14700,
+ "##嗽": 14701,
+ "##嘀": 14702,
+ "##嘅": 14703,
+ "##嘆": 14704,
+ "##嘈": 14705,
+ "##嘉": 14706,
+ "##嘌": 14707,
+ "##嘍": 14708,
+ "##嘎": 14709,
+ "##嘔": 14710,
+ "##嘖": 14711,
+ "##嘗": 14712,
+ "##嘘": 14713,
+ "##嘚": 14714,
+ "##嘛": 14715,
+ "##嘜": 14716,
+ "##嘞": 14717,
+ "##嘟": 14718,
+ "##嘢": 14719,
+ "##嘣": 14720,
+ "##嘤": 14721,
+ "##嘧": 14722,
+ "##嘩": 14723,
+ "##嘭": 14724,
+ "##嘮": 14725,
+ "##嘯": 14726,
+ "##嘰": 14727,
+ "##嘱": 14728,
+ "##嘲": 14729,
+ "##嘴": 14730,
+ "##嘶": 14731,
+ "##嘸": 14732,
+ "##嘹": 14733,
+ "##嘻": 14734,
+ "##嘿": 14735,
+ "##噁": 14736,
+ "##噌": 14737,
+ "##噎": 14738,
+ "##噓": 14739,
+ "##噔": 14740,
+ "##噗": 14741,
+ "##噙": 14742,
+ "##噜": 14743,
+ "##噠": 14744,
+ "##噢": 14745,
+ "##噤": 14746,
+ "##器": 14747,
+ "##噩": 14748,
+ "##噪": 14749,
+ "##噬": 14750,
+ "##噱": 14751,
+ "##噴": 14752,
+ "##噶": 14753,
+ "##噸": 14754,
+ "##噹": 14755,
+ "##噻": 14756,
+ "##噼": 14757,
+ "##嚀": 14758,
+ "##嚇": 14759,
+ "##嚎": 14760,
+ "##嚏": 14761,
+ "##嚐": 14762,
+ "##嚓": 14763,
+ "##嚕": 14764,
+ "##嚟": 14765,
+ "##嚣": 14766,
+ "##嚥": 14767,
+ "##嚨": 14768,
+ "##嚮": 14769,
+ "##嚴": 14770,
+ "##嚷": 14771,
+ "##嚼": 14772,
+ "##囂": 14773,
+ "##囉": 14774,
+ "##囊": 14775,
+ "##囍": 14776,
+ "##囑": 14777,
+ "##囔": 14778,
+ "##囗": 14779,
+ "##囚": 14780,
+ "##四": 14781,
+ "##囝": 14782,
+ "##回": 14783,
+ "##囟": 14784,
+ "##因": 14785,
+ "##囡": 14786,
+ "##团": 14787,
+ "##団": 14788,
+ "##囤": 14789,
+ "##囧": 14790,
+ "##囪": 14791,
+ "##囫": 14792,
+ "##园": 14793,
+ "##困": 14794,
+ "##囱": 14795,
+ "##囲": 14796,
+ "##図": 14797,
+ "##围": 14798,
+ "##囹": 14799,
+ "##固": 14800,
+ "##国": 14801,
+ "##图": 14802,
+ "##囿": 14803,
+ "##圃": 14804,
+ "##圄": 14805,
+ "##圆": 14806,
+ "##圈": 14807,
+ "##國": 14808,
+ "##圍": 14809,
+ "##圏": 14810,
+ "##園": 14811,
+ "##圓": 14812,
+ "##圖": 14813,
+ "##團": 14814,
+ "##圜": 14815,
+ "##土": 14816,
+ "##圣": 14817,
+ "##圧": 14818,
+ "##在": 14819,
+ "##圩": 14820,
+ "##圭": 14821,
+ "##地": 14822,
+ "##圳": 14823,
+ "##场": 14824,
+ "##圻": 14825,
+ "##圾": 14826,
+ "##址": 14827,
+ "##坂": 14828,
+ "##均": 14829,
+ "##坊": 14830,
+ "##坍": 14831,
+ "##坎": 14832,
+ "##坏": 14833,
+ "##坐": 14834,
+ "##坑": 14835,
+ "##块": 14836,
+ "##坚": 14837,
+ "##坛": 14838,
+ "##坝": 14839,
+ "##坞": 14840,
+ "##坟": 14841,
+ "##坠": 14842,
+ "##坡": 14843,
+ "##坤": 14844,
+ "##坦": 14845,
+ "##坨": 14846,
+ "##坪": 14847,
+ "##坯": 14848,
+ "##坳": 14849,
+ "##坵": 14850,
+ "##坷": 14851,
+ "##垂": 14852,
+ "##垃": 14853,
+ "##垄": 14854,
+ "##型": 14855,
+ "##垒": 14856,
+ "##垚": 14857,
+ "##垛": 14858,
+ "##垠": 14859,
+ "##垢": 14860,
+ "##垣": 14861,
+ "##垦": 14862,
+ "##垩": 14863,
+ "##垫": 14864,
+ "##垭": 14865,
+ "##垮": 14866,
+ "##垵": 14867,
+ "##埂": 14868,
+ "##埃": 14869,
+ "##埋": 14870,
+ "##城": 14871,
+ "##埔": 14872,
+ "##埕": 14873,
+ "##埗": 14874,
+ "##域": 14875,
+ "##埠": 14876,
+ "##埤": 14877,
+ "##埵": 14878,
+ "##執": 14879,
+ "##埸": 14880,
+ "##培": 14881,
+ "##基": 14882,
+ "##埼": 14883,
+ "##堀": 14884,
+ "##堂": 14885,
+ "##堃": 14886,
+ "##堅": 14887,
+ "##堆": 14888,
+ "##堇": 14889,
+ "##堑": 14890,
+ "##堕": 14891,
+ "##堙": 14892,
+ "##堡": 14893,
+ "##堤": 14894,
+ "##堪": 14895,
+ "##堯": 14896,
+ "##堰": 14897,
+ "##報": 14898,
+ "##場": 14899,
+ "##堵": 14900,
+ "##堺": 14901,
+ "##堿": 14902,
+ "##塊": 14903,
+ "##塌": 14904,
+ "##塑": 14905,
+ "##塔": 14906,
+ "##塗": 14907,
+ "##塘": 14908,
+ "##塚": 14909,
+ "##塞": 14910,
+ "##塢": 14911,
+ "##塩": 14912,
+ "##填": 14913,
+ "##塬": 14914,
+ "##塭": 14915,
+ "##塵": 14916,
+ "##塾": 14917,
+ "##墀": 14918,
+ "##境": 14919,
+ "##墅": 14920,
+ "##墉": 14921,
+ "##墊": 14922,
+ "##墒": 14923,
+ "##墓": 14924,
+ "##増": 14925,
+ "##墘": 14926,
+ "##墙": 14927,
+ "##墜": 14928,
+ "##增": 14929,
+ "##墟": 14930,
+ "##墨": 14931,
+ "##墩": 14932,
+ "##墮": 14933,
+ "##墳": 14934,
+ "##墻": 14935,
+ "##墾": 14936,
+ "##壁": 14937,
+ "##壅": 14938,
+ "##壆": 14939,
+ "##壇": 14940,
+ "##壊": 14941,
+ "##壑": 14942,
+ "##壓": 14943,
+ "##壕": 14944,
+ "##壘": 14945,
+ "##壞": 14946,
+ "##壟": 14947,
+ "##壢": 14948,
+ "##壤": 14949,
+ "##壩": 14950,
+ "##士": 14951,
+ "##壬": 14952,
+ "##壮": 14953,
+ "##壯": 14954,
+ "##声": 14955,
+ "##売": 14956,
+ "##壳": 14957,
+ "##壶": 14958,
+ "##壹": 14959,
+ "##壺": 14960,
+ "##壽": 14961,
+ "##处": 14962,
+ "##备": 14963,
+ "##変": 14964,
+ "##复": 14965,
+ "##夏": 14966,
+ "##夔": 14967,
+ "##夕": 14968,
+ "##外": 14969,
+ "##夙": 14970,
+ "##多": 14971,
+ "##夜": 14972,
+ "##够": 14973,
+ "##夠": 14974,
+ "##夢": 14975,
+ "##夥": 14976,
+ "##大": 14977,
+ "##天": 14978,
+ "##太": 14979,
+ "##夫": 14980,
+ "##夭": 14981,
+ "##央": 14982,
+ "##夯": 14983,
+ "##失": 14984,
+ "##头": 14985,
+ "##夷": 14986,
+ "##夸": 14987,
+ "##夹": 14988,
+ "##夺": 14989,
+ "##夾": 14990,
+ "##奂": 14991,
+ "##奄": 14992,
+ "##奇": 14993,
+ "##奈": 14994,
+ "##奉": 14995,
+ "##奋": 14996,
+ "##奎": 14997,
+ "##奏": 14998,
+ "##奐": 14999,
+ "##契": 15000,
+ "##奔": 15001,
+ "##奕": 15002,
+ "##奖": 15003,
+ "##套": 15004,
+ "##奘": 15005,
+ "##奚": 15006,
+ "##奠": 15007,
+ "##奢": 15008,
+ "##奥": 15009,
+ "##奧": 15010,
+ "##奪": 15011,
+ "##奬": 15012,
+ "##奮": 15013,
+ "##女": 15014,
+ "##奴": 15015,
+ "##奶": 15016,
+ "##奸": 15017,
+ "##她": 15018,
+ "##好": 15019,
+ "##如": 15020,
+ "##妃": 15021,
+ "##妄": 15022,
+ "##妆": 15023,
+ "##妇": 15024,
+ "##妈": 15025,
+ "##妊": 15026,
+ "##妍": 15027,
+ "##妒": 15028,
+ "##妓": 15029,
+ "##妖": 15030,
+ "##妘": 15031,
+ "##妙": 15032,
+ "##妝": 15033,
+ "##妞": 15034,
+ "##妣": 15035,
+ "##妤": 15036,
+ "##妥": 15037,
+ "##妨": 15038,
+ "##妩": 15039,
+ "##妪": 15040,
+ "##妮": 15041,
+ "##妲": 15042,
+ "##妳": 15043,
+ "##妹": 15044,
+ "##妻": 15045,
+ "##妾": 15046,
+ "##姆": 15047,
+ "##姉": 15048,
+ "##姊": 15049,
+ "##始": 15050,
+ "##姍": 15051,
+ "##姐": 15052,
+ "##姑": 15053,
+ "##姒": 15054,
+ "##姓": 15055,
+ "##委": 15056,
+ "##姗": 15057,
+ "##姚": 15058,
+ "##姜": 15059,
+ "##姝": 15060,
+ "##姣": 15061,
+ "##姥": 15062,
+ "##姦": 15063,
+ "##姨": 15064,
+ "##姪": 15065,
+ "##姫": 15066,
+ "##姬": 15067,
+ "##姹": 15068,
+ "##姻": 15069,
+ "##姿": 15070,
+ "##威": 15071,
+ "##娃": 15072,
+ "##娄": 15073,
+ "##娅": 15074,
+ "##娆": 15075,
+ "##娇": 15076,
+ "##娉": 15077,
+ "##娑": 15078,
+ "##娓": 15079,
+ "##娘": 15080,
+ "##娛": 15081,
+ "##娜": 15082,
+ "##娟": 15083,
+ "##娠": 15084,
+ "##娣": 15085,
+ "##娥": 15086,
+ "##娩": 15087,
+ "##娱": 15088,
+ "##娲": 15089,
+ "##娴": 15090,
+ "##娶": 15091,
+ "##娼": 15092,
+ "##婀": 15093,
+ "##婁": 15094,
+ "##婆": 15095,
+ "##婉": 15096,
+ "##婊": 15097,
+ "##婕": 15098,
+ "##婚": 15099,
+ "##婢": 15100,
+ "##婦": 15101,
+ "##婧": 15102,
+ "##婪": 15103,
+ "##婭": 15104,
+ "##婴": 15105,
+ "##婵": 15106,
+ "##婶": 15107,
+ "##婷": 15108,
+ "##婺": 15109,
+ "##婿": 15110,
+ "##媒": 15111,
+ "##媚": 15112,
+ "##媛": 15113,
+ "##媞": 15114,
+ "##媧": 15115,
+ "##媲": 15116,
+ "##媳": 15117,
+ "##媽": 15118,
+ "##媾": 15119,
+ "##嫁": 15120,
+ "##嫂": 15121,
+ "##嫉": 15122,
+ "##嫌": 15123,
+ "##嫑": 15124,
+ "##嫔": 15125,
+ "##嫖": 15126,
+ "##嫘": 15127,
+ "##嫚": 15128,
+ "##嫡": 15129,
+ "##嫣": 15130,
+ "##嫦": 15131,
+ "##嫩": 15132,
+ "##嫲": 15133,
+ "##嫵": 15134,
+ "##嫻": 15135,
+ "##嬅": 15136,
+ "##嬉": 15137,
+ "##嬌": 15138,
+ "##嬗": 15139,
+ "##嬛": 15140,
+ "##嬢": 15141,
+ "##嬤": 15142,
+ "##嬪": 15143,
+ "##嬰": 15144,
+ "##嬴": 15145,
+ "##嬷": 15146,
+ "##嬸": 15147,
+ "##嬿": 15148,
+ "##孀": 15149,
+ "##孃": 15150,
+ "##子": 15151,
+ "##孑": 15152,
+ "##孔": 15153,
+ "##孕": 15154,
+ "##孖": 15155,
+ "##字": 15156,
+ "##存": 15157,
+ "##孙": 15158,
+ "##孚": 15159,
+ "##孛": 15160,
+ "##孜": 15161,
+ "##孝": 15162,
+ "##孟": 15163,
+ "##孢": 15164,
+ "##季": 15165,
+ "##孤": 15166,
+ "##学": 15167,
+ "##孩": 15168,
+ "##孪": 15169,
+ "##孫": 15170,
+ "##孬": 15171,
+ "##孰": 15172,
+ "##孱": 15173,
+ "##孳": 15174,
+ "##孵": 15175,
+ "##學": 15176,
+ "##孺": 15177,
+ "##孽": 15178,
+ "##孿": 15179,
+ "##宁": 15180,
+ "##它": 15181,
+ "##宅": 15182,
+ "##宇": 15183,
+ "##守": 15184,
+ "##安": 15185,
+ "##宋": 15186,
+ "##完": 15187,
+ "##宏": 15188,
+ "##宓": 15189,
+ "##宕": 15190,
+ "##宗": 15191,
+ "##官": 15192,
+ "##宙": 15193,
+ "##定": 15194,
+ "##宛": 15195,
+ "##宜": 15196,
+ "##宝": 15197,
+ "##实": 15198,
+ "##実": 15199,
+ "##宠": 15200,
+ "##审": 15201,
+ "##客": 15202,
+ "##宣": 15203,
+ "##室": 15204,
+ "##宥": 15205,
+ "##宦": 15206,
+ "##宪": 15207,
+ "##宫": 15208,
+ "##宮": 15209,
+ "##宰": 15210,
+ "##害": 15211,
+ "##宴": 15212,
+ "##宵": 15213,
+ "##家": 15214,
+ "##宸": 15215,
+ "##容": 15216,
+ "##宽": 15217,
+ "##宾": 15218,
+ "##宿": 15219,
+ "##寂": 15220,
+ "##寄": 15221,
+ "##寅": 15222,
+ "##密": 15223,
+ "##寇": 15224,
+ "##富": 15225,
+ "##寐": 15226,
+ "##寒": 15227,
+ "##寓": 15228,
+ "##寛": 15229,
+ "##寝": 15230,
+ "##寞": 15231,
+ "##察": 15232,
+ "##寡": 15233,
+ "##寢": 15234,
+ "##寥": 15235,
+ "##實": 15236,
+ "##寧": 15237,
+ "##寨": 15238,
+ "##審": 15239,
+ "##寫": 15240,
+ "##寬": 15241,
+ "##寮": 15242,
+ "##寰": 15243,
+ "##寵": 15244,
+ "##寶": 15245,
+ "##寸": 15246,
+ "##对": 15247,
+ "##寺": 15248,
+ "##寻": 15249,
+ "##导": 15250,
+ "##対": 15251,
+ "##寿": 15252,
+ "##封": 15253,
+ "##専": 15254,
+ "##射": 15255,
+ "##将": 15256,
+ "##將": 15257,
+ "##專": 15258,
+ "##尉": 15259,
+ "##尊": 15260,
+ "##尋": 15261,
+ "##對": 15262,
+ "##導": 15263,
+ "##小": 15264,
+ "##少": 15265,
+ "##尔": 15266,
+ "##尕": 15267,
+ "##尖": 15268,
+ "##尘": 15269,
+ "##尚": 15270,
+ "##尝": 15271,
+ "##尤": 15272,
+ "##尧": 15273,
+ "##尬": 15274,
+ "##就": 15275,
+ "##尴": 15276,
+ "##尷": 15277,
+ "##尸": 15278,
+ "##尹": 15279,
+ "##尺": 15280,
+ "##尻": 15281,
+ "##尼": 15282,
+ "##尽": 15283,
+ "##尾": 15284,
+ "##尿": 15285,
+ "##局": 15286,
+ "##屁": 15287,
+ "##层": 15288,
+ "##屄": 15289,
+ "##居": 15290,
+ "##屆": 15291,
+ "##屈": 15292,
+ "##屉": 15293,
+ "##届": 15294,
+ "##屋": 15295,
+ "##屌": 15296,
+ "##屍": 15297,
+ "##屎": 15298,
+ "##屏": 15299,
+ "##屐": 15300,
+ "##屑": 15301,
+ "##展": 15302,
+ "##屜": 15303,
+ "##属": 15304,
+ "##屠": 15305,
+ "##屡": 15306,
+ "##屢": 15307,
+ "##層": 15308,
+ "##履": 15309,
+ "##屬": 15310,
+ "##屯": 15311,
+ "##山": 15312,
+ "##屹": 15313,
+ "##屿": 15314,
+ "##岀": 15315,
+ "##岁": 15316,
+ "##岂": 15317,
+ "##岌": 15318,
+ "##岐": 15319,
+ "##岑": 15320,
+ "##岔": 15321,
+ "##岖": 15322,
+ "##岗": 15323,
+ "##岘": 15324,
+ "##岙": 15325,
+ "##岚": 15326,
+ "##岛": 15327,
+ "##岡": 15328,
+ "##岩": 15329,
+ "##岫": 15330,
+ "##岬": 15331,
+ "##岭": 15332,
+ "##岱": 15333,
+ "##岳": 15334,
+ "##岷": 15335,
+ "##岸": 15336,
+ "##峇": 15337,
+ "##峋": 15338,
+ "##峒": 15339,
+ "##峙": 15340,
+ "##峡": 15341,
+ "##峤": 15342,
+ "##峥": 15343,
+ "##峦": 15344,
+ "##峨": 15345,
+ "##峪": 15346,
+ "##峭": 15347,
+ "##峯": 15348,
+ "##峰": 15349,
+ "##峴": 15350,
+ "##島": 15351,
+ "##峻": 15352,
+ "##峽": 15353,
+ "##崁": 15354,
+ "##崂": 15355,
+ "##崆": 15356,
+ "##崇": 15357,
+ "##崎": 15358,
+ "##崑": 15359,
+ "##崔": 15360,
+ "##崖": 15361,
+ "##崗": 15362,
+ "##崙": 15363,
+ "##崛": 15364,
+ "##崧": 15365,
+ "##崩": 15366,
+ "##崭": 15367,
+ "##崴": 15368,
+ "##崽": 15369,
+ "##嵇": 15370,
+ "##嵊": 15371,
+ "##嵋": 15372,
+ "##嵌": 15373,
+ "##嵐": 15374,
+ "##嵘": 15375,
+ "##嵩": 15376,
+ "##嵬": 15377,
+ "##嵯": 15378,
+ "##嶂": 15379,
+ "##嶄": 15380,
+ "##嶇": 15381,
+ "##嶋": 15382,
+ "##嶙": 15383,
+ "##嶺": 15384,
+ "##嶼": 15385,
+ "##嶽": 15386,
+ "##巅": 15387,
+ "##巍": 15388,
+ "##巒": 15389,
+ "##巔": 15390,
+ "##巖": 15391,
+ "##川": 15392,
+ "##州": 15393,
+ "##巡": 15394,
+ "##巢": 15395,
+ "##工": 15396,
+ "##左": 15397,
+ "##巧": 15398,
+ "##巨": 15399,
+ "##巩": 15400,
+ "##巫": 15401,
+ "##差": 15402,
+ "##己": 15403,
+ "##已": 15404,
+ "##巳": 15405,
+ "##巴": 15406,
+ "##巷": 15407,
+ "##巻": 15408,
+ "##巽": 15409,
+ "##巾": 15410,
+ "##巿": 15411,
+ "##币": 15412,
+ "##市": 15413,
+ "##布": 15414,
+ "##帅": 15415,
+ "##帆": 15416,
+ "##师": 15417,
+ "##希": 15418,
+ "##帐": 15419,
+ "##帑": 15420,
+ "##帕": 15421,
+ "##帖": 15422,
+ "##帘": 15423,
+ "##帚": 15424,
+ "##帛": 15425,
+ "##帜": 15426,
+ "##帝": 15427,
+ "##帥": 15428,
+ "##带": 15429,
+ "##帧": 15430,
+ "##師": 15431,
+ "##席": 15432,
+ "##帮": 15433,
+ "##帯": 15434,
+ "##帰": 15435,
+ "##帳": 15436,
+ "##帶": 15437,
+ "##帷": 15438,
+ "##常": 15439,
+ "##帼": 15440,
+ "##帽": 15441,
+ "##幀": 15442,
+ "##幂": 15443,
+ "##幄": 15444,
+ "##幅": 15445,
+ "##幌": 15446,
+ "##幔": 15447,
+ "##幕": 15448,
+ "##幟": 15449,
+ "##幡": 15450,
+ "##幢": 15451,
+ "##幣": 15452,
+ "##幫": 15453,
+ "##干": 15454,
+ "##平": 15455,
+ "##年": 15456,
+ "##并": 15457,
+ "##幸": 15458,
+ "##幹": 15459,
+ "##幺": 15460,
+ "##幻": 15461,
+ "##幼": 15462,
+ "##幽": 15463,
+ "##幾": 15464,
+ "##广": 15465,
+ "##庁": 15466,
+ "##広": 15467,
+ "##庄": 15468,
+ "##庆": 15469,
+ "##庇": 15470,
+ "##床": 15471,
+ "##序": 15472,
+ "##庐": 15473,
+ "##库": 15474,
+ "##应": 15475,
+ "##底": 15476,
+ "##庖": 15477,
+ "##店": 15478,
+ "##庙": 15479,
+ "##庚": 15480,
+ "##府": 15481,
+ "##庞": 15482,
+ "##废": 15483,
+ "##庠": 15484,
+ "##度": 15485,
+ "##座": 15486,
+ "##庫": 15487,
+ "##庭": 15488,
+ "##庵": 15489,
+ "##庶": 15490,
+ "##康": 15491,
+ "##庸": 15492,
+ "##庹": 15493,
+ "##庾": 15494,
+ "##廁": 15495,
+ "##廂": 15496,
+ "##廃": 15497,
+ "##廈": 15498,
+ "##廉": 15499,
+ "##廊": 15500,
+ "##廓": 15501,
+ "##廖": 15502,
+ "##廚": 15503,
+ "##廝": 15504,
+ "##廟": 15505,
+ "##廠": 15506,
+ "##廢": 15507,
+ "##廣": 15508,
+ "##廬": 15509,
+ "##廳": 15510,
+ "##延": 15511,
+ "##廷": 15512,
+ "##建": 15513,
+ "##廿": 15514,
+ "##开": 15515,
+ "##弁": 15516,
+ "##异": 15517,
+ "##弃": 15518,
+ "##弄": 15519,
+ "##弈": 15520,
+ "##弊": 15521,
+ "##弋": 15522,
+ "##式": 15523,
+ "##弑": 15524,
+ "##弒": 15525,
+ "##弓": 15526,
+ "##弔": 15527,
+ "##引": 15528,
+ "##弗": 15529,
+ "##弘": 15530,
+ "##弛": 15531,
+ "##弟": 15532,
+ "##张": 15533,
+ "##弥": 15534,
+ "##弦": 15535,
+ "##弧": 15536,
+ "##弩": 15537,
+ "##弭": 15538,
+ "##弯": 15539,
+ "##弱": 15540,
+ "##張": 15541,
+ "##強": 15542,
+ "##弹": 15543,
+ "##强": 15544,
+ "##弼": 15545,
+ "##弾": 15546,
+ "##彅": 15547,
+ "##彆": 15548,
+ "##彈": 15549,
+ "##彌": 15550,
+ "##彎": 15551,
+ "##归": 15552,
+ "##当": 15553,
+ "##录": 15554,
+ "##彗": 15555,
+ "##彙": 15556,
+ "##彝": 15557,
+ "##形": 15558,
+ "##彤": 15559,
+ "##彥": 15560,
+ "##彦": 15561,
+ "##彧": 15562,
+ "##彩": 15563,
+ "##彪": 15564,
+ "##彫": 15565,
+ "##彬": 15566,
+ "##彭": 15567,
+ "##彰": 15568,
+ "##影": 15569,
+ "##彷": 15570,
+ "##役": 15571,
+ "##彻": 15572,
+ "##彼": 15573,
+ "##彿": 15574,
+ "##往": 15575,
+ "##征": 15576,
+ "##径": 15577,
+ "##待": 15578,
+ "##徇": 15579,
+ "##很": 15580,
+ "##徉": 15581,
+ "##徊": 15582,
+ "##律": 15583,
+ "##後": 15584,
+ "##徐": 15585,
+ "##徑": 15586,
+ "##徒": 15587,
+ "##従": 15588,
+ "##徕": 15589,
+ "##得": 15590,
+ "##徘": 15591,
+ "##徙": 15592,
+ "##徜": 15593,
+ "##從": 15594,
+ "##徠": 15595,
+ "##御": 15596,
+ "##徨": 15597,
+ "##復": 15598,
+ "##循": 15599,
+ "##徬": 15600,
+ "##微": 15601,
+ "##徳": 15602,
+ "##徴": 15603,
+ "##徵": 15604,
+ "##德": 15605,
+ "##徹": 15606,
+ "##徼": 15607,
+ "##徽": 15608,
+ "##心": 15609,
+ "##必": 15610,
+ "##忆": 15611,
+ "##忌": 15612,
+ "##忍": 15613,
+ "##忏": 15614,
+ "##忐": 15615,
+ "##忑": 15616,
+ "##忒": 15617,
+ "##忖": 15618,
+ "##志": 15619,
+ "##忘": 15620,
+ "##忙": 15621,
+ "##応": 15622,
+ "##忠": 15623,
+ "##忡": 15624,
+ "##忤": 15625,
+ "##忧": 15626,
+ "##忪": 15627,
+ "##快": 15628,
+ "##忱": 15629,
+ "##念": 15630,
+ "##忻": 15631,
+ "##忽": 15632,
+ "##忿": 15633,
+ "##怀": 15634,
+ "##态": 15635,
+ "##怂": 15636,
+ "##怅": 15637,
+ "##怆": 15638,
+ "##怎": 15639,
+ "##怏": 15640,
+ "##怒": 15641,
+ "##怔": 15642,
+ "##怕": 15643,
+ "##怖": 15644,
+ "##怙": 15645,
+ "##怜": 15646,
+ "##思": 15647,
+ "##怠": 15648,
+ "##怡": 15649,
+ "##急": 15650,
+ "##怦": 15651,
+ "##性": 15652,
+ "##怨": 15653,
+ "##怪": 15654,
+ "##怯": 15655,
+ "##怵": 15656,
+ "##总": 15657,
+ "##怼": 15658,
+ "##恁": 15659,
+ "##恃": 15660,
+ "##恆": 15661,
+ "##恋": 15662,
+ "##恍": 15663,
+ "##恐": 15664,
+ "##恒": 15665,
+ "##恕": 15666,
+ "##恙": 15667,
+ "##恚": 15668,
+ "##恢": 15669,
+ "##恣": 15670,
+ "##恤": 15671,
+ "##恥": 15672,
+ "##恨": 15673,
+ "##恩": 15674,
+ "##恪": 15675,
+ "##恫": 15676,
+ "##恬": 15677,
+ "##恭": 15678,
+ "##息": 15679,
+ "##恰": 15680,
+ "##恳": 15681,
+ "##恵": 15682,
+ "##恶": 15683,
+ "##恸": 15684,
+ "##恺": 15685,
+ "##恻": 15686,
+ "##恼": 15687,
+ "##恿": 15688,
+ "##悄": 15689,
+ "##悅": 15690,
+ "##悉": 15691,
+ "##悌": 15692,
+ "##悍": 15693,
+ "##悔": 15694,
+ "##悖": 15695,
+ "##悚": 15696,
+ "##悟": 15697,
+ "##悠": 15698,
+ "##患": 15699,
+ "##悦": 15700,
+ "##您": 15701,
+ "##悩": 15702,
+ "##悪": 15703,
+ "##悬": 15704,
+ "##悯": 15705,
+ "##悱": 15706,
+ "##悲": 15707,
+ "##悴": 15708,
+ "##悵": 15709,
+ "##悶": 15710,
+ "##悸": 15711,
+ "##悻": 15712,
+ "##悼": 15713,
+ "##悽": 15714,
+ "##情": 15715,
+ "##惆": 15716,
+ "##惇": 15717,
+ "##惊": 15718,
+ "##惋": 15719,
+ "##惑": 15720,
+ "##惕": 15721,
+ "##惘": 15722,
+ "##惚": 15723,
+ "##惜": 15724,
+ "##惟": 15725,
+ "##惠": 15726,
+ "##惡": 15727,
+ "##惦": 15728,
+ "##惧": 15729,
+ "##惨": 15730,
+ "##惩": 15731,
+ "##惫": 15732,
+ "##惬": 15733,
+ "##惭": 15734,
+ "##惮": 15735,
+ "##惯": 15736,
+ "##惰": 15737,
+ "##惱": 15738,
+ "##想": 15739,
+ "##惴": 15740,
+ "##惶": 15741,
+ "##惹": 15742,
+ "##惺": 15743,
+ "##愁": 15744,
+ "##愆": 15745,
+ "##愈": 15746,
+ "##愉": 15747,
+ "##愍": 15748,
+ "##意": 15749,
+ "##愕": 15750,
+ "##愚": 15751,
+ "##愛": 15752,
+ "##愜": 15753,
+ "##感": 15754,
+ "##愣": 15755,
+ "##愤": 15756,
+ "##愧": 15757,
+ "##愫": 15758,
+ "##愷": 15759,
+ "##愿": 15760,
+ "##慄": 15761,
+ "##慈": 15762,
+ "##態": 15763,
+ "##慌": 15764,
+ "##慎": 15765,
+ "##慑": 15766,
+ "##慕": 15767,
+ "##慘": 15768,
+ "##慚": 15769,
+ "##慟": 15770,
+ "##慢": 15771,
+ "##慣": 15772,
+ "##慧": 15773,
+ "##慨": 15774,
+ "##慫": 15775,
+ "##慮": 15776,
+ "##慰": 15777,
+ "##慳": 15778,
+ "##慵": 15779,
+ "##慶": 15780,
+ "##慷": 15781,
+ "##慾": 15782,
+ "##憂": 15783,
+ "##憊": 15784,
+ "##憋": 15785,
+ "##憎": 15786,
+ "##憐": 15787,
+ "##憑": 15788,
+ "##憔": 15789,
+ "##憚": 15790,
+ "##憤": 15791,
+ "##憧": 15792,
+ "##憨": 15793,
+ "##憩": 15794,
+ "##憫": 15795,
+ "##憬": 15796,
+ "##憲": 15797,
+ "##憶": 15798,
+ "##憾": 15799,
+ "##懂": 15800,
+ "##懇": 15801,
+ "##懈": 15802,
+ "##應": 15803,
+ "##懊": 15804,
+ "##懋": 15805,
+ "##懑": 15806,
+ "##懒": 15807,
+ "##懦": 15808,
+ "##懲": 15809,
+ "##懵": 15810,
+ "##懶": 15811,
+ "##懷": 15812,
+ "##懸": 15813,
+ "##懺": 15814,
+ "##懼": 15815,
+ "##懾": 15816,
+ "##懿": 15817,
+ "##戀": 15818,
+ "##戈": 15819,
+ "##戊": 15820,
+ "##戌": 15821,
+ "##戍": 15822,
+ "##戎": 15823,
+ "##戏": 15824,
+ "##成": 15825,
+ "##我": 15826,
+ "##戒": 15827,
+ "##戕": 15828,
+ "##或": 15829,
+ "##战": 15830,
+ "##戚": 15831,
+ "##戛": 15832,
+ "##戟": 15833,
+ "##戡": 15834,
+ "##戦": 15835,
+ "##截": 15836,
+ "##戬": 15837,
+ "##戮": 15838,
+ "##戰": 15839,
+ "##戲": 15840,
+ "##戳": 15841,
+ "##戴": 15842,
+ "##戶": 15843,
+ "##户": 15844,
+ "##戸": 15845,
+ "##戻": 15846,
+ "##戾": 15847,
+ "##房": 15848,
+ "##所": 15849,
+ "##扁": 15850,
+ "##扇": 15851,
+ "##扈": 15852,
+ "##扉": 15853,
+ "##手": 15854,
+ "##才": 15855,
+ "##扎": 15856,
+ "##扑": 15857,
+ "##扒": 15858,
+ "##打": 15859,
+ "##扔": 15860,
+ "##払": 15861,
+ "##托": 15862,
+ "##扛": 15863,
+ "##扣": 15864,
+ "##扦": 15865,
+ "##执": 15866,
+ "##扩": 15867,
+ "##扪": 15868,
+ "##扫": 15869,
+ "##扬": 15870,
+ "##扭": 15871,
+ "##扮": 15872,
+ "##扯": 15873,
+ "##扰": 15874,
+ "##扱": 15875,
+ "##扳": 15876,
+ "##扶": 15877,
+ "##批": 15878,
+ "##扼": 15879,
+ "##找": 15880,
+ "##承": 15881,
+ "##技": 15882,
+ "##抄": 15883,
+ "##抉": 15884,
+ "##把": 15885,
+ "##抑": 15886,
+ "##抒": 15887,
+ "##抓": 15888,
+ "##投": 15889,
+ "##抖": 15890,
+ "##抗": 15891,
+ "##折": 15892,
+ "##抚": 15893,
+ "##抛": 15894,
+ "##抜": 15895,
+ "##択": 15896,
+ "##抟": 15897,
+ "##抠": 15898,
+ "##抡": 15899,
+ "##抢": 15900,
+ "##护": 15901,
+ "##报": 15902,
+ "##抨": 15903,
+ "##披": 15904,
+ "##抬": 15905,
+ "##抱": 15906,
+ "##抵": 15907,
+ "##抹": 15908,
+ "##押": 15909,
+ "##抽": 15910,
+ "##抿": 15911,
+ "##拂": 15912,
+ "##拄": 15913,
+ "##担": 15914,
+ "##拆": 15915,
+ "##拇": 15916,
+ "##拈": 15917,
+ "##拉": 15918,
+ "##拋": 15919,
+ "##拌": 15920,
+ "##拍": 15921,
+ "##拎": 15922,
+ "##拐": 15923,
+ "##拒": 15924,
+ "##拓": 15925,
+ "##拔": 15926,
+ "##拖": 15927,
+ "##拗": 15928,
+ "##拘": 15929,
+ "##拙": 15930,
+ "##拚": 15931,
+ "##招": 15932,
+ "##拜": 15933,
+ "##拟": 15934,
+ "##拡": 15935,
+ "##拢": 15936,
+ "##拣": 15937,
+ "##拥": 15938,
+ "##拦": 15939,
+ "##拧": 15940,
+ "##拨": 15941,
+ "##择": 15942,
+ "##括": 15943,
+ "##拭": 15944,
+ "##拮": 15945,
+ "##拯": 15946,
+ "##拱": 15947,
+ "##拳": 15948,
+ "##拴": 15949,
+ "##拷": 15950,
+ "##拼": 15951,
+ "##拽": 15952,
+ "##拾": 15953,
+ "##拿": 15954,
+ "##持": 15955,
+ "##挂": 15956,
+ "##指": 15957,
+ "##挈": 15958,
+ "##按": 15959,
+ "##挎": 15960,
+ "##挑": 15961,
+ "##挖": 15962,
+ "##挙": 15963,
+ "##挚": 15964,
+ "##挛": 15965,
+ "##挝": 15966,
+ "##挞": 15967,
+ "##挟": 15968,
+ "##挠": 15969,
+ "##挡": 15970,
+ "##挣": 15971,
+ "##挤": 15972,
+ "##挥": 15973,
+ "##挨": 15974,
+ "##挪": 15975,
+ "##挫": 15976,
+ "##振": 15977,
+ "##挲": 15978,
+ "##挹": 15979,
+ "##挺": 15980,
+ "##挽": 15981,
+ "##挾": 15982,
+ "##捂": 15983,
+ "##捅": 15984,
+ "##捆": 15985,
+ "##捉": 15986,
+ "##捋": 15987,
+ "##捌": 15988,
+ "##捍": 15989,
+ "##捎": 15990,
+ "##捏": 15991,
+ "##捐": 15992,
+ "##捕": 15993,
+ "##捞": 15994,
+ "##损": 15995,
+ "##捡": 15996,
+ "##换": 15997,
+ "##捣": 15998,
+ "##捧": 15999,
+ "##捨": 16000,
+ "##捩": 16001,
+ "##据": 16002,
+ "##捱": 16003,
+ "##捲": 16004,
+ "##捶": 16005,
+ "##捷": 16006,
+ "##捺": 16007,
+ "##捻": 16008,
+ "##掀": 16009,
+ "##掂": 16010,
+ "##掃": 16011,
+ "##掇": 16012,
+ "##授": 16013,
+ "##掉": 16014,
+ "##掌": 16015,
+ "##掏": 16016,
+ "##掐": 16017,
+ "##排": 16018,
+ "##掖": 16019,
+ "##掘": 16020,
+ "##掙": 16021,
+ "##掛": 16022,
+ "##掠": 16023,
+ "##採": 16024,
+ "##探": 16025,
+ "##掣": 16026,
+ "##接": 16027,
+ "##控": 16028,
+ "##推": 16029,
+ "##掩": 16030,
+ "##措": 16031,
+ "##掬": 16032,
+ "##掰": 16033,
+ "##掲": 16034,
+ "##掳": 16035,
+ "##掴": 16036,
+ "##掷": 16037,
+ "##掸": 16038,
+ "##掺": 16039,
+ "##揀": 16040,
+ "##揃": 16041,
+ "##揄": 16042,
+ "##揆": 16043,
+ "##揉": 16044,
+ "##揍": 16045,
+ "##描": 16046,
+ "##提": 16047,
+ "##插": 16048,
+ "##揖": 16049,
+ "##揚": 16050,
+ "##換": 16051,
+ "##握": 16052,
+ "##揣": 16053,
+ "##揩": 16054,
+ "##揪": 16055,
+ "##揭": 16056,
+ "##揮": 16057,
+ "##援": 16058,
+ "##揶": 16059,
+ "##揸": 16060,
+ "##揹": 16061,
+ "##揽": 16062,
+ "##搀": 16063,
+ "##搁": 16064,
+ "##搂": 16065,
+ "##搅": 16066,
+ "##損": 16067,
+ "##搏": 16068,
+ "##搐": 16069,
+ "##搓": 16070,
+ "##搔": 16071,
+ "##搖": 16072,
+ "##搗": 16073,
+ "##搜": 16074,
+ "##搞": 16075,
+ "##搡": 16076,
+ "##搪": 16077,
+ "##搬": 16078,
+ "##搭": 16079,
+ "##搵": 16080,
+ "##搶": 16081,
+ "##携": 16082,
+ "##搽": 16083,
+ "##摀": 16084,
+ "##摁": 16085,
+ "##摄": 16086,
+ "##摆": 16087,
+ "##摇": 16088,
+ "##摈": 16089,
+ "##摊": 16090,
+ "##摒": 16091,
+ "##摔": 16092,
+ "##摘": 16093,
+ "##摞": 16094,
+ "##摟": 16095,
+ "##摧": 16096,
+ "##摩": 16097,
+ "##摯": 16098,
+ "##摳": 16099,
+ "##摸": 16100,
+ "##摹": 16101,
+ "##摺": 16102,
+ "##摻": 16103,
+ "##撂": 16104,
+ "##撃": 16105,
+ "##撅": 16106,
+ "##撇": 16107,
+ "##撈": 16108,
+ "##撐": 16109,
+ "##撑": 16110,
+ "##撒": 16111,
+ "##撓": 16112,
+ "##撕": 16113,
+ "##撚": 16114,
+ "##撞": 16115,
+ "##撤": 16116,
+ "##撥": 16117,
+ "##撩": 16118,
+ "##撫": 16119,
+ "##撬": 16120,
+ "##播": 16121,
+ "##撮": 16122,
+ "##撰": 16123,
+ "##撲": 16124,
+ "##撵": 16125,
+ "##撷": 16126,
+ "##撸": 16127,
+ "##撻": 16128,
+ "##撼": 16129,
+ "##撿": 16130,
+ "##擀": 16131,
+ "##擁": 16132,
+ "##擂": 16133,
+ "##擄": 16134,
+ "##擅": 16135,
+ "##擇": 16136,
+ "##擊": 16137,
+ "##擋": 16138,
+ "##操": 16139,
+ "##擎": 16140,
+ "##擒": 16141,
+ "##擔": 16142,
+ "##擘": 16143,
+ "##據": 16144,
+ "##擞": 16145,
+ "##擠": 16146,
+ "##擡": 16147,
+ "##擢": 16148,
+ "##擦": 16149,
+ "##擬": 16150,
+ "##擰": 16151,
+ "##擱": 16152,
+ "##擲": 16153,
+ "##擴": 16154,
+ "##擷": 16155,
+ "##擺": 16156,
+ "##擼": 16157,
+ "##擾": 16158,
+ "##攀": 16159,
+ "##攏": 16160,
+ "##攒": 16161,
+ "##攔": 16162,
+ "##攘": 16163,
+ "##攙": 16164,
+ "##攜": 16165,
+ "##攝": 16166,
+ "##攞": 16167,
+ "##攢": 16168,
+ "##攣": 16169,
+ "##攤": 16170,
+ "##攥": 16171,
+ "##攪": 16172,
+ "##攫": 16173,
+ "##攬": 16174,
+ "##支": 16175,
+ "##收": 16176,
+ "##攸": 16177,
+ "##改": 16178,
+ "##攻": 16179,
+ "##放": 16180,
+ "##政": 16181,
+ "##故": 16182,
+ "##效": 16183,
+ "##敌": 16184,
+ "##敍": 16185,
+ "##敎": 16186,
+ "##敏": 16187,
+ "##救": 16188,
+ "##敕": 16189,
+ "##敖": 16190,
+ "##敗": 16191,
+ "##敘": 16192,
+ "##教": 16193,
+ "##敛": 16194,
+ "##敝": 16195,
+ "##敞": 16196,
+ "##敢": 16197,
+ "##散": 16198,
+ "##敦": 16199,
+ "##敬": 16200,
+ "##数": 16201,
+ "##敲": 16202,
+ "##整": 16203,
+ "##敵": 16204,
+ "##敷": 16205,
+ "##數": 16206,
+ "##斂": 16207,
+ "##斃": 16208,
+ "##文": 16209,
+ "##斋": 16210,
+ "##斌": 16211,
+ "##斎": 16212,
+ "##斐": 16213,
+ "##斑": 16214,
+ "##斓": 16215,
+ "##斗": 16216,
+ "##料": 16217,
+ "##斛": 16218,
+ "##斜": 16219,
+ "##斟": 16220,
+ "##斡": 16221,
+ "##斤": 16222,
+ "##斥": 16223,
+ "##斧": 16224,
+ "##斩": 16225,
+ "##斫": 16226,
+ "##斬": 16227,
+ "##断": 16228,
+ "##斯": 16229,
+ "##新": 16230,
+ "##斷": 16231,
+ "##方": 16232,
+ "##於": 16233,
+ "##施": 16234,
+ "##旁": 16235,
+ "##旃": 16236,
+ "##旅": 16237,
+ "##旋": 16238,
+ "##旌": 16239,
+ "##旎": 16240,
+ "##族": 16241,
+ "##旖": 16242,
+ "##旗": 16243,
+ "##无": 16244,
+ "##既": 16245,
+ "##日": 16246,
+ "##旦": 16247,
+ "##旧": 16248,
+ "##旨": 16249,
+ "##早": 16250,
+ "##旬": 16251,
+ "##旭": 16252,
+ "##旮": 16253,
+ "##旱": 16254,
+ "##时": 16255,
+ "##旷": 16256,
+ "##旺": 16257,
+ "##旻": 16258,
+ "##昀": 16259,
+ "##昂": 16260,
+ "##昆": 16261,
+ "##昇": 16262,
+ "##昉": 16263,
+ "##昊": 16264,
+ "##昌": 16265,
+ "##明": 16266,
+ "##昏": 16267,
+ "##易": 16268,
+ "##昔": 16269,
+ "##昕": 16270,
+ "##昙": 16271,
+ "##星": 16272,
+ "##映": 16273,
+ "##春": 16274,
+ "##昧": 16275,
+ "##昨": 16276,
+ "##昭": 16277,
+ "##是": 16278,
+ "##昱": 16279,
+ "##昴": 16280,
+ "##昵": 16281,
+ "##昶": 16282,
+ "##昼": 16283,
+ "##显": 16284,
+ "##晁": 16285,
+ "##時": 16286,
+ "##晃": 16287,
+ "##晉": 16288,
+ "##晋": 16289,
+ "##晌": 16290,
+ "##晏": 16291,
+ "##晒": 16292,
+ "##晓": 16293,
+ "##晔": 16294,
+ "##晕": 16295,
+ "##晖": 16296,
+ "##晗": 16297,
+ "##晚": 16298,
+ "##晝": 16299,
+ "##晞": 16300,
+ "##晟": 16301,
+ "##晤": 16302,
+ "##晦": 16303,
+ "##晨": 16304,
+ "##晩": 16305,
+ "##普": 16306,
+ "##景": 16307,
+ "##晰": 16308,
+ "##晴": 16309,
+ "##晶": 16310,
+ "##晷": 16311,
+ "##智": 16312,
+ "##晾": 16313,
+ "##暂": 16314,
+ "##暄": 16315,
+ "##暇": 16316,
+ "##暈": 16317,
+ "##暉": 16318,
+ "##暌": 16319,
+ "##暐": 16320,
+ "##暑": 16321,
+ "##暖": 16322,
+ "##暗": 16323,
+ "##暝": 16324,
+ "##暢": 16325,
+ "##暧": 16326,
+ "##暨": 16327,
+ "##暫": 16328,
+ "##暮": 16329,
+ "##暱": 16330,
+ "##暴": 16331,
+ "##暸": 16332,
+ "##暹": 16333,
+ "##曄": 16334,
+ "##曆": 16335,
+ "##曇": 16336,
+ "##曉": 16337,
+ "##曖": 16338,
+ "##曙": 16339,
+ "##曜": 16340,
+ "##曝": 16341,
+ "##曠": 16342,
+ "##曦": 16343,
+ "##曬": 16344,
+ "##曰": 16345,
+ "##曲": 16346,
+ "##曳": 16347,
+ "##更": 16348,
+ "##書": 16349,
+ "##曹": 16350,
+ "##曼": 16351,
+ "##曾": 16352,
+ "##替": 16353,
+ "##最": 16354,
+ "##會": 16355,
+ "##月": 16356,
+ "##有": 16357,
+ "##朋": 16358,
+ "##服": 16359,
+ "##朐": 16360,
+ "##朔": 16361,
+ "##朕": 16362,
+ "##朗": 16363,
+ "##望": 16364,
+ "##朝": 16365,
+ "##期": 16366,
+ "##朦": 16367,
+ "##朧": 16368,
+ "##木": 16369,
+ "##未": 16370,
+ "##末": 16371,
+ "##本": 16372,
+ "##札": 16373,
+ "##朮": 16374,
+ "##术": 16375,
+ "##朱": 16376,
+ "##朴": 16377,
+ "##朵": 16378,
+ "##机": 16379,
+ "##朽": 16380,
+ "##杀": 16381,
+ "##杂": 16382,
+ "##权": 16383,
+ "##杆": 16384,
+ "##杈": 16385,
+ "##杉": 16386,
+ "##李": 16387,
+ "##杏": 16388,
+ "##材": 16389,
+ "##村": 16390,
+ "##杓": 16391,
+ "##杖": 16392,
+ "##杜": 16393,
+ "##杞": 16394,
+ "##束": 16395,
+ "##杠": 16396,
+ "##条": 16397,
+ "##来": 16398,
+ "##杨": 16399,
+ "##杭": 16400,
+ "##杯": 16401,
+ "##杰": 16402,
+ "##東": 16403,
+ "##杳": 16404,
+ "##杵": 16405,
+ "##杷": 16406,
+ "##杼": 16407,
+ "##松": 16408,
+ "##板": 16409,
+ "##极": 16410,
+ "##构": 16411,
+ "##枇": 16412,
+ "##枉": 16413,
+ "##枋": 16414,
+ "##析": 16415,
+ "##枕": 16416,
+ "##林": 16417,
+ "##枚": 16418,
+ "##果": 16419,
+ "##枝": 16420,
+ "##枢": 16421,
+ "##枣": 16422,
+ "##枪": 16423,
+ "##枫": 16424,
+ "##枭": 16425,
+ "##枯": 16426,
+ "##枰": 16427,
+ "##枱": 16428,
+ "##枳": 16429,
+ "##架": 16430,
+ "##枷": 16431,
+ "##枸": 16432,
+ "##柄": 16433,
+ "##柏": 16434,
+ "##某": 16435,
+ "##柑": 16436,
+ "##柒": 16437,
+ "##染": 16438,
+ "##柔": 16439,
+ "##柘": 16440,
+ "##柚": 16441,
+ "##柜": 16442,
+ "##柞": 16443,
+ "##柠": 16444,
+ "##柢": 16445,
+ "##查": 16446,
+ "##柩": 16447,
+ "##柬": 16448,
+ "##柯": 16449,
+ "##柱": 16450,
+ "##柳": 16451,
+ "##柴": 16452,
+ "##柵": 16453,
+ "##査": 16454,
+ "##柿": 16455,
+ "##栀": 16456,
+ "##栃": 16457,
+ "##栄": 16458,
+ "##栅": 16459,
+ "##标": 16460,
+ "##栈": 16461,
+ "##栉": 16462,
+ "##栋": 16463,
+ "##栎": 16464,
+ "##栏": 16465,
+ "##树": 16466,
+ "##栓": 16467,
+ "##栖": 16468,
+ "##栗": 16469,
+ "##校": 16470,
+ "##栩": 16471,
+ "##株": 16472,
+ "##样": 16473,
+ "##核": 16474,
+ "##根": 16475,
+ "##格": 16476,
+ "##栽": 16477,
+ "##栾": 16478,
+ "##桀": 16479,
+ "##桁": 16480,
+ "##桂": 16481,
+ "##桃": 16482,
+ "##桅": 16483,
+ "##框": 16484,
+ "##案": 16485,
+ "##桉": 16486,
+ "##桌": 16487,
+ "##桎": 16488,
+ "##桐": 16489,
+ "##桑": 16490,
+ "##桓": 16491,
+ "##桔": 16492,
+ "##桜": 16493,
+ "##桠": 16494,
+ "##桡": 16495,
+ "##桢": 16496,
+ "##档": 16497,
+ "##桥": 16498,
+ "##桦": 16499,
+ "##桧": 16500,
+ "##桨": 16501,
+ "##桩": 16502,
+ "##桶": 16503,
+ "##桿": 16504,
+ "##梁": 16505,
+ "##梅": 16506,
+ "##梆": 16507,
+ "##梏": 16508,
+ "##梓": 16509,
+ "##梗": 16510,
+ "##條": 16511,
+ "##梟": 16512,
+ "##梢": 16513,
+ "##梦": 16514,
+ "##梧": 16515,
+ "##梨": 16516,
+ "##梭": 16517,
+ "##梯": 16518,
+ "##械": 16519,
+ "##梳": 16520,
+ "##梵": 16521,
+ "##梶": 16522,
+ "##检": 16523,
+ "##棂": 16524,
+ "##棄": 16525,
+ "##棉": 16526,
+ "##棋": 16527,
+ "##棍": 16528,
+ "##棒": 16529,
+ "##棕": 16530,
+ "##棗": 16531,
+ "##棘": 16532,
+ "##棚": 16533,
+ "##棟": 16534,
+ "##棠": 16535,
+ "##棣": 16536,
+ "##棧": 16537,
+ "##森": 16538,
+ "##棱": 16539,
+ "##棲": 16540,
+ "##棵": 16541,
+ "##棹": 16542,
+ "##棺": 16543,
+ "##椁": 16544,
+ "##椅": 16545,
+ "##椋": 16546,
+ "##植": 16547,
+ "##椎": 16548,
+ "##椒": 16549,
+ "##検": 16550,
+ "##椪": 16551,
+ "##椭": 16552,
+ "##椰": 16553,
+ "##椹": 16554,
+ "##椽": 16555,
+ "##椿": 16556,
+ "##楂": 16557,
+ "##楊": 16558,
+ "##楓": 16559,
+ "##楔": 16560,
+ "##楚": 16561,
+ "##楝": 16562,
+ "##楞": 16563,
+ "##楠": 16564,
+ "##楣": 16565,
+ "##楨": 16566,
+ "##楫": 16567,
+ "##業": 16568,
+ "##楮": 16569,
+ "##極": 16570,
+ "##楷": 16571,
+ "##楸": 16572,
+ "##楹": 16573,
+ "##楼": 16574,
+ "##楽": 16575,
+ "##概": 16576,
+ "##榄": 16577,
+ "##榆": 16578,
+ "##榈": 16579,
+ "##榉": 16580,
+ "##榔": 16581,
+ "##榕": 16582,
+ "##榖": 16583,
+ "##榛": 16584,
+ "##榜": 16585,
+ "##榨": 16586,
+ "##榫": 16587,
+ "##榭": 16588,
+ "##榮": 16589,
+ "##榱": 16590,
+ "##榴": 16591,
+ "##榷": 16592,
+ "##榻": 16593,
+ "##槁": 16594,
+ "##槃": 16595,
+ "##構": 16596,
+ "##槌": 16597,
+ "##槍": 16598,
+ "##槎": 16599,
+ "##槐": 16600,
+ "##槓": 16601,
+ "##様": 16602,
+ "##槛": 16603,
+ "##槟": 16604,
+ "##槤": 16605,
+ "##槭": 16606,
+ "##槲": 16607,
+ "##槳": 16608,
+ "##槻": 16609,
+ "##槽": 16610,
+ "##槿": 16611,
+ "##樁": 16612,
+ "##樂": 16613,
+ "##樊": 16614,
+ "##樑": 16615,
+ "##樓": 16616,
+ "##標": 16617,
+ "##樞": 16618,
+ "##樟": 16619,
+ "##模": 16620,
+ "##樣": 16621,
+ "##権": 16622,
+ "##横": 16623,
+ "##樫": 16624,
+ "##樯": 16625,
+ "##樱": 16626,
+ "##樵": 16627,
+ "##樸": 16628,
+ "##樹": 16629,
+ "##樺": 16630,
+ "##樽": 16631,
+ "##樾": 16632,
+ "##橄": 16633,
+ "##橇": 16634,
+ "##橋": 16635,
+ "##橐": 16636,
+ "##橘": 16637,
+ "##橙": 16638,
+ "##機": 16639,
+ "##橡": 16640,
+ "##橢": 16641,
+ "##橫": 16642,
+ "##橱": 16643,
+ "##橹": 16644,
+ "##橼": 16645,
+ "##檀": 16646,
+ "##檄": 16647,
+ "##檎": 16648,
+ "##檐": 16649,
+ "##檔": 16650,
+ "##檗": 16651,
+ "##檜": 16652,
+ "##檢": 16653,
+ "##檬": 16654,
+ "##檯": 16655,
+ "##檳": 16656,
+ "##檸": 16657,
+ "##檻": 16658,
+ "##櫃": 16659,
+ "##櫚": 16660,
+ "##櫛": 16661,
+ "##櫥": 16662,
+ "##櫸": 16663,
+ "##櫻": 16664,
+ "##欄": 16665,
+ "##權": 16666,
+ "##欒": 16667,
+ "##欖": 16668,
+ "##欠": 16669,
+ "##次": 16670,
+ "##欢": 16671,
+ "##欣": 16672,
+ "##欧": 16673,
+ "##欲": 16674,
+ "##欸": 16675,
+ "##欺": 16676,
+ "##欽": 16677,
+ "##款": 16678,
+ "##歆": 16679,
+ "##歇": 16680,
+ "##歉": 16681,
+ "##歌": 16682,
+ "##歎": 16683,
+ "##歐": 16684,
+ "##歓": 16685,
+ "##歙": 16686,
+ "##歛": 16687,
+ "##歡": 16688,
+ "##止": 16689,
+ "##正": 16690,
+ "##此": 16691,
+ "##步": 16692,
+ "##武": 16693,
+ "##歧": 16694,
+ "##歩": 16695,
+ "##歪": 16696,
+ "##歯": 16697,
+ "##歲": 16698,
+ "##歳": 16699,
+ "##歴": 16700,
+ "##歷": 16701,
+ "##歸": 16702,
+ "##歹": 16703,
+ "##死": 16704,
+ "##歼": 16705,
+ "##殁": 16706,
+ "##殃": 16707,
+ "##殆": 16708,
+ "##殇": 16709,
+ "##殉": 16710,
+ "##殊": 16711,
+ "##残": 16712,
+ "##殒": 16713,
+ "##殓": 16714,
+ "##殖": 16715,
+ "##殘": 16716,
+ "##殞": 16717,
+ "##殡": 16718,
+ "##殤": 16719,
+ "##殭": 16720,
+ "##殯": 16721,
+ "##殲": 16722,
+ "##殴": 16723,
+ "##段": 16724,
+ "##殷": 16725,
+ "##殺": 16726,
+ "##殼": 16727,
+ "##殿": 16728,
+ "##毀": 16729,
+ "##毁": 16730,
+ "##毂": 16731,
+ "##毅": 16732,
+ "##毆": 16733,
+ "##毋": 16734,
+ "##母": 16735,
+ "##毎": 16736,
+ "##每": 16737,
+ "##毒": 16738,
+ "##毓": 16739,
+ "##比": 16740,
+ "##毕": 16741,
+ "##毗": 16742,
+ "##毘": 16743,
+ "##毙": 16744,
+ "##毛": 16745,
+ "##毡": 16746,
+ "##毫": 16747,
+ "##毯": 16748,
+ "##毽": 16749,
+ "##氈": 16750,
+ "##氏": 16751,
+ "##氐": 16752,
+ "##民": 16753,
+ "##氓": 16754,
+ "##气": 16755,
+ "##氖": 16756,
+ "##気": 16757,
+ "##氙": 16758,
+ "##氛": 16759,
+ "##氟": 16760,
+ "##氡": 16761,
+ "##氢": 16762,
+ "##氣": 16763,
+ "##氤": 16764,
+ "##氦": 16765,
+ "##氧": 16766,
+ "##氨": 16767,
+ "##氪": 16768,
+ "##氫": 16769,
+ "##氮": 16770,
+ "##氯": 16771,
+ "##氰": 16772,
+ "##氲": 16773,
+ "##水": 16774,
+ "##氷": 16775,
+ "##永": 16776,
+ "##氹": 16777,
+ "##氾": 16778,
+ "##汀": 16779,
+ "##汁": 16780,
+ "##求": 16781,
+ "##汆": 16782,
+ "##汇": 16783,
+ "##汉": 16784,
+ "##汎": 16785,
+ "##汐": 16786,
+ "##汕": 16787,
+ "##汗": 16788,
+ "##汙": 16789,
+ "##汛": 16790,
+ "##汝": 16791,
+ "##汞": 16792,
+ "##江": 16793,
+ "##池": 16794,
+ "##污": 16795,
+ "##汤": 16796,
+ "##汨": 16797,
+ "##汩": 16798,
+ "##汪": 16799,
+ "##汰": 16800,
+ "##汲": 16801,
+ "##汴": 16802,
+ "##汶": 16803,
+ "##汹": 16804,
+ "##決": 16805,
+ "##汽": 16806,
+ "##汾": 16807,
+ "##沁": 16808,
+ "##沂": 16809,
+ "##沃": 16810,
+ "##沅": 16811,
+ "##沈": 16812,
+ "##沉": 16813,
+ "##沌": 16814,
+ "##沏": 16815,
+ "##沐": 16816,
+ "##沒": 16817,
+ "##沓": 16818,
+ "##沖": 16819,
+ "##沙": 16820,
+ "##沛": 16821,
+ "##沟": 16822,
+ "##没": 16823,
+ "##沢": 16824,
+ "##沣": 16825,
+ "##沥": 16826,
+ "##沦": 16827,
+ "##沧": 16828,
+ "##沪": 16829,
+ "##沫": 16830,
+ "##沭": 16831,
+ "##沮": 16832,
+ "##沱": 16833,
+ "##河": 16834,
+ "##沸": 16835,
+ "##油": 16836,
+ "##治": 16837,
+ "##沼": 16838,
+ "##沽": 16839,
+ "##沾": 16840,
+ "##沿": 16841,
+ "##況": 16842,
+ "##泄": 16843,
+ "##泉": 16844,
+ "##泊": 16845,
+ "##泌": 16846,
+ "##泓": 16847,
+ "##法": 16848,
+ "##泗": 16849,
+ "##泛": 16850,
+ "##泞": 16851,
+ "##泠": 16852,
+ "##泡": 16853,
+ "##波": 16854,
+ "##泣": 16855,
+ "##泥": 16856,
+ "##注": 16857,
+ "##泪": 16858,
+ "##泫": 16859,
+ "##泮": 16860,
+ "##泯": 16861,
+ "##泰": 16862,
+ "##泱": 16863,
+ "##泳": 16864,
+ "##泵": 16865,
+ "##泷": 16866,
+ "##泸": 16867,
+ "##泻": 16868,
+ "##泼": 16869,
+ "##泽": 16870,
+ "##泾": 16871,
+ "##洁": 16872,
+ "##洄": 16873,
+ "##洋": 16874,
+ "##洒": 16875,
+ "##洗": 16876,
+ "##洙": 16877,
+ "##洛": 16878,
+ "##洞": 16879,
+ "##津": 16880,
+ "##洩": 16881,
+ "##洪": 16882,
+ "##洮": 16883,
+ "##洱": 16884,
+ "##洲": 16885,
+ "##洵": 16886,
+ "##洶": 16887,
+ "##洸": 16888,
+ "##洹": 16889,
+ "##活": 16890,
+ "##洼": 16891,
+ "##洽": 16892,
+ "##派": 16893,
+ "##流": 16894,
+ "##浃": 16895,
+ "##浄": 16896,
+ "##浅": 16897,
+ "##浆": 16898,
+ "##浇": 16899,
+ "##浊": 16900,
+ "##测": 16901,
+ "##济": 16902,
+ "##浏": 16903,
+ "##浑": 16904,
+ "##浒": 16905,
+ "##浓": 16906,
+ "##浔": 16907,
+ "##浙": 16908,
+ "##浚": 16909,
+ "##浜": 16910,
+ "##浣": 16911,
+ "##浦": 16912,
+ "##浩": 16913,
+ "##浪": 16914,
+ "##浬": 16915,
+ "##浮": 16916,
+ "##浯": 16917,
+ "##浴": 16918,
+ "##海": 16919,
+ "##浸": 16920,
+ "##涂": 16921,
+ "##涅": 16922,
+ "##涇": 16923,
+ "##消": 16924,
+ "##涉": 16925,
+ "##涌": 16926,
+ "##涎": 16927,
+ "##涓": 16928,
+ "##涔": 16929,
+ "##涕": 16930,
+ "##涙": 16931,
+ "##涛": 16932,
+ "##涝": 16933,
+ "##涞": 16934,
+ "##涟": 16935,
+ "##涠": 16936,
+ "##涡": 16937,
+ "##涣": 16938,
+ "##涤": 16939,
+ "##润": 16940,
+ "##涧": 16941,
+ "##涨": 16942,
+ "##涩": 16943,
+ "##涪": 16944,
+ "##涮": 16945,
+ "##涯": 16946,
+ "##液": 16947,
+ "##涵": 16948,
+ "##涸": 16949,
+ "##涼": 16950,
+ "##涿": 16951,
+ "##淀": 16952,
+ "##淄": 16953,
+ "##淅": 16954,
+ "##淆": 16955,
+ "##淇": 16956,
+ "##淋": 16957,
+ "##淌": 16958,
+ "##淑": 16959,
+ "##淒": 16960,
+ "##淖": 16961,
+ "##淘": 16962,
+ "##淙": 16963,
+ "##淚": 16964,
+ "##淞": 16965,
+ "##淡": 16966,
+ "##淤": 16967,
+ "##淦": 16968,
+ "##淨": 16969,
+ "##淩": 16970,
+ "##淪": 16971,
+ "##淫": 16972,
+ "##淬": 16973,
+ "##淮": 16974,
+ "##深": 16975,
+ "##淳": 16976,
+ "##淵": 16977,
+ "##混": 16978,
+ "##淹": 16979,
+ "##淺": 16980,
+ "##添": 16981,
+ "##淼": 16982,
+ "##清": 16983,
+ "##済": 16984,
+ "##渉": 16985,
+ "##渊": 16986,
+ "##渋": 16987,
+ "##渍": 16988,
+ "##渎": 16989,
+ "##渐": 16990,
+ "##渔": 16991,
+ "##渗": 16992,
+ "##渙": 16993,
+ "##渚": 16994,
+ "##減": 16995,
+ "##渝": 16996,
+ "##渠": 16997,
+ "##渡": 16998,
+ "##渣": 16999,
+ "##渤": 17000,
+ "##渥": 17001,
+ "##渦": 17002,
+ "##温": 17003,
+ "##測": 17004,
+ "##渭": 17005,
+ "##港": 17006,
+ "##渲": 17007,
+ "##渴": 17008,
+ "##游": 17009,
+ "##渺": 17010,
+ "##渾": 17011,
+ "##湃": 17012,
+ "##湄": 17013,
+ "##湊": 17014,
+ "##湍": 17015,
+ "##湖": 17016,
+ "##湘": 17017,
+ "##湛": 17018,
+ "##湟": 17019,
+ "##湧": 17020,
+ "##湫": 17021,
+ "##湮": 17022,
+ "##湯": 17023,
+ "##湳": 17024,
+ "##湾": 17025,
+ "##湿": 17026,
+ "##満": 17027,
+ "##溃": 17028,
+ "##溅": 17029,
+ "##溉": 17030,
+ "##溏": 17031,
+ "##源": 17032,
+ "##準": 17033,
+ "##溜": 17034,
+ "##溝": 17035,
+ "##溟": 17036,
+ "##溢": 17037,
+ "##溥": 17038,
+ "##溧": 17039,
+ "##溪": 17040,
+ "##溫": 17041,
+ "##溯": 17042,
+ "##溱": 17043,
+ "##溴": 17044,
+ "##溶": 17045,
+ "##溺": 17046,
+ "##溼": 17047,
+ "##滁": 17048,
+ "##滂": 17049,
+ "##滄": 17050,
+ "##滅": 17051,
+ "##滇": 17052,
+ "##滋": 17053,
+ "##滌": 17054,
+ "##滑": 17055,
+ "##滓": 17056,
+ "##滔": 17057,
+ "##滕": 17058,
+ "##滙": 17059,
+ "##滚": 17060,
+ "##滝": 17061,
+ "##滞": 17062,
+ "##滟": 17063,
+ "##满": 17064,
+ "##滢": 17065,
+ "##滤": 17066,
+ "##滥": 17067,
+ "##滦": 17068,
+ "##滨": 17069,
+ "##滩": 17070,
+ "##滬": 17071,
+ "##滯": 17072,
+ "##滲": 17073,
+ "##滴": 17074,
+ "##滷": 17075,
+ "##滸": 17076,
+ "##滾": 17077,
+ "##滿": 17078,
+ "##漁": 17079,
+ "##漂": 17080,
+ "##漆": 17081,
+ "##漉": 17082,
+ "##漏": 17083,
+ "##漓": 17084,
+ "##演": 17085,
+ "##漕": 17086,
+ "##漠": 17087,
+ "##漢": 17088,
+ "##漣": 17089,
+ "##漩": 17090,
+ "##漪": 17091,
+ "##漫": 17092,
+ "##漬": 17093,
+ "##漯": 17094,
+ "##漱": 17095,
+ "##漲": 17096,
+ "##漳": 17097,
+ "##漸": 17098,
+ "##漾": 17099,
+ "##漿": 17100,
+ "##潆": 17101,
+ "##潇": 17102,
+ "##潋": 17103,
+ "##潍": 17104,
+ "##潑": 17105,
+ "##潔": 17106,
+ "##潘": 17107,
+ "##潛": 17108,
+ "##潜": 17109,
+ "##潞": 17110,
+ "##潟": 17111,
+ "##潢": 17112,
+ "##潤": 17113,
+ "##潦": 17114,
+ "##潧": 17115,
+ "##潭": 17116,
+ "##潮": 17117,
+ "##潰": 17118,
+ "##潴": 17119,
+ "##潸": 17120,
+ "##潺": 17121,
+ "##潼": 17122,
+ "##澀": 17123,
+ "##澄": 17124,
+ "##澆": 17125,
+ "##澈": 17126,
+ "##澍": 17127,
+ "##澎": 17128,
+ "##澗": 17129,
+ "##澜": 17130,
+ "##澡": 17131,
+ "##澤": 17132,
+ "##澧": 17133,
+ "##澱": 17134,
+ "##澳": 17135,
+ "##澹": 17136,
+ "##激": 17137,
+ "##濁": 17138,
+ "##濂": 17139,
+ "##濃": 17140,
+ "##濑": 17141,
+ "##濒": 17142,
+ "##濕": 17143,
+ "##濘": 17144,
+ "##濛": 17145,
+ "##濟": 17146,
+ "##濠": 17147,
+ "##濡": 17148,
+ "##濤": 17149,
+ "##濫": 17150,
+ "##濬": 17151,
+ "##濮": 17152,
+ "##濯": 17153,
+ "##濱": 17154,
+ "##濺": 17155,
+ "##濾": 17156,
+ "##瀅": 17157,
+ "##瀆": 17158,
+ "##瀉": 17159,
+ "##瀋": 17160,
+ "##瀏": 17161,
+ "##瀑": 17162,
+ "##瀕": 17163,
+ "##瀘": 17164,
+ "##瀚": 17165,
+ "##瀛": 17166,
+ "##瀝": 17167,
+ "##瀞": 17168,
+ "##瀟": 17169,
+ "##瀧": 17170,
+ "##瀨": 17171,
+ "##瀬": 17172,
+ "##瀰": 17173,
+ "##瀾": 17174,
+ "##灌": 17175,
+ "##灏": 17176,
+ "##灑": 17177,
+ "##灘": 17178,
+ "##灝": 17179,
+ "##灞": 17180,
+ "##灣": 17181,
+ "##火": 17182,
+ "##灬": 17183,
+ "##灭": 17184,
+ "##灯": 17185,
+ "##灰": 17186,
+ "##灵": 17187,
+ "##灶": 17188,
+ "##灸": 17189,
+ "##灼": 17190,
+ "##災": 17191,
+ "##灾": 17192,
+ "##灿": 17193,
+ "##炀": 17194,
+ "##炁": 17195,
+ "##炅": 17196,
+ "##炉": 17197,
+ "##炊": 17198,
+ "##炎": 17199,
+ "##炒": 17200,
+ "##炔": 17201,
+ "##炕": 17202,
+ "##炖": 17203,
+ "##炙": 17204,
+ "##炜": 17205,
+ "##炫": 17206,
+ "##炬": 17207,
+ "##炭": 17208,
+ "##炮": 17209,
+ "##炯": 17210,
+ "##炳": 17211,
+ "##炷": 17212,
+ "##炸": 17213,
+ "##点": 17214,
+ "##為": 17215,
+ "##炼": 17216,
+ "##炽": 17217,
+ "##烁": 17218,
+ "##烂": 17219,
+ "##烃": 17220,
+ "##烈": 17221,
+ "##烊": 17222,
+ "##烏": 17223,
+ "##烘": 17224,
+ "##烙": 17225,
+ "##烛": 17226,
+ "##烟": 17227,
+ "##烤": 17228,
+ "##烦": 17229,
+ "##烧": 17230,
+ "##烨": 17231,
+ "##烩": 17232,
+ "##烫": 17233,
+ "##烬": 17234,
+ "##热": 17235,
+ "##烯": 17236,
+ "##烷": 17237,
+ "##烹": 17238,
+ "##烽": 17239,
+ "##焉": 17240,
+ "##焊": 17241,
+ "##焕": 17242,
+ "##焖": 17243,
+ "##焗": 17244,
+ "##焘": 17245,
+ "##焙": 17246,
+ "##焚": 17247,
+ "##焜": 17248,
+ "##無": 17249,
+ "##焦": 17250,
+ "##焯": 17251,
+ "##焰": 17252,
+ "##焱": 17253,
+ "##然": 17254,
+ "##焼": 17255,
+ "##煅": 17256,
+ "##煉": 17257,
+ "##煊": 17258,
+ "##煌": 17259,
+ "##煎": 17260,
+ "##煒": 17261,
+ "##煖": 17262,
+ "##煙": 17263,
+ "##煜": 17264,
+ "##煞": 17265,
+ "##煤": 17266,
+ "##煥": 17267,
+ "##煦": 17268,
+ "##照": 17269,
+ "##煨": 17270,
+ "##煩": 17271,
+ "##煮": 17272,
+ "##煲": 17273,
+ "##煸": 17274,
+ "##煽": 17275,
+ "##熄": 17276,
+ "##熊": 17277,
+ "##熏": 17278,
+ "##熒": 17279,
+ "##熔": 17280,
+ "##熙": 17281,
+ "##熟": 17282,
+ "##熠": 17283,
+ "##熨": 17284,
+ "##熬": 17285,
+ "##熱": 17286,
+ "##熵": 17287,
+ "##熹": 17288,
+ "##熾": 17289,
+ "##燁": 17290,
+ "##燃": 17291,
+ "##燄": 17292,
+ "##燈": 17293,
+ "##燉": 17294,
+ "##燊": 17295,
+ "##燎": 17296,
+ "##燒": 17297,
+ "##燔": 17298,
+ "##燕": 17299,
+ "##燙": 17300,
+ "##燜": 17301,
+ "##營": 17302,
+ "##燥": 17303,
+ "##燦": 17304,
+ "##燧": 17305,
+ "##燭": 17306,
+ "##燮": 17307,
+ "##燴": 17308,
+ "##燻": 17309,
+ "##燼": 17310,
+ "##燿": 17311,
+ "##爆": 17312,
+ "##爍": 17313,
+ "##爐": 17314,
+ "##爛": 17315,
+ "##爪": 17316,
+ "##爬": 17317,
+ "##爭": 17318,
+ "##爰": 17319,
+ "##爱": 17320,
+ "##爲": 17321,
+ "##爵": 17322,
+ "##父": 17323,
+ "##爷": 17324,
+ "##爸": 17325,
+ "##爹": 17326,
+ "##爺": 17327,
+ "##爻": 17328,
+ "##爽": 17329,
+ "##爾": 17330,
+ "##牆": 17331,
+ "##片": 17332,
+ "##版": 17333,
+ "##牌": 17334,
+ "##牍": 17335,
+ "##牒": 17336,
+ "##牙": 17337,
+ "##牛": 17338,
+ "##牝": 17339,
+ "##牟": 17340,
+ "##牠": 17341,
+ "##牡": 17342,
+ "##牢": 17343,
+ "##牦": 17344,
+ "##牧": 17345,
+ "##物": 17346,
+ "##牯": 17347,
+ "##牲": 17348,
+ "##牴": 17349,
+ "##牵": 17350,
+ "##特": 17351,
+ "##牺": 17352,
+ "##牽": 17353,
+ "##犀": 17354,
+ "##犁": 17355,
+ "##犄": 17356,
+ "##犊": 17357,
+ "##犍": 17358,
+ "##犒": 17359,
+ "##犢": 17360,
+ "##犧": 17361,
+ "##犬": 17362,
+ "##犯": 17363,
+ "##状": 17364,
+ "##犷": 17365,
+ "##犸": 17366,
+ "##犹": 17367,
+ "##狀": 17368,
+ "##狂": 17369,
+ "##狄": 17370,
+ "##狈": 17371,
+ "##狎": 17372,
+ "##狐": 17373,
+ "##狒": 17374,
+ "##狗": 17375,
+ "##狙": 17376,
+ "##狞": 17377,
+ "##狠": 17378,
+ "##狡": 17379,
+ "##狩": 17380,
+ "##独": 17381,
+ "##狭": 17382,
+ "##狮": 17383,
+ "##狰": 17384,
+ "##狱": 17385,
+ "##狸": 17386,
+ "##狹": 17387,
+ "##狼": 17388,
+ "##狽": 17389,
+ "##猎": 17390,
+ "##猕": 17391,
+ "##猖": 17392,
+ "##猗": 17393,
+ "##猙": 17394,
+ "##猛": 17395,
+ "##猜": 17396,
+ "##猝": 17397,
+ "##猥": 17398,
+ "##猩": 17399,
+ "##猪": 17400,
+ "##猫": 17401,
+ "##猬": 17402,
+ "##献": 17403,
+ "##猴": 17404,
+ "##猶": 17405,
+ "##猷": 17406,
+ "##猾": 17407,
+ "##猿": 17408,
+ "##獄": 17409,
+ "##獅": 17410,
+ "##獎": 17411,
+ "##獐": 17412,
+ "##獒": 17413,
+ "##獗": 17414,
+ "##獠": 17415,
+ "##獣": 17416,
+ "##獨": 17417,
+ "##獭": 17418,
+ "##獰": 17419,
+ "##獲": 17420,
+ "##獵": 17421,
+ "##獷": 17422,
+ "##獸": 17423,
+ "##獺": 17424,
+ "##獻": 17425,
+ "##獼": 17426,
+ "##獾": 17427,
+ "##玄": 17428,
+ "##率": 17429,
+ "##玉": 17430,
+ "##王": 17431,
+ "##玑": 17432,
+ "##玖": 17433,
+ "##玛": 17434,
+ "##玟": 17435,
+ "##玠": 17436,
+ "##玥": 17437,
+ "##玩": 17438,
+ "##玫": 17439,
+ "##玮": 17440,
+ "##环": 17441,
+ "##现": 17442,
+ "##玲": 17443,
+ "##玳": 17444,
+ "##玷": 17445,
+ "##玺": 17446,
+ "##玻": 17447,
+ "##珀": 17448,
+ "##珂": 17449,
+ "##珅": 17450,
+ "##珈": 17451,
+ "##珉": 17452,
+ "##珊": 17453,
+ "##珍": 17454,
+ "##珏": 17455,
+ "##珐": 17456,
+ "##珑": 17457,
+ "##珙": 17458,
+ "##珞": 17459,
+ "##珠": 17460,
+ "##珣": 17461,
+ "##珥": 17462,
+ "##珩": 17463,
+ "##珪": 17464,
+ "##班": 17465,
+ "##珮": 17466,
+ "##珲": 17467,
+ "##珺": 17468,
+ "##現": 17469,
+ "##球": 17470,
+ "##琅": 17471,
+ "##理": 17472,
+ "##琇": 17473,
+ "##琉": 17474,
+ "##琊": 17475,
+ "##琍": 17476,
+ "##琏": 17477,
+ "##琐": 17478,
+ "##琛": 17479,
+ "##琢": 17480,
+ "##琥": 17481,
+ "##琦": 17482,
+ "##琨": 17483,
+ "##琪": 17484,
+ "##琬": 17485,
+ "##琮": 17486,
+ "##琰": 17487,
+ "##琲": 17488,
+ "##琳": 17489,
+ "##琴": 17490,
+ "##琵": 17491,
+ "##琶": 17492,
+ "##琺": 17493,
+ "##琼": 17494,
+ "##瑀": 17495,
+ "##瑁": 17496,
+ "##瑄": 17497,
+ "##瑋": 17498,
+ "##瑕": 17499,
+ "##瑗": 17500,
+ "##瑙": 17501,
+ "##瑚": 17502,
+ "##瑛": 17503,
+ "##瑜": 17504,
+ "##瑞": 17505,
+ "##瑟": 17506,
+ "##瑠": 17507,
+ "##瑣": 17508,
+ "##瑤": 17509,
+ "##瑩": 17510,
+ "##瑪": 17511,
+ "##瑯": 17512,
+ "##瑰": 17513,
+ "##瑶": 17514,
+ "##瑾": 17515,
+ "##璀": 17516,
+ "##璁": 17517,
+ "##璃": 17518,
+ "##璇": 17519,
+ "##璉": 17520,
+ "##璋": 17521,
+ "##璎": 17522,
+ "##璐": 17523,
+ "##璜": 17524,
+ "##璞": 17525,
+ "##璟": 17526,
+ "##璧": 17527,
+ "##璨": 17528,
+ "##環": 17529,
+ "##璽": 17530,
+ "##璿": 17531,
+ "##瓊": 17532,
+ "##瓏": 17533,
+ "##瓒": 17534,
+ "##瓜": 17535,
+ "##瓢": 17536,
+ "##瓣": 17537,
+ "##瓤": 17538,
+ "##瓦": 17539,
+ "##瓮": 17540,
+ "##瓯": 17541,
+ "##瓴": 17542,
+ "##瓶": 17543,
+ "##瓷": 17544,
+ "##甄": 17545,
+ "##甌": 17546,
+ "##甕": 17547,
+ "##甘": 17548,
+ "##甙": 17549,
+ "##甚": 17550,
+ "##甜": 17551,
+ "##生": 17552,
+ "##產": 17553,
+ "##産": 17554,
+ "##甥": 17555,
+ "##甦": 17556,
+ "##用": 17557,
+ "##甩": 17558,
+ "##甫": 17559,
+ "##甬": 17560,
+ "##甭": 17561,
+ "##甯": 17562,
+ "##田": 17563,
+ "##由": 17564,
+ "##甲": 17565,
+ "##申": 17566,
+ "##电": 17567,
+ "##男": 17568,
+ "##甸": 17569,
+ "##町": 17570,
+ "##画": 17571,
+ "##甾": 17572,
+ "##畀": 17573,
+ "##畅": 17574,
+ "##界": 17575,
+ "##畏": 17576,
+ "##畑": 17577,
+ "##畔": 17578,
+ "##留": 17579,
+ "##畜": 17580,
+ "##畝": 17581,
+ "##畢": 17582,
+ "##略": 17583,
+ "##畦": 17584,
+ "##番": 17585,
+ "##畫": 17586,
+ "##異": 17587,
+ "##畲": 17588,
+ "##畳": 17589,
+ "##畴": 17590,
+ "##當": 17591,
+ "##畸": 17592,
+ "##畹": 17593,
+ "##畿": 17594,
+ "##疆": 17595,
+ "##疇": 17596,
+ "##疊": 17597,
+ "##疏": 17598,
+ "##疑": 17599,
+ "##疔": 17600,
+ "##疖": 17601,
+ "##疗": 17602,
+ "##疙": 17603,
+ "##疚": 17604,
+ "##疝": 17605,
+ "##疟": 17606,
+ "##疡": 17607,
+ "##疣": 17608,
+ "##疤": 17609,
+ "##疥": 17610,
+ "##疫": 17611,
+ "##疮": 17612,
+ "##疯": 17613,
+ "##疱": 17614,
+ "##疲": 17615,
+ "##疳": 17616,
+ "##疵": 17617,
+ "##疸": 17618,
+ "##疹": 17619,
+ "##疼": 17620,
+ "##疽": 17621,
+ "##疾": 17622,
+ "##痂": 17623,
+ "##病": 17624,
+ "##症": 17625,
+ "##痈": 17626,
+ "##痉": 17627,
+ "##痊": 17628,
+ "##痍": 17629,
+ "##痒": 17630,
+ "##痔": 17631,
+ "##痕": 17632,
+ "##痘": 17633,
+ "##痙": 17634,
+ "##痛": 17635,
+ "##痞": 17636,
+ "##痠": 17637,
+ "##痢": 17638,
+ "##痣": 17639,
+ "##痤": 17640,
+ "##痧": 17641,
+ "##痨": 17642,
+ "##痪": 17643,
+ "##痫": 17644,
+ "##痰": 17645,
+ "##痱": 17646,
+ "##痴": 17647,
+ "##痹": 17648,
+ "##痺": 17649,
+ "##痼": 17650,
+ "##痿": 17651,
+ "##瘀": 17652,
+ "##瘁": 17653,
+ "##瘋": 17654,
+ "##瘍": 17655,
+ "##瘓": 17656,
+ "##瘘": 17657,
+ "##瘙": 17658,
+ "##瘟": 17659,
+ "##瘠": 17660,
+ "##瘡": 17661,
+ "##瘢": 17662,
+ "##瘤": 17663,
+ "##瘦": 17664,
+ "##瘧": 17665,
+ "##瘩": 17666,
+ "##瘪": 17667,
+ "##瘫": 17668,
+ "##瘴": 17669,
+ "##瘸": 17670,
+ "##瘾": 17671,
+ "##療": 17672,
+ "##癇": 17673,
+ "##癌": 17674,
+ "##癒": 17675,
+ "##癖": 17676,
+ "##癜": 17677,
+ "##癞": 17678,
+ "##癡": 17679,
+ "##癢": 17680,
+ "##癣": 17681,
+ "##癥": 17682,
+ "##癫": 17683,
+ "##癬": 17684,
+ "##癮": 17685,
+ "##癱": 17686,
+ "##癲": 17687,
+ "##癸": 17688,
+ "##発": 17689,
+ "##登": 17690,
+ "##發": 17691,
+ "##白": 17692,
+ "##百": 17693,
+ "##皂": 17694,
+ "##的": 17695,
+ "##皆": 17696,
+ "##皇": 17697,
+ "##皈": 17698,
+ "##皋": 17699,
+ "##皎": 17700,
+ "##皑": 17701,
+ "##皓": 17702,
+ "##皖": 17703,
+ "##皙": 17704,
+ "##皚": 17705,
+ "##皮": 17706,
+ "##皰": 17707,
+ "##皱": 17708,
+ "##皴": 17709,
+ "##皺": 17710,
+ "##皿": 17711,
+ "##盂": 17712,
+ "##盃": 17713,
+ "##盅": 17714,
+ "##盆": 17715,
+ "##盈": 17716,
+ "##益": 17717,
+ "##盎": 17718,
+ "##盏": 17719,
+ "##盐": 17720,
+ "##监": 17721,
+ "##盒": 17722,
+ "##盔": 17723,
+ "##盖": 17724,
+ "##盗": 17725,
+ "##盘": 17726,
+ "##盛": 17727,
+ "##盜": 17728,
+ "##盞": 17729,
+ "##盟": 17730,
+ "##盡": 17731,
+ "##監": 17732,
+ "##盤": 17733,
+ "##盥": 17734,
+ "##盧": 17735,
+ "##盪": 17736,
+ "##目": 17737,
+ "##盯": 17738,
+ "##盱": 17739,
+ "##盲": 17740,
+ "##直": 17741,
+ "##相": 17742,
+ "##盹": 17743,
+ "##盼": 17744,
+ "##盾": 17745,
+ "##省": 17746,
+ "##眈": 17747,
+ "##眉": 17748,
+ "##看": 17749,
+ "##県": 17750,
+ "##眙": 17751,
+ "##眞": 17752,
+ "##真": 17753,
+ "##眠": 17754,
+ "##眦": 17755,
+ "##眨": 17756,
+ "##眩": 17757,
+ "##眯": 17758,
+ "##眶": 17759,
+ "##眷": 17760,
+ "##眸": 17761,
+ "##眺": 17762,
+ "##眼": 17763,
+ "##眾": 17764,
+ "##着": 17765,
+ "##睁": 17766,
+ "##睇": 17767,
+ "##睏": 17768,
+ "##睐": 17769,
+ "##睑": 17770,
+ "##睛": 17771,
+ "##睜": 17772,
+ "##睞": 17773,
+ "##睡": 17774,
+ "##睢": 17775,
+ "##督": 17776,
+ "##睥": 17777,
+ "##睦": 17778,
+ "##睨": 17779,
+ "##睪": 17780,
+ "##睫": 17781,
+ "##睬": 17782,
+ "##睹": 17783,
+ "##睽": 17784,
+ "##睾": 17785,
+ "##睿": 17786,
+ "##瞄": 17787,
+ "##瞅": 17788,
+ "##瞇": 17789,
+ "##瞋": 17790,
+ "##瞌": 17791,
+ "##瞎": 17792,
+ "##瞑": 17793,
+ "##瞒": 17794,
+ "##瞓": 17795,
+ "##瞞": 17796,
+ "##瞟": 17797,
+ "##瞠": 17798,
+ "##瞥": 17799,
+ "##瞧": 17800,
+ "##瞩": 17801,
+ "##瞪": 17802,
+ "##瞬": 17803,
+ "##瞭": 17804,
+ "##瞰": 17805,
+ "##瞳": 17806,
+ "##瞻": 17807,
+ "##瞼": 17808,
+ "##瞿": 17809,
+ "##矇": 17810,
+ "##矍": 17811,
+ "##矗": 17812,
+ "##矚": 17813,
+ "##矛": 17814,
+ "##矜": 17815,
+ "##矢": 17816,
+ "##矣": 17817,
+ "##知": 17818,
+ "##矩": 17819,
+ "##矫": 17820,
+ "##短": 17821,
+ "##矮": 17822,
+ "##矯": 17823,
+ "##石": 17824,
+ "##矶": 17825,
+ "##矽": 17826,
+ "##矾": 17827,
+ "##矿": 17828,
+ "##码": 17829,
+ "##砂": 17830,
+ "##砌": 17831,
+ "##砍": 17832,
+ "##砒": 17833,
+ "##研": 17834,
+ "##砖": 17835,
+ "##砗": 17836,
+ "##砚": 17837,
+ "##砝": 17838,
+ "##砣": 17839,
+ "##砥": 17840,
+ "##砧": 17841,
+ "##砭": 17842,
+ "##砰": 17843,
+ "##砲": 17844,
+ "##破": 17845,
+ "##砷": 17846,
+ "##砸": 17847,
+ "##砺": 17848,
+ "##砼": 17849,
+ "##砾": 17850,
+ "##础": 17851,
+ "##硅": 17852,
+ "##硐": 17853,
+ "##硒": 17854,
+ "##硕": 17855,
+ "##硝": 17856,
+ "##硫": 17857,
+ "##硬": 17858,
+ "##确": 17859,
+ "##硯": 17860,
+ "##硼": 17861,
+ "##碁": 17862,
+ "##碇": 17863,
+ "##碉": 17864,
+ "##碌": 17865,
+ "##碍": 17866,
+ "##碎": 17867,
+ "##碑": 17868,
+ "##碓": 17869,
+ "##碗": 17870,
+ "##碘": 17871,
+ "##碚": 17872,
+ "##碛": 17873,
+ "##碟": 17874,
+ "##碣": 17875,
+ "##碧": 17876,
+ "##碩": 17877,
+ "##碰": 17878,
+ "##碱": 17879,
+ "##碳": 17880,
+ "##碴": 17881,
+ "##確": 17882,
+ "##碼": 17883,
+ "##碾": 17884,
+ "##磁": 17885,
+ "##磅": 17886,
+ "##磊": 17887,
+ "##磋": 17888,
+ "##磐": 17889,
+ "##磕": 17890,
+ "##磚": 17891,
+ "##磡": 17892,
+ "##磨": 17893,
+ "##磬": 17894,
+ "##磯": 17895,
+ "##磲": 17896,
+ "##磷": 17897,
+ "##磺": 17898,
+ "##礁": 17899,
+ "##礎": 17900,
+ "##礙": 17901,
+ "##礡": 17902,
+ "##礦": 17903,
+ "##礪": 17904,
+ "##礫": 17905,
+ "##礴": 17906,
+ "##示": 17907,
+ "##礼": 17908,
+ "##社": 17909,
+ "##祀": 17910,
+ "##祁": 17911,
+ "##祂": 17912,
+ "##祇": 17913,
+ "##祈": 17914,
+ "##祉": 17915,
+ "##祎": 17916,
+ "##祐": 17917,
+ "##祕": 17918,
+ "##祖": 17919,
+ "##祗": 17920,
+ "##祚": 17921,
+ "##祛": 17922,
+ "##祜": 17923,
+ "##祝": 17924,
+ "##神": 17925,
+ "##祟": 17926,
+ "##祠": 17927,
+ "##祢": 17928,
+ "##祥": 17929,
+ "##票": 17930,
+ "##祭": 17931,
+ "##祯": 17932,
+ "##祷": 17933,
+ "##祸": 17934,
+ "##祺": 17935,
+ "##祿": 17936,
+ "##禀": 17937,
+ "##禁": 17938,
+ "##禄": 17939,
+ "##禅": 17940,
+ "##禍": 17941,
+ "##禎": 17942,
+ "##福": 17943,
+ "##禛": 17944,
+ "##禦": 17945,
+ "##禧": 17946,
+ "##禪": 17947,
+ "##禮": 17948,
+ "##禱": 17949,
+ "##禹": 17950,
+ "##禺": 17951,
+ "##离": 17952,
+ "##禽": 17953,
+ "##禾": 17954,
+ "##禿": 17955,
+ "##秀": 17956,
+ "##私": 17957,
+ "##秃": 17958,
+ "##秆": 17959,
+ "##秉": 17960,
+ "##秋": 17961,
+ "##种": 17962,
+ "##科": 17963,
+ "##秒": 17964,
+ "##秘": 17965,
+ "##租": 17966,
+ "##秣": 17967,
+ "##秤": 17968,
+ "##秦": 17969,
+ "##秧": 17970,
+ "##秩": 17971,
+ "##秭": 17972,
+ "##积": 17973,
+ "##称": 17974,
+ "##秸": 17975,
+ "##移": 17976,
+ "##秽": 17977,
+ "##稀": 17978,
+ "##稅": 17979,
+ "##程": 17980,
+ "##稍": 17981,
+ "##税": 17982,
+ "##稔": 17983,
+ "##稗": 17984,
+ "##稚": 17985,
+ "##稜": 17986,
+ "##稞": 17987,
+ "##稟": 17988,
+ "##稠": 17989,
+ "##稣": 17990,
+ "##種": 17991,
+ "##稱": 17992,
+ "##稲": 17993,
+ "##稳": 17994,
+ "##稷": 17995,
+ "##稹": 17996,
+ "##稻": 17997,
+ "##稼": 17998,
+ "##稽": 17999,
+ "##稿": 18000,
+ "##穀": 18001,
+ "##穂": 18002,
+ "##穆": 18003,
+ "##穌": 18004,
+ "##積": 18005,
+ "##穎": 18006,
+ "##穗": 18007,
+ "##穢": 18008,
+ "##穩": 18009,
+ "##穫": 18010,
+ "##穴": 18011,
+ "##究": 18012,
+ "##穷": 18013,
+ "##穹": 18014,
+ "##空": 18015,
+ "##穿": 18016,
+ "##突": 18017,
+ "##窃": 18018,
+ "##窄": 18019,
+ "##窈": 18020,
+ "##窍": 18021,
+ "##窑": 18022,
+ "##窒": 18023,
+ "##窓": 18024,
+ "##窕": 18025,
+ "##窖": 18026,
+ "##窗": 18027,
+ "##窘": 18028,
+ "##窜": 18029,
+ "##窝": 18030,
+ "##窟": 18031,
+ "##窠": 18032,
+ "##窥": 18033,
+ "##窦": 18034,
+ "##窨": 18035,
+ "##窩": 18036,
+ "##窪": 18037,
+ "##窮": 18038,
+ "##窯": 18039,
+ "##窺": 18040,
+ "##窿": 18041,
+ "##竄": 18042,
+ "##竅": 18043,
+ "##竇": 18044,
+ "##竊": 18045,
+ "##立": 18046,
+ "##竖": 18047,
+ "##站": 18048,
+ "##竜": 18049,
+ "##竞": 18050,
+ "##竟": 18051,
+ "##章": 18052,
+ "##竣": 18053,
+ "##童": 18054,
+ "##竭": 18055,
+ "##端": 18056,
+ "##競": 18057,
+ "##竹": 18058,
+ "##竺": 18059,
+ "##竽": 18060,
+ "##竿": 18061,
+ "##笃": 18062,
+ "##笆": 18063,
+ "##笈": 18064,
+ "##笋": 18065,
+ "##笏": 18066,
+ "##笑": 18067,
+ "##笔": 18068,
+ "##笙": 18069,
+ "##笛": 18070,
+ "##笞": 18071,
+ "##笠": 18072,
+ "##符": 18073,
+ "##笨": 18074,
+ "##第": 18075,
+ "##笹": 18076,
+ "##笺": 18077,
+ "##笼": 18078,
+ "##筆": 18079,
+ "##等": 18080,
+ "##筊": 18081,
+ "##筋": 18082,
+ "##筍": 18083,
+ "##筏": 18084,
+ "##筐": 18085,
+ "##筑": 18086,
+ "##筒": 18087,
+ "##答": 18088,
+ "##策": 18089,
+ "##筛": 18090,
+ "##筝": 18091,
+ "##筠": 18092,
+ "##筱": 18093,
+ "##筲": 18094,
+ "##筵": 18095,
+ "##筷": 18096,
+ "##筹": 18097,
+ "##签": 18098,
+ "##简": 18099,
+ "##箇": 18100,
+ "##箋": 18101,
+ "##箍": 18102,
+ "##箏": 18103,
+ "##箐": 18104,
+ "##箔": 18105,
+ "##箕": 18106,
+ "##算": 18107,
+ "##箝": 18108,
+ "##管": 18109,
+ "##箩": 18110,
+ "##箫": 18111,
+ "##箭": 18112,
+ "##箱": 18113,
+ "##箴": 18114,
+ "##箸": 18115,
+ "##節": 18116,
+ "##篁": 18117,
+ "##範": 18118,
+ "##篆": 18119,
+ "##篇": 18120,
+ "##築": 18121,
+ "##篑": 18122,
+ "##篓": 18123,
+ "##篙": 18124,
+ "##篝": 18125,
+ "##篠": 18126,
+ "##篡": 18127,
+ "##篤": 18128,
+ "##篩": 18129,
+ "##篪": 18130,
+ "##篮": 18131,
+ "##篱": 18132,
+ "##篷": 18133,
+ "##簇": 18134,
+ "##簌": 18135,
+ "##簍": 18136,
+ "##簡": 18137,
+ "##簦": 18138,
+ "##簧": 18139,
+ "##簪": 18140,
+ "##簫": 18141,
+ "##簷": 18142,
+ "##簸": 18143,
+ "##簽": 18144,
+ "##簾": 18145,
+ "##簿": 18146,
+ "##籁": 18147,
+ "##籃": 18148,
+ "##籌": 18149,
+ "##籍": 18150,
+ "##籐": 18151,
+ "##籟": 18152,
+ "##籠": 18153,
+ "##籤": 18154,
+ "##籬": 18155,
+ "##籮": 18156,
+ "##籲": 18157,
+ "##米": 18158,
+ "##类": 18159,
+ "##籼": 18160,
+ "##籽": 18161,
+ "##粄": 18162,
+ "##粉": 18163,
+ "##粑": 18164,
+ "##粒": 18165,
+ "##粕": 18166,
+ "##粗": 18167,
+ "##粘": 18168,
+ "##粟": 18169,
+ "##粤": 18170,
+ "##粥": 18171,
+ "##粧": 18172,
+ "##粪": 18173,
+ "##粮": 18174,
+ "##粱": 18175,
+ "##粲": 18176,
+ "##粳": 18177,
+ "##粵": 18178,
+ "##粹": 18179,
+ "##粼": 18180,
+ "##粽": 18181,
+ "##精": 18182,
+ "##粿": 18183,
+ "##糅": 18184,
+ "##糊": 18185,
+ "##糍": 18186,
+ "##糕": 18187,
+ "##糖": 18188,
+ "##糗": 18189,
+ "##糙": 18190,
+ "##糜": 18191,
+ "##糞": 18192,
+ "##糟": 18193,
+ "##糠": 18194,
+ "##糧": 18195,
+ "##糬": 18196,
+ "##糯": 18197,
+ "##糰": 18198,
+ "##糸": 18199,
+ "##系": 18200,
+ "##糾": 18201,
+ "##紀": 18202,
+ "##紂": 18203,
+ "##約": 18204,
+ "##紅": 18205,
+ "##紉": 18206,
+ "##紊": 18207,
+ "##紋": 18208,
+ "##納": 18209,
+ "##紐": 18210,
+ "##紓": 18211,
+ "##純": 18212,
+ "##紗": 18213,
+ "##紘": 18214,
+ "##紙": 18215,
+ "##級": 18216,
+ "##紛": 18217,
+ "##紜": 18218,
+ "##素": 18219,
+ "##紡": 18220,
+ "##索": 18221,
+ "##紧": 18222,
+ "##紫": 18223,
+ "##紮": 18224,
+ "##累": 18225,
+ "##細": 18226,
+ "##紳": 18227,
+ "##紹": 18228,
+ "##紺": 18229,
+ "##終": 18230,
+ "##絃": 18231,
+ "##組": 18232,
+ "##絆": 18233,
+ "##経": 18234,
+ "##結": 18235,
+ "##絕": 18236,
+ "##絞": 18237,
+ "##絡": 18238,
+ "##絢": 18239,
+ "##給": 18240,
+ "##絨": 18241,
+ "##絮": 18242,
+ "##統": 18243,
+ "##絲": 18244,
+ "##絳": 18245,
+ "##絵": 18246,
+ "##絶": 18247,
+ "##絹": 18248,
+ "##綁": 18249,
+ "##綏": 18250,
+ "##綑": 18251,
+ "##經": 18252,
+ "##継": 18253,
+ "##続": 18254,
+ "##綜": 18255,
+ "##綠": 18256,
+ "##綢": 18257,
+ "##綦": 18258,
+ "##綫": 18259,
+ "##綬": 18260,
+ "##維": 18261,
+ "##綱": 18262,
+ "##網": 18263,
+ "##綴": 18264,
+ "##綵": 18265,
+ "##綸": 18266,
+ "##綺": 18267,
+ "##綻": 18268,
+ "##綽": 18269,
+ "##綾": 18270,
+ "##綿": 18271,
+ "##緊": 18272,
+ "##緋": 18273,
+ "##総": 18274,
+ "##緑": 18275,
+ "##緒": 18276,
+ "##緘": 18277,
+ "##線": 18278,
+ "##緝": 18279,
+ "##緞": 18280,
+ "##締": 18281,
+ "##緣": 18282,
+ "##編": 18283,
+ "##緩": 18284,
+ "##緬": 18285,
+ "##緯": 18286,
+ "##練": 18287,
+ "##緹": 18288,
+ "##緻": 18289,
+ "##縁": 18290,
+ "##縄": 18291,
+ "##縈": 18292,
+ "##縛": 18293,
+ "##縝": 18294,
+ "##縣": 18295,
+ "##縫": 18296,
+ "##縮": 18297,
+ "##縱": 18298,
+ "##縴": 18299,
+ "##縷": 18300,
+ "##總": 18301,
+ "##績": 18302,
+ "##繁": 18303,
+ "##繃": 18304,
+ "##繆": 18305,
+ "##繇": 18306,
+ "##繋": 18307,
+ "##織": 18308,
+ "##繕": 18309,
+ "##繚": 18310,
+ "##繞": 18311,
+ "##繡": 18312,
+ "##繩": 18313,
+ "##繪": 18314,
+ "##繫": 18315,
+ "##繭": 18316,
+ "##繳": 18317,
+ "##繹": 18318,
+ "##繼": 18319,
+ "##繽": 18320,
+ "##纂": 18321,
+ "##續": 18322,
+ "##纍": 18323,
+ "##纏": 18324,
+ "##纓": 18325,
+ "##纔": 18326,
+ "##纖": 18327,
+ "##纜": 18328,
+ "##纠": 18329,
+ "##红": 18330,
+ "##纣": 18331,
+ "##纤": 18332,
+ "##约": 18333,
+ "##级": 18334,
+ "##纨": 18335,
+ "##纪": 18336,
+ "##纫": 18337,
+ "##纬": 18338,
+ "##纭": 18339,
+ "##纯": 18340,
+ "##纰": 18341,
+ "##纱": 18342,
+ "##纲": 18343,
+ "##纳": 18344,
+ "##纵": 18345,
+ "##纶": 18346,
+ "##纷": 18347,
+ "##纸": 18348,
+ "##纹": 18349,
+ "##纺": 18350,
+ "##纽": 18351,
+ "##纾": 18352,
+ "##线": 18353,
+ "##绀": 18354,
+ "##练": 18355,
+ "##组": 18356,
+ "##绅": 18357,
+ "##细": 18358,
+ "##织": 18359,
+ "##终": 18360,
+ "##绊": 18361,
+ "##绍": 18362,
+ "##绎": 18363,
+ "##经": 18364,
+ "##绑": 18365,
+ "##绒": 18366,
+ "##结": 18367,
+ "##绔": 18368,
+ "##绕": 18369,
+ "##绘": 18370,
+ "##给": 18371,
+ "##绚": 18372,
+ "##绛": 18373,
+ "##络": 18374,
+ "##绝": 18375,
+ "##绞": 18376,
+ "##统": 18377,
+ "##绡": 18378,
+ "##绢": 18379,
+ "##绣": 18380,
+ "##绥": 18381,
+ "##绦": 18382,
+ "##继": 18383,
+ "##绩": 18384,
+ "##绪": 18385,
+ "##绫": 18386,
+ "##续": 18387,
+ "##绮": 18388,
+ "##绯": 18389,
+ "##绰": 18390,
+ "##绳": 18391,
+ "##维": 18392,
+ "##绵": 18393,
+ "##绶": 18394,
+ "##绷": 18395,
+ "##绸": 18396,
+ "##绻": 18397,
+ "##综": 18398,
+ "##绽": 18399,
+ "##绾": 18400,
+ "##绿": 18401,
+ "##缀": 18402,
+ "##缄": 18403,
+ "##缅": 18404,
+ "##缆": 18405,
+ "##缇": 18406,
+ "##缈": 18407,
+ "##缉": 18408,
+ "##缎": 18409,
+ "##缓": 18410,
+ "##缔": 18411,
+ "##缕": 18412,
+ "##编": 18413,
+ "##缘": 18414,
+ "##缙": 18415,
+ "##缚": 18416,
+ "##缜": 18417,
+ "##缝": 18418,
+ "##缠": 18419,
+ "##缢": 18420,
+ "##缤": 18421,
+ "##缥": 18422,
+ "##缨": 18423,
+ "##缩": 18424,
+ "##缪": 18425,
+ "##缭": 18426,
+ "##缮": 18427,
+ "##缰": 18428,
+ "##缱": 18429,
+ "##缴": 18430,
+ "##缸": 18431,
+ "##缺": 18432,
+ "##缽": 18433,
+ "##罂": 18434,
+ "##罄": 18435,
+ "##罌": 18436,
+ "##罐": 18437,
+ "##网": 18438,
+ "##罔": 18439,
+ "##罕": 18440,
+ "##罗": 18441,
+ "##罚": 18442,
+ "##罡": 18443,
+ "##罢": 18444,
+ "##罩": 18445,
+ "##罪": 18446,
+ "##置": 18447,
+ "##罰": 18448,
+ "##署": 18449,
+ "##罵": 18450,
+ "##罷": 18451,
+ "##罹": 18452,
+ "##羁": 18453,
+ "##羅": 18454,
+ "##羈": 18455,
+ "##羊": 18456,
+ "##羌": 18457,
+ "##美": 18458,
+ "##羔": 18459,
+ "##羚": 18460,
+ "##羞": 18461,
+ "##羟": 18462,
+ "##羡": 18463,
+ "##羣": 18464,
+ "##群": 18465,
+ "##羥": 18466,
+ "##羧": 18467,
+ "##羨": 18468,
+ "##義": 18469,
+ "##羯": 18470,
+ "##羲": 18471,
+ "##羸": 18472,
+ "##羹": 18473,
+ "##羽": 18474,
+ "##羿": 18475,
+ "##翁": 18476,
+ "##翅": 18477,
+ "##翊": 18478,
+ "##翌": 18479,
+ "##翎": 18480,
+ "##習": 18481,
+ "##翔": 18482,
+ "##翘": 18483,
+ "##翟": 18484,
+ "##翠": 18485,
+ "##翡": 18486,
+ "##翦": 18487,
+ "##翩": 18488,
+ "##翰": 18489,
+ "##翱": 18490,
+ "##翳": 18491,
+ "##翹": 18492,
+ "##翻": 18493,
+ "##翼": 18494,
+ "##耀": 18495,
+ "##老": 18496,
+ "##考": 18497,
+ "##耄": 18498,
+ "##者": 18499,
+ "##耆": 18500,
+ "##耋": 18501,
+ "##而": 18502,
+ "##耍": 18503,
+ "##耐": 18504,
+ "##耒": 18505,
+ "##耕": 18506,
+ "##耗": 18507,
+ "##耘": 18508,
+ "##耙": 18509,
+ "##耦": 18510,
+ "##耨": 18511,
+ "##耳": 18512,
+ "##耶": 18513,
+ "##耷": 18514,
+ "##耸": 18515,
+ "##耻": 18516,
+ "##耽": 18517,
+ "##耿": 18518,
+ "##聂": 18519,
+ "##聆": 18520,
+ "##聊": 18521,
+ "##聋": 18522,
+ "##职": 18523,
+ "##聒": 18524,
+ "##联": 18525,
+ "##聖": 18526,
+ "##聘": 18527,
+ "##聚": 18528,
+ "##聞": 18529,
+ "##聪": 18530,
+ "##聯": 18531,
+ "##聰": 18532,
+ "##聲": 18533,
+ "##聳": 18534,
+ "##聴": 18535,
+ "##聶": 18536,
+ "##職": 18537,
+ "##聽": 18538,
+ "##聾": 18539,
+ "##聿": 18540,
+ "##肃": 18541,
+ "##肄": 18542,
+ "##肅": 18543,
+ "##肆": 18544,
+ "##肇": 18545,
+ "##肉": 18546,
+ "##肋": 18547,
+ "##肌": 18548,
+ "##肏": 18549,
+ "##肓": 18550,
+ "##肖": 18551,
+ "##肘": 18552,
+ "##肚": 18553,
+ "##肛": 18554,
+ "##肝": 18555,
+ "##肠": 18556,
+ "##股": 18557,
+ "##肢": 18558,
+ "##肤": 18559,
+ "##肥": 18560,
+ "##肩": 18561,
+ "##肪": 18562,
+ "##肮": 18563,
+ "##肯": 18564,
+ "##肱": 18565,
+ "##育": 18566,
+ "##肴": 18567,
+ "##肺": 18568,
+ "##肽": 18569,
+ "##肾": 18570,
+ "##肿": 18571,
+ "##胀": 18572,
+ "##胁": 18573,
+ "##胃": 18574,
+ "##胄": 18575,
+ "##胆": 18576,
+ "##背": 18577,
+ "##胍": 18578,
+ "##胎": 18579,
+ "##胖": 18580,
+ "##胚": 18581,
+ "##胛": 18582,
+ "##胜": 18583,
+ "##胝": 18584,
+ "##胞": 18585,
+ "##胡": 18586,
+ "##胤": 18587,
+ "##胥": 18588,
+ "##胧": 18589,
+ "##胫": 18590,
+ "##胭": 18591,
+ "##胯": 18592,
+ "##胰": 18593,
+ "##胱": 18594,
+ "##胳": 18595,
+ "##胴": 18596,
+ "##胶": 18597,
+ "##胸": 18598,
+ "##胺": 18599,
+ "##能": 18600,
+ "##脂": 18601,
+ "##脅": 18602,
+ "##脆": 18603,
+ "##脇": 18604,
+ "##脈": 18605,
+ "##脉": 18606,
+ "##脊": 18607,
+ "##脍": 18608,
+ "##脏": 18609,
+ "##脐": 18610,
+ "##脑": 18611,
+ "##脓": 18612,
+ "##脖": 18613,
+ "##脘": 18614,
+ "##脚": 18615,
+ "##脛": 18616,
+ "##脣": 18617,
+ "##脩": 18618,
+ "##脫": 18619,
+ "##脯": 18620,
+ "##脱": 18621,
+ "##脲": 18622,
+ "##脳": 18623,
+ "##脸": 18624,
+ "##脹": 18625,
+ "##脾": 18626,
+ "##腆": 18627,
+ "##腈": 18628,
+ "##腊": 18629,
+ "##腋": 18630,
+ "##腌": 18631,
+ "##腎": 18632,
+ "##腐": 18633,
+ "##腑": 18634,
+ "##腓": 18635,
+ "##腔": 18636,
+ "##腕": 18637,
+ "##腥": 18638,
+ "##腦": 18639,
+ "##腩": 18640,
+ "##腫": 18641,
+ "##腭": 18642,
+ "##腮": 18643,
+ "##腰": 18644,
+ "##腱": 18645,
+ "##腳": 18646,
+ "##腴": 18647,
+ "##腸": 18648,
+ "##腹": 18649,
+ "##腺": 18650,
+ "##腻": 18651,
+ "##腼": 18652,
+ "##腾": 18653,
+ "##腿": 18654,
+ "##膀": 18655,
+ "##膈": 18656,
+ "##膊": 18657,
+ "##膏": 18658,
+ "##膑": 18659,
+ "##膘": 18660,
+ "##膚": 18661,
+ "##膛": 18662,
+ "##膜": 18663,
+ "##膝": 18664,
+ "##膠": 18665,
+ "##膦": 18666,
+ "##膨": 18667,
+ "##膩": 18668,
+ "##膳": 18669,
+ "##膺": 18670,
+ "##膻": 18671,
+ "##膽": 18672,
+ "##膾": 18673,
+ "##膿": 18674,
+ "##臀": 18675,
+ "##臂": 18676,
+ "##臃": 18677,
+ "##臆": 18678,
+ "##臉": 18679,
+ "##臊": 18680,
+ "##臍": 18681,
+ "##臓": 18682,
+ "##臘": 18683,
+ "##臟": 18684,
+ "##臣": 18685,
+ "##臥": 18686,
+ "##臧": 18687,
+ "##臨": 18688,
+ "##自": 18689,
+ "##臬": 18690,
+ "##臭": 18691,
+ "##至": 18692,
+ "##致": 18693,
+ "##臺": 18694,
+ "##臻": 18695,
+ "##臼": 18696,
+ "##臾": 18697,
+ "##舀": 18698,
+ "##舂": 18699,
+ "##舅": 18700,
+ "##舆": 18701,
+ "##與": 18702,
+ "##興": 18703,
+ "##舉": 18704,
+ "##舊": 18705,
+ "##舌": 18706,
+ "##舍": 18707,
+ "##舎": 18708,
+ "##舐": 18709,
+ "##舒": 18710,
+ "##舔": 18711,
+ "##舖": 18712,
+ "##舗": 18713,
+ "##舛": 18714,
+ "##舜": 18715,
+ "##舞": 18716,
+ "##舟": 18717,
+ "##航": 18718,
+ "##舫": 18719,
+ "##般": 18720,
+ "##舰": 18721,
+ "##舱": 18722,
+ "##舵": 18723,
+ "##舶": 18724,
+ "##舷": 18725,
+ "##舸": 18726,
+ "##船": 18727,
+ "##舺": 18728,
+ "##舾": 18729,
+ "##艇": 18730,
+ "##艋": 18731,
+ "##艘": 18732,
+ "##艙": 18733,
+ "##艦": 18734,
+ "##艮": 18735,
+ "##良": 18736,
+ "##艰": 18737,
+ "##艱": 18738,
+ "##色": 18739,
+ "##艳": 18740,
+ "##艷": 18741,
+ "##艹": 18742,
+ "##艺": 18743,
+ "##艾": 18744,
+ "##节": 18745,
+ "##芃": 18746,
+ "##芈": 18747,
+ "##芊": 18748,
+ "##芋": 18749,
+ "##芍": 18750,
+ "##芎": 18751,
+ "##芒": 18752,
+ "##芙": 18753,
+ "##芜": 18754,
+ "##芝": 18755,
+ "##芡": 18756,
+ "##芥": 18757,
+ "##芦": 18758,
+ "##芩": 18759,
+ "##芪": 18760,
+ "##芫": 18761,
+ "##芬": 18762,
+ "##芭": 18763,
+ "##芮": 18764,
+ "##芯": 18765,
+ "##花": 18766,
+ "##芳": 18767,
+ "##芷": 18768,
+ "##芸": 18769,
+ "##芹": 18770,
+ "##芻": 18771,
+ "##芽": 18772,
+ "##芾": 18773,
+ "##苁": 18774,
+ "##苄": 18775,
+ "##苇": 18776,
+ "##苋": 18777,
+ "##苍": 18778,
+ "##苏": 18779,
+ "##苑": 18780,
+ "##苒": 18781,
+ "##苓": 18782,
+ "##苔": 18783,
+ "##苕": 18784,
+ "##苗": 18785,
+ "##苛": 18786,
+ "##苜": 18787,
+ "##苞": 18788,
+ "##苟": 18789,
+ "##苡": 18790,
+ "##苣": 18791,
+ "##若": 18792,
+ "##苦": 18793,
+ "##苫": 18794,
+ "##苯": 18795,
+ "##英": 18796,
+ "##苷": 18797,
+ "##苹": 18798,
+ "##苻": 18799,
+ "##茁": 18800,
+ "##茂": 18801,
+ "##范": 18802,
+ "##茄": 18803,
+ "##茅": 18804,
+ "##茉": 18805,
+ "##茎": 18806,
+ "##茏": 18807,
+ "##茗": 18808,
+ "##茜": 18809,
+ "##茧": 18810,
+ "##茨": 18811,
+ "##茫": 18812,
+ "##茬": 18813,
+ "##茭": 18814,
+ "##茯": 18815,
+ "##茱": 18816,
+ "##茲": 18817,
+ "##茴": 18818,
+ "##茵": 18819,
+ "##茶": 18820,
+ "##茸": 18821,
+ "##茹": 18822,
+ "##茼": 18823,
+ "##荀": 18824,
+ "##荃": 18825,
+ "##荆": 18826,
+ "##草": 18827,
+ "##荊": 18828,
+ "##荏": 18829,
+ "##荐": 18830,
+ "##荒": 18831,
+ "##荔": 18832,
+ "##荖": 18833,
+ "##荘": 18834,
+ "##荚": 18835,
+ "##荞": 18836,
+ "##荟": 18837,
+ "##荠": 18838,
+ "##荡": 18839,
+ "##荣": 18840,
+ "##荤": 18841,
+ "##荥": 18842,
+ "##荧": 18843,
+ "##荨": 18844,
+ "##荪": 18845,
+ "##荫": 18846,
+ "##药": 18847,
+ "##荳": 18848,
+ "##荷": 18849,
+ "##荸": 18850,
+ "##荻": 18851,
+ "##荼": 18852,
+ "##荽": 18853,
+ "##莅": 18854,
+ "##莆": 18855,
+ "##莉": 18856,
+ "##莊": 18857,
+ "##莎": 18858,
+ "##莒": 18859,
+ "##莓": 18860,
+ "##莖": 18861,
+ "##莘": 18862,
+ "##莞": 18863,
+ "##莠": 18864,
+ "##莢": 18865,
+ "##莧": 18866,
+ "##莪": 18867,
+ "##莫": 18868,
+ "##莱": 18869,
+ "##莲": 18870,
+ "##莴": 18871,
+ "##获": 18872,
+ "##莹": 18873,
+ "##莺": 18874,
+ "##莽": 18875,
+ "##莿": 18876,
+ "##菀": 18877,
+ "##菁": 18878,
+ "##菅": 18879,
+ "##菇": 18880,
+ "##菈": 18881,
+ "##菊": 18882,
+ "##菌": 18883,
+ "##菏": 18884,
+ "##菓": 18885,
+ "##菖": 18886,
+ "##菘": 18887,
+ "##菜": 18888,
+ "##菟": 18889,
+ "##菠": 18890,
+ "##菡": 18891,
+ "##菩": 18892,
+ "##華": 18893,
+ "##菱": 18894,
+ "##菲": 18895,
+ "##菸": 18896,
+ "##菽": 18897,
+ "##萁": 18898,
+ "##萃": 18899,
+ "##萄": 18900,
+ "##萊": 18901,
+ "##萋": 18902,
+ "##萌": 18903,
+ "##萍": 18904,
+ "##萎": 18905,
+ "##萘": 18906,
+ "##萝": 18907,
+ "##萤": 18908,
+ "##营": 18909,
+ "##萦": 18910,
+ "##萧": 18911,
+ "##萨": 18912,
+ "##萩": 18913,
+ "##萬": 18914,
+ "##萱": 18915,
+ "##萵": 18916,
+ "##萸": 18917,
+ "##萼": 18918,
+ "##落": 18919,
+ "##葆": 18920,
+ "##葉": 18921,
+ "##著": 18922,
+ "##葚": 18923,
+ "##葛": 18924,
+ "##葡": 18925,
+ "##董": 18926,
+ "##葦": 18927,
+ "##葩": 18928,
+ "##葫": 18929,
+ "##葬": 18930,
+ "##葭": 18931,
+ "##葯": 18932,
+ "##葱": 18933,
+ "##葳": 18934,
+ "##葵": 18935,
+ "##葷": 18936,
+ "##葺": 18937,
+ "##蒂": 18938,
+ "##蒋": 18939,
+ "##蒐": 18940,
+ "##蒔": 18941,
+ "##蒙": 18942,
+ "##蒜": 18943,
+ "##蒞": 18944,
+ "##蒟": 18945,
+ "##蒡": 18946,
+ "##蒨": 18947,
+ "##蒲": 18948,
+ "##蒸": 18949,
+ "##蒹": 18950,
+ "##蒻": 18951,
+ "##蒼": 18952,
+ "##蒿": 18953,
+ "##蓁": 18954,
+ "##蓄": 18955,
+ "##蓆": 18956,
+ "##蓉": 18957,
+ "##蓋": 18958,
+ "##蓑": 18959,
+ "##蓓": 18960,
+ "##蓖": 18961,
+ "##蓝": 18962,
+ "##蓟": 18963,
+ "##蓦": 18964,
+ "##蓬": 18965,
+ "##蓮": 18966,
+ "##蓼": 18967,
+ "##蓿": 18968,
+ "##蔑": 18969,
+ "##蔓": 18970,
+ "##蔔": 18971,
+ "##蔗": 18972,
+ "##蔘": 18973,
+ "##蔚": 18974,
+ "##蔡": 18975,
+ "##蔣": 18976,
+ "##蔥": 18977,
+ "##蔫": 18978,
+ "##蔬": 18979,
+ "##蔭": 18980,
+ "##蔵": 18981,
+ "##蔷": 18982,
+ "##蔺": 18983,
+ "##蔻": 18984,
+ "##蔼": 18985,
+ "##蔽": 18986,
+ "##蕁": 18987,
+ "##蕃": 18988,
+ "##蕈": 18989,
+ "##蕉": 18990,
+ "##蕊": 18991,
+ "##蕎": 18992,
+ "##蕙": 18993,
+ "##蕤": 18994,
+ "##蕨": 18995,
+ "##蕩": 18996,
+ "##蕪": 18997,
+ "##蕭": 18998,
+ "##蕲": 18999,
+ "##蕴": 19000,
+ "##蕻": 19001,
+ "##蕾": 19002,
+ "##薄": 19003,
+ "##薅": 19004,
+ "##薇": 19005,
+ "##薈": 19006,
+ "##薊": 19007,
+ "##薏": 19008,
+ "##薑": 19009,
+ "##薔": 19010,
+ "##薙": 19011,
+ "##薛": 19012,
+ "##薦": 19013,
+ "##薨": 19014,
+ "##薩": 19015,
+ "##薪": 19016,
+ "##薬": 19017,
+ "##薯": 19018,
+ "##薰": 19019,
+ "##薹": 19020,
+ "##藉": 19021,
+ "##藍": 19022,
+ "##藏": 19023,
+ "##藐": 19024,
+ "##藓": 19025,
+ "##藕": 19026,
+ "##藜": 19027,
+ "##藝": 19028,
+ "##藤": 19029,
+ "##藥": 19030,
+ "##藩": 19031,
+ "##藹": 19032,
+ "##藻": 19033,
+ "##藿": 19034,
+ "##蘆": 19035,
+ "##蘇": 19036,
+ "##蘊": 19037,
+ "##蘋": 19038,
+ "##蘑": 19039,
+ "##蘚": 19040,
+ "##蘭": 19041,
+ "##蘸": 19042,
+ "##蘼": 19043,
+ "##蘿": 19044,
+ "##虎": 19045,
+ "##虏": 19046,
+ "##虐": 19047,
+ "##虑": 19048,
+ "##虔": 19049,
+ "##處": 19050,
+ "##虚": 19051,
+ "##虛": 19052,
+ "##虜": 19053,
+ "##虞": 19054,
+ "##號": 19055,
+ "##虢": 19056,
+ "##虧": 19057,
+ "##虫": 19058,
+ "##虬": 19059,
+ "##虱": 19060,
+ "##虹": 19061,
+ "##虻": 19062,
+ "##虽": 19063,
+ "##虾": 19064,
+ "##蚀": 19065,
+ "##蚁": 19066,
+ "##蚂": 19067,
+ "##蚊": 19068,
+ "##蚌": 19069,
+ "##蚓": 19070,
+ "##蚕": 19071,
+ "##蚜": 19072,
+ "##蚝": 19073,
+ "##蚣": 19074,
+ "##蚤": 19075,
+ "##蚩": 19076,
+ "##蚪": 19077,
+ "##蚯": 19078,
+ "##蚱": 19079,
+ "##蚵": 19080,
+ "##蛀": 19081,
+ "##蛆": 19082,
+ "##蛇": 19083,
+ "##蛊": 19084,
+ "##蛋": 19085,
+ "##蛎": 19086,
+ "##蛐": 19087,
+ "##蛔": 19088,
+ "##蛙": 19089,
+ "##蛛": 19090,
+ "##蛟": 19091,
+ "##蛤": 19092,
+ "##蛭": 19093,
+ "##蛮": 19094,
+ "##蛰": 19095,
+ "##蛳": 19096,
+ "##蛹": 19097,
+ "##蛻": 19098,
+ "##蛾": 19099,
+ "##蜀": 19100,
+ "##蜂": 19101,
+ "##蜃": 19102,
+ "##蜆": 19103,
+ "##蜇": 19104,
+ "##蜈": 19105,
+ "##蜊": 19106,
+ "##蜍": 19107,
+ "##蜒": 19108,
+ "##蜓": 19109,
+ "##蜕": 19110,
+ "##蜗": 19111,
+ "##蜘": 19112,
+ "##蜚": 19113,
+ "##蜜": 19114,
+ "##蜡": 19115,
+ "##蜢": 19116,
+ "##蜥": 19117,
+ "##蜱": 19118,
+ "##蜴": 19119,
+ "##蜷": 19120,
+ "##蜻": 19121,
+ "##蜿": 19122,
+ "##蝇": 19123,
+ "##蝈": 19124,
+ "##蝉": 19125,
+ "##蝌": 19126,
+ "##蝎": 19127,
+ "##蝕": 19128,
+ "##蝗": 19129,
+ "##蝙": 19130,
+ "##蝟": 19131,
+ "##蝠": 19132,
+ "##蝦": 19133,
+ "##蝨": 19134,
+ "##蝴": 19135,
+ "##蝶": 19136,
+ "##蝸": 19137,
+ "##蝼": 19138,
+ "##螂": 19139,
+ "##螃": 19140,
+ "##融": 19141,
+ "##螞": 19142,
+ "##螢": 19143,
+ "##螨": 19144,
+ "##螯": 19145,
+ "##螳": 19146,
+ "##螺": 19147,
+ "##蟀": 19148,
+ "##蟄": 19149,
+ "##蟆": 19150,
+ "##蟋": 19151,
+ "##蟎": 19152,
+ "##蟑": 19153,
+ "##蟒": 19154,
+ "##蟠": 19155,
+ "##蟬": 19156,
+ "##蟲": 19157,
+ "##蟹": 19158,
+ "##蟻": 19159,
+ "##蟾": 19160,
+ "##蠅": 19161,
+ "##蠍": 19162,
+ "##蠔": 19163,
+ "##蠕": 19164,
+ "##蠛": 19165,
+ "##蠟": 19166,
+ "##蠡": 19167,
+ "##蠢": 19168,
+ "##蠣": 19169,
+ "##蠱": 19170,
+ "##蠶": 19171,
+ "##蠹": 19172,
+ "##蠻": 19173,
+ "##血": 19174,
+ "##衄": 19175,
+ "##衅": 19176,
+ "##衆": 19177,
+ "##行": 19178,
+ "##衍": 19179,
+ "##術": 19180,
+ "##衔": 19181,
+ "##街": 19182,
+ "##衙": 19183,
+ "##衛": 19184,
+ "##衝": 19185,
+ "##衞": 19186,
+ "##衡": 19187,
+ "##衢": 19188,
+ "##衣": 19189,
+ "##补": 19190,
+ "##表": 19191,
+ "##衩": 19192,
+ "##衫": 19193,
+ "##衬": 19194,
+ "##衮": 19195,
+ "##衰": 19196,
+ "##衲": 19197,
+ "##衷": 19198,
+ "##衹": 19199,
+ "##衾": 19200,
+ "##衿": 19201,
+ "##袁": 19202,
+ "##袂": 19203,
+ "##袄": 19204,
+ "##袅": 19205,
+ "##袈": 19206,
+ "##袋": 19207,
+ "##袍": 19208,
+ "##袒": 19209,
+ "##袖": 19210,
+ "##袜": 19211,
+ "##袞": 19212,
+ "##袤": 19213,
+ "##袪": 19214,
+ "##被": 19215,
+ "##袭": 19216,
+ "##袱": 19217,
+ "##裁": 19218,
+ "##裂": 19219,
+ "##装": 19220,
+ "##裆": 19221,
+ "##裊": 19222,
+ "##裏": 19223,
+ "##裔": 19224,
+ "##裕": 19225,
+ "##裘": 19226,
+ "##裙": 19227,
+ "##補": 19228,
+ "##裝": 19229,
+ "##裟": 19230,
+ "##裡": 19231,
+ "##裤": 19232,
+ "##裨": 19233,
+ "##裱": 19234,
+ "##裳": 19235,
+ "##裴": 19236,
+ "##裸": 19237,
+ "##裹": 19238,
+ "##製": 19239,
+ "##裾": 19240,
+ "##褂": 19241,
+ "##複": 19242,
+ "##褐": 19243,
+ "##褒": 19244,
+ "##褓": 19245,
+ "##褔": 19246,
+ "##褚": 19247,
+ "##褥": 19248,
+ "##褪": 19249,
+ "##褫": 19250,
+ "##褲": 19251,
+ "##褶": 19252,
+ "##褻": 19253,
+ "##襁": 19254,
+ "##襄": 19255,
+ "##襟": 19256,
+ "##襠": 19257,
+ "##襪": 19258,
+ "##襬": 19259,
+ "##襯": 19260,
+ "##襲": 19261,
+ "##西": 19262,
+ "##要": 19263,
+ "##覃": 19264,
+ "##覆": 19265,
+ "##覇": 19266,
+ "##見": 19267,
+ "##規": 19268,
+ "##覓": 19269,
+ "##視": 19270,
+ "##覚": 19271,
+ "##覦": 19272,
+ "##覧": 19273,
+ "##親": 19274,
+ "##覬": 19275,
+ "##観": 19276,
+ "##覷": 19277,
+ "##覺": 19278,
+ "##覽": 19279,
+ "##觀": 19280,
+ "##见": 19281,
+ "##观": 19282,
+ "##规": 19283,
+ "##觅": 19284,
+ "##视": 19285,
+ "##览": 19286,
+ "##觉": 19287,
+ "##觊": 19288,
+ "##觎": 19289,
+ "##觐": 19290,
+ "##觑": 19291,
+ "##角": 19292,
+ "##觞": 19293,
+ "##解": 19294,
+ "##觥": 19295,
+ "##触": 19296,
+ "##觸": 19297,
+ "##言": 19298,
+ "##訂": 19299,
+ "##計": 19300,
+ "##訊": 19301,
+ "##討": 19302,
+ "##訓": 19303,
+ "##訕": 19304,
+ "##訖": 19305,
+ "##託": 19306,
+ "##記": 19307,
+ "##訛": 19308,
+ "##訝": 19309,
+ "##訟": 19310,
+ "##訣": 19311,
+ "##訥": 19312,
+ "##訪": 19313,
+ "##設": 19314,
+ "##許": 19315,
+ "##訳": 19316,
+ "##訴": 19317,
+ "##訶": 19318,
+ "##診": 19319,
+ "##註": 19320,
+ "##証": 19321,
+ "##詆": 19322,
+ "##詐": 19323,
+ "##詔": 19324,
+ "##評": 19325,
+ "##詛": 19326,
+ "##詞": 19327,
+ "##詠": 19328,
+ "##詡": 19329,
+ "##詢": 19330,
+ "##詣": 19331,
+ "##試": 19332,
+ "##詩": 19333,
+ "##詫": 19334,
+ "##詬": 19335,
+ "##詭": 19336,
+ "##詮": 19337,
+ "##詰": 19338,
+ "##話": 19339,
+ "##該": 19340,
+ "##詳": 19341,
+ "##詹": 19342,
+ "##詼": 19343,
+ "##誅": 19344,
+ "##誇": 19345,
+ "##誉": 19346,
+ "##誌": 19347,
+ "##認": 19348,
+ "##誓": 19349,
+ "##誕": 19350,
+ "##誘": 19351,
+ "##語": 19352,
+ "##誠": 19353,
+ "##誡": 19354,
+ "##誣": 19355,
+ "##誤": 19356,
+ "##誥": 19357,
+ "##誦": 19358,
+ "##誨": 19359,
+ "##說": 19360,
+ "##説": 19361,
+ "##読": 19362,
+ "##誰": 19363,
+ "##課": 19364,
+ "##誹": 19365,
+ "##誼": 19366,
+ "##調": 19367,
+ "##諄": 19368,
+ "##談": 19369,
+ "##請": 19370,
+ "##諏": 19371,
+ "##諒": 19372,
+ "##論": 19373,
+ "##諗": 19374,
+ "##諜": 19375,
+ "##諡": 19376,
+ "##諦": 19377,
+ "##諧": 19378,
+ "##諫": 19379,
+ "##諭": 19380,
+ "##諮": 19381,
+ "##諱": 19382,
+ "##諳": 19383,
+ "##諷": 19384,
+ "##諸": 19385,
+ "##諺": 19386,
+ "##諾": 19387,
+ "##謀": 19388,
+ "##謁": 19389,
+ "##謂": 19390,
+ "##謄": 19391,
+ "##謊": 19392,
+ "##謎": 19393,
+ "##謐": 19394,
+ "##謔": 19395,
+ "##謗": 19396,
+ "##謙": 19397,
+ "##講": 19398,
+ "##謝": 19399,
+ "##謠": 19400,
+ "##謨": 19401,
+ "##謬": 19402,
+ "##謹": 19403,
+ "##謾": 19404,
+ "##譁": 19405,
+ "##證": 19406,
+ "##譎": 19407,
+ "##譏": 19408,
+ "##識": 19409,
+ "##譙": 19410,
+ "##譚": 19411,
+ "##譜": 19412,
+ "##警": 19413,
+ "##譬": 19414,
+ "##譯": 19415,
+ "##議": 19416,
+ "##譲": 19417,
+ "##譴": 19418,
+ "##護": 19419,
+ "##譽": 19420,
+ "##讀": 19421,
+ "##變": 19422,
+ "##讓": 19423,
+ "##讚": 19424,
+ "##讞": 19425,
+ "##计": 19426,
+ "##订": 19427,
+ "##认": 19428,
+ "##讥": 19429,
+ "##讧": 19430,
+ "##讨": 19431,
+ "##让": 19432,
+ "##讪": 19433,
+ "##讫": 19434,
+ "##训": 19435,
+ "##议": 19436,
+ "##讯": 19437,
+ "##记": 19438,
+ "##讲": 19439,
+ "##讳": 19440,
+ "##讴": 19441,
+ "##讶": 19442,
+ "##讷": 19443,
+ "##许": 19444,
+ "##讹": 19445,
+ "##论": 19446,
+ "##讼": 19447,
+ "##讽": 19448,
+ "##设": 19449,
+ "##访": 19450,
+ "##诀": 19451,
+ "##证": 19452,
+ "##诃": 19453,
+ "##评": 19454,
+ "##诅": 19455,
+ "##识": 19456,
+ "##诈": 19457,
+ "##诉": 19458,
+ "##诊": 19459,
+ "##诋": 19460,
+ "##词": 19461,
+ "##诏": 19462,
+ "##译": 19463,
+ "##试": 19464,
+ "##诗": 19465,
+ "##诘": 19466,
+ "##诙": 19467,
+ "##诚": 19468,
+ "##诛": 19469,
+ "##话": 19470,
+ "##诞": 19471,
+ "##诟": 19472,
+ "##诠": 19473,
+ "##诡": 19474,
+ "##询": 19475,
+ "##诣": 19476,
+ "##诤": 19477,
+ "##该": 19478,
+ "##详": 19479,
+ "##诧": 19480,
+ "##诩": 19481,
+ "##诫": 19482,
+ "##诬": 19483,
+ "##语": 19484,
+ "##误": 19485,
+ "##诰": 19486,
+ "##诱": 19487,
+ "##诲": 19488,
+ "##说": 19489,
+ "##诵": 19490,
+ "##诶": 19491,
+ "##请": 19492,
+ "##诸": 19493,
+ "##诺": 19494,
+ "##读": 19495,
+ "##诽": 19496,
+ "##课": 19497,
+ "##诿": 19498,
+ "##谀": 19499,
+ "##谁": 19500,
+ "##调": 19501,
+ "##谄": 19502,
+ "##谅": 19503,
+ "##谆": 19504,
+ "##谈": 19505,
+ "##谊": 19506,
+ "##谋": 19507,
+ "##谌": 19508,
+ "##谍": 19509,
+ "##谎": 19510,
+ "##谏": 19511,
+ "##谐": 19512,
+ "##谑": 19513,
+ "##谒": 19514,
+ "##谓": 19515,
+ "##谔": 19516,
+ "##谕": 19517,
+ "##谗": 19518,
+ "##谘": 19519,
+ "##谙": 19520,
+ "##谚": 19521,
+ "##谛": 19522,
+ "##谜": 19523,
+ "##谟": 19524,
+ "##谢": 19525,
+ "##谣": 19526,
+ "##谤": 19527,
+ "##谥": 19528,
+ "##谦": 19529,
+ "##谧": 19530,
+ "##谨": 19531,
+ "##谩": 19532,
+ "##谪": 19533,
+ "##谬": 19534,
+ "##谭": 19535,
+ "##谯": 19536,
+ "##谱": 19537,
+ "##谲": 19538,
+ "##谴": 19539,
+ "##谶": 19540,
+ "##谷": 19541,
+ "##豁": 19542,
+ "##豆": 19543,
+ "##豇": 19544,
+ "##豈": 19545,
+ "##豉": 19546,
+ "##豊": 19547,
+ "##豌": 19548,
+ "##豎": 19549,
+ "##豐": 19550,
+ "##豔": 19551,
+ "##豚": 19552,
+ "##象": 19553,
+ "##豢": 19554,
+ "##豪": 19555,
+ "##豫": 19556,
+ "##豬": 19557,
+ "##豹": 19558,
+ "##豺": 19559,
+ "##貂": 19560,
+ "##貅": 19561,
+ "##貌": 19562,
+ "##貓": 19563,
+ "##貔": 19564,
+ "##貘": 19565,
+ "##貝": 19566,
+ "##貞": 19567,
+ "##負": 19568,
+ "##財": 19569,
+ "##貢": 19570,
+ "##貧": 19571,
+ "##貨": 19572,
+ "##販": 19573,
+ "##貪": 19574,
+ "##貫": 19575,
+ "##責": 19576,
+ "##貯": 19577,
+ "##貰": 19578,
+ "##貳": 19579,
+ "##貴": 19580,
+ "##貶": 19581,
+ "##買": 19582,
+ "##貸": 19583,
+ "##費": 19584,
+ "##貼": 19585,
+ "##貽": 19586,
+ "##貿": 19587,
+ "##賀": 19588,
+ "##賁": 19589,
+ "##賂": 19590,
+ "##賃": 19591,
+ "##賄": 19592,
+ "##資": 19593,
+ "##賈": 19594,
+ "##賊": 19595,
+ "##賑": 19596,
+ "##賓": 19597,
+ "##賜": 19598,
+ "##賞": 19599,
+ "##賠": 19600,
+ "##賡": 19601,
+ "##賢": 19602,
+ "##賣": 19603,
+ "##賤": 19604,
+ "##賦": 19605,
+ "##質": 19606,
+ "##賬": 19607,
+ "##賭": 19608,
+ "##賴": 19609,
+ "##賺": 19610,
+ "##購": 19611,
+ "##賽": 19612,
+ "##贅": 19613,
+ "##贈": 19614,
+ "##贊": 19615,
+ "##贍": 19616,
+ "##贏": 19617,
+ "##贓": 19618,
+ "##贖": 19619,
+ "##贛": 19620,
+ "##贝": 19621,
+ "##贞": 19622,
+ "##负": 19623,
+ "##贡": 19624,
+ "##财": 19625,
+ "##责": 19626,
+ "##贤": 19627,
+ "##败": 19628,
+ "##账": 19629,
+ "##货": 19630,
+ "##质": 19631,
+ "##贩": 19632,
+ "##贪": 19633,
+ "##贫": 19634,
+ "##贬": 19635,
+ "##购": 19636,
+ "##贮": 19637,
+ "##贯": 19638,
+ "##贰": 19639,
+ "##贱": 19640,
+ "##贲": 19641,
+ "##贴": 19642,
+ "##贵": 19643,
+ "##贷": 19644,
+ "##贸": 19645,
+ "##费": 19646,
+ "##贺": 19647,
+ "##贻": 19648,
+ "##贼": 19649,
+ "##贾": 19650,
+ "##贿": 19651,
+ "##赁": 19652,
+ "##赂": 19653,
+ "##赃": 19654,
+ "##资": 19655,
+ "##赅": 19656,
+ "##赈": 19657,
+ "##赊": 19658,
+ "##赋": 19659,
+ "##赌": 19660,
+ "##赎": 19661,
+ "##赏": 19662,
+ "##赐": 19663,
+ "##赓": 19664,
+ "##赔": 19665,
+ "##赖": 19666,
+ "##赘": 19667,
+ "##赚": 19668,
+ "##赛": 19669,
+ "##赝": 19670,
+ "##赞": 19671,
+ "##赠": 19672,
+ "##赡": 19673,
+ "##赢": 19674,
+ "##赣": 19675,
+ "##赤": 19676,
+ "##赦": 19677,
+ "##赧": 19678,
+ "##赫": 19679,
+ "##赭": 19680,
+ "##走": 19681,
+ "##赳": 19682,
+ "##赴": 19683,
+ "##赵": 19684,
+ "##赶": 19685,
+ "##起": 19686,
+ "##趁": 19687,
+ "##超": 19688,
+ "##越": 19689,
+ "##趋": 19690,
+ "##趕": 19691,
+ "##趙": 19692,
+ "##趟": 19693,
+ "##趣": 19694,
+ "##趨": 19695,
+ "##足": 19696,
+ "##趴": 19697,
+ "##趵": 19698,
+ "##趸": 19699,
+ "##趺": 19700,
+ "##趾": 19701,
+ "##跃": 19702,
+ "##跄": 19703,
+ "##跆": 19704,
+ "##跋": 19705,
+ "##跌": 19706,
+ "##跎": 19707,
+ "##跑": 19708,
+ "##跖": 19709,
+ "##跚": 19710,
+ "##跛": 19711,
+ "##距": 19712,
+ "##跟": 19713,
+ "##跡": 19714,
+ "##跤": 19715,
+ "##跨": 19716,
+ "##跩": 19717,
+ "##跪": 19718,
+ "##路": 19719,
+ "##跳": 19720,
+ "##践": 19721,
+ "##跷": 19722,
+ "##跹": 19723,
+ "##跺": 19724,
+ "##跻": 19725,
+ "##踉": 19726,
+ "##踊": 19727,
+ "##踌": 19728,
+ "##踏": 19729,
+ "##踐": 19730,
+ "##踝": 19731,
+ "##踞": 19732,
+ "##踟": 19733,
+ "##踢": 19734,
+ "##踩": 19735,
+ "##踪": 19736,
+ "##踮": 19737,
+ "##踱": 19738,
+ "##踴": 19739,
+ "##踵": 19740,
+ "##踹": 19741,
+ "##蹂": 19742,
+ "##蹄": 19743,
+ "##蹇": 19744,
+ "##蹈": 19745,
+ "##蹉": 19746,
+ "##蹊": 19747,
+ "##蹋": 19748,
+ "##蹑": 19749,
+ "##蹒": 19750,
+ "##蹙": 19751,
+ "##蹟": 19752,
+ "##蹣": 19753,
+ "##蹤": 19754,
+ "##蹦": 19755,
+ "##蹩": 19756,
+ "##蹬": 19757,
+ "##蹭": 19758,
+ "##蹲": 19759,
+ "##蹴": 19760,
+ "##蹶": 19761,
+ "##蹺": 19762,
+ "##蹼": 19763,
+ "##蹿": 19764,
+ "##躁": 19765,
+ "##躇": 19766,
+ "##躉": 19767,
+ "##躊": 19768,
+ "##躋": 19769,
+ "##躍": 19770,
+ "##躏": 19771,
+ "##躪": 19772,
+ "##身": 19773,
+ "##躬": 19774,
+ "##躯": 19775,
+ "##躲": 19776,
+ "##躺": 19777,
+ "##軀": 19778,
+ "##車": 19779,
+ "##軋": 19780,
+ "##軌": 19781,
+ "##軍": 19782,
+ "##軒": 19783,
+ "##軟": 19784,
+ "##転": 19785,
+ "##軸": 19786,
+ "##軼": 19787,
+ "##軽": 19788,
+ "##軾": 19789,
+ "##較": 19790,
+ "##載": 19791,
+ "##輒": 19792,
+ "##輓": 19793,
+ "##輔": 19794,
+ "##輕": 19795,
+ "##輛": 19796,
+ "##輝": 19797,
+ "##輟": 19798,
+ "##輩": 19799,
+ "##輪": 19800,
+ "##輯": 19801,
+ "##輸": 19802,
+ "##輻": 19803,
+ "##輾": 19804,
+ "##輿": 19805,
+ "##轄": 19806,
+ "##轅": 19807,
+ "##轆": 19808,
+ "##轉": 19809,
+ "##轍": 19810,
+ "##轎": 19811,
+ "##轟": 19812,
+ "##车": 19813,
+ "##轧": 19814,
+ "##轨": 19815,
+ "##轩": 19816,
+ "##转": 19817,
+ "##轭": 19818,
+ "##轮": 19819,
+ "##软": 19820,
+ "##轰": 19821,
+ "##轲": 19822,
+ "##轴": 19823,
+ "##轶": 19824,
+ "##轻": 19825,
+ "##轼": 19826,
+ "##载": 19827,
+ "##轿": 19828,
+ "##较": 19829,
+ "##辄": 19830,
+ "##辅": 19831,
+ "##辆": 19832,
+ "##辇": 19833,
+ "##辈": 19834,
+ "##辉": 19835,
+ "##辊": 19836,
+ "##辍": 19837,
+ "##辐": 19838,
+ "##辑": 19839,
+ "##输": 19840,
+ "##辕": 19841,
+ "##辖": 19842,
+ "##辗": 19843,
+ "##辘": 19844,
+ "##辙": 19845,
+ "##辛": 19846,
+ "##辜": 19847,
+ "##辞": 19848,
+ "##辟": 19849,
+ "##辣": 19850,
+ "##辦": 19851,
+ "##辨": 19852,
+ "##辩": 19853,
+ "##辫": 19854,
+ "##辭": 19855,
+ "##辮": 19856,
+ "##辯": 19857,
+ "##辰": 19858,
+ "##辱": 19859,
+ "##農": 19860,
+ "##边": 19861,
+ "##辺": 19862,
+ "##辻": 19863,
+ "##込": 19864,
+ "##辽": 19865,
+ "##达": 19866,
+ "##迁": 19867,
+ "##迂": 19868,
+ "##迄": 19869,
+ "##迅": 19870,
+ "##过": 19871,
+ "##迈": 19872,
+ "##迎": 19873,
+ "##运": 19874,
+ "##近": 19875,
+ "##返": 19876,
+ "##还": 19877,
+ "##这": 19878,
+ "##进": 19879,
+ "##远": 19880,
+ "##违": 19881,
+ "##连": 19882,
+ "##迟": 19883,
+ "##迢": 19884,
+ "##迤": 19885,
+ "##迥": 19886,
+ "##迦": 19887,
+ "##迩": 19888,
+ "##迪": 19889,
+ "##迫": 19890,
+ "##迭": 19891,
+ "##述": 19892,
+ "##迴": 19893,
+ "##迷": 19894,
+ "##迸": 19895,
+ "##迹": 19896,
+ "##迺": 19897,
+ "##追": 19898,
+ "##退": 19899,
+ "##送": 19900,
+ "##适": 19901,
+ "##逃": 19902,
+ "##逅": 19903,
+ "##逆": 19904,
+ "##选": 19905,
+ "##逊": 19906,
+ "##逍": 19907,
+ "##透": 19908,
+ "##逐": 19909,
+ "##递": 19910,
+ "##途": 19911,
+ "##逕": 19912,
+ "##逗": 19913,
+ "##這": 19914,
+ "##通": 19915,
+ "##逛": 19916,
+ "##逝": 19917,
+ "##逞": 19918,
+ "##速": 19919,
+ "##造": 19920,
+ "##逢": 19921,
+ "##連": 19922,
+ "##逮": 19923,
+ "##週": 19924,
+ "##進": 19925,
+ "##逵": 19926,
+ "##逶": 19927,
+ "##逸": 19928,
+ "##逻": 19929,
+ "##逼": 19930,
+ "##逾": 19931,
+ "##遁": 19932,
+ "##遂": 19933,
+ "##遅": 19934,
+ "##遇": 19935,
+ "##遊": 19936,
+ "##運": 19937,
+ "##遍": 19938,
+ "##過": 19939,
+ "##遏": 19940,
+ "##遐": 19941,
+ "##遑": 19942,
+ "##遒": 19943,
+ "##道": 19944,
+ "##達": 19945,
+ "##違": 19946,
+ "##遗": 19947,
+ "##遙": 19948,
+ "##遛": 19949,
+ "##遜": 19950,
+ "##遞": 19951,
+ "##遠": 19952,
+ "##遢": 19953,
+ "##遣": 19954,
+ "##遥": 19955,
+ "##遨": 19956,
+ "##適": 19957,
+ "##遭": 19958,
+ "##遮": 19959,
+ "##遲": 19960,
+ "##遴": 19961,
+ "##遵": 19962,
+ "##遶": 19963,
+ "##遷": 19964,
+ "##選": 19965,
+ "##遺": 19966,
+ "##遼": 19967,
+ "##遽": 19968,
+ "##避": 19969,
+ "##邀": 19970,
+ "##邁": 19971,
+ "##邂": 19972,
+ "##邃": 19973,
+ "##還": 19974,
+ "##邇": 19975,
+ "##邈": 19976,
+ "##邊": 19977,
+ "##邋": 19978,
+ "##邏": 19979,
+ "##邑": 19980,
+ "##邓": 19981,
+ "##邕": 19982,
+ "##邛": 19983,
+ "##邝": 19984,
+ "##邢": 19985,
+ "##那": 19986,
+ "##邦": 19987,
+ "##邨": 19988,
+ "##邪": 19989,
+ "##邬": 19990,
+ "##邮": 19991,
+ "##邯": 19992,
+ "##邰": 19993,
+ "##邱": 19994,
+ "##邳": 19995,
+ "##邵": 19996,
+ "##邸": 19997,
+ "##邹": 19998,
+ "##邺": 19999,
+ "##邻": 20000,
+ "##郁": 20001,
+ "##郅": 20002,
+ "##郊": 20003,
+ "##郎": 20004,
+ "##郑": 20005,
+ "##郜": 20006,
+ "##郝": 20007,
+ "##郡": 20008,
+ "##郢": 20009,
+ "##郤": 20010,
+ "##郦": 20011,
+ "##郧": 20012,
+ "##部": 20013,
+ "##郫": 20014,
+ "##郭": 20015,
+ "##郴": 20016,
+ "##郵": 20017,
+ "##郷": 20018,
+ "##郸": 20019,
+ "##都": 20020,
+ "##鄂": 20021,
+ "##鄉": 20022,
+ "##鄒": 20023,
+ "##鄔": 20024,
+ "##鄙": 20025,
+ "##鄞": 20026,
+ "##鄢": 20027,
+ "##鄧": 20028,
+ "##鄭": 20029,
+ "##鄰": 20030,
+ "##鄱": 20031,
+ "##鄲": 20032,
+ "##鄺": 20033,
+ "##酉": 20034,
+ "##酊": 20035,
+ "##酋": 20036,
+ "##酌": 20037,
+ "##配": 20038,
+ "##酐": 20039,
+ "##酒": 20040,
+ "##酗": 20041,
+ "##酚": 20042,
+ "##酝": 20043,
+ "##酢": 20044,
+ "##酣": 20045,
+ "##酥": 20046,
+ "##酩": 20047,
+ "##酪": 20048,
+ "##酬": 20049,
+ "##酮": 20050,
+ "##酯": 20051,
+ "##酰": 20052,
+ "##酱": 20053,
+ "##酵": 20054,
+ "##酶": 20055,
+ "##酷": 20056,
+ "##酸": 20057,
+ "##酿": 20058,
+ "##醃": 20059,
+ "##醇": 20060,
+ "##醉": 20061,
+ "##醋": 20062,
+ "##醍": 20063,
+ "##醐": 20064,
+ "##醒": 20065,
+ "##醚": 20066,
+ "##醛": 20067,
+ "##醜": 20068,
+ "##醞": 20069,
+ "##醣": 20070,
+ "##醪": 20071,
+ "##醫": 20072,
+ "##醬": 20073,
+ "##醮": 20074,
+ "##醯": 20075,
+ "##醴": 20076,
+ "##醺": 20077,
+ "##釀": 20078,
+ "##釁": 20079,
+ "##采": 20080,
+ "##釉": 20081,
+ "##释": 20082,
+ "##釋": 20083,
+ "##里": 20084,
+ "##重": 20085,
+ "##野": 20086,
+ "##量": 20087,
+ "##釐": 20088,
+ "##金": 20089,
+ "##釗": 20090,
+ "##釘": 20091,
+ "##釜": 20092,
+ "##針": 20093,
+ "##釣": 20094,
+ "##釦": 20095,
+ "##釧": 20096,
+ "##釵": 20097,
+ "##鈀": 20098,
+ "##鈉": 20099,
+ "##鈍": 20100,
+ "##鈎": 20101,
+ "##鈔": 20102,
+ "##鈕": 20103,
+ "##鈞": 20104,
+ "##鈣": 20105,
+ "##鈦": 20106,
+ "##鈪": 20107,
+ "##鈴": 20108,
+ "##鈺": 20109,
+ "##鈾": 20110,
+ "##鉀": 20111,
+ "##鉄": 20112,
+ "##鉅": 20113,
+ "##鉉": 20114,
+ "##鉑": 20115,
+ "##鉗": 20116,
+ "##鉚": 20117,
+ "##鉛": 20118,
+ "##鉤": 20119,
+ "##鉴": 20120,
+ "##鉻": 20121,
+ "##銀": 20122,
+ "##銃": 20123,
+ "##銅": 20124,
+ "##銑": 20125,
+ "##銓": 20126,
+ "##銖": 20127,
+ "##銘": 20128,
+ "##銜": 20129,
+ "##銬": 20130,
+ "##銭": 20131,
+ "##銮": 20132,
+ "##銳": 20133,
+ "##銷": 20134,
+ "##銹": 20135,
+ "##鋁": 20136,
+ "##鋅": 20137,
+ "##鋒": 20138,
+ "##鋤": 20139,
+ "##鋪": 20140,
+ "##鋰": 20141,
+ "##鋸": 20142,
+ "##鋼": 20143,
+ "##錄": 20144,
+ "##錐": 20145,
+ "##錘": 20146,
+ "##錚": 20147,
+ "##錠": 20148,
+ "##錢": 20149,
+ "##錦": 20150,
+ "##錨": 20151,
+ "##錫": 20152,
+ "##錮": 20153,
+ "##錯": 20154,
+ "##録": 20155,
+ "##錳": 20156,
+ "##錶": 20157,
+ "##鍊": 20158,
+ "##鍋": 20159,
+ "##鍍": 20160,
+ "##鍛": 20161,
+ "##鍥": 20162,
+ "##鍰": 20163,
+ "##鍵": 20164,
+ "##鍺": 20165,
+ "##鍾": 20166,
+ "##鎂": 20167,
+ "##鎊": 20168,
+ "##鎌": 20169,
+ "##鎏": 20170,
+ "##鎔": 20171,
+ "##鎖": 20172,
+ "##鎗": 20173,
+ "##鎚": 20174,
+ "##鎧": 20175,
+ "##鎬": 20176,
+ "##鎮": 20177,
+ "##鎳": 20178,
+ "##鏈": 20179,
+ "##鏖": 20180,
+ "##鏗": 20181,
+ "##鏘": 20182,
+ "##鏞": 20183,
+ "##鏟": 20184,
+ "##鏡": 20185,
+ "##鏢": 20186,
+ "##鏤": 20187,
+ "##鏽": 20188,
+ "##鐘": 20189,
+ "##鐮": 20190,
+ "##鐲": 20191,
+ "##鐳": 20192,
+ "##鐵": 20193,
+ "##鐸": 20194,
+ "##鐺": 20195,
+ "##鑄": 20196,
+ "##鑊": 20197,
+ "##鑑": 20198,
+ "##鑒": 20199,
+ "##鑣": 20200,
+ "##鑫": 20201,
+ "##鑰": 20202,
+ "##鑲": 20203,
+ "##鑼": 20204,
+ "##鑽": 20205,
+ "##鑾": 20206,
+ "##鑿": 20207,
+ "##针": 20208,
+ "##钉": 20209,
+ "##钊": 20210,
+ "##钎": 20211,
+ "##钏": 20212,
+ "##钒": 20213,
+ "##钓": 20214,
+ "##钗": 20215,
+ "##钙": 20216,
+ "##钛": 20217,
+ "##钜": 20218,
+ "##钝": 20219,
+ "##钞": 20220,
+ "##钟": 20221,
+ "##钠": 20222,
+ "##钡": 20223,
+ "##钢": 20224,
+ "##钣": 20225,
+ "##钤": 20226,
+ "##钥": 20227,
+ "##钦": 20228,
+ "##钧": 20229,
+ "##钨": 20230,
+ "##钩": 20231,
+ "##钮": 20232,
+ "##钯": 20233,
+ "##钰": 20234,
+ "##钱": 20235,
+ "##钳": 20236,
+ "##钴": 20237,
+ "##钵": 20238,
+ "##钺": 20239,
+ "##钻": 20240,
+ "##钼": 20241,
+ "##钾": 20242,
+ "##钿": 20243,
+ "##铀": 20244,
+ "##铁": 20245,
+ "##铂": 20246,
+ "##铃": 20247,
+ "##铄": 20248,
+ "##铅": 20249,
+ "##铆": 20250,
+ "##铉": 20251,
+ "##铎": 20252,
+ "##铐": 20253,
+ "##铛": 20254,
+ "##铜": 20255,
+ "##铝": 20256,
+ "##铠": 20257,
+ "##铡": 20258,
+ "##铢": 20259,
+ "##铣": 20260,
+ "##铤": 20261,
+ "##铨": 20262,
+ "##铩": 20263,
+ "##铬": 20264,
+ "##铭": 20265,
+ "##铮": 20266,
+ "##铰": 20267,
+ "##铲": 20268,
+ "##铵": 20269,
+ "##银": 20270,
+ "##铸": 20271,
+ "##铺": 20272,
+ "##链": 20273,
+ "##铿": 20274,
+ "##销": 20275,
+ "##锁": 20276,
+ "##锂": 20277,
+ "##锄": 20278,
+ "##锅": 20279,
+ "##锆": 20280,
+ "##锈": 20281,
+ "##锉": 20282,
+ "##锋": 20283,
+ "##锌": 20284,
+ "##锏": 20285,
+ "##锐": 20286,
+ "##锑": 20287,
+ "##错": 20288,
+ "##锚": 20289,
+ "##锟": 20290,
+ "##锡": 20291,
+ "##锢": 20292,
+ "##锣": 20293,
+ "##锤": 20294,
+ "##锥": 20295,
+ "##锦": 20296,
+ "##锭": 20297,
+ "##键": 20298,
+ "##锯": 20299,
+ "##锰": 20300,
+ "##锲": 20301,
+ "##锵": 20302,
+ "##锹": 20303,
+ "##锺": 20304,
+ "##锻": 20305,
+ "##镀": 20306,
+ "##镁": 20307,
+ "##镂": 20308,
+ "##镇": 20309,
+ "##镉": 20310,
+ "##镌": 20311,
+ "##镍": 20312,
+ "##镐": 20313,
+ "##镑": 20314,
+ "##镕": 20315,
+ "##镖": 20316,
+ "##镗": 20317,
+ "##镛": 20318,
+ "##镜": 20319,
+ "##镣": 20320,
+ "##镭": 20321,
+ "##镯": 20322,
+ "##镰": 20323,
+ "##镳": 20324,
+ "##镶": 20325,
+ "##長": 20326,
+ "##长": 20327,
+ "##門": 20328,
+ "##閃": 20329,
+ "##閉": 20330,
+ "##開": 20331,
+ "##閎": 20332,
+ "##閏": 20333,
+ "##閑": 20334,
+ "##閒": 20335,
+ "##間": 20336,
+ "##閔": 20337,
+ "##閘": 20338,
+ "##閡": 20339,
+ "##関": 20340,
+ "##閣": 20341,
+ "##閥": 20342,
+ "##閨": 20343,
+ "##閩": 20344,
+ "##閱": 20345,
+ "##閲": 20346,
+ "##閹": 20347,
+ "##閻": 20348,
+ "##閾": 20349,
+ "##闆": 20350,
+ "##闇": 20351,
+ "##闊": 20352,
+ "##闌": 20353,
+ "##闍": 20354,
+ "##闔": 20355,
+ "##闕": 20356,
+ "##闖": 20357,
+ "##闘": 20358,
+ "##關": 20359,
+ "##闡": 20360,
+ "##闢": 20361,
+ "##门": 20362,
+ "##闪": 20363,
+ "##闫": 20364,
+ "##闭": 20365,
+ "##问": 20366,
+ "##闯": 20367,
+ "##闰": 20368,
+ "##闲": 20369,
+ "##间": 20370,
+ "##闵": 20371,
+ "##闷": 20372,
+ "##闸": 20373,
+ "##闹": 20374,
+ "##闺": 20375,
+ "##闻": 20376,
+ "##闽": 20377,
+ "##闾": 20378,
+ "##阀": 20379,
+ "##阁": 20380,
+ "##阂": 20381,
+ "##阅": 20382,
+ "##阆": 20383,
+ "##阇": 20384,
+ "##阈": 20385,
+ "##阉": 20386,
+ "##阎": 20387,
+ "##阐": 20388,
+ "##阑": 20389,
+ "##阔": 20390,
+ "##阕": 20391,
+ "##阖": 20392,
+ "##阙": 20393,
+ "##阚": 20394,
+ "##阜": 20395,
+ "##队": 20396,
+ "##阡": 20397,
+ "##阪": 20398,
+ "##阮": 20399,
+ "##阱": 20400,
+ "##防": 20401,
+ "##阳": 20402,
+ "##阴": 20403,
+ "##阵": 20404,
+ "##阶": 20405,
+ "##阻": 20406,
+ "##阿": 20407,
+ "##陀": 20408,
+ "##陂": 20409,
+ "##附": 20410,
+ "##际": 20411,
+ "##陆": 20412,
+ "##陇": 20413,
+ "##陈": 20414,
+ "##陋": 20415,
+ "##陌": 20416,
+ "##降": 20417,
+ "##限": 20418,
+ "##陕": 20419,
+ "##陛": 20420,
+ "##陝": 20421,
+ "##陞": 20422,
+ "##陟": 20423,
+ "##陡": 20424,
+ "##院": 20425,
+ "##陣": 20426,
+ "##除": 20427,
+ "##陨": 20428,
+ "##险": 20429,
+ "##陪": 20430,
+ "##陰": 20431,
+ "##陲": 20432,
+ "##陳": 20433,
+ "##陵": 20434,
+ "##陶": 20435,
+ "##陷": 20436,
+ "##陸": 20437,
+ "##険": 20438,
+ "##陽": 20439,
+ "##隅": 20440,
+ "##隆": 20441,
+ "##隈": 20442,
+ "##隊": 20443,
+ "##隋": 20444,
+ "##隍": 20445,
+ "##階": 20446,
+ "##随": 20447,
+ "##隐": 20448,
+ "##隔": 20449,
+ "##隕": 20450,
+ "##隘": 20451,
+ "##隙": 20452,
+ "##際": 20453,
+ "##障": 20454,
+ "##隠": 20455,
+ "##隣": 20456,
+ "##隧": 20457,
+ "##隨": 20458,
+ "##險": 20459,
+ "##隱": 20460,
+ "##隴": 20461,
+ "##隶": 20462,
+ "##隸": 20463,
+ "##隻": 20464,
+ "##隼": 20465,
+ "##隽": 20466,
+ "##难": 20467,
+ "##雀": 20468,
+ "##雁": 20469,
+ "##雄": 20470,
+ "##雅": 20471,
+ "##集": 20472,
+ "##雇": 20473,
+ "##雉": 20474,
+ "##雋": 20475,
+ "##雌": 20476,
+ "##雍": 20477,
+ "##雎": 20478,
+ "##雏": 20479,
+ "##雑": 20480,
+ "##雒": 20481,
+ "##雕": 20482,
+ "##雖": 20483,
+ "##雙": 20484,
+ "##雛": 20485,
+ "##雜": 20486,
+ "##雞": 20487,
+ "##離": 20488,
+ "##難": 20489,
+ "##雨": 20490,
+ "##雪": 20491,
+ "##雯": 20492,
+ "##雰": 20493,
+ "##雲": 20494,
+ "##雳": 20495,
+ "##零": 20496,
+ "##雷": 20497,
+ "##雹": 20498,
+ "##電": 20499,
+ "##雾": 20500,
+ "##需": 20501,
+ "##霁": 20502,
+ "##霄": 20503,
+ "##霆": 20504,
+ "##震": 20505,
+ "##霈": 20506,
+ "##霉": 20507,
+ "##霊": 20508,
+ "##霍": 20509,
+ "##霎": 20510,
+ "##霏": 20511,
+ "##霑": 20512,
+ "##霓": 20513,
+ "##霖": 20514,
+ "##霜": 20515,
+ "##霞": 20516,
+ "##霧": 20517,
+ "##霭": 20518,
+ "##霰": 20519,
+ "##露": 20520,
+ "##霸": 20521,
+ "##霹": 20522,
+ "##霽": 20523,
+ "##霾": 20524,
+ "##靂": 20525,
+ "##靄": 20526,
+ "##靈": 20527,
+ "##青": 20528,
+ "##靓": 20529,
+ "##靖": 20530,
+ "##静": 20531,
+ "##靚": 20532,
+ "##靛": 20533,
+ "##靜": 20534,
+ "##非": 20535,
+ "##靠": 20536,
+ "##靡": 20537,
+ "##面": 20538,
+ "##靥": 20539,
+ "##靦": 20540,
+ "##革": 20541,
+ "##靳": 20542,
+ "##靴": 20543,
+ "##靶": 20544,
+ "##靼": 20545,
+ "##鞅": 20546,
+ "##鞋": 20547,
+ "##鞍": 20548,
+ "##鞏": 20549,
+ "##鞑": 20550,
+ "##鞘": 20551,
+ "##鞠": 20552,
+ "##鞣": 20553,
+ "##鞦": 20554,
+ "##鞭": 20555,
+ "##韆": 20556,
+ "##韋": 20557,
+ "##韌": 20558,
+ "##韓": 20559,
+ "##韜": 20560,
+ "##韦": 20561,
+ "##韧": 20562,
+ "##韩": 20563,
+ "##韬": 20564,
+ "##韭": 20565,
+ "##音": 20566,
+ "##韵": 20567,
+ "##韶": 20568,
+ "##韻": 20569,
+ "##響": 20570,
+ "##頁": 20571,
+ "##頂": 20572,
+ "##頃": 20573,
+ "##項": 20574,
+ "##順": 20575,
+ "##須": 20576,
+ "##頌": 20577,
+ "##預": 20578,
+ "##頑": 20579,
+ "##頒": 20580,
+ "##頓": 20581,
+ "##頗": 20582,
+ "##領": 20583,
+ "##頜": 20584,
+ "##頡": 20585,
+ "##頤": 20586,
+ "##頫": 20587,
+ "##頭": 20588,
+ "##頰": 20589,
+ "##頷": 20590,
+ "##頸": 20591,
+ "##頹": 20592,
+ "##頻": 20593,
+ "##頼": 20594,
+ "##顆": 20595,
+ "##題": 20596,
+ "##額": 20597,
+ "##顎": 20598,
+ "##顏": 20599,
+ "##顔": 20600,
+ "##願": 20601,
+ "##顛": 20602,
+ "##類": 20603,
+ "##顧": 20604,
+ "##顫": 20605,
+ "##顯": 20606,
+ "##顱": 20607,
+ "##顴": 20608,
+ "##页": 20609,
+ "##顶": 20610,
+ "##顷": 20611,
+ "##项": 20612,
+ "##顺": 20613,
+ "##须": 20614,
+ "##顼": 20615,
+ "##顽": 20616,
+ "##顾": 20617,
+ "##顿": 20618,
+ "##颁": 20619,
+ "##颂": 20620,
+ "##预": 20621,
+ "##颅": 20622,
+ "##领": 20623,
+ "##颇": 20624,
+ "##颈": 20625,
+ "##颉": 20626,
+ "##颊": 20627,
+ "##颌": 20628,
+ "##颍": 20629,
+ "##颐": 20630,
+ "##频": 20631,
+ "##颓": 20632,
+ "##颔": 20633,
+ "##颖": 20634,
+ "##颗": 20635,
+ "##题": 20636,
+ "##颚": 20637,
+ "##颛": 20638,
+ "##颜": 20639,
+ "##额": 20640,
+ "##颞": 20641,
+ "##颠": 20642,
+ "##颡": 20643,
+ "##颢": 20644,
+ "##颤": 20645,
+ "##颦": 20646,
+ "##颧": 20647,
+ "##風": 20648,
+ "##颯": 20649,
+ "##颱": 20650,
+ "##颳": 20651,
+ "##颶": 20652,
+ "##颼": 20653,
+ "##飄": 20654,
+ "##飆": 20655,
+ "##风": 20656,
+ "##飒": 20657,
+ "##飓": 20658,
+ "##飕": 20659,
+ "##飘": 20660,
+ "##飙": 20661,
+ "##飚": 20662,
+ "##飛": 20663,
+ "##飞": 20664,
+ "##食": 20665,
+ "##飢": 20666,
+ "##飨": 20667,
+ "##飩": 20668,
+ "##飪": 20669,
+ "##飯": 20670,
+ "##飲": 20671,
+ "##飼": 20672,
+ "##飽": 20673,
+ "##飾": 20674,
+ "##餃": 20675,
+ "##餅": 20676,
+ "##餉": 20677,
+ "##養": 20678,
+ "##餌": 20679,
+ "##餐": 20680,
+ "##餒": 20681,
+ "##餓": 20682,
+ "##餘": 20683,
+ "##餚": 20684,
+ "##餛": 20685,
+ "##餞": 20686,
+ "##餡": 20687,
+ "##館": 20688,
+ "##餮": 20689,
+ "##餵": 20690,
+ "##餾": 20691,
+ "##饅": 20692,
+ "##饈": 20693,
+ "##饋": 20694,
+ "##饌": 20695,
+ "##饍": 20696,
+ "##饑": 20697,
+ "##饒": 20698,
+ "##饕": 20699,
+ "##饗": 20700,
+ "##饞": 20701,
+ "##饥": 20702,
+ "##饨": 20703,
+ "##饪": 20704,
+ "##饬": 20705,
+ "##饭": 20706,
+ "##饮": 20707,
+ "##饯": 20708,
+ "##饰": 20709,
+ "##饱": 20710,
+ "##饲": 20711,
+ "##饴": 20712,
+ "##饵": 20713,
+ "##饶": 20714,
+ "##饷": 20715,
+ "##饺": 20716,
+ "##饼": 20717,
+ "##饽": 20718,
+ "##饿": 20719,
+ "##馀": 20720,
+ "##馁": 20721,
+ "##馄": 20722,
+ "##馅": 20723,
+ "##馆": 20724,
+ "##馈": 20725,
+ "##馋": 20726,
+ "##馍": 20727,
+ "##馏": 20728,
+ "##馒": 20729,
+ "##馔": 20730,
+ "##首": 20731,
+ "##馗": 20732,
+ "##香": 20733,
+ "##馥": 20734,
+ "##馨": 20735,
+ "##馬": 20736,
+ "##馭": 20737,
+ "##馮": 20738,
+ "##馳": 20739,
+ "##馴": 20740,
+ "##駁": 20741,
+ "##駄": 20742,
+ "##駅": 20743,
+ "##駆": 20744,
+ "##駐": 20745,
+ "##駒": 20746,
+ "##駕": 20747,
+ "##駛": 20748,
+ "##駝": 20749,
+ "##駭": 20750,
+ "##駱": 20751,
+ "##駿": 20752,
+ "##騁": 20753,
+ "##騎": 20754,
+ "##騏": 20755,
+ "##験": 20756,
+ "##騙": 20757,
+ "##騨": 20758,
+ "##騰": 20759,
+ "##騷": 20760,
+ "##驀": 20761,
+ "##驅": 20762,
+ "##驊": 20763,
+ "##驍": 20764,
+ "##驒": 20765,
+ "##驕": 20766,
+ "##驗": 20767,
+ "##驚": 20768,
+ "##驛": 20769,
+ "##驟": 20770,
+ "##驢": 20771,
+ "##驥": 20772,
+ "##马": 20773,
+ "##驭": 20774,
+ "##驮": 20775,
+ "##驯": 20776,
+ "##驰": 20777,
+ "##驱": 20778,
+ "##驳": 20779,
+ "##驴": 20780,
+ "##驶": 20781,
+ "##驷": 20782,
+ "##驸": 20783,
+ "##驹": 20784,
+ "##驻": 20785,
+ "##驼": 20786,
+ "##驾": 20787,
+ "##驿": 20788,
+ "##骁": 20789,
+ "##骂": 20790,
+ "##骄": 20791,
+ "##骅": 20792,
+ "##骆": 20793,
+ "##骇": 20794,
+ "##骈": 20795,
+ "##骊": 20796,
+ "##骋": 20797,
+ "##验": 20798,
+ "##骏": 20799,
+ "##骐": 20800,
+ "##骑": 20801,
+ "##骗": 20802,
+ "##骚": 20803,
+ "##骛": 20804,
+ "##骜": 20805,
+ "##骞": 20806,
+ "##骠": 20807,
+ "##骡": 20808,
+ "##骤": 20809,
+ "##骥": 20810,
+ "##骧": 20811,
+ "##骨": 20812,
+ "##骯": 20813,
+ "##骰": 20814,
+ "##骶": 20815,
+ "##骷": 20816,
+ "##骸": 20817,
+ "##骼": 20818,
+ "##髂": 20819,
+ "##髅": 20820,
+ "##髋": 20821,
+ "##髏": 20822,
+ "##髒": 20823,
+ "##髓": 20824,
+ "##體": 20825,
+ "##髖": 20826,
+ "##高": 20827,
+ "##髦": 20828,
+ "##髪": 20829,
+ "##髮": 20830,
+ "##髯": 20831,
+ "##髻": 20832,
+ "##鬃": 20833,
+ "##鬆": 20834,
+ "##鬍": 20835,
+ "##鬓": 20836,
+ "##鬚": 20837,
+ "##鬟": 20838,
+ "##鬢": 20839,
+ "##鬣": 20840,
+ "##鬥": 20841,
+ "##鬧": 20842,
+ "##鬱": 20843,
+ "##鬼": 20844,
+ "##魁": 20845,
+ "##魂": 20846,
+ "##魄": 20847,
+ "##魅": 20848,
+ "##魇": 20849,
+ "##魍": 20850,
+ "##魏": 20851,
+ "##魔": 20852,
+ "##魘": 20853,
+ "##魚": 20854,
+ "##魯": 20855,
+ "##魷": 20856,
+ "##鮑": 20857,
+ "##鮨": 20858,
+ "##鮪": 20859,
+ "##鮭": 20860,
+ "##鮮": 20861,
+ "##鯉": 20862,
+ "##鯊": 20863,
+ "##鯖": 20864,
+ "##鯛": 20865,
+ "##鯨": 20866,
+ "##鯰": 20867,
+ "##鯽": 20868,
+ "##鰍": 20869,
+ "##鰓": 20870,
+ "##鰭": 20871,
+ "##鰲": 20872,
+ "##鰻": 20873,
+ "##鰾": 20874,
+ "##鱈": 20875,
+ "##鱉": 20876,
+ "##鱔": 20877,
+ "##鱗": 20878,
+ "##鱷": 20879,
+ "##鱸": 20880,
+ "##鱼": 20881,
+ "##鱿": 20882,
+ "##鲁": 20883,
+ "##鲈": 20884,
+ "##鲍": 20885,
+ "##鲑": 20886,
+ "##鲛": 20887,
+ "##鲜": 20888,
+ "##鲟": 20889,
+ "##鲢": 20890,
+ "##鲤": 20891,
+ "##鲨": 20892,
+ "##鲫": 20893,
+ "##鲱": 20894,
+ "##鲲": 20895,
+ "##鲶": 20896,
+ "##鲷": 20897,
+ "##鲸": 20898,
+ "##鳃": 20899,
+ "##鳄": 20900,
+ "##鳅": 20901,
+ "##鳌": 20902,
+ "##鳍": 20903,
+ "##鳕": 20904,
+ "##鳖": 20905,
+ "##鳗": 20906,
+ "##鳝": 20907,
+ "##鳞": 20908,
+ "##鳥": 20909,
+ "##鳩": 20910,
+ "##鳳": 20911,
+ "##鳴": 20912,
+ "##鳶": 20913,
+ "##鴉": 20914,
+ "##鴕": 20915,
+ "##鴛": 20916,
+ "##鴦": 20917,
+ "##鴨": 20918,
+ "##鴻": 20919,
+ "##鴿": 20920,
+ "##鵑": 20921,
+ "##鵜": 20922,
+ "##鵝": 20923,
+ "##鵡": 20924,
+ "##鵬": 20925,
+ "##鵰": 20926,
+ "##鵲": 20927,
+ "##鶘": 20928,
+ "##鶩": 20929,
+ "##鶯": 20930,
+ "##鶴": 20931,
+ "##鷗": 20932,
+ "##鷲": 20933,
+ "##鷹": 20934,
+ "##鷺": 20935,
+ "##鸚": 20936,
+ "##鸞": 20937,
+ "##鸟": 20938,
+ "##鸠": 20939,
+ "##鸡": 20940,
+ "##鸢": 20941,
+ "##鸣": 20942,
+ "##鸥": 20943,
+ "##鸦": 20944,
+ "##鸨": 20945,
+ "##鸪": 20946,
+ "##鸭": 20947,
+ "##鸯": 20948,
+ "##鸳": 20949,
+ "##鸵": 20950,
+ "##鸽": 20951,
+ "##鸾": 20952,
+ "##鸿": 20953,
+ "##鹂": 20954,
+ "##鹃": 20955,
+ "##鹄": 20956,
+ "##鹅": 20957,
+ "##鹈": 20958,
+ "##鹉": 20959,
+ "##鹊": 20960,
+ "##鹌": 20961,
+ "##鹏": 20962,
+ "##鹑": 20963,
+ "##鹕": 20964,
+ "##鹘": 20965,
+ "##鹜": 20966,
+ "##鹞": 20967,
+ "##鹤": 20968,
+ "##鹦": 20969,
+ "##鹧": 20970,
+ "##鹫": 20971,
+ "##鹭": 20972,
+ "##鹰": 20973,
+ "##鹳": 20974,
+ "##鹵": 20975,
+ "##鹹": 20976,
+ "##鹼": 20977,
+ "##鹽": 20978,
+ "##鹿": 20979,
+ "##麂": 20980,
+ "##麋": 20981,
+ "##麒": 20982,
+ "##麓": 20983,
+ "##麗": 20984,
+ "##麝": 20985,
+ "##麟": 20986,
+ "##麥": 20987,
+ "##麦": 20988,
+ "##麩": 20989,
+ "##麴": 20990,
+ "##麵": 20991,
+ "##麸": 20992,
+ "##麺": 20993,
+ "##麻": 20994,
+ "##麼": 20995,
+ "##麽": 20996,
+ "##麾": 20997,
+ "##黃": 20998,
+ "##黄": 20999,
+ "##黍": 21000,
+ "##黎": 21001,
+ "##黏": 21002,
+ "##黑": 21003,
+ "##黒": 21004,
+ "##黔": 21005,
+ "##默": 21006,
+ "##黛": 21007,
+ "##黜": 21008,
+ "##黝": 21009,
+ "##點": 21010,
+ "##黠": 21011,
+ "##黨": 21012,
+ "##黯": 21013,
+ "##黴": 21014,
+ "##鼋": 21015,
+ "##鼎": 21016,
+ "##鼐": 21017,
+ "##鼓": 21018,
+ "##鼠": 21019,
+ "##鼬": 21020,
+ "##鼹": 21021,
+ "##鼻": 21022,
+ "##鼾": 21023,
+ "##齁": 21024,
+ "##齊": 21025,
+ "##齋": 21026,
+ "##齐": 21027,
+ "##齒": 21028,
+ "##齡": 21029,
+ "##齢": 21030,
+ "##齣": 21031,
+ "##齦": 21032,
+ "##齿": 21033,
+ "##龄": 21034,
+ "##龅": 21035,
+ "##龈": 21036,
+ "##龊": 21037,
+ "##龋": 21038,
+ "##龌": 21039,
+ "##龍": 21040,
+ "##龐": 21041,
+ "##龔": 21042,
+ "##龕": 21043,
+ "##龙": 21044,
+ "##龚": 21045,
+ "##龛": 21046,
+ "##龜": 21047,
+ "##龟": 21048,
+ "##︰": 21049,
+ "##︱": 21050,
+ "##︶": 21051,
+ "##︿": 21052,
+ "##﹁": 21053,
+ "##﹂": 21054,
+ "##﹍": 21055,
+ "##﹏": 21056,
+ "##﹐": 21057,
+ "##﹑": 21058,
+ "##﹒": 21059,
+ "##﹔": 21060,
+ "##﹕": 21061,
+ "##﹖": 21062,
+ "##﹗": 21063,
+ "##﹙": 21064,
+ "##﹚": 21065,
+ "##﹝": 21066,
+ "##﹞": 21067,
+ "##﹡": 21068,
+ "##﹣": 21069,
+ "##!": 21070,
+ "##"": 21071,
+ "###": 21072,
+ "##$": 21073,
+ "##%": 21074,
+ "##&": 21075,
+ "##'": 21076,
+ "##(": 21077,
+ "##)": 21078,
+ "##*": 21079,
+ "##,": 21080,
+ "##-": 21081,
+ "##.": 21082,
+ "##/": 21083,
+ "##:": 21084,
+ "##;": 21085,
+ "##<": 21086,
+ "##?": 21087,
+ "##@": 21088,
+ "##[": 21089,
+ "##\": 21090,
+ "##]": 21091,
+ "##^": 21092,
+ "##_": 21093,
+ "##`": 21094,
+ "##f": 21095,
+ "##h": 21096,
+ "##j": 21097,
+ "##u": 21098,
+ "##w": 21099,
+ "##z": 21100,
+ "##{": 21101,
+ "##}": 21102,
+ "##。": 21103,
+ "##「": 21104,
+ "##」": 21105,
+ "##、": 21106,
+ "##・": 21107,
+ "##ッ": 21108,
+ "##ー": 21109,
+ "##イ": 21110,
+ "##ク": 21111,
+ "##シ": 21112,
+ "##ス": 21113,
+ "##ト": 21114,
+ "##ノ": 21115,
+ "##フ": 21116,
+ "##ラ": 21117,
+ "##ル": 21118,
+ "##ン": 21119,
+ "##゙": 21120,
+ "##゚": 21121,
+ "## ̄": 21122,
+ "##¥": 21123,
+ "##👍": 21124,
+ "##🔥": 21125,
+ "##😂": 21126,
+ "##😎": 21127
+ }
+ }
+}
\ No newline at end of file
diff --git a/intelligent_cabin/models/local_bert_multi_intent/tokenizer_config.json b/intelligent_cabin/models/local_bert_multi_intent/tokenizer_config.json
new file mode 100644
index 0000000..bb71a3d
--- /dev/null
+++ b/intelligent_cabin/models/local_bert_multi_intent/tokenizer_config.json
@@ -0,0 +1,56 @@
+{
+ "added_tokens_decoder": {
+ "0": {
+ "content": "[PAD]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false,
+ "special": true
+ },
+ "100": {
+ "content": "[UNK]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false,
+ "special": true
+ },
+ "101": {
+ "content": "[CLS]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false,
+ "special": true
+ },
+ "102": {
+ "content": "[SEP]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false,
+ "special": true
+ },
+ "103": {
+ "content": "[MASK]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false,
+ "special": true
+ }
+ },
+ "clean_up_tokenization_spaces": false,
+ "cls_token": "[CLS]",
+ "do_lower_case": true,
+ "extra_special_tokens": {},
+ "mask_token": "[MASK]",
+ "model_max_length": 1000000000000000019884624838656,
+ "pad_token": "[PAD]",
+ "sep_token": "[SEP]",
+ "strip_accents": null,
+ "tokenize_chinese_chars": true,
+ "tokenizer_class": "BertTokenizer",
+ "unk_token": "[UNK]"
+}
diff --git a/intelligent_cabin/models/local_bert_multi_intent/train_summary.json b/intelligent_cabin/models/local_bert_multi_intent/train_summary.json
new file mode 100644
index 0000000..c8ed92c
--- /dev/null
+++ b/intelligent_cabin/models/local_bert_multi_intent/train_summary.json
@@ -0,0 +1,56 @@
+{
+ "task_type": "multi_label_intent_detection",
+ "base_model": "hfl/chinese-macbert-base",
+ "epochs": 12,
+ "batch_size": 8,
+ "learning_rate": 2e-05,
+ "threshold": 0.5,
+ "top_k": 4,
+ "train_size": 862,
+ "dev_size": 236,
+ "label_count": 34,
+ "labels": [
+ "cabin_ac_off",
+ "cabin_ac_on",
+ "cabin_defog_front_on",
+ "cabin_defog_rear_on",
+ "cabin_fan_down",
+ "cabin_fan_up",
+ "cabin_lights_off",
+ "cabin_lights_on",
+ "cabin_lock_doors",
+ "cabin_mirror_fold",
+ "cabin_mirror_unfold",
+ "cabin_nav_cancel",
+ "cabin_nav_to",
+ "cabin_next_track",
+ "cabin_pause_music",
+ "cabin_play_music",
+ "cabin_previous_track",
+ "cabin_seat_heat_off",
+ "cabin_seat_heat_on",
+ "cabin_set_ac",
+ "cabin_sunroof_close",
+ "cabin_sunroof_open",
+ "cabin_unlock_doors",
+ "cabin_volume_down",
+ "cabin_volume_mute",
+ "cabin_volume_up",
+ "cabin_window_close",
+ "cabin_window_open",
+ "cabin_wiper_off",
+ "cabin_wiper_on",
+ "cs_cancel_order",
+ "cs_query_logistics",
+ "cs_query_order",
+ "cs_transfer_human"
+ ],
+ "best_dev_metrics": {
+ "micro_precision": 1.0,
+ "micro_recall": 0.9929,
+ "micro_f1": 0.9964,
+ "exact_match": 0.9915,
+ "recall_at_k": 1.0
+ },
+ "device": "mps"
+}
\ No newline at end of file
diff --git a/intelligent_cabin/models/local_bert_multi_intent/vocab.txt b/intelligent_cabin/models/local_bert_multi_intent/vocab.txt
new file mode 100644
index 0000000..ca4f978
--- /dev/null
+++ b/intelligent_cabin/models/local_bert_multi_intent/vocab.txt
@@ -0,0 +1,21128 @@
+[PAD]
+[unused1]
+[unused2]
+[unused3]
+[unused4]
+[unused5]
+[unused6]
+[unused7]
+[unused8]
+[unused9]
+[unused10]
+[unused11]
+[unused12]
+[unused13]
+[unused14]
+[unused15]
+[unused16]
+[unused17]
+[unused18]
+[unused19]
+[unused20]
+[unused21]
+[unused22]
+[unused23]
+[unused24]
+[unused25]
+[unused26]
+[unused27]
+[unused28]
+[unused29]
+[unused30]
+[unused31]
+[unused32]
+[unused33]
+[unused34]
+[unused35]
+[unused36]
+[unused37]
+[unused38]
+[unused39]
+[unused40]
+[unused41]
+[unused42]
+[unused43]
+[unused44]
+[unused45]
+[unused46]
+[unused47]
+[unused48]
+[unused49]
+[unused50]
+[unused51]
+[unused52]
+[unused53]
+[unused54]
+[unused55]
+[unused56]
+[unused57]
+[unused58]
+[unused59]
+[unused60]
+[unused61]
+[unused62]
+[unused63]
+[unused64]
+[unused65]
+[unused66]
+[unused67]
+[unused68]
+[unused69]
+[unused70]
+[unused71]
+[unused72]
+[unused73]
+[unused74]
+[unused75]
+[unused76]
+[unused77]
+[unused78]
+[unused79]
+[unused80]
+[unused81]
+[unused82]
+[unused83]
+[unused84]
+[unused85]
+[unused86]
+[unused87]
+[unused88]
+[unused89]
+[unused90]
+[unused91]
+[unused92]
+[unused93]
+[unused94]
+[unused95]
+[unused96]
+[unused97]
+[unused98]
+[unused99]
+[UNK]
+[CLS]
+[SEP]
+[MASK]
+
+
+!
+"
+#
+$
+%
+&
+'
+(
+)
+*
++
+,
+-
+.
+/
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+:
+;
+<
+=
+>
+?
+@
+[
+\
+]
+^
+_
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+{
+|
+}
+~
+£
+¤
+¥
+§
+©
+«
+®
+°
+±
+²
+³
+µ
+·
+¹
+º
+»
+¼
+×
+ß
+æ
+÷
+ø
+đ
+ŋ
+ɔ
+ə
+ɡ
+ʰ
+ˇ
+ˈ
+ˊ
+ˋ
+ˍ
+ː
+˙
+˚
+ˢ
+α
+β
+γ
+δ
+ε
+η
+θ
+ι
+κ
+λ
+μ
+ν
+ο
+π
+ρ
+ς
+σ
+τ
+υ
+φ
+χ
+ψ
+ω
+а
+б
+в
+г
+д
+е
+ж
+з
+и
+к
+л
+м
+н
+о
+п
+р
+с
+т
+у
+ф
+х
+ц
+ч
+ш
+ы
+ь
+я
+і
+ا
+ب
+ة
+ت
+د
+ر
+س
+ع
+ل
+م
+ن
+ه
+و
+ي
+۩
+ก
+ง
+น
+ม
+ย
+ร
+อ
+า
+เ
+๑
+་
+ღ
+ᄀ
+ᄁ
+ᄂ
+ᄃ
+ᄅ
+ᄆ
+ᄇ
+ᄈ
+ᄉ
+ᄋ
+ᄌ
+ᄎ
+ᄏ
+ᄐ
+ᄑ
+ᄒ
+ᅡ
+ᅢ
+ᅣ
+ᅥ
+ᅦ
+ᅧ
+ᅨ
+ᅩ
+ᅪ
+ᅬ
+ᅭ
+ᅮ
+ᅯ
+ᅲ
+ᅳ
+ᅴ
+ᅵ
+ᆨ
+ᆫ
+ᆯ
+ᆷ
+ᆸ
+ᆺ
+ᆻ
+ᆼ
+ᗜ
+ᵃ
+ᵉ
+ᵍ
+ᵏ
+ᵐ
+ᵒ
+ᵘ
+‖
+„
+†
+•
+‥
+‧
+
+‰
+′
+″
+‹
+›
+※
+‿
+⁄
+ⁱ
+⁺
+ⁿ
+₁
+₂
+₃
+₄
+€
+℃
+№
+™
+ⅰ
+ⅱ
+ⅲ
+ⅳ
+ⅴ
+←
+↑
+→
+↓
+↔
+↗
+↘
+⇒
+∀
+−
+∕
+∙
+√
+∞
+∟
+∠
+∣
+∥
+∩
+∮
+∶
+∼
+∽
+≈
+≒
+≡
+≤
+≥
+≦
+≧
+≪
+≫
+⊙
+⋅
+⋈
+⋯
+⌒
+①
+②
+③
+④
+⑤
+⑥
+⑦
+⑧
+⑨
+⑩
+⑴
+⑵
+⑶
+⑷
+⑸
+⒈
+⒉
+⒊
+⒋
+ⓒ
+ⓔ
+ⓘ
+─
+━
+│
+┃
+┅
+┆
+┊
+┌
+└
+├
+┣
+═
+║
+╚
+╞
+╠
+╭
+╮
+╯
+╰
+╱
+╳
+▂
+▃
+▅
+▇
+█
+▉
+▋
+▌
+▍
+▎
+■
+□
+▪
+▫
+▬
+▲
+△
+▶
+►
+▼
+▽
+◆
+◇
+○
+◎
+●
+◕
+◠
+◢
+◤
+☀
+★
+☆
+☕
+☞
+☺
+☼
+♀
+♂
+♠
+♡
+♣
+♥
+♦
+♪
+♫
+♬
+✈
+✔
+✕
+✖
+✦
+✨
+✪
+✰
+✿
+❀
+❤
+➜
+➤
+⦿
+、
+。
+〃
+々
+〇
+〈
+〉
+《
+》
+「
+」
+『
+』
+【
+】
+〓
+〔
+〕
+〖
+〗
+〜
+〝
+〞
+ぁ
+あ
+ぃ
+い
+う
+ぇ
+え
+お
+か
+き
+く
+け
+こ
+さ
+し
+す
+せ
+そ
+た
+ち
+っ
+つ
+て
+と
+な
+に
+ぬ
+ね
+の
+は
+ひ
+ふ
+へ
+ほ
+ま
+み
+む
+め
+も
+ゃ
+や
+ゅ
+ゆ
+ょ
+よ
+ら
+り
+る
+れ
+ろ
+わ
+を
+ん
+゜
+ゝ
+ァ
+ア
+ィ
+イ
+ゥ
+ウ
+ェ
+エ
+ォ
+オ
+カ
+キ
+ク
+ケ
+コ
+サ
+シ
+ス
+セ
+ソ
+タ
+チ
+ッ
+ツ
+テ
+ト
+ナ
+ニ
+ヌ
+ネ
+ノ
+ハ
+ヒ
+フ
+ヘ
+ホ
+マ
+ミ
+ム
+メ
+モ
+ャ
+ヤ
+ュ
+ユ
+ョ
+ヨ
+ラ
+リ
+ル
+レ
+ロ
+ワ
+ヲ
+ン
+ヶ
+・
+ー
+ヽ
+ㄅ
+ㄆ
+ㄇ
+ㄉ
+ㄋ
+ㄌ
+ㄍ
+ㄎ
+ㄏ
+ㄒ
+ㄚ
+ㄛ
+ㄞ
+ㄟ
+ㄢ
+ㄤ
+ㄥ
+ㄧ
+ㄨ
+ㆍ
+㈦
+㊣
+㎡
+㗎
+一
+丁
+七
+万
+丈
+三
+上
+下
+不
+与
+丐
+丑
+专
+且
+丕
+世
+丘
+丙
+业
+丛
+东
+丝
+丞
+丟
+両
+丢
+两
+严
+並
+丧
+丨
+个
+丫
+中
+丰
+串
+临
+丶
+丸
+丹
+为
+主
+丼
+丽
+举
+丿
+乂
+乃
+久
+么
+义
+之
+乌
+乍
+乎
+乏
+乐
+乒
+乓
+乔
+乖
+乗
+乘
+乙
+乜
+九
+乞
+也
+习
+乡
+书
+乩
+买
+乱
+乳
+乾
+亀
+亂
+了
+予
+争
+事
+二
+于
+亏
+云
+互
+五
+井
+亘
+亙
+亚
+些
+亜
+亞
+亟
+亡
+亢
+交
+亥
+亦
+产
+亨
+亩
+享
+京
+亭
+亮
+亲
+亳
+亵
+人
+亿
+什
+仁
+仃
+仄
+仅
+仆
+仇
+今
+介
+仍
+从
+仏
+仑
+仓
+仔
+仕
+他
+仗
+付
+仙
+仝
+仞
+仟
+代
+令
+以
+仨
+仪
+们
+仮
+仰
+仲
+件
+价
+任
+份
+仿
+企
+伉
+伊
+伍
+伎
+伏
+伐
+休
+伕
+众
+优
+伙
+会
+伝
+伞
+伟
+传
+伢
+伤
+伦
+伪
+伫
+伯
+估
+伴
+伶
+伸
+伺
+似
+伽
+佃
+但
+佇
+佈
+位
+低
+住
+佐
+佑
+体
+佔
+何
+佗
+佘
+余
+佚
+佛
+作
+佝
+佞
+佟
+你
+佢
+佣
+佤
+佥
+佩
+佬
+佯
+佰
+佳
+併
+佶
+佻
+佼
+使
+侃
+侄
+來
+侈
+例
+侍
+侏
+侑
+侖
+侗
+供
+依
+侠
+価
+侣
+侥
+侦
+侧
+侨
+侬
+侮
+侯
+侵
+侶
+侷
+便
+係
+促
+俄
+俊
+俎
+俏
+俐
+俑
+俗
+俘
+俚
+保
+俞
+俟
+俠
+信
+俨
+俩
+俪
+俬
+俭
+修
+俯
+俱
+俳
+俸
+俺
+俾
+倆
+倉
+個
+倌
+倍
+倏
+們
+倒
+倔
+倖
+倘
+候
+倚
+倜
+借
+倡
+値
+倦
+倩
+倪
+倫
+倬
+倭
+倶
+债
+值
+倾
+偃
+假
+偈
+偉
+偌
+偎
+偏
+偕
+做
+停
+健
+側
+偵
+偶
+偷
+偻
+偽
+偿
+傀
+傅
+傍
+傑
+傘
+備
+傚
+傢
+傣
+傥
+储
+傩
+催
+傭
+傲
+傳
+債
+傷
+傻
+傾
+僅
+働
+像
+僑
+僕
+僖
+僚
+僥
+僧
+僭
+僮
+僱
+僵
+價
+僻
+儀
+儂
+億
+儆
+儉
+儋
+儒
+儕
+儘
+償
+儡
+優
+儲
+儷
+儼
+儿
+兀
+允
+元
+兄
+充
+兆
+兇
+先
+光
+克
+兌
+免
+児
+兑
+兒
+兔
+兖
+党
+兜
+兢
+入
+內
+全
+兩
+八
+公
+六
+兮
+兰
+共
+兲
+关
+兴
+兵
+其
+具
+典
+兹
+养
+兼
+兽
+冀
+内
+円
+冇
+冈
+冉
+冊
+册
+再
+冏
+冒
+冕
+冗
+写
+军
+农
+冠
+冢
+冤
+冥
+冨
+冪
+冬
+冯
+冰
+冲
+决
+况
+冶
+冷
+冻
+冼
+冽
+冾
+净
+凄
+准
+凇
+凈
+凉
+凋
+凌
+凍
+减
+凑
+凛
+凜
+凝
+几
+凡
+凤
+処
+凪
+凭
+凯
+凰
+凱
+凳
+凶
+凸
+凹
+出
+击
+函
+凿
+刀
+刁
+刃
+分
+切
+刈
+刊
+刍
+刎
+刑
+划
+列
+刘
+则
+刚
+创
+初
+删
+判
+別
+刨
+利
+刪
+别
+刮
+到
+制
+刷
+券
+刹
+刺
+刻
+刽
+剁
+剂
+剃
+則
+剉
+削
+剋
+剌
+前
+剎
+剐
+剑
+剔
+剖
+剛
+剜
+剝
+剣
+剤
+剥
+剧
+剩
+剪
+副
+割
+創
+剷
+剽
+剿
+劃
+劇
+劈
+劉
+劊
+劍
+劏
+劑
+力
+劝
+办
+功
+加
+务
+劣
+动
+助
+努
+劫
+劭
+励
+劲
+劳
+労
+劵
+効
+劾
+势
+勁
+勃
+勇
+勉
+勋
+勐
+勒
+動
+勖
+勘
+務
+勛
+勝
+勞
+募
+勢
+勤
+勧
+勳
+勵
+勸
+勺
+勻
+勾
+勿
+匀
+包
+匆
+匈
+匍
+匐
+匕
+化
+北
+匙
+匝
+匠
+匡
+匣
+匪
+匮
+匯
+匱
+匹
+区
+医
+匾
+匿
+區
+十
+千
+卅
+升
+午
+卉
+半
+卍
+华
+协
+卑
+卒
+卓
+協
+单
+卖
+南
+単
+博
+卜
+卞
+卟
+占
+卡
+卢
+卤
+卦
+卧
+卫
+卮
+卯
+印
+危
+即
+却
+卵
+卷
+卸
+卻
+卿
+厂
+厄
+厅
+历
+厉
+压
+厌
+厕
+厘
+厚
+厝
+原
+厢
+厥
+厦
+厨
+厩
+厭
+厮
+厲
+厳
+去
+县
+叁
+参
+參
+又
+叉
+及
+友
+双
+反
+収
+发
+叔
+取
+受
+变
+叙
+叛
+叟
+叠
+叡
+叢
+口
+古
+句
+另
+叨
+叩
+只
+叫
+召
+叭
+叮
+可
+台
+叱
+史
+右
+叵
+叶
+号
+司
+叹
+叻
+叼
+叽
+吁
+吃
+各
+吆
+合
+吉
+吊
+吋
+同
+名
+后
+吏
+吐
+向
+吒
+吓
+吕
+吖
+吗
+君
+吝
+吞
+吟
+吠
+吡
+否
+吧
+吨
+吩
+含
+听
+吭
+吮
+启
+吱
+吳
+吴
+吵
+吶
+吸
+吹
+吻
+吼
+吽
+吾
+呀
+呂
+呃
+呆
+呈
+告
+呋
+呎
+呐
+呓
+呕
+呗
+员
+呛
+呜
+呢
+呤
+呦
+周
+呱
+呲
+味
+呵
+呷
+呸
+呻
+呼
+命
+咀
+咁
+咂
+咄
+咆
+咋
+和
+咎
+咏
+咐
+咒
+咔
+咕
+咖
+咗
+咘
+咙
+咚
+咛
+咣
+咤
+咦
+咧
+咨
+咩
+咪
+咫
+咬
+咭
+咯
+咱
+咲
+咳
+咸
+咻
+咽
+咿
+哀
+品
+哂
+哄
+哆
+哇
+哈
+哉
+哋
+哌
+响
+哎
+哏
+哐
+哑
+哒
+哔
+哗
+哟
+員
+哥
+哦
+哧
+哨
+哩
+哪
+哭
+哮
+哲
+哺
+哼
+哽
+唁
+唄
+唆
+唇
+唉
+唏
+唐
+唑
+唔
+唠
+唤
+唧
+唬
+售
+唯
+唰
+唱
+唳
+唷
+唸
+唾
+啃
+啄
+商
+啉
+啊
+問
+啓
+啕
+啖
+啜
+啞
+啟
+啡
+啤
+啥
+啦
+啧
+啪
+啫
+啬
+啮
+啰
+啱
+啲
+啵
+啶
+啷
+啸
+啻
+啼
+啾
+喀
+喂
+喃
+善
+喆
+喇
+喉
+喊
+喋
+喎
+喏
+喔
+喘
+喙
+喚
+喜
+喝
+喟
+喧
+喪
+喫
+喬
+單
+喰
+喱
+喲
+喳
+喵
+営
+喷
+喹
+喺
+喻
+喽
+嗅
+嗆
+嗇
+嗎
+嗑
+嗒
+嗓
+嗔
+嗖
+嗚
+嗜
+嗝
+嗟
+嗡
+嗣
+嗤
+嗦
+嗨
+嗪
+嗬
+嗯
+嗰
+嗲
+嗳
+嗶
+嗷
+嗽
+嘀
+嘅
+嘆
+嘈
+嘉
+嘌
+嘍
+嘎
+嘔
+嘖
+嘗
+嘘
+嘚
+嘛
+嘜
+嘞
+嘟
+嘢
+嘣
+嘤
+嘧
+嘩
+嘭
+嘮
+嘯
+嘰
+嘱
+嘲
+嘴
+嘶
+嘸
+嘹
+嘻
+嘿
+噁
+噌
+噎
+噓
+噔
+噗
+噙
+噜
+噠
+噢
+噤
+器
+噩
+噪
+噬
+噱
+噴
+噶
+噸
+噹
+噻
+噼
+嚀
+嚇
+嚎
+嚏
+嚐
+嚓
+嚕
+嚟
+嚣
+嚥
+嚨
+嚮
+嚴
+嚷
+嚼
+囂
+囉
+囊
+囍
+囑
+囔
+囗
+囚
+四
+囝
+回
+囟
+因
+囡
+团
+団
+囤
+囧
+囪
+囫
+园
+困
+囱
+囲
+図
+围
+囹
+固
+国
+图
+囿
+圃
+圄
+圆
+圈
+國
+圍
+圏
+園
+圓
+圖
+團
+圜
+土
+圣
+圧
+在
+圩
+圭
+地
+圳
+场
+圻
+圾
+址
+坂
+均
+坊
+坍
+坎
+坏
+坐
+坑
+块
+坚
+坛
+坝
+坞
+坟
+坠
+坡
+坤
+坦
+坨
+坪
+坯
+坳
+坵
+坷
+垂
+垃
+垄
+型
+垒
+垚
+垛
+垠
+垢
+垣
+垦
+垩
+垫
+垭
+垮
+垵
+埂
+埃
+埋
+城
+埔
+埕
+埗
+域
+埠
+埤
+埵
+執
+埸
+培
+基
+埼
+堀
+堂
+堃
+堅
+堆
+堇
+堑
+堕
+堙
+堡
+堤
+堪
+堯
+堰
+報
+場
+堵
+堺
+堿
+塊
+塌
+塑
+塔
+塗
+塘
+塚
+塞
+塢
+塩
+填
+塬
+塭
+塵
+塾
+墀
+境
+墅
+墉
+墊
+墒
+墓
+増
+墘
+墙
+墜
+增
+墟
+墨
+墩
+墮
+墳
+墻
+墾
+壁
+壅
+壆
+壇
+壊
+壑
+壓
+壕
+壘
+壞
+壟
+壢
+壤
+壩
+士
+壬
+壮
+壯
+声
+売
+壳
+壶
+壹
+壺
+壽
+处
+备
+変
+复
+夏
+夔
+夕
+外
+夙
+多
+夜
+够
+夠
+夢
+夥
+大
+天
+太
+夫
+夭
+央
+夯
+失
+头
+夷
+夸
+夹
+夺
+夾
+奂
+奄
+奇
+奈
+奉
+奋
+奎
+奏
+奐
+契
+奔
+奕
+奖
+套
+奘
+奚
+奠
+奢
+奥
+奧
+奪
+奬
+奮
+女
+奴
+奶
+奸
+她
+好
+如
+妃
+妄
+妆
+妇
+妈
+妊
+妍
+妒
+妓
+妖
+妘
+妙
+妝
+妞
+妣
+妤
+妥
+妨
+妩
+妪
+妮
+妲
+妳
+妹
+妻
+妾
+姆
+姉
+姊
+始
+姍
+姐
+姑
+姒
+姓
+委
+姗
+姚
+姜
+姝
+姣
+姥
+姦
+姨
+姪
+姫
+姬
+姹
+姻
+姿
+威
+娃
+娄
+娅
+娆
+娇
+娉
+娑
+娓
+娘
+娛
+娜
+娟
+娠
+娣
+娥
+娩
+娱
+娲
+娴
+娶
+娼
+婀
+婁
+婆
+婉
+婊
+婕
+婚
+婢
+婦
+婧
+婪
+婭
+婴
+婵
+婶
+婷
+婺
+婿
+媒
+媚
+媛
+媞
+媧
+媲
+媳
+媽
+媾
+嫁
+嫂
+嫉
+嫌
+嫑
+嫔
+嫖
+嫘
+嫚
+嫡
+嫣
+嫦
+嫩
+嫲
+嫵
+嫻
+嬅
+嬉
+嬌
+嬗
+嬛
+嬢
+嬤
+嬪
+嬰
+嬴
+嬷
+嬸
+嬿
+孀
+孃
+子
+孑
+孔
+孕
+孖
+字
+存
+孙
+孚
+孛
+孜
+孝
+孟
+孢
+季
+孤
+学
+孩
+孪
+孫
+孬
+孰
+孱
+孳
+孵
+學
+孺
+孽
+孿
+宁
+它
+宅
+宇
+守
+安
+宋
+完
+宏
+宓
+宕
+宗
+官
+宙
+定
+宛
+宜
+宝
+实
+実
+宠
+审
+客
+宣
+室
+宥
+宦
+宪
+宫
+宮
+宰
+害
+宴
+宵
+家
+宸
+容
+宽
+宾
+宿
+寂
+寄
+寅
+密
+寇
+富
+寐
+寒
+寓
+寛
+寝
+寞
+察
+寡
+寢
+寥
+實
+寧
+寨
+審
+寫
+寬
+寮
+寰
+寵
+寶
+寸
+对
+寺
+寻
+导
+対
+寿
+封
+専
+射
+将
+將
+專
+尉
+尊
+尋
+對
+導
+小
+少
+尔
+尕
+尖
+尘
+尚
+尝
+尤
+尧
+尬
+就
+尴
+尷
+尸
+尹
+尺
+尻
+尼
+尽
+尾
+尿
+局
+屁
+层
+屄
+居
+屆
+屈
+屉
+届
+屋
+屌
+屍
+屎
+屏
+屐
+屑
+展
+屜
+属
+屠
+屡
+屢
+層
+履
+屬
+屯
+山
+屹
+屿
+岀
+岁
+岂
+岌
+岐
+岑
+岔
+岖
+岗
+岘
+岙
+岚
+岛
+岡
+岩
+岫
+岬
+岭
+岱
+岳
+岷
+岸
+峇
+峋
+峒
+峙
+峡
+峤
+峥
+峦
+峨
+峪
+峭
+峯
+峰
+峴
+島
+峻
+峽
+崁
+崂
+崆
+崇
+崎
+崑
+崔
+崖
+崗
+崙
+崛
+崧
+崩
+崭
+崴
+崽
+嵇
+嵊
+嵋
+嵌
+嵐
+嵘
+嵩
+嵬
+嵯
+嶂
+嶄
+嶇
+嶋
+嶙
+嶺
+嶼
+嶽
+巅
+巍
+巒
+巔
+巖
+川
+州
+巡
+巢
+工
+左
+巧
+巨
+巩
+巫
+差
+己
+已
+巳
+巴
+巷
+巻
+巽
+巾
+巿
+币
+市
+布
+帅
+帆
+师
+希
+帐
+帑
+帕
+帖
+帘
+帚
+帛
+帜
+帝
+帥
+带
+帧
+師
+席
+帮
+帯
+帰
+帳
+帶
+帷
+常
+帼
+帽
+幀
+幂
+幄
+幅
+幌
+幔
+幕
+幟
+幡
+幢
+幣
+幫
+干
+平
+年
+并
+幸
+幹
+幺
+幻
+幼
+幽
+幾
+广
+庁
+広
+庄
+庆
+庇
+床
+序
+庐
+库
+应
+底
+庖
+店
+庙
+庚
+府
+庞
+废
+庠
+度
+座
+庫
+庭
+庵
+庶
+康
+庸
+庹
+庾
+廁
+廂
+廃
+廈
+廉
+廊
+廓
+廖
+廚
+廝
+廟
+廠
+廢
+廣
+廬
+廳
+延
+廷
+建
+廿
+开
+弁
+异
+弃
+弄
+弈
+弊
+弋
+式
+弑
+弒
+弓
+弔
+引
+弗
+弘
+弛
+弟
+张
+弥
+弦
+弧
+弩
+弭
+弯
+弱
+張
+強
+弹
+强
+弼
+弾
+彅
+彆
+彈
+彌
+彎
+归
+当
+录
+彗
+彙
+彝
+形
+彤
+彥
+彦
+彧
+彩
+彪
+彫
+彬
+彭
+彰
+影
+彷
+役
+彻
+彼
+彿
+往
+征
+径
+待
+徇
+很
+徉
+徊
+律
+後
+徐
+徑
+徒
+従
+徕
+得
+徘
+徙
+徜
+從
+徠
+御
+徨
+復
+循
+徬
+微
+徳
+徴
+徵
+德
+徹
+徼
+徽
+心
+必
+忆
+忌
+忍
+忏
+忐
+忑
+忒
+忖
+志
+忘
+忙
+応
+忠
+忡
+忤
+忧
+忪
+快
+忱
+念
+忻
+忽
+忿
+怀
+态
+怂
+怅
+怆
+怎
+怏
+怒
+怔
+怕
+怖
+怙
+怜
+思
+怠
+怡
+急
+怦
+性
+怨
+怪
+怯
+怵
+总
+怼
+恁
+恃
+恆
+恋
+恍
+恐
+恒
+恕
+恙
+恚
+恢
+恣
+恤
+恥
+恨
+恩
+恪
+恫
+恬
+恭
+息
+恰
+恳
+恵
+恶
+恸
+恺
+恻
+恼
+恿
+悄
+悅
+悉
+悌
+悍
+悔
+悖
+悚
+悟
+悠
+患
+悦
+您
+悩
+悪
+悬
+悯
+悱
+悲
+悴
+悵
+悶
+悸
+悻
+悼
+悽
+情
+惆
+惇
+惊
+惋
+惑
+惕
+惘
+惚
+惜
+惟
+惠
+惡
+惦
+惧
+惨
+惩
+惫
+惬
+惭
+惮
+惯
+惰
+惱
+想
+惴
+惶
+惹
+惺
+愁
+愆
+愈
+愉
+愍
+意
+愕
+愚
+愛
+愜
+感
+愣
+愤
+愧
+愫
+愷
+愿
+慄
+慈
+態
+慌
+慎
+慑
+慕
+慘
+慚
+慟
+慢
+慣
+慧
+慨
+慫
+慮
+慰
+慳
+慵
+慶
+慷
+慾
+憂
+憊
+憋
+憎
+憐
+憑
+憔
+憚
+憤
+憧
+憨
+憩
+憫
+憬
+憲
+憶
+憾
+懂
+懇
+懈
+應
+懊
+懋
+懑
+懒
+懦
+懲
+懵
+懶
+懷
+懸
+懺
+懼
+懾
+懿
+戀
+戈
+戊
+戌
+戍
+戎
+戏
+成
+我
+戒
+戕
+或
+战
+戚
+戛
+戟
+戡
+戦
+截
+戬
+戮
+戰
+戲
+戳
+戴
+戶
+户
+戸
+戻
+戾
+房
+所
+扁
+扇
+扈
+扉
+手
+才
+扎
+扑
+扒
+打
+扔
+払
+托
+扛
+扣
+扦
+执
+扩
+扪
+扫
+扬
+扭
+扮
+扯
+扰
+扱
+扳
+扶
+批
+扼
+找
+承
+技
+抄
+抉
+把
+抑
+抒
+抓
+投
+抖
+抗
+折
+抚
+抛
+抜
+択
+抟
+抠
+抡
+抢
+护
+报
+抨
+披
+抬
+抱
+抵
+抹
+押
+抽
+抿
+拂
+拄
+担
+拆
+拇
+拈
+拉
+拋
+拌
+拍
+拎
+拐
+拒
+拓
+拔
+拖
+拗
+拘
+拙
+拚
+招
+拜
+拟
+拡
+拢
+拣
+拥
+拦
+拧
+拨
+择
+括
+拭
+拮
+拯
+拱
+拳
+拴
+拷
+拼
+拽
+拾
+拿
+持
+挂
+指
+挈
+按
+挎
+挑
+挖
+挙
+挚
+挛
+挝
+挞
+挟
+挠
+挡
+挣
+挤
+挥
+挨
+挪
+挫
+振
+挲
+挹
+挺
+挽
+挾
+捂
+捅
+捆
+捉
+捋
+捌
+捍
+捎
+捏
+捐
+捕
+捞
+损
+捡
+换
+捣
+捧
+捨
+捩
+据
+捱
+捲
+捶
+捷
+捺
+捻
+掀
+掂
+掃
+掇
+授
+掉
+掌
+掏
+掐
+排
+掖
+掘
+掙
+掛
+掠
+採
+探
+掣
+接
+控
+推
+掩
+措
+掬
+掰
+掲
+掳
+掴
+掷
+掸
+掺
+揀
+揃
+揄
+揆
+揉
+揍
+描
+提
+插
+揖
+揚
+換
+握
+揣
+揩
+揪
+揭
+揮
+援
+揶
+揸
+揹
+揽
+搀
+搁
+搂
+搅
+損
+搏
+搐
+搓
+搔
+搖
+搗
+搜
+搞
+搡
+搪
+搬
+搭
+搵
+搶
+携
+搽
+摀
+摁
+摄
+摆
+摇
+摈
+摊
+摒
+摔
+摘
+摞
+摟
+摧
+摩
+摯
+摳
+摸
+摹
+摺
+摻
+撂
+撃
+撅
+撇
+撈
+撐
+撑
+撒
+撓
+撕
+撚
+撞
+撤
+撥
+撩
+撫
+撬
+播
+撮
+撰
+撲
+撵
+撷
+撸
+撻
+撼
+撿
+擀
+擁
+擂
+擄
+擅
+擇
+擊
+擋
+操
+擎
+擒
+擔
+擘
+據
+擞
+擠
+擡
+擢
+擦
+擬
+擰
+擱
+擲
+擴
+擷
+擺
+擼
+擾
+攀
+攏
+攒
+攔
+攘
+攙
+攜
+攝
+攞
+攢
+攣
+攤
+攥
+攪
+攫
+攬
+支
+收
+攸
+改
+攻
+放
+政
+故
+效
+敌
+敍
+敎
+敏
+救
+敕
+敖
+敗
+敘
+教
+敛
+敝
+敞
+敢
+散
+敦
+敬
+数
+敲
+整
+敵
+敷
+數
+斂
+斃
+文
+斋
+斌
+斎
+斐
+斑
+斓
+斗
+料
+斛
+斜
+斟
+斡
+斤
+斥
+斧
+斩
+斫
+斬
+断
+斯
+新
+斷
+方
+於
+施
+旁
+旃
+旅
+旋
+旌
+旎
+族
+旖
+旗
+无
+既
+日
+旦
+旧
+旨
+早
+旬
+旭
+旮
+旱
+时
+旷
+旺
+旻
+昀
+昂
+昆
+昇
+昉
+昊
+昌
+明
+昏
+易
+昔
+昕
+昙
+星
+映
+春
+昧
+昨
+昭
+是
+昱
+昴
+昵
+昶
+昼
+显
+晁
+時
+晃
+晉
+晋
+晌
+晏
+晒
+晓
+晔
+晕
+晖
+晗
+晚
+晝
+晞
+晟
+晤
+晦
+晨
+晩
+普
+景
+晰
+晴
+晶
+晷
+智
+晾
+暂
+暄
+暇
+暈
+暉
+暌
+暐
+暑
+暖
+暗
+暝
+暢
+暧
+暨
+暫
+暮
+暱
+暴
+暸
+暹
+曄
+曆
+曇
+曉
+曖
+曙
+曜
+曝
+曠
+曦
+曬
+曰
+曲
+曳
+更
+書
+曹
+曼
+曾
+替
+最
+會
+月
+有
+朋
+服
+朐
+朔
+朕
+朗
+望
+朝
+期
+朦
+朧
+木
+未
+末
+本
+札
+朮
+术
+朱
+朴
+朵
+机
+朽
+杀
+杂
+权
+杆
+杈
+杉
+李
+杏
+材
+村
+杓
+杖
+杜
+杞
+束
+杠
+条
+来
+杨
+杭
+杯
+杰
+東
+杳
+杵
+杷
+杼
+松
+板
+极
+构
+枇
+枉
+枋
+析
+枕
+林
+枚
+果
+枝
+枢
+枣
+枪
+枫
+枭
+枯
+枰
+枱
+枳
+架
+枷
+枸
+柄
+柏
+某
+柑
+柒
+染
+柔
+柘
+柚
+柜
+柞
+柠
+柢
+查
+柩
+柬
+柯
+柱
+柳
+柴
+柵
+査
+柿
+栀
+栃
+栄
+栅
+标
+栈
+栉
+栋
+栎
+栏
+树
+栓
+栖
+栗
+校
+栩
+株
+样
+核
+根
+格
+栽
+栾
+桀
+桁
+桂
+桃
+桅
+框
+案
+桉
+桌
+桎
+桐
+桑
+桓
+桔
+桜
+桠
+桡
+桢
+档
+桥
+桦
+桧
+桨
+桩
+桶
+桿
+梁
+梅
+梆
+梏
+梓
+梗
+條
+梟
+梢
+梦
+梧
+梨
+梭
+梯
+械
+梳
+梵
+梶
+检
+棂
+棄
+棉
+棋
+棍
+棒
+棕
+棗
+棘
+棚
+棟
+棠
+棣
+棧
+森
+棱
+棲
+棵
+棹
+棺
+椁
+椅
+椋
+植
+椎
+椒
+検
+椪
+椭
+椰
+椹
+椽
+椿
+楂
+楊
+楓
+楔
+楚
+楝
+楞
+楠
+楣
+楨
+楫
+業
+楮
+極
+楷
+楸
+楹
+楼
+楽
+概
+榄
+榆
+榈
+榉
+榔
+榕
+榖
+榛
+榜
+榨
+榫
+榭
+榮
+榱
+榴
+榷
+榻
+槁
+槃
+構
+槌
+槍
+槎
+槐
+槓
+様
+槛
+槟
+槤
+槭
+槲
+槳
+槻
+槽
+槿
+樁
+樂
+樊
+樑
+樓
+標
+樞
+樟
+模
+樣
+権
+横
+樫
+樯
+樱
+樵
+樸
+樹
+樺
+樽
+樾
+橄
+橇
+橋
+橐
+橘
+橙
+機
+橡
+橢
+橫
+橱
+橹
+橼
+檀
+檄
+檎
+檐
+檔
+檗
+檜
+檢
+檬
+檯
+檳
+檸
+檻
+櫃
+櫚
+櫛
+櫥
+櫸
+櫻
+欄
+權
+欒
+欖
+欠
+次
+欢
+欣
+欧
+欲
+欸
+欺
+欽
+款
+歆
+歇
+歉
+歌
+歎
+歐
+歓
+歙
+歛
+歡
+止
+正
+此
+步
+武
+歧
+歩
+歪
+歯
+歲
+歳
+歴
+歷
+歸
+歹
+死
+歼
+殁
+殃
+殆
+殇
+殉
+殊
+残
+殒
+殓
+殖
+殘
+殞
+殡
+殤
+殭
+殯
+殲
+殴
+段
+殷
+殺
+殼
+殿
+毀
+毁
+毂
+毅
+毆
+毋
+母
+毎
+每
+毒
+毓
+比
+毕
+毗
+毘
+毙
+毛
+毡
+毫
+毯
+毽
+氈
+氏
+氐
+民
+氓
+气
+氖
+気
+氙
+氛
+氟
+氡
+氢
+氣
+氤
+氦
+氧
+氨
+氪
+氫
+氮
+氯
+氰
+氲
+水
+氷
+永
+氹
+氾
+汀
+汁
+求
+汆
+汇
+汉
+汎
+汐
+汕
+汗
+汙
+汛
+汝
+汞
+江
+池
+污
+汤
+汨
+汩
+汪
+汰
+汲
+汴
+汶
+汹
+決
+汽
+汾
+沁
+沂
+沃
+沅
+沈
+沉
+沌
+沏
+沐
+沒
+沓
+沖
+沙
+沛
+沟
+没
+沢
+沣
+沥
+沦
+沧
+沪
+沫
+沭
+沮
+沱
+河
+沸
+油
+治
+沼
+沽
+沾
+沿
+況
+泄
+泉
+泊
+泌
+泓
+法
+泗
+泛
+泞
+泠
+泡
+波
+泣
+泥
+注
+泪
+泫
+泮
+泯
+泰
+泱
+泳
+泵
+泷
+泸
+泻
+泼
+泽
+泾
+洁
+洄
+洋
+洒
+洗
+洙
+洛
+洞
+津
+洩
+洪
+洮
+洱
+洲
+洵
+洶
+洸
+洹
+活
+洼
+洽
+派
+流
+浃
+浄
+浅
+浆
+浇
+浊
+测
+济
+浏
+浑
+浒
+浓
+浔
+浙
+浚
+浜
+浣
+浦
+浩
+浪
+浬
+浮
+浯
+浴
+海
+浸
+涂
+涅
+涇
+消
+涉
+涌
+涎
+涓
+涔
+涕
+涙
+涛
+涝
+涞
+涟
+涠
+涡
+涣
+涤
+润
+涧
+涨
+涩
+涪
+涮
+涯
+液
+涵
+涸
+涼
+涿
+淀
+淄
+淅
+淆
+淇
+淋
+淌
+淑
+淒
+淖
+淘
+淙
+淚
+淞
+淡
+淤
+淦
+淨
+淩
+淪
+淫
+淬
+淮
+深
+淳
+淵
+混
+淹
+淺
+添
+淼
+清
+済
+渉
+渊
+渋
+渍
+渎
+渐
+渔
+渗
+渙
+渚
+減
+渝
+渠
+渡
+渣
+渤
+渥
+渦
+温
+測
+渭
+港
+渲
+渴
+游
+渺
+渾
+湃
+湄
+湊
+湍
+湖
+湘
+湛
+湟
+湧
+湫
+湮
+湯
+湳
+湾
+湿
+満
+溃
+溅
+溉
+溏
+源
+準
+溜
+溝
+溟
+溢
+溥
+溧
+溪
+溫
+溯
+溱
+溴
+溶
+溺
+溼
+滁
+滂
+滄
+滅
+滇
+滋
+滌
+滑
+滓
+滔
+滕
+滙
+滚
+滝
+滞
+滟
+满
+滢
+滤
+滥
+滦
+滨
+滩
+滬
+滯
+滲
+滴
+滷
+滸
+滾
+滿
+漁
+漂
+漆
+漉
+漏
+漓
+演
+漕
+漠
+漢
+漣
+漩
+漪
+漫
+漬
+漯
+漱
+漲
+漳
+漸
+漾
+漿
+潆
+潇
+潋
+潍
+潑
+潔
+潘
+潛
+潜
+潞
+潟
+潢
+潤
+潦
+潧
+潭
+潮
+潰
+潴
+潸
+潺
+潼
+澀
+澄
+澆
+澈
+澍
+澎
+澗
+澜
+澡
+澤
+澧
+澱
+澳
+澹
+激
+濁
+濂
+濃
+濑
+濒
+濕
+濘
+濛
+濟
+濠
+濡
+濤
+濫
+濬
+濮
+濯
+濱
+濺
+濾
+瀅
+瀆
+瀉
+瀋
+瀏
+瀑
+瀕
+瀘
+瀚
+瀛
+瀝
+瀞
+瀟
+瀧
+瀨
+瀬
+瀰
+瀾
+灌
+灏
+灑
+灘
+灝
+灞
+灣
+火
+灬
+灭
+灯
+灰
+灵
+灶
+灸
+灼
+災
+灾
+灿
+炀
+炁
+炅
+炉
+炊
+炎
+炒
+炔
+炕
+炖
+炙
+炜
+炫
+炬
+炭
+炮
+炯
+炳
+炷
+炸
+点
+為
+炼
+炽
+烁
+烂
+烃
+烈
+烊
+烏
+烘
+烙
+烛
+烟
+烤
+烦
+烧
+烨
+烩
+烫
+烬
+热
+烯
+烷
+烹
+烽
+焉
+焊
+焕
+焖
+焗
+焘
+焙
+焚
+焜
+無
+焦
+焯
+焰
+焱
+然
+焼
+煅
+煉
+煊
+煌
+煎
+煒
+煖
+煙
+煜
+煞
+煤
+煥
+煦
+照
+煨
+煩
+煮
+煲
+煸
+煽
+熄
+熊
+熏
+熒
+熔
+熙
+熟
+熠
+熨
+熬
+熱
+熵
+熹
+熾
+燁
+燃
+燄
+燈
+燉
+燊
+燎
+燒
+燔
+燕
+燙
+燜
+營
+燥
+燦
+燧
+燭
+燮
+燴
+燻
+燼
+燿
+爆
+爍
+爐
+爛
+爪
+爬
+爭
+爰
+爱
+爲
+爵
+父
+爷
+爸
+爹
+爺
+爻
+爽
+爾
+牆
+片
+版
+牌
+牍
+牒
+牙
+牛
+牝
+牟
+牠
+牡
+牢
+牦
+牧
+物
+牯
+牲
+牴
+牵
+特
+牺
+牽
+犀
+犁
+犄
+犊
+犍
+犒
+犢
+犧
+犬
+犯
+状
+犷
+犸
+犹
+狀
+狂
+狄
+狈
+狎
+狐
+狒
+狗
+狙
+狞
+狠
+狡
+狩
+独
+狭
+狮
+狰
+狱
+狸
+狹
+狼
+狽
+猎
+猕
+猖
+猗
+猙
+猛
+猜
+猝
+猥
+猩
+猪
+猫
+猬
+献
+猴
+猶
+猷
+猾
+猿
+獄
+獅
+獎
+獐
+獒
+獗
+獠
+獣
+獨
+獭
+獰
+獲
+獵
+獷
+獸
+獺
+獻
+獼
+獾
+玄
+率
+玉
+王
+玑
+玖
+玛
+玟
+玠
+玥
+玩
+玫
+玮
+环
+现
+玲
+玳
+玷
+玺
+玻
+珀
+珂
+珅
+珈
+珉
+珊
+珍
+珏
+珐
+珑
+珙
+珞
+珠
+珣
+珥
+珩
+珪
+班
+珮
+珲
+珺
+現
+球
+琅
+理
+琇
+琉
+琊
+琍
+琏
+琐
+琛
+琢
+琥
+琦
+琨
+琪
+琬
+琮
+琰
+琲
+琳
+琴
+琵
+琶
+琺
+琼
+瑀
+瑁
+瑄
+瑋
+瑕
+瑗
+瑙
+瑚
+瑛
+瑜
+瑞
+瑟
+瑠
+瑣
+瑤
+瑩
+瑪
+瑯
+瑰
+瑶
+瑾
+璀
+璁
+璃
+璇
+璉
+璋
+璎
+璐
+璜
+璞
+璟
+璧
+璨
+環
+璽
+璿
+瓊
+瓏
+瓒
+瓜
+瓢
+瓣
+瓤
+瓦
+瓮
+瓯
+瓴
+瓶
+瓷
+甄
+甌
+甕
+甘
+甙
+甚
+甜
+生
+產
+産
+甥
+甦
+用
+甩
+甫
+甬
+甭
+甯
+田
+由
+甲
+申
+电
+男
+甸
+町
+画
+甾
+畀
+畅
+界
+畏
+畑
+畔
+留
+畜
+畝
+畢
+略
+畦
+番
+畫
+異
+畲
+畳
+畴
+當
+畸
+畹
+畿
+疆
+疇
+疊
+疏
+疑
+疔
+疖
+疗
+疙
+疚
+疝
+疟
+疡
+疣
+疤
+疥
+疫
+疮
+疯
+疱
+疲
+疳
+疵
+疸
+疹
+疼
+疽
+疾
+痂
+病
+症
+痈
+痉
+痊
+痍
+痒
+痔
+痕
+痘
+痙
+痛
+痞
+痠
+痢
+痣
+痤
+痧
+痨
+痪
+痫
+痰
+痱
+痴
+痹
+痺
+痼
+痿
+瘀
+瘁
+瘋
+瘍
+瘓
+瘘
+瘙
+瘟
+瘠
+瘡
+瘢
+瘤
+瘦
+瘧
+瘩
+瘪
+瘫
+瘴
+瘸
+瘾
+療
+癇
+癌
+癒
+癖
+癜
+癞
+癡
+癢
+癣
+癥
+癫
+癬
+癮
+癱
+癲
+癸
+発
+登
+發
+白
+百
+皂
+的
+皆
+皇
+皈
+皋
+皎
+皑
+皓
+皖
+皙
+皚
+皮
+皰
+皱
+皴
+皺
+皿
+盂
+盃
+盅
+盆
+盈
+益
+盎
+盏
+盐
+监
+盒
+盔
+盖
+盗
+盘
+盛
+盜
+盞
+盟
+盡
+監
+盤
+盥
+盧
+盪
+目
+盯
+盱
+盲
+直
+相
+盹
+盼
+盾
+省
+眈
+眉
+看
+県
+眙
+眞
+真
+眠
+眦
+眨
+眩
+眯
+眶
+眷
+眸
+眺
+眼
+眾
+着
+睁
+睇
+睏
+睐
+睑
+睛
+睜
+睞
+睡
+睢
+督
+睥
+睦
+睨
+睪
+睫
+睬
+睹
+睽
+睾
+睿
+瞄
+瞅
+瞇
+瞋
+瞌
+瞎
+瞑
+瞒
+瞓
+瞞
+瞟
+瞠
+瞥
+瞧
+瞩
+瞪
+瞬
+瞭
+瞰
+瞳
+瞻
+瞼
+瞿
+矇
+矍
+矗
+矚
+矛
+矜
+矢
+矣
+知
+矩
+矫
+短
+矮
+矯
+石
+矶
+矽
+矾
+矿
+码
+砂
+砌
+砍
+砒
+研
+砖
+砗
+砚
+砝
+砣
+砥
+砧
+砭
+砰
+砲
+破
+砷
+砸
+砺
+砼
+砾
+础
+硅
+硐
+硒
+硕
+硝
+硫
+硬
+确
+硯
+硼
+碁
+碇
+碉
+碌
+碍
+碎
+碑
+碓
+碗
+碘
+碚
+碛
+碟
+碣
+碧
+碩
+碰
+碱
+碳
+碴
+確
+碼
+碾
+磁
+磅
+磊
+磋
+磐
+磕
+磚
+磡
+磨
+磬
+磯
+磲
+磷
+磺
+礁
+礎
+礙
+礡
+礦
+礪
+礫
+礴
+示
+礼
+社
+祀
+祁
+祂
+祇
+祈
+祉
+祎
+祐
+祕
+祖
+祗
+祚
+祛
+祜
+祝
+神
+祟
+祠
+祢
+祥
+票
+祭
+祯
+祷
+祸
+祺
+祿
+禀
+禁
+禄
+禅
+禍
+禎
+福
+禛
+禦
+禧
+禪
+禮
+禱
+禹
+禺
+离
+禽
+禾
+禿
+秀
+私
+秃
+秆
+秉
+秋
+种
+科
+秒
+秘
+租
+秣
+秤
+秦
+秧
+秩
+秭
+积
+称
+秸
+移
+秽
+稀
+稅
+程
+稍
+税
+稔
+稗
+稚
+稜
+稞
+稟
+稠
+稣
+種
+稱
+稲
+稳
+稷
+稹
+稻
+稼
+稽
+稿
+穀
+穂
+穆
+穌
+積
+穎
+穗
+穢
+穩
+穫
+穴
+究
+穷
+穹
+空
+穿
+突
+窃
+窄
+窈
+窍
+窑
+窒
+窓
+窕
+窖
+窗
+窘
+窜
+窝
+窟
+窠
+窥
+窦
+窨
+窩
+窪
+窮
+窯
+窺
+窿
+竄
+竅
+竇
+竊
+立
+竖
+站
+竜
+竞
+竟
+章
+竣
+童
+竭
+端
+競
+竹
+竺
+竽
+竿
+笃
+笆
+笈
+笋
+笏
+笑
+笔
+笙
+笛
+笞
+笠
+符
+笨
+第
+笹
+笺
+笼
+筆
+等
+筊
+筋
+筍
+筏
+筐
+筑
+筒
+答
+策
+筛
+筝
+筠
+筱
+筲
+筵
+筷
+筹
+签
+简
+箇
+箋
+箍
+箏
+箐
+箔
+箕
+算
+箝
+管
+箩
+箫
+箭
+箱
+箴
+箸
+節
+篁
+範
+篆
+篇
+築
+篑
+篓
+篙
+篝
+篠
+篡
+篤
+篩
+篪
+篮
+篱
+篷
+簇
+簌
+簍
+簡
+簦
+簧
+簪
+簫
+簷
+簸
+簽
+簾
+簿
+籁
+籃
+籌
+籍
+籐
+籟
+籠
+籤
+籬
+籮
+籲
+米
+类
+籼
+籽
+粄
+粉
+粑
+粒
+粕
+粗
+粘
+粟
+粤
+粥
+粧
+粪
+粮
+粱
+粲
+粳
+粵
+粹
+粼
+粽
+精
+粿
+糅
+糊
+糍
+糕
+糖
+糗
+糙
+糜
+糞
+糟
+糠
+糧
+糬
+糯
+糰
+糸
+系
+糾
+紀
+紂
+約
+紅
+紉
+紊
+紋
+納
+紐
+紓
+純
+紗
+紘
+紙
+級
+紛
+紜
+素
+紡
+索
+紧
+紫
+紮
+累
+細
+紳
+紹
+紺
+終
+絃
+組
+絆
+経
+結
+絕
+絞
+絡
+絢
+給
+絨
+絮
+統
+絲
+絳
+絵
+絶
+絹
+綁
+綏
+綑
+經
+継
+続
+綜
+綠
+綢
+綦
+綫
+綬
+維
+綱
+網
+綴
+綵
+綸
+綺
+綻
+綽
+綾
+綿
+緊
+緋
+総
+緑
+緒
+緘
+線
+緝
+緞
+締
+緣
+編
+緩
+緬
+緯
+練
+緹
+緻
+縁
+縄
+縈
+縛
+縝
+縣
+縫
+縮
+縱
+縴
+縷
+總
+績
+繁
+繃
+繆
+繇
+繋
+織
+繕
+繚
+繞
+繡
+繩
+繪
+繫
+繭
+繳
+繹
+繼
+繽
+纂
+續
+纍
+纏
+纓
+纔
+纖
+纜
+纠
+红
+纣
+纤
+约
+级
+纨
+纪
+纫
+纬
+纭
+纯
+纰
+纱
+纲
+纳
+纵
+纶
+纷
+纸
+纹
+纺
+纽
+纾
+线
+绀
+练
+组
+绅
+细
+织
+终
+绊
+绍
+绎
+经
+绑
+绒
+结
+绔
+绕
+绘
+给
+绚
+绛
+络
+绝
+绞
+统
+绡
+绢
+绣
+绥
+绦
+继
+绩
+绪
+绫
+续
+绮
+绯
+绰
+绳
+维
+绵
+绶
+绷
+绸
+绻
+综
+绽
+绾
+绿
+缀
+缄
+缅
+缆
+缇
+缈
+缉
+缎
+缓
+缔
+缕
+编
+缘
+缙
+缚
+缜
+缝
+缠
+缢
+缤
+缥
+缨
+缩
+缪
+缭
+缮
+缰
+缱
+缴
+缸
+缺
+缽
+罂
+罄
+罌
+罐
+网
+罔
+罕
+罗
+罚
+罡
+罢
+罩
+罪
+置
+罰
+署
+罵
+罷
+罹
+羁
+羅
+羈
+羊
+羌
+美
+羔
+羚
+羞
+羟
+羡
+羣
+群
+羥
+羧
+羨
+義
+羯
+羲
+羸
+羹
+羽
+羿
+翁
+翅
+翊
+翌
+翎
+習
+翔
+翘
+翟
+翠
+翡
+翦
+翩
+翰
+翱
+翳
+翹
+翻
+翼
+耀
+老
+考
+耄
+者
+耆
+耋
+而
+耍
+耐
+耒
+耕
+耗
+耘
+耙
+耦
+耨
+耳
+耶
+耷
+耸
+耻
+耽
+耿
+聂
+聆
+聊
+聋
+职
+聒
+联
+聖
+聘
+聚
+聞
+聪
+聯
+聰
+聲
+聳
+聴
+聶
+職
+聽
+聾
+聿
+肃
+肄
+肅
+肆
+肇
+肉
+肋
+肌
+肏
+肓
+肖
+肘
+肚
+肛
+肝
+肠
+股
+肢
+肤
+肥
+肩
+肪
+肮
+肯
+肱
+育
+肴
+肺
+肽
+肾
+肿
+胀
+胁
+胃
+胄
+胆
+背
+胍
+胎
+胖
+胚
+胛
+胜
+胝
+胞
+胡
+胤
+胥
+胧
+胫
+胭
+胯
+胰
+胱
+胳
+胴
+胶
+胸
+胺
+能
+脂
+脅
+脆
+脇
+脈
+脉
+脊
+脍
+脏
+脐
+脑
+脓
+脖
+脘
+脚
+脛
+脣
+脩
+脫
+脯
+脱
+脲
+脳
+脸
+脹
+脾
+腆
+腈
+腊
+腋
+腌
+腎
+腐
+腑
+腓
+腔
+腕
+腥
+腦
+腩
+腫
+腭
+腮
+腰
+腱
+腳
+腴
+腸
+腹
+腺
+腻
+腼
+腾
+腿
+膀
+膈
+膊
+膏
+膑
+膘
+膚
+膛
+膜
+膝
+膠
+膦
+膨
+膩
+膳
+膺
+膻
+膽
+膾
+膿
+臀
+臂
+臃
+臆
+臉
+臊
+臍
+臓
+臘
+臟
+臣
+臥
+臧
+臨
+自
+臬
+臭
+至
+致
+臺
+臻
+臼
+臾
+舀
+舂
+舅
+舆
+與
+興
+舉
+舊
+舌
+舍
+舎
+舐
+舒
+舔
+舖
+舗
+舛
+舜
+舞
+舟
+航
+舫
+般
+舰
+舱
+舵
+舶
+舷
+舸
+船
+舺
+舾
+艇
+艋
+艘
+艙
+艦
+艮
+良
+艰
+艱
+色
+艳
+艷
+艹
+艺
+艾
+节
+芃
+芈
+芊
+芋
+芍
+芎
+芒
+芙
+芜
+芝
+芡
+芥
+芦
+芩
+芪
+芫
+芬
+芭
+芮
+芯
+花
+芳
+芷
+芸
+芹
+芻
+芽
+芾
+苁
+苄
+苇
+苋
+苍
+苏
+苑
+苒
+苓
+苔
+苕
+苗
+苛
+苜
+苞
+苟
+苡
+苣
+若
+苦
+苫
+苯
+英
+苷
+苹
+苻
+茁
+茂
+范
+茄
+茅
+茉
+茎
+茏
+茗
+茜
+茧
+茨
+茫
+茬
+茭
+茯
+茱
+茲
+茴
+茵
+茶
+茸
+茹
+茼
+荀
+荃
+荆
+草
+荊
+荏
+荐
+荒
+荔
+荖
+荘
+荚
+荞
+荟
+荠
+荡
+荣
+荤
+荥
+荧
+荨
+荪
+荫
+药
+荳
+荷
+荸
+荻
+荼
+荽
+莅
+莆
+莉
+莊
+莎
+莒
+莓
+莖
+莘
+莞
+莠
+莢
+莧
+莪
+莫
+莱
+莲
+莴
+获
+莹
+莺
+莽
+莿
+菀
+菁
+菅
+菇
+菈
+菊
+菌
+菏
+菓
+菖
+菘
+菜
+菟
+菠
+菡
+菩
+華
+菱
+菲
+菸
+菽
+萁
+萃
+萄
+萊
+萋
+萌
+萍
+萎
+萘
+萝
+萤
+营
+萦
+萧
+萨
+萩
+萬
+萱
+萵
+萸
+萼
+落
+葆
+葉
+著
+葚
+葛
+葡
+董
+葦
+葩
+葫
+葬
+葭
+葯
+葱
+葳
+葵
+葷
+葺
+蒂
+蒋
+蒐
+蒔
+蒙
+蒜
+蒞
+蒟
+蒡
+蒨
+蒲
+蒸
+蒹
+蒻
+蒼
+蒿
+蓁
+蓄
+蓆
+蓉
+蓋
+蓑
+蓓
+蓖
+蓝
+蓟
+蓦
+蓬
+蓮
+蓼
+蓿
+蔑
+蔓
+蔔
+蔗
+蔘
+蔚
+蔡
+蔣
+蔥
+蔫
+蔬
+蔭
+蔵
+蔷
+蔺
+蔻
+蔼
+蔽
+蕁
+蕃
+蕈
+蕉
+蕊
+蕎
+蕙
+蕤
+蕨
+蕩
+蕪
+蕭
+蕲
+蕴
+蕻
+蕾
+薄
+薅
+薇
+薈
+薊
+薏
+薑
+薔
+薙
+薛
+薦
+薨
+薩
+薪
+薬
+薯
+薰
+薹
+藉
+藍
+藏
+藐
+藓
+藕
+藜
+藝
+藤
+藥
+藩
+藹
+藻
+藿
+蘆
+蘇
+蘊
+蘋
+蘑
+蘚
+蘭
+蘸
+蘼
+蘿
+虎
+虏
+虐
+虑
+虔
+處
+虚
+虛
+虜
+虞
+號
+虢
+虧
+虫
+虬
+虱
+虹
+虻
+虽
+虾
+蚀
+蚁
+蚂
+蚊
+蚌
+蚓
+蚕
+蚜
+蚝
+蚣
+蚤
+蚩
+蚪
+蚯
+蚱
+蚵
+蛀
+蛆
+蛇
+蛊
+蛋
+蛎
+蛐
+蛔
+蛙
+蛛
+蛟
+蛤
+蛭
+蛮
+蛰
+蛳
+蛹
+蛻
+蛾
+蜀
+蜂
+蜃
+蜆
+蜇
+蜈
+蜊
+蜍
+蜒
+蜓
+蜕
+蜗
+蜘
+蜚
+蜜
+蜡
+蜢
+蜥
+蜱
+蜴
+蜷
+蜻
+蜿
+蝇
+蝈
+蝉
+蝌
+蝎
+蝕
+蝗
+蝙
+蝟
+蝠
+蝦
+蝨
+蝴
+蝶
+蝸
+蝼
+螂
+螃
+融
+螞
+螢
+螨
+螯
+螳
+螺
+蟀
+蟄
+蟆
+蟋
+蟎
+蟑
+蟒
+蟠
+蟬
+蟲
+蟹
+蟻
+蟾
+蠅
+蠍
+蠔
+蠕
+蠛
+蠟
+蠡
+蠢
+蠣
+蠱
+蠶
+蠹
+蠻
+血
+衄
+衅
+衆
+行
+衍
+術
+衔
+街
+衙
+衛
+衝
+衞
+衡
+衢
+衣
+补
+表
+衩
+衫
+衬
+衮
+衰
+衲
+衷
+衹
+衾
+衿
+袁
+袂
+袄
+袅
+袈
+袋
+袍
+袒
+袖
+袜
+袞
+袤
+袪
+被
+袭
+袱
+裁
+裂
+装
+裆
+裊
+裏
+裔
+裕
+裘
+裙
+補
+裝
+裟
+裡
+裤
+裨
+裱
+裳
+裴
+裸
+裹
+製
+裾
+褂
+複
+褐
+褒
+褓
+褔
+褚
+褥
+褪
+褫
+褲
+褶
+褻
+襁
+襄
+襟
+襠
+襪
+襬
+襯
+襲
+西
+要
+覃
+覆
+覇
+見
+規
+覓
+視
+覚
+覦
+覧
+親
+覬
+観
+覷
+覺
+覽
+觀
+见
+观
+规
+觅
+视
+览
+觉
+觊
+觎
+觐
+觑
+角
+觞
+解
+觥
+触
+觸
+言
+訂
+計
+訊
+討
+訓
+訕
+訖
+託
+記
+訛
+訝
+訟
+訣
+訥
+訪
+設
+許
+訳
+訴
+訶
+診
+註
+証
+詆
+詐
+詔
+評
+詛
+詞
+詠
+詡
+詢
+詣
+試
+詩
+詫
+詬
+詭
+詮
+詰
+話
+該
+詳
+詹
+詼
+誅
+誇
+誉
+誌
+認
+誓
+誕
+誘
+語
+誠
+誡
+誣
+誤
+誥
+誦
+誨
+說
+説
+読
+誰
+課
+誹
+誼
+調
+諄
+談
+請
+諏
+諒
+論
+諗
+諜
+諡
+諦
+諧
+諫
+諭
+諮
+諱
+諳
+諷
+諸
+諺
+諾
+謀
+謁
+謂
+謄
+謊
+謎
+謐
+謔
+謗
+謙
+講
+謝
+謠
+謨
+謬
+謹
+謾
+譁
+證
+譎
+譏
+識
+譙
+譚
+譜
+警
+譬
+譯
+議
+譲
+譴
+護
+譽
+讀
+變
+讓
+讚
+讞
+计
+订
+认
+讥
+讧
+讨
+让
+讪
+讫
+训
+议
+讯
+记
+讲
+讳
+讴
+讶
+讷
+许
+讹
+论
+讼
+讽
+设
+访
+诀
+证
+诃
+评
+诅
+识
+诈
+诉
+诊
+诋
+词
+诏
+译
+试
+诗
+诘
+诙
+诚
+诛
+话
+诞
+诟
+诠
+诡
+询
+诣
+诤
+该
+详
+诧
+诩
+诫
+诬
+语
+误
+诰
+诱
+诲
+说
+诵
+诶
+请
+诸
+诺
+读
+诽
+课
+诿
+谀
+谁
+调
+谄
+谅
+谆
+谈
+谊
+谋
+谌
+谍
+谎
+谏
+谐
+谑
+谒
+谓
+谔
+谕
+谗
+谘
+谙
+谚
+谛
+谜
+谟
+谢
+谣
+谤
+谥
+谦
+谧
+谨
+谩
+谪
+谬
+谭
+谯
+谱
+谲
+谴
+谶
+谷
+豁
+豆
+豇
+豈
+豉
+豊
+豌
+豎
+豐
+豔
+豚
+象
+豢
+豪
+豫
+豬
+豹
+豺
+貂
+貅
+貌
+貓
+貔
+貘
+貝
+貞
+負
+財
+貢
+貧
+貨
+販
+貪
+貫
+責
+貯
+貰
+貳
+貴
+貶
+買
+貸
+費
+貼
+貽
+貿
+賀
+賁
+賂
+賃
+賄
+資
+賈
+賊
+賑
+賓
+賜
+賞
+賠
+賡
+賢
+賣
+賤
+賦
+質
+賬
+賭
+賴
+賺
+購
+賽
+贅
+贈
+贊
+贍
+贏
+贓
+贖
+贛
+贝
+贞
+负
+贡
+财
+责
+贤
+败
+账
+货
+质
+贩
+贪
+贫
+贬
+购
+贮
+贯
+贰
+贱
+贲
+贴
+贵
+贷
+贸
+费
+贺
+贻
+贼
+贾
+贿
+赁
+赂
+赃
+资
+赅
+赈
+赊
+赋
+赌
+赎
+赏
+赐
+赓
+赔
+赖
+赘
+赚
+赛
+赝
+赞
+赠
+赡
+赢
+赣
+赤
+赦
+赧
+赫
+赭
+走
+赳
+赴
+赵
+赶
+起
+趁
+超
+越
+趋
+趕
+趙
+趟
+趣
+趨
+足
+趴
+趵
+趸
+趺
+趾
+跃
+跄
+跆
+跋
+跌
+跎
+跑
+跖
+跚
+跛
+距
+跟
+跡
+跤
+跨
+跩
+跪
+路
+跳
+践
+跷
+跹
+跺
+跻
+踉
+踊
+踌
+踏
+踐
+踝
+踞
+踟
+踢
+踩
+踪
+踮
+踱
+踴
+踵
+踹
+蹂
+蹄
+蹇
+蹈
+蹉
+蹊
+蹋
+蹑
+蹒
+蹙
+蹟
+蹣
+蹤
+蹦
+蹩
+蹬
+蹭
+蹲
+蹴
+蹶
+蹺
+蹼
+蹿
+躁
+躇
+躉
+躊
+躋
+躍
+躏
+躪
+身
+躬
+躯
+躲
+躺
+軀
+車
+軋
+軌
+軍
+軒
+軟
+転
+軸
+軼
+軽
+軾
+較
+載
+輒
+輓
+輔
+輕
+輛
+輝
+輟
+輩
+輪
+輯
+輸
+輻
+輾
+輿
+轄
+轅
+轆
+轉
+轍
+轎
+轟
+车
+轧
+轨
+轩
+转
+轭
+轮
+软
+轰
+轲
+轴
+轶
+轻
+轼
+载
+轿
+较
+辄
+辅
+辆
+辇
+辈
+辉
+辊
+辍
+辐
+辑
+输
+辕
+辖
+辗
+辘
+辙
+辛
+辜
+辞
+辟
+辣
+辦
+辨
+辩
+辫
+辭
+辮
+辯
+辰
+辱
+農
+边
+辺
+辻
+込
+辽
+达
+迁
+迂
+迄
+迅
+过
+迈
+迎
+运
+近
+返
+还
+这
+进
+远
+违
+连
+迟
+迢
+迤
+迥
+迦
+迩
+迪
+迫
+迭
+述
+迴
+迷
+迸
+迹
+迺
+追
+退
+送
+适
+逃
+逅
+逆
+选
+逊
+逍
+透
+逐
+递
+途
+逕
+逗
+這
+通
+逛
+逝
+逞
+速
+造
+逢
+連
+逮
+週
+進
+逵
+逶
+逸
+逻
+逼
+逾
+遁
+遂
+遅
+遇
+遊
+運
+遍
+過
+遏
+遐
+遑
+遒
+道
+達
+違
+遗
+遙
+遛
+遜
+遞
+遠
+遢
+遣
+遥
+遨
+適
+遭
+遮
+遲
+遴
+遵
+遶
+遷
+選
+遺
+遼
+遽
+避
+邀
+邁
+邂
+邃
+還
+邇
+邈
+邊
+邋
+邏
+邑
+邓
+邕
+邛
+邝
+邢
+那
+邦
+邨
+邪
+邬
+邮
+邯
+邰
+邱
+邳
+邵
+邸
+邹
+邺
+邻
+郁
+郅
+郊
+郎
+郑
+郜
+郝
+郡
+郢
+郤
+郦
+郧
+部
+郫
+郭
+郴
+郵
+郷
+郸
+都
+鄂
+鄉
+鄒
+鄔
+鄙
+鄞
+鄢
+鄧
+鄭
+鄰
+鄱
+鄲
+鄺
+酉
+酊
+酋
+酌
+配
+酐
+酒
+酗
+酚
+酝
+酢
+酣
+酥
+酩
+酪
+酬
+酮
+酯
+酰
+酱
+酵
+酶
+酷
+酸
+酿
+醃
+醇
+醉
+醋
+醍
+醐
+醒
+醚
+醛
+醜
+醞
+醣
+醪
+醫
+醬
+醮
+醯
+醴
+醺
+釀
+釁
+采
+釉
+释
+釋
+里
+重
+野
+量
+釐
+金
+釗
+釘
+釜
+針
+釣
+釦
+釧
+釵
+鈀
+鈉
+鈍
+鈎
+鈔
+鈕
+鈞
+鈣
+鈦
+鈪
+鈴
+鈺
+鈾
+鉀
+鉄
+鉅
+鉉
+鉑
+鉗
+鉚
+鉛
+鉤
+鉴
+鉻
+銀
+銃
+銅
+銑
+銓
+銖
+銘
+銜
+銬
+銭
+銮
+銳
+銷
+銹
+鋁
+鋅
+鋒
+鋤
+鋪
+鋰
+鋸
+鋼
+錄
+錐
+錘
+錚
+錠
+錢
+錦
+錨
+錫
+錮
+錯
+録
+錳
+錶
+鍊
+鍋
+鍍
+鍛
+鍥
+鍰
+鍵
+鍺
+鍾
+鎂
+鎊
+鎌
+鎏
+鎔
+鎖
+鎗
+鎚
+鎧
+鎬
+鎮
+鎳
+鏈
+鏖
+鏗
+鏘
+鏞
+鏟
+鏡
+鏢
+鏤
+鏽
+鐘
+鐮
+鐲
+鐳
+鐵
+鐸
+鐺
+鑄
+鑊
+鑑
+鑒
+鑣
+鑫
+鑰
+鑲
+鑼
+鑽
+鑾
+鑿
+针
+钉
+钊
+钎
+钏
+钒
+钓
+钗
+钙
+钛
+钜
+钝
+钞
+钟
+钠
+钡
+钢
+钣
+钤
+钥
+钦
+钧
+钨
+钩
+钮
+钯
+钰
+钱
+钳
+钴
+钵
+钺
+钻
+钼
+钾
+钿
+铀
+铁
+铂
+铃
+铄
+铅
+铆
+铉
+铎
+铐
+铛
+铜
+铝
+铠
+铡
+铢
+铣
+铤
+铨
+铩
+铬
+铭
+铮
+铰
+铲
+铵
+银
+铸
+铺
+链
+铿
+销
+锁
+锂
+锄
+锅
+锆
+锈
+锉
+锋
+锌
+锏
+锐
+锑
+错
+锚
+锟
+锡
+锢
+锣
+锤
+锥
+锦
+锭
+键
+锯
+锰
+锲
+锵
+锹
+锺
+锻
+镀
+镁
+镂
+镇
+镉
+镌
+镍
+镐
+镑
+镕
+镖
+镗
+镛
+镜
+镣
+镭
+镯
+镰
+镳
+镶
+長
+长
+門
+閃
+閉
+開
+閎
+閏
+閑
+閒
+間
+閔
+閘
+閡
+関
+閣
+閥
+閨
+閩
+閱
+閲
+閹
+閻
+閾
+闆
+闇
+闊
+闌
+闍
+闔
+闕
+闖
+闘
+關
+闡
+闢
+门
+闪
+闫
+闭
+问
+闯
+闰
+闲
+间
+闵
+闷
+闸
+闹
+闺
+闻
+闽
+闾
+阀
+阁
+阂
+阅
+阆
+阇
+阈
+阉
+阎
+阐
+阑
+阔
+阕
+阖
+阙
+阚
+阜
+队
+阡
+阪
+阮
+阱
+防
+阳
+阴
+阵
+阶
+阻
+阿
+陀
+陂
+附
+际
+陆
+陇
+陈
+陋
+陌
+降
+限
+陕
+陛
+陝
+陞
+陟
+陡
+院
+陣
+除
+陨
+险
+陪
+陰
+陲
+陳
+陵
+陶
+陷
+陸
+険
+陽
+隅
+隆
+隈
+隊
+隋
+隍
+階
+随
+隐
+隔
+隕
+隘
+隙
+際
+障
+隠
+隣
+隧
+隨
+險
+隱
+隴
+隶
+隸
+隻
+隼
+隽
+难
+雀
+雁
+雄
+雅
+集
+雇
+雉
+雋
+雌
+雍
+雎
+雏
+雑
+雒
+雕
+雖
+雙
+雛
+雜
+雞
+離
+難
+雨
+雪
+雯
+雰
+雲
+雳
+零
+雷
+雹
+電
+雾
+需
+霁
+霄
+霆
+震
+霈
+霉
+霊
+霍
+霎
+霏
+霑
+霓
+霖
+霜
+霞
+霧
+霭
+霰
+露
+霸
+霹
+霽
+霾
+靂
+靄
+靈
+青
+靓
+靖
+静
+靚
+靛
+靜
+非
+靠
+靡
+面
+靥
+靦
+革
+靳
+靴
+靶
+靼
+鞅
+鞋
+鞍
+鞏
+鞑
+鞘
+鞠
+鞣
+鞦
+鞭
+韆
+韋
+韌
+韓
+韜
+韦
+韧
+韩
+韬
+韭
+音
+韵
+韶
+韻
+響
+頁
+頂
+頃
+項
+順
+須
+頌
+預
+頑
+頒
+頓
+頗
+領
+頜
+頡
+頤
+頫
+頭
+頰
+頷
+頸
+頹
+頻
+頼
+顆
+題
+額
+顎
+顏
+顔
+願
+顛
+類
+顧
+顫
+顯
+顱
+顴
+页
+顶
+顷
+项
+顺
+须
+顼
+顽
+顾
+顿
+颁
+颂
+预
+颅
+领
+颇
+颈
+颉
+颊
+颌
+颍
+颐
+频
+颓
+颔
+颖
+颗
+题
+颚
+颛
+颜
+额
+颞
+颠
+颡
+颢
+颤
+颦
+颧
+風
+颯
+颱
+颳
+颶
+颼
+飄
+飆
+风
+飒
+飓
+飕
+飘
+飙
+飚
+飛
+飞
+食
+飢
+飨
+飩
+飪
+飯
+飲
+飼
+飽
+飾
+餃
+餅
+餉
+養
+餌
+餐
+餒
+餓
+餘
+餚
+餛
+餞
+餡
+館
+餮
+餵
+餾
+饅
+饈
+饋
+饌
+饍
+饑
+饒
+饕
+饗
+饞
+饥
+饨
+饪
+饬
+饭
+饮
+饯
+饰
+饱
+饲
+饴
+饵
+饶
+饷
+饺
+饼
+饽
+饿
+馀
+馁
+馄
+馅
+馆
+馈
+馋
+馍
+馏
+馒
+馔
+首
+馗
+香
+馥
+馨
+馬
+馭
+馮
+馳
+馴
+駁
+駄
+駅
+駆
+駐
+駒
+駕
+駛
+駝
+駭
+駱
+駿
+騁
+騎
+騏
+験
+騙
+騨
+騰
+騷
+驀
+驅
+驊
+驍
+驒
+驕
+驗
+驚
+驛
+驟
+驢
+驥
+马
+驭
+驮
+驯
+驰
+驱
+驳
+驴
+驶
+驷
+驸
+驹
+驻
+驼
+驾
+驿
+骁
+骂
+骄
+骅
+骆
+骇
+骈
+骊
+骋
+验
+骏
+骐
+骑
+骗
+骚
+骛
+骜
+骞
+骠
+骡
+骤
+骥
+骧
+骨
+骯
+骰
+骶
+骷
+骸
+骼
+髂
+髅
+髋
+髏
+髒
+髓
+體
+髖
+高
+髦
+髪
+髮
+髯
+髻
+鬃
+鬆
+鬍
+鬓
+鬚
+鬟
+鬢
+鬣
+鬥
+鬧
+鬱
+鬼
+魁
+魂
+魄
+魅
+魇
+魍
+魏
+魔
+魘
+魚
+魯
+魷
+鮑
+鮨
+鮪
+鮭
+鮮
+鯉
+鯊
+鯖
+鯛
+鯨
+鯰
+鯽
+鰍
+鰓
+鰭
+鰲
+鰻
+鰾
+鱈
+鱉
+鱔
+鱗
+鱷
+鱸
+鱼
+鱿
+鲁
+鲈
+鲍
+鲑
+鲛
+鲜
+鲟
+鲢
+鲤
+鲨
+鲫
+鲱
+鲲
+鲶
+鲷
+鲸
+鳃
+鳄
+鳅
+鳌
+鳍
+鳕
+鳖
+鳗
+鳝
+鳞
+鳥
+鳩
+鳳
+鳴
+鳶
+鴉
+鴕
+鴛
+鴦
+鴨
+鴻
+鴿
+鵑
+鵜
+鵝
+鵡
+鵬
+鵰
+鵲
+鶘
+鶩
+鶯
+鶴
+鷗
+鷲
+鷹
+鷺
+鸚
+鸞
+鸟
+鸠
+鸡
+鸢
+鸣
+鸥
+鸦
+鸨
+鸪
+鸭
+鸯
+鸳
+鸵
+鸽
+鸾
+鸿
+鹂
+鹃
+鹄
+鹅
+鹈
+鹉
+鹊
+鹌
+鹏
+鹑
+鹕
+鹘
+鹜
+鹞
+鹤
+鹦
+鹧
+鹫
+鹭
+鹰
+鹳
+鹵
+鹹
+鹼
+鹽
+鹿
+麂
+麋
+麒
+麓
+麗
+麝
+麟
+麥
+麦
+麩
+麴
+麵
+麸
+麺
+麻
+麼
+麽
+麾
+黃
+黄
+黍
+黎
+黏
+黑
+黒
+黔
+默
+黛
+黜
+黝
+點
+黠
+黨
+黯
+黴
+鼋
+鼎
+鼐
+鼓
+鼠
+鼬
+鼹
+鼻
+鼾
+齁
+齊
+齋
+齐
+齒
+齡
+齢
+齣
+齦
+齿
+龄
+龅
+龈
+龊
+龋
+龌
+龍
+龐
+龔
+龕
+龙
+龚
+龛
+龜
+龟
+︰
+︱
+︶
+︿
+﹁
+﹂
+﹍
+﹏
+﹐
+﹑
+﹒
+﹔
+﹕
+﹖
+﹗
+﹙
+﹚
+﹝
+﹞
+﹡
+﹣
+!
+"
+#
+$
+%
+&
+'
+(
+)
+*
++
+,
+-
+.
+/
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+:
+;
+<
+=
+>
+?
+@
+[
+\
+]
+^
+_
+`
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+{
+|
+}
+~
+。
+「
+」
+、
+・
+ッ
+ー
+イ
+ク
+シ
+ス
+ト
+ノ
+フ
+ラ
+ル
+ン
+゙
+゚
+ ̄
+¥
+👍
+🔥
+😂
+😎
+...
+yam
+10
+2017
+12
+11
+2016
+20
+30
+15
+06
+lofter
+##s
+2015
+by
+16
+14
+18
+13
+24
+17
+2014
+21
+##0
+22
+19
+25
+23
+com
+100
+00
+05
+2013
+##a
+03
+09
+08
+28
+##2
+50
+01
+04
+##1
+27
+02
+2012
+##3
+26
+##e
+07
+##8
+##5
+##6
+##4
+##9
+##7
+29
+2011
+40
+##t
+2010
+##o
+##d
+##i
+2009
+##n
+app
+www
+the
+##m
+31
+##c
+##l
+##y
+##r
+##g
+2008
+60
+http
+200
+qq
+##p
+80
+##f
+google
+pixnet
+90
+cookies
+tripadvisor
+500
+##er
+##k
+35
+##h
+facebook
+2007
+2000
+70
+##b
+of
+##x
+##u
+45
+300
+iphone
+32
+1000
+2006
+48
+ip
+36
+in
+38
+3d
+##w
+##ing
+55
+ctrip
+##on
+##v
+33
+##の
+to
+34
+400
+id
+2005
+it
+37
+windows
+llc
+top
+99
+42
+39
+000
+led
+at
+##an
+41
+51
+52
+46
+49
+43
+53
+44
+##z
+android
+58
+and
+59
+2004
+56
+vr
+##か
+5000
+2003
+47
+blogthis
+twitter
+54
+##le
+150
+ok
+2018
+57
+75
+cn
+no
+ios
+##in
+##mm
+##00
+800
+on
+te
+3000
+65
+2001
+360
+95
+ig
+lv
+120
+##ng
+##を
+##us
+##に
+pc
+てす
+──
+600
+##te
+85
+2002
+88
+##ed
+html
+ncc
+wifi
+email
+64
+blog
+is
+##10
+##て
+mail
+online
+##al
+dvd
+##ic
+studio
+##は
+##℃
+##ia
+##と
+line
+vip
+72
+##q
+98
+##ce
+##en
+for
+##is
+##ra
+##es
+##j
+usb
+net
+cp
+1999
+asia
+4g
+##cm
+diy
+new
+3c
+##お
+ta
+66
+language
+vs
+apple
+tw
+86
+web
+##ne
+ipad
+62
+you
+##re
+101
+68
+##tion
+ps
+de
+bt
+pony
+atm
+##2017
+1998
+67
+##ch
+ceo
+##or
+go
+##na
+av
+pro
+cafe
+96
+pinterest
+97
+63
+pixstyleme3c
+##ta
+more
+said
+##2016
+1997
+mp3
+700
+##ll
+nba
+jun
+##20
+92
+tv
+1995
+pm
+61
+76
+nbsp
+250
+##ie
+linux
+##ma
+cd
+110
+hd
+##17
+78
+##ion
+77
+6000
+am
+##th
+##st
+94
+##se
+##et
+69
+180
+gdp
+my
+105
+81
+abc
+89
+flash
+79
+one
+93
+1990
+1996
+##ck
+gps
+##も
+##ly
+web885
+106
+2020
+91
+##ge
+4000
+1500
+xd
+boss
+isbn
+1994
+org
+##ry
+me
+love
+##11
+0fork
+73
+##12
+3g
+##ter
+##ar
+71
+82
+##la
+hotel
+130
+1970
+pk
+83
+87
+140
+ie
+##os
+##30
+##el
+74
+##50
+seo
+cpu
+##ml
+p2p
+84
+may
+##る
+sun
+tue
+internet
+cc
+posted
+youtube
+##at
+##ン
+##man
+ii
+##ル
+##15
+abs
+nt
+pdf
+yahoo
+ago
+1980
+##it
+news
+mac
+104
+##てす
+##me
+##り
+java
+1992
+spa
+##de
+##nt
+hk
+all
+plus
+la
+1993
+##mb
+##16
+##ve
+west
+##da
+160
+air
+##い
+##ps
+から
+##to
+1989
+logo
+htc
+php
+https
+fi
+momo
+##son
+sat
+##ke
+##80
+ebd
+suv
+wi
+day
+apk
+##88
+##um
+mv
+galaxy
+wiki
+or
+brake
+##ス
+1200
+する
+this
+1991
+mon
+##こ
+❤2017
+po
+##ない
+javascript
+life
+home
+june
+##ss
+system
+900
+##ー
+##0
+pp
+1988
+world
+fb
+4k
+br
+##as
+ic
+ai
+leonardo
+safari
+##60
+live
+free
+xx
+wed
+win7
+kiehl
+##co
+lg
+o2o
+##go
+us
+235
+1949
+mm
+しい
+vfm
+kanye
+##90
+##2015
+##id
+jr
+##ey
+123
+rss
+##sa
+##ro
+##am
+##no
+thu
+fri
+350
+##sh
+##ki
+103
+comments
+name
+##のて
+##pe
+##ine
+max
+1987
+8000
+uber
+##mi
+##ton
+wordpress
+office
+1986
+1985
+##ment
+107
+bd
+win10
+##ld
+##li
+gmail
+bb
+dior
+##rs
+##ri
+##rd
+##ます
+up
+cad
+##®
+dr
+して
+read
+##21
+をお
+##io
+##99
+url
+1984
+pvc
+paypal
+show
+policy
+##40
+##ty
+##18
+with
+##★
+##01
+txt
+102
+##ba
+dna
+from
+post
+mini
+ar
+taiwan
+john
+##ga
+privacy
+agoda
+##13
+##ny
+word
+##24
+##22
+##by
+##ur
+##hz
+1982
+##ang
+265
+cookie
+netscape
+108
+##ka
+##~
+##ad
+house
+share
+note
+ibm
+code
+hello
+nike
+sim
+survey
+##016
+1979
+1950
+wikia
+##32
+##017
+5g
+cbc
+##tor
+##kg
+1983
+##rt
+##14
+campaign
+store
+2500
+os
+##ct
+##ts
+##°
+170
+api
+##ns
+365
+excel
+##な
+##ao
+##ら
+##し
+~~
+##nd
+university
+163
+には
+518
+##70
+##ya
+##il
+##25
+pierre
+ipo
+0020
+897
+##23
+hotels
+##ian
+のお
+125
+years
+6606
+##ers
+##26
+high
+##day
+time
+##ay
+bug
+##line
+##く
+##す
+##be
+xp
+talk2yam
+yamservice
+10000
+coco
+##dy
+sony
+##ies
+1978
+microsoft
+david
+people
+##ha
+1960
+instagram
+intel
+その
+##ot
+iso
+1981
+##va
+115
+##mo
+##land
+xxx
+man
+co
+ltxsw
+##ation
+baby
+220
+##pa
+##ol
+1945
+7000
+tag
+450
+##ue
+msn
+##31
+oppo
+##ト
+##ca
+control
+##om
+st
+chrome
+##ure
+##ん
+be
+##き
+lol
+##19
+した
+##bo
+240
+lady
+##100
+##way
+##から
+4600
+##ko
+##do
+##un
+4s
+corporation
+168
+##ni
+herme
+##28
+cp
+978
+##up
+##06
+ui
+##ds
+ppt
+admin
+three
+します
+bbc
+re
+128
+##48
+ca
+##015
+##35
+hp
+##ee
+tpp
+##た
+##ive
+××
+root
+##cc
+##ました
+##ble
+##ity
+adobe
+park
+114
+et
+oled
+city
+##ex
+##ler
+##ap
+china
+##book
+20000
+view
+##ice
+global
+##km
+your
+hong
+##mg
+out
+##ms
+ng
+ebay
+##29
+menu
+ubuntu
+##cy
+rom
+##view
+open
+ktv
+do
+server
+##lo
+if
+english
+##ね
+##5
+##oo
+1600
+##02
+step1
+kong
+club
+135
+july
+inc
+1976
+mr
+hi
+##net
+touch
+##ls
+##ii
+michael
+lcd
+##05
+##33
+phone
+james
+step2
+1300
+ios9
+##box
+dc
+##2
+##ley
+samsung
+111
+280
+pokemon
+css
+##ent
+##les
+いいえ
+##1
+s8
+atom
+play
+bmw
+##said
+sa
+etf
+ctrl
+♥yoyo♥
+##55
+2025
+##2014
+##66
+adidas
+amazon
+1958
+##ber
+##ner
+visa
+##77
+##der
+1800
+connectivity
+##hi
+firefox
+109
+118
+hr
+so
+style
+mark
+pop
+ol
+skip
+1975
+as
+##27
+##ir
+##61
+190
+mba
+##う
+##ai
+le
+##ver
+1900
+cafe2017
+lte
+super
+113
+129
+##ron
+amd
+like
+##☆
+are
+##ster
+we
+##sk
+paul
+data
+international
+##ft
+longchamp
+ssd
+good
+##ート
+##ti
+reply
+##my
+↓↓↓
+apr
+star
+##ker
+source
+136
+js
+112
+get
+force
+photo
+##one
+126
+##2013
+##ow
+link
+bbs
+1972
+goods
+##lin
+python
+119
+##ip
+game
+##ics
+##ません
+blue
+##●
+520
+##45
+page
+itunes
+##03
+1955
+260
+1968
+gt
+gif
+618
+##ff
+##47
+group
+くたさい
+about
+bar
+ganji
+##nce
+music
+lee
+not
+1977
+1971
+1973
+##per
+an
+faq
+comment
+##って
+days
+##ock
+116
+##bs
+1974
+1969
+v1
+player
+1956
+xbox
+sql
+fm
+f1
+139
+##ah
+210
+##lv
+##mp
+##000
+melody
+1957
+##3
+550
+17life
+199
+1966
+xml
+market
+##au
+##71
+999
+##04
+what
+gl
+##95
+##age
+tips
+##68
+book
+##ting
+mysql
+can
+1959
+230
+##ung
+wonderland
+watch
+10℃
+##ction
+9000
+mar
+mobile
+1946
+1962
+article
+##db
+part
+▲top
+party
+って
+1967
+1964
+1948
+##07
+##ore
+##op
+この
+dj
+##78
+##38
+010
+main
+225
+1965
+##ong
+art
+320
+ad
+134
+020
+##73
+117
+pm2
+japan
+228
+##08
+ts
+1963
+##ica
+der
+sm
+##36
+2019
+##wa
+ct
+##7
+##や
+##64
+1937
+homemesh
+search
+##85
+##れは
+##tv
+##di
+macbook
+##9
+##くたさい
+service
+##♥
+type
+った
+750
+##ier
+##si
+##75
+##います
+##ok
+best
+##ット
+goris
+lock
+##った
+cf
+3m
+big
+##ut
+ftp
+carol
+##vi
+10
+1961
+happy
+sd
+##ac
+122
+anti
+pe
+cnn
+iii
+1920
+138
+##ラ
+1940
+esp
+jan
+tags
+##98
+##51
+august
+vol
+##86
+154
+##™
+##fs
+##れ
+##sion
+design
+ac
+##ム
+press
+jordan
+ppp
+that
+key
+check
+##6
+##tt
+##㎡
+1080p
+##lt
+power
+##42
+1952
+##bc
+vivi
+##ック
+he
+133
+121
+jpg
+##rry
+201
+175
+3500
+1947
+nb
+##ted
+##rn
+しています
+1954
+usd
+##t00
+master
+##ンク
+001
+model
+##58
+al
+##09
+1953
+##34
+ram
+goo
+ても
+##ui
+127
+1930
+red
+##ary
+rpg
+item
+##pm
+##41
+270
+##za
+project
+##2012
+hot
+td
+blogabstract
+##ger
+##62
+650
+##44
+gr2
+##します
+##m
+black
+electronic
+nfc
+year
+asus
+また
+html5
+cindy
+##hd
+m3
+132
+esc
+##od
+booking
+##53
+fed
+tvb
+##81
+##ina
+mit
+165
+##いる
+chan
+192
+distribution
+next
+になる
+peter
+bios
+steam
+cm
+1941
+にも
+pk10
+##ix
+##65
+##91
+dec
+nasa
+##ana
+icecat
+00z
+b1
+will
+##46
+li
+se
+##ji
+##み
+##ard
+oct
+##ain
+jp
+##ze
+##bi
+cio
+##56
+smart
+h5
+##39
+##port
+curve
+vpn
+##nm
+##dia
+utc
+##あり
+12345678910
+##52
+rmvb
+chanel
+a4
+miss
+##and
+##im
+media
+who
+##63
+she
+girl
+5s
+124
+vera
+##して
+class
+vivo
+king
+##フ
+##ei
+national
+ab
+1951
+5cm
+888
+145
+ipod
+ap
+1100
+5mm
+211
+ms
+2756
+##69
+mp4
+msci
+##po
+##89
+131
+mg
+index
+380
+##bit
+##out
+##zz
+##97
+##67
+158
+apec
+##8
+photoshop
+opec
+¥799
+ては
+##96
+##tes
+##ast
+2g
+○○
+##ール
+¥2899
+##ling
+##よ
+##ory
+1938
+##ical
+kitty
+content
+##43
+step3
+##cn
+win8
+155
+vc
+1400
+iphone7
+robert
+##した
+tcl
+137
+beauty
+##87
+en
+dollars
+##ys
+##oc
+step
+pay
+yy
+a1
+##2011
+##lly
+##ks
+##♪
+1939
+188
+download
+1944
+sep
+exe
+ph
+います
+school
+gb
+center
+pr
+street
+##board
+uv
+##37
+##lan
+winrar
+##que
+##ua
+##com
+1942
+1936
+480
+gpu
+##4
+ettoday
+fu
+tom
+##54
+##ren
+##via
+149
+##72
+b2b
+144
+##79
+##tch
+rose
+arm
+mb
+##49
+##ial
+##nn
+nvidia
+step4
+mvp
+00㎡
+york
+156
+##イ
+how
+cpi
+591
+2765
+gov
+kg
+joe
+##xx
+mandy
+pa
+##ser
+copyright
+fashion
+1935
+don
+##け
+ecu
+##ist
+##art
+erp
+wap
+have
+##lm
+talk
+##ek
+##ning
+##if
+ch
+##ite
+video
+1943
+cs
+san
+iot
+look
+##84
+##2010
+##ku
+october
+##ux
+trump
+##hs
+##ide
+box
+141
+first
+##ins
+april
+##ight
+##83
+185
+angel
+protected
+aa
+151
+162
+x1
+m2
+##fe
+##×
+##ho
+size
+143
+min
+ofo
+fun
+gomaji
+ex
+hdmi
+food
+dns
+march
+chris
+kevin
+##のか
+##lla
+##pp
+##ec
+ag
+ems
+6s
+720p
+##rm
+##ham
+off
+##92
+asp
+team
+fandom
+ed
+299
+▌♥
+##ell
+info
+されています
+##82
+sina
+4066
+161
+##able
+##ctor
+330
+399
+315
+dll
+rights
+ltd
+idc
+jul
+3kg
+1927
+142
+ma
+surface
+##76
+##ク
+~~~
+304
+mall
+eps
+146
+green
+##59
+map
+space
+donald
+v2
+sodu
+##light
+1931
+148
+1700
+まて
+310
+reserved
+htm
+##han
+##57
+2d
+178
+mod
+##ise
+##tions
+152
+ti
+##shi
+doc
+1933
+icp
+055
+wang
+##ram
+shopping
+aug
+##pi
+##well
+now
+wam
+b2
+からお
+##hu
+236
+1928
+##gb
+266
+f2
+##93
+153
+mix
+##ef
+##uan
+bwl
+##plus
+##res
+core
+##ess
+tea
+5℃
+hktvmall
+nhk
+##ate
+list
+##ese
+301
+feb
+4m
+inn
+ての
+nov
+159
+12345
+daniel
+##ci
+pass
+##bet
+##nk
+coffee
+202
+ssl
+airbnb
+##ute
+fbi
+woshipm
+skype
+ea
+cg
+sp
+##fc
+##www
+yes
+edge
+alt
+007
+##94
+fpga
+##ght
+##gs
+iso9001
+さい
+##ile
+##wood
+##uo
+image
+lin
+icon
+american
+##em
+1932
+set
+says
+##king
+##tive
+blogger
+##74
+なと
+256
+147
+##ox
+##zy
+##red
+##ium
+##lf
+nokia
+claire
+##リ
+##ding
+november
+lohas
+##500
+##tic
+##マ
+##cs
+##ある
+##che
+##ire
+##gy
+##ult
+db
+january
+win
+##カ
+166
+road
+ptt
+##ま
+##つ
+198
+##fa
+##mer
+anna
+pchome
+はい
+udn
+ef
+420
+##time
+##tte
+2030
+##ア
+g20
+white
+かかります
+1929
+308
+garden
+eleven
+di
+##おります
+chen
+309b
+777
+172
+young
+cosplay
+ちてない
+4500
+bat
+##123
+##tra
+##ては
+kindle
+npc
+steve
+etc
+##ern
+##|
+call
+xperia
+ces
+travel
+sk
+s7
+##ous
+1934
+##int
+みいたたけます
+183
+edu
+file
+cho
+qr
+##car
+##our
+186
+##ant
+##d
+eric
+1914
+rends
+##jo
+##する
+mastercard
+##2000
+kb
+##min
+290
+##ino
+vista
+##ris
+##ud
+jack
+2400
+##set
+169
+pos
+1912
+##her
+##ou
+taipei
+しく
+205
+beta
+##ませんか
+232
+##fi
+express
+255
+body
+##ill
+aphojoy
+user
+december
+meiki
+##ick
+tweet
+richard
+##av
+##ᆫ
+iphone6
+##dd
+ちてすか
+views
+##mark
+321
+pd
+##00
+times
+##▲
+level
+##ash
+10g
+point
+5l
+##ome
+208
+koreanmall
+##ak
+george
+q2
+206
+wma
+tcp
+##200
+スタッフ
+full
+mlb
+##lle
+##watch
+tm
+run
+179
+911
+smith
+business
+##und
+1919
+color
+##tal
+222
+171
+##less
+moon
+4399
+##rl
+update
+pcb
+shop
+499
+157
+little
+なし
+end
+##mhz
+van
+dsp
+easy
+660
+##house
+##key
+history
+##o
+oh
+##001
+##hy
+##web
+oem
+let
+was
+##2009
+##gg
+review
+##wan
+182
+##°c
+203
+uc
+title
+##val
+united
+233
+2021
+##ons
+doi
+trivago
+overdope
+sbs
+##ance
+##ち
+grand
+special
+573032185
+imf
+216
+wx17house
+##so
+##ーム
+audi
+##he
+london
+william
+##rp
+##ake
+science
+beach
+cfa
+amp
+ps4
+880
+##800
+##link
+##hp
+crm
+ferragamo
+bell
+make
+##eng
+195
+under
+zh
+photos
+2300
+##style
+##ント
+via
+176
+da
+##gi
+company
+i7
+##ray
+thomas
+370
+ufo
+i5
+##max
+plc
+ben
+back
+research
+8g
+173
+mike
+##pc
+##ッフ
+september
+189
+##ace
+vps
+february
+167
+pantos
+wp
+lisa
+1921
+★★
+jquery
+night
+long
+offer
+##berg
+##news
+1911
+##いて
+ray
+fks
+wto
+せます
+over
+164
+340
+##all
+##rus
+1924
+##888
+##works
+blogtitle
+loftpermalink
+##→
+187
+martin
+test
+ling
+km
+##め
+15000
+fda
+v3
+##ja
+##ロ
+wedding
+かある
+outlet
+family
+##ea
+をこ
+##top
+story
+##ness
+salvatore
+##lu
+204
+swift
+215
+room
+している
+oracle
+##ul
+1925
+sam
+b2c
+week
+pi
+rock
+##のは
+##a
+##けと
+##ean
+##300
+##gle
+cctv
+after
+chinese
+##back
+powered
+x2
+##tan
+1918
+##nes
+##イン
+canon
+only
+181
+##zi
+##las
+say
+##oe
+184
+##sd
+221
+##bot
+##world
+##zo
+sky
+made
+top100
+just
+1926
+pmi
+802
+234
+gap
+##vr
+177
+les
+174
+▲topoct
+ball
+vogue
+vi
+ing
+ofweek
+cos
+##list
+##ort
+▲topmay
+##なら
+##lon
+として
+last
+##tc
+##of
+##bus
+##gen
+real
+eva
+##コ
+a3
+nas
+##lie
+##ria
+##coin
+##bt
+▲topapr
+his
+212
+cat
+nata
+vive
+health
+⋯⋯
+drive
+sir
+▲topmar
+du
+cup
+##カー
+##ook
+##よう
+##sy
+alex
+msg
+tour
+しました
+3ce
+##word
+193
+ebooks
+r8
+block
+318
+##より
+2200
+nice
+pvp
+207
+months
+1905
+rewards
+##ther
+1917
+0800
+##xi
+##チ
+##sc
+micro
+850
+gg
+blogfp
+op
+1922
+daily
+m1
+264
+true
+##bb
+ml
+##tar
+##のお
+##ky
+anthony
+196
+253
+##yo
+state
+218
+##ara
+##aa
+##rc
+##tz
+##ston
+より
+gear
+##eo
+##ade
+ge
+see
+1923
+##win
+##ura
+ss
+heart
+##den
+##ita
+down
+##sm
+el
+png
+2100
+610
+rakuten
+whatsapp
+bay
+dream
+add
+##use
+680
+311
+pad
+gucci
+mpv
+##ode
+##fo
+island
+▲topjun
+##▼
+223
+jason
+214
+chicago
+##❤
+しの
+##hone
+io
+##れる
+##ことか
+sogo
+be2
+##ology
+990
+cloud
+vcd
+##con
+2~3
+##ford
+##joy
+##kb
+##こさいます
+##rade
+but
+##ach
+docker
+##ful
+rfid
+ul
+##ase
+hit
+ford
+##star
+580
+##○
+11
+a2
+sdk
+reading
+edited
+##are
+cmos
+##mc
+238
+siri
+light
+##ella
+##ため
+bloomberg
+##read
+pizza
+##ison
+jimmy
+##vm
+college
+node
+journal
+ba
+18k
+##play
+245
+##cer
+20
+magic
+##yu
+191
+jump
+288
+tt
+##ings
+asr
+##lia
+3200
+step5
+network
+##cd
+mc
+いします
+1234
+pixstyleme
+273
+##600
+2800
+money
+★★★★★
+1280
+12
+430
+bl
+みの
+act
+##tus
+tokyo
+##rial
+##life
+emba
+##ae
+saas
+tcs
+##rk
+##wang
+summer
+##sp
+ko
+##ving
+390
+premium
+##その
+netflix
+##ヒ
+uk
+mt
+##lton
+right
+frank
+two
+209
+える
+##ple
+##cal
+021
+##んな
+##sen
+##ville
+hold
+nexus
+dd
+##ius
+てお
+##mah
+##なく
+tila
+zero
+820
+ce
+##tin
+resort
+##ws
+charles
+old
+p10
+5d
+report
+##360
+##ru
+##には
+bus
+vans
+lt
+##est
+pv
+##レ
+links
+rebecca
+##ツ
+##dm
+azure
+##365
+きな
+limited
+bit
+4gb
+##mon
+1910
+moto
+##eam
+213
+1913
+var
+eos
+なとの
+226
+blogspot
+された
+699
+e3
+dos
+dm
+fc
+##ments
+##ik
+##kw
+boy
+##bin
+##ata
+960
+er
+##せ
+219
+##vin
+##tu
+##ula
+194
+##∥
+station
+##ろ
+##ature
+835
+files
+zara
+hdr
+top10
+nature
+950
+magazine
+s6
+marriott
+##シ
+avira
+case
+##っと
+tab
+##ran
+tony
+##home
+oculus
+im
+##ral
+jean
+saint
+cry
+307
+rosie
+##force
+##ini
+ice
+##bert
+のある
+##nder
+##mber
+pet
+2600
+##◆
+plurk
+▲topdec
+##sis
+00kg
+▲topnov
+720
+##ence
+tim
+##ω
+##nc
+##ても
+##name
+log
+ips
+great
+ikea
+malaysia
+unix
+##イト
+3600
+##ncy
+##nie
+12000
+akb48
+##ye
+##oid
+404
+##chi
+##いた
+oa
+xuehai
+##1000
+##orm
+##rf
+275
+さん
+##ware
+##リー
+980
+ho
+##pro
+text
+##era
+560
+bob
+227
+##ub
+##2008
+8891
+scp
+avi
+##zen
+2022
+mi
+wu
+museum
+qvod
+apache
+lake
+jcb
+▲topaug
+★★★
+ni
+##hr
+hill
+302
+ne
+weibo
+490
+ruby
+##ーシ
+##ヶ
+##row
+4d
+▲topjul
+iv
+##ish
+github
+306
+mate
+312
+##スト
+##lot
+##ane
+andrew
+のハイト
+##tina
+t1
+rf
+ed2k
+##vel
+##900
+way
+final
+りの
+ns
+5a
+705
+197
+##メ
+sweet
+bytes
+##ene
+▲topjan
+231
+##cker
+##2007
+##px
+100g
+topapp
+229
+helpapp
+rs
+low
+14k
+g4g
+care
+630
+ldquo
+あり
+##fork
+leave
+rm
+edition
+##gan
+##zon
+##qq
+▲topsep
+##google
+##ism
+gold
+224
+explorer
+##zer
+toyota
+category
+select
+visual
+##labels
+restaurant
+##md
+posts
+s1
+##ico
+もっと
+angelababy
+123456
+217
+sports
+s3
+mbc
+1915
+してくたさい
+shell
+x86
+candy
+##new
+kbs
+face
+xl
+470
+##here
+4a
+swissinfo
+v8
+▲topfeb
+dram
+##ual
+##vice
+3a
+##wer
+sport
+q1
+ios10
+public
+int
+card
+##c
+ep
+au
+rt
+##れた
+1080
+bill
+##mll
+kim
+30
+460
+wan
+##uk
+##ミ
+x3
+298
+0t
+scott
+##ming
+239
+e5
+##3d
+h7n9
+worldcat
+brown
+##あります
+##vo
+##led
+##580
+##ax
+249
+410
+##ert
+paris
+##~6
+polo
+925
+##lr
+599
+##ナ
+capital
+##hing
+bank
+cv
+1g
+##chat
+##s
+##たい
+adc
+##ule
+2m
+##e
+digital
+hotmail
+268
+##pad
+870
+bbq
+quot
+##ring
+before
+wali
+##まて
+mcu
+2k
+2b
+という
+costco
+316
+north
+333
+switch
+##city
+##p
+philips
+##mann
+management
+panasonic
+##cl
+##vd
+##ping
+##rge
+alice
+##lk
+##ましょう
+css3
+##ney
+vision
+alpha
+##ular
+##400
+##tter
+lz
+にお
+##ありません
+mode
+gre
+1916
+pci
+##tm
+237
+1~2
+##yan
+##そ
+について
+##let
+##キ
+work
+war
+coach
+ah
+mary
+##ᅵ
+huang
+##pt
+a8
+pt
+follow
+##berry
+1895
+##ew
+a5
+ghost
+##ション
+##wn
+##og
+south
+##code
+girls
+##rid
+action
+villa
+git
+r11
+table
+games
+##cket
+error
+##anonymoussaid
+##ag
+here
+##ame
+##gc
+qa
+##■
+##lis
+gmp
+##gin
+vmalife
+##cher
+yu
+wedding
+##tis
+demo
+dragon
+530
+soho
+social
+bye
+##rant
+river
+orz
+acer
+325
+##↑
+##ース
+##ats
+261
+del
+##ven
+440
+ups
+##ように
+##ター
+305
+value
+macd
+yougou
+##dn
+661
+##ano
+ll
+##urt
+##rent
+continue
+script
+##wen
+##ect
+paper
+263
+319
+shift
+##chel
+##フト
+##cat
+258
+x5
+fox
+243
+##さん
+car
+aaa
+##blog
+loading
+##yn
+##tp
+kuso
+799
+si
+sns
+イカせるテンマ
+ヒンクテンマ3
+rmb
+vdc
+forest
+central
+prime
+help
+ultra
+##rmb
+##ような
+241
+square
+688
+##しい
+のないフロクに
+##field
+##reen
+##ors
+##ju
+c1
+start
+510
+##air
+##map
+cdn
+##wo
+cba
+stephen
+m8
+100km
+##get
+opera
+##base
+##ood
+vsa
+com™
+##aw
+##ail
+251
+なのて
+count
+t2
+##ᅡ
+##een
+2700
+hop
+##gp
+vsc
+tree
+##eg
+##ose
+816
+285
+##ories
+##shop
+alphago
+v4
+1909
+simon
+##ᆼ
+fluke62max
+zip
+スホンサー
+##sta
+louis
+cr
+bas
+##~10
+bc
+##yer
+hadoop
+##ube
+##wi
+1906
+0755
+hola
+##low
+place
+centre
+5v
+d3
+##fer
+252
+##750
+##media
+281
+540
+0l
+exchange
+262
+series
+##ハー
+##san
+eb
+##bank
+##k
+q3
+##nge
+##mail
+take
+##lp
+259
+1888
+client
+east
+cache
+event
+vincent
+##ールを
+きを
+##nse
+sui
+855
+adchoice
+##и
+##stry
+##なたの
+246
+##zone
+ga
+apps
+sea
+##ab
+248
+cisco
+##タ
+##rner
+kymco
+##care
+dha
+##pu
+##yi
+minkoff
+royal
+p1
+への
+annie
+269
+collection
+kpi
+playstation
+257
+になります
+866
+bh
+##bar
+queen
+505
+radio
+1904
+andy
+armani
+##xy
+manager
+iherb
+##ery
+##share
+spring
+raid
+johnson
+1908
+##ob
+volvo
+hall
+##ball
+v6
+our
+taylor
+##hk
+bi
+242
+##cp
+kate
+bo
+water
+technology
+##rie
+サイトは
+277
+##ona
+##sl
+hpv
+303
+gtx
+hip
+rdquo
+jayz
+stone
+##lex
+##rum
+namespace
+##やり
+620
+##ale
+##atic
+des
+##erson
+##ql
+##ves
+##type
+enter
+##この
+##てきます
+d2
+##168
+##mix
+##bian
+との
+a9
+jj
+ky
+##lc
+access
+movie
+##hc
+リストに
+tower
+##ration
+##mit
+ます
+##nch
+ua
+tel
+prefix
+##o2
+1907
+##point
+1901
+ott
+~10
+##http
+##ury
+baidu
+##ink
+member
+##logy
+bigbang
+nownews
+##js
+##shot
+##tb
+##こと
+247
+eba
+##tics
+##lus
+ける
+v5
+spark
+##ama
+there
+##ions
+god
+##lls
+##down
+hiv
+##ress
+burberry
+day2
+##kv
+◆◆
+jeff
+related
+film
+edit
+joseph
+283
+##ark
+cx
+32gb
+order
+g9
+30000
+##ans
+##tty
+s5
+##bee
+かあります
+thread
+xr
+buy
+sh
+005
+land
+spotify
+mx
+##ari
+276
+##verse
+×email
+sf
+why
+##ことて
+244
+7headlines
+nego
+sunny
+dom
+exo
+401
+666
+positioning
+fit
+rgb
+##tton
+278
+kiss
+alexa
+adam
+lp
+みリストを
+##g
+mp
+##ties
+##llow
+amy
+##du
+np
+002
+institute
+271
+##rth
+##lar
+2345
+590
+##des
+sidebar
+15
+imax
+site
+##cky
+##kit
+##ime
+##009
+season
+323
+##fun
+##ンター
+##ひ
+gogoro
+a7
+pu
+lily
+fire
+twd600
+##ッセーシを
+いて
+##vis
+30ml
+##cture
+##をお
+information
+##オ
+close
+friday
+##くれる
+yi
+nick
+てすか
+##tta
+##tel
+6500
+##lock
+cbd
+economy
+254
+かお
+267
+tinker
+double
+375
+8gb
+voice
+##app
+oops
+channel
+today
+985
+##right
+raw
+xyz
+##+
+jim
+edm
+##cent
+7500
+supreme
+814
+ds
+##its
+##asia
+dropbox
+##てすか
+##tti
+books
+272
+100ml
+##tle
+##ller
+##ken
+##more
+##boy
+sex
+309
+##dom
+t3
+##ider
+##なります
+##unch
+1903
+810
+feel
+5500
+##かった
+##put
+により
+s2
+mo
+##gh
+men
+ka
+amoled
+div
+##tr
+##n1
+port
+howard
+##tags
+ken
+dnf
+##nus
+adsense
+##а
+ide
+##へ
+buff
+thunder
+##town
+##ique
+has
+##body
+auto
+pin
+##erry
+tee
+てした
+295
+number
+##the
+##013
+object
+psp
+cool
+udnbkk
+16gb
+##mic
+miui
+##tro
+most
+r2
+##alk
+##nity
+1880
+±0
+##いました
+428
+s4
+law
+version
+##oa
+n1
+sgs
+docomo
+##tf
+##ack
+henry
+fc2
+##ded
+##sco
+##014
+##rite
+286
+0mm
+linkedin
+##ada
+##now
+wii
+##ndy
+ucbug
+##◎
+sputniknews
+legalminer
+##ika
+##xp
+2gb
+##bu
+q10
+oo
+b6
+come
+##rman
+cheese
+ming
+maker
+##gm
+nikon
+##fig
+ppi
+kelly
+##ります
+jchere
+てきます
+ted
+md
+003
+fgo
+tech
+##tto
+dan
+soc
+##gl
+##len
+hair
+earth
+640
+521
+img
+##pper
+##a1
+##てきる
+##ロク
+acca
+##ition
+##ference
+suite
+##ig
+outlook
+##mond
+##cation
+398
+##pr
+279
+101vip
+358
+##999
+282
+64gb
+3800
+345
+airport
+##over
+284
+##おり
+jones
+##ith
+lab
+##su
+##いるのて
+co2
+town
+piece
+##llo
+no1
+vmware
+24h
+##qi
+focus
+reader
+##admin
+##ora
+tb
+false
+##log
+1898
+know
+lan
+838
+##ces
+f4
+##ume
+motel
+stop
+##oper
+na
+flickr
+netcomponents
+##af
+##─
+pose
+williams
+local
+##ound
+##cg
+##site
+##iko
+いお
+274
+5m
+gsm
+con
+##ath
+1902
+friends
+##hip
+cell
+317
+##rey
+780
+cream
+##cks
+012
+##dp
+facebooktwitterpinterestgoogle
+sso
+324
+shtml
+song
+swiss
+##mw
+##キンク
+lumia
+xdd
+string
+tiffany
+522
+marc
+られた
+insee
+russell
+sc
+dell
+##ations
+ok
+camera
+289
+##vs
+##flow
+##late
+classic
+287
+##nter
+stay
+g1
+mtv
+512
+##ever
+##lab
+##nger
+qe
+sata
+ryan
+d1
+50ml
+cms
+##cing
+su
+292
+3300
+editor
+296
+##nap
+security
+sunday
+association
+##ens
+##700
+##bra
+acg
+##かり
+sofascore
+とは
+mkv
+##ign
+jonathan
+gary
+build
+labels
+##oto
+tesla
+moba
+qi
+gohappy
+general
+ajax
+1024
+##かる
+サイト
+society
+##test
+##urs
+wps
+fedora
+##ich
+mozilla
+328
+##480
+##dr
+usa
+urn
+##lina
+##r
+grace
+##die
+##try
+##ader
+1250
+##なり
+elle
+570
+##chen
+##ᆯ
+price
+##ten
+uhz
+##ough
+eq
+##hen
+states
+push
+session
+balance
+wow
+506
+##cus
+##py
+when
+##ward
+##ep
+34e
+wong
+library
+prada
+##サイト
+##cle
+running
+##ree
+313
+ck
+date
+q4
+##ctive
+##ool
+##>
+mk
+##ira
+##163
+388
+die
+secret
+rq
+dota
+buffet
+は1ヶ
+e6
+##ez
+pan
+368
+ha
+##card
+##cha
+2a
+##さ
+alan
+day3
+eye
+f3
+##end
+france
+keep
+adi
+rna
+tvbs
+##ala
+solo
+nova
+##え
+##tail
+##ょう
+support
+##ries
+##なる
+##ved
+base
+copy
+iis
+fps
+##ways
+hero
+hgih
+profile
+fish
+mu
+ssh
+entertainment
+chang
+##wd
+click
+cake
+##ond
+pre
+##tom
+kic
+pixel
+##ov
+##fl
+product
+6a
+##pd
+dear
+##gate
+es
+yumi
+audio
+##²
+##sky
+echo
+bin
+where
+##ture
+329
+##ape
+find
+sap
+isis
+##なと
+nand
+##101
+##load
+##ream
+band
+a6
+525
+never
+##post
+festival
+50cm
+##we
+555
+guide
+314
+zenfone
+##ike
+335
+gd
+forum
+jessica
+strong
+alexander
+##ould
+software
+allen
+##ious
+program
+360°
+else
+lohasthree
+##gar
+することかてきます
+please
+##れます
+rc
+##ggle
+##ric
+bim
+50000
+##own
+eclipse
+355
+brian
+3ds
+##side
+061
+361
+##other
+##ける
+##tech
+##ator
+485
+engine
+##ged
+##t
+plaza
+##fit
+cia
+ngo
+westbrook
+shi
+tbs
+50mm
+##みませんか
+sci
+291
+reuters
+##ily
+contextlink
+##hn
+af
+##cil
+bridge
+very
+##cel
+1890
+cambridge
+##ize
+15g
+##aid
+##data
+790
+frm
+##head
+award
+butler
+##sun
+meta
+##mar
+america
+ps3
+puma
+pmid
+##すか
+lc
+670
+kitchen
+##lic
+オーフン5
+きなしソフトサーヒス
+そして
+day1
+future
+★★★★
+##text
+##page
+##rris
+pm1
+##ket
+fans
+##っています
+1001
+christian
+bot
+kids
+trackback
+##hai
+c3
+display
+##hl
+n2
+1896
+idea
+さんも
+##sent
+airmail
+##ug
+##men
+pwm
+けます
+028
+##lution
+369
+852
+awards
+schemas
+354
+asics
+wikipedia
+font
+##tional
+##vy
+c2
+293
+##れている
+##dget
+##ein
+っている
+contact
+pepper
+スキル
+339
+##~5
+294
+##uel
+##ument
+730
+##hang
+みてす
+q5
+##sue
+rain
+##ndi
+wei
+swatch
+##cept
+わせ
+331
+popular
+##ste
+##tag
+p2
+501
+trc
+1899
+##west
+##live
+justin
+honda
+ping
+messenger
+##rap
+v9
+543
+##とは
+unity
+appqq
+はすへて
+025
+leo
+##tone
+##テ
+##ass
+uniqlo
+##010
+502
+her
+jane
+memory
+moneydj
+##tical
+human
+12306
+していると
+##m2
+coc
+miacare
+##mn
+tmt
+##core
+vim
+kk
+##may
+fan
+target
+use
+too
+338
+435
+2050
+867
+737
+fast
+##2c
+services
+##ope
+omega
+energy
+##わ
+pinkoi
+1a
+##なから
+##rain
+jackson
+##ement
+##シャンルの
+374
+366
+そんな
+p9
+rd
+##ᆨ
+1111
+##tier
+##vic
+zone
+##│
+385
+690
+dl
+isofix
+cpa
+m4
+322
+kimi
+めて
+davis
+##lay
+lulu
+##uck
+050
+weeks
+qs
+##hop
+920
+##n
+ae
+##ear
+~5
+eia
+405
+##fly
+korea
+jpeg
+boost
+##ship
+small
+##リア
+1860
+eur
+297
+425
+valley
+##iel
+simple
+##ude
+rn
+k2
+##ena
+されます
+non
+patrick
+しているから
+##ナー
+feed
+5757
+30g
+process
+well
+qqmei
+##thing
+they
+aws
+lu
+pink
+##ters
+##kin
+または
+board
+##vertisement
+wine
+##ien
+unicode
+##dge
+r1
+359
+##tant
+いを
+##twitter
+##3c
+cool1
+される
+##れて
+##l
+isp
+##012
+standard
+45㎡2
+402
+##150
+matt
+##fu
+326
+##iner
+googlemsn
+pixnetfacebookyahoo
+##ラン
+x7
+886
+##uce
+メーカー
+sao
+##ev
+##きました
+##file
+9678
+403
+xddd
+shirt
+6l
+##rio
+##hat
+3mm
+givenchy
+ya
+bang
+##lio
+monday
+crystal
+ロクイン
+##abc
+336
+head
+890
+ubuntuforumwikilinuxpastechat
+##vc
+##~20
+##rity
+cnc
+7866
+ipv6
+null
+1897
+##ost
+yang
+imsean
+tiger
+##fet
+##ンス
+352
+##=
+dji
+327
+ji
+maria
+##come
+##んて
+foundation
+3100
+##beth
+##なった
+1m
+601
+active
+##aft
+##don
+3p
+sr
+349
+emma
+##khz
+living
+415
+353
+1889
+341
+709
+457
+sas
+x6
+##face
+pptv
+x4
+##mate
+han
+sophie
+##jing
+337
+fifa
+##mand
+other
+sale
+inwedding
+##gn
+てきちゃいます
+##mmy
+##pmlast
+bad
+nana
+nbc
+してみてくたさいね
+なとはお
+##wu
+##かあります
+##あ
+note7
+single
+##340
+せからこ
+してくたさい♪この
+しにはとんとんワークケートを
+するとあなたにもっとマッチした
+ならワークケートへ
+もみつかっちゃうかも
+ワークケートの
+##bel
+window
+##dio
+##ht
+union
+age
+382
+14
+##ivity
+##y
+コメント
+domain
+neo
+##isa
+##lter
+5k
+f5
+steven
+##cts
+powerpoint
+tft
+self
+g2
+ft
+##テル
+zol
+##act
+mwc
+381
+343
+もう
+nbapop
+408
+てある
+eds
+ace
+##room
+previous
+author
+tomtom
+il
+##ets
+hu
+financial
+☆☆☆
+っています
+bp
+5t
+chi
+1gb
+##hg
+fairmont
+cross
+008
+gay
+h2
+function
+##けて
+356
+also
+1b
+625
+##ータ
+##raph
+1894
+3~5
+##ils
+i3
+334
+avenue
+##host
+による
+##bon
+##tsu
+message
+navigation
+50g
+fintech
+h6
+##ことを
+8cm
+##ject
+##vas
+##firm
+credit
+##wf
+xxxx
+form
+##nor
+##space
+huawei
+plan
+json
+sbl
+##dc
+machine
+921
+392
+wish
+##120
+##sol
+windows7
+edward
+##ために
+development
+washington
+##nsis
+lo
+818
+##sio
+##ym
+##bor
+planet
+##~8
+##wt
+ieee
+gpa
+##めて
+camp
+ann
+gm
+##tw
+##oka
+connect
+##rss
+##work
+##atus
+wall
+chicken
+soul
+2mm
+##times
+fa
+##ather
+##cord
+009
+##eep
+hitachi
+gui
+harry
+##pan
+e1
+disney
+##press
+##ーション
+wind
+386
+frigidaire
+##tl
+liu
+hsu
+332
+basic
+von
+ev
+いた
+てきる
+スホンサーサイト
+learning
+##ull
+expedia
+archives
+change
+##wei
+santa
+cut
+ins
+6gb
+turbo
+brand
+cf1
+508
+004
+return
+747
+##rip
+h1
+##nis
+##をこ
+128gb
+##にお
+3t
+application
+しており
+emc
+rx
+##oon
+384
+quick
+412
+15058
+wilson
+wing
+chapter
+##bug
+beyond
+##cms
+##dar
+##oh
+zoom
+e2
+trip
+sb
+##nba
+rcep
+342
+aspx
+ci
+080
+gc
+gnu
+める
+##count
+advanced
+dance
+dv
+##url
+##ging
+367
+8591
+am09
+shadow
+battle
+346
+##i
+##cia
+##という
+emily
+##のてす
+##tation
+host
+ff
+techorz
+sars
+##mini
+##mporary
+##ering
+nc
+4200
+798
+##next
+cma
+##mbps
+##gas
+##ift
+##dot
+##ィ
+455
+##~17
+amana
+##りの
+426
+##ros
+ir
+00㎡1
+##eet
+##ible
+##↓
+710
+ˋ▽ˊ
+##aka
+dcs
+iq
+##v
+l1
+##lor
+maggie
+##011
+##iu
+588
+##~1
+830
+##gt
+1tb
+articles
+create
+##burg
+##iki
+database
+fantasy
+##rex
+##cam
+dlc
+dean
+##you
+hard
+path
+gaming
+victoria
+maps
+cb
+##lee
+##itor
+overchicstoretvhome
+systems
+##xt
+416
+p3
+sarah
+760
+##nan
+407
+486
+x9
+install
+second
+626
+##ann
+##ph
+##rcle
+##nic
+860
+##nar
+ec
+##とう
+768
+metro
+chocolate
+##rian
+~4
+##table
+##しています
+skin
+##sn
+395
+mountain
+##0mm
+inparadise
+6m
+7x24
+ib
+4800
+##jia
+eeworld
+creative
+g5
+g3
+357
+parker
+ecfa
+village
+からの
+18000
+sylvia
+サーヒス
+hbl
+##ques
+##onsored
+##x2
+##きます
+##v4
+##tein
+ie6
+383
+##stack
+389
+ver
+##ads
+##baby
+sound
+bbe
+##110
+##lone
+##uid
+ads
+022
+gundam
+351
+thinkpad
+006
+scrum
+match
+##ave
+mems
+##470
+##oy
+##なりました
+##talk
+glass
+lamigo
+span
+##eme
+job
+##a5
+jay
+wade
+kde
+498
+##lace
+ocean
+tvg
+##covery
+##r3
+##ners
+##rea
+junior
+think
+##aine
+cover
+##ision
+##sia
+↓↓
+##bow
+msi
+413
+458
+406
+##love
+711
+801
+soft
+z2
+##pl
+456
+1840
+mobil
+mind
+##uy
+427
+nginx
+##oi
+めた
+##rr
+6221
+##mple
+##sson
+##ーシてす
+371
+##nts
+91tv
+comhd
+crv3000
+##uard
+1868
+397
+deep
+lost
+field
+gallery
+##bia
+rate
+spf
+redis
+traction
+930
+icloud
+011
+なら
+fe
+jose
+372
+##tory
+into
+sohu
+fx
+899
+379
+kicstart2
+##hia
+すく
+##~3
+##sit
+ra
+24
+##walk
+##xure
+500g
+##pact
+pacific
+xa
+natural
+carlo
+##250
+##walker
+1850
+##can
+cto
+gigi
+516
+##サー
+pen
+##hoo
+ob
+matlab
+##b
+##yy
+13913459
+##iti
+mango
+##bbs
+sense
+c5
+oxford
+##ニア
+walker
+jennifer
+##ola
+course
+##bre
+701
+##pus
+##rder
+lucky
+075
+##ぁ
+ivy
+なお
+##nia
+sotheby
+side
+##ugh
+joy
+##orage
+##ush
+##bat
+##dt
+364
+r9
+##2d
+##gio
+511
+country
+wear
+##lax
+##~7
+##moon
+393
+seven
+study
+411
+348
+lonzo
+8k
+##ェ
+evolution
+##イフ
+##kk
+gs
+kd
+##レス
+arduino
+344
+b12
+##lux
+arpg
+##rdon
+cook
+##x5
+dark
+five
+##als
+##ida
+とても
+sign
+362
+##ちの
+something
+20mm
+##nda
+387
+##posted
+fresh
+tf
+1870
+422
+cam
+##mine
+##skip
+##form
+##ssion
+education
+394
+##tee
+dyson
+stage
+##jie
+want
+##night
+epson
+pack
+あります
+##ppy
+テリヘル
+##█
+wd
+##eh
+##rence
+left
+##lvin
+golden
+mhz
+discovery
+##trix
+##n2
+loft
+##uch
+##dra
+##sse
+speed
+~1
+1mdb
+sorry
+welcome
+##urn
+wave
+gaga
+##lmer
+teddy
+##160
+トラックハック
+せよ
+611
+##f2016
+378
+rp
+##sha
+rar
+##あなたに
+##きた
+840
+holiday
+##ュー
+373
+074
+##vg
+##nos
+##rail
+gartner
+gi
+6p
+##dium
+kit
+488
+b3
+eco
+##ろう
+20g
+sean
+##stone
+autocad
+nu
+##np
+f16
+write
+029
+m5
+##ias
+images
+atp
+##dk
+fsm
+504
+1350
+ve
+52kb
+##xxx
+##のに
+##cake
+414
+unit
+lim
+ru
+1v
+##ification
+published
+angela
+16g
+analytics
+ak
+##q
+##nel
+gmt
+##icon
+again
+##₂
+##bby
+ios11
+445
+かこさいます
+waze
+いてす
+##ハ
+9985
+##ust
+##ティー
+framework
+##007
+iptv
+delete
+52sykb
+cl
+wwdc
+027
+30cm
+##fw
+##ての
+1389
+##xon
+brandt
+##ses
+##dragon
+tc
+vetements
+anne
+monte
+modern
+official
+##へて
+##ere
+##nne
+##oud
+もちろん
+50
+etnews
+##a2
+##graphy
+421
+863
+##ちゃん
+444
+##rtex
+##てお
+l2
+##gma
+mount
+ccd
+たと
+archive
+morning
+tan
+ddos
+e7
+##ホ
+day4
+##ウ
+gis
+453
+its
+495
+factory
+bruce
+pg
+##ito
+ってくたさい
+guest
+cdma
+##lling
+536
+n3
+しかし
+3~4
+mega
+eyes
+ro
+13
+women
+dac
+church
+##jun
+singapore
+##facebook
+6991
+starbucks
+##tos
+##stin
+##shine
+zen
+##mu
+tina
+20℃
+1893
+##たけて
+503
+465
+request
+##gence
+qt
+##っ
+1886
+347
+363
+q7
+##zzi
+diary
+##tore
+409
+##ead
+468
+cst
+##osa
+canada
+agent
+va
+##jiang
+##ちは
+##ーク
+##lam
+sg
+##nix
+##sday
+##よって
+g6
+##master
+bing
+##zl
+charlie
+16
+8mm
+nb40
+##ーン
+thai
+##ルフ
+ln284ct
+##itz
+##2f
+bonnie
+##food
+##lent
+originals
+##stro
+##lts
+418
+∟∣
+##bscribe
+children
+ntd
+yesstyle
+##かも
+hmv
+##tment
+d5
+2cm
+arts
+sms
+##pn
+##я
+##いい
+topios9
+539
+lifestyle
+virtual
+##ague
+xz
+##deo
+muji
+024
+unt
+##nnis
+##ᅩ
+faq1
+1884
+396
+##ette
+fly
+64㎡
+はしめまして
+441
+curry
+##pop
+のこ
+release
+##←
+##◆◆
+##cast
+073
+ありな
+500ml
+##ews
+5c
+##stle
+ios7
+##ima
+787
+dog
+lenovo
+##r4
+roger
+013
+cbs
+vornado
+100m
+417
+##desk
+##クok
+##ald
+1867
+9595
+2900
+##van
+oil
+##x
+some
+break
+common
+##jy
+##lines
+g7
+twice
+419
+ella
+nano
+belle
+にこ
+##mes
+##self
+##note
+jb
+##ことかてきます
+benz
+##との
+##ova
+451
+save
+##wing
+##ますのて
+kai
+りは
+##hua
+##rect
+rainer
+##unge
+448
+##0m
+adsl
+##かな
+guestname
+##uma
+##kins
+##zu
+tokichoi
+##price
+county
+##med
+##mus
+rmk
+391
+address
+vm
+えて
+openload
+##group
+##hin
+##iginal
+amg
+urban
+##oz
+jobs
+emi
+##public
+beautiful
+##sch
+album
+##dden
+##bell
+jerry
+works
+hostel
+miller
+##drive
+##rmin
+##10
+376
+boot
+828
+##370
+##fx
+##cm~
+1885
+##nome
+##ctionary
+##oman
+##lish
+##cr
+##hm
+433
+##how
+432
+francis
+xi
+c919
+b5
+evernote
+##uc
+vga
+##3000
+coupe
+##urg
+##cca
+##uality
+019
+6g
+れる
+multi
+##また
+##ett
+em
+hey
+##ani
+##tax
+##rma
+inside
+than
+740
+leonnhurt
+##jin
+ict
+れた
+bird
+notes
+200mm
+くの
+##dical
+##lli
+result
+442
+iu
+ee
+438
+smap
+gopro
+##last
+yin
+pure
+998
+32g
+けた
+5kg
+##dan
+##rame
+mama
+##oot
+bean
+marketing
+##hur
+2l
+bella
+sync
+xuite
+##ground
+515
+discuz
+##getrelax
+##ince
+##bay
+##5s
+cj
+##イス
+gmat
+apt
+##pass
+jing
+##rix
+c4
+rich
+##とても
+niusnews
+##ello
+bag
+770
+##eting
+##mobile
+18
+culture
+015
+##のてすか
+377
+1020
+area
+##ience
+616
+details
+gp
+universal
+silver
+dit
+はお
+private
+ddd
+u11
+kanshu
+##ified
+fung
+##nny
+dx
+##520
+tai
+475
+023
+##fr
+##lean
+3s
+##pin
+429
+##rin
+25000
+ly
+rick
+##bility
+usb3
+banner
+##baru
+##gion
+metal
+dt
+vdf
+1871
+karl
+qualcomm
+bear
+1010
+oldid
+ian
+jo
+##tors
+population
+##ernel
+1882
+mmorpg
+##mv
+##bike
+603
+##©
+ww
+friend
+##ager
+exhibition
+##del
+##pods
+fpx
+structure
+##free
+##tings
+kl
+##rley
+##copyright
+##mma
+california
+3400
+orange
+yoga
+4l
+canmake
+honey
+##anda
+##コメント
+595
+nikkie
+##ルハイト
+dhl
+publishing
+##mall
+##gnet
+20cm
+513
+##クセス
+##┅
+e88
+970
+##dog
+fishbase
+##!
+##"
+###
+##$
+##%
+##&
+##'
+##(
+##)
+##*
+##+
+##,
+##-
+##.
+##/
+##:
+##;
+##<
+##=
+##>
+##?
+##@
+##[
+##\
+##]
+##^
+##_
+##{
+##|
+##}
+##~
+##£
+##¤
+##¥
+##§
+##«
+##±
+##³
+##µ
+##·
+##¹
+##º
+##»
+##¼
+##ß
+##æ
+##÷
+##ø
+##đ
+##ŋ
+##ɔ
+##ə
+##ɡ
+##ʰ
+##ˇ
+##ˈ
+##ˊ
+##ˋ
+##ˍ
+##ː
+##˙
+##˚
+##ˢ
+##α
+##β
+##γ
+##δ
+##ε
+##η
+##θ
+##ι
+##κ
+##λ
+##μ
+##ν
+##ο
+##π
+##ρ
+##ς
+##σ
+##τ
+##υ
+##φ
+##χ
+##ψ
+##б
+##в
+##г
+##д
+##е
+##ж
+##з
+##к
+##л
+##м
+##н
+##о
+##п
+##р
+##с
+##т
+##у
+##ф
+##х
+##ц
+##ч
+##ш
+##ы
+##ь
+##і
+##ا
+##ب
+##ة
+##ت
+##د
+##ر
+##س
+##ع
+##ل
+##م
+##ن
+##ه
+##و
+##ي
+##۩
+##ก
+##ง
+##น
+##ม
+##ย
+##ร
+##อ
+##า
+##เ
+##๑
+##་
+##ღ
+##ᄀ
+##ᄁ
+##ᄂ
+##ᄃ
+##ᄅ
+##ᄆ
+##ᄇ
+##ᄈ
+##ᄉ
+##ᄋ
+##ᄌ
+##ᄎ
+##ᄏ
+##ᄐ
+##ᄑ
+##ᄒ
+##ᅢ
+##ᅣ
+##ᅥ
+##ᅦ
+##ᅧ
+##ᅨ
+##ᅪ
+##ᅬ
+##ᅭ
+##ᅮ
+##ᅯ
+##ᅲ
+##ᅳ
+##ᅴ
+##ᆷ
+##ᆸ
+##ᆺ
+##ᆻ
+##ᗜ
+##ᵃ
+##ᵉ
+##ᵍ
+##ᵏ
+##ᵐ
+##ᵒ
+##ᵘ
+##‖
+##„
+##†
+##•
+##‥
+##‧
+##
+##‰
+##′
+##″
+##‹
+##›
+##※
+##‿
+##⁄
+##ⁱ
+##⁺
+##ⁿ
+##₁
+##₃
+##₄
+##€
+##№
+##ⅰ
+##ⅱ
+##ⅲ
+##ⅳ
+##ⅴ
+##↔
+##↗
+##↘
+##⇒
+##∀
+##−
+##∕
+##∙
+##√
+##∞
+##∟
+##∠
+##∣
+##∩
+##∮
+##∶
+##∼
+##∽
+##≈
+##≒
+##≡
+##≤
+##≥
+##≦
+##≧
+##≪
+##≫
+##⊙
+##⋅
+##⋈
+##⋯
+##⌒
+##①
+##②
+##③
+##④
+##⑤
+##⑥
+##⑦
+##⑧
+##⑨
+##⑩
+##⑴
+##⑵
+##⑶
+##⑷
+##⑸
+##⒈
+##⒉
+##⒊
+##⒋
+##ⓒ
+##ⓔ
+##ⓘ
+##━
+##┃
+##┆
+##┊
+##┌
+##└
+##├
+##┣
+##═
+##║
+##╚
+##╞
+##╠
+##╭
+##╮
+##╯
+##╰
+##╱
+##╳
+##▂
+##▃
+##▅
+##▇
+##▉
+##▋
+##▌
+##▍
+##▎
+##□
+##▪
+##▫
+##▬
+##△
+##▶
+##►
+##▽
+##◇
+##◕
+##◠
+##◢
+##◤
+##☀
+##☕
+##☞
+##☺
+##☼
+##♀
+##♂
+##♠
+##♡
+##♣
+##♦
+##♫
+##♬
+##✈
+##✔
+##✕
+##✖
+##✦
+##✨
+##✪
+##✰
+##✿
+##❀
+##➜
+##➤
+##⦿
+##、
+##。
+##〃
+##々
+##〇
+##〈
+##〉
+##《
+##》
+##「
+##」
+##『
+##』
+##【
+##】
+##〓
+##〔
+##〕
+##〖
+##〗
+##〜
+##〝
+##〞
+##ぃ
+##ぇ
+##ぬ
+##ふ
+##ほ
+##む
+##ゃ
+##ゅ
+##ゆ
+##ょ
+##゜
+##ゝ
+##ァ
+##ゥ
+##エ
+##ォ
+##ケ
+##サ
+##セ
+##ソ
+##ッ
+##ニ
+##ヌ
+##ネ
+##ノ
+##ヘ
+##モ
+##ャ
+##ヤ
+##ュ
+##ユ
+##ョ
+##ヨ
+##ワ
+##ヲ
+##・
+##ヽ
+##ㄅ
+##ㄆ
+##ㄇ
+##ㄉ
+##ㄋ
+##ㄌ
+##ㄍ
+##ㄎ
+##ㄏ
+##ㄒ
+##ㄚ
+##ㄛ
+##ㄞ
+##ㄟ
+##ㄢ
+##ㄤ
+##ㄥ
+##ㄧ
+##ㄨ
+##ㆍ
+##㈦
+##㊣
+##㗎
+##一
+##丁
+##七
+##万
+##丈
+##三
+##上
+##下
+##不
+##与
+##丐
+##丑
+##专
+##且
+##丕
+##世
+##丘
+##丙
+##业
+##丛
+##东
+##丝
+##丞
+##丟
+##両
+##丢
+##两
+##严
+##並
+##丧
+##丨
+##个
+##丫
+##中
+##丰
+##串
+##临
+##丶
+##丸
+##丹
+##为
+##主
+##丼
+##丽
+##举
+##丿
+##乂
+##乃
+##久
+##么
+##义
+##之
+##乌
+##乍
+##乎
+##乏
+##乐
+##乒
+##乓
+##乔
+##乖
+##乗
+##乘
+##乙
+##乜
+##九
+##乞
+##也
+##习
+##乡
+##书
+##乩
+##买
+##乱
+##乳
+##乾
+##亀
+##亂
+##了
+##予
+##争
+##事
+##二
+##于
+##亏
+##云
+##互
+##五
+##井
+##亘
+##亙
+##亚
+##些
+##亜
+##亞
+##亟
+##亡
+##亢
+##交
+##亥
+##亦
+##产
+##亨
+##亩
+##享
+##京
+##亭
+##亮
+##亲
+##亳
+##亵
+##人
+##亿
+##什
+##仁
+##仃
+##仄
+##仅
+##仆
+##仇
+##今
+##介
+##仍
+##从
+##仏
+##仑
+##仓
+##仔
+##仕
+##他
+##仗
+##付
+##仙
+##仝
+##仞
+##仟
+##代
+##令
+##以
+##仨
+##仪
+##们
+##仮
+##仰
+##仲
+##件
+##价
+##任
+##份
+##仿
+##企
+##伉
+##伊
+##伍
+##伎
+##伏
+##伐
+##休
+##伕
+##众
+##优
+##伙
+##会
+##伝
+##伞
+##伟
+##传
+##伢
+##伤
+##伦
+##伪
+##伫
+##伯
+##估
+##伴
+##伶
+##伸
+##伺
+##似
+##伽
+##佃
+##但
+##佇
+##佈
+##位
+##低
+##住
+##佐
+##佑
+##体
+##佔
+##何
+##佗
+##佘
+##余
+##佚
+##佛
+##作
+##佝
+##佞
+##佟
+##你
+##佢
+##佣
+##佤
+##佥
+##佩
+##佬
+##佯
+##佰
+##佳
+##併
+##佶
+##佻
+##佼
+##使
+##侃
+##侄
+##來
+##侈
+##例
+##侍
+##侏
+##侑
+##侖
+##侗
+##供
+##依
+##侠
+##価
+##侣
+##侥
+##侦
+##侧
+##侨
+##侬
+##侮
+##侯
+##侵
+##侶
+##侷
+##便
+##係
+##促
+##俄
+##俊
+##俎
+##俏
+##俐
+##俑
+##俗
+##俘
+##俚
+##保
+##俞
+##俟
+##俠
+##信
+##俨
+##俩
+##俪
+##俬
+##俭
+##修
+##俯
+##俱
+##俳
+##俸
+##俺
+##俾
+##倆
+##倉
+##個
+##倌
+##倍
+##倏
+##們
+##倒
+##倔
+##倖
+##倘
+##候
+##倚
+##倜
+##借
+##倡
+##値
+##倦
+##倩
+##倪
+##倫
+##倬
+##倭
+##倶
+##债
+##值
+##倾
+##偃
+##假
+##偈
+##偉
+##偌
+##偎
+##偏
+##偕
+##做
+##停
+##健
+##側
+##偵
+##偶
+##偷
+##偻
+##偽
+##偿
+##傀
+##傅
+##傍
+##傑
+##傘
+##備
+##傚
+##傢
+##傣
+##傥
+##储
+##傩
+##催
+##傭
+##傲
+##傳
+##債
+##傷
+##傻
+##傾
+##僅
+##働
+##像
+##僑
+##僕
+##僖
+##僚
+##僥
+##僧
+##僭
+##僮
+##僱
+##僵
+##價
+##僻
+##儀
+##儂
+##億
+##儆
+##儉
+##儋
+##儒
+##儕
+##儘
+##償
+##儡
+##優
+##儲
+##儷
+##儼
+##儿
+##兀
+##允
+##元
+##兄
+##充
+##兆
+##兇
+##先
+##光
+##克
+##兌
+##免
+##児
+##兑
+##兒
+##兔
+##兖
+##党
+##兜
+##兢
+##入
+##內
+##全
+##兩
+##八
+##公
+##六
+##兮
+##兰
+##共
+##兲
+##关
+##兴
+##兵
+##其
+##具
+##典
+##兹
+##养
+##兼
+##兽
+##冀
+##内
+##円
+##冇
+##冈
+##冉
+##冊
+##册
+##再
+##冏
+##冒
+##冕
+##冗
+##写
+##军
+##农
+##冠
+##冢
+##冤
+##冥
+##冨
+##冪
+##冬
+##冯
+##冰
+##冲
+##决
+##况
+##冶
+##冷
+##冻
+##冼
+##冽
+##冾
+##净
+##凄
+##准
+##凇
+##凈
+##凉
+##凋
+##凌
+##凍
+##减
+##凑
+##凛
+##凜
+##凝
+##几
+##凡
+##凤
+##処
+##凪
+##凭
+##凯
+##凰
+##凱
+##凳
+##凶
+##凸
+##凹
+##出
+##击
+##函
+##凿
+##刀
+##刁
+##刃
+##分
+##切
+##刈
+##刊
+##刍
+##刎
+##刑
+##划
+##列
+##刘
+##则
+##刚
+##创
+##初
+##删
+##判
+##別
+##刨
+##利
+##刪
+##别
+##刮
+##到
+##制
+##刷
+##券
+##刹
+##刺
+##刻
+##刽
+##剁
+##剂
+##剃
+##則
+##剉
+##削
+##剋
+##剌
+##前
+##剎
+##剐
+##剑
+##剔
+##剖
+##剛
+##剜
+##剝
+##剣
+##剤
+##剥
+##剧
+##剩
+##剪
+##副
+##割
+##創
+##剷
+##剽
+##剿
+##劃
+##劇
+##劈
+##劉
+##劊
+##劍
+##劏
+##劑
+##力
+##劝
+##办
+##功
+##加
+##务
+##劣
+##动
+##助
+##努
+##劫
+##劭
+##励
+##劲
+##劳
+##労
+##劵
+##効
+##劾
+##势
+##勁
+##勃
+##勇
+##勉
+##勋
+##勐
+##勒
+##動
+##勖
+##勘
+##務
+##勛
+##勝
+##勞
+##募
+##勢
+##勤
+##勧
+##勳
+##勵
+##勸
+##勺
+##勻
+##勾
+##勿
+##匀
+##包
+##匆
+##匈
+##匍
+##匐
+##匕
+##化
+##北
+##匙
+##匝
+##匠
+##匡
+##匣
+##匪
+##匮
+##匯
+##匱
+##匹
+##区
+##医
+##匾
+##匿
+##區
+##十
+##千
+##卅
+##升
+##午
+##卉
+##半
+##卍
+##华
+##协
+##卑
+##卒
+##卓
+##協
+##单
+##卖
+##南
+##単
+##博
+##卜
+##卞
+##卟
+##占
+##卡
+##卢
+##卤
+##卦
+##卧
+##卫
+##卮
+##卯
+##印
+##危
+##即
+##却
+##卵
+##卷
+##卸
+##卻
+##卿
+##厂
+##厄
+##厅
+##历
+##厉
+##压
+##厌
+##厕
+##厘
+##厚
+##厝
+##原
+##厢
+##厥
+##厦
+##厨
+##厩
+##厭
+##厮
+##厲
+##厳
+##去
+##县
+##叁
+##参
+##參
+##又
+##叉
+##及
+##友
+##双
+##反
+##収
+##发
+##叔
+##取
+##受
+##变
+##叙
+##叛
+##叟
+##叠
+##叡
+##叢
+##口
+##古
+##句
+##另
+##叨
+##叩
+##只
+##叫
+##召
+##叭
+##叮
+##可
+##台
+##叱
+##史
+##右
+##叵
+##叶
+##号
+##司
+##叹
+##叻
+##叼
+##叽
+##吁
+##吃
+##各
+##吆
+##合
+##吉
+##吊
+##吋
+##同
+##名
+##后
+##吏
+##吐
+##向
+##吒
+##吓
+##吕
+##吖
+##吗
+##君
+##吝
+##吞
+##吟
+##吠
+##吡
+##否
+##吧
+##吨
+##吩
+##含
+##听
+##吭
+##吮
+##启
+##吱
+##吳
+##吴
+##吵
+##吶
+##吸
+##吹
+##吻
+##吼
+##吽
+##吾
+##呀
+##呂
+##呃
+##呆
+##呈
+##告
+##呋
+##呎
+##呐
+##呓
+##呕
+##呗
+##员
+##呛
+##呜
+##呢
+##呤
+##呦
+##周
+##呱
+##呲
+##味
+##呵
+##呷
+##呸
+##呻
+##呼
+##命
+##咀
+##咁
+##咂
+##咄
+##咆
+##咋
+##和
+##咎
+##咏
+##咐
+##咒
+##咔
+##咕
+##咖
+##咗
+##咘
+##咙
+##咚
+##咛
+##咣
+##咤
+##咦
+##咧
+##咨
+##咩
+##咪
+##咫
+##咬
+##咭
+##咯
+##咱
+##咲
+##咳
+##咸
+##咻
+##咽
+##咿
+##哀
+##品
+##哂
+##哄
+##哆
+##哇
+##哈
+##哉
+##哋
+##哌
+##响
+##哎
+##哏
+##哐
+##哑
+##哒
+##哔
+##哗
+##哟
+##員
+##哥
+##哦
+##哧
+##哨
+##哩
+##哪
+##哭
+##哮
+##哲
+##哺
+##哼
+##哽
+##唁
+##唄
+##唆
+##唇
+##唉
+##唏
+##唐
+##唑
+##唔
+##唠
+##唤
+##唧
+##唬
+##售
+##唯
+##唰
+##唱
+##唳
+##唷
+##唸
+##唾
+##啃
+##啄
+##商
+##啉
+##啊
+##問
+##啓
+##啕
+##啖
+##啜
+##啞
+##啟
+##啡
+##啤
+##啥
+##啦
+##啧
+##啪
+##啫
+##啬
+##啮
+##啰
+##啱
+##啲
+##啵
+##啶
+##啷
+##啸
+##啻
+##啼
+##啾
+##喀
+##喂
+##喃
+##善
+##喆
+##喇
+##喉
+##喊
+##喋
+##喎
+##喏
+##喔
+##喘
+##喙
+##喚
+##喜
+##喝
+##喟
+##喧
+##喪
+##喫
+##喬
+##單
+##喰
+##喱
+##喲
+##喳
+##喵
+##営
+##喷
+##喹
+##喺
+##喻
+##喽
+##嗅
+##嗆
+##嗇
+##嗎
+##嗑
+##嗒
+##嗓
+##嗔
+##嗖
+##嗚
+##嗜
+##嗝
+##嗟
+##嗡
+##嗣
+##嗤
+##嗦
+##嗨
+##嗪
+##嗬
+##嗯
+##嗰
+##嗲
+##嗳
+##嗶
+##嗷
+##嗽
+##嘀
+##嘅
+##嘆
+##嘈
+##嘉
+##嘌
+##嘍
+##嘎
+##嘔
+##嘖
+##嘗
+##嘘
+##嘚
+##嘛
+##嘜
+##嘞
+##嘟
+##嘢
+##嘣
+##嘤
+##嘧
+##嘩
+##嘭
+##嘮
+##嘯
+##嘰
+##嘱
+##嘲
+##嘴
+##嘶
+##嘸
+##嘹
+##嘻
+##嘿
+##噁
+##噌
+##噎
+##噓
+##噔
+##噗
+##噙
+##噜
+##噠
+##噢
+##噤
+##器
+##噩
+##噪
+##噬
+##噱
+##噴
+##噶
+##噸
+##噹
+##噻
+##噼
+##嚀
+##嚇
+##嚎
+##嚏
+##嚐
+##嚓
+##嚕
+##嚟
+##嚣
+##嚥
+##嚨
+##嚮
+##嚴
+##嚷
+##嚼
+##囂
+##囉
+##囊
+##囍
+##囑
+##囔
+##囗
+##囚
+##四
+##囝
+##回
+##囟
+##因
+##囡
+##团
+##団
+##囤
+##囧
+##囪
+##囫
+##园
+##困
+##囱
+##囲
+##図
+##围
+##囹
+##固
+##国
+##图
+##囿
+##圃
+##圄
+##圆
+##圈
+##國
+##圍
+##圏
+##園
+##圓
+##圖
+##團
+##圜
+##土
+##圣
+##圧
+##在
+##圩
+##圭
+##地
+##圳
+##场
+##圻
+##圾
+##址
+##坂
+##均
+##坊
+##坍
+##坎
+##坏
+##坐
+##坑
+##块
+##坚
+##坛
+##坝
+##坞
+##坟
+##坠
+##坡
+##坤
+##坦
+##坨
+##坪
+##坯
+##坳
+##坵
+##坷
+##垂
+##垃
+##垄
+##型
+##垒
+##垚
+##垛
+##垠
+##垢
+##垣
+##垦
+##垩
+##垫
+##垭
+##垮
+##垵
+##埂
+##埃
+##埋
+##城
+##埔
+##埕
+##埗
+##域
+##埠
+##埤
+##埵
+##執
+##埸
+##培
+##基
+##埼
+##堀
+##堂
+##堃
+##堅
+##堆
+##堇
+##堑
+##堕
+##堙
+##堡
+##堤
+##堪
+##堯
+##堰
+##報
+##場
+##堵
+##堺
+##堿
+##塊
+##塌
+##塑
+##塔
+##塗
+##塘
+##塚
+##塞
+##塢
+##塩
+##填
+##塬
+##塭
+##塵
+##塾
+##墀
+##境
+##墅
+##墉
+##墊
+##墒
+##墓
+##増
+##墘
+##墙
+##墜
+##增
+##墟
+##墨
+##墩
+##墮
+##墳
+##墻
+##墾
+##壁
+##壅
+##壆
+##壇
+##壊
+##壑
+##壓
+##壕
+##壘
+##壞
+##壟
+##壢
+##壤
+##壩
+##士
+##壬
+##壮
+##壯
+##声
+##売
+##壳
+##壶
+##壹
+##壺
+##壽
+##处
+##备
+##変
+##复
+##夏
+##夔
+##夕
+##外
+##夙
+##多
+##夜
+##够
+##夠
+##夢
+##夥
+##大
+##天
+##太
+##夫
+##夭
+##央
+##夯
+##失
+##头
+##夷
+##夸
+##夹
+##夺
+##夾
+##奂
+##奄
+##奇
+##奈
+##奉
+##奋
+##奎
+##奏
+##奐
+##契
+##奔
+##奕
+##奖
+##套
+##奘
+##奚
+##奠
+##奢
+##奥
+##奧
+##奪
+##奬
+##奮
+##女
+##奴
+##奶
+##奸
+##她
+##好
+##如
+##妃
+##妄
+##妆
+##妇
+##妈
+##妊
+##妍
+##妒
+##妓
+##妖
+##妘
+##妙
+##妝
+##妞
+##妣
+##妤
+##妥
+##妨
+##妩
+##妪
+##妮
+##妲
+##妳
+##妹
+##妻
+##妾
+##姆
+##姉
+##姊
+##始
+##姍
+##姐
+##姑
+##姒
+##姓
+##委
+##姗
+##姚
+##姜
+##姝
+##姣
+##姥
+##姦
+##姨
+##姪
+##姫
+##姬
+##姹
+##姻
+##姿
+##威
+##娃
+##娄
+##娅
+##娆
+##娇
+##娉
+##娑
+##娓
+##娘
+##娛
+##娜
+##娟
+##娠
+##娣
+##娥
+##娩
+##娱
+##娲
+##娴
+##娶
+##娼
+##婀
+##婁
+##婆
+##婉
+##婊
+##婕
+##婚
+##婢
+##婦
+##婧
+##婪
+##婭
+##婴
+##婵
+##婶
+##婷
+##婺
+##婿
+##媒
+##媚
+##媛
+##媞
+##媧
+##媲
+##媳
+##媽
+##媾
+##嫁
+##嫂
+##嫉
+##嫌
+##嫑
+##嫔
+##嫖
+##嫘
+##嫚
+##嫡
+##嫣
+##嫦
+##嫩
+##嫲
+##嫵
+##嫻
+##嬅
+##嬉
+##嬌
+##嬗
+##嬛
+##嬢
+##嬤
+##嬪
+##嬰
+##嬴
+##嬷
+##嬸
+##嬿
+##孀
+##孃
+##子
+##孑
+##孔
+##孕
+##孖
+##字
+##存
+##孙
+##孚
+##孛
+##孜
+##孝
+##孟
+##孢
+##季
+##孤
+##学
+##孩
+##孪
+##孫
+##孬
+##孰
+##孱
+##孳
+##孵
+##學
+##孺
+##孽
+##孿
+##宁
+##它
+##宅
+##宇
+##守
+##安
+##宋
+##完
+##宏
+##宓
+##宕
+##宗
+##官
+##宙
+##定
+##宛
+##宜
+##宝
+##实
+##実
+##宠
+##审
+##客
+##宣
+##室
+##宥
+##宦
+##宪
+##宫
+##宮
+##宰
+##害
+##宴
+##宵
+##家
+##宸
+##容
+##宽
+##宾
+##宿
+##寂
+##寄
+##寅
+##密
+##寇
+##富
+##寐
+##寒
+##寓
+##寛
+##寝
+##寞
+##察
+##寡
+##寢
+##寥
+##實
+##寧
+##寨
+##審
+##寫
+##寬
+##寮
+##寰
+##寵
+##寶
+##寸
+##对
+##寺
+##寻
+##导
+##対
+##寿
+##封
+##専
+##射
+##将
+##將
+##專
+##尉
+##尊
+##尋
+##對
+##導
+##小
+##少
+##尔
+##尕
+##尖
+##尘
+##尚
+##尝
+##尤
+##尧
+##尬
+##就
+##尴
+##尷
+##尸
+##尹
+##尺
+##尻
+##尼
+##尽
+##尾
+##尿
+##局
+##屁
+##层
+##屄
+##居
+##屆
+##屈
+##屉
+##届
+##屋
+##屌
+##屍
+##屎
+##屏
+##屐
+##屑
+##展
+##屜
+##属
+##屠
+##屡
+##屢
+##層
+##履
+##屬
+##屯
+##山
+##屹
+##屿
+##岀
+##岁
+##岂
+##岌
+##岐
+##岑
+##岔
+##岖
+##岗
+##岘
+##岙
+##岚
+##岛
+##岡
+##岩
+##岫
+##岬
+##岭
+##岱
+##岳
+##岷
+##岸
+##峇
+##峋
+##峒
+##峙
+##峡
+##峤
+##峥
+##峦
+##峨
+##峪
+##峭
+##峯
+##峰
+##峴
+##島
+##峻
+##峽
+##崁
+##崂
+##崆
+##崇
+##崎
+##崑
+##崔
+##崖
+##崗
+##崙
+##崛
+##崧
+##崩
+##崭
+##崴
+##崽
+##嵇
+##嵊
+##嵋
+##嵌
+##嵐
+##嵘
+##嵩
+##嵬
+##嵯
+##嶂
+##嶄
+##嶇
+##嶋
+##嶙
+##嶺
+##嶼
+##嶽
+##巅
+##巍
+##巒
+##巔
+##巖
+##川
+##州
+##巡
+##巢
+##工
+##左
+##巧
+##巨
+##巩
+##巫
+##差
+##己
+##已
+##巳
+##巴
+##巷
+##巻
+##巽
+##巾
+##巿
+##币
+##市
+##布
+##帅
+##帆
+##师
+##希
+##帐
+##帑
+##帕
+##帖
+##帘
+##帚
+##帛
+##帜
+##帝
+##帥
+##带
+##帧
+##師
+##席
+##帮
+##帯
+##帰
+##帳
+##帶
+##帷
+##常
+##帼
+##帽
+##幀
+##幂
+##幄
+##幅
+##幌
+##幔
+##幕
+##幟
+##幡
+##幢
+##幣
+##幫
+##干
+##平
+##年
+##并
+##幸
+##幹
+##幺
+##幻
+##幼
+##幽
+##幾
+##广
+##庁
+##広
+##庄
+##庆
+##庇
+##床
+##序
+##庐
+##库
+##应
+##底
+##庖
+##店
+##庙
+##庚
+##府
+##庞
+##废
+##庠
+##度
+##座
+##庫
+##庭
+##庵
+##庶
+##康
+##庸
+##庹
+##庾
+##廁
+##廂
+##廃
+##廈
+##廉
+##廊
+##廓
+##廖
+##廚
+##廝
+##廟
+##廠
+##廢
+##廣
+##廬
+##廳
+##延
+##廷
+##建
+##廿
+##开
+##弁
+##异
+##弃
+##弄
+##弈
+##弊
+##弋
+##式
+##弑
+##弒
+##弓
+##弔
+##引
+##弗
+##弘
+##弛
+##弟
+##张
+##弥
+##弦
+##弧
+##弩
+##弭
+##弯
+##弱
+##張
+##強
+##弹
+##强
+##弼
+##弾
+##彅
+##彆
+##彈
+##彌
+##彎
+##归
+##当
+##录
+##彗
+##彙
+##彝
+##形
+##彤
+##彥
+##彦
+##彧
+##彩
+##彪
+##彫
+##彬
+##彭
+##彰
+##影
+##彷
+##役
+##彻
+##彼
+##彿
+##往
+##征
+##径
+##待
+##徇
+##很
+##徉
+##徊
+##律
+##後
+##徐
+##徑
+##徒
+##従
+##徕
+##得
+##徘
+##徙
+##徜
+##從
+##徠
+##御
+##徨
+##復
+##循
+##徬
+##微
+##徳
+##徴
+##徵
+##德
+##徹
+##徼
+##徽
+##心
+##必
+##忆
+##忌
+##忍
+##忏
+##忐
+##忑
+##忒
+##忖
+##志
+##忘
+##忙
+##応
+##忠
+##忡
+##忤
+##忧
+##忪
+##快
+##忱
+##念
+##忻
+##忽
+##忿
+##怀
+##态
+##怂
+##怅
+##怆
+##怎
+##怏
+##怒
+##怔
+##怕
+##怖
+##怙
+##怜
+##思
+##怠
+##怡
+##急
+##怦
+##性
+##怨
+##怪
+##怯
+##怵
+##总
+##怼
+##恁
+##恃
+##恆
+##恋
+##恍
+##恐
+##恒
+##恕
+##恙
+##恚
+##恢
+##恣
+##恤
+##恥
+##恨
+##恩
+##恪
+##恫
+##恬
+##恭
+##息
+##恰
+##恳
+##恵
+##恶
+##恸
+##恺
+##恻
+##恼
+##恿
+##悄
+##悅
+##悉
+##悌
+##悍
+##悔
+##悖
+##悚
+##悟
+##悠
+##患
+##悦
+##您
+##悩
+##悪
+##悬
+##悯
+##悱
+##悲
+##悴
+##悵
+##悶
+##悸
+##悻
+##悼
+##悽
+##情
+##惆
+##惇
+##惊
+##惋
+##惑
+##惕
+##惘
+##惚
+##惜
+##惟
+##惠
+##惡
+##惦
+##惧
+##惨
+##惩
+##惫
+##惬
+##惭
+##惮
+##惯
+##惰
+##惱
+##想
+##惴
+##惶
+##惹
+##惺
+##愁
+##愆
+##愈
+##愉
+##愍
+##意
+##愕
+##愚
+##愛
+##愜
+##感
+##愣
+##愤
+##愧
+##愫
+##愷
+##愿
+##慄
+##慈
+##態
+##慌
+##慎
+##慑
+##慕
+##慘
+##慚
+##慟
+##慢
+##慣
+##慧
+##慨
+##慫
+##慮
+##慰
+##慳
+##慵
+##慶
+##慷
+##慾
+##憂
+##憊
+##憋
+##憎
+##憐
+##憑
+##憔
+##憚
+##憤
+##憧
+##憨
+##憩
+##憫
+##憬
+##憲
+##憶
+##憾
+##懂
+##懇
+##懈
+##應
+##懊
+##懋
+##懑
+##懒
+##懦
+##懲
+##懵
+##懶
+##懷
+##懸
+##懺
+##懼
+##懾
+##懿
+##戀
+##戈
+##戊
+##戌
+##戍
+##戎
+##戏
+##成
+##我
+##戒
+##戕
+##或
+##战
+##戚
+##戛
+##戟
+##戡
+##戦
+##截
+##戬
+##戮
+##戰
+##戲
+##戳
+##戴
+##戶
+##户
+##戸
+##戻
+##戾
+##房
+##所
+##扁
+##扇
+##扈
+##扉
+##手
+##才
+##扎
+##扑
+##扒
+##打
+##扔
+##払
+##托
+##扛
+##扣
+##扦
+##执
+##扩
+##扪
+##扫
+##扬
+##扭
+##扮
+##扯
+##扰
+##扱
+##扳
+##扶
+##批
+##扼
+##找
+##承
+##技
+##抄
+##抉
+##把
+##抑
+##抒
+##抓
+##投
+##抖
+##抗
+##折
+##抚
+##抛
+##抜
+##択
+##抟
+##抠
+##抡
+##抢
+##护
+##报
+##抨
+##披
+##抬
+##抱
+##抵
+##抹
+##押
+##抽
+##抿
+##拂
+##拄
+##担
+##拆
+##拇
+##拈
+##拉
+##拋
+##拌
+##拍
+##拎
+##拐
+##拒
+##拓
+##拔
+##拖
+##拗
+##拘
+##拙
+##拚
+##招
+##拜
+##拟
+##拡
+##拢
+##拣
+##拥
+##拦
+##拧
+##拨
+##择
+##括
+##拭
+##拮
+##拯
+##拱
+##拳
+##拴
+##拷
+##拼
+##拽
+##拾
+##拿
+##持
+##挂
+##指
+##挈
+##按
+##挎
+##挑
+##挖
+##挙
+##挚
+##挛
+##挝
+##挞
+##挟
+##挠
+##挡
+##挣
+##挤
+##挥
+##挨
+##挪
+##挫
+##振
+##挲
+##挹
+##挺
+##挽
+##挾
+##捂
+##捅
+##捆
+##捉
+##捋
+##捌
+##捍
+##捎
+##捏
+##捐
+##捕
+##捞
+##损
+##捡
+##换
+##捣
+##捧
+##捨
+##捩
+##据
+##捱
+##捲
+##捶
+##捷
+##捺
+##捻
+##掀
+##掂
+##掃
+##掇
+##授
+##掉
+##掌
+##掏
+##掐
+##排
+##掖
+##掘
+##掙
+##掛
+##掠
+##採
+##探
+##掣
+##接
+##控
+##推
+##掩
+##措
+##掬
+##掰
+##掲
+##掳
+##掴
+##掷
+##掸
+##掺
+##揀
+##揃
+##揄
+##揆
+##揉
+##揍
+##描
+##提
+##插
+##揖
+##揚
+##換
+##握
+##揣
+##揩
+##揪
+##揭
+##揮
+##援
+##揶
+##揸
+##揹
+##揽
+##搀
+##搁
+##搂
+##搅
+##損
+##搏
+##搐
+##搓
+##搔
+##搖
+##搗
+##搜
+##搞
+##搡
+##搪
+##搬
+##搭
+##搵
+##搶
+##携
+##搽
+##摀
+##摁
+##摄
+##摆
+##摇
+##摈
+##摊
+##摒
+##摔
+##摘
+##摞
+##摟
+##摧
+##摩
+##摯
+##摳
+##摸
+##摹
+##摺
+##摻
+##撂
+##撃
+##撅
+##撇
+##撈
+##撐
+##撑
+##撒
+##撓
+##撕
+##撚
+##撞
+##撤
+##撥
+##撩
+##撫
+##撬
+##播
+##撮
+##撰
+##撲
+##撵
+##撷
+##撸
+##撻
+##撼
+##撿
+##擀
+##擁
+##擂
+##擄
+##擅
+##擇
+##擊
+##擋
+##操
+##擎
+##擒
+##擔
+##擘
+##據
+##擞
+##擠
+##擡
+##擢
+##擦
+##擬
+##擰
+##擱
+##擲
+##擴
+##擷
+##擺
+##擼
+##擾
+##攀
+##攏
+##攒
+##攔
+##攘
+##攙
+##攜
+##攝
+##攞
+##攢
+##攣
+##攤
+##攥
+##攪
+##攫
+##攬
+##支
+##收
+##攸
+##改
+##攻
+##放
+##政
+##故
+##效
+##敌
+##敍
+##敎
+##敏
+##救
+##敕
+##敖
+##敗
+##敘
+##教
+##敛
+##敝
+##敞
+##敢
+##散
+##敦
+##敬
+##数
+##敲
+##整
+##敵
+##敷
+##數
+##斂
+##斃
+##文
+##斋
+##斌
+##斎
+##斐
+##斑
+##斓
+##斗
+##料
+##斛
+##斜
+##斟
+##斡
+##斤
+##斥
+##斧
+##斩
+##斫
+##斬
+##断
+##斯
+##新
+##斷
+##方
+##於
+##施
+##旁
+##旃
+##旅
+##旋
+##旌
+##旎
+##族
+##旖
+##旗
+##无
+##既
+##日
+##旦
+##旧
+##旨
+##早
+##旬
+##旭
+##旮
+##旱
+##时
+##旷
+##旺
+##旻
+##昀
+##昂
+##昆
+##昇
+##昉
+##昊
+##昌
+##明
+##昏
+##易
+##昔
+##昕
+##昙
+##星
+##映
+##春
+##昧
+##昨
+##昭
+##是
+##昱
+##昴
+##昵
+##昶
+##昼
+##显
+##晁
+##時
+##晃
+##晉
+##晋
+##晌
+##晏
+##晒
+##晓
+##晔
+##晕
+##晖
+##晗
+##晚
+##晝
+##晞
+##晟
+##晤
+##晦
+##晨
+##晩
+##普
+##景
+##晰
+##晴
+##晶
+##晷
+##智
+##晾
+##暂
+##暄
+##暇
+##暈
+##暉
+##暌
+##暐
+##暑
+##暖
+##暗
+##暝
+##暢
+##暧
+##暨
+##暫
+##暮
+##暱
+##暴
+##暸
+##暹
+##曄
+##曆
+##曇
+##曉
+##曖
+##曙
+##曜
+##曝
+##曠
+##曦
+##曬
+##曰
+##曲
+##曳
+##更
+##書
+##曹
+##曼
+##曾
+##替
+##最
+##會
+##月
+##有
+##朋
+##服
+##朐
+##朔
+##朕
+##朗
+##望
+##朝
+##期
+##朦
+##朧
+##木
+##未
+##末
+##本
+##札
+##朮
+##术
+##朱
+##朴
+##朵
+##机
+##朽
+##杀
+##杂
+##权
+##杆
+##杈
+##杉
+##李
+##杏
+##材
+##村
+##杓
+##杖
+##杜
+##杞
+##束
+##杠
+##条
+##来
+##杨
+##杭
+##杯
+##杰
+##東
+##杳
+##杵
+##杷
+##杼
+##松
+##板
+##极
+##构
+##枇
+##枉
+##枋
+##析
+##枕
+##林
+##枚
+##果
+##枝
+##枢
+##枣
+##枪
+##枫
+##枭
+##枯
+##枰
+##枱
+##枳
+##架
+##枷
+##枸
+##柄
+##柏
+##某
+##柑
+##柒
+##染
+##柔
+##柘
+##柚
+##柜
+##柞
+##柠
+##柢
+##查
+##柩
+##柬
+##柯
+##柱
+##柳
+##柴
+##柵
+##査
+##柿
+##栀
+##栃
+##栄
+##栅
+##标
+##栈
+##栉
+##栋
+##栎
+##栏
+##树
+##栓
+##栖
+##栗
+##校
+##栩
+##株
+##样
+##核
+##根
+##格
+##栽
+##栾
+##桀
+##桁
+##桂
+##桃
+##桅
+##框
+##案
+##桉
+##桌
+##桎
+##桐
+##桑
+##桓
+##桔
+##桜
+##桠
+##桡
+##桢
+##档
+##桥
+##桦
+##桧
+##桨
+##桩
+##桶
+##桿
+##梁
+##梅
+##梆
+##梏
+##梓
+##梗
+##條
+##梟
+##梢
+##梦
+##梧
+##梨
+##梭
+##梯
+##械
+##梳
+##梵
+##梶
+##检
+##棂
+##棄
+##棉
+##棋
+##棍
+##棒
+##棕
+##棗
+##棘
+##棚
+##棟
+##棠
+##棣
+##棧
+##森
+##棱
+##棲
+##棵
+##棹
+##棺
+##椁
+##椅
+##椋
+##植
+##椎
+##椒
+##検
+##椪
+##椭
+##椰
+##椹
+##椽
+##椿
+##楂
+##楊
+##楓
+##楔
+##楚
+##楝
+##楞
+##楠
+##楣
+##楨
+##楫
+##業
+##楮
+##極
+##楷
+##楸
+##楹
+##楼
+##楽
+##概
+##榄
+##榆
+##榈
+##榉
+##榔
+##榕
+##榖
+##榛
+##榜
+##榨
+##榫
+##榭
+##榮
+##榱
+##榴
+##榷
+##榻
+##槁
+##槃
+##構
+##槌
+##槍
+##槎
+##槐
+##槓
+##様
+##槛
+##槟
+##槤
+##槭
+##槲
+##槳
+##槻
+##槽
+##槿
+##樁
+##樂
+##樊
+##樑
+##樓
+##標
+##樞
+##樟
+##模
+##樣
+##権
+##横
+##樫
+##樯
+##樱
+##樵
+##樸
+##樹
+##樺
+##樽
+##樾
+##橄
+##橇
+##橋
+##橐
+##橘
+##橙
+##機
+##橡
+##橢
+##橫
+##橱
+##橹
+##橼
+##檀
+##檄
+##檎
+##檐
+##檔
+##檗
+##檜
+##檢
+##檬
+##檯
+##檳
+##檸
+##檻
+##櫃
+##櫚
+##櫛
+##櫥
+##櫸
+##櫻
+##欄
+##權
+##欒
+##欖
+##欠
+##次
+##欢
+##欣
+##欧
+##欲
+##欸
+##欺
+##欽
+##款
+##歆
+##歇
+##歉
+##歌
+##歎
+##歐
+##歓
+##歙
+##歛
+##歡
+##止
+##正
+##此
+##步
+##武
+##歧
+##歩
+##歪
+##歯
+##歲
+##歳
+##歴
+##歷
+##歸
+##歹
+##死
+##歼
+##殁
+##殃
+##殆
+##殇
+##殉
+##殊
+##残
+##殒
+##殓
+##殖
+##殘
+##殞
+##殡
+##殤
+##殭
+##殯
+##殲
+##殴
+##段
+##殷
+##殺
+##殼
+##殿
+##毀
+##毁
+##毂
+##毅
+##毆
+##毋
+##母
+##毎
+##每
+##毒
+##毓
+##比
+##毕
+##毗
+##毘
+##毙
+##毛
+##毡
+##毫
+##毯
+##毽
+##氈
+##氏
+##氐
+##民
+##氓
+##气
+##氖
+##気
+##氙
+##氛
+##氟
+##氡
+##氢
+##氣
+##氤
+##氦
+##氧
+##氨
+##氪
+##氫
+##氮
+##氯
+##氰
+##氲
+##水
+##氷
+##永
+##氹
+##氾
+##汀
+##汁
+##求
+##汆
+##汇
+##汉
+##汎
+##汐
+##汕
+##汗
+##汙
+##汛
+##汝
+##汞
+##江
+##池
+##污
+##汤
+##汨
+##汩
+##汪
+##汰
+##汲
+##汴
+##汶
+##汹
+##決
+##汽
+##汾
+##沁
+##沂
+##沃
+##沅
+##沈
+##沉
+##沌
+##沏
+##沐
+##沒
+##沓
+##沖
+##沙
+##沛
+##沟
+##没
+##沢
+##沣
+##沥
+##沦
+##沧
+##沪
+##沫
+##沭
+##沮
+##沱
+##河
+##沸
+##油
+##治
+##沼
+##沽
+##沾
+##沿
+##況
+##泄
+##泉
+##泊
+##泌
+##泓
+##法
+##泗
+##泛
+##泞
+##泠
+##泡
+##波
+##泣
+##泥
+##注
+##泪
+##泫
+##泮
+##泯
+##泰
+##泱
+##泳
+##泵
+##泷
+##泸
+##泻
+##泼
+##泽
+##泾
+##洁
+##洄
+##洋
+##洒
+##洗
+##洙
+##洛
+##洞
+##津
+##洩
+##洪
+##洮
+##洱
+##洲
+##洵
+##洶
+##洸
+##洹
+##活
+##洼
+##洽
+##派
+##流
+##浃
+##浄
+##浅
+##浆
+##浇
+##浊
+##测
+##济
+##浏
+##浑
+##浒
+##浓
+##浔
+##浙
+##浚
+##浜
+##浣
+##浦
+##浩
+##浪
+##浬
+##浮
+##浯
+##浴
+##海
+##浸
+##涂
+##涅
+##涇
+##消
+##涉
+##涌
+##涎
+##涓
+##涔
+##涕
+##涙
+##涛
+##涝
+##涞
+##涟
+##涠
+##涡
+##涣
+##涤
+##润
+##涧
+##涨
+##涩
+##涪
+##涮
+##涯
+##液
+##涵
+##涸
+##涼
+##涿
+##淀
+##淄
+##淅
+##淆
+##淇
+##淋
+##淌
+##淑
+##淒
+##淖
+##淘
+##淙
+##淚
+##淞
+##淡
+##淤
+##淦
+##淨
+##淩
+##淪
+##淫
+##淬
+##淮
+##深
+##淳
+##淵
+##混
+##淹
+##淺
+##添
+##淼
+##清
+##済
+##渉
+##渊
+##渋
+##渍
+##渎
+##渐
+##渔
+##渗
+##渙
+##渚
+##減
+##渝
+##渠
+##渡
+##渣
+##渤
+##渥
+##渦
+##温
+##測
+##渭
+##港
+##渲
+##渴
+##游
+##渺
+##渾
+##湃
+##湄
+##湊
+##湍
+##湖
+##湘
+##湛
+##湟
+##湧
+##湫
+##湮
+##湯
+##湳
+##湾
+##湿
+##満
+##溃
+##溅
+##溉
+##溏
+##源
+##準
+##溜
+##溝
+##溟
+##溢
+##溥
+##溧
+##溪
+##溫
+##溯
+##溱
+##溴
+##溶
+##溺
+##溼
+##滁
+##滂
+##滄
+##滅
+##滇
+##滋
+##滌
+##滑
+##滓
+##滔
+##滕
+##滙
+##滚
+##滝
+##滞
+##滟
+##满
+##滢
+##滤
+##滥
+##滦
+##滨
+##滩
+##滬
+##滯
+##滲
+##滴
+##滷
+##滸
+##滾
+##滿
+##漁
+##漂
+##漆
+##漉
+##漏
+##漓
+##演
+##漕
+##漠
+##漢
+##漣
+##漩
+##漪
+##漫
+##漬
+##漯
+##漱
+##漲
+##漳
+##漸
+##漾
+##漿
+##潆
+##潇
+##潋
+##潍
+##潑
+##潔
+##潘
+##潛
+##潜
+##潞
+##潟
+##潢
+##潤
+##潦
+##潧
+##潭
+##潮
+##潰
+##潴
+##潸
+##潺
+##潼
+##澀
+##澄
+##澆
+##澈
+##澍
+##澎
+##澗
+##澜
+##澡
+##澤
+##澧
+##澱
+##澳
+##澹
+##激
+##濁
+##濂
+##濃
+##濑
+##濒
+##濕
+##濘
+##濛
+##濟
+##濠
+##濡
+##濤
+##濫
+##濬
+##濮
+##濯
+##濱
+##濺
+##濾
+##瀅
+##瀆
+##瀉
+##瀋
+##瀏
+##瀑
+##瀕
+##瀘
+##瀚
+##瀛
+##瀝
+##瀞
+##瀟
+##瀧
+##瀨
+##瀬
+##瀰
+##瀾
+##灌
+##灏
+##灑
+##灘
+##灝
+##灞
+##灣
+##火
+##灬
+##灭
+##灯
+##灰
+##灵
+##灶
+##灸
+##灼
+##災
+##灾
+##灿
+##炀
+##炁
+##炅
+##炉
+##炊
+##炎
+##炒
+##炔
+##炕
+##炖
+##炙
+##炜
+##炫
+##炬
+##炭
+##炮
+##炯
+##炳
+##炷
+##炸
+##点
+##為
+##炼
+##炽
+##烁
+##烂
+##烃
+##烈
+##烊
+##烏
+##烘
+##烙
+##烛
+##烟
+##烤
+##烦
+##烧
+##烨
+##烩
+##烫
+##烬
+##热
+##烯
+##烷
+##烹
+##烽
+##焉
+##焊
+##焕
+##焖
+##焗
+##焘
+##焙
+##焚
+##焜
+##無
+##焦
+##焯
+##焰
+##焱
+##然
+##焼
+##煅
+##煉
+##煊
+##煌
+##煎
+##煒
+##煖
+##煙
+##煜
+##煞
+##煤
+##煥
+##煦
+##照
+##煨
+##煩
+##煮
+##煲
+##煸
+##煽
+##熄
+##熊
+##熏
+##熒
+##熔
+##熙
+##熟
+##熠
+##熨
+##熬
+##熱
+##熵
+##熹
+##熾
+##燁
+##燃
+##燄
+##燈
+##燉
+##燊
+##燎
+##燒
+##燔
+##燕
+##燙
+##燜
+##營
+##燥
+##燦
+##燧
+##燭
+##燮
+##燴
+##燻
+##燼
+##燿
+##爆
+##爍
+##爐
+##爛
+##爪
+##爬
+##爭
+##爰
+##爱
+##爲
+##爵
+##父
+##爷
+##爸
+##爹
+##爺
+##爻
+##爽
+##爾
+##牆
+##片
+##版
+##牌
+##牍
+##牒
+##牙
+##牛
+##牝
+##牟
+##牠
+##牡
+##牢
+##牦
+##牧
+##物
+##牯
+##牲
+##牴
+##牵
+##特
+##牺
+##牽
+##犀
+##犁
+##犄
+##犊
+##犍
+##犒
+##犢
+##犧
+##犬
+##犯
+##状
+##犷
+##犸
+##犹
+##狀
+##狂
+##狄
+##狈
+##狎
+##狐
+##狒
+##狗
+##狙
+##狞
+##狠
+##狡
+##狩
+##独
+##狭
+##狮
+##狰
+##狱
+##狸
+##狹
+##狼
+##狽
+##猎
+##猕
+##猖
+##猗
+##猙
+##猛
+##猜
+##猝
+##猥
+##猩
+##猪
+##猫
+##猬
+##献
+##猴
+##猶
+##猷
+##猾
+##猿
+##獄
+##獅
+##獎
+##獐
+##獒
+##獗
+##獠
+##獣
+##獨
+##獭
+##獰
+##獲
+##獵
+##獷
+##獸
+##獺
+##獻
+##獼
+##獾
+##玄
+##率
+##玉
+##王
+##玑
+##玖
+##玛
+##玟
+##玠
+##玥
+##玩
+##玫
+##玮
+##环
+##现
+##玲
+##玳
+##玷
+##玺
+##玻
+##珀
+##珂
+##珅
+##珈
+##珉
+##珊
+##珍
+##珏
+##珐
+##珑
+##珙
+##珞
+##珠
+##珣
+##珥
+##珩
+##珪
+##班
+##珮
+##珲
+##珺
+##現
+##球
+##琅
+##理
+##琇
+##琉
+##琊
+##琍
+##琏
+##琐
+##琛
+##琢
+##琥
+##琦
+##琨
+##琪
+##琬
+##琮
+##琰
+##琲
+##琳
+##琴
+##琵
+##琶
+##琺
+##琼
+##瑀
+##瑁
+##瑄
+##瑋
+##瑕
+##瑗
+##瑙
+##瑚
+##瑛
+##瑜
+##瑞
+##瑟
+##瑠
+##瑣
+##瑤
+##瑩
+##瑪
+##瑯
+##瑰
+##瑶
+##瑾
+##璀
+##璁
+##璃
+##璇
+##璉
+##璋
+##璎
+##璐
+##璜
+##璞
+##璟
+##璧
+##璨
+##環
+##璽
+##璿
+##瓊
+##瓏
+##瓒
+##瓜
+##瓢
+##瓣
+##瓤
+##瓦
+##瓮
+##瓯
+##瓴
+##瓶
+##瓷
+##甄
+##甌
+##甕
+##甘
+##甙
+##甚
+##甜
+##生
+##產
+##産
+##甥
+##甦
+##用
+##甩
+##甫
+##甬
+##甭
+##甯
+##田
+##由
+##甲
+##申
+##电
+##男
+##甸
+##町
+##画
+##甾
+##畀
+##畅
+##界
+##畏
+##畑
+##畔
+##留
+##畜
+##畝
+##畢
+##略
+##畦
+##番
+##畫
+##異
+##畲
+##畳
+##畴
+##當
+##畸
+##畹
+##畿
+##疆
+##疇
+##疊
+##疏
+##疑
+##疔
+##疖
+##疗
+##疙
+##疚
+##疝
+##疟
+##疡
+##疣
+##疤
+##疥
+##疫
+##疮
+##疯
+##疱
+##疲
+##疳
+##疵
+##疸
+##疹
+##疼
+##疽
+##疾
+##痂
+##病
+##症
+##痈
+##痉
+##痊
+##痍
+##痒
+##痔
+##痕
+##痘
+##痙
+##痛
+##痞
+##痠
+##痢
+##痣
+##痤
+##痧
+##痨
+##痪
+##痫
+##痰
+##痱
+##痴
+##痹
+##痺
+##痼
+##痿
+##瘀
+##瘁
+##瘋
+##瘍
+##瘓
+##瘘
+##瘙
+##瘟
+##瘠
+##瘡
+##瘢
+##瘤
+##瘦
+##瘧
+##瘩
+##瘪
+##瘫
+##瘴
+##瘸
+##瘾
+##療
+##癇
+##癌
+##癒
+##癖
+##癜
+##癞
+##癡
+##癢
+##癣
+##癥
+##癫
+##癬
+##癮
+##癱
+##癲
+##癸
+##発
+##登
+##發
+##白
+##百
+##皂
+##的
+##皆
+##皇
+##皈
+##皋
+##皎
+##皑
+##皓
+##皖
+##皙
+##皚
+##皮
+##皰
+##皱
+##皴
+##皺
+##皿
+##盂
+##盃
+##盅
+##盆
+##盈
+##益
+##盎
+##盏
+##盐
+##监
+##盒
+##盔
+##盖
+##盗
+##盘
+##盛
+##盜
+##盞
+##盟
+##盡
+##監
+##盤
+##盥
+##盧
+##盪
+##目
+##盯
+##盱
+##盲
+##直
+##相
+##盹
+##盼
+##盾
+##省
+##眈
+##眉
+##看
+##県
+##眙
+##眞
+##真
+##眠
+##眦
+##眨
+##眩
+##眯
+##眶
+##眷
+##眸
+##眺
+##眼
+##眾
+##着
+##睁
+##睇
+##睏
+##睐
+##睑
+##睛
+##睜
+##睞
+##睡
+##睢
+##督
+##睥
+##睦
+##睨
+##睪
+##睫
+##睬
+##睹
+##睽
+##睾
+##睿
+##瞄
+##瞅
+##瞇
+##瞋
+##瞌
+##瞎
+##瞑
+##瞒
+##瞓
+##瞞
+##瞟
+##瞠
+##瞥
+##瞧
+##瞩
+##瞪
+##瞬
+##瞭
+##瞰
+##瞳
+##瞻
+##瞼
+##瞿
+##矇
+##矍
+##矗
+##矚
+##矛
+##矜
+##矢
+##矣
+##知
+##矩
+##矫
+##短
+##矮
+##矯
+##石
+##矶
+##矽
+##矾
+##矿
+##码
+##砂
+##砌
+##砍
+##砒
+##研
+##砖
+##砗
+##砚
+##砝
+##砣
+##砥
+##砧
+##砭
+##砰
+##砲
+##破
+##砷
+##砸
+##砺
+##砼
+##砾
+##础
+##硅
+##硐
+##硒
+##硕
+##硝
+##硫
+##硬
+##确
+##硯
+##硼
+##碁
+##碇
+##碉
+##碌
+##碍
+##碎
+##碑
+##碓
+##碗
+##碘
+##碚
+##碛
+##碟
+##碣
+##碧
+##碩
+##碰
+##碱
+##碳
+##碴
+##確
+##碼
+##碾
+##磁
+##磅
+##磊
+##磋
+##磐
+##磕
+##磚
+##磡
+##磨
+##磬
+##磯
+##磲
+##磷
+##磺
+##礁
+##礎
+##礙
+##礡
+##礦
+##礪
+##礫
+##礴
+##示
+##礼
+##社
+##祀
+##祁
+##祂
+##祇
+##祈
+##祉
+##祎
+##祐
+##祕
+##祖
+##祗
+##祚
+##祛
+##祜
+##祝
+##神
+##祟
+##祠
+##祢
+##祥
+##票
+##祭
+##祯
+##祷
+##祸
+##祺
+##祿
+##禀
+##禁
+##禄
+##禅
+##禍
+##禎
+##福
+##禛
+##禦
+##禧
+##禪
+##禮
+##禱
+##禹
+##禺
+##离
+##禽
+##禾
+##禿
+##秀
+##私
+##秃
+##秆
+##秉
+##秋
+##种
+##科
+##秒
+##秘
+##租
+##秣
+##秤
+##秦
+##秧
+##秩
+##秭
+##积
+##称
+##秸
+##移
+##秽
+##稀
+##稅
+##程
+##稍
+##税
+##稔
+##稗
+##稚
+##稜
+##稞
+##稟
+##稠
+##稣
+##種
+##稱
+##稲
+##稳
+##稷
+##稹
+##稻
+##稼
+##稽
+##稿
+##穀
+##穂
+##穆
+##穌
+##積
+##穎
+##穗
+##穢
+##穩
+##穫
+##穴
+##究
+##穷
+##穹
+##空
+##穿
+##突
+##窃
+##窄
+##窈
+##窍
+##窑
+##窒
+##窓
+##窕
+##窖
+##窗
+##窘
+##窜
+##窝
+##窟
+##窠
+##窥
+##窦
+##窨
+##窩
+##窪
+##窮
+##窯
+##窺
+##窿
+##竄
+##竅
+##竇
+##竊
+##立
+##竖
+##站
+##竜
+##竞
+##竟
+##章
+##竣
+##童
+##竭
+##端
+##競
+##竹
+##竺
+##竽
+##竿
+##笃
+##笆
+##笈
+##笋
+##笏
+##笑
+##笔
+##笙
+##笛
+##笞
+##笠
+##符
+##笨
+##第
+##笹
+##笺
+##笼
+##筆
+##等
+##筊
+##筋
+##筍
+##筏
+##筐
+##筑
+##筒
+##答
+##策
+##筛
+##筝
+##筠
+##筱
+##筲
+##筵
+##筷
+##筹
+##签
+##简
+##箇
+##箋
+##箍
+##箏
+##箐
+##箔
+##箕
+##算
+##箝
+##管
+##箩
+##箫
+##箭
+##箱
+##箴
+##箸
+##節
+##篁
+##範
+##篆
+##篇
+##築
+##篑
+##篓
+##篙
+##篝
+##篠
+##篡
+##篤
+##篩
+##篪
+##篮
+##篱
+##篷
+##簇
+##簌
+##簍
+##簡
+##簦
+##簧
+##簪
+##簫
+##簷
+##簸
+##簽
+##簾
+##簿
+##籁
+##籃
+##籌
+##籍
+##籐
+##籟
+##籠
+##籤
+##籬
+##籮
+##籲
+##米
+##类
+##籼
+##籽
+##粄
+##粉
+##粑
+##粒
+##粕
+##粗
+##粘
+##粟
+##粤
+##粥
+##粧
+##粪
+##粮
+##粱
+##粲
+##粳
+##粵
+##粹
+##粼
+##粽
+##精
+##粿
+##糅
+##糊
+##糍
+##糕
+##糖
+##糗
+##糙
+##糜
+##糞
+##糟
+##糠
+##糧
+##糬
+##糯
+##糰
+##糸
+##系
+##糾
+##紀
+##紂
+##約
+##紅
+##紉
+##紊
+##紋
+##納
+##紐
+##紓
+##純
+##紗
+##紘
+##紙
+##級
+##紛
+##紜
+##素
+##紡
+##索
+##紧
+##紫
+##紮
+##累
+##細
+##紳
+##紹
+##紺
+##終
+##絃
+##組
+##絆
+##経
+##結
+##絕
+##絞
+##絡
+##絢
+##給
+##絨
+##絮
+##統
+##絲
+##絳
+##絵
+##絶
+##絹
+##綁
+##綏
+##綑
+##經
+##継
+##続
+##綜
+##綠
+##綢
+##綦
+##綫
+##綬
+##維
+##綱
+##網
+##綴
+##綵
+##綸
+##綺
+##綻
+##綽
+##綾
+##綿
+##緊
+##緋
+##総
+##緑
+##緒
+##緘
+##線
+##緝
+##緞
+##締
+##緣
+##編
+##緩
+##緬
+##緯
+##練
+##緹
+##緻
+##縁
+##縄
+##縈
+##縛
+##縝
+##縣
+##縫
+##縮
+##縱
+##縴
+##縷
+##總
+##績
+##繁
+##繃
+##繆
+##繇
+##繋
+##織
+##繕
+##繚
+##繞
+##繡
+##繩
+##繪
+##繫
+##繭
+##繳
+##繹
+##繼
+##繽
+##纂
+##續
+##纍
+##纏
+##纓
+##纔
+##纖
+##纜
+##纠
+##红
+##纣
+##纤
+##约
+##级
+##纨
+##纪
+##纫
+##纬
+##纭
+##纯
+##纰
+##纱
+##纲
+##纳
+##纵
+##纶
+##纷
+##纸
+##纹
+##纺
+##纽
+##纾
+##线
+##绀
+##练
+##组
+##绅
+##细
+##织
+##终
+##绊
+##绍
+##绎
+##经
+##绑
+##绒
+##结
+##绔
+##绕
+##绘
+##给
+##绚
+##绛
+##络
+##绝
+##绞
+##统
+##绡
+##绢
+##绣
+##绥
+##绦
+##继
+##绩
+##绪
+##绫
+##续
+##绮
+##绯
+##绰
+##绳
+##维
+##绵
+##绶
+##绷
+##绸
+##绻
+##综
+##绽
+##绾
+##绿
+##缀
+##缄
+##缅
+##缆
+##缇
+##缈
+##缉
+##缎
+##缓
+##缔
+##缕
+##编
+##缘
+##缙
+##缚
+##缜
+##缝
+##缠
+##缢
+##缤
+##缥
+##缨
+##缩
+##缪
+##缭
+##缮
+##缰
+##缱
+##缴
+##缸
+##缺
+##缽
+##罂
+##罄
+##罌
+##罐
+##网
+##罔
+##罕
+##罗
+##罚
+##罡
+##罢
+##罩
+##罪
+##置
+##罰
+##署
+##罵
+##罷
+##罹
+##羁
+##羅
+##羈
+##羊
+##羌
+##美
+##羔
+##羚
+##羞
+##羟
+##羡
+##羣
+##群
+##羥
+##羧
+##羨
+##義
+##羯
+##羲
+##羸
+##羹
+##羽
+##羿
+##翁
+##翅
+##翊
+##翌
+##翎
+##習
+##翔
+##翘
+##翟
+##翠
+##翡
+##翦
+##翩
+##翰
+##翱
+##翳
+##翹
+##翻
+##翼
+##耀
+##老
+##考
+##耄
+##者
+##耆
+##耋
+##而
+##耍
+##耐
+##耒
+##耕
+##耗
+##耘
+##耙
+##耦
+##耨
+##耳
+##耶
+##耷
+##耸
+##耻
+##耽
+##耿
+##聂
+##聆
+##聊
+##聋
+##职
+##聒
+##联
+##聖
+##聘
+##聚
+##聞
+##聪
+##聯
+##聰
+##聲
+##聳
+##聴
+##聶
+##職
+##聽
+##聾
+##聿
+##肃
+##肄
+##肅
+##肆
+##肇
+##肉
+##肋
+##肌
+##肏
+##肓
+##肖
+##肘
+##肚
+##肛
+##肝
+##肠
+##股
+##肢
+##肤
+##肥
+##肩
+##肪
+##肮
+##肯
+##肱
+##育
+##肴
+##肺
+##肽
+##肾
+##肿
+##胀
+##胁
+##胃
+##胄
+##胆
+##背
+##胍
+##胎
+##胖
+##胚
+##胛
+##胜
+##胝
+##胞
+##胡
+##胤
+##胥
+##胧
+##胫
+##胭
+##胯
+##胰
+##胱
+##胳
+##胴
+##胶
+##胸
+##胺
+##能
+##脂
+##脅
+##脆
+##脇
+##脈
+##脉
+##脊
+##脍
+##脏
+##脐
+##脑
+##脓
+##脖
+##脘
+##脚
+##脛
+##脣
+##脩
+##脫
+##脯
+##脱
+##脲
+##脳
+##脸
+##脹
+##脾
+##腆
+##腈
+##腊
+##腋
+##腌
+##腎
+##腐
+##腑
+##腓
+##腔
+##腕
+##腥
+##腦
+##腩
+##腫
+##腭
+##腮
+##腰
+##腱
+##腳
+##腴
+##腸
+##腹
+##腺
+##腻
+##腼
+##腾
+##腿
+##膀
+##膈
+##膊
+##膏
+##膑
+##膘
+##膚
+##膛
+##膜
+##膝
+##膠
+##膦
+##膨
+##膩
+##膳
+##膺
+##膻
+##膽
+##膾
+##膿
+##臀
+##臂
+##臃
+##臆
+##臉
+##臊
+##臍
+##臓
+##臘
+##臟
+##臣
+##臥
+##臧
+##臨
+##自
+##臬
+##臭
+##至
+##致
+##臺
+##臻
+##臼
+##臾
+##舀
+##舂
+##舅
+##舆
+##與
+##興
+##舉
+##舊
+##舌
+##舍
+##舎
+##舐
+##舒
+##舔
+##舖
+##舗
+##舛
+##舜
+##舞
+##舟
+##航
+##舫
+##般
+##舰
+##舱
+##舵
+##舶
+##舷
+##舸
+##船
+##舺
+##舾
+##艇
+##艋
+##艘
+##艙
+##艦
+##艮
+##良
+##艰
+##艱
+##色
+##艳
+##艷
+##艹
+##艺
+##艾
+##节
+##芃
+##芈
+##芊
+##芋
+##芍
+##芎
+##芒
+##芙
+##芜
+##芝
+##芡
+##芥
+##芦
+##芩
+##芪
+##芫
+##芬
+##芭
+##芮
+##芯
+##花
+##芳
+##芷
+##芸
+##芹
+##芻
+##芽
+##芾
+##苁
+##苄
+##苇
+##苋
+##苍
+##苏
+##苑
+##苒
+##苓
+##苔
+##苕
+##苗
+##苛
+##苜
+##苞
+##苟
+##苡
+##苣
+##若
+##苦
+##苫
+##苯
+##英
+##苷
+##苹
+##苻
+##茁
+##茂
+##范
+##茄
+##茅
+##茉
+##茎
+##茏
+##茗
+##茜
+##茧
+##茨
+##茫
+##茬
+##茭
+##茯
+##茱
+##茲
+##茴
+##茵
+##茶
+##茸
+##茹
+##茼
+##荀
+##荃
+##荆
+##草
+##荊
+##荏
+##荐
+##荒
+##荔
+##荖
+##荘
+##荚
+##荞
+##荟
+##荠
+##荡
+##荣
+##荤
+##荥
+##荧
+##荨
+##荪
+##荫
+##药
+##荳
+##荷
+##荸
+##荻
+##荼
+##荽
+##莅
+##莆
+##莉
+##莊
+##莎
+##莒
+##莓
+##莖
+##莘
+##莞
+##莠
+##莢
+##莧
+##莪
+##莫
+##莱
+##莲
+##莴
+##获
+##莹
+##莺
+##莽
+##莿
+##菀
+##菁
+##菅
+##菇
+##菈
+##菊
+##菌
+##菏
+##菓
+##菖
+##菘
+##菜
+##菟
+##菠
+##菡
+##菩
+##華
+##菱
+##菲
+##菸
+##菽
+##萁
+##萃
+##萄
+##萊
+##萋
+##萌
+##萍
+##萎
+##萘
+##萝
+##萤
+##营
+##萦
+##萧
+##萨
+##萩
+##萬
+##萱
+##萵
+##萸
+##萼
+##落
+##葆
+##葉
+##著
+##葚
+##葛
+##葡
+##董
+##葦
+##葩
+##葫
+##葬
+##葭
+##葯
+##葱
+##葳
+##葵
+##葷
+##葺
+##蒂
+##蒋
+##蒐
+##蒔
+##蒙
+##蒜
+##蒞
+##蒟
+##蒡
+##蒨
+##蒲
+##蒸
+##蒹
+##蒻
+##蒼
+##蒿
+##蓁
+##蓄
+##蓆
+##蓉
+##蓋
+##蓑
+##蓓
+##蓖
+##蓝
+##蓟
+##蓦
+##蓬
+##蓮
+##蓼
+##蓿
+##蔑
+##蔓
+##蔔
+##蔗
+##蔘
+##蔚
+##蔡
+##蔣
+##蔥
+##蔫
+##蔬
+##蔭
+##蔵
+##蔷
+##蔺
+##蔻
+##蔼
+##蔽
+##蕁
+##蕃
+##蕈
+##蕉
+##蕊
+##蕎
+##蕙
+##蕤
+##蕨
+##蕩
+##蕪
+##蕭
+##蕲
+##蕴
+##蕻
+##蕾
+##薄
+##薅
+##薇
+##薈
+##薊
+##薏
+##薑
+##薔
+##薙
+##薛
+##薦
+##薨
+##薩
+##薪
+##薬
+##薯
+##薰
+##薹
+##藉
+##藍
+##藏
+##藐
+##藓
+##藕
+##藜
+##藝
+##藤
+##藥
+##藩
+##藹
+##藻
+##藿
+##蘆
+##蘇
+##蘊
+##蘋
+##蘑
+##蘚
+##蘭
+##蘸
+##蘼
+##蘿
+##虎
+##虏
+##虐
+##虑
+##虔
+##處
+##虚
+##虛
+##虜
+##虞
+##號
+##虢
+##虧
+##虫
+##虬
+##虱
+##虹
+##虻
+##虽
+##虾
+##蚀
+##蚁
+##蚂
+##蚊
+##蚌
+##蚓
+##蚕
+##蚜
+##蚝
+##蚣
+##蚤
+##蚩
+##蚪
+##蚯
+##蚱
+##蚵
+##蛀
+##蛆
+##蛇
+##蛊
+##蛋
+##蛎
+##蛐
+##蛔
+##蛙
+##蛛
+##蛟
+##蛤
+##蛭
+##蛮
+##蛰
+##蛳
+##蛹
+##蛻
+##蛾
+##蜀
+##蜂
+##蜃
+##蜆
+##蜇
+##蜈
+##蜊
+##蜍
+##蜒
+##蜓
+##蜕
+##蜗
+##蜘
+##蜚
+##蜜
+##蜡
+##蜢
+##蜥
+##蜱
+##蜴
+##蜷
+##蜻
+##蜿
+##蝇
+##蝈
+##蝉
+##蝌
+##蝎
+##蝕
+##蝗
+##蝙
+##蝟
+##蝠
+##蝦
+##蝨
+##蝴
+##蝶
+##蝸
+##蝼
+##螂
+##螃
+##融
+##螞
+##螢
+##螨
+##螯
+##螳
+##螺
+##蟀
+##蟄
+##蟆
+##蟋
+##蟎
+##蟑
+##蟒
+##蟠
+##蟬
+##蟲
+##蟹
+##蟻
+##蟾
+##蠅
+##蠍
+##蠔
+##蠕
+##蠛
+##蠟
+##蠡
+##蠢
+##蠣
+##蠱
+##蠶
+##蠹
+##蠻
+##血
+##衄
+##衅
+##衆
+##行
+##衍
+##術
+##衔
+##街
+##衙
+##衛
+##衝
+##衞
+##衡
+##衢
+##衣
+##补
+##表
+##衩
+##衫
+##衬
+##衮
+##衰
+##衲
+##衷
+##衹
+##衾
+##衿
+##袁
+##袂
+##袄
+##袅
+##袈
+##袋
+##袍
+##袒
+##袖
+##袜
+##袞
+##袤
+##袪
+##被
+##袭
+##袱
+##裁
+##裂
+##装
+##裆
+##裊
+##裏
+##裔
+##裕
+##裘
+##裙
+##補
+##裝
+##裟
+##裡
+##裤
+##裨
+##裱
+##裳
+##裴
+##裸
+##裹
+##製
+##裾
+##褂
+##複
+##褐
+##褒
+##褓
+##褔
+##褚
+##褥
+##褪
+##褫
+##褲
+##褶
+##褻
+##襁
+##襄
+##襟
+##襠
+##襪
+##襬
+##襯
+##襲
+##西
+##要
+##覃
+##覆
+##覇
+##見
+##規
+##覓
+##視
+##覚
+##覦
+##覧
+##親
+##覬
+##観
+##覷
+##覺
+##覽
+##觀
+##见
+##观
+##规
+##觅
+##视
+##览
+##觉
+##觊
+##觎
+##觐
+##觑
+##角
+##觞
+##解
+##觥
+##触
+##觸
+##言
+##訂
+##計
+##訊
+##討
+##訓
+##訕
+##訖
+##託
+##記
+##訛
+##訝
+##訟
+##訣
+##訥
+##訪
+##設
+##許
+##訳
+##訴
+##訶
+##診
+##註
+##証
+##詆
+##詐
+##詔
+##評
+##詛
+##詞
+##詠
+##詡
+##詢
+##詣
+##試
+##詩
+##詫
+##詬
+##詭
+##詮
+##詰
+##話
+##該
+##詳
+##詹
+##詼
+##誅
+##誇
+##誉
+##誌
+##認
+##誓
+##誕
+##誘
+##語
+##誠
+##誡
+##誣
+##誤
+##誥
+##誦
+##誨
+##說
+##説
+##読
+##誰
+##課
+##誹
+##誼
+##調
+##諄
+##談
+##請
+##諏
+##諒
+##論
+##諗
+##諜
+##諡
+##諦
+##諧
+##諫
+##諭
+##諮
+##諱
+##諳
+##諷
+##諸
+##諺
+##諾
+##謀
+##謁
+##謂
+##謄
+##謊
+##謎
+##謐
+##謔
+##謗
+##謙
+##講
+##謝
+##謠
+##謨
+##謬
+##謹
+##謾
+##譁
+##證
+##譎
+##譏
+##識
+##譙
+##譚
+##譜
+##警
+##譬
+##譯
+##議
+##譲
+##譴
+##護
+##譽
+##讀
+##變
+##讓
+##讚
+##讞
+##计
+##订
+##认
+##讥
+##讧
+##讨
+##让
+##讪
+##讫
+##训
+##议
+##讯
+##记
+##讲
+##讳
+##讴
+##讶
+##讷
+##许
+##讹
+##论
+##讼
+##讽
+##设
+##访
+##诀
+##证
+##诃
+##评
+##诅
+##识
+##诈
+##诉
+##诊
+##诋
+##词
+##诏
+##译
+##试
+##诗
+##诘
+##诙
+##诚
+##诛
+##话
+##诞
+##诟
+##诠
+##诡
+##询
+##诣
+##诤
+##该
+##详
+##诧
+##诩
+##诫
+##诬
+##语
+##误
+##诰
+##诱
+##诲
+##说
+##诵
+##诶
+##请
+##诸
+##诺
+##读
+##诽
+##课
+##诿
+##谀
+##谁
+##调
+##谄
+##谅
+##谆
+##谈
+##谊
+##谋
+##谌
+##谍
+##谎
+##谏
+##谐
+##谑
+##谒
+##谓
+##谔
+##谕
+##谗
+##谘
+##谙
+##谚
+##谛
+##谜
+##谟
+##谢
+##谣
+##谤
+##谥
+##谦
+##谧
+##谨
+##谩
+##谪
+##谬
+##谭
+##谯
+##谱
+##谲
+##谴
+##谶
+##谷
+##豁
+##豆
+##豇
+##豈
+##豉
+##豊
+##豌
+##豎
+##豐
+##豔
+##豚
+##象
+##豢
+##豪
+##豫
+##豬
+##豹
+##豺
+##貂
+##貅
+##貌
+##貓
+##貔
+##貘
+##貝
+##貞
+##負
+##財
+##貢
+##貧
+##貨
+##販
+##貪
+##貫
+##責
+##貯
+##貰
+##貳
+##貴
+##貶
+##買
+##貸
+##費
+##貼
+##貽
+##貿
+##賀
+##賁
+##賂
+##賃
+##賄
+##資
+##賈
+##賊
+##賑
+##賓
+##賜
+##賞
+##賠
+##賡
+##賢
+##賣
+##賤
+##賦
+##質
+##賬
+##賭
+##賴
+##賺
+##購
+##賽
+##贅
+##贈
+##贊
+##贍
+##贏
+##贓
+##贖
+##贛
+##贝
+##贞
+##负
+##贡
+##财
+##责
+##贤
+##败
+##账
+##货
+##质
+##贩
+##贪
+##贫
+##贬
+##购
+##贮
+##贯
+##贰
+##贱
+##贲
+##贴
+##贵
+##贷
+##贸
+##费
+##贺
+##贻
+##贼
+##贾
+##贿
+##赁
+##赂
+##赃
+##资
+##赅
+##赈
+##赊
+##赋
+##赌
+##赎
+##赏
+##赐
+##赓
+##赔
+##赖
+##赘
+##赚
+##赛
+##赝
+##赞
+##赠
+##赡
+##赢
+##赣
+##赤
+##赦
+##赧
+##赫
+##赭
+##走
+##赳
+##赴
+##赵
+##赶
+##起
+##趁
+##超
+##越
+##趋
+##趕
+##趙
+##趟
+##趣
+##趨
+##足
+##趴
+##趵
+##趸
+##趺
+##趾
+##跃
+##跄
+##跆
+##跋
+##跌
+##跎
+##跑
+##跖
+##跚
+##跛
+##距
+##跟
+##跡
+##跤
+##跨
+##跩
+##跪
+##路
+##跳
+##践
+##跷
+##跹
+##跺
+##跻
+##踉
+##踊
+##踌
+##踏
+##踐
+##踝
+##踞
+##踟
+##踢
+##踩
+##踪
+##踮
+##踱
+##踴
+##踵
+##踹
+##蹂
+##蹄
+##蹇
+##蹈
+##蹉
+##蹊
+##蹋
+##蹑
+##蹒
+##蹙
+##蹟
+##蹣
+##蹤
+##蹦
+##蹩
+##蹬
+##蹭
+##蹲
+##蹴
+##蹶
+##蹺
+##蹼
+##蹿
+##躁
+##躇
+##躉
+##躊
+##躋
+##躍
+##躏
+##躪
+##身
+##躬
+##躯
+##躲
+##躺
+##軀
+##車
+##軋
+##軌
+##軍
+##軒
+##軟
+##転
+##軸
+##軼
+##軽
+##軾
+##較
+##載
+##輒
+##輓
+##輔
+##輕
+##輛
+##輝
+##輟
+##輩
+##輪
+##輯
+##輸
+##輻
+##輾
+##輿
+##轄
+##轅
+##轆
+##轉
+##轍
+##轎
+##轟
+##车
+##轧
+##轨
+##轩
+##转
+##轭
+##轮
+##软
+##轰
+##轲
+##轴
+##轶
+##轻
+##轼
+##载
+##轿
+##较
+##辄
+##辅
+##辆
+##辇
+##辈
+##辉
+##辊
+##辍
+##辐
+##辑
+##输
+##辕
+##辖
+##辗
+##辘
+##辙
+##辛
+##辜
+##辞
+##辟
+##辣
+##辦
+##辨
+##辩
+##辫
+##辭
+##辮
+##辯
+##辰
+##辱
+##農
+##边
+##辺
+##辻
+##込
+##辽
+##达
+##迁
+##迂
+##迄
+##迅
+##过
+##迈
+##迎
+##运
+##近
+##返
+##还
+##这
+##进
+##远
+##违
+##连
+##迟
+##迢
+##迤
+##迥
+##迦
+##迩
+##迪
+##迫
+##迭
+##述
+##迴
+##迷
+##迸
+##迹
+##迺
+##追
+##退
+##送
+##适
+##逃
+##逅
+##逆
+##选
+##逊
+##逍
+##透
+##逐
+##递
+##途
+##逕
+##逗
+##這
+##通
+##逛
+##逝
+##逞
+##速
+##造
+##逢
+##連
+##逮
+##週
+##進
+##逵
+##逶
+##逸
+##逻
+##逼
+##逾
+##遁
+##遂
+##遅
+##遇
+##遊
+##運
+##遍
+##過
+##遏
+##遐
+##遑
+##遒
+##道
+##達
+##違
+##遗
+##遙
+##遛
+##遜
+##遞
+##遠
+##遢
+##遣
+##遥
+##遨
+##適
+##遭
+##遮
+##遲
+##遴
+##遵
+##遶
+##遷
+##選
+##遺
+##遼
+##遽
+##避
+##邀
+##邁
+##邂
+##邃
+##還
+##邇
+##邈
+##邊
+##邋
+##邏
+##邑
+##邓
+##邕
+##邛
+##邝
+##邢
+##那
+##邦
+##邨
+##邪
+##邬
+##邮
+##邯
+##邰
+##邱
+##邳
+##邵
+##邸
+##邹
+##邺
+##邻
+##郁
+##郅
+##郊
+##郎
+##郑
+##郜
+##郝
+##郡
+##郢
+##郤
+##郦
+##郧
+##部
+##郫
+##郭
+##郴
+##郵
+##郷
+##郸
+##都
+##鄂
+##鄉
+##鄒
+##鄔
+##鄙
+##鄞
+##鄢
+##鄧
+##鄭
+##鄰
+##鄱
+##鄲
+##鄺
+##酉
+##酊
+##酋
+##酌
+##配
+##酐
+##酒
+##酗
+##酚
+##酝
+##酢
+##酣
+##酥
+##酩
+##酪
+##酬
+##酮
+##酯
+##酰
+##酱
+##酵
+##酶
+##酷
+##酸
+##酿
+##醃
+##醇
+##醉
+##醋
+##醍
+##醐
+##醒
+##醚
+##醛
+##醜
+##醞
+##醣
+##醪
+##醫
+##醬
+##醮
+##醯
+##醴
+##醺
+##釀
+##釁
+##采
+##釉
+##释
+##釋
+##里
+##重
+##野
+##量
+##釐
+##金
+##釗
+##釘
+##釜
+##針
+##釣
+##釦
+##釧
+##釵
+##鈀
+##鈉
+##鈍
+##鈎
+##鈔
+##鈕
+##鈞
+##鈣
+##鈦
+##鈪
+##鈴
+##鈺
+##鈾
+##鉀
+##鉄
+##鉅
+##鉉
+##鉑
+##鉗
+##鉚
+##鉛
+##鉤
+##鉴
+##鉻
+##銀
+##銃
+##銅
+##銑
+##銓
+##銖
+##銘
+##銜
+##銬
+##銭
+##銮
+##銳
+##銷
+##銹
+##鋁
+##鋅
+##鋒
+##鋤
+##鋪
+##鋰
+##鋸
+##鋼
+##錄
+##錐
+##錘
+##錚
+##錠
+##錢
+##錦
+##錨
+##錫
+##錮
+##錯
+##録
+##錳
+##錶
+##鍊
+##鍋
+##鍍
+##鍛
+##鍥
+##鍰
+##鍵
+##鍺
+##鍾
+##鎂
+##鎊
+##鎌
+##鎏
+##鎔
+##鎖
+##鎗
+##鎚
+##鎧
+##鎬
+##鎮
+##鎳
+##鏈
+##鏖
+##鏗
+##鏘
+##鏞
+##鏟
+##鏡
+##鏢
+##鏤
+##鏽
+##鐘
+##鐮
+##鐲
+##鐳
+##鐵
+##鐸
+##鐺
+##鑄
+##鑊
+##鑑
+##鑒
+##鑣
+##鑫
+##鑰
+##鑲
+##鑼
+##鑽
+##鑾
+##鑿
+##针
+##钉
+##钊
+##钎
+##钏
+##钒
+##钓
+##钗
+##钙
+##钛
+##钜
+##钝
+##钞
+##钟
+##钠
+##钡
+##钢
+##钣
+##钤
+##钥
+##钦
+##钧
+##钨
+##钩
+##钮
+##钯
+##钰
+##钱
+##钳
+##钴
+##钵
+##钺
+##钻
+##钼
+##钾
+##钿
+##铀
+##铁
+##铂
+##铃
+##铄
+##铅
+##铆
+##铉
+##铎
+##铐
+##铛
+##铜
+##铝
+##铠
+##铡
+##铢
+##铣
+##铤
+##铨
+##铩
+##铬
+##铭
+##铮
+##铰
+##铲
+##铵
+##银
+##铸
+##铺
+##链
+##铿
+##销
+##锁
+##锂
+##锄
+##锅
+##锆
+##锈
+##锉
+##锋
+##锌
+##锏
+##锐
+##锑
+##错
+##锚
+##锟
+##锡
+##锢
+##锣
+##锤
+##锥
+##锦
+##锭
+##键
+##锯
+##锰
+##锲
+##锵
+##锹
+##锺
+##锻
+##镀
+##镁
+##镂
+##镇
+##镉
+##镌
+##镍
+##镐
+##镑
+##镕
+##镖
+##镗
+##镛
+##镜
+##镣
+##镭
+##镯
+##镰
+##镳
+##镶
+##長
+##长
+##門
+##閃
+##閉
+##開
+##閎
+##閏
+##閑
+##閒
+##間
+##閔
+##閘
+##閡
+##関
+##閣
+##閥
+##閨
+##閩
+##閱
+##閲
+##閹
+##閻
+##閾
+##闆
+##闇
+##闊
+##闌
+##闍
+##闔
+##闕
+##闖
+##闘
+##關
+##闡
+##闢
+##门
+##闪
+##闫
+##闭
+##问
+##闯
+##闰
+##闲
+##间
+##闵
+##闷
+##闸
+##闹
+##闺
+##闻
+##闽
+##闾
+##阀
+##阁
+##阂
+##阅
+##阆
+##阇
+##阈
+##阉
+##阎
+##阐
+##阑
+##阔
+##阕
+##阖
+##阙
+##阚
+##阜
+##队
+##阡
+##阪
+##阮
+##阱
+##防
+##阳
+##阴
+##阵
+##阶
+##阻
+##阿
+##陀
+##陂
+##附
+##际
+##陆
+##陇
+##陈
+##陋
+##陌
+##降
+##限
+##陕
+##陛
+##陝
+##陞
+##陟
+##陡
+##院
+##陣
+##除
+##陨
+##险
+##陪
+##陰
+##陲
+##陳
+##陵
+##陶
+##陷
+##陸
+##険
+##陽
+##隅
+##隆
+##隈
+##隊
+##隋
+##隍
+##階
+##随
+##隐
+##隔
+##隕
+##隘
+##隙
+##際
+##障
+##隠
+##隣
+##隧
+##隨
+##險
+##隱
+##隴
+##隶
+##隸
+##隻
+##隼
+##隽
+##难
+##雀
+##雁
+##雄
+##雅
+##集
+##雇
+##雉
+##雋
+##雌
+##雍
+##雎
+##雏
+##雑
+##雒
+##雕
+##雖
+##雙
+##雛
+##雜
+##雞
+##離
+##難
+##雨
+##雪
+##雯
+##雰
+##雲
+##雳
+##零
+##雷
+##雹
+##電
+##雾
+##需
+##霁
+##霄
+##霆
+##震
+##霈
+##霉
+##霊
+##霍
+##霎
+##霏
+##霑
+##霓
+##霖
+##霜
+##霞
+##霧
+##霭
+##霰
+##露
+##霸
+##霹
+##霽
+##霾
+##靂
+##靄
+##靈
+##青
+##靓
+##靖
+##静
+##靚
+##靛
+##靜
+##非
+##靠
+##靡
+##面
+##靥
+##靦
+##革
+##靳
+##靴
+##靶
+##靼
+##鞅
+##鞋
+##鞍
+##鞏
+##鞑
+##鞘
+##鞠
+##鞣
+##鞦
+##鞭
+##韆
+##韋
+##韌
+##韓
+##韜
+##韦
+##韧
+##韩
+##韬
+##韭
+##音
+##韵
+##韶
+##韻
+##響
+##頁
+##頂
+##頃
+##項
+##順
+##須
+##頌
+##預
+##頑
+##頒
+##頓
+##頗
+##領
+##頜
+##頡
+##頤
+##頫
+##頭
+##頰
+##頷
+##頸
+##頹
+##頻
+##頼
+##顆
+##題
+##額
+##顎
+##顏
+##顔
+##願
+##顛
+##類
+##顧
+##顫
+##顯
+##顱
+##顴
+##页
+##顶
+##顷
+##项
+##顺
+##须
+##顼
+##顽
+##顾
+##顿
+##颁
+##颂
+##预
+##颅
+##领
+##颇
+##颈
+##颉
+##颊
+##颌
+##颍
+##颐
+##频
+##颓
+##颔
+##颖
+##颗
+##题
+##颚
+##颛
+##颜
+##额
+##颞
+##颠
+##颡
+##颢
+##颤
+##颦
+##颧
+##風
+##颯
+##颱
+##颳
+##颶
+##颼
+##飄
+##飆
+##风
+##飒
+##飓
+##飕
+##飘
+##飙
+##飚
+##飛
+##飞
+##食
+##飢
+##飨
+##飩
+##飪
+##飯
+##飲
+##飼
+##飽
+##飾
+##餃
+##餅
+##餉
+##養
+##餌
+##餐
+##餒
+##餓
+##餘
+##餚
+##餛
+##餞
+##餡
+##館
+##餮
+##餵
+##餾
+##饅
+##饈
+##饋
+##饌
+##饍
+##饑
+##饒
+##饕
+##饗
+##饞
+##饥
+##饨
+##饪
+##饬
+##饭
+##饮
+##饯
+##饰
+##饱
+##饲
+##饴
+##饵
+##饶
+##饷
+##饺
+##饼
+##饽
+##饿
+##馀
+##馁
+##馄
+##馅
+##馆
+##馈
+##馋
+##馍
+##馏
+##馒
+##馔
+##首
+##馗
+##香
+##馥
+##馨
+##馬
+##馭
+##馮
+##馳
+##馴
+##駁
+##駄
+##駅
+##駆
+##駐
+##駒
+##駕
+##駛
+##駝
+##駭
+##駱
+##駿
+##騁
+##騎
+##騏
+##験
+##騙
+##騨
+##騰
+##騷
+##驀
+##驅
+##驊
+##驍
+##驒
+##驕
+##驗
+##驚
+##驛
+##驟
+##驢
+##驥
+##马
+##驭
+##驮
+##驯
+##驰
+##驱
+##驳
+##驴
+##驶
+##驷
+##驸
+##驹
+##驻
+##驼
+##驾
+##驿
+##骁
+##骂
+##骄
+##骅
+##骆
+##骇
+##骈
+##骊
+##骋
+##验
+##骏
+##骐
+##骑
+##骗
+##骚
+##骛
+##骜
+##骞
+##骠
+##骡
+##骤
+##骥
+##骧
+##骨
+##骯
+##骰
+##骶
+##骷
+##骸
+##骼
+##髂
+##髅
+##髋
+##髏
+##髒
+##髓
+##體
+##髖
+##高
+##髦
+##髪
+##髮
+##髯
+##髻
+##鬃
+##鬆
+##鬍
+##鬓
+##鬚
+##鬟
+##鬢
+##鬣
+##鬥
+##鬧
+##鬱
+##鬼
+##魁
+##魂
+##魄
+##魅
+##魇
+##魍
+##魏
+##魔
+##魘
+##魚
+##魯
+##魷
+##鮑
+##鮨
+##鮪
+##鮭
+##鮮
+##鯉
+##鯊
+##鯖
+##鯛
+##鯨
+##鯰
+##鯽
+##鰍
+##鰓
+##鰭
+##鰲
+##鰻
+##鰾
+##鱈
+##鱉
+##鱔
+##鱗
+##鱷
+##鱸
+##鱼
+##鱿
+##鲁
+##鲈
+##鲍
+##鲑
+##鲛
+##鲜
+##鲟
+##鲢
+##鲤
+##鲨
+##鲫
+##鲱
+##鲲
+##鲶
+##鲷
+##鲸
+##鳃
+##鳄
+##鳅
+##鳌
+##鳍
+##鳕
+##鳖
+##鳗
+##鳝
+##鳞
+##鳥
+##鳩
+##鳳
+##鳴
+##鳶
+##鴉
+##鴕
+##鴛
+##鴦
+##鴨
+##鴻
+##鴿
+##鵑
+##鵜
+##鵝
+##鵡
+##鵬
+##鵰
+##鵲
+##鶘
+##鶩
+##鶯
+##鶴
+##鷗
+##鷲
+##鷹
+##鷺
+##鸚
+##鸞
+##鸟
+##鸠
+##鸡
+##鸢
+##鸣
+##鸥
+##鸦
+##鸨
+##鸪
+##鸭
+##鸯
+##鸳
+##鸵
+##鸽
+##鸾
+##鸿
+##鹂
+##鹃
+##鹄
+##鹅
+##鹈
+##鹉
+##鹊
+##鹌
+##鹏
+##鹑
+##鹕
+##鹘
+##鹜
+##鹞
+##鹤
+##鹦
+##鹧
+##鹫
+##鹭
+##鹰
+##鹳
+##鹵
+##鹹
+##鹼
+##鹽
+##鹿
+##麂
+##麋
+##麒
+##麓
+##麗
+##麝
+##麟
+##麥
+##麦
+##麩
+##麴
+##麵
+##麸
+##麺
+##麻
+##麼
+##麽
+##麾
+##黃
+##黄
+##黍
+##黎
+##黏
+##黑
+##黒
+##黔
+##默
+##黛
+##黜
+##黝
+##點
+##黠
+##黨
+##黯
+##黴
+##鼋
+##鼎
+##鼐
+##鼓
+##鼠
+##鼬
+##鼹
+##鼻
+##鼾
+##齁
+##齊
+##齋
+##齐
+##齒
+##齡
+##齢
+##齣
+##齦
+##齿
+##龄
+##龅
+##龈
+##龊
+##龋
+##龌
+##龍
+##龐
+##龔
+##龕
+##龙
+##龚
+##龛
+##龜
+##龟
+##︰
+##︱
+##︶
+##︿
+##﹁
+##﹂
+##﹍
+##﹏
+##﹐
+##﹑
+##﹒
+##﹔
+##﹕
+##﹖
+##﹗
+##﹙
+##﹚
+##﹝
+##﹞
+##﹡
+##﹣
+##!
+##"
+###
+##$
+##%
+##&
+##'
+##(
+##)
+##*
+##,
+##-
+##.
+##/
+##:
+##;
+##<
+##?
+##@
+##[
+##\
+##]
+##^
+##_
+##`
+##f
+##h
+##j
+##u
+##w
+##z
+##{
+##}
+##。
+##「
+##」
+##、
+##・
+##ッ
+##ー
+##イ
+##ク
+##シ
+##ス
+##ト
+##ノ
+##フ
+##ラ
+##ル
+##ン
+##゙
+##゚
+## ̄
+##¥
+##👍
+##🔥
+##😂
+##😎
diff --git a/intelligent_cabin/models/local_joint_bert_nlu/joint_nlu_config.json b/intelligent_cabin/models/local_joint_bert_nlu/joint_nlu_config.json
new file mode 100644
index 0000000..ed47d38
--- /dev/null
+++ b/intelligent_cabin/models/local_joint_bert_nlu/joint_nlu_config.json
@@ -0,0 +1,57 @@
+{
+ "base_model_name": "hfl/chinese-macbert-base",
+ "intent_task": "multi_label",
+ "intent_labels": [
+ "cabin_ac_off",
+ "cabin_ac_on",
+ "cabin_defog_front_on",
+ "cabin_defog_rear_on",
+ "cabin_fan_down",
+ "cabin_fan_up",
+ "cabin_lights_off",
+ "cabin_lights_on",
+ "cabin_lock_doors",
+ "cabin_mirror_fold",
+ "cabin_mirror_unfold",
+ "cabin_nav_cancel",
+ "cabin_nav_to",
+ "cabin_next_track",
+ "cabin_pause_music",
+ "cabin_play_music",
+ "cabin_previous_track",
+ "cabin_seat_heat_off",
+ "cabin_seat_heat_on",
+ "cabin_set_ac",
+ "cabin_sunroof_close",
+ "cabin_sunroof_open",
+ "cabin_unlock_doors",
+ "cabin_volume_down",
+ "cabin_volume_mute",
+ "cabin_volume_up",
+ "cabin_window_close",
+ "cabin_window_open",
+ "cabin_wiper_off",
+ "cabin_wiper_on",
+ "cs_cancel_order",
+ "cs_query_logistics",
+ "cs_query_order",
+ "cs_transfer_human"
+ ],
+ "slot_labels": [
+ "O",
+ "B-destination",
+ "I-destination",
+ "B-genre",
+ "I-genre",
+ "B-order_id",
+ "I-order_id",
+ "B-song",
+ "I-song",
+ "B-temperature",
+ "I-temperature"
+ ],
+ "max_length": 64,
+ "intent_threshold": 0.4,
+ "multi_intent_threshold": 0.4,
+ "max_multi_intents": 4
+}
\ No newline at end of file
diff --git a/intelligent_cabin/models/local_joint_bert_nlu/special_tokens_map.json b/intelligent_cabin/models/local_joint_bert_nlu/special_tokens_map.json
new file mode 100644
index 0000000..9bbecc1
--- /dev/null
+++ b/intelligent_cabin/models/local_joint_bert_nlu/special_tokens_map.json
@@ -0,0 +1,37 @@
+{
+ "cls_token": {
+ "content": "[CLS]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false
+ },
+ "mask_token": {
+ "content": "[MASK]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false
+ },
+ "pad_token": {
+ "content": "[PAD]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false
+ },
+ "sep_token": {
+ "content": "[SEP]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false
+ },
+ "unk_token": {
+ "content": "[UNK]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false
+ }
+}
diff --git a/intelligent_cabin/models/local_joint_bert_nlu/tokenizer.json b/intelligent_cabin/models/local_joint_bert_nlu/tokenizer.json
new file mode 100644
index 0000000..c5690b0
--- /dev/null
+++ b/intelligent_cabin/models/local_joint_bert_nlu/tokenizer.json
@@ -0,0 +1,21292 @@
+{
+ "version": "1.0",
+ "truncation": {
+ "direction": "Right",
+ "max_length": 64,
+ "strategy": "LongestFirst",
+ "stride": 0
+ },
+ "padding": {
+ "strategy": {
+ "Fixed": 64
+ },
+ "direction": "Right",
+ "pad_to_multiple_of": null,
+ "pad_id": 0,
+ "pad_type_id": 0,
+ "pad_token": "[PAD]"
+ },
+ "added_tokens": [
+ {
+ "id": 0,
+ "content": "[PAD]",
+ "single_word": false,
+ "lstrip": false,
+ "rstrip": false,
+ "normalized": false,
+ "special": true
+ },
+ {
+ "id": 100,
+ "content": "[UNK]",
+ "single_word": false,
+ "lstrip": false,
+ "rstrip": false,
+ "normalized": false,
+ "special": true
+ },
+ {
+ "id": 101,
+ "content": "[CLS]",
+ "single_word": false,
+ "lstrip": false,
+ "rstrip": false,
+ "normalized": false,
+ "special": true
+ },
+ {
+ "id": 102,
+ "content": "[SEP]",
+ "single_word": false,
+ "lstrip": false,
+ "rstrip": false,
+ "normalized": false,
+ "special": true
+ },
+ {
+ "id": 103,
+ "content": "[MASK]",
+ "single_word": false,
+ "lstrip": false,
+ "rstrip": false,
+ "normalized": false,
+ "special": true
+ }
+ ],
+ "normalizer": {
+ "type": "BertNormalizer",
+ "clean_text": true,
+ "handle_chinese_chars": true,
+ "strip_accents": null,
+ "lowercase": true
+ },
+ "pre_tokenizer": {
+ "type": "BertPreTokenizer"
+ },
+ "post_processor": {
+ "type": "TemplateProcessing",
+ "single": [
+ {
+ "SpecialToken": {
+ "id": "[CLS]",
+ "type_id": 0
+ }
+ },
+ {
+ "Sequence": {
+ "id": "A",
+ "type_id": 0
+ }
+ },
+ {
+ "SpecialToken": {
+ "id": "[SEP]",
+ "type_id": 0
+ }
+ }
+ ],
+ "pair": [
+ {
+ "SpecialToken": {
+ "id": "[CLS]",
+ "type_id": 0
+ }
+ },
+ {
+ "Sequence": {
+ "id": "A",
+ "type_id": 0
+ }
+ },
+ {
+ "SpecialToken": {
+ "id": "[SEP]",
+ "type_id": 0
+ }
+ },
+ {
+ "Sequence": {
+ "id": "B",
+ "type_id": 1
+ }
+ },
+ {
+ "SpecialToken": {
+ "id": "[SEP]",
+ "type_id": 1
+ }
+ }
+ ],
+ "special_tokens": {
+ "[CLS]": {
+ "id": "[CLS]",
+ "ids": [
+ 101
+ ],
+ "tokens": [
+ "[CLS]"
+ ]
+ },
+ "[SEP]": {
+ "id": "[SEP]",
+ "ids": [
+ 102
+ ],
+ "tokens": [
+ "[SEP]"
+ ]
+ }
+ }
+ },
+ "decoder": {
+ "type": "WordPiece",
+ "prefix": "##",
+ "cleanup": true
+ },
+ "model": {
+ "type": "WordPiece",
+ "unk_token": "[UNK]",
+ "continuing_subword_prefix": "##",
+ "max_input_chars_per_word": 100,
+ "vocab": {
+ "[PAD]": 0,
+ "[unused1]": 1,
+ "[unused2]": 2,
+ "[unused3]": 3,
+ "[unused4]": 4,
+ "[unused5]": 5,
+ "[unused6]": 6,
+ "[unused7]": 7,
+ "[unused8]": 8,
+ "[unused9]": 9,
+ "[unused10]": 10,
+ "[unused11]": 11,
+ "[unused12]": 12,
+ "[unused13]": 13,
+ "[unused14]": 14,
+ "[unused15]": 15,
+ "[unused16]": 16,
+ "[unused17]": 17,
+ "[unused18]": 18,
+ "[unused19]": 19,
+ "[unused20]": 20,
+ "[unused21]": 21,
+ "[unused22]": 22,
+ "[unused23]": 23,
+ "[unused24]": 24,
+ "[unused25]": 25,
+ "[unused26]": 26,
+ "[unused27]": 27,
+ "[unused28]": 28,
+ "[unused29]": 29,
+ "[unused30]": 30,
+ "[unused31]": 31,
+ "[unused32]": 32,
+ "[unused33]": 33,
+ "[unused34]": 34,
+ "[unused35]": 35,
+ "[unused36]": 36,
+ "[unused37]": 37,
+ "[unused38]": 38,
+ "[unused39]": 39,
+ "[unused40]": 40,
+ "[unused41]": 41,
+ "[unused42]": 42,
+ "[unused43]": 43,
+ "[unused44]": 44,
+ "[unused45]": 45,
+ "[unused46]": 46,
+ "[unused47]": 47,
+ "[unused48]": 48,
+ "[unused49]": 49,
+ "[unused50]": 50,
+ "[unused51]": 51,
+ "[unused52]": 52,
+ "[unused53]": 53,
+ "[unused54]": 54,
+ "[unused55]": 55,
+ "[unused56]": 56,
+ "[unused57]": 57,
+ "[unused58]": 58,
+ "[unused59]": 59,
+ "[unused60]": 60,
+ "[unused61]": 61,
+ "[unused62]": 62,
+ "[unused63]": 63,
+ "[unused64]": 64,
+ "[unused65]": 65,
+ "[unused66]": 66,
+ "[unused67]": 67,
+ "[unused68]": 68,
+ "[unused69]": 69,
+ "[unused70]": 70,
+ "[unused71]": 71,
+ "[unused72]": 72,
+ "[unused73]": 73,
+ "[unused74]": 74,
+ "[unused75]": 75,
+ "[unused76]": 76,
+ "[unused77]": 77,
+ "[unused78]": 78,
+ "[unused79]": 79,
+ "[unused80]": 80,
+ "[unused81]": 81,
+ "[unused82]": 82,
+ "[unused83]": 83,
+ "[unused84]": 84,
+ "[unused85]": 85,
+ "[unused86]": 86,
+ "[unused87]": 87,
+ "[unused88]": 88,
+ "[unused89]": 89,
+ "[unused90]": 90,
+ "[unused91]": 91,
+ "[unused92]": 92,
+ "[unused93]": 93,
+ "[unused94]": 94,
+ "[unused95]": 95,
+ "[unused96]": 96,
+ "[unused97]": 97,
+ "[unused98]": 98,
+ "[unused99]": 99,
+ "[UNK]": 100,
+ "[CLS]": 101,
+ "[SEP]": 102,
+ "[MASK]": 103,
+ "": 104,
+ "": 105,
+ "!": 106,
+ "\"": 107,
+ "#": 108,
+ "$": 109,
+ "%": 110,
+ "&": 111,
+ "'": 112,
+ "(": 113,
+ ")": 114,
+ "*": 115,
+ "+": 116,
+ ",": 117,
+ "-": 118,
+ ".": 119,
+ "/": 120,
+ "0": 121,
+ "1": 122,
+ "2": 123,
+ "3": 124,
+ "4": 125,
+ "5": 126,
+ "6": 127,
+ "7": 128,
+ "8": 129,
+ "9": 130,
+ ":": 131,
+ ";": 132,
+ "<": 133,
+ "=": 134,
+ ">": 135,
+ "?": 136,
+ "@": 137,
+ "[": 138,
+ "\\": 139,
+ "]": 140,
+ "^": 141,
+ "_": 142,
+ "a": 143,
+ "b": 144,
+ "c": 145,
+ "d": 146,
+ "e": 147,
+ "f": 148,
+ "g": 149,
+ "h": 150,
+ "i": 151,
+ "j": 152,
+ "k": 153,
+ "l": 154,
+ "m": 155,
+ "n": 156,
+ "o": 157,
+ "p": 158,
+ "q": 159,
+ "r": 160,
+ "s": 161,
+ "t": 162,
+ "u": 163,
+ "v": 164,
+ "w": 165,
+ "x": 166,
+ "y": 167,
+ "z": 168,
+ "{": 169,
+ "|": 170,
+ "}": 171,
+ "~": 172,
+ "£": 173,
+ "¤": 174,
+ "¥": 175,
+ "§": 176,
+ "©": 177,
+ "«": 178,
+ "®": 179,
+ "°": 180,
+ "±": 181,
+ "²": 182,
+ "³": 183,
+ "µ": 184,
+ "·": 185,
+ "¹": 186,
+ "º": 187,
+ "»": 188,
+ "¼": 189,
+ "×": 190,
+ "ß": 191,
+ "æ": 192,
+ "÷": 193,
+ "ø": 194,
+ "đ": 195,
+ "ŋ": 196,
+ "ɔ": 197,
+ "ə": 198,
+ "ɡ": 199,
+ "ʰ": 200,
+ "ˇ": 201,
+ "ˈ": 202,
+ "ˊ": 203,
+ "ˋ": 204,
+ "ˍ": 205,
+ "ː": 206,
+ "˙": 207,
+ "˚": 208,
+ "ˢ": 209,
+ "α": 210,
+ "β": 211,
+ "γ": 212,
+ "δ": 213,
+ "ε": 214,
+ "η": 215,
+ "θ": 216,
+ "ι": 217,
+ "κ": 218,
+ "λ": 219,
+ "μ": 220,
+ "ν": 221,
+ "ο": 222,
+ "π": 223,
+ "ρ": 224,
+ "ς": 225,
+ "σ": 226,
+ "τ": 227,
+ "υ": 228,
+ "φ": 229,
+ "χ": 230,
+ "ψ": 231,
+ "ω": 232,
+ "а": 233,
+ "б": 234,
+ "в": 235,
+ "г": 236,
+ "д": 237,
+ "е": 238,
+ "ж": 239,
+ "з": 240,
+ "и": 241,
+ "к": 242,
+ "л": 243,
+ "м": 244,
+ "н": 245,
+ "о": 246,
+ "п": 247,
+ "р": 248,
+ "с": 249,
+ "т": 250,
+ "у": 251,
+ "ф": 252,
+ "х": 253,
+ "ц": 254,
+ "ч": 255,
+ "ш": 256,
+ "ы": 257,
+ "ь": 258,
+ "я": 259,
+ "і": 260,
+ "ا": 261,
+ "ب": 262,
+ "ة": 263,
+ "ت": 264,
+ "د": 265,
+ "ر": 266,
+ "س": 267,
+ "ع": 268,
+ "ل": 269,
+ "م": 270,
+ "ن": 271,
+ "ه": 272,
+ "و": 273,
+ "ي": 274,
+ "۩": 275,
+ "ก": 276,
+ "ง": 277,
+ "น": 278,
+ "ม": 279,
+ "ย": 280,
+ "ร": 281,
+ "อ": 282,
+ "า": 283,
+ "เ": 284,
+ "๑": 285,
+ "་": 286,
+ "ღ": 287,
+ "ᄀ": 288,
+ "ᄁ": 289,
+ "ᄂ": 290,
+ "ᄃ": 291,
+ "ᄅ": 292,
+ "ᄆ": 293,
+ "ᄇ": 294,
+ "ᄈ": 295,
+ "ᄉ": 296,
+ "ᄋ": 297,
+ "ᄌ": 298,
+ "ᄎ": 299,
+ "ᄏ": 300,
+ "ᄐ": 301,
+ "ᄑ": 302,
+ "ᄒ": 303,
+ "ᅡ": 304,
+ "ᅢ": 305,
+ "ᅣ": 306,
+ "ᅥ": 307,
+ "ᅦ": 308,
+ "ᅧ": 309,
+ "ᅨ": 310,
+ "ᅩ": 311,
+ "ᅪ": 312,
+ "ᅬ": 313,
+ "ᅭ": 314,
+ "ᅮ": 315,
+ "ᅯ": 316,
+ "ᅲ": 317,
+ "ᅳ": 318,
+ "ᅴ": 319,
+ "ᅵ": 320,
+ "ᆨ": 321,
+ "ᆫ": 322,
+ "ᆯ": 323,
+ "ᆷ": 324,
+ "ᆸ": 325,
+ "ᆺ": 326,
+ "ᆻ": 327,
+ "ᆼ": 328,
+ "ᗜ": 329,
+ "ᵃ": 330,
+ "ᵉ": 331,
+ "ᵍ": 332,
+ "ᵏ": 333,
+ "ᵐ": 334,
+ "ᵒ": 335,
+ "ᵘ": 336,
+ "‖": 337,
+ "„": 338,
+ "†": 339,
+ "•": 340,
+ "‥": 341,
+ "‧": 342,
+ "
": 343,
+ "‰": 344,
+ "′": 345,
+ "″": 346,
+ "‹": 347,
+ "›": 348,
+ "※": 349,
+ "‿": 350,
+ "⁄": 351,
+ "ⁱ": 352,
+ "⁺": 353,
+ "ⁿ": 354,
+ "₁": 355,
+ "₂": 356,
+ "₃": 357,
+ "₄": 358,
+ "€": 359,
+ "℃": 360,
+ "№": 361,
+ "™": 362,
+ "ⅰ": 363,
+ "ⅱ": 364,
+ "ⅲ": 365,
+ "ⅳ": 366,
+ "ⅴ": 367,
+ "←": 368,
+ "↑": 369,
+ "→": 370,
+ "↓": 371,
+ "↔": 372,
+ "↗": 373,
+ "↘": 374,
+ "⇒": 375,
+ "∀": 376,
+ "−": 377,
+ "∕": 378,
+ "∙": 379,
+ "√": 380,
+ "∞": 381,
+ "∟": 382,
+ "∠": 383,
+ "∣": 384,
+ "∥": 385,
+ "∩": 386,
+ "∮": 387,
+ "∶": 388,
+ "∼": 389,
+ "∽": 390,
+ "≈": 391,
+ "≒": 392,
+ "≡": 393,
+ "≤": 394,
+ "≥": 395,
+ "≦": 396,
+ "≧": 397,
+ "≪": 398,
+ "≫": 399,
+ "⊙": 400,
+ "⋅": 401,
+ "⋈": 402,
+ "⋯": 403,
+ "⌒": 404,
+ "①": 405,
+ "②": 406,
+ "③": 407,
+ "④": 408,
+ "⑤": 409,
+ "⑥": 410,
+ "⑦": 411,
+ "⑧": 412,
+ "⑨": 413,
+ "⑩": 414,
+ "⑴": 415,
+ "⑵": 416,
+ "⑶": 417,
+ "⑷": 418,
+ "⑸": 419,
+ "⒈": 420,
+ "⒉": 421,
+ "⒊": 422,
+ "⒋": 423,
+ "ⓒ": 424,
+ "ⓔ": 425,
+ "ⓘ": 426,
+ "─": 427,
+ "━": 428,
+ "│": 429,
+ "┃": 430,
+ "┅": 431,
+ "┆": 432,
+ "┊": 433,
+ "┌": 434,
+ "└": 435,
+ "├": 436,
+ "┣": 437,
+ "═": 438,
+ "║": 439,
+ "╚": 440,
+ "╞": 441,
+ "╠": 442,
+ "╭": 443,
+ "╮": 444,
+ "╯": 445,
+ "╰": 446,
+ "╱": 447,
+ "╳": 448,
+ "▂": 449,
+ "▃": 450,
+ "▅": 451,
+ "▇": 452,
+ "█": 453,
+ "▉": 454,
+ "▋": 455,
+ "▌": 456,
+ "▍": 457,
+ "▎": 458,
+ "■": 459,
+ "□": 460,
+ "▪": 461,
+ "▫": 462,
+ "▬": 463,
+ "▲": 464,
+ "△": 465,
+ "▶": 466,
+ "►": 467,
+ "▼": 468,
+ "▽": 469,
+ "◆": 470,
+ "◇": 471,
+ "○": 472,
+ "◎": 473,
+ "●": 474,
+ "◕": 475,
+ "◠": 476,
+ "◢": 477,
+ "◤": 478,
+ "☀": 479,
+ "★": 480,
+ "☆": 481,
+ "☕": 482,
+ "☞": 483,
+ "☺": 484,
+ "☼": 485,
+ "♀": 486,
+ "♂": 487,
+ "♠": 488,
+ "♡": 489,
+ "♣": 490,
+ "♥": 491,
+ "♦": 492,
+ "♪": 493,
+ "♫": 494,
+ "♬": 495,
+ "✈": 496,
+ "✔": 497,
+ "✕": 498,
+ "✖": 499,
+ "✦": 500,
+ "✨": 501,
+ "✪": 502,
+ "✰": 503,
+ "✿": 504,
+ "❀": 505,
+ "❤": 506,
+ "➜": 507,
+ "➤": 508,
+ "⦿": 509,
+ "、": 510,
+ "。": 511,
+ "〃": 512,
+ "々": 513,
+ "〇": 514,
+ "〈": 515,
+ "〉": 516,
+ "《": 517,
+ "》": 518,
+ "「": 519,
+ "」": 520,
+ "『": 521,
+ "』": 522,
+ "【": 523,
+ "】": 524,
+ "〓": 525,
+ "〔": 526,
+ "〕": 527,
+ "〖": 528,
+ "〗": 529,
+ "〜": 530,
+ "〝": 531,
+ "〞": 532,
+ "ぁ": 533,
+ "あ": 534,
+ "ぃ": 535,
+ "い": 536,
+ "う": 537,
+ "ぇ": 538,
+ "え": 539,
+ "お": 540,
+ "か": 541,
+ "き": 542,
+ "く": 543,
+ "け": 544,
+ "こ": 545,
+ "さ": 546,
+ "し": 547,
+ "す": 548,
+ "せ": 549,
+ "そ": 550,
+ "た": 551,
+ "ち": 552,
+ "っ": 553,
+ "つ": 554,
+ "て": 555,
+ "と": 556,
+ "な": 557,
+ "に": 558,
+ "ぬ": 559,
+ "ね": 560,
+ "の": 561,
+ "は": 562,
+ "ひ": 563,
+ "ふ": 564,
+ "へ": 565,
+ "ほ": 566,
+ "ま": 567,
+ "み": 568,
+ "む": 569,
+ "め": 570,
+ "も": 571,
+ "ゃ": 572,
+ "や": 573,
+ "ゅ": 574,
+ "ゆ": 575,
+ "ょ": 576,
+ "よ": 577,
+ "ら": 578,
+ "り": 579,
+ "る": 580,
+ "れ": 581,
+ "ろ": 582,
+ "わ": 583,
+ "を": 584,
+ "ん": 585,
+ "゜": 586,
+ "ゝ": 587,
+ "ァ": 588,
+ "ア": 589,
+ "ィ": 590,
+ "イ": 591,
+ "ゥ": 592,
+ "ウ": 593,
+ "ェ": 594,
+ "エ": 595,
+ "ォ": 596,
+ "オ": 597,
+ "カ": 598,
+ "キ": 599,
+ "ク": 600,
+ "ケ": 601,
+ "コ": 602,
+ "サ": 603,
+ "シ": 604,
+ "ス": 605,
+ "セ": 606,
+ "ソ": 607,
+ "タ": 608,
+ "チ": 609,
+ "ッ": 610,
+ "ツ": 611,
+ "テ": 612,
+ "ト": 613,
+ "ナ": 614,
+ "ニ": 615,
+ "ヌ": 616,
+ "ネ": 617,
+ "ノ": 618,
+ "ハ": 619,
+ "ヒ": 620,
+ "フ": 621,
+ "ヘ": 622,
+ "ホ": 623,
+ "マ": 624,
+ "ミ": 625,
+ "ム": 626,
+ "メ": 627,
+ "モ": 628,
+ "ャ": 629,
+ "ヤ": 630,
+ "ュ": 631,
+ "ユ": 632,
+ "ョ": 633,
+ "ヨ": 634,
+ "ラ": 635,
+ "リ": 636,
+ "ル": 637,
+ "レ": 638,
+ "ロ": 639,
+ "ワ": 640,
+ "ヲ": 641,
+ "ン": 642,
+ "ヶ": 643,
+ "・": 644,
+ "ー": 645,
+ "ヽ": 646,
+ "ㄅ": 647,
+ "ㄆ": 648,
+ "ㄇ": 649,
+ "ㄉ": 650,
+ "ㄋ": 651,
+ "ㄌ": 652,
+ "ㄍ": 653,
+ "ㄎ": 654,
+ "ㄏ": 655,
+ "ㄒ": 656,
+ "ㄚ": 657,
+ "ㄛ": 658,
+ "ㄞ": 659,
+ "ㄟ": 660,
+ "ㄢ": 661,
+ "ㄤ": 662,
+ "ㄥ": 663,
+ "ㄧ": 664,
+ "ㄨ": 665,
+ "ㆍ": 666,
+ "㈦": 667,
+ "㊣": 668,
+ "㎡": 669,
+ "㗎": 670,
+ "一": 671,
+ "丁": 672,
+ "七": 673,
+ "万": 674,
+ "丈": 675,
+ "三": 676,
+ "上": 677,
+ "下": 678,
+ "不": 679,
+ "与": 680,
+ "丐": 681,
+ "丑": 682,
+ "专": 683,
+ "且": 684,
+ "丕": 685,
+ "世": 686,
+ "丘": 687,
+ "丙": 688,
+ "业": 689,
+ "丛": 690,
+ "东": 691,
+ "丝": 692,
+ "丞": 693,
+ "丟": 694,
+ "両": 695,
+ "丢": 696,
+ "两": 697,
+ "严": 698,
+ "並": 699,
+ "丧": 700,
+ "丨": 701,
+ "个": 702,
+ "丫": 703,
+ "中": 704,
+ "丰": 705,
+ "串": 706,
+ "临": 707,
+ "丶": 708,
+ "丸": 709,
+ "丹": 710,
+ "为": 711,
+ "主": 712,
+ "丼": 713,
+ "丽": 714,
+ "举": 715,
+ "丿": 716,
+ "乂": 717,
+ "乃": 718,
+ "久": 719,
+ "么": 720,
+ "义": 721,
+ "之": 722,
+ "乌": 723,
+ "乍": 724,
+ "乎": 725,
+ "乏": 726,
+ "乐": 727,
+ "乒": 728,
+ "乓": 729,
+ "乔": 730,
+ "乖": 731,
+ "乗": 732,
+ "乘": 733,
+ "乙": 734,
+ "乜": 735,
+ "九": 736,
+ "乞": 737,
+ "也": 738,
+ "习": 739,
+ "乡": 740,
+ "书": 741,
+ "乩": 742,
+ "买": 743,
+ "乱": 744,
+ "乳": 745,
+ "乾": 746,
+ "亀": 747,
+ "亂": 748,
+ "了": 749,
+ "予": 750,
+ "争": 751,
+ "事": 752,
+ "二": 753,
+ "于": 754,
+ "亏": 755,
+ "云": 756,
+ "互": 757,
+ "五": 758,
+ "井": 759,
+ "亘": 760,
+ "亙": 761,
+ "亚": 762,
+ "些": 763,
+ "亜": 764,
+ "亞": 765,
+ "亟": 766,
+ "亡": 767,
+ "亢": 768,
+ "交": 769,
+ "亥": 770,
+ "亦": 771,
+ "产": 772,
+ "亨": 773,
+ "亩": 774,
+ "享": 775,
+ "京": 776,
+ "亭": 777,
+ "亮": 778,
+ "亲": 779,
+ "亳": 780,
+ "亵": 781,
+ "人": 782,
+ "亿": 783,
+ "什": 784,
+ "仁": 785,
+ "仃": 786,
+ "仄": 787,
+ "仅": 788,
+ "仆": 789,
+ "仇": 790,
+ "今": 791,
+ "介": 792,
+ "仍": 793,
+ "从": 794,
+ "仏": 795,
+ "仑": 796,
+ "仓": 797,
+ "仔": 798,
+ "仕": 799,
+ "他": 800,
+ "仗": 801,
+ "付": 802,
+ "仙": 803,
+ "仝": 804,
+ "仞": 805,
+ "仟": 806,
+ "代": 807,
+ "令": 808,
+ "以": 809,
+ "仨": 810,
+ "仪": 811,
+ "们": 812,
+ "仮": 813,
+ "仰": 814,
+ "仲": 815,
+ "件": 816,
+ "价": 817,
+ "任": 818,
+ "份": 819,
+ "仿": 820,
+ "企": 821,
+ "伉": 822,
+ "伊": 823,
+ "伍": 824,
+ "伎": 825,
+ "伏": 826,
+ "伐": 827,
+ "休": 828,
+ "伕": 829,
+ "众": 830,
+ "优": 831,
+ "伙": 832,
+ "会": 833,
+ "伝": 834,
+ "伞": 835,
+ "伟": 836,
+ "传": 837,
+ "伢": 838,
+ "伤": 839,
+ "伦": 840,
+ "伪": 841,
+ "伫": 842,
+ "伯": 843,
+ "估": 844,
+ "伴": 845,
+ "伶": 846,
+ "伸": 847,
+ "伺": 848,
+ "似": 849,
+ "伽": 850,
+ "佃": 851,
+ "但": 852,
+ "佇": 853,
+ "佈": 854,
+ "位": 855,
+ "低": 856,
+ "住": 857,
+ "佐": 858,
+ "佑": 859,
+ "体": 860,
+ "佔": 861,
+ "何": 862,
+ "佗": 863,
+ "佘": 864,
+ "余": 865,
+ "佚": 866,
+ "佛": 867,
+ "作": 868,
+ "佝": 869,
+ "佞": 870,
+ "佟": 871,
+ "你": 872,
+ "佢": 873,
+ "佣": 874,
+ "佤": 875,
+ "佥": 876,
+ "佩": 877,
+ "佬": 878,
+ "佯": 879,
+ "佰": 880,
+ "佳": 881,
+ "併": 882,
+ "佶": 883,
+ "佻": 884,
+ "佼": 885,
+ "使": 886,
+ "侃": 887,
+ "侄": 888,
+ "來": 889,
+ "侈": 890,
+ "例": 891,
+ "侍": 892,
+ "侏": 893,
+ "侑": 894,
+ "侖": 895,
+ "侗": 896,
+ "供": 897,
+ "依": 898,
+ "侠": 899,
+ "価": 900,
+ "侣": 901,
+ "侥": 902,
+ "侦": 903,
+ "侧": 904,
+ "侨": 905,
+ "侬": 906,
+ "侮": 907,
+ "侯": 908,
+ "侵": 909,
+ "侶": 910,
+ "侷": 911,
+ "便": 912,
+ "係": 913,
+ "促": 914,
+ "俄": 915,
+ "俊": 916,
+ "俎": 917,
+ "俏": 918,
+ "俐": 919,
+ "俑": 920,
+ "俗": 921,
+ "俘": 922,
+ "俚": 923,
+ "保": 924,
+ "俞": 925,
+ "俟": 926,
+ "俠": 927,
+ "信": 928,
+ "俨": 929,
+ "俩": 930,
+ "俪": 931,
+ "俬": 932,
+ "俭": 933,
+ "修": 934,
+ "俯": 935,
+ "俱": 936,
+ "俳": 937,
+ "俸": 938,
+ "俺": 939,
+ "俾": 940,
+ "倆": 941,
+ "倉": 942,
+ "個": 943,
+ "倌": 944,
+ "倍": 945,
+ "倏": 946,
+ "們": 947,
+ "倒": 948,
+ "倔": 949,
+ "倖": 950,
+ "倘": 951,
+ "候": 952,
+ "倚": 953,
+ "倜": 954,
+ "借": 955,
+ "倡": 956,
+ "値": 957,
+ "倦": 958,
+ "倩": 959,
+ "倪": 960,
+ "倫": 961,
+ "倬": 962,
+ "倭": 963,
+ "倶": 964,
+ "债": 965,
+ "值": 966,
+ "倾": 967,
+ "偃": 968,
+ "假": 969,
+ "偈": 970,
+ "偉": 971,
+ "偌": 972,
+ "偎": 973,
+ "偏": 974,
+ "偕": 975,
+ "做": 976,
+ "停": 977,
+ "健": 978,
+ "側": 979,
+ "偵": 980,
+ "偶": 981,
+ "偷": 982,
+ "偻": 983,
+ "偽": 984,
+ "偿": 985,
+ "傀": 986,
+ "傅": 987,
+ "傍": 988,
+ "傑": 989,
+ "傘": 990,
+ "備": 991,
+ "傚": 992,
+ "傢": 993,
+ "傣": 994,
+ "傥": 995,
+ "储": 996,
+ "傩": 997,
+ "催": 998,
+ "傭": 999,
+ "傲": 1000,
+ "傳": 1001,
+ "債": 1002,
+ "傷": 1003,
+ "傻": 1004,
+ "傾": 1005,
+ "僅": 1006,
+ "働": 1007,
+ "像": 1008,
+ "僑": 1009,
+ "僕": 1010,
+ "僖": 1011,
+ "僚": 1012,
+ "僥": 1013,
+ "僧": 1014,
+ "僭": 1015,
+ "僮": 1016,
+ "僱": 1017,
+ "僵": 1018,
+ "價": 1019,
+ "僻": 1020,
+ "儀": 1021,
+ "儂": 1022,
+ "億": 1023,
+ "儆": 1024,
+ "儉": 1025,
+ "儋": 1026,
+ "儒": 1027,
+ "儕": 1028,
+ "儘": 1029,
+ "償": 1030,
+ "儡": 1031,
+ "優": 1032,
+ "儲": 1033,
+ "儷": 1034,
+ "儼": 1035,
+ "儿": 1036,
+ "兀": 1037,
+ "允": 1038,
+ "元": 1039,
+ "兄": 1040,
+ "充": 1041,
+ "兆": 1042,
+ "兇": 1043,
+ "先": 1044,
+ "光": 1045,
+ "克": 1046,
+ "兌": 1047,
+ "免": 1048,
+ "児": 1049,
+ "兑": 1050,
+ "兒": 1051,
+ "兔": 1052,
+ "兖": 1053,
+ "党": 1054,
+ "兜": 1055,
+ "兢": 1056,
+ "入": 1057,
+ "內": 1058,
+ "全": 1059,
+ "兩": 1060,
+ "八": 1061,
+ "公": 1062,
+ "六": 1063,
+ "兮": 1064,
+ "兰": 1065,
+ "共": 1066,
+ "兲": 1067,
+ "关": 1068,
+ "兴": 1069,
+ "兵": 1070,
+ "其": 1071,
+ "具": 1072,
+ "典": 1073,
+ "兹": 1074,
+ "养": 1075,
+ "兼": 1076,
+ "兽": 1077,
+ "冀": 1078,
+ "内": 1079,
+ "円": 1080,
+ "冇": 1081,
+ "冈": 1082,
+ "冉": 1083,
+ "冊": 1084,
+ "册": 1085,
+ "再": 1086,
+ "冏": 1087,
+ "冒": 1088,
+ "冕": 1089,
+ "冗": 1090,
+ "写": 1091,
+ "军": 1092,
+ "农": 1093,
+ "冠": 1094,
+ "冢": 1095,
+ "冤": 1096,
+ "冥": 1097,
+ "冨": 1098,
+ "冪": 1099,
+ "冬": 1100,
+ "冯": 1101,
+ "冰": 1102,
+ "冲": 1103,
+ "决": 1104,
+ "况": 1105,
+ "冶": 1106,
+ "冷": 1107,
+ "冻": 1108,
+ "冼": 1109,
+ "冽": 1110,
+ "冾": 1111,
+ "净": 1112,
+ "凄": 1113,
+ "准": 1114,
+ "凇": 1115,
+ "凈": 1116,
+ "凉": 1117,
+ "凋": 1118,
+ "凌": 1119,
+ "凍": 1120,
+ "减": 1121,
+ "凑": 1122,
+ "凛": 1123,
+ "凜": 1124,
+ "凝": 1125,
+ "几": 1126,
+ "凡": 1127,
+ "凤": 1128,
+ "処": 1129,
+ "凪": 1130,
+ "凭": 1131,
+ "凯": 1132,
+ "凰": 1133,
+ "凱": 1134,
+ "凳": 1135,
+ "凶": 1136,
+ "凸": 1137,
+ "凹": 1138,
+ "出": 1139,
+ "击": 1140,
+ "函": 1141,
+ "凿": 1142,
+ "刀": 1143,
+ "刁": 1144,
+ "刃": 1145,
+ "分": 1146,
+ "切": 1147,
+ "刈": 1148,
+ "刊": 1149,
+ "刍": 1150,
+ "刎": 1151,
+ "刑": 1152,
+ "划": 1153,
+ "列": 1154,
+ "刘": 1155,
+ "则": 1156,
+ "刚": 1157,
+ "创": 1158,
+ "初": 1159,
+ "删": 1160,
+ "判": 1161,
+ "別": 1162,
+ "刨": 1163,
+ "利": 1164,
+ "刪": 1165,
+ "别": 1166,
+ "刮": 1167,
+ "到": 1168,
+ "制": 1169,
+ "刷": 1170,
+ "券": 1171,
+ "刹": 1172,
+ "刺": 1173,
+ "刻": 1174,
+ "刽": 1175,
+ "剁": 1176,
+ "剂": 1177,
+ "剃": 1178,
+ "則": 1179,
+ "剉": 1180,
+ "削": 1181,
+ "剋": 1182,
+ "剌": 1183,
+ "前": 1184,
+ "剎": 1185,
+ "剐": 1186,
+ "剑": 1187,
+ "剔": 1188,
+ "剖": 1189,
+ "剛": 1190,
+ "剜": 1191,
+ "剝": 1192,
+ "剣": 1193,
+ "剤": 1194,
+ "剥": 1195,
+ "剧": 1196,
+ "剩": 1197,
+ "剪": 1198,
+ "副": 1199,
+ "割": 1200,
+ "創": 1201,
+ "剷": 1202,
+ "剽": 1203,
+ "剿": 1204,
+ "劃": 1205,
+ "劇": 1206,
+ "劈": 1207,
+ "劉": 1208,
+ "劊": 1209,
+ "劍": 1210,
+ "劏": 1211,
+ "劑": 1212,
+ "力": 1213,
+ "劝": 1214,
+ "办": 1215,
+ "功": 1216,
+ "加": 1217,
+ "务": 1218,
+ "劣": 1219,
+ "动": 1220,
+ "助": 1221,
+ "努": 1222,
+ "劫": 1223,
+ "劭": 1224,
+ "励": 1225,
+ "劲": 1226,
+ "劳": 1227,
+ "労": 1228,
+ "劵": 1229,
+ "効": 1230,
+ "劾": 1231,
+ "势": 1232,
+ "勁": 1233,
+ "勃": 1234,
+ "勇": 1235,
+ "勉": 1236,
+ "勋": 1237,
+ "勐": 1238,
+ "勒": 1239,
+ "動": 1240,
+ "勖": 1241,
+ "勘": 1242,
+ "務": 1243,
+ "勛": 1244,
+ "勝": 1245,
+ "勞": 1246,
+ "募": 1247,
+ "勢": 1248,
+ "勤": 1249,
+ "勧": 1250,
+ "勳": 1251,
+ "勵": 1252,
+ "勸": 1253,
+ "勺": 1254,
+ "勻": 1255,
+ "勾": 1256,
+ "勿": 1257,
+ "匀": 1258,
+ "包": 1259,
+ "匆": 1260,
+ "匈": 1261,
+ "匍": 1262,
+ "匐": 1263,
+ "匕": 1264,
+ "化": 1265,
+ "北": 1266,
+ "匙": 1267,
+ "匝": 1268,
+ "匠": 1269,
+ "匡": 1270,
+ "匣": 1271,
+ "匪": 1272,
+ "匮": 1273,
+ "匯": 1274,
+ "匱": 1275,
+ "匹": 1276,
+ "区": 1277,
+ "医": 1278,
+ "匾": 1279,
+ "匿": 1280,
+ "區": 1281,
+ "十": 1282,
+ "千": 1283,
+ "卅": 1284,
+ "升": 1285,
+ "午": 1286,
+ "卉": 1287,
+ "半": 1288,
+ "卍": 1289,
+ "华": 1290,
+ "协": 1291,
+ "卑": 1292,
+ "卒": 1293,
+ "卓": 1294,
+ "協": 1295,
+ "单": 1296,
+ "卖": 1297,
+ "南": 1298,
+ "単": 1299,
+ "博": 1300,
+ "卜": 1301,
+ "卞": 1302,
+ "卟": 1303,
+ "占": 1304,
+ "卡": 1305,
+ "卢": 1306,
+ "卤": 1307,
+ "卦": 1308,
+ "卧": 1309,
+ "卫": 1310,
+ "卮": 1311,
+ "卯": 1312,
+ "印": 1313,
+ "危": 1314,
+ "即": 1315,
+ "却": 1316,
+ "卵": 1317,
+ "卷": 1318,
+ "卸": 1319,
+ "卻": 1320,
+ "卿": 1321,
+ "厂": 1322,
+ "厄": 1323,
+ "厅": 1324,
+ "历": 1325,
+ "厉": 1326,
+ "压": 1327,
+ "厌": 1328,
+ "厕": 1329,
+ "厘": 1330,
+ "厚": 1331,
+ "厝": 1332,
+ "原": 1333,
+ "厢": 1334,
+ "厥": 1335,
+ "厦": 1336,
+ "厨": 1337,
+ "厩": 1338,
+ "厭": 1339,
+ "厮": 1340,
+ "厲": 1341,
+ "厳": 1342,
+ "去": 1343,
+ "县": 1344,
+ "叁": 1345,
+ "参": 1346,
+ "參": 1347,
+ "又": 1348,
+ "叉": 1349,
+ "及": 1350,
+ "友": 1351,
+ "双": 1352,
+ "反": 1353,
+ "収": 1354,
+ "发": 1355,
+ "叔": 1356,
+ "取": 1357,
+ "受": 1358,
+ "变": 1359,
+ "叙": 1360,
+ "叛": 1361,
+ "叟": 1362,
+ "叠": 1363,
+ "叡": 1364,
+ "叢": 1365,
+ "口": 1366,
+ "古": 1367,
+ "句": 1368,
+ "另": 1369,
+ "叨": 1370,
+ "叩": 1371,
+ "只": 1372,
+ "叫": 1373,
+ "召": 1374,
+ "叭": 1375,
+ "叮": 1376,
+ "可": 1377,
+ "台": 1378,
+ "叱": 1379,
+ "史": 1380,
+ "右": 1381,
+ "叵": 1382,
+ "叶": 1383,
+ "号": 1384,
+ "司": 1385,
+ "叹": 1386,
+ "叻": 1387,
+ "叼": 1388,
+ "叽": 1389,
+ "吁": 1390,
+ "吃": 1391,
+ "各": 1392,
+ "吆": 1393,
+ "合": 1394,
+ "吉": 1395,
+ "吊": 1396,
+ "吋": 1397,
+ "同": 1398,
+ "名": 1399,
+ "后": 1400,
+ "吏": 1401,
+ "吐": 1402,
+ "向": 1403,
+ "吒": 1404,
+ "吓": 1405,
+ "吕": 1406,
+ "吖": 1407,
+ "吗": 1408,
+ "君": 1409,
+ "吝": 1410,
+ "吞": 1411,
+ "吟": 1412,
+ "吠": 1413,
+ "吡": 1414,
+ "否": 1415,
+ "吧": 1416,
+ "吨": 1417,
+ "吩": 1418,
+ "含": 1419,
+ "听": 1420,
+ "吭": 1421,
+ "吮": 1422,
+ "启": 1423,
+ "吱": 1424,
+ "吳": 1425,
+ "吴": 1426,
+ "吵": 1427,
+ "吶": 1428,
+ "吸": 1429,
+ "吹": 1430,
+ "吻": 1431,
+ "吼": 1432,
+ "吽": 1433,
+ "吾": 1434,
+ "呀": 1435,
+ "呂": 1436,
+ "呃": 1437,
+ "呆": 1438,
+ "呈": 1439,
+ "告": 1440,
+ "呋": 1441,
+ "呎": 1442,
+ "呐": 1443,
+ "呓": 1444,
+ "呕": 1445,
+ "呗": 1446,
+ "员": 1447,
+ "呛": 1448,
+ "呜": 1449,
+ "呢": 1450,
+ "呤": 1451,
+ "呦": 1452,
+ "周": 1453,
+ "呱": 1454,
+ "呲": 1455,
+ "味": 1456,
+ "呵": 1457,
+ "呷": 1458,
+ "呸": 1459,
+ "呻": 1460,
+ "呼": 1461,
+ "命": 1462,
+ "咀": 1463,
+ "咁": 1464,
+ "咂": 1465,
+ "咄": 1466,
+ "咆": 1467,
+ "咋": 1468,
+ "和": 1469,
+ "咎": 1470,
+ "咏": 1471,
+ "咐": 1472,
+ "咒": 1473,
+ "咔": 1474,
+ "咕": 1475,
+ "咖": 1476,
+ "咗": 1477,
+ "咘": 1478,
+ "咙": 1479,
+ "咚": 1480,
+ "咛": 1481,
+ "咣": 1482,
+ "咤": 1483,
+ "咦": 1484,
+ "咧": 1485,
+ "咨": 1486,
+ "咩": 1487,
+ "咪": 1488,
+ "咫": 1489,
+ "咬": 1490,
+ "咭": 1491,
+ "咯": 1492,
+ "咱": 1493,
+ "咲": 1494,
+ "咳": 1495,
+ "咸": 1496,
+ "咻": 1497,
+ "咽": 1498,
+ "咿": 1499,
+ "哀": 1500,
+ "品": 1501,
+ "哂": 1502,
+ "哄": 1503,
+ "哆": 1504,
+ "哇": 1505,
+ "哈": 1506,
+ "哉": 1507,
+ "哋": 1508,
+ "哌": 1509,
+ "响": 1510,
+ "哎": 1511,
+ "哏": 1512,
+ "哐": 1513,
+ "哑": 1514,
+ "哒": 1515,
+ "哔": 1516,
+ "哗": 1517,
+ "哟": 1518,
+ "員": 1519,
+ "哥": 1520,
+ "哦": 1521,
+ "哧": 1522,
+ "哨": 1523,
+ "哩": 1524,
+ "哪": 1525,
+ "哭": 1526,
+ "哮": 1527,
+ "哲": 1528,
+ "哺": 1529,
+ "哼": 1530,
+ "哽": 1531,
+ "唁": 1532,
+ "唄": 1533,
+ "唆": 1534,
+ "唇": 1535,
+ "唉": 1536,
+ "唏": 1537,
+ "唐": 1538,
+ "唑": 1539,
+ "唔": 1540,
+ "唠": 1541,
+ "唤": 1542,
+ "唧": 1543,
+ "唬": 1544,
+ "售": 1545,
+ "唯": 1546,
+ "唰": 1547,
+ "唱": 1548,
+ "唳": 1549,
+ "唷": 1550,
+ "唸": 1551,
+ "唾": 1552,
+ "啃": 1553,
+ "啄": 1554,
+ "商": 1555,
+ "啉": 1556,
+ "啊": 1557,
+ "問": 1558,
+ "啓": 1559,
+ "啕": 1560,
+ "啖": 1561,
+ "啜": 1562,
+ "啞": 1563,
+ "啟": 1564,
+ "啡": 1565,
+ "啤": 1566,
+ "啥": 1567,
+ "啦": 1568,
+ "啧": 1569,
+ "啪": 1570,
+ "啫": 1571,
+ "啬": 1572,
+ "啮": 1573,
+ "啰": 1574,
+ "啱": 1575,
+ "啲": 1576,
+ "啵": 1577,
+ "啶": 1578,
+ "啷": 1579,
+ "啸": 1580,
+ "啻": 1581,
+ "啼": 1582,
+ "啾": 1583,
+ "喀": 1584,
+ "喂": 1585,
+ "喃": 1586,
+ "善": 1587,
+ "喆": 1588,
+ "喇": 1589,
+ "喉": 1590,
+ "喊": 1591,
+ "喋": 1592,
+ "喎": 1593,
+ "喏": 1594,
+ "喔": 1595,
+ "喘": 1596,
+ "喙": 1597,
+ "喚": 1598,
+ "喜": 1599,
+ "喝": 1600,
+ "喟": 1601,
+ "喧": 1602,
+ "喪": 1603,
+ "喫": 1604,
+ "喬": 1605,
+ "單": 1606,
+ "喰": 1607,
+ "喱": 1608,
+ "喲": 1609,
+ "喳": 1610,
+ "喵": 1611,
+ "営": 1612,
+ "喷": 1613,
+ "喹": 1614,
+ "喺": 1615,
+ "喻": 1616,
+ "喽": 1617,
+ "嗅": 1618,
+ "嗆": 1619,
+ "嗇": 1620,
+ "嗎": 1621,
+ "嗑": 1622,
+ "嗒": 1623,
+ "嗓": 1624,
+ "嗔": 1625,
+ "嗖": 1626,
+ "嗚": 1627,
+ "嗜": 1628,
+ "嗝": 1629,
+ "嗟": 1630,
+ "嗡": 1631,
+ "嗣": 1632,
+ "嗤": 1633,
+ "嗦": 1634,
+ "嗨": 1635,
+ "嗪": 1636,
+ "嗬": 1637,
+ "嗯": 1638,
+ "嗰": 1639,
+ "嗲": 1640,
+ "嗳": 1641,
+ "嗶": 1642,
+ "嗷": 1643,
+ "嗽": 1644,
+ "嘀": 1645,
+ "嘅": 1646,
+ "嘆": 1647,
+ "嘈": 1648,
+ "嘉": 1649,
+ "嘌": 1650,
+ "嘍": 1651,
+ "嘎": 1652,
+ "嘔": 1653,
+ "嘖": 1654,
+ "嘗": 1655,
+ "嘘": 1656,
+ "嘚": 1657,
+ "嘛": 1658,
+ "嘜": 1659,
+ "嘞": 1660,
+ "嘟": 1661,
+ "嘢": 1662,
+ "嘣": 1663,
+ "嘤": 1664,
+ "嘧": 1665,
+ "嘩": 1666,
+ "嘭": 1667,
+ "嘮": 1668,
+ "嘯": 1669,
+ "嘰": 1670,
+ "嘱": 1671,
+ "嘲": 1672,
+ "嘴": 1673,
+ "嘶": 1674,
+ "嘸": 1675,
+ "嘹": 1676,
+ "嘻": 1677,
+ "嘿": 1678,
+ "噁": 1679,
+ "噌": 1680,
+ "噎": 1681,
+ "噓": 1682,
+ "噔": 1683,
+ "噗": 1684,
+ "噙": 1685,
+ "噜": 1686,
+ "噠": 1687,
+ "噢": 1688,
+ "噤": 1689,
+ "器": 1690,
+ "噩": 1691,
+ "噪": 1692,
+ "噬": 1693,
+ "噱": 1694,
+ "噴": 1695,
+ "噶": 1696,
+ "噸": 1697,
+ "噹": 1698,
+ "噻": 1699,
+ "噼": 1700,
+ "嚀": 1701,
+ "嚇": 1702,
+ "嚎": 1703,
+ "嚏": 1704,
+ "嚐": 1705,
+ "嚓": 1706,
+ "嚕": 1707,
+ "嚟": 1708,
+ "嚣": 1709,
+ "嚥": 1710,
+ "嚨": 1711,
+ "嚮": 1712,
+ "嚴": 1713,
+ "嚷": 1714,
+ "嚼": 1715,
+ "囂": 1716,
+ "囉": 1717,
+ "囊": 1718,
+ "囍": 1719,
+ "囑": 1720,
+ "囔": 1721,
+ "囗": 1722,
+ "囚": 1723,
+ "四": 1724,
+ "囝": 1725,
+ "回": 1726,
+ "囟": 1727,
+ "因": 1728,
+ "囡": 1729,
+ "团": 1730,
+ "団": 1731,
+ "囤": 1732,
+ "囧": 1733,
+ "囪": 1734,
+ "囫": 1735,
+ "园": 1736,
+ "困": 1737,
+ "囱": 1738,
+ "囲": 1739,
+ "図": 1740,
+ "围": 1741,
+ "囹": 1742,
+ "固": 1743,
+ "国": 1744,
+ "图": 1745,
+ "囿": 1746,
+ "圃": 1747,
+ "圄": 1748,
+ "圆": 1749,
+ "圈": 1750,
+ "國": 1751,
+ "圍": 1752,
+ "圏": 1753,
+ "園": 1754,
+ "圓": 1755,
+ "圖": 1756,
+ "團": 1757,
+ "圜": 1758,
+ "土": 1759,
+ "圣": 1760,
+ "圧": 1761,
+ "在": 1762,
+ "圩": 1763,
+ "圭": 1764,
+ "地": 1765,
+ "圳": 1766,
+ "场": 1767,
+ "圻": 1768,
+ "圾": 1769,
+ "址": 1770,
+ "坂": 1771,
+ "均": 1772,
+ "坊": 1773,
+ "坍": 1774,
+ "坎": 1775,
+ "坏": 1776,
+ "坐": 1777,
+ "坑": 1778,
+ "块": 1779,
+ "坚": 1780,
+ "坛": 1781,
+ "坝": 1782,
+ "坞": 1783,
+ "坟": 1784,
+ "坠": 1785,
+ "坡": 1786,
+ "坤": 1787,
+ "坦": 1788,
+ "坨": 1789,
+ "坪": 1790,
+ "坯": 1791,
+ "坳": 1792,
+ "坵": 1793,
+ "坷": 1794,
+ "垂": 1795,
+ "垃": 1796,
+ "垄": 1797,
+ "型": 1798,
+ "垒": 1799,
+ "垚": 1800,
+ "垛": 1801,
+ "垠": 1802,
+ "垢": 1803,
+ "垣": 1804,
+ "垦": 1805,
+ "垩": 1806,
+ "垫": 1807,
+ "垭": 1808,
+ "垮": 1809,
+ "垵": 1810,
+ "埂": 1811,
+ "埃": 1812,
+ "埋": 1813,
+ "城": 1814,
+ "埔": 1815,
+ "埕": 1816,
+ "埗": 1817,
+ "域": 1818,
+ "埠": 1819,
+ "埤": 1820,
+ "埵": 1821,
+ "執": 1822,
+ "埸": 1823,
+ "培": 1824,
+ "基": 1825,
+ "埼": 1826,
+ "堀": 1827,
+ "堂": 1828,
+ "堃": 1829,
+ "堅": 1830,
+ "堆": 1831,
+ "堇": 1832,
+ "堑": 1833,
+ "堕": 1834,
+ "堙": 1835,
+ "堡": 1836,
+ "堤": 1837,
+ "堪": 1838,
+ "堯": 1839,
+ "堰": 1840,
+ "報": 1841,
+ "場": 1842,
+ "堵": 1843,
+ "堺": 1844,
+ "堿": 1845,
+ "塊": 1846,
+ "塌": 1847,
+ "塑": 1848,
+ "塔": 1849,
+ "塗": 1850,
+ "塘": 1851,
+ "塚": 1852,
+ "塞": 1853,
+ "塢": 1854,
+ "塩": 1855,
+ "填": 1856,
+ "塬": 1857,
+ "塭": 1858,
+ "塵": 1859,
+ "塾": 1860,
+ "墀": 1861,
+ "境": 1862,
+ "墅": 1863,
+ "墉": 1864,
+ "墊": 1865,
+ "墒": 1866,
+ "墓": 1867,
+ "増": 1868,
+ "墘": 1869,
+ "墙": 1870,
+ "墜": 1871,
+ "增": 1872,
+ "墟": 1873,
+ "墨": 1874,
+ "墩": 1875,
+ "墮": 1876,
+ "墳": 1877,
+ "墻": 1878,
+ "墾": 1879,
+ "壁": 1880,
+ "壅": 1881,
+ "壆": 1882,
+ "壇": 1883,
+ "壊": 1884,
+ "壑": 1885,
+ "壓": 1886,
+ "壕": 1887,
+ "壘": 1888,
+ "壞": 1889,
+ "壟": 1890,
+ "壢": 1891,
+ "壤": 1892,
+ "壩": 1893,
+ "士": 1894,
+ "壬": 1895,
+ "壮": 1896,
+ "壯": 1897,
+ "声": 1898,
+ "売": 1899,
+ "壳": 1900,
+ "壶": 1901,
+ "壹": 1902,
+ "壺": 1903,
+ "壽": 1904,
+ "处": 1905,
+ "备": 1906,
+ "変": 1907,
+ "复": 1908,
+ "夏": 1909,
+ "夔": 1910,
+ "夕": 1911,
+ "外": 1912,
+ "夙": 1913,
+ "多": 1914,
+ "夜": 1915,
+ "够": 1916,
+ "夠": 1917,
+ "夢": 1918,
+ "夥": 1919,
+ "大": 1920,
+ "天": 1921,
+ "太": 1922,
+ "夫": 1923,
+ "夭": 1924,
+ "央": 1925,
+ "夯": 1926,
+ "失": 1927,
+ "头": 1928,
+ "夷": 1929,
+ "夸": 1930,
+ "夹": 1931,
+ "夺": 1932,
+ "夾": 1933,
+ "奂": 1934,
+ "奄": 1935,
+ "奇": 1936,
+ "奈": 1937,
+ "奉": 1938,
+ "奋": 1939,
+ "奎": 1940,
+ "奏": 1941,
+ "奐": 1942,
+ "契": 1943,
+ "奔": 1944,
+ "奕": 1945,
+ "奖": 1946,
+ "套": 1947,
+ "奘": 1948,
+ "奚": 1949,
+ "奠": 1950,
+ "奢": 1951,
+ "奥": 1952,
+ "奧": 1953,
+ "奪": 1954,
+ "奬": 1955,
+ "奮": 1956,
+ "女": 1957,
+ "奴": 1958,
+ "奶": 1959,
+ "奸": 1960,
+ "她": 1961,
+ "好": 1962,
+ "如": 1963,
+ "妃": 1964,
+ "妄": 1965,
+ "妆": 1966,
+ "妇": 1967,
+ "妈": 1968,
+ "妊": 1969,
+ "妍": 1970,
+ "妒": 1971,
+ "妓": 1972,
+ "妖": 1973,
+ "妘": 1974,
+ "妙": 1975,
+ "妝": 1976,
+ "妞": 1977,
+ "妣": 1978,
+ "妤": 1979,
+ "妥": 1980,
+ "妨": 1981,
+ "妩": 1982,
+ "妪": 1983,
+ "妮": 1984,
+ "妲": 1985,
+ "妳": 1986,
+ "妹": 1987,
+ "妻": 1988,
+ "妾": 1989,
+ "姆": 1990,
+ "姉": 1991,
+ "姊": 1992,
+ "始": 1993,
+ "姍": 1994,
+ "姐": 1995,
+ "姑": 1996,
+ "姒": 1997,
+ "姓": 1998,
+ "委": 1999,
+ "姗": 2000,
+ "姚": 2001,
+ "姜": 2002,
+ "姝": 2003,
+ "姣": 2004,
+ "姥": 2005,
+ "姦": 2006,
+ "姨": 2007,
+ "姪": 2008,
+ "姫": 2009,
+ "姬": 2010,
+ "姹": 2011,
+ "姻": 2012,
+ "姿": 2013,
+ "威": 2014,
+ "娃": 2015,
+ "娄": 2016,
+ "娅": 2017,
+ "娆": 2018,
+ "娇": 2019,
+ "娉": 2020,
+ "娑": 2021,
+ "娓": 2022,
+ "娘": 2023,
+ "娛": 2024,
+ "娜": 2025,
+ "娟": 2026,
+ "娠": 2027,
+ "娣": 2028,
+ "娥": 2029,
+ "娩": 2030,
+ "娱": 2031,
+ "娲": 2032,
+ "娴": 2033,
+ "娶": 2034,
+ "娼": 2035,
+ "婀": 2036,
+ "婁": 2037,
+ "婆": 2038,
+ "婉": 2039,
+ "婊": 2040,
+ "婕": 2041,
+ "婚": 2042,
+ "婢": 2043,
+ "婦": 2044,
+ "婧": 2045,
+ "婪": 2046,
+ "婭": 2047,
+ "婴": 2048,
+ "婵": 2049,
+ "婶": 2050,
+ "婷": 2051,
+ "婺": 2052,
+ "婿": 2053,
+ "媒": 2054,
+ "媚": 2055,
+ "媛": 2056,
+ "媞": 2057,
+ "媧": 2058,
+ "媲": 2059,
+ "媳": 2060,
+ "媽": 2061,
+ "媾": 2062,
+ "嫁": 2063,
+ "嫂": 2064,
+ "嫉": 2065,
+ "嫌": 2066,
+ "嫑": 2067,
+ "嫔": 2068,
+ "嫖": 2069,
+ "嫘": 2070,
+ "嫚": 2071,
+ "嫡": 2072,
+ "嫣": 2073,
+ "嫦": 2074,
+ "嫩": 2075,
+ "嫲": 2076,
+ "嫵": 2077,
+ "嫻": 2078,
+ "嬅": 2079,
+ "嬉": 2080,
+ "嬌": 2081,
+ "嬗": 2082,
+ "嬛": 2083,
+ "嬢": 2084,
+ "嬤": 2085,
+ "嬪": 2086,
+ "嬰": 2087,
+ "嬴": 2088,
+ "嬷": 2089,
+ "嬸": 2090,
+ "嬿": 2091,
+ "孀": 2092,
+ "孃": 2093,
+ "子": 2094,
+ "孑": 2095,
+ "孔": 2096,
+ "孕": 2097,
+ "孖": 2098,
+ "字": 2099,
+ "存": 2100,
+ "孙": 2101,
+ "孚": 2102,
+ "孛": 2103,
+ "孜": 2104,
+ "孝": 2105,
+ "孟": 2106,
+ "孢": 2107,
+ "季": 2108,
+ "孤": 2109,
+ "学": 2110,
+ "孩": 2111,
+ "孪": 2112,
+ "孫": 2113,
+ "孬": 2114,
+ "孰": 2115,
+ "孱": 2116,
+ "孳": 2117,
+ "孵": 2118,
+ "學": 2119,
+ "孺": 2120,
+ "孽": 2121,
+ "孿": 2122,
+ "宁": 2123,
+ "它": 2124,
+ "宅": 2125,
+ "宇": 2126,
+ "守": 2127,
+ "安": 2128,
+ "宋": 2129,
+ "完": 2130,
+ "宏": 2131,
+ "宓": 2132,
+ "宕": 2133,
+ "宗": 2134,
+ "官": 2135,
+ "宙": 2136,
+ "定": 2137,
+ "宛": 2138,
+ "宜": 2139,
+ "宝": 2140,
+ "实": 2141,
+ "実": 2142,
+ "宠": 2143,
+ "审": 2144,
+ "客": 2145,
+ "宣": 2146,
+ "室": 2147,
+ "宥": 2148,
+ "宦": 2149,
+ "宪": 2150,
+ "宫": 2151,
+ "宮": 2152,
+ "宰": 2153,
+ "害": 2154,
+ "宴": 2155,
+ "宵": 2156,
+ "家": 2157,
+ "宸": 2158,
+ "容": 2159,
+ "宽": 2160,
+ "宾": 2161,
+ "宿": 2162,
+ "寂": 2163,
+ "寄": 2164,
+ "寅": 2165,
+ "密": 2166,
+ "寇": 2167,
+ "富": 2168,
+ "寐": 2169,
+ "寒": 2170,
+ "寓": 2171,
+ "寛": 2172,
+ "寝": 2173,
+ "寞": 2174,
+ "察": 2175,
+ "寡": 2176,
+ "寢": 2177,
+ "寥": 2178,
+ "實": 2179,
+ "寧": 2180,
+ "寨": 2181,
+ "審": 2182,
+ "寫": 2183,
+ "寬": 2184,
+ "寮": 2185,
+ "寰": 2186,
+ "寵": 2187,
+ "寶": 2188,
+ "寸": 2189,
+ "对": 2190,
+ "寺": 2191,
+ "寻": 2192,
+ "导": 2193,
+ "対": 2194,
+ "寿": 2195,
+ "封": 2196,
+ "専": 2197,
+ "射": 2198,
+ "将": 2199,
+ "將": 2200,
+ "專": 2201,
+ "尉": 2202,
+ "尊": 2203,
+ "尋": 2204,
+ "對": 2205,
+ "導": 2206,
+ "小": 2207,
+ "少": 2208,
+ "尔": 2209,
+ "尕": 2210,
+ "尖": 2211,
+ "尘": 2212,
+ "尚": 2213,
+ "尝": 2214,
+ "尤": 2215,
+ "尧": 2216,
+ "尬": 2217,
+ "就": 2218,
+ "尴": 2219,
+ "尷": 2220,
+ "尸": 2221,
+ "尹": 2222,
+ "尺": 2223,
+ "尻": 2224,
+ "尼": 2225,
+ "尽": 2226,
+ "尾": 2227,
+ "尿": 2228,
+ "局": 2229,
+ "屁": 2230,
+ "层": 2231,
+ "屄": 2232,
+ "居": 2233,
+ "屆": 2234,
+ "屈": 2235,
+ "屉": 2236,
+ "届": 2237,
+ "屋": 2238,
+ "屌": 2239,
+ "屍": 2240,
+ "屎": 2241,
+ "屏": 2242,
+ "屐": 2243,
+ "屑": 2244,
+ "展": 2245,
+ "屜": 2246,
+ "属": 2247,
+ "屠": 2248,
+ "屡": 2249,
+ "屢": 2250,
+ "層": 2251,
+ "履": 2252,
+ "屬": 2253,
+ "屯": 2254,
+ "山": 2255,
+ "屹": 2256,
+ "屿": 2257,
+ "岀": 2258,
+ "岁": 2259,
+ "岂": 2260,
+ "岌": 2261,
+ "岐": 2262,
+ "岑": 2263,
+ "岔": 2264,
+ "岖": 2265,
+ "岗": 2266,
+ "岘": 2267,
+ "岙": 2268,
+ "岚": 2269,
+ "岛": 2270,
+ "岡": 2271,
+ "岩": 2272,
+ "岫": 2273,
+ "岬": 2274,
+ "岭": 2275,
+ "岱": 2276,
+ "岳": 2277,
+ "岷": 2278,
+ "岸": 2279,
+ "峇": 2280,
+ "峋": 2281,
+ "峒": 2282,
+ "峙": 2283,
+ "峡": 2284,
+ "峤": 2285,
+ "峥": 2286,
+ "峦": 2287,
+ "峨": 2288,
+ "峪": 2289,
+ "峭": 2290,
+ "峯": 2291,
+ "峰": 2292,
+ "峴": 2293,
+ "島": 2294,
+ "峻": 2295,
+ "峽": 2296,
+ "崁": 2297,
+ "崂": 2298,
+ "崆": 2299,
+ "崇": 2300,
+ "崎": 2301,
+ "崑": 2302,
+ "崔": 2303,
+ "崖": 2304,
+ "崗": 2305,
+ "崙": 2306,
+ "崛": 2307,
+ "崧": 2308,
+ "崩": 2309,
+ "崭": 2310,
+ "崴": 2311,
+ "崽": 2312,
+ "嵇": 2313,
+ "嵊": 2314,
+ "嵋": 2315,
+ "嵌": 2316,
+ "嵐": 2317,
+ "嵘": 2318,
+ "嵩": 2319,
+ "嵬": 2320,
+ "嵯": 2321,
+ "嶂": 2322,
+ "嶄": 2323,
+ "嶇": 2324,
+ "嶋": 2325,
+ "嶙": 2326,
+ "嶺": 2327,
+ "嶼": 2328,
+ "嶽": 2329,
+ "巅": 2330,
+ "巍": 2331,
+ "巒": 2332,
+ "巔": 2333,
+ "巖": 2334,
+ "川": 2335,
+ "州": 2336,
+ "巡": 2337,
+ "巢": 2338,
+ "工": 2339,
+ "左": 2340,
+ "巧": 2341,
+ "巨": 2342,
+ "巩": 2343,
+ "巫": 2344,
+ "差": 2345,
+ "己": 2346,
+ "已": 2347,
+ "巳": 2348,
+ "巴": 2349,
+ "巷": 2350,
+ "巻": 2351,
+ "巽": 2352,
+ "巾": 2353,
+ "巿": 2354,
+ "币": 2355,
+ "市": 2356,
+ "布": 2357,
+ "帅": 2358,
+ "帆": 2359,
+ "师": 2360,
+ "希": 2361,
+ "帐": 2362,
+ "帑": 2363,
+ "帕": 2364,
+ "帖": 2365,
+ "帘": 2366,
+ "帚": 2367,
+ "帛": 2368,
+ "帜": 2369,
+ "帝": 2370,
+ "帥": 2371,
+ "带": 2372,
+ "帧": 2373,
+ "師": 2374,
+ "席": 2375,
+ "帮": 2376,
+ "帯": 2377,
+ "帰": 2378,
+ "帳": 2379,
+ "帶": 2380,
+ "帷": 2381,
+ "常": 2382,
+ "帼": 2383,
+ "帽": 2384,
+ "幀": 2385,
+ "幂": 2386,
+ "幄": 2387,
+ "幅": 2388,
+ "幌": 2389,
+ "幔": 2390,
+ "幕": 2391,
+ "幟": 2392,
+ "幡": 2393,
+ "幢": 2394,
+ "幣": 2395,
+ "幫": 2396,
+ "干": 2397,
+ "平": 2398,
+ "年": 2399,
+ "并": 2400,
+ "幸": 2401,
+ "幹": 2402,
+ "幺": 2403,
+ "幻": 2404,
+ "幼": 2405,
+ "幽": 2406,
+ "幾": 2407,
+ "广": 2408,
+ "庁": 2409,
+ "広": 2410,
+ "庄": 2411,
+ "庆": 2412,
+ "庇": 2413,
+ "床": 2414,
+ "序": 2415,
+ "庐": 2416,
+ "库": 2417,
+ "应": 2418,
+ "底": 2419,
+ "庖": 2420,
+ "店": 2421,
+ "庙": 2422,
+ "庚": 2423,
+ "府": 2424,
+ "庞": 2425,
+ "废": 2426,
+ "庠": 2427,
+ "度": 2428,
+ "座": 2429,
+ "庫": 2430,
+ "庭": 2431,
+ "庵": 2432,
+ "庶": 2433,
+ "康": 2434,
+ "庸": 2435,
+ "庹": 2436,
+ "庾": 2437,
+ "廁": 2438,
+ "廂": 2439,
+ "廃": 2440,
+ "廈": 2441,
+ "廉": 2442,
+ "廊": 2443,
+ "廓": 2444,
+ "廖": 2445,
+ "廚": 2446,
+ "廝": 2447,
+ "廟": 2448,
+ "廠": 2449,
+ "廢": 2450,
+ "廣": 2451,
+ "廬": 2452,
+ "廳": 2453,
+ "延": 2454,
+ "廷": 2455,
+ "建": 2456,
+ "廿": 2457,
+ "开": 2458,
+ "弁": 2459,
+ "异": 2460,
+ "弃": 2461,
+ "弄": 2462,
+ "弈": 2463,
+ "弊": 2464,
+ "弋": 2465,
+ "式": 2466,
+ "弑": 2467,
+ "弒": 2468,
+ "弓": 2469,
+ "弔": 2470,
+ "引": 2471,
+ "弗": 2472,
+ "弘": 2473,
+ "弛": 2474,
+ "弟": 2475,
+ "张": 2476,
+ "弥": 2477,
+ "弦": 2478,
+ "弧": 2479,
+ "弩": 2480,
+ "弭": 2481,
+ "弯": 2482,
+ "弱": 2483,
+ "張": 2484,
+ "強": 2485,
+ "弹": 2486,
+ "强": 2487,
+ "弼": 2488,
+ "弾": 2489,
+ "彅": 2490,
+ "彆": 2491,
+ "彈": 2492,
+ "彌": 2493,
+ "彎": 2494,
+ "归": 2495,
+ "当": 2496,
+ "录": 2497,
+ "彗": 2498,
+ "彙": 2499,
+ "彝": 2500,
+ "形": 2501,
+ "彤": 2502,
+ "彥": 2503,
+ "彦": 2504,
+ "彧": 2505,
+ "彩": 2506,
+ "彪": 2507,
+ "彫": 2508,
+ "彬": 2509,
+ "彭": 2510,
+ "彰": 2511,
+ "影": 2512,
+ "彷": 2513,
+ "役": 2514,
+ "彻": 2515,
+ "彼": 2516,
+ "彿": 2517,
+ "往": 2518,
+ "征": 2519,
+ "径": 2520,
+ "待": 2521,
+ "徇": 2522,
+ "很": 2523,
+ "徉": 2524,
+ "徊": 2525,
+ "律": 2526,
+ "後": 2527,
+ "徐": 2528,
+ "徑": 2529,
+ "徒": 2530,
+ "従": 2531,
+ "徕": 2532,
+ "得": 2533,
+ "徘": 2534,
+ "徙": 2535,
+ "徜": 2536,
+ "從": 2537,
+ "徠": 2538,
+ "御": 2539,
+ "徨": 2540,
+ "復": 2541,
+ "循": 2542,
+ "徬": 2543,
+ "微": 2544,
+ "徳": 2545,
+ "徴": 2546,
+ "徵": 2547,
+ "德": 2548,
+ "徹": 2549,
+ "徼": 2550,
+ "徽": 2551,
+ "心": 2552,
+ "必": 2553,
+ "忆": 2554,
+ "忌": 2555,
+ "忍": 2556,
+ "忏": 2557,
+ "忐": 2558,
+ "忑": 2559,
+ "忒": 2560,
+ "忖": 2561,
+ "志": 2562,
+ "忘": 2563,
+ "忙": 2564,
+ "応": 2565,
+ "忠": 2566,
+ "忡": 2567,
+ "忤": 2568,
+ "忧": 2569,
+ "忪": 2570,
+ "快": 2571,
+ "忱": 2572,
+ "念": 2573,
+ "忻": 2574,
+ "忽": 2575,
+ "忿": 2576,
+ "怀": 2577,
+ "态": 2578,
+ "怂": 2579,
+ "怅": 2580,
+ "怆": 2581,
+ "怎": 2582,
+ "怏": 2583,
+ "怒": 2584,
+ "怔": 2585,
+ "怕": 2586,
+ "怖": 2587,
+ "怙": 2588,
+ "怜": 2589,
+ "思": 2590,
+ "怠": 2591,
+ "怡": 2592,
+ "急": 2593,
+ "怦": 2594,
+ "性": 2595,
+ "怨": 2596,
+ "怪": 2597,
+ "怯": 2598,
+ "怵": 2599,
+ "总": 2600,
+ "怼": 2601,
+ "恁": 2602,
+ "恃": 2603,
+ "恆": 2604,
+ "恋": 2605,
+ "恍": 2606,
+ "恐": 2607,
+ "恒": 2608,
+ "恕": 2609,
+ "恙": 2610,
+ "恚": 2611,
+ "恢": 2612,
+ "恣": 2613,
+ "恤": 2614,
+ "恥": 2615,
+ "恨": 2616,
+ "恩": 2617,
+ "恪": 2618,
+ "恫": 2619,
+ "恬": 2620,
+ "恭": 2621,
+ "息": 2622,
+ "恰": 2623,
+ "恳": 2624,
+ "恵": 2625,
+ "恶": 2626,
+ "恸": 2627,
+ "恺": 2628,
+ "恻": 2629,
+ "恼": 2630,
+ "恿": 2631,
+ "悄": 2632,
+ "悅": 2633,
+ "悉": 2634,
+ "悌": 2635,
+ "悍": 2636,
+ "悔": 2637,
+ "悖": 2638,
+ "悚": 2639,
+ "悟": 2640,
+ "悠": 2641,
+ "患": 2642,
+ "悦": 2643,
+ "您": 2644,
+ "悩": 2645,
+ "悪": 2646,
+ "悬": 2647,
+ "悯": 2648,
+ "悱": 2649,
+ "悲": 2650,
+ "悴": 2651,
+ "悵": 2652,
+ "悶": 2653,
+ "悸": 2654,
+ "悻": 2655,
+ "悼": 2656,
+ "悽": 2657,
+ "情": 2658,
+ "惆": 2659,
+ "惇": 2660,
+ "惊": 2661,
+ "惋": 2662,
+ "惑": 2663,
+ "惕": 2664,
+ "惘": 2665,
+ "惚": 2666,
+ "惜": 2667,
+ "惟": 2668,
+ "惠": 2669,
+ "惡": 2670,
+ "惦": 2671,
+ "惧": 2672,
+ "惨": 2673,
+ "惩": 2674,
+ "惫": 2675,
+ "惬": 2676,
+ "惭": 2677,
+ "惮": 2678,
+ "惯": 2679,
+ "惰": 2680,
+ "惱": 2681,
+ "想": 2682,
+ "惴": 2683,
+ "惶": 2684,
+ "惹": 2685,
+ "惺": 2686,
+ "愁": 2687,
+ "愆": 2688,
+ "愈": 2689,
+ "愉": 2690,
+ "愍": 2691,
+ "意": 2692,
+ "愕": 2693,
+ "愚": 2694,
+ "愛": 2695,
+ "愜": 2696,
+ "感": 2697,
+ "愣": 2698,
+ "愤": 2699,
+ "愧": 2700,
+ "愫": 2701,
+ "愷": 2702,
+ "愿": 2703,
+ "慄": 2704,
+ "慈": 2705,
+ "態": 2706,
+ "慌": 2707,
+ "慎": 2708,
+ "慑": 2709,
+ "慕": 2710,
+ "慘": 2711,
+ "慚": 2712,
+ "慟": 2713,
+ "慢": 2714,
+ "慣": 2715,
+ "慧": 2716,
+ "慨": 2717,
+ "慫": 2718,
+ "慮": 2719,
+ "慰": 2720,
+ "慳": 2721,
+ "慵": 2722,
+ "慶": 2723,
+ "慷": 2724,
+ "慾": 2725,
+ "憂": 2726,
+ "憊": 2727,
+ "憋": 2728,
+ "憎": 2729,
+ "憐": 2730,
+ "憑": 2731,
+ "憔": 2732,
+ "憚": 2733,
+ "憤": 2734,
+ "憧": 2735,
+ "憨": 2736,
+ "憩": 2737,
+ "憫": 2738,
+ "憬": 2739,
+ "憲": 2740,
+ "憶": 2741,
+ "憾": 2742,
+ "懂": 2743,
+ "懇": 2744,
+ "懈": 2745,
+ "應": 2746,
+ "懊": 2747,
+ "懋": 2748,
+ "懑": 2749,
+ "懒": 2750,
+ "懦": 2751,
+ "懲": 2752,
+ "懵": 2753,
+ "懶": 2754,
+ "懷": 2755,
+ "懸": 2756,
+ "懺": 2757,
+ "懼": 2758,
+ "懾": 2759,
+ "懿": 2760,
+ "戀": 2761,
+ "戈": 2762,
+ "戊": 2763,
+ "戌": 2764,
+ "戍": 2765,
+ "戎": 2766,
+ "戏": 2767,
+ "成": 2768,
+ "我": 2769,
+ "戒": 2770,
+ "戕": 2771,
+ "或": 2772,
+ "战": 2773,
+ "戚": 2774,
+ "戛": 2775,
+ "戟": 2776,
+ "戡": 2777,
+ "戦": 2778,
+ "截": 2779,
+ "戬": 2780,
+ "戮": 2781,
+ "戰": 2782,
+ "戲": 2783,
+ "戳": 2784,
+ "戴": 2785,
+ "戶": 2786,
+ "户": 2787,
+ "戸": 2788,
+ "戻": 2789,
+ "戾": 2790,
+ "房": 2791,
+ "所": 2792,
+ "扁": 2793,
+ "扇": 2794,
+ "扈": 2795,
+ "扉": 2796,
+ "手": 2797,
+ "才": 2798,
+ "扎": 2799,
+ "扑": 2800,
+ "扒": 2801,
+ "打": 2802,
+ "扔": 2803,
+ "払": 2804,
+ "托": 2805,
+ "扛": 2806,
+ "扣": 2807,
+ "扦": 2808,
+ "执": 2809,
+ "扩": 2810,
+ "扪": 2811,
+ "扫": 2812,
+ "扬": 2813,
+ "扭": 2814,
+ "扮": 2815,
+ "扯": 2816,
+ "扰": 2817,
+ "扱": 2818,
+ "扳": 2819,
+ "扶": 2820,
+ "批": 2821,
+ "扼": 2822,
+ "找": 2823,
+ "承": 2824,
+ "技": 2825,
+ "抄": 2826,
+ "抉": 2827,
+ "把": 2828,
+ "抑": 2829,
+ "抒": 2830,
+ "抓": 2831,
+ "投": 2832,
+ "抖": 2833,
+ "抗": 2834,
+ "折": 2835,
+ "抚": 2836,
+ "抛": 2837,
+ "抜": 2838,
+ "択": 2839,
+ "抟": 2840,
+ "抠": 2841,
+ "抡": 2842,
+ "抢": 2843,
+ "护": 2844,
+ "报": 2845,
+ "抨": 2846,
+ "披": 2847,
+ "抬": 2848,
+ "抱": 2849,
+ "抵": 2850,
+ "抹": 2851,
+ "押": 2852,
+ "抽": 2853,
+ "抿": 2854,
+ "拂": 2855,
+ "拄": 2856,
+ "担": 2857,
+ "拆": 2858,
+ "拇": 2859,
+ "拈": 2860,
+ "拉": 2861,
+ "拋": 2862,
+ "拌": 2863,
+ "拍": 2864,
+ "拎": 2865,
+ "拐": 2866,
+ "拒": 2867,
+ "拓": 2868,
+ "拔": 2869,
+ "拖": 2870,
+ "拗": 2871,
+ "拘": 2872,
+ "拙": 2873,
+ "拚": 2874,
+ "招": 2875,
+ "拜": 2876,
+ "拟": 2877,
+ "拡": 2878,
+ "拢": 2879,
+ "拣": 2880,
+ "拥": 2881,
+ "拦": 2882,
+ "拧": 2883,
+ "拨": 2884,
+ "择": 2885,
+ "括": 2886,
+ "拭": 2887,
+ "拮": 2888,
+ "拯": 2889,
+ "拱": 2890,
+ "拳": 2891,
+ "拴": 2892,
+ "拷": 2893,
+ "拼": 2894,
+ "拽": 2895,
+ "拾": 2896,
+ "拿": 2897,
+ "持": 2898,
+ "挂": 2899,
+ "指": 2900,
+ "挈": 2901,
+ "按": 2902,
+ "挎": 2903,
+ "挑": 2904,
+ "挖": 2905,
+ "挙": 2906,
+ "挚": 2907,
+ "挛": 2908,
+ "挝": 2909,
+ "挞": 2910,
+ "挟": 2911,
+ "挠": 2912,
+ "挡": 2913,
+ "挣": 2914,
+ "挤": 2915,
+ "挥": 2916,
+ "挨": 2917,
+ "挪": 2918,
+ "挫": 2919,
+ "振": 2920,
+ "挲": 2921,
+ "挹": 2922,
+ "挺": 2923,
+ "挽": 2924,
+ "挾": 2925,
+ "捂": 2926,
+ "捅": 2927,
+ "捆": 2928,
+ "捉": 2929,
+ "捋": 2930,
+ "捌": 2931,
+ "捍": 2932,
+ "捎": 2933,
+ "捏": 2934,
+ "捐": 2935,
+ "捕": 2936,
+ "捞": 2937,
+ "损": 2938,
+ "捡": 2939,
+ "换": 2940,
+ "捣": 2941,
+ "捧": 2942,
+ "捨": 2943,
+ "捩": 2944,
+ "据": 2945,
+ "捱": 2946,
+ "捲": 2947,
+ "捶": 2948,
+ "捷": 2949,
+ "捺": 2950,
+ "捻": 2951,
+ "掀": 2952,
+ "掂": 2953,
+ "掃": 2954,
+ "掇": 2955,
+ "授": 2956,
+ "掉": 2957,
+ "掌": 2958,
+ "掏": 2959,
+ "掐": 2960,
+ "排": 2961,
+ "掖": 2962,
+ "掘": 2963,
+ "掙": 2964,
+ "掛": 2965,
+ "掠": 2966,
+ "採": 2967,
+ "探": 2968,
+ "掣": 2969,
+ "接": 2970,
+ "控": 2971,
+ "推": 2972,
+ "掩": 2973,
+ "措": 2974,
+ "掬": 2975,
+ "掰": 2976,
+ "掲": 2977,
+ "掳": 2978,
+ "掴": 2979,
+ "掷": 2980,
+ "掸": 2981,
+ "掺": 2982,
+ "揀": 2983,
+ "揃": 2984,
+ "揄": 2985,
+ "揆": 2986,
+ "揉": 2987,
+ "揍": 2988,
+ "描": 2989,
+ "提": 2990,
+ "插": 2991,
+ "揖": 2992,
+ "揚": 2993,
+ "換": 2994,
+ "握": 2995,
+ "揣": 2996,
+ "揩": 2997,
+ "揪": 2998,
+ "揭": 2999,
+ "揮": 3000,
+ "援": 3001,
+ "揶": 3002,
+ "揸": 3003,
+ "揹": 3004,
+ "揽": 3005,
+ "搀": 3006,
+ "搁": 3007,
+ "搂": 3008,
+ "搅": 3009,
+ "損": 3010,
+ "搏": 3011,
+ "搐": 3012,
+ "搓": 3013,
+ "搔": 3014,
+ "搖": 3015,
+ "搗": 3016,
+ "搜": 3017,
+ "搞": 3018,
+ "搡": 3019,
+ "搪": 3020,
+ "搬": 3021,
+ "搭": 3022,
+ "搵": 3023,
+ "搶": 3024,
+ "携": 3025,
+ "搽": 3026,
+ "摀": 3027,
+ "摁": 3028,
+ "摄": 3029,
+ "摆": 3030,
+ "摇": 3031,
+ "摈": 3032,
+ "摊": 3033,
+ "摒": 3034,
+ "摔": 3035,
+ "摘": 3036,
+ "摞": 3037,
+ "摟": 3038,
+ "摧": 3039,
+ "摩": 3040,
+ "摯": 3041,
+ "摳": 3042,
+ "摸": 3043,
+ "摹": 3044,
+ "摺": 3045,
+ "摻": 3046,
+ "撂": 3047,
+ "撃": 3048,
+ "撅": 3049,
+ "撇": 3050,
+ "撈": 3051,
+ "撐": 3052,
+ "撑": 3053,
+ "撒": 3054,
+ "撓": 3055,
+ "撕": 3056,
+ "撚": 3057,
+ "撞": 3058,
+ "撤": 3059,
+ "撥": 3060,
+ "撩": 3061,
+ "撫": 3062,
+ "撬": 3063,
+ "播": 3064,
+ "撮": 3065,
+ "撰": 3066,
+ "撲": 3067,
+ "撵": 3068,
+ "撷": 3069,
+ "撸": 3070,
+ "撻": 3071,
+ "撼": 3072,
+ "撿": 3073,
+ "擀": 3074,
+ "擁": 3075,
+ "擂": 3076,
+ "擄": 3077,
+ "擅": 3078,
+ "擇": 3079,
+ "擊": 3080,
+ "擋": 3081,
+ "操": 3082,
+ "擎": 3083,
+ "擒": 3084,
+ "擔": 3085,
+ "擘": 3086,
+ "據": 3087,
+ "擞": 3088,
+ "擠": 3089,
+ "擡": 3090,
+ "擢": 3091,
+ "擦": 3092,
+ "擬": 3093,
+ "擰": 3094,
+ "擱": 3095,
+ "擲": 3096,
+ "擴": 3097,
+ "擷": 3098,
+ "擺": 3099,
+ "擼": 3100,
+ "擾": 3101,
+ "攀": 3102,
+ "攏": 3103,
+ "攒": 3104,
+ "攔": 3105,
+ "攘": 3106,
+ "攙": 3107,
+ "攜": 3108,
+ "攝": 3109,
+ "攞": 3110,
+ "攢": 3111,
+ "攣": 3112,
+ "攤": 3113,
+ "攥": 3114,
+ "攪": 3115,
+ "攫": 3116,
+ "攬": 3117,
+ "支": 3118,
+ "收": 3119,
+ "攸": 3120,
+ "改": 3121,
+ "攻": 3122,
+ "放": 3123,
+ "政": 3124,
+ "故": 3125,
+ "效": 3126,
+ "敌": 3127,
+ "敍": 3128,
+ "敎": 3129,
+ "敏": 3130,
+ "救": 3131,
+ "敕": 3132,
+ "敖": 3133,
+ "敗": 3134,
+ "敘": 3135,
+ "教": 3136,
+ "敛": 3137,
+ "敝": 3138,
+ "敞": 3139,
+ "敢": 3140,
+ "散": 3141,
+ "敦": 3142,
+ "敬": 3143,
+ "数": 3144,
+ "敲": 3145,
+ "整": 3146,
+ "敵": 3147,
+ "敷": 3148,
+ "數": 3149,
+ "斂": 3150,
+ "斃": 3151,
+ "文": 3152,
+ "斋": 3153,
+ "斌": 3154,
+ "斎": 3155,
+ "斐": 3156,
+ "斑": 3157,
+ "斓": 3158,
+ "斗": 3159,
+ "料": 3160,
+ "斛": 3161,
+ "斜": 3162,
+ "斟": 3163,
+ "斡": 3164,
+ "斤": 3165,
+ "斥": 3166,
+ "斧": 3167,
+ "斩": 3168,
+ "斫": 3169,
+ "斬": 3170,
+ "断": 3171,
+ "斯": 3172,
+ "新": 3173,
+ "斷": 3174,
+ "方": 3175,
+ "於": 3176,
+ "施": 3177,
+ "旁": 3178,
+ "旃": 3179,
+ "旅": 3180,
+ "旋": 3181,
+ "旌": 3182,
+ "旎": 3183,
+ "族": 3184,
+ "旖": 3185,
+ "旗": 3186,
+ "无": 3187,
+ "既": 3188,
+ "日": 3189,
+ "旦": 3190,
+ "旧": 3191,
+ "旨": 3192,
+ "早": 3193,
+ "旬": 3194,
+ "旭": 3195,
+ "旮": 3196,
+ "旱": 3197,
+ "时": 3198,
+ "旷": 3199,
+ "旺": 3200,
+ "旻": 3201,
+ "昀": 3202,
+ "昂": 3203,
+ "昆": 3204,
+ "昇": 3205,
+ "昉": 3206,
+ "昊": 3207,
+ "昌": 3208,
+ "明": 3209,
+ "昏": 3210,
+ "易": 3211,
+ "昔": 3212,
+ "昕": 3213,
+ "昙": 3214,
+ "星": 3215,
+ "映": 3216,
+ "春": 3217,
+ "昧": 3218,
+ "昨": 3219,
+ "昭": 3220,
+ "是": 3221,
+ "昱": 3222,
+ "昴": 3223,
+ "昵": 3224,
+ "昶": 3225,
+ "昼": 3226,
+ "显": 3227,
+ "晁": 3228,
+ "時": 3229,
+ "晃": 3230,
+ "晉": 3231,
+ "晋": 3232,
+ "晌": 3233,
+ "晏": 3234,
+ "晒": 3235,
+ "晓": 3236,
+ "晔": 3237,
+ "晕": 3238,
+ "晖": 3239,
+ "晗": 3240,
+ "晚": 3241,
+ "晝": 3242,
+ "晞": 3243,
+ "晟": 3244,
+ "晤": 3245,
+ "晦": 3246,
+ "晨": 3247,
+ "晩": 3248,
+ "普": 3249,
+ "景": 3250,
+ "晰": 3251,
+ "晴": 3252,
+ "晶": 3253,
+ "晷": 3254,
+ "智": 3255,
+ "晾": 3256,
+ "暂": 3257,
+ "暄": 3258,
+ "暇": 3259,
+ "暈": 3260,
+ "暉": 3261,
+ "暌": 3262,
+ "暐": 3263,
+ "暑": 3264,
+ "暖": 3265,
+ "暗": 3266,
+ "暝": 3267,
+ "暢": 3268,
+ "暧": 3269,
+ "暨": 3270,
+ "暫": 3271,
+ "暮": 3272,
+ "暱": 3273,
+ "暴": 3274,
+ "暸": 3275,
+ "暹": 3276,
+ "曄": 3277,
+ "曆": 3278,
+ "曇": 3279,
+ "曉": 3280,
+ "曖": 3281,
+ "曙": 3282,
+ "曜": 3283,
+ "曝": 3284,
+ "曠": 3285,
+ "曦": 3286,
+ "曬": 3287,
+ "曰": 3288,
+ "曲": 3289,
+ "曳": 3290,
+ "更": 3291,
+ "書": 3292,
+ "曹": 3293,
+ "曼": 3294,
+ "曾": 3295,
+ "替": 3296,
+ "最": 3297,
+ "會": 3298,
+ "月": 3299,
+ "有": 3300,
+ "朋": 3301,
+ "服": 3302,
+ "朐": 3303,
+ "朔": 3304,
+ "朕": 3305,
+ "朗": 3306,
+ "望": 3307,
+ "朝": 3308,
+ "期": 3309,
+ "朦": 3310,
+ "朧": 3311,
+ "木": 3312,
+ "未": 3313,
+ "末": 3314,
+ "本": 3315,
+ "札": 3316,
+ "朮": 3317,
+ "术": 3318,
+ "朱": 3319,
+ "朴": 3320,
+ "朵": 3321,
+ "机": 3322,
+ "朽": 3323,
+ "杀": 3324,
+ "杂": 3325,
+ "权": 3326,
+ "杆": 3327,
+ "杈": 3328,
+ "杉": 3329,
+ "李": 3330,
+ "杏": 3331,
+ "材": 3332,
+ "村": 3333,
+ "杓": 3334,
+ "杖": 3335,
+ "杜": 3336,
+ "杞": 3337,
+ "束": 3338,
+ "杠": 3339,
+ "条": 3340,
+ "来": 3341,
+ "杨": 3342,
+ "杭": 3343,
+ "杯": 3344,
+ "杰": 3345,
+ "東": 3346,
+ "杳": 3347,
+ "杵": 3348,
+ "杷": 3349,
+ "杼": 3350,
+ "松": 3351,
+ "板": 3352,
+ "极": 3353,
+ "构": 3354,
+ "枇": 3355,
+ "枉": 3356,
+ "枋": 3357,
+ "析": 3358,
+ "枕": 3359,
+ "林": 3360,
+ "枚": 3361,
+ "果": 3362,
+ "枝": 3363,
+ "枢": 3364,
+ "枣": 3365,
+ "枪": 3366,
+ "枫": 3367,
+ "枭": 3368,
+ "枯": 3369,
+ "枰": 3370,
+ "枱": 3371,
+ "枳": 3372,
+ "架": 3373,
+ "枷": 3374,
+ "枸": 3375,
+ "柄": 3376,
+ "柏": 3377,
+ "某": 3378,
+ "柑": 3379,
+ "柒": 3380,
+ "染": 3381,
+ "柔": 3382,
+ "柘": 3383,
+ "柚": 3384,
+ "柜": 3385,
+ "柞": 3386,
+ "柠": 3387,
+ "柢": 3388,
+ "查": 3389,
+ "柩": 3390,
+ "柬": 3391,
+ "柯": 3392,
+ "柱": 3393,
+ "柳": 3394,
+ "柴": 3395,
+ "柵": 3396,
+ "査": 3397,
+ "柿": 3398,
+ "栀": 3399,
+ "栃": 3400,
+ "栄": 3401,
+ "栅": 3402,
+ "标": 3403,
+ "栈": 3404,
+ "栉": 3405,
+ "栋": 3406,
+ "栎": 3407,
+ "栏": 3408,
+ "树": 3409,
+ "栓": 3410,
+ "栖": 3411,
+ "栗": 3412,
+ "校": 3413,
+ "栩": 3414,
+ "株": 3415,
+ "样": 3416,
+ "核": 3417,
+ "根": 3418,
+ "格": 3419,
+ "栽": 3420,
+ "栾": 3421,
+ "桀": 3422,
+ "桁": 3423,
+ "桂": 3424,
+ "桃": 3425,
+ "桅": 3426,
+ "框": 3427,
+ "案": 3428,
+ "桉": 3429,
+ "桌": 3430,
+ "桎": 3431,
+ "桐": 3432,
+ "桑": 3433,
+ "桓": 3434,
+ "桔": 3435,
+ "桜": 3436,
+ "桠": 3437,
+ "桡": 3438,
+ "桢": 3439,
+ "档": 3440,
+ "桥": 3441,
+ "桦": 3442,
+ "桧": 3443,
+ "桨": 3444,
+ "桩": 3445,
+ "桶": 3446,
+ "桿": 3447,
+ "梁": 3448,
+ "梅": 3449,
+ "梆": 3450,
+ "梏": 3451,
+ "梓": 3452,
+ "梗": 3453,
+ "條": 3454,
+ "梟": 3455,
+ "梢": 3456,
+ "梦": 3457,
+ "梧": 3458,
+ "梨": 3459,
+ "梭": 3460,
+ "梯": 3461,
+ "械": 3462,
+ "梳": 3463,
+ "梵": 3464,
+ "梶": 3465,
+ "检": 3466,
+ "棂": 3467,
+ "棄": 3468,
+ "棉": 3469,
+ "棋": 3470,
+ "棍": 3471,
+ "棒": 3472,
+ "棕": 3473,
+ "棗": 3474,
+ "棘": 3475,
+ "棚": 3476,
+ "棟": 3477,
+ "棠": 3478,
+ "棣": 3479,
+ "棧": 3480,
+ "森": 3481,
+ "棱": 3482,
+ "棲": 3483,
+ "棵": 3484,
+ "棹": 3485,
+ "棺": 3486,
+ "椁": 3487,
+ "椅": 3488,
+ "椋": 3489,
+ "植": 3490,
+ "椎": 3491,
+ "椒": 3492,
+ "検": 3493,
+ "椪": 3494,
+ "椭": 3495,
+ "椰": 3496,
+ "椹": 3497,
+ "椽": 3498,
+ "椿": 3499,
+ "楂": 3500,
+ "楊": 3501,
+ "楓": 3502,
+ "楔": 3503,
+ "楚": 3504,
+ "楝": 3505,
+ "楞": 3506,
+ "楠": 3507,
+ "楣": 3508,
+ "楨": 3509,
+ "楫": 3510,
+ "業": 3511,
+ "楮": 3512,
+ "極": 3513,
+ "楷": 3514,
+ "楸": 3515,
+ "楹": 3516,
+ "楼": 3517,
+ "楽": 3518,
+ "概": 3519,
+ "榄": 3520,
+ "榆": 3521,
+ "榈": 3522,
+ "榉": 3523,
+ "榔": 3524,
+ "榕": 3525,
+ "榖": 3526,
+ "榛": 3527,
+ "榜": 3528,
+ "榨": 3529,
+ "榫": 3530,
+ "榭": 3531,
+ "榮": 3532,
+ "榱": 3533,
+ "榴": 3534,
+ "榷": 3535,
+ "榻": 3536,
+ "槁": 3537,
+ "槃": 3538,
+ "構": 3539,
+ "槌": 3540,
+ "槍": 3541,
+ "槎": 3542,
+ "槐": 3543,
+ "槓": 3544,
+ "様": 3545,
+ "槛": 3546,
+ "槟": 3547,
+ "槤": 3548,
+ "槭": 3549,
+ "槲": 3550,
+ "槳": 3551,
+ "槻": 3552,
+ "槽": 3553,
+ "槿": 3554,
+ "樁": 3555,
+ "樂": 3556,
+ "樊": 3557,
+ "樑": 3558,
+ "樓": 3559,
+ "標": 3560,
+ "樞": 3561,
+ "樟": 3562,
+ "模": 3563,
+ "樣": 3564,
+ "権": 3565,
+ "横": 3566,
+ "樫": 3567,
+ "樯": 3568,
+ "樱": 3569,
+ "樵": 3570,
+ "樸": 3571,
+ "樹": 3572,
+ "樺": 3573,
+ "樽": 3574,
+ "樾": 3575,
+ "橄": 3576,
+ "橇": 3577,
+ "橋": 3578,
+ "橐": 3579,
+ "橘": 3580,
+ "橙": 3581,
+ "機": 3582,
+ "橡": 3583,
+ "橢": 3584,
+ "橫": 3585,
+ "橱": 3586,
+ "橹": 3587,
+ "橼": 3588,
+ "檀": 3589,
+ "檄": 3590,
+ "檎": 3591,
+ "檐": 3592,
+ "檔": 3593,
+ "檗": 3594,
+ "檜": 3595,
+ "檢": 3596,
+ "檬": 3597,
+ "檯": 3598,
+ "檳": 3599,
+ "檸": 3600,
+ "檻": 3601,
+ "櫃": 3602,
+ "櫚": 3603,
+ "櫛": 3604,
+ "櫥": 3605,
+ "櫸": 3606,
+ "櫻": 3607,
+ "欄": 3608,
+ "權": 3609,
+ "欒": 3610,
+ "欖": 3611,
+ "欠": 3612,
+ "次": 3613,
+ "欢": 3614,
+ "欣": 3615,
+ "欧": 3616,
+ "欲": 3617,
+ "欸": 3618,
+ "欺": 3619,
+ "欽": 3620,
+ "款": 3621,
+ "歆": 3622,
+ "歇": 3623,
+ "歉": 3624,
+ "歌": 3625,
+ "歎": 3626,
+ "歐": 3627,
+ "歓": 3628,
+ "歙": 3629,
+ "歛": 3630,
+ "歡": 3631,
+ "止": 3632,
+ "正": 3633,
+ "此": 3634,
+ "步": 3635,
+ "武": 3636,
+ "歧": 3637,
+ "歩": 3638,
+ "歪": 3639,
+ "歯": 3640,
+ "歲": 3641,
+ "歳": 3642,
+ "歴": 3643,
+ "歷": 3644,
+ "歸": 3645,
+ "歹": 3646,
+ "死": 3647,
+ "歼": 3648,
+ "殁": 3649,
+ "殃": 3650,
+ "殆": 3651,
+ "殇": 3652,
+ "殉": 3653,
+ "殊": 3654,
+ "残": 3655,
+ "殒": 3656,
+ "殓": 3657,
+ "殖": 3658,
+ "殘": 3659,
+ "殞": 3660,
+ "殡": 3661,
+ "殤": 3662,
+ "殭": 3663,
+ "殯": 3664,
+ "殲": 3665,
+ "殴": 3666,
+ "段": 3667,
+ "殷": 3668,
+ "殺": 3669,
+ "殼": 3670,
+ "殿": 3671,
+ "毀": 3672,
+ "毁": 3673,
+ "毂": 3674,
+ "毅": 3675,
+ "毆": 3676,
+ "毋": 3677,
+ "母": 3678,
+ "毎": 3679,
+ "每": 3680,
+ "毒": 3681,
+ "毓": 3682,
+ "比": 3683,
+ "毕": 3684,
+ "毗": 3685,
+ "毘": 3686,
+ "毙": 3687,
+ "毛": 3688,
+ "毡": 3689,
+ "毫": 3690,
+ "毯": 3691,
+ "毽": 3692,
+ "氈": 3693,
+ "氏": 3694,
+ "氐": 3695,
+ "民": 3696,
+ "氓": 3697,
+ "气": 3698,
+ "氖": 3699,
+ "気": 3700,
+ "氙": 3701,
+ "氛": 3702,
+ "氟": 3703,
+ "氡": 3704,
+ "氢": 3705,
+ "氣": 3706,
+ "氤": 3707,
+ "氦": 3708,
+ "氧": 3709,
+ "氨": 3710,
+ "氪": 3711,
+ "氫": 3712,
+ "氮": 3713,
+ "氯": 3714,
+ "氰": 3715,
+ "氲": 3716,
+ "水": 3717,
+ "氷": 3718,
+ "永": 3719,
+ "氹": 3720,
+ "氾": 3721,
+ "汀": 3722,
+ "汁": 3723,
+ "求": 3724,
+ "汆": 3725,
+ "汇": 3726,
+ "汉": 3727,
+ "汎": 3728,
+ "汐": 3729,
+ "汕": 3730,
+ "汗": 3731,
+ "汙": 3732,
+ "汛": 3733,
+ "汝": 3734,
+ "汞": 3735,
+ "江": 3736,
+ "池": 3737,
+ "污": 3738,
+ "汤": 3739,
+ "汨": 3740,
+ "汩": 3741,
+ "汪": 3742,
+ "汰": 3743,
+ "汲": 3744,
+ "汴": 3745,
+ "汶": 3746,
+ "汹": 3747,
+ "決": 3748,
+ "汽": 3749,
+ "汾": 3750,
+ "沁": 3751,
+ "沂": 3752,
+ "沃": 3753,
+ "沅": 3754,
+ "沈": 3755,
+ "沉": 3756,
+ "沌": 3757,
+ "沏": 3758,
+ "沐": 3759,
+ "沒": 3760,
+ "沓": 3761,
+ "沖": 3762,
+ "沙": 3763,
+ "沛": 3764,
+ "沟": 3765,
+ "没": 3766,
+ "沢": 3767,
+ "沣": 3768,
+ "沥": 3769,
+ "沦": 3770,
+ "沧": 3771,
+ "沪": 3772,
+ "沫": 3773,
+ "沭": 3774,
+ "沮": 3775,
+ "沱": 3776,
+ "河": 3777,
+ "沸": 3778,
+ "油": 3779,
+ "治": 3780,
+ "沼": 3781,
+ "沽": 3782,
+ "沾": 3783,
+ "沿": 3784,
+ "況": 3785,
+ "泄": 3786,
+ "泉": 3787,
+ "泊": 3788,
+ "泌": 3789,
+ "泓": 3790,
+ "法": 3791,
+ "泗": 3792,
+ "泛": 3793,
+ "泞": 3794,
+ "泠": 3795,
+ "泡": 3796,
+ "波": 3797,
+ "泣": 3798,
+ "泥": 3799,
+ "注": 3800,
+ "泪": 3801,
+ "泫": 3802,
+ "泮": 3803,
+ "泯": 3804,
+ "泰": 3805,
+ "泱": 3806,
+ "泳": 3807,
+ "泵": 3808,
+ "泷": 3809,
+ "泸": 3810,
+ "泻": 3811,
+ "泼": 3812,
+ "泽": 3813,
+ "泾": 3814,
+ "洁": 3815,
+ "洄": 3816,
+ "洋": 3817,
+ "洒": 3818,
+ "洗": 3819,
+ "洙": 3820,
+ "洛": 3821,
+ "洞": 3822,
+ "津": 3823,
+ "洩": 3824,
+ "洪": 3825,
+ "洮": 3826,
+ "洱": 3827,
+ "洲": 3828,
+ "洵": 3829,
+ "洶": 3830,
+ "洸": 3831,
+ "洹": 3832,
+ "活": 3833,
+ "洼": 3834,
+ "洽": 3835,
+ "派": 3836,
+ "流": 3837,
+ "浃": 3838,
+ "浄": 3839,
+ "浅": 3840,
+ "浆": 3841,
+ "浇": 3842,
+ "浊": 3843,
+ "测": 3844,
+ "济": 3845,
+ "浏": 3846,
+ "浑": 3847,
+ "浒": 3848,
+ "浓": 3849,
+ "浔": 3850,
+ "浙": 3851,
+ "浚": 3852,
+ "浜": 3853,
+ "浣": 3854,
+ "浦": 3855,
+ "浩": 3856,
+ "浪": 3857,
+ "浬": 3858,
+ "浮": 3859,
+ "浯": 3860,
+ "浴": 3861,
+ "海": 3862,
+ "浸": 3863,
+ "涂": 3864,
+ "涅": 3865,
+ "涇": 3866,
+ "消": 3867,
+ "涉": 3868,
+ "涌": 3869,
+ "涎": 3870,
+ "涓": 3871,
+ "涔": 3872,
+ "涕": 3873,
+ "涙": 3874,
+ "涛": 3875,
+ "涝": 3876,
+ "涞": 3877,
+ "涟": 3878,
+ "涠": 3879,
+ "涡": 3880,
+ "涣": 3881,
+ "涤": 3882,
+ "润": 3883,
+ "涧": 3884,
+ "涨": 3885,
+ "涩": 3886,
+ "涪": 3887,
+ "涮": 3888,
+ "涯": 3889,
+ "液": 3890,
+ "涵": 3891,
+ "涸": 3892,
+ "涼": 3893,
+ "涿": 3894,
+ "淀": 3895,
+ "淄": 3896,
+ "淅": 3897,
+ "淆": 3898,
+ "淇": 3899,
+ "淋": 3900,
+ "淌": 3901,
+ "淑": 3902,
+ "淒": 3903,
+ "淖": 3904,
+ "淘": 3905,
+ "淙": 3906,
+ "淚": 3907,
+ "淞": 3908,
+ "淡": 3909,
+ "淤": 3910,
+ "淦": 3911,
+ "淨": 3912,
+ "淩": 3913,
+ "淪": 3914,
+ "淫": 3915,
+ "淬": 3916,
+ "淮": 3917,
+ "深": 3918,
+ "淳": 3919,
+ "淵": 3920,
+ "混": 3921,
+ "淹": 3922,
+ "淺": 3923,
+ "添": 3924,
+ "淼": 3925,
+ "清": 3926,
+ "済": 3927,
+ "渉": 3928,
+ "渊": 3929,
+ "渋": 3930,
+ "渍": 3931,
+ "渎": 3932,
+ "渐": 3933,
+ "渔": 3934,
+ "渗": 3935,
+ "渙": 3936,
+ "渚": 3937,
+ "減": 3938,
+ "渝": 3939,
+ "渠": 3940,
+ "渡": 3941,
+ "渣": 3942,
+ "渤": 3943,
+ "渥": 3944,
+ "渦": 3945,
+ "温": 3946,
+ "測": 3947,
+ "渭": 3948,
+ "港": 3949,
+ "渲": 3950,
+ "渴": 3951,
+ "游": 3952,
+ "渺": 3953,
+ "渾": 3954,
+ "湃": 3955,
+ "湄": 3956,
+ "湊": 3957,
+ "湍": 3958,
+ "湖": 3959,
+ "湘": 3960,
+ "湛": 3961,
+ "湟": 3962,
+ "湧": 3963,
+ "湫": 3964,
+ "湮": 3965,
+ "湯": 3966,
+ "湳": 3967,
+ "湾": 3968,
+ "湿": 3969,
+ "満": 3970,
+ "溃": 3971,
+ "溅": 3972,
+ "溉": 3973,
+ "溏": 3974,
+ "源": 3975,
+ "準": 3976,
+ "溜": 3977,
+ "溝": 3978,
+ "溟": 3979,
+ "溢": 3980,
+ "溥": 3981,
+ "溧": 3982,
+ "溪": 3983,
+ "溫": 3984,
+ "溯": 3985,
+ "溱": 3986,
+ "溴": 3987,
+ "溶": 3988,
+ "溺": 3989,
+ "溼": 3990,
+ "滁": 3991,
+ "滂": 3992,
+ "滄": 3993,
+ "滅": 3994,
+ "滇": 3995,
+ "滋": 3996,
+ "滌": 3997,
+ "滑": 3998,
+ "滓": 3999,
+ "滔": 4000,
+ "滕": 4001,
+ "滙": 4002,
+ "滚": 4003,
+ "滝": 4004,
+ "滞": 4005,
+ "滟": 4006,
+ "满": 4007,
+ "滢": 4008,
+ "滤": 4009,
+ "滥": 4010,
+ "滦": 4011,
+ "滨": 4012,
+ "滩": 4013,
+ "滬": 4014,
+ "滯": 4015,
+ "滲": 4016,
+ "滴": 4017,
+ "滷": 4018,
+ "滸": 4019,
+ "滾": 4020,
+ "滿": 4021,
+ "漁": 4022,
+ "漂": 4023,
+ "漆": 4024,
+ "漉": 4025,
+ "漏": 4026,
+ "漓": 4027,
+ "演": 4028,
+ "漕": 4029,
+ "漠": 4030,
+ "漢": 4031,
+ "漣": 4032,
+ "漩": 4033,
+ "漪": 4034,
+ "漫": 4035,
+ "漬": 4036,
+ "漯": 4037,
+ "漱": 4038,
+ "漲": 4039,
+ "漳": 4040,
+ "漸": 4041,
+ "漾": 4042,
+ "漿": 4043,
+ "潆": 4044,
+ "潇": 4045,
+ "潋": 4046,
+ "潍": 4047,
+ "潑": 4048,
+ "潔": 4049,
+ "潘": 4050,
+ "潛": 4051,
+ "潜": 4052,
+ "潞": 4053,
+ "潟": 4054,
+ "潢": 4055,
+ "潤": 4056,
+ "潦": 4057,
+ "潧": 4058,
+ "潭": 4059,
+ "潮": 4060,
+ "潰": 4061,
+ "潴": 4062,
+ "潸": 4063,
+ "潺": 4064,
+ "潼": 4065,
+ "澀": 4066,
+ "澄": 4067,
+ "澆": 4068,
+ "澈": 4069,
+ "澍": 4070,
+ "澎": 4071,
+ "澗": 4072,
+ "澜": 4073,
+ "澡": 4074,
+ "澤": 4075,
+ "澧": 4076,
+ "澱": 4077,
+ "澳": 4078,
+ "澹": 4079,
+ "激": 4080,
+ "濁": 4081,
+ "濂": 4082,
+ "濃": 4083,
+ "濑": 4084,
+ "濒": 4085,
+ "濕": 4086,
+ "濘": 4087,
+ "濛": 4088,
+ "濟": 4089,
+ "濠": 4090,
+ "濡": 4091,
+ "濤": 4092,
+ "濫": 4093,
+ "濬": 4094,
+ "濮": 4095,
+ "濯": 4096,
+ "濱": 4097,
+ "濺": 4098,
+ "濾": 4099,
+ "瀅": 4100,
+ "瀆": 4101,
+ "瀉": 4102,
+ "瀋": 4103,
+ "瀏": 4104,
+ "瀑": 4105,
+ "瀕": 4106,
+ "瀘": 4107,
+ "瀚": 4108,
+ "瀛": 4109,
+ "瀝": 4110,
+ "瀞": 4111,
+ "瀟": 4112,
+ "瀧": 4113,
+ "瀨": 4114,
+ "瀬": 4115,
+ "瀰": 4116,
+ "瀾": 4117,
+ "灌": 4118,
+ "灏": 4119,
+ "灑": 4120,
+ "灘": 4121,
+ "灝": 4122,
+ "灞": 4123,
+ "灣": 4124,
+ "火": 4125,
+ "灬": 4126,
+ "灭": 4127,
+ "灯": 4128,
+ "灰": 4129,
+ "灵": 4130,
+ "灶": 4131,
+ "灸": 4132,
+ "灼": 4133,
+ "災": 4134,
+ "灾": 4135,
+ "灿": 4136,
+ "炀": 4137,
+ "炁": 4138,
+ "炅": 4139,
+ "炉": 4140,
+ "炊": 4141,
+ "炎": 4142,
+ "炒": 4143,
+ "炔": 4144,
+ "炕": 4145,
+ "炖": 4146,
+ "炙": 4147,
+ "炜": 4148,
+ "炫": 4149,
+ "炬": 4150,
+ "炭": 4151,
+ "炮": 4152,
+ "炯": 4153,
+ "炳": 4154,
+ "炷": 4155,
+ "炸": 4156,
+ "点": 4157,
+ "為": 4158,
+ "炼": 4159,
+ "炽": 4160,
+ "烁": 4161,
+ "烂": 4162,
+ "烃": 4163,
+ "烈": 4164,
+ "烊": 4165,
+ "烏": 4166,
+ "烘": 4167,
+ "烙": 4168,
+ "烛": 4169,
+ "烟": 4170,
+ "烤": 4171,
+ "烦": 4172,
+ "烧": 4173,
+ "烨": 4174,
+ "烩": 4175,
+ "烫": 4176,
+ "烬": 4177,
+ "热": 4178,
+ "烯": 4179,
+ "烷": 4180,
+ "烹": 4181,
+ "烽": 4182,
+ "焉": 4183,
+ "焊": 4184,
+ "焕": 4185,
+ "焖": 4186,
+ "焗": 4187,
+ "焘": 4188,
+ "焙": 4189,
+ "焚": 4190,
+ "焜": 4191,
+ "無": 4192,
+ "焦": 4193,
+ "焯": 4194,
+ "焰": 4195,
+ "焱": 4196,
+ "然": 4197,
+ "焼": 4198,
+ "煅": 4199,
+ "煉": 4200,
+ "煊": 4201,
+ "煌": 4202,
+ "煎": 4203,
+ "煒": 4204,
+ "煖": 4205,
+ "煙": 4206,
+ "煜": 4207,
+ "煞": 4208,
+ "煤": 4209,
+ "煥": 4210,
+ "煦": 4211,
+ "照": 4212,
+ "煨": 4213,
+ "煩": 4214,
+ "煮": 4215,
+ "煲": 4216,
+ "煸": 4217,
+ "煽": 4218,
+ "熄": 4219,
+ "熊": 4220,
+ "熏": 4221,
+ "熒": 4222,
+ "熔": 4223,
+ "熙": 4224,
+ "熟": 4225,
+ "熠": 4226,
+ "熨": 4227,
+ "熬": 4228,
+ "熱": 4229,
+ "熵": 4230,
+ "熹": 4231,
+ "熾": 4232,
+ "燁": 4233,
+ "燃": 4234,
+ "燄": 4235,
+ "燈": 4236,
+ "燉": 4237,
+ "燊": 4238,
+ "燎": 4239,
+ "燒": 4240,
+ "燔": 4241,
+ "燕": 4242,
+ "燙": 4243,
+ "燜": 4244,
+ "營": 4245,
+ "燥": 4246,
+ "燦": 4247,
+ "燧": 4248,
+ "燭": 4249,
+ "燮": 4250,
+ "燴": 4251,
+ "燻": 4252,
+ "燼": 4253,
+ "燿": 4254,
+ "爆": 4255,
+ "爍": 4256,
+ "爐": 4257,
+ "爛": 4258,
+ "爪": 4259,
+ "爬": 4260,
+ "爭": 4261,
+ "爰": 4262,
+ "爱": 4263,
+ "爲": 4264,
+ "爵": 4265,
+ "父": 4266,
+ "爷": 4267,
+ "爸": 4268,
+ "爹": 4269,
+ "爺": 4270,
+ "爻": 4271,
+ "爽": 4272,
+ "爾": 4273,
+ "牆": 4274,
+ "片": 4275,
+ "版": 4276,
+ "牌": 4277,
+ "牍": 4278,
+ "牒": 4279,
+ "牙": 4280,
+ "牛": 4281,
+ "牝": 4282,
+ "牟": 4283,
+ "牠": 4284,
+ "牡": 4285,
+ "牢": 4286,
+ "牦": 4287,
+ "牧": 4288,
+ "物": 4289,
+ "牯": 4290,
+ "牲": 4291,
+ "牴": 4292,
+ "牵": 4293,
+ "特": 4294,
+ "牺": 4295,
+ "牽": 4296,
+ "犀": 4297,
+ "犁": 4298,
+ "犄": 4299,
+ "犊": 4300,
+ "犍": 4301,
+ "犒": 4302,
+ "犢": 4303,
+ "犧": 4304,
+ "犬": 4305,
+ "犯": 4306,
+ "状": 4307,
+ "犷": 4308,
+ "犸": 4309,
+ "犹": 4310,
+ "狀": 4311,
+ "狂": 4312,
+ "狄": 4313,
+ "狈": 4314,
+ "狎": 4315,
+ "狐": 4316,
+ "狒": 4317,
+ "狗": 4318,
+ "狙": 4319,
+ "狞": 4320,
+ "狠": 4321,
+ "狡": 4322,
+ "狩": 4323,
+ "独": 4324,
+ "狭": 4325,
+ "狮": 4326,
+ "狰": 4327,
+ "狱": 4328,
+ "狸": 4329,
+ "狹": 4330,
+ "狼": 4331,
+ "狽": 4332,
+ "猎": 4333,
+ "猕": 4334,
+ "猖": 4335,
+ "猗": 4336,
+ "猙": 4337,
+ "猛": 4338,
+ "猜": 4339,
+ "猝": 4340,
+ "猥": 4341,
+ "猩": 4342,
+ "猪": 4343,
+ "猫": 4344,
+ "猬": 4345,
+ "献": 4346,
+ "猴": 4347,
+ "猶": 4348,
+ "猷": 4349,
+ "猾": 4350,
+ "猿": 4351,
+ "獄": 4352,
+ "獅": 4353,
+ "獎": 4354,
+ "獐": 4355,
+ "獒": 4356,
+ "獗": 4357,
+ "獠": 4358,
+ "獣": 4359,
+ "獨": 4360,
+ "獭": 4361,
+ "獰": 4362,
+ "獲": 4363,
+ "獵": 4364,
+ "獷": 4365,
+ "獸": 4366,
+ "獺": 4367,
+ "獻": 4368,
+ "獼": 4369,
+ "獾": 4370,
+ "玄": 4371,
+ "率": 4372,
+ "玉": 4373,
+ "王": 4374,
+ "玑": 4375,
+ "玖": 4376,
+ "玛": 4377,
+ "玟": 4378,
+ "玠": 4379,
+ "玥": 4380,
+ "玩": 4381,
+ "玫": 4382,
+ "玮": 4383,
+ "环": 4384,
+ "现": 4385,
+ "玲": 4386,
+ "玳": 4387,
+ "玷": 4388,
+ "玺": 4389,
+ "玻": 4390,
+ "珀": 4391,
+ "珂": 4392,
+ "珅": 4393,
+ "珈": 4394,
+ "珉": 4395,
+ "珊": 4396,
+ "珍": 4397,
+ "珏": 4398,
+ "珐": 4399,
+ "珑": 4400,
+ "珙": 4401,
+ "珞": 4402,
+ "珠": 4403,
+ "珣": 4404,
+ "珥": 4405,
+ "珩": 4406,
+ "珪": 4407,
+ "班": 4408,
+ "珮": 4409,
+ "珲": 4410,
+ "珺": 4411,
+ "現": 4412,
+ "球": 4413,
+ "琅": 4414,
+ "理": 4415,
+ "琇": 4416,
+ "琉": 4417,
+ "琊": 4418,
+ "琍": 4419,
+ "琏": 4420,
+ "琐": 4421,
+ "琛": 4422,
+ "琢": 4423,
+ "琥": 4424,
+ "琦": 4425,
+ "琨": 4426,
+ "琪": 4427,
+ "琬": 4428,
+ "琮": 4429,
+ "琰": 4430,
+ "琲": 4431,
+ "琳": 4432,
+ "琴": 4433,
+ "琵": 4434,
+ "琶": 4435,
+ "琺": 4436,
+ "琼": 4437,
+ "瑀": 4438,
+ "瑁": 4439,
+ "瑄": 4440,
+ "瑋": 4441,
+ "瑕": 4442,
+ "瑗": 4443,
+ "瑙": 4444,
+ "瑚": 4445,
+ "瑛": 4446,
+ "瑜": 4447,
+ "瑞": 4448,
+ "瑟": 4449,
+ "瑠": 4450,
+ "瑣": 4451,
+ "瑤": 4452,
+ "瑩": 4453,
+ "瑪": 4454,
+ "瑯": 4455,
+ "瑰": 4456,
+ "瑶": 4457,
+ "瑾": 4458,
+ "璀": 4459,
+ "璁": 4460,
+ "璃": 4461,
+ "璇": 4462,
+ "璉": 4463,
+ "璋": 4464,
+ "璎": 4465,
+ "璐": 4466,
+ "璜": 4467,
+ "璞": 4468,
+ "璟": 4469,
+ "璧": 4470,
+ "璨": 4471,
+ "環": 4472,
+ "璽": 4473,
+ "璿": 4474,
+ "瓊": 4475,
+ "瓏": 4476,
+ "瓒": 4477,
+ "瓜": 4478,
+ "瓢": 4479,
+ "瓣": 4480,
+ "瓤": 4481,
+ "瓦": 4482,
+ "瓮": 4483,
+ "瓯": 4484,
+ "瓴": 4485,
+ "瓶": 4486,
+ "瓷": 4487,
+ "甄": 4488,
+ "甌": 4489,
+ "甕": 4490,
+ "甘": 4491,
+ "甙": 4492,
+ "甚": 4493,
+ "甜": 4494,
+ "生": 4495,
+ "產": 4496,
+ "産": 4497,
+ "甥": 4498,
+ "甦": 4499,
+ "用": 4500,
+ "甩": 4501,
+ "甫": 4502,
+ "甬": 4503,
+ "甭": 4504,
+ "甯": 4505,
+ "田": 4506,
+ "由": 4507,
+ "甲": 4508,
+ "申": 4509,
+ "电": 4510,
+ "男": 4511,
+ "甸": 4512,
+ "町": 4513,
+ "画": 4514,
+ "甾": 4515,
+ "畀": 4516,
+ "畅": 4517,
+ "界": 4518,
+ "畏": 4519,
+ "畑": 4520,
+ "畔": 4521,
+ "留": 4522,
+ "畜": 4523,
+ "畝": 4524,
+ "畢": 4525,
+ "略": 4526,
+ "畦": 4527,
+ "番": 4528,
+ "畫": 4529,
+ "異": 4530,
+ "畲": 4531,
+ "畳": 4532,
+ "畴": 4533,
+ "當": 4534,
+ "畸": 4535,
+ "畹": 4536,
+ "畿": 4537,
+ "疆": 4538,
+ "疇": 4539,
+ "疊": 4540,
+ "疏": 4541,
+ "疑": 4542,
+ "疔": 4543,
+ "疖": 4544,
+ "疗": 4545,
+ "疙": 4546,
+ "疚": 4547,
+ "疝": 4548,
+ "疟": 4549,
+ "疡": 4550,
+ "疣": 4551,
+ "疤": 4552,
+ "疥": 4553,
+ "疫": 4554,
+ "疮": 4555,
+ "疯": 4556,
+ "疱": 4557,
+ "疲": 4558,
+ "疳": 4559,
+ "疵": 4560,
+ "疸": 4561,
+ "疹": 4562,
+ "疼": 4563,
+ "疽": 4564,
+ "疾": 4565,
+ "痂": 4566,
+ "病": 4567,
+ "症": 4568,
+ "痈": 4569,
+ "痉": 4570,
+ "痊": 4571,
+ "痍": 4572,
+ "痒": 4573,
+ "痔": 4574,
+ "痕": 4575,
+ "痘": 4576,
+ "痙": 4577,
+ "痛": 4578,
+ "痞": 4579,
+ "痠": 4580,
+ "痢": 4581,
+ "痣": 4582,
+ "痤": 4583,
+ "痧": 4584,
+ "痨": 4585,
+ "痪": 4586,
+ "痫": 4587,
+ "痰": 4588,
+ "痱": 4589,
+ "痴": 4590,
+ "痹": 4591,
+ "痺": 4592,
+ "痼": 4593,
+ "痿": 4594,
+ "瘀": 4595,
+ "瘁": 4596,
+ "瘋": 4597,
+ "瘍": 4598,
+ "瘓": 4599,
+ "瘘": 4600,
+ "瘙": 4601,
+ "瘟": 4602,
+ "瘠": 4603,
+ "瘡": 4604,
+ "瘢": 4605,
+ "瘤": 4606,
+ "瘦": 4607,
+ "瘧": 4608,
+ "瘩": 4609,
+ "瘪": 4610,
+ "瘫": 4611,
+ "瘴": 4612,
+ "瘸": 4613,
+ "瘾": 4614,
+ "療": 4615,
+ "癇": 4616,
+ "癌": 4617,
+ "癒": 4618,
+ "癖": 4619,
+ "癜": 4620,
+ "癞": 4621,
+ "癡": 4622,
+ "癢": 4623,
+ "癣": 4624,
+ "癥": 4625,
+ "癫": 4626,
+ "癬": 4627,
+ "癮": 4628,
+ "癱": 4629,
+ "癲": 4630,
+ "癸": 4631,
+ "発": 4632,
+ "登": 4633,
+ "發": 4634,
+ "白": 4635,
+ "百": 4636,
+ "皂": 4637,
+ "的": 4638,
+ "皆": 4639,
+ "皇": 4640,
+ "皈": 4641,
+ "皋": 4642,
+ "皎": 4643,
+ "皑": 4644,
+ "皓": 4645,
+ "皖": 4646,
+ "皙": 4647,
+ "皚": 4648,
+ "皮": 4649,
+ "皰": 4650,
+ "皱": 4651,
+ "皴": 4652,
+ "皺": 4653,
+ "皿": 4654,
+ "盂": 4655,
+ "盃": 4656,
+ "盅": 4657,
+ "盆": 4658,
+ "盈": 4659,
+ "益": 4660,
+ "盎": 4661,
+ "盏": 4662,
+ "盐": 4663,
+ "监": 4664,
+ "盒": 4665,
+ "盔": 4666,
+ "盖": 4667,
+ "盗": 4668,
+ "盘": 4669,
+ "盛": 4670,
+ "盜": 4671,
+ "盞": 4672,
+ "盟": 4673,
+ "盡": 4674,
+ "監": 4675,
+ "盤": 4676,
+ "盥": 4677,
+ "盧": 4678,
+ "盪": 4679,
+ "目": 4680,
+ "盯": 4681,
+ "盱": 4682,
+ "盲": 4683,
+ "直": 4684,
+ "相": 4685,
+ "盹": 4686,
+ "盼": 4687,
+ "盾": 4688,
+ "省": 4689,
+ "眈": 4690,
+ "眉": 4691,
+ "看": 4692,
+ "県": 4693,
+ "眙": 4694,
+ "眞": 4695,
+ "真": 4696,
+ "眠": 4697,
+ "眦": 4698,
+ "眨": 4699,
+ "眩": 4700,
+ "眯": 4701,
+ "眶": 4702,
+ "眷": 4703,
+ "眸": 4704,
+ "眺": 4705,
+ "眼": 4706,
+ "眾": 4707,
+ "着": 4708,
+ "睁": 4709,
+ "睇": 4710,
+ "睏": 4711,
+ "睐": 4712,
+ "睑": 4713,
+ "睛": 4714,
+ "睜": 4715,
+ "睞": 4716,
+ "睡": 4717,
+ "睢": 4718,
+ "督": 4719,
+ "睥": 4720,
+ "睦": 4721,
+ "睨": 4722,
+ "睪": 4723,
+ "睫": 4724,
+ "睬": 4725,
+ "睹": 4726,
+ "睽": 4727,
+ "睾": 4728,
+ "睿": 4729,
+ "瞄": 4730,
+ "瞅": 4731,
+ "瞇": 4732,
+ "瞋": 4733,
+ "瞌": 4734,
+ "瞎": 4735,
+ "瞑": 4736,
+ "瞒": 4737,
+ "瞓": 4738,
+ "瞞": 4739,
+ "瞟": 4740,
+ "瞠": 4741,
+ "瞥": 4742,
+ "瞧": 4743,
+ "瞩": 4744,
+ "瞪": 4745,
+ "瞬": 4746,
+ "瞭": 4747,
+ "瞰": 4748,
+ "瞳": 4749,
+ "瞻": 4750,
+ "瞼": 4751,
+ "瞿": 4752,
+ "矇": 4753,
+ "矍": 4754,
+ "矗": 4755,
+ "矚": 4756,
+ "矛": 4757,
+ "矜": 4758,
+ "矢": 4759,
+ "矣": 4760,
+ "知": 4761,
+ "矩": 4762,
+ "矫": 4763,
+ "短": 4764,
+ "矮": 4765,
+ "矯": 4766,
+ "石": 4767,
+ "矶": 4768,
+ "矽": 4769,
+ "矾": 4770,
+ "矿": 4771,
+ "码": 4772,
+ "砂": 4773,
+ "砌": 4774,
+ "砍": 4775,
+ "砒": 4776,
+ "研": 4777,
+ "砖": 4778,
+ "砗": 4779,
+ "砚": 4780,
+ "砝": 4781,
+ "砣": 4782,
+ "砥": 4783,
+ "砧": 4784,
+ "砭": 4785,
+ "砰": 4786,
+ "砲": 4787,
+ "破": 4788,
+ "砷": 4789,
+ "砸": 4790,
+ "砺": 4791,
+ "砼": 4792,
+ "砾": 4793,
+ "础": 4794,
+ "硅": 4795,
+ "硐": 4796,
+ "硒": 4797,
+ "硕": 4798,
+ "硝": 4799,
+ "硫": 4800,
+ "硬": 4801,
+ "确": 4802,
+ "硯": 4803,
+ "硼": 4804,
+ "碁": 4805,
+ "碇": 4806,
+ "碉": 4807,
+ "碌": 4808,
+ "碍": 4809,
+ "碎": 4810,
+ "碑": 4811,
+ "碓": 4812,
+ "碗": 4813,
+ "碘": 4814,
+ "碚": 4815,
+ "碛": 4816,
+ "碟": 4817,
+ "碣": 4818,
+ "碧": 4819,
+ "碩": 4820,
+ "碰": 4821,
+ "碱": 4822,
+ "碳": 4823,
+ "碴": 4824,
+ "確": 4825,
+ "碼": 4826,
+ "碾": 4827,
+ "磁": 4828,
+ "磅": 4829,
+ "磊": 4830,
+ "磋": 4831,
+ "磐": 4832,
+ "磕": 4833,
+ "磚": 4834,
+ "磡": 4835,
+ "磨": 4836,
+ "磬": 4837,
+ "磯": 4838,
+ "磲": 4839,
+ "磷": 4840,
+ "磺": 4841,
+ "礁": 4842,
+ "礎": 4843,
+ "礙": 4844,
+ "礡": 4845,
+ "礦": 4846,
+ "礪": 4847,
+ "礫": 4848,
+ "礴": 4849,
+ "示": 4850,
+ "礼": 4851,
+ "社": 4852,
+ "祀": 4853,
+ "祁": 4854,
+ "祂": 4855,
+ "祇": 4856,
+ "祈": 4857,
+ "祉": 4858,
+ "祎": 4859,
+ "祐": 4860,
+ "祕": 4861,
+ "祖": 4862,
+ "祗": 4863,
+ "祚": 4864,
+ "祛": 4865,
+ "祜": 4866,
+ "祝": 4867,
+ "神": 4868,
+ "祟": 4869,
+ "祠": 4870,
+ "祢": 4871,
+ "祥": 4872,
+ "票": 4873,
+ "祭": 4874,
+ "祯": 4875,
+ "祷": 4876,
+ "祸": 4877,
+ "祺": 4878,
+ "祿": 4879,
+ "禀": 4880,
+ "禁": 4881,
+ "禄": 4882,
+ "禅": 4883,
+ "禍": 4884,
+ "禎": 4885,
+ "福": 4886,
+ "禛": 4887,
+ "禦": 4888,
+ "禧": 4889,
+ "禪": 4890,
+ "禮": 4891,
+ "禱": 4892,
+ "禹": 4893,
+ "禺": 4894,
+ "离": 4895,
+ "禽": 4896,
+ "禾": 4897,
+ "禿": 4898,
+ "秀": 4899,
+ "私": 4900,
+ "秃": 4901,
+ "秆": 4902,
+ "秉": 4903,
+ "秋": 4904,
+ "种": 4905,
+ "科": 4906,
+ "秒": 4907,
+ "秘": 4908,
+ "租": 4909,
+ "秣": 4910,
+ "秤": 4911,
+ "秦": 4912,
+ "秧": 4913,
+ "秩": 4914,
+ "秭": 4915,
+ "积": 4916,
+ "称": 4917,
+ "秸": 4918,
+ "移": 4919,
+ "秽": 4920,
+ "稀": 4921,
+ "稅": 4922,
+ "程": 4923,
+ "稍": 4924,
+ "税": 4925,
+ "稔": 4926,
+ "稗": 4927,
+ "稚": 4928,
+ "稜": 4929,
+ "稞": 4930,
+ "稟": 4931,
+ "稠": 4932,
+ "稣": 4933,
+ "種": 4934,
+ "稱": 4935,
+ "稲": 4936,
+ "稳": 4937,
+ "稷": 4938,
+ "稹": 4939,
+ "稻": 4940,
+ "稼": 4941,
+ "稽": 4942,
+ "稿": 4943,
+ "穀": 4944,
+ "穂": 4945,
+ "穆": 4946,
+ "穌": 4947,
+ "積": 4948,
+ "穎": 4949,
+ "穗": 4950,
+ "穢": 4951,
+ "穩": 4952,
+ "穫": 4953,
+ "穴": 4954,
+ "究": 4955,
+ "穷": 4956,
+ "穹": 4957,
+ "空": 4958,
+ "穿": 4959,
+ "突": 4960,
+ "窃": 4961,
+ "窄": 4962,
+ "窈": 4963,
+ "窍": 4964,
+ "窑": 4965,
+ "窒": 4966,
+ "窓": 4967,
+ "窕": 4968,
+ "窖": 4969,
+ "窗": 4970,
+ "窘": 4971,
+ "窜": 4972,
+ "窝": 4973,
+ "窟": 4974,
+ "窠": 4975,
+ "窥": 4976,
+ "窦": 4977,
+ "窨": 4978,
+ "窩": 4979,
+ "窪": 4980,
+ "窮": 4981,
+ "窯": 4982,
+ "窺": 4983,
+ "窿": 4984,
+ "竄": 4985,
+ "竅": 4986,
+ "竇": 4987,
+ "竊": 4988,
+ "立": 4989,
+ "竖": 4990,
+ "站": 4991,
+ "竜": 4992,
+ "竞": 4993,
+ "竟": 4994,
+ "章": 4995,
+ "竣": 4996,
+ "童": 4997,
+ "竭": 4998,
+ "端": 4999,
+ "競": 5000,
+ "竹": 5001,
+ "竺": 5002,
+ "竽": 5003,
+ "竿": 5004,
+ "笃": 5005,
+ "笆": 5006,
+ "笈": 5007,
+ "笋": 5008,
+ "笏": 5009,
+ "笑": 5010,
+ "笔": 5011,
+ "笙": 5012,
+ "笛": 5013,
+ "笞": 5014,
+ "笠": 5015,
+ "符": 5016,
+ "笨": 5017,
+ "第": 5018,
+ "笹": 5019,
+ "笺": 5020,
+ "笼": 5021,
+ "筆": 5022,
+ "等": 5023,
+ "筊": 5024,
+ "筋": 5025,
+ "筍": 5026,
+ "筏": 5027,
+ "筐": 5028,
+ "筑": 5029,
+ "筒": 5030,
+ "答": 5031,
+ "策": 5032,
+ "筛": 5033,
+ "筝": 5034,
+ "筠": 5035,
+ "筱": 5036,
+ "筲": 5037,
+ "筵": 5038,
+ "筷": 5039,
+ "筹": 5040,
+ "签": 5041,
+ "简": 5042,
+ "箇": 5043,
+ "箋": 5044,
+ "箍": 5045,
+ "箏": 5046,
+ "箐": 5047,
+ "箔": 5048,
+ "箕": 5049,
+ "算": 5050,
+ "箝": 5051,
+ "管": 5052,
+ "箩": 5053,
+ "箫": 5054,
+ "箭": 5055,
+ "箱": 5056,
+ "箴": 5057,
+ "箸": 5058,
+ "節": 5059,
+ "篁": 5060,
+ "範": 5061,
+ "篆": 5062,
+ "篇": 5063,
+ "築": 5064,
+ "篑": 5065,
+ "篓": 5066,
+ "篙": 5067,
+ "篝": 5068,
+ "篠": 5069,
+ "篡": 5070,
+ "篤": 5071,
+ "篩": 5072,
+ "篪": 5073,
+ "篮": 5074,
+ "篱": 5075,
+ "篷": 5076,
+ "簇": 5077,
+ "簌": 5078,
+ "簍": 5079,
+ "簡": 5080,
+ "簦": 5081,
+ "簧": 5082,
+ "簪": 5083,
+ "簫": 5084,
+ "簷": 5085,
+ "簸": 5086,
+ "簽": 5087,
+ "簾": 5088,
+ "簿": 5089,
+ "籁": 5090,
+ "籃": 5091,
+ "籌": 5092,
+ "籍": 5093,
+ "籐": 5094,
+ "籟": 5095,
+ "籠": 5096,
+ "籤": 5097,
+ "籬": 5098,
+ "籮": 5099,
+ "籲": 5100,
+ "米": 5101,
+ "类": 5102,
+ "籼": 5103,
+ "籽": 5104,
+ "粄": 5105,
+ "粉": 5106,
+ "粑": 5107,
+ "粒": 5108,
+ "粕": 5109,
+ "粗": 5110,
+ "粘": 5111,
+ "粟": 5112,
+ "粤": 5113,
+ "粥": 5114,
+ "粧": 5115,
+ "粪": 5116,
+ "粮": 5117,
+ "粱": 5118,
+ "粲": 5119,
+ "粳": 5120,
+ "粵": 5121,
+ "粹": 5122,
+ "粼": 5123,
+ "粽": 5124,
+ "精": 5125,
+ "粿": 5126,
+ "糅": 5127,
+ "糊": 5128,
+ "糍": 5129,
+ "糕": 5130,
+ "糖": 5131,
+ "糗": 5132,
+ "糙": 5133,
+ "糜": 5134,
+ "糞": 5135,
+ "糟": 5136,
+ "糠": 5137,
+ "糧": 5138,
+ "糬": 5139,
+ "糯": 5140,
+ "糰": 5141,
+ "糸": 5142,
+ "系": 5143,
+ "糾": 5144,
+ "紀": 5145,
+ "紂": 5146,
+ "約": 5147,
+ "紅": 5148,
+ "紉": 5149,
+ "紊": 5150,
+ "紋": 5151,
+ "納": 5152,
+ "紐": 5153,
+ "紓": 5154,
+ "純": 5155,
+ "紗": 5156,
+ "紘": 5157,
+ "紙": 5158,
+ "級": 5159,
+ "紛": 5160,
+ "紜": 5161,
+ "素": 5162,
+ "紡": 5163,
+ "索": 5164,
+ "紧": 5165,
+ "紫": 5166,
+ "紮": 5167,
+ "累": 5168,
+ "細": 5169,
+ "紳": 5170,
+ "紹": 5171,
+ "紺": 5172,
+ "終": 5173,
+ "絃": 5174,
+ "組": 5175,
+ "絆": 5176,
+ "経": 5177,
+ "結": 5178,
+ "絕": 5179,
+ "絞": 5180,
+ "絡": 5181,
+ "絢": 5182,
+ "給": 5183,
+ "絨": 5184,
+ "絮": 5185,
+ "統": 5186,
+ "絲": 5187,
+ "絳": 5188,
+ "絵": 5189,
+ "絶": 5190,
+ "絹": 5191,
+ "綁": 5192,
+ "綏": 5193,
+ "綑": 5194,
+ "經": 5195,
+ "継": 5196,
+ "続": 5197,
+ "綜": 5198,
+ "綠": 5199,
+ "綢": 5200,
+ "綦": 5201,
+ "綫": 5202,
+ "綬": 5203,
+ "維": 5204,
+ "綱": 5205,
+ "網": 5206,
+ "綴": 5207,
+ "綵": 5208,
+ "綸": 5209,
+ "綺": 5210,
+ "綻": 5211,
+ "綽": 5212,
+ "綾": 5213,
+ "綿": 5214,
+ "緊": 5215,
+ "緋": 5216,
+ "総": 5217,
+ "緑": 5218,
+ "緒": 5219,
+ "緘": 5220,
+ "線": 5221,
+ "緝": 5222,
+ "緞": 5223,
+ "締": 5224,
+ "緣": 5225,
+ "編": 5226,
+ "緩": 5227,
+ "緬": 5228,
+ "緯": 5229,
+ "練": 5230,
+ "緹": 5231,
+ "緻": 5232,
+ "縁": 5233,
+ "縄": 5234,
+ "縈": 5235,
+ "縛": 5236,
+ "縝": 5237,
+ "縣": 5238,
+ "縫": 5239,
+ "縮": 5240,
+ "縱": 5241,
+ "縴": 5242,
+ "縷": 5243,
+ "總": 5244,
+ "績": 5245,
+ "繁": 5246,
+ "繃": 5247,
+ "繆": 5248,
+ "繇": 5249,
+ "繋": 5250,
+ "織": 5251,
+ "繕": 5252,
+ "繚": 5253,
+ "繞": 5254,
+ "繡": 5255,
+ "繩": 5256,
+ "繪": 5257,
+ "繫": 5258,
+ "繭": 5259,
+ "繳": 5260,
+ "繹": 5261,
+ "繼": 5262,
+ "繽": 5263,
+ "纂": 5264,
+ "續": 5265,
+ "纍": 5266,
+ "纏": 5267,
+ "纓": 5268,
+ "纔": 5269,
+ "纖": 5270,
+ "纜": 5271,
+ "纠": 5272,
+ "红": 5273,
+ "纣": 5274,
+ "纤": 5275,
+ "约": 5276,
+ "级": 5277,
+ "纨": 5278,
+ "纪": 5279,
+ "纫": 5280,
+ "纬": 5281,
+ "纭": 5282,
+ "纯": 5283,
+ "纰": 5284,
+ "纱": 5285,
+ "纲": 5286,
+ "纳": 5287,
+ "纵": 5288,
+ "纶": 5289,
+ "纷": 5290,
+ "纸": 5291,
+ "纹": 5292,
+ "纺": 5293,
+ "纽": 5294,
+ "纾": 5295,
+ "线": 5296,
+ "绀": 5297,
+ "练": 5298,
+ "组": 5299,
+ "绅": 5300,
+ "细": 5301,
+ "织": 5302,
+ "终": 5303,
+ "绊": 5304,
+ "绍": 5305,
+ "绎": 5306,
+ "经": 5307,
+ "绑": 5308,
+ "绒": 5309,
+ "结": 5310,
+ "绔": 5311,
+ "绕": 5312,
+ "绘": 5313,
+ "给": 5314,
+ "绚": 5315,
+ "绛": 5316,
+ "络": 5317,
+ "绝": 5318,
+ "绞": 5319,
+ "统": 5320,
+ "绡": 5321,
+ "绢": 5322,
+ "绣": 5323,
+ "绥": 5324,
+ "绦": 5325,
+ "继": 5326,
+ "绩": 5327,
+ "绪": 5328,
+ "绫": 5329,
+ "续": 5330,
+ "绮": 5331,
+ "绯": 5332,
+ "绰": 5333,
+ "绳": 5334,
+ "维": 5335,
+ "绵": 5336,
+ "绶": 5337,
+ "绷": 5338,
+ "绸": 5339,
+ "绻": 5340,
+ "综": 5341,
+ "绽": 5342,
+ "绾": 5343,
+ "绿": 5344,
+ "缀": 5345,
+ "缄": 5346,
+ "缅": 5347,
+ "缆": 5348,
+ "缇": 5349,
+ "缈": 5350,
+ "缉": 5351,
+ "缎": 5352,
+ "缓": 5353,
+ "缔": 5354,
+ "缕": 5355,
+ "编": 5356,
+ "缘": 5357,
+ "缙": 5358,
+ "缚": 5359,
+ "缜": 5360,
+ "缝": 5361,
+ "缠": 5362,
+ "缢": 5363,
+ "缤": 5364,
+ "缥": 5365,
+ "缨": 5366,
+ "缩": 5367,
+ "缪": 5368,
+ "缭": 5369,
+ "缮": 5370,
+ "缰": 5371,
+ "缱": 5372,
+ "缴": 5373,
+ "缸": 5374,
+ "缺": 5375,
+ "缽": 5376,
+ "罂": 5377,
+ "罄": 5378,
+ "罌": 5379,
+ "罐": 5380,
+ "网": 5381,
+ "罔": 5382,
+ "罕": 5383,
+ "罗": 5384,
+ "罚": 5385,
+ "罡": 5386,
+ "罢": 5387,
+ "罩": 5388,
+ "罪": 5389,
+ "置": 5390,
+ "罰": 5391,
+ "署": 5392,
+ "罵": 5393,
+ "罷": 5394,
+ "罹": 5395,
+ "羁": 5396,
+ "羅": 5397,
+ "羈": 5398,
+ "羊": 5399,
+ "羌": 5400,
+ "美": 5401,
+ "羔": 5402,
+ "羚": 5403,
+ "羞": 5404,
+ "羟": 5405,
+ "羡": 5406,
+ "羣": 5407,
+ "群": 5408,
+ "羥": 5409,
+ "羧": 5410,
+ "羨": 5411,
+ "義": 5412,
+ "羯": 5413,
+ "羲": 5414,
+ "羸": 5415,
+ "羹": 5416,
+ "羽": 5417,
+ "羿": 5418,
+ "翁": 5419,
+ "翅": 5420,
+ "翊": 5421,
+ "翌": 5422,
+ "翎": 5423,
+ "習": 5424,
+ "翔": 5425,
+ "翘": 5426,
+ "翟": 5427,
+ "翠": 5428,
+ "翡": 5429,
+ "翦": 5430,
+ "翩": 5431,
+ "翰": 5432,
+ "翱": 5433,
+ "翳": 5434,
+ "翹": 5435,
+ "翻": 5436,
+ "翼": 5437,
+ "耀": 5438,
+ "老": 5439,
+ "考": 5440,
+ "耄": 5441,
+ "者": 5442,
+ "耆": 5443,
+ "耋": 5444,
+ "而": 5445,
+ "耍": 5446,
+ "耐": 5447,
+ "耒": 5448,
+ "耕": 5449,
+ "耗": 5450,
+ "耘": 5451,
+ "耙": 5452,
+ "耦": 5453,
+ "耨": 5454,
+ "耳": 5455,
+ "耶": 5456,
+ "耷": 5457,
+ "耸": 5458,
+ "耻": 5459,
+ "耽": 5460,
+ "耿": 5461,
+ "聂": 5462,
+ "聆": 5463,
+ "聊": 5464,
+ "聋": 5465,
+ "职": 5466,
+ "聒": 5467,
+ "联": 5468,
+ "聖": 5469,
+ "聘": 5470,
+ "聚": 5471,
+ "聞": 5472,
+ "聪": 5473,
+ "聯": 5474,
+ "聰": 5475,
+ "聲": 5476,
+ "聳": 5477,
+ "聴": 5478,
+ "聶": 5479,
+ "職": 5480,
+ "聽": 5481,
+ "聾": 5482,
+ "聿": 5483,
+ "肃": 5484,
+ "肄": 5485,
+ "肅": 5486,
+ "肆": 5487,
+ "肇": 5488,
+ "肉": 5489,
+ "肋": 5490,
+ "肌": 5491,
+ "肏": 5492,
+ "肓": 5493,
+ "肖": 5494,
+ "肘": 5495,
+ "肚": 5496,
+ "肛": 5497,
+ "肝": 5498,
+ "肠": 5499,
+ "股": 5500,
+ "肢": 5501,
+ "肤": 5502,
+ "肥": 5503,
+ "肩": 5504,
+ "肪": 5505,
+ "肮": 5506,
+ "肯": 5507,
+ "肱": 5508,
+ "育": 5509,
+ "肴": 5510,
+ "肺": 5511,
+ "肽": 5512,
+ "肾": 5513,
+ "肿": 5514,
+ "胀": 5515,
+ "胁": 5516,
+ "胃": 5517,
+ "胄": 5518,
+ "胆": 5519,
+ "背": 5520,
+ "胍": 5521,
+ "胎": 5522,
+ "胖": 5523,
+ "胚": 5524,
+ "胛": 5525,
+ "胜": 5526,
+ "胝": 5527,
+ "胞": 5528,
+ "胡": 5529,
+ "胤": 5530,
+ "胥": 5531,
+ "胧": 5532,
+ "胫": 5533,
+ "胭": 5534,
+ "胯": 5535,
+ "胰": 5536,
+ "胱": 5537,
+ "胳": 5538,
+ "胴": 5539,
+ "胶": 5540,
+ "胸": 5541,
+ "胺": 5542,
+ "能": 5543,
+ "脂": 5544,
+ "脅": 5545,
+ "脆": 5546,
+ "脇": 5547,
+ "脈": 5548,
+ "脉": 5549,
+ "脊": 5550,
+ "脍": 5551,
+ "脏": 5552,
+ "脐": 5553,
+ "脑": 5554,
+ "脓": 5555,
+ "脖": 5556,
+ "脘": 5557,
+ "脚": 5558,
+ "脛": 5559,
+ "脣": 5560,
+ "脩": 5561,
+ "脫": 5562,
+ "脯": 5563,
+ "脱": 5564,
+ "脲": 5565,
+ "脳": 5566,
+ "脸": 5567,
+ "脹": 5568,
+ "脾": 5569,
+ "腆": 5570,
+ "腈": 5571,
+ "腊": 5572,
+ "腋": 5573,
+ "腌": 5574,
+ "腎": 5575,
+ "腐": 5576,
+ "腑": 5577,
+ "腓": 5578,
+ "腔": 5579,
+ "腕": 5580,
+ "腥": 5581,
+ "腦": 5582,
+ "腩": 5583,
+ "腫": 5584,
+ "腭": 5585,
+ "腮": 5586,
+ "腰": 5587,
+ "腱": 5588,
+ "腳": 5589,
+ "腴": 5590,
+ "腸": 5591,
+ "腹": 5592,
+ "腺": 5593,
+ "腻": 5594,
+ "腼": 5595,
+ "腾": 5596,
+ "腿": 5597,
+ "膀": 5598,
+ "膈": 5599,
+ "膊": 5600,
+ "膏": 5601,
+ "膑": 5602,
+ "膘": 5603,
+ "膚": 5604,
+ "膛": 5605,
+ "膜": 5606,
+ "膝": 5607,
+ "膠": 5608,
+ "膦": 5609,
+ "膨": 5610,
+ "膩": 5611,
+ "膳": 5612,
+ "膺": 5613,
+ "膻": 5614,
+ "膽": 5615,
+ "膾": 5616,
+ "膿": 5617,
+ "臀": 5618,
+ "臂": 5619,
+ "臃": 5620,
+ "臆": 5621,
+ "臉": 5622,
+ "臊": 5623,
+ "臍": 5624,
+ "臓": 5625,
+ "臘": 5626,
+ "臟": 5627,
+ "臣": 5628,
+ "臥": 5629,
+ "臧": 5630,
+ "臨": 5631,
+ "自": 5632,
+ "臬": 5633,
+ "臭": 5634,
+ "至": 5635,
+ "致": 5636,
+ "臺": 5637,
+ "臻": 5638,
+ "臼": 5639,
+ "臾": 5640,
+ "舀": 5641,
+ "舂": 5642,
+ "舅": 5643,
+ "舆": 5644,
+ "與": 5645,
+ "興": 5646,
+ "舉": 5647,
+ "舊": 5648,
+ "舌": 5649,
+ "舍": 5650,
+ "舎": 5651,
+ "舐": 5652,
+ "舒": 5653,
+ "舔": 5654,
+ "舖": 5655,
+ "舗": 5656,
+ "舛": 5657,
+ "舜": 5658,
+ "舞": 5659,
+ "舟": 5660,
+ "航": 5661,
+ "舫": 5662,
+ "般": 5663,
+ "舰": 5664,
+ "舱": 5665,
+ "舵": 5666,
+ "舶": 5667,
+ "舷": 5668,
+ "舸": 5669,
+ "船": 5670,
+ "舺": 5671,
+ "舾": 5672,
+ "艇": 5673,
+ "艋": 5674,
+ "艘": 5675,
+ "艙": 5676,
+ "艦": 5677,
+ "艮": 5678,
+ "良": 5679,
+ "艰": 5680,
+ "艱": 5681,
+ "色": 5682,
+ "艳": 5683,
+ "艷": 5684,
+ "艹": 5685,
+ "艺": 5686,
+ "艾": 5687,
+ "节": 5688,
+ "芃": 5689,
+ "芈": 5690,
+ "芊": 5691,
+ "芋": 5692,
+ "芍": 5693,
+ "芎": 5694,
+ "芒": 5695,
+ "芙": 5696,
+ "芜": 5697,
+ "芝": 5698,
+ "芡": 5699,
+ "芥": 5700,
+ "芦": 5701,
+ "芩": 5702,
+ "芪": 5703,
+ "芫": 5704,
+ "芬": 5705,
+ "芭": 5706,
+ "芮": 5707,
+ "芯": 5708,
+ "花": 5709,
+ "芳": 5710,
+ "芷": 5711,
+ "芸": 5712,
+ "芹": 5713,
+ "芻": 5714,
+ "芽": 5715,
+ "芾": 5716,
+ "苁": 5717,
+ "苄": 5718,
+ "苇": 5719,
+ "苋": 5720,
+ "苍": 5721,
+ "苏": 5722,
+ "苑": 5723,
+ "苒": 5724,
+ "苓": 5725,
+ "苔": 5726,
+ "苕": 5727,
+ "苗": 5728,
+ "苛": 5729,
+ "苜": 5730,
+ "苞": 5731,
+ "苟": 5732,
+ "苡": 5733,
+ "苣": 5734,
+ "若": 5735,
+ "苦": 5736,
+ "苫": 5737,
+ "苯": 5738,
+ "英": 5739,
+ "苷": 5740,
+ "苹": 5741,
+ "苻": 5742,
+ "茁": 5743,
+ "茂": 5744,
+ "范": 5745,
+ "茄": 5746,
+ "茅": 5747,
+ "茉": 5748,
+ "茎": 5749,
+ "茏": 5750,
+ "茗": 5751,
+ "茜": 5752,
+ "茧": 5753,
+ "茨": 5754,
+ "茫": 5755,
+ "茬": 5756,
+ "茭": 5757,
+ "茯": 5758,
+ "茱": 5759,
+ "茲": 5760,
+ "茴": 5761,
+ "茵": 5762,
+ "茶": 5763,
+ "茸": 5764,
+ "茹": 5765,
+ "茼": 5766,
+ "荀": 5767,
+ "荃": 5768,
+ "荆": 5769,
+ "草": 5770,
+ "荊": 5771,
+ "荏": 5772,
+ "荐": 5773,
+ "荒": 5774,
+ "荔": 5775,
+ "荖": 5776,
+ "荘": 5777,
+ "荚": 5778,
+ "荞": 5779,
+ "荟": 5780,
+ "荠": 5781,
+ "荡": 5782,
+ "荣": 5783,
+ "荤": 5784,
+ "荥": 5785,
+ "荧": 5786,
+ "荨": 5787,
+ "荪": 5788,
+ "荫": 5789,
+ "药": 5790,
+ "荳": 5791,
+ "荷": 5792,
+ "荸": 5793,
+ "荻": 5794,
+ "荼": 5795,
+ "荽": 5796,
+ "莅": 5797,
+ "莆": 5798,
+ "莉": 5799,
+ "莊": 5800,
+ "莎": 5801,
+ "莒": 5802,
+ "莓": 5803,
+ "莖": 5804,
+ "莘": 5805,
+ "莞": 5806,
+ "莠": 5807,
+ "莢": 5808,
+ "莧": 5809,
+ "莪": 5810,
+ "莫": 5811,
+ "莱": 5812,
+ "莲": 5813,
+ "莴": 5814,
+ "获": 5815,
+ "莹": 5816,
+ "莺": 5817,
+ "莽": 5818,
+ "莿": 5819,
+ "菀": 5820,
+ "菁": 5821,
+ "菅": 5822,
+ "菇": 5823,
+ "菈": 5824,
+ "菊": 5825,
+ "菌": 5826,
+ "菏": 5827,
+ "菓": 5828,
+ "菖": 5829,
+ "菘": 5830,
+ "菜": 5831,
+ "菟": 5832,
+ "菠": 5833,
+ "菡": 5834,
+ "菩": 5835,
+ "華": 5836,
+ "菱": 5837,
+ "菲": 5838,
+ "菸": 5839,
+ "菽": 5840,
+ "萁": 5841,
+ "萃": 5842,
+ "萄": 5843,
+ "萊": 5844,
+ "萋": 5845,
+ "萌": 5846,
+ "萍": 5847,
+ "萎": 5848,
+ "萘": 5849,
+ "萝": 5850,
+ "萤": 5851,
+ "营": 5852,
+ "萦": 5853,
+ "萧": 5854,
+ "萨": 5855,
+ "萩": 5856,
+ "萬": 5857,
+ "萱": 5858,
+ "萵": 5859,
+ "萸": 5860,
+ "萼": 5861,
+ "落": 5862,
+ "葆": 5863,
+ "葉": 5864,
+ "著": 5865,
+ "葚": 5866,
+ "葛": 5867,
+ "葡": 5868,
+ "董": 5869,
+ "葦": 5870,
+ "葩": 5871,
+ "葫": 5872,
+ "葬": 5873,
+ "葭": 5874,
+ "葯": 5875,
+ "葱": 5876,
+ "葳": 5877,
+ "葵": 5878,
+ "葷": 5879,
+ "葺": 5880,
+ "蒂": 5881,
+ "蒋": 5882,
+ "蒐": 5883,
+ "蒔": 5884,
+ "蒙": 5885,
+ "蒜": 5886,
+ "蒞": 5887,
+ "蒟": 5888,
+ "蒡": 5889,
+ "蒨": 5890,
+ "蒲": 5891,
+ "蒸": 5892,
+ "蒹": 5893,
+ "蒻": 5894,
+ "蒼": 5895,
+ "蒿": 5896,
+ "蓁": 5897,
+ "蓄": 5898,
+ "蓆": 5899,
+ "蓉": 5900,
+ "蓋": 5901,
+ "蓑": 5902,
+ "蓓": 5903,
+ "蓖": 5904,
+ "蓝": 5905,
+ "蓟": 5906,
+ "蓦": 5907,
+ "蓬": 5908,
+ "蓮": 5909,
+ "蓼": 5910,
+ "蓿": 5911,
+ "蔑": 5912,
+ "蔓": 5913,
+ "蔔": 5914,
+ "蔗": 5915,
+ "蔘": 5916,
+ "蔚": 5917,
+ "蔡": 5918,
+ "蔣": 5919,
+ "蔥": 5920,
+ "蔫": 5921,
+ "蔬": 5922,
+ "蔭": 5923,
+ "蔵": 5924,
+ "蔷": 5925,
+ "蔺": 5926,
+ "蔻": 5927,
+ "蔼": 5928,
+ "蔽": 5929,
+ "蕁": 5930,
+ "蕃": 5931,
+ "蕈": 5932,
+ "蕉": 5933,
+ "蕊": 5934,
+ "蕎": 5935,
+ "蕙": 5936,
+ "蕤": 5937,
+ "蕨": 5938,
+ "蕩": 5939,
+ "蕪": 5940,
+ "蕭": 5941,
+ "蕲": 5942,
+ "蕴": 5943,
+ "蕻": 5944,
+ "蕾": 5945,
+ "薄": 5946,
+ "薅": 5947,
+ "薇": 5948,
+ "薈": 5949,
+ "薊": 5950,
+ "薏": 5951,
+ "薑": 5952,
+ "薔": 5953,
+ "薙": 5954,
+ "薛": 5955,
+ "薦": 5956,
+ "薨": 5957,
+ "薩": 5958,
+ "薪": 5959,
+ "薬": 5960,
+ "薯": 5961,
+ "薰": 5962,
+ "薹": 5963,
+ "藉": 5964,
+ "藍": 5965,
+ "藏": 5966,
+ "藐": 5967,
+ "藓": 5968,
+ "藕": 5969,
+ "藜": 5970,
+ "藝": 5971,
+ "藤": 5972,
+ "藥": 5973,
+ "藩": 5974,
+ "藹": 5975,
+ "藻": 5976,
+ "藿": 5977,
+ "蘆": 5978,
+ "蘇": 5979,
+ "蘊": 5980,
+ "蘋": 5981,
+ "蘑": 5982,
+ "蘚": 5983,
+ "蘭": 5984,
+ "蘸": 5985,
+ "蘼": 5986,
+ "蘿": 5987,
+ "虎": 5988,
+ "虏": 5989,
+ "虐": 5990,
+ "虑": 5991,
+ "虔": 5992,
+ "處": 5993,
+ "虚": 5994,
+ "虛": 5995,
+ "虜": 5996,
+ "虞": 5997,
+ "號": 5998,
+ "虢": 5999,
+ "虧": 6000,
+ "虫": 6001,
+ "虬": 6002,
+ "虱": 6003,
+ "虹": 6004,
+ "虻": 6005,
+ "虽": 6006,
+ "虾": 6007,
+ "蚀": 6008,
+ "蚁": 6009,
+ "蚂": 6010,
+ "蚊": 6011,
+ "蚌": 6012,
+ "蚓": 6013,
+ "蚕": 6014,
+ "蚜": 6015,
+ "蚝": 6016,
+ "蚣": 6017,
+ "蚤": 6018,
+ "蚩": 6019,
+ "蚪": 6020,
+ "蚯": 6021,
+ "蚱": 6022,
+ "蚵": 6023,
+ "蛀": 6024,
+ "蛆": 6025,
+ "蛇": 6026,
+ "蛊": 6027,
+ "蛋": 6028,
+ "蛎": 6029,
+ "蛐": 6030,
+ "蛔": 6031,
+ "蛙": 6032,
+ "蛛": 6033,
+ "蛟": 6034,
+ "蛤": 6035,
+ "蛭": 6036,
+ "蛮": 6037,
+ "蛰": 6038,
+ "蛳": 6039,
+ "蛹": 6040,
+ "蛻": 6041,
+ "蛾": 6042,
+ "蜀": 6043,
+ "蜂": 6044,
+ "蜃": 6045,
+ "蜆": 6046,
+ "蜇": 6047,
+ "蜈": 6048,
+ "蜊": 6049,
+ "蜍": 6050,
+ "蜒": 6051,
+ "蜓": 6052,
+ "蜕": 6053,
+ "蜗": 6054,
+ "蜘": 6055,
+ "蜚": 6056,
+ "蜜": 6057,
+ "蜡": 6058,
+ "蜢": 6059,
+ "蜥": 6060,
+ "蜱": 6061,
+ "蜴": 6062,
+ "蜷": 6063,
+ "蜻": 6064,
+ "蜿": 6065,
+ "蝇": 6066,
+ "蝈": 6067,
+ "蝉": 6068,
+ "蝌": 6069,
+ "蝎": 6070,
+ "蝕": 6071,
+ "蝗": 6072,
+ "蝙": 6073,
+ "蝟": 6074,
+ "蝠": 6075,
+ "蝦": 6076,
+ "蝨": 6077,
+ "蝴": 6078,
+ "蝶": 6079,
+ "蝸": 6080,
+ "蝼": 6081,
+ "螂": 6082,
+ "螃": 6083,
+ "融": 6084,
+ "螞": 6085,
+ "螢": 6086,
+ "螨": 6087,
+ "螯": 6088,
+ "螳": 6089,
+ "螺": 6090,
+ "蟀": 6091,
+ "蟄": 6092,
+ "蟆": 6093,
+ "蟋": 6094,
+ "蟎": 6095,
+ "蟑": 6096,
+ "蟒": 6097,
+ "蟠": 6098,
+ "蟬": 6099,
+ "蟲": 6100,
+ "蟹": 6101,
+ "蟻": 6102,
+ "蟾": 6103,
+ "蠅": 6104,
+ "蠍": 6105,
+ "蠔": 6106,
+ "蠕": 6107,
+ "蠛": 6108,
+ "蠟": 6109,
+ "蠡": 6110,
+ "蠢": 6111,
+ "蠣": 6112,
+ "蠱": 6113,
+ "蠶": 6114,
+ "蠹": 6115,
+ "蠻": 6116,
+ "血": 6117,
+ "衄": 6118,
+ "衅": 6119,
+ "衆": 6120,
+ "行": 6121,
+ "衍": 6122,
+ "術": 6123,
+ "衔": 6124,
+ "街": 6125,
+ "衙": 6126,
+ "衛": 6127,
+ "衝": 6128,
+ "衞": 6129,
+ "衡": 6130,
+ "衢": 6131,
+ "衣": 6132,
+ "补": 6133,
+ "表": 6134,
+ "衩": 6135,
+ "衫": 6136,
+ "衬": 6137,
+ "衮": 6138,
+ "衰": 6139,
+ "衲": 6140,
+ "衷": 6141,
+ "衹": 6142,
+ "衾": 6143,
+ "衿": 6144,
+ "袁": 6145,
+ "袂": 6146,
+ "袄": 6147,
+ "袅": 6148,
+ "袈": 6149,
+ "袋": 6150,
+ "袍": 6151,
+ "袒": 6152,
+ "袖": 6153,
+ "袜": 6154,
+ "袞": 6155,
+ "袤": 6156,
+ "袪": 6157,
+ "被": 6158,
+ "袭": 6159,
+ "袱": 6160,
+ "裁": 6161,
+ "裂": 6162,
+ "装": 6163,
+ "裆": 6164,
+ "裊": 6165,
+ "裏": 6166,
+ "裔": 6167,
+ "裕": 6168,
+ "裘": 6169,
+ "裙": 6170,
+ "補": 6171,
+ "裝": 6172,
+ "裟": 6173,
+ "裡": 6174,
+ "裤": 6175,
+ "裨": 6176,
+ "裱": 6177,
+ "裳": 6178,
+ "裴": 6179,
+ "裸": 6180,
+ "裹": 6181,
+ "製": 6182,
+ "裾": 6183,
+ "褂": 6184,
+ "複": 6185,
+ "褐": 6186,
+ "褒": 6187,
+ "褓": 6188,
+ "褔": 6189,
+ "褚": 6190,
+ "褥": 6191,
+ "褪": 6192,
+ "褫": 6193,
+ "褲": 6194,
+ "褶": 6195,
+ "褻": 6196,
+ "襁": 6197,
+ "襄": 6198,
+ "襟": 6199,
+ "襠": 6200,
+ "襪": 6201,
+ "襬": 6202,
+ "襯": 6203,
+ "襲": 6204,
+ "西": 6205,
+ "要": 6206,
+ "覃": 6207,
+ "覆": 6208,
+ "覇": 6209,
+ "見": 6210,
+ "規": 6211,
+ "覓": 6212,
+ "視": 6213,
+ "覚": 6214,
+ "覦": 6215,
+ "覧": 6216,
+ "親": 6217,
+ "覬": 6218,
+ "観": 6219,
+ "覷": 6220,
+ "覺": 6221,
+ "覽": 6222,
+ "觀": 6223,
+ "见": 6224,
+ "观": 6225,
+ "规": 6226,
+ "觅": 6227,
+ "视": 6228,
+ "览": 6229,
+ "觉": 6230,
+ "觊": 6231,
+ "觎": 6232,
+ "觐": 6233,
+ "觑": 6234,
+ "角": 6235,
+ "觞": 6236,
+ "解": 6237,
+ "觥": 6238,
+ "触": 6239,
+ "觸": 6240,
+ "言": 6241,
+ "訂": 6242,
+ "計": 6243,
+ "訊": 6244,
+ "討": 6245,
+ "訓": 6246,
+ "訕": 6247,
+ "訖": 6248,
+ "託": 6249,
+ "記": 6250,
+ "訛": 6251,
+ "訝": 6252,
+ "訟": 6253,
+ "訣": 6254,
+ "訥": 6255,
+ "訪": 6256,
+ "設": 6257,
+ "許": 6258,
+ "訳": 6259,
+ "訴": 6260,
+ "訶": 6261,
+ "診": 6262,
+ "註": 6263,
+ "証": 6264,
+ "詆": 6265,
+ "詐": 6266,
+ "詔": 6267,
+ "評": 6268,
+ "詛": 6269,
+ "詞": 6270,
+ "詠": 6271,
+ "詡": 6272,
+ "詢": 6273,
+ "詣": 6274,
+ "試": 6275,
+ "詩": 6276,
+ "詫": 6277,
+ "詬": 6278,
+ "詭": 6279,
+ "詮": 6280,
+ "詰": 6281,
+ "話": 6282,
+ "該": 6283,
+ "詳": 6284,
+ "詹": 6285,
+ "詼": 6286,
+ "誅": 6287,
+ "誇": 6288,
+ "誉": 6289,
+ "誌": 6290,
+ "認": 6291,
+ "誓": 6292,
+ "誕": 6293,
+ "誘": 6294,
+ "語": 6295,
+ "誠": 6296,
+ "誡": 6297,
+ "誣": 6298,
+ "誤": 6299,
+ "誥": 6300,
+ "誦": 6301,
+ "誨": 6302,
+ "說": 6303,
+ "説": 6304,
+ "読": 6305,
+ "誰": 6306,
+ "課": 6307,
+ "誹": 6308,
+ "誼": 6309,
+ "調": 6310,
+ "諄": 6311,
+ "談": 6312,
+ "請": 6313,
+ "諏": 6314,
+ "諒": 6315,
+ "論": 6316,
+ "諗": 6317,
+ "諜": 6318,
+ "諡": 6319,
+ "諦": 6320,
+ "諧": 6321,
+ "諫": 6322,
+ "諭": 6323,
+ "諮": 6324,
+ "諱": 6325,
+ "諳": 6326,
+ "諷": 6327,
+ "諸": 6328,
+ "諺": 6329,
+ "諾": 6330,
+ "謀": 6331,
+ "謁": 6332,
+ "謂": 6333,
+ "謄": 6334,
+ "謊": 6335,
+ "謎": 6336,
+ "謐": 6337,
+ "謔": 6338,
+ "謗": 6339,
+ "謙": 6340,
+ "講": 6341,
+ "謝": 6342,
+ "謠": 6343,
+ "謨": 6344,
+ "謬": 6345,
+ "謹": 6346,
+ "謾": 6347,
+ "譁": 6348,
+ "證": 6349,
+ "譎": 6350,
+ "譏": 6351,
+ "識": 6352,
+ "譙": 6353,
+ "譚": 6354,
+ "譜": 6355,
+ "警": 6356,
+ "譬": 6357,
+ "譯": 6358,
+ "議": 6359,
+ "譲": 6360,
+ "譴": 6361,
+ "護": 6362,
+ "譽": 6363,
+ "讀": 6364,
+ "變": 6365,
+ "讓": 6366,
+ "讚": 6367,
+ "讞": 6368,
+ "计": 6369,
+ "订": 6370,
+ "认": 6371,
+ "讥": 6372,
+ "讧": 6373,
+ "讨": 6374,
+ "让": 6375,
+ "讪": 6376,
+ "讫": 6377,
+ "训": 6378,
+ "议": 6379,
+ "讯": 6380,
+ "记": 6381,
+ "讲": 6382,
+ "讳": 6383,
+ "讴": 6384,
+ "讶": 6385,
+ "讷": 6386,
+ "许": 6387,
+ "讹": 6388,
+ "论": 6389,
+ "讼": 6390,
+ "讽": 6391,
+ "设": 6392,
+ "访": 6393,
+ "诀": 6394,
+ "证": 6395,
+ "诃": 6396,
+ "评": 6397,
+ "诅": 6398,
+ "识": 6399,
+ "诈": 6400,
+ "诉": 6401,
+ "诊": 6402,
+ "诋": 6403,
+ "词": 6404,
+ "诏": 6405,
+ "译": 6406,
+ "试": 6407,
+ "诗": 6408,
+ "诘": 6409,
+ "诙": 6410,
+ "诚": 6411,
+ "诛": 6412,
+ "话": 6413,
+ "诞": 6414,
+ "诟": 6415,
+ "诠": 6416,
+ "诡": 6417,
+ "询": 6418,
+ "诣": 6419,
+ "诤": 6420,
+ "该": 6421,
+ "详": 6422,
+ "诧": 6423,
+ "诩": 6424,
+ "诫": 6425,
+ "诬": 6426,
+ "语": 6427,
+ "误": 6428,
+ "诰": 6429,
+ "诱": 6430,
+ "诲": 6431,
+ "说": 6432,
+ "诵": 6433,
+ "诶": 6434,
+ "请": 6435,
+ "诸": 6436,
+ "诺": 6437,
+ "读": 6438,
+ "诽": 6439,
+ "课": 6440,
+ "诿": 6441,
+ "谀": 6442,
+ "谁": 6443,
+ "调": 6444,
+ "谄": 6445,
+ "谅": 6446,
+ "谆": 6447,
+ "谈": 6448,
+ "谊": 6449,
+ "谋": 6450,
+ "谌": 6451,
+ "谍": 6452,
+ "谎": 6453,
+ "谏": 6454,
+ "谐": 6455,
+ "谑": 6456,
+ "谒": 6457,
+ "谓": 6458,
+ "谔": 6459,
+ "谕": 6460,
+ "谗": 6461,
+ "谘": 6462,
+ "谙": 6463,
+ "谚": 6464,
+ "谛": 6465,
+ "谜": 6466,
+ "谟": 6467,
+ "谢": 6468,
+ "谣": 6469,
+ "谤": 6470,
+ "谥": 6471,
+ "谦": 6472,
+ "谧": 6473,
+ "谨": 6474,
+ "谩": 6475,
+ "谪": 6476,
+ "谬": 6477,
+ "谭": 6478,
+ "谯": 6479,
+ "谱": 6480,
+ "谲": 6481,
+ "谴": 6482,
+ "谶": 6483,
+ "谷": 6484,
+ "豁": 6485,
+ "豆": 6486,
+ "豇": 6487,
+ "豈": 6488,
+ "豉": 6489,
+ "豊": 6490,
+ "豌": 6491,
+ "豎": 6492,
+ "豐": 6493,
+ "豔": 6494,
+ "豚": 6495,
+ "象": 6496,
+ "豢": 6497,
+ "豪": 6498,
+ "豫": 6499,
+ "豬": 6500,
+ "豹": 6501,
+ "豺": 6502,
+ "貂": 6503,
+ "貅": 6504,
+ "貌": 6505,
+ "貓": 6506,
+ "貔": 6507,
+ "貘": 6508,
+ "貝": 6509,
+ "貞": 6510,
+ "負": 6511,
+ "財": 6512,
+ "貢": 6513,
+ "貧": 6514,
+ "貨": 6515,
+ "販": 6516,
+ "貪": 6517,
+ "貫": 6518,
+ "責": 6519,
+ "貯": 6520,
+ "貰": 6521,
+ "貳": 6522,
+ "貴": 6523,
+ "貶": 6524,
+ "買": 6525,
+ "貸": 6526,
+ "費": 6527,
+ "貼": 6528,
+ "貽": 6529,
+ "貿": 6530,
+ "賀": 6531,
+ "賁": 6532,
+ "賂": 6533,
+ "賃": 6534,
+ "賄": 6535,
+ "資": 6536,
+ "賈": 6537,
+ "賊": 6538,
+ "賑": 6539,
+ "賓": 6540,
+ "賜": 6541,
+ "賞": 6542,
+ "賠": 6543,
+ "賡": 6544,
+ "賢": 6545,
+ "賣": 6546,
+ "賤": 6547,
+ "賦": 6548,
+ "質": 6549,
+ "賬": 6550,
+ "賭": 6551,
+ "賴": 6552,
+ "賺": 6553,
+ "購": 6554,
+ "賽": 6555,
+ "贅": 6556,
+ "贈": 6557,
+ "贊": 6558,
+ "贍": 6559,
+ "贏": 6560,
+ "贓": 6561,
+ "贖": 6562,
+ "贛": 6563,
+ "贝": 6564,
+ "贞": 6565,
+ "负": 6566,
+ "贡": 6567,
+ "财": 6568,
+ "责": 6569,
+ "贤": 6570,
+ "败": 6571,
+ "账": 6572,
+ "货": 6573,
+ "质": 6574,
+ "贩": 6575,
+ "贪": 6576,
+ "贫": 6577,
+ "贬": 6578,
+ "购": 6579,
+ "贮": 6580,
+ "贯": 6581,
+ "贰": 6582,
+ "贱": 6583,
+ "贲": 6584,
+ "贴": 6585,
+ "贵": 6586,
+ "贷": 6587,
+ "贸": 6588,
+ "费": 6589,
+ "贺": 6590,
+ "贻": 6591,
+ "贼": 6592,
+ "贾": 6593,
+ "贿": 6594,
+ "赁": 6595,
+ "赂": 6596,
+ "赃": 6597,
+ "资": 6598,
+ "赅": 6599,
+ "赈": 6600,
+ "赊": 6601,
+ "赋": 6602,
+ "赌": 6603,
+ "赎": 6604,
+ "赏": 6605,
+ "赐": 6606,
+ "赓": 6607,
+ "赔": 6608,
+ "赖": 6609,
+ "赘": 6610,
+ "赚": 6611,
+ "赛": 6612,
+ "赝": 6613,
+ "赞": 6614,
+ "赠": 6615,
+ "赡": 6616,
+ "赢": 6617,
+ "赣": 6618,
+ "赤": 6619,
+ "赦": 6620,
+ "赧": 6621,
+ "赫": 6622,
+ "赭": 6623,
+ "走": 6624,
+ "赳": 6625,
+ "赴": 6626,
+ "赵": 6627,
+ "赶": 6628,
+ "起": 6629,
+ "趁": 6630,
+ "超": 6631,
+ "越": 6632,
+ "趋": 6633,
+ "趕": 6634,
+ "趙": 6635,
+ "趟": 6636,
+ "趣": 6637,
+ "趨": 6638,
+ "足": 6639,
+ "趴": 6640,
+ "趵": 6641,
+ "趸": 6642,
+ "趺": 6643,
+ "趾": 6644,
+ "跃": 6645,
+ "跄": 6646,
+ "跆": 6647,
+ "跋": 6648,
+ "跌": 6649,
+ "跎": 6650,
+ "跑": 6651,
+ "跖": 6652,
+ "跚": 6653,
+ "跛": 6654,
+ "距": 6655,
+ "跟": 6656,
+ "跡": 6657,
+ "跤": 6658,
+ "跨": 6659,
+ "跩": 6660,
+ "跪": 6661,
+ "路": 6662,
+ "跳": 6663,
+ "践": 6664,
+ "跷": 6665,
+ "跹": 6666,
+ "跺": 6667,
+ "跻": 6668,
+ "踉": 6669,
+ "踊": 6670,
+ "踌": 6671,
+ "踏": 6672,
+ "踐": 6673,
+ "踝": 6674,
+ "踞": 6675,
+ "踟": 6676,
+ "踢": 6677,
+ "踩": 6678,
+ "踪": 6679,
+ "踮": 6680,
+ "踱": 6681,
+ "踴": 6682,
+ "踵": 6683,
+ "踹": 6684,
+ "蹂": 6685,
+ "蹄": 6686,
+ "蹇": 6687,
+ "蹈": 6688,
+ "蹉": 6689,
+ "蹊": 6690,
+ "蹋": 6691,
+ "蹑": 6692,
+ "蹒": 6693,
+ "蹙": 6694,
+ "蹟": 6695,
+ "蹣": 6696,
+ "蹤": 6697,
+ "蹦": 6698,
+ "蹩": 6699,
+ "蹬": 6700,
+ "蹭": 6701,
+ "蹲": 6702,
+ "蹴": 6703,
+ "蹶": 6704,
+ "蹺": 6705,
+ "蹼": 6706,
+ "蹿": 6707,
+ "躁": 6708,
+ "躇": 6709,
+ "躉": 6710,
+ "躊": 6711,
+ "躋": 6712,
+ "躍": 6713,
+ "躏": 6714,
+ "躪": 6715,
+ "身": 6716,
+ "躬": 6717,
+ "躯": 6718,
+ "躲": 6719,
+ "躺": 6720,
+ "軀": 6721,
+ "車": 6722,
+ "軋": 6723,
+ "軌": 6724,
+ "軍": 6725,
+ "軒": 6726,
+ "軟": 6727,
+ "転": 6728,
+ "軸": 6729,
+ "軼": 6730,
+ "軽": 6731,
+ "軾": 6732,
+ "較": 6733,
+ "載": 6734,
+ "輒": 6735,
+ "輓": 6736,
+ "輔": 6737,
+ "輕": 6738,
+ "輛": 6739,
+ "輝": 6740,
+ "輟": 6741,
+ "輩": 6742,
+ "輪": 6743,
+ "輯": 6744,
+ "輸": 6745,
+ "輻": 6746,
+ "輾": 6747,
+ "輿": 6748,
+ "轄": 6749,
+ "轅": 6750,
+ "轆": 6751,
+ "轉": 6752,
+ "轍": 6753,
+ "轎": 6754,
+ "轟": 6755,
+ "车": 6756,
+ "轧": 6757,
+ "轨": 6758,
+ "轩": 6759,
+ "转": 6760,
+ "轭": 6761,
+ "轮": 6762,
+ "软": 6763,
+ "轰": 6764,
+ "轲": 6765,
+ "轴": 6766,
+ "轶": 6767,
+ "轻": 6768,
+ "轼": 6769,
+ "载": 6770,
+ "轿": 6771,
+ "较": 6772,
+ "辄": 6773,
+ "辅": 6774,
+ "辆": 6775,
+ "辇": 6776,
+ "辈": 6777,
+ "辉": 6778,
+ "辊": 6779,
+ "辍": 6780,
+ "辐": 6781,
+ "辑": 6782,
+ "输": 6783,
+ "辕": 6784,
+ "辖": 6785,
+ "辗": 6786,
+ "辘": 6787,
+ "辙": 6788,
+ "辛": 6789,
+ "辜": 6790,
+ "辞": 6791,
+ "辟": 6792,
+ "辣": 6793,
+ "辦": 6794,
+ "辨": 6795,
+ "辩": 6796,
+ "辫": 6797,
+ "辭": 6798,
+ "辮": 6799,
+ "辯": 6800,
+ "辰": 6801,
+ "辱": 6802,
+ "農": 6803,
+ "边": 6804,
+ "辺": 6805,
+ "辻": 6806,
+ "込": 6807,
+ "辽": 6808,
+ "达": 6809,
+ "迁": 6810,
+ "迂": 6811,
+ "迄": 6812,
+ "迅": 6813,
+ "过": 6814,
+ "迈": 6815,
+ "迎": 6816,
+ "运": 6817,
+ "近": 6818,
+ "返": 6819,
+ "还": 6820,
+ "这": 6821,
+ "进": 6822,
+ "远": 6823,
+ "违": 6824,
+ "连": 6825,
+ "迟": 6826,
+ "迢": 6827,
+ "迤": 6828,
+ "迥": 6829,
+ "迦": 6830,
+ "迩": 6831,
+ "迪": 6832,
+ "迫": 6833,
+ "迭": 6834,
+ "述": 6835,
+ "迴": 6836,
+ "迷": 6837,
+ "迸": 6838,
+ "迹": 6839,
+ "迺": 6840,
+ "追": 6841,
+ "退": 6842,
+ "送": 6843,
+ "适": 6844,
+ "逃": 6845,
+ "逅": 6846,
+ "逆": 6847,
+ "选": 6848,
+ "逊": 6849,
+ "逍": 6850,
+ "透": 6851,
+ "逐": 6852,
+ "递": 6853,
+ "途": 6854,
+ "逕": 6855,
+ "逗": 6856,
+ "這": 6857,
+ "通": 6858,
+ "逛": 6859,
+ "逝": 6860,
+ "逞": 6861,
+ "速": 6862,
+ "造": 6863,
+ "逢": 6864,
+ "連": 6865,
+ "逮": 6866,
+ "週": 6867,
+ "進": 6868,
+ "逵": 6869,
+ "逶": 6870,
+ "逸": 6871,
+ "逻": 6872,
+ "逼": 6873,
+ "逾": 6874,
+ "遁": 6875,
+ "遂": 6876,
+ "遅": 6877,
+ "遇": 6878,
+ "遊": 6879,
+ "運": 6880,
+ "遍": 6881,
+ "過": 6882,
+ "遏": 6883,
+ "遐": 6884,
+ "遑": 6885,
+ "遒": 6886,
+ "道": 6887,
+ "達": 6888,
+ "違": 6889,
+ "遗": 6890,
+ "遙": 6891,
+ "遛": 6892,
+ "遜": 6893,
+ "遞": 6894,
+ "遠": 6895,
+ "遢": 6896,
+ "遣": 6897,
+ "遥": 6898,
+ "遨": 6899,
+ "適": 6900,
+ "遭": 6901,
+ "遮": 6902,
+ "遲": 6903,
+ "遴": 6904,
+ "遵": 6905,
+ "遶": 6906,
+ "遷": 6907,
+ "選": 6908,
+ "遺": 6909,
+ "遼": 6910,
+ "遽": 6911,
+ "避": 6912,
+ "邀": 6913,
+ "邁": 6914,
+ "邂": 6915,
+ "邃": 6916,
+ "還": 6917,
+ "邇": 6918,
+ "邈": 6919,
+ "邊": 6920,
+ "邋": 6921,
+ "邏": 6922,
+ "邑": 6923,
+ "邓": 6924,
+ "邕": 6925,
+ "邛": 6926,
+ "邝": 6927,
+ "邢": 6928,
+ "那": 6929,
+ "邦": 6930,
+ "邨": 6931,
+ "邪": 6932,
+ "邬": 6933,
+ "邮": 6934,
+ "邯": 6935,
+ "邰": 6936,
+ "邱": 6937,
+ "邳": 6938,
+ "邵": 6939,
+ "邸": 6940,
+ "邹": 6941,
+ "邺": 6942,
+ "邻": 6943,
+ "郁": 6944,
+ "郅": 6945,
+ "郊": 6946,
+ "郎": 6947,
+ "郑": 6948,
+ "郜": 6949,
+ "郝": 6950,
+ "郡": 6951,
+ "郢": 6952,
+ "郤": 6953,
+ "郦": 6954,
+ "郧": 6955,
+ "部": 6956,
+ "郫": 6957,
+ "郭": 6958,
+ "郴": 6959,
+ "郵": 6960,
+ "郷": 6961,
+ "郸": 6962,
+ "都": 6963,
+ "鄂": 6964,
+ "鄉": 6965,
+ "鄒": 6966,
+ "鄔": 6967,
+ "鄙": 6968,
+ "鄞": 6969,
+ "鄢": 6970,
+ "鄧": 6971,
+ "鄭": 6972,
+ "鄰": 6973,
+ "鄱": 6974,
+ "鄲": 6975,
+ "鄺": 6976,
+ "酉": 6977,
+ "酊": 6978,
+ "酋": 6979,
+ "酌": 6980,
+ "配": 6981,
+ "酐": 6982,
+ "酒": 6983,
+ "酗": 6984,
+ "酚": 6985,
+ "酝": 6986,
+ "酢": 6987,
+ "酣": 6988,
+ "酥": 6989,
+ "酩": 6990,
+ "酪": 6991,
+ "酬": 6992,
+ "酮": 6993,
+ "酯": 6994,
+ "酰": 6995,
+ "酱": 6996,
+ "酵": 6997,
+ "酶": 6998,
+ "酷": 6999,
+ "酸": 7000,
+ "酿": 7001,
+ "醃": 7002,
+ "醇": 7003,
+ "醉": 7004,
+ "醋": 7005,
+ "醍": 7006,
+ "醐": 7007,
+ "醒": 7008,
+ "醚": 7009,
+ "醛": 7010,
+ "醜": 7011,
+ "醞": 7012,
+ "醣": 7013,
+ "醪": 7014,
+ "醫": 7015,
+ "醬": 7016,
+ "醮": 7017,
+ "醯": 7018,
+ "醴": 7019,
+ "醺": 7020,
+ "釀": 7021,
+ "釁": 7022,
+ "采": 7023,
+ "釉": 7024,
+ "释": 7025,
+ "釋": 7026,
+ "里": 7027,
+ "重": 7028,
+ "野": 7029,
+ "量": 7030,
+ "釐": 7031,
+ "金": 7032,
+ "釗": 7033,
+ "釘": 7034,
+ "釜": 7035,
+ "針": 7036,
+ "釣": 7037,
+ "釦": 7038,
+ "釧": 7039,
+ "釵": 7040,
+ "鈀": 7041,
+ "鈉": 7042,
+ "鈍": 7043,
+ "鈎": 7044,
+ "鈔": 7045,
+ "鈕": 7046,
+ "鈞": 7047,
+ "鈣": 7048,
+ "鈦": 7049,
+ "鈪": 7050,
+ "鈴": 7051,
+ "鈺": 7052,
+ "鈾": 7053,
+ "鉀": 7054,
+ "鉄": 7055,
+ "鉅": 7056,
+ "鉉": 7057,
+ "鉑": 7058,
+ "鉗": 7059,
+ "鉚": 7060,
+ "鉛": 7061,
+ "鉤": 7062,
+ "鉴": 7063,
+ "鉻": 7064,
+ "銀": 7065,
+ "銃": 7066,
+ "銅": 7067,
+ "銑": 7068,
+ "銓": 7069,
+ "銖": 7070,
+ "銘": 7071,
+ "銜": 7072,
+ "銬": 7073,
+ "銭": 7074,
+ "銮": 7075,
+ "銳": 7076,
+ "銷": 7077,
+ "銹": 7078,
+ "鋁": 7079,
+ "鋅": 7080,
+ "鋒": 7081,
+ "鋤": 7082,
+ "鋪": 7083,
+ "鋰": 7084,
+ "鋸": 7085,
+ "鋼": 7086,
+ "錄": 7087,
+ "錐": 7088,
+ "錘": 7089,
+ "錚": 7090,
+ "錠": 7091,
+ "錢": 7092,
+ "錦": 7093,
+ "錨": 7094,
+ "錫": 7095,
+ "錮": 7096,
+ "錯": 7097,
+ "録": 7098,
+ "錳": 7099,
+ "錶": 7100,
+ "鍊": 7101,
+ "鍋": 7102,
+ "鍍": 7103,
+ "鍛": 7104,
+ "鍥": 7105,
+ "鍰": 7106,
+ "鍵": 7107,
+ "鍺": 7108,
+ "鍾": 7109,
+ "鎂": 7110,
+ "鎊": 7111,
+ "鎌": 7112,
+ "鎏": 7113,
+ "鎔": 7114,
+ "鎖": 7115,
+ "鎗": 7116,
+ "鎚": 7117,
+ "鎧": 7118,
+ "鎬": 7119,
+ "鎮": 7120,
+ "鎳": 7121,
+ "鏈": 7122,
+ "鏖": 7123,
+ "鏗": 7124,
+ "鏘": 7125,
+ "鏞": 7126,
+ "鏟": 7127,
+ "鏡": 7128,
+ "鏢": 7129,
+ "鏤": 7130,
+ "鏽": 7131,
+ "鐘": 7132,
+ "鐮": 7133,
+ "鐲": 7134,
+ "鐳": 7135,
+ "鐵": 7136,
+ "鐸": 7137,
+ "鐺": 7138,
+ "鑄": 7139,
+ "鑊": 7140,
+ "鑑": 7141,
+ "鑒": 7142,
+ "鑣": 7143,
+ "鑫": 7144,
+ "鑰": 7145,
+ "鑲": 7146,
+ "鑼": 7147,
+ "鑽": 7148,
+ "鑾": 7149,
+ "鑿": 7150,
+ "针": 7151,
+ "钉": 7152,
+ "钊": 7153,
+ "钎": 7154,
+ "钏": 7155,
+ "钒": 7156,
+ "钓": 7157,
+ "钗": 7158,
+ "钙": 7159,
+ "钛": 7160,
+ "钜": 7161,
+ "钝": 7162,
+ "钞": 7163,
+ "钟": 7164,
+ "钠": 7165,
+ "钡": 7166,
+ "钢": 7167,
+ "钣": 7168,
+ "钤": 7169,
+ "钥": 7170,
+ "钦": 7171,
+ "钧": 7172,
+ "钨": 7173,
+ "钩": 7174,
+ "钮": 7175,
+ "钯": 7176,
+ "钰": 7177,
+ "钱": 7178,
+ "钳": 7179,
+ "钴": 7180,
+ "钵": 7181,
+ "钺": 7182,
+ "钻": 7183,
+ "钼": 7184,
+ "钾": 7185,
+ "钿": 7186,
+ "铀": 7187,
+ "铁": 7188,
+ "铂": 7189,
+ "铃": 7190,
+ "铄": 7191,
+ "铅": 7192,
+ "铆": 7193,
+ "铉": 7194,
+ "铎": 7195,
+ "铐": 7196,
+ "铛": 7197,
+ "铜": 7198,
+ "铝": 7199,
+ "铠": 7200,
+ "铡": 7201,
+ "铢": 7202,
+ "铣": 7203,
+ "铤": 7204,
+ "铨": 7205,
+ "铩": 7206,
+ "铬": 7207,
+ "铭": 7208,
+ "铮": 7209,
+ "铰": 7210,
+ "铲": 7211,
+ "铵": 7212,
+ "银": 7213,
+ "铸": 7214,
+ "铺": 7215,
+ "链": 7216,
+ "铿": 7217,
+ "销": 7218,
+ "锁": 7219,
+ "锂": 7220,
+ "锄": 7221,
+ "锅": 7222,
+ "锆": 7223,
+ "锈": 7224,
+ "锉": 7225,
+ "锋": 7226,
+ "锌": 7227,
+ "锏": 7228,
+ "锐": 7229,
+ "锑": 7230,
+ "错": 7231,
+ "锚": 7232,
+ "锟": 7233,
+ "锡": 7234,
+ "锢": 7235,
+ "锣": 7236,
+ "锤": 7237,
+ "锥": 7238,
+ "锦": 7239,
+ "锭": 7240,
+ "键": 7241,
+ "锯": 7242,
+ "锰": 7243,
+ "锲": 7244,
+ "锵": 7245,
+ "锹": 7246,
+ "锺": 7247,
+ "锻": 7248,
+ "镀": 7249,
+ "镁": 7250,
+ "镂": 7251,
+ "镇": 7252,
+ "镉": 7253,
+ "镌": 7254,
+ "镍": 7255,
+ "镐": 7256,
+ "镑": 7257,
+ "镕": 7258,
+ "镖": 7259,
+ "镗": 7260,
+ "镛": 7261,
+ "镜": 7262,
+ "镣": 7263,
+ "镭": 7264,
+ "镯": 7265,
+ "镰": 7266,
+ "镳": 7267,
+ "镶": 7268,
+ "長": 7269,
+ "长": 7270,
+ "門": 7271,
+ "閃": 7272,
+ "閉": 7273,
+ "開": 7274,
+ "閎": 7275,
+ "閏": 7276,
+ "閑": 7277,
+ "閒": 7278,
+ "間": 7279,
+ "閔": 7280,
+ "閘": 7281,
+ "閡": 7282,
+ "関": 7283,
+ "閣": 7284,
+ "閥": 7285,
+ "閨": 7286,
+ "閩": 7287,
+ "閱": 7288,
+ "閲": 7289,
+ "閹": 7290,
+ "閻": 7291,
+ "閾": 7292,
+ "闆": 7293,
+ "闇": 7294,
+ "闊": 7295,
+ "闌": 7296,
+ "闍": 7297,
+ "闔": 7298,
+ "闕": 7299,
+ "闖": 7300,
+ "闘": 7301,
+ "關": 7302,
+ "闡": 7303,
+ "闢": 7304,
+ "门": 7305,
+ "闪": 7306,
+ "闫": 7307,
+ "闭": 7308,
+ "问": 7309,
+ "闯": 7310,
+ "闰": 7311,
+ "闲": 7312,
+ "间": 7313,
+ "闵": 7314,
+ "闷": 7315,
+ "闸": 7316,
+ "闹": 7317,
+ "闺": 7318,
+ "闻": 7319,
+ "闽": 7320,
+ "闾": 7321,
+ "阀": 7322,
+ "阁": 7323,
+ "阂": 7324,
+ "阅": 7325,
+ "阆": 7326,
+ "阇": 7327,
+ "阈": 7328,
+ "阉": 7329,
+ "阎": 7330,
+ "阐": 7331,
+ "阑": 7332,
+ "阔": 7333,
+ "阕": 7334,
+ "阖": 7335,
+ "阙": 7336,
+ "阚": 7337,
+ "阜": 7338,
+ "队": 7339,
+ "阡": 7340,
+ "阪": 7341,
+ "阮": 7342,
+ "阱": 7343,
+ "防": 7344,
+ "阳": 7345,
+ "阴": 7346,
+ "阵": 7347,
+ "阶": 7348,
+ "阻": 7349,
+ "阿": 7350,
+ "陀": 7351,
+ "陂": 7352,
+ "附": 7353,
+ "际": 7354,
+ "陆": 7355,
+ "陇": 7356,
+ "陈": 7357,
+ "陋": 7358,
+ "陌": 7359,
+ "降": 7360,
+ "限": 7361,
+ "陕": 7362,
+ "陛": 7363,
+ "陝": 7364,
+ "陞": 7365,
+ "陟": 7366,
+ "陡": 7367,
+ "院": 7368,
+ "陣": 7369,
+ "除": 7370,
+ "陨": 7371,
+ "险": 7372,
+ "陪": 7373,
+ "陰": 7374,
+ "陲": 7375,
+ "陳": 7376,
+ "陵": 7377,
+ "陶": 7378,
+ "陷": 7379,
+ "陸": 7380,
+ "険": 7381,
+ "陽": 7382,
+ "隅": 7383,
+ "隆": 7384,
+ "隈": 7385,
+ "隊": 7386,
+ "隋": 7387,
+ "隍": 7388,
+ "階": 7389,
+ "随": 7390,
+ "隐": 7391,
+ "隔": 7392,
+ "隕": 7393,
+ "隘": 7394,
+ "隙": 7395,
+ "際": 7396,
+ "障": 7397,
+ "隠": 7398,
+ "隣": 7399,
+ "隧": 7400,
+ "隨": 7401,
+ "險": 7402,
+ "隱": 7403,
+ "隴": 7404,
+ "隶": 7405,
+ "隸": 7406,
+ "隻": 7407,
+ "隼": 7408,
+ "隽": 7409,
+ "难": 7410,
+ "雀": 7411,
+ "雁": 7412,
+ "雄": 7413,
+ "雅": 7414,
+ "集": 7415,
+ "雇": 7416,
+ "雉": 7417,
+ "雋": 7418,
+ "雌": 7419,
+ "雍": 7420,
+ "雎": 7421,
+ "雏": 7422,
+ "雑": 7423,
+ "雒": 7424,
+ "雕": 7425,
+ "雖": 7426,
+ "雙": 7427,
+ "雛": 7428,
+ "雜": 7429,
+ "雞": 7430,
+ "離": 7431,
+ "難": 7432,
+ "雨": 7433,
+ "雪": 7434,
+ "雯": 7435,
+ "雰": 7436,
+ "雲": 7437,
+ "雳": 7438,
+ "零": 7439,
+ "雷": 7440,
+ "雹": 7441,
+ "電": 7442,
+ "雾": 7443,
+ "需": 7444,
+ "霁": 7445,
+ "霄": 7446,
+ "霆": 7447,
+ "震": 7448,
+ "霈": 7449,
+ "霉": 7450,
+ "霊": 7451,
+ "霍": 7452,
+ "霎": 7453,
+ "霏": 7454,
+ "霑": 7455,
+ "霓": 7456,
+ "霖": 7457,
+ "霜": 7458,
+ "霞": 7459,
+ "霧": 7460,
+ "霭": 7461,
+ "霰": 7462,
+ "露": 7463,
+ "霸": 7464,
+ "霹": 7465,
+ "霽": 7466,
+ "霾": 7467,
+ "靂": 7468,
+ "靄": 7469,
+ "靈": 7470,
+ "青": 7471,
+ "靓": 7472,
+ "靖": 7473,
+ "静": 7474,
+ "靚": 7475,
+ "靛": 7476,
+ "靜": 7477,
+ "非": 7478,
+ "靠": 7479,
+ "靡": 7480,
+ "面": 7481,
+ "靥": 7482,
+ "靦": 7483,
+ "革": 7484,
+ "靳": 7485,
+ "靴": 7486,
+ "靶": 7487,
+ "靼": 7488,
+ "鞅": 7489,
+ "鞋": 7490,
+ "鞍": 7491,
+ "鞏": 7492,
+ "鞑": 7493,
+ "鞘": 7494,
+ "鞠": 7495,
+ "鞣": 7496,
+ "鞦": 7497,
+ "鞭": 7498,
+ "韆": 7499,
+ "韋": 7500,
+ "韌": 7501,
+ "韓": 7502,
+ "韜": 7503,
+ "韦": 7504,
+ "韧": 7505,
+ "韩": 7506,
+ "韬": 7507,
+ "韭": 7508,
+ "音": 7509,
+ "韵": 7510,
+ "韶": 7511,
+ "韻": 7512,
+ "響": 7513,
+ "頁": 7514,
+ "頂": 7515,
+ "頃": 7516,
+ "項": 7517,
+ "順": 7518,
+ "須": 7519,
+ "頌": 7520,
+ "預": 7521,
+ "頑": 7522,
+ "頒": 7523,
+ "頓": 7524,
+ "頗": 7525,
+ "領": 7526,
+ "頜": 7527,
+ "頡": 7528,
+ "頤": 7529,
+ "頫": 7530,
+ "頭": 7531,
+ "頰": 7532,
+ "頷": 7533,
+ "頸": 7534,
+ "頹": 7535,
+ "頻": 7536,
+ "頼": 7537,
+ "顆": 7538,
+ "題": 7539,
+ "額": 7540,
+ "顎": 7541,
+ "顏": 7542,
+ "顔": 7543,
+ "願": 7544,
+ "顛": 7545,
+ "類": 7546,
+ "顧": 7547,
+ "顫": 7548,
+ "顯": 7549,
+ "顱": 7550,
+ "顴": 7551,
+ "页": 7552,
+ "顶": 7553,
+ "顷": 7554,
+ "项": 7555,
+ "顺": 7556,
+ "须": 7557,
+ "顼": 7558,
+ "顽": 7559,
+ "顾": 7560,
+ "顿": 7561,
+ "颁": 7562,
+ "颂": 7563,
+ "预": 7564,
+ "颅": 7565,
+ "领": 7566,
+ "颇": 7567,
+ "颈": 7568,
+ "颉": 7569,
+ "颊": 7570,
+ "颌": 7571,
+ "颍": 7572,
+ "颐": 7573,
+ "频": 7574,
+ "颓": 7575,
+ "颔": 7576,
+ "颖": 7577,
+ "颗": 7578,
+ "题": 7579,
+ "颚": 7580,
+ "颛": 7581,
+ "颜": 7582,
+ "额": 7583,
+ "颞": 7584,
+ "颠": 7585,
+ "颡": 7586,
+ "颢": 7587,
+ "颤": 7588,
+ "颦": 7589,
+ "颧": 7590,
+ "風": 7591,
+ "颯": 7592,
+ "颱": 7593,
+ "颳": 7594,
+ "颶": 7595,
+ "颼": 7596,
+ "飄": 7597,
+ "飆": 7598,
+ "风": 7599,
+ "飒": 7600,
+ "飓": 7601,
+ "飕": 7602,
+ "飘": 7603,
+ "飙": 7604,
+ "飚": 7605,
+ "飛": 7606,
+ "飞": 7607,
+ "食": 7608,
+ "飢": 7609,
+ "飨": 7610,
+ "飩": 7611,
+ "飪": 7612,
+ "飯": 7613,
+ "飲": 7614,
+ "飼": 7615,
+ "飽": 7616,
+ "飾": 7617,
+ "餃": 7618,
+ "餅": 7619,
+ "餉": 7620,
+ "養": 7621,
+ "餌": 7622,
+ "餐": 7623,
+ "餒": 7624,
+ "餓": 7625,
+ "餘": 7626,
+ "餚": 7627,
+ "餛": 7628,
+ "餞": 7629,
+ "餡": 7630,
+ "館": 7631,
+ "餮": 7632,
+ "餵": 7633,
+ "餾": 7634,
+ "饅": 7635,
+ "饈": 7636,
+ "饋": 7637,
+ "饌": 7638,
+ "饍": 7639,
+ "饑": 7640,
+ "饒": 7641,
+ "饕": 7642,
+ "饗": 7643,
+ "饞": 7644,
+ "饥": 7645,
+ "饨": 7646,
+ "饪": 7647,
+ "饬": 7648,
+ "饭": 7649,
+ "饮": 7650,
+ "饯": 7651,
+ "饰": 7652,
+ "饱": 7653,
+ "饲": 7654,
+ "饴": 7655,
+ "饵": 7656,
+ "饶": 7657,
+ "饷": 7658,
+ "饺": 7659,
+ "饼": 7660,
+ "饽": 7661,
+ "饿": 7662,
+ "馀": 7663,
+ "馁": 7664,
+ "馄": 7665,
+ "馅": 7666,
+ "馆": 7667,
+ "馈": 7668,
+ "馋": 7669,
+ "馍": 7670,
+ "馏": 7671,
+ "馒": 7672,
+ "馔": 7673,
+ "首": 7674,
+ "馗": 7675,
+ "香": 7676,
+ "馥": 7677,
+ "馨": 7678,
+ "馬": 7679,
+ "馭": 7680,
+ "馮": 7681,
+ "馳": 7682,
+ "馴": 7683,
+ "駁": 7684,
+ "駄": 7685,
+ "駅": 7686,
+ "駆": 7687,
+ "駐": 7688,
+ "駒": 7689,
+ "駕": 7690,
+ "駛": 7691,
+ "駝": 7692,
+ "駭": 7693,
+ "駱": 7694,
+ "駿": 7695,
+ "騁": 7696,
+ "騎": 7697,
+ "騏": 7698,
+ "験": 7699,
+ "騙": 7700,
+ "騨": 7701,
+ "騰": 7702,
+ "騷": 7703,
+ "驀": 7704,
+ "驅": 7705,
+ "驊": 7706,
+ "驍": 7707,
+ "驒": 7708,
+ "驕": 7709,
+ "驗": 7710,
+ "驚": 7711,
+ "驛": 7712,
+ "驟": 7713,
+ "驢": 7714,
+ "驥": 7715,
+ "马": 7716,
+ "驭": 7717,
+ "驮": 7718,
+ "驯": 7719,
+ "驰": 7720,
+ "驱": 7721,
+ "驳": 7722,
+ "驴": 7723,
+ "驶": 7724,
+ "驷": 7725,
+ "驸": 7726,
+ "驹": 7727,
+ "驻": 7728,
+ "驼": 7729,
+ "驾": 7730,
+ "驿": 7731,
+ "骁": 7732,
+ "骂": 7733,
+ "骄": 7734,
+ "骅": 7735,
+ "骆": 7736,
+ "骇": 7737,
+ "骈": 7738,
+ "骊": 7739,
+ "骋": 7740,
+ "验": 7741,
+ "骏": 7742,
+ "骐": 7743,
+ "骑": 7744,
+ "骗": 7745,
+ "骚": 7746,
+ "骛": 7747,
+ "骜": 7748,
+ "骞": 7749,
+ "骠": 7750,
+ "骡": 7751,
+ "骤": 7752,
+ "骥": 7753,
+ "骧": 7754,
+ "骨": 7755,
+ "骯": 7756,
+ "骰": 7757,
+ "骶": 7758,
+ "骷": 7759,
+ "骸": 7760,
+ "骼": 7761,
+ "髂": 7762,
+ "髅": 7763,
+ "髋": 7764,
+ "髏": 7765,
+ "髒": 7766,
+ "髓": 7767,
+ "體": 7768,
+ "髖": 7769,
+ "高": 7770,
+ "髦": 7771,
+ "髪": 7772,
+ "髮": 7773,
+ "髯": 7774,
+ "髻": 7775,
+ "鬃": 7776,
+ "鬆": 7777,
+ "鬍": 7778,
+ "鬓": 7779,
+ "鬚": 7780,
+ "鬟": 7781,
+ "鬢": 7782,
+ "鬣": 7783,
+ "鬥": 7784,
+ "鬧": 7785,
+ "鬱": 7786,
+ "鬼": 7787,
+ "魁": 7788,
+ "魂": 7789,
+ "魄": 7790,
+ "魅": 7791,
+ "魇": 7792,
+ "魍": 7793,
+ "魏": 7794,
+ "魔": 7795,
+ "魘": 7796,
+ "魚": 7797,
+ "魯": 7798,
+ "魷": 7799,
+ "鮑": 7800,
+ "鮨": 7801,
+ "鮪": 7802,
+ "鮭": 7803,
+ "鮮": 7804,
+ "鯉": 7805,
+ "鯊": 7806,
+ "鯖": 7807,
+ "鯛": 7808,
+ "鯨": 7809,
+ "鯰": 7810,
+ "鯽": 7811,
+ "鰍": 7812,
+ "鰓": 7813,
+ "鰭": 7814,
+ "鰲": 7815,
+ "鰻": 7816,
+ "鰾": 7817,
+ "鱈": 7818,
+ "鱉": 7819,
+ "鱔": 7820,
+ "鱗": 7821,
+ "鱷": 7822,
+ "鱸": 7823,
+ "鱼": 7824,
+ "鱿": 7825,
+ "鲁": 7826,
+ "鲈": 7827,
+ "鲍": 7828,
+ "鲑": 7829,
+ "鲛": 7830,
+ "鲜": 7831,
+ "鲟": 7832,
+ "鲢": 7833,
+ "鲤": 7834,
+ "鲨": 7835,
+ "鲫": 7836,
+ "鲱": 7837,
+ "鲲": 7838,
+ "鲶": 7839,
+ "鲷": 7840,
+ "鲸": 7841,
+ "鳃": 7842,
+ "鳄": 7843,
+ "鳅": 7844,
+ "鳌": 7845,
+ "鳍": 7846,
+ "鳕": 7847,
+ "鳖": 7848,
+ "鳗": 7849,
+ "鳝": 7850,
+ "鳞": 7851,
+ "鳥": 7852,
+ "鳩": 7853,
+ "鳳": 7854,
+ "鳴": 7855,
+ "鳶": 7856,
+ "鴉": 7857,
+ "鴕": 7858,
+ "鴛": 7859,
+ "鴦": 7860,
+ "鴨": 7861,
+ "鴻": 7862,
+ "鴿": 7863,
+ "鵑": 7864,
+ "鵜": 7865,
+ "鵝": 7866,
+ "鵡": 7867,
+ "鵬": 7868,
+ "鵰": 7869,
+ "鵲": 7870,
+ "鶘": 7871,
+ "鶩": 7872,
+ "鶯": 7873,
+ "鶴": 7874,
+ "鷗": 7875,
+ "鷲": 7876,
+ "鷹": 7877,
+ "鷺": 7878,
+ "鸚": 7879,
+ "鸞": 7880,
+ "鸟": 7881,
+ "鸠": 7882,
+ "鸡": 7883,
+ "鸢": 7884,
+ "鸣": 7885,
+ "鸥": 7886,
+ "鸦": 7887,
+ "鸨": 7888,
+ "鸪": 7889,
+ "鸭": 7890,
+ "鸯": 7891,
+ "鸳": 7892,
+ "鸵": 7893,
+ "鸽": 7894,
+ "鸾": 7895,
+ "鸿": 7896,
+ "鹂": 7897,
+ "鹃": 7898,
+ "鹄": 7899,
+ "鹅": 7900,
+ "鹈": 7901,
+ "鹉": 7902,
+ "鹊": 7903,
+ "鹌": 7904,
+ "鹏": 7905,
+ "鹑": 7906,
+ "鹕": 7907,
+ "鹘": 7908,
+ "鹜": 7909,
+ "鹞": 7910,
+ "鹤": 7911,
+ "鹦": 7912,
+ "鹧": 7913,
+ "鹫": 7914,
+ "鹭": 7915,
+ "鹰": 7916,
+ "鹳": 7917,
+ "鹵": 7918,
+ "鹹": 7919,
+ "鹼": 7920,
+ "鹽": 7921,
+ "鹿": 7922,
+ "麂": 7923,
+ "麋": 7924,
+ "麒": 7925,
+ "麓": 7926,
+ "麗": 7927,
+ "麝": 7928,
+ "麟": 7929,
+ "麥": 7930,
+ "麦": 7931,
+ "麩": 7932,
+ "麴": 7933,
+ "麵": 7934,
+ "麸": 7935,
+ "麺": 7936,
+ "麻": 7937,
+ "麼": 7938,
+ "麽": 7939,
+ "麾": 7940,
+ "黃": 7941,
+ "黄": 7942,
+ "黍": 7943,
+ "黎": 7944,
+ "黏": 7945,
+ "黑": 7946,
+ "黒": 7947,
+ "黔": 7948,
+ "默": 7949,
+ "黛": 7950,
+ "黜": 7951,
+ "黝": 7952,
+ "點": 7953,
+ "黠": 7954,
+ "黨": 7955,
+ "黯": 7956,
+ "黴": 7957,
+ "鼋": 7958,
+ "鼎": 7959,
+ "鼐": 7960,
+ "鼓": 7961,
+ "鼠": 7962,
+ "鼬": 7963,
+ "鼹": 7964,
+ "鼻": 7965,
+ "鼾": 7966,
+ "齁": 7967,
+ "齊": 7968,
+ "齋": 7969,
+ "齐": 7970,
+ "齒": 7971,
+ "齡": 7972,
+ "齢": 7973,
+ "齣": 7974,
+ "齦": 7975,
+ "齿": 7976,
+ "龄": 7977,
+ "龅": 7978,
+ "龈": 7979,
+ "龊": 7980,
+ "龋": 7981,
+ "龌": 7982,
+ "龍": 7983,
+ "龐": 7984,
+ "龔": 7985,
+ "龕": 7986,
+ "龙": 7987,
+ "龚": 7988,
+ "龛": 7989,
+ "龜": 7990,
+ "龟": 7991,
+ "︰": 7992,
+ "︱": 7993,
+ "︶": 7994,
+ "︿": 7995,
+ "﹁": 7996,
+ "﹂": 7997,
+ "﹍": 7998,
+ "﹏": 7999,
+ "﹐": 8000,
+ "﹑": 8001,
+ "﹒": 8002,
+ "﹔": 8003,
+ "﹕": 8004,
+ "﹖": 8005,
+ "﹗": 8006,
+ "﹙": 8007,
+ "﹚": 8008,
+ "﹝": 8009,
+ "﹞": 8010,
+ "﹡": 8011,
+ "﹣": 8012,
+ "!": 8013,
+ """: 8014,
+ "#": 8015,
+ "$": 8016,
+ "%": 8017,
+ "&": 8018,
+ "'": 8019,
+ "(": 8020,
+ ")": 8021,
+ "*": 8022,
+ "+": 8023,
+ ",": 8024,
+ "-": 8025,
+ ".": 8026,
+ "/": 8027,
+ "0": 8028,
+ "1": 8029,
+ "2": 8030,
+ "3": 8031,
+ "4": 8032,
+ "5": 8033,
+ "6": 8034,
+ "7": 8035,
+ "8": 8036,
+ "9": 8037,
+ ":": 8038,
+ ";": 8039,
+ "<": 8040,
+ "=": 8041,
+ ">": 8042,
+ "?": 8043,
+ "@": 8044,
+ "[": 8045,
+ "\": 8046,
+ "]": 8047,
+ "^": 8048,
+ "_": 8049,
+ "`": 8050,
+ "a": 8051,
+ "b": 8052,
+ "c": 8053,
+ "d": 8054,
+ "e": 8055,
+ "f": 8056,
+ "g": 8057,
+ "h": 8058,
+ "i": 8059,
+ "j": 8060,
+ "k": 8061,
+ "l": 8062,
+ "m": 8063,
+ "n": 8064,
+ "o": 8065,
+ "p": 8066,
+ "q": 8067,
+ "r": 8068,
+ "s": 8069,
+ "t": 8070,
+ "u": 8071,
+ "v": 8072,
+ "w": 8073,
+ "x": 8074,
+ "y": 8075,
+ "z": 8076,
+ "{": 8077,
+ "|": 8078,
+ "}": 8079,
+ "~": 8080,
+ "。": 8081,
+ "「": 8082,
+ "」": 8083,
+ "、": 8084,
+ "・": 8085,
+ "ッ": 8086,
+ "ー": 8087,
+ "イ": 8088,
+ "ク": 8089,
+ "シ": 8090,
+ "ス": 8091,
+ "ト": 8092,
+ "ノ": 8093,
+ "フ": 8094,
+ "ラ": 8095,
+ "ル": 8096,
+ "ン": 8097,
+ "゙": 8098,
+ "゚": 8099,
+ " ̄": 8100,
+ "¥": 8101,
+ "👍": 8102,
+ "🔥": 8103,
+ "😂": 8104,
+ "😎": 8105,
+ "...": 8106,
+ "yam": 8107,
+ "10": 8108,
+ "2017": 8109,
+ "12": 8110,
+ "11": 8111,
+ "2016": 8112,
+ "20": 8113,
+ "30": 8114,
+ "15": 8115,
+ "06": 8116,
+ "lofter": 8117,
+ "##s": 8118,
+ "2015": 8119,
+ "by": 8120,
+ "16": 8121,
+ "14": 8122,
+ "18": 8123,
+ "13": 8124,
+ "24": 8125,
+ "17": 8126,
+ "2014": 8127,
+ "21": 8128,
+ "##0": 8129,
+ "22": 8130,
+ "19": 8131,
+ "25": 8132,
+ "23": 8133,
+ "com": 8134,
+ "100": 8135,
+ "00": 8136,
+ "05": 8137,
+ "2013": 8138,
+ "##a": 8139,
+ "03": 8140,
+ "09": 8141,
+ "08": 8142,
+ "28": 8143,
+ "##2": 8144,
+ "50": 8145,
+ "01": 8146,
+ "04": 8147,
+ "##1": 8148,
+ "27": 8149,
+ "02": 8150,
+ "2012": 8151,
+ "##3": 8152,
+ "26": 8153,
+ "##e": 8154,
+ "07": 8155,
+ "##8": 8156,
+ "##5": 8157,
+ "##6": 8158,
+ "##4": 8159,
+ "##9": 8160,
+ "##7": 8161,
+ "29": 8162,
+ "2011": 8163,
+ "40": 8164,
+ "##t": 8165,
+ "2010": 8166,
+ "##o": 8167,
+ "##d": 8168,
+ "##i": 8169,
+ "2009": 8170,
+ "##n": 8171,
+ "app": 8172,
+ "www": 8173,
+ "the": 8174,
+ "##m": 8175,
+ "31": 8176,
+ "##c": 8177,
+ "##l": 8178,
+ "##y": 8179,
+ "##r": 8180,
+ "##g": 8181,
+ "2008": 8182,
+ "60": 8183,
+ "http": 8184,
+ "200": 8185,
+ "qq": 8186,
+ "##p": 8187,
+ "80": 8188,
+ "##f": 8189,
+ "google": 8190,
+ "pixnet": 8191,
+ "90": 8192,
+ "cookies": 8193,
+ "tripadvisor": 8194,
+ "500": 8195,
+ "##er": 8196,
+ "##k": 8197,
+ "35": 8198,
+ "##h": 8199,
+ "facebook": 8200,
+ "2007": 8201,
+ "2000": 8202,
+ "70": 8203,
+ "##b": 8204,
+ "of": 8205,
+ "##x": 8206,
+ "##u": 8207,
+ "45": 8208,
+ "300": 8209,
+ "iphone": 8210,
+ "32": 8211,
+ "1000": 8212,
+ "2006": 8213,
+ "48": 8214,
+ "ip": 8215,
+ "36": 8216,
+ "in": 8217,
+ "38": 8218,
+ "3d": 8219,
+ "##w": 8220,
+ "##ing": 8221,
+ "55": 8222,
+ "ctrip": 8223,
+ "##on": 8224,
+ "##v": 8225,
+ "33": 8226,
+ "##の": 8227,
+ "to": 8228,
+ "34": 8229,
+ "400": 8230,
+ "id": 8231,
+ "2005": 8232,
+ "it": 8233,
+ "37": 8234,
+ "windows": 8235,
+ "llc": 8236,
+ "top": 8237,
+ "99": 8238,
+ "42": 8239,
+ "39": 8240,
+ "000": 8241,
+ "led": 8242,
+ "at": 8243,
+ "##an": 8244,
+ "41": 8245,
+ "51": 8246,
+ "52": 8247,
+ "46": 8248,
+ "49": 8249,
+ "43": 8250,
+ "53": 8251,
+ "44": 8252,
+ "##z": 8253,
+ "android": 8254,
+ "58": 8255,
+ "and": 8256,
+ "59": 8257,
+ "2004": 8258,
+ "56": 8259,
+ "vr": 8260,
+ "##か": 8261,
+ "5000": 8262,
+ "2003": 8263,
+ "47": 8264,
+ "blogthis": 8265,
+ "twitter": 8266,
+ "54": 8267,
+ "##le": 8268,
+ "150": 8269,
+ "ok": 8270,
+ "2018": 8271,
+ "57": 8272,
+ "75": 8273,
+ "cn": 8274,
+ "no": 8275,
+ "ios": 8276,
+ "##in": 8277,
+ "##mm": 8278,
+ "##00": 8279,
+ "800": 8280,
+ "on": 8281,
+ "te": 8282,
+ "3000": 8283,
+ "65": 8284,
+ "2001": 8285,
+ "360": 8286,
+ "95": 8287,
+ "ig": 8288,
+ "lv": 8289,
+ "120": 8290,
+ "##ng": 8291,
+ "##を": 8292,
+ "##us": 8293,
+ "##に": 8294,
+ "pc": 8295,
+ "てす": 8296,
+ "──": 8297,
+ "600": 8298,
+ "##te": 8299,
+ "85": 8300,
+ "2002": 8301,
+ "88": 8302,
+ "##ed": 8303,
+ "html": 8304,
+ "ncc": 8305,
+ "wifi": 8306,
+ "email": 8307,
+ "64": 8308,
+ "blog": 8309,
+ "is": 8310,
+ "##10": 8311,
+ "##て": 8312,
+ "mail": 8313,
+ "online": 8314,
+ "##al": 8315,
+ "dvd": 8316,
+ "##ic": 8317,
+ "studio": 8318,
+ "##は": 8319,
+ "##℃": 8320,
+ "##ia": 8321,
+ "##と": 8322,
+ "line": 8323,
+ "vip": 8324,
+ "72": 8325,
+ "##q": 8326,
+ "98": 8327,
+ "##ce": 8328,
+ "##en": 8329,
+ "for": 8330,
+ "##is": 8331,
+ "##ra": 8332,
+ "##es": 8333,
+ "##j": 8334,
+ "usb": 8335,
+ "net": 8336,
+ "cp": 8337,
+ "1999": 8338,
+ "asia": 8339,
+ "4g": 8340,
+ "##cm": 8341,
+ "diy": 8342,
+ "new": 8343,
+ "3c": 8344,
+ "##お": 8345,
+ "ta": 8346,
+ "66": 8347,
+ "language": 8348,
+ "vs": 8349,
+ "apple": 8350,
+ "tw": 8351,
+ "86": 8352,
+ "web": 8353,
+ "##ne": 8354,
+ "ipad": 8355,
+ "62": 8356,
+ "you": 8357,
+ "##re": 8358,
+ "101": 8359,
+ "68": 8360,
+ "##tion": 8361,
+ "ps": 8362,
+ "de": 8363,
+ "bt": 8364,
+ "pony": 8365,
+ "atm": 8366,
+ "##2017": 8367,
+ "1998": 8368,
+ "67": 8369,
+ "##ch": 8370,
+ "ceo": 8371,
+ "##or": 8372,
+ "go": 8373,
+ "##na": 8374,
+ "av": 8375,
+ "pro": 8376,
+ "cafe": 8377,
+ "96": 8378,
+ "pinterest": 8379,
+ "97": 8380,
+ "63": 8381,
+ "pixstyleme3c": 8382,
+ "##ta": 8383,
+ "more": 8384,
+ "said": 8385,
+ "##2016": 8386,
+ "1997": 8387,
+ "mp3": 8388,
+ "700": 8389,
+ "##ll": 8390,
+ "nba": 8391,
+ "jun": 8392,
+ "##20": 8393,
+ "92": 8394,
+ "tv": 8395,
+ "1995": 8396,
+ "pm": 8397,
+ "61": 8398,
+ "76": 8399,
+ "nbsp": 8400,
+ "250": 8401,
+ "##ie": 8402,
+ "linux": 8403,
+ "##ma": 8404,
+ "cd": 8405,
+ "110": 8406,
+ "hd": 8407,
+ "##17": 8408,
+ "78": 8409,
+ "##ion": 8410,
+ "77": 8411,
+ "6000": 8412,
+ "am": 8413,
+ "##th": 8414,
+ "##st": 8415,
+ "94": 8416,
+ "##se": 8417,
+ "##et": 8418,
+ "69": 8419,
+ "180": 8420,
+ "gdp": 8421,
+ "my": 8422,
+ "105": 8423,
+ "81": 8424,
+ "abc": 8425,
+ "89": 8426,
+ "flash": 8427,
+ "79": 8428,
+ "one": 8429,
+ "93": 8430,
+ "1990": 8431,
+ "1996": 8432,
+ "##ck": 8433,
+ "gps": 8434,
+ "##も": 8435,
+ "##ly": 8436,
+ "web885": 8437,
+ "106": 8438,
+ "2020": 8439,
+ "91": 8440,
+ "##ge": 8441,
+ "4000": 8442,
+ "1500": 8443,
+ "xd": 8444,
+ "boss": 8445,
+ "isbn": 8446,
+ "1994": 8447,
+ "org": 8448,
+ "##ry": 8449,
+ "me": 8450,
+ "love": 8451,
+ "##11": 8452,
+ "0fork": 8453,
+ "73": 8454,
+ "##12": 8455,
+ "3g": 8456,
+ "##ter": 8457,
+ "##ar": 8458,
+ "71": 8459,
+ "82": 8460,
+ "##la": 8461,
+ "hotel": 8462,
+ "130": 8463,
+ "1970": 8464,
+ "pk": 8465,
+ "83": 8466,
+ "87": 8467,
+ "140": 8468,
+ "ie": 8469,
+ "##os": 8470,
+ "##30": 8471,
+ "##el": 8472,
+ "74": 8473,
+ "##50": 8474,
+ "seo": 8475,
+ "cpu": 8476,
+ "##ml": 8477,
+ "p2p": 8478,
+ "84": 8479,
+ "may": 8480,
+ "##る": 8481,
+ "sun": 8482,
+ "tue": 8483,
+ "internet": 8484,
+ "cc": 8485,
+ "posted": 8486,
+ "youtube": 8487,
+ "##at": 8488,
+ "##ン": 8489,
+ "##man": 8490,
+ "ii": 8491,
+ "##ル": 8492,
+ "##15": 8493,
+ "abs": 8494,
+ "nt": 8495,
+ "pdf": 8496,
+ "yahoo": 8497,
+ "ago": 8498,
+ "1980": 8499,
+ "##it": 8500,
+ "news": 8501,
+ "mac": 8502,
+ "104": 8503,
+ "##てす": 8504,
+ "##me": 8505,
+ "##り": 8506,
+ "java": 8507,
+ "1992": 8508,
+ "spa": 8509,
+ "##de": 8510,
+ "##nt": 8511,
+ "hk": 8512,
+ "all": 8513,
+ "plus": 8514,
+ "la": 8515,
+ "1993": 8516,
+ "##mb": 8517,
+ "##16": 8518,
+ "##ve": 8519,
+ "west": 8520,
+ "##da": 8521,
+ "160": 8522,
+ "air": 8523,
+ "##い": 8524,
+ "##ps": 8525,
+ "から": 8526,
+ "##to": 8527,
+ "1989": 8528,
+ "logo": 8529,
+ "htc": 8530,
+ "php": 8531,
+ "https": 8532,
+ "fi": 8533,
+ "momo": 8534,
+ "##son": 8535,
+ "sat": 8536,
+ "##ke": 8537,
+ "##80": 8538,
+ "ebd": 8539,
+ "suv": 8540,
+ "wi": 8541,
+ "day": 8542,
+ "apk": 8543,
+ "##88": 8544,
+ "##um": 8545,
+ "mv": 8546,
+ "galaxy": 8547,
+ "wiki": 8548,
+ "or": 8549,
+ "brake": 8550,
+ "##ス": 8551,
+ "1200": 8552,
+ "する": 8553,
+ "this": 8554,
+ "1991": 8555,
+ "mon": 8556,
+ "##こ": 8557,
+ "❤2017": 8558,
+ "po": 8559,
+ "##ない": 8560,
+ "javascript": 8561,
+ "life": 8562,
+ "home": 8563,
+ "june": 8564,
+ "##ss": 8565,
+ "system": 8566,
+ "900": 8567,
+ "##ー": 8568,
+ "##0": 8569,
+ "pp": 8570,
+ "1988": 8571,
+ "world": 8572,
+ "fb": 8573,
+ "4k": 8574,
+ "br": 8575,
+ "##as": 8576,
+ "ic": 8577,
+ "ai": 8578,
+ "leonardo": 8579,
+ "safari": 8580,
+ "##60": 8581,
+ "live": 8582,
+ "free": 8583,
+ "xx": 8584,
+ "wed": 8585,
+ "win7": 8586,
+ "kiehl": 8587,
+ "##co": 8588,
+ "lg": 8589,
+ "o2o": 8590,
+ "##go": 8591,
+ "us": 8592,
+ "235": 8593,
+ "1949": 8594,
+ "mm": 8595,
+ "しい": 8596,
+ "vfm": 8597,
+ "kanye": 8598,
+ "##90": 8599,
+ "##2015": 8600,
+ "##id": 8601,
+ "jr": 8602,
+ "##ey": 8603,
+ "123": 8604,
+ "rss": 8605,
+ "##sa": 8606,
+ "##ro": 8607,
+ "##am": 8608,
+ "##no": 8609,
+ "thu": 8610,
+ "fri": 8611,
+ "350": 8612,
+ "##sh": 8613,
+ "##ki": 8614,
+ "103": 8615,
+ "comments": 8616,
+ "name": 8617,
+ "##のて": 8618,
+ "##pe": 8619,
+ "##ine": 8620,
+ "max": 8621,
+ "1987": 8622,
+ "8000": 8623,
+ "uber": 8624,
+ "##mi": 8625,
+ "##ton": 8626,
+ "wordpress": 8627,
+ "office": 8628,
+ "1986": 8629,
+ "1985": 8630,
+ "##ment": 8631,
+ "107": 8632,
+ "bd": 8633,
+ "win10": 8634,
+ "##ld": 8635,
+ "##li": 8636,
+ "gmail": 8637,
+ "bb": 8638,
+ "dior": 8639,
+ "##rs": 8640,
+ "##ri": 8641,
+ "##rd": 8642,
+ "##ます": 8643,
+ "up": 8644,
+ "cad": 8645,
+ "##®": 8646,
+ "dr": 8647,
+ "して": 8648,
+ "read": 8649,
+ "##21": 8650,
+ "をお": 8651,
+ "##io": 8652,
+ "##99": 8653,
+ "url": 8654,
+ "1984": 8655,
+ "pvc": 8656,
+ "paypal": 8657,
+ "show": 8658,
+ "policy": 8659,
+ "##40": 8660,
+ "##ty": 8661,
+ "##18": 8662,
+ "with": 8663,
+ "##★": 8664,
+ "##01": 8665,
+ "txt": 8666,
+ "102": 8667,
+ "##ba": 8668,
+ "dna": 8669,
+ "from": 8670,
+ "post": 8671,
+ "mini": 8672,
+ "ar": 8673,
+ "taiwan": 8674,
+ "john": 8675,
+ "##ga": 8676,
+ "privacy": 8677,
+ "agoda": 8678,
+ "##13": 8679,
+ "##ny": 8680,
+ "word": 8681,
+ "##24": 8682,
+ "##22": 8683,
+ "##by": 8684,
+ "##ur": 8685,
+ "##hz": 8686,
+ "1982": 8687,
+ "##ang": 8688,
+ "265": 8689,
+ "cookie": 8690,
+ "netscape": 8691,
+ "108": 8692,
+ "##ka": 8693,
+ "##~": 8694,
+ "##ad": 8695,
+ "house": 8696,
+ "share": 8697,
+ "note": 8698,
+ "ibm": 8699,
+ "code": 8700,
+ "hello": 8701,
+ "nike": 8702,
+ "sim": 8703,
+ "survey": 8704,
+ "##016": 8705,
+ "1979": 8706,
+ "1950": 8707,
+ "wikia": 8708,
+ "##32": 8709,
+ "##017": 8710,
+ "5g": 8711,
+ "cbc": 8712,
+ "##tor": 8713,
+ "##kg": 8714,
+ "1983": 8715,
+ "##rt": 8716,
+ "##14": 8717,
+ "campaign": 8718,
+ "store": 8719,
+ "2500": 8720,
+ "os": 8721,
+ "##ct": 8722,
+ "##ts": 8723,
+ "##°": 8724,
+ "170": 8725,
+ "api": 8726,
+ "##ns": 8727,
+ "365": 8728,
+ "excel": 8729,
+ "##な": 8730,
+ "##ao": 8731,
+ "##ら": 8732,
+ "##し": 8733,
+ "~~": 8734,
+ "##nd": 8735,
+ "university": 8736,
+ "163": 8737,
+ "には": 8738,
+ "518": 8739,
+ "##70": 8740,
+ "##ya": 8741,
+ "##il": 8742,
+ "##25": 8743,
+ "pierre": 8744,
+ "ipo": 8745,
+ "0020": 8746,
+ "897": 8747,
+ "##23": 8748,
+ "hotels": 8749,
+ "##ian": 8750,
+ "のお": 8751,
+ "125": 8752,
+ "years": 8753,
+ "6606": 8754,
+ "##ers": 8755,
+ "##26": 8756,
+ "high": 8757,
+ "##day": 8758,
+ "time": 8759,
+ "##ay": 8760,
+ "bug": 8761,
+ "##line": 8762,
+ "##く": 8763,
+ "##す": 8764,
+ "##be": 8765,
+ "xp": 8766,
+ "talk2yam": 8767,
+ "yamservice": 8768,
+ "10000": 8769,
+ "coco": 8770,
+ "##dy": 8771,
+ "sony": 8772,
+ "##ies": 8773,
+ "1978": 8774,
+ "microsoft": 8775,
+ "david": 8776,
+ "people": 8777,
+ "##ha": 8778,
+ "1960": 8779,
+ "instagram": 8780,
+ "intel": 8781,
+ "その": 8782,
+ "##ot": 8783,
+ "iso": 8784,
+ "1981": 8785,
+ "##va": 8786,
+ "115": 8787,
+ "##mo": 8788,
+ "##land": 8789,
+ "xxx": 8790,
+ "man": 8791,
+ "co": 8792,
+ "ltxsw": 8793,
+ "##ation": 8794,
+ "baby": 8795,
+ "220": 8796,
+ "##pa": 8797,
+ "##ol": 8798,
+ "1945": 8799,
+ "7000": 8800,
+ "tag": 8801,
+ "450": 8802,
+ "##ue": 8803,
+ "msn": 8804,
+ "##31": 8805,
+ "oppo": 8806,
+ "##ト": 8807,
+ "##ca": 8808,
+ "control": 8809,
+ "##om": 8810,
+ "st": 8811,
+ "chrome": 8812,
+ "##ure": 8813,
+ "##ん": 8814,
+ "be": 8815,
+ "##き": 8816,
+ "lol": 8817,
+ "##19": 8818,
+ "した": 8819,
+ "##bo": 8820,
+ "240": 8821,
+ "lady": 8822,
+ "##100": 8823,
+ "##way": 8824,
+ "##から": 8825,
+ "4600": 8826,
+ "##ko": 8827,
+ "##do": 8828,
+ "##un": 8829,
+ "4s": 8830,
+ "corporation": 8831,
+ "168": 8832,
+ "##ni": 8833,
+ "herme": 8834,
+ "##28": 8835,
+ "cp": 8836,
+ "978": 8837,
+ "##up": 8838,
+ "##06": 8839,
+ "ui": 8840,
+ "##ds": 8841,
+ "ppt": 8842,
+ "admin": 8843,
+ "three": 8844,
+ "します": 8845,
+ "bbc": 8846,
+ "re": 8847,
+ "128": 8848,
+ "##48": 8849,
+ "ca": 8850,
+ "##015": 8851,
+ "##35": 8852,
+ "hp": 8853,
+ "##ee": 8854,
+ "tpp": 8855,
+ "##た": 8856,
+ "##ive": 8857,
+ "××": 8858,
+ "root": 8859,
+ "##cc": 8860,
+ "##ました": 8861,
+ "##ble": 8862,
+ "##ity": 8863,
+ "adobe": 8864,
+ "park": 8865,
+ "114": 8866,
+ "et": 8867,
+ "oled": 8868,
+ "city": 8869,
+ "##ex": 8870,
+ "##ler": 8871,
+ "##ap": 8872,
+ "china": 8873,
+ "##book": 8874,
+ "20000": 8875,
+ "view": 8876,
+ "##ice": 8877,
+ "global": 8878,
+ "##km": 8879,
+ "your": 8880,
+ "hong": 8881,
+ "##mg": 8882,
+ "out": 8883,
+ "##ms": 8884,
+ "ng": 8885,
+ "ebay": 8886,
+ "##29": 8887,
+ "menu": 8888,
+ "ubuntu": 8889,
+ "##cy": 8890,
+ "rom": 8891,
+ "##view": 8892,
+ "open": 8893,
+ "ktv": 8894,
+ "do": 8895,
+ "server": 8896,
+ "##lo": 8897,
+ "if": 8898,
+ "english": 8899,
+ "##ね": 8900,
+ "##5": 8901,
+ "##oo": 8902,
+ "1600": 8903,
+ "##02": 8904,
+ "step1": 8905,
+ "kong": 8906,
+ "club": 8907,
+ "135": 8908,
+ "july": 8909,
+ "inc": 8910,
+ "1976": 8911,
+ "mr": 8912,
+ "hi": 8913,
+ "##net": 8914,
+ "touch": 8915,
+ "##ls": 8916,
+ "##ii": 8917,
+ "michael": 8918,
+ "lcd": 8919,
+ "##05": 8920,
+ "##33": 8921,
+ "phone": 8922,
+ "james": 8923,
+ "step2": 8924,
+ "1300": 8925,
+ "ios9": 8926,
+ "##box": 8927,
+ "dc": 8928,
+ "##2": 8929,
+ "##ley": 8930,
+ "samsung": 8931,
+ "111": 8932,
+ "280": 8933,
+ "pokemon": 8934,
+ "css": 8935,
+ "##ent": 8936,
+ "##les": 8937,
+ "いいえ": 8938,
+ "##1": 8939,
+ "s8": 8940,
+ "atom": 8941,
+ "play": 8942,
+ "bmw": 8943,
+ "##said": 8944,
+ "sa": 8945,
+ "etf": 8946,
+ "ctrl": 8947,
+ "♥yoyo♥": 8948,
+ "##55": 8949,
+ "2025": 8950,
+ "##2014": 8951,
+ "##66": 8952,
+ "adidas": 8953,
+ "amazon": 8954,
+ "1958": 8955,
+ "##ber": 8956,
+ "##ner": 8957,
+ "visa": 8958,
+ "##77": 8959,
+ "##der": 8960,
+ "1800": 8961,
+ "connectivity": 8962,
+ "##hi": 8963,
+ "firefox": 8964,
+ "109": 8965,
+ "118": 8966,
+ "hr": 8967,
+ "so": 8968,
+ "style": 8969,
+ "mark": 8970,
+ "pop": 8971,
+ "ol": 8972,
+ "skip": 8973,
+ "1975": 8974,
+ "as": 8975,
+ "##27": 8976,
+ "##ir": 8977,
+ "##61": 8978,
+ "190": 8979,
+ "mba": 8980,
+ "##う": 8981,
+ "##ai": 8982,
+ "le": 8983,
+ "##ver": 8984,
+ "1900": 8985,
+ "cafe2017": 8986,
+ "lte": 8987,
+ "super": 8988,
+ "113": 8989,
+ "129": 8990,
+ "##ron": 8991,
+ "amd": 8992,
+ "like": 8993,
+ "##☆": 8994,
+ "are": 8995,
+ "##ster": 8996,
+ "we": 8997,
+ "##sk": 8998,
+ "paul": 8999,
+ "data": 9000,
+ "international": 9001,
+ "##ft": 9002,
+ "longchamp": 9003,
+ "ssd": 9004,
+ "good": 9005,
+ "##ート": 9006,
+ "##ti": 9007,
+ "reply": 9008,
+ "##my": 9009,
+ "↓↓↓": 9010,
+ "apr": 9011,
+ "star": 9012,
+ "##ker": 9013,
+ "source": 9014,
+ "136": 9015,
+ "js": 9016,
+ "112": 9017,
+ "get": 9018,
+ "force": 9019,
+ "photo": 9020,
+ "##one": 9021,
+ "126": 9022,
+ "##2013": 9023,
+ "##ow": 9024,
+ "link": 9025,
+ "bbs": 9026,
+ "1972": 9027,
+ "goods": 9028,
+ "##lin": 9029,
+ "python": 9030,
+ "119": 9031,
+ "##ip": 9032,
+ "game": 9033,
+ "##ics": 9034,
+ "##ません": 9035,
+ "blue": 9036,
+ "##●": 9037,
+ "520": 9038,
+ "##45": 9039,
+ "page": 9040,
+ "itunes": 9041,
+ "##03": 9042,
+ "1955": 9043,
+ "260": 9044,
+ "1968": 9045,
+ "gt": 9046,
+ "gif": 9047,
+ "618": 9048,
+ "##ff": 9049,
+ "##47": 9050,
+ "group": 9051,
+ "くたさい": 9052,
+ "about": 9053,
+ "bar": 9054,
+ "ganji": 9055,
+ "##nce": 9056,
+ "music": 9057,
+ "lee": 9058,
+ "not": 9059,
+ "1977": 9060,
+ "1971": 9061,
+ "1973": 9062,
+ "##per": 9063,
+ "an": 9064,
+ "faq": 9065,
+ "comment": 9066,
+ "##って": 9067,
+ "days": 9068,
+ "##ock": 9069,
+ "116": 9070,
+ "##bs": 9071,
+ "1974": 9072,
+ "1969": 9073,
+ "v1": 9074,
+ "player": 9075,
+ "1956": 9076,
+ "xbox": 9077,
+ "sql": 9078,
+ "fm": 9079,
+ "f1": 9080,
+ "139": 9081,
+ "##ah": 9082,
+ "210": 9083,
+ "##lv": 9084,
+ "##mp": 9085,
+ "##000": 9086,
+ "melody": 9087,
+ "1957": 9088,
+ "##3": 9089,
+ "550": 9090,
+ "17life": 9091,
+ "199": 9092,
+ "1966": 9093,
+ "xml": 9094,
+ "market": 9095,
+ "##au": 9096,
+ "##71": 9097,
+ "999": 9098,
+ "##04": 9099,
+ "what": 9100,
+ "gl": 9101,
+ "##95": 9102,
+ "##age": 9103,
+ "tips": 9104,
+ "##68": 9105,
+ "book": 9106,
+ "##ting": 9107,
+ "mysql": 9108,
+ "can": 9109,
+ "1959": 9110,
+ "230": 9111,
+ "##ung": 9112,
+ "wonderland": 9113,
+ "watch": 9114,
+ "10℃": 9115,
+ "##ction": 9116,
+ "9000": 9117,
+ "mar": 9118,
+ "mobile": 9119,
+ "1946": 9120,
+ "1962": 9121,
+ "article": 9122,
+ "##db": 9123,
+ "part": 9124,
+ "▲top": 9125,
+ "party": 9126,
+ "って": 9127,
+ "1967": 9128,
+ "1964": 9129,
+ "1948": 9130,
+ "##07": 9131,
+ "##ore": 9132,
+ "##op": 9133,
+ "この": 9134,
+ "dj": 9135,
+ "##78": 9136,
+ "##38": 9137,
+ "010": 9138,
+ "main": 9139,
+ "225": 9140,
+ "1965": 9141,
+ "##ong": 9142,
+ "art": 9143,
+ "320": 9144,
+ "ad": 9145,
+ "134": 9146,
+ "020": 9147,
+ "##73": 9148,
+ "117": 9149,
+ "pm2": 9150,
+ "japan": 9151,
+ "228": 9152,
+ "##08": 9153,
+ "ts": 9154,
+ "1963": 9155,
+ "##ica": 9156,
+ "der": 9157,
+ "sm": 9158,
+ "##36": 9159,
+ "2019": 9160,
+ "##wa": 9161,
+ "ct": 9162,
+ "##7": 9163,
+ "##や": 9164,
+ "##64": 9165,
+ "1937": 9166,
+ "homemesh": 9167,
+ "search": 9168,
+ "##85": 9169,
+ "##れは": 9170,
+ "##tv": 9171,
+ "##di": 9172,
+ "macbook": 9173,
+ "##9": 9174,
+ "##くたさい": 9175,
+ "service": 9176,
+ "##♥": 9177,
+ "type": 9178,
+ "った": 9179,
+ "750": 9180,
+ "##ier": 9181,
+ "##si": 9182,
+ "##75": 9183,
+ "##います": 9184,
+ "##ok": 9185,
+ "best": 9186,
+ "##ット": 9187,
+ "goris": 9188,
+ "lock": 9189,
+ "##った": 9190,
+ "cf": 9191,
+ "3m": 9192,
+ "big": 9193,
+ "##ut": 9194,
+ "ftp": 9195,
+ "carol": 9196,
+ "##vi": 9197,
+ "10": 9198,
+ "1961": 9199,
+ "happy": 9200,
+ "sd": 9201,
+ "##ac": 9202,
+ "122": 9203,
+ "anti": 9204,
+ "pe": 9205,
+ "cnn": 9206,
+ "iii": 9207,
+ "1920": 9208,
+ "138": 9209,
+ "##ラ": 9210,
+ "1940": 9211,
+ "esp": 9212,
+ "jan": 9213,
+ "tags": 9214,
+ "##98": 9215,
+ "##51": 9216,
+ "august": 9217,
+ "vol": 9218,
+ "##86": 9219,
+ "154": 9220,
+ "##™": 9221,
+ "##fs": 9222,
+ "##れ": 9223,
+ "##sion": 9224,
+ "design": 9225,
+ "ac": 9226,
+ "##ム": 9227,
+ "press": 9228,
+ "jordan": 9229,
+ "ppp": 9230,
+ "that": 9231,
+ "key": 9232,
+ "check": 9233,
+ "##6": 9234,
+ "##tt": 9235,
+ "##㎡": 9236,
+ "1080p": 9237,
+ "##lt": 9238,
+ "power": 9239,
+ "##42": 9240,
+ "1952": 9241,
+ "##bc": 9242,
+ "vivi": 9243,
+ "##ック": 9244,
+ "he": 9245,
+ "133": 9246,
+ "121": 9247,
+ "jpg": 9248,
+ "##rry": 9249,
+ "201": 9250,
+ "175": 9251,
+ "3500": 9252,
+ "1947": 9253,
+ "nb": 9254,
+ "##ted": 9255,
+ "##rn": 9256,
+ "しています": 9257,
+ "1954": 9258,
+ "usd": 9259,
+ "##t00": 9260,
+ "master": 9261,
+ "##ンク": 9262,
+ "001": 9263,
+ "model": 9264,
+ "##58": 9265,
+ "al": 9266,
+ "##09": 9267,
+ "1953": 9268,
+ "##34": 9269,
+ "ram": 9270,
+ "goo": 9271,
+ "ても": 9272,
+ "##ui": 9273,
+ "127": 9274,
+ "1930": 9275,
+ "red": 9276,
+ "##ary": 9277,
+ "rpg": 9278,
+ "item": 9279,
+ "##pm": 9280,
+ "##41": 9281,
+ "270": 9282,
+ "##za": 9283,
+ "project": 9284,
+ "##2012": 9285,
+ "hot": 9286,
+ "td": 9287,
+ "blogabstract": 9288,
+ "##ger": 9289,
+ "##62": 9290,
+ "650": 9291,
+ "##44": 9292,
+ "gr2": 9293,
+ "##します": 9294,
+ "##m": 9295,
+ "black": 9296,
+ "electronic": 9297,
+ "nfc": 9298,
+ "year": 9299,
+ "asus": 9300,
+ "また": 9301,
+ "html5": 9302,
+ "cindy": 9303,
+ "##hd": 9304,
+ "m3": 9305,
+ "132": 9306,
+ "esc": 9307,
+ "##od": 9308,
+ "booking": 9309,
+ "##53": 9310,
+ "fed": 9311,
+ "tvb": 9312,
+ "##81": 9313,
+ "##ina": 9314,
+ "mit": 9315,
+ "165": 9316,
+ "##いる": 9317,
+ "chan": 9318,
+ "192": 9319,
+ "distribution": 9320,
+ "next": 9321,
+ "になる": 9322,
+ "peter": 9323,
+ "bios": 9324,
+ "steam": 9325,
+ "cm": 9326,
+ "1941": 9327,
+ "にも": 9328,
+ "pk10": 9329,
+ "##ix": 9330,
+ "##65": 9331,
+ "##91": 9332,
+ "dec": 9333,
+ "nasa": 9334,
+ "##ana": 9335,
+ "icecat": 9336,
+ "00z": 9337,
+ "b1": 9338,
+ "will": 9339,
+ "##46": 9340,
+ "li": 9341,
+ "se": 9342,
+ "##ji": 9343,
+ "##み": 9344,
+ "##ard": 9345,
+ "oct": 9346,
+ "##ain": 9347,
+ "jp": 9348,
+ "##ze": 9349,
+ "##bi": 9350,
+ "cio": 9351,
+ "##56": 9352,
+ "smart": 9353,
+ "h5": 9354,
+ "##39": 9355,
+ "##port": 9356,
+ "curve": 9357,
+ "vpn": 9358,
+ "##nm": 9359,
+ "##dia": 9360,
+ "utc": 9361,
+ "##あり": 9362,
+ "12345678910": 9363,
+ "##52": 9364,
+ "rmvb": 9365,
+ "chanel": 9366,
+ "a4": 9367,
+ "miss": 9368,
+ "##and": 9369,
+ "##im": 9370,
+ "media": 9371,
+ "who": 9372,
+ "##63": 9373,
+ "she": 9374,
+ "girl": 9375,
+ "5s": 9376,
+ "124": 9377,
+ "vera": 9378,
+ "##して": 9379,
+ "class": 9380,
+ "vivo": 9381,
+ "king": 9382,
+ "##フ": 9383,
+ "##ei": 9384,
+ "national": 9385,
+ "ab": 9386,
+ "1951": 9387,
+ "5cm": 9388,
+ "888": 9389,
+ "145": 9390,
+ "ipod": 9391,
+ "ap": 9392,
+ "1100": 9393,
+ "5mm": 9394,
+ "211": 9395,
+ "ms": 9396,
+ "2756": 9397,
+ "##69": 9398,
+ "mp4": 9399,
+ "msci": 9400,
+ "##po": 9401,
+ "##89": 9402,
+ "131": 9403,
+ "mg": 9404,
+ "index": 9405,
+ "380": 9406,
+ "##bit": 9407,
+ "##out": 9408,
+ "##zz": 9409,
+ "##97": 9410,
+ "##67": 9411,
+ "158": 9412,
+ "apec": 9413,
+ "##8": 9414,
+ "photoshop": 9415,
+ "opec": 9416,
+ "¥799": 9417,
+ "ては": 9418,
+ "##96": 9419,
+ "##tes": 9420,
+ "##ast": 9421,
+ "2g": 9422,
+ "○○": 9423,
+ "##ール": 9424,
+ "¥2899": 9425,
+ "##ling": 9426,
+ "##よ": 9427,
+ "##ory": 9428,
+ "1938": 9429,
+ "##ical": 9430,
+ "kitty": 9431,
+ "content": 9432,
+ "##43": 9433,
+ "step3": 9434,
+ "##cn": 9435,
+ "win8": 9436,
+ "155": 9437,
+ "vc": 9438,
+ "1400": 9439,
+ "iphone7": 9440,
+ "robert": 9441,
+ "##した": 9442,
+ "tcl": 9443,
+ "137": 9444,
+ "beauty": 9445,
+ "##87": 9446,
+ "en": 9447,
+ "dollars": 9448,
+ "##ys": 9449,
+ "##oc": 9450,
+ "step": 9451,
+ "pay": 9452,
+ "yy": 9453,
+ "a1": 9454,
+ "##2011": 9455,
+ "##lly": 9456,
+ "##ks": 9457,
+ "##♪": 9458,
+ "1939": 9459,
+ "188": 9460,
+ "download": 9461,
+ "1944": 9462,
+ "sep": 9463,
+ "exe": 9464,
+ "ph": 9465,
+ "います": 9466,
+ "school": 9467,
+ "gb": 9468,
+ "center": 9469,
+ "pr": 9470,
+ "street": 9471,
+ "##board": 9472,
+ "uv": 9473,
+ "##37": 9474,
+ "##lan": 9475,
+ "winrar": 9476,
+ "##que": 9477,
+ "##ua": 9478,
+ "##com": 9479,
+ "1942": 9480,
+ "1936": 9481,
+ "480": 9482,
+ "gpu": 9483,
+ "##4": 9484,
+ "ettoday": 9485,
+ "fu": 9486,
+ "tom": 9487,
+ "##54": 9488,
+ "##ren": 9489,
+ "##via": 9490,
+ "149": 9491,
+ "##72": 9492,
+ "b2b": 9493,
+ "144": 9494,
+ "##79": 9495,
+ "##tch": 9496,
+ "rose": 9497,
+ "arm": 9498,
+ "mb": 9499,
+ "##49": 9500,
+ "##ial": 9501,
+ "##nn": 9502,
+ "nvidia": 9503,
+ "step4": 9504,
+ "mvp": 9505,
+ "00㎡": 9506,
+ "york": 9507,
+ "156": 9508,
+ "##イ": 9509,
+ "how": 9510,
+ "cpi": 9511,
+ "591": 9512,
+ "2765": 9513,
+ "gov": 9514,
+ "kg": 9515,
+ "joe": 9516,
+ "##xx": 9517,
+ "mandy": 9518,
+ "pa": 9519,
+ "##ser": 9520,
+ "copyright": 9521,
+ "fashion": 9522,
+ "1935": 9523,
+ "don": 9524,
+ "##け": 9525,
+ "ecu": 9526,
+ "##ist": 9527,
+ "##art": 9528,
+ "erp": 9529,
+ "wap": 9530,
+ "have": 9531,
+ "##lm": 9532,
+ "talk": 9533,
+ "##ek": 9534,
+ "##ning": 9535,
+ "##if": 9536,
+ "ch": 9537,
+ "##ite": 9538,
+ "video": 9539,
+ "1943": 9540,
+ "cs": 9541,
+ "san": 9542,
+ "iot": 9543,
+ "look": 9544,
+ "##84": 9545,
+ "##2010": 9546,
+ "##ku": 9547,
+ "october": 9548,
+ "##ux": 9549,
+ "trump": 9550,
+ "##hs": 9551,
+ "##ide": 9552,
+ "box": 9553,
+ "141": 9554,
+ "first": 9555,
+ "##ins": 9556,
+ "april": 9557,
+ "##ight": 9558,
+ "##83": 9559,
+ "185": 9560,
+ "angel": 9561,
+ "protected": 9562,
+ "aa": 9563,
+ "151": 9564,
+ "162": 9565,
+ "x1": 9566,
+ "m2": 9567,
+ "##fe": 9568,
+ "##×": 9569,
+ "##ho": 9570,
+ "size": 9571,
+ "143": 9572,
+ "min": 9573,
+ "ofo": 9574,
+ "fun": 9575,
+ "gomaji": 9576,
+ "ex": 9577,
+ "hdmi": 9578,
+ "food": 9579,
+ "dns": 9580,
+ "march": 9581,
+ "chris": 9582,
+ "kevin": 9583,
+ "##のか": 9584,
+ "##lla": 9585,
+ "##pp": 9586,
+ "##ec": 9587,
+ "ag": 9588,
+ "ems": 9589,
+ "6s": 9590,
+ "720p": 9591,
+ "##rm": 9592,
+ "##ham": 9593,
+ "off": 9594,
+ "##92": 9595,
+ "asp": 9596,
+ "team": 9597,
+ "fandom": 9598,
+ "ed": 9599,
+ "299": 9600,
+ "▌♥": 9601,
+ "##ell": 9602,
+ "info": 9603,
+ "されています": 9604,
+ "##82": 9605,
+ "sina": 9606,
+ "4066": 9607,
+ "161": 9608,
+ "##able": 9609,
+ "##ctor": 9610,
+ "330": 9611,
+ "399": 9612,
+ "315": 9613,
+ "dll": 9614,
+ "rights": 9615,
+ "ltd": 9616,
+ "idc": 9617,
+ "jul": 9618,
+ "3kg": 9619,
+ "1927": 9620,
+ "142": 9621,
+ "ma": 9622,
+ "surface": 9623,
+ "##76": 9624,
+ "##ク": 9625,
+ "~~~": 9626,
+ "304": 9627,
+ "mall": 9628,
+ "eps": 9629,
+ "146": 9630,
+ "green": 9631,
+ "##59": 9632,
+ "map": 9633,
+ "space": 9634,
+ "donald": 9635,
+ "v2": 9636,
+ "sodu": 9637,
+ "##light": 9638,
+ "1931": 9639,
+ "148": 9640,
+ "1700": 9641,
+ "まて": 9642,
+ "310": 9643,
+ "reserved": 9644,
+ "htm": 9645,
+ "##han": 9646,
+ "##57": 9647,
+ "2d": 9648,
+ "178": 9649,
+ "mod": 9650,
+ "##ise": 9651,
+ "##tions": 9652,
+ "152": 9653,
+ "ti": 9654,
+ "##shi": 9655,
+ "doc": 9656,
+ "1933": 9657,
+ "icp": 9658,
+ "055": 9659,
+ "wang": 9660,
+ "##ram": 9661,
+ "shopping": 9662,
+ "aug": 9663,
+ "##pi": 9664,
+ "##well": 9665,
+ "now": 9666,
+ "wam": 9667,
+ "b2": 9668,
+ "からお": 9669,
+ "##hu": 9670,
+ "236": 9671,
+ "1928": 9672,
+ "##gb": 9673,
+ "266": 9674,
+ "f2": 9675,
+ "##93": 9676,
+ "153": 9677,
+ "mix": 9678,
+ "##ef": 9679,
+ "##uan": 9680,
+ "bwl": 9681,
+ "##plus": 9682,
+ "##res": 9683,
+ "core": 9684,
+ "##ess": 9685,
+ "tea": 9686,
+ "5℃": 9687,
+ "hktvmall": 9688,
+ "nhk": 9689,
+ "##ate": 9690,
+ "list": 9691,
+ "##ese": 9692,
+ "301": 9693,
+ "feb": 9694,
+ "4m": 9695,
+ "inn": 9696,
+ "ての": 9697,
+ "nov": 9698,
+ "159": 9699,
+ "12345": 9700,
+ "daniel": 9701,
+ "##ci": 9702,
+ "pass": 9703,
+ "##bet": 9704,
+ "##nk": 9705,
+ "coffee": 9706,
+ "202": 9707,
+ "ssl": 9708,
+ "airbnb": 9709,
+ "##ute": 9710,
+ "fbi": 9711,
+ "woshipm": 9712,
+ "skype": 9713,
+ "ea": 9714,
+ "cg": 9715,
+ "sp": 9716,
+ "##fc": 9717,
+ "##www": 9718,
+ "yes": 9719,
+ "edge": 9720,
+ "alt": 9721,
+ "007": 9722,
+ "##94": 9723,
+ "fpga": 9724,
+ "##ght": 9725,
+ "##gs": 9726,
+ "iso9001": 9727,
+ "さい": 9728,
+ "##ile": 9729,
+ "##wood": 9730,
+ "##uo": 9731,
+ "image": 9732,
+ "lin": 9733,
+ "icon": 9734,
+ "american": 9735,
+ "##em": 9736,
+ "1932": 9737,
+ "set": 9738,
+ "says": 9739,
+ "##king": 9740,
+ "##tive": 9741,
+ "blogger": 9742,
+ "##74": 9743,
+ "なと": 9744,
+ "256": 9745,
+ "147": 9746,
+ "##ox": 9747,
+ "##zy": 9748,
+ "##red": 9749,
+ "##ium": 9750,
+ "##lf": 9751,
+ "nokia": 9752,
+ "claire": 9753,
+ "##リ": 9754,
+ "##ding": 9755,
+ "november": 9756,
+ "lohas": 9757,
+ "##500": 9758,
+ "##tic": 9759,
+ "##マ": 9760,
+ "##cs": 9761,
+ "##ある": 9762,
+ "##che": 9763,
+ "##ire": 9764,
+ "##gy": 9765,
+ "##ult": 9766,
+ "db": 9767,
+ "january": 9768,
+ "win": 9769,
+ "##カ": 9770,
+ "166": 9771,
+ "road": 9772,
+ "ptt": 9773,
+ "##ま": 9774,
+ "##つ": 9775,
+ "198": 9776,
+ "##fa": 9777,
+ "##mer": 9778,
+ "anna": 9779,
+ "pchome": 9780,
+ "はい": 9781,
+ "udn": 9782,
+ "ef": 9783,
+ "420": 9784,
+ "##time": 9785,
+ "##tte": 9786,
+ "2030": 9787,
+ "##ア": 9788,
+ "g20": 9789,
+ "white": 9790,
+ "かかります": 9791,
+ "1929": 9792,
+ "308": 9793,
+ "garden": 9794,
+ "eleven": 9795,
+ "di": 9796,
+ "##おります": 9797,
+ "chen": 9798,
+ "309b": 9799,
+ "777": 9800,
+ "172": 9801,
+ "young": 9802,
+ "cosplay": 9803,
+ "ちてない": 9804,
+ "4500": 9805,
+ "bat": 9806,
+ "##123": 9807,
+ "##tra": 9808,
+ "##ては": 9809,
+ "kindle": 9810,
+ "npc": 9811,
+ "steve": 9812,
+ "etc": 9813,
+ "##ern": 9814,
+ "##|": 9815,
+ "call": 9816,
+ "xperia": 9817,
+ "ces": 9818,
+ "travel": 9819,
+ "sk": 9820,
+ "s7": 9821,
+ "##ous": 9822,
+ "1934": 9823,
+ "##int": 9824,
+ "みいたたけます": 9825,
+ "183": 9826,
+ "edu": 9827,
+ "file": 9828,
+ "cho": 9829,
+ "qr": 9830,
+ "##car": 9831,
+ "##our": 9832,
+ "186": 9833,
+ "##ant": 9834,
+ "##d": 9835,
+ "eric": 9836,
+ "1914": 9837,
+ "rends": 9838,
+ "##jo": 9839,
+ "##する": 9840,
+ "mastercard": 9841,
+ "##2000": 9842,
+ "kb": 9843,
+ "##min": 9844,
+ "290": 9845,
+ "##ino": 9846,
+ "vista": 9847,
+ "##ris": 9848,
+ "##ud": 9849,
+ "jack": 9850,
+ "2400": 9851,
+ "##set": 9852,
+ "169": 9853,
+ "pos": 9854,
+ "1912": 9855,
+ "##her": 9856,
+ "##ou": 9857,
+ "taipei": 9858,
+ "しく": 9859,
+ "205": 9860,
+ "beta": 9861,
+ "##ませんか": 9862,
+ "232": 9863,
+ "##fi": 9864,
+ "express": 9865,
+ "255": 9866,
+ "body": 9867,
+ "##ill": 9868,
+ "aphojoy": 9869,
+ "user": 9870,
+ "december": 9871,
+ "meiki": 9872,
+ "##ick": 9873,
+ "tweet": 9874,
+ "richard": 9875,
+ "##av": 9876,
+ "##ᆫ": 9877,
+ "iphone6": 9878,
+ "##dd": 9879,
+ "ちてすか": 9880,
+ "views": 9881,
+ "##mark": 9882,
+ "321": 9883,
+ "pd": 9884,
+ "##00": 9885,
+ "times": 9886,
+ "##▲": 9887,
+ "level": 9888,
+ "##ash": 9889,
+ "10g": 9890,
+ "point": 9891,
+ "5l": 9892,
+ "##ome": 9893,
+ "208": 9894,
+ "koreanmall": 9895,
+ "##ak": 9896,
+ "george": 9897,
+ "q2": 9898,
+ "206": 9899,
+ "wma": 9900,
+ "tcp": 9901,
+ "##200": 9902,
+ "スタッフ": 9903,
+ "full": 9904,
+ "mlb": 9905,
+ "##lle": 9906,
+ "##watch": 9907,
+ "tm": 9908,
+ "run": 9909,
+ "179": 9910,
+ "911": 9911,
+ "smith": 9912,
+ "business": 9913,
+ "##und": 9914,
+ "1919": 9915,
+ "color": 9916,
+ "##tal": 9917,
+ "222": 9918,
+ "171": 9919,
+ "##less": 9920,
+ "moon": 9921,
+ "4399": 9922,
+ "##rl": 9923,
+ "update": 9924,
+ "pcb": 9925,
+ "shop": 9926,
+ "499": 9927,
+ "157": 9928,
+ "little": 9929,
+ "なし": 9930,
+ "end": 9931,
+ "##mhz": 9932,
+ "van": 9933,
+ "dsp": 9934,
+ "easy": 9935,
+ "660": 9936,
+ "##house": 9937,
+ "##key": 9938,
+ "history": 9939,
+ "##o": 9940,
+ "oh": 9941,
+ "##001": 9942,
+ "##hy": 9943,
+ "##web": 9944,
+ "oem": 9945,
+ "let": 9946,
+ "was": 9947,
+ "##2009": 9948,
+ "##gg": 9949,
+ "review": 9950,
+ "##wan": 9951,
+ "182": 9952,
+ "##°c": 9953,
+ "203": 9954,
+ "uc": 9955,
+ "title": 9956,
+ "##val": 9957,
+ "united": 9958,
+ "233": 9959,
+ "2021": 9960,
+ "##ons": 9961,
+ "doi": 9962,
+ "trivago": 9963,
+ "overdope": 9964,
+ "sbs": 9965,
+ "##ance": 9966,
+ "##ち": 9967,
+ "grand": 9968,
+ "special": 9969,
+ "573032185": 9970,
+ "imf": 9971,
+ "216": 9972,
+ "wx17house": 9973,
+ "##so": 9974,
+ "##ーム": 9975,
+ "audi": 9976,
+ "##he": 9977,
+ "london": 9978,
+ "william": 9979,
+ "##rp": 9980,
+ "##ake": 9981,
+ "science": 9982,
+ "beach": 9983,
+ "cfa": 9984,
+ "amp": 9985,
+ "ps4": 9986,
+ "880": 9987,
+ "##800": 9988,
+ "##link": 9989,
+ "##hp": 9990,
+ "crm": 9991,
+ "ferragamo": 9992,
+ "bell": 9993,
+ "make": 9994,
+ "##eng": 9995,
+ "195": 9996,
+ "under": 9997,
+ "zh": 9998,
+ "photos": 9999,
+ "2300": 10000,
+ "##style": 10001,
+ "##ント": 10002,
+ "via": 10003,
+ "176": 10004,
+ "da": 10005,
+ "##gi": 10006,
+ "company": 10007,
+ "i7": 10008,
+ "##ray": 10009,
+ "thomas": 10010,
+ "370": 10011,
+ "ufo": 10012,
+ "i5": 10013,
+ "##max": 10014,
+ "plc": 10015,
+ "ben": 10016,
+ "back": 10017,
+ "research": 10018,
+ "8g": 10019,
+ "173": 10020,
+ "mike": 10021,
+ "##pc": 10022,
+ "##ッフ": 10023,
+ "september": 10024,
+ "189": 10025,
+ "##ace": 10026,
+ "vps": 10027,
+ "february": 10028,
+ "167": 10029,
+ "pantos": 10030,
+ "wp": 10031,
+ "lisa": 10032,
+ "1921": 10033,
+ "★★": 10034,
+ "jquery": 10035,
+ "night": 10036,
+ "long": 10037,
+ "offer": 10038,
+ "##berg": 10039,
+ "##news": 10040,
+ "1911": 10041,
+ "##いて": 10042,
+ "ray": 10043,
+ "fks": 10044,
+ "wto": 10045,
+ "せます": 10046,
+ "over": 10047,
+ "164": 10048,
+ "340": 10049,
+ "##all": 10050,
+ "##rus": 10051,
+ "1924": 10052,
+ "##888": 10053,
+ "##works": 10054,
+ "blogtitle": 10055,
+ "loftpermalink": 10056,
+ "##→": 10057,
+ "187": 10058,
+ "martin": 10059,
+ "test": 10060,
+ "ling": 10061,
+ "km": 10062,
+ "##め": 10063,
+ "15000": 10064,
+ "fda": 10065,
+ "v3": 10066,
+ "##ja": 10067,
+ "##ロ": 10068,
+ "wedding": 10069,
+ "かある": 10070,
+ "outlet": 10071,
+ "family": 10072,
+ "##ea": 10073,
+ "をこ": 10074,
+ "##top": 10075,
+ "story": 10076,
+ "##ness": 10077,
+ "salvatore": 10078,
+ "##lu": 10079,
+ "204": 10080,
+ "swift": 10081,
+ "215": 10082,
+ "room": 10083,
+ "している": 10084,
+ "oracle": 10085,
+ "##ul": 10086,
+ "1925": 10087,
+ "sam": 10088,
+ "b2c": 10089,
+ "week": 10090,
+ "pi": 10091,
+ "rock": 10092,
+ "##のは": 10093,
+ "##a": 10094,
+ "##けと": 10095,
+ "##ean": 10096,
+ "##300": 10097,
+ "##gle": 10098,
+ "cctv": 10099,
+ "after": 10100,
+ "chinese": 10101,
+ "##back": 10102,
+ "powered": 10103,
+ "x2": 10104,
+ "##tan": 10105,
+ "1918": 10106,
+ "##nes": 10107,
+ "##イン": 10108,
+ "canon": 10109,
+ "only": 10110,
+ "181": 10111,
+ "##zi": 10112,
+ "##las": 10113,
+ "say": 10114,
+ "##oe": 10115,
+ "184": 10116,
+ "##sd": 10117,
+ "221": 10118,
+ "##bot": 10119,
+ "##world": 10120,
+ "##zo": 10121,
+ "sky": 10122,
+ "made": 10123,
+ "top100": 10124,
+ "just": 10125,
+ "1926": 10126,
+ "pmi": 10127,
+ "802": 10128,
+ "234": 10129,
+ "gap": 10130,
+ "##vr": 10131,
+ "177": 10132,
+ "les": 10133,
+ "174": 10134,
+ "▲topoct": 10135,
+ "ball": 10136,
+ "vogue": 10137,
+ "vi": 10138,
+ "ing": 10139,
+ "ofweek": 10140,
+ "cos": 10141,
+ "##list": 10142,
+ "##ort": 10143,
+ "▲topmay": 10144,
+ "##なら": 10145,
+ "##lon": 10146,
+ "として": 10147,
+ "last": 10148,
+ "##tc": 10149,
+ "##of": 10150,
+ "##bus": 10151,
+ "##gen": 10152,
+ "real": 10153,
+ "eva": 10154,
+ "##コ": 10155,
+ "a3": 10156,
+ "nas": 10157,
+ "##lie": 10158,
+ "##ria": 10159,
+ "##coin": 10160,
+ "##bt": 10161,
+ "▲topapr": 10162,
+ "his": 10163,
+ "212": 10164,
+ "cat": 10165,
+ "nata": 10166,
+ "vive": 10167,
+ "health": 10168,
+ "⋯⋯": 10169,
+ "drive": 10170,
+ "sir": 10171,
+ "▲topmar": 10172,
+ "du": 10173,
+ "cup": 10174,
+ "##カー": 10175,
+ "##ook": 10176,
+ "##よう": 10177,
+ "##sy": 10178,
+ "alex": 10179,
+ "msg": 10180,
+ "tour": 10181,
+ "しました": 10182,
+ "3ce": 10183,
+ "##word": 10184,
+ "193": 10185,
+ "ebooks": 10186,
+ "r8": 10187,
+ "block": 10188,
+ "318": 10189,
+ "##より": 10190,
+ "2200": 10191,
+ "nice": 10192,
+ "pvp": 10193,
+ "207": 10194,
+ "months": 10195,
+ "1905": 10196,
+ "rewards": 10197,
+ "##ther": 10198,
+ "1917": 10199,
+ "0800": 10200,
+ "##xi": 10201,
+ "##チ": 10202,
+ "##sc": 10203,
+ "micro": 10204,
+ "850": 10205,
+ "gg": 10206,
+ "blogfp": 10207,
+ "op": 10208,
+ "1922": 10209,
+ "daily": 10210,
+ "m1": 10211,
+ "264": 10212,
+ "true": 10213,
+ "##bb": 10214,
+ "ml": 10215,
+ "##tar": 10216,
+ "##のお": 10217,
+ "##ky": 10218,
+ "anthony": 10219,
+ "196": 10220,
+ "253": 10221,
+ "##yo": 10222,
+ "state": 10223,
+ "218": 10224,
+ "##ara": 10225,
+ "##aa": 10226,
+ "##rc": 10227,
+ "##tz": 10228,
+ "##ston": 10229,
+ "より": 10230,
+ "gear": 10231,
+ "##eo": 10232,
+ "##ade": 10233,
+ "ge": 10234,
+ "see": 10235,
+ "1923": 10236,
+ "##win": 10237,
+ "##ura": 10238,
+ "ss": 10239,
+ "heart": 10240,
+ "##den": 10241,
+ "##ita": 10242,
+ "down": 10243,
+ "##sm": 10244,
+ "el": 10245,
+ "png": 10246,
+ "2100": 10247,
+ "610": 10248,
+ "rakuten": 10249,
+ "whatsapp": 10250,
+ "bay": 10251,
+ "dream": 10252,
+ "add": 10253,
+ "##use": 10254,
+ "680": 10255,
+ "311": 10256,
+ "pad": 10257,
+ "gucci": 10258,
+ "mpv": 10259,
+ "##ode": 10260,
+ "##fo": 10261,
+ "island": 10262,
+ "▲topjun": 10263,
+ "##▼": 10264,
+ "223": 10265,
+ "jason": 10266,
+ "214": 10267,
+ "chicago": 10268,
+ "##❤": 10269,
+ "しの": 10270,
+ "##hone": 10271,
+ "io": 10272,
+ "##れる": 10273,
+ "##ことか": 10274,
+ "sogo": 10275,
+ "be2": 10276,
+ "##ology": 10277,
+ "990": 10278,
+ "cloud": 10279,
+ "vcd": 10280,
+ "##con": 10281,
+ "2~3": 10282,
+ "##ford": 10283,
+ "##joy": 10284,
+ "##kb": 10285,
+ "##こさいます": 10286,
+ "##rade": 10287,
+ "but": 10288,
+ "##ach": 10289,
+ "docker": 10290,
+ "##ful": 10291,
+ "rfid": 10292,
+ "ul": 10293,
+ "##ase": 10294,
+ "hit": 10295,
+ "ford": 10296,
+ "##star": 10297,
+ "580": 10298,
+ "##○": 10299,
+ "11": 10300,
+ "a2": 10301,
+ "sdk": 10302,
+ "reading": 10303,
+ "edited": 10304,
+ "##are": 10305,
+ "cmos": 10306,
+ "##mc": 10307,
+ "238": 10308,
+ "siri": 10309,
+ "light": 10310,
+ "##ella": 10311,
+ "##ため": 10312,
+ "bloomberg": 10313,
+ "##read": 10314,
+ "pizza": 10315,
+ "##ison": 10316,
+ "jimmy": 10317,
+ "##vm": 10318,
+ "college": 10319,
+ "node": 10320,
+ "journal": 10321,
+ "ba": 10322,
+ "18k": 10323,
+ "##play": 10324,
+ "245": 10325,
+ "##cer": 10326,
+ "20": 10327,
+ "magic": 10328,
+ "##yu": 10329,
+ "191": 10330,
+ "jump": 10331,
+ "288": 10332,
+ "tt": 10333,
+ "##ings": 10334,
+ "asr": 10335,
+ "##lia": 10336,
+ "3200": 10337,
+ "step5": 10338,
+ "network": 10339,
+ "##cd": 10340,
+ "mc": 10341,
+ "いします": 10342,
+ "1234": 10343,
+ "pixstyleme": 10344,
+ "273": 10345,
+ "##600": 10346,
+ "2800": 10347,
+ "money": 10348,
+ "★★★★★": 10349,
+ "1280": 10350,
+ "12": 10351,
+ "430": 10352,
+ "bl": 10353,
+ "みの": 10354,
+ "act": 10355,
+ "##tus": 10356,
+ "tokyo": 10357,
+ "##rial": 10358,
+ "##life": 10359,
+ "emba": 10360,
+ "##ae": 10361,
+ "saas": 10362,
+ "tcs": 10363,
+ "##rk": 10364,
+ "##wang": 10365,
+ "summer": 10366,
+ "##sp": 10367,
+ "ko": 10368,
+ "##ving": 10369,
+ "390": 10370,
+ "premium": 10371,
+ "##その": 10372,
+ "netflix": 10373,
+ "##ヒ": 10374,
+ "uk": 10375,
+ "mt": 10376,
+ "##lton": 10377,
+ "right": 10378,
+ "frank": 10379,
+ "two": 10380,
+ "209": 10381,
+ "える": 10382,
+ "##ple": 10383,
+ "##cal": 10384,
+ "021": 10385,
+ "##んな": 10386,
+ "##sen": 10387,
+ "##ville": 10388,
+ "hold": 10389,
+ "nexus": 10390,
+ "dd": 10391,
+ "##ius": 10392,
+ "てお": 10393,
+ "##mah": 10394,
+ "##なく": 10395,
+ "tila": 10396,
+ "zero": 10397,
+ "820": 10398,
+ "ce": 10399,
+ "##tin": 10400,
+ "resort": 10401,
+ "##ws": 10402,
+ "charles": 10403,
+ "old": 10404,
+ "p10": 10405,
+ "5d": 10406,
+ "report": 10407,
+ "##360": 10408,
+ "##ru": 10409,
+ "##には": 10410,
+ "bus": 10411,
+ "vans": 10412,
+ "lt": 10413,
+ "##est": 10414,
+ "pv": 10415,
+ "##レ": 10416,
+ "links": 10417,
+ "rebecca": 10418,
+ "##ツ": 10419,
+ "##dm": 10420,
+ "azure": 10421,
+ "##365": 10422,
+ "きな": 10423,
+ "limited": 10424,
+ "bit": 10425,
+ "4gb": 10426,
+ "##mon": 10427,
+ "1910": 10428,
+ "moto": 10429,
+ "##eam": 10430,
+ "213": 10431,
+ "1913": 10432,
+ "var": 10433,
+ "eos": 10434,
+ "なとの": 10435,
+ "226": 10436,
+ "blogspot": 10437,
+ "された": 10438,
+ "699": 10439,
+ "e3": 10440,
+ "dos": 10441,
+ "dm": 10442,
+ "fc": 10443,
+ "##ments": 10444,
+ "##ik": 10445,
+ "##kw": 10446,
+ "boy": 10447,
+ "##bin": 10448,
+ "##ata": 10449,
+ "960": 10450,
+ "er": 10451,
+ "##せ": 10452,
+ "219": 10453,
+ "##vin": 10454,
+ "##tu": 10455,
+ "##ula": 10456,
+ "194": 10457,
+ "##∥": 10458,
+ "station": 10459,
+ "##ろ": 10460,
+ "##ature": 10461,
+ "835": 10462,
+ "files": 10463,
+ "zara": 10464,
+ "hdr": 10465,
+ "top10": 10466,
+ "nature": 10467,
+ "950": 10468,
+ "magazine": 10469,
+ "s6": 10470,
+ "marriott": 10471,
+ "##シ": 10472,
+ "avira": 10473,
+ "case": 10474,
+ "##っと": 10475,
+ "tab": 10476,
+ "##ran": 10477,
+ "tony": 10478,
+ "##home": 10479,
+ "oculus": 10480,
+ "im": 10481,
+ "##ral": 10482,
+ "jean": 10483,
+ "saint": 10484,
+ "cry": 10485,
+ "307": 10486,
+ "rosie": 10487,
+ "##force": 10488,
+ "##ini": 10489,
+ "ice": 10490,
+ "##bert": 10491,
+ "のある": 10492,
+ "##nder": 10493,
+ "##mber": 10494,
+ "pet": 10495,
+ "2600": 10496,
+ "##◆": 10497,
+ "plurk": 10498,
+ "▲topdec": 10499,
+ "##sis": 10500,
+ "00kg": 10501,
+ "▲topnov": 10502,
+ "720": 10503,
+ "##ence": 10504,
+ "tim": 10505,
+ "##ω": 10506,
+ "##nc": 10507,
+ "##ても": 10508,
+ "##name": 10509,
+ "log": 10510,
+ "ips": 10511,
+ "great": 10512,
+ "ikea": 10513,
+ "malaysia": 10514,
+ "unix": 10515,
+ "##イト": 10516,
+ "3600": 10517,
+ "##ncy": 10518,
+ "##nie": 10519,
+ "12000": 10520,
+ "akb48": 10521,
+ "##ye": 10522,
+ "##oid": 10523,
+ "404": 10524,
+ "##chi": 10525,
+ "##いた": 10526,
+ "oa": 10527,
+ "xuehai": 10528,
+ "##1000": 10529,
+ "##orm": 10530,
+ "##rf": 10531,
+ "275": 10532,
+ "さん": 10533,
+ "##ware": 10534,
+ "##リー": 10535,
+ "980": 10536,
+ "ho": 10537,
+ "##pro": 10538,
+ "text": 10539,
+ "##era": 10540,
+ "560": 10541,
+ "bob": 10542,
+ "227": 10543,
+ "##ub": 10544,
+ "##2008": 10545,
+ "8891": 10546,
+ "scp": 10547,
+ "avi": 10548,
+ "##zen": 10549,
+ "2022": 10550,
+ "mi": 10551,
+ "wu": 10552,
+ "museum": 10553,
+ "qvod": 10554,
+ "apache": 10555,
+ "lake": 10556,
+ "jcb": 10557,
+ "▲topaug": 10558,
+ "★★★": 10559,
+ "ni": 10560,
+ "##hr": 10561,
+ "hill": 10562,
+ "302": 10563,
+ "ne": 10564,
+ "weibo": 10565,
+ "490": 10566,
+ "ruby": 10567,
+ "##ーシ": 10568,
+ "##ヶ": 10569,
+ "##row": 10570,
+ "4d": 10571,
+ "▲topjul": 10572,
+ "iv": 10573,
+ "##ish": 10574,
+ "github": 10575,
+ "306": 10576,
+ "mate": 10577,
+ "312": 10578,
+ "##スト": 10579,
+ "##lot": 10580,
+ "##ane": 10581,
+ "andrew": 10582,
+ "のハイト": 10583,
+ "##tina": 10584,
+ "t1": 10585,
+ "rf": 10586,
+ "ed2k": 10587,
+ "##vel": 10588,
+ "##900": 10589,
+ "way": 10590,
+ "final": 10591,
+ "りの": 10592,
+ "ns": 10593,
+ "5a": 10594,
+ "705": 10595,
+ "197": 10596,
+ "##メ": 10597,
+ "sweet": 10598,
+ "bytes": 10599,
+ "##ene": 10600,
+ "▲topjan": 10601,
+ "231": 10602,
+ "##cker": 10603,
+ "##2007": 10604,
+ "##px": 10605,
+ "100g": 10606,
+ "topapp": 10607,
+ "229": 10608,
+ "helpapp": 10609,
+ "rs": 10610,
+ "low": 10611,
+ "14k": 10612,
+ "g4g": 10613,
+ "care": 10614,
+ "630": 10615,
+ "ldquo": 10616,
+ "あり": 10617,
+ "##fork": 10618,
+ "leave": 10619,
+ "rm": 10620,
+ "edition": 10621,
+ "##gan": 10622,
+ "##zon": 10623,
+ "##qq": 10624,
+ "▲topsep": 10625,
+ "##google": 10626,
+ "##ism": 10627,
+ "gold": 10628,
+ "224": 10629,
+ "explorer": 10630,
+ "##zer": 10631,
+ "toyota": 10632,
+ "category": 10633,
+ "select": 10634,
+ "visual": 10635,
+ "##labels": 10636,
+ "restaurant": 10637,
+ "##md": 10638,
+ "posts": 10639,
+ "s1": 10640,
+ "##ico": 10641,
+ "もっと": 10642,
+ "angelababy": 10643,
+ "123456": 10644,
+ "217": 10645,
+ "sports": 10646,
+ "s3": 10647,
+ "mbc": 10648,
+ "1915": 10649,
+ "してくたさい": 10650,
+ "shell": 10651,
+ "x86": 10652,
+ "candy": 10653,
+ "##new": 10654,
+ "kbs": 10655,
+ "face": 10656,
+ "xl": 10657,
+ "470": 10658,
+ "##here": 10659,
+ "4a": 10660,
+ "swissinfo": 10661,
+ "v8": 10662,
+ "▲topfeb": 10663,
+ "dram": 10664,
+ "##ual": 10665,
+ "##vice": 10666,
+ "3a": 10667,
+ "##wer": 10668,
+ "sport": 10669,
+ "q1": 10670,
+ "ios10": 10671,
+ "public": 10672,
+ "int": 10673,
+ "card": 10674,
+ "##c": 10675,
+ "ep": 10676,
+ "au": 10677,
+ "rt": 10678,
+ "##れた": 10679,
+ "1080": 10680,
+ "bill": 10681,
+ "##mll": 10682,
+ "kim": 10683,
+ "30": 10684,
+ "460": 10685,
+ "wan": 10686,
+ "##uk": 10687,
+ "##ミ": 10688,
+ "x3": 10689,
+ "298": 10690,
+ "0t": 10691,
+ "scott": 10692,
+ "##ming": 10693,
+ "239": 10694,
+ "e5": 10695,
+ "##3d": 10696,
+ "h7n9": 10697,
+ "worldcat": 10698,
+ "brown": 10699,
+ "##あります": 10700,
+ "##vo": 10701,
+ "##led": 10702,
+ "##580": 10703,
+ "##ax": 10704,
+ "249": 10705,
+ "410": 10706,
+ "##ert": 10707,
+ "paris": 10708,
+ "##~6": 10709,
+ "polo": 10710,
+ "925": 10711,
+ "##lr": 10712,
+ "599": 10713,
+ "##ナ": 10714,
+ "capital": 10715,
+ "##hing": 10716,
+ "bank": 10717,
+ "cv": 10718,
+ "1g": 10719,
+ "##chat": 10720,
+ "##s": 10721,
+ "##たい": 10722,
+ "adc": 10723,
+ "##ule": 10724,
+ "2m": 10725,
+ "##e": 10726,
+ "digital": 10727,
+ "hotmail": 10728,
+ "268": 10729,
+ "##pad": 10730,
+ "870": 10731,
+ "bbq": 10732,
+ "quot": 10733,
+ "##ring": 10734,
+ "before": 10735,
+ "wali": 10736,
+ "##まて": 10737,
+ "mcu": 10738,
+ "2k": 10739,
+ "2b": 10740,
+ "という": 10741,
+ "costco": 10742,
+ "316": 10743,
+ "north": 10744,
+ "333": 10745,
+ "switch": 10746,
+ "##city": 10747,
+ "##p": 10748,
+ "philips": 10749,
+ "##mann": 10750,
+ "management": 10751,
+ "panasonic": 10752,
+ "##cl": 10753,
+ "##vd": 10754,
+ "##ping": 10755,
+ "##rge": 10756,
+ "alice": 10757,
+ "##lk": 10758,
+ "##ましょう": 10759,
+ "css3": 10760,
+ "##ney": 10761,
+ "vision": 10762,
+ "alpha": 10763,
+ "##ular": 10764,
+ "##400": 10765,
+ "##tter": 10766,
+ "lz": 10767,
+ "にお": 10768,
+ "##ありません": 10769,
+ "mode": 10770,
+ "gre": 10771,
+ "1916": 10772,
+ "pci": 10773,
+ "##tm": 10774,
+ "237": 10775,
+ "1~2": 10776,
+ "##yan": 10777,
+ "##そ": 10778,
+ "について": 10779,
+ "##let": 10780,
+ "##キ": 10781,
+ "work": 10782,
+ "war": 10783,
+ "coach": 10784,
+ "ah": 10785,
+ "mary": 10786,
+ "##ᅵ": 10787,
+ "huang": 10788,
+ "##pt": 10789,
+ "a8": 10790,
+ "pt": 10791,
+ "follow": 10792,
+ "##berry": 10793,
+ "1895": 10794,
+ "##ew": 10795,
+ "a5": 10796,
+ "ghost": 10797,
+ "##ション": 10798,
+ "##wn": 10799,
+ "##og": 10800,
+ "south": 10801,
+ "##code": 10802,
+ "girls": 10803,
+ "##rid": 10804,
+ "action": 10805,
+ "villa": 10806,
+ "git": 10807,
+ "r11": 10808,
+ "table": 10809,
+ "games": 10810,
+ "##cket": 10811,
+ "error": 10812,
+ "##anonymoussaid": 10813,
+ "##ag": 10814,
+ "here": 10815,
+ "##ame": 10816,
+ "##gc": 10817,
+ "qa": 10818,
+ "##■": 10819,
+ "##lis": 10820,
+ "gmp": 10821,
+ "##gin": 10822,
+ "vmalife": 10823,
+ "##cher": 10824,
+ "yu": 10825,
+ "wedding": 10826,
+ "##tis": 10827,
+ "demo": 10828,
+ "dragon": 10829,
+ "530": 10830,
+ "soho": 10831,
+ "social": 10832,
+ "bye": 10833,
+ "##rant": 10834,
+ "river": 10835,
+ "orz": 10836,
+ "acer": 10837,
+ "325": 10838,
+ "##↑": 10839,
+ "##ース": 10840,
+ "##ats": 10841,
+ "261": 10842,
+ "del": 10843,
+ "##ven": 10844,
+ "440": 10845,
+ "ups": 10846,
+ "##ように": 10847,
+ "##ター": 10848,
+ "305": 10849,
+ "value": 10850,
+ "macd": 10851,
+ "yougou": 10852,
+ "##dn": 10853,
+ "661": 10854,
+ "##ano": 10855,
+ "ll": 10856,
+ "##urt": 10857,
+ "##rent": 10858,
+ "continue": 10859,
+ "script": 10860,
+ "##wen": 10861,
+ "##ect": 10862,
+ "paper": 10863,
+ "263": 10864,
+ "319": 10865,
+ "shift": 10866,
+ "##chel": 10867,
+ "##フト": 10868,
+ "##cat": 10869,
+ "258": 10870,
+ "x5": 10871,
+ "fox": 10872,
+ "243": 10873,
+ "##さん": 10874,
+ "car": 10875,
+ "aaa": 10876,
+ "##blog": 10877,
+ "loading": 10878,
+ "##yn": 10879,
+ "##tp": 10880,
+ "kuso": 10881,
+ "799": 10882,
+ "si": 10883,
+ "sns": 10884,
+ "イカせるテンマ": 10885,
+ "ヒンクテンマ3": 10886,
+ "rmb": 10887,
+ "vdc": 10888,
+ "forest": 10889,
+ "central": 10890,
+ "prime": 10891,
+ "help": 10892,
+ "ultra": 10893,
+ "##rmb": 10894,
+ "##ような": 10895,
+ "241": 10896,
+ "square": 10897,
+ "688": 10898,
+ "##しい": 10899,
+ "のないフロクに": 10900,
+ "##field": 10901,
+ "##reen": 10902,
+ "##ors": 10903,
+ "##ju": 10904,
+ "c1": 10905,
+ "start": 10906,
+ "510": 10907,
+ "##air": 10908,
+ "##map": 10909,
+ "cdn": 10910,
+ "##wo": 10911,
+ "cba": 10912,
+ "stephen": 10913,
+ "m8": 10914,
+ "100km": 10915,
+ "##get": 10916,
+ "opera": 10917,
+ "##base": 10918,
+ "##ood": 10919,
+ "vsa": 10920,
+ "com™": 10921,
+ "##aw": 10922,
+ "##ail": 10923,
+ "251": 10924,
+ "なのて": 10925,
+ "count": 10926,
+ "t2": 10927,
+ "##ᅡ": 10928,
+ "##een": 10929,
+ "2700": 10930,
+ "hop": 10931,
+ "##gp": 10932,
+ "vsc": 10933,
+ "tree": 10934,
+ "##eg": 10935,
+ "##ose": 10936,
+ "816": 10937,
+ "285": 10938,
+ "##ories": 10939,
+ "##shop": 10940,
+ "alphago": 10941,
+ "v4": 10942,
+ "1909": 10943,
+ "simon": 10944,
+ "##ᆼ": 10945,
+ "fluke62max": 10946,
+ "zip": 10947,
+ "スホンサー": 10948,
+ "##sta": 10949,
+ "louis": 10950,
+ "cr": 10951,
+ "bas": 10952,
+ "##~10": 10953,
+ "bc": 10954,
+ "##yer": 10955,
+ "hadoop": 10956,
+ "##ube": 10957,
+ "##wi": 10958,
+ "1906": 10959,
+ "0755": 10960,
+ "hola": 10961,
+ "##low": 10962,
+ "place": 10963,
+ "centre": 10964,
+ "5v": 10965,
+ "d3": 10966,
+ "##fer": 10967,
+ "252": 10968,
+ "##750": 10969,
+ "##media": 10970,
+ "281": 10971,
+ "540": 10972,
+ "0l": 10973,
+ "exchange": 10974,
+ "262": 10975,
+ "series": 10976,
+ "##ハー": 10977,
+ "##san": 10978,
+ "eb": 10979,
+ "##bank": 10980,
+ "##k": 10981,
+ "q3": 10982,
+ "##nge": 10983,
+ "##mail": 10984,
+ "take": 10985,
+ "##lp": 10986,
+ "259": 10987,
+ "1888": 10988,
+ "client": 10989,
+ "east": 10990,
+ "cache": 10991,
+ "event": 10992,
+ "vincent": 10993,
+ "##ールを": 10994,
+ "きを": 10995,
+ "##nse": 10996,
+ "sui": 10997,
+ "855": 10998,
+ "adchoice": 10999,
+ "##и": 11000,
+ "##stry": 11001,
+ "##なたの": 11002,
+ "246": 11003,
+ "##zone": 11004,
+ "ga": 11005,
+ "apps": 11006,
+ "sea": 11007,
+ "##ab": 11008,
+ "248": 11009,
+ "cisco": 11010,
+ "##タ": 11011,
+ "##rner": 11012,
+ "kymco": 11013,
+ "##care": 11014,
+ "dha": 11015,
+ "##pu": 11016,
+ "##yi": 11017,
+ "minkoff": 11018,
+ "royal": 11019,
+ "p1": 11020,
+ "への": 11021,
+ "annie": 11022,
+ "269": 11023,
+ "collection": 11024,
+ "kpi": 11025,
+ "playstation": 11026,
+ "257": 11027,
+ "になります": 11028,
+ "866": 11029,
+ "bh": 11030,
+ "##bar": 11031,
+ "queen": 11032,
+ "505": 11033,
+ "radio": 11034,
+ "1904": 11035,
+ "andy": 11036,
+ "armani": 11037,
+ "##xy": 11038,
+ "manager": 11039,
+ "iherb": 11040,
+ "##ery": 11041,
+ "##share": 11042,
+ "spring": 11043,
+ "raid": 11044,
+ "johnson": 11045,
+ "1908": 11046,
+ "##ob": 11047,
+ "volvo": 11048,
+ "hall": 11049,
+ "##ball": 11050,
+ "v6": 11051,
+ "our": 11052,
+ "taylor": 11053,
+ "##hk": 11054,
+ "bi": 11055,
+ "242": 11056,
+ "##cp": 11057,
+ "kate": 11058,
+ "bo": 11059,
+ "water": 11060,
+ "technology": 11061,
+ "##rie": 11062,
+ "サイトは": 11063,
+ "277": 11064,
+ "##ona": 11065,
+ "##sl": 11066,
+ "hpv": 11067,
+ "303": 11068,
+ "gtx": 11069,
+ "hip": 11070,
+ "rdquo": 11071,
+ "jayz": 11072,
+ "stone": 11073,
+ "##lex": 11074,
+ "##rum": 11075,
+ "namespace": 11076,
+ "##やり": 11077,
+ "620": 11078,
+ "##ale": 11079,
+ "##atic": 11080,
+ "des": 11081,
+ "##erson": 11082,
+ "##ql": 11083,
+ "##ves": 11084,
+ "##type": 11085,
+ "enter": 11086,
+ "##この": 11087,
+ "##てきます": 11088,
+ "d2": 11089,
+ "##168": 11090,
+ "##mix": 11091,
+ "##bian": 11092,
+ "との": 11093,
+ "a9": 11094,
+ "jj": 11095,
+ "ky": 11096,
+ "##lc": 11097,
+ "access": 11098,
+ "movie": 11099,
+ "##hc": 11100,
+ "リストに": 11101,
+ "tower": 11102,
+ "##ration": 11103,
+ "##mit": 11104,
+ "ます": 11105,
+ "##nch": 11106,
+ "ua": 11107,
+ "tel": 11108,
+ "prefix": 11109,
+ "##o2": 11110,
+ "1907": 11111,
+ "##point": 11112,
+ "1901": 11113,
+ "ott": 11114,
+ "~10": 11115,
+ "##http": 11116,
+ "##ury": 11117,
+ "baidu": 11118,
+ "##ink": 11119,
+ "member": 11120,
+ "##logy": 11121,
+ "bigbang": 11122,
+ "nownews": 11123,
+ "##js": 11124,
+ "##shot": 11125,
+ "##tb": 11126,
+ "##こと": 11127,
+ "247": 11128,
+ "eba": 11129,
+ "##tics": 11130,
+ "##lus": 11131,
+ "ける": 11132,
+ "v5": 11133,
+ "spark": 11134,
+ "##ama": 11135,
+ "there": 11136,
+ "##ions": 11137,
+ "god": 11138,
+ "##lls": 11139,
+ "##down": 11140,
+ "hiv": 11141,
+ "##ress": 11142,
+ "burberry": 11143,
+ "day2": 11144,
+ "##kv": 11145,
+ "◆◆": 11146,
+ "jeff": 11147,
+ "related": 11148,
+ "film": 11149,
+ "edit": 11150,
+ "joseph": 11151,
+ "283": 11152,
+ "##ark": 11153,
+ "cx": 11154,
+ "32gb": 11155,
+ "order": 11156,
+ "g9": 11157,
+ "30000": 11158,
+ "##ans": 11159,
+ "##tty": 11160,
+ "s5": 11161,
+ "##bee": 11162,
+ "かあります": 11163,
+ "thread": 11164,
+ "xr": 11165,
+ "buy": 11166,
+ "sh": 11167,
+ "005": 11168,
+ "land": 11169,
+ "spotify": 11170,
+ "mx": 11171,
+ "##ari": 11172,
+ "276": 11173,
+ "##verse": 11174,
+ "×email": 11175,
+ "sf": 11176,
+ "why": 11177,
+ "##ことて": 11178,
+ "244": 11179,
+ "7headlines": 11180,
+ "nego": 11181,
+ "sunny": 11182,
+ "dom": 11183,
+ "exo": 11184,
+ "401": 11185,
+ "666": 11186,
+ "positioning": 11187,
+ "fit": 11188,
+ "rgb": 11189,
+ "##tton": 11190,
+ "278": 11191,
+ "kiss": 11192,
+ "alexa": 11193,
+ "adam": 11194,
+ "lp": 11195,
+ "みリストを": 11196,
+ "##g": 11197,
+ "mp": 11198,
+ "##ties": 11199,
+ "##llow": 11200,
+ "amy": 11201,
+ "##du": 11202,
+ "np": 11203,
+ "002": 11204,
+ "institute": 11205,
+ "271": 11206,
+ "##rth": 11207,
+ "##lar": 11208,
+ "2345": 11209,
+ "590": 11210,
+ "##des": 11211,
+ "sidebar": 11212,
+ "15": 11213,
+ "imax": 11214,
+ "site": 11215,
+ "##cky": 11216,
+ "##kit": 11217,
+ "##ime": 11218,
+ "##009": 11219,
+ "season": 11220,
+ "323": 11221,
+ "##fun": 11222,
+ "##ンター": 11223,
+ "##ひ": 11224,
+ "gogoro": 11225,
+ "a7": 11226,
+ "pu": 11227,
+ "lily": 11228,
+ "fire": 11229,
+ "twd600": 11230,
+ "##ッセーシを": 11231,
+ "いて": 11232,
+ "##vis": 11233,
+ "30ml": 11234,
+ "##cture": 11235,
+ "##をお": 11236,
+ "information": 11237,
+ "##オ": 11238,
+ "close": 11239,
+ "friday": 11240,
+ "##くれる": 11241,
+ "yi": 11242,
+ "nick": 11243,
+ "てすか": 11244,
+ "##tta": 11245,
+ "##tel": 11246,
+ "6500": 11247,
+ "##lock": 11248,
+ "cbd": 11249,
+ "economy": 11250,
+ "254": 11251,
+ "かお": 11252,
+ "267": 11253,
+ "tinker": 11254,
+ "double": 11255,
+ "375": 11256,
+ "8gb": 11257,
+ "voice": 11258,
+ "##app": 11259,
+ "oops": 11260,
+ "channel": 11261,
+ "today": 11262,
+ "985": 11263,
+ "##right": 11264,
+ "raw": 11265,
+ "xyz": 11266,
+ "##+": 11267,
+ "jim": 11268,
+ "edm": 11269,
+ "##cent": 11270,
+ "7500": 11271,
+ "supreme": 11272,
+ "814": 11273,
+ "ds": 11274,
+ "##its": 11275,
+ "##asia": 11276,
+ "dropbox": 11277,
+ "##てすか": 11278,
+ "##tti": 11279,
+ "books": 11280,
+ "272": 11281,
+ "100ml": 11282,
+ "##tle": 11283,
+ "##ller": 11284,
+ "##ken": 11285,
+ "##more": 11286,
+ "##boy": 11287,
+ "sex": 11288,
+ "309": 11289,
+ "##dom": 11290,
+ "t3": 11291,
+ "##ider": 11292,
+ "##なります": 11293,
+ "##unch": 11294,
+ "1903": 11295,
+ "810": 11296,
+ "feel": 11297,
+ "5500": 11298,
+ "##かった": 11299,
+ "##put": 11300,
+ "により": 11301,
+ "s2": 11302,
+ "mo": 11303,
+ "##gh": 11304,
+ "men": 11305,
+ "ka": 11306,
+ "amoled": 11307,
+ "div": 11308,
+ "##tr": 11309,
+ "##n1": 11310,
+ "port": 11311,
+ "howard": 11312,
+ "##tags": 11313,
+ "ken": 11314,
+ "dnf": 11315,
+ "##nus": 11316,
+ "adsense": 11317,
+ "##а": 11318,
+ "ide": 11319,
+ "##へ": 11320,
+ "buff": 11321,
+ "thunder": 11322,
+ "##town": 11323,
+ "##ique": 11324,
+ "has": 11325,
+ "##body": 11326,
+ "auto": 11327,
+ "pin": 11328,
+ "##erry": 11329,
+ "tee": 11330,
+ "てした": 11331,
+ "295": 11332,
+ "number": 11333,
+ "##the": 11334,
+ "##013": 11335,
+ "object": 11336,
+ "psp": 11337,
+ "cool": 11338,
+ "udnbkk": 11339,
+ "16gb": 11340,
+ "##mic": 11341,
+ "miui": 11342,
+ "##tro": 11343,
+ "most": 11344,
+ "r2": 11345,
+ "##alk": 11346,
+ "##nity": 11347,
+ "1880": 11348,
+ "±0": 11349,
+ "##いました": 11350,
+ "428": 11351,
+ "s4": 11352,
+ "law": 11353,
+ "version": 11354,
+ "##oa": 11355,
+ "n1": 11356,
+ "sgs": 11357,
+ "docomo": 11358,
+ "##tf": 11359,
+ "##ack": 11360,
+ "henry": 11361,
+ "fc2": 11362,
+ "##ded": 11363,
+ "##sco": 11364,
+ "##014": 11365,
+ "##rite": 11366,
+ "286": 11367,
+ "0mm": 11368,
+ "linkedin": 11369,
+ "##ada": 11370,
+ "##now": 11371,
+ "wii": 11372,
+ "##ndy": 11373,
+ "ucbug": 11374,
+ "##◎": 11375,
+ "sputniknews": 11376,
+ "legalminer": 11377,
+ "##ika": 11378,
+ "##xp": 11379,
+ "2gb": 11380,
+ "##bu": 11381,
+ "q10": 11382,
+ "oo": 11383,
+ "b6": 11384,
+ "come": 11385,
+ "##rman": 11386,
+ "cheese": 11387,
+ "ming": 11388,
+ "maker": 11389,
+ "##gm": 11390,
+ "nikon": 11391,
+ "##fig": 11392,
+ "ppi": 11393,
+ "kelly": 11394,
+ "##ります": 11395,
+ "jchere": 11396,
+ "てきます": 11397,
+ "ted": 11398,
+ "md": 11399,
+ "003": 11400,
+ "fgo": 11401,
+ "tech": 11402,
+ "##tto": 11403,
+ "dan": 11404,
+ "soc": 11405,
+ "##gl": 11406,
+ "##len": 11407,
+ "hair": 11408,
+ "earth": 11409,
+ "640": 11410,
+ "521": 11411,
+ "img": 11412,
+ "##pper": 11413,
+ "##a1": 11414,
+ "##てきる": 11415,
+ "##ロク": 11416,
+ "acca": 11417,
+ "##ition": 11418,
+ "##ference": 11419,
+ "suite": 11420,
+ "##ig": 11421,
+ "outlook": 11422,
+ "##mond": 11423,
+ "##cation": 11424,
+ "398": 11425,
+ "##pr": 11426,
+ "279": 11427,
+ "101vip": 11428,
+ "358": 11429,
+ "##999": 11430,
+ "282": 11431,
+ "64gb": 11432,
+ "3800": 11433,
+ "345": 11434,
+ "airport": 11435,
+ "##over": 11436,
+ "284": 11437,
+ "##おり": 11438,
+ "jones": 11439,
+ "##ith": 11440,
+ "lab": 11441,
+ "##su": 11442,
+ "##いるのて": 11443,
+ "co2": 11444,
+ "town": 11445,
+ "piece": 11446,
+ "##llo": 11447,
+ "no1": 11448,
+ "vmware": 11449,
+ "24h": 11450,
+ "##qi": 11451,
+ "focus": 11452,
+ "reader": 11453,
+ "##admin": 11454,
+ "##ora": 11455,
+ "tb": 11456,
+ "false": 11457,
+ "##log": 11458,
+ "1898": 11459,
+ "know": 11460,
+ "lan": 11461,
+ "838": 11462,
+ "##ces": 11463,
+ "f4": 11464,
+ "##ume": 11465,
+ "motel": 11466,
+ "stop": 11467,
+ "##oper": 11468,
+ "na": 11469,
+ "flickr": 11470,
+ "netcomponents": 11471,
+ "##af": 11472,
+ "##─": 11473,
+ "pose": 11474,
+ "williams": 11475,
+ "local": 11476,
+ "##ound": 11477,
+ "##cg": 11478,
+ "##site": 11479,
+ "##iko": 11480,
+ "いお": 11481,
+ "274": 11482,
+ "5m": 11483,
+ "gsm": 11484,
+ "con": 11485,
+ "##ath": 11486,
+ "1902": 11487,
+ "friends": 11488,
+ "##hip": 11489,
+ "cell": 11490,
+ "317": 11491,
+ "##rey": 11492,
+ "780": 11493,
+ "cream": 11494,
+ "##cks": 11495,
+ "012": 11496,
+ "##dp": 11497,
+ "facebooktwitterpinterestgoogle": 11498,
+ "sso": 11499,
+ "324": 11500,
+ "shtml": 11501,
+ "song": 11502,
+ "swiss": 11503,
+ "##mw": 11504,
+ "##キンク": 11505,
+ "lumia": 11506,
+ "xdd": 11507,
+ "string": 11508,
+ "tiffany": 11509,
+ "522": 11510,
+ "marc": 11511,
+ "られた": 11512,
+ "insee": 11513,
+ "russell": 11514,
+ "sc": 11515,
+ "dell": 11516,
+ "##ations": 11517,
+ "ok": 11518,
+ "camera": 11519,
+ "289": 11520,
+ "##vs": 11521,
+ "##flow": 11522,
+ "##late": 11523,
+ "classic": 11524,
+ "287": 11525,
+ "##nter": 11526,
+ "stay": 11527,
+ "g1": 11528,
+ "mtv": 11529,
+ "512": 11530,
+ "##ever": 11531,
+ "##lab": 11532,
+ "##nger": 11533,
+ "qe": 11534,
+ "sata": 11535,
+ "ryan": 11536,
+ "d1": 11537,
+ "50ml": 11538,
+ "cms": 11539,
+ "##cing": 11540,
+ "su": 11541,
+ "292": 11542,
+ "3300": 11543,
+ "editor": 11544,
+ "296": 11545,
+ "##nap": 11546,
+ "security": 11547,
+ "sunday": 11548,
+ "association": 11549,
+ "##ens": 11550,
+ "##700": 11551,
+ "##bra": 11552,
+ "acg": 11553,
+ "##かり": 11554,
+ "sofascore": 11555,
+ "とは": 11556,
+ "mkv": 11557,
+ "##ign": 11558,
+ "jonathan": 11559,
+ "gary": 11560,
+ "build": 11561,
+ "labels": 11562,
+ "##oto": 11563,
+ "tesla": 11564,
+ "moba": 11565,
+ "qi": 11566,
+ "gohappy": 11567,
+ "general": 11568,
+ "ajax": 11569,
+ "1024": 11570,
+ "##かる": 11571,
+ "サイト": 11572,
+ "society": 11573,
+ "##test": 11574,
+ "##urs": 11575,
+ "wps": 11576,
+ "fedora": 11577,
+ "##ich": 11578,
+ "mozilla": 11579,
+ "328": 11580,
+ "##480": 11581,
+ "##dr": 11582,
+ "usa": 11583,
+ "urn": 11584,
+ "##lina": 11585,
+ "##r": 11586,
+ "grace": 11587,
+ "##die": 11588,
+ "##try": 11589,
+ "##ader": 11590,
+ "1250": 11591,
+ "##なり": 11592,
+ "elle": 11593,
+ "570": 11594,
+ "##chen": 11595,
+ "##ᆯ": 11596,
+ "price": 11597,
+ "##ten": 11598,
+ "uhz": 11599,
+ "##ough": 11600,
+ "eq": 11601,
+ "##hen": 11602,
+ "states": 11603,
+ "push": 11604,
+ "session": 11605,
+ "balance": 11606,
+ "wow": 11607,
+ "506": 11608,
+ "##cus": 11609,
+ "##py": 11610,
+ "when": 11611,
+ "##ward": 11612,
+ "##ep": 11613,
+ "34e": 11614,
+ "wong": 11615,
+ "library": 11616,
+ "prada": 11617,
+ "##サイト": 11618,
+ "##cle": 11619,
+ "running": 11620,
+ "##ree": 11621,
+ "313": 11622,
+ "ck": 11623,
+ "date": 11624,
+ "q4": 11625,
+ "##ctive": 11626,
+ "##ool": 11627,
+ "##>": 11628,
+ "mk": 11629,
+ "##ira": 11630,
+ "##163": 11631,
+ "388": 11632,
+ "die": 11633,
+ "secret": 11634,
+ "rq": 11635,
+ "dota": 11636,
+ "buffet": 11637,
+ "は1ヶ": 11638,
+ "e6": 11639,
+ "##ez": 11640,
+ "pan": 11641,
+ "368": 11642,
+ "ha": 11643,
+ "##card": 11644,
+ "##cha": 11645,
+ "2a": 11646,
+ "##さ": 11647,
+ "alan": 11648,
+ "day3": 11649,
+ "eye": 11650,
+ "f3": 11651,
+ "##end": 11652,
+ "france": 11653,
+ "keep": 11654,
+ "adi": 11655,
+ "rna": 11656,
+ "tvbs": 11657,
+ "##ala": 11658,
+ "solo": 11659,
+ "nova": 11660,
+ "##え": 11661,
+ "##tail": 11662,
+ "##ょう": 11663,
+ "support": 11664,
+ "##ries": 11665,
+ "##なる": 11666,
+ "##ved": 11667,
+ "base": 11668,
+ "copy": 11669,
+ "iis": 11670,
+ "fps": 11671,
+ "##ways": 11672,
+ "hero": 11673,
+ "hgih": 11674,
+ "profile": 11675,
+ "fish": 11676,
+ "mu": 11677,
+ "ssh": 11678,
+ "entertainment": 11679,
+ "chang": 11680,
+ "##wd": 11681,
+ "click": 11682,
+ "cake": 11683,
+ "##ond": 11684,
+ "pre": 11685,
+ "##tom": 11686,
+ "kic": 11687,
+ "pixel": 11688,
+ "##ov": 11689,
+ "##fl": 11690,
+ "product": 11691,
+ "6a": 11692,
+ "##pd": 11693,
+ "dear": 11694,
+ "##gate": 11695,
+ "es": 11696,
+ "yumi": 11697,
+ "audio": 11698,
+ "##²": 11699,
+ "##sky": 11700,
+ "echo": 11701,
+ "bin": 11702,
+ "where": 11703,
+ "##ture": 11704,
+ "329": 11705,
+ "##ape": 11706,
+ "find": 11707,
+ "sap": 11708,
+ "isis": 11709,
+ "##なと": 11710,
+ "nand": 11711,
+ "##101": 11712,
+ "##load": 11713,
+ "##ream": 11714,
+ "band": 11715,
+ "a6": 11716,
+ "525": 11717,
+ "never": 11718,
+ "##post": 11719,
+ "festival": 11720,
+ "50cm": 11721,
+ "##we": 11722,
+ "555": 11723,
+ "guide": 11724,
+ "314": 11725,
+ "zenfone": 11726,
+ "##ike": 11727,
+ "335": 11728,
+ "gd": 11729,
+ "forum": 11730,
+ "jessica": 11731,
+ "strong": 11732,
+ "alexander": 11733,
+ "##ould": 11734,
+ "software": 11735,
+ "allen": 11736,
+ "##ious": 11737,
+ "program": 11738,
+ "360°": 11739,
+ "else": 11740,
+ "lohasthree": 11741,
+ "##gar": 11742,
+ "することかてきます": 11743,
+ "please": 11744,
+ "##れます": 11745,
+ "rc": 11746,
+ "##ggle": 11747,
+ "##ric": 11748,
+ "bim": 11749,
+ "50000": 11750,
+ "##own": 11751,
+ "eclipse": 11752,
+ "355": 11753,
+ "brian": 11754,
+ "3ds": 11755,
+ "##side": 11756,
+ "061": 11757,
+ "361": 11758,
+ "##other": 11759,
+ "##ける": 11760,
+ "##tech": 11761,
+ "##ator": 11762,
+ "485": 11763,
+ "engine": 11764,
+ "##ged": 11765,
+ "##t": 11766,
+ "plaza": 11767,
+ "##fit": 11768,
+ "cia": 11769,
+ "ngo": 11770,
+ "westbrook": 11771,
+ "shi": 11772,
+ "tbs": 11773,
+ "50mm": 11774,
+ "##みませんか": 11775,
+ "sci": 11776,
+ "291": 11777,
+ "reuters": 11778,
+ "##ily": 11779,
+ "contextlink": 11780,
+ "##hn": 11781,
+ "af": 11782,
+ "##cil": 11783,
+ "bridge": 11784,
+ "very": 11785,
+ "##cel": 11786,
+ "1890": 11787,
+ "cambridge": 11788,
+ "##ize": 11789,
+ "15g": 11790,
+ "##aid": 11791,
+ "##data": 11792,
+ "790": 11793,
+ "frm": 11794,
+ "##head": 11795,
+ "award": 11796,
+ "butler": 11797,
+ "##sun": 11798,
+ "meta": 11799,
+ "##mar": 11800,
+ "america": 11801,
+ "ps3": 11802,
+ "puma": 11803,
+ "pmid": 11804,
+ "##すか": 11805,
+ "lc": 11806,
+ "670": 11807,
+ "kitchen": 11808,
+ "##lic": 11809,
+ "オーフン5": 11810,
+ "きなしソフトサーヒス": 11811,
+ "そして": 11812,
+ "day1": 11813,
+ "future": 11814,
+ "★★★★": 11815,
+ "##text": 11816,
+ "##page": 11817,
+ "##rris": 11818,
+ "pm1": 11819,
+ "##ket": 11820,
+ "fans": 11821,
+ "##っています": 11822,
+ "1001": 11823,
+ "christian": 11824,
+ "bot": 11825,
+ "kids": 11826,
+ "trackback": 11827,
+ "##hai": 11828,
+ "c3": 11829,
+ "display": 11830,
+ "##hl": 11831,
+ "n2": 11832,
+ "1896": 11833,
+ "idea": 11834,
+ "さんも": 11835,
+ "##sent": 11836,
+ "airmail": 11837,
+ "##ug": 11838,
+ "##men": 11839,
+ "pwm": 11840,
+ "けます": 11841,
+ "028": 11842,
+ "##lution": 11843,
+ "369": 11844,
+ "852": 11845,
+ "awards": 11846,
+ "schemas": 11847,
+ "354": 11848,
+ "asics": 11849,
+ "wikipedia": 11850,
+ "font": 11851,
+ "##tional": 11852,
+ "##vy": 11853,
+ "c2": 11854,
+ "293": 11855,
+ "##れている": 11856,
+ "##dget": 11857,
+ "##ein": 11858,
+ "っている": 11859,
+ "contact": 11860,
+ "pepper": 11861,
+ "スキル": 11862,
+ "339": 11863,
+ "##~5": 11864,
+ "294": 11865,
+ "##uel": 11866,
+ "##ument": 11867,
+ "730": 11868,
+ "##hang": 11869,
+ "みてす": 11870,
+ "q5": 11871,
+ "##sue": 11872,
+ "rain": 11873,
+ "##ndi": 11874,
+ "wei": 11875,
+ "swatch": 11876,
+ "##cept": 11877,
+ "わせ": 11878,
+ "331": 11879,
+ "popular": 11880,
+ "##ste": 11881,
+ "##tag": 11882,
+ "p2": 11883,
+ "501": 11884,
+ "trc": 11885,
+ "1899": 11886,
+ "##west": 11887,
+ "##live": 11888,
+ "justin": 11889,
+ "honda": 11890,
+ "ping": 11891,
+ "messenger": 11892,
+ "##rap": 11893,
+ "v9": 11894,
+ "543": 11895,
+ "##とは": 11896,
+ "unity": 11897,
+ "appqq": 11898,
+ "はすへて": 11899,
+ "025": 11900,
+ "leo": 11901,
+ "##tone": 11902,
+ "##テ": 11903,
+ "##ass": 11904,
+ "uniqlo": 11905,
+ "##010": 11906,
+ "502": 11907,
+ "her": 11908,
+ "jane": 11909,
+ "memory": 11910,
+ "moneydj": 11911,
+ "##tical": 11912,
+ "human": 11913,
+ "12306": 11914,
+ "していると": 11915,
+ "##m2": 11916,
+ "coc": 11917,
+ "miacare": 11918,
+ "##mn": 11919,
+ "tmt": 11920,
+ "##core": 11921,
+ "vim": 11922,
+ "kk": 11923,
+ "##may": 11924,
+ "fan": 11925,
+ "target": 11926,
+ "use": 11927,
+ "too": 11928,
+ "338": 11929,
+ "435": 11930,
+ "2050": 11931,
+ "867": 11932,
+ "737": 11933,
+ "fast": 11934,
+ "##2c": 11935,
+ "services": 11936,
+ "##ope": 11937,
+ "omega": 11938,
+ "energy": 11939,
+ "##わ": 11940,
+ "pinkoi": 11941,
+ "1a": 11942,
+ "##なから": 11943,
+ "##rain": 11944,
+ "jackson": 11945,
+ "##ement": 11946,
+ "##シャンルの": 11947,
+ "374": 11948,
+ "366": 11949,
+ "そんな": 11950,
+ "p9": 11951,
+ "rd": 11952,
+ "##ᆨ": 11953,
+ "1111": 11954,
+ "##tier": 11955,
+ "##vic": 11956,
+ "zone": 11957,
+ "##│": 11958,
+ "385": 11959,
+ "690": 11960,
+ "dl": 11961,
+ "isofix": 11962,
+ "cpa": 11963,
+ "m4": 11964,
+ "322": 11965,
+ "kimi": 11966,
+ "めて": 11967,
+ "davis": 11968,
+ "##lay": 11969,
+ "lulu": 11970,
+ "##uck": 11971,
+ "050": 11972,
+ "weeks": 11973,
+ "qs": 11974,
+ "##hop": 11975,
+ "920": 11976,
+ "##n": 11977,
+ "ae": 11978,
+ "##ear": 11979,
+ "~5": 11980,
+ "eia": 11981,
+ "405": 11982,
+ "##fly": 11983,
+ "korea": 11984,
+ "jpeg": 11985,
+ "boost": 11986,
+ "##ship": 11987,
+ "small": 11988,
+ "##リア": 11989,
+ "1860": 11990,
+ "eur": 11991,
+ "297": 11992,
+ "425": 11993,
+ "valley": 11994,
+ "##iel": 11995,
+ "simple": 11996,
+ "##ude": 11997,
+ "rn": 11998,
+ "k2": 11999,
+ "##ena": 12000,
+ "されます": 12001,
+ "non": 12002,
+ "patrick": 12003,
+ "しているから": 12004,
+ "##ナー": 12005,
+ "feed": 12006,
+ "5757": 12007,
+ "30g": 12008,
+ "process": 12009,
+ "well": 12010,
+ "qqmei": 12011,
+ "##thing": 12012,
+ "they": 12013,
+ "aws": 12014,
+ "lu": 12015,
+ "pink": 12016,
+ "##ters": 12017,
+ "##kin": 12018,
+ "または": 12019,
+ "board": 12020,
+ "##vertisement": 12021,
+ "wine": 12022,
+ "##ien": 12023,
+ "unicode": 12024,
+ "##dge": 12025,
+ "r1": 12026,
+ "359": 12027,
+ "##tant": 12028,
+ "いを": 12029,
+ "##twitter": 12030,
+ "##3c": 12031,
+ "cool1": 12032,
+ "される": 12033,
+ "##れて": 12034,
+ "##l": 12035,
+ "isp": 12036,
+ "##012": 12037,
+ "standard": 12038,
+ "45㎡2": 12039,
+ "402": 12040,
+ "##150": 12041,
+ "matt": 12042,
+ "##fu": 12043,
+ "326": 12044,
+ "##iner": 12045,
+ "googlemsn": 12046,
+ "pixnetfacebookyahoo": 12047,
+ "##ラン": 12048,
+ "x7": 12049,
+ "886": 12050,
+ "##uce": 12051,
+ "メーカー": 12052,
+ "sao": 12053,
+ "##ev": 12054,
+ "##きました": 12055,
+ "##file": 12056,
+ "9678": 12057,
+ "403": 12058,
+ "xddd": 12059,
+ "shirt": 12060,
+ "6l": 12061,
+ "##rio": 12062,
+ "##hat": 12063,
+ "3mm": 12064,
+ "givenchy": 12065,
+ "ya": 12066,
+ "bang": 12067,
+ "##lio": 12068,
+ "monday": 12069,
+ "crystal": 12070,
+ "ロクイン": 12071,
+ "##abc": 12072,
+ "336": 12073,
+ "head": 12074,
+ "890": 12075,
+ "ubuntuforumwikilinuxpastechat": 12076,
+ "##vc": 12077,
+ "##~20": 12078,
+ "##rity": 12079,
+ "cnc": 12080,
+ "7866": 12081,
+ "ipv6": 12082,
+ "null": 12083,
+ "1897": 12084,
+ "##ost": 12085,
+ "yang": 12086,
+ "imsean": 12087,
+ "tiger": 12088,
+ "##fet": 12089,
+ "##ンス": 12090,
+ "352": 12091,
+ "##=": 12092,
+ "dji": 12093,
+ "327": 12094,
+ "ji": 12095,
+ "maria": 12096,
+ "##come": 12097,
+ "##んて": 12098,
+ "foundation": 12099,
+ "3100": 12100,
+ "##beth": 12101,
+ "##なった": 12102,
+ "1m": 12103,
+ "601": 12104,
+ "active": 12105,
+ "##aft": 12106,
+ "##don": 12107,
+ "3p": 12108,
+ "sr": 12109,
+ "349": 12110,
+ "emma": 12111,
+ "##khz": 12112,
+ "living": 12113,
+ "415": 12114,
+ "353": 12115,
+ "1889": 12116,
+ "341": 12117,
+ "709": 12118,
+ "457": 12119,
+ "sas": 12120,
+ "x6": 12121,
+ "##face": 12122,
+ "pptv": 12123,
+ "x4": 12124,
+ "##mate": 12125,
+ "han": 12126,
+ "sophie": 12127,
+ "##jing": 12128,
+ "337": 12129,
+ "fifa": 12130,
+ "##mand": 12131,
+ "other": 12132,
+ "sale": 12133,
+ "inwedding": 12134,
+ "##gn": 12135,
+ "てきちゃいます": 12136,
+ "##mmy": 12137,
+ "##pmlast": 12138,
+ "bad": 12139,
+ "nana": 12140,
+ "nbc": 12141,
+ "してみてくたさいね": 12142,
+ "なとはお": 12143,
+ "##wu": 12144,
+ "##かあります": 12145,
+ "##あ": 12146,
+ "note7": 12147,
+ "single": 12148,
+ "##340": 12149,
+ "せからこ": 12150,
+ "してくたさい♪この": 12151,
+ "しにはとんとんワークケートを": 12152,
+ "するとあなたにもっとマッチした": 12153,
+ "ならワークケートへ": 12154,
+ "もみつかっちゃうかも": 12155,
+ "ワークケートの": 12156,
+ "##bel": 12157,
+ "window": 12158,
+ "##dio": 12159,
+ "##ht": 12160,
+ "union": 12161,
+ "age": 12162,
+ "382": 12163,
+ "14": 12164,
+ "##ivity": 12165,
+ "##y": 12166,
+ "コメント": 12167,
+ "domain": 12168,
+ "neo": 12169,
+ "##isa": 12170,
+ "##lter": 12171,
+ "5k": 12172,
+ "f5": 12173,
+ "steven": 12174,
+ "##cts": 12175,
+ "powerpoint": 12176,
+ "tft": 12177,
+ "self": 12178,
+ "g2": 12179,
+ "ft": 12180,
+ "##テル": 12181,
+ "zol": 12182,
+ "##act": 12183,
+ "mwc": 12184,
+ "381": 12185,
+ "343": 12186,
+ "もう": 12187,
+ "nbapop": 12188,
+ "408": 12189,
+ "てある": 12190,
+ "eds": 12191,
+ "ace": 12192,
+ "##room": 12193,
+ "previous": 12194,
+ "author": 12195,
+ "tomtom": 12196,
+ "il": 12197,
+ "##ets": 12198,
+ "hu": 12199,
+ "financial": 12200,
+ "☆☆☆": 12201,
+ "っています": 12202,
+ "bp": 12203,
+ "5t": 12204,
+ "chi": 12205,
+ "1gb": 12206,
+ "##hg": 12207,
+ "fairmont": 12208,
+ "cross": 12209,
+ "008": 12210,
+ "gay": 12211,
+ "h2": 12212,
+ "function": 12213,
+ "##けて": 12214,
+ "356": 12215,
+ "also": 12216,
+ "1b": 12217,
+ "625": 12218,
+ "##ータ": 12219,
+ "##raph": 12220,
+ "1894": 12221,
+ "3~5": 12222,
+ "##ils": 12223,
+ "i3": 12224,
+ "334": 12225,
+ "avenue": 12226,
+ "##host": 12227,
+ "による": 12228,
+ "##bon": 12229,
+ "##tsu": 12230,
+ "message": 12231,
+ "navigation": 12232,
+ "50g": 12233,
+ "fintech": 12234,
+ "h6": 12235,
+ "##ことを": 12236,
+ "8cm": 12237,
+ "##ject": 12238,
+ "##vas": 12239,
+ "##firm": 12240,
+ "credit": 12241,
+ "##wf": 12242,
+ "xxxx": 12243,
+ "form": 12244,
+ "##nor": 12245,
+ "##space": 12246,
+ "huawei": 12247,
+ "plan": 12248,
+ "json": 12249,
+ "sbl": 12250,
+ "##dc": 12251,
+ "machine": 12252,
+ "921": 12253,
+ "392": 12254,
+ "wish": 12255,
+ "##120": 12256,
+ "##sol": 12257,
+ "windows7": 12258,
+ "edward": 12259,
+ "##ために": 12260,
+ "development": 12261,
+ "washington": 12262,
+ "##nsis": 12263,
+ "lo": 12264,
+ "818": 12265,
+ "##sio": 12266,
+ "##ym": 12267,
+ "##bor": 12268,
+ "planet": 12269,
+ "##~8": 12270,
+ "##wt": 12271,
+ "ieee": 12272,
+ "gpa": 12273,
+ "##めて": 12274,
+ "camp": 12275,
+ "ann": 12276,
+ "gm": 12277,
+ "##tw": 12278,
+ "##oka": 12279,
+ "connect": 12280,
+ "##rss": 12281,
+ "##work": 12282,
+ "##atus": 12283,
+ "wall": 12284,
+ "chicken": 12285,
+ "soul": 12286,
+ "2mm": 12287,
+ "##times": 12288,
+ "fa": 12289,
+ "##ather": 12290,
+ "##cord": 12291,
+ "009": 12292,
+ "##eep": 12293,
+ "hitachi": 12294,
+ "gui": 12295,
+ "harry": 12296,
+ "##pan": 12297,
+ "e1": 12298,
+ "disney": 12299,
+ "##press": 12300,
+ "##ーション": 12301,
+ "wind": 12302,
+ "386": 12303,
+ "frigidaire": 12304,
+ "##tl": 12305,
+ "liu": 12306,
+ "hsu": 12307,
+ "332": 12308,
+ "basic": 12309,
+ "von": 12310,
+ "ev": 12311,
+ "いた": 12312,
+ "てきる": 12313,
+ "スホンサーサイト": 12314,
+ "learning": 12315,
+ "##ull": 12316,
+ "expedia": 12317,
+ "archives": 12318,
+ "change": 12319,
+ "##wei": 12320,
+ "santa": 12321,
+ "cut": 12322,
+ "ins": 12323,
+ "6gb": 12324,
+ "turbo": 12325,
+ "brand": 12326,
+ "cf1": 12327,
+ "508": 12328,
+ "004": 12329,
+ "return": 12330,
+ "747": 12331,
+ "##rip": 12332,
+ "h1": 12333,
+ "##nis": 12334,
+ "##をこ": 12335,
+ "128gb": 12336,
+ "##にお": 12337,
+ "3t": 12338,
+ "application": 12339,
+ "しており": 12340,
+ "emc": 12341,
+ "rx": 12342,
+ "##oon": 12343,
+ "384": 12344,
+ "quick": 12345,
+ "412": 12346,
+ "15058": 12347,
+ "wilson": 12348,
+ "wing": 12349,
+ "chapter": 12350,
+ "##bug": 12351,
+ "beyond": 12352,
+ "##cms": 12353,
+ "##dar": 12354,
+ "##oh": 12355,
+ "zoom": 12356,
+ "e2": 12357,
+ "trip": 12358,
+ "sb": 12359,
+ "##nba": 12360,
+ "rcep": 12361,
+ "342": 12362,
+ "aspx": 12363,
+ "ci": 12364,
+ "080": 12365,
+ "gc": 12366,
+ "gnu": 12367,
+ "める": 12368,
+ "##count": 12369,
+ "advanced": 12370,
+ "dance": 12371,
+ "dv": 12372,
+ "##url": 12373,
+ "##ging": 12374,
+ "367": 12375,
+ "8591": 12376,
+ "am09": 12377,
+ "shadow": 12378,
+ "battle": 12379,
+ "346": 12380,
+ "##i": 12381,
+ "##cia": 12382,
+ "##という": 12383,
+ "emily": 12384,
+ "##のてす": 12385,
+ "##tation": 12386,
+ "host": 12387,
+ "ff": 12388,
+ "techorz": 12389,
+ "sars": 12390,
+ "##mini": 12391,
+ "##mporary": 12392,
+ "##ering": 12393,
+ "nc": 12394,
+ "4200": 12395,
+ "798": 12396,
+ "##next": 12397,
+ "cma": 12398,
+ "##mbps": 12399,
+ "##gas": 12400,
+ "##ift": 12401,
+ "##dot": 12402,
+ "##ィ": 12403,
+ "455": 12404,
+ "##~17": 12405,
+ "amana": 12406,
+ "##りの": 12407,
+ "426": 12408,
+ "##ros": 12409,
+ "ir": 12410,
+ "00㎡1": 12411,
+ "##eet": 12412,
+ "##ible": 12413,
+ "##↓": 12414,
+ "710": 12415,
+ "ˋ▽ˊ": 12416,
+ "##aka": 12417,
+ "dcs": 12418,
+ "iq": 12419,
+ "##v": 12420,
+ "l1": 12421,
+ "##lor": 12422,
+ "maggie": 12423,
+ "##011": 12424,
+ "##iu": 12425,
+ "588": 12426,
+ "##~1": 12427,
+ "830": 12428,
+ "##gt": 12429,
+ "1tb": 12430,
+ "articles": 12431,
+ "create": 12432,
+ "##burg": 12433,
+ "##iki": 12434,
+ "database": 12435,
+ "fantasy": 12436,
+ "##rex": 12437,
+ "##cam": 12438,
+ "dlc": 12439,
+ "dean": 12440,
+ "##you": 12441,
+ "hard": 12442,
+ "path": 12443,
+ "gaming": 12444,
+ "victoria": 12445,
+ "maps": 12446,
+ "cb": 12447,
+ "##lee": 12448,
+ "##itor": 12449,
+ "overchicstoretvhome": 12450,
+ "systems": 12451,
+ "##xt": 12452,
+ "416": 12453,
+ "p3": 12454,
+ "sarah": 12455,
+ "760": 12456,
+ "##nan": 12457,
+ "407": 12458,
+ "486": 12459,
+ "x9": 12460,
+ "install": 12461,
+ "second": 12462,
+ "626": 12463,
+ "##ann": 12464,
+ "##ph": 12465,
+ "##rcle": 12466,
+ "##nic": 12467,
+ "860": 12468,
+ "##nar": 12469,
+ "ec": 12470,
+ "##とう": 12471,
+ "768": 12472,
+ "metro": 12473,
+ "chocolate": 12474,
+ "##rian": 12475,
+ "~4": 12476,
+ "##table": 12477,
+ "##しています": 12478,
+ "skin": 12479,
+ "##sn": 12480,
+ "395": 12481,
+ "mountain": 12482,
+ "##0mm": 12483,
+ "inparadise": 12484,
+ "6m": 12485,
+ "7x24": 12486,
+ "ib": 12487,
+ "4800": 12488,
+ "##jia": 12489,
+ "eeworld": 12490,
+ "creative": 12491,
+ "g5": 12492,
+ "g3": 12493,
+ "357": 12494,
+ "parker": 12495,
+ "ecfa": 12496,
+ "village": 12497,
+ "からの": 12498,
+ "18000": 12499,
+ "sylvia": 12500,
+ "サーヒス": 12501,
+ "hbl": 12502,
+ "##ques": 12503,
+ "##onsored": 12504,
+ "##x2": 12505,
+ "##きます": 12506,
+ "##v4": 12507,
+ "##tein": 12508,
+ "ie6": 12509,
+ "383": 12510,
+ "##stack": 12511,
+ "389": 12512,
+ "ver": 12513,
+ "##ads": 12514,
+ "##baby": 12515,
+ "sound": 12516,
+ "bbe": 12517,
+ "##110": 12518,
+ "##lone": 12519,
+ "##uid": 12520,
+ "ads": 12521,
+ "022": 12522,
+ "gundam": 12523,
+ "351": 12524,
+ "thinkpad": 12525,
+ "006": 12526,
+ "scrum": 12527,
+ "match": 12528,
+ "##ave": 12529,
+ "mems": 12530,
+ "##470": 12531,
+ "##oy": 12532,
+ "##なりました": 12533,
+ "##talk": 12534,
+ "glass": 12535,
+ "lamigo": 12536,
+ "span": 12537,
+ "##eme": 12538,
+ "job": 12539,
+ "##a5": 12540,
+ "jay": 12541,
+ "wade": 12542,
+ "kde": 12543,
+ "498": 12544,
+ "##lace": 12545,
+ "ocean": 12546,
+ "tvg": 12547,
+ "##covery": 12548,
+ "##r3": 12549,
+ "##ners": 12550,
+ "##rea": 12551,
+ "junior": 12552,
+ "think": 12553,
+ "##aine": 12554,
+ "cover": 12555,
+ "##ision": 12556,
+ "##sia": 12557,
+ "↓↓": 12558,
+ "##bow": 12559,
+ "msi": 12560,
+ "413": 12561,
+ "458": 12562,
+ "406": 12563,
+ "##love": 12564,
+ "711": 12565,
+ "801": 12566,
+ "soft": 12567,
+ "z2": 12568,
+ "##pl": 12569,
+ "456": 12570,
+ "1840": 12571,
+ "mobil": 12572,
+ "mind": 12573,
+ "##uy": 12574,
+ "427": 12575,
+ "nginx": 12576,
+ "##oi": 12577,
+ "めた": 12578,
+ "##rr": 12579,
+ "6221": 12580,
+ "##mple": 12581,
+ "##sson": 12582,
+ "##ーシてす": 12583,
+ "371": 12584,
+ "##nts": 12585,
+ "91tv": 12586,
+ "comhd": 12587,
+ "crv3000": 12588,
+ "##uard": 12589,
+ "1868": 12590,
+ "397": 12591,
+ "deep": 12592,
+ "lost": 12593,
+ "field": 12594,
+ "gallery": 12595,
+ "##bia": 12596,
+ "rate": 12597,
+ "spf": 12598,
+ "redis": 12599,
+ "traction": 12600,
+ "930": 12601,
+ "icloud": 12602,
+ "011": 12603,
+ "なら": 12604,
+ "fe": 12605,
+ "jose": 12606,
+ "372": 12607,
+ "##tory": 12608,
+ "into": 12609,
+ "sohu": 12610,
+ "fx": 12611,
+ "899": 12612,
+ "379": 12613,
+ "kicstart2": 12614,
+ "##hia": 12615,
+ "すく": 12616,
+ "##~3": 12617,
+ "##sit": 12618,
+ "ra": 12619,
+ "24": 12620,
+ "##walk": 12621,
+ "##xure": 12622,
+ "500g": 12623,
+ "##pact": 12624,
+ "pacific": 12625,
+ "xa": 12626,
+ "natural": 12627,
+ "carlo": 12628,
+ "##250": 12629,
+ "##walker": 12630,
+ "1850": 12631,
+ "##can": 12632,
+ "cto": 12633,
+ "gigi": 12634,
+ "516": 12635,
+ "##サー": 12636,
+ "pen": 12637,
+ "##hoo": 12638,
+ "ob": 12639,
+ "matlab": 12640,
+ "##b": 12641,
+ "##yy": 12642,
+ "13913459": 12643,
+ "##iti": 12644,
+ "mango": 12645,
+ "##bbs": 12646,
+ "sense": 12647,
+ "c5": 12648,
+ "oxford": 12649,
+ "##ニア": 12650,
+ "walker": 12651,
+ "jennifer": 12652,
+ "##ola": 12653,
+ "course": 12654,
+ "##bre": 12655,
+ "701": 12656,
+ "##pus": 12657,
+ "##rder": 12658,
+ "lucky": 12659,
+ "075": 12660,
+ "##ぁ": 12661,
+ "ivy": 12662,
+ "なお": 12663,
+ "##nia": 12664,
+ "sotheby": 12665,
+ "side": 12666,
+ "##ugh": 12667,
+ "joy": 12668,
+ "##orage": 12669,
+ "##ush": 12670,
+ "##bat": 12671,
+ "##dt": 12672,
+ "364": 12673,
+ "r9": 12674,
+ "##2d": 12675,
+ "##gio": 12676,
+ "511": 12677,
+ "country": 12678,
+ "wear": 12679,
+ "##lax": 12680,
+ "##~7": 12681,
+ "##moon": 12682,
+ "393": 12683,
+ "seven": 12684,
+ "study": 12685,
+ "411": 12686,
+ "348": 12687,
+ "lonzo": 12688,
+ "8k": 12689,
+ "##ェ": 12690,
+ "evolution": 12691,
+ "##イフ": 12692,
+ "##kk": 12693,
+ "gs": 12694,
+ "kd": 12695,
+ "##レス": 12696,
+ "arduino": 12697,
+ "344": 12698,
+ "b12": 12699,
+ "##lux": 12700,
+ "arpg": 12701,
+ "##rdon": 12702,
+ "cook": 12703,
+ "##x5": 12704,
+ "dark": 12705,
+ "five": 12706,
+ "##als": 12707,
+ "##ida": 12708,
+ "とても": 12709,
+ "sign": 12710,
+ "362": 12711,
+ "##ちの": 12712,
+ "something": 12713,
+ "20mm": 12714,
+ "##nda": 12715,
+ "387": 12716,
+ "##posted": 12717,
+ "fresh": 12718,
+ "tf": 12719,
+ "1870": 12720,
+ "422": 12721,
+ "cam": 12722,
+ "##mine": 12723,
+ "##skip": 12724,
+ "##form": 12725,
+ "##ssion": 12726,
+ "education": 12727,
+ "394": 12728,
+ "##tee": 12729,
+ "dyson": 12730,
+ "stage": 12731,
+ "##jie": 12732,
+ "want": 12733,
+ "##night": 12734,
+ "epson": 12735,
+ "pack": 12736,
+ "あります": 12737,
+ "##ppy": 12738,
+ "テリヘル": 12739,
+ "##█": 12740,
+ "wd": 12741,
+ "##eh": 12742,
+ "##rence": 12743,
+ "left": 12744,
+ "##lvin": 12745,
+ "golden": 12746,
+ "mhz": 12747,
+ "discovery": 12748,
+ "##trix": 12749,
+ "##n2": 12750,
+ "loft": 12751,
+ "##uch": 12752,
+ "##dra": 12753,
+ "##sse": 12754,
+ "speed": 12755,
+ "~1": 12756,
+ "1mdb": 12757,
+ "sorry": 12758,
+ "welcome": 12759,
+ "##urn": 12760,
+ "wave": 12761,
+ "gaga": 12762,
+ "##lmer": 12763,
+ "teddy": 12764,
+ "##160": 12765,
+ "トラックハック": 12766,
+ "せよ": 12767,
+ "611": 12768,
+ "##f2016": 12769,
+ "378": 12770,
+ "rp": 12771,
+ "##sha": 12772,
+ "rar": 12773,
+ "##あなたに": 12774,
+ "##きた": 12775,
+ "840": 12776,
+ "holiday": 12777,
+ "##ュー": 12778,
+ "373": 12779,
+ "074": 12780,
+ "##vg": 12781,
+ "##nos": 12782,
+ "##rail": 12783,
+ "gartner": 12784,
+ "gi": 12785,
+ "6p": 12786,
+ "##dium": 12787,
+ "kit": 12788,
+ "488": 12789,
+ "b3": 12790,
+ "eco": 12791,
+ "##ろう": 12792,
+ "20g": 12793,
+ "sean": 12794,
+ "##stone": 12795,
+ "autocad": 12796,
+ "nu": 12797,
+ "##np": 12798,
+ "f16": 12799,
+ "write": 12800,
+ "029": 12801,
+ "m5": 12802,
+ "##ias": 12803,
+ "images": 12804,
+ "atp": 12805,
+ "##dk": 12806,
+ "fsm": 12807,
+ "504": 12808,
+ "1350": 12809,
+ "ve": 12810,
+ "52kb": 12811,
+ "##xxx": 12812,
+ "##のに": 12813,
+ "##cake": 12814,
+ "414": 12815,
+ "unit": 12816,
+ "lim": 12817,
+ "ru": 12818,
+ "1v": 12819,
+ "##ification": 12820,
+ "published": 12821,
+ "angela": 12822,
+ "16g": 12823,
+ "analytics": 12824,
+ "ak": 12825,
+ "##q": 12826,
+ "##nel": 12827,
+ "gmt": 12828,
+ "##icon": 12829,
+ "again": 12830,
+ "##₂": 12831,
+ "##bby": 12832,
+ "ios11": 12833,
+ "445": 12834,
+ "かこさいます": 12835,
+ "waze": 12836,
+ "いてす": 12837,
+ "##ハ": 12838,
+ "9985": 12839,
+ "##ust": 12840,
+ "##ティー": 12841,
+ "framework": 12842,
+ "##007": 12843,
+ "iptv": 12844,
+ "delete": 12845,
+ "52sykb": 12846,
+ "cl": 12847,
+ "wwdc": 12848,
+ "027": 12849,
+ "30cm": 12850,
+ "##fw": 12851,
+ "##ての": 12852,
+ "1389": 12853,
+ "##xon": 12854,
+ "brandt": 12855,
+ "##ses": 12856,
+ "##dragon": 12857,
+ "tc": 12858,
+ "vetements": 12859,
+ "anne": 12860,
+ "monte": 12861,
+ "modern": 12862,
+ "official": 12863,
+ "##へて": 12864,
+ "##ere": 12865,
+ "##nne": 12866,
+ "##oud": 12867,
+ "もちろん": 12868,
+ "50": 12869,
+ "etnews": 12870,
+ "##a2": 12871,
+ "##graphy": 12872,
+ "421": 12873,
+ "863": 12874,
+ "##ちゃん": 12875,
+ "444": 12876,
+ "##rtex": 12877,
+ "##てお": 12878,
+ "l2": 12879,
+ "##gma": 12880,
+ "mount": 12881,
+ "ccd": 12882,
+ "たと": 12883,
+ "archive": 12884,
+ "morning": 12885,
+ "tan": 12886,
+ "ddos": 12887,
+ "e7": 12888,
+ "##ホ": 12889,
+ "day4": 12890,
+ "##ウ": 12891,
+ "gis": 12892,
+ "453": 12893,
+ "its": 12894,
+ "495": 12895,
+ "factory": 12896,
+ "bruce": 12897,
+ "pg": 12898,
+ "##ito": 12899,
+ "ってくたさい": 12900,
+ "guest": 12901,
+ "cdma": 12902,
+ "##lling": 12903,
+ "536": 12904,
+ "n3": 12905,
+ "しかし": 12906,
+ "3~4": 12907,
+ "mega": 12908,
+ "eyes": 12909,
+ "ro": 12910,
+ "13": 12911,
+ "women": 12912,
+ "dac": 12913,
+ "church": 12914,
+ "##jun": 12915,
+ "singapore": 12916,
+ "##facebook": 12917,
+ "6991": 12918,
+ "starbucks": 12919,
+ "##tos": 12920,
+ "##stin": 12921,
+ "##shine": 12922,
+ "zen": 12923,
+ "##mu": 12924,
+ "tina": 12925,
+ "20℃": 12926,
+ "1893": 12927,
+ "##たけて": 12928,
+ "503": 12929,
+ "465": 12930,
+ "request": 12931,
+ "##gence": 12932,
+ "qt": 12933,
+ "##っ": 12934,
+ "1886": 12935,
+ "347": 12936,
+ "363": 12937,
+ "q7": 12938,
+ "##zzi": 12939,
+ "diary": 12940,
+ "##tore": 12941,
+ "409": 12942,
+ "##ead": 12943,
+ "468": 12944,
+ "cst": 12945,
+ "##osa": 12946,
+ "canada": 12947,
+ "agent": 12948,
+ "va": 12949,
+ "##jiang": 12950,
+ "##ちは": 12951,
+ "##ーク": 12952,
+ "##lam": 12953,
+ "sg": 12954,
+ "##nix": 12955,
+ "##sday": 12956,
+ "##よって": 12957,
+ "g6": 12958,
+ "##master": 12959,
+ "bing": 12960,
+ "##zl": 12961,
+ "charlie": 12962,
+ "16": 12963,
+ "8mm": 12964,
+ "nb40": 12965,
+ "##ーン": 12966,
+ "thai": 12967,
+ "##ルフ": 12968,
+ "ln284ct": 12969,
+ "##itz": 12970,
+ "##2f": 12971,
+ "bonnie": 12972,
+ "##food": 12973,
+ "##lent": 12974,
+ "originals": 12975,
+ "##stro": 12976,
+ "##lts": 12977,
+ "418": 12978,
+ "∟∣": 12979,
+ "##bscribe": 12980,
+ "children": 12981,
+ "ntd": 12982,
+ "yesstyle": 12983,
+ "##かも": 12984,
+ "hmv": 12985,
+ "##tment": 12986,
+ "d5": 12987,
+ "2cm": 12988,
+ "arts": 12989,
+ "sms": 12990,
+ "##pn": 12991,
+ "##я": 12992,
+ "##いい": 12993,
+ "topios9": 12994,
+ "539": 12995,
+ "lifestyle": 12996,
+ "virtual": 12997,
+ "##ague": 12998,
+ "xz": 12999,
+ "##deo": 13000,
+ "muji": 13001,
+ "024": 13002,
+ "unt": 13003,
+ "##nnis": 13004,
+ "##ᅩ": 13005,
+ "faq1": 13006,
+ "1884": 13007,
+ "396": 13008,
+ "##ette": 13009,
+ "fly": 13010,
+ "64㎡": 13011,
+ "はしめまして": 13012,
+ "441": 13013,
+ "curry": 13014,
+ "##pop": 13015,
+ "のこ": 13016,
+ "release": 13017,
+ "##←": 13018,
+ "##◆◆": 13019,
+ "##cast": 13020,
+ "073": 13021,
+ "ありな": 13022,
+ "500ml": 13023,
+ "##ews": 13024,
+ "5c": 13025,
+ "##stle": 13026,
+ "ios7": 13027,
+ "##ima": 13028,
+ "787": 13029,
+ "dog": 13030,
+ "lenovo": 13031,
+ "##r4": 13032,
+ "roger": 13033,
+ "013": 13034,
+ "cbs": 13035,
+ "vornado": 13036,
+ "100m": 13037,
+ "417": 13038,
+ "##desk": 13039,
+ "##クok": 13040,
+ "##ald": 13041,
+ "1867": 13042,
+ "9595": 13043,
+ "2900": 13044,
+ "##van": 13045,
+ "oil": 13046,
+ "##x": 13047,
+ "some": 13048,
+ "break": 13049,
+ "common": 13050,
+ "##jy": 13051,
+ "##lines": 13052,
+ "g7": 13053,
+ "twice": 13054,
+ "419": 13055,
+ "ella": 13056,
+ "nano": 13057,
+ "belle": 13058,
+ "にこ": 13059,
+ "##mes": 13060,
+ "##self": 13061,
+ "##note": 13062,
+ "jb": 13063,
+ "##ことかてきます": 13064,
+ "benz": 13065,
+ "##との": 13066,
+ "##ova": 13067,
+ "451": 13068,
+ "save": 13069,
+ "##wing": 13070,
+ "##ますのて": 13071,
+ "kai": 13072,
+ "りは": 13073,
+ "##hua": 13074,
+ "##rect": 13075,
+ "rainer": 13076,
+ "##unge": 13077,
+ "448": 13078,
+ "##0m": 13079,
+ "adsl": 13080,
+ "##かな": 13081,
+ "guestname": 13082,
+ "##uma": 13083,
+ "##kins": 13084,
+ "##zu": 13085,
+ "tokichoi": 13086,
+ "##price": 13087,
+ "county": 13088,
+ "##med": 13089,
+ "##mus": 13090,
+ "rmk": 13091,
+ "391": 13092,
+ "address": 13093,
+ "vm": 13094,
+ "えて": 13095,
+ "openload": 13096,
+ "##group": 13097,
+ "##hin": 13098,
+ "##iginal": 13099,
+ "amg": 13100,
+ "urban": 13101,
+ "##oz": 13102,
+ "jobs": 13103,
+ "emi": 13104,
+ "##public": 13105,
+ "beautiful": 13106,
+ "##sch": 13107,
+ "album": 13108,
+ "##dden": 13109,
+ "##bell": 13110,
+ "jerry": 13111,
+ "works": 13112,
+ "hostel": 13113,
+ "miller": 13114,
+ "##drive": 13115,
+ "##rmin": 13116,
+ "##10": 13117,
+ "376": 13118,
+ "boot": 13119,
+ "828": 13120,
+ "##370": 13121,
+ "##fx": 13122,
+ "##cm~": 13123,
+ "1885": 13124,
+ "##nome": 13125,
+ "##ctionary": 13126,
+ "##oman": 13127,
+ "##lish": 13128,
+ "##cr": 13129,
+ "##hm": 13130,
+ "433": 13131,
+ "##how": 13132,
+ "432": 13133,
+ "francis": 13134,
+ "xi": 13135,
+ "c919": 13136,
+ "b5": 13137,
+ "evernote": 13138,
+ "##uc": 13139,
+ "vga": 13140,
+ "##3000": 13141,
+ "coupe": 13142,
+ "##urg": 13143,
+ "##cca": 13144,
+ "##uality": 13145,
+ "019": 13146,
+ "6g": 13147,
+ "れる": 13148,
+ "multi": 13149,
+ "##また": 13150,
+ "##ett": 13151,
+ "em": 13152,
+ "hey": 13153,
+ "##ani": 13154,
+ "##tax": 13155,
+ "##rma": 13156,
+ "inside": 13157,
+ "than": 13158,
+ "740": 13159,
+ "leonnhurt": 13160,
+ "##jin": 13161,
+ "ict": 13162,
+ "れた": 13163,
+ "bird": 13164,
+ "notes": 13165,
+ "200mm": 13166,
+ "くの": 13167,
+ "##dical": 13168,
+ "##lli": 13169,
+ "result": 13170,
+ "442": 13171,
+ "iu": 13172,
+ "ee": 13173,
+ "438": 13174,
+ "smap": 13175,
+ "gopro": 13176,
+ "##last": 13177,
+ "yin": 13178,
+ "pure": 13179,
+ "998": 13180,
+ "32g": 13181,
+ "けた": 13182,
+ "5kg": 13183,
+ "##dan": 13184,
+ "##rame": 13185,
+ "mama": 13186,
+ "##oot": 13187,
+ "bean": 13188,
+ "marketing": 13189,
+ "##hur": 13190,
+ "2l": 13191,
+ "bella": 13192,
+ "sync": 13193,
+ "xuite": 13194,
+ "##ground": 13195,
+ "515": 13196,
+ "discuz": 13197,
+ "##getrelax": 13198,
+ "##ince": 13199,
+ "##bay": 13200,
+ "##5s": 13201,
+ "cj": 13202,
+ "##イス": 13203,
+ "gmat": 13204,
+ "apt": 13205,
+ "##pass": 13206,
+ "jing": 13207,
+ "##rix": 13208,
+ "c4": 13209,
+ "rich": 13210,
+ "##とても": 13211,
+ "niusnews": 13212,
+ "##ello": 13213,
+ "bag": 13214,
+ "770": 13215,
+ "##eting": 13216,
+ "##mobile": 13217,
+ "18": 13218,
+ "culture": 13219,
+ "015": 13220,
+ "##のてすか": 13221,
+ "377": 13222,
+ "1020": 13223,
+ "area": 13224,
+ "##ience": 13225,
+ "616": 13226,
+ "details": 13227,
+ "gp": 13228,
+ "universal": 13229,
+ "silver": 13230,
+ "dit": 13231,
+ "はお": 13232,
+ "private": 13233,
+ "ddd": 13234,
+ "u11": 13235,
+ "kanshu": 13236,
+ "##ified": 13237,
+ "fung": 13238,
+ "##nny": 13239,
+ "dx": 13240,
+ "##520": 13241,
+ "tai": 13242,
+ "475": 13243,
+ "023": 13244,
+ "##fr": 13245,
+ "##lean": 13246,
+ "3s": 13247,
+ "##pin": 13248,
+ "429": 13249,
+ "##rin": 13250,
+ "25000": 13251,
+ "ly": 13252,
+ "rick": 13253,
+ "##bility": 13254,
+ "usb3": 13255,
+ "banner": 13256,
+ "##baru": 13257,
+ "##gion": 13258,
+ "metal": 13259,
+ "dt": 13260,
+ "vdf": 13261,
+ "1871": 13262,
+ "karl": 13263,
+ "qualcomm": 13264,
+ "bear": 13265,
+ "1010": 13266,
+ "oldid": 13267,
+ "ian": 13268,
+ "jo": 13269,
+ "##tors": 13270,
+ "population": 13271,
+ "##ernel": 13272,
+ "1882": 13273,
+ "mmorpg": 13274,
+ "##mv": 13275,
+ "##bike": 13276,
+ "603": 13277,
+ "##©": 13278,
+ "ww": 13279,
+ "friend": 13280,
+ "##ager": 13281,
+ "exhibition": 13282,
+ "##del": 13283,
+ "##pods": 13284,
+ "fpx": 13285,
+ "structure": 13286,
+ "##free": 13287,
+ "##tings": 13288,
+ "kl": 13289,
+ "##rley": 13290,
+ "##copyright": 13291,
+ "##mma": 13292,
+ "california": 13293,
+ "3400": 13294,
+ "orange": 13295,
+ "yoga": 13296,
+ "4l": 13297,
+ "canmake": 13298,
+ "honey": 13299,
+ "##anda": 13300,
+ "##コメント": 13301,
+ "595": 13302,
+ "nikkie": 13303,
+ "##ルハイト": 13304,
+ "dhl": 13305,
+ "publishing": 13306,
+ "##mall": 13307,
+ "##gnet": 13308,
+ "20cm": 13309,
+ "513": 13310,
+ "##クセス": 13311,
+ "##┅": 13312,
+ "e88": 13313,
+ "970": 13314,
+ "##dog": 13315,
+ "fishbase": 13316,
+ "##!": 13317,
+ "##\"": 13318,
+ "###": 13319,
+ "##$": 13320,
+ "##%": 13321,
+ "##&": 13322,
+ "##'": 13323,
+ "##(": 13324,
+ "##)": 13325,
+ "##*": 13326,
+ "##+": 13327,
+ "##,": 13328,
+ "##-": 13329,
+ "##.": 13330,
+ "##/": 13331,
+ "##:": 13332,
+ "##;": 13333,
+ "##<": 13334,
+ "##=": 13335,
+ "##>": 13336,
+ "##?": 13337,
+ "##@": 13338,
+ "##[": 13339,
+ "##\\": 13340,
+ "##]": 13341,
+ "##^": 13342,
+ "##_": 13343,
+ "##{": 13344,
+ "##|": 13345,
+ "##}": 13346,
+ "##~": 13347,
+ "##£": 13348,
+ "##¤": 13349,
+ "##¥": 13350,
+ "##§": 13351,
+ "##«": 13352,
+ "##±": 13353,
+ "##³": 13354,
+ "##µ": 13355,
+ "##·": 13356,
+ "##¹": 13357,
+ "##º": 13358,
+ "##»": 13359,
+ "##¼": 13360,
+ "##ß": 13361,
+ "##æ": 13362,
+ "##÷": 13363,
+ "##ø": 13364,
+ "##đ": 13365,
+ "##ŋ": 13366,
+ "##ɔ": 13367,
+ "##ə": 13368,
+ "##ɡ": 13369,
+ "##ʰ": 13370,
+ "##ˇ": 13371,
+ "##ˈ": 13372,
+ "##ˊ": 13373,
+ "##ˋ": 13374,
+ "##ˍ": 13375,
+ "##ː": 13376,
+ "##˙": 13377,
+ "##˚": 13378,
+ "##ˢ": 13379,
+ "##α": 13380,
+ "##β": 13381,
+ "##γ": 13382,
+ "##δ": 13383,
+ "##ε": 13384,
+ "##η": 13385,
+ "##θ": 13386,
+ "##ι": 13387,
+ "##κ": 13388,
+ "##λ": 13389,
+ "##μ": 13390,
+ "##ν": 13391,
+ "##ο": 13392,
+ "##π": 13393,
+ "##ρ": 13394,
+ "##ς": 13395,
+ "##σ": 13396,
+ "##τ": 13397,
+ "##υ": 13398,
+ "##φ": 13399,
+ "##χ": 13400,
+ "##ψ": 13401,
+ "##б": 13402,
+ "##в": 13403,
+ "##г": 13404,
+ "##д": 13405,
+ "##е": 13406,
+ "##ж": 13407,
+ "##з": 13408,
+ "##к": 13409,
+ "##л": 13410,
+ "##м": 13411,
+ "##н": 13412,
+ "##о": 13413,
+ "##п": 13414,
+ "##р": 13415,
+ "##с": 13416,
+ "##т": 13417,
+ "##у": 13418,
+ "##ф": 13419,
+ "##х": 13420,
+ "##ц": 13421,
+ "##ч": 13422,
+ "##ш": 13423,
+ "##ы": 13424,
+ "##ь": 13425,
+ "##і": 13426,
+ "##ا": 13427,
+ "##ب": 13428,
+ "##ة": 13429,
+ "##ت": 13430,
+ "##د": 13431,
+ "##ر": 13432,
+ "##س": 13433,
+ "##ع": 13434,
+ "##ل": 13435,
+ "##م": 13436,
+ "##ن": 13437,
+ "##ه": 13438,
+ "##و": 13439,
+ "##ي": 13440,
+ "##۩": 13441,
+ "##ก": 13442,
+ "##ง": 13443,
+ "##น": 13444,
+ "##ม": 13445,
+ "##ย": 13446,
+ "##ร": 13447,
+ "##อ": 13448,
+ "##า": 13449,
+ "##เ": 13450,
+ "##๑": 13451,
+ "##་": 13452,
+ "##ღ": 13453,
+ "##ᄀ": 13454,
+ "##ᄁ": 13455,
+ "##ᄂ": 13456,
+ "##ᄃ": 13457,
+ "##ᄅ": 13458,
+ "##ᄆ": 13459,
+ "##ᄇ": 13460,
+ "##ᄈ": 13461,
+ "##ᄉ": 13462,
+ "##ᄋ": 13463,
+ "##ᄌ": 13464,
+ "##ᄎ": 13465,
+ "##ᄏ": 13466,
+ "##ᄐ": 13467,
+ "##ᄑ": 13468,
+ "##ᄒ": 13469,
+ "##ᅢ": 13470,
+ "##ᅣ": 13471,
+ "##ᅥ": 13472,
+ "##ᅦ": 13473,
+ "##ᅧ": 13474,
+ "##ᅨ": 13475,
+ "##ᅪ": 13476,
+ "##ᅬ": 13477,
+ "##ᅭ": 13478,
+ "##ᅮ": 13479,
+ "##ᅯ": 13480,
+ "##ᅲ": 13481,
+ "##ᅳ": 13482,
+ "##ᅴ": 13483,
+ "##ᆷ": 13484,
+ "##ᆸ": 13485,
+ "##ᆺ": 13486,
+ "##ᆻ": 13487,
+ "##ᗜ": 13488,
+ "##ᵃ": 13489,
+ "##ᵉ": 13490,
+ "##ᵍ": 13491,
+ "##ᵏ": 13492,
+ "##ᵐ": 13493,
+ "##ᵒ": 13494,
+ "##ᵘ": 13495,
+ "##‖": 13496,
+ "##„": 13497,
+ "##†": 13498,
+ "##•": 13499,
+ "##‥": 13500,
+ "##‧": 13501,
+ "##
": 13502,
+ "##‰": 13503,
+ "##′": 13504,
+ "##″": 13505,
+ "##‹": 13506,
+ "##›": 13507,
+ "##※": 13508,
+ "##‿": 13509,
+ "##⁄": 13510,
+ "##ⁱ": 13511,
+ "##⁺": 13512,
+ "##ⁿ": 13513,
+ "##₁": 13514,
+ "##₃": 13515,
+ "##₄": 13516,
+ "##€": 13517,
+ "##№": 13518,
+ "##ⅰ": 13519,
+ "##ⅱ": 13520,
+ "##ⅲ": 13521,
+ "##ⅳ": 13522,
+ "##ⅴ": 13523,
+ "##↔": 13524,
+ "##↗": 13525,
+ "##↘": 13526,
+ "##⇒": 13527,
+ "##∀": 13528,
+ "##−": 13529,
+ "##∕": 13530,
+ "##∙": 13531,
+ "##√": 13532,
+ "##∞": 13533,
+ "##∟": 13534,
+ "##∠": 13535,
+ "##∣": 13536,
+ "##∩": 13537,
+ "##∮": 13538,
+ "##∶": 13539,
+ "##∼": 13540,
+ "##∽": 13541,
+ "##≈": 13542,
+ "##≒": 13543,
+ "##≡": 13544,
+ "##≤": 13545,
+ "##≥": 13546,
+ "##≦": 13547,
+ "##≧": 13548,
+ "##≪": 13549,
+ "##≫": 13550,
+ "##⊙": 13551,
+ "##⋅": 13552,
+ "##⋈": 13553,
+ "##⋯": 13554,
+ "##⌒": 13555,
+ "##①": 13556,
+ "##②": 13557,
+ "##③": 13558,
+ "##④": 13559,
+ "##⑤": 13560,
+ "##⑥": 13561,
+ "##⑦": 13562,
+ "##⑧": 13563,
+ "##⑨": 13564,
+ "##⑩": 13565,
+ "##⑴": 13566,
+ "##⑵": 13567,
+ "##⑶": 13568,
+ "##⑷": 13569,
+ "##⑸": 13570,
+ "##⒈": 13571,
+ "##⒉": 13572,
+ "##⒊": 13573,
+ "##⒋": 13574,
+ "##ⓒ": 13575,
+ "##ⓔ": 13576,
+ "##ⓘ": 13577,
+ "##━": 13578,
+ "##┃": 13579,
+ "##┆": 13580,
+ "##┊": 13581,
+ "##┌": 13582,
+ "##└": 13583,
+ "##├": 13584,
+ "##┣": 13585,
+ "##═": 13586,
+ "##║": 13587,
+ "##╚": 13588,
+ "##╞": 13589,
+ "##╠": 13590,
+ "##╭": 13591,
+ "##╮": 13592,
+ "##╯": 13593,
+ "##╰": 13594,
+ "##╱": 13595,
+ "##╳": 13596,
+ "##▂": 13597,
+ "##▃": 13598,
+ "##▅": 13599,
+ "##▇": 13600,
+ "##▉": 13601,
+ "##▋": 13602,
+ "##▌": 13603,
+ "##▍": 13604,
+ "##▎": 13605,
+ "##□": 13606,
+ "##▪": 13607,
+ "##▫": 13608,
+ "##▬": 13609,
+ "##△": 13610,
+ "##▶": 13611,
+ "##►": 13612,
+ "##▽": 13613,
+ "##◇": 13614,
+ "##◕": 13615,
+ "##◠": 13616,
+ "##◢": 13617,
+ "##◤": 13618,
+ "##☀": 13619,
+ "##☕": 13620,
+ "##☞": 13621,
+ "##☺": 13622,
+ "##☼": 13623,
+ "##♀": 13624,
+ "##♂": 13625,
+ "##♠": 13626,
+ "##♡": 13627,
+ "##♣": 13628,
+ "##♦": 13629,
+ "##♫": 13630,
+ "##♬": 13631,
+ "##✈": 13632,
+ "##✔": 13633,
+ "##✕": 13634,
+ "##✖": 13635,
+ "##✦": 13636,
+ "##✨": 13637,
+ "##✪": 13638,
+ "##✰": 13639,
+ "##✿": 13640,
+ "##❀": 13641,
+ "##➜": 13642,
+ "##➤": 13643,
+ "##⦿": 13644,
+ "##、": 13645,
+ "##。": 13646,
+ "##〃": 13647,
+ "##々": 13648,
+ "##〇": 13649,
+ "##〈": 13650,
+ "##〉": 13651,
+ "##《": 13652,
+ "##》": 13653,
+ "##「": 13654,
+ "##」": 13655,
+ "##『": 13656,
+ "##』": 13657,
+ "##【": 13658,
+ "##】": 13659,
+ "##〓": 13660,
+ "##〔": 13661,
+ "##〕": 13662,
+ "##〖": 13663,
+ "##〗": 13664,
+ "##〜": 13665,
+ "##〝": 13666,
+ "##〞": 13667,
+ "##ぃ": 13668,
+ "##ぇ": 13669,
+ "##ぬ": 13670,
+ "##ふ": 13671,
+ "##ほ": 13672,
+ "##む": 13673,
+ "##ゃ": 13674,
+ "##ゅ": 13675,
+ "##ゆ": 13676,
+ "##ょ": 13677,
+ "##゜": 13678,
+ "##ゝ": 13679,
+ "##ァ": 13680,
+ "##ゥ": 13681,
+ "##エ": 13682,
+ "##ォ": 13683,
+ "##ケ": 13684,
+ "##サ": 13685,
+ "##セ": 13686,
+ "##ソ": 13687,
+ "##ッ": 13688,
+ "##ニ": 13689,
+ "##ヌ": 13690,
+ "##ネ": 13691,
+ "##ノ": 13692,
+ "##ヘ": 13693,
+ "##モ": 13694,
+ "##ャ": 13695,
+ "##ヤ": 13696,
+ "##ュ": 13697,
+ "##ユ": 13698,
+ "##ョ": 13699,
+ "##ヨ": 13700,
+ "##ワ": 13701,
+ "##ヲ": 13702,
+ "##・": 13703,
+ "##ヽ": 13704,
+ "##ㄅ": 13705,
+ "##ㄆ": 13706,
+ "##ㄇ": 13707,
+ "##ㄉ": 13708,
+ "##ㄋ": 13709,
+ "##ㄌ": 13710,
+ "##ㄍ": 13711,
+ "##ㄎ": 13712,
+ "##ㄏ": 13713,
+ "##ㄒ": 13714,
+ "##ㄚ": 13715,
+ "##ㄛ": 13716,
+ "##ㄞ": 13717,
+ "##ㄟ": 13718,
+ "##ㄢ": 13719,
+ "##ㄤ": 13720,
+ "##ㄥ": 13721,
+ "##ㄧ": 13722,
+ "##ㄨ": 13723,
+ "##ㆍ": 13724,
+ "##㈦": 13725,
+ "##㊣": 13726,
+ "##㗎": 13727,
+ "##一": 13728,
+ "##丁": 13729,
+ "##七": 13730,
+ "##万": 13731,
+ "##丈": 13732,
+ "##三": 13733,
+ "##上": 13734,
+ "##下": 13735,
+ "##不": 13736,
+ "##与": 13737,
+ "##丐": 13738,
+ "##丑": 13739,
+ "##专": 13740,
+ "##且": 13741,
+ "##丕": 13742,
+ "##世": 13743,
+ "##丘": 13744,
+ "##丙": 13745,
+ "##业": 13746,
+ "##丛": 13747,
+ "##东": 13748,
+ "##丝": 13749,
+ "##丞": 13750,
+ "##丟": 13751,
+ "##両": 13752,
+ "##丢": 13753,
+ "##两": 13754,
+ "##严": 13755,
+ "##並": 13756,
+ "##丧": 13757,
+ "##丨": 13758,
+ "##个": 13759,
+ "##丫": 13760,
+ "##中": 13761,
+ "##丰": 13762,
+ "##串": 13763,
+ "##临": 13764,
+ "##丶": 13765,
+ "##丸": 13766,
+ "##丹": 13767,
+ "##为": 13768,
+ "##主": 13769,
+ "##丼": 13770,
+ "##丽": 13771,
+ "##举": 13772,
+ "##丿": 13773,
+ "##乂": 13774,
+ "##乃": 13775,
+ "##久": 13776,
+ "##么": 13777,
+ "##义": 13778,
+ "##之": 13779,
+ "##乌": 13780,
+ "##乍": 13781,
+ "##乎": 13782,
+ "##乏": 13783,
+ "##乐": 13784,
+ "##乒": 13785,
+ "##乓": 13786,
+ "##乔": 13787,
+ "##乖": 13788,
+ "##乗": 13789,
+ "##乘": 13790,
+ "##乙": 13791,
+ "##乜": 13792,
+ "##九": 13793,
+ "##乞": 13794,
+ "##也": 13795,
+ "##习": 13796,
+ "##乡": 13797,
+ "##书": 13798,
+ "##乩": 13799,
+ "##买": 13800,
+ "##乱": 13801,
+ "##乳": 13802,
+ "##乾": 13803,
+ "##亀": 13804,
+ "##亂": 13805,
+ "##了": 13806,
+ "##予": 13807,
+ "##争": 13808,
+ "##事": 13809,
+ "##二": 13810,
+ "##于": 13811,
+ "##亏": 13812,
+ "##云": 13813,
+ "##互": 13814,
+ "##五": 13815,
+ "##井": 13816,
+ "##亘": 13817,
+ "##亙": 13818,
+ "##亚": 13819,
+ "##些": 13820,
+ "##亜": 13821,
+ "##亞": 13822,
+ "##亟": 13823,
+ "##亡": 13824,
+ "##亢": 13825,
+ "##交": 13826,
+ "##亥": 13827,
+ "##亦": 13828,
+ "##产": 13829,
+ "##亨": 13830,
+ "##亩": 13831,
+ "##享": 13832,
+ "##京": 13833,
+ "##亭": 13834,
+ "##亮": 13835,
+ "##亲": 13836,
+ "##亳": 13837,
+ "##亵": 13838,
+ "##人": 13839,
+ "##亿": 13840,
+ "##什": 13841,
+ "##仁": 13842,
+ "##仃": 13843,
+ "##仄": 13844,
+ "##仅": 13845,
+ "##仆": 13846,
+ "##仇": 13847,
+ "##今": 13848,
+ "##介": 13849,
+ "##仍": 13850,
+ "##从": 13851,
+ "##仏": 13852,
+ "##仑": 13853,
+ "##仓": 13854,
+ "##仔": 13855,
+ "##仕": 13856,
+ "##他": 13857,
+ "##仗": 13858,
+ "##付": 13859,
+ "##仙": 13860,
+ "##仝": 13861,
+ "##仞": 13862,
+ "##仟": 13863,
+ "##代": 13864,
+ "##令": 13865,
+ "##以": 13866,
+ "##仨": 13867,
+ "##仪": 13868,
+ "##们": 13869,
+ "##仮": 13870,
+ "##仰": 13871,
+ "##仲": 13872,
+ "##件": 13873,
+ "##价": 13874,
+ "##任": 13875,
+ "##份": 13876,
+ "##仿": 13877,
+ "##企": 13878,
+ "##伉": 13879,
+ "##伊": 13880,
+ "##伍": 13881,
+ "##伎": 13882,
+ "##伏": 13883,
+ "##伐": 13884,
+ "##休": 13885,
+ "##伕": 13886,
+ "##众": 13887,
+ "##优": 13888,
+ "##伙": 13889,
+ "##会": 13890,
+ "##伝": 13891,
+ "##伞": 13892,
+ "##伟": 13893,
+ "##传": 13894,
+ "##伢": 13895,
+ "##伤": 13896,
+ "##伦": 13897,
+ "##伪": 13898,
+ "##伫": 13899,
+ "##伯": 13900,
+ "##估": 13901,
+ "##伴": 13902,
+ "##伶": 13903,
+ "##伸": 13904,
+ "##伺": 13905,
+ "##似": 13906,
+ "##伽": 13907,
+ "##佃": 13908,
+ "##但": 13909,
+ "##佇": 13910,
+ "##佈": 13911,
+ "##位": 13912,
+ "##低": 13913,
+ "##住": 13914,
+ "##佐": 13915,
+ "##佑": 13916,
+ "##体": 13917,
+ "##佔": 13918,
+ "##何": 13919,
+ "##佗": 13920,
+ "##佘": 13921,
+ "##余": 13922,
+ "##佚": 13923,
+ "##佛": 13924,
+ "##作": 13925,
+ "##佝": 13926,
+ "##佞": 13927,
+ "##佟": 13928,
+ "##你": 13929,
+ "##佢": 13930,
+ "##佣": 13931,
+ "##佤": 13932,
+ "##佥": 13933,
+ "##佩": 13934,
+ "##佬": 13935,
+ "##佯": 13936,
+ "##佰": 13937,
+ "##佳": 13938,
+ "##併": 13939,
+ "##佶": 13940,
+ "##佻": 13941,
+ "##佼": 13942,
+ "##使": 13943,
+ "##侃": 13944,
+ "##侄": 13945,
+ "##來": 13946,
+ "##侈": 13947,
+ "##例": 13948,
+ "##侍": 13949,
+ "##侏": 13950,
+ "##侑": 13951,
+ "##侖": 13952,
+ "##侗": 13953,
+ "##供": 13954,
+ "##依": 13955,
+ "##侠": 13956,
+ "##価": 13957,
+ "##侣": 13958,
+ "##侥": 13959,
+ "##侦": 13960,
+ "##侧": 13961,
+ "##侨": 13962,
+ "##侬": 13963,
+ "##侮": 13964,
+ "##侯": 13965,
+ "##侵": 13966,
+ "##侶": 13967,
+ "##侷": 13968,
+ "##便": 13969,
+ "##係": 13970,
+ "##促": 13971,
+ "##俄": 13972,
+ "##俊": 13973,
+ "##俎": 13974,
+ "##俏": 13975,
+ "##俐": 13976,
+ "##俑": 13977,
+ "##俗": 13978,
+ "##俘": 13979,
+ "##俚": 13980,
+ "##保": 13981,
+ "##俞": 13982,
+ "##俟": 13983,
+ "##俠": 13984,
+ "##信": 13985,
+ "##俨": 13986,
+ "##俩": 13987,
+ "##俪": 13988,
+ "##俬": 13989,
+ "##俭": 13990,
+ "##修": 13991,
+ "##俯": 13992,
+ "##俱": 13993,
+ "##俳": 13994,
+ "##俸": 13995,
+ "##俺": 13996,
+ "##俾": 13997,
+ "##倆": 13998,
+ "##倉": 13999,
+ "##個": 14000,
+ "##倌": 14001,
+ "##倍": 14002,
+ "##倏": 14003,
+ "##們": 14004,
+ "##倒": 14005,
+ "##倔": 14006,
+ "##倖": 14007,
+ "##倘": 14008,
+ "##候": 14009,
+ "##倚": 14010,
+ "##倜": 14011,
+ "##借": 14012,
+ "##倡": 14013,
+ "##値": 14014,
+ "##倦": 14015,
+ "##倩": 14016,
+ "##倪": 14017,
+ "##倫": 14018,
+ "##倬": 14019,
+ "##倭": 14020,
+ "##倶": 14021,
+ "##债": 14022,
+ "##值": 14023,
+ "##倾": 14024,
+ "##偃": 14025,
+ "##假": 14026,
+ "##偈": 14027,
+ "##偉": 14028,
+ "##偌": 14029,
+ "##偎": 14030,
+ "##偏": 14031,
+ "##偕": 14032,
+ "##做": 14033,
+ "##停": 14034,
+ "##健": 14035,
+ "##側": 14036,
+ "##偵": 14037,
+ "##偶": 14038,
+ "##偷": 14039,
+ "##偻": 14040,
+ "##偽": 14041,
+ "##偿": 14042,
+ "##傀": 14043,
+ "##傅": 14044,
+ "##傍": 14045,
+ "##傑": 14046,
+ "##傘": 14047,
+ "##備": 14048,
+ "##傚": 14049,
+ "##傢": 14050,
+ "##傣": 14051,
+ "##傥": 14052,
+ "##储": 14053,
+ "##傩": 14054,
+ "##催": 14055,
+ "##傭": 14056,
+ "##傲": 14057,
+ "##傳": 14058,
+ "##債": 14059,
+ "##傷": 14060,
+ "##傻": 14061,
+ "##傾": 14062,
+ "##僅": 14063,
+ "##働": 14064,
+ "##像": 14065,
+ "##僑": 14066,
+ "##僕": 14067,
+ "##僖": 14068,
+ "##僚": 14069,
+ "##僥": 14070,
+ "##僧": 14071,
+ "##僭": 14072,
+ "##僮": 14073,
+ "##僱": 14074,
+ "##僵": 14075,
+ "##價": 14076,
+ "##僻": 14077,
+ "##儀": 14078,
+ "##儂": 14079,
+ "##億": 14080,
+ "##儆": 14081,
+ "##儉": 14082,
+ "##儋": 14083,
+ "##儒": 14084,
+ "##儕": 14085,
+ "##儘": 14086,
+ "##償": 14087,
+ "##儡": 14088,
+ "##優": 14089,
+ "##儲": 14090,
+ "##儷": 14091,
+ "##儼": 14092,
+ "##儿": 14093,
+ "##兀": 14094,
+ "##允": 14095,
+ "##元": 14096,
+ "##兄": 14097,
+ "##充": 14098,
+ "##兆": 14099,
+ "##兇": 14100,
+ "##先": 14101,
+ "##光": 14102,
+ "##克": 14103,
+ "##兌": 14104,
+ "##免": 14105,
+ "##児": 14106,
+ "##兑": 14107,
+ "##兒": 14108,
+ "##兔": 14109,
+ "##兖": 14110,
+ "##党": 14111,
+ "##兜": 14112,
+ "##兢": 14113,
+ "##入": 14114,
+ "##內": 14115,
+ "##全": 14116,
+ "##兩": 14117,
+ "##八": 14118,
+ "##公": 14119,
+ "##六": 14120,
+ "##兮": 14121,
+ "##兰": 14122,
+ "##共": 14123,
+ "##兲": 14124,
+ "##关": 14125,
+ "##兴": 14126,
+ "##兵": 14127,
+ "##其": 14128,
+ "##具": 14129,
+ "##典": 14130,
+ "##兹": 14131,
+ "##养": 14132,
+ "##兼": 14133,
+ "##兽": 14134,
+ "##冀": 14135,
+ "##内": 14136,
+ "##円": 14137,
+ "##冇": 14138,
+ "##冈": 14139,
+ "##冉": 14140,
+ "##冊": 14141,
+ "##册": 14142,
+ "##再": 14143,
+ "##冏": 14144,
+ "##冒": 14145,
+ "##冕": 14146,
+ "##冗": 14147,
+ "##写": 14148,
+ "##军": 14149,
+ "##农": 14150,
+ "##冠": 14151,
+ "##冢": 14152,
+ "##冤": 14153,
+ "##冥": 14154,
+ "##冨": 14155,
+ "##冪": 14156,
+ "##冬": 14157,
+ "##冯": 14158,
+ "##冰": 14159,
+ "##冲": 14160,
+ "##决": 14161,
+ "##况": 14162,
+ "##冶": 14163,
+ "##冷": 14164,
+ "##冻": 14165,
+ "##冼": 14166,
+ "##冽": 14167,
+ "##冾": 14168,
+ "##净": 14169,
+ "##凄": 14170,
+ "##准": 14171,
+ "##凇": 14172,
+ "##凈": 14173,
+ "##凉": 14174,
+ "##凋": 14175,
+ "##凌": 14176,
+ "##凍": 14177,
+ "##减": 14178,
+ "##凑": 14179,
+ "##凛": 14180,
+ "##凜": 14181,
+ "##凝": 14182,
+ "##几": 14183,
+ "##凡": 14184,
+ "##凤": 14185,
+ "##処": 14186,
+ "##凪": 14187,
+ "##凭": 14188,
+ "##凯": 14189,
+ "##凰": 14190,
+ "##凱": 14191,
+ "##凳": 14192,
+ "##凶": 14193,
+ "##凸": 14194,
+ "##凹": 14195,
+ "##出": 14196,
+ "##击": 14197,
+ "##函": 14198,
+ "##凿": 14199,
+ "##刀": 14200,
+ "##刁": 14201,
+ "##刃": 14202,
+ "##分": 14203,
+ "##切": 14204,
+ "##刈": 14205,
+ "##刊": 14206,
+ "##刍": 14207,
+ "##刎": 14208,
+ "##刑": 14209,
+ "##划": 14210,
+ "##列": 14211,
+ "##刘": 14212,
+ "##则": 14213,
+ "##刚": 14214,
+ "##创": 14215,
+ "##初": 14216,
+ "##删": 14217,
+ "##判": 14218,
+ "##別": 14219,
+ "##刨": 14220,
+ "##利": 14221,
+ "##刪": 14222,
+ "##别": 14223,
+ "##刮": 14224,
+ "##到": 14225,
+ "##制": 14226,
+ "##刷": 14227,
+ "##券": 14228,
+ "##刹": 14229,
+ "##刺": 14230,
+ "##刻": 14231,
+ "##刽": 14232,
+ "##剁": 14233,
+ "##剂": 14234,
+ "##剃": 14235,
+ "##則": 14236,
+ "##剉": 14237,
+ "##削": 14238,
+ "##剋": 14239,
+ "##剌": 14240,
+ "##前": 14241,
+ "##剎": 14242,
+ "##剐": 14243,
+ "##剑": 14244,
+ "##剔": 14245,
+ "##剖": 14246,
+ "##剛": 14247,
+ "##剜": 14248,
+ "##剝": 14249,
+ "##剣": 14250,
+ "##剤": 14251,
+ "##剥": 14252,
+ "##剧": 14253,
+ "##剩": 14254,
+ "##剪": 14255,
+ "##副": 14256,
+ "##割": 14257,
+ "##創": 14258,
+ "##剷": 14259,
+ "##剽": 14260,
+ "##剿": 14261,
+ "##劃": 14262,
+ "##劇": 14263,
+ "##劈": 14264,
+ "##劉": 14265,
+ "##劊": 14266,
+ "##劍": 14267,
+ "##劏": 14268,
+ "##劑": 14269,
+ "##力": 14270,
+ "##劝": 14271,
+ "##办": 14272,
+ "##功": 14273,
+ "##加": 14274,
+ "##务": 14275,
+ "##劣": 14276,
+ "##动": 14277,
+ "##助": 14278,
+ "##努": 14279,
+ "##劫": 14280,
+ "##劭": 14281,
+ "##励": 14282,
+ "##劲": 14283,
+ "##劳": 14284,
+ "##労": 14285,
+ "##劵": 14286,
+ "##効": 14287,
+ "##劾": 14288,
+ "##势": 14289,
+ "##勁": 14290,
+ "##勃": 14291,
+ "##勇": 14292,
+ "##勉": 14293,
+ "##勋": 14294,
+ "##勐": 14295,
+ "##勒": 14296,
+ "##動": 14297,
+ "##勖": 14298,
+ "##勘": 14299,
+ "##務": 14300,
+ "##勛": 14301,
+ "##勝": 14302,
+ "##勞": 14303,
+ "##募": 14304,
+ "##勢": 14305,
+ "##勤": 14306,
+ "##勧": 14307,
+ "##勳": 14308,
+ "##勵": 14309,
+ "##勸": 14310,
+ "##勺": 14311,
+ "##勻": 14312,
+ "##勾": 14313,
+ "##勿": 14314,
+ "##匀": 14315,
+ "##包": 14316,
+ "##匆": 14317,
+ "##匈": 14318,
+ "##匍": 14319,
+ "##匐": 14320,
+ "##匕": 14321,
+ "##化": 14322,
+ "##北": 14323,
+ "##匙": 14324,
+ "##匝": 14325,
+ "##匠": 14326,
+ "##匡": 14327,
+ "##匣": 14328,
+ "##匪": 14329,
+ "##匮": 14330,
+ "##匯": 14331,
+ "##匱": 14332,
+ "##匹": 14333,
+ "##区": 14334,
+ "##医": 14335,
+ "##匾": 14336,
+ "##匿": 14337,
+ "##區": 14338,
+ "##十": 14339,
+ "##千": 14340,
+ "##卅": 14341,
+ "##升": 14342,
+ "##午": 14343,
+ "##卉": 14344,
+ "##半": 14345,
+ "##卍": 14346,
+ "##华": 14347,
+ "##协": 14348,
+ "##卑": 14349,
+ "##卒": 14350,
+ "##卓": 14351,
+ "##協": 14352,
+ "##单": 14353,
+ "##卖": 14354,
+ "##南": 14355,
+ "##単": 14356,
+ "##博": 14357,
+ "##卜": 14358,
+ "##卞": 14359,
+ "##卟": 14360,
+ "##占": 14361,
+ "##卡": 14362,
+ "##卢": 14363,
+ "##卤": 14364,
+ "##卦": 14365,
+ "##卧": 14366,
+ "##卫": 14367,
+ "##卮": 14368,
+ "##卯": 14369,
+ "##印": 14370,
+ "##危": 14371,
+ "##即": 14372,
+ "##却": 14373,
+ "##卵": 14374,
+ "##卷": 14375,
+ "##卸": 14376,
+ "##卻": 14377,
+ "##卿": 14378,
+ "##厂": 14379,
+ "##厄": 14380,
+ "##厅": 14381,
+ "##历": 14382,
+ "##厉": 14383,
+ "##压": 14384,
+ "##厌": 14385,
+ "##厕": 14386,
+ "##厘": 14387,
+ "##厚": 14388,
+ "##厝": 14389,
+ "##原": 14390,
+ "##厢": 14391,
+ "##厥": 14392,
+ "##厦": 14393,
+ "##厨": 14394,
+ "##厩": 14395,
+ "##厭": 14396,
+ "##厮": 14397,
+ "##厲": 14398,
+ "##厳": 14399,
+ "##去": 14400,
+ "##县": 14401,
+ "##叁": 14402,
+ "##参": 14403,
+ "##參": 14404,
+ "##又": 14405,
+ "##叉": 14406,
+ "##及": 14407,
+ "##友": 14408,
+ "##双": 14409,
+ "##反": 14410,
+ "##収": 14411,
+ "##发": 14412,
+ "##叔": 14413,
+ "##取": 14414,
+ "##受": 14415,
+ "##变": 14416,
+ "##叙": 14417,
+ "##叛": 14418,
+ "##叟": 14419,
+ "##叠": 14420,
+ "##叡": 14421,
+ "##叢": 14422,
+ "##口": 14423,
+ "##古": 14424,
+ "##句": 14425,
+ "##另": 14426,
+ "##叨": 14427,
+ "##叩": 14428,
+ "##只": 14429,
+ "##叫": 14430,
+ "##召": 14431,
+ "##叭": 14432,
+ "##叮": 14433,
+ "##可": 14434,
+ "##台": 14435,
+ "##叱": 14436,
+ "##史": 14437,
+ "##右": 14438,
+ "##叵": 14439,
+ "##叶": 14440,
+ "##号": 14441,
+ "##司": 14442,
+ "##叹": 14443,
+ "##叻": 14444,
+ "##叼": 14445,
+ "##叽": 14446,
+ "##吁": 14447,
+ "##吃": 14448,
+ "##各": 14449,
+ "##吆": 14450,
+ "##合": 14451,
+ "##吉": 14452,
+ "##吊": 14453,
+ "##吋": 14454,
+ "##同": 14455,
+ "##名": 14456,
+ "##后": 14457,
+ "##吏": 14458,
+ "##吐": 14459,
+ "##向": 14460,
+ "##吒": 14461,
+ "##吓": 14462,
+ "##吕": 14463,
+ "##吖": 14464,
+ "##吗": 14465,
+ "##君": 14466,
+ "##吝": 14467,
+ "##吞": 14468,
+ "##吟": 14469,
+ "##吠": 14470,
+ "##吡": 14471,
+ "##否": 14472,
+ "##吧": 14473,
+ "##吨": 14474,
+ "##吩": 14475,
+ "##含": 14476,
+ "##听": 14477,
+ "##吭": 14478,
+ "##吮": 14479,
+ "##启": 14480,
+ "##吱": 14481,
+ "##吳": 14482,
+ "##吴": 14483,
+ "##吵": 14484,
+ "##吶": 14485,
+ "##吸": 14486,
+ "##吹": 14487,
+ "##吻": 14488,
+ "##吼": 14489,
+ "##吽": 14490,
+ "##吾": 14491,
+ "##呀": 14492,
+ "##呂": 14493,
+ "##呃": 14494,
+ "##呆": 14495,
+ "##呈": 14496,
+ "##告": 14497,
+ "##呋": 14498,
+ "##呎": 14499,
+ "##呐": 14500,
+ "##呓": 14501,
+ "##呕": 14502,
+ "##呗": 14503,
+ "##员": 14504,
+ "##呛": 14505,
+ "##呜": 14506,
+ "##呢": 14507,
+ "##呤": 14508,
+ "##呦": 14509,
+ "##周": 14510,
+ "##呱": 14511,
+ "##呲": 14512,
+ "##味": 14513,
+ "##呵": 14514,
+ "##呷": 14515,
+ "##呸": 14516,
+ "##呻": 14517,
+ "##呼": 14518,
+ "##命": 14519,
+ "##咀": 14520,
+ "##咁": 14521,
+ "##咂": 14522,
+ "##咄": 14523,
+ "##咆": 14524,
+ "##咋": 14525,
+ "##和": 14526,
+ "##咎": 14527,
+ "##咏": 14528,
+ "##咐": 14529,
+ "##咒": 14530,
+ "##咔": 14531,
+ "##咕": 14532,
+ "##咖": 14533,
+ "##咗": 14534,
+ "##咘": 14535,
+ "##咙": 14536,
+ "##咚": 14537,
+ "##咛": 14538,
+ "##咣": 14539,
+ "##咤": 14540,
+ "##咦": 14541,
+ "##咧": 14542,
+ "##咨": 14543,
+ "##咩": 14544,
+ "##咪": 14545,
+ "##咫": 14546,
+ "##咬": 14547,
+ "##咭": 14548,
+ "##咯": 14549,
+ "##咱": 14550,
+ "##咲": 14551,
+ "##咳": 14552,
+ "##咸": 14553,
+ "##咻": 14554,
+ "##咽": 14555,
+ "##咿": 14556,
+ "##哀": 14557,
+ "##品": 14558,
+ "##哂": 14559,
+ "##哄": 14560,
+ "##哆": 14561,
+ "##哇": 14562,
+ "##哈": 14563,
+ "##哉": 14564,
+ "##哋": 14565,
+ "##哌": 14566,
+ "##响": 14567,
+ "##哎": 14568,
+ "##哏": 14569,
+ "##哐": 14570,
+ "##哑": 14571,
+ "##哒": 14572,
+ "##哔": 14573,
+ "##哗": 14574,
+ "##哟": 14575,
+ "##員": 14576,
+ "##哥": 14577,
+ "##哦": 14578,
+ "##哧": 14579,
+ "##哨": 14580,
+ "##哩": 14581,
+ "##哪": 14582,
+ "##哭": 14583,
+ "##哮": 14584,
+ "##哲": 14585,
+ "##哺": 14586,
+ "##哼": 14587,
+ "##哽": 14588,
+ "##唁": 14589,
+ "##唄": 14590,
+ "##唆": 14591,
+ "##唇": 14592,
+ "##唉": 14593,
+ "##唏": 14594,
+ "##唐": 14595,
+ "##唑": 14596,
+ "##唔": 14597,
+ "##唠": 14598,
+ "##唤": 14599,
+ "##唧": 14600,
+ "##唬": 14601,
+ "##售": 14602,
+ "##唯": 14603,
+ "##唰": 14604,
+ "##唱": 14605,
+ "##唳": 14606,
+ "##唷": 14607,
+ "##唸": 14608,
+ "##唾": 14609,
+ "##啃": 14610,
+ "##啄": 14611,
+ "##商": 14612,
+ "##啉": 14613,
+ "##啊": 14614,
+ "##問": 14615,
+ "##啓": 14616,
+ "##啕": 14617,
+ "##啖": 14618,
+ "##啜": 14619,
+ "##啞": 14620,
+ "##啟": 14621,
+ "##啡": 14622,
+ "##啤": 14623,
+ "##啥": 14624,
+ "##啦": 14625,
+ "##啧": 14626,
+ "##啪": 14627,
+ "##啫": 14628,
+ "##啬": 14629,
+ "##啮": 14630,
+ "##啰": 14631,
+ "##啱": 14632,
+ "##啲": 14633,
+ "##啵": 14634,
+ "##啶": 14635,
+ "##啷": 14636,
+ "##啸": 14637,
+ "##啻": 14638,
+ "##啼": 14639,
+ "##啾": 14640,
+ "##喀": 14641,
+ "##喂": 14642,
+ "##喃": 14643,
+ "##善": 14644,
+ "##喆": 14645,
+ "##喇": 14646,
+ "##喉": 14647,
+ "##喊": 14648,
+ "##喋": 14649,
+ "##喎": 14650,
+ "##喏": 14651,
+ "##喔": 14652,
+ "##喘": 14653,
+ "##喙": 14654,
+ "##喚": 14655,
+ "##喜": 14656,
+ "##喝": 14657,
+ "##喟": 14658,
+ "##喧": 14659,
+ "##喪": 14660,
+ "##喫": 14661,
+ "##喬": 14662,
+ "##單": 14663,
+ "##喰": 14664,
+ "##喱": 14665,
+ "##喲": 14666,
+ "##喳": 14667,
+ "##喵": 14668,
+ "##営": 14669,
+ "##喷": 14670,
+ "##喹": 14671,
+ "##喺": 14672,
+ "##喻": 14673,
+ "##喽": 14674,
+ "##嗅": 14675,
+ "##嗆": 14676,
+ "##嗇": 14677,
+ "##嗎": 14678,
+ "##嗑": 14679,
+ "##嗒": 14680,
+ "##嗓": 14681,
+ "##嗔": 14682,
+ "##嗖": 14683,
+ "##嗚": 14684,
+ "##嗜": 14685,
+ "##嗝": 14686,
+ "##嗟": 14687,
+ "##嗡": 14688,
+ "##嗣": 14689,
+ "##嗤": 14690,
+ "##嗦": 14691,
+ "##嗨": 14692,
+ "##嗪": 14693,
+ "##嗬": 14694,
+ "##嗯": 14695,
+ "##嗰": 14696,
+ "##嗲": 14697,
+ "##嗳": 14698,
+ "##嗶": 14699,
+ "##嗷": 14700,
+ "##嗽": 14701,
+ "##嘀": 14702,
+ "##嘅": 14703,
+ "##嘆": 14704,
+ "##嘈": 14705,
+ "##嘉": 14706,
+ "##嘌": 14707,
+ "##嘍": 14708,
+ "##嘎": 14709,
+ "##嘔": 14710,
+ "##嘖": 14711,
+ "##嘗": 14712,
+ "##嘘": 14713,
+ "##嘚": 14714,
+ "##嘛": 14715,
+ "##嘜": 14716,
+ "##嘞": 14717,
+ "##嘟": 14718,
+ "##嘢": 14719,
+ "##嘣": 14720,
+ "##嘤": 14721,
+ "##嘧": 14722,
+ "##嘩": 14723,
+ "##嘭": 14724,
+ "##嘮": 14725,
+ "##嘯": 14726,
+ "##嘰": 14727,
+ "##嘱": 14728,
+ "##嘲": 14729,
+ "##嘴": 14730,
+ "##嘶": 14731,
+ "##嘸": 14732,
+ "##嘹": 14733,
+ "##嘻": 14734,
+ "##嘿": 14735,
+ "##噁": 14736,
+ "##噌": 14737,
+ "##噎": 14738,
+ "##噓": 14739,
+ "##噔": 14740,
+ "##噗": 14741,
+ "##噙": 14742,
+ "##噜": 14743,
+ "##噠": 14744,
+ "##噢": 14745,
+ "##噤": 14746,
+ "##器": 14747,
+ "##噩": 14748,
+ "##噪": 14749,
+ "##噬": 14750,
+ "##噱": 14751,
+ "##噴": 14752,
+ "##噶": 14753,
+ "##噸": 14754,
+ "##噹": 14755,
+ "##噻": 14756,
+ "##噼": 14757,
+ "##嚀": 14758,
+ "##嚇": 14759,
+ "##嚎": 14760,
+ "##嚏": 14761,
+ "##嚐": 14762,
+ "##嚓": 14763,
+ "##嚕": 14764,
+ "##嚟": 14765,
+ "##嚣": 14766,
+ "##嚥": 14767,
+ "##嚨": 14768,
+ "##嚮": 14769,
+ "##嚴": 14770,
+ "##嚷": 14771,
+ "##嚼": 14772,
+ "##囂": 14773,
+ "##囉": 14774,
+ "##囊": 14775,
+ "##囍": 14776,
+ "##囑": 14777,
+ "##囔": 14778,
+ "##囗": 14779,
+ "##囚": 14780,
+ "##四": 14781,
+ "##囝": 14782,
+ "##回": 14783,
+ "##囟": 14784,
+ "##因": 14785,
+ "##囡": 14786,
+ "##团": 14787,
+ "##団": 14788,
+ "##囤": 14789,
+ "##囧": 14790,
+ "##囪": 14791,
+ "##囫": 14792,
+ "##园": 14793,
+ "##困": 14794,
+ "##囱": 14795,
+ "##囲": 14796,
+ "##図": 14797,
+ "##围": 14798,
+ "##囹": 14799,
+ "##固": 14800,
+ "##国": 14801,
+ "##图": 14802,
+ "##囿": 14803,
+ "##圃": 14804,
+ "##圄": 14805,
+ "##圆": 14806,
+ "##圈": 14807,
+ "##國": 14808,
+ "##圍": 14809,
+ "##圏": 14810,
+ "##園": 14811,
+ "##圓": 14812,
+ "##圖": 14813,
+ "##團": 14814,
+ "##圜": 14815,
+ "##土": 14816,
+ "##圣": 14817,
+ "##圧": 14818,
+ "##在": 14819,
+ "##圩": 14820,
+ "##圭": 14821,
+ "##地": 14822,
+ "##圳": 14823,
+ "##场": 14824,
+ "##圻": 14825,
+ "##圾": 14826,
+ "##址": 14827,
+ "##坂": 14828,
+ "##均": 14829,
+ "##坊": 14830,
+ "##坍": 14831,
+ "##坎": 14832,
+ "##坏": 14833,
+ "##坐": 14834,
+ "##坑": 14835,
+ "##块": 14836,
+ "##坚": 14837,
+ "##坛": 14838,
+ "##坝": 14839,
+ "##坞": 14840,
+ "##坟": 14841,
+ "##坠": 14842,
+ "##坡": 14843,
+ "##坤": 14844,
+ "##坦": 14845,
+ "##坨": 14846,
+ "##坪": 14847,
+ "##坯": 14848,
+ "##坳": 14849,
+ "##坵": 14850,
+ "##坷": 14851,
+ "##垂": 14852,
+ "##垃": 14853,
+ "##垄": 14854,
+ "##型": 14855,
+ "##垒": 14856,
+ "##垚": 14857,
+ "##垛": 14858,
+ "##垠": 14859,
+ "##垢": 14860,
+ "##垣": 14861,
+ "##垦": 14862,
+ "##垩": 14863,
+ "##垫": 14864,
+ "##垭": 14865,
+ "##垮": 14866,
+ "##垵": 14867,
+ "##埂": 14868,
+ "##埃": 14869,
+ "##埋": 14870,
+ "##城": 14871,
+ "##埔": 14872,
+ "##埕": 14873,
+ "##埗": 14874,
+ "##域": 14875,
+ "##埠": 14876,
+ "##埤": 14877,
+ "##埵": 14878,
+ "##執": 14879,
+ "##埸": 14880,
+ "##培": 14881,
+ "##基": 14882,
+ "##埼": 14883,
+ "##堀": 14884,
+ "##堂": 14885,
+ "##堃": 14886,
+ "##堅": 14887,
+ "##堆": 14888,
+ "##堇": 14889,
+ "##堑": 14890,
+ "##堕": 14891,
+ "##堙": 14892,
+ "##堡": 14893,
+ "##堤": 14894,
+ "##堪": 14895,
+ "##堯": 14896,
+ "##堰": 14897,
+ "##報": 14898,
+ "##場": 14899,
+ "##堵": 14900,
+ "##堺": 14901,
+ "##堿": 14902,
+ "##塊": 14903,
+ "##塌": 14904,
+ "##塑": 14905,
+ "##塔": 14906,
+ "##塗": 14907,
+ "##塘": 14908,
+ "##塚": 14909,
+ "##塞": 14910,
+ "##塢": 14911,
+ "##塩": 14912,
+ "##填": 14913,
+ "##塬": 14914,
+ "##塭": 14915,
+ "##塵": 14916,
+ "##塾": 14917,
+ "##墀": 14918,
+ "##境": 14919,
+ "##墅": 14920,
+ "##墉": 14921,
+ "##墊": 14922,
+ "##墒": 14923,
+ "##墓": 14924,
+ "##増": 14925,
+ "##墘": 14926,
+ "##墙": 14927,
+ "##墜": 14928,
+ "##增": 14929,
+ "##墟": 14930,
+ "##墨": 14931,
+ "##墩": 14932,
+ "##墮": 14933,
+ "##墳": 14934,
+ "##墻": 14935,
+ "##墾": 14936,
+ "##壁": 14937,
+ "##壅": 14938,
+ "##壆": 14939,
+ "##壇": 14940,
+ "##壊": 14941,
+ "##壑": 14942,
+ "##壓": 14943,
+ "##壕": 14944,
+ "##壘": 14945,
+ "##壞": 14946,
+ "##壟": 14947,
+ "##壢": 14948,
+ "##壤": 14949,
+ "##壩": 14950,
+ "##士": 14951,
+ "##壬": 14952,
+ "##壮": 14953,
+ "##壯": 14954,
+ "##声": 14955,
+ "##売": 14956,
+ "##壳": 14957,
+ "##壶": 14958,
+ "##壹": 14959,
+ "##壺": 14960,
+ "##壽": 14961,
+ "##处": 14962,
+ "##备": 14963,
+ "##変": 14964,
+ "##复": 14965,
+ "##夏": 14966,
+ "##夔": 14967,
+ "##夕": 14968,
+ "##外": 14969,
+ "##夙": 14970,
+ "##多": 14971,
+ "##夜": 14972,
+ "##够": 14973,
+ "##夠": 14974,
+ "##夢": 14975,
+ "##夥": 14976,
+ "##大": 14977,
+ "##天": 14978,
+ "##太": 14979,
+ "##夫": 14980,
+ "##夭": 14981,
+ "##央": 14982,
+ "##夯": 14983,
+ "##失": 14984,
+ "##头": 14985,
+ "##夷": 14986,
+ "##夸": 14987,
+ "##夹": 14988,
+ "##夺": 14989,
+ "##夾": 14990,
+ "##奂": 14991,
+ "##奄": 14992,
+ "##奇": 14993,
+ "##奈": 14994,
+ "##奉": 14995,
+ "##奋": 14996,
+ "##奎": 14997,
+ "##奏": 14998,
+ "##奐": 14999,
+ "##契": 15000,
+ "##奔": 15001,
+ "##奕": 15002,
+ "##奖": 15003,
+ "##套": 15004,
+ "##奘": 15005,
+ "##奚": 15006,
+ "##奠": 15007,
+ "##奢": 15008,
+ "##奥": 15009,
+ "##奧": 15010,
+ "##奪": 15011,
+ "##奬": 15012,
+ "##奮": 15013,
+ "##女": 15014,
+ "##奴": 15015,
+ "##奶": 15016,
+ "##奸": 15017,
+ "##她": 15018,
+ "##好": 15019,
+ "##如": 15020,
+ "##妃": 15021,
+ "##妄": 15022,
+ "##妆": 15023,
+ "##妇": 15024,
+ "##妈": 15025,
+ "##妊": 15026,
+ "##妍": 15027,
+ "##妒": 15028,
+ "##妓": 15029,
+ "##妖": 15030,
+ "##妘": 15031,
+ "##妙": 15032,
+ "##妝": 15033,
+ "##妞": 15034,
+ "##妣": 15035,
+ "##妤": 15036,
+ "##妥": 15037,
+ "##妨": 15038,
+ "##妩": 15039,
+ "##妪": 15040,
+ "##妮": 15041,
+ "##妲": 15042,
+ "##妳": 15043,
+ "##妹": 15044,
+ "##妻": 15045,
+ "##妾": 15046,
+ "##姆": 15047,
+ "##姉": 15048,
+ "##姊": 15049,
+ "##始": 15050,
+ "##姍": 15051,
+ "##姐": 15052,
+ "##姑": 15053,
+ "##姒": 15054,
+ "##姓": 15055,
+ "##委": 15056,
+ "##姗": 15057,
+ "##姚": 15058,
+ "##姜": 15059,
+ "##姝": 15060,
+ "##姣": 15061,
+ "##姥": 15062,
+ "##姦": 15063,
+ "##姨": 15064,
+ "##姪": 15065,
+ "##姫": 15066,
+ "##姬": 15067,
+ "##姹": 15068,
+ "##姻": 15069,
+ "##姿": 15070,
+ "##威": 15071,
+ "##娃": 15072,
+ "##娄": 15073,
+ "##娅": 15074,
+ "##娆": 15075,
+ "##娇": 15076,
+ "##娉": 15077,
+ "##娑": 15078,
+ "##娓": 15079,
+ "##娘": 15080,
+ "##娛": 15081,
+ "##娜": 15082,
+ "##娟": 15083,
+ "##娠": 15084,
+ "##娣": 15085,
+ "##娥": 15086,
+ "##娩": 15087,
+ "##娱": 15088,
+ "##娲": 15089,
+ "##娴": 15090,
+ "##娶": 15091,
+ "##娼": 15092,
+ "##婀": 15093,
+ "##婁": 15094,
+ "##婆": 15095,
+ "##婉": 15096,
+ "##婊": 15097,
+ "##婕": 15098,
+ "##婚": 15099,
+ "##婢": 15100,
+ "##婦": 15101,
+ "##婧": 15102,
+ "##婪": 15103,
+ "##婭": 15104,
+ "##婴": 15105,
+ "##婵": 15106,
+ "##婶": 15107,
+ "##婷": 15108,
+ "##婺": 15109,
+ "##婿": 15110,
+ "##媒": 15111,
+ "##媚": 15112,
+ "##媛": 15113,
+ "##媞": 15114,
+ "##媧": 15115,
+ "##媲": 15116,
+ "##媳": 15117,
+ "##媽": 15118,
+ "##媾": 15119,
+ "##嫁": 15120,
+ "##嫂": 15121,
+ "##嫉": 15122,
+ "##嫌": 15123,
+ "##嫑": 15124,
+ "##嫔": 15125,
+ "##嫖": 15126,
+ "##嫘": 15127,
+ "##嫚": 15128,
+ "##嫡": 15129,
+ "##嫣": 15130,
+ "##嫦": 15131,
+ "##嫩": 15132,
+ "##嫲": 15133,
+ "##嫵": 15134,
+ "##嫻": 15135,
+ "##嬅": 15136,
+ "##嬉": 15137,
+ "##嬌": 15138,
+ "##嬗": 15139,
+ "##嬛": 15140,
+ "##嬢": 15141,
+ "##嬤": 15142,
+ "##嬪": 15143,
+ "##嬰": 15144,
+ "##嬴": 15145,
+ "##嬷": 15146,
+ "##嬸": 15147,
+ "##嬿": 15148,
+ "##孀": 15149,
+ "##孃": 15150,
+ "##子": 15151,
+ "##孑": 15152,
+ "##孔": 15153,
+ "##孕": 15154,
+ "##孖": 15155,
+ "##字": 15156,
+ "##存": 15157,
+ "##孙": 15158,
+ "##孚": 15159,
+ "##孛": 15160,
+ "##孜": 15161,
+ "##孝": 15162,
+ "##孟": 15163,
+ "##孢": 15164,
+ "##季": 15165,
+ "##孤": 15166,
+ "##学": 15167,
+ "##孩": 15168,
+ "##孪": 15169,
+ "##孫": 15170,
+ "##孬": 15171,
+ "##孰": 15172,
+ "##孱": 15173,
+ "##孳": 15174,
+ "##孵": 15175,
+ "##學": 15176,
+ "##孺": 15177,
+ "##孽": 15178,
+ "##孿": 15179,
+ "##宁": 15180,
+ "##它": 15181,
+ "##宅": 15182,
+ "##宇": 15183,
+ "##守": 15184,
+ "##安": 15185,
+ "##宋": 15186,
+ "##完": 15187,
+ "##宏": 15188,
+ "##宓": 15189,
+ "##宕": 15190,
+ "##宗": 15191,
+ "##官": 15192,
+ "##宙": 15193,
+ "##定": 15194,
+ "##宛": 15195,
+ "##宜": 15196,
+ "##宝": 15197,
+ "##实": 15198,
+ "##実": 15199,
+ "##宠": 15200,
+ "##审": 15201,
+ "##客": 15202,
+ "##宣": 15203,
+ "##室": 15204,
+ "##宥": 15205,
+ "##宦": 15206,
+ "##宪": 15207,
+ "##宫": 15208,
+ "##宮": 15209,
+ "##宰": 15210,
+ "##害": 15211,
+ "##宴": 15212,
+ "##宵": 15213,
+ "##家": 15214,
+ "##宸": 15215,
+ "##容": 15216,
+ "##宽": 15217,
+ "##宾": 15218,
+ "##宿": 15219,
+ "##寂": 15220,
+ "##寄": 15221,
+ "##寅": 15222,
+ "##密": 15223,
+ "##寇": 15224,
+ "##富": 15225,
+ "##寐": 15226,
+ "##寒": 15227,
+ "##寓": 15228,
+ "##寛": 15229,
+ "##寝": 15230,
+ "##寞": 15231,
+ "##察": 15232,
+ "##寡": 15233,
+ "##寢": 15234,
+ "##寥": 15235,
+ "##實": 15236,
+ "##寧": 15237,
+ "##寨": 15238,
+ "##審": 15239,
+ "##寫": 15240,
+ "##寬": 15241,
+ "##寮": 15242,
+ "##寰": 15243,
+ "##寵": 15244,
+ "##寶": 15245,
+ "##寸": 15246,
+ "##对": 15247,
+ "##寺": 15248,
+ "##寻": 15249,
+ "##导": 15250,
+ "##対": 15251,
+ "##寿": 15252,
+ "##封": 15253,
+ "##専": 15254,
+ "##射": 15255,
+ "##将": 15256,
+ "##將": 15257,
+ "##專": 15258,
+ "##尉": 15259,
+ "##尊": 15260,
+ "##尋": 15261,
+ "##對": 15262,
+ "##導": 15263,
+ "##小": 15264,
+ "##少": 15265,
+ "##尔": 15266,
+ "##尕": 15267,
+ "##尖": 15268,
+ "##尘": 15269,
+ "##尚": 15270,
+ "##尝": 15271,
+ "##尤": 15272,
+ "##尧": 15273,
+ "##尬": 15274,
+ "##就": 15275,
+ "##尴": 15276,
+ "##尷": 15277,
+ "##尸": 15278,
+ "##尹": 15279,
+ "##尺": 15280,
+ "##尻": 15281,
+ "##尼": 15282,
+ "##尽": 15283,
+ "##尾": 15284,
+ "##尿": 15285,
+ "##局": 15286,
+ "##屁": 15287,
+ "##层": 15288,
+ "##屄": 15289,
+ "##居": 15290,
+ "##屆": 15291,
+ "##屈": 15292,
+ "##屉": 15293,
+ "##届": 15294,
+ "##屋": 15295,
+ "##屌": 15296,
+ "##屍": 15297,
+ "##屎": 15298,
+ "##屏": 15299,
+ "##屐": 15300,
+ "##屑": 15301,
+ "##展": 15302,
+ "##屜": 15303,
+ "##属": 15304,
+ "##屠": 15305,
+ "##屡": 15306,
+ "##屢": 15307,
+ "##層": 15308,
+ "##履": 15309,
+ "##屬": 15310,
+ "##屯": 15311,
+ "##山": 15312,
+ "##屹": 15313,
+ "##屿": 15314,
+ "##岀": 15315,
+ "##岁": 15316,
+ "##岂": 15317,
+ "##岌": 15318,
+ "##岐": 15319,
+ "##岑": 15320,
+ "##岔": 15321,
+ "##岖": 15322,
+ "##岗": 15323,
+ "##岘": 15324,
+ "##岙": 15325,
+ "##岚": 15326,
+ "##岛": 15327,
+ "##岡": 15328,
+ "##岩": 15329,
+ "##岫": 15330,
+ "##岬": 15331,
+ "##岭": 15332,
+ "##岱": 15333,
+ "##岳": 15334,
+ "##岷": 15335,
+ "##岸": 15336,
+ "##峇": 15337,
+ "##峋": 15338,
+ "##峒": 15339,
+ "##峙": 15340,
+ "##峡": 15341,
+ "##峤": 15342,
+ "##峥": 15343,
+ "##峦": 15344,
+ "##峨": 15345,
+ "##峪": 15346,
+ "##峭": 15347,
+ "##峯": 15348,
+ "##峰": 15349,
+ "##峴": 15350,
+ "##島": 15351,
+ "##峻": 15352,
+ "##峽": 15353,
+ "##崁": 15354,
+ "##崂": 15355,
+ "##崆": 15356,
+ "##崇": 15357,
+ "##崎": 15358,
+ "##崑": 15359,
+ "##崔": 15360,
+ "##崖": 15361,
+ "##崗": 15362,
+ "##崙": 15363,
+ "##崛": 15364,
+ "##崧": 15365,
+ "##崩": 15366,
+ "##崭": 15367,
+ "##崴": 15368,
+ "##崽": 15369,
+ "##嵇": 15370,
+ "##嵊": 15371,
+ "##嵋": 15372,
+ "##嵌": 15373,
+ "##嵐": 15374,
+ "##嵘": 15375,
+ "##嵩": 15376,
+ "##嵬": 15377,
+ "##嵯": 15378,
+ "##嶂": 15379,
+ "##嶄": 15380,
+ "##嶇": 15381,
+ "##嶋": 15382,
+ "##嶙": 15383,
+ "##嶺": 15384,
+ "##嶼": 15385,
+ "##嶽": 15386,
+ "##巅": 15387,
+ "##巍": 15388,
+ "##巒": 15389,
+ "##巔": 15390,
+ "##巖": 15391,
+ "##川": 15392,
+ "##州": 15393,
+ "##巡": 15394,
+ "##巢": 15395,
+ "##工": 15396,
+ "##左": 15397,
+ "##巧": 15398,
+ "##巨": 15399,
+ "##巩": 15400,
+ "##巫": 15401,
+ "##差": 15402,
+ "##己": 15403,
+ "##已": 15404,
+ "##巳": 15405,
+ "##巴": 15406,
+ "##巷": 15407,
+ "##巻": 15408,
+ "##巽": 15409,
+ "##巾": 15410,
+ "##巿": 15411,
+ "##币": 15412,
+ "##市": 15413,
+ "##布": 15414,
+ "##帅": 15415,
+ "##帆": 15416,
+ "##师": 15417,
+ "##希": 15418,
+ "##帐": 15419,
+ "##帑": 15420,
+ "##帕": 15421,
+ "##帖": 15422,
+ "##帘": 15423,
+ "##帚": 15424,
+ "##帛": 15425,
+ "##帜": 15426,
+ "##帝": 15427,
+ "##帥": 15428,
+ "##带": 15429,
+ "##帧": 15430,
+ "##師": 15431,
+ "##席": 15432,
+ "##帮": 15433,
+ "##帯": 15434,
+ "##帰": 15435,
+ "##帳": 15436,
+ "##帶": 15437,
+ "##帷": 15438,
+ "##常": 15439,
+ "##帼": 15440,
+ "##帽": 15441,
+ "##幀": 15442,
+ "##幂": 15443,
+ "##幄": 15444,
+ "##幅": 15445,
+ "##幌": 15446,
+ "##幔": 15447,
+ "##幕": 15448,
+ "##幟": 15449,
+ "##幡": 15450,
+ "##幢": 15451,
+ "##幣": 15452,
+ "##幫": 15453,
+ "##干": 15454,
+ "##平": 15455,
+ "##年": 15456,
+ "##并": 15457,
+ "##幸": 15458,
+ "##幹": 15459,
+ "##幺": 15460,
+ "##幻": 15461,
+ "##幼": 15462,
+ "##幽": 15463,
+ "##幾": 15464,
+ "##广": 15465,
+ "##庁": 15466,
+ "##広": 15467,
+ "##庄": 15468,
+ "##庆": 15469,
+ "##庇": 15470,
+ "##床": 15471,
+ "##序": 15472,
+ "##庐": 15473,
+ "##库": 15474,
+ "##应": 15475,
+ "##底": 15476,
+ "##庖": 15477,
+ "##店": 15478,
+ "##庙": 15479,
+ "##庚": 15480,
+ "##府": 15481,
+ "##庞": 15482,
+ "##废": 15483,
+ "##庠": 15484,
+ "##度": 15485,
+ "##座": 15486,
+ "##庫": 15487,
+ "##庭": 15488,
+ "##庵": 15489,
+ "##庶": 15490,
+ "##康": 15491,
+ "##庸": 15492,
+ "##庹": 15493,
+ "##庾": 15494,
+ "##廁": 15495,
+ "##廂": 15496,
+ "##廃": 15497,
+ "##廈": 15498,
+ "##廉": 15499,
+ "##廊": 15500,
+ "##廓": 15501,
+ "##廖": 15502,
+ "##廚": 15503,
+ "##廝": 15504,
+ "##廟": 15505,
+ "##廠": 15506,
+ "##廢": 15507,
+ "##廣": 15508,
+ "##廬": 15509,
+ "##廳": 15510,
+ "##延": 15511,
+ "##廷": 15512,
+ "##建": 15513,
+ "##廿": 15514,
+ "##开": 15515,
+ "##弁": 15516,
+ "##异": 15517,
+ "##弃": 15518,
+ "##弄": 15519,
+ "##弈": 15520,
+ "##弊": 15521,
+ "##弋": 15522,
+ "##式": 15523,
+ "##弑": 15524,
+ "##弒": 15525,
+ "##弓": 15526,
+ "##弔": 15527,
+ "##引": 15528,
+ "##弗": 15529,
+ "##弘": 15530,
+ "##弛": 15531,
+ "##弟": 15532,
+ "##张": 15533,
+ "##弥": 15534,
+ "##弦": 15535,
+ "##弧": 15536,
+ "##弩": 15537,
+ "##弭": 15538,
+ "##弯": 15539,
+ "##弱": 15540,
+ "##張": 15541,
+ "##強": 15542,
+ "##弹": 15543,
+ "##强": 15544,
+ "##弼": 15545,
+ "##弾": 15546,
+ "##彅": 15547,
+ "##彆": 15548,
+ "##彈": 15549,
+ "##彌": 15550,
+ "##彎": 15551,
+ "##归": 15552,
+ "##当": 15553,
+ "##录": 15554,
+ "##彗": 15555,
+ "##彙": 15556,
+ "##彝": 15557,
+ "##形": 15558,
+ "##彤": 15559,
+ "##彥": 15560,
+ "##彦": 15561,
+ "##彧": 15562,
+ "##彩": 15563,
+ "##彪": 15564,
+ "##彫": 15565,
+ "##彬": 15566,
+ "##彭": 15567,
+ "##彰": 15568,
+ "##影": 15569,
+ "##彷": 15570,
+ "##役": 15571,
+ "##彻": 15572,
+ "##彼": 15573,
+ "##彿": 15574,
+ "##往": 15575,
+ "##征": 15576,
+ "##径": 15577,
+ "##待": 15578,
+ "##徇": 15579,
+ "##很": 15580,
+ "##徉": 15581,
+ "##徊": 15582,
+ "##律": 15583,
+ "##後": 15584,
+ "##徐": 15585,
+ "##徑": 15586,
+ "##徒": 15587,
+ "##従": 15588,
+ "##徕": 15589,
+ "##得": 15590,
+ "##徘": 15591,
+ "##徙": 15592,
+ "##徜": 15593,
+ "##從": 15594,
+ "##徠": 15595,
+ "##御": 15596,
+ "##徨": 15597,
+ "##復": 15598,
+ "##循": 15599,
+ "##徬": 15600,
+ "##微": 15601,
+ "##徳": 15602,
+ "##徴": 15603,
+ "##徵": 15604,
+ "##德": 15605,
+ "##徹": 15606,
+ "##徼": 15607,
+ "##徽": 15608,
+ "##心": 15609,
+ "##必": 15610,
+ "##忆": 15611,
+ "##忌": 15612,
+ "##忍": 15613,
+ "##忏": 15614,
+ "##忐": 15615,
+ "##忑": 15616,
+ "##忒": 15617,
+ "##忖": 15618,
+ "##志": 15619,
+ "##忘": 15620,
+ "##忙": 15621,
+ "##応": 15622,
+ "##忠": 15623,
+ "##忡": 15624,
+ "##忤": 15625,
+ "##忧": 15626,
+ "##忪": 15627,
+ "##快": 15628,
+ "##忱": 15629,
+ "##念": 15630,
+ "##忻": 15631,
+ "##忽": 15632,
+ "##忿": 15633,
+ "##怀": 15634,
+ "##态": 15635,
+ "##怂": 15636,
+ "##怅": 15637,
+ "##怆": 15638,
+ "##怎": 15639,
+ "##怏": 15640,
+ "##怒": 15641,
+ "##怔": 15642,
+ "##怕": 15643,
+ "##怖": 15644,
+ "##怙": 15645,
+ "##怜": 15646,
+ "##思": 15647,
+ "##怠": 15648,
+ "##怡": 15649,
+ "##急": 15650,
+ "##怦": 15651,
+ "##性": 15652,
+ "##怨": 15653,
+ "##怪": 15654,
+ "##怯": 15655,
+ "##怵": 15656,
+ "##总": 15657,
+ "##怼": 15658,
+ "##恁": 15659,
+ "##恃": 15660,
+ "##恆": 15661,
+ "##恋": 15662,
+ "##恍": 15663,
+ "##恐": 15664,
+ "##恒": 15665,
+ "##恕": 15666,
+ "##恙": 15667,
+ "##恚": 15668,
+ "##恢": 15669,
+ "##恣": 15670,
+ "##恤": 15671,
+ "##恥": 15672,
+ "##恨": 15673,
+ "##恩": 15674,
+ "##恪": 15675,
+ "##恫": 15676,
+ "##恬": 15677,
+ "##恭": 15678,
+ "##息": 15679,
+ "##恰": 15680,
+ "##恳": 15681,
+ "##恵": 15682,
+ "##恶": 15683,
+ "##恸": 15684,
+ "##恺": 15685,
+ "##恻": 15686,
+ "##恼": 15687,
+ "##恿": 15688,
+ "##悄": 15689,
+ "##悅": 15690,
+ "##悉": 15691,
+ "##悌": 15692,
+ "##悍": 15693,
+ "##悔": 15694,
+ "##悖": 15695,
+ "##悚": 15696,
+ "##悟": 15697,
+ "##悠": 15698,
+ "##患": 15699,
+ "##悦": 15700,
+ "##您": 15701,
+ "##悩": 15702,
+ "##悪": 15703,
+ "##悬": 15704,
+ "##悯": 15705,
+ "##悱": 15706,
+ "##悲": 15707,
+ "##悴": 15708,
+ "##悵": 15709,
+ "##悶": 15710,
+ "##悸": 15711,
+ "##悻": 15712,
+ "##悼": 15713,
+ "##悽": 15714,
+ "##情": 15715,
+ "##惆": 15716,
+ "##惇": 15717,
+ "##惊": 15718,
+ "##惋": 15719,
+ "##惑": 15720,
+ "##惕": 15721,
+ "##惘": 15722,
+ "##惚": 15723,
+ "##惜": 15724,
+ "##惟": 15725,
+ "##惠": 15726,
+ "##惡": 15727,
+ "##惦": 15728,
+ "##惧": 15729,
+ "##惨": 15730,
+ "##惩": 15731,
+ "##惫": 15732,
+ "##惬": 15733,
+ "##惭": 15734,
+ "##惮": 15735,
+ "##惯": 15736,
+ "##惰": 15737,
+ "##惱": 15738,
+ "##想": 15739,
+ "##惴": 15740,
+ "##惶": 15741,
+ "##惹": 15742,
+ "##惺": 15743,
+ "##愁": 15744,
+ "##愆": 15745,
+ "##愈": 15746,
+ "##愉": 15747,
+ "##愍": 15748,
+ "##意": 15749,
+ "##愕": 15750,
+ "##愚": 15751,
+ "##愛": 15752,
+ "##愜": 15753,
+ "##感": 15754,
+ "##愣": 15755,
+ "##愤": 15756,
+ "##愧": 15757,
+ "##愫": 15758,
+ "##愷": 15759,
+ "##愿": 15760,
+ "##慄": 15761,
+ "##慈": 15762,
+ "##態": 15763,
+ "##慌": 15764,
+ "##慎": 15765,
+ "##慑": 15766,
+ "##慕": 15767,
+ "##慘": 15768,
+ "##慚": 15769,
+ "##慟": 15770,
+ "##慢": 15771,
+ "##慣": 15772,
+ "##慧": 15773,
+ "##慨": 15774,
+ "##慫": 15775,
+ "##慮": 15776,
+ "##慰": 15777,
+ "##慳": 15778,
+ "##慵": 15779,
+ "##慶": 15780,
+ "##慷": 15781,
+ "##慾": 15782,
+ "##憂": 15783,
+ "##憊": 15784,
+ "##憋": 15785,
+ "##憎": 15786,
+ "##憐": 15787,
+ "##憑": 15788,
+ "##憔": 15789,
+ "##憚": 15790,
+ "##憤": 15791,
+ "##憧": 15792,
+ "##憨": 15793,
+ "##憩": 15794,
+ "##憫": 15795,
+ "##憬": 15796,
+ "##憲": 15797,
+ "##憶": 15798,
+ "##憾": 15799,
+ "##懂": 15800,
+ "##懇": 15801,
+ "##懈": 15802,
+ "##應": 15803,
+ "##懊": 15804,
+ "##懋": 15805,
+ "##懑": 15806,
+ "##懒": 15807,
+ "##懦": 15808,
+ "##懲": 15809,
+ "##懵": 15810,
+ "##懶": 15811,
+ "##懷": 15812,
+ "##懸": 15813,
+ "##懺": 15814,
+ "##懼": 15815,
+ "##懾": 15816,
+ "##懿": 15817,
+ "##戀": 15818,
+ "##戈": 15819,
+ "##戊": 15820,
+ "##戌": 15821,
+ "##戍": 15822,
+ "##戎": 15823,
+ "##戏": 15824,
+ "##成": 15825,
+ "##我": 15826,
+ "##戒": 15827,
+ "##戕": 15828,
+ "##或": 15829,
+ "##战": 15830,
+ "##戚": 15831,
+ "##戛": 15832,
+ "##戟": 15833,
+ "##戡": 15834,
+ "##戦": 15835,
+ "##截": 15836,
+ "##戬": 15837,
+ "##戮": 15838,
+ "##戰": 15839,
+ "##戲": 15840,
+ "##戳": 15841,
+ "##戴": 15842,
+ "##戶": 15843,
+ "##户": 15844,
+ "##戸": 15845,
+ "##戻": 15846,
+ "##戾": 15847,
+ "##房": 15848,
+ "##所": 15849,
+ "##扁": 15850,
+ "##扇": 15851,
+ "##扈": 15852,
+ "##扉": 15853,
+ "##手": 15854,
+ "##才": 15855,
+ "##扎": 15856,
+ "##扑": 15857,
+ "##扒": 15858,
+ "##打": 15859,
+ "##扔": 15860,
+ "##払": 15861,
+ "##托": 15862,
+ "##扛": 15863,
+ "##扣": 15864,
+ "##扦": 15865,
+ "##执": 15866,
+ "##扩": 15867,
+ "##扪": 15868,
+ "##扫": 15869,
+ "##扬": 15870,
+ "##扭": 15871,
+ "##扮": 15872,
+ "##扯": 15873,
+ "##扰": 15874,
+ "##扱": 15875,
+ "##扳": 15876,
+ "##扶": 15877,
+ "##批": 15878,
+ "##扼": 15879,
+ "##找": 15880,
+ "##承": 15881,
+ "##技": 15882,
+ "##抄": 15883,
+ "##抉": 15884,
+ "##把": 15885,
+ "##抑": 15886,
+ "##抒": 15887,
+ "##抓": 15888,
+ "##投": 15889,
+ "##抖": 15890,
+ "##抗": 15891,
+ "##折": 15892,
+ "##抚": 15893,
+ "##抛": 15894,
+ "##抜": 15895,
+ "##択": 15896,
+ "##抟": 15897,
+ "##抠": 15898,
+ "##抡": 15899,
+ "##抢": 15900,
+ "##护": 15901,
+ "##报": 15902,
+ "##抨": 15903,
+ "##披": 15904,
+ "##抬": 15905,
+ "##抱": 15906,
+ "##抵": 15907,
+ "##抹": 15908,
+ "##押": 15909,
+ "##抽": 15910,
+ "##抿": 15911,
+ "##拂": 15912,
+ "##拄": 15913,
+ "##担": 15914,
+ "##拆": 15915,
+ "##拇": 15916,
+ "##拈": 15917,
+ "##拉": 15918,
+ "##拋": 15919,
+ "##拌": 15920,
+ "##拍": 15921,
+ "##拎": 15922,
+ "##拐": 15923,
+ "##拒": 15924,
+ "##拓": 15925,
+ "##拔": 15926,
+ "##拖": 15927,
+ "##拗": 15928,
+ "##拘": 15929,
+ "##拙": 15930,
+ "##拚": 15931,
+ "##招": 15932,
+ "##拜": 15933,
+ "##拟": 15934,
+ "##拡": 15935,
+ "##拢": 15936,
+ "##拣": 15937,
+ "##拥": 15938,
+ "##拦": 15939,
+ "##拧": 15940,
+ "##拨": 15941,
+ "##择": 15942,
+ "##括": 15943,
+ "##拭": 15944,
+ "##拮": 15945,
+ "##拯": 15946,
+ "##拱": 15947,
+ "##拳": 15948,
+ "##拴": 15949,
+ "##拷": 15950,
+ "##拼": 15951,
+ "##拽": 15952,
+ "##拾": 15953,
+ "##拿": 15954,
+ "##持": 15955,
+ "##挂": 15956,
+ "##指": 15957,
+ "##挈": 15958,
+ "##按": 15959,
+ "##挎": 15960,
+ "##挑": 15961,
+ "##挖": 15962,
+ "##挙": 15963,
+ "##挚": 15964,
+ "##挛": 15965,
+ "##挝": 15966,
+ "##挞": 15967,
+ "##挟": 15968,
+ "##挠": 15969,
+ "##挡": 15970,
+ "##挣": 15971,
+ "##挤": 15972,
+ "##挥": 15973,
+ "##挨": 15974,
+ "##挪": 15975,
+ "##挫": 15976,
+ "##振": 15977,
+ "##挲": 15978,
+ "##挹": 15979,
+ "##挺": 15980,
+ "##挽": 15981,
+ "##挾": 15982,
+ "##捂": 15983,
+ "##捅": 15984,
+ "##捆": 15985,
+ "##捉": 15986,
+ "##捋": 15987,
+ "##捌": 15988,
+ "##捍": 15989,
+ "##捎": 15990,
+ "##捏": 15991,
+ "##捐": 15992,
+ "##捕": 15993,
+ "##捞": 15994,
+ "##损": 15995,
+ "##捡": 15996,
+ "##换": 15997,
+ "##捣": 15998,
+ "##捧": 15999,
+ "##捨": 16000,
+ "##捩": 16001,
+ "##据": 16002,
+ "##捱": 16003,
+ "##捲": 16004,
+ "##捶": 16005,
+ "##捷": 16006,
+ "##捺": 16007,
+ "##捻": 16008,
+ "##掀": 16009,
+ "##掂": 16010,
+ "##掃": 16011,
+ "##掇": 16012,
+ "##授": 16013,
+ "##掉": 16014,
+ "##掌": 16015,
+ "##掏": 16016,
+ "##掐": 16017,
+ "##排": 16018,
+ "##掖": 16019,
+ "##掘": 16020,
+ "##掙": 16021,
+ "##掛": 16022,
+ "##掠": 16023,
+ "##採": 16024,
+ "##探": 16025,
+ "##掣": 16026,
+ "##接": 16027,
+ "##控": 16028,
+ "##推": 16029,
+ "##掩": 16030,
+ "##措": 16031,
+ "##掬": 16032,
+ "##掰": 16033,
+ "##掲": 16034,
+ "##掳": 16035,
+ "##掴": 16036,
+ "##掷": 16037,
+ "##掸": 16038,
+ "##掺": 16039,
+ "##揀": 16040,
+ "##揃": 16041,
+ "##揄": 16042,
+ "##揆": 16043,
+ "##揉": 16044,
+ "##揍": 16045,
+ "##描": 16046,
+ "##提": 16047,
+ "##插": 16048,
+ "##揖": 16049,
+ "##揚": 16050,
+ "##換": 16051,
+ "##握": 16052,
+ "##揣": 16053,
+ "##揩": 16054,
+ "##揪": 16055,
+ "##揭": 16056,
+ "##揮": 16057,
+ "##援": 16058,
+ "##揶": 16059,
+ "##揸": 16060,
+ "##揹": 16061,
+ "##揽": 16062,
+ "##搀": 16063,
+ "##搁": 16064,
+ "##搂": 16065,
+ "##搅": 16066,
+ "##損": 16067,
+ "##搏": 16068,
+ "##搐": 16069,
+ "##搓": 16070,
+ "##搔": 16071,
+ "##搖": 16072,
+ "##搗": 16073,
+ "##搜": 16074,
+ "##搞": 16075,
+ "##搡": 16076,
+ "##搪": 16077,
+ "##搬": 16078,
+ "##搭": 16079,
+ "##搵": 16080,
+ "##搶": 16081,
+ "##携": 16082,
+ "##搽": 16083,
+ "##摀": 16084,
+ "##摁": 16085,
+ "##摄": 16086,
+ "##摆": 16087,
+ "##摇": 16088,
+ "##摈": 16089,
+ "##摊": 16090,
+ "##摒": 16091,
+ "##摔": 16092,
+ "##摘": 16093,
+ "##摞": 16094,
+ "##摟": 16095,
+ "##摧": 16096,
+ "##摩": 16097,
+ "##摯": 16098,
+ "##摳": 16099,
+ "##摸": 16100,
+ "##摹": 16101,
+ "##摺": 16102,
+ "##摻": 16103,
+ "##撂": 16104,
+ "##撃": 16105,
+ "##撅": 16106,
+ "##撇": 16107,
+ "##撈": 16108,
+ "##撐": 16109,
+ "##撑": 16110,
+ "##撒": 16111,
+ "##撓": 16112,
+ "##撕": 16113,
+ "##撚": 16114,
+ "##撞": 16115,
+ "##撤": 16116,
+ "##撥": 16117,
+ "##撩": 16118,
+ "##撫": 16119,
+ "##撬": 16120,
+ "##播": 16121,
+ "##撮": 16122,
+ "##撰": 16123,
+ "##撲": 16124,
+ "##撵": 16125,
+ "##撷": 16126,
+ "##撸": 16127,
+ "##撻": 16128,
+ "##撼": 16129,
+ "##撿": 16130,
+ "##擀": 16131,
+ "##擁": 16132,
+ "##擂": 16133,
+ "##擄": 16134,
+ "##擅": 16135,
+ "##擇": 16136,
+ "##擊": 16137,
+ "##擋": 16138,
+ "##操": 16139,
+ "##擎": 16140,
+ "##擒": 16141,
+ "##擔": 16142,
+ "##擘": 16143,
+ "##據": 16144,
+ "##擞": 16145,
+ "##擠": 16146,
+ "##擡": 16147,
+ "##擢": 16148,
+ "##擦": 16149,
+ "##擬": 16150,
+ "##擰": 16151,
+ "##擱": 16152,
+ "##擲": 16153,
+ "##擴": 16154,
+ "##擷": 16155,
+ "##擺": 16156,
+ "##擼": 16157,
+ "##擾": 16158,
+ "##攀": 16159,
+ "##攏": 16160,
+ "##攒": 16161,
+ "##攔": 16162,
+ "##攘": 16163,
+ "##攙": 16164,
+ "##攜": 16165,
+ "##攝": 16166,
+ "##攞": 16167,
+ "##攢": 16168,
+ "##攣": 16169,
+ "##攤": 16170,
+ "##攥": 16171,
+ "##攪": 16172,
+ "##攫": 16173,
+ "##攬": 16174,
+ "##支": 16175,
+ "##收": 16176,
+ "##攸": 16177,
+ "##改": 16178,
+ "##攻": 16179,
+ "##放": 16180,
+ "##政": 16181,
+ "##故": 16182,
+ "##效": 16183,
+ "##敌": 16184,
+ "##敍": 16185,
+ "##敎": 16186,
+ "##敏": 16187,
+ "##救": 16188,
+ "##敕": 16189,
+ "##敖": 16190,
+ "##敗": 16191,
+ "##敘": 16192,
+ "##教": 16193,
+ "##敛": 16194,
+ "##敝": 16195,
+ "##敞": 16196,
+ "##敢": 16197,
+ "##散": 16198,
+ "##敦": 16199,
+ "##敬": 16200,
+ "##数": 16201,
+ "##敲": 16202,
+ "##整": 16203,
+ "##敵": 16204,
+ "##敷": 16205,
+ "##數": 16206,
+ "##斂": 16207,
+ "##斃": 16208,
+ "##文": 16209,
+ "##斋": 16210,
+ "##斌": 16211,
+ "##斎": 16212,
+ "##斐": 16213,
+ "##斑": 16214,
+ "##斓": 16215,
+ "##斗": 16216,
+ "##料": 16217,
+ "##斛": 16218,
+ "##斜": 16219,
+ "##斟": 16220,
+ "##斡": 16221,
+ "##斤": 16222,
+ "##斥": 16223,
+ "##斧": 16224,
+ "##斩": 16225,
+ "##斫": 16226,
+ "##斬": 16227,
+ "##断": 16228,
+ "##斯": 16229,
+ "##新": 16230,
+ "##斷": 16231,
+ "##方": 16232,
+ "##於": 16233,
+ "##施": 16234,
+ "##旁": 16235,
+ "##旃": 16236,
+ "##旅": 16237,
+ "##旋": 16238,
+ "##旌": 16239,
+ "##旎": 16240,
+ "##族": 16241,
+ "##旖": 16242,
+ "##旗": 16243,
+ "##无": 16244,
+ "##既": 16245,
+ "##日": 16246,
+ "##旦": 16247,
+ "##旧": 16248,
+ "##旨": 16249,
+ "##早": 16250,
+ "##旬": 16251,
+ "##旭": 16252,
+ "##旮": 16253,
+ "##旱": 16254,
+ "##时": 16255,
+ "##旷": 16256,
+ "##旺": 16257,
+ "##旻": 16258,
+ "##昀": 16259,
+ "##昂": 16260,
+ "##昆": 16261,
+ "##昇": 16262,
+ "##昉": 16263,
+ "##昊": 16264,
+ "##昌": 16265,
+ "##明": 16266,
+ "##昏": 16267,
+ "##易": 16268,
+ "##昔": 16269,
+ "##昕": 16270,
+ "##昙": 16271,
+ "##星": 16272,
+ "##映": 16273,
+ "##春": 16274,
+ "##昧": 16275,
+ "##昨": 16276,
+ "##昭": 16277,
+ "##是": 16278,
+ "##昱": 16279,
+ "##昴": 16280,
+ "##昵": 16281,
+ "##昶": 16282,
+ "##昼": 16283,
+ "##显": 16284,
+ "##晁": 16285,
+ "##時": 16286,
+ "##晃": 16287,
+ "##晉": 16288,
+ "##晋": 16289,
+ "##晌": 16290,
+ "##晏": 16291,
+ "##晒": 16292,
+ "##晓": 16293,
+ "##晔": 16294,
+ "##晕": 16295,
+ "##晖": 16296,
+ "##晗": 16297,
+ "##晚": 16298,
+ "##晝": 16299,
+ "##晞": 16300,
+ "##晟": 16301,
+ "##晤": 16302,
+ "##晦": 16303,
+ "##晨": 16304,
+ "##晩": 16305,
+ "##普": 16306,
+ "##景": 16307,
+ "##晰": 16308,
+ "##晴": 16309,
+ "##晶": 16310,
+ "##晷": 16311,
+ "##智": 16312,
+ "##晾": 16313,
+ "##暂": 16314,
+ "##暄": 16315,
+ "##暇": 16316,
+ "##暈": 16317,
+ "##暉": 16318,
+ "##暌": 16319,
+ "##暐": 16320,
+ "##暑": 16321,
+ "##暖": 16322,
+ "##暗": 16323,
+ "##暝": 16324,
+ "##暢": 16325,
+ "##暧": 16326,
+ "##暨": 16327,
+ "##暫": 16328,
+ "##暮": 16329,
+ "##暱": 16330,
+ "##暴": 16331,
+ "##暸": 16332,
+ "##暹": 16333,
+ "##曄": 16334,
+ "##曆": 16335,
+ "##曇": 16336,
+ "##曉": 16337,
+ "##曖": 16338,
+ "##曙": 16339,
+ "##曜": 16340,
+ "##曝": 16341,
+ "##曠": 16342,
+ "##曦": 16343,
+ "##曬": 16344,
+ "##曰": 16345,
+ "##曲": 16346,
+ "##曳": 16347,
+ "##更": 16348,
+ "##書": 16349,
+ "##曹": 16350,
+ "##曼": 16351,
+ "##曾": 16352,
+ "##替": 16353,
+ "##最": 16354,
+ "##會": 16355,
+ "##月": 16356,
+ "##有": 16357,
+ "##朋": 16358,
+ "##服": 16359,
+ "##朐": 16360,
+ "##朔": 16361,
+ "##朕": 16362,
+ "##朗": 16363,
+ "##望": 16364,
+ "##朝": 16365,
+ "##期": 16366,
+ "##朦": 16367,
+ "##朧": 16368,
+ "##木": 16369,
+ "##未": 16370,
+ "##末": 16371,
+ "##本": 16372,
+ "##札": 16373,
+ "##朮": 16374,
+ "##术": 16375,
+ "##朱": 16376,
+ "##朴": 16377,
+ "##朵": 16378,
+ "##机": 16379,
+ "##朽": 16380,
+ "##杀": 16381,
+ "##杂": 16382,
+ "##权": 16383,
+ "##杆": 16384,
+ "##杈": 16385,
+ "##杉": 16386,
+ "##李": 16387,
+ "##杏": 16388,
+ "##材": 16389,
+ "##村": 16390,
+ "##杓": 16391,
+ "##杖": 16392,
+ "##杜": 16393,
+ "##杞": 16394,
+ "##束": 16395,
+ "##杠": 16396,
+ "##条": 16397,
+ "##来": 16398,
+ "##杨": 16399,
+ "##杭": 16400,
+ "##杯": 16401,
+ "##杰": 16402,
+ "##東": 16403,
+ "##杳": 16404,
+ "##杵": 16405,
+ "##杷": 16406,
+ "##杼": 16407,
+ "##松": 16408,
+ "##板": 16409,
+ "##极": 16410,
+ "##构": 16411,
+ "##枇": 16412,
+ "##枉": 16413,
+ "##枋": 16414,
+ "##析": 16415,
+ "##枕": 16416,
+ "##林": 16417,
+ "##枚": 16418,
+ "##果": 16419,
+ "##枝": 16420,
+ "##枢": 16421,
+ "##枣": 16422,
+ "##枪": 16423,
+ "##枫": 16424,
+ "##枭": 16425,
+ "##枯": 16426,
+ "##枰": 16427,
+ "##枱": 16428,
+ "##枳": 16429,
+ "##架": 16430,
+ "##枷": 16431,
+ "##枸": 16432,
+ "##柄": 16433,
+ "##柏": 16434,
+ "##某": 16435,
+ "##柑": 16436,
+ "##柒": 16437,
+ "##染": 16438,
+ "##柔": 16439,
+ "##柘": 16440,
+ "##柚": 16441,
+ "##柜": 16442,
+ "##柞": 16443,
+ "##柠": 16444,
+ "##柢": 16445,
+ "##查": 16446,
+ "##柩": 16447,
+ "##柬": 16448,
+ "##柯": 16449,
+ "##柱": 16450,
+ "##柳": 16451,
+ "##柴": 16452,
+ "##柵": 16453,
+ "##査": 16454,
+ "##柿": 16455,
+ "##栀": 16456,
+ "##栃": 16457,
+ "##栄": 16458,
+ "##栅": 16459,
+ "##标": 16460,
+ "##栈": 16461,
+ "##栉": 16462,
+ "##栋": 16463,
+ "##栎": 16464,
+ "##栏": 16465,
+ "##树": 16466,
+ "##栓": 16467,
+ "##栖": 16468,
+ "##栗": 16469,
+ "##校": 16470,
+ "##栩": 16471,
+ "##株": 16472,
+ "##样": 16473,
+ "##核": 16474,
+ "##根": 16475,
+ "##格": 16476,
+ "##栽": 16477,
+ "##栾": 16478,
+ "##桀": 16479,
+ "##桁": 16480,
+ "##桂": 16481,
+ "##桃": 16482,
+ "##桅": 16483,
+ "##框": 16484,
+ "##案": 16485,
+ "##桉": 16486,
+ "##桌": 16487,
+ "##桎": 16488,
+ "##桐": 16489,
+ "##桑": 16490,
+ "##桓": 16491,
+ "##桔": 16492,
+ "##桜": 16493,
+ "##桠": 16494,
+ "##桡": 16495,
+ "##桢": 16496,
+ "##档": 16497,
+ "##桥": 16498,
+ "##桦": 16499,
+ "##桧": 16500,
+ "##桨": 16501,
+ "##桩": 16502,
+ "##桶": 16503,
+ "##桿": 16504,
+ "##梁": 16505,
+ "##梅": 16506,
+ "##梆": 16507,
+ "##梏": 16508,
+ "##梓": 16509,
+ "##梗": 16510,
+ "##條": 16511,
+ "##梟": 16512,
+ "##梢": 16513,
+ "##梦": 16514,
+ "##梧": 16515,
+ "##梨": 16516,
+ "##梭": 16517,
+ "##梯": 16518,
+ "##械": 16519,
+ "##梳": 16520,
+ "##梵": 16521,
+ "##梶": 16522,
+ "##检": 16523,
+ "##棂": 16524,
+ "##棄": 16525,
+ "##棉": 16526,
+ "##棋": 16527,
+ "##棍": 16528,
+ "##棒": 16529,
+ "##棕": 16530,
+ "##棗": 16531,
+ "##棘": 16532,
+ "##棚": 16533,
+ "##棟": 16534,
+ "##棠": 16535,
+ "##棣": 16536,
+ "##棧": 16537,
+ "##森": 16538,
+ "##棱": 16539,
+ "##棲": 16540,
+ "##棵": 16541,
+ "##棹": 16542,
+ "##棺": 16543,
+ "##椁": 16544,
+ "##椅": 16545,
+ "##椋": 16546,
+ "##植": 16547,
+ "##椎": 16548,
+ "##椒": 16549,
+ "##検": 16550,
+ "##椪": 16551,
+ "##椭": 16552,
+ "##椰": 16553,
+ "##椹": 16554,
+ "##椽": 16555,
+ "##椿": 16556,
+ "##楂": 16557,
+ "##楊": 16558,
+ "##楓": 16559,
+ "##楔": 16560,
+ "##楚": 16561,
+ "##楝": 16562,
+ "##楞": 16563,
+ "##楠": 16564,
+ "##楣": 16565,
+ "##楨": 16566,
+ "##楫": 16567,
+ "##業": 16568,
+ "##楮": 16569,
+ "##極": 16570,
+ "##楷": 16571,
+ "##楸": 16572,
+ "##楹": 16573,
+ "##楼": 16574,
+ "##楽": 16575,
+ "##概": 16576,
+ "##榄": 16577,
+ "##榆": 16578,
+ "##榈": 16579,
+ "##榉": 16580,
+ "##榔": 16581,
+ "##榕": 16582,
+ "##榖": 16583,
+ "##榛": 16584,
+ "##榜": 16585,
+ "##榨": 16586,
+ "##榫": 16587,
+ "##榭": 16588,
+ "##榮": 16589,
+ "##榱": 16590,
+ "##榴": 16591,
+ "##榷": 16592,
+ "##榻": 16593,
+ "##槁": 16594,
+ "##槃": 16595,
+ "##構": 16596,
+ "##槌": 16597,
+ "##槍": 16598,
+ "##槎": 16599,
+ "##槐": 16600,
+ "##槓": 16601,
+ "##様": 16602,
+ "##槛": 16603,
+ "##槟": 16604,
+ "##槤": 16605,
+ "##槭": 16606,
+ "##槲": 16607,
+ "##槳": 16608,
+ "##槻": 16609,
+ "##槽": 16610,
+ "##槿": 16611,
+ "##樁": 16612,
+ "##樂": 16613,
+ "##樊": 16614,
+ "##樑": 16615,
+ "##樓": 16616,
+ "##標": 16617,
+ "##樞": 16618,
+ "##樟": 16619,
+ "##模": 16620,
+ "##樣": 16621,
+ "##権": 16622,
+ "##横": 16623,
+ "##樫": 16624,
+ "##樯": 16625,
+ "##樱": 16626,
+ "##樵": 16627,
+ "##樸": 16628,
+ "##樹": 16629,
+ "##樺": 16630,
+ "##樽": 16631,
+ "##樾": 16632,
+ "##橄": 16633,
+ "##橇": 16634,
+ "##橋": 16635,
+ "##橐": 16636,
+ "##橘": 16637,
+ "##橙": 16638,
+ "##機": 16639,
+ "##橡": 16640,
+ "##橢": 16641,
+ "##橫": 16642,
+ "##橱": 16643,
+ "##橹": 16644,
+ "##橼": 16645,
+ "##檀": 16646,
+ "##檄": 16647,
+ "##檎": 16648,
+ "##檐": 16649,
+ "##檔": 16650,
+ "##檗": 16651,
+ "##檜": 16652,
+ "##檢": 16653,
+ "##檬": 16654,
+ "##檯": 16655,
+ "##檳": 16656,
+ "##檸": 16657,
+ "##檻": 16658,
+ "##櫃": 16659,
+ "##櫚": 16660,
+ "##櫛": 16661,
+ "##櫥": 16662,
+ "##櫸": 16663,
+ "##櫻": 16664,
+ "##欄": 16665,
+ "##權": 16666,
+ "##欒": 16667,
+ "##欖": 16668,
+ "##欠": 16669,
+ "##次": 16670,
+ "##欢": 16671,
+ "##欣": 16672,
+ "##欧": 16673,
+ "##欲": 16674,
+ "##欸": 16675,
+ "##欺": 16676,
+ "##欽": 16677,
+ "##款": 16678,
+ "##歆": 16679,
+ "##歇": 16680,
+ "##歉": 16681,
+ "##歌": 16682,
+ "##歎": 16683,
+ "##歐": 16684,
+ "##歓": 16685,
+ "##歙": 16686,
+ "##歛": 16687,
+ "##歡": 16688,
+ "##止": 16689,
+ "##正": 16690,
+ "##此": 16691,
+ "##步": 16692,
+ "##武": 16693,
+ "##歧": 16694,
+ "##歩": 16695,
+ "##歪": 16696,
+ "##歯": 16697,
+ "##歲": 16698,
+ "##歳": 16699,
+ "##歴": 16700,
+ "##歷": 16701,
+ "##歸": 16702,
+ "##歹": 16703,
+ "##死": 16704,
+ "##歼": 16705,
+ "##殁": 16706,
+ "##殃": 16707,
+ "##殆": 16708,
+ "##殇": 16709,
+ "##殉": 16710,
+ "##殊": 16711,
+ "##残": 16712,
+ "##殒": 16713,
+ "##殓": 16714,
+ "##殖": 16715,
+ "##殘": 16716,
+ "##殞": 16717,
+ "##殡": 16718,
+ "##殤": 16719,
+ "##殭": 16720,
+ "##殯": 16721,
+ "##殲": 16722,
+ "##殴": 16723,
+ "##段": 16724,
+ "##殷": 16725,
+ "##殺": 16726,
+ "##殼": 16727,
+ "##殿": 16728,
+ "##毀": 16729,
+ "##毁": 16730,
+ "##毂": 16731,
+ "##毅": 16732,
+ "##毆": 16733,
+ "##毋": 16734,
+ "##母": 16735,
+ "##毎": 16736,
+ "##每": 16737,
+ "##毒": 16738,
+ "##毓": 16739,
+ "##比": 16740,
+ "##毕": 16741,
+ "##毗": 16742,
+ "##毘": 16743,
+ "##毙": 16744,
+ "##毛": 16745,
+ "##毡": 16746,
+ "##毫": 16747,
+ "##毯": 16748,
+ "##毽": 16749,
+ "##氈": 16750,
+ "##氏": 16751,
+ "##氐": 16752,
+ "##民": 16753,
+ "##氓": 16754,
+ "##气": 16755,
+ "##氖": 16756,
+ "##気": 16757,
+ "##氙": 16758,
+ "##氛": 16759,
+ "##氟": 16760,
+ "##氡": 16761,
+ "##氢": 16762,
+ "##氣": 16763,
+ "##氤": 16764,
+ "##氦": 16765,
+ "##氧": 16766,
+ "##氨": 16767,
+ "##氪": 16768,
+ "##氫": 16769,
+ "##氮": 16770,
+ "##氯": 16771,
+ "##氰": 16772,
+ "##氲": 16773,
+ "##水": 16774,
+ "##氷": 16775,
+ "##永": 16776,
+ "##氹": 16777,
+ "##氾": 16778,
+ "##汀": 16779,
+ "##汁": 16780,
+ "##求": 16781,
+ "##汆": 16782,
+ "##汇": 16783,
+ "##汉": 16784,
+ "##汎": 16785,
+ "##汐": 16786,
+ "##汕": 16787,
+ "##汗": 16788,
+ "##汙": 16789,
+ "##汛": 16790,
+ "##汝": 16791,
+ "##汞": 16792,
+ "##江": 16793,
+ "##池": 16794,
+ "##污": 16795,
+ "##汤": 16796,
+ "##汨": 16797,
+ "##汩": 16798,
+ "##汪": 16799,
+ "##汰": 16800,
+ "##汲": 16801,
+ "##汴": 16802,
+ "##汶": 16803,
+ "##汹": 16804,
+ "##決": 16805,
+ "##汽": 16806,
+ "##汾": 16807,
+ "##沁": 16808,
+ "##沂": 16809,
+ "##沃": 16810,
+ "##沅": 16811,
+ "##沈": 16812,
+ "##沉": 16813,
+ "##沌": 16814,
+ "##沏": 16815,
+ "##沐": 16816,
+ "##沒": 16817,
+ "##沓": 16818,
+ "##沖": 16819,
+ "##沙": 16820,
+ "##沛": 16821,
+ "##沟": 16822,
+ "##没": 16823,
+ "##沢": 16824,
+ "##沣": 16825,
+ "##沥": 16826,
+ "##沦": 16827,
+ "##沧": 16828,
+ "##沪": 16829,
+ "##沫": 16830,
+ "##沭": 16831,
+ "##沮": 16832,
+ "##沱": 16833,
+ "##河": 16834,
+ "##沸": 16835,
+ "##油": 16836,
+ "##治": 16837,
+ "##沼": 16838,
+ "##沽": 16839,
+ "##沾": 16840,
+ "##沿": 16841,
+ "##況": 16842,
+ "##泄": 16843,
+ "##泉": 16844,
+ "##泊": 16845,
+ "##泌": 16846,
+ "##泓": 16847,
+ "##法": 16848,
+ "##泗": 16849,
+ "##泛": 16850,
+ "##泞": 16851,
+ "##泠": 16852,
+ "##泡": 16853,
+ "##波": 16854,
+ "##泣": 16855,
+ "##泥": 16856,
+ "##注": 16857,
+ "##泪": 16858,
+ "##泫": 16859,
+ "##泮": 16860,
+ "##泯": 16861,
+ "##泰": 16862,
+ "##泱": 16863,
+ "##泳": 16864,
+ "##泵": 16865,
+ "##泷": 16866,
+ "##泸": 16867,
+ "##泻": 16868,
+ "##泼": 16869,
+ "##泽": 16870,
+ "##泾": 16871,
+ "##洁": 16872,
+ "##洄": 16873,
+ "##洋": 16874,
+ "##洒": 16875,
+ "##洗": 16876,
+ "##洙": 16877,
+ "##洛": 16878,
+ "##洞": 16879,
+ "##津": 16880,
+ "##洩": 16881,
+ "##洪": 16882,
+ "##洮": 16883,
+ "##洱": 16884,
+ "##洲": 16885,
+ "##洵": 16886,
+ "##洶": 16887,
+ "##洸": 16888,
+ "##洹": 16889,
+ "##活": 16890,
+ "##洼": 16891,
+ "##洽": 16892,
+ "##派": 16893,
+ "##流": 16894,
+ "##浃": 16895,
+ "##浄": 16896,
+ "##浅": 16897,
+ "##浆": 16898,
+ "##浇": 16899,
+ "##浊": 16900,
+ "##测": 16901,
+ "##济": 16902,
+ "##浏": 16903,
+ "##浑": 16904,
+ "##浒": 16905,
+ "##浓": 16906,
+ "##浔": 16907,
+ "##浙": 16908,
+ "##浚": 16909,
+ "##浜": 16910,
+ "##浣": 16911,
+ "##浦": 16912,
+ "##浩": 16913,
+ "##浪": 16914,
+ "##浬": 16915,
+ "##浮": 16916,
+ "##浯": 16917,
+ "##浴": 16918,
+ "##海": 16919,
+ "##浸": 16920,
+ "##涂": 16921,
+ "##涅": 16922,
+ "##涇": 16923,
+ "##消": 16924,
+ "##涉": 16925,
+ "##涌": 16926,
+ "##涎": 16927,
+ "##涓": 16928,
+ "##涔": 16929,
+ "##涕": 16930,
+ "##涙": 16931,
+ "##涛": 16932,
+ "##涝": 16933,
+ "##涞": 16934,
+ "##涟": 16935,
+ "##涠": 16936,
+ "##涡": 16937,
+ "##涣": 16938,
+ "##涤": 16939,
+ "##润": 16940,
+ "##涧": 16941,
+ "##涨": 16942,
+ "##涩": 16943,
+ "##涪": 16944,
+ "##涮": 16945,
+ "##涯": 16946,
+ "##液": 16947,
+ "##涵": 16948,
+ "##涸": 16949,
+ "##涼": 16950,
+ "##涿": 16951,
+ "##淀": 16952,
+ "##淄": 16953,
+ "##淅": 16954,
+ "##淆": 16955,
+ "##淇": 16956,
+ "##淋": 16957,
+ "##淌": 16958,
+ "##淑": 16959,
+ "##淒": 16960,
+ "##淖": 16961,
+ "##淘": 16962,
+ "##淙": 16963,
+ "##淚": 16964,
+ "##淞": 16965,
+ "##淡": 16966,
+ "##淤": 16967,
+ "##淦": 16968,
+ "##淨": 16969,
+ "##淩": 16970,
+ "##淪": 16971,
+ "##淫": 16972,
+ "##淬": 16973,
+ "##淮": 16974,
+ "##深": 16975,
+ "##淳": 16976,
+ "##淵": 16977,
+ "##混": 16978,
+ "##淹": 16979,
+ "##淺": 16980,
+ "##添": 16981,
+ "##淼": 16982,
+ "##清": 16983,
+ "##済": 16984,
+ "##渉": 16985,
+ "##渊": 16986,
+ "##渋": 16987,
+ "##渍": 16988,
+ "##渎": 16989,
+ "##渐": 16990,
+ "##渔": 16991,
+ "##渗": 16992,
+ "##渙": 16993,
+ "##渚": 16994,
+ "##減": 16995,
+ "##渝": 16996,
+ "##渠": 16997,
+ "##渡": 16998,
+ "##渣": 16999,
+ "##渤": 17000,
+ "##渥": 17001,
+ "##渦": 17002,
+ "##温": 17003,
+ "##測": 17004,
+ "##渭": 17005,
+ "##港": 17006,
+ "##渲": 17007,
+ "##渴": 17008,
+ "##游": 17009,
+ "##渺": 17010,
+ "##渾": 17011,
+ "##湃": 17012,
+ "##湄": 17013,
+ "##湊": 17014,
+ "##湍": 17015,
+ "##湖": 17016,
+ "##湘": 17017,
+ "##湛": 17018,
+ "##湟": 17019,
+ "##湧": 17020,
+ "##湫": 17021,
+ "##湮": 17022,
+ "##湯": 17023,
+ "##湳": 17024,
+ "##湾": 17025,
+ "##湿": 17026,
+ "##満": 17027,
+ "##溃": 17028,
+ "##溅": 17029,
+ "##溉": 17030,
+ "##溏": 17031,
+ "##源": 17032,
+ "##準": 17033,
+ "##溜": 17034,
+ "##溝": 17035,
+ "##溟": 17036,
+ "##溢": 17037,
+ "##溥": 17038,
+ "##溧": 17039,
+ "##溪": 17040,
+ "##溫": 17041,
+ "##溯": 17042,
+ "##溱": 17043,
+ "##溴": 17044,
+ "##溶": 17045,
+ "##溺": 17046,
+ "##溼": 17047,
+ "##滁": 17048,
+ "##滂": 17049,
+ "##滄": 17050,
+ "##滅": 17051,
+ "##滇": 17052,
+ "##滋": 17053,
+ "##滌": 17054,
+ "##滑": 17055,
+ "##滓": 17056,
+ "##滔": 17057,
+ "##滕": 17058,
+ "##滙": 17059,
+ "##滚": 17060,
+ "##滝": 17061,
+ "##滞": 17062,
+ "##滟": 17063,
+ "##满": 17064,
+ "##滢": 17065,
+ "##滤": 17066,
+ "##滥": 17067,
+ "##滦": 17068,
+ "##滨": 17069,
+ "##滩": 17070,
+ "##滬": 17071,
+ "##滯": 17072,
+ "##滲": 17073,
+ "##滴": 17074,
+ "##滷": 17075,
+ "##滸": 17076,
+ "##滾": 17077,
+ "##滿": 17078,
+ "##漁": 17079,
+ "##漂": 17080,
+ "##漆": 17081,
+ "##漉": 17082,
+ "##漏": 17083,
+ "##漓": 17084,
+ "##演": 17085,
+ "##漕": 17086,
+ "##漠": 17087,
+ "##漢": 17088,
+ "##漣": 17089,
+ "##漩": 17090,
+ "##漪": 17091,
+ "##漫": 17092,
+ "##漬": 17093,
+ "##漯": 17094,
+ "##漱": 17095,
+ "##漲": 17096,
+ "##漳": 17097,
+ "##漸": 17098,
+ "##漾": 17099,
+ "##漿": 17100,
+ "##潆": 17101,
+ "##潇": 17102,
+ "##潋": 17103,
+ "##潍": 17104,
+ "##潑": 17105,
+ "##潔": 17106,
+ "##潘": 17107,
+ "##潛": 17108,
+ "##潜": 17109,
+ "##潞": 17110,
+ "##潟": 17111,
+ "##潢": 17112,
+ "##潤": 17113,
+ "##潦": 17114,
+ "##潧": 17115,
+ "##潭": 17116,
+ "##潮": 17117,
+ "##潰": 17118,
+ "##潴": 17119,
+ "##潸": 17120,
+ "##潺": 17121,
+ "##潼": 17122,
+ "##澀": 17123,
+ "##澄": 17124,
+ "##澆": 17125,
+ "##澈": 17126,
+ "##澍": 17127,
+ "##澎": 17128,
+ "##澗": 17129,
+ "##澜": 17130,
+ "##澡": 17131,
+ "##澤": 17132,
+ "##澧": 17133,
+ "##澱": 17134,
+ "##澳": 17135,
+ "##澹": 17136,
+ "##激": 17137,
+ "##濁": 17138,
+ "##濂": 17139,
+ "##濃": 17140,
+ "##濑": 17141,
+ "##濒": 17142,
+ "##濕": 17143,
+ "##濘": 17144,
+ "##濛": 17145,
+ "##濟": 17146,
+ "##濠": 17147,
+ "##濡": 17148,
+ "##濤": 17149,
+ "##濫": 17150,
+ "##濬": 17151,
+ "##濮": 17152,
+ "##濯": 17153,
+ "##濱": 17154,
+ "##濺": 17155,
+ "##濾": 17156,
+ "##瀅": 17157,
+ "##瀆": 17158,
+ "##瀉": 17159,
+ "##瀋": 17160,
+ "##瀏": 17161,
+ "##瀑": 17162,
+ "##瀕": 17163,
+ "##瀘": 17164,
+ "##瀚": 17165,
+ "##瀛": 17166,
+ "##瀝": 17167,
+ "##瀞": 17168,
+ "##瀟": 17169,
+ "##瀧": 17170,
+ "##瀨": 17171,
+ "##瀬": 17172,
+ "##瀰": 17173,
+ "##瀾": 17174,
+ "##灌": 17175,
+ "##灏": 17176,
+ "##灑": 17177,
+ "##灘": 17178,
+ "##灝": 17179,
+ "##灞": 17180,
+ "##灣": 17181,
+ "##火": 17182,
+ "##灬": 17183,
+ "##灭": 17184,
+ "##灯": 17185,
+ "##灰": 17186,
+ "##灵": 17187,
+ "##灶": 17188,
+ "##灸": 17189,
+ "##灼": 17190,
+ "##災": 17191,
+ "##灾": 17192,
+ "##灿": 17193,
+ "##炀": 17194,
+ "##炁": 17195,
+ "##炅": 17196,
+ "##炉": 17197,
+ "##炊": 17198,
+ "##炎": 17199,
+ "##炒": 17200,
+ "##炔": 17201,
+ "##炕": 17202,
+ "##炖": 17203,
+ "##炙": 17204,
+ "##炜": 17205,
+ "##炫": 17206,
+ "##炬": 17207,
+ "##炭": 17208,
+ "##炮": 17209,
+ "##炯": 17210,
+ "##炳": 17211,
+ "##炷": 17212,
+ "##炸": 17213,
+ "##点": 17214,
+ "##為": 17215,
+ "##炼": 17216,
+ "##炽": 17217,
+ "##烁": 17218,
+ "##烂": 17219,
+ "##烃": 17220,
+ "##烈": 17221,
+ "##烊": 17222,
+ "##烏": 17223,
+ "##烘": 17224,
+ "##烙": 17225,
+ "##烛": 17226,
+ "##烟": 17227,
+ "##烤": 17228,
+ "##烦": 17229,
+ "##烧": 17230,
+ "##烨": 17231,
+ "##烩": 17232,
+ "##烫": 17233,
+ "##烬": 17234,
+ "##热": 17235,
+ "##烯": 17236,
+ "##烷": 17237,
+ "##烹": 17238,
+ "##烽": 17239,
+ "##焉": 17240,
+ "##焊": 17241,
+ "##焕": 17242,
+ "##焖": 17243,
+ "##焗": 17244,
+ "##焘": 17245,
+ "##焙": 17246,
+ "##焚": 17247,
+ "##焜": 17248,
+ "##無": 17249,
+ "##焦": 17250,
+ "##焯": 17251,
+ "##焰": 17252,
+ "##焱": 17253,
+ "##然": 17254,
+ "##焼": 17255,
+ "##煅": 17256,
+ "##煉": 17257,
+ "##煊": 17258,
+ "##煌": 17259,
+ "##煎": 17260,
+ "##煒": 17261,
+ "##煖": 17262,
+ "##煙": 17263,
+ "##煜": 17264,
+ "##煞": 17265,
+ "##煤": 17266,
+ "##煥": 17267,
+ "##煦": 17268,
+ "##照": 17269,
+ "##煨": 17270,
+ "##煩": 17271,
+ "##煮": 17272,
+ "##煲": 17273,
+ "##煸": 17274,
+ "##煽": 17275,
+ "##熄": 17276,
+ "##熊": 17277,
+ "##熏": 17278,
+ "##熒": 17279,
+ "##熔": 17280,
+ "##熙": 17281,
+ "##熟": 17282,
+ "##熠": 17283,
+ "##熨": 17284,
+ "##熬": 17285,
+ "##熱": 17286,
+ "##熵": 17287,
+ "##熹": 17288,
+ "##熾": 17289,
+ "##燁": 17290,
+ "##燃": 17291,
+ "##燄": 17292,
+ "##燈": 17293,
+ "##燉": 17294,
+ "##燊": 17295,
+ "##燎": 17296,
+ "##燒": 17297,
+ "##燔": 17298,
+ "##燕": 17299,
+ "##燙": 17300,
+ "##燜": 17301,
+ "##營": 17302,
+ "##燥": 17303,
+ "##燦": 17304,
+ "##燧": 17305,
+ "##燭": 17306,
+ "##燮": 17307,
+ "##燴": 17308,
+ "##燻": 17309,
+ "##燼": 17310,
+ "##燿": 17311,
+ "##爆": 17312,
+ "##爍": 17313,
+ "##爐": 17314,
+ "##爛": 17315,
+ "##爪": 17316,
+ "##爬": 17317,
+ "##爭": 17318,
+ "##爰": 17319,
+ "##爱": 17320,
+ "##爲": 17321,
+ "##爵": 17322,
+ "##父": 17323,
+ "##爷": 17324,
+ "##爸": 17325,
+ "##爹": 17326,
+ "##爺": 17327,
+ "##爻": 17328,
+ "##爽": 17329,
+ "##爾": 17330,
+ "##牆": 17331,
+ "##片": 17332,
+ "##版": 17333,
+ "##牌": 17334,
+ "##牍": 17335,
+ "##牒": 17336,
+ "##牙": 17337,
+ "##牛": 17338,
+ "##牝": 17339,
+ "##牟": 17340,
+ "##牠": 17341,
+ "##牡": 17342,
+ "##牢": 17343,
+ "##牦": 17344,
+ "##牧": 17345,
+ "##物": 17346,
+ "##牯": 17347,
+ "##牲": 17348,
+ "##牴": 17349,
+ "##牵": 17350,
+ "##特": 17351,
+ "##牺": 17352,
+ "##牽": 17353,
+ "##犀": 17354,
+ "##犁": 17355,
+ "##犄": 17356,
+ "##犊": 17357,
+ "##犍": 17358,
+ "##犒": 17359,
+ "##犢": 17360,
+ "##犧": 17361,
+ "##犬": 17362,
+ "##犯": 17363,
+ "##状": 17364,
+ "##犷": 17365,
+ "##犸": 17366,
+ "##犹": 17367,
+ "##狀": 17368,
+ "##狂": 17369,
+ "##狄": 17370,
+ "##狈": 17371,
+ "##狎": 17372,
+ "##狐": 17373,
+ "##狒": 17374,
+ "##狗": 17375,
+ "##狙": 17376,
+ "##狞": 17377,
+ "##狠": 17378,
+ "##狡": 17379,
+ "##狩": 17380,
+ "##独": 17381,
+ "##狭": 17382,
+ "##狮": 17383,
+ "##狰": 17384,
+ "##狱": 17385,
+ "##狸": 17386,
+ "##狹": 17387,
+ "##狼": 17388,
+ "##狽": 17389,
+ "##猎": 17390,
+ "##猕": 17391,
+ "##猖": 17392,
+ "##猗": 17393,
+ "##猙": 17394,
+ "##猛": 17395,
+ "##猜": 17396,
+ "##猝": 17397,
+ "##猥": 17398,
+ "##猩": 17399,
+ "##猪": 17400,
+ "##猫": 17401,
+ "##猬": 17402,
+ "##献": 17403,
+ "##猴": 17404,
+ "##猶": 17405,
+ "##猷": 17406,
+ "##猾": 17407,
+ "##猿": 17408,
+ "##獄": 17409,
+ "##獅": 17410,
+ "##獎": 17411,
+ "##獐": 17412,
+ "##獒": 17413,
+ "##獗": 17414,
+ "##獠": 17415,
+ "##獣": 17416,
+ "##獨": 17417,
+ "##獭": 17418,
+ "##獰": 17419,
+ "##獲": 17420,
+ "##獵": 17421,
+ "##獷": 17422,
+ "##獸": 17423,
+ "##獺": 17424,
+ "##獻": 17425,
+ "##獼": 17426,
+ "##獾": 17427,
+ "##玄": 17428,
+ "##率": 17429,
+ "##玉": 17430,
+ "##王": 17431,
+ "##玑": 17432,
+ "##玖": 17433,
+ "##玛": 17434,
+ "##玟": 17435,
+ "##玠": 17436,
+ "##玥": 17437,
+ "##玩": 17438,
+ "##玫": 17439,
+ "##玮": 17440,
+ "##环": 17441,
+ "##现": 17442,
+ "##玲": 17443,
+ "##玳": 17444,
+ "##玷": 17445,
+ "##玺": 17446,
+ "##玻": 17447,
+ "##珀": 17448,
+ "##珂": 17449,
+ "##珅": 17450,
+ "##珈": 17451,
+ "##珉": 17452,
+ "##珊": 17453,
+ "##珍": 17454,
+ "##珏": 17455,
+ "##珐": 17456,
+ "##珑": 17457,
+ "##珙": 17458,
+ "##珞": 17459,
+ "##珠": 17460,
+ "##珣": 17461,
+ "##珥": 17462,
+ "##珩": 17463,
+ "##珪": 17464,
+ "##班": 17465,
+ "##珮": 17466,
+ "##珲": 17467,
+ "##珺": 17468,
+ "##現": 17469,
+ "##球": 17470,
+ "##琅": 17471,
+ "##理": 17472,
+ "##琇": 17473,
+ "##琉": 17474,
+ "##琊": 17475,
+ "##琍": 17476,
+ "##琏": 17477,
+ "##琐": 17478,
+ "##琛": 17479,
+ "##琢": 17480,
+ "##琥": 17481,
+ "##琦": 17482,
+ "##琨": 17483,
+ "##琪": 17484,
+ "##琬": 17485,
+ "##琮": 17486,
+ "##琰": 17487,
+ "##琲": 17488,
+ "##琳": 17489,
+ "##琴": 17490,
+ "##琵": 17491,
+ "##琶": 17492,
+ "##琺": 17493,
+ "##琼": 17494,
+ "##瑀": 17495,
+ "##瑁": 17496,
+ "##瑄": 17497,
+ "##瑋": 17498,
+ "##瑕": 17499,
+ "##瑗": 17500,
+ "##瑙": 17501,
+ "##瑚": 17502,
+ "##瑛": 17503,
+ "##瑜": 17504,
+ "##瑞": 17505,
+ "##瑟": 17506,
+ "##瑠": 17507,
+ "##瑣": 17508,
+ "##瑤": 17509,
+ "##瑩": 17510,
+ "##瑪": 17511,
+ "##瑯": 17512,
+ "##瑰": 17513,
+ "##瑶": 17514,
+ "##瑾": 17515,
+ "##璀": 17516,
+ "##璁": 17517,
+ "##璃": 17518,
+ "##璇": 17519,
+ "##璉": 17520,
+ "##璋": 17521,
+ "##璎": 17522,
+ "##璐": 17523,
+ "##璜": 17524,
+ "##璞": 17525,
+ "##璟": 17526,
+ "##璧": 17527,
+ "##璨": 17528,
+ "##環": 17529,
+ "##璽": 17530,
+ "##璿": 17531,
+ "##瓊": 17532,
+ "##瓏": 17533,
+ "##瓒": 17534,
+ "##瓜": 17535,
+ "##瓢": 17536,
+ "##瓣": 17537,
+ "##瓤": 17538,
+ "##瓦": 17539,
+ "##瓮": 17540,
+ "##瓯": 17541,
+ "##瓴": 17542,
+ "##瓶": 17543,
+ "##瓷": 17544,
+ "##甄": 17545,
+ "##甌": 17546,
+ "##甕": 17547,
+ "##甘": 17548,
+ "##甙": 17549,
+ "##甚": 17550,
+ "##甜": 17551,
+ "##生": 17552,
+ "##產": 17553,
+ "##産": 17554,
+ "##甥": 17555,
+ "##甦": 17556,
+ "##用": 17557,
+ "##甩": 17558,
+ "##甫": 17559,
+ "##甬": 17560,
+ "##甭": 17561,
+ "##甯": 17562,
+ "##田": 17563,
+ "##由": 17564,
+ "##甲": 17565,
+ "##申": 17566,
+ "##电": 17567,
+ "##男": 17568,
+ "##甸": 17569,
+ "##町": 17570,
+ "##画": 17571,
+ "##甾": 17572,
+ "##畀": 17573,
+ "##畅": 17574,
+ "##界": 17575,
+ "##畏": 17576,
+ "##畑": 17577,
+ "##畔": 17578,
+ "##留": 17579,
+ "##畜": 17580,
+ "##畝": 17581,
+ "##畢": 17582,
+ "##略": 17583,
+ "##畦": 17584,
+ "##番": 17585,
+ "##畫": 17586,
+ "##異": 17587,
+ "##畲": 17588,
+ "##畳": 17589,
+ "##畴": 17590,
+ "##當": 17591,
+ "##畸": 17592,
+ "##畹": 17593,
+ "##畿": 17594,
+ "##疆": 17595,
+ "##疇": 17596,
+ "##疊": 17597,
+ "##疏": 17598,
+ "##疑": 17599,
+ "##疔": 17600,
+ "##疖": 17601,
+ "##疗": 17602,
+ "##疙": 17603,
+ "##疚": 17604,
+ "##疝": 17605,
+ "##疟": 17606,
+ "##疡": 17607,
+ "##疣": 17608,
+ "##疤": 17609,
+ "##疥": 17610,
+ "##疫": 17611,
+ "##疮": 17612,
+ "##疯": 17613,
+ "##疱": 17614,
+ "##疲": 17615,
+ "##疳": 17616,
+ "##疵": 17617,
+ "##疸": 17618,
+ "##疹": 17619,
+ "##疼": 17620,
+ "##疽": 17621,
+ "##疾": 17622,
+ "##痂": 17623,
+ "##病": 17624,
+ "##症": 17625,
+ "##痈": 17626,
+ "##痉": 17627,
+ "##痊": 17628,
+ "##痍": 17629,
+ "##痒": 17630,
+ "##痔": 17631,
+ "##痕": 17632,
+ "##痘": 17633,
+ "##痙": 17634,
+ "##痛": 17635,
+ "##痞": 17636,
+ "##痠": 17637,
+ "##痢": 17638,
+ "##痣": 17639,
+ "##痤": 17640,
+ "##痧": 17641,
+ "##痨": 17642,
+ "##痪": 17643,
+ "##痫": 17644,
+ "##痰": 17645,
+ "##痱": 17646,
+ "##痴": 17647,
+ "##痹": 17648,
+ "##痺": 17649,
+ "##痼": 17650,
+ "##痿": 17651,
+ "##瘀": 17652,
+ "##瘁": 17653,
+ "##瘋": 17654,
+ "##瘍": 17655,
+ "##瘓": 17656,
+ "##瘘": 17657,
+ "##瘙": 17658,
+ "##瘟": 17659,
+ "##瘠": 17660,
+ "##瘡": 17661,
+ "##瘢": 17662,
+ "##瘤": 17663,
+ "##瘦": 17664,
+ "##瘧": 17665,
+ "##瘩": 17666,
+ "##瘪": 17667,
+ "##瘫": 17668,
+ "##瘴": 17669,
+ "##瘸": 17670,
+ "##瘾": 17671,
+ "##療": 17672,
+ "##癇": 17673,
+ "##癌": 17674,
+ "##癒": 17675,
+ "##癖": 17676,
+ "##癜": 17677,
+ "##癞": 17678,
+ "##癡": 17679,
+ "##癢": 17680,
+ "##癣": 17681,
+ "##癥": 17682,
+ "##癫": 17683,
+ "##癬": 17684,
+ "##癮": 17685,
+ "##癱": 17686,
+ "##癲": 17687,
+ "##癸": 17688,
+ "##発": 17689,
+ "##登": 17690,
+ "##發": 17691,
+ "##白": 17692,
+ "##百": 17693,
+ "##皂": 17694,
+ "##的": 17695,
+ "##皆": 17696,
+ "##皇": 17697,
+ "##皈": 17698,
+ "##皋": 17699,
+ "##皎": 17700,
+ "##皑": 17701,
+ "##皓": 17702,
+ "##皖": 17703,
+ "##皙": 17704,
+ "##皚": 17705,
+ "##皮": 17706,
+ "##皰": 17707,
+ "##皱": 17708,
+ "##皴": 17709,
+ "##皺": 17710,
+ "##皿": 17711,
+ "##盂": 17712,
+ "##盃": 17713,
+ "##盅": 17714,
+ "##盆": 17715,
+ "##盈": 17716,
+ "##益": 17717,
+ "##盎": 17718,
+ "##盏": 17719,
+ "##盐": 17720,
+ "##监": 17721,
+ "##盒": 17722,
+ "##盔": 17723,
+ "##盖": 17724,
+ "##盗": 17725,
+ "##盘": 17726,
+ "##盛": 17727,
+ "##盜": 17728,
+ "##盞": 17729,
+ "##盟": 17730,
+ "##盡": 17731,
+ "##監": 17732,
+ "##盤": 17733,
+ "##盥": 17734,
+ "##盧": 17735,
+ "##盪": 17736,
+ "##目": 17737,
+ "##盯": 17738,
+ "##盱": 17739,
+ "##盲": 17740,
+ "##直": 17741,
+ "##相": 17742,
+ "##盹": 17743,
+ "##盼": 17744,
+ "##盾": 17745,
+ "##省": 17746,
+ "##眈": 17747,
+ "##眉": 17748,
+ "##看": 17749,
+ "##県": 17750,
+ "##眙": 17751,
+ "##眞": 17752,
+ "##真": 17753,
+ "##眠": 17754,
+ "##眦": 17755,
+ "##眨": 17756,
+ "##眩": 17757,
+ "##眯": 17758,
+ "##眶": 17759,
+ "##眷": 17760,
+ "##眸": 17761,
+ "##眺": 17762,
+ "##眼": 17763,
+ "##眾": 17764,
+ "##着": 17765,
+ "##睁": 17766,
+ "##睇": 17767,
+ "##睏": 17768,
+ "##睐": 17769,
+ "##睑": 17770,
+ "##睛": 17771,
+ "##睜": 17772,
+ "##睞": 17773,
+ "##睡": 17774,
+ "##睢": 17775,
+ "##督": 17776,
+ "##睥": 17777,
+ "##睦": 17778,
+ "##睨": 17779,
+ "##睪": 17780,
+ "##睫": 17781,
+ "##睬": 17782,
+ "##睹": 17783,
+ "##睽": 17784,
+ "##睾": 17785,
+ "##睿": 17786,
+ "##瞄": 17787,
+ "##瞅": 17788,
+ "##瞇": 17789,
+ "##瞋": 17790,
+ "##瞌": 17791,
+ "##瞎": 17792,
+ "##瞑": 17793,
+ "##瞒": 17794,
+ "##瞓": 17795,
+ "##瞞": 17796,
+ "##瞟": 17797,
+ "##瞠": 17798,
+ "##瞥": 17799,
+ "##瞧": 17800,
+ "##瞩": 17801,
+ "##瞪": 17802,
+ "##瞬": 17803,
+ "##瞭": 17804,
+ "##瞰": 17805,
+ "##瞳": 17806,
+ "##瞻": 17807,
+ "##瞼": 17808,
+ "##瞿": 17809,
+ "##矇": 17810,
+ "##矍": 17811,
+ "##矗": 17812,
+ "##矚": 17813,
+ "##矛": 17814,
+ "##矜": 17815,
+ "##矢": 17816,
+ "##矣": 17817,
+ "##知": 17818,
+ "##矩": 17819,
+ "##矫": 17820,
+ "##短": 17821,
+ "##矮": 17822,
+ "##矯": 17823,
+ "##石": 17824,
+ "##矶": 17825,
+ "##矽": 17826,
+ "##矾": 17827,
+ "##矿": 17828,
+ "##码": 17829,
+ "##砂": 17830,
+ "##砌": 17831,
+ "##砍": 17832,
+ "##砒": 17833,
+ "##研": 17834,
+ "##砖": 17835,
+ "##砗": 17836,
+ "##砚": 17837,
+ "##砝": 17838,
+ "##砣": 17839,
+ "##砥": 17840,
+ "##砧": 17841,
+ "##砭": 17842,
+ "##砰": 17843,
+ "##砲": 17844,
+ "##破": 17845,
+ "##砷": 17846,
+ "##砸": 17847,
+ "##砺": 17848,
+ "##砼": 17849,
+ "##砾": 17850,
+ "##础": 17851,
+ "##硅": 17852,
+ "##硐": 17853,
+ "##硒": 17854,
+ "##硕": 17855,
+ "##硝": 17856,
+ "##硫": 17857,
+ "##硬": 17858,
+ "##确": 17859,
+ "##硯": 17860,
+ "##硼": 17861,
+ "##碁": 17862,
+ "##碇": 17863,
+ "##碉": 17864,
+ "##碌": 17865,
+ "##碍": 17866,
+ "##碎": 17867,
+ "##碑": 17868,
+ "##碓": 17869,
+ "##碗": 17870,
+ "##碘": 17871,
+ "##碚": 17872,
+ "##碛": 17873,
+ "##碟": 17874,
+ "##碣": 17875,
+ "##碧": 17876,
+ "##碩": 17877,
+ "##碰": 17878,
+ "##碱": 17879,
+ "##碳": 17880,
+ "##碴": 17881,
+ "##確": 17882,
+ "##碼": 17883,
+ "##碾": 17884,
+ "##磁": 17885,
+ "##磅": 17886,
+ "##磊": 17887,
+ "##磋": 17888,
+ "##磐": 17889,
+ "##磕": 17890,
+ "##磚": 17891,
+ "##磡": 17892,
+ "##磨": 17893,
+ "##磬": 17894,
+ "##磯": 17895,
+ "##磲": 17896,
+ "##磷": 17897,
+ "##磺": 17898,
+ "##礁": 17899,
+ "##礎": 17900,
+ "##礙": 17901,
+ "##礡": 17902,
+ "##礦": 17903,
+ "##礪": 17904,
+ "##礫": 17905,
+ "##礴": 17906,
+ "##示": 17907,
+ "##礼": 17908,
+ "##社": 17909,
+ "##祀": 17910,
+ "##祁": 17911,
+ "##祂": 17912,
+ "##祇": 17913,
+ "##祈": 17914,
+ "##祉": 17915,
+ "##祎": 17916,
+ "##祐": 17917,
+ "##祕": 17918,
+ "##祖": 17919,
+ "##祗": 17920,
+ "##祚": 17921,
+ "##祛": 17922,
+ "##祜": 17923,
+ "##祝": 17924,
+ "##神": 17925,
+ "##祟": 17926,
+ "##祠": 17927,
+ "##祢": 17928,
+ "##祥": 17929,
+ "##票": 17930,
+ "##祭": 17931,
+ "##祯": 17932,
+ "##祷": 17933,
+ "##祸": 17934,
+ "##祺": 17935,
+ "##祿": 17936,
+ "##禀": 17937,
+ "##禁": 17938,
+ "##禄": 17939,
+ "##禅": 17940,
+ "##禍": 17941,
+ "##禎": 17942,
+ "##福": 17943,
+ "##禛": 17944,
+ "##禦": 17945,
+ "##禧": 17946,
+ "##禪": 17947,
+ "##禮": 17948,
+ "##禱": 17949,
+ "##禹": 17950,
+ "##禺": 17951,
+ "##离": 17952,
+ "##禽": 17953,
+ "##禾": 17954,
+ "##禿": 17955,
+ "##秀": 17956,
+ "##私": 17957,
+ "##秃": 17958,
+ "##秆": 17959,
+ "##秉": 17960,
+ "##秋": 17961,
+ "##种": 17962,
+ "##科": 17963,
+ "##秒": 17964,
+ "##秘": 17965,
+ "##租": 17966,
+ "##秣": 17967,
+ "##秤": 17968,
+ "##秦": 17969,
+ "##秧": 17970,
+ "##秩": 17971,
+ "##秭": 17972,
+ "##积": 17973,
+ "##称": 17974,
+ "##秸": 17975,
+ "##移": 17976,
+ "##秽": 17977,
+ "##稀": 17978,
+ "##稅": 17979,
+ "##程": 17980,
+ "##稍": 17981,
+ "##税": 17982,
+ "##稔": 17983,
+ "##稗": 17984,
+ "##稚": 17985,
+ "##稜": 17986,
+ "##稞": 17987,
+ "##稟": 17988,
+ "##稠": 17989,
+ "##稣": 17990,
+ "##種": 17991,
+ "##稱": 17992,
+ "##稲": 17993,
+ "##稳": 17994,
+ "##稷": 17995,
+ "##稹": 17996,
+ "##稻": 17997,
+ "##稼": 17998,
+ "##稽": 17999,
+ "##稿": 18000,
+ "##穀": 18001,
+ "##穂": 18002,
+ "##穆": 18003,
+ "##穌": 18004,
+ "##積": 18005,
+ "##穎": 18006,
+ "##穗": 18007,
+ "##穢": 18008,
+ "##穩": 18009,
+ "##穫": 18010,
+ "##穴": 18011,
+ "##究": 18012,
+ "##穷": 18013,
+ "##穹": 18014,
+ "##空": 18015,
+ "##穿": 18016,
+ "##突": 18017,
+ "##窃": 18018,
+ "##窄": 18019,
+ "##窈": 18020,
+ "##窍": 18021,
+ "##窑": 18022,
+ "##窒": 18023,
+ "##窓": 18024,
+ "##窕": 18025,
+ "##窖": 18026,
+ "##窗": 18027,
+ "##窘": 18028,
+ "##窜": 18029,
+ "##窝": 18030,
+ "##窟": 18031,
+ "##窠": 18032,
+ "##窥": 18033,
+ "##窦": 18034,
+ "##窨": 18035,
+ "##窩": 18036,
+ "##窪": 18037,
+ "##窮": 18038,
+ "##窯": 18039,
+ "##窺": 18040,
+ "##窿": 18041,
+ "##竄": 18042,
+ "##竅": 18043,
+ "##竇": 18044,
+ "##竊": 18045,
+ "##立": 18046,
+ "##竖": 18047,
+ "##站": 18048,
+ "##竜": 18049,
+ "##竞": 18050,
+ "##竟": 18051,
+ "##章": 18052,
+ "##竣": 18053,
+ "##童": 18054,
+ "##竭": 18055,
+ "##端": 18056,
+ "##競": 18057,
+ "##竹": 18058,
+ "##竺": 18059,
+ "##竽": 18060,
+ "##竿": 18061,
+ "##笃": 18062,
+ "##笆": 18063,
+ "##笈": 18064,
+ "##笋": 18065,
+ "##笏": 18066,
+ "##笑": 18067,
+ "##笔": 18068,
+ "##笙": 18069,
+ "##笛": 18070,
+ "##笞": 18071,
+ "##笠": 18072,
+ "##符": 18073,
+ "##笨": 18074,
+ "##第": 18075,
+ "##笹": 18076,
+ "##笺": 18077,
+ "##笼": 18078,
+ "##筆": 18079,
+ "##等": 18080,
+ "##筊": 18081,
+ "##筋": 18082,
+ "##筍": 18083,
+ "##筏": 18084,
+ "##筐": 18085,
+ "##筑": 18086,
+ "##筒": 18087,
+ "##答": 18088,
+ "##策": 18089,
+ "##筛": 18090,
+ "##筝": 18091,
+ "##筠": 18092,
+ "##筱": 18093,
+ "##筲": 18094,
+ "##筵": 18095,
+ "##筷": 18096,
+ "##筹": 18097,
+ "##签": 18098,
+ "##简": 18099,
+ "##箇": 18100,
+ "##箋": 18101,
+ "##箍": 18102,
+ "##箏": 18103,
+ "##箐": 18104,
+ "##箔": 18105,
+ "##箕": 18106,
+ "##算": 18107,
+ "##箝": 18108,
+ "##管": 18109,
+ "##箩": 18110,
+ "##箫": 18111,
+ "##箭": 18112,
+ "##箱": 18113,
+ "##箴": 18114,
+ "##箸": 18115,
+ "##節": 18116,
+ "##篁": 18117,
+ "##範": 18118,
+ "##篆": 18119,
+ "##篇": 18120,
+ "##築": 18121,
+ "##篑": 18122,
+ "##篓": 18123,
+ "##篙": 18124,
+ "##篝": 18125,
+ "##篠": 18126,
+ "##篡": 18127,
+ "##篤": 18128,
+ "##篩": 18129,
+ "##篪": 18130,
+ "##篮": 18131,
+ "##篱": 18132,
+ "##篷": 18133,
+ "##簇": 18134,
+ "##簌": 18135,
+ "##簍": 18136,
+ "##簡": 18137,
+ "##簦": 18138,
+ "##簧": 18139,
+ "##簪": 18140,
+ "##簫": 18141,
+ "##簷": 18142,
+ "##簸": 18143,
+ "##簽": 18144,
+ "##簾": 18145,
+ "##簿": 18146,
+ "##籁": 18147,
+ "##籃": 18148,
+ "##籌": 18149,
+ "##籍": 18150,
+ "##籐": 18151,
+ "##籟": 18152,
+ "##籠": 18153,
+ "##籤": 18154,
+ "##籬": 18155,
+ "##籮": 18156,
+ "##籲": 18157,
+ "##米": 18158,
+ "##类": 18159,
+ "##籼": 18160,
+ "##籽": 18161,
+ "##粄": 18162,
+ "##粉": 18163,
+ "##粑": 18164,
+ "##粒": 18165,
+ "##粕": 18166,
+ "##粗": 18167,
+ "##粘": 18168,
+ "##粟": 18169,
+ "##粤": 18170,
+ "##粥": 18171,
+ "##粧": 18172,
+ "##粪": 18173,
+ "##粮": 18174,
+ "##粱": 18175,
+ "##粲": 18176,
+ "##粳": 18177,
+ "##粵": 18178,
+ "##粹": 18179,
+ "##粼": 18180,
+ "##粽": 18181,
+ "##精": 18182,
+ "##粿": 18183,
+ "##糅": 18184,
+ "##糊": 18185,
+ "##糍": 18186,
+ "##糕": 18187,
+ "##糖": 18188,
+ "##糗": 18189,
+ "##糙": 18190,
+ "##糜": 18191,
+ "##糞": 18192,
+ "##糟": 18193,
+ "##糠": 18194,
+ "##糧": 18195,
+ "##糬": 18196,
+ "##糯": 18197,
+ "##糰": 18198,
+ "##糸": 18199,
+ "##系": 18200,
+ "##糾": 18201,
+ "##紀": 18202,
+ "##紂": 18203,
+ "##約": 18204,
+ "##紅": 18205,
+ "##紉": 18206,
+ "##紊": 18207,
+ "##紋": 18208,
+ "##納": 18209,
+ "##紐": 18210,
+ "##紓": 18211,
+ "##純": 18212,
+ "##紗": 18213,
+ "##紘": 18214,
+ "##紙": 18215,
+ "##級": 18216,
+ "##紛": 18217,
+ "##紜": 18218,
+ "##素": 18219,
+ "##紡": 18220,
+ "##索": 18221,
+ "##紧": 18222,
+ "##紫": 18223,
+ "##紮": 18224,
+ "##累": 18225,
+ "##細": 18226,
+ "##紳": 18227,
+ "##紹": 18228,
+ "##紺": 18229,
+ "##終": 18230,
+ "##絃": 18231,
+ "##組": 18232,
+ "##絆": 18233,
+ "##経": 18234,
+ "##結": 18235,
+ "##絕": 18236,
+ "##絞": 18237,
+ "##絡": 18238,
+ "##絢": 18239,
+ "##給": 18240,
+ "##絨": 18241,
+ "##絮": 18242,
+ "##統": 18243,
+ "##絲": 18244,
+ "##絳": 18245,
+ "##絵": 18246,
+ "##絶": 18247,
+ "##絹": 18248,
+ "##綁": 18249,
+ "##綏": 18250,
+ "##綑": 18251,
+ "##經": 18252,
+ "##継": 18253,
+ "##続": 18254,
+ "##綜": 18255,
+ "##綠": 18256,
+ "##綢": 18257,
+ "##綦": 18258,
+ "##綫": 18259,
+ "##綬": 18260,
+ "##維": 18261,
+ "##綱": 18262,
+ "##網": 18263,
+ "##綴": 18264,
+ "##綵": 18265,
+ "##綸": 18266,
+ "##綺": 18267,
+ "##綻": 18268,
+ "##綽": 18269,
+ "##綾": 18270,
+ "##綿": 18271,
+ "##緊": 18272,
+ "##緋": 18273,
+ "##総": 18274,
+ "##緑": 18275,
+ "##緒": 18276,
+ "##緘": 18277,
+ "##線": 18278,
+ "##緝": 18279,
+ "##緞": 18280,
+ "##締": 18281,
+ "##緣": 18282,
+ "##編": 18283,
+ "##緩": 18284,
+ "##緬": 18285,
+ "##緯": 18286,
+ "##練": 18287,
+ "##緹": 18288,
+ "##緻": 18289,
+ "##縁": 18290,
+ "##縄": 18291,
+ "##縈": 18292,
+ "##縛": 18293,
+ "##縝": 18294,
+ "##縣": 18295,
+ "##縫": 18296,
+ "##縮": 18297,
+ "##縱": 18298,
+ "##縴": 18299,
+ "##縷": 18300,
+ "##總": 18301,
+ "##績": 18302,
+ "##繁": 18303,
+ "##繃": 18304,
+ "##繆": 18305,
+ "##繇": 18306,
+ "##繋": 18307,
+ "##織": 18308,
+ "##繕": 18309,
+ "##繚": 18310,
+ "##繞": 18311,
+ "##繡": 18312,
+ "##繩": 18313,
+ "##繪": 18314,
+ "##繫": 18315,
+ "##繭": 18316,
+ "##繳": 18317,
+ "##繹": 18318,
+ "##繼": 18319,
+ "##繽": 18320,
+ "##纂": 18321,
+ "##續": 18322,
+ "##纍": 18323,
+ "##纏": 18324,
+ "##纓": 18325,
+ "##纔": 18326,
+ "##纖": 18327,
+ "##纜": 18328,
+ "##纠": 18329,
+ "##红": 18330,
+ "##纣": 18331,
+ "##纤": 18332,
+ "##约": 18333,
+ "##级": 18334,
+ "##纨": 18335,
+ "##纪": 18336,
+ "##纫": 18337,
+ "##纬": 18338,
+ "##纭": 18339,
+ "##纯": 18340,
+ "##纰": 18341,
+ "##纱": 18342,
+ "##纲": 18343,
+ "##纳": 18344,
+ "##纵": 18345,
+ "##纶": 18346,
+ "##纷": 18347,
+ "##纸": 18348,
+ "##纹": 18349,
+ "##纺": 18350,
+ "##纽": 18351,
+ "##纾": 18352,
+ "##线": 18353,
+ "##绀": 18354,
+ "##练": 18355,
+ "##组": 18356,
+ "##绅": 18357,
+ "##细": 18358,
+ "##织": 18359,
+ "##终": 18360,
+ "##绊": 18361,
+ "##绍": 18362,
+ "##绎": 18363,
+ "##经": 18364,
+ "##绑": 18365,
+ "##绒": 18366,
+ "##结": 18367,
+ "##绔": 18368,
+ "##绕": 18369,
+ "##绘": 18370,
+ "##给": 18371,
+ "##绚": 18372,
+ "##绛": 18373,
+ "##络": 18374,
+ "##绝": 18375,
+ "##绞": 18376,
+ "##统": 18377,
+ "##绡": 18378,
+ "##绢": 18379,
+ "##绣": 18380,
+ "##绥": 18381,
+ "##绦": 18382,
+ "##继": 18383,
+ "##绩": 18384,
+ "##绪": 18385,
+ "##绫": 18386,
+ "##续": 18387,
+ "##绮": 18388,
+ "##绯": 18389,
+ "##绰": 18390,
+ "##绳": 18391,
+ "##维": 18392,
+ "##绵": 18393,
+ "##绶": 18394,
+ "##绷": 18395,
+ "##绸": 18396,
+ "##绻": 18397,
+ "##综": 18398,
+ "##绽": 18399,
+ "##绾": 18400,
+ "##绿": 18401,
+ "##缀": 18402,
+ "##缄": 18403,
+ "##缅": 18404,
+ "##缆": 18405,
+ "##缇": 18406,
+ "##缈": 18407,
+ "##缉": 18408,
+ "##缎": 18409,
+ "##缓": 18410,
+ "##缔": 18411,
+ "##缕": 18412,
+ "##编": 18413,
+ "##缘": 18414,
+ "##缙": 18415,
+ "##缚": 18416,
+ "##缜": 18417,
+ "##缝": 18418,
+ "##缠": 18419,
+ "##缢": 18420,
+ "##缤": 18421,
+ "##缥": 18422,
+ "##缨": 18423,
+ "##缩": 18424,
+ "##缪": 18425,
+ "##缭": 18426,
+ "##缮": 18427,
+ "##缰": 18428,
+ "##缱": 18429,
+ "##缴": 18430,
+ "##缸": 18431,
+ "##缺": 18432,
+ "##缽": 18433,
+ "##罂": 18434,
+ "##罄": 18435,
+ "##罌": 18436,
+ "##罐": 18437,
+ "##网": 18438,
+ "##罔": 18439,
+ "##罕": 18440,
+ "##罗": 18441,
+ "##罚": 18442,
+ "##罡": 18443,
+ "##罢": 18444,
+ "##罩": 18445,
+ "##罪": 18446,
+ "##置": 18447,
+ "##罰": 18448,
+ "##署": 18449,
+ "##罵": 18450,
+ "##罷": 18451,
+ "##罹": 18452,
+ "##羁": 18453,
+ "##羅": 18454,
+ "##羈": 18455,
+ "##羊": 18456,
+ "##羌": 18457,
+ "##美": 18458,
+ "##羔": 18459,
+ "##羚": 18460,
+ "##羞": 18461,
+ "##羟": 18462,
+ "##羡": 18463,
+ "##羣": 18464,
+ "##群": 18465,
+ "##羥": 18466,
+ "##羧": 18467,
+ "##羨": 18468,
+ "##義": 18469,
+ "##羯": 18470,
+ "##羲": 18471,
+ "##羸": 18472,
+ "##羹": 18473,
+ "##羽": 18474,
+ "##羿": 18475,
+ "##翁": 18476,
+ "##翅": 18477,
+ "##翊": 18478,
+ "##翌": 18479,
+ "##翎": 18480,
+ "##習": 18481,
+ "##翔": 18482,
+ "##翘": 18483,
+ "##翟": 18484,
+ "##翠": 18485,
+ "##翡": 18486,
+ "##翦": 18487,
+ "##翩": 18488,
+ "##翰": 18489,
+ "##翱": 18490,
+ "##翳": 18491,
+ "##翹": 18492,
+ "##翻": 18493,
+ "##翼": 18494,
+ "##耀": 18495,
+ "##老": 18496,
+ "##考": 18497,
+ "##耄": 18498,
+ "##者": 18499,
+ "##耆": 18500,
+ "##耋": 18501,
+ "##而": 18502,
+ "##耍": 18503,
+ "##耐": 18504,
+ "##耒": 18505,
+ "##耕": 18506,
+ "##耗": 18507,
+ "##耘": 18508,
+ "##耙": 18509,
+ "##耦": 18510,
+ "##耨": 18511,
+ "##耳": 18512,
+ "##耶": 18513,
+ "##耷": 18514,
+ "##耸": 18515,
+ "##耻": 18516,
+ "##耽": 18517,
+ "##耿": 18518,
+ "##聂": 18519,
+ "##聆": 18520,
+ "##聊": 18521,
+ "##聋": 18522,
+ "##职": 18523,
+ "##聒": 18524,
+ "##联": 18525,
+ "##聖": 18526,
+ "##聘": 18527,
+ "##聚": 18528,
+ "##聞": 18529,
+ "##聪": 18530,
+ "##聯": 18531,
+ "##聰": 18532,
+ "##聲": 18533,
+ "##聳": 18534,
+ "##聴": 18535,
+ "##聶": 18536,
+ "##職": 18537,
+ "##聽": 18538,
+ "##聾": 18539,
+ "##聿": 18540,
+ "##肃": 18541,
+ "##肄": 18542,
+ "##肅": 18543,
+ "##肆": 18544,
+ "##肇": 18545,
+ "##肉": 18546,
+ "##肋": 18547,
+ "##肌": 18548,
+ "##肏": 18549,
+ "##肓": 18550,
+ "##肖": 18551,
+ "##肘": 18552,
+ "##肚": 18553,
+ "##肛": 18554,
+ "##肝": 18555,
+ "##肠": 18556,
+ "##股": 18557,
+ "##肢": 18558,
+ "##肤": 18559,
+ "##肥": 18560,
+ "##肩": 18561,
+ "##肪": 18562,
+ "##肮": 18563,
+ "##肯": 18564,
+ "##肱": 18565,
+ "##育": 18566,
+ "##肴": 18567,
+ "##肺": 18568,
+ "##肽": 18569,
+ "##肾": 18570,
+ "##肿": 18571,
+ "##胀": 18572,
+ "##胁": 18573,
+ "##胃": 18574,
+ "##胄": 18575,
+ "##胆": 18576,
+ "##背": 18577,
+ "##胍": 18578,
+ "##胎": 18579,
+ "##胖": 18580,
+ "##胚": 18581,
+ "##胛": 18582,
+ "##胜": 18583,
+ "##胝": 18584,
+ "##胞": 18585,
+ "##胡": 18586,
+ "##胤": 18587,
+ "##胥": 18588,
+ "##胧": 18589,
+ "##胫": 18590,
+ "##胭": 18591,
+ "##胯": 18592,
+ "##胰": 18593,
+ "##胱": 18594,
+ "##胳": 18595,
+ "##胴": 18596,
+ "##胶": 18597,
+ "##胸": 18598,
+ "##胺": 18599,
+ "##能": 18600,
+ "##脂": 18601,
+ "##脅": 18602,
+ "##脆": 18603,
+ "##脇": 18604,
+ "##脈": 18605,
+ "##脉": 18606,
+ "##脊": 18607,
+ "##脍": 18608,
+ "##脏": 18609,
+ "##脐": 18610,
+ "##脑": 18611,
+ "##脓": 18612,
+ "##脖": 18613,
+ "##脘": 18614,
+ "##脚": 18615,
+ "##脛": 18616,
+ "##脣": 18617,
+ "##脩": 18618,
+ "##脫": 18619,
+ "##脯": 18620,
+ "##脱": 18621,
+ "##脲": 18622,
+ "##脳": 18623,
+ "##脸": 18624,
+ "##脹": 18625,
+ "##脾": 18626,
+ "##腆": 18627,
+ "##腈": 18628,
+ "##腊": 18629,
+ "##腋": 18630,
+ "##腌": 18631,
+ "##腎": 18632,
+ "##腐": 18633,
+ "##腑": 18634,
+ "##腓": 18635,
+ "##腔": 18636,
+ "##腕": 18637,
+ "##腥": 18638,
+ "##腦": 18639,
+ "##腩": 18640,
+ "##腫": 18641,
+ "##腭": 18642,
+ "##腮": 18643,
+ "##腰": 18644,
+ "##腱": 18645,
+ "##腳": 18646,
+ "##腴": 18647,
+ "##腸": 18648,
+ "##腹": 18649,
+ "##腺": 18650,
+ "##腻": 18651,
+ "##腼": 18652,
+ "##腾": 18653,
+ "##腿": 18654,
+ "##膀": 18655,
+ "##膈": 18656,
+ "##膊": 18657,
+ "##膏": 18658,
+ "##膑": 18659,
+ "##膘": 18660,
+ "##膚": 18661,
+ "##膛": 18662,
+ "##膜": 18663,
+ "##膝": 18664,
+ "##膠": 18665,
+ "##膦": 18666,
+ "##膨": 18667,
+ "##膩": 18668,
+ "##膳": 18669,
+ "##膺": 18670,
+ "##膻": 18671,
+ "##膽": 18672,
+ "##膾": 18673,
+ "##膿": 18674,
+ "##臀": 18675,
+ "##臂": 18676,
+ "##臃": 18677,
+ "##臆": 18678,
+ "##臉": 18679,
+ "##臊": 18680,
+ "##臍": 18681,
+ "##臓": 18682,
+ "##臘": 18683,
+ "##臟": 18684,
+ "##臣": 18685,
+ "##臥": 18686,
+ "##臧": 18687,
+ "##臨": 18688,
+ "##自": 18689,
+ "##臬": 18690,
+ "##臭": 18691,
+ "##至": 18692,
+ "##致": 18693,
+ "##臺": 18694,
+ "##臻": 18695,
+ "##臼": 18696,
+ "##臾": 18697,
+ "##舀": 18698,
+ "##舂": 18699,
+ "##舅": 18700,
+ "##舆": 18701,
+ "##與": 18702,
+ "##興": 18703,
+ "##舉": 18704,
+ "##舊": 18705,
+ "##舌": 18706,
+ "##舍": 18707,
+ "##舎": 18708,
+ "##舐": 18709,
+ "##舒": 18710,
+ "##舔": 18711,
+ "##舖": 18712,
+ "##舗": 18713,
+ "##舛": 18714,
+ "##舜": 18715,
+ "##舞": 18716,
+ "##舟": 18717,
+ "##航": 18718,
+ "##舫": 18719,
+ "##般": 18720,
+ "##舰": 18721,
+ "##舱": 18722,
+ "##舵": 18723,
+ "##舶": 18724,
+ "##舷": 18725,
+ "##舸": 18726,
+ "##船": 18727,
+ "##舺": 18728,
+ "##舾": 18729,
+ "##艇": 18730,
+ "##艋": 18731,
+ "##艘": 18732,
+ "##艙": 18733,
+ "##艦": 18734,
+ "##艮": 18735,
+ "##良": 18736,
+ "##艰": 18737,
+ "##艱": 18738,
+ "##色": 18739,
+ "##艳": 18740,
+ "##艷": 18741,
+ "##艹": 18742,
+ "##艺": 18743,
+ "##艾": 18744,
+ "##节": 18745,
+ "##芃": 18746,
+ "##芈": 18747,
+ "##芊": 18748,
+ "##芋": 18749,
+ "##芍": 18750,
+ "##芎": 18751,
+ "##芒": 18752,
+ "##芙": 18753,
+ "##芜": 18754,
+ "##芝": 18755,
+ "##芡": 18756,
+ "##芥": 18757,
+ "##芦": 18758,
+ "##芩": 18759,
+ "##芪": 18760,
+ "##芫": 18761,
+ "##芬": 18762,
+ "##芭": 18763,
+ "##芮": 18764,
+ "##芯": 18765,
+ "##花": 18766,
+ "##芳": 18767,
+ "##芷": 18768,
+ "##芸": 18769,
+ "##芹": 18770,
+ "##芻": 18771,
+ "##芽": 18772,
+ "##芾": 18773,
+ "##苁": 18774,
+ "##苄": 18775,
+ "##苇": 18776,
+ "##苋": 18777,
+ "##苍": 18778,
+ "##苏": 18779,
+ "##苑": 18780,
+ "##苒": 18781,
+ "##苓": 18782,
+ "##苔": 18783,
+ "##苕": 18784,
+ "##苗": 18785,
+ "##苛": 18786,
+ "##苜": 18787,
+ "##苞": 18788,
+ "##苟": 18789,
+ "##苡": 18790,
+ "##苣": 18791,
+ "##若": 18792,
+ "##苦": 18793,
+ "##苫": 18794,
+ "##苯": 18795,
+ "##英": 18796,
+ "##苷": 18797,
+ "##苹": 18798,
+ "##苻": 18799,
+ "##茁": 18800,
+ "##茂": 18801,
+ "##范": 18802,
+ "##茄": 18803,
+ "##茅": 18804,
+ "##茉": 18805,
+ "##茎": 18806,
+ "##茏": 18807,
+ "##茗": 18808,
+ "##茜": 18809,
+ "##茧": 18810,
+ "##茨": 18811,
+ "##茫": 18812,
+ "##茬": 18813,
+ "##茭": 18814,
+ "##茯": 18815,
+ "##茱": 18816,
+ "##茲": 18817,
+ "##茴": 18818,
+ "##茵": 18819,
+ "##茶": 18820,
+ "##茸": 18821,
+ "##茹": 18822,
+ "##茼": 18823,
+ "##荀": 18824,
+ "##荃": 18825,
+ "##荆": 18826,
+ "##草": 18827,
+ "##荊": 18828,
+ "##荏": 18829,
+ "##荐": 18830,
+ "##荒": 18831,
+ "##荔": 18832,
+ "##荖": 18833,
+ "##荘": 18834,
+ "##荚": 18835,
+ "##荞": 18836,
+ "##荟": 18837,
+ "##荠": 18838,
+ "##荡": 18839,
+ "##荣": 18840,
+ "##荤": 18841,
+ "##荥": 18842,
+ "##荧": 18843,
+ "##荨": 18844,
+ "##荪": 18845,
+ "##荫": 18846,
+ "##药": 18847,
+ "##荳": 18848,
+ "##荷": 18849,
+ "##荸": 18850,
+ "##荻": 18851,
+ "##荼": 18852,
+ "##荽": 18853,
+ "##莅": 18854,
+ "##莆": 18855,
+ "##莉": 18856,
+ "##莊": 18857,
+ "##莎": 18858,
+ "##莒": 18859,
+ "##莓": 18860,
+ "##莖": 18861,
+ "##莘": 18862,
+ "##莞": 18863,
+ "##莠": 18864,
+ "##莢": 18865,
+ "##莧": 18866,
+ "##莪": 18867,
+ "##莫": 18868,
+ "##莱": 18869,
+ "##莲": 18870,
+ "##莴": 18871,
+ "##获": 18872,
+ "##莹": 18873,
+ "##莺": 18874,
+ "##莽": 18875,
+ "##莿": 18876,
+ "##菀": 18877,
+ "##菁": 18878,
+ "##菅": 18879,
+ "##菇": 18880,
+ "##菈": 18881,
+ "##菊": 18882,
+ "##菌": 18883,
+ "##菏": 18884,
+ "##菓": 18885,
+ "##菖": 18886,
+ "##菘": 18887,
+ "##菜": 18888,
+ "##菟": 18889,
+ "##菠": 18890,
+ "##菡": 18891,
+ "##菩": 18892,
+ "##華": 18893,
+ "##菱": 18894,
+ "##菲": 18895,
+ "##菸": 18896,
+ "##菽": 18897,
+ "##萁": 18898,
+ "##萃": 18899,
+ "##萄": 18900,
+ "##萊": 18901,
+ "##萋": 18902,
+ "##萌": 18903,
+ "##萍": 18904,
+ "##萎": 18905,
+ "##萘": 18906,
+ "##萝": 18907,
+ "##萤": 18908,
+ "##营": 18909,
+ "##萦": 18910,
+ "##萧": 18911,
+ "##萨": 18912,
+ "##萩": 18913,
+ "##萬": 18914,
+ "##萱": 18915,
+ "##萵": 18916,
+ "##萸": 18917,
+ "##萼": 18918,
+ "##落": 18919,
+ "##葆": 18920,
+ "##葉": 18921,
+ "##著": 18922,
+ "##葚": 18923,
+ "##葛": 18924,
+ "##葡": 18925,
+ "##董": 18926,
+ "##葦": 18927,
+ "##葩": 18928,
+ "##葫": 18929,
+ "##葬": 18930,
+ "##葭": 18931,
+ "##葯": 18932,
+ "##葱": 18933,
+ "##葳": 18934,
+ "##葵": 18935,
+ "##葷": 18936,
+ "##葺": 18937,
+ "##蒂": 18938,
+ "##蒋": 18939,
+ "##蒐": 18940,
+ "##蒔": 18941,
+ "##蒙": 18942,
+ "##蒜": 18943,
+ "##蒞": 18944,
+ "##蒟": 18945,
+ "##蒡": 18946,
+ "##蒨": 18947,
+ "##蒲": 18948,
+ "##蒸": 18949,
+ "##蒹": 18950,
+ "##蒻": 18951,
+ "##蒼": 18952,
+ "##蒿": 18953,
+ "##蓁": 18954,
+ "##蓄": 18955,
+ "##蓆": 18956,
+ "##蓉": 18957,
+ "##蓋": 18958,
+ "##蓑": 18959,
+ "##蓓": 18960,
+ "##蓖": 18961,
+ "##蓝": 18962,
+ "##蓟": 18963,
+ "##蓦": 18964,
+ "##蓬": 18965,
+ "##蓮": 18966,
+ "##蓼": 18967,
+ "##蓿": 18968,
+ "##蔑": 18969,
+ "##蔓": 18970,
+ "##蔔": 18971,
+ "##蔗": 18972,
+ "##蔘": 18973,
+ "##蔚": 18974,
+ "##蔡": 18975,
+ "##蔣": 18976,
+ "##蔥": 18977,
+ "##蔫": 18978,
+ "##蔬": 18979,
+ "##蔭": 18980,
+ "##蔵": 18981,
+ "##蔷": 18982,
+ "##蔺": 18983,
+ "##蔻": 18984,
+ "##蔼": 18985,
+ "##蔽": 18986,
+ "##蕁": 18987,
+ "##蕃": 18988,
+ "##蕈": 18989,
+ "##蕉": 18990,
+ "##蕊": 18991,
+ "##蕎": 18992,
+ "##蕙": 18993,
+ "##蕤": 18994,
+ "##蕨": 18995,
+ "##蕩": 18996,
+ "##蕪": 18997,
+ "##蕭": 18998,
+ "##蕲": 18999,
+ "##蕴": 19000,
+ "##蕻": 19001,
+ "##蕾": 19002,
+ "##薄": 19003,
+ "##薅": 19004,
+ "##薇": 19005,
+ "##薈": 19006,
+ "##薊": 19007,
+ "##薏": 19008,
+ "##薑": 19009,
+ "##薔": 19010,
+ "##薙": 19011,
+ "##薛": 19012,
+ "##薦": 19013,
+ "##薨": 19014,
+ "##薩": 19015,
+ "##薪": 19016,
+ "##薬": 19017,
+ "##薯": 19018,
+ "##薰": 19019,
+ "##薹": 19020,
+ "##藉": 19021,
+ "##藍": 19022,
+ "##藏": 19023,
+ "##藐": 19024,
+ "##藓": 19025,
+ "##藕": 19026,
+ "##藜": 19027,
+ "##藝": 19028,
+ "##藤": 19029,
+ "##藥": 19030,
+ "##藩": 19031,
+ "##藹": 19032,
+ "##藻": 19033,
+ "##藿": 19034,
+ "##蘆": 19035,
+ "##蘇": 19036,
+ "##蘊": 19037,
+ "##蘋": 19038,
+ "##蘑": 19039,
+ "##蘚": 19040,
+ "##蘭": 19041,
+ "##蘸": 19042,
+ "##蘼": 19043,
+ "##蘿": 19044,
+ "##虎": 19045,
+ "##虏": 19046,
+ "##虐": 19047,
+ "##虑": 19048,
+ "##虔": 19049,
+ "##處": 19050,
+ "##虚": 19051,
+ "##虛": 19052,
+ "##虜": 19053,
+ "##虞": 19054,
+ "##號": 19055,
+ "##虢": 19056,
+ "##虧": 19057,
+ "##虫": 19058,
+ "##虬": 19059,
+ "##虱": 19060,
+ "##虹": 19061,
+ "##虻": 19062,
+ "##虽": 19063,
+ "##虾": 19064,
+ "##蚀": 19065,
+ "##蚁": 19066,
+ "##蚂": 19067,
+ "##蚊": 19068,
+ "##蚌": 19069,
+ "##蚓": 19070,
+ "##蚕": 19071,
+ "##蚜": 19072,
+ "##蚝": 19073,
+ "##蚣": 19074,
+ "##蚤": 19075,
+ "##蚩": 19076,
+ "##蚪": 19077,
+ "##蚯": 19078,
+ "##蚱": 19079,
+ "##蚵": 19080,
+ "##蛀": 19081,
+ "##蛆": 19082,
+ "##蛇": 19083,
+ "##蛊": 19084,
+ "##蛋": 19085,
+ "##蛎": 19086,
+ "##蛐": 19087,
+ "##蛔": 19088,
+ "##蛙": 19089,
+ "##蛛": 19090,
+ "##蛟": 19091,
+ "##蛤": 19092,
+ "##蛭": 19093,
+ "##蛮": 19094,
+ "##蛰": 19095,
+ "##蛳": 19096,
+ "##蛹": 19097,
+ "##蛻": 19098,
+ "##蛾": 19099,
+ "##蜀": 19100,
+ "##蜂": 19101,
+ "##蜃": 19102,
+ "##蜆": 19103,
+ "##蜇": 19104,
+ "##蜈": 19105,
+ "##蜊": 19106,
+ "##蜍": 19107,
+ "##蜒": 19108,
+ "##蜓": 19109,
+ "##蜕": 19110,
+ "##蜗": 19111,
+ "##蜘": 19112,
+ "##蜚": 19113,
+ "##蜜": 19114,
+ "##蜡": 19115,
+ "##蜢": 19116,
+ "##蜥": 19117,
+ "##蜱": 19118,
+ "##蜴": 19119,
+ "##蜷": 19120,
+ "##蜻": 19121,
+ "##蜿": 19122,
+ "##蝇": 19123,
+ "##蝈": 19124,
+ "##蝉": 19125,
+ "##蝌": 19126,
+ "##蝎": 19127,
+ "##蝕": 19128,
+ "##蝗": 19129,
+ "##蝙": 19130,
+ "##蝟": 19131,
+ "##蝠": 19132,
+ "##蝦": 19133,
+ "##蝨": 19134,
+ "##蝴": 19135,
+ "##蝶": 19136,
+ "##蝸": 19137,
+ "##蝼": 19138,
+ "##螂": 19139,
+ "##螃": 19140,
+ "##融": 19141,
+ "##螞": 19142,
+ "##螢": 19143,
+ "##螨": 19144,
+ "##螯": 19145,
+ "##螳": 19146,
+ "##螺": 19147,
+ "##蟀": 19148,
+ "##蟄": 19149,
+ "##蟆": 19150,
+ "##蟋": 19151,
+ "##蟎": 19152,
+ "##蟑": 19153,
+ "##蟒": 19154,
+ "##蟠": 19155,
+ "##蟬": 19156,
+ "##蟲": 19157,
+ "##蟹": 19158,
+ "##蟻": 19159,
+ "##蟾": 19160,
+ "##蠅": 19161,
+ "##蠍": 19162,
+ "##蠔": 19163,
+ "##蠕": 19164,
+ "##蠛": 19165,
+ "##蠟": 19166,
+ "##蠡": 19167,
+ "##蠢": 19168,
+ "##蠣": 19169,
+ "##蠱": 19170,
+ "##蠶": 19171,
+ "##蠹": 19172,
+ "##蠻": 19173,
+ "##血": 19174,
+ "##衄": 19175,
+ "##衅": 19176,
+ "##衆": 19177,
+ "##行": 19178,
+ "##衍": 19179,
+ "##術": 19180,
+ "##衔": 19181,
+ "##街": 19182,
+ "##衙": 19183,
+ "##衛": 19184,
+ "##衝": 19185,
+ "##衞": 19186,
+ "##衡": 19187,
+ "##衢": 19188,
+ "##衣": 19189,
+ "##补": 19190,
+ "##表": 19191,
+ "##衩": 19192,
+ "##衫": 19193,
+ "##衬": 19194,
+ "##衮": 19195,
+ "##衰": 19196,
+ "##衲": 19197,
+ "##衷": 19198,
+ "##衹": 19199,
+ "##衾": 19200,
+ "##衿": 19201,
+ "##袁": 19202,
+ "##袂": 19203,
+ "##袄": 19204,
+ "##袅": 19205,
+ "##袈": 19206,
+ "##袋": 19207,
+ "##袍": 19208,
+ "##袒": 19209,
+ "##袖": 19210,
+ "##袜": 19211,
+ "##袞": 19212,
+ "##袤": 19213,
+ "##袪": 19214,
+ "##被": 19215,
+ "##袭": 19216,
+ "##袱": 19217,
+ "##裁": 19218,
+ "##裂": 19219,
+ "##装": 19220,
+ "##裆": 19221,
+ "##裊": 19222,
+ "##裏": 19223,
+ "##裔": 19224,
+ "##裕": 19225,
+ "##裘": 19226,
+ "##裙": 19227,
+ "##補": 19228,
+ "##裝": 19229,
+ "##裟": 19230,
+ "##裡": 19231,
+ "##裤": 19232,
+ "##裨": 19233,
+ "##裱": 19234,
+ "##裳": 19235,
+ "##裴": 19236,
+ "##裸": 19237,
+ "##裹": 19238,
+ "##製": 19239,
+ "##裾": 19240,
+ "##褂": 19241,
+ "##複": 19242,
+ "##褐": 19243,
+ "##褒": 19244,
+ "##褓": 19245,
+ "##褔": 19246,
+ "##褚": 19247,
+ "##褥": 19248,
+ "##褪": 19249,
+ "##褫": 19250,
+ "##褲": 19251,
+ "##褶": 19252,
+ "##褻": 19253,
+ "##襁": 19254,
+ "##襄": 19255,
+ "##襟": 19256,
+ "##襠": 19257,
+ "##襪": 19258,
+ "##襬": 19259,
+ "##襯": 19260,
+ "##襲": 19261,
+ "##西": 19262,
+ "##要": 19263,
+ "##覃": 19264,
+ "##覆": 19265,
+ "##覇": 19266,
+ "##見": 19267,
+ "##規": 19268,
+ "##覓": 19269,
+ "##視": 19270,
+ "##覚": 19271,
+ "##覦": 19272,
+ "##覧": 19273,
+ "##親": 19274,
+ "##覬": 19275,
+ "##観": 19276,
+ "##覷": 19277,
+ "##覺": 19278,
+ "##覽": 19279,
+ "##觀": 19280,
+ "##见": 19281,
+ "##观": 19282,
+ "##规": 19283,
+ "##觅": 19284,
+ "##视": 19285,
+ "##览": 19286,
+ "##觉": 19287,
+ "##觊": 19288,
+ "##觎": 19289,
+ "##觐": 19290,
+ "##觑": 19291,
+ "##角": 19292,
+ "##觞": 19293,
+ "##解": 19294,
+ "##觥": 19295,
+ "##触": 19296,
+ "##觸": 19297,
+ "##言": 19298,
+ "##訂": 19299,
+ "##計": 19300,
+ "##訊": 19301,
+ "##討": 19302,
+ "##訓": 19303,
+ "##訕": 19304,
+ "##訖": 19305,
+ "##託": 19306,
+ "##記": 19307,
+ "##訛": 19308,
+ "##訝": 19309,
+ "##訟": 19310,
+ "##訣": 19311,
+ "##訥": 19312,
+ "##訪": 19313,
+ "##設": 19314,
+ "##許": 19315,
+ "##訳": 19316,
+ "##訴": 19317,
+ "##訶": 19318,
+ "##診": 19319,
+ "##註": 19320,
+ "##証": 19321,
+ "##詆": 19322,
+ "##詐": 19323,
+ "##詔": 19324,
+ "##評": 19325,
+ "##詛": 19326,
+ "##詞": 19327,
+ "##詠": 19328,
+ "##詡": 19329,
+ "##詢": 19330,
+ "##詣": 19331,
+ "##試": 19332,
+ "##詩": 19333,
+ "##詫": 19334,
+ "##詬": 19335,
+ "##詭": 19336,
+ "##詮": 19337,
+ "##詰": 19338,
+ "##話": 19339,
+ "##該": 19340,
+ "##詳": 19341,
+ "##詹": 19342,
+ "##詼": 19343,
+ "##誅": 19344,
+ "##誇": 19345,
+ "##誉": 19346,
+ "##誌": 19347,
+ "##認": 19348,
+ "##誓": 19349,
+ "##誕": 19350,
+ "##誘": 19351,
+ "##語": 19352,
+ "##誠": 19353,
+ "##誡": 19354,
+ "##誣": 19355,
+ "##誤": 19356,
+ "##誥": 19357,
+ "##誦": 19358,
+ "##誨": 19359,
+ "##說": 19360,
+ "##説": 19361,
+ "##読": 19362,
+ "##誰": 19363,
+ "##課": 19364,
+ "##誹": 19365,
+ "##誼": 19366,
+ "##調": 19367,
+ "##諄": 19368,
+ "##談": 19369,
+ "##請": 19370,
+ "##諏": 19371,
+ "##諒": 19372,
+ "##論": 19373,
+ "##諗": 19374,
+ "##諜": 19375,
+ "##諡": 19376,
+ "##諦": 19377,
+ "##諧": 19378,
+ "##諫": 19379,
+ "##諭": 19380,
+ "##諮": 19381,
+ "##諱": 19382,
+ "##諳": 19383,
+ "##諷": 19384,
+ "##諸": 19385,
+ "##諺": 19386,
+ "##諾": 19387,
+ "##謀": 19388,
+ "##謁": 19389,
+ "##謂": 19390,
+ "##謄": 19391,
+ "##謊": 19392,
+ "##謎": 19393,
+ "##謐": 19394,
+ "##謔": 19395,
+ "##謗": 19396,
+ "##謙": 19397,
+ "##講": 19398,
+ "##謝": 19399,
+ "##謠": 19400,
+ "##謨": 19401,
+ "##謬": 19402,
+ "##謹": 19403,
+ "##謾": 19404,
+ "##譁": 19405,
+ "##證": 19406,
+ "##譎": 19407,
+ "##譏": 19408,
+ "##識": 19409,
+ "##譙": 19410,
+ "##譚": 19411,
+ "##譜": 19412,
+ "##警": 19413,
+ "##譬": 19414,
+ "##譯": 19415,
+ "##議": 19416,
+ "##譲": 19417,
+ "##譴": 19418,
+ "##護": 19419,
+ "##譽": 19420,
+ "##讀": 19421,
+ "##變": 19422,
+ "##讓": 19423,
+ "##讚": 19424,
+ "##讞": 19425,
+ "##计": 19426,
+ "##订": 19427,
+ "##认": 19428,
+ "##讥": 19429,
+ "##讧": 19430,
+ "##讨": 19431,
+ "##让": 19432,
+ "##讪": 19433,
+ "##讫": 19434,
+ "##训": 19435,
+ "##议": 19436,
+ "##讯": 19437,
+ "##记": 19438,
+ "##讲": 19439,
+ "##讳": 19440,
+ "##讴": 19441,
+ "##讶": 19442,
+ "##讷": 19443,
+ "##许": 19444,
+ "##讹": 19445,
+ "##论": 19446,
+ "##讼": 19447,
+ "##讽": 19448,
+ "##设": 19449,
+ "##访": 19450,
+ "##诀": 19451,
+ "##证": 19452,
+ "##诃": 19453,
+ "##评": 19454,
+ "##诅": 19455,
+ "##识": 19456,
+ "##诈": 19457,
+ "##诉": 19458,
+ "##诊": 19459,
+ "##诋": 19460,
+ "##词": 19461,
+ "##诏": 19462,
+ "##译": 19463,
+ "##试": 19464,
+ "##诗": 19465,
+ "##诘": 19466,
+ "##诙": 19467,
+ "##诚": 19468,
+ "##诛": 19469,
+ "##话": 19470,
+ "##诞": 19471,
+ "##诟": 19472,
+ "##诠": 19473,
+ "##诡": 19474,
+ "##询": 19475,
+ "##诣": 19476,
+ "##诤": 19477,
+ "##该": 19478,
+ "##详": 19479,
+ "##诧": 19480,
+ "##诩": 19481,
+ "##诫": 19482,
+ "##诬": 19483,
+ "##语": 19484,
+ "##误": 19485,
+ "##诰": 19486,
+ "##诱": 19487,
+ "##诲": 19488,
+ "##说": 19489,
+ "##诵": 19490,
+ "##诶": 19491,
+ "##请": 19492,
+ "##诸": 19493,
+ "##诺": 19494,
+ "##读": 19495,
+ "##诽": 19496,
+ "##课": 19497,
+ "##诿": 19498,
+ "##谀": 19499,
+ "##谁": 19500,
+ "##调": 19501,
+ "##谄": 19502,
+ "##谅": 19503,
+ "##谆": 19504,
+ "##谈": 19505,
+ "##谊": 19506,
+ "##谋": 19507,
+ "##谌": 19508,
+ "##谍": 19509,
+ "##谎": 19510,
+ "##谏": 19511,
+ "##谐": 19512,
+ "##谑": 19513,
+ "##谒": 19514,
+ "##谓": 19515,
+ "##谔": 19516,
+ "##谕": 19517,
+ "##谗": 19518,
+ "##谘": 19519,
+ "##谙": 19520,
+ "##谚": 19521,
+ "##谛": 19522,
+ "##谜": 19523,
+ "##谟": 19524,
+ "##谢": 19525,
+ "##谣": 19526,
+ "##谤": 19527,
+ "##谥": 19528,
+ "##谦": 19529,
+ "##谧": 19530,
+ "##谨": 19531,
+ "##谩": 19532,
+ "##谪": 19533,
+ "##谬": 19534,
+ "##谭": 19535,
+ "##谯": 19536,
+ "##谱": 19537,
+ "##谲": 19538,
+ "##谴": 19539,
+ "##谶": 19540,
+ "##谷": 19541,
+ "##豁": 19542,
+ "##豆": 19543,
+ "##豇": 19544,
+ "##豈": 19545,
+ "##豉": 19546,
+ "##豊": 19547,
+ "##豌": 19548,
+ "##豎": 19549,
+ "##豐": 19550,
+ "##豔": 19551,
+ "##豚": 19552,
+ "##象": 19553,
+ "##豢": 19554,
+ "##豪": 19555,
+ "##豫": 19556,
+ "##豬": 19557,
+ "##豹": 19558,
+ "##豺": 19559,
+ "##貂": 19560,
+ "##貅": 19561,
+ "##貌": 19562,
+ "##貓": 19563,
+ "##貔": 19564,
+ "##貘": 19565,
+ "##貝": 19566,
+ "##貞": 19567,
+ "##負": 19568,
+ "##財": 19569,
+ "##貢": 19570,
+ "##貧": 19571,
+ "##貨": 19572,
+ "##販": 19573,
+ "##貪": 19574,
+ "##貫": 19575,
+ "##責": 19576,
+ "##貯": 19577,
+ "##貰": 19578,
+ "##貳": 19579,
+ "##貴": 19580,
+ "##貶": 19581,
+ "##買": 19582,
+ "##貸": 19583,
+ "##費": 19584,
+ "##貼": 19585,
+ "##貽": 19586,
+ "##貿": 19587,
+ "##賀": 19588,
+ "##賁": 19589,
+ "##賂": 19590,
+ "##賃": 19591,
+ "##賄": 19592,
+ "##資": 19593,
+ "##賈": 19594,
+ "##賊": 19595,
+ "##賑": 19596,
+ "##賓": 19597,
+ "##賜": 19598,
+ "##賞": 19599,
+ "##賠": 19600,
+ "##賡": 19601,
+ "##賢": 19602,
+ "##賣": 19603,
+ "##賤": 19604,
+ "##賦": 19605,
+ "##質": 19606,
+ "##賬": 19607,
+ "##賭": 19608,
+ "##賴": 19609,
+ "##賺": 19610,
+ "##購": 19611,
+ "##賽": 19612,
+ "##贅": 19613,
+ "##贈": 19614,
+ "##贊": 19615,
+ "##贍": 19616,
+ "##贏": 19617,
+ "##贓": 19618,
+ "##贖": 19619,
+ "##贛": 19620,
+ "##贝": 19621,
+ "##贞": 19622,
+ "##负": 19623,
+ "##贡": 19624,
+ "##财": 19625,
+ "##责": 19626,
+ "##贤": 19627,
+ "##败": 19628,
+ "##账": 19629,
+ "##货": 19630,
+ "##质": 19631,
+ "##贩": 19632,
+ "##贪": 19633,
+ "##贫": 19634,
+ "##贬": 19635,
+ "##购": 19636,
+ "##贮": 19637,
+ "##贯": 19638,
+ "##贰": 19639,
+ "##贱": 19640,
+ "##贲": 19641,
+ "##贴": 19642,
+ "##贵": 19643,
+ "##贷": 19644,
+ "##贸": 19645,
+ "##费": 19646,
+ "##贺": 19647,
+ "##贻": 19648,
+ "##贼": 19649,
+ "##贾": 19650,
+ "##贿": 19651,
+ "##赁": 19652,
+ "##赂": 19653,
+ "##赃": 19654,
+ "##资": 19655,
+ "##赅": 19656,
+ "##赈": 19657,
+ "##赊": 19658,
+ "##赋": 19659,
+ "##赌": 19660,
+ "##赎": 19661,
+ "##赏": 19662,
+ "##赐": 19663,
+ "##赓": 19664,
+ "##赔": 19665,
+ "##赖": 19666,
+ "##赘": 19667,
+ "##赚": 19668,
+ "##赛": 19669,
+ "##赝": 19670,
+ "##赞": 19671,
+ "##赠": 19672,
+ "##赡": 19673,
+ "##赢": 19674,
+ "##赣": 19675,
+ "##赤": 19676,
+ "##赦": 19677,
+ "##赧": 19678,
+ "##赫": 19679,
+ "##赭": 19680,
+ "##走": 19681,
+ "##赳": 19682,
+ "##赴": 19683,
+ "##赵": 19684,
+ "##赶": 19685,
+ "##起": 19686,
+ "##趁": 19687,
+ "##超": 19688,
+ "##越": 19689,
+ "##趋": 19690,
+ "##趕": 19691,
+ "##趙": 19692,
+ "##趟": 19693,
+ "##趣": 19694,
+ "##趨": 19695,
+ "##足": 19696,
+ "##趴": 19697,
+ "##趵": 19698,
+ "##趸": 19699,
+ "##趺": 19700,
+ "##趾": 19701,
+ "##跃": 19702,
+ "##跄": 19703,
+ "##跆": 19704,
+ "##跋": 19705,
+ "##跌": 19706,
+ "##跎": 19707,
+ "##跑": 19708,
+ "##跖": 19709,
+ "##跚": 19710,
+ "##跛": 19711,
+ "##距": 19712,
+ "##跟": 19713,
+ "##跡": 19714,
+ "##跤": 19715,
+ "##跨": 19716,
+ "##跩": 19717,
+ "##跪": 19718,
+ "##路": 19719,
+ "##跳": 19720,
+ "##践": 19721,
+ "##跷": 19722,
+ "##跹": 19723,
+ "##跺": 19724,
+ "##跻": 19725,
+ "##踉": 19726,
+ "##踊": 19727,
+ "##踌": 19728,
+ "##踏": 19729,
+ "##踐": 19730,
+ "##踝": 19731,
+ "##踞": 19732,
+ "##踟": 19733,
+ "##踢": 19734,
+ "##踩": 19735,
+ "##踪": 19736,
+ "##踮": 19737,
+ "##踱": 19738,
+ "##踴": 19739,
+ "##踵": 19740,
+ "##踹": 19741,
+ "##蹂": 19742,
+ "##蹄": 19743,
+ "##蹇": 19744,
+ "##蹈": 19745,
+ "##蹉": 19746,
+ "##蹊": 19747,
+ "##蹋": 19748,
+ "##蹑": 19749,
+ "##蹒": 19750,
+ "##蹙": 19751,
+ "##蹟": 19752,
+ "##蹣": 19753,
+ "##蹤": 19754,
+ "##蹦": 19755,
+ "##蹩": 19756,
+ "##蹬": 19757,
+ "##蹭": 19758,
+ "##蹲": 19759,
+ "##蹴": 19760,
+ "##蹶": 19761,
+ "##蹺": 19762,
+ "##蹼": 19763,
+ "##蹿": 19764,
+ "##躁": 19765,
+ "##躇": 19766,
+ "##躉": 19767,
+ "##躊": 19768,
+ "##躋": 19769,
+ "##躍": 19770,
+ "##躏": 19771,
+ "##躪": 19772,
+ "##身": 19773,
+ "##躬": 19774,
+ "##躯": 19775,
+ "##躲": 19776,
+ "##躺": 19777,
+ "##軀": 19778,
+ "##車": 19779,
+ "##軋": 19780,
+ "##軌": 19781,
+ "##軍": 19782,
+ "##軒": 19783,
+ "##軟": 19784,
+ "##転": 19785,
+ "##軸": 19786,
+ "##軼": 19787,
+ "##軽": 19788,
+ "##軾": 19789,
+ "##較": 19790,
+ "##載": 19791,
+ "##輒": 19792,
+ "##輓": 19793,
+ "##輔": 19794,
+ "##輕": 19795,
+ "##輛": 19796,
+ "##輝": 19797,
+ "##輟": 19798,
+ "##輩": 19799,
+ "##輪": 19800,
+ "##輯": 19801,
+ "##輸": 19802,
+ "##輻": 19803,
+ "##輾": 19804,
+ "##輿": 19805,
+ "##轄": 19806,
+ "##轅": 19807,
+ "##轆": 19808,
+ "##轉": 19809,
+ "##轍": 19810,
+ "##轎": 19811,
+ "##轟": 19812,
+ "##车": 19813,
+ "##轧": 19814,
+ "##轨": 19815,
+ "##轩": 19816,
+ "##转": 19817,
+ "##轭": 19818,
+ "##轮": 19819,
+ "##软": 19820,
+ "##轰": 19821,
+ "##轲": 19822,
+ "##轴": 19823,
+ "##轶": 19824,
+ "##轻": 19825,
+ "##轼": 19826,
+ "##载": 19827,
+ "##轿": 19828,
+ "##较": 19829,
+ "##辄": 19830,
+ "##辅": 19831,
+ "##辆": 19832,
+ "##辇": 19833,
+ "##辈": 19834,
+ "##辉": 19835,
+ "##辊": 19836,
+ "##辍": 19837,
+ "##辐": 19838,
+ "##辑": 19839,
+ "##输": 19840,
+ "##辕": 19841,
+ "##辖": 19842,
+ "##辗": 19843,
+ "##辘": 19844,
+ "##辙": 19845,
+ "##辛": 19846,
+ "##辜": 19847,
+ "##辞": 19848,
+ "##辟": 19849,
+ "##辣": 19850,
+ "##辦": 19851,
+ "##辨": 19852,
+ "##辩": 19853,
+ "##辫": 19854,
+ "##辭": 19855,
+ "##辮": 19856,
+ "##辯": 19857,
+ "##辰": 19858,
+ "##辱": 19859,
+ "##農": 19860,
+ "##边": 19861,
+ "##辺": 19862,
+ "##辻": 19863,
+ "##込": 19864,
+ "##辽": 19865,
+ "##达": 19866,
+ "##迁": 19867,
+ "##迂": 19868,
+ "##迄": 19869,
+ "##迅": 19870,
+ "##过": 19871,
+ "##迈": 19872,
+ "##迎": 19873,
+ "##运": 19874,
+ "##近": 19875,
+ "##返": 19876,
+ "##还": 19877,
+ "##这": 19878,
+ "##进": 19879,
+ "##远": 19880,
+ "##违": 19881,
+ "##连": 19882,
+ "##迟": 19883,
+ "##迢": 19884,
+ "##迤": 19885,
+ "##迥": 19886,
+ "##迦": 19887,
+ "##迩": 19888,
+ "##迪": 19889,
+ "##迫": 19890,
+ "##迭": 19891,
+ "##述": 19892,
+ "##迴": 19893,
+ "##迷": 19894,
+ "##迸": 19895,
+ "##迹": 19896,
+ "##迺": 19897,
+ "##追": 19898,
+ "##退": 19899,
+ "##送": 19900,
+ "##适": 19901,
+ "##逃": 19902,
+ "##逅": 19903,
+ "##逆": 19904,
+ "##选": 19905,
+ "##逊": 19906,
+ "##逍": 19907,
+ "##透": 19908,
+ "##逐": 19909,
+ "##递": 19910,
+ "##途": 19911,
+ "##逕": 19912,
+ "##逗": 19913,
+ "##這": 19914,
+ "##通": 19915,
+ "##逛": 19916,
+ "##逝": 19917,
+ "##逞": 19918,
+ "##速": 19919,
+ "##造": 19920,
+ "##逢": 19921,
+ "##連": 19922,
+ "##逮": 19923,
+ "##週": 19924,
+ "##進": 19925,
+ "##逵": 19926,
+ "##逶": 19927,
+ "##逸": 19928,
+ "##逻": 19929,
+ "##逼": 19930,
+ "##逾": 19931,
+ "##遁": 19932,
+ "##遂": 19933,
+ "##遅": 19934,
+ "##遇": 19935,
+ "##遊": 19936,
+ "##運": 19937,
+ "##遍": 19938,
+ "##過": 19939,
+ "##遏": 19940,
+ "##遐": 19941,
+ "##遑": 19942,
+ "##遒": 19943,
+ "##道": 19944,
+ "##達": 19945,
+ "##違": 19946,
+ "##遗": 19947,
+ "##遙": 19948,
+ "##遛": 19949,
+ "##遜": 19950,
+ "##遞": 19951,
+ "##遠": 19952,
+ "##遢": 19953,
+ "##遣": 19954,
+ "##遥": 19955,
+ "##遨": 19956,
+ "##適": 19957,
+ "##遭": 19958,
+ "##遮": 19959,
+ "##遲": 19960,
+ "##遴": 19961,
+ "##遵": 19962,
+ "##遶": 19963,
+ "##遷": 19964,
+ "##選": 19965,
+ "##遺": 19966,
+ "##遼": 19967,
+ "##遽": 19968,
+ "##避": 19969,
+ "##邀": 19970,
+ "##邁": 19971,
+ "##邂": 19972,
+ "##邃": 19973,
+ "##還": 19974,
+ "##邇": 19975,
+ "##邈": 19976,
+ "##邊": 19977,
+ "##邋": 19978,
+ "##邏": 19979,
+ "##邑": 19980,
+ "##邓": 19981,
+ "##邕": 19982,
+ "##邛": 19983,
+ "##邝": 19984,
+ "##邢": 19985,
+ "##那": 19986,
+ "##邦": 19987,
+ "##邨": 19988,
+ "##邪": 19989,
+ "##邬": 19990,
+ "##邮": 19991,
+ "##邯": 19992,
+ "##邰": 19993,
+ "##邱": 19994,
+ "##邳": 19995,
+ "##邵": 19996,
+ "##邸": 19997,
+ "##邹": 19998,
+ "##邺": 19999,
+ "##邻": 20000,
+ "##郁": 20001,
+ "##郅": 20002,
+ "##郊": 20003,
+ "##郎": 20004,
+ "##郑": 20005,
+ "##郜": 20006,
+ "##郝": 20007,
+ "##郡": 20008,
+ "##郢": 20009,
+ "##郤": 20010,
+ "##郦": 20011,
+ "##郧": 20012,
+ "##部": 20013,
+ "##郫": 20014,
+ "##郭": 20015,
+ "##郴": 20016,
+ "##郵": 20017,
+ "##郷": 20018,
+ "##郸": 20019,
+ "##都": 20020,
+ "##鄂": 20021,
+ "##鄉": 20022,
+ "##鄒": 20023,
+ "##鄔": 20024,
+ "##鄙": 20025,
+ "##鄞": 20026,
+ "##鄢": 20027,
+ "##鄧": 20028,
+ "##鄭": 20029,
+ "##鄰": 20030,
+ "##鄱": 20031,
+ "##鄲": 20032,
+ "##鄺": 20033,
+ "##酉": 20034,
+ "##酊": 20035,
+ "##酋": 20036,
+ "##酌": 20037,
+ "##配": 20038,
+ "##酐": 20039,
+ "##酒": 20040,
+ "##酗": 20041,
+ "##酚": 20042,
+ "##酝": 20043,
+ "##酢": 20044,
+ "##酣": 20045,
+ "##酥": 20046,
+ "##酩": 20047,
+ "##酪": 20048,
+ "##酬": 20049,
+ "##酮": 20050,
+ "##酯": 20051,
+ "##酰": 20052,
+ "##酱": 20053,
+ "##酵": 20054,
+ "##酶": 20055,
+ "##酷": 20056,
+ "##酸": 20057,
+ "##酿": 20058,
+ "##醃": 20059,
+ "##醇": 20060,
+ "##醉": 20061,
+ "##醋": 20062,
+ "##醍": 20063,
+ "##醐": 20064,
+ "##醒": 20065,
+ "##醚": 20066,
+ "##醛": 20067,
+ "##醜": 20068,
+ "##醞": 20069,
+ "##醣": 20070,
+ "##醪": 20071,
+ "##醫": 20072,
+ "##醬": 20073,
+ "##醮": 20074,
+ "##醯": 20075,
+ "##醴": 20076,
+ "##醺": 20077,
+ "##釀": 20078,
+ "##釁": 20079,
+ "##采": 20080,
+ "##釉": 20081,
+ "##释": 20082,
+ "##釋": 20083,
+ "##里": 20084,
+ "##重": 20085,
+ "##野": 20086,
+ "##量": 20087,
+ "##釐": 20088,
+ "##金": 20089,
+ "##釗": 20090,
+ "##釘": 20091,
+ "##釜": 20092,
+ "##針": 20093,
+ "##釣": 20094,
+ "##釦": 20095,
+ "##釧": 20096,
+ "##釵": 20097,
+ "##鈀": 20098,
+ "##鈉": 20099,
+ "##鈍": 20100,
+ "##鈎": 20101,
+ "##鈔": 20102,
+ "##鈕": 20103,
+ "##鈞": 20104,
+ "##鈣": 20105,
+ "##鈦": 20106,
+ "##鈪": 20107,
+ "##鈴": 20108,
+ "##鈺": 20109,
+ "##鈾": 20110,
+ "##鉀": 20111,
+ "##鉄": 20112,
+ "##鉅": 20113,
+ "##鉉": 20114,
+ "##鉑": 20115,
+ "##鉗": 20116,
+ "##鉚": 20117,
+ "##鉛": 20118,
+ "##鉤": 20119,
+ "##鉴": 20120,
+ "##鉻": 20121,
+ "##銀": 20122,
+ "##銃": 20123,
+ "##銅": 20124,
+ "##銑": 20125,
+ "##銓": 20126,
+ "##銖": 20127,
+ "##銘": 20128,
+ "##銜": 20129,
+ "##銬": 20130,
+ "##銭": 20131,
+ "##銮": 20132,
+ "##銳": 20133,
+ "##銷": 20134,
+ "##銹": 20135,
+ "##鋁": 20136,
+ "##鋅": 20137,
+ "##鋒": 20138,
+ "##鋤": 20139,
+ "##鋪": 20140,
+ "##鋰": 20141,
+ "##鋸": 20142,
+ "##鋼": 20143,
+ "##錄": 20144,
+ "##錐": 20145,
+ "##錘": 20146,
+ "##錚": 20147,
+ "##錠": 20148,
+ "##錢": 20149,
+ "##錦": 20150,
+ "##錨": 20151,
+ "##錫": 20152,
+ "##錮": 20153,
+ "##錯": 20154,
+ "##録": 20155,
+ "##錳": 20156,
+ "##錶": 20157,
+ "##鍊": 20158,
+ "##鍋": 20159,
+ "##鍍": 20160,
+ "##鍛": 20161,
+ "##鍥": 20162,
+ "##鍰": 20163,
+ "##鍵": 20164,
+ "##鍺": 20165,
+ "##鍾": 20166,
+ "##鎂": 20167,
+ "##鎊": 20168,
+ "##鎌": 20169,
+ "##鎏": 20170,
+ "##鎔": 20171,
+ "##鎖": 20172,
+ "##鎗": 20173,
+ "##鎚": 20174,
+ "##鎧": 20175,
+ "##鎬": 20176,
+ "##鎮": 20177,
+ "##鎳": 20178,
+ "##鏈": 20179,
+ "##鏖": 20180,
+ "##鏗": 20181,
+ "##鏘": 20182,
+ "##鏞": 20183,
+ "##鏟": 20184,
+ "##鏡": 20185,
+ "##鏢": 20186,
+ "##鏤": 20187,
+ "##鏽": 20188,
+ "##鐘": 20189,
+ "##鐮": 20190,
+ "##鐲": 20191,
+ "##鐳": 20192,
+ "##鐵": 20193,
+ "##鐸": 20194,
+ "##鐺": 20195,
+ "##鑄": 20196,
+ "##鑊": 20197,
+ "##鑑": 20198,
+ "##鑒": 20199,
+ "##鑣": 20200,
+ "##鑫": 20201,
+ "##鑰": 20202,
+ "##鑲": 20203,
+ "##鑼": 20204,
+ "##鑽": 20205,
+ "##鑾": 20206,
+ "##鑿": 20207,
+ "##针": 20208,
+ "##钉": 20209,
+ "##钊": 20210,
+ "##钎": 20211,
+ "##钏": 20212,
+ "##钒": 20213,
+ "##钓": 20214,
+ "##钗": 20215,
+ "##钙": 20216,
+ "##钛": 20217,
+ "##钜": 20218,
+ "##钝": 20219,
+ "##钞": 20220,
+ "##钟": 20221,
+ "##钠": 20222,
+ "##钡": 20223,
+ "##钢": 20224,
+ "##钣": 20225,
+ "##钤": 20226,
+ "##钥": 20227,
+ "##钦": 20228,
+ "##钧": 20229,
+ "##钨": 20230,
+ "##钩": 20231,
+ "##钮": 20232,
+ "##钯": 20233,
+ "##钰": 20234,
+ "##钱": 20235,
+ "##钳": 20236,
+ "##钴": 20237,
+ "##钵": 20238,
+ "##钺": 20239,
+ "##钻": 20240,
+ "##钼": 20241,
+ "##钾": 20242,
+ "##钿": 20243,
+ "##铀": 20244,
+ "##铁": 20245,
+ "##铂": 20246,
+ "##铃": 20247,
+ "##铄": 20248,
+ "##铅": 20249,
+ "##铆": 20250,
+ "##铉": 20251,
+ "##铎": 20252,
+ "##铐": 20253,
+ "##铛": 20254,
+ "##铜": 20255,
+ "##铝": 20256,
+ "##铠": 20257,
+ "##铡": 20258,
+ "##铢": 20259,
+ "##铣": 20260,
+ "##铤": 20261,
+ "##铨": 20262,
+ "##铩": 20263,
+ "##铬": 20264,
+ "##铭": 20265,
+ "##铮": 20266,
+ "##铰": 20267,
+ "##铲": 20268,
+ "##铵": 20269,
+ "##银": 20270,
+ "##铸": 20271,
+ "##铺": 20272,
+ "##链": 20273,
+ "##铿": 20274,
+ "##销": 20275,
+ "##锁": 20276,
+ "##锂": 20277,
+ "##锄": 20278,
+ "##锅": 20279,
+ "##锆": 20280,
+ "##锈": 20281,
+ "##锉": 20282,
+ "##锋": 20283,
+ "##锌": 20284,
+ "##锏": 20285,
+ "##锐": 20286,
+ "##锑": 20287,
+ "##错": 20288,
+ "##锚": 20289,
+ "##锟": 20290,
+ "##锡": 20291,
+ "##锢": 20292,
+ "##锣": 20293,
+ "##锤": 20294,
+ "##锥": 20295,
+ "##锦": 20296,
+ "##锭": 20297,
+ "##键": 20298,
+ "##锯": 20299,
+ "##锰": 20300,
+ "##锲": 20301,
+ "##锵": 20302,
+ "##锹": 20303,
+ "##锺": 20304,
+ "##锻": 20305,
+ "##镀": 20306,
+ "##镁": 20307,
+ "##镂": 20308,
+ "##镇": 20309,
+ "##镉": 20310,
+ "##镌": 20311,
+ "##镍": 20312,
+ "##镐": 20313,
+ "##镑": 20314,
+ "##镕": 20315,
+ "##镖": 20316,
+ "##镗": 20317,
+ "##镛": 20318,
+ "##镜": 20319,
+ "##镣": 20320,
+ "##镭": 20321,
+ "##镯": 20322,
+ "##镰": 20323,
+ "##镳": 20324,
+ "##镶": 20325,
+ "##長": 20326,
+ "##长": 20327,
+ "##門": 20328,
+ "##閃": 20329,
+ "##閉": 20330,
+ "##開": 20331,
+ "##閎": 20332,
+ "##閏": 20333,
+ "##閑": 20334,
+ "##閒": 20335,
+ "##間": 20336,
+ "##閔": 20337,
+ "##閘": 20338,
+ "##閡": 20339,
+ "##関": 20340,
+ "##閣": 20341,
+ "##閥": 20342,
+ "##閨": 20343,
+ "##閩": 20344,
+ "##閱": 20345,
+ "##閲": 20346,
+ "##閹": 20347,
+ "##閻": 20348,
+ "##閾": 20349,
+ "##闆": 20350,
+ "##闇": 20351,
+ "##闊": 20352,
+ "##闌": 20353,
+ "##闍": 20354,
+ "##闔": 20355,
+ "##闕": 20356,
+ "##闖": 20357,
+ "##闘": 20358,
+ "##關": 20359,
+ "##闡": 20360,
+ "##闢": 20361,
+ "##门": 20362,
+ "##闪": 20363,
+ "##闫": 20364,
+ "##闭": 20365,
+ "##问": 20366,
+ "##闯": 20367,
+ "##闰": 20368,
+ "##闲": 20369,
+ "##间": 20370,
+ "##闵": 20371,
+ "##闷": 20372,
+ "##闸": 20373,
+ "##闹": 20374,
+ "##闺": 20375,
+ "##闻": 20376,
+ "##闽": 20377,
+ "##闾": 20378,
+ "##阀": 20379,
+ "##阁": 20380,
+ "##阂": 20381,
+ "##阅": 20382,
+ "##阆": 20383,
+ "##阇": 20384,
+ "##阈": 20385,
+ "##阉": 20386,
+ "##阎": 20387,
+ "##阐": 20388,
+ "##阑": 20389,
+ "##阔": 20390,
+ "##阕": 20391,
+ "##阖": 20392,
+ "##阙": 20393,
+ "##阚": 20394,
+ "##阜": 20395,
+ "##队": 20396,
+ "##阡": 20397,
+ "##阪": 20398,
+ "##阮": 20399,
+ "##阱": 20400,
+ "##防": 20401,
+ "##阳": 20402,
+ "##阴": 20403,
+ "##阵": 20404,
+ "##阶": 20405,
+ "##阻": 20406,
+ "##阿": 20407,
+ "##陀": 20408,
+ "##陂": 20409,
+ "##附": 20410,
+ "##际": 20411,
+ "##陆": 20412,
+ "##陇": 20413,
+ "##陈": 20414,
+ "##陋": 20415,
+ "##陌": 20416,
+ "##降": 20417,
+ "##限": 20418,
+ "##陕": 20419,
+ "##陛": 20420,
+ "##陝": 20421,
+ "##陞": 20422,
+ "##陟": 20423,
+ "##陡": 20424,
+ "##院": 20425,
+ "##陣": 20426,
+ "##除": 20427,
+ "##陨": 20428,
+ "##险": 20429,
+ "##陪": 20430,
+ "##陰": 20431,
+ "##陲": 20432,
+ "##陳": 20433,
+ "##陵": 20434,
+ "##陶": 20435,
+ "##陷": 20436,
+ "##陸": 20437,
+ "##険": 20438,
+ "##陽": 20439,
+ "##隅": 20440,
+ "##隆": 20441,
+ "##隈": 20442,
+ "##隊": 20443,
+ "##隋": 20444,
+ "##隍": 20445,
+ "##階": 20446,
+ "##随": 20447,
+ "##隐": 20448,
+ "##隔": 20449,
+ "##隕": 20450,
+ "##隘": 20451,
+ "##隙": 20452,
+ "##際": 20453,
+ "##障": 20454,
+ "##隠": 20455,
+ "##隣": 20456,
+ "##隧": 20457,
+ "##隨": 20458,
+ "##險": 20459,
+ "##隱": 20460,
+ "##隴": 20461,
+ "##隶": 20462,
+ "##隸": 20463,
+ "##隻": 20464,
+ "##隼": 20465,
+ "##隽": 20466,
+ "##难": 20467,
+ "##雀": 20468,
+ "##雁": 20469,
+ "##雄": 20470,
+ "##雅": 20471,
+ "##集": 20472,
+ "##雇": 20473,
+ "##雉": 20474,
+ "##雋": 20475,
+ "##雌": 20476,
+ "##雍": 20477,
+ "##雎": 20478,
+ "##雏": 20479,
+ "##雑": 20480,
+ "##雒": 20481,
+ "##雕": 20482,
+ "##雖": 20483,
+ "##雙": 20484,
+ "##雛": 20485,
+ "##雜": 20486,
+ "##雞": 20487,
+ "##離": 20488,
+ "##難": 20489,
+ "##雨": 20490,
+ "##雪": 20491,
+ "##雯": 20492,
+ "##雰": 20493,
+ "##雲": 20494,
+ "##雳": 20495,
+ "##零": 20496,
+ "##雷": 20497,
+ "##雹": 20498,
+ "##電": 20499,
+ "##雾": 20500,
+ "##需": 20501,
+ "##霁": 20502,
+ "##霄": 20503,
+ "##霆": 20504,
+ "##震": 20505,
+ "##霈": 20506,
+ "##霉": 20507,
+ "##霊": 20508,
+ "##霍": 20509,
+ "##霎": 20510,
+ "##霏": 20511,
+ "##霑": 20512,
+ "##霓": 20513,
+ "##霖": 20514,
+ "##霜": 20515,
+ "##霞": 20516,
+ "##霧": 20517,
+ "##霭": 20518,
+ "##霰": 20519,
+ "##露": 20520,
+ "##霸": 20521,
+ "##霹": 20522,
+ "##霽": 20523,
+ "##霾": 20524,
+ "##靂": 20525,
+ "##靄": 20526,
+ "##靈": 20527,
+ "##青": 20528,
+ "##靓": 20529,
+ "##靖": 20530,
+ "##静": 20531,
+ "##靚": 20532,
+ "##靛": 20533,
+ "##靜": 20534,
+ "##非": 20535,
+ "##靠": 20536,
+ "##靡": 20537,
+ "##面": 20538,
+ "##靥": 20539,
+ "##靦": 20540,
+ "##革": 20541,
+ "##靳": 20542,
+ "##靴": 20543,
+ "##靶": 20544,
+ "##靼": 20545,
+ "##鞅": 20546,
+ "##鞋": 20547,
+ "##鞍": 20548,
+ "##鞏": 20549,
+ "##鞑": 20550,
+ "##鞘": 20551,
+ "##鞠": 20552,
+ "##鞣": 20553,
+ "##鞦": 20554,
+ "##鞭": 20555,
+ "##韆": 20556,
+ "##韋": 20557,
+ "##韌": 20558,
+ "##韓": 20559,
+ "##韜": 20560,
+ "##韦": 20561,
+ "##韧": 20562,
+ "##韩": 20563,
+ "##韬": 20564,
+ "##韭": 20565,
+ "##音": 20566,
+ "##韵": 20567,
+ "##韶": 20568,
+ "##韻": 20569,
+ "##響": 20570,
+ "##頁": 20571,
+ "##頂": 20572,
+ "##頃": 20573,
+ "##項": 20574,
+ "##順": 20575,
+ "##須": 20576,
+ "##頌": 20577,
+ "##預": 20578,
+ "##頑": 20579,
+ "##頒": 20580,
+ "##頓": 20581,
+ "##頗": 20582,
+ "##領": 20583,
+ "##頜": 20584,
+ "##頡": 20585,
+ "##頤": 20586,
+ "##頫": 20587,
+ "##頭": 20588,
+ "##頰": 20589,
+ "##頷": 20590,
+ "##頸": 20591,
+ "##頹": 20592,
+ "##頻": 20593,
+ "##頼": 20594,
+ "##顆": 20595,
+ "##題": 20596,
+ "##額": 20597,
+ "##顎": 20598,
+ "##顏": 20599,
+ "##顔": 20600,
+ "##願": 20601,
+ "##顛": 20602,
+ "##類": 20603,
+ "##顧": 20604,
+ "##顫": 20605,
+ "##顯": 20606,
+ "##顱": 20607,
+ "##顴": 20608,
+ "##页": 20609,
+ "##顶": 20610,
+ "##顷": 20611,
+ "##项": 20612,
+ "##顺": 20613,
+ "##须": 20614,
+ "##顼": 20615,
+ "##顽": 20616,
+ "##顾": 20617,
+ "##顿": 20618,
+ "##颁": 20619,
+ "##颂": 20620,
+ "##预": 20621,
+ "##颅": 20622,
+ "##领": 20623,
+ "##颇": 20624,
+ "##颈": 20625,
+ "##颉": 20626,
+ "##颊": 20627,
+ "##颌": 20628,
+ "##颍": 20629,
+ "##颐": 20630,
+ "##频": 20631,
+ "##颓": 20632,
+ "##颔": 20633,
+ "##颖": 20634,
+ "##颗": 20635,
+ "##题": 20636,
+ "##颚": 20637,
+ "##颛": 20638,
+ "##颜": 20639,
+ "##额": 20640,
+ "##颞": 20641,
+ "##颠": 20642,
+ "##颡": 20643,
+ "##颢": 20644,
+ "##颤": 20645,
+ "##颦": 20646,
+ "##颧": 20647,
+ "##風": 20648,
+ "##颯": 20649,
+ "##颱": 20650,
+ "##颳": 20651,
+ "##颶": 20652,
+ "##颼": 20653,
+ "##飄": 20654,
+ "##飆": 20655,
+ "##风": 20656,
+ "##飒": 20657,
+ "##飓": 20658,
+ "##飕": 20659,
+ "##飘": 20660,
+ "##飙": 20661,
+ "##飚": 20662,
+ "##飛": 20663,
+ "##飞": 20664,
+ "##食": 20665,
+ "##飢": 20666,
+ "##飨": 20667,
+ "##飩": 20668,
+ "##飪": 20669,
+ "##飯": 20670,
+ "##飲": 20671,
+ "##飼": 20672,
+ "##飽": 20673,
+ "##飾": 20674,
+ "##餃": 20675,
+ "##餅": 20676,
+ "##餉": 20677,
+ "##養": 20678,
+ "##餌": 20679,
+ "##餐": 20680,
+ "##餒": 20681,
+ "##餓": 20682,
+ "##餘": 20683,
+ "##餚": 20684,
+ "##餛": 20685,
+ "##餞": 20686,
+ "##餡": 20687,
+ "##館": 20688,
+ "##餮": 20689,
+ "##餵": 20690,
+ "##餾": 20691,
+ "##饅": 20692,
+ "##饈": 20693,
+ "##饋": 20694,
+ "##饌": 20695,
+ "##饍": 20696,
+ "##饑": 20697,
+ "##饒": 20698,
+ "##饕": 20699,
+ "##饗": 20700,
+ "##饞": 20701,
+ "##饥": 20702,
+ "##饨": 20703,
+ "##饪": 20704,
+ "##饬": 20705,
+ "##饭": 20706,
+ "##饮": 20707,
+ "##饯": 20708,
+ "##饰": 20709,
+ "##饱": 20710,
+ "##饲": 20711,
+ "##饴": 20712,
+ "##饵": 20713,
+ "##饶": 20714,
+ "##饷": 20715,
+ "##饺": 20716,
+ "##饼": 20717,
+ "##饽": 20718,
+ "##饿": 20719,
+ "##馀": 20720,
+ "##馁": 20721,
+ "##馄": 20722,
+ "##馅": 20723,
+ "##馆": 20724,
+ "##馈": 20725,
+ "##馋": 20726,
+ "##馍": 20727,
+ "##馏": 20728,
+ "##馒": 20729,
+ "##馔": 20730,
+ "##首": 20731,
+ "##馗": 20732,
+ "##香": 20733,
+ "##馥": 20734,
+ "##馨": 20735,
+ "##馬": 20736,
+ "##馭": 20737,
+ "##馮": 20738,
+ "##馳": 20739,
+ "##馴": 20740,
+ "##駁": 20741,
+ "##駄": 20742,
+ "##駅": 20743,
+ "##駆": 20744,
+ "##駐": 20745,
+ "##駒": 20746,
+ "##駕": 20747,
+ "##駛": 20748,
+ "##駝": 20749,
+ "##駭": 20750,
+ "##駱": 20751,
+ "##駿": 20752,
+ "##騁": 20753,
+ "##騎": 20754,
+ "##騏": 20755,
+ "##験": 20756,
+ "##騙": 20757,
+ "##騨": 20758,
+ "##騰": 20759,
+ "##騷": 20760,
+ "##驀": 20761,
+ "##驅": 20762,
+ "##驊": 20763,
+ "##驍": 20764,
+ "##驒": 20765,
+ "##驕": 20766,
+ "##驗": 20767,
+ "##驚": 20768,
+ "##驛": 20769,
+ "##驟": 20770,
+ "##驢": 20771,
+ "##驥": 20772,
+ "##马": 20773,
+ "##驭": 20774,
+ "##驮": 20775,
+ "##驯": 20776,
+ "##驰": 20777,
+ "##驱": 20778,
+ "##驳": 20779,
+ "##驴": 20780,
+ "##驶": 20781,
+ "##驷": 20782,
+ "##驸": 20783,
+ "##驹": 20784,
+ "##驻": 20785,
+ "##驼": 20786,
+ "##驾": 20787,
+ "##驿": 20788,
+ "##骁": 20789,
+ "##骂": 20790,
+ "##骄": 20791,
+ "##骅": 20792,
+ "##骆": 20793,
+ "##骇": 20794,
+ "##骈": 20795,
+ "##骊": 20796,
+ "##骋": 20797,
+ "##验": 20798,
+ "##骏": 20799,
+ "##骐": 20800,
+ "##骑": 20801,
+ "##骗": 20802,
+ "##骚": 20803,
+ "##骛": 20804,
+ "##骜": 20805,
+ "##骞": 20806,
+ "##骠": 20807,
+ "##骡": 20808,
+ "##骤": 20809,
+ "##骥": 20810,
+ "##骧": 20811,
+ "##骨": 20812,
+ "##骯": 20813,
+ "##骰": 20814,
+ "##骶": 20815,
+ "##骷": 20816,
+ "##骸": 20817,
+ "##骼": 20818,
+ "##髂": 20819,
+ "##髅": 20820,
+ "##髋": 20821,
+ "##髏": 20822,
+ "##髒": 20823,
+ "##髓": 20824,
+ "##體": 20825,
+ "##髖": 20826,
+ "##高": 20827,
+ "##髦": 20828,
+ "##髪": 20829,
+ "##髮": 20830,
+ "##髯": 20831,
+ "##髻": 20832,
+ "##鬃": 20833,
+ "##鬆": 20834,
+ "##鬍": 20835,
+ "##鬓": 20836,
+ "##鬚": 20837,
+ "##鬟": 20838,
+ "##鬢": 20839,
+ "##鬣": 20840,
+ "##鬥": 20841,
+ "##鬧": 20842,
+ "##鬱": 20843,
+ "##鬼": 20844,
+ "##魁": 20845,
+ "##魂": 20846,
+ "##魄": 20847,
+ "##魅": 20848,
+ "##魇": 20849,
+ "##魍": 20850,
+ "##魏": 20851,
+ "##魔": 20852,
+ "##魘": 20853,
+ "##魚": 20854,
+ "##魯": 20855,
+ "##魷": 20856,
+ "##鮑": 20857,
+ "##鮨": 20858,
+ "##鮪": 20859,
+ "##鮭": 20860,
+ "##鮮": 20861,
+ "##鯉": 20862,
+ "##鯊": 20863,
+ "##鯖": 20864,
+ "##鯛": 20865,
+ "##鯨": 20866,
+ "##鯰": 20867,
+ "##鯽": 20868,
+ "##鰍": 20869,
+ "##鰓": 20870,
+ "##鰭": 20871,
+ "##鰲": 20872,
+ "##鰻": 20873,
+ "##鰾": 20874,
+ "##鱈": 20875,
+ "##鱉": 20876,
+ "##鱔": 20877,
+ "##鱗": 20878,
+ "##鱷": 20879,
+ "##鱸": 20880,
+ "##鱼": 20881,
+ "##鱿": 20882,
+ "##鲁": 20883,
+ "##鲈": 20884,
+ "##鲍": 20885,
+ "##鲑": 20886,
+ "##鲛": 20887,
+ "##鲜": 20888,
+ "##鲟": 20889,
+ "##鲢": 20890,
+ "##鲤": 20891,
+ "##鲨": 20892,
+ "##鲫": 20893,
+ "##鲱": 20894,
+ "##鲲": 20895,
+ "##鲶": 20896,
+ "##鲷": 20897,
+ "##鲸": 20898,
+ "##鳃": 20899,
+ "##鳄": 20900,
+ "##鳅": 20901,
+ "##鳌": 20902,
+ "##鳍": 20903,
+ "##鳕": 20904,
+ "##鳖": 20905,
+ "##鳗": 20906,
+ "##鳝": 20907,
+ "##鳞": 20908,
+ "##鳥": 20909,
+ "##鳩": 20910,
+ "##鳳": 20911,
+ "##鳴": 20912,
+ "##鳶": 20913,
+ "##鴉": 20914,
+ "##鴕": 20915,
+ "##鴛": 20916,
+ "##鴦": 20917,
+ "##鴨": 20918,
+ "##鴻": 20919,
+ "##鴿": 20920,
+ "##鵑": 20921,
+ "##鵜": 20922,
+ "##鵝": 20923,
+ "##鵡": 20924,
+ "##鵬": 20925,
+ "##鵰": 20926,
+ "##鵲": 20927,
+ "##鶘": 20928,
+ "##鶩": 20929,
+ "##鶯": 20930,
+ "##鶴": 20931,
+ "##鷗": 20932,
+ "##鷲": 20933,
+ "##鷹": 20934,
+ "##鷺": 20935,
+ "##鸚": 20936,
+ "##鸞": 20937,
+ "##鸟": 20938,
+ "##鸠": 20939,
+ "##鸡": 20940,
+ "##鸢": 20941,
+ "##鸣": 20942,
+ "##鸥": 20943,
+ "##鸦": 20944,
+ "##鸨": 20945,
+ "##鸪": 20946,
+ "##鸭": 20947,
+ "##鸯": 20948,
+ "##鸳": 20949,
+ "##鸵": 20950,
+ "##鸽": 20951,
+ "##鸾": 20952,
+ "##鸿": 20953,
+ "##鹂": 20954,
+ "##鹃": 20955,
+ "##鹄": 20956,
+ "##鹅": 20957,
+ "##鹈": 20958,
+ "##鹉": 20959,
+ "##鹊": 20960,
+ "##鹌": 20961,
+ "##鹏": 20962,
+ "##鹑": 20963,
+ "##鹕": 20964,
+ "##鹘": 20965,
+ "##鹜": 20966,
+ "##鹞": 20967,
+ "##鹤": 20968,
+ "##鹦": 20969,
+ "##鹧": 20970,
+ "##鹫": 20971,
+ "##鹭": 20972,
+ "##鹰": 20973,
+ "##鹳": 20974,
+ "##鹵": 20975,
+ "##鹹": 20976,
+ "##鹼": 20977,
+ "##鹽": 20978,
+ "##鹿": 20979,
+ "##麂": 20980,
+ "##麋": 20981,
+ "##麒": 20982,
+ "##麓": 20983,
+ "##麗": 20984,
+ "##麝": 20985,
+ "##麟": 20986,
+ "##麥": 20987,
+ "##麦": 20988,
+ "##麩": 20989,
+ "##麴": 20990,
+ "##麵": 20991,
+ "##麸": 20992,
+ "##麺": 20993,
+ "##麻": 20994,
+ "##麼": 20995,
+ "##麽": 20996,
+ "##麾": 20997,
+ "##黃": 20998,
+ "##黄": 20999,
+ "##黍": 21000,
+ "##黎": 21001,
+ "##黏": 21002,
+ "##黑": 21003,
+ "##黒": 21004,
+ "##黔": 21005,
+ "##默": 21006,
+ "##黛": 21007,
+ "##黜": 21008,
+ "##黝": 21009,
+ "##點": 21010,
+ "##黠": 21011,
+ "##黨": 21012,
+ "##黯": 21013,
+ "##黴": 21014,
+ "##鼋": 21015,
+ "##鼎": 21016,
+ "##鼐": 21017,
+ "##鼓": 21018,
+ "##鼠": 21019,
+ "##鼬": 21020,
+ "##鼹": 21021,
+ "##鼻": 21022,
+ "##鼾": 21023,
+ "##齁": 21024,
+ "##齊": 21025,
+ "##齋": 21026,
+ "##齐": 21027,
+ "##齒": 21028,
+ "##齡": 21029,
+ "##齢": 21030,
+ "##齣": 21031,
+ "##齦": 21032,
+ "##齿": 21033,
+ "##龄": 21034,
+ "##龅": 21035,
+ "##龈": 21036,
+ "##龊": 21037,
+ "##龋": 21038,
+ "##龌": 21039,
+ "##龍": 21040,
+ "##龐": 21041,
+ "##龔": 21042,
+ "##龕": 21043,
+ "##龙": 21044,
+ "##龚": 21045,
+ "##龛": 21046,
+ "##龜": 21047,
+ "##龟": 21048,
+ "##︰": 21049,
+ "##︱": 21050,
+ "##︶": 21051,
+ "##︿": 21052,
+ "##﹁": 21053,
+ "##﹂": 21054,
+ "##﹍": 21055,
+ "##﹏": 21056,
+ "##﹐": 21057,
+ "##﹑": 21058,
+ "##﹒": 21059,
+ "##﹔": 21060,
+ "##﹕": 21061,
+ "##﹖": 21062,
+ "##﹗": 21063,
+ "##﹙": 21064,
+ "##﹚": 21065,
+ "##﹝": 21066,
+ "##﹞": 21067,
+ "##﹡": 21068,
+ "##﹣": 21069,
+ "##!": 21070,
+ "##"": 21071,
+ "###": 21072,
+ "##$": 21073,
+ "##%": 21074,
+ "##&": 21075,
+ "##'": 21076,
+ "##(": 21077,
+ "##)": 21078,
+ "##*": 21079,
+ "##,": 21080,
+ "##-": 21081,
+ "##.": 21082,
+ "##/": 21083,
+ "##:": 21084,
+ "##;": 21085,
+ "##<": 21086,
+ "##?": 21087,
+ "##@": 21088,
+ "##[": 21089,
+ "##\": 21090,
+ "##]": 21091,
+ "##^": 21092,
+ "##_": 21093,
+ "##`": 21094,
+ "##f": 21095,
+ "##h": 21096,
+ "##j": 21097,
+ "##u": 21098,
+ "##w": 21099,
+ "##z": 21100,
+ "##{": 21101,
+ "##}": 21102,
+ "##。": 21103,
+ "##「": 21104,
+ "##」": 21105,
+ "##、": 21106,
+ "##・": 21107,
+ "##ッ": 21108,
+ "##ー": 21109,
+ "##イ": 21110,
+ "##ク": 21111,
+ "##シ": 21112,
+ "##ス": 21113,
+ "##ト": 21114,
+ "##ノ": 21115,
+ "##フ": 21116,
+ "##ラ": 21117,
+ "##ル": 21118,
+ "##ン": 21119,
+ "##゙": 21120,
+ "##゚": 21121,
+ "## ̄": 21122,
+ "##¥": 21123,
+ "##👍": 21124,
+ "##🔥": 21125,
+ "##😂": 21126,
+ "##😎": 21127
+ }
+ }
+}
\ No newline at end of file
diff --git a/intelligent_cabin/models/local_joint_bert_nlu/tokenizer_config.json b/intelligent_cabin/models/local_joint_bert_nlu/tokenizer_config.json
new file mode 100644
index 0000000..bb71a3d
--- /dev/null
+++ b/intelligent_cabin/models/local_joint_bert_nlu/tokenizer_config.json
@@ -0,0 +1,56 @@
+{
+ "added_tokens_decoder": {
+ "0": {
+ "content": "[PAD]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false,
+ "special": true
+ },
+ "100": {
+ "content": "[UNK]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false,
+ "special": true
+ },
+ "101": {
+ "content": "[CLS]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false,
+ "special": true
+ },
+ "102": {
+ "content": "[SEP]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false,
+ "special": true
+ },
+ "103": {
+ "content": "[MASK]",
+ "lstrip": false,
+ "normalized": false,
+ "rstrip": false,
+ "single_word": false,
+ "special": true
+ }
+ },
+ "clean_up_tokenization_spaces": false,
+ "cls_token": "[CLS]",
+ "do_lower_case": true,
+ "extra_special_tokens": {},
+ "mask_token": "[MASK]",
+ "model_max_length": 1000000000000000019884624838656,
+ "pad_token": "[PAD]",
+ "sep_token": "[SEP]",
+ "strip_accents": null,
+ "tokenize_chinese_chars": true,
+ "tokenizer_class": "BertTokenizer",
+ "unk_token": "[UNK]"
+}
diff --git a/intelligent_cabin/models/local_joint_bert_nlu/train_summary.json b/intelligent_cabin/models/local_joint_bert_nlu/train_summary.json
new file mode 100644
index 0000000..806d315
--- /dev/null
+++ b/intelligent_cabin/models/local_joint_bert_nlu/train_summary.json
@@ -0,0 +1,17 @@
+{
+ "train_size": 744,
+ "eval_size": 22,
+ "metrics": {
+ "intent_threshold": 0.4,
+ "intent_micro_precision": 0.8974,
+ "intent_micro_recall": 1.0,
+ "intent_micro_f1": 0.9459,
+ "intent_exact_match": 0.8636,
+ "single_intent_top1_accuracy": 1.0,
+ "slot_token_accuracy": 0.9387,
+ "slot_exact_match": 0.7273,
+ "intent_label_count": 34.0,
+ "slot_label_count": 11.0,
+ "train_loss": 0.1618
+ }
+}
\ No newline at end of file
diff --git a/intelligent_cabin/models/local_joint_bert_nlu/vocab.txt b/intelligent_cabin/models/local_joint_bert_nlu/vocab.txt
new file mode 100644
index 0000000..ca4f978
--- /dev/null
+++ b/intelligent_cabin/models/local_joint_bert_nlu/vocab.txt
@@ -0,0 +1,21128 @@
+[PAD]
+[unused1]
+[unused2]
+[unused3]
+[unused4]
+[unused5]
+[unused6]
+[unused7]
+[unused8]
+[unused9]
+[unused10]
+[unused11]
+[unused12]
+[unused13]
+[unused14]
+[unused15]
+[unused16]
+[unused17]
+[unused18]
+[unused19]
+[unused20]
+[unused21]
+[unused22]
+[unused23]
+[unused24]
+[unused25]
+[unused26]
+[unused27]
+[unused28]
+[unused29]
+[unused30]
+[unused31]
+[unused32]
+[unused33]
+[unused34]
+[unused35]
+[unused36]
+[unused37]
+[unused38]
+[unused39]
+[unused40]
+[unused41]
+[unused42]
+[unused43]
+[unused44]
+[unused45]
+[unused46]
+[unused47]
+[unused48]
+[unused49]
+[unused50]
+[unused51]
+[unused52]
+[unused53]
+[unused54]
+[unused55]
+[unused56]
+[unused57]
+[unused58]
+[unused59]
+[unused60]
+[unused61]
+[unused62]
+[unused63]
+[unused64]
+[unused65]
+[unused66]
+[unused67]
+[unused68]
+[unused69]
+[unused70]
+[unused71]
+[unused72]
+[unused73]
+[unused74]
+[unused75]
+[unused76]
+[unused77]
+[unused78]
+[unused79]
+[unused80]
+[unused81]
+[unused82]
+[unused83]
+[unused84]
+[unused85]
+[unused86]
+[unused87]
+[unused88]
+[unused89]
+[unused90]
+[unused91]
+[unused92]
+[unused93]
+[unused94]
+[unused95]
+[unused96]
+[unused97]
+[unused98]
+[unused99]
+[UNK]
+[CLS]
+[SEP]
+[MASK]
+
+
+!
+"
+#
+$
+%
+&
+'
+(
+)
+*
++
+,
+-
+.
+/
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+:
+;
+<
+=
+>
+?
+@
+[
+\
+]
+^
+_
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+{
+|
+}
+~
+£
+¤
+¥
+§
+©
+«
+®
+°
+±
+²
+³
+µ
+·
+¹
+º
+»
+¼
+×
+ß
+æ
+÷
+ø
+đ
+ŋ
+ɔ
+ə
+ɡ
+ʰ
+ˇ
+ˈ
+ˊ
+ˋ
+ˍ
+ː
+˙
+˚
+ˢ
+α
+β
+γ
+δ
+ε
+η
+θ
+ι
+κ
+λ
+μ
+ν
+ο
+π
+ρ
+ς
+σ
+τ
+υ
+φ
+χ
+ψ
+ω
+а
+б
+в
+г
+д
+е
+ж
+з
+и
+к
+л
+м
+н
+о
+п
+р
+с
+т
+у
+ф
+х
+ц
+ч
+ш
+ы
+ь
+я
+і
+ا
+ب
+ة
+ت
+د
+ر
+س
+ع
+ل
+م
+ن
+ه
+و
+ي
+۩
+ก
+ง
+น
+ม
+ย
+ร
+อ
+า
+เ
+๑
+་
+ღ
+ᄀ
+ᄁ
+ᄂ
+ᄃ
+ᄅ
+ᄆ
+ᄇ
+ᄈ
+ᄉ
+ᄋ
+ᄌ
+ᄎ
+ᄏ
+ᄐ
+ᄑ
+ᄒ
+ᅡ
+ᅢ
+ᅣ
+ᅥ
+ᅦ
+ᅧ
+ᅨ
+ᅩ
+ᅪ
+ᅬ
+ᅭ
+ᅮ
+ᅯ
+ᅲ
+ᅳ
+ᅴ
+ᅵ
+ᆨ
+ᆫ
+ᆯ
+ᆷ
+ᆸ
+ᆺ
+ᆻ
+ᆼ
+ᗜ
+ᵃ
+ᵉ
+ᵍ
+ᵏ
+ᵐ
+ᵒ
+ᵘ
+‖
+„
+†
+•
+‥
+‧
+
+‰
+′
+″
+‹
+›
+※
+‿
+⁄
+ⁱ
+⁺
+ⁿ
+₁
+₂
+₃
+₄
+€
+℃
+№
+™
+ⅰ
+ⅱ
+ⅲ
+ⅳ
+ⅴ
+←
+↑
+→
+↓
+↔
+↗
+↘
+⇒
+∀
+−
+∕
+∙
+√
+∞
+∟
+∠
+∣
+∥
+∩
+∮
+∶
+∼
+∽
+≈
+≒
+≡
+≤
+≥
+≦
+≧
+≪
+≫
+⊙
+⋅
+⋈
+⋯
+⌒
+①
+②
+③
+④
+⑤
+⑥
+⑦
+⑧
+⑨
+⑩
+⑴
+⑵
+⑶
+⑷
+⑸
+⒈
+⒉
+⒊
+⒋
+ⓒ
+ⓔ
+ⓘ
+─
+━
+│
+┃
+┅
+┆
+┊
+┌
+└
+├
+┣
+═
+║
+╚
+╞
+╠
+╭
+╮
+╯
+╰
+╱
+╳
+▂
+▃
+▅
+▇
+█
+▉
+▋
+▌
+▍
+▎
+■
+□
+▪
+▫
+▬
+▲
+△
+▶
+►
+▼
+▽
+◆
+◇
+○
+◎
+●
+◕
+◠
+◢
+◤
+☀
+★
+☆
+☕
+☞
+☺
+☼
+♀
+♂
+♠
+♡
+♣
+♥
+♦
+♪
+♫
+♬
+✈
+✔
+✕
+✖
+✦
+✨
+✪
+✰
+✿
+❀
+❤
+➜
+➤
+⦿
+、
+。
+〃
+々
+〇
+〈
+〉
+《
+》
+「
+」
+『
+』
+【
+】
+〓
+〔
+〕
+〖
+〗
+〜
+〝
+〞
+ぁ
+あ
+ぃ
+い
+う
+ぇ
+え
+お
+か
+き
+く
+け
+こ
+さ
+し
+す
+せ
+そ
+た
+ち
+っ
+つ
+て
+と
+な
+に
+ぬ
+ね
+の
+は
+ひ
+ふ
+へ
+ほ
+ま
+み
+む
+め
+も
+ゃ
+や
+ゅ
+ゆ
+ょ
+よ
+ら
+り
+る
+れ
+ろ
+わ
+を
+ん
+゜
+ゝ
+ァ
+ア
+ィ
+イ
+ゥ
+ウ
+ェ
+エ
+ォ
+オ
+カ
+キ
+ク
+ケ
+コ
+サ
+シ
+ス
+セ
+ソ
+タ
+チ
+ッ
+ツ
+テ
+ト
+ナ
+ニ
+ヌ
+ネ
+ノ
+ハ
+ヒ
+フ
+ヘ
+ホ
+マ
+ミ
+ム
+メ
+モ
+ャ
+ヤ
+ュ
+ユ
+ョ
+ヨ
+ラ
+リ
+ル
+レ
+ロ
+ワ
+ヲ
+ン
+ヶ
+・
+ー
+ヽ
+ㄅ
+ㄆ
+ㄇ
+ㄉ
+ㄋ
+ㄌ
+ㄍ
+ㄎ
+ㄏ
+ㄒ
+ㄚ
+ㄛ
+ㄞ
+ㄟ
+ㄢ
+ㄤ
+ㄥ
+ㄧ
+ㄨ
+ㆍ
+㈦
+㊣
+㎡
+㗎
+一
+丁
+七
+万
+丈
+三
+上
+下
+不
+与
+丐
+丑
+专
+且
+丕
+世
+丘
+丙
+业
+丛
+东
+丝
+丞
+丟
+両
+丢
+两
+严
+並
+丧
+丨
+个
+丫
+中
+丰
+串
+临
+丶
+丸
+丹
+为
+主
+丼
+丽
+举
+丿
+乂
+乃
+久
+么
+义
+之
+乌
+乍
+乎
+乏
+乐
+乒
+乓
+乔
+乖
+乗
+乘
+乙
+乜
+九
+乞
+也
+习
+乡
+书
+乩
+买
+乱
+乳
+乾
+亀
+亂
+了
+予
+争
+事
+二
+于
+亏
+云
+互
+五
+井
+亘
+亙
+亚
+些
+亜
+亞
+亟
+亡
+亢
+交
+亥
+亦
+产
+亨
+亩
+享
+京
+亭
+亮
+亲
+亳
+亵
+人
+亿
+什
+仁
+仃
+仄
+仅
+仆
+仇
+今
+介
+仍
+从
+仏
+仑
+仓
+仔
+仕
+他
+仗
+付
+仙
+仝
+仞
+仟
+代
+令
+以
+仨
+仪
+们
+仮
+仰
+仲
+件
+价
+任
+份
+仿
+企
+伉
+伊
+伍
+伎
+伏
+伐
+休
+伕
+众
+优
+伙
+会
+伝
+伞
+伟
+传
+伢
+伤
+伦
+伪
+伫
+伯
+估
+伴
+伶
+伸
+伺
+似
+伽
+佃
+但
+佇
+佈
+位
+低
+住
+佐
+佑
+体
+佔
+何
+佗
+佘
+余
+佚
+佛
+作
+佝
+佞
+佟
+你
+佢
+佣
+佤
+佥
+佩
+佬
+佯
+佰
+佳
+併
+佶
+佻
+佼
+使
+侃
+侄
+來
+侈
+例
+侍
+侏
+侑
+侖
+侗
+供
+依
+侠
+価
+侣
+侥
+侦
+侧
+侨
+侬
+侮
+侯
+侵
+侶
+侷
+便
+係
+促
+俄
+俊
+俎
+俏
+俐
+俑
+俗
+俘
+俚
+保
+俞
+俟
+俠
+信
+俨
+俩
+俪
+俬
+俭
+修
+俯
+俱
+俳
+俸
+俺
+俾
+倆
+倉
+個
+倌
+倍
+倏
+們
+倒
+倔
+倖
+倘
+候
+倚
+倜
+借
+倡
+値
+倦
+倩
+倪
+倫
+倬
+倭
+倶
+债
+值
+倾
+偃
+假
+偈
+偉
+偌
+偎
+偏
+偕
+做
+停
+健
+側
+偵
+偶
+偷
+偻
+偽
+偿
+傀
+傅
+傍
+傑
+傘
+備
+傚
+傢
+傣
+傥
+储
+傩
+催
+傭
+傲
+傳
+債
+傷
+傻
+傾
+僅
+働
+像
+僑
+僕
+僖
+僚
+僥
+僧
+僭
+僮
+僱
+僵
+價
+僻
+儀
+儂
+億
+儆
+儉
+儋
+儒
+儕
+儘
+償
+儡
+優
+儲
+儷
+儼
+儿
+兀
+允
+元
+兄
+充
+兆
+兇
+先
+光
+克
+兌
+免
+児
+兑
+兒
+兔
+兖
+党
+兜
+兢
+入
+內
+全
+兩
+八
+公
+六
+兮
+兰
+共
+兲
+关
+兴
+兵
+其
+具
+典
+兹
+养
+兼
+兽
+冀
+内
+円
+冇
+冈
+冉
+冊
+册
+再
+冏
+冒
+冕
+冗
+写
+军
+农
+冠
+冢
+冤
+冥
+冨
+冪
+冬
+冯
+冰
+冲
+决
+况
+冶
+冷
+冻
+冼
+冽
+冾
+净
+凄
+准
+凇
+凈
+凉
+凋
+凌
+凍
+减
+凑
+凛
+凜
+凝
+几
+凡
+凤
+処
+凪
+凭
+凯
+凰
+凱
+凳
+凶
+凸
+凹
+出
+击
+函
+凿
+刀
+刁
+刃
+分
+切
+刈
+刊
+刍
+刎
+刑
+划
+列
+刘
+则
+刚
+创
+初
+删
+判
+別
+刨
+利
+刪
+别
+刮
+到
+制
+刷
+券
+刹
+刺
+刻
+刽
+剁
+剂
+剃
+則
+剉
+削
+剋
+剌
+前
+剎
+剐
+剑
+剔
+剖
+剛
+剜
+剝
+剣
+剤
+剥
+剧
+剩
+剪
+副
+割
+創
+剷
+剽
+剿
+劃
+劇
+劈
+劉
+劊
+劍
+劏
+劑
+力
+劝
+办
+功
+加
+务
+劣
+动
+助
+努
+劫
+劭
+励
+劲
+劳
+労
+劵
+効
+劾
+势
+勁
+勃
+勇
+勉
+勋
+勐
+勒
+動
+勖
+勘
+務
+勛
+勝
+勞
+募
+勢
+勤
+勧
+勳
+勵
+勸
+勺
+勻
+勾
+勿
+匀
+包
+匆
+匈
+匍
+匐
+匕
+化
+北
+匙
+匝
+匠
+匡
+匣
+匪
+匮
+匯
+匱
+匹
+区
+医
+匾
+匿
+區
+十
+千
+卅
+升
+午
+卉
+半
+卍
+华
+协
+卑
+卒
+卓
+協
+单
+卖
+南
+単
+博
+卜
+卞
+卟
+占
+卡
+卢
+卤
+卦
+卧
+卫
+卮
+卯
+印
+危
+即
+却
+卵
+卷
+卸
+卻
+卿
+厂
+厄
+厅
+历
+厉
+压
+厌
+厕
+厘
+厚
+厝
+原
+厢
+厥
+厦
+厨
+厩
+厭
+厮
+厲
+厳
+去
+县
+叁
+参
+參
+又
+叉
+及
+友
+双
+反
+収
+发
+叔
+取
+受
+变
+叙
+叛
+叟
+叠
+叡
+叢
+口
+古
+句
+另
+叨
+叩
+只
+叫
+召
+叭
+叮
+可
+台
+叱
+史
+右
+叵
+叶
+号
+司
+叹
+叻
+叼
+叽
+吁
+吃
+各
+吆
+合
+吉
+吊
+吋
+同
+名
+后
+吏
+吐
+向
+吒
+吓
+吕
+吖
+吗
+君
+吝
+吞
+吟
+吠
+吡
+否
+吧
+吨
+吩
+含
+听
+吭
+吮
+启
+吱
+吳
+吴
+吵
+吶
+吸
+吹
+吻
+吼
+吽
+吾
+呀
+呂
+呃
+呆
+呈
+告
+呋
+呎
+呐
+呓
+呕
+呗
+员
+呛
+呜
+呢
+呤
+呦
+周
+呱
+呲
+味
+呵
+呷
+呸
+呻
+呼
+命
+咀
+咁
+咂
+咄
+咆
+咋
+和
+咎
+咏
+咐
+咒
+咔
+咕
+咖
+咗
+咘
+咙
+咚
+咛
+咣
+咤
+咦
+咧
+咨
+咩
+咪
+咫
+咬
+咭
+咯
+咱
+咲
+咳
+咸
+咻
+咽
+咿
+哀
+品
+哂
+哄
+哆
+哇
+哈
+哉
+哋
+哌
+响
+哎
+哏
+哐
+哑
+哒
+哔
+哗
+哟
+員
+哥
+哦
+哧
+哨
+哩
+哪
+哭
+哮
+哲
+哺
+哼
+哽
+唁
+唄
+唆
+唇
+唉
+唏
+唐
+唑
+唔
+唠
+唤
+唧
+唬
+售
+唯
+唰
+唱
+唳
+唷
+唸
+唾
+啃
+啄
+商
+啉
+啊
+問
+啓
+啕
+啖
+啜
+啞
+啟
+啡
+啤
+啥
+啦
+啧
+啪
+啫
+啬
+啮
+啰
+啱
+啲
+啵
+啶
+啷
+啸
+啻
+啼
+啾
+喀
+喂
+喃
+善
+喆
+喇
+喉
+喊
+喋
+喎
+喏
+喔
+喘
+喙
+喚
+喜
+喝
+喟
+喧
+喪
+喫
+喬
+單
+喰
+喱
+喲
+喳
+喵
+営
+喷
+喹
+喺
+喻
+喽
+嗅
+嗆
+嗇
+嗎
+嗑
+嗒
+嗓
+嗔
+嗖
+嗚
+嗜
+嗝
+嗟
+嗡
+嗣
+嗤
+嗦
+嗨
+嗪
+嗬
+嗯
+嗰
+嗲
+嗳
+嗶
+嗷
+嗽
+嘀
+嘅
+嘆
+嘈
+嘉
+嘌
+嘍
+嘎
+嘔
+嘖
+嘗
+嘘
+嘚
+嘛
+嘜
+嘞
+嘟
+嘢
+嘣
+嘤
+嘧
+嘩
+嘭
+嘮
+嘯
+嘰
+嘱
+嘲
+嘴
+嘶
+嘸
+嘹
+嘻
+嘿
+噁
+噌
+噎
+噓
+噔
+噗
+噙
+噜
+噠
+噢
+噤
+器
+噩
+噪
+噬
+噱
+噴
+噶
+噸
+噹
+噻
+噼
+嚀
+嚇
+嚎
+嚏
+嚐
+嚓
+嚕
+嚟
+嚣
+嚥
+嚨
+嚮
+嚴
+嚷
+嚼
+囂
+囉
+囊
+囍
+囑
+囔
+囗
+囚
+四
+囝
+回
+囟
+因
+囡
+团
+団
+囤
+囧
+囪
+囫
+园
+困
+囱
+囲
+図
+围
+囹
+固
+国
+图
+囿
+圃
+圄
+圆
+圈
+國
+圍
+圏
+園
+圓
+圖
+團
+圜
+土
+圣
+圧
+在
+圩
+圭
+地
+圳
+场
+圻
+圾
+址
+坂
+均
+坊
+坍
+坎
+坏
+坐
+坑
+块
+坚
+坛
+坝
+坞
+坟
+坠
+坡
+坤
+坦
+坨
+坪
+坯
+坳
+坵
+坷
+垂
+垃
+垄
+型
+垒
+垚
+垛
+垠
+垢
+垣
+垦
+垩
+垫
+垭
+垮
+垵
+埂
+埃
+埋
+城
+埔
+埕
+埗
+域
+埠
+埤
+埵
+執
+埸
+培
+基
+埼
+堀
+堂
+堃
+堅
+堆
+堇
+堑
+堕
+堙
+堡
+堤
+堪
+堯
+堰
+報
+場
+堵
+堺
+堿
+塊
+塌
+塑
+塔
+塗
+塘
+塚
+塞
+塢
+塩
+填
+塬
+塭
+塵
+塾
+墀
+境
+墅
+墉
+墊
+墒
+墓
+増
+墘
+墙
+墜
+增
+墟
+墨
+墩
+墮
+墳
+墻
+墾
+壁
+壅
+壆
+壇
+壊
+壑
+壓
+壕
+壘
+壞
+壟
+壢
+壤
+壩
+士
+壬
+壮
+壯
+声
+売
+壳
+壶
+壹
+壺
+壽
+处
+备
+変
+复
+夏
+夔
+夕
+外
+夙
+多
+夜
+够
+夠
+夢
+夥
+大
+天
+太
+夫
+夭
+央
+夯
+失
+头
+夷
+夸
+夹
+夺
+夾
+奂
+奄
+奇
+奈
+奉
+奋
+奎
+奏
+奐
+契
+奔
+奕
+奖
+套
+奘
+奚
+奠
+奢
+奥
+奧
+奪
+奬
+奮
+女
+奴
+奶
+奸
+她
+好
+如
+妃
+妄
+妆
+妇
+妈
+妊
+妍
+妒
+妓
+妖
+妘
+妙
+妝
+妞
+妣
+妤
+妥
+妨
+妩
+妪
+妮
+妲
+妳
+妹
+妻
+妾
+姆
+姉
+姊
+始
+姍
+姐
+姑
+姒
+姓
+委
+姗
+姚
+姜
+姝
+姣
+姥
+姦
+姨
+姪
+姫
+姬
+姹
+姻
+姿
+威
+娃
+娄
+娅
+娆
+娇
+娉
+娑
+娓
+娘
+娛
+娜
+娟
+娠
+娣
+娥
+娩
+娱
+娲
+娴
+娶
+娼
+婀
+婁
+婆
+婉
+婊
+婕
+婚
+婢
+婦
+婧
+婪
+婭
+婴
+婵
+婶
+婷
+婺
+婿
+媒
+媚
+媛
+媞
+媧
+媲
+媳
+媽
+媾
+嫁
+嫂
+嫉
+嫌
+嫑
+嫔
+嫖
+嫘
+嫚
+嫡
+嫣
+嫦
+嫩
+嫲
+嫵
+嫻
+嬅
+嬉
+嬌
+嬗
+嬛
+嬢
+嬤
+嬪
+嬰
+嬴
+嬷
+嬸
+嬿
+孀
+孃
+子
+孑
+孔
+孕
+孖
+字
+存
+孙
+孚
+孛
+孜
+孝
+孟
+孢
+季
+孤
+学
+孩
+孪
+孫
+孬
+孰
+孱
+孳
+孵
+學
+孺
+孽
+孿
+宁
+它
+宅
+宇
+守
+安
+宋
+完
+宏
+宓
+宕
+宗
+官
+宙
+定
+宛
+宜
+宝
+实
+実
+宠
+审
+客
+宣
+室
+宥
+宦
+宪
+宫
+宮
+宰
+害
+宴
+宵
+家
+宸
+容
+宽
+宾
+宿
+寂
+寄
+寅
+密
+寇
+富
+寐
+寒
+寓
+寛
+寝
+寞
+察
+寡
+寢
+寥
+實
+寧
+寨
+審
+寫
+寬
+寮
+寰
+寵
+寶
+寸
+对
+寺
+寻
+导
+対
+寿
+封
+専
+射
+将
+將
+專
+尉
+尊
+尋
+對
+導
+小
+少
+尔
+尕
+尖
+尘
+尚
+尝
+尤
+尧
+尬
+就
+尴
+尷
+尸
+尹
+尺
+尻
+尼
+尽
+尾
+尿
+局
+屁
+层
+屄
+居
+屆
+屈
+屉
+届
+屋
+屌
+屍
+屎
+屏
+屐
+屑
+展
+屜
+属
+屠
+屡
+屢
+層
+履
+屬
+屯
+山
+屹
+屿
+岀
+岁
+岂
+岌
+岐
+岑
+岔
+岖
+岗
+岘
+岙
+岚
+岛
+岡
+岩
+岫
+岬
+岭
+岱
+岳
+岷
+岸
+峇
+峋
+峒
+峙
+峡
+峤
+峥
+峦
+峨
+峪
+峭
+峯
+峰
+峴
+島
+峻
+峽
+崁
+崂
+崆
+崇
+崎
+崑
+崔
+崖
+崗
+崙
+崛
+崧
+崩
+崭
+崴
+崽
+嵇
+嵊
+嵋
+嵌
+嵐
+嵘
+嵩
+嵬
+嵯
+嶂
+嶄
+嶇
+嶋
+嶙
+嶺
+嶼
+嶽
+巅
+巍
+巒
+巔
+巖
+川
+州
+巡
+巢
+工
+左
+巧
+巨
+巩
+巫
+差
+己
+已
+巳
+巴
+巷
+巻
+巽
+巾
+巿
+币
+市
+布
+帅
+帆
+师
+希
+帐
+帑
+帕
+帖
+帘
+帚
+帛
+帜
+帝
+帥
+带
+帧
+師
+席
+帮
+帯
+帰
+帳
+帶
+帷
+常
+帼
+帽
+幀
+幂
+幄
+幅
+幌
+幔
+幕
+幟
+幡
+幢
+幣
+幫
+干
+平
+年
+并
+幸
+幹
+幺
+幻
+幼
+幽
+幾
+广
+庁
+広
+庄
+庆
+庇
+床
+序
+庐
+库
+应
+底
+庖
+店
+庙
+庚
+府
+庞
+废
+庠
+度
+座
+庫
+庭
+庵
+庶
+康
+庸
+庹
+庾
+廁
+廂
+廃
+廈
+廉
+廊
+廓
+廖
+廚
+廝
+廟
+廠
+廢
+廣
+廬
+廳
+延
+廷
+建
+廿
+开
+弁
+异
+弃
+弄
+弈
+弊
+弋
+式
+弑
+弒
+弓
+弔
+引
+弗
+弘
+弛
+弟
+张
+弥
+弦
+弧
+弩
+弭
+弯
+弱
+張
+強
+弹
+强
+弼
+弾
+彅
+彆
+彈
+彌
+彎
+归
+当
+录
+彗
+彙
+彝
+形
+彤
+彥
+彦
+彧
+彩
+彪
+彫
+彬
+彭
+彰
+影
+彷
+役
+彻
+彼
+彿
+往
+征
+径
+待
+徇
+很
+徉
+徊
+律
+後
+徐
+徑
+徒
+従
+徕
+得
+徘
+徙
+徜
+從
+徠
+御
+徨
+復
+循
+徬
+微
+徳
+徴
+徵
+德
+徹
+徼
+徽
+心
+必
+忆
+忌
+忍
+忏
+忐
+忑
+忒
+忖
+志
+忘
+忙
+応
+忠
+忡
+忤
+忧
+忪
+快
+忱
+念
+忻
+忽
+忿
+怀
+态
+怂
+怅
+怆
+怎
+怏
+怒
+怔
+怕
+怖
+怙
+怜
+思
+怠
+怡
+急
+怦
+性
+怨
+怪
+怯
+怵
+总
+怼
+恁
+恃
+恆
+恋
+恍
+恐
+恒
+恕
+恙
+恚
+恢
+恣
+恤
+恥
+恨
+恩
+恪
+恫
+恬
+恭
+息
+恰
+恳
+恵
+恶
+恸
+恺
+恻
+恼
+恿
+悄
+悅
+悉
+悌
+悍
+悔
+悖
+悚
+悟
+悠
+患
+悦
+您
+悩
+悪
+悬
+悯
+悱
+悲
+悴
+悵
+悶
+悸
+悻
+悼
+悽
+情
+惆
+惇
+惊
+惋
+惑
+惕
+惘
+惚
+惜
+惟
+惠
+惡
+惦
+惧
+惨
+惩
+惫
+惬
+惭
+惮
+惯
+惰
+惱
+想
+惴
+惶
+惹
+惺
+愁
+愆
+愈
+愉
+愍
+意
+愕
+愚
+愛
+愜
+感
+愣
+愤
+愧
+愫
+愷
+愿
+慄
+慈
+態
+慌
+慎
+慑
+慕
+慘
+慚
+慟
+慢
+慣
+慧
+慨
+慫
+慮
+慰
+慳
+慵
+慶
+慷
+慾
+憂
+憊
+憋
+憎
+憐
+憑
+憔
+憚
+憤
+憧
+憨
+憩
+憫
+憬
+憲
+憶
+憾
+懂
+懇
+懈
+應
+懊
+懋
+懑
+懒
+懦
+懲
+懵
+懶
+懷
+懸
+懺
+懼
+懾
+懿
+戀
+戈
+戊
+戌
+戍
+戎
+戏
+成
+我
+戒
+戕
+或
+战
+戚
+戛
+戟
+戡
+戦
+截
+戬
+戮
+戰
+戲
+戳
+戴
+戶
+户
+戸
+戻
+戾
+房
+所
+扁
+扇
+扈
+扉
+手
+才
+扎
+扑
+扒
+打
+扔
+払
+托
+扛
+扣
+扦
+执
+扩
+扪
+扫
+扬
+扭
+扮
+扯
+扰
+扱
+扳
+扶
+批
+扼
+找
+承
+技
+抄
+抉
+把
+抑
+抒
+抓
+投
+抖
+抗
+折
+抚
+抛
+抜
+択
+抟
+抠
+抡
+抢
+护
+报
+抨
+披
+抬
+抱
+抵
+抹
+押
+抽
+抿
+拂
+拄
+担
+拆
+拇
+拈
+拉
+拋
+拌
+拍
+拎
+拐
+拒
+拓
+拔
+拖
+拗
+拘
+拙
+拚
+招
+拜
+拟
+拡
+拢
+拣
+拥
+拦
+拧
+拨
+择
+括
+拭
+拮
+拯
+拱
+拳
+拴
+拷
+拼
+拽
+拾
+拿
+持
+挂
+指
+挈
+按
+挎
+挑
+挖
+挙
+挚
+挛
+挝
+挞
+挟
+挠
+挡
+挣
+挤
+挥
+挨
+挪
+挫
+振
+挲
+挹
+挺
+挽
+挾
+捂
+捅
+捆
+捉
+捋
+捌
+捍
+捎
+捏
+捐
+捕
+捞
+损
+捡
+换
+捣
+捧
+捨
+捩
+据
+捱
+捲
+捶
+捷
+捺
+捻
+掀
+掂
+掃
+掇
+授
+掉
+掌
+掏
+掐
+排
+掖
+掘
+掙
+掛
+掠
+採
+探
+掣
+接
+控
+推
+掩
+措
+掬
+掰
+掲
+掳
+掴
+掷
+掸
+掺
+揀
+揃
+揄
+揆
+揉
+揍
+描
+提
+插
+揖
+揚
+換
+握
+揣
+揩
+揪
+揭
+揮
+援
+揶
+揸
+揹
+揽
+搀
+搁
+搂
+搅
+損
+搏
+搐
+搓
+搔
+搖
+搗
+搜
+搞
+搡
+搪
+搬
+搭
+搵
+搶
+携
+搽
+摀
+摁
+摄
+摆
+摇
+摈
+摊
+摒
+摔
+摘
+摞
+摟
+摧
+摩
+摯
+摳
+摸
+摹
+摺
+摻
+撂
+撃
+撅
+撇
+撈
+撐
+撑
+撒
+撓
+撕
+撚
+撞
+撤
+撥
+撩
+撫
+撬
+播
+撮
+撰
+撲
+撵
+撷
+撸
+撻
+撼
+撿
+擀
+擁
+擂
+擄
+擅
+擇
+擊
+擋
+操
+擎
+擒
+擔
+擘
+據
+擞
+擠
+擡
+擢
+擦
+擬
+擰
+擱
+擲
+擴
+擷
+擺
+擼
+擾
+攀
+攏
+攒
+攔
+攘
+攙
+攜
+攝
+攞
+攢
+攣
+攤
+攥
+攪
+攫
+攬
+支
+收
+攸
+改
+攻
+放
+政
+故
+效
+敌
+敍
+敎
+敏
+救
+敕
+敖
+敗
+敘
+教
+敛
+敝
+敞
+敢
+散
+敦
+敬
+数
+敲
+整
+敵
+敷
+數
+斂
+斃
+文
+斋
+斌
+斎
+斐
+斑
+斓
+斗
+料
+斛
+斜
+斟
+斡
+斤
+斥
+斧
+斩
+斫
+斬
+断
+斯
+新
+斷
+方
+於
+施
+旁
+旃
+旅
+旋
+旌
+旎
+族
+旖
+旗
+无
+既
+日
+旦
+旧
+旨
+早
+旬
+旭
+旮
+旱
+时
+旷
+旺
+旻
+昀
+昂
+昆
+昇
+昉
+昊
+昌
+明
+昏
+易
+昔
+昕
+昙
+星
+映
+春
+昧
+昨
+昭
+是
+昱
+昴
+昵
+昶
+昼
+显
+晁
+時
+晃
+晉
+晋
+晌
+晏
+晒
+晓
+晔
+晕
+晖
+晗
+晚
+晝
+晞
+晟
+晤
+晦
+晨
+晩
+普
+景
+晰
+晴
+晶
+晷
+智
+晾
+暂
+暄
+暇
+暈
+暉
+暌
+暐
+暑
+暖
+暗
+暝
+暢
+暧
+暨
+暫
+暮
+暱
+暴
+暸
+暹
+曄
+曆
+曇
+曉
+曖
+曙
+曜
+曝
+曠
+曦
+曬
+曰
+曲
+曳
+更
+書
+曹
+曼
+曾
+替
+最
+會
+月
+有
+朋
+服
+朐
+朔
+朕
+朗
+望
+朝
+期
+朦
+朧
+木
+未
+末
+本
+札
+朮
+术
+朱
+朴
+朵
+机
+朽
+杀
+杂
+权
+杆
+杈
+杉
+李
+杏
+材
+村
+杓
+杖
+杜
+杞
+束
+杠
+条
+来
+杨
+杭
+杯
+杰
+東
+杳
+杵
+杷
+杼
+松
+板
+极
+构
+枇
+枉
+枋
+析
+枕
+林
+枚
+果
+枝
+枢
+枣
+枪
+枫
+枭
+枯
+枰
+枱
+枳
+架
+枷
+枸
+柄
+柏
+某
+柑
+柒
+染
+柔
+柘
+柚
+柜
+柞
+柠
+柢
+查
+柩
+柬
+柯
+柱
+柳
+柴
+柵
+査
+柿
+栀
+栃
+栄
+栅
+标
+栈
+栉
+栋
+栎
+栏
+树
+栓
+栖
+栗
+校
+栩
+株
+样
+核
+根
+格
+栽
+栾
+桀
+桁
+桂
+桃
+桅
+框
+案
+桉
+桌
+桎
+桐
+桑
+桓
+桔
+桜
+桠
+桡
+桢
+档
+桥
+桦
+桧
+桨
+桩
+桶
+桿
+梁
+梅
+梆
+梏
+梓
+梗
+條
+梟
+梢
+梦
+梧
+梨
+梭
+梯
+械
+梳
+梵
+梶
+检
+棂
+棄
+棉
+棋
+棍
+棒
+棕
+棗
+棘
+棚
+棟
+棠
+棣
+棧
+森
+棱
+棲
+棵
+棹
+棺
+椁
+椅
+椋
+植
+椎
+椒
+検
+椪
+椭
+椰
+椹
+椽
+椿
+楂
+楊
+楓
+楔
+楚
+楝
+楞
+楠
+楣
+楨
+楫
+業
+楮
+極
+楷
+楸
+楹
+楼
+楽
+概
+榄
+榆
+榈
+榉
+榔
+榕
+榖
+榛
+榜
+榨
+榫
+榭
+榮
+榱
+榴
+榷
+榻
+槁
+槃
+構
+槌
+槍
+槎
+槐
+槓
+様
+槛
+槟
+槤
+槭
+槲
+槳
+槻
+槽
+槿
+樁
+樂
+樊
+樑
+樓
+標
+樞
+樟
+模
+樣
+権
+横
+樫
+樯
+樱
+樵
+樸
+樹
+樺
+樽
+樾
+橄
+橇
+橋
+橐
+橘
+橙
+機
+橡
+橢
+橫
+橱
+橹
+橼
+檀
+檄
+檎
+檐
+檔
+檗
+檜
+檢
+檬
+檯
+檳
+檸
+檻
+櫃
+櫚
+櫛
+櫥
+櫸
+櫻
+欄
+權
+欒
+欖
+欠
+次
+欢
+欣
+欧
+欲
+欸
+欺
+欽
+款
+歆
+歇
+歉
+歌
+歎
+歐
+歓
+歙
+歛
+歡
+止
+正
+此
+步
+武
+歧
+歩
+歪
+歯
+歲
+歳
+歴
+歷
+歸
+歹
+死
+歼
+殁
+殃
+殆
+殇
+殉
+殊
+残
+殒
+殓
+殖
+殘
+殞
+殡
+殤
+殭
+殯
+殲
+殴
+段
+殷
+殺
+殼
+殿
+毀
+毁
+毂
+毅
+毆
+毋
+母
+毎
+每
+毒
+毓
+比
+毕
+毗
+毘
+毙
+毛
+毡
+毫
+毯
+毽
+氈
+氏
+氐
+民
+氓
+气
+氖
+気
+氙
+氛
+氟
+氡
+氢
+氣
+氤
+氦
+氧
+氨
+氪
+氫
+氮
+氯
+氰
+氲
+水
+氷
+永
+氹
+氾
+汀
+汁
+求
+汆
+汇
+汉
+汎
+汐
+汕
+汗
+汙
+汛
+汝
+汞
+江
+池
+污
+汤
+汨
+汩
+汪
+汰
+汲
+汴
+汶
+汹
+決
+汽
+汾
+沁
+沂
+沃
+沅
+沈
+沉
+沌
+沏
+沐
+沒
+沓
+沖
+沙
+沛
+沟
+没
+沢
+沣
+沥
+沦
+沧
+沪
+沫
+沭
+沮
+沱
+河
+沸
+油
+治
+沼
+沽
+沾
+沿
+況
+泄
+泉
+泊
+泌
+泓
+法
+泗
+泛
+泞
+泠
+泡
+波
+泣
+泥
+注
+泪
+泫
+泮
+泯
+泰
+泱
+泳
+泵
+泷
+泸
+泻
+泼
+泽
+泾
+洁
+洄
+洋
+洒
+洗
+洙
+洛
+洞
+津
+洩
+洪
+洮
+洱
+洲
+洵
+洶
+洸
+洹
+活
+洼
+洽
+派
+流
+浃
+浄
+浅
+浆
+浇
+浊
+测
+济
+浏
+浑
+浒
+浓
+浔
+浙
+浚
+浜
+浣
+浦
+浩
+浪
+浬
+浮
+浯
+浴
+海
+浸
+涂
+涅
+涇
+消
+涉
+涌
+涎
+涓
+涔
+涕
+涙
+涛
+涝
+涞
+涟
+涠
+涡
+涣
+涤
+润
+涧
+涨
+涩
+涪
+涮
+涯
+液
+涵
+涸
+涼
+涿
+淀
+淄
+淅
+淆
+淇
+淋
+淌
+淑
+淒
+淖
+淘
+淙
+淚
+淞
+淡
+淤
+淦
+淨
+淩
+淪
+淫
+淬
+淮
+深
+淳
+淵
+混
+淹
+淺
+添
+淼
+清
+済
+渉
+渊
+渋
+渍
+渎
+渐
+渔
+渗
+渙
+渚
+減
+渝
+渠
+渡
+渣
+渤
+渥
+渦
+温
+測
+渭
+港
+渲
+渴
+游
+渺
+渾
+湃
+湄
+湊
+湍
+湖
+湘
+湛
+湟
+湧
+湫
+湮
+湯
+湳
+湾
+湿
+満
+溃
+溅
+溉
+溏
+源
+準
+溜
+溝
+溟
+溢
+溥
+溧
+溪
+溫
+溯
+溱
+溴
+溶
+溺
+溼
+滁
+滂
+滄
+滅
+滇
+滋
+滌
+滑
+滓
+滔
+滕
+滙
+滚
+滝
+滞
+滟
+满
+滢
+滤
+滥
+滦
+滨
+滩
+滬
+滯
+滲
+滴
+滷
+滸
+滾
+滿
+漁
+漂
+漆
+漉
+漏
+漓
+演
+漕
+漠
+漢
+漣
+漩
+漪
+漫
+漬
+漯
+漱
+漲
+漳
+漸
+漾
+漿
+潆
+潇
+潋
+潍
+潑
+潔
+潘
+潛
+潜
+潞
+潟
+潢
+潤
+潦
+潧
+潭
+潮
+潰
+潴
+潸
+潺
+潼
+澀
+澄
+澆
+澈
+澍
+澎
+澗
+澜
+澡
+澤
+澧
+澱
+澳
+澹
+激
+濁
+濂
+濃
+濑
+濒
+濕
+濘
+濛
+濟
+濠
+濡
+濤
+濫
+濬
+濮
+濯
+濱
+濺
+濾
+瀅
+瀆
+瀉
+瀋
+瀏
+瀑
+瀕
+瀘
+瀚
+瀛
+瀝
+瀞
+瀟
+瀧
+瀨
+瀬
+瀰
+瀾
+灌
+灏
+灑
+灘
+灝
+灞
+灣
+火
+灬
+灭
+灯
+灰
+灵
+灶
+灸
+灼
+災
+灾
+灿
+炀
+炁
+炅
+炉
+炊
+炎
+炒
+炔
+炕
+炖
+炙
+炜
+炫
+炬
+炭
+炮
+炯
+炳
+炷
+炸
+点
+為
+炼
+炽
+烁
+烂
+烃
+烈
+烊
+烏
+烘
+烙
+烛
+烟
+烤
+烦
+烧
+烨
+烩
+烫
+烬
+热
+烯
+烷
+烹
+烽
+焉
+焊
+焕
+焖
+焗
+焘
+焙
+焚
+焜
+無
+焦
+焯
+焰
+焱
+然
+焼
+煅
+煉
+煊
+煌
+煎
+煒
+煖
+煙
+煜
+煞
+煤
+煥
+煦
+照
+煨
+煩
+煮
+煲
+煸
+煽
+熄
+熊
+熏
+熒
+熔
+熙
+熟
+熠
+熨
+熬
+熱
+熵
+熹
+熾
+燁
+燃
+燄
+燈
+燉
+燊
+燎
+燒
+燔
+燕
+燙
+燜
+營
+燥
+燦
+燧
+燭
+燮
+燴
+燻
+燼
+燿
+爆
+爍
+爐
+爛
+爪
+爬
+爭
+爰
+爱
+爲
+爵
+父
+爷
+爸
+爹
+爺
+爻
+爽
+爾
+牆
+片
+版
+牌
+牍
+牒
+牙
+牛
+牝
+牟
+牠
+牡
+牢
+牦
+牧
+物
+牯
+牲
+牴
+牵
+特
+牺
+牽
+犀
+犁
+犄
+犊
+犍
+犒
+犢
+犧
+犬
+犯
+状
+犷
+犸
+犹
+狀
+狂
+狄
+狈
+狎
+狐
+狒
+狗
+狙
+狞
+狠
+狡
+狩
+独
+狭
+狮
+狰
+狱
+狸
+狹
+狼
+狽
+猎
+猕
+猖
+猗
+猙
+猛
+猜
+猝
+猥
+猩
+猪
+猫
+猬
+献
+猴
+猶
+猷
+猾
+猿
+獄
+獅
+獎
+獐
+獒
+獗
+獠
+獣
+獨
+獭
+獰
+獲
+獵
+獷
+獸
+獺
+獻
+獼
+獾
+玄
+率
+玉
+王
+玑
+玖
+玛
+玟
+玠
+玥
+玩
+玫
+玮
+环
+现
+玲
+玳
+玷
+玺
+玻
+珀
+珂
+珅
+珈
+珉
+珊
+珍
+珏
+珐
+珑
+珙
+珞
+珠
+珣
+珥
+珩
+珪
+班
+珮
+珲
+珺
+現
+球
+琅
+理
+琇
+琉
+琊
+琍
+琏
+琐
+琛
+琢
+琥
+琦
+琨
+琪
+琬
+琮
+琰
+琲
+琳
+琴
+琵
+琶
+琺
+琼
+瑀
+瑁
+瑄
+瑋
+瑕
+瑗
+瑙
+瑚
+瑛
+瑜
+瑞
+瑟
+瑠
+瑣
+瑤
+瑩
+瑪
+瑯
+瑰
+瑶
+瑾
+璀
+璁
+璃
+璇
+璉
+璋
+璎
+璐
+璜
+璞
+璟
+璧
+璨
+環
+璽
+璿
+瓊
+瓏
+瓒
+瓜
+瓢
+瓣
+瓤
+瓦
+瓮
+瓯
+瓴
+瓶
+瓷
+甄
+甌
+甕
+甘
+甙
+甚
+甜
+生
+產
+産
+甥
+甦
+用
+甩
+甫
+甬
+甭
+甯
+田
+由
+甲
+申
+电
+男
+甸
+町
+画
+甾
+畀
+畅
+界
+畏
+畑
+畔
+留
+畜
+畝
+畢
+略
+畦
+番
+畫
+異
+畲
+畳
+畴
+當
+畸
+畹
+畿
+疆
+疇
+疊
+疏
+疑
+疔
+疖
+疗
+疙
+疚
+疝
+疟
+疡
+疣
+疤
+疥
+疫
+疮
+疯
+疱
+疲
+疳
+疵
+疸
+疹
+疼
+疽
+疾
+痂
+病
+症
+痈
+痉
+痊
+痍
+痒
+痔
+痕
+痘
+痙
+痛
+痞
+痠
+痢
+痣
+痤
+痧
+痨
+痪
+痫
+痰
+痱
+痴
+痹
+痺
+痼
+痿
+瘀
+瘁
+瘋
+瘍
+瘓
+瘘
+瘙
+瘟
+瘠
+瘡
+瘢
+瘤
+瘦
+瘧
+瘩
+瘪
+瘫
+瘴
+瘸
+瘾
+療
+癇
+癌
+癒
+癖
+癜
+癞
+癡
+癢
+癣
+癥
+癫
+癬
+癮
+癱
+癲
+癸
+発
+登
+發
+白
+百
+皂
+的
+皆
+皇
+皈
+皋
+皎
+皑
+皓
+皖
+皙
+皚
+皮
+皰
+皱
+皴
+皺
+皿
+盂
+盃
+盅
+盆
+盈
+益
+盎
+盏
+盐
+监
+盒
+盔
+盖
+盗
+盘
+盛
+盜
+盞
+盟
+盡
+監
+盤
+盥
+盧
+盪
+目
+盯
+盱
+盲
+直
+相
+盹
+盼
+盾
+省
+眈
+眉
+看
+県
+眙
+眞
+真
+眠
+眦
+眨
+眩
+眯
+眶
+眷
+眸
+眺
+眼
+眾
+着
+睁
+睇
+睏
+睐
+睑
+睛
+睜
+睞
+睡
+睢
+督
+睥
+睦
+睨
+睪
+睫
+睬
+睹
+睽
+睾
+睿
+瞄
+瞅
+瞇
+瞋
+瞌
+瞎
+瞑
+瞒
+瞓
+瞞
+瞟
+瞠
+瞥
+瞧
+瞩
+瞪
+瞬
+瞭
+瞰
+瞳
+瞻
+瞼
+瞿
+矇
+矍
+矗
+矚
+矛
+矜
+矢
+矣
+知
+矩
+矫
+短
+矮
+矯
+石
+矶
+矽
+矾
+矿
+码
+砂
+砌
+砍
+砒
+研
+砖
+砗
+砚
+砝
+砣
+砥
+砧
+砭
+砰
+砲
+破
+砷
+砸
+砺
+砼
+砾
+础
+硅
+硐
+硒
+硕
+硝
+硫
+硬
+确
+硯
+硼
+碁
+碇
+碉
+碌
+碍
+碎
+碑
+碓
+碗
+碘
+碚
+碛
+碟
+碣
+碧
+碩
+碰
+碱
+碳
+碴
+確
+碼
+碾
+磁
+磅
+磊
+磋
+磐
+磕
+磚
+磡
+磨
+磬
+磯
+磲
+磷
+磺
+礁
+礎
+礙
+礡
+礦
+礪
+礫
+礴
+示
+礼
+社
+祀
+祁
+祂
+祇
+祈
+祉
+祎
+祐
+祕
+祖
+祗
+祚
+祛
+祜
+祝
+神
+祟
+祠
+祢
+祥
+票
+祭
+祯
+祷
+祸
+祺
+祿
+禀
+禁
+禄
+禅
+禍
+禎
+福
+禛
+禦
+禧
+禪
+禮
+禱
+禹
+禺
+离
+禽
+禾
+禿
+秀
+私
+秃
+秆
+秉
+秋
+种
+科
+秒
+秘
+租
+秣
+秤
+秦
+秧
+秩
+秭
+积
+称
+秸
+移
+秽
+稀
+稅
+程
+稍
+税
+稔
+稗
+稚
+稜
+稞
+稟
+稠
+稣
+種
+稱
+稲
+稳
+稷
+稹
+稻
+稼
+稽
+稿
+穀
+穂
+穆
+穌
+積
+穎
+穗
+穢
+穩
+穫
+穴
+究
+穷
+穹
+空
+穿
+突
+窃
+窄
+窈
+窍
+窑
+窒
+窓
+窕
+窖
+窗
+窘
+窜
+窝
+窟
+窠
+窥
+窦
+窨
+窩
+窪
+窮
+窯
+窺
+窿
+竄
+竅
+竇
+竊
+立
+竖
+站
+竜
+竞
+竟
+章
+竣
+童
+竭
+端
+競
+竹
+竺
+竽
+竿
+笃
+笆
+笈
+笋
+笏
+笑
+笔
+笙
+笛
+笞
+笠
+符
+笨
+第
+笹
+笺
+笼
+筆
+等
+筊
+筋
+筍
+筏
+筐
+筑
+筒
+答
+策
+筛
+筝
+筠
+筱
+筲
+筵
+筷
+筹
+签
+简
+箇
+箋
+箍
+箏
+箐
+箔
+箕
+算
+箝
+管
+箩
+箫
+箭
+箱
+箴
+箸
+節
+篁
+範
+篆
+篇
+築
+篑
+篓
+篙
+篝
+篠
+篡
+篤
+篩
+篪
+篮
+篱
+篷
+簇
+簌
+簍
+簡
+簦
+簧
+簪
+簫
+簷
+簸
+簽
+簾
+簿
+籁
+籃
+籌
+籍
+籐
+籟
+籠
+籤
+籬
+籮
+籲
+米
+类
+籼
+籽
+粄
+粉
+粑
+粒
+粕
+粗
+粘
+粟
+粤
+粥
+粧
+粪
+粮
+粱
+粲
+粳
+粵
+粹
+粼
+粽
+精
+粿
+糅
+糊
+糍
+糕
+糖
+糗
+糙
+糜
+糞
+糟
+糠
+糧
+糬
+糯
+糰
+糸
+系
+糾
+紀
+紂
+約
+紅
+紉
+紊
+紋
+納
+紐
+紓
+純
+紗
+紘
+紙
+級
+紛
+紜
+素
+紡
+索
+紧
+紫
+紮
+累
+細
+紳
+紹
+紺
+終
+絃
+組
+絆
+経
+結
+絕
+絞
+絡
+絢
+給
+絨
+絮
+統
+絲
+絳
+絵
+絶
+絹
+綁
+綏
+綑
+經
+継
+続
+綜
+綠
+綢
+綦
+綫
+綬
+維
+綱
+網
+綴
+綵
+綸
+綺
+綻
+綽
+綾
+綿
+緊
+緋
+総
+緑
+緒
+緘
+線
+緝
+緞
+締
+緣
+編
+緩
+緬
+緯
+練
+緹
+緻
+縁
+縄
+縈
+縛
+縝
+縣
+縫
+縮
+縱
+縴
+縷
+總
+績
+繁
+繃
+繆
+繇
+繋
+織
+繕
+繚
+繞
+繡
+繩
+繪
+繫
+繭
+繳
+繹
+繼
+繽
+纂
+續
+纍
+纏
+纓
+纔
+纖
+纜
+纠
+红
+纣
+纤
+约
+级
+纨
+纪
+纫
+纬
+纭
+纯
+纰
+纱
+纲
+纳
+纵
+纶
+纷
+纸
+纹
+纺
+纽
+纾
+线
+绀
+练
+组
+绅
+细
+织
+终
+绊
+绍
+绎
+经
+绑
+绒
+结
+绔
+绕
+绘
+给
+绚
+绛
+络
+绝
+绞
+统
+绡
+绢
+绣
+绥
+绦
+继
+绩
+绪
+绫
+续
+绮
+绯
+绰
+绳
+维
+绵
+绶
+绷
+绸
+绻
+综
+绽
+绾
+绿
+缀
+缄
+缅
+缆
+缇
+缈
+缉
+缎
+缓
+缔
+缕
+编
+缘
+缙
+缚
+缜
+缝
+缠
+缢
+缤
+缥
+缨
+缩
+缪
+缭
+缮
+缰
+缱
+缴
+缸
+缺
+缽
+罂
+罄
+罌
+罐
+网
+罔
+罕
+罗
+罚
+罡
+罢
+罩
+罪
+置
+罰
+署
+罵
+罷
+罹
+羁
+羅
+羈
+羊
+羌
+美
+羔
+羚
+羞
+羟
+羡
+羣
+群
+羥
+羧
+羨
+義
+羯
+羲
+羸
+羹
+羽
+羿
+翁
+翅
+翊
+翌
+翎
+習
+翔
+翘
+翟
+翠
+翡
+翦
+翩
+翰
+翱
+翳
+翹
+翻
+翼
+耀
+老
+考
+耄
+者
+耆
+耋
+而
+耍
+耐
+耒
+耕
+耗
+耘
+耙
+耦
+耨
+耳
+耶
+耷
+耸
+耻
+耽
+耿
+聂
+聆
+聊
+聋
+职
+聒
+联
+聖
+聘
+聚
+聞
+聪
+聯
+聰
+聲
+聳
+聴
+聶
+職
+聽
+聾
+聿
+肃
+肄
+肅
+肆
+肇
+肉
+肋
+肌
+肏
+肓
+肖
+肘
+肚
+肛
+肝
+肠
+股
+肢
+肤
+肥
+肩
+肪
+肮
+肯
+肱
+育
+肴
+肺
+肽
+肾
+肿
+胀
+胁
+胃
+胄
+胆
+背
+胍
+胎
+胖
+胚
+胛
+胜
+胝
+胞
+胡
+胤
+胥
+胧
+胫
+胭
+胯
+胰
+胱
+胳
+胴
+胶
+胸
+胺
+能
+脂
+脅
+脆
+脇
+脈
+脉
+脊
+脍
+脏
+脐
+脑
+脓
+脖
+脘
+脚
+脛
+脣
+脩
+脫
+脯
+脱
+脲
+脳
+脸
+脹
+脾
+腆
+腈
+腊
+腋
+腌
+腎
+腐
+腑
+腓
+腔
+腕
+腥
+腦
+腩
+腫
+腭
+腮
+腰
+腱
+腳
+腴
+腸
+腹
+腺
+腻
+腼
+腾
+腿
+膀
+膈
+膊
+膏
+膑
+膘
+膚
+膛
+膜
+膝
+膠
+膦
+膨
+膩
+膳
+膺
+膻
+膽
+膾
+膿
+臀
+臂
+臃
+臆
+臉
+臊
+臍
+臓
+臘
+臟
+臣
+臥
+臧
+臨
+自
+臬
+臭
+至
+致
+臺
+臻
+臼
+臾
+舀
+舂
+舅
+舆
+與
+興
+舉
+舊
+舌
+舍
+舎
+舐
+舒
+舔
+舖
+舗
+舛
+舜
+舞
+舟
+航
+舫
+般
+舰
+舱
+舵
+舶
+舷
+舸
+船
+舺
+舾
+艇
+艋
+艘
+艙
+艦
+艮
+良
+艰
+艱
+色
+艳
+艷
+艹
+艺
+艾
+节
+芃
+芈
+芊
+芋
+芍
+芎
+芒
+芙
+芜
+芝
+芡
+芥
+芦
+芩
+芪
+芫
+芬
+芭
+芮
+芯
+花
+芳
+芷
+芸
+芹
+芻
+芽
+芾
+苁
+苄
+苇
+苋
+苍
+苏
+苑
+苒
+苓
+苔
+苕
+苗
+苛
+苜
+苞
+苟
+苡
+苣
+若
+苦
+苫
+苯
+英
+苷
+苹
+苻
+茁
+茂
+范
+茄
+茅
+茉
+茎
+茏
+茗
+茜
+茧
+茨
+茫
+茬
+茭
+茯
+茱
+茲
+茴
+茵
+茶
+茸
+茹
+茼
+荀
+荃
+荆
+草
+荊
+荏
+荐
+荒
+荔
+荖
+荘
+荚
+荞
+荟
+荠
+荡
+荣
+荤
+荥
+荧
+荨
+荪
+荫
+药
+荳
+荷
+荸
+荻
+荼
+荽
+莅
+莆
+莉
+莊
+莎
+莒
+莓
+莖
+莘
+莞
+莠
+莢
+莧
+莪
+莫
+莱
+莲
+莴
+获
+莹
+莺
+莽
+莿
+菀
+菁
+菅
+菇
+菈
+菊
+菌
+菏
+菓
+菖
+菘
+菜
+菟
+菠
+菡
+菩
+華
+菱
+菲
+菸
+菽
+萁
+萃
+萄
+萊
+萋
+萌
+萍
+萎
+萘
+萝
+萤
+营
+萦
+萧
+萨
+萩
+萬
+萱
+萵
+萸
+萼
+落
+葆
+葉
+著
+葚
+葛
+葡
+董
+葦
+葩
+葫
+葬
+葭
+葯
+葱
+葳
+葵
+葷
+葺
+蒂
+蒋
+蒐
+蒔
+蒙
+蒜
+蒞
+蒟
+蒡
+蒨
+蒲
+蒸
+蒹
+蒻
+蒼
+蒿
+蓁
+蓄
+蓆
+蓉
+蓋
+蓑
+蓓
+蓖
+蓝
+蓟
+蓦
+蓬
+蓮
+蓼
+蓿
+蔑
+蔓
+蔔
+蔗
+蔘
+蔚
+蔡
+蔣
+蔥
+蔫
+蔬
+蔭
+蔵
+蔷
+蔺
+蔻
+蔼
+蔽
+蕁
+蕃
+蕈
+蕉
+蕊
+蕎
+蕙
+蕤
+蕨
+蕩
+蕪
+蕭
+蕲
+蕴
+蕻
+蕾
+薄
+薅
+薇
+薈
+薊
+薏
+薑
+薔
+薙
+薛
+薦
+薨
+薩
+薪
+薬
+薯
+薰
+薹
+藉
+藍
+藏
+藐
+藓
+藕
+藜
+藝
+藤
+藥
+藩
+藹
+藻
+藿
+蘆
+蘇
+蘊
+蘋
+蘑
+蘚
+蘭
+蘸
+蘼
+蘿
+虎
+虏
+虐
+虑
+虔
+處
+虚
+虛
+虜
+虞
+號
+虢
+虧
+虫
+虬
+虱
+虹
+虻
+虽
+虾
+蚀
+蚁
+蚂
+蚊
+蚌
+蚓
+蚕
+蚜
+蚝
+蚣
+蚤
+蚩
+蚪
+蚯
+蚱
+蚵
+蛀
+蛆
+蛇
+蛊
+蛋
+蛎
+蛐
+蛔
+蛙
+蛛
+蛟
+蛤
+蛭
+蛮
+蛰
+蛳
+蛹
+蛻
+蛾
+蜀
+蜂
+蜃
+蜆
+蜇
+蜈
+蜊
+蜍
+蜒
+蜓
+蜕
+蜗
+蜘
+蜚
+蜜
+蜡
+蜢
+蜥
+蜱
+蜴
+蜷
+蜻
+蜿
+蝇
+蝈
+蝉
+蝌
+蝎
+蝕
+蝗
+蝙
+蝟
+蝠
+蝦
+蝨
+蝴
+蝶
+蝸
+蝼
+螂
+螃
+融
+螞
+螢
+螨
+螯
+螳
+螺
+蟀
+蟄
+蟆
+蟋
+蟎
+蟑
+蟒
+蟠
+蟬
+蟲
+蟹
+蟻
+蟾
+蠅
+蠍
+蠔
+蠕
+蠛
+蠟
+蠡
+蠢
+蠣
+蠱
+蠶
+蠹
+蠻
+血
+衄
+衅
+衆
+行
+衍
+術
+衔
+街
+衙
+衛
+衝
+衞
+衡
+衢
+衣
+补
+表
+衩
+衫
+衬
+衮
+衰
+衲
+衷
+衹
+衾
+衿
+袁
+袂
+袄
+袅
+袈
+袋
+袍
+袒
+袖
+袜
+袞
+袤
+袪
+被
+袭
+袱
+裁
+裂
+装
+裆
+裊
+裏
+裔
+裕
+裘
+裙
+補
+裝
+裟
+裡
+裤
+裨
+裱
+裳
+裴
+裸
+裹
+製
+裾
+褂
+複
+褐
+褒
+褓
+褔
+褚
+褥
+褪
+褫
+褲
+褶
+褻
+襁
+襄
+襟
+襠
+襪
+襬
+襯
+襲
+西
+要
+覃
+覆
+覇
+見
+規
+覓
+視
+覚
+覦
+覧
+親
+覬
+観
+覷
+覺
+覽
+觀
+见
+观
+规
+觅
+视
+览
+觉
+觊
+觎
+觐
+觑
+角
+觞
+解
+觥
+触
+觸
+言
+訂
+計
+訊
+討
+訓
+訕
+訖
+託
+記
+訛
+訝
+訟
+訣
+訥
+訪
+設
+許
+訳
+訴
+訶
+診
+註
+証
+詆
+詐
+詔
+評
+詛
+詞
+詠
+詡
+詢
+詣
+試
+詩
+詫
+詬
+詭
+詮
+詰
+話
+該
+詳
+詹
+詼
+誅
+誇
+誉
+誌
+認
+誓
+誕
+誘
+語
+誠
+誡
+誣
+誤
+誥
+誦
+誨
+說
+説
+読
+誰
+課
+誹
+誼
+調
+諄
+談
+請
+諏
+諒
+論
+諗
+諜
+諡
+諦
+諧
+諫
+諭
+諮
+諱
+諳
+諷
+諸
+諺
+諾
+謀
+謁
+謂
+謄
+謊
+謎
+謐
+謔
+謗
+謙
+講
+謝
+謠
+謨
+謬
+謹
+謾
+譁
+證
+譎
+譏
+識
+譙
+譚
+譜
+警
+譬
+譯
+議
+譲
+譴
+護
+譽
+讀
+變
+讓
+讚
+讞
+计
+订
+认
+讥
+讧
+讨
+让
+讪
+讫
+训
+议
+讯
+记
+讲
+讳
+讴
+讶
+讷
+许
+讹
+论
+讼
+讽
+设
+访
+诀
+证
+诃
+评
+诅
+识
+诈
+诉
+诊
+诋
+词
+诏
+译
+试
+诗
+诘
+诙
+诚
+诛
+话
+诞
+诟
+诠
+诡
+询
+诣
+诤
+该
+详
+诧
+诩
+诫
+诬
+语
+误
+诰
+诱
+诲
+说
+诵
+诶
+请
+诸
+诺
+读
+诽
+课
+诿
+谀
+谁
+调
+谄
+谅
+谆
+谈
+谊
+谋
+谌
+谍
+谎
+谏
+谐
+谑
+谒
+谓
+谔
+谕
+谗
+谘
+谙
+谚
+谛
+谜
+谟
+谢
+谣
+谤
+谥
+谦
+谧
+谨
+谩
+谪
+谬
+谭
+谯
+谱
+谲
+谴
+谶
+谷
+豁
+豆
+豇
+豈
+豉
+豊
+豌
+豎
+豐
+豔
+豚
+象
+豢
+豪
+豫
+豬
+豹
+豺
+貂
+貅
+貌
+貓
+貔
+貘
+貝
+貞
+負
+財
+貢
+貧
+貨
+販
+貪
+貫
+責
+貯
+貰
+貳
+貴
+貶
+買
+貸
+費
+貼
+貽
+貿
+賀
+賁
+賂
+賃
+賄
+資
+賈
+賊
+賑
+賓
+賜
+賞
+賠
+賡
+賢
+賣
+賤
+賦
+質
+賬
+賭
+賴
+賺
+購
+賽
+贅
+贈
+贊
+贍
+贏
+贓
+贖
+贛
+贝
+贞
+负
+贡
+财
+责
+贤
+败
+账
+货
+质
+贩
+贪
+贫
+贬
+购
+贮
+贯
+贰
+贱
+贲
+贴
+贵
+贷
+贸
+费
+贺
+贻
+贼
+贾
+贿
+赁
+赂
+赃
+资
+赅
+赈
+赊
+赋
+赌
+赎
+赏
+赐
+赓
+赔
+赖
+赘
+赚
+赛
+赝
+赞
+赠
+赡
+赢
+赣
+赤
+赦
+赧
+赫
+赭
+走
+赳
+赴
+赵
+赶
+起
+趁
+超
+越
+趋
+趕
+趙
+趟
+趣
+趨
+足
+趴
+趵
+趸
+趺
+趾
+跃
+跄
+跆
+跋
+跌
+跎
+跑
+跖
+跚
+跛
+距
+跟
+跡
+跤
+跨
+跩
+跪
+路
+跳
+践
+跷
+跹
+跺
+跻
+踉
+踊
+踌
+踏
+踐
+踝
+踞
+踟
+踢
+踩
+踪
+踮
+踱
+踴
+踵
+踹
+蹂
+蹄
+蹇
+蹈
+蹉
+蹊
+蹋
+蹑
+蹒
+蹙
+蹟
+蹣
+蹤
+蹦
+蹩
+蹬
+蹭
+蹲
+蹴
+蹶
+蹺
+蹼
+蹿
+躁
+躇
+躉
+躊
+躋
+躍
+躏
+躪
+身
+躬
+躯
+躲
+躺
+軀
+車
+軋
+軌
+軍
+軒
+軟
+転
+軸
+軼
+軽
+軾
+較
+載
+輒
+輓
+輔
+輕
+輛
+輝
+輟
+輩
+輪
+輯
+輸
+輻
+輾
+輿
+轄
+轅
+轆
+轉
+轍
+轎
+轟
+车
+轧
+轨
+轩
+转
+轭
+轮
+软
+轰
+轲
+轴
+轶
+轻
+轼
+载
+轿
+较
+辄
+辅
+辆
+辇
+辈
+辉
+辊
+辍
+辐
+辑
+输
+辕
+辖
+辗
+辘
+辙
+辛
+辜
+辞
+辟
+辣
+辦
+辨
+辩
+辫
+辭
+辮
+辯
+辰
+辱
+農
+边
+辺
+辻
+込
+辽
+达
+迁
+迂
+迄
+迅
+过
+迈
+迎
+运
+近
+返
+还
+这
+进
+远
+违
+连
+迟
+迢
+迤
+迥
+迦
+迩
+迪
+迫
+迭
+述
+迴
+迷
+迸
+迹
+迺
+追
+退
+送
+适
+逃
+逅
+逆
+选
+逊
+逍
+透
+逐
+递
+途
+逕
+逗
+這
+通
+逛
+逝
+逞
+速
+造
+逢
+連
+逮
+週
+進
+逵
+逶
+逸
+逻
+逼
+逾
+遁
+遂
+遅
+遇
+遊
+運
+遍
+過
+遏
+遐
+遑
+遒
+道
+達
+違
+遗
+遙
+遛
+遜
+遞
+遠
+遢
+遣
+遥
+遨
+適
+遭
+遮
+遲
+遴
+遵
+遶
+遷
+選
+遺
+遼
+遽
+避
+邀
+邁
+邂
+邃
+還
+邇
+邈
+邊
+邋
+邏
+邑
+邓
+邕
+邛
+邝
+邢
+那
+邦
+邨
+邪
+邬
+邮
+邯
+邰
+邱
+邳
+邵
+邸
+邹
+邺
+邻
+郁
+郅
+郊
+郎
+郑
+郜
+郝
+郡
+郢
+郤
+郦
+郧
+部
+郫
+郭
+郴
+郵
+郷
+郸
+都
+鄂
+鄉
+鄒
+鄔
+鄙
+鄞
+鄢
+鄧
+鄭
+鄰
+鄱
+鄲
+鄺
+酉
+酊
+酋
+酌
+配
+酐
+酒
+酗
+酚
+酝
+酢
+酣
+酥
+酩
+酪
+酬
+酮
+酯
+酰
+酱
+酵
+酶
+酷
+酸
+酿
+醃
+醇
+醉
+醋
+醍
+醐
+醒
+醚
+醛
+醜
+醞
+醣
+醪
+醫
+醬
+醮
+醯
+醴
+醺
+釀
+釁
+采
+釉
+释
+釋
+里
+重
+野
+量
+釐
+金
+釗
+釘
+釜
+針
+釣
+釦
+釧
+釵
+鈀
+鈉
+鈍
+鈎
+鈔
+鈕
+鈞
+鈣
+鈦
+鈪
+鈴
+鈺
+鈾
+鉀
+鉄
+鉅
+鉉
+鉑
+鉗
+鉚
+鉛
+鉤
+鉴
+鉻
+銀
+銃
+銅
+銑
+銓
+銖
+銘
+銜
+銬
+銭
+銮
+銳
+銷
+銹
+鋁
+鋅
+鋒
+鋤
+鋪
+鋰
+鋸
+鋼
+錄
+錐
+錘
+錚
+錠
+錢
+錦
+錨
+錫
+錮
+錯
+録
+錳
+錶
+鍊
+鍋
+鍍
+鍛
+鍥
+鍰
+鍵
+鍺
+鍾
+鎂
+鎊
+鎌
+鎏
+鎔
+鎖
+鎗
+鎚
+鎧
+鎬
+鎮
+鎳
+鏈
+鏖
+鏗
+鏘
+鏞
+鏟
+鏡
+鏢
+鏤
+鏽
+鐘
+鐮
+鐲
+鐳
+鐵
+鐸
+鐺
+鑄
+鑊
+鑑
+鑒
+鑣
+鑫
+鑰
+鑲
+鑼
+鑽
+鑾
+鑿
+针
+钉
+钊
+钎
+钏
+钒
+钓
+钗
+钙
+钛
+钜
+钝
+钞
+钟
+钠
+钡
+钢
+钣
+钤
+钥
+钦
+钧
+钨
+钩
+钮
+钯
+钰
+钱
+钳
+钴
+钵
+钺
+钻
+钼
+钾
+钿
+铀
+铁
+铂
+铃
+铄
+铅
+铆
+铉
+铎
+铐
+铛
+铜
+铝
+铠
+铡
+铢
+铣
+铤
+铨
+铩
+铬
+铭
+铮
+铰
+铲
+铵
+银
+铸
+铺
+链
+铿
+销
+锁
+锂
+锄
+锅
+锆
+锈
+锉
+锋
+锌
+锏
+锐
+锑
+错
+锚
+锟
+锡
+锢
+锣
+锤
+锥
+锦
+锭
+键
+锯
+锰
+锲
+锵
+锹
+锺
+锻
+镀
+镁
+镂
+镇
+镉
+镌
+镍
+镐
+镑
+镕
+镖
+镗
+镛
+镜
+镣
+镭
+镯
+镰
+镳
+镶
+長
+长
+門
+閃
+閉
+開
+閎
+閏
+閑
+閒
+間
+閔
+閘
+閡
+関
+閣
+閥
+閨
+閩
+閱
+閲
+閹
+閻
+閾
+闆
+闇
+闊
+闌
+闍
+闔
+闕
+闖
+闘
+關
+闡
+闢
+门
+闪
+闫
+闭
+问
+闯
+闰
+闲
+间
+闵
+闷
+闸
+闹
+闺
+闻
+闽
+闾
+阀
+阁
+阂
+阅
+阆
+阇
+阈
+阉
+阎
+阐
+阑
+阔
+阕
+阖
+阙
+阚
+阜
+队
+阡
+阪
+阮
+阱
+防
+阳
+阴
+阵
+阶
+阻
+阿
+陀
+陂
+附
+际
+陆
+陇
+陈
+陋
+陌
+降
+限
+陕
+陛
+陝
+陞
+陟
+陡
+院
+陣
+除
+陨
+险
+陪
+陰
+陲
+陳
+陵
+陶
+陷
+陸
+険
+陽
+隅
+隆
+隈
+隊
+隋
+隍
+階
+随
+隐
+隔
+隕
+隘
+隙
+際
+障
+隠
+隣
+隧
+隨
+險
+隱
+隴
+隶
+隸
+隻
+隼
+隽
+难
+雀
+雁
+雄
+雅
+集
+雇
+雉
+雋
+雌
+雍
+雎
+雏
+雑
+雒
+雕
+雖
+雙
+雛
+雜
+雞
+離
+難
+雨
+雪
+雯
+雰
+雲
+雳
+零
+雷
+雹
+電
+雾
+需
+霁
+霄
+霆
+震
+霈
+霉
+霊
+霍
+霎
+霏
+霑
+霓
+霖
+霜
+霞
+霧
+霭
+霰
+露
+霸
+霹
+霽
+霾
+靂
+靄
+靈
+青
+靓
+靖
+静
+靚
+靛
+靜
+非
+靠
+靡
+面
+靥
+靦
+革
+靳
+靴
+靶
+靼
+鞅
+鞋
+鞍
+鞏
+鞑
+鞘
+鞠
+鞣
+鞦
+鞭
+韆
+韋
+韌
+韓
+韜
+韦
+韧
+韩
+韬
+韭
+音
+韵
+韶
+韻
+響
+頁
+頂
+頃
+項
+順
+須
+頌
+預
+頑
+頒
+頓
+頗
+領
+頜
+頡
+頤
+頫
+頭
+頰
+頷
+頸
+頹
+頻
+頼
+顆
+題
+額
+顎
+顏
+顔
+願
+顛
+類
+顧
+顫
+顯
+顱
+顴
+页
+顶
+顷
+项
+顺
+须
+顼
+顽
+顾
+顿
+颁
+颂
+预
+颅
+领
+颇
+颈
+颉
+颊
+颌
+颍
+颐
+频
+颓
+颔
+颖
+颗
+题
+颚
+颛
+颜
+额
+颞
+颠
+颡
+颢
+颤
+颦
+颧
+風
+颯
+颱
+颳
+颶
+颼
+飄
+飆
+风
+飒
+飓
+飕
+飘
+飙
+飚
+飛
+飞
+食
+飢
+飨
+飩
+飪
+飯
+飲
+飼
+飽
+飾
+餃
+餅
+餉
+養
+餌
+餐
+餒
+餓
+餘
+餚
+餛
+餞
+餡
+館
+餮
+餵
+餾
+饅
+饈
+饋
+饌
+饍
+饑
+饒
+饕
+饗
+饞
+饥
+饨
+饪
+饬
+饭
+饮
+饯
+饰
+饱
+饲
+饴
+饵
+饶
+饷
+饺
+饼
+饽
+饿
+馀
+馁
+馄
+馅
+馆
+馈
+馋
+馍
+馏
+馒
+馔
+首
+馗
+香
+馥
+馨
+馬
+馭
+馮
+馳
+馴
+駁
+駄
+駅
+駆
+駐
+駒
+駕
+駛
+駝
+駭
+駱
+駿
+騁
+騎
+騏
+験
+騙
+騨
+騰
+騷
+驀
+驅
+驊
+驍
+驒
+驕
+驗
+驚
+驛
+驟
+驢
+驥
+马
+驭
+驮
+驯
+驰
+驱
+驳
+驴
+驶
+驷
+驸
+驹
+驻
+驼
+驾
+驿
+骁
+骂
+骄
+骅
+骆
+骇
+骈
+骊
+骋
+验
+骏
+骐
+骑
+骗
+骚
+骛
+骜
+骞
+骠
+骡
+骤
+骥
+骧
+骨
+骯
+骰
+骶
+骷
+骸
+骼
+髂
+髅
+髋
+髏
+髒
+髓
+體
+髖
+高
+髦
+髪
+髮
+髯
+髻
+鬃
+鬆
+鬍
+鬓
+鬚
+鬟
+鬢
+鬣
+鬥
+鬧
+鬱
+鬼
+魁
+魂
+魄
+魅
+魇
+魍
+魏
+魔
+魘
+魚
+魯
+魷
+鮑
+鮨
+鮪
+鮭
+鮮
+鯉
+鯊
+鯖
+鯛
+鯨
+鯰
+鯽
+鰍
+鰓
+鰭
+鰲
+鰻
+鰾
+鱈
+鱉
+鱔
+鱗
+鱷
+鱸
+鱼
+鱿
+鲁
+鲈
+鲍
+鲑
+鲛
+鲜
+鲟
+鲢
+鲤
+鲨
+鲫
+鲱
+鲲
+鲶
+鲷
+鲸
+鳃
+鳄
+鳅
+鳌
+鳍
+鳕
+鳖
+鳗
+鳝
+鳞
+鳥
+鳩
+鳳
+鳴
+鳶
+鴉
+鴕
+鴛
+鴦
+鴨
+鴻
+鴿
+鵑
+鵜
+鵝
+鵡
+鵬
+鵰
+鵲
+鶘
+鶩
+鶯
+鶴
+鷗
+鷲
+鷹
+鷺
+鸚
+鸞
+鸟
+鸠
+鸡
+鸢
+鸣
+鸥
+鸦
+鸨
+鸪
+鸭
+鸯
+鸳
+鸵
+鸽
+鸾
+鸿
+鹂
+鹃
+鹄
+鹅
+鹈
+鹉
+鹊
+鹌
+鹏
+鹑
+鹕
+鹘
+鹜
+鹞
+鹤
+鹦
+鹧
+鹫
+鹭
+鹰
+鹳
+鹵
+鹹
+鹼
+鹽
+鹿
+麂
+麋
+麒
+麓
+麗
+麝
+麟
+麥
+麦
+麩
+麴
+麵
+麸
+麺
+麻
+麼
+麽
+麾
+黃
+黄
+黍
+黎
+黏
+黑
+黒
+黔
+默
+黛
+黜
+黝
+點
+黠
+黨
+黯
+黴
+鼋
+鼎
+鼐
+鼓
+鼠
+鼬
+鼹
+鼻
+鼾
+齁
+齊
+齋
+齐
+齒
+齡
+齢
+齣
+齦
+齿
+龄
+龅
+龈
+龊
+龋
+龌
+龍
+龐
+龔
+龕
+龙
+龚
+龛
+龜
+龟
+︰
+︱
+︶
+︿
+﹁
+﹂
+﹍
+﹏
+﹐
+﹑
+﹒
+﹔
+﹕
+﹖
+﹗
+﹙
+﹚
+﹝
+﹞
+﹡
+﹣
+!
+"
+#
+$
+%
+&
+'
+(
+)
+*
++
+,
+-
+.
+/
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+:
+;
+<
+=
+>
+?
+@
+[
+\
+]
+^
+_
+`
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+{
+|
+}
+~
+。
+「
+」
+、
+・
+ッ
+ー
+イ
+ク
+シ
+ス
+ト
+ノ
+フ
+ラ
+ル
+ン
+゙
+゚
+ ̄
+¥
+👍
+🔥
+😂
+😎
+...
+yam
+10
+2017
+12
+11
+2016
+20
+30
+15
+06
+lofter
+##s
+2015
+by
+16
+14
+18
+13
+24
+17
+2014
+21
+##0
+22
+19
+25
+23
+com
+100
+00
+05
+2013
+##a
+03
+09
+08
+28
+##2
+50
+01
+04
+##1
+27
+02
+2012
+##3
+26
+##e
+07
+##8
+##5
+##6
+##4
+##9
+##7
+29
+2011
+40
+##t
+2010
+##o
+##d
+##i
+2009
+##n
+app
+www
+the
+##m
+31
+##c
+##l
+##y
+##r
+##g
+2008
+60
+http
+200
+qq
+##p
+80
+##f
+google
+pixnet
+90
+cookies
+tripadvisor
+500
+##er
+##k
+35
+##h
+facebook
+2007
+2000
+70
+##b
+of
+##x
+##u
+45
+300
+iphone
+32
+1000
+2006
+48
+ip
+36
+in
+38
+3d
+##w
+##ing
+55
+ctrip
+##on
+##v
+33
+##の
+to
+34
+400
+id
+2005
+it
+37
+windows
+llc
+top
+99
+42
+39
+000
+led
+at
+##an
+41
+51
+52
+46
+49
+43
+53
+44
+##z
+android
+58
+and
+59
+2004
+56
+vr
+##か
+5000
+2003
+47
+blogthis
+twitter
+54
+##le
+150
+ok
+2018
+57
+75
+cn
+no
+ios
+##in
+##mm
+##00
+800
+on
+te
+3000
+65
+2001
+360
+95
+ig
+lv
+120
+##ng
+##を
+##us
+##に
+pc
+てす
+──
+600
+##te
+85
+2002
+88
+##ed
+html
+ncc
+wifi
+email
+64
+blog
+is
+##10
+##て
+mail
+online
+##al
+dvd
+##ic
+studio
+##は
+##℃
+##ia
+##と
+line
+vip
+72
+##q
+98
+##ce
+##en
+for
+##is
+##ra
+##es
+##j
+usb
+net
+cp
+1999
+asia
+4g
+##cm
+diy
+new
+3c
+##お
+ta
+66
+language
+vs
+apple
+tw
+86
+web
+##ne
+ipad
+62
+you
+##re
+101
+68
+##tion
+ps
+de
+bt
+pony
+atm
+##2017
+1998
+67
+##ch
+ceo
+##or
+go
+##na
+av
+pro
+cafe
+96
+pinterest
+97
+63
+pixstyleme3c
+##ta
+more
+said
+##2016
+1997
+mp3
+700
+##ll
+nba
+jun
+##20
+92
+tv
+1995
+pm
+61
+76
+nbsp
+250
+##ie
+linux
+##ma
+cd
+110
+hd
+##17
+78
+##ion
+77
+6000
+am
+##th
+##st
+94
+##se
+##et
+69
+180
+gdp
+my
+105
+81
+abc
+89
+flash
+79
+one
+93
+1990
+1996
+##ck
+gps
+##も
+##ly
+web885
+106
+2020
+91
+##ge
+4000
+1500
+xd
+boss
+isbn
+1994
+org
+##ry
+me
+love
+##11
+0fork
+73
+##12
+3g
+##ter
+##ar
+71
+82
+##la
+hotel
+130
+1970
+pk
+83
+87
+140
+ie
+##os
+##30
+##el
+74
+##50
+seo
+cpu
+##ml
+p2p
+84
+may
+##る
+sun
+tue
+internet
+cc
+posted
+youtube
+##at
+##ン
+##man
+ii
+##ル
+##15
+abs
+nt
+pdf
+yahoo
+ago
+1980
+##it
+news
+mac
+104
+##てす
+##me
+##り
+java
+1992
+spa
+##de
+##nt
+hk
+all
+plus
+la
+1993
+##mb
+##16
+##ve
+west
+##da
+160
+air
+##い
+##ps
+から
+##to
+1989
+logo
+htc
+php
+https
+fi
+momo
+##son
+sat
+##ke
+##80
+ebd
+suv
+wi
+day
+apk
+##88
+##um
+mv
+galaxy
+wiki
+or
+brake
+##ス
+1200
+する
+this
+1991
+mon
+##こ
+❤2017
+po
+##ない
+javascript
+life
+home
+june
+##ss
+system
+900
+##ー
+##0
+pp
+1988
+world
+fb
+4k
+br
+##as
+ic
+ai
+leonardo
+safari
+##60
+live
+free
+xx
+wed
+win7
+kiehl
+##co
+lg
+o2o
+##go
+us
+235
+1949
+mm
+しい
+vfm
+kanye
+##90
+##2015
+##id
+jr
+##ey
+123
+rss
+##sa
+##ro
+##am
+##no
+thu
+fri
+350
+##sh
+##ki
+103
+comments
+name
+##のて
+##pe
+##ine
+max
+1987
+8000
+uber
+##mi
+##ton
+wordpress
+office
+1986
+1985
+##ment
+107
+bd
+win10
+##ld
+##li
+gmail
+bb
+dior
+##rs
+##ri
+##rd
+##ます
+up
+cad
+##®
+dr
+して
+read
+##21
+をお
+##io
+##99
+url
+1984
+pvc
+paypal
+show
+policy
+##40
+##ty
+##18
+with
+##★
+##01
+txt
+102
+##ba
+dna
+from
+post
+mini
+ar
+taiwan
+john
+##ga
+privacy
+agoda
+##13
+##ny
+word
+##24
+##22
+##by
+##ur
+##hz
+1982
+##ang
+265
+cookie
+netscape
+108
+##ka
+##~
+##ad
+house
+share
+note
+ibm
+code
+hello
+nike
+sim
+survey
+##016
+1979
+1950
+wikia
+##32
+##017
+5g
+cbc
+##tor
+##kg
+1983
+##rt
+##14
+campaign
+store
+2500
+os
+##ct
+##ts
+##°
+170
+api
+##ns
+365
+excel
+##な
+##ao
+##ら
+##し
+~~
+##nd
+university
+163
+には
+518
+##70
+##ya
+##il
+##25
+pierre
+ipo
+0020
+897
+##23
+hotels
+##ian
+のお
+125
+years
+6606
+##ers
+##26
+high
+##day
+time
+##ay
+bug
+##line
+##く
+##す
+##be
+xp
+talk2yam
+yamservice
+10000
+coco
+##dy
+sony
+##ies
+1978
+microsoft
+david
+people
+##ha
+1960
+instagram
+intel
+その
+##ot
+iso
+1981
+##va
+115
+##mo
+##land
+xxx
+man
+co
+ltxsw
+##ation
+baby
+220
+##pa
+##ol
+1945
+7000
+tag
+450
+##ue
+msn
+##31
+oppo
+##ト
+##ca
+control
+##om
+st
+chrome
+##ure
+##ん
+be
+##き
+lol
+##19
+した
+##bo
+240
+lady
+##100
+##way
+##から
+4600
+##ko
+##do
+##un
+4s
+corporation
+168
+##ni
+herme
+##28
+cp
+978
+##up
+##06
+ui
+##ds
+ppt
+admin
+three
+します
+bbc
+re
+128
+##48
+ca
+##015
+##35
+hp
+##ee
+tpp
+##た
+##ive
+××
+root
+##cc
+##ました
+##ble
+##ity
+adobe
+park
+114
+et
+oled
+city
+##ex
+##ler
+##ap
+china
+##book
+20000
+view
+##ice
+global
+##km
+your
+hong
+##mg
+out
+##ms
+ng
+ebay
+##29
+menu
+ubuntu
+##cy
+rom
+##view
+open
+ktv
+do
+server
+##lo
+if
+english
+##ね
+##5
+##oo
+1600
+##02
+step1
+kong
+club
+135
+july
+inc
+1976
+mr
+hi
+##net
+touch
+##ls
+##ii
+michael
+lcd
+##05
+##33
+phone
+james
+step2
+1300
+ios9
+##box
+dc
+##2
+##ley
+samsung
+111
+280
+pokemon
+css
+##ent
+##les
+いいえ
+##1
+s8
+atom
+play
+bmw
+##said
+sa
+etf
+ctrl
+♥yoyo♥
+##55
+2025
+##2014
+##66
+adidas
+amazon
+1958
+##ber
+##ner
+visa
+##77
+##der
+1800
+connectivity
+##hi
+firefox
+109
+118
+hr
+so
+style
+mark
+pop
+ol
+skip
+1975
+as
+##27
+##ir
+##61
+190
+mba
+##う
+##ai
+le
+##ver
+1900
+cafe2017
+lte
+super
+113
+129
+##ron
+amd
+like
+##☆
+are
+##ster
+we
+##sk
+paul
+data
+international
+##ft
+longchamp
+ssd
+good
+##ート
+##ti
+reply
+##my
+↓↓↓
+apr
+star
+##ker
+source
+136
+js
+112
+get
+force
+photo
+##one
+126
+##2013
+##ow
+link
+bbs
+1972
+goods
+##lin
+python
+119
+##ip
+game
+##ics
+##ません
+blue
+##●
+520
+##45
+page
+itunes
+##03
+1955
+260
+1968
+gt
+gif
+618
+##ff
+##47
+group
+くたさい
+about
+bar
+ganji
+##nce
+music
+lee
+not
+1977
+1971
+1973
+##per
+an
+faq
+comment
+##って
+days
+##ock
+116
+##bs
+1974
+1969
+v1
+player
+1956
+xbox
+sql
+fm
+f1
+139
+##ah
+210
+##lv
+##mp
+##000
+melody
+1957
+##3
+550
+17life
+199
+1966
+xml
+market
+##au
+##71
+999
+##04
+what
+gl
+##95
+##age
+tips
+##68
+book
+##ting
+mysql
+can
+1959
+230
+##ung
+wonderland
+watch
+10℃
+##ction
+9000
+mar
+mobile
+1946
+1962
+article
+##db
+part
+▲top
+party
+って
+1967
+1964
+1948
+##07
+##ore
+##op
+この
+dj
+##78
+##38
+010
+main
+225
+1965
+##ong
+art
+320
+ad
+134
+020
+##73
+117
+pm2
+japan
+228
+##08
+ts
+1963
+##ica
+der
+sm
+##36
+2019
+##wa
+ct
+##7
+##や
+##64
+1937
+homemesh
+search
+##85
+##れは
+##tv
+##di
+macbook
+##9
+##くたさい
+service
+##♥
+type
+った
+750
+##ier
+##si
+##75
+##います
+##ok
+best
+##ット
+goris
+lock
+##った
+cf
+3m
+big
+##ut
+ftp
+carol
+##vi
+10
+1961
+happy
+sd
+##ac
+122
+anti
+pe
+cnn
+iii
+1920
+138
+##ラ
+1940
+esp
+jan
+tags
+##98
+##51
+august
+vol
+##86
+154
+##™
+##fs
+##れ
+##sion
+design
+ac
+##ム
+press
+jordan
+ppp
+that
+key
+check
+##6
+##tt
+##㎡
+1080p
+##lt
+power
+##42
+1952
+##bc
+vivi
+##ック
+he
+133
+121
+jpg
+##rry
+201
+175
+3500
+1947
+nb
+##ted
+##rn
+しています
+1954
+usd
+##t00
+master
+##ンク
+001
+model
+##58
+al
+##09
+1953
+##34
+ram
+goo
+ても
+##ui
+127
+1930
+red
+##ary
+rpg
+item
+##pm
+##41
+270
+##za
+project
+##2012
+hot
+td
+blogabstract
+##ger
+##62
+650
+##44
+gr2
+##します
+##m
+black
+electronic
+nfc
+year
+asus
+また
+html5
+cindy
+##hd
+m3
+132
+esc
+##od
+booking
+##53
+fed
+tvb
+##81
+##ina
+mit
+165
+##いる
+chan
+192
+distribution
+next
+になる
+peter
+bios
+steam
+cm
+1941
+にも
+pk10
+##ix
+##65
+##91
+dec
+nasa
+##ana
+icecat
+00z
+b1
+will
+##46
+li
+se
+##ji
+##み
+##ard
+oct
+##ain
+jp
+##ze
+##bi
+cio
+##56
+smart
+h5
+##39
+##port
+curve
+vpn
+##nm
+##dia
+utc
+##あり
+12345678910
+##52
+rmvb
+chanel
+a4
+miss
+##and
+##im
+media
+who
+##63
+she
+girl
+5s
+124
+vera
+##して
+class
+vivo
+king
+##フ
+##ei
+national
+ab
+1951
+5cm
+888
+145
+ipod
+ap
+1100
+5mm
+211
+ms
+2756
+##69
+mp4
+msci
+##po
+##89
+131
+mg
+index
+380
+##bit
+##out
+##zz
+##97
+##67
+158
+apec
+##8
+photoshop
+opec
+¥799
+ては
+##96
+##tes
+##ast
+2g
+○○
+##ール
+¥2899
+##ling
+##よ
+##ory
+1938
+##ical
+kitty
+content
+##43
+step3
+##cn
+win8
+155
+vc
+1400
+iphone7
+robert
+##した
+tcl
+137
+beauty
+##87
+en
+dollars
+##ys
+##oc
+step
+pay
+yy
+a1
+##2011
+##lly
+##ks
+##♪
+1939
+188
+download
+1944
+sep
+exe
+ph
+います
+school
+gb
+center
+pr
+street
+##board
+uv
+##37
+##lan
+winrar
+##que
+##ua
+##com
+1942
+1936
+480
+gpu
+##4
+ettoday
+fu
+tom
+##54
+##ren
+##via
+149
+##72
+b2b
+144
+##79
+##tch
+rose
+arm
+mb
+##49
+##ial
+##nn
+nvidia
+step4
+mvp
+00㎡
+york
+156
+##イ
+how
+cpi
+591
+2765
+gov
+kg
+joe
+##xx
+mandy
+pa
+##ser
+copyright
+fashion
+1935
+don
+##け
+ecu
+##ist
+##art
+erp
+wap
+have
+##lm
+talk
+##ek
+##ning
+##if
+ch
+##ite
+video
+1943
+cs
+san
+iot
+look
+##84
+##2010
+##ku
+october
+##ux
+trump
+##hs
+##ide
+box
+141
+first
+##ins
+april
+##ight
+##83
+185
+angel
+protected
+aa
+151
+162
+x1
+m2
+##fe
+##×
+##ho
+size
+143
+min
+ofo
+fun
+gomaji
+ex
+hdmi
+food
+dns
+march
+chris
+kevin
+##のか
+##lla
+##pp
+##ec
+ag
+ems
+6s
+720p
+##rm
+##ham
+off
+##92
+asp
+team
+fandom
+ed
+299
+▌♥
+##ell
+info
+されています
+##82
+sina
+4066
+161
+##able
+##ctor
+330
+399
+315
+dll
+rights
+ltd
+idc
+jul
+3kg
+1927
+142
+ma
+surface
+##76
+##ク
+~~~
+304
+mall
+eps
+146
+green
+##59
+map
+space
+donald
+v2
+sodu
+##light
+1931
+148
+1700
+まて
+310
+reserved
+htm
+##han
+##57
+2d
+178
+mod
+##ise
+##tions
+152
+ti
+##shi
+doc
+1933
+icp
+055
+wang
+##ram
+shopping
+aug
+##pi
+##well
+now
+wam
+b2
+からお
+##hu
+236
+1928
+##gb
+266
+f2
+##93
+153
+mix
+##ef
+##uan
+bwl
+##plus
+##res
+core
+##ess
+tea
+5℃
+hktvmall
+nhk
+##ate
+list
+##ese
+301
+feb
+4m
+inn
+ての
+nov
+159
+12345
+daniel
+##ci
+pass
+##bet
+##nk
+coffee
+202
+ssl
+airbnb
+##ute
+fbi
+woshipm
+skype
+ea
+cg
+sp
+##fc
+##www
+yes
+edge
+alt
+007
+##94
+fpga
+##ght
+##gs
+iso9001
+さい
+##ile
+##wood
+##uo
+image
+lin
+icon
+american
+##em
+1932
+set
+says
+##king
+##tive
+blogger
+##74
+なと
+256
+147
+##ox
+##zy
+##red
+##ium
+##lf
+nokia
+claire
+##リ
+##ding
+november
+lohas
+##500
+##tic
+##マ
+##cs
+##ある
+##che
+##ire
+##gy
+##ult
+db
+january
+win
+##カ
+166
+road
+ptt
+##ま
+##つ
+198
+##fa
+##mer
+anna
+pchome
+はい
+udn
+ef
+420
+##time
+##tte
+2030
+##ア
+g20
+white
+かかります
+1929
+308
+garden
+eleven
+di
+##おります
+chen
+309b
+777
+172
+young
+cosplay
+ちてない
+4500
+bat
+##123
+##tra
+##ては
+kindle
+npc
+steve
+etc
+##ern
+##|
+call
+xperia
+ces
+travel
+sk
+s7
+##ous
+1934
+##int
+みいたたけます
+183
+edu
+file
+cho
+qr
+##car
+##our
+186
+##ant
+##d
+eric
+1914
+rends
+##jo
+##する
+mastercard
+##2000
+kb
+##min
+290
+##ino
+vista
+##ris
+##ud
+jack
+2400
+##set
+169
+pos
+1912
+##her
+##ou
+taipei
+しく
+205
+beta
+##ませんか
+232
+##fi
+express
+255
+body
+##ill
+aphojoy
+user
+december
+meiki
+##ick
+tweet
+richard
+##av
+##ᆫ
+iphone6
+##dd
+ちてすか
+views
+##mark
+321
+pd
+##00
+times
+##▲
+level
+##ash
+10g
+point
+5l
+##ome
+208
+koreanmall
+##ak
+george
+q2
+206
+wma
+tcp
+##200
+スタッフ
+full
+mlb
+##lle
+##watch
+tm
+run
+179
+911
+smith
+business
+##und
+1919
+color
+##tal
+222
+171
+##less
+moon
+4399
+##rl
+update
+pcb
+shop
+499
+157
+little
+なし
+end
+##mhz
+van
+dsp
+easy
+660
+##house
+##key
+history
+##o
+oh
+##001
+##hy
+##web
+oem
+let
+was
+##2009
+##gg
+review
+##wan
+182
+##°c
+203
+uc
+title
+##val
+united
+233
+2021
+##ons
+doi
+trivago
+overdope
+sbs
+##ance
+##ち
+grand
+special
+573032185
+imf
+216
+wx17house
+##so
+##ーム
+audi
+##he
+london
+william
+##rp
+##ake
+science
+beach
+cfa
+amp
+ps4
+880
+##800
+##link
+##hp
+crm
+ferragamo
+bell
+make
+##eng
+195
+under
+zh
+photos
+2300
+##style
+##ント
+via
+176
+da
+##gi
+company
+i7
+##ray
+thomas
+370
+ufo
+i5
+##max
+plc
+ben
+back
+research
+8g
+173
+mike
+##pc
+##ッフ
+september
+189
+##ace
+vps
+february
+167
+pantos
+wp
+lisa
+1921
+★★
+jquery
+night
+long
+offer
+##berg
+##news
+1911
+##いて
+ray
+fks
+wto
+せます
+over
+164
+340
+##all
+##rus
+1924
+##888
+##works
+blogtitle
+loftpermalink
+##→
+187
+martin
+test
+ling
+km
+##め
+15000
+fda
+v3
+##ja
+##ロ
+wedding
+かある
+outlet
+family
+##ea
+をこ
+##top
+story
+##ness
+salvatore
+##lu
+204
+swift
+215
+room
+している
+oracle
+##ul
+1925
+sam
+b2c
+week
+pi
+rock
+##のは
+##a
+##けと
+##ean
+##300
+##gle
+cctv
+after
+chinese
+##back
+powered
+x2
+##tan
+1918
+##nes
+##イン
+canon
+only
+181
+##zi
+##las
+say
+##oe
+184
+##sd
+221
+##bot
+##world
+##zo
+sky
+made
+top100
+just
+1926
+pmi
+802
+234
+gap
+##vr
+177
+les
+174
+▲topoct
+ball
+vogue
+vi
+ing
+ofweek
+cos
+##list
+##ort
+▲topmay
+##なら
+##lon
+として
+last
+##tc
+##of
+##bus
+##gen
+real
+eva
+##コ
+a3
+nas
+##lie
+##ria
+##coin
+##bt
+▲topapr
+his
+212
+cat
+nata
+vive
+health
+⋯⋯
+drive
+sir
+▲topmar
+du
+cup
+##カー
+##ook
+##よう
+##sy
+alex
+msg
+tour
+しました
+3ce
+##word
+193
+ebooks
+r8
+block
+318
+##より
+2200
+nice
+pvp
+207
+months
+1905
+rewards
+##ther
+1917
+0800
+##xi
+##チ
+##sc
+micro
+850
+gg
+blogfp
+op
+1922
+daily
+m1
+264
+true
+##bb
+ml
+##tar
+##のお
+##ky
+anthony
+196
+253
+##yo
+state
+218
+##ara
+##aa
+##rc
+##tz
+##ston
+より
+gear
+##eo
+##ade
+ge
+see
+1923
+##win
+##ura
+ss
+heart
+##den
+##ita
+down
+##sm
+el
+png
+2100
+610
+rakuten
+whatsapp
+bay
+dream
+add
+##use
+680
+311
+pad
+gucci
+mpv
+##ode
+##fo
+island
+▲topjun
+##▼
+223
+jason
+214
+chicago
+##❤
+しの
+##hone
+io
+##れる
+##ことか
+sogo
+be2
+##ology
+990
+cloud
+vcd
+##con
+2~3
+##ford
+##joy
+##kb
+##こさいます
+##rade
+but
+##ach
+docker
+##ful
+rfid
+ul
+##ase
+hit
+ford
+##star
+580
+##○
+11
+a2
+sdk
+reading
+edited
+##are
+cmos
+##mc
+238
+siri
+light
+##ella
+##ため
+bloomberg
+##read
+pizza
+##ison
+jimmy
+##vm
+college
+node
+journal
+ba
+18k
+##play
+245
+##cer
+20
+magic
+##yu
+191
+jump
+288
+tt
+##ings
+asr
+##lia
+3200
+step5
+network
+##cd
+mc
+いします
+1234
+pixstyleme
+273
+##600
+2800
+money
+★★★★★
+1280
+12
+430
+bl
+みの
+act
+##tus
+tokyo
+##rial
+##life
+emba
+##ae
+saas
+tcs
+##rk
+##wang
+summer
+##sp
+ko
+##ving
+390
+premium
+##その
+netflix
+##ヒ
+uk
+mt
+##lton
+right
+frank
+two
+209
+える
+##ple
+##cal
+021
+##んな
+##sen
+##ville
+hold
+nexus
+dd
+##ius
+てお
+##mah
+##なく
+tila
+zero
+820
+ce
+##tin
+resort
+##ws
+charles
+old
+p10
+5d
+report
+##360
+##ru
+##には
+bus
+vans
+lt
+##est
+pv
+##レ
+links
+rebecca
+##ツ
+##dm
+azure
+##365
+きな
+limited
+bit
+4gb
+##mon
+1910
+moto
+##eam
+213
+1913
+var
+eos
+なとの
+226
+blogspot
+された
+699
+e3
+dos
+dm
+fc
+##ments
+##ik
+##kw
+boy
+##bin
+##ata
+960
+er
+##せ
+219
+##vin
+##tu
+##ula
+194
+##∥
+station
+##ろ
+##ature
+835
+files
+zara
+hdr
+top10
+nature
+950
+magazine
+s6
+marriott
+##シ
+avira
+case
+##っと
+tab
+##ran
+tony
+##home
+oculus
+im
+##ral
+jean
+saint
+cry
+307
+rosie
+##force
+##ini
+ice
+##bert
+のある
+##nder
+##mber
+pet
+2600
+##◆
+plurk
+▲topdec
+##sis
+00kg
+▲topnov
+720
+##ence
+tim
+##ω
+##nc
+##ても
+##name
+log
+ips
+great
+ikea
+malaysia
+unix
+##イト
+3600
+##ncy
+##nie
+12000
+akb48
+##ye
+##oid
+404
+##chi
+##いた
+oa
+xuehai
+##1000
+##orm
+##rf
+275
+さん
+##ware
+##リー
+980
+ho
+##pro
+text
+##era
+560
+bob
+227
+##ub
+##2008
+8891
+scp
+avi
+##zen
+2022
+mi
+wu
+museum
+qvod
+apache
+lake
+jcb
+▲topaug
+★★★
+ni
+##hr
+hill
+302
+ne
+weibo
+490
+ruby
+##ーシ
+##ヶ
+##row
+4d
+▲topjul
+iv
+##ish
+github
+306
+mate
+312
+##スト
+##lot
+##ane
+andrew
+のハイト
+##tina
+t1
+rf
+ed2k
+##vel
+##900
+way
+final
+りの
+ns
+5a
+705
+197
+##メ
+sweet
+bytes
+##ene
+▲topjan
+231
+##cker
+##2007
+##px
+100g
+topapp
+229
+helpapp
+rs
+low
+14k
+g4g
+care
+630
+ldquo
+あり
+##fork
+leave
+rm
+edition
+##gan
+##zon
+##qq
+▲topsep
+##google
+##ism
+gold
+224
+explorer
+##zer
+toyota
+category
+select
+visual
+##labels
+restaurant
+##md
+posts
+s1
+##ico
+もっと
+angelababy
+123456
+217
+sports
+s3
+mbc
+1915
+してくたさい
+shell
+x86
+candy
+##new
+kbs
+face
+xl
+470
+##here
+4a
+swissinfo
+v8
+▲topfeb
+dram
+##ual
+##vice
+3a
+##wer
+sport
+q1
+ios10
+public
+int
+card
+##c
+ep
+au
+rt
+##れた
+1080
+bill
+##mll
+kim
+30
+460
+wan
+##uk
+##ミ
+x3
+298
+0t
+scott
+##ming
+239
+e5
+##3d
+h7n9
+worldcat
+brown
+##あります
+##vo
+##led
+##580
+##ax
+249
+410
+##ert
+paris
+##~6
+polo
+925
+##lr
+599
+##ナ
+capital
+##hing
+bank
+cv
+1g
+##chat
+##s
+##たい
+adc
+##ule
+2m
+##e
+digital
+hotmail
+268
+##pad
+870
+bbq
+quot
+##ring
+before
+wali
+##まて
+mcu
+2k
+2b
+という
+costco
+316
+north
+333
+switch
+##city
+##p
+philips
+##mann
+management
+panasonic
+##cl
+##vd
+##ping
+##rge
+alice
+##lk
+##ましょう
+css3
+##ney
+vision
+alpha
+##ular
+##400
+##tter
+lz
+にお
+##ありません
+mode
+gre
+1916
+pci
+##tm
+237
+1~2
+##yan
+##そ
+について
+##let
+##キ
+work
+war
+coach
+ah
+mary
+##ᅵ
+huang
+##pt
+a8
+pt
+follow
+##berry
+1895
+##ew
+a5
+ghost
+##ション
+##wn
+##og
+south
+##code
+girls
+##rid
+action
+villa
+git
+r11
+table
+games
+##cket
+error
+##anonymoussaid
+##ag
+here
+##ame
+##gc
+qa
+##■
+##lis
+gmp
+##gin
+vmalife
+##cher
+yu
+wedding
+##tis
+demo
+dragon
+530
+soho
+social
+bye
+##rant
+river
+orz
+acer
+325
+##↑
+##ース
+##ats
+261
+del
+##ven
+440
+ups
+##ように
+##ター
+305
+value
+macd
+yougou
+##dn
+661
+##ano
+ll
+##urt
+##rent
+continue
+script
+##wen
+##ect
+paper
+263
+319
+shift
+##chel
+##フト
+##cat
+258
+x5
+fox
+243
+##さん
+car
+aaa
+##blog
+loading
+##yn
+##tp
+kuso
+799
+si
+sns
+イカせるテンマ
+ヒンクテンマ3
+rmb
+vdc
+forest
+central
+prime
+help
+ultra
+##rmb
+##ような
+241
+square
+688
+##しい
+のないフロクに
+##field
+##reen
+##ors
+##ju
+c1
+start
+510
+##air
+##map
+cdn
+##wo
+cba
+stephen
+m8
+100km
+##get
+opera
+##base
+##ood
+vsa
+com™
+##aw
+##ail
+251
+なのて
+count
+t2
+##ᅡ
+##een
+2700
+hop
+##gp
+vsc
+tree
+##eg
+##ose
+816
+285
+##ories
+##shop
+alphago
+v4
+1909
+simon
+##ᆼ
+fluke62max
+zip
+スホンサー
+##sta
+louis
+cr
+bas
+##~10
+bc
+##yer
+hadoop
+##ube
+##wi
+1906
+0755
+hola
+##low
+place
+centre
+5v
+d3
+##fer
+252
+##750
+##media
+281
+540
+0l
+exchange
+262
+series
+##ハー
+##san
+eb
+##bank
+##k
+q3
+##nge
+##mail
+take
+##lp
+259
+1888
+client
+east
+cache
+event
+vincent
+##ールを
+きを
+##nse
+sui
+855
+adchoice
+##и
+##stry
+##なたの
+246
+##zone
+ga
+apps
+sea
+##ab
+248
+cisco
+##タ
+##rner
+kymco
+##care
+dha
+##pu
+##yi
+minkoff
+royal
+p1
+への
+annie
+269
+collection
+kpi
+playstation
+257
+になります
+866
+bh
+##bar
+queen
+505
+radio
+1904
+andy
+armani
+##xy
+manager
+iherb
+##ery
+##share
+spring
+raid
+johnson
+1908
+##ob
+volvo
+hall
+##ball
+v6
+our
+taylor
+##hk
+bi
+242
+##cp
+kate
+bo
+water
+technology
+##rie
+サイトは
+277
+##ona
+##sl
+hpv
+303
+gtx
+hip
+rdquo
+jayz
+stone
+##lex
+##rum
+namespace
+##やり
+620
+##ale
+##atic
+des
+##erson
+##ql
+##ves
+##type
+enter
+##この
+##てきます
+d2
+##168
+##mix
+##bian
+との
+a9
+jj
+ky
+##lc
+access
+movie
+##hc
+リストに
+tower
+##ration
+##mit
+ます
+##nch
+ua
+tel
+prefix
+##o2
+1907
+##point
+1901
+ott
+~10
+##http
+##ury
+baidu
+##ink
+member
+##logy
+bigbang
+nownews
+##js
+##shot
+##tb
+##こと
+247
+eba
+##tics
+##lus
+ける
+v5
+spark
+##ama
+there
+##ions
+god
+##lls
+##down
+hiv
+##ress
+burberry
+day2
+##kv
+◆◆
+jeff
+related
+film
+edit
+joseph
+283
+##ark
+cx
+32gb
+order
+g9
+30000
+##ans
+##tty
+s5
+##bee
+かあります
+thread
+xr
+buy
+sh
+005
+land
+spotify
+mx
+##ari
+276
+##verse
+×email
+sf
+why
+##ことて
+244
+7headlines
+nego
+sunny
+dom
+exo
+401
+666
+positioning
+fit
+rgb
+##tton
+278
+kiss
+alexa
+adam
+lp
+みリストを
+##g
+mp
+##ties
+##llow
+amy
+##du
+np
+002
+institute
+271
+##rth
+##lar
+2345
+590
+##des
+sidebar
+15
+imax
+site
+##cky
+##kit
+##ime
+##009
+season
+323
+##fun
+##ンター
+##ひ
+gogoro
+a7
+pu
+lily
+fire
+twd600
+##ッセーシを
+いて
+##vis
+30ml
+##cture
+##をお
+information
+##オ
+close
+friday
+##くれる
+yi
+nick
+てすか
+##tta
+##tel
+6500
+##lock
+cbd
+economy
+254
+かお
+267
+tinker
+double
+375
+8gb
+voice
+##app
+oops
+channel
+today
+985
+##right
+raw
+xyz
+##+
+jim
+edm
+##cent
+7500
+supreme
+814
+ds
+##its
+##asia
+dropbox
+##てすか
+##tti
+books
+272
+100ml
+##tle
+##ller
+##ken
+##more
+##boy
+sex
+309
+##dom
+t3
+##ider
+##なります
+##unch
+1903
+810
+feel
+5500
+##かった
+##put
+により
+s2
+mo
+##gh
+men
+ka
+amoled
+div
+##tr
+##n1
+port
+howard
+##tags
+ken
+dnf
+##nus
+adsense
+##а
+ide
+##へ
+buff
+thunder
+##town
+##ique
+has
+##body
+auto
+pin
+##erry
+tee
+てした
+295
+number
+##the
+##013
+object
+psp
+cool
+udnbkk
+16gb
+##mic
+miui
+##tro
+most
+r2
+##alk
+##nity
+1880
+±0
+##いました
+428
+s4
+law
+version
+##oa
+n1
+sgs
+docomo
+##tf
+##ack
+henry
+fc2
+##ded
+##sco
+##014
+##rite
+286
+0mm
+linkedin
+##ada
+##now
+wii
+##ndy
+ucbug
+##◎
+sputniknews
+legalminer
+##ika
+##xp
+2gb
+##bu
+q10
+oo
+b6
+come
+##rman
+cheese
+ming
+maker
+##gm
+nikon
+##fig
+ppi
+kelly
+##ります
+jchere
+てきます
+ted
+md
+003
+fgo
+tech
+##tto
+dan
+soc
+##gl
+##len
+hair
+earth
+640
+521
+img
+##pper
+##a1
+##てきる
+##ロク
+acca
+##ition
+##ference
+suite
+##ig
+outlook
+##mond
+##cation
+398
+##pr
+279
+101vip
+358
+##999
+282
+64gb
+3800
+345
+airport
+##over
+284
+##おり
+jones
+##ith
+lab
+##su
+##いるのて
+co2
+town
+piece
+##llo
+no1
+vmware
+24h
+##qi
+focus
+reader
+##admin
+##ora
+tb
+false
+##log
+1898
+know
+lan
+838
+##ces
+f4
+##ume
+motel
+stop
+##oper
+na
+flickr
+netcomponents
+##af
+##─
+pose
+williams
+local
+##ound
+##cg
+##site
+##iko
+いお
+274
+5m
+gsm
+con
+##ath
+1902
+friends
+##hip
+cell
+317
+##rey
+780
+cream
+##cks
+012
+##dp
+facebooktwitterpinterestgoogle
+sso
+324
+shtml
+song
+swiss
+##mw
+##キンク
+lumia
+xdd
+string
+tiffany
+522
+marc
+られた
+insee
+russell
+sc
+dell
+##ations
+ok
+camera
+289
+##vs
+##flow
+##late
+classic
+287
+##nter
+stay
+g1
+mtv
+512
+##ever
+##lab
+##nger
+qe
+sata
+ryan
+d1
+50ml
+cms
+##cing
+su
+292
+3300
+editor
+296
+##nap
+security
+sunday
+association
+##ens
+##700
+##bra
+acg
+##かり
+sofascore
+とは
+mkv
+##ign
+jonathan
+gary
+build
+labels
+##oto
+tesla
+moba
+qi
+gohappy
+general
+ajax
+1024
+##かる
+サイト
+society
+##test
+##urs
+wps
+fedora
+##ich
+mozilla
+328
+##480
+##dr
+usa
+urn
+##lina
+##r
+grace
+##die
+##try
+##ader
+1250
+##なり
+elle
+570
+##chen
+##ᆯ
+price
+##ten
+uhz
+##ough
+eq
+##hen
+states
+push
+session
+balance
+wow
+506
+##cus
+##py
+when
+##ward
+##ep
+34e
+wong
+library
+prada
+##サイト
+##cle
+running
+##ree
+313
+ck
+date
+q4
+##ctive
+##ool
+##>
+mk
+##ira
+##163
+388
+die
+secret
+rq
+dota
+buffet
+は1ヶ
+e6
+##ez
+pan
+368
+ha
+##card
+##cha
+2a
+##さ
+alan
+day3
+eye
+f3
+##end
+france
+keep
+adi
+rna
+tvbs
+##ala
+solo
+nova
+##え
+##tail
+##ょう
+support
+##ries
+##なる
+##ved
+base
+copy
+iis
+fps
+##ways
+hero
+hgih
+profile
+fish
+mu
+ssh
+entertainment
+chang
+##wd
+click
+cake
+##ond
+pre
+##tom
+kic
+pixel
+##ov
+##fl
+product
+6a
+##pd
+dear
+##gate
+es
+yumi
+audio
+##²
+##sky
+echo
+bin
+where
+##ture
+329
+##ape
+find
+sap
+isis
+##なと
+nand
+##101
+##load
+##ream
+band
+a6
+525
+never
+##post
+festival
+50cm
+##we
+555
+guide
+314
+zenfone
+##ike
+335
+gd
+forum
+jessica
+strong
+alexander
+##ould
+software
+allen
+##ious
+program
+360°
+else
+lohasthree
+##gar
+することかてきます
+please
+##れます
+rc
+##ggle
+##ric
+bim
+50000
+##own
+eclipse
+355
+brian
+3ds
+##side
+061
+361
+##other
+##ける
+##tech
+##ator
+485
+engine
+##ged
+##t
+plaza
+##fit
+cia
+ngo
+westbrook
+shi
+tbs
+50mm
+##みませんか
+sci
+291
+reuters
+##ily
+contextlink
+##hn
+af
+##cil
+bridge
+very
+##cel
+1890
+cambridge
+##ize
+15g
+##aid
+##data
+790
+frm
+##head
+award
+butler
+##sun
+meta
+##mar
+america
+ps3
+puma
+pmid
+##すか
+lc
+670
+kitchen
+##lic
+オーフン5
+きなしソフトサーヒス
+そして
+day1
+future
+★★★★
+##text
+##page
+##rris
+pm1
+##ket
+fans
+##っています
+1001
+christian
+bot
+kids
+trackback
+##hai
+c3
+display
+##hl
+n2
+1896
+idea
+さんも
+##sent
+airmail
+##ug
+##men
+pwm
+けます
+028
+##lution
+369
+852
+awards
+schemas
+354
+asics
+wikipedia
+font
+##tional
+##vy
+c2
+293
+##れている
+##dget
+##ein
+っている
+contact
+pepper
+スキル
+339
+##~5
+294
+##uel
+##ument
+730
+##hang
+みてす
+q5
+##sue
+rain
+##ndi
+wei
+swatch
+##cept
+わせ
+331
+popular
+##ste
+##tag
+p2
+501
+trc
+1899
+##west
+##live
+justin
+honda
+ping
+messenger
+##rap
+v9
+543
+##とは
+unity
+appqq
+はすへて
+025
+leo
+##tone
+##テ
+##ass
+uniqlo
+##010
+502
+her
+jane
+memory
+moneydj
+##tical
+human
+12306
+していると
+##m2
+coc
+miacare
+##mn
+tmt
+##core
+vim
+kk
+##may
+fan
+target
+use
+too
+338
+435
+2050
+867
+737
+fast
+##2c
+services
+##ope
+omega
+energy
+##わ
+pinkoi
+1a
+##なから
+##rain
+jackson
+##ement
+##シャンルの
+374
+366
+そんな
+p9
+rd
+##ᆨ
+1111
+##tier
+##vic
+zone
+##│
+385
+690
+dl
+isofix
+cpa
+m4
+322
+kimi
+めて
+davis
+##lay
+lulu
+##uck
+050
+weeks
+qs
+##hop
+920
+##n
+ae
+##ear
+~5
+eia
+405
+##fly
+korea
+jpeg
+boost
+##ship
+small
+##リア
+1860
+eur
+297
+425
+valley
+##iel
+simple
+##ude
+rn
+k2
+##ena
+されます
+non
+patrick
+しているから
+##ナー
+feed
+5757
+30g
+process
+well
+qqmei
+##thing
+they
+aws
+lu
+pink
+##ters
+##kin
+または
+board
+##vertisement
+wine
+##ien
+unicode
+##dge
+r1
+359
+##tant
+いを
+##twitter
+##3c
+cool1
+される
+##れて
+##l
+isp
+##012
+standard
+45㎡2
+402
+##150
+matt
+##fu
+326
+##iner
+googlemsn
+pixnetfacebookyahoo
+##ラン
+x7
+886
+##uce
+メーカー
+sao
+##ev
+##きました
+##file
+9678
+403
+xddd
+shirt
+6l
+##rio
+##hat
+3mm
+givenchy
+ya
+bang
+##lio
+monday
+crystal
+ロクイン
+##abc
+336
+head
+890
+ubuntuforumwikilinuxpastechat
+##vc
+##~20
+##rity
+cnc
+7866
+ipv6
+null
+1897
+##ost
+yang
+imsean
+tiger
+##fet
+##ンス
+352
+##=
+dji
+327
+ji
+maria
+##come
+##んて
+foundation
+3100
+##beth
+##なった
+1m
+601
+active
+##aft
+##don
+3p
+sr
+349
+emma
+##khz
+living
+415
+353
+1889
+341
+709
+457
+sas
+x6
+##face
+pptv
+x4
+##mate
+han
+sophie
+##jing
+337
+fifa
+##mand
+other
+sale
+inwedding
+##gn
+てきちゃいます
+##mmy
+##pmlast
+bad
+nana
+nbc
+してみてくたさいね
+なとはお
+##wu
+##かあります
+##あ
+note7
+single
+##340
+せからこ
+してくたさい♪この
+しにはとんとんワークケートを
+するとあなたにもっとマッチした
+ならワークケートへ
+もみつかっちゃうかも
+ワークケートの
+##bel
+window
+##dio
+##ht
+union
+age
+382
+14
+##ivity
+##y
+コメント
+domain
+neo
+##isa
+##lter
+5k
+f5
+steven
+##cts
+powerpoint
+tft
+self
+g2
+ft
+##テル
+zol
+##act
+mwc
+381
+343
+もう
+nbapop
+408
+てある
+eds
+ace
+##room
+previous
+author
+tomtom
+il
+##ets
+hu
+financial
+☆☆☆
+っています
+bp
+5t
+chi
+1gb
+##hg
+fairmont
+cross
+008
+gay
+h2
+function
+##けて
+356
+also
+1b
+625
+##ータ
+##raph
+1894
+3~5
+##ils
+i3
+334
+avenue
+##host
+による
+##bon
+##tsu
+message
+navigation
+50g
+fintech
+h6
+##ことを
+8cm
+##ject
+##vas
+##firm
+credit
+##wf
+xxxx
+form
+##nor
+##space
+huawei
+plan
+json
+sbl
+##dc
+machine
+921
+392
+wish
+##120
+##sol
+windows7
+edward
+##ために
+development
+washington
+##nsis
+lo
+818
+##sio
+##ym
+##bor
+planet
+##~8
+##wt
+ieee
+gpa
+##めて
+camp
+ann
+gm
+##tw
+##oka
+connect
+##rss
+##work
+##atus
+wall
+chicken
+soul
+2mm
+##times
+fa
+##ather
+##cord
+009
+##eep
+hitachi
+gui
+harry
+##pan
+e1
+disney
+##press
+##ーション
+wind
+386
+frigidaire
+##tl
+liu
+hsu
+332
+basic
+von
+ev
+いた
+てきる
+スホンサーサイト
+learning
+##ull
+expedia
+archives
+change
+##wei
+santa
+cut
+ins
+6gb
+turbo
+brand
+cf1
+508
+004
+return
+747
+##rip
+h1
+##nis
+##をこ
+128gb
+##にお
+3t
+application
+しており
+emc
+rx
+##oon
+384
+quick
+412
+15058
+wilson
+wing
+chapter
+##bug
+beyond
+##cms
+##dar
+##oh
+zoom
+e2
+trip
+sb
+##nba
+rcep
+342
+aspx
+ci
+080
+gc
+gnu
+める
+##count
+advanced
+dance
+dv
+##url
+##ging
+367
+8591
+am09
+shadow
+battle
+346
+##i
+##cia
+##という
+emily
+##のてす
+##tation
+host
+ff
+techorz
+sars
+##mini
+##mporary
+##ering
+nc
+4200
+798
+##next
+cma
+##mbps
+##gas
+##ift
+##dot
+##ィ
+455
+##~17
+amana
+##りの
+426
+##ros
+ir
+00㎡1
+##eet
+##ible
+##↓
+710
+ˋ▽ˊ
+##aka
+dcs
+iq
+##v
+l1
+##lor
+maggie
+##011
+##iu
+588
+##~1
+830
+##gt
+1tb
+articles
+create
+##burg
+##iki
+database
+fantasy
+##rex
+##cam
+dlc
+dean
+##you
+hard
+path
+gaming
+victoria
+maps
+cb
+##lee
+##itor
+overchicstoretvhome
+systems
+##xt
+416
+p3
+sarah
+760
+##nan
+407
+486
+x9
+install
+second
+626
+##ann
+##ph
+##rcle
+##nic
+860
+##nar
+ec
+##とう
+768
+metro
+chocolate
+##rian
+~4
+##table
+##しています
+skin
+##sn
+395
+mountain
+##0mm
+inparadise
+6m
+7x24
+ib
+4800
+##jia
+eeworld
+creative
+g5
+g3
+357
+parker
+ecfa
+village
+からの
+18000
+sylvia
+サーヒス
+hbl
+##ques
+##onsored
+##x2
+##きます
+##v4
+##tein
+ie6
+383
+##stack
+389
+ver
+##ads
+##baby
+sound
+bbe
+##110
+##lone
+##uid
+ads
+022
+gundam
+351
+thinkpad
+006
+scrum
+match
+##ave
+mems
+##470
+##oy
+##なりました
+##talk
+glass
+lamigo
+span
+##eme
+job
+##a5
+jay
+wade
+kde
+498
+##lace
+ocean
+tvg
+##covery
+##r3
+##ners
+##rea
+junior
+think
+##aine
+cover
+##ision
+##sia
+↓↓
+##bow
+msi
+413
+458
+406
+##love
+711
+801
+soft
+z2
+##pl
+456
+1840
+mobil
+mind
+##uy
+427
+nginx
+##oi
+めた
+##rr
+6221
+##mple
+##sson
+##ーシてす
+371
+##nts
+91tv
+comhd
+crv3000
+##uard
+1868
+397
+deep
+lost
+field
+gallery
+##bia
+rate
+spf
+redis
+traction
+930
+icloud
+011
+なら
+fe
+jose
+372
+##tory
+into
+sohu
+fx
+899
+379
+kicstart2
+##hia
+すく
+##~3
+##sit
+ra
+24
+##walk
+##xure
+500g
+##pact
+pacific
+xa
+natural
+carlo
+##250
+##walker
+1850
+##can
+cto
+gigi
+516
+##サー
+pen
+##hoo
+ob
+matlab
+##b
+##yy
+13913459
+##iti
+mango
+##bbs
+sense
+c5
+oxford
+##ニア
+walker
+jennifer
+##ola
+course
+##bre
+701
+##pus
+##rder
+lucky
+075
+##ぁ
+ivy
+なお
+##nia
+sotheby
+side
+##ugh
+joy
+##orage
+##ush
+##bat
+##dt
+364
+r9
+##2d
+##gio
+511
+country
+wear
+##lax
+##~7
+##moon
+393
+seven
+study
+411
+348
+lonzo
+8k
+##ェ
+evolution
+##イフ
+##kk
+gs
+kd
+##レス
+arduino
+344
+b12
+##lux
+arpg
+##rdon
+cook
+##x5
+dark
+five
+##als
+##ida
+とても
+sign
+362
+##ちの
+something
+20mm
+##nda
+387
+##posted
+fresh
+tf
+1870
+422
+cam
+##mine
+##skip
+##form
+##ssion
+education
+394
+##tee
+dyson
+stage
+##jie
+want
+##night
+epson
+pack
+あります
+##ppy
+テリヘル
+##█
+wd
+##eh
+##rence
+left
+##lvin
+golden
+mhz
+discovery
+##trix
+##n2
+loft
+##uch
+##dra
+##sse
+speed
+~1
+1mdb
+sorry
+welcome
+##urn
+wave
+gaga
+##lmer
+teddy
+##160
+トラックハック
+せよ
+611
+##f2016
+378
+rp
+##sha
+rar
+##あなたに
+##きた
+840
+holiday
+##ュー
+373
+074
+##vg
+##nos
+##rail
+gartner
+gi
+6p
+##dium
+kit
+488
+b3
+eco
+##ろう
+20g
+sean
+##stone
+autocad
+nu
+##np
+f16
+write
+029
+m5
+##ias
+images
+atp
+##dk
+fsm
+504
+1350
+ve
+52kb
+##xxx
+##のに
+##cake
+414
+unit
+lim
+ru
+1v
+##ification
+published
+angela
+16g
+analytics
+ak
+##q
+##nel
+gmt
+##icon
+again
+##₂
+##bby
+ios11
+445
+かこさいます
+waze
+いてす
+##ハ
+9985
+##ust
+##ティー
+framework
+##007
+iptv
+delete
+52sykb
+cl
+wwdc
+027
+30cm
+##fw
+##ての
+1389
+##xon
+brandt
+##ses
+##dragon
+tc
+vetements
+anne
+monte
+modern
+official
+##へて
+##ere
+##nne
+##oud
+もちろん
+50
+etnews
+##a2
+##graphy
+421
+863
+##ちゃん
+444
+##rtex
+##てお
+l2
+##gma
+mount
+ccd
+たと
+archive
+morning
+tan
+ddos
+e7
+##ホ
+day4
+##ウ
+gis
+453
+its
+495
+factory
+bruce
+pg
+##ito
+ってくたさい
+guest
+cdma
+##lling
+536
+n3
+しかし
+3~4
+mega
+eyes
+ro
+13
+women
+dac
+church
+##jun
+singapore
+##facebook
+6991
+starbucks
+##tos
+##stin
+##shine
+zen
+##mu
+tina
+20℃
+1893
+##たけて
+503
+465
+request
+##gence
+qt
+##っ
+1886
+347
+363
+q7
+##zzi
+diary
+##tore
+409
+##ead
+468
+cst
+##osa
+canada
+agent
+va
+##jiang
+##ちは
+##ーク
+##lam
+sg
+##nix
+##sday
+##よって
+g6
+##master
+bing
+##zl
+charlie
+16
+8mm
+nb40
+##ーン
+thai
+##ルフ
+ln284ct
+##itz
+##2f
+bonnie
+##food
+##lent
+originals
+##stro
+##lts
+418
+∟∣
+##bscribe
+children
+ntd
+yesstyle
+##かも
+hmv
+##tment
+d5
+2cm
+arts
+sms
+##pn
+##я
+##いい
+topios9
+539
+lifestyle
+virtual
+##ague
+xz
+##deo
+muji
+024
+unt
+##nnis
+##ᅩ
+faq1
+1884
+396
+##ette
+fly
+64㎡
+はしめまして
+441
+curry
+##pop
+のこ
+release
+##←
+##◆◆
+##cast
+073
+ありな
+500ml
+##ews
+5c
+##stle
+ios7
+##ima
+787
+dog
+lenovo
+##r4
+roger
+013
+cbs
+vornado
+100m
+417
+##desk
+##クok
+##ald
+1867
+9595
+2900
+##van
+oil
+##x
+some
+break
+common
+##jy
+##lines
+g7
+twice
+419
+ella
+nano
+belle
+にこ
+##mes
+##self
+##note
+jb
+##ことかてきます
+benz
+##との
+##ova
+451
+save
+##wing
+##ますのて
+kai
+りは
+##hua
+##rect
+rainer
+##unge
+448
+##0m
+adsl
+##かな
+guestname
+##uma
+##kins
+##zu
+tokichoi
+##price
+county
+##med
+##mus
+rmk
+391
+address
+vm
+えて
+openload
+##group
+##hin
+##iginal
+amg
+urban
+##oz
+jobs
+emi
+##public
+beautiful
+##sch
+album
+##dden
+##bell
+jerry
+works
+hostel
+miller
+##drive
+##rmin
+##10
+376
+boot
+828
+##370
+##fx
+##cm~
+1885
+##nome
+##ctionary
+##oman
+##lish
+##cr
+##hm
+433
+##how
+432
+francis
+xi
+c919
+b5
+evernote
+##uc
+vga
+##3000
+coupe
+##urg
+##cca
+##uality
+019
+6g
+れる
+multi
+##また
+##ett
+em
+hey
+##ani
+##tax
+##rma
+inside
+than
+740
+leonnhurt
+##jin
+ict
+れた
+bird
+notes
+200mm
+くの
+##dical
+##lli
+result
+442
+iu
+ee
+438
+smap
+gopro
+##last
+yin
+pure
+998
+32g
+けた
+5kg
+##dan
+##rame
+mama
+##oot
+bean
+marketing
+##hur
+2l
+bella
+sync
+xuite
+##ground
+515
+discuz
+##getrelax
+##ince
+##bay
+##5s
+cj
+##イス
+gmat
+apt
+##pass
+jing
+##rix
+c4
+rich
+##とても
+niusnews
+##ello
+bag
+770
+##eting
+##mobile
+18
+culture
+015
+##のてすか
+377
+1020
+area
+##ience
+616
+details
+gp
+universal
+silver
+dit
+はお
+private
+ddd
+u11
+kanshu
+##ified
+fung
+##nny
+dx
+##520
+tai
+475
+023
+##fr
+##lean
+3s
+##pin
+429
+##rin
+25000
+ly
+rick
+##bility
+usb3
+banner
+##baru
+##gion
+metal
+dt
+vdf
+1871
+karl
+qualcomm
+bear
+1010
+oldid
+ian
+jo
+##tors
+population
+##ernel
+1882
+mmorpg
+##mv
+##bike
+603
+##©
+ww
+friend
+##ager
+exhibition
+##del
+##pods
+fpx
+structure
+##free
+##tings
+kl
+##rley
+##copyright
+##mma
+california
+3400
+orange
+yoga
+4l
+canmake
+honey
+##anda
+##コメント
+595
+nikkie
+##ルハイト
+dhl
+publishing
+##mall
+##gnet
+20cm
+513
+##クセス
+##┅
+e88
+970
+##dog
+fishbase
+##!
+##"
+###
+##$
+##%
+##&
+##'
+##(
+##)
+##*
+##+
+##,
+##-
+##.
+##/
+##:
+##;
+##<
+##=
+##>
+##?
+##@
+##[
+##\
+##]
+##^
+##_
+##{
+##|
+##}
+##~
+##£
+##¤
+##¥
+##§
+##«
+##±
+##³
+##µ
+##·
+##¹
+##º
+##»
+##¼
+##ß
+##æ
+##÷
+##ø
+##đ
+##ŋ
+##ɔ
+##ə
+##ɡ
+##ʰ
+##ˇ
+##ˈ
+##ˊ
+##ˋ
+##ˍ
+##ː
+##˙
+##˚
+##ˢ
+##α
+##β
+##γ
+##δ
+##ε
+##η
+##θ
+##ι
+##κ
+##λ
+##μ
+##ν
+##ο
+##π
+##ρ
+##ς
+##σ
+##τ
+##υ
+##φ
+##χ
+##ψ
+##б
+##в
+##г
+##д
+##е
+##ж
+##з
+##к
+##л
+##м
+##н
+##о
+##п
+##р
+##с
+##т
+##у
+##ф
+##х
+##ц
+##ч
+##ш
+##ы
+##ь
+##і
+##ا
+##ب
+##ة
+##ت
+##د
+##ر
+##س
+##ع
+##ل
+##م
+##ن
+##ه
+##و
+##ي
+##۩
+##ก
+##ง
+##น
+##ม
+##ย
+##ร
+##อ
+##า
+##เ
+##๑
+##་
+##ღ
+##ᄀ
+##ᄁ
+##ᄂ
+##ᄃ
+##ᄅ
+##ᄆ
+##ᄇ
+##ᄈ
+##ᄉ
+##ᄋ
+##ᄌ
+##ᄎ
+##ᄏ
+##ᄐ
+##ᄑ
+##ᄒ
+##ᅢ
+##ᅣ
+##ᅥ
+##ᅦ
+##ᅧ
+##ᅨ
+##ᅪ
+##ᅬ
+##ᅭ
+##ᅮ
+##ᅯ
+##ᅲ
+##ᅳ
+##ᅴ
+##ᆷ
+##ᆸ
+##ᆺ
+##ᆻ
+##ᗜ
+##ᵃ
+##ᵉ
+##ᵍ
+##ᵏ
+##ᵐ
+##ᵒ
+##ᵘ
+##‖
+##„
+##†
+##•
+##‥
+##‧
+##
+##‰
+##′
+##″
+##‹
+##›
+##※
+##‿
+##⁄
+##ⁱ
+##⁺
+##ⁿ
+##₁
+##₃
+##₄
+##€
+##№
+##ⅰ
+##ⅱ
+##ⅲ
+##ⅳ
+##ⅴ
+##↔
+##↗
+##↘
+##⇒
+##∀
+##−
+##∕
+##∙
+##√
+##∞
+##∟
+##∠
+##∣
+##∩
+##∮
+##∶
+##∼
+##∽
+##≈
+##≒
+##≡
+##≤
+##≥
+##≦
+##≧
+##≪
+##≫
+##⊙
+##⋅
+##⋈
+##⋯
+##⌒
+##①
+##②
+##③
+##④
+##⑤
+##⑥
+##⑦
+##⑧
+##⑨
+##⑩
+##⑴
+##⑵
+##⑶
+##⑷
+##⑸
+##⒈
+##⒉
+##⒊
+##⒋
+##ⓒ
+##ⓔ
+##ⓘ
+##━
+##┃
+##┆
+##┊
+##┌
+##└
+##├
+##┣
+##═
+##║
+##╚
+##╞
+##╠
+##╭
+##╮
+##╯
+##╰
+##╱
+##╳
+##▂
+##▃
+##▅
+##▇
+##▉
+##▋
+##▌
+##▍
+##▎
+##□
+##▪
+##▫
+##▬
+##△
+##▶
+##►
+##▽
+##◇
+##◕
+##◠
+##◢
+##◤
+##☀
+##☕
+##☞
+##☺
+##☼
+##♀
+##♂
+##♠
+##♡
+##♣
+##♦
+##♫
+##♬
+##✈
+##✔
+##✕
+##✖
+##✦
+##✨
+##✪
+##✰
+##✿
+##❀
+##➜
+##➤
+##⦿
+##、
+##。
+##〃
+##々
+##〇
+##〈
+##〉
+##《
+##》
+##「
+##」
+##『
+##』
+##【
+##】
+##〓
+##〔
+##〕
+##〖
+##〗
+##〜
+##〝
+##〞
+##ぃ
+##ぇ
+##ぬ
+##ふ
+##ほ
+##む
+##ゃ
+##ゅ
+##ゆ
+##ょ
+##゜
+##ゝ
+##ァ
+##ゥ
+##エ
+##ォ
+##ケ
+##サ
+##セ
+##ソ
+##ッ
+##ニ
+##ヌ
+##ネ
+##ノ
+##ヘ
+##モ
+##ャ
+##ヤ
+##ュ
+##ユ
+##ョ
+##ヨ
+##ワ
+##ヲ
+##・
+##ヽ
+##ㄅ
+##ㄆ
+##ㄇ
+##ㄉ
+##ㄋ
+##ㄌ
+##ㄍ
+##ㄎ
+##ㄏ
+##ㄒ
+##ㄚ
+##ㄛ
+##ㄞ
+##ㄟ
+##ㄢ
+##ㄤ
+##ㄥ
+##ㄧ
+##ㄨ
+##ㆍ
+##㈦
+##㊣
+##㗎
+##一
+##丁
+##七
+##万
+##丈
+##三
+##上
+##下
+##不
+##与
+##丐
+##丑
+##专
+##且
+##丕
+##世
+##丘
+##丙
+##业
+##丛
+##东
+##丝
+##丞
+##丟
+##両
+##丢
+##两
+##严
+##並
+##丧
+##丨
+##个
+##丫
+##中
+##丰
+##串
+##临
+##丶
+##丸
+##丹
+##为
+##主
+##丼
+##丽
+##举
+##丿
+##乂
+##乃
+##久
+##么
+##义
+##之
+##乌
+##乍
+##乎
+##乏
+##乐
+##乒
+##乓
+##乔
+##乖
+##乗
+##乘
+##乙
+##乜
+##九
+##乞
+##也
+##习
+##乡
+##书
+##乩
+##买
+##乱
+##乳
+##乾
+##亀
+##亂
+##了
+##予
+##争
+##事
+##二
+##于
+##亏
+##云
+##互
+##五
+##井
+##亘
+##亙
+##亚
+##些
+##亜
+##亞
+##亟
+##亡
+##亢
+##交
+##亥
+##亦
+##产
+##亨
+##亩
+##享
+##京
+##亭
+##亮
+##亲
+##亳
+##亵
+##人
+##亿
+##什
+##仁
+##仃
+##仄
+##仅
+##仆
+##仇
+##今
+##介
+##仍
+##从
+##仏
+##仑
+##仓
+##仔
+##仕
+##他
+##仗
+##付
+##仙
+##仝
+##仞
+##仟
+##代
+##令
+##以
+##仨
+##仪
+##们
+##仮
+##仰
+##仲
+##件
+##价
+##任
+##份
+##仿
+##企
+##伉
+##伊
+##伍
+##伎
+##伏
+##伐
+##休
+##伕
+##众
+##优
+##伙
+##会
+##伝
+##伞
+##伟
+##传
+##伢
+##伤
+##伦
+##伪
+##伫
+##伯
+##估
+##伴
+##伶
+##伸
+##伺
+##似
+##伽
+##佃
+##但
+##佇
+##佈
+##位
+##低
+##住
+##佐
+##佑
+##体
+##佔
+##何
+##佗
+##佘
+##余
+##佚
+##佛
+##作
+##佝
+##佞
+##佟
+##你
+##佢
+##佣
+##佤
+##佥
+##佩
+##佬
+##佯
+##佰
+##佳
+##併
+##佶
+##佻
+##佼
+##使
+##侃
+##侄
+##來
+##侈
+##例
+##侍
+##侏
+##侑
+##侖
+##侗
+##供
+##依
+##侠
+##価
+##侣
+##侥
+##侦
+##侧
+##侨
+##侬
+##侮
+##侯
+##侵
+##侶
+##侷
+##便
+##係
+##促
+##俄
+##俊
+##俎
+##俏
+##俐
+##俑
+##俗
+##俘
+##俚
+##保
+##俞
+##俟
+##俠
+##信
+##俨
+##俩
+##俪
+##俬
+##俭
+##修
+##俯
+##俱
+##俳
+##俸
+##俺
+##俾
+##倆
+##倉
+##個
+##倌
+##倍
+##倏
+##們
+##倒
+##倔
+##倖
+##倘
+##候
+##倚
+##倜
+##借
+##倡
+##値
+##倦
+##倩
+##倪
+##倫
+##倬
+##倭
+##倶
+##债
+##值
+##倾
+##偃
+##假
+##偈
+##偉
+##偌
+##偎
+##偏
+##偕
+##做
+##停
+##健
+##側
+##偵
+##偶
+##偷
+##偻
+##偽
+##偿
+##傀
+##傅
+##傍
+##傑
+##傘
+##備
+##傚
+##傢
+##傣
+##傥
+##储
+##傩
+##催
+##傭
+##傲
+##傳
+##債
+##傷
+##傻
+##傾
+##僅
+##働
+##像
+##僑
+##僕
+##僖
+##僚
+##僥
+##僧
+##僭
+##僮
+##僱
+##僵
+##價
+##僻
+##儀
+##儂
+##億
+##儆
+##儉
+##儋
+##儒
+##儕
+##儘
+##償
+##儡
+##優
+##儲
+##儷
+##儼
+##儿
+##兀
+##允
+##元
+##兄
+##充
+##兆
+##兇
+##先
+##光
+##克
+##兌
+##免
+##児
+##兑
+##兒
+##兔
+##兖
+##党
+##兜
+##兢
+##入
+##內
+##全
+##兩
+##八
+##公
+##六
+##兮
+##兰
+##共
+##兲
+##关
+##兴
+##兵
+##其
+##具
+##典
+##兹
+##养
+##兼
+##兽
+##冀
+##内
+##円
+##冇
+##冈
+##冉
+##冊
+##册
+##再
+##冏
+##冒
+##冕
+##冗
+##写
+##军
+##农
+##冠
+##冢
+##冤
+##冥
+##冨
+##冪
+##冬
+##冯
+##冰
+##冲
+##决
+##况
+##冶
+##冷
+##冻
+##冼
+##冽
+##冾
+##净
+##凄
+##准
+##凇
+##凈
+##凉
+##凋
+##凌
+##凍
+##减
+##凑
+##凛
+##凜
+##凝
+##几
+##凡
+##凤
+##処
+##凪
+##凭
+##凯
+##凰
+##凱
+##凳
+##凶
+##凸
+##凹
+##出
+##击
+##函
+##凿
+##刀
+##刁
+##刃
+##分
+##切
+##刈
+##刊
+##刍
+##刎
+##刑
+##划
+##列
+##刘
+##则
+##刚
+##创
+##初
+##删
+##判
+##別
+##刨
+##利
+##刪
+##别
+##刮
+##到
+##制
+##刷
+##券
+##刹
+##刺
+##刻
+##刽
+##剁
+##剂
+##剃
+##則
+##剉
+##削
+##剋
+##剌
+##前
+##剎
+##剐
+##剑
+##剔
+##剖
+##剛
+##剜
+##剝
+##剣
+##剤
+##剥
+##剧
+##剩
+##剪
+##副
+##割
+##創
+##剷
+##剽
+##剿
+##劃
+##劇
+##劈
+##劉
+##劊
+##劍
+##劏
+##劑
+##力
+##劝
+##办
+##功
+##加
+##务
+##劣
+##动
+##助
+##努
+##劫
+##劭
+##励
+##劲
+##劳
+##労
+##劵
+##効
+##劾
+##势
+##勁
+##勃
+##勇
+##勉
+##勋
+##勐
+##勒
+##動
+##勖
+##勘
+##務
+##勛
+##勝
+##勞
+##募
+##勢
+##勤
+##勧
+##勳
+##勵
+##勸
+##勺
+##勻
+##勾
+##勿
+##匀
+##包
+##匆
+##匈
+##匍
+##匐
+##匕
+##化
+##北
+##匙
+##匝
+##匠
+##匡
+##匣
+##匪
+##匮
+##匯
+##匱
+##匹
+##区
+##医
+##匾
+##匿
+##區
+##十
+##千
+##卅
+##升
+##午
+##卉
+##半
+##卍
+##华
+##协
+##卑
+##卒
+##卓
+##協
+##单
+##卖
+##南
+##単
+##博
+##卜
+##卞
+##卟
+##占
+##卡
+##卢
+##卤
+##卦
+##卧
+##卫
+##卮
+##卯
+##印
+##危
+##即
+##却
+##卵
+##卷
+##卸
+##卻
+##卿
+##厂
+##厄
+##厅
+##历
+##厉
+##压
+##厌
+##厕
+##厘
+##厚
+##厝
+##原
+##厢
+##厥
+##厦
+##厨
+##厩
+##厭
+##厮
+##厲
+##厳
+##去
+##县
+##叁
+##参
+##參
+##又
+##叉
+##及
+##友
+##双
+##反
+##収
+##发
+##叔
+##取
+##受
+##变
+##叙
+##叛
+##叟
+##叠
+##叡
+##叢
+##口
+##古
+##句
+##另
+##叨
+##叩
+##只
+##叫
+##召
+##叭
+##叮
+##可
+##台
+##叱
+##史
+##右
+##叵
+##叶
+##号
+##司
+##叹
+##叻
+##叼
+##叽
+##吁
+##吃
+##各
+##吆
+##合
+##吉
+##吊
+##吋
+##同
+##名
+##后
+##吏
+##吐
+##向
+##吒
+##吓
+##吕
+##吖
+##吗
+##君
+##吝
+##吞
+##吟
+##吠
+##吡
+##否
+##吧
+##吨
+##吩
+##含
+##听
+##吭
+##吮
+##启
+##吱
+##吳
+##吴
+##吵
+##吶
+##吸
+##吹
+##吻
+##吼
+##吽
+##吾
+##呀
+##呂
+##呃
+##呆
+##呈
+##告
+##呋
+##呎
+##呐
+##呓
+##呕
+##呗
+##员
+##呛
+##呜
+##呢
+##呤
+##呦
+##周
+##呱
+##呲
+##味
+##呵
+##呷
+##呸
+##呻
+##呼
+##命
+##咀
+##咁
+##咂
+##咄
+##咆
+##咋
+##和
+##咎
+##咏
+##咐
+##咒
+##咔
+##咕
+##咖
+##咗
+##咘
+##咙
+##咚
+##咛
+##咣
+##咤
+##咦
+##咧
+##咨
+##咩
+##咪
+##咫
+##咬
+##咭
+##咯
+##咱
+##咲
+##咳
+##咸
+##咻
+##咽
+##咿
+##哀
+##品
+##哂
+##哄
+##哆
+##哇
+##哈
+##哉
+##哋
+##哌
+##响
+##哎
+##哏
+##哐
+##哑
+##哒
+##哔
+##哗
+##哟
+##員
+##哥
+##哦
+##哧
+##哨
+##哩
+##哪
+##哭
+##哮
+##哲
+##哺
+##哼
+##哽
+##唁
+##唄
+##唆
+##唇
+##唉
+##唏
+##唐
+##唑
+##唔
+##唠
+##唤
+##唧
+##唬
+##售
+##唯
+##唰
+##唱
+##唳
+##唷
+##唸
+##唾
+##啃
+##啄
+##商
+##啉
+##啊
+##問
+##啓
+##啕
+##啖
+##啜
+##啞
+##啟
+##啡
+##啤
+##啥
+##啦
+##啧
+##啪
+##啫
+##啬
+##啮
+##啰
+##啱
+##啲
+##啵
+##啶
+##啷
+##啸
+##啻
+##啼
+##啾
+##喀
+##喂
+##喃
+##善
+##喆
+##喇
+##喉
+##喊
+##喋
+##喎
+##喏
+##喔
+##喘
+##喙
+##喚
+##喜
+##喝
+##喟
+##喧
+##喪
+##喫
+##喬
+##單
+##喰
+##喱
+##喲
+##喳
+##喵
+##営
+##喷
+##喹
+##喺
+##喻
+##喽
+##嗅
+##嗆
+##嗇
+##嗎
+##嗑
+##嗒
+##嗓
+##嗔
+##嗖
+##嗚
+##嗜
+##嗝
+##嗟
+##嗡
+##嗣
+##嗤
+##嗦
+##嗨
+##嗪
+##嗬
+##嗯
+##嗰
+##嗲
+##嗳
+##嗶
+##嗷
+##嗽
+##嘀
+##嘅
+##嘆
+##嘈
+##嘉
+##嘌
+##嘍
+##嘎
+##嘔
+##嘖
+##嘗
+##嘘
+##嘚
+##嘛
+##嘜
+##嘞
+##嘟
+##嘢
+##嘣
+##嘤
+##嘧
+##嘩
+##嘭
+##嘮
+##嘯
+##嘰
+##嘱
+##嘲
+##嘴
+##嘶
+##嘸
+##嘹
+##嘻
+##嘿
+##噁
+##噌
+##噎
+##噓
+##噔
+##噗
+##噙
+##噜
+##噠
+##噢
+##噤
+##器
+##噩
+##噪
+##噬
+##噱
+##噴
+##噶
+##噸
+##噹
+##噻
+##噼
+##嚀
+##嚇
+##嚎
+##嚏
+##嚐
+##嚓
+##嚕
+##嚟
+##嚣
+##嚥
+##嚨
+##嚮
+##嚴
+##嚷
+##嚼
+##囂
+##囉
+##囊
+##囍
+##囑
+##囔
+##囗
+##囚
+##四
+##囝
+##回
+##囟
+##因
+##囡
+##团
+##団
+##囤
+##囧
+##囪
+##囫
+##园
+##困
+##囱
+##囲
+##図
+##围
+##囹
+##固
+##国
+##图
+##囿
+##圃
+##圄
+##圆
+##圈
+##國
+##圍
+##圏
+##園
+##圓
+##圖
+##團
+##圜
+##土
+##圣
+##圧
+##在
+##圩
+##圭
+##地
+##圳
+##场
+##圻
+##圾
+##址
+##坂
+##均
+##坊
+##坍
+##坎
+##坏
+##坐
+##坑
+##块
+##坚
+##坛
+##坝
+##坞
+##坟
+##坠
+##坡
+##坤
+##坦
+##坨
+##坪
+##坯
+##坳
+##坵
+##坷
+##垂
+##垃
+##垄
+##型
+##垒
+##垚
+##垛
+##垠
+##垢
+##垣
+##垦
+##垩
+##垫
+##垭
+##垮
+##垵
+##埂
+##埃
+##埋
+##城
+##埔
+##埕
+##埗
+##域
+##埠
+##埤
+##埵
+##執
+##埸
+##培
+##基
+##埼
+##堀
+##堂
+##堃
+##堅
+##堆
+##堇
+##堑
+##堕
+##堙
+##堡
+##堤
+##堪
+##堯
+##堰
+##報
+##場
+##堵
+##堺
+##堿
+##塊
+##塌
+##塑
+##塔
+##塗
+##塘
+##塚
+##塞
+##塢
+##塩
+##填
+##塬
+##塭
+##塵
+##塾
+##墀
+##境
+##墅
+##墉
+##墊
+##墒
+##墓
+##増
+##墘
+##墙
+##墜
+##增
+##墟
+##墨
+##墩
+##墮
+##墳
+##墻
+##墾
+##壁
+##壅
+##壆
+##壇
+##壊
+##壑
+##壓
+##壕
+##壘
+##壞
+##壟
+##壢
+##壤
+##壩
+##士
+##壬
+##壮
+##壯
+##声
+##売
+##壳
+##壶
+##壹
+##壺
+##壽
+##处
+##备
+##変
+##复
+##夏
+##夔
+##夕
+##外
+##夙
+##多
+##夜
+##够
+##夠
+##夢
+##夥
+##大
+##天
+##太
+##夫
+##夭
+##央
+##夯
+##失
+##头
+##夷
+##夸
+##夹
+##夺
+##夾
+##奂
+##奄
+##奇
+##奈
+##奉
+##奋
+##奎
+##奏
+##奐
+##契
+##奔
+##奕
+##奖
+##套
+##奘
+##奚
+##奠
+##奢
+##奥
+##奧
+##奪
+##奬
+##奮
+##女
+##奴
+##奶
+##奸
+##她
+##好
+##如
+##妃
+##妄
+##妆
+##妇
+##妈
+##妊
+##妍
+##妒
+##妓
+##妖
+##妘
+##妙
+##妝
+##妞
+##妣
+##妤
+##妥
+##妨
+##妩
+##妪
+##妮
+##妲
+##妳
+##妹
+##妻
+##妾
+##姆
+##姉
+##姊
+##始
+##姍
+##姐
+##姑
+##姒
+##姓
+##委
+##姗
+##姚
+##姜
+##姝
+##姣
+##姥
+##姦
+##姨
+##姪
+##姫
+##姬
+##姹
+##姻
+##姿
+##威
+##娃
+##娄
+##娅
+##娆
+##娇
+##娉
+##娑
+##娓
+##娘
+##娛
+##娜
+##娟
+##娠
+##娣
+##娥
+##娩
+##娱
+##娲
+##娴
+##娶
+##娼
+##婀
+##婁
+##婆
+##婉
+##婊
+##婕
+##婚
+##婢
+##婦
+##婧
+##婪
+##婭
+##婴
+##婵
+##婶
+##婷
+##婺
+##婿
+##媒
+##媚
+##媛
+##媞
+##媧
+##媲
+##媳
+##媽
+##媾
+##嫁
+##嫂
+##嫉
+##嫌
+##嫑
+##嫔
+##嫖
+##嫘
+##嫚
+##嫡
+##嫣
+##嫦
+##嫩
+##嫲
+##嫵
+##嫻
+##嬅
+##嬉
+##嬌
+##嬗
+##嬛
+##嬢
+##嬤
+##嬪
+##嬰
+##嬴
+##嬷
+##嬸
+##嬿
+##孀
+##孃
+##子
+##孑
+##孔
+##孕
+##孖
+##字
+##存
+##孙
+##孚
+##孛
+##孜
+##孝
+##孟
+##孢
+##季
+##孤
+##学
+##孩
+##孪
+##孫
+##孬
+##孰
+##孱
+##孳
+##孵
+##學
+##孺
+##孽
+##孿
+##宁
+##它
+##宅
+##宇
+##守
+##安
+##宋
+##完
+##宏
+##宓
+##宕
+##宗
+##官
+##宙
+##定
+##宛
+##宜
+##宝
+##实
+##実
+##宠
+##审
+##客
+##宣
+##室
+##宥
+##宦
+##宪
+##宫
+##宮
+##宰
+##害
+##宴
+##宵
+##家
+##宸
+##容
+##宽
+##宾
+##宿
+##寂
+##寄
+##寅
+##密
+##寇
+##富
+##寐
+##寒
+##寓
+##寛
+##寝
+##寞
+##察
+##寡
+##寢
+##寥
+##實
+##寧
+##寨
+##審
+##寫
+##寬
+##寮
+##寰
+##寵
+##寶
+##寸
+##对
+##寺
+##寻
+##导
+##対
+##寿
+##封
+##専
+##射
+##将
+##將
+##專
+##尉
+##尊
+##尋
+##對
+##導
+##小
+##少
+##尔
+##尕
+##尖
+##尘
+##尚
+##尝
+##尤
+##尧
+##尬
+##就
+##尴
+##尷
+##尸
+##尹
+##尺
+##尻
+##尼
+##尽
+##尾
+##尿
+##局
+##屁
+##层
+##屄
+##居
+##屆
+##屈
+##屉
+##届
+##屋
+##屌
+##屍
+##屎
+##屏
+##屐
+##屑
+##展
+##屜
+##属
+##屠
+##屡
+##屢
+##層
+##履
+##屬
+##屯
+##山
+##屹
+##屿
+##岀
+##岁
+##岂
+##岌
+##岐
+##岑
+##岔
+##岖
+##岗
+##岘
+##岙
+##岚
+##岛
+##岡
+##岩
+##岫
+##岬
+##岭
+##岱
+##岳
+##岷
+##岸
+##峇
+##峋
+##峒
+##峙
+##峡
+##峤
+##峥
+##峦
+##峨
+##峪
+##峭
+##峯
+##峰
+##峴
+##島
+##峻
+##峽
+##崁
+##崂
+##崆
+##崇
+##崎
+##崑
+##崔
+##崖
+##崗
+##崙
+##崛
+##崧
+##崩
+##崭
+##崴
+##崽
+##嵇
+##嵊
+##嵋
+##嵌
+##嵐
+##嵘
+##嵩
+##嵬
+##嵯
+##嶂
+##嶄
+##嶇
+##嶋
+##嶙
+##嶺
+##嶼
+##嶽
+##巅
+##巍
+##巒
+##巔
+##巖
+##川
+##州
+##巡
+##巢
+##工
+##左
+##巧
+##巨
+##巩
+##巫
+##差
+##己
+##已
+##巳
+##巴
+##巷
+##巻
+##巽
+##巾
+##巿
+##币
+##市
+##布
+##帅
+##帆
+##师
+##希
+##帐
+##帑
+##帕
+##帖
+##帘
+##帚
+##帛
+##帜
+##帝
+##帥
+##带
+##帧
+##師
+##席
+##帮
+##帯
+##帰
+##帳
+##帶
+##帷
+##常
+##帼
+##帽
+##幀
+##幂
+##幄
+##幅
+##幌
+##幔
+##幕
+##幟
+##幡
+##幢
+##幣
+##幫
+##干
+##平
+##年
+##并
+##幸
+##幹
+##幺
+##幻
+##幼
+##幽
+##幾
+##广
+##庁
+##広
+##庄
+##庆
+##庇
+##床
+##序
+##庐
+##库
+##应
+##底
+##庖
+##店
+##庙
+##庚
+##府
+##庞
+##废
+##庠
+##度
+##座
+##庫
+##庭
+##庵
+##庶
+##康
+##庸
+##庹
+##庾
+##廁
+##廂
+##廃
+##廈
+##廉
+##廊
+##廓
+##廖
+##廚
+##廝
+##廟
+##廠
+##廢
+##廣
+##廬
+##廳
+##延
+##廷
+##建
+##廿
+##开
+##弁
+##异
+##弃
+##弄
+##弈
+##弊
+##弋
+##式
+##弑
+##弒
+##弓
+##弔
+##引
+##弗
+##弘
+##弛
+##弟
+##张
+##弥
+##弦
+##弧
+##弩
+##弭
+##弯
+##弱
+##張
+##強
+##弹
+##强
+##弼
+##弾
+##彅
+##彆
+##彈
+##彌
+##彎
+##归
+##当
+##录
+##彗
+##彙
+##彝
+##形
+##彤
+##彥
+##彦
+##彧
+##彩
+##彪
+##彫
+##彬
+##彭
+##彰
+##影
+##彷
+##役
+##彻
+##彼
+##彿
+##往
+##征
+##径
+##待
+##徇
+##很
+##徉
+##徊
+##律
+##後
+##徐
+##徑
+##徒
+##従
+##徕
+##得
+##徘
+##徙
+##徜
+##從
+##徠
+##御
+##徨
+##復
+##循
+##徬
+##微
+##徳
+##徴
+##徵
+##德
+##徹
+##徼
+##徽
+##心
+##必
+##忆
+##忌
+##忍
+##忏
+##忐
+##忑
+##忒
+##忖
+##志
+##忘
+##忙
+##応
+##忠
+##忡
+##忤
+##忧
+##忪
+##快
+##忱
+##念
+##忻
+##忽
+##忿
+##怀
+##态
+##怂
+##怅
+##怆
+##怎
+##怏
+##怒
+##怔
+##怕
+##怖
+##怙
+##怜
+##思
+##怠
+##怡
+##急
+##怦
+##性
+##怨
+##怪
+##怯
+##怵
+##总
+##怼
+##恁
+##恃
+##恆
+##恋
+##恍
+##恐
+##恒
+##恕
+##恙
+##恚
+##恢
+##恣
+##恤
+##恥
+##恨
+##恩
+##恪
+##恫
+##恬
+##恭
+##息
+##恰
+##恳
+##恵
+##恶
+##恸
+##恺
+##恻
+##恼
+##恿
+##悄
+##悅
+##悉
+##悌
+##悍
+##悔
+##悖
+##悚
+##悟
+##悠
+##患
+##悦
+##您
+##悩
+##悪
+##悬
+##悯
+##悱
+##悲
+##悴
+##悵
+##悶
+##悸
+##悻
+##悼
+##悽
+##情
+##惆
+##惇
+##惊
+##惋
+##惑
+##惕
+##惘
+##惚
+##惜
+##惟
+##惠
+##惡
+##惦
+##惧
+##惨
+##惩
+##惫
+##惬
+##惭
+##惮
+##惯
+##惰
+##惱
+##想
+##惴
+##惶
+##惹
+##惺
+##愁
+##愆
+##愈
+##愉
+##愍
+##意
+##愕
+##愚
+##愛
+##愜
+##感
+##愣
+##愤
+##愧
+##愫
+##愷
+##愿
+##慄
+##慈
+##態
+##慌
+##慎
+##慑
+##慕
+##慘
+##慚
+##慟
+##慢
+##慣
+##慧
+##慨
+##慫
+##慮
+##慰
+##慳
+##慵
+##慶
+##慷
+##慾
+##憂
+##憊
+##憋
+##憎
+##憐
+##憑
+##憔
+##憚
+##憤
+##憧
+##憨
+##憩
+##憫
+##憬
+##憲
+##憶
+##憾
+##懂
+##懇
+##懈
+##應
+##懊
+##懋
+##懑
+##懒
+##懦
+##懲
+##懵
+##懶
+##懷
+##懸
+##懺
+##懼
+##懾
+##懿
+##戀
+##戈
+##戊
+##戌
+##戍
+##戎
+##戏
+##成
+##我
+##戒
+##戕
+##或
+##战
+##戚
+##戛
+##戟
+##戡
+##戦
+##截
+##戬
+##戮
+##戰
+##戲
+##戳
+##戴
+##戶
+##户
+##戸
+##戻
+##戾
+##房
+##所
+##扁
+##扇
+##扈
+##扉
+##手
+##才
+##扎
+##扑
+##扒
+##打
+##扔
+##払
+##托
+##扛
+##扣
+##扦
+##执
+##扩
+##扪
+##扫
+##扬
+##扭
+##扮
+##扯
+##扰
+##扱
+##扳
+##扶
+##批
+##扼
+##找
+##承
+##技
+##抄
+##抉
+##把
+##抑
+##抒
+##抓
+##投
+##抖
+##抗
+##折
+##抚
+##抛
+##抜
+##択
+##抟
+##抠
+##抡
+##抢
+##护
+##报
+##抨
+##披
+##抬
+##抱
+##抵
+##抹
+##押
+##抽
+##抿
+##拂
+##拄
+##担
+##拆
+##拇
+##拈
+##拉
+##拋
+##拌
+##拍
+##拎
+##拐
+##拒
+##拓
+##拔
+##拖
+##拗
+##拘
+##拙
+##拚
+##招
+##拜
+##拟
+##拡
+##拢
+##拣
+##拥
+##拦
+##拧
+##拨
+##择
+##括
+##拭
+##拮
+##拯
+##拱
+##拳
+##拴
+##拷
+##拼
+##拽
+##拾
+##拿
+##持
+##挂
+##指
+##挈
+##按
+##挎
+##挑
+##挖
+##挙
+##挚
+##挛
+##挝
+##挞
+##挟
+##挠
+##挡
+##挣
+##挤
+##挥
+##挨
+##挪
+##挫
+##振
+##挲
+##挹
+##挺
+##挽
+##挾
+##捂
+##捅
+##捆
+##捉
+##捋
+##捌
+##捍
+##捎
+##捏
+##捐
+##捕
+##捞
+##损
+##捡
+##换
+##捣
+##捧
+##捨
+##捩
+##据
+##捱
+##捲
+##捶
+##捷
+##捺
+##捻
+##掀
+##掂
+##掃
+##掇
+##授
+##掉
+##掌
+##掏
+##掐
+##排
+##掖
+##掘
+##掙
+##掛
+##掠
+##採
+##探
+##掣
+##接
+##控
+##推
+##掩
+##措
+##掬
+##掰
+##掲
+##掳
+##掴
+##掷
+##掸
+##掺
+##揀
+##揃
+##揄
+##揆
+##揉
+##揍
+##描
+##提
+##插
+##揖
+##揚
+##換
+##握
+##揣
+##揩
+##揪
+##揭
+##揮
+##援
+##揶
+##揸
+##揹
+##揽
+##搀
+##搁
+##搂
+##搅
+##損
+##搏
+##搐
+##搓
+##搔
+##搖
+##搗
+##搜
+##搞
+##搡
+##搪
+##搬
+##搭
+##搵
+##搶
+##携
+##搽
+##摀
+##摁
+##摄
+##摆
+##摇
+##摈
+##摊
+##摒
+##摔
+##摘
+##摞
+##摟
+##摧
+##摩
+##摯
+##摳
+##摸
+##摹
+##摺
+##摻
+##撂
+##撃
+##撅
+##撇
+##撈
+##撐
+##撑
+##撒
+##撓
+##撕
+##撚
+##撞
+##撤
+##撥
+##撩
+##撫
+##撬
+##播
+##撮
+##撰
+##撲
+##撵
+##撷
+##撸
+##撻
+##撼
+##撿
+##擀
+##擁
+##擂
+##擄
+##擅
+##擇
+##擊
+##擋
+##操
+##擎
+##擒
+##擔
+##擘
+##據
+##擞
+##擠
+##擡
+##擢
+##擦
+##擬
+##擰
+##擱
+##擲
+##擴
+##擷
+##擺
+##擼
+##擾
+##攀
+##攏
+##攒
+##攔
+##攘
+##攙
+##攜
+##攝
+##攞
+##攢
+##攣
+##攤
+##攥
+##攪
+##攫
+##攬
+##支
+##收
+##攸
+##改
+##攻
+##放
+##政
+##故
+##效
+##敌
+##敍
+##敎
+##敏
+##救
+##敕
+##敖
+##敗
+##敘
+##教
+##敛
+##敝
+##敞
+##敢
+##散
+##敦
+##敬
+##数
+##敲
+##整
+##敵
+##敷
+##數
+##斂
+##斃
+##文
+##斋
+##斌
+##斎
+##斐
+##斑
+##斓
+##斗
+##料
+##斛
+##斜
+##斟
+##斡
+##斤
+##斥
+##斧
+##斩
+##斫
+##斬
+##断
+##斯
+##新
+##斷
+##方
+##於
+##施
+##旁
+##旃
+##旅
+##旋
+##旌
+##旎
+##族
+##旖
+##旗
+##无
+##既
+##日
+##旦
+##旧
+##旨
+##早
+##旬
+##旭
+##旮
+##旱
+##时
+##旷
+##旺
+##旻
+##昀
+##昂
+##昆
+##昇
+##昉
+##昊
+##昌
+##明
+##昏
+##易
+##昔
+##昕
+##昙
+##星
+##映
+##春
+##昧
+##昨
+##昭
+##是
+##昱
+##昴
+##昵
+##昶
+##昼
+##显
+##晁
+##時
+##晃
+##晉
+##晋
+##晌
+##晏
+##晒
+##晓
+##晔
+##晕
+##晖
+##晗
+##晚
+##晝
+##晞
+##晟
+##晤
+##晦
+##晨
+##晩
+##普
+##景
+##晰
+##晴
+##晶
+##晷
+##智
+##晾
+##暂
+##暄
+##暇
+##暈
+##暉
+##暌
+##暐
+##暑
+##暖
+##暗
+##暝
+##暢
+##暧
+##暨
+##暫
+##暮
+##暱
+##暴
+##暸
+##暹
+##曄
+##曆
+##曇
+##曉
+##曖
+##曙
+##曜
+##曝
+##曠
+##曦
+##曬
+##曰
+##曲
+##曳
+##更
+##書
+##曹
+##曼
+##曾
+##替
+##最
+##會
+##月
+##有
+##朋
+##服
+##朐
+##朔
+##朕
+##朗
+##望
+##朝
+##期
+##朦
+##朧
+##木
+##未
+##末
+##本
+##札
+##朮
+##术
+##朱
+##朴
+##朵
+##机
+##朽
+##杀
+##杂
+##权
+##杆
+##杈
+##杉
+##李
+##杏
+##材
+##村
+##杓
+##杖
+##杜
+##杞
+##束
+##杠
+##条
+##来
+##杨
+##杭
+##杯
+##杰
+##東
+##杳
+##杵
+##杷
+##杼
+##松
+##板
+##极
+##构
+##枇
+##枉
+##枋
+##析
+##枕
+##林
+##枚
+##果
+##枝
+##枢
+##枣
+##枪
+##枫
+##枭
+##枯
+##枰
+##枱
+##枳
+##架
+##枷
+##枸
+##柄
+##柏
+##某
+##柑
+##柒
+##染
+##柔
+##柘
+##柚
+##柜
+##柞
+##柠
+##柢
+##查
+##柩
+##柬
+##柯
+##柱
+##柳
+##柴
+##柵
+##査
+##柿
+##栀
+##栃
+##栄
+##栅
+##标
+##栈
+##栉
+##栋
+##栎
+##栏
+##树
+##栓
+##栖
+##栗
+##校
+##栩
+##株
+##样
+##核
+##根
+##格
+##栽
+##栾
+##桀
+##桁
+##桂
+##桃
+##桅
+##框
+##案
+##桉
+##桌
+##桎
+##桐
+##桑
+##桓
+##桔
+##桜
+##桠
+##桡
+##桢
+##档
+##桥
+##桦
+##桧
+##桨
+##桩
+##桶
+##桿
+##梁
+##梅
+##梆
+##梏
+##梓
+##梗
+##條
+##梟
+##梢
+##梦
+##梧
+##梨
+##梭
+##梯
+##械
+##梳
+##梵
+##梶
+##检
+##棂
+##棄
+##棉
+##棋
+##棍
+##棒
+##棕
+##棗
+##棘
+##棚
+##棟
+##棠
+##棣
+##棧
+##森
+##棱
+##棲
+##棵
+##棹
+##棺
+##椁
+##椅
+##椋
+##植
+##椎
+##椒
+##検
+##椪
+##椭
+##椰
+##椹
+##椽
+##椿
+##楂
+##楊
+##楓
+##楔
+##楚
+##楝
+##楞
+##楠
+##楣
+##楨
+##楫
+##業
+##楮
+##極
+##楷
+##楸
+##楹
+##楼
+##楽
+##概
+##榄
+##榆
+##榈
+##榉
+##榔
+##榕
+##榖
+##榛
+##榜
+##榨
+##榫
+##榭
+##榮
+##榱
+##榴
+##榷
+##榻
+##槁
+##槃
+##構
+##槌
+##槍
+##槎
+##槐
+##槓
+##様
+##槛
+##槟
+##槤
+##槭
+##槲
+##槳
+##槻
+##槽
+##槿
+##樁
+##樂
+##樊
+##樑
+##樓
+##標
+##樞
+##樟
+##模
+##樣
+##権
+##横
+##樫
+##樯
+##樱
+##樵
+##樸
+##樹
+##樺
+##樽
+##樾
+##橄
+##橇
+##橋
+##橐
+##橘
+##橙
+##機
+##橡
+##橢
+##橫
+##橱
+##橹
+##橼
+##檀
+##檄
+##檎
+##檐
+##檔
+##檗
+##檜
+##檢
+##檬
+##檯
+##檳
+##檸
+##檻
+##櫃
+##櫚
+##櫛
+##櫥
+##櫸
+##櫻
+##欄
+##權
+##欒
+##欖
+##欠
+##次
+##欢
+##欣
+##欧
+##欲
+##欸
+##欺
+##欽
+##款
+##歆
+##歇
+##歉
+##歌
+##歎
+##歐
+##歓
+##歙
+##歛
+##歡
+##止
+##正
+##此
+##步
+##武
+##歧
+##歩
+##歪
+##歯
+##歲
+##歳
+##歴
+##歷
+##歸
+##歹
+##死
+##歼
+##殁
+##殃
+##殆
+##殇
+##殉
+##殊
+##残
+##殒
+##殓
+##殖
+##殘
+##殞
+##殡
+##殤
+##殭
+##殯
+##殲
+##殴
+##段
+##殷
+##殺
+##殼
+##殿
+##毀
+##毁
+##毂
+##毅
+##毆
+##毋
+##母
+##毎
+##每
+##毒
+##毓
+##比
+##毕
+##毗
+##毘
+##毙
+##毛
+##毡
+##毫
+##毯
+##毽
+##氈
+##氏
+##氐
+##民
+##氓
+##气
+##氖
+##気
+##氙
+##氛
+##氟
+##氡
+##氢
+##氣
+##氤
+##氦
+##氧
+##氨
+##氪
+##氫
+##氮
+##氯
+##氰
+##氲
+##水
+##氷
+##永
+##氹
+##氾
+##汀
+##汁
+##求
+##汆
+##汇
+##汉
+##汎
+##汐
+##汕
+##汗
+##汙
+##汛
+##汝
+##汞
+##江
+##池
+##污
+##汤
+##汨
+##汩
+##汪
+##汰
+##汲
+##汴
+##汶
+##汹
+##決
+##汽
+##汾
+##沁
+##沂
+##沃
+##沅
+##沈
+##沉
+##沌
+##沏
+##沐
+##沒
+##沓
+##沖
+##沙
+##沛
+##沟
+##没
+##沢
+##沣
+##沥
+##沦
+##沧
+##沪
+##沫
+##沭
+##沮
+##沱
+##河
+##沸
+##油
+##治
+##沼
+##沽
+##沾
+##沿
+##況
+##泄
+##泉
+##泊
+##泌
+##泓
+##法
+##泗
+##泛
+##泞
+##泠
+##泡
+##波
+##泣
+##泥
+##注
+##泪
+##泫
+##泮
+##泯
+##泰
+##泱
+##泳
+##泵
+##泷
+##泸
+##泻
+##泼
+##泽
+##泾
+##洁
+##洄
+##洋
+##洒
+##洗
+##洙
+##洛
+##洞
+##津
+##洩
+##洪
+##洮
+##洱
+##洲
+##洵
+##洶
+##洸
+##洹
+##活
+##洼
+##洽
+##派
+##流
+##浃
+##浄
+##浅
+##浆
+##浇
+##浊
+##测
+##济
+##浏
+##浑
+##浒
+##浓
+##浔
+##浙
+##浚
+##浜
+##浣
+##浦
+##浩
+##浪
+##浬
+##浮
+##浯
+##浴
+##海
+##浸
+##涂
+##涅
+##涇
+##消
+##涉
+##涌
+##涎
+##涓
+##涔
+##涕
+##涙
+##涛
+##涝
+##涞
+##涟
+##涠
+##涡
+##涣
+##涤
+##润
+##涧
+##涨
+##涩
+##涪
+##涮
+##涯
+##液
+##涵
+##涸
+##涼
+##涿
+##淀
+##淄
+##淅
+##淆
+##淇
+##淋
+##淌
+##淑
+##淒
+##淖
+##淘
+##淙
+##淚
+##淞
+##淡
+##淤
+##淦
+##淨
+##淩
+##淪
+##淫
+##淬
+##淮
+##深
+##淳
+##淵
+##混
+##淹
+##淺
+##添
+##淼
+##清
+##済
+##渉
+##渊
+##渋
+##渍
+##渎
+##渐
+##渔
+##渗
+##渙
+##渚
+##減
+##渝
+##渠
+##渡
+##渣
+##渤
+##渥
+##渦
+##温
+##測
+##渭
+##港
+##渲
+##渴
+##游
+##渺
+##渾
+##湃
+##湄
+##湊
+##湍
+##湖
+##湘
+##湛
+##湟
+##湧
+##湫
+##湮
+##湯
+##湳
+##湾
+##湿
+##満
+##溃
+##溅
+##溉
+##溏
+##源
+##準
+##溜
+##溝
+##溟
+##溢
+##溥
+##溧
+##溪
+##溫
+##溯
+##溱
+##溴
+##溶
+##溺
+##溼
+##滁
+##滂
+##滄
+##滅
+##滇
+##滋
+##滌
+##滑
+##滓
+##滔
+##滕
+##滙
+##滚
+##滝
+##滞
+##滟
+##满
+##滢
+##滤
+##滥
+##滦
+##滨
+##滩
+##滬
+##滯
+##滲
+##滴
+##滷
+##滸
+##滾
+##滿
+##漁
+##漂
+##漆
+##漉
+##漏
+##漓
+##演
+##漕
+##漠
+##漢
+##漣
+##漩
+##漪
+##漫
+##漬
+##漯
+##漱
+##漲
+##漳
+##漸
+##漾
+##漿
+##潆
+##潇
+##潋
+##潍
+##潑
+##潔
+##潘
+##潛
+##潜
+##潞
+##潟
+##潢
+##潤
+##潦
+##潧
+##潭
+##潮
+##潰
+##潴
+##潸
+##潺
+##潼
+##澀
+##澄
+##澆
+##澈
+##澍
+##澎
+##澗
+##澜
+##澡
+##澤
+##澧
+##澱
+##澳
+##澹
+##激
+##濁
+##濂
+##濃
+##濑
+##濒
+##濕
+##濘
+##濛
+##濟
+##濠
+##濡
+##濤
+##濫
+##濬
+##濮
+##濯
+##濱
+##濺
+##濾
+##瀅
+##瀆
+##瀉
+##瀋
+##瀏
+##瀑
+##瀕
+##瀘
+##瀚
+##瀛
+##瀝
+##瀞
+##瀟
+##瀧
+##瀨
+##瀬
+##瀰
+##瀾
+##灌
+##灏
+##灑
+##灘
+##灝
+##灞
+##灣
+##火
+##灬
+##灭
+##灯
+##灰
+##灵
+##灶
+##灸
+##灼
+##災
+##灾
+##灿
+##炀
+##炁
+##炅
+##炉
+##炊
+##炎
+##炒
+##炔
+##炕
+##炖
+##炙
+##炜
+##炫
+##炬
+##炭
+##炮
+##炯
+##炳
+##炷
+##炸
+##点
+##為
+##炼
+##炽
+##烁
+##烂
+##烃
+##烈
+##烊
+##烏
+##烘
+##烙
+##烛
+##烟
+##烤
+##烦
+##烧
+##烨
+##烩
+##烫
+##烬
+##热
+##烯
+##烷
+##烹
+##烽
+##焉
+##焊
+##焕
+##焖
+##焗
+##焘
+##焙
+##焚
+##焜
+##無
+##焦
+##焯
+##焰
+##焱
+##然
+##焼
+##煅
+##煉
+##煊
+##煌
+##煎
+##煒
+##煖
+##煙
+##煜
+##煞
+##煤
+##煥
+##煦
+##照
+##煨
+##煩
+##煮
+##煲
+##煸
+##煽
+##熄
+##熊
+##熏
+##熒
+##熔
+##熙
+##熟
+##熠
+##熨
+##熬
+##熱
+##熵
+##熹
+##熾
+##燁
+##燃
+##燄
+##燈
+##燉
+##燊
+##燎
+##燒
+##燔
+##燕
+##燙
+##燜
+##營
+##燥
+##燦
+##燧
+##燭
+##燮
+##燴
+##燻
+##燼
+##燿
+##爆
+##爍
+##爐
+##爛
+##爪
+##爬
+##爭
+##爰
+##爱
+##爲
+##爵
+##父
+##爷
+##爸
+##爹
+##爺
+##爻
+##爽
+##爾
+##牆
+##片
+##版
+##牌
+##牍
+##牒
+##牙
+##牛
+##牝
+##牟
+##牠
+##牡
+##牢
+##牦
+##牧
+##物
+##牯
+##牲
+##牴
+##牵
+##特
+##牺
+##牽
+##犀
+##犁
+##犄
+##犊
+##犍
+##犒
+##犢
+##犧
+##犬
+##犯
+##状
+##犷
+##犸
+##犹
+##狀
+##狂
+##狄
+##狈
+##狎
+##狐
+##狒
+##狗
+##狙
+##狞
+##狠
+##狡
+##狩
+##独
+##狭
+##狮
+##狰
+##狱
+##狸
+##狹
+##狼
+##狽
+##猎
+##猕
+##猖
+##猗
+##猙
+##猛
+##猜
+##猝
+##猥
+##猩
+##猪
+##猫
+##猬
+##献
+##猴
+##猶
+##猷
+##猾
+##猿
+##獄
+##獅
+##獎
+##獐
+##獒
+##獗
+##獠
+##獣
+##獨
+##獭
+##獰
+##獲
+##獵
+##獷
+##獸
+##獺
+##獻
+##獼
+##獾
+##玄
+##率
+##玉
+##王
+##玑
+##玖
+##玛
+##玟
+##玠
+##玥
+##玩
+##玫
+##玮
+##环
+##现
+##玲
+##玳
+##玷
+##玺
+##玻
+##珀
+##珂
+##珅
+##珈
+##珉
+##珊
+##珍
+##珏
+##珐
+##珑
+##珙
+##珞
+##珠
+##珣
+##珥
+##珩
+##珪
+##班
+##珮
+##珲
+##珺
+##現
+##球
+##琅
+##理
+##琇
+##琉
+##琊
+##琍
+##琏
+##琐
+##琛
+##琢
+##琥
+##琦
+##琨
+##琪
+##琬
+##琮
+##琰
+##琲
+##琳
+##琴
+##琵
+##琶
+##琺
+##琼
+##瑀
+##瑁
+##瑄
+##瑋
+##瑕
+##瑗
+##瑙
+##瑚
+##瑛
+##瑜
+##瑞
+##瑟
+##瑠
+##瑣
+##瑤
+##瑩
+##瑪
+##瑯
+##瑰
+##瑶
+##瑾
+##璀
+##璁
+##璃
+##璇
+##璉
+##璋
+##璎
+##璐
+##璜
+##璞
+##璟
+##璧
+##璨
+##環
+##璽
+##璿
+##瓊
+##瓏
+##瓒
+##瓜
+##瓢
+##瓣
+##瓤
+##瓦
+##瓮
+##瓯
+##瓴
+##瓶
+##瓷
+##甄
+##甌
+##甕
+##甘
+##甙
+##甚
+##甜
+##生
+##產
+##産
+##甥
+##甦
+##用
+##甩
+##甫
+##甬
+##甭
+##甯
+##田
+##由
+##甲
+##申
+##电
+##男
+##甸
+##町
+##画
+##甾
+##畀
+##畅
+##界
+##畏
+##畑
+##畔
+##留
+##畜
+##畝
+##畢
+##略
+##畦
+##番
+##畫
+##異
+##畲
+##畳
+##畴
+##當
+##畸
+##畹
+##畿
+##疆
+##疇
+##疊
+##疏
+##疑
+##疔
+##疖
+##疗
+##疙
+##疚
+##疝
+##疟
+##疡
+##疣
+##疤
+##疥
+##疫
+##疮
+##疯
+##疱
+##疲
+##疳
+##疵
+##疸
+##疹
+##疼
+##疽
+##疾
+##痂
+##病
+##症
+##痈
+##痉
+##痊
+##痍
+##痒
+##痔
+##痕
+##痘
+##痙
+##痛
+##痞
+##痠
+##痢
+##痣
+##痤
+##痧
+##痨
+##痪
+##痫
+##痰
+##痱
+##痴
+##痹
+##痺
+##痼
+##痿
+##瘀
+##瘁
+##瘋
+##瘍
+##瘓
+##瘘
+##瘙
+##瘟
+##瘠
+##瘡
+##瘢
+##瘤
+##瘦
+##瘧
+##瘩
+##瘪
+##瘫
+##瘴
+##瘸
+##瘾
+##療
+##癇
+##癌
+##癒
+##癖
+##癜
+##癞
+##癡
+##癢
+##癣
+##癥
+##癫
+##癬
+##癮
+##癱
+##癲
+##癸
+##発
+##登
+##發
+##白
+##百
+##皂
+##的
+##皆
+##皇
+##皈
+##皋
+##皎
+##皑
+##皓
+##皖
+##皙
+##皚
+##皮
+##皰
+##皱
+##皴
+##皺
+##皿
+##盂
+##盃
+##盅
+##盆
+##盈
+##益
+##盎
+##盏
+##盐
+##监
+##盒
+##盔
+##盖
+##盗
+##盘
+##盛
+##盜
+##盞
+##盟
+##盡
+##監
+##盤
+##盥
+##盧
+##盪
+##目
+##盯
+##盱
+##盲
+##直
+##相
+##盹
+##盼
+##盾
+##省
+##眈
+##眉
+##看
+##県
+##眙
+##眞
+##真
+##眠
+##眦
+##眨
+##眩
+##眯
+##眶
+##眷
+##眸
+##眺
+##眼
+##眾
+##着
+##睁
+##睇
+##睏
+##睐
+##睑
+##睛
+##睜
+##睞
+##睡
+##睢
+##督
+##睥
+##睦
+##睨
+##睪
+##睫
+##睬
+##睹
+##睽
+##睾
+##睿
+##瞄
+##瞅
+##瞇
+##瞋
+##瞌
+##瞎
+##瞑
+##瞒
+##瞓
+##瞞
+##瞟
+##瞠
+##瞥
+##瞧
+##瞩
+##瞪
+##瞬
+##瞭
+##瞰
+##瞳
+##瞻
+##瞼
+##瞿
+##矇
+##矍
+##矗
+##矚
+##矛
+##矜
+##矢
+##矣
+##知
+##矩
+##矫
+##短
+##矮
+##矯
+##石
+##矶
+##矽
+##矾
+##矿
+##码
+##砂
+##砌
+##砍
+##砒
+##研
+##砖
+##砗
+##砚
+##砝
+##砣
+##砥
+##砧
+##砭
+##砰
+##砲
+##破
+##砷
+##砸
+##砺
+##砼
+##砾
+##础
+##硅
+##硐
+##硒
+##硕
+##硝
+##硫
+##硬
+##确
+##硯
+##硼
+##碁
+##碇
+##碉
+##碌
+##碍
+##碎
+##碑
+##碓
+##碗
+##碘
+##碚
+##碛
+##碟
+##碣
+##碧
+##碩
+##碰
+##碱
+##碳
+##碴
+##確
+##碼
+##碾
+##磁
+##磅
+##磊
+##磋
+##磐
+##磕
+##磚
+##磡
+##磨
+##磬
+##磯
+##磲
+##磷
+##磺
+##礁
+##礎
+##礙
+##礡
+##礦
+##礪
+##礫
+##礴
+##示
+##礼
+##社
+##祀
+##祁
+##祂
+##祇
+##祈
+##祉
+##祎
+##祐
+##祕
+##祖
+##祗
+##祚
+##祛
+##祜
+##祝
+##神
+##祟
+##祠
+##祢
+##祥
+##票
+##祭
+##祯
+##祷
+##祸
+##祺
+##祿
+##禀
+##禁
+##禄
+##禅
+##禍
+##禎
+##福
+##禛
+##禦
+##禧
+##禪
+##禮
+##禱
+##禹
+##禺
+##离
+##禽
+##禾
+##禿
+##秀
+##私
+##秃
+##秆
+##秉
+##秋
+##种
+##科
+##秒
+##秘
+##租
+##秣
+##秤
+##秦
+##秧
+##秩
+##秭
+##积
+##称
+##秸
+##移
+##秽
+##稀
+##稅
+##程
+##稍
+##税
+##稔
+##稗
+##稚
+##稜
+##稞
+##稟
+##稠
+##稣
+##種
+##稱
+##稲
+##稳
+##稷
+##稹
+##稻
+##稼
+##稽
+##稿
+##穀
+##穂
+##穆
+##穌
+##積
+##穎
+##穗
+##穢
+##穩
+##穫
+##穴
+##究
+##穷
+##穹
+##空
+##穿
+##突
+##窃
+##窄
+##窈
+##窍
+##窑
+##窒
+##窓
+##窕
+##窖
+##窗
+##窘
+##窜
+##窝
+##窟
+##窠
+##窥
+##窦
+##窨
+##窩
+##窪
+##窮
+##窯
+##窺
+##窿
+##竄
+##竅
+##竇
+##竊
+##立
+##竖
+##站
+##竜
+##竞
+##竟
+##章
+##竣
+##童
+##竭
+##端
+##競
+##竹
+##竺
+##竽
+##竿
+##笃
+##笆
+##笈
+##笋
+##笏
+##笑
+##笔
+##笙
+##笛
+##笞
+##笠
+##符
+##笨
+##第
+##笹
+##笺
+##笼
+##筆
+##等
+##筊
+##筋
+##筍
+##筏
+##筐
+##筑
+##筒
+##答
+##策
+##筛
+##筝
+##筠
+##筱
+##筲
+##筵
+##筷
+##筹
+##签
+##简
+##箇
+##箋
+##箍
+##箏
+##箐
+##箔
+##箕
+##算
+##箝
+##管
+##箩
+##箫
+##箭
+##箱
+##箴
+##箸
+##節
+##篁
+##範
+##篆
+##篇
+##築
+##篑
+##篓
+##篙
+##篝
+##篠
+##篡
+##篤
+##篩
+##篪
+##篮
+##篱
+##篷
+##簇
+##簌
+##簍
+##簡
+##簦
+##簧
+##簪
+##簫
+##簷
+##簸
+##簽
+##簾
+##簿
+##籁
+##籃
+##籌
+##籍
+##籐
+##籟
+##籠
+##籤
+##籬
+##籮
+##籲
+##米
+##类
+##籼
+##籽
+##粄
+##粉
+##粑
+##粒
+##粕
+##粗
+##粘
+##粟
+##粤
+##粥
+##粧
+##粪
+##粮
+##粱
+##粲
+##粳
+##粵
+##粹
+##粼
+##粽
+##精
+##粿
+##糅
+##糊
+##糍
+##糕
+##糖
+##糗
+##糙
+##糜
+##糞
+##糟
+##糠
+##糧
+##糬
+##糯
+##糰
+##糸
+##系
+##糾
+##紀
+##紂
+##約
+##紅
+##紉
+##紊
+##紋
+##納
+##紐
+##紓
+##純
+##紗
+##紘
+##紙
+##級
+##紛
+##紜
+##素
+##紡
+##索
+##紧
+##紫
+##紮
+##累
+##細
+##紳
+##紹
+##紺
+##終
+##絃
+##組
+##絆
+##経
+##結
+##絕
+##絞
+##絡
+##絢
+##給
+##絨
+##絮
+##統
+##絲
+##絳
+##絵
+##絶
+##絹
+##綁
+##綏
+##綑
+##經
+##継
+##続
+##綜
+##綠
+##綢
+##綦
+##綫
+##綬
+##維
+##綱
+##網
+##綴
+##綵
+##綸
+##綺
+##綻
+##綽
+##綾
+##綿
+##緊
+##緋
+##総
+##緑
+##緒
+##緘
+##線
+##緝
+##緞
+##締
+##緣
+##編
+##緩
+##緬
+##緯
+##練
+##緹
+##緻
+##縁
+##縄
+##縈
+##縛
+##縝
+##縣
+##縫
+##縮
+##縱
+##縴
+##縷
+##總
+##績
+##繁
+##繃
+##繆
+##繇
+##繋
+##織
+##繕
+##繚
+##繞
+##繡
+##繩
+##繪
+##繫
+##繭
+##繳
+##繹
+##繼
+##繽
+##纂
+##續
+##纍
+##纏
+##纓
+##纔
+##纖
+##纜
+##纠
+##红
+##纣
+##纤
+##约
+##级
+##纨
+##纪
+##纫
+##纬
+##纭
+##纯
+##纰
+##纱
+##纲
+##纳
+##纵
+##纶
+##纷
+##纸
+##纹
+##纺
+##纽
+##纾
+##线
+##绀
+##练
+##组
+##绅
+##细
+##织
+##终
+##绊
+##绍
+##绎
+##经
+##绑
+##绒
+##结
+##绔
+##绕
+##绘
+##给
+##绚
+##绛
+##络
+##绝
+##绞
+##统
+##绡
+##绢
+##绣
+##绥
+##绦
+##继
+##绩
+##绪
+##绫
+##续
+##绮
+##绯
+##绰
+##绳
+##维
+##绵
+##绶
+##绷
+##绸
+##绻
+##综
+##绽
+##绾
+##绿
+##缀
+##缄
+##缅
+##缆
+##缇
+##缈
+##缉
+##缎
+##缓
+##缔
+##缕
+##编
+##缘
+##缙
+##缚
+##缜
+##缝
+##缠
+##缢
+##缤
+##缥
+##缨
+##缩
+##缪
+##缭
+##缮
+##缰
+##缱
+##缴
+##缸
+##缺
+##缽
+##罂
+##罄
+##罌
+##罐
+##网
+##罔
+##罕
+##罗
+##罚
+##罡
+##罢
+##罩
+##罪
+##置
+##罰
+##署
+##罵
+##罷
+##罹
+##羁
+##羅
+##羈
+##羊
+##羌
+##美
+##羔
+##羚
+##羞
+##羟
+##羡
+##羣
+##群
+##羥
+##羧
+##羨
+##義
+##羯
+##羲
+##羸
+##羹
+##羽
+##羿
+##翁
+##翅
+##翊
+##翌
+##翎
+##習
+##翔
+##翘
+##翟
+##翠
+##翡
+##翦
+##翩
+##翰
+##翱
+##翳
+##翹
+##翻
+##翼
+##耀
+##老
+##考
+##耄
+##者
+##耆
+##耋
+##而
+##耍
+##耐
+##耒
+##耕
+##耗
+##耘
+##耙
+##耦
+##耨
+##耳
+##耶
+##耷
+##耸
+##耻
+##耽
+##耿
+##聂
+##聆
+##聊
+##聋
+##职
+##聒
+##联
+##聖
+##聘
+##聚
+##聞
+##聪
+##聯
+##聰
+##聲
+##聳
+##聴
+##聶
+##職
+##聽
+##聾
+##聿
+##肃
+##肄
+##肅
+##肆
+##肇
+##肉
+##肋
+##肌
+##肏
+##肓
+##肖
+##肘
+##肚
+##肛
+##肝
+##肠
+##股
+##肢
+##肤
+##肥
+##肩
+##肪
+##肮
+##肯
+##肱
+##育
+##肴
+##肺
+##肽
+##肾
+##肿
+##胀
+##胁
+##胃
+##胄
+##胆
+##背
+##胍
+##胎
+##胖
+##胚
+##胛
+##胜
+##胝
+##胞
+##胡
+##胤
+##胥
+##胧
+##胫
+##胭
+##胯
+##胰
+##胱
+##胳
+##胴
+##胶
+##胸
+##胺
+##能
+##脂
+##脅
+##脆
+##脇
+##脈
+##脉
+##脊
+##脍
+##脏
+##脐
+##脑
+##脓
+##脖
+##脘
+##脚
+##脛
+##脣
+##脩
+##脫
+##脯
+##脱
+##脲
+##脳
+##脸
+##脹
+##脾
+##腆
+##腈
+##腊
+##腋
+##腌
+##腎
+##腐
+##腑
+##腓
+##腔
+##腕
+##腥
+##腦
+##腩
+##腫
+##腭
+##腮
+##腰
+##腱
+##腳
+##腴
+##腸
+##腹
+##腺
+##腻
+##腼
+##腾
+##腿
+##膀
+##膈
+##膊
+##膏
+##膑
+##膘
+##膚
+##膛
+##膜
+##膝
+##膠
+##膦
+##膨
+##膩
+##膳
+##膺
+##膻
+##膽
+##膾
+##膿
+##臀
+##臂
+##臃
+##臆
+##臉
+##臊
+##臍
+##臓
+##臘
+##臟
+##臣
+##臥
+##臧
+##臨
+##自
+##臬
+##臭
+##至
+##致
+##臺
+##臻
+##臼
+##臾
+##舀
+##舂
+##舅
+##舆
+##與
+##興
+##舉
+##舊
+##舌
+##舍
+##舎
+##舐
+##舒
+##舔
+##舖
+##舗
+##舛
+##舜
+##舞
+##舟
+##航
+##舫
+##般
+##舰
+##舱
+##舵
+##舶
+##舷
+##舸
+##船
+##舺
+##舾
+##艇
+##艋
+##艘
+##艙
+##艦
+##艮
+##良
+##艰
+##艱
+##色
+##艳
+##艷
+##艹
+##艺
+##艾
+##节
+##芃
+##芈
+##芊
+##芋
+##芍
+##芎
+##芒
+##芙
+##芜
+##芝
+##芡
+##芥
+##芦
+##芩
+##芪
+##芫
+##芬
+##芭
+##芮
+##芯
+##花
+##芳
+##芷
+##芸
+##芹
+##芻
+##芽
+##芾
+##苁
+##苄
+##苇
+##苋
+##苍
+##苏
+##苑
+##苒
+##苓
+##苔
+##苕
+##苗
+##苛
+##苜
+##苞
+##苟
+##苡
+##苣
+##若
+##苦
+##苫
+##苯
+##英
+##苷
+##苹
+##苻
+##茁
+##茂
+##范
+##茄
+##茅
+##茉
+##茎
+##茏
+##茗
+##茜
+##茧
+##茨
+##茫
+##茬
+##茭
+##茯
+##茱
+##茲
+##茴
+##茵
+##茶
+##茸
+##茹
+##茼
+##荀
+##荃
+##荆
+##草
+##荊
+##荏
+##荐
+##荒
+##荔
+##荖
+##荘
+##荚
+##荞
+##荟
+##荠
+##荡
+##荣
+##荤
+##荥
+##荧
+##荨
+##荪
+##荫
+##药
+##荳
+##荷
+##荸
+##荻
+##荼
+##荽
+##莅
+##莆
+##莉
+##莊
+##莎
+##莒
+##莓
+##莖
+##莘
+##莞
+##莠
+##莢
+##莧
+##莪
+##莫
+##莱
+##莲
+##莴
+##获
+##莹
+##莺
+##莽
+##莿
+##菀
+##菁
+##菅
+##菇
+##菈
+##菊
+##菌
+##菏
+##菓
+##菖
+##菘
+##菜
+##菟
+##菠
+##菡
+##菩
+##華
+##菱
+##菲
+##菸
+##菽
+##萁
+##萃
+##萄
+##萊
+##萋
+##萌
+##萍
+##萎
+##萘
+##萝
+##萤
+##营
+##萦
+##萧
+##萨
+##萩
+##萬
+##萱
+##萵
+##萸
+##萼
+##落
+##葆
+##葉
+##著
+##葚
+##葛
+##葡
+##董
+##葦
+##葩
+##葫
+##葬
+##葭
+##葯
+##葱
+##葳
+##葵
+##葷
+##葺
+##蒂
+##蒋
+##蒐
+##蒔
+##蒙
+##蒜
+##蒞
+##蒟
+##蒡
+##蒨
+##蒲
+##蒸
+##蒹
+##蒻
+##蒼
+##蒿
+##蓁
+##蓄
+##蓆
+##蓉
+##蓋
+##蓑
+##蓓
+##蓖
+##蓝
+##蓟
+##蓦
+##蓬
+##蓮
+##蓼
+##蓿
+##蔑
+##蔓
+##蔔
+##蔗
+##蔘
+##蔚
+##蔡
+##蔣
+##蔥
+##蔫
+##蔬
+##蔭
+##蔵
+##蔷
+##蔺
+##蔻
+##蔼
+##蔽
+##蕁
+##蕃
+##蕈
+##蕉
+##蕊
+##蕎
+##蕙
+##蕤
+##蕨
+##蕩
+##蕪
+##蕭
+##蕲
+##蕴
+##蕻
+##蕾
+##薄
+##薅
+##薇
+##薈
+##薊
+##薏
+##薑
+##薔
+##薙
+##薛
+##薦
+##薨
+##薩
+##薪
+##薬
+##薯
+##薰
+##薹
+##藉
+##藍
+##藏
+##藐
+##藓
+##藕
+##藜
+##藝
+##藤
+##藥
+##藩
+##藹
+##藻
+##藿
+##蘆
+##蘇
+##蘊
+##蘋
+##蘑
+##蘚
+##蘭
+##蘸
+##蘼
+##蘿
+##虎
+##虏
+##虐
+##虑
+##虔
+##處
+##虚
+##虛
+##虜
+##虞
+##號
+##虢
+##虧
+##虫
+##虬
+##虱
+##虹
+##虻
+##虽
+##虾
+##蚀
+##蚁
+##蚂
+##蚊
+##蚌
+##蚓
+##蚕
+##蚜
+##蚝
+##蚣
+##蚤
+##蚩
+##蚪
+##蚯
+##蚱
+##蚵
+##蛀
+##蛆
+##蛇
+##蛊
+##蛋
+##蛎
+##蛐
+##蛔
+##蛙
+##蛛
+##蛟
+##蛤
+##蛭
+##蛮
+##蛰
+##蛳
+##蛹
+##蛻
+##蛾
+##蜀
+##蜂
+##蜃
+##蜆
+##蜇
+##蜈
+##蜊
+##蜍
+##蜒
+##蜓
+##蜕
+##蜗
+##蜘
+##蜚
+##蜜
+##蜡
+##蜢
+##蜥
+##蜱
+##蜴
+##蜷
+##蜻
+##蜿
+##蝇
+##蝈
+##蝉
+##蝌
+##蝎
+##蝕
+##蝗
+##蝙
+##蝟
+##蝠
+##蝦
+##蝨
+##蝴
+##蝶
+##蝸
+##蝼
+##螂
+##螃
+##融
+##螞
+##螢
+##螨
+##螯
+##螳
+##螺
+##蟀
+##蟄
+##蟆
+##蟋
+##蟎
+##蟑
+##蟒
+##蟠
+##蟬
+##蟲
+##蟹
+##蟻
+##蟾
+##蠅
+##蠍
+##蠔
+##蠕
+##蠛
+##蠟
+##蠡
+##蠢
+##蠣
+##蠱
+##蠶
+##蠹
+##蠻
+##血
+##衄
+##衅
+##衆
+##行
+##衍
+##術
+##衔
+##街
+##衙
+##衛
+##衝
+##衞
+##衡
+##衢
+##衣
+##补
+##表
+##衩
+##衫
+##衬
+##衮
+##衰
+##衲
+##衷
+##衹
+##衾
+##衿
+##袁
+##袂
+##袄
+##袅
+##袈
+##袋
+##袍
+##袒
+##袖
+##袜
+##袞
+##袤
+##袪
+##被
+##袭
+##袱
+##裁
+##裂
+##装
+##裆
+##裊
+##裏
+##裔
+##裕
+##裘
+##裙
+##補
+##裝
+##裟
+##裡
+##裤
+##裨
+##裱
+##裳
+##裴
+##裸
+##裹
+##製
+##裾
+##褂
+##複
+##褐
+##褒
+##褓
+##褔
+##褚
+##褥
+##褪
+##褫
+##褲
+##褶
+##褻
+##襁
+##襄
+##襟
+##襠
+##襪
+##襬
+##襯
+##襲
+##西
+##要
+##覃
+##覆
+##覇
+##見
+##規
+##覓
+##視
+##覚
+##覦
+##覧
+##親
+##覬
+##観
+##覷
+##覺
+##覽
+##觀
+##见
+##观
+##规
+##觅
+##视
+##览
+##觉
+##觊
+##觎
+##觐
+##觑
+##角
+##觞
+##解
+##觥
+##触
+##觸
+##言
+##訂
+##計
+##訊
+##討
+##訓
+##訕
+##訖
+##託
+##記
+##訛
+##訝
+##訟
+##訣
+##訥
+##訪
+##設
+##許
+##訳
+##訴
+##訶
+##診
+##註
+##証
+##詆
+##詐
+##詔
+##評
+##詛
+##詞
+##詠
+##詡
+##詢
+##詣
+##試
+##詩
+##詫
+##詬
+##詭
+##詮
+##詰
+##話
+##該
+##詳
+##詹
+##詼
+##誅
+##誇
+##誉
+##誌
+##認
+##誓
+##誕
+##誘
+##語
+##誠
+##誡
+##誣
+##誤
+##誥
+##誦
+##誨
+##說
+##説
+##読
+##誰
+##課
+##誹
+##誼
+##調
+##諄
+##談
+##請
+##諏
+##諒
+##論
+##諗
+##諜
+##諡
+##諦
+##諧
+##諫
+##諭
+##諮
+##諱
+##諳
+##諷
+##諸
+##諺
+##諾
+##謀
+##謁
+##謂
+##謄
+##謊
+##謎
+##謐
+##謔
+##謗
+##謙
+##講
+##謝
+##謠
+##謨
+##謬
+##謹
+##謾
+##譁
+##證
+##譎
+##譏
+##識
+##譙
+##譚
+##譜
+##警
+##譬
+##譯
+##議
+##譲
+##譴
+##護
+##譽
+##讀
+##變
+##讓
+##讚
+##讞
+##计
+##订
+##认
+##讥
+##讧
+##讨
+##让
+##讪
+##讫
+##训
+##议
+##讯
+##记
+##讲
+##讳
+##讴
+##讶
+##讷
+##许
+##讹
+##论
+##讼
+##讽
+##设
+##访
+##诀
+##证
+##诃
+##评
+##诅
+##识
+##诈
+##诉
+##诊
+##诋
+##词
+##诏
+##译
+##试
+##诗
+##诘
+##诙
+##诚
+##诛
+##话
+##诞
+##诟
+##诠
+##诡
+##询
+##诣
+##诤
+##该
+##详
+##诧
+##诩
+##诫
+##诬
+##语
+##误
+##诰
+##诱
+##诲
+##说
+##诵
+##诶
+##请
+##诸
+##诺
+##读
+##诽
+##课
+##诿
+##谀
+##谁
+##调
+##谄
+##谅
+##谆
+##谈
+##谊
+##谋
+##谌
+##谍
+##谎
+##谏
+##谐
+##谑
+##谒
+##谓
+##谔
+##谕
+##谗
+##谘
+##谙
+##谚
+##谛
+##谜
+##谟
+##谢
+##谣
+##谤
+##谥
+##谦
+##谧
+##谨
+##谩
+##谪
+##谬
+##谭
+##谯
+##谱
+##谲
+##谴
+##谶
+##谷
+##豁
+##豆
+##豇
+##豈
+##豉
+##豊
+##豌
+##豎
+##豐
+##豔
+##豚
+##象
+##豢
+##豪
+##豫
+##豬
+##豹
+##豺
+##貂
+##貅
+##貌
+##貓
+##貔
+##貘
+##貝
+##貞
+##負
+##財
+##貢
+##貧
+##貨
+##販
+##貪
+##貫
+##責
+##貯
+##貰
+##貳
+##貴
+##貶
+##買
+##貸
+##費
+##貼
+##貽
+##貿
+##賀
+##賁
+##賂
+##賃
+##賄
+##資
+##賈
+##賊
+##賑
+##賓
+##賜
+##賞
+##賠
+##賡
+##賢
+##賣
+##賤
+##賦
+##質
+##賬
+##賭
+##賴
+##賺
+##購
+##賽
+##贅
+##贈
+##贊
+##贍
+##贏
+##贓
+##贖
+##贛
+##贝
+##贞
+##负
+##贡
+##财
+##责
+##贤
+##败
+##账
+##货
+##质
+##贩
+##贪
+##贫
+##贬
+##购
+##贮
+##贯
+##贰
+##贱
+##贲
+##贴
+##贵
+##贷
+##贸
+##费
+##贺
+##贻
+##贼
+##贾
+##贿
+##赁
+##赂
+##赃
+##资
+##赅
+##赈
+##赊
+##赋
+##赌
+##赎
+##赏
+##赐
+##赓
+##赔
+##赖
+##赘
+##赚
+##赛
+##赝
+##赞
+##赠
+##赡
+##赢
+##赣
+##赤
+##赦
+##赧
+##赫
+##赭
+##走
+##赳
+##赴
+##赵
+##赶
+##起
+##趁
+##超
+##越
+##趋
+##趕
+##趙
+##趟
+##趣
+##趨
+##足
+##趴
+##趵
+##趸
+##趺
+##趾
+##跃
+##跄
+##跆
+##跋
+##跌
+##跎
+##跑
+##跖
+##跚
+##跛
+##距
+##跟
+##跡
+##跤
+##跨
+##跩
+##跪
+##路
+##跳
+##践
+##跷
+##跹
+##跺
+##跻
+##踉
+##踊
+##踌
+##踏
+##踐
+##踝
+##踞
+##踟
+##踢
+##踩
+##踪
+##踮
+##踱
+##踴
+##踵
+##踹
+##蹂
+##蹄
+##蹇
+##蹈
+##蹉
+##蹊
+##蹋
+##蹑
+##蹒
+##蹙
+##蹟
+##蹣
+##蹤
+##蹦
+##蹩
+##蹬
+##蹭
+##蹲
+##蹴
+##蹶
+##蹺
+##蹼
+##蹿
+##躁
+##躇
+##躉
+##躊
+##躋
+##躍
+##躏
+##躪
+##身
+##躬
+##躯
+##躲
+##躺
+##軀
+##車
+##軋
+##軌
+##軍
+##軒
+##軟
+##転
+##軸
+##軼
+##軽
+##軾
+##較
+##載
+##輒
+##輓
+##輔
+##輕
+##輛
+##輝
+##輟
+##輩
+##輪
+##輯
+##輸
+##輻
+##輾
+##輿
+##轄
+##轅
+##轆
+##轉
+##轍
+##轎
+##轟
+##车
+##轧
+##轨
+##轩
+##转
+##轭
+##轮
+##软
+##轰
+##轲
+##轴
+##轶
+##轻
+##轼
+##载
+##轿
+##较
+##辄
+##辅
+##辆
+##辇
+##辈
+##辉
+##辊
+##辍
+##辐
+##辑
+##输
+##辕
+##辖
+##辗
+##辘
+##辙
+##辛
+##辜
+##辞
+##辟
+##辣
+##辦
+##辨
+##辩
+##辫
+##辭
+##辮
+##辯
+##辰
+##辱
+##農
+##边
+##辺
+##辻
+##込
+##辽
+##达
+##迁
+##迂
+##迄
+##迅
+##过
+##迈
+##迎
+##运
+##近
+##返
+##还
+##这
+##进
+##远
+##违
+##连
+##迟
+##迢
+##迤
+##迥
+##迦
+##迩
+##迪
+##迫
+##迭
+##述
+##迴
+##迷
+##迸
+##迹
+##迺
+##追
+##退
+##送
+##适
+##逃
+##逅
+##逆
+##选
+##逊
+##逍
+##透
+##逐
+##递
+##途
+##逕
+##逗
+##這
+##通
+##逛
+##逝
+##逞
+##速
+##造
+##逢
+##連
+##逮
+##週
+##進
+##逵
+##逶
+##逸
+##逻
+##逼
+##逾
+##遁
+##遂
+##遅
+##遇
+##遊
+##運
+##遍
+##過
+##遏
+##遐
+##遑
+##遒
+##道
+##達
+##違
+##遗
+##遙
+##遛
+##遜
+##遞
+##遠
+##遢
+##遣
+##遥
+##遨
+##適
+##遭
+##遮
+##遲
+##遴
+##遵
+##遶
+##遷
+##選
+##遺
+##遼
+##遽
+##避
+##邀
+##邁
+##邂
+##邃
+##還
+##邇
+##邈
+##邊
+##邋
+##邏
+##邑
+##邓
+##邕
+##邛
+##邝
+##邢
+##那
+##邦
+##邨
+##邪
+##邬
+##邮
+##邯
+##邰
+##邱
+##邳
+##邵
+##邸
+##邹
+##邺
+##邻
+##郁
+##郅
+##郊
+##郎
+##郑
+##郜
+##郝
+##郡
+##郢
+##郤
+##郦
+##郧
+##部
+##郫
+##郭
+##郴
+##郵
+##郷
+##郸
+##都
+##鄂
+##鄉
+##鄒
+##鄔
+##鄙
+##鄞
+##鄢
+##鄧
+##鄭
+##鄰
+##鄱
+##鄲
+##鄺
+##酉
+##酊
+##酋
+##酌
+##配
+##酐
+##酒
+##酗
+##酚
+##酝
+##酢
+##酣
+##酥
+##酩
+##酪
+##酬
+##酮
+##酯
+##酰
+##酱
+##酵
+##酶
+##酷
+##酸
+##酿
+##醃
+##醇
+##醉
+##醋
+##醍
+##醐
+##醒
+##醚
+##醛
+##醜
+##醞
+##醣
+##醪
+##醫
+##醬
+##醮
+##醯
+##醴
+##醺
+##釀
+##釁
+##采
+##釉
+##释
+##釋
+##里
+##重
+##野
+##量
+##釐
+##金
+##釗
+##釘
+##釜
+##針
+##釣
+##釦
+##釧
+##釵
+##鈀
+##鈉
+##鈍
+##鈎
+##鈔
+##鈕
+##鈞
+##鈣
+##鈦
+##鈪
+##鈴
+##鈺
+##鈾
+##鉀
+##鉄
+##鉅
+##鉉
+##鉑
+##鉗
+##鉚
+##鉛
+##鉤
+##鉴
+##鉻
+##銀
+##銃
+##銅
+##銑
+##銓
+##銖
+##銘
+##銜
+##銬
+##銭
+##銮
+##銳
+##銷
+##銹
+##鋁
+##鋅
+##鋒
+##鋤
+##鋪
+##鋰
+##鋸
+##鋼
+##錄
+##錐
+##錘
+##錚
+##錠
+##錢
+##錦
+##錨
+##錫
+##錮
+##錯
+##録
+##錳
+##錶
+##鍊
+##鍋
+##鍍
+##鍛
+##鍥
+##鍰
+##鍵
+##鍺
+##鍾
+##鎂
+##鎊
+##鎌
+##鎏
+##鎔
+##鎖
+##鎗
+##鎚
+##鎧
+##鎬
+##鎮
+##鎳
+##鏈
+##鏖
+##鏗
+##鏘
+##鏞
+##鏟
+##鏡
+##鏢
+##鏤
+##鏽
+##鐘
+##鐮
+##鐲
+##鐳
+##鐵
+##鐸
+##鐺
+##鑄
+##鑊
+##鑑
+##鑒
+##鑣
+##鑫
+##鑰
+##鑲
+##鑼
+##鑽
+##鑾
+##鑿
+##针
+##钉
+##钊
+##钎
+##钏
+##钒
+##钓
+##钗
+##钙
+##钛
+##钜
+##钝
+##钞
+##钟
+##钠
+##钡
+##钢
+##钣
+##钤
+##钥
+##钦
+##钧
+##钨
+##钩
+##钮
+##钯
+##钰
+##钱
+##钳
+##钴
+##钵
+##钺
+##钻
+##钼
+##钾
+##钿
+##铀
+##铁
+##铂
+##铃
+##铄
+##铅
+##铆
+##铉
+##铎
+##铐
+##铛
+##铜
+##铝
+##铠
+##铡
+##铢
+##铣
+##铤
+##铨
+##铩
+##铬
+##铭
+##铮
+##铰
+##铲
+##铵
+##银
+##铸
+##铺
+##链
+##铿
+##销
+##锁
+##锂
+##锄
+##锅
+##锆
+##锈
+##锉
+##锋
+##锌
+##锏
+##锐
+##锑
+##错
+##锚
+##锟
+##锡
+##锢
+##锣
+##锤
+##锥
+##锦
+##锭
+##键
+##锯
+##锰
+##锲
+##锵
+##锹
+##锺
+##锻
+##镀
+##镁
+##镂
+##镇
+##镉
+##镌
+##镍
+##镐
+##镑
+##镕
+##镖
+##镗
+##镛
+##镜
+##镣
+##镭
+##镯
+##镰
+##镳
+##镶
+##長
+##长
+##門
+##閃
+##閉
+##開
+##閎
+##閏
+##閑
+##閒
+##間
+##閔
+##閘
+##閡
+##関
+##閣
+##閥
+##閨
+##閩
+##閱
+##閲
+##閹
+##閻
+##閾
+##闆
+##闇
+##闊
+##闌
+##闍
+##闔
+##闕
+##闖
+##闘
+##關
+##闡
+##闢
+##门
+##闪
+##闫
+##闭
+##问
+##闯
+##闰
+##闲
+##间
+##闵
+##闷
+##闸
+##闹
+##闺
+##闻
+##闽
+##闾
+##阀
+##阁
+##阂
+##阅
+##阆
+##阇
+##阈
+##阉
+##阎
+##阐
+##阑
+##阔
+##阕
+##阖
+##阙
+##阚
+##阜
+##队
+##阡
+##阪
+##阮
+##阱
+##防
+##阳
+##阴
+##阵
+##阶
+##阻
+##阿
+##陀
+##陂
+##附
+##际
+##陆
+##陇
+##陈
+##陋
+##陌
+##降
+##限
+##陕
+##陛
+##陝
+##陞
+##陟
+##陡
+##院
+##陣
+##除
+##陨
+##险
+##陪
+##陰
+##陲
+##陳
+##陵
+##陶
+##陷
+##陸
+##険
+##陽
+##隅
+##隆
+##隈
+##隊
+##隋
+##隍
+##階
+##随
+##隐
+##隔
+##隕
+##隘
+##隙
+##際
+##障
+##隠
+##隣
+##隧
+##隨
+##險
+##隱
+##隴
+##隶
+##隸
+##隻
+##隼
+##隽
+##难
+##雀
+##雁
+##雄
+##雅
+##集
+##雇
+##雉
+##雋
+##雌
+##雍
+##雎
+##雏
+##雑
+##雒
+##雕
+##雖
+##雙
+##雛
+##雜
+##雞
+##離
+##難
+##雨
+##雪
+##雯
+##雰
+##雲
+##雳
+##零
+##雷
+##雹
+##電
+##雾
+##需
+##霁
+##霄
+##霆
+##震
+##霈
+##霉
+##霊
+##霍
+##霎
+##霏
+##霑
+##霓
+##霖
+##霜
+##霞
+##霧
+##霭
+##霰
+##露
+##霸
+##霹
+##霽
+##霾
+##靂
+##靄
+##靈
+##青
+##靓
+##靖
+##静
+##靚
+##靛
+##靜
+##非
+##靠
+##靡
+##面
+##靥
+##靦
+##革
+##靳
+##靴
+##靶
+##靼
+##鞅
+##鞋
+##鞍
+##鞏
+##鞑
+##鞘
+##鞠
+##鞣
+##鞦
+##鞭
+##韆
+##韋
+##韌
+##韓
+##韜
+##韦
+##韧
+##韩
+##韬
+##韭
+##音
+##韵
+##韶
+##韻
+##響
+##頁
+##頂
+##頃
+##項
+##順
+##須
+##頌
+##預
+##頑
+##頒
+##頓
+##頗
+##領
+##頜
+##頡
+##頤
+##頫
+##頭
+##頰
+##頷
+##頸
+##頹
+##頻
+##頼
+##顆
+##題
+##額
+##顎
+##顏
+##顔
+##願
+##顛
+##類
+##顧
+##顫
+##顯
+##顱
+##顴
+##页
+##顶
+##顷
+##项
+##顺
+##须
+##顼
+##顽
+##顾
+##顿
+##颁
+##颂
+##预
+##颅
+##领
+##颇
+##颈
+##颉
+##颊
+##颌
+##颍
+##颐
+##频
+##颓
+##颔
+##颖
+##颗
+##题
+##颚
+##颛
+##颜
+##额
+##颞
+##颠
+##颡
+##颢
+##颤
+##颦
+##颧
+##風
+##颯
+##颱
+##颳
+##颶
+##颼
+##飄
+##飆
+##风
+##飒
+##飓
+##飕
+##飘
+##飙
+##飚
+##飛
+##飞
+##食
+##飢
+##飨
+##飩
+##飪
+##飯
+##飲
+##飼
+##飽
+##飾
+##餃
+##餅
+##餉
+##養
+##餌
+##餐
+##餒
+##餓
+##餘
+##餚
+##餛
+##餞
+##餡
+##館
+##餮
+##餵
+##餾
+##饅
+##饈
+##饋
+##饌
+##饍
+##饑
+##饒
+##饕
+##饗
+##饞
+##饥
+##饨
+##饪
+##饬
+##饭
+##饮
+##饯
+##饰
+##饱
+##饲
+##饴
+##饵
+##饶
+##饷
+##饺
+##饼
+##饽
+##饿
+##馀
+##馁
+##馄
+##馅
+##馆
+##馈
+##馋
+##馍
+##馏
+##馒
+##馔
+##首
+##馗
+##香
+##馥
+##馨
+##馬
+##馭
+##馮
+##馳
+##馴
+##駁
+##駄
+##駅
+##駆
+##駐
+##駒
+##駕
+##駛
+##駝
+##駭
+##駱
+##駿
+##騁
+##騎
+##騏
+##験
+##騙
+##騨
+##騰
+##騷
+##驀
+##驅
+##驊
+##驍
+##驒
+##驕
+##驗
+##驚
+##驛
+##驟
+##驢
+##驥
+##马
+##驭
+##驮
+##驯
+##驰
+##驱
+##驳
+##驴
+##驶
+##驷
+##驸
+##驹
+##驻
+##驼
+##驾
+##驿
+##骁
+##骂
+##骄
+##骅
+##骆
+##骇
+##骈
+##骊
+##骋
+##验
+##骏
+##骐
+##骑
+##骗
+##骚
+##骛
+##骜
+##骞
+##骠
+##骡
+##骤
+##骥
+##骧
+##骨
+##骯
+##骰
+##骶
+##骷
+##骸
+##骼
+##髂
+##髅
+##髋
+##髏
+##髒
+##髓
+##體
+##髖
+##高
+##髦
+##髪
+##髮
+##髯
+##髻
+##鬃
+##鬆
+##鬍
+##鬓
+##鬚
+##鬟
+##鬢
+##鬣
+##鬥
+##鬧
+##鬱
+##鬼
+##魁
+##魂
+##魄
+##魅
+##魇
+##魍
+##魏
+##魔
+##魘
+##魚
+##魯
+##魷
+##鮑
+##鮨
+##鮪
+##鮭
+##鮮
+##鯉
+##鯊
+##鯖
+##鯛
+##鯨
+##鯰
+##鯽
+##鰍
+##鰓
+##鰭
+##鰲
+##鰻
+##鰾
+##鱈
+##鱉
+##鱔
+##鱗
+##鱷
+##鱸
+##鱼
+##鱿
+##鲁
+##鲈
+##鲍
+##鲑
+##鲛
+##鲜
+##鲟
+##鲢
+##鲤
+##鲨
+##鲫
+##鲱
+##鲲
+##鲶
+##鲷
+##鲸
+##鳃
+##鳄
+##鳅
+##鳌
+##鳍
+##鳕
+##鳖
+##鳗
+##鳝
+##鳞
+##鳥
+##鳩
+##鳳
+##鳴
+##鳶
+##鴉
+##鴕
+##鴛
+##鴦
+##鴨
+##鴻
+##鴿
+##鵑
+##鵜
+##鵝
+##鵡
+##鵬
+##鵰
+##鵲
+##鶘
+##鶩
+##鶯
+##鶴
+##鷗
+##鷲
+##鷹
+##鷺
+##鸚
+##鸞
+##鸟
+##鸠
+##鸡
+##鸢
+##鸣
+##鸥
+##鸦
+##鸨
+##鸪
+##鸭
+##鸯
+##鸳
+##鸵
+##鸽
+##鸾
+##鸿
+##鹂
+##鹃
+##鹄
+##鹅
+##鹈
+##鹉
+##鹊
+##鹌
+##鹏
+##鹑
+##鹕
+##鹘
+##鹜
+##鹞
+##鹤
+##鹦
+##鹧
+##鹫
+##鹭
+##鹰
+##鹳
+##鹵
+##鹹
+##鹼
+##鹽
+##鹿
+##麂
+##麋
+##麒
+##麓
+##麗
+##麝
+##麟
+##麥
+##麦
+##麩
+##麴
+##麵
+##麸
+##麺
+##麻
+##麼
+##麽
+##麾
+##黃
+##黄
+##黍
+##黎
+##黏
+##黑
+##黒
+##黔
+##默
+##黛
+##黜
+##黝
+##點
+##黠
+##黨
+##黯
+##黴
+##鼋
+##鼎
+##鼐
+##鼓
+##鼠
+##鼬
+##鼹
+##鼻
+##鼾
+##齁
+##齊
+##齋
+##齐
+##齒
+##齡
+##齢
+##齣
+##齦
+##齿
+##龄
+##龅
+##龈
+##龊
+##龋
+##龌
+##龍
+##龐
+##龔
+##龕
+##龙
+##龚
+##龛
+##龜
+##龟
+##︰
+##︱
+##︶
+##︿
+##﹁
+##﹂
+##﹍
+##﹏
+##﹐
+##﹑
+##﹒
+##﹔
+##﹕
+##﹖
+##﹗
+##﹙
+##﹚
+##﹝
+##﹞
+##﹡
+##﹣
+##!
+##"
+###
+##$
+##%
+##&
+##'
+##(
+##)
+##*
+##,
+##-
+##.
+##/
+##:
+##;
+##<
+##?
+##@
+##[
+##\
+##]
+##^
+##_
+##`
+##f
+##h
+##j
+##u
+##w
+##z
+##{
+##}
+##。
+##「
+##」
+##、
+##・
+##ッ
+##ー
+##イ
+##ク
+##シ
+##ス
+##ト
+##ノ
+##フ
+##ラ
+##ル
+##ン
+##゙
+##゚
+## ̄
+##¥
+##👍
+##🔥
+##😂
+##😎
diff --git a/intelligent_cabin/pyproject.toml b/intelligent_cabin/pyproject.toml
new file mode 100644
index 0000000..757bc52
--- /dev/null
+++ b/intelligent_cabin/pyproject.toml
@@ -0,0 +1,24 @@
+[project]
+name = "intelligent-cabin-agent"
+version = "0.1.0"
+description = "High-response agent service for customer service, aftersales, front desk, and intelligent cabin."
+readme = "README.md"
+requires-python = ">=3.11"
+dependencies = [
+ "fastapi>=0.115.0,<1.0.0",
+ "uvicorn[standard]>=0.30.0,<1.0.0",
+ "pydantic>=2.8.0,<3.0.0",
+ "pydantic-settings>=2.3.0,<3.0.0",
+ "PyYAML>=6.0.2,<7.0.0",
+ "torch>=2.11.0,<3.0.0",
+ "transformers>=4.57.0,<5.0.0",
+]
+
+[build-system]
+requires = ["setuptools>=68", "wheel"]
+build-backend = "setuptools.build_meta"
+
+[tool.setuptools]
+
+[tool.setuptools.packages.find]
+include = ["app*"]
diff --git a/intelligent_cabin/requirements.txt b/intelligent_cabin/requirements.txt
new file mode 100644
index 0000000..4c2ccb3
--- /dev/null
+++ b/intelligent_cabin/requirements.txt
@@ -0,0 +1,8 @@
+fastapi>=0.115.0,<1.0.0
+uvicorn[standard]>=0.30.0,<1.0.0
+pydantic>=2.8.0,<3.0.0
+pydantic-settings>=2.3.0,<3.0.0
+redis>=5.0.0,<6.0.0
+PyYAML>=6.0.2,<7.0.0
+torch>=2.11.0,<3.0.0
+transformers>=4.57.0,<5.0.0
diff --git a/package-lock.json b/package-lock.json
index 052ad2d..439f8a5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,9 +8,14 @@
"name": "ai-canvas",
"version": "0.1.0",
"dependencies": {
+ "@ai-sdk/openai": "^0.0.60",
+ "@ai-sdk/react": "^0.0.4",
+ "ai": "^3.4.9",
+ "lucide-react": "^1.14.0",
"next": "16.2.5",
"react": "19.2.4",
- "react-dom": "19.2.4"
+ "react-dom": "19.2.4",
+ "zod": "^3.23.8"
},
"devDependencies": {
"@tailwindcss/postcss": "^4",
@@ -23,6 +28,524 @@
"typescript": "^5"
}
},
+ "node_modules/@ai-sdk/openai": {
+ "version": "0.0.60",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/openai/-/openai-0.0.60.tgz",
+ "integrity": "sha512-NEdDdv3o76jT6UeWHxP6I/lMYcjFQhQGQi/U2gVqW1PEU4Pjaud7tAVSy27IPbiRakg6GOzWrltI2JhZgAI1wg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider": "0.0.23",
+ "@ai-sdk/provider-utils": "1.0.19"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "zod": "^3.0.0"
+ }
+ },
+ "node_modules/@ai-sdk/provider": {
+ "version": "0.0.23",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-0.0.23.tgz",
+ "integrity": "sha512-oAc49O5+xypVrKM7EUU5P/Y4DUL4JZUWVxhejoAVOTOl3WZUEWsMbP3QZR+TrimQIsS0WR/n9UuF6U0jPdp0tQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "json-schema": "0.4.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@ai-sdk/provider-utils": {
+ "version": "1.0.19",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-1.0.19.tgz",
+ "integrity": "sha512-p02Fq5Mnc8T6nwRBN1Iaou8YXvN1sDS6hbmJaD5UaRbXjizbh+8rpFS/o7jqAHTwf3uHCDitP3pnODyHdc/CDQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider": "0.0.23",
+ "eventsource-parser": "1.1.2",
+ "nanoid": "3.3.6",
+ "secure-json-parse": "2.7.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "zod": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ai-sdk/provider-utils/node_modules/nanoid": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/@ai-sdk/react": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-0.0.4.tgz",
+ "integrity": "sha512-YPvp81onTxNlnOWolyjvappS5y9pMkZwWKMxrqwMimaJI4NWquPrAeHCYqzaVAb/+RKaveEGSvyYs/SD8AO6ig==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider-utils": "0.0.15",
+ "@ai-sdk/ui-utils": "0.0.4",
+ "swr": "2.2.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "react": "^18 || ^19",
+ "zod": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "react": {
+ "optional": true
+ },
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ai-sdk/react/node_modules/@ai-sdk/provider": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-0.0.10.tgz",
+ "integrity": "sha512-NzkrtREQpHID1cTqY/C4CI30PVOaXWKYytDR2EcytmFgnP7Z6+CrGIA/YCnNhYAuUm6Nx+nGpRL/Hmyrv7NYzg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "json-schema": "0.4.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@ai-sdk/react/node_modules/@ai-sdk/provider-utils": {
+ "version": "0.0.15",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-0.0.15.tgz",
+ "integrity": "sha512-eTkIaZc/Ud96DYG40lLuKWJvZ2GoW/wT4KH9r1f3wGUhj5wgQN+bzgdI57z60VOEDuMmDVuILVnTLFe0HNT5Iw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider": "0.0.10",
+ "eventsource-parser": "1.1.2",
+ "nanoid": "3.3.6",
+ "secure-json-parse": "2.7.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "zod": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ai-sdk/react/node_modules/nanoid": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/@ai-sdk/solid": {
+ "version": "0.0.49",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/solid/-/solid-0.0.49.tgz",
+ "integrity": "sha512-KnfWTt640cS1hM2fFIba8KHSPLpOIWXtEm28pNCHTvqasVKlh2y/zMQANTwE18pF2nuXL9P9F5/dKWaPsaEzQw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider-utils": "1.0.20",
+ "@ai-sdk/ui-utils": "0.0.46"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "solid-js": "^1.7.7"
+ },
+ "peerDependenciesMeta": {
+ "solid-js": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ai-sdk/solid/node_modules/@ai-sdk/provider": {
+ "version": "0.0.24",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-0.0.24.tgz",
+ "integrity": "sha512-XMsNGJdGO+L0cxhhegtqZ8+T6nn4EoShS819OvCgI2kLbYTIvk0GWFGD0AXJmxkxs3DrpsJxKAFukFR7bvTkgQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "json-schema": "0.4.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@ai-sdk/solid/node_modules/@ai-sdk/provider-utils": {
+ "version": "1.0.20",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-1.0.20.tgz",
+ "integrity": "sha512-ngg/RGpnA00eNOWEtXHenpX1MsM2QshQh4QJFjUfwcqHpM5kTfG7je7Rc3HcEDP+OkRVv2GF+X4fC1Vfcnl8Ow==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider": "0.0.24",
+ "eventsource-parser": "1.1.2",
+ "nanoid": "3.3.6",
+ "secure-json-parse": "2.7.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "zod": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ai-sdk/solid/node_modules/@ai-sdk/ui-utils": {
+ "version": "0.0.46",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-0.0.46.tgz",
+ "integrity": "sha512-ZG/wneyJG+6w5Nm/hy1AKMuRgjPQToAxBsTk61c9sVPUTaxo+NNjM2MhXQMtmsja2N5evs8NmHie+ExEgpL3cA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider": "0.0.24",
+ "@ai-sdk/provider-utils": "1.0.20",
+ "json-schema": "0.4.0",
+ "secure-json-parse": "2.7.0",
+ "zod-to-json-schema": "3.23.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "zod": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ai-sdk/solid/node_modules/nanoid": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/@ai-sdk/svelte": {
+ "version": "0.0.51",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/svelte/-/svelte-0.0.51.tgz",
+ "integrity": "sha512-aIZJaIds+KpCt19yUDCRDWebzF/17GCY7gN9KkcA2QM6IKRO5UmMcqEYja0ZmwFQPm1kBZkF2njhr8VXis2mAw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider-utils": "1.0.20",
+ "@ai-sdk/ui-utils": "0.0.46",
+ "sswr": "2.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "svelte": "^3.0.0 || ^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "svelte": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ai-sdk/svelte/node_modules/@ai-sdk/provider": {
+ "version": "0.0.24",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-0.0.24.tgz",
+ "integrity": "sha512-XMsNGJdGO+L0cxhhegtqZ8+T6nn4EoShS819OvCgI2kLbYTIvk0GWFGD0AXJmxkxs3DrpsJxKAFukFR7bvTkgQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "json-schema": "0.4.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@ai-sdk/svelte/node_modules/@ai-sdk/provider-utils": {
+ "version": "1.0.20",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-1.0.20.tgz",
+ "integrity": "sha512-ngg/RGpnA00eNOWEtXHenpX1MsM2QshQh4QJFjUfwcqHpM5kTfG7je7Rc3HcEDP+OkRVv2GF+X4fC1Vfcnl8Ow==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider": "0.0.24",
+ "eventsource-parser": "1.1.2",
+ "nanoid": "3.3.6",
+ "secure-json-parse": "2.7.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "zod": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ai-sdk/svelte/node_modules/@ai-sdk/ui-utils": {
+ "version": "0.0.46",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-0.0.46.tgz",
+ "integrity": "sha512-ZG/wneyJG+6w5Nm/hy1AKMuRgjPQToAxBsTk61c9sVPUTaxo+NNjM2MhXQMtmsja2N5evs8NmHie+ExEgpL3cA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider": "0.0.24",
+ "@ai-sdk/provider-utils": "1.0.20",
+ "json-schema": "0.4.0",
+ "secure-json-parse": "2.7.0",
+ "zod-to-json-schema": "3.23.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "zod": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ai-sdk/svelte/node_modules/nanoid": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/@ai-sdk/ui-utils": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-0.0.4.tgz",
+ "integrity": "sha512-vUfuqVOZV3MyFokAduQyJsnDP00qzyZut6mizFscXlCOmiiW3FAnu/XEnMEwCmf7yUG7O4v7Xa2zd4X1tsN5pg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider-utils": "0.0.15",
+ "secure-json-parse": "2.7.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "zod": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ai-sdk/ui-utils/node_modules/@ai-sdk/provider": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-0.0.10.tgz",
+ "integrity": "sha512-NzkrtREQpHID1cTqY/C4CI30PVOaXWKYytDR2EcytmFgnP7Z6+CrGIA/YCnNhYAuUm6Nx+nGpRL/Hmyrv7NYzg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "json-schema": "0.4.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@ai-sdk/ui-utils/node_modules/@ai-sdk/provider-utils": {
+ "version": "0.0.15",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-0.0.15.tgz",
+ "integrity": "sha512-eTkIaZc/Ud96DYG40lLuKWJvZ2GoW/wT4KH9r1f3wGUhj5wgQN+bzgdI57z60VOEDuMmDVuILVnTLFe0HNT5Iw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider": "0.0.10",
+ "eventsource-parser": "1.1.2",
+ "nanoid": "3.3.6",
+ "secure-json-parse": "2.7.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "zod": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ai-sdk/ui-utils/node_modules/nanoid": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/@ai-sdk/vue": {
+ "version": "0.0.54",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/vue/-/vue-0.0.54.tgz",
+ "integrity": "sha512-Ltu6gbuii8Qlp3gg7zdwdnHdS4M8nqKDij2VVO1223VOtIFwORFJzKqpfx44U11FW8z2TPVBYN+FjkyVIcN2hg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider-utils": "1.0.20",
+ "@ai-sdk/ui-utils": "0.0.46",
+ "swrv": "1.0.4"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "vue": "^3.3.4"
+ },
+ "peerDependenciesMeta": {
+ "vue": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ai-sdk/vue/node_modules/@ai-sdk/provider": {
+ "version": "0.0.24",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-0.0.24.tgz",
+ "integrity": "sha512-XMsNGJdGO+L0cxhhegtqZ8+T6nn4EoShS819OvCgI2kLbYTIvk0GWFGD0AXJmxkxs3DrpsJxKAFukFR7bvTkgQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "json-schema": "0.4.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@ai-sdk/vue/node_modules/@ai-sdk/provider-utils": {
+ "version": "1.0.20",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-1.0.20.tgz",
+ "integrity": "sha512-ngg/RGpnA00eNOWEtXHenpX1MsM2QshQh4QJFjUfwcqHpM5kTfG7je7Rc3HcEDP+OkRVv2GF+X4fC1Vfcnl8Ow==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider": "0.0.24",
+ "eventsource-parser": "1.1.2",
+ "nanoid": "3.3.6",
+ "secure-json-parse": "2.7.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "zod": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ai-sdk/vue/node_modules/@ai-sdk/ui-utils": {
+ "version": "0.0.46",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-0.0.46.tgz",
+ "integrity": "sha512-ZG/wneyJG+6w5Nm/hy1AKMuRgjPQToAxBsTk61c9sVPUTaxo+NNjM2MhXQMtmsja2N5evs8NmHie+ExEgpL3cA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider": "0.0.24",
+ "@ai-sdk/provider-utils": "1.0.20",
+ "json-schema": "0.4.0",
+ "secure-json-parse": "2.7.0",
+ "zod-to-json-schema": "3.23.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "zod": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@ai-sdk/vue/node_modules/nanoid": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
"node_modules/@alloc/quick-lru": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
@@ -1240,6 +1763,15 @@
"node": ">=12.4.0"
}
},
+ "node_modules/@opentelemetry/api": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
+ "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
"node_modules/@rtsao/scc": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
@@ -1538,6 +2070,12 @@
"tslib": "^2.4.0"
}
},
+ "node_modules/@types/diff-match-patch": {
+ "version": "1.0.36",
+ "resolved": "https://registry.npmjs.org/@types/diff-match-patch/-/diff-match-patch-1.0.36.tgz",
+ "integrity": "sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==",
+ "license": "MIT"
+ },
"node_modules/@types/estree": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
@@ -2176,6 +2714,171 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
+ "node_modules/ai": {
+ "version": "3.4.9",
+ "resolved": "https://registry.npmjs.org/ai/-/ai-3.4.9.tgz",
+ "integrity": "sha512-wmVzpIHNGjCEjIJ/3945a/DIkz+gwObjC767ZRgO8AmtIZMO5KqvqNr7n2KF+gQrCPCMC8fM1ICQFXSvBZnBlA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider": "0.0.24",
+ "@ai-sdk/provider-utils": "1.0.20",
+ "@ai-sdk/react": "0.0.62",
+ "@ai-sdk/solid": "0.0.49",
+ "@ai-sdk/svelte": "0.0.51",
+ "@ai-sdk/ui-utils": "0.0.46",
+ "@ai-sdk/vue": "0.0.54",
+ "@opentelemetry/api": "1.9.0",
+ "eventsource-parser": "1.1.2",
+ "json-schema": "0.4.0",
+ "jsondiffpatch": "0.6.0",
+ "nanoid": "3.3.6",
+ "secure-json-parse": "2.7.0",
+ "zod-to-json-schema": "3.23.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "openai": "^4.42.0",
+ "react": "^18 || ^19",
+ "sswr": "^2.1.0",
+ "svelte": "^3.0.0 || ^4.0.0",
+ "zod": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "openai": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "sswr": {
+ "optional": true
+ },
+ "svelte": {
+ "optional": true
+ },
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ai/node_modules/@ai-sdk/provider": {
+ "version": "0.0.24",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-0.0.24.tgz",
+ "integrity": "sha512-XMsNGJdGO+L0cxhhegtqZ8+T6nn4EoShS819OvCgI2kLbYTIvk0GWFGD0AXJmxkxs3DrpsJxKAFukFR7bvTkgQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "json-schema": "0.4.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/ai/node_modules/@ai-sdk/provider-utils": {
+ "version": "1.0.20",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-1.0.20.tgz",
+ "integrity": "sha512-ngg/RGpnA00eNOWEtXHenpX1MsM2QshQh4QJFjUfwcqHpM5kTfG7je7Rc3HcEDP+OkRVv2GF+X4fC1Vfcnl8Ow==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider": "0.0.24",
+ "eventsource-parser": "1.1.2",
+ "nanoid": "3.3.6",
+ "secure-json-parse": "2.7.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "zod": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ai/node_modules/@ai-sdk/react": {
+ "version": "0.0.62",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-0.0.62.tgz",
+ "integrity": "sha512-1asDpxgmeHWL0/EZPCLENxfOHT+0jce0z/zasRhascodm2S6f6/KZn5doLG9jdmarcb+GjMjFmmwyOVXz3W1xg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider-utils": "1.0.20",
+ "@ai-sdk/ui-utils": "0.0.46",
+ "swr": "2.2.5"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "react": "^18 || ^19",
+ "zod": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "react": {
+ "optional": true
+ },
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ai/node_modules/@ai-sdk/ui-utils": {
+ "version": "0.0.46",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-0.0.46.tgz",
+ "integrity": "sha512-ZG/wneyJG+6w5Nm/hy1AKMuRgjPQToAxBsTk61c9sVPUTaxo+NNjM2MhXQMtmsja2N5evs8NmHie+ExEgpL3cA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@ai-sdk/provider": "0.0.24",
+ "@ai-sdk/provider-utils": "1.0.20",
+ "json-schema": "0.4.0",
+ "secure-json-parse": "2.7.0",
+ "zod-to-json-schema": "3.23.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "zod": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ai/node_modules/nanoid": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/ai/node_modules/swr": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.5.tgz",
+ "integrity": "sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==",
+ "license": "MIT",
+ "dependencies": {
+ "client-only": "^0.0.1",
+ "use-sync-external-store": "^1.2.0"
+ },
+ "peerDependencies": {
+ "react": "^16.11.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/ajv": {
"version": "6.15.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
@@ -2807,6 +3510,12 @@
"node": ">=8"
}
},
+ "node_modules/diff-match-patch": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz",
+ "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==",
+ "license": "Apache-2.0"
+ },
"node_modules/doctrine": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
@@ -3375,6 +4084,16 @@
"eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0"
}
},
+ "node_modules/eslint-plugin-react-hooks/node_modules/zod": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
+ "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
"node_modules/eslint-scope": {
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
@@ -3469,6 +4188,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/eventsource-parser": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-1.1.2.tgz",
+ "integrity": "sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.18"
+ }
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -4464,6 +5192,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "license": "(AFL-2.1 OR BSD-3-Clause)"
+ },
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -4491,6 +5225,35 @@
"node": ">=6"
}
},
+ "node_modules/jsondiffpatch": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.6.0.tgz",
+ "integrity": "sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/diff-match-patch": "^1.0.36",
+ "chalk": "^5.3.0",
+ "diff-match-patch": "^1.0.5"
+ },
+ "bin": {
+ "jsondiffpatch": "bin/jsondiffpatch.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ }
+ },
+ "node_modules/jsondiffpatch/node_modules/chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
"node_modules/jsx-ast-utils": {
"version": "3.3.5",
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
@@ -4858,6 +5621,15 @@
"yallist": "^3.0.2"
}
},
+ "node_modules/lucide-react": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.14.0.tgz",
+ "integrity": "sha512-+1mdWcfSJVUsaTIjN9zoezmUhfXo5l0vP7ekBMPo3jcS/aIkxHnXqAPsByszMZx/Y8oQBRJxJx5xg+RH3urzxA==",
+ "license": "ISC",
+ "peerDependencies": {
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
"node_modules/magic-string": {
"version": "0.30.21",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
@@ -5634,6 +6406,12 @@
"integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
"license": "MIT"
},
+ "node_modules/secure-json-parse": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz",
+ "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==",
+ "license": "BSD-3-Clause"
+ },
"node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -5859,6 +6637,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/sswr": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/sswr/-/sswr-2.1.0.tgz",
+ "integrity": "sha512-Cqc355SYlTAaUt8iDPaC/4DPPXK925PePLMxyBKuWd5kKc5mwsG3nT9+Mq2tyguL5s7b4Jg+IRMpTRsNTAfpSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "swrev": "^4.0.0"
+ },
+ "peerDependencies": {
+ "svelte": "^4.0.0 || ^5.0.0-next.0"
+ }
+ },
"node_modules/stable-hash": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
@@ -6065,6 +6855,33 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/swr": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.0.tgz",
+ "integrity": "sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==",
+ "license": "MIT",
+ "dependencies": {
+ "use-sync-external-store": "^1.2.0"
+ },
+ "peerDependencies": {
+ "react": "^16.11.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/swrev": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/swrev/-/swrev-4.0.0.tgz",
+ "integrity": "sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==",
+ "license": "MIT"
+ },
+ "node_modules/swrv": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/swrv/-/swrv-1.0.4.tgz",
+ "integrity": "sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "vue": ">=3.2.26 < 4"
+ }
+ },
"node_modules/tailwindcss": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.4.tgz",
@@ -6423,6 +7240,15 @@
"punycode": "^2.1.0"
}
},
+ "node_modules/use-sync-external-store": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
+ "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -6559,15 +7385,23 @@
}
},
"node_modules/zod": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
- "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==",
- "dev": true,
+ "version": "3.23.8",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
+ "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
},
+ "node_modules/zod-to-json-schema": {
+ "version": "3.23.2",
+ "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.2.tgz",
+ "integrity": "sha512-uSt90Gzc/tUfyNqxnjlfBs8W6WSGpNBv0rVsNxP/BVSMHMKGdthPYff4xtCHYloJGM0CFxFsb3NbC0eqPhfImw==",
+ "license": "ISC",
+ "peerDependencies": {
+ "zod": "^3.23.3"
+ }
+ },
"node_modules/zod-validation-error": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz",
diff --git a/package.json b/package.json
index 2e8e34c..eab55c0 100644
--- a/package.json
+++ b/package.json
@@ -3,15 +3,23 @@
"version": "0.1.0",
"private": true,
"scripts": {
+ "generate:voice-aliases": "node scripts/generate-voice-aliases.mjs",
+ "predev": "node scripts/generate-voice-aliases.mjs",
+ "prebuild": "node scripts/generate-voice-aliases.mjs",
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "eslint"
},
"dependencies": {
+ "@ai-sdk/openai": "^0.0.60",
+ "@ai-sdk/react": "^0.0.4",
+ "ai": "^3.4.9",
+ "lucide-react": "^1.14.0",
"next": "16.2.5",
"react": "19.2.4",
- "react-dom": "19.2.4"
+ "react-dom": "19.2.4",
+ "zod": "^3.23.8"
},
"devDependencies": {
"@tailwindcss/postcss": "^4",
diff --git a/scripts/generate-voice-aliases.mjs b/scripts/generate-voice-aliases.mjs
new file mode 100644
index 0000000..776988b
--- /dev/null
+++ b/scripts/generate-voice-aliases.mjs
@@ -0,0 +1,98 @@
+#!/usr/bin/env node
+/**
+ * scripts/generate-voice-aliases.mjs
+ *
+ * 读取 intelligent_cabin/config/voice_aliases.yml
+ * 生成 src/lib/nlu/voice-aliases.gen.ts(构建时嵌入,运行时无需 HTTP 请求)
+ *
+ * 用法:
+ * node scripts/generate-voice-aliases.mjs
+ * 或在 package.json 的 prebuild / predev 中调用
+ */
+
+import { readFileSync, writeFileSync } from "node:fs";
+import { resolve, dirname } from "node:path";
+import { fileURLToPath } from "node:url";
+
+const __dirname = dirname(fileURLToPath(import.meta.url));
+const ROOT = resolve(__dirname, "..");
+
+// ── 极简 YAML 解析(只处理本文件的结构,无需外部依赖)────────────────────
+function parseSimpleYaml(text) {
+ const lines = text.split("\n");
+ const result = {};
+ let currentKey = null;
+ let currentListKey = null;
+ let currentObject = result;
+
+ for (const raw of lines) {
+ const line = raw;
+ const stripped = raw.trimStart();
+ if (!stripped || stripped.startsWith("#")) continue;
+
+ const indent = raw.length - stripped.length;
+
+ // 顶级 key(indent = 0)
+ if (indent === 0 && stripped.endsWith(":")) {
+ currentKey = stripped.slice(0, -1).trim();
+ result[currentKey] = {};
+ currentObject = result[currentKey];
+ currentListKey = null;
+ continue;
+ }
+
+ // intent_aliases 下的子 key(indent = 2)
+ if (indent === 2 && stripped.endsWith(":")) {
+ currentListKey = stripped.slice(0, -1).trim();
+ if (!Array.isArray(currentObject[currentListKey])) {
+ currentObject[currentListKey] = [];
+ }
+ continue;
+ }
+
+ // list items(indent = 2 for top-level lists, indent = 4 for nested)
+ if (stripped.startsWith("- ")) {
+ const value = stripped.slice(2).trim().replace(/^["']|["']$/g, "");
+ if (indent === 2 && !currentListKey) {
+ // top-level list under result key
+ if (!Array.isArray(result[currentKey])) {
+ result[currentKey] = [];
+ }
+ result[currentKey].push(value);
+ } else if (indent === 4 && currentListKey) {
+ currentObject[currentListKey].push(value);
+ }
+ continue;
+ }
+ }
+
+ return result;
+}
+
+// ── 读取 YAML ────────────────────────────────────────────────────────────────
+const yamlPath = resolve(ROOT, "intelligent_cabin/config/voice_aliases.yml");
+const raw = readFileSync(yamlPath, "utf8");
+const parsed = parseSimpleYaml(raw);
+
+const affirmWords = parsed["affirm_words"] ?? [];
+const denyWords = parsed["deny_words"] ?? [];
+const cancelWords = parsed["cancel_words"] ?? [];
+const intentAliases = parsed["intent_aliases"] ?? {};
+
+// ── 生成 TypeScript ───────────────────────────────────────────────────────────
+const ts = `// AUTO-GENERATED — do not edit manually
+// Source: intelligent_cabin/config/voice_aliases.yml
+// Regenerate: node scripts/generate-voice-aliases.mjs
+
+export const AFFIRM_WORDS: readonly string[] = ${JSON.stringify(affirmWords, null, 2)} as const;
+
+export const DENY_WORDS: readonly string[] = ${JSON.stringify(denyWords, null, 2)} as const;
+
+export const CANCEL_WORDS: readonly string[] = ${JSON.stringify(cancelWords, null, 2)} as const;
+
+export const INTENT_ALIASES: Readonly> = ${JSON.stringify(intentAliases, null, 2)} as const;
+`;
+
+const outPath = resolve(ROOT, "src/lib/nlu/voice-aliases.gen.ts");
+writeFileSync(outPath, ts, "utf8");
+console.log(`✅ Generated: ${outPath}`);
diff --git a/src/app/api/chat/route.ts b/src/app/api/chat/route.ts
new file mode 100644
index 0000000..d5c4d46
--- /dev/null
+++ b/src/app/api/chat/route.ts
@@ -0,0 +1,138 @@
+import { createOpenAI } from "@ai-sdk/openai";
+import { streamText } from "ai";
+import { z } from "zod";
+import {
+ createDeviceActionArtifact,
+ createGuidedProcedureArtifact,
+ createKnowledgeLessonArtifact,
+ createParameterChangeArtifact,
+} from "@/lib/artifacts/mock";
+
+const qwen = createOpenAI({
+ baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1",
+ apiKey: process.env.DASHSCOPE_API_KEY,
+});
+
+const mockParameterValues: Record = {
+ 主轴转速: 1200,
+ 水泵压力上限: 0.6,
+ 温度补偿: 0,
+ 进给速度: 480,
+};
+
+export const maxDuration = 30;
+
+export async function POST(req: Request) {
+ const { messages } = await req.json();
+
+ const result = await streamText({
+ model: qwen("qwen-plus"),
+ maxSteps: 2,
+ system: [
+ "你是工业生产设备的 AI 交互画布编排助手。",
+ "你不要只输出大段文字;当用户要调参、控制设备、查询设备知识、进入调机流程时,优先调用工具生成 artifact。",
+ "第一阶段只支持文字输入和鼠标点击,不要提 ASR、语音识别或权限分级。",
+ "一次用户请求最多只能调用一个工具。",
+ "工具调用完成后,用一句很短的话说明右侧画布已经生成了什么,绝不能再次调用同一个工具。",
+ "当用户说确认、执行、下一步、已完成等短指令时,如果上文已有当前画布,尽量解释为操作当前画布。",
+ ].join("\n"),
+ messages,
+ tools: {
+ proposeParameterChange: {
+ description: "生成工业参数修改可视化组件,展示当前值、目标值和确认按钮。",
+ parameters: z.object({
+ parameterName: z.string().describe("参数名称,例如 主轴转速、水泵压力上限、温度补偿"),
+ targetValue: z.union([z.string(), z.number()]).describe("目标值"),
+ unit: z.string().optional().describe("单位,例如 rpm、MPa、°C"),
+ deviceName: z.string().optional().describe("设备名称"),
+ }),
+ execute: async ({ parameterName, targetValue, unit, deviceName }) => {
+ const normalizedName = parameterName.includes("转速") ? "主轴转速" : parameterName;
+ const currentValue = mockParameterValues[normalizedName] ?? "未读取";
+ const artifact = createParameterChangeArtifact({
+ parameterName: normalizedName,
+ currentValue,
+ targetValue,
+ unit,
+ deviceName,
+ });
+
+ return {
+ llmSummary: `${normalizedName} 参数修改卡片已生成,当前值 ${currentValue}${unit ?? ""},目标值 ${targetValue}${unit ?? ""}。`,
+ artifact,
+ executionRecord: {
+ toolName: "proposeParameterChange",
+ args: { parameterName: normalizedName, targetValue, unit, deviceName },
+ resultCode: "MOCK_PREVIEW_CREATED",
+ createdAt: new Date().toISOString(),
+ },
+ };
+ },
+ },
+ controlIndustrialDevice: {
+ description: "生成具象设备控制动画组件,例如打开探照灯、启动水泵、关闭风机。",
+ parameters: z.object({
+ deviceName: z.string().describe("设备名称,例如 探照灯、水泵、除尘风机"),
+ action: z.enum(["open", "close", "start", "stop"]).describe("动作"),
+ deviceKind: z.enum(["light", "pump", "fan", "machine"]).describe("设备类型"),
+ }),
+ execute: async ({ deviceName, action, deviceKind }) => {
+ const artifact = createDeviceActionArtifact({ deviceName, action, deviceKind });
+
+ return {
+ llmSummary: `${deviceName} 的${action}动作卡片已生成,等待用户确认。`,
+ artifact,
+ executionRecord: {
+ toolName: "controlIndustrialDevice",
+ args: { deviceName, action, deviceKind },
+ resultCode: "MOCK_PREVIEW_CREATED",
+ createdAt: new Date().toISOString(),
+ },
+ };
+ },
+ },
+ answerEquipmentKnowledge: {
+ description: "生成设备说明书、报警处理或调机知识的教学式卡片。",
+ parameters: z.object({
+ topic: z.string().describe("知识主题,例如 主轴温度报警处理、冷却泵无流量怎么办"),
+ }),
+ execute: async ({ topic }) => {
+ const artifact = createKnowledgeLessonArtifact(topic);
+
+ return {
+ llmSummary: `${topic} 的教学式知识卡片已生成。`,
+ artifact,
+ executionRecord: {
+ toolName: "answerEquipmentKnowledge",
+ args: { topic },
+ resultCode: "MOCK_KNOWLEDGE_CREATED",
+ createdAt: new Date().toISOString(),
+ },
+ };
+ },
+ },
+ startGuidedProcedure: {
+ description: "生成一个 3 到 5 步的引导式调机流程组件。",
+ parameters: z.object({
+ procedureName: z.string().optional().describe("流程名称"),
+ }),
+ execute: async () => {
+ const artifact = createGuidedProcedureArtifact();
+
+ return {
+ llmSummary: "主轴温度报警调机流程已经生成,当前等待第 1 步反馈。",
+ artifact,
+ executionRecord: {
+ toolName: "startGuidedProcedure",
+ args: {},
+ resultCode: "MOCK_PROCEDURE_CREATED",
+ createdAt: new Date().toISOString(),
+ },
+ };
+ },
+ },
+ },
+ });
+
+ return result.toDataStreamResponse();
+}
diff --git a/src/app/globals.css b/src/app/globals.css
index a2dc41e..4710cfe 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -8,19 +8,12 @@
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
- --font-sans: var(--font-geist-sans);
- --font-mono: var(--font-geist-mono);
-}
-
-@media (prefers-color-scheme: dark) {
- :root {
- --background: #0a0a0a;
- --foreground: #ededed;
- }
+ --font-sans: Arial, "PingFang SC", "Microsoft YaHei", sans-serif;
+ --font-mono: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
}
body {
background: var(--background);
color: var(--foreground);
- font-family: Arial, Helvetica, sans-serif;
+ font-family: Arial, "PingFang SC", "Microsoft YaHei", sans-serif;
}
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 976eb90..864f575 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,20 +1,9 @@
import type { Metadata } from "next";
-import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css";
-const geistSans = Geist({
- variable: "--font-geist-sans",
- subsets: ["latin"],
-});
-
-const geistMono = Geist_Mono({
- variable: "--font-geist-mono",
- subsets: ["latin"],
-});
-
export const metadata: Metadata = {
- title: "Create Next App",
- description: "Generated by create next app",
+ title: "工业 AI 交互画布",
+ description: "面向工业设备的 AI Artifact 交互原型",
};
export default function RootLayout({
@@ -23,10 +12,7 @@ export default function RootLayout({
children: React.ReactNode;
}>) {
return (
-
+
{children}
);
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 3f36f7c..875f3f0 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,65 +1,607 @@
-import Image from "next/image";
+"use client";
+
+import {
+ Bot,
+ CheckCircle2,
+ Factory,
+ MessageSquareText,
+ Send,
+ User,
+ AlertCircle,
+ BookOpen,
+ Layers,
+ Settings,
+ Thermometer,
+} from "lucide-react";
+
+import type { FormEvent } from "react";
+import { useCallback, useRef, useState } from "react";
+import { ArtifactRenderer } from "@/components/artifacts/ArtifactRenderer";
+import {
+ createActionEvent,
+ matchTextToAction,
+ updateArtifactForAction,
+} from "@/lib/artifacts/reducer";
+import type { ArtifactAction, ArtifactActionEvent, InteractionArtifact } from "@/lib/artifacts/types";
+import {
+ buildVisibleActions,
+ isNluResult,
+ processVoiceInput,
+} from "@/lib/nlu/pipeline";
+import type { NluResult, PipelineSession } from "@/lib/nlu/types";
+import { buildArtifactFromNlu } from "@/lib/artifacts/factory";
+import {
+ buildFalseWeldKnowledgeArtifact,
+ buildDieMaterialAdjustArtifact,
+ buildDieStatusOverviewArtifact,
+} from "@/lib/artifacts/factory";
+
+
+
+// ── 类型 ─────────────────────────────────────────────────────────────────────
+
+type ChatMessage = {
+ id: string;
+ role: "user" | "assistant" | "system" | "error";
+ text: string;
+};
+
+type FlowEvent = {
+ id: string;
+ title: string;
+ detail: string;
+ branch: string;
+ kind: "ux" | "tech" | "action";
+};
+
+type ReferenceTab = {
+ id: string;
+ label: string;
+ kind: "tool" | "knowledge" | "smalltalk";
+ artifact?: InteractionArtifact;
+ text?: string;
+ branch: string;
+};
+
+function uid(prefix: string) {
+ return `${prefix}_${Date.now()}_${Math.random().toString(16).slice(2)}`;
+}
+
+function isGuidedProcedureActive(artifact?: InteractionArtifact) {
+ return artifact?.type === "guided_procedure" && artifact.status !== "success";
+}
+
+// ── 主组件 ───────────────────────────────────────────────────────────────────
export default function Home() {
+ const [inputValue, setInputValue] = useState("");
+ const [activeArtifact, setActiveArtifact] = useState();
+ const [referenceTabs, setReferenceTabs] = useState([]);
+ const [activeReferenceId, setActiveReferenceId] = useState();
+ const [messages, setMessages] = useState([]);
+ const [isLoading, setIsLoading] = useState(false);
+ const [, setFlowEvents] = useState([
+ {
+ id: uid("event"),
+ title: "等待输入",
+ detail: "当前没有激活调机流程,系统处于大流程 A:普通对话。",
+ branch: "大流程 A · 普通对话",
+ kind: "ux",
+ },
+ ]);
+
+ // session_id 在页面生命周期内固定,重新刷新页面才重置
+ const sessionId = useRef(uid("session")).current;
+ const userId = useRef("user_001").current;
+
+ const flowMode = isGuidedProcedureActive(activeArtifact) ? "B" : "A";
+ const activeReference =
+ referenceTabs.find((tab) => tab.id === activeReferenceId) ??
+ referenceTabs[referenceTabs.length - 1];
+
+ // 当前可见 Artifact 按钮(供 pipeline 阶段 1b 使用)
+ const visibleActions = activeArtifact
+ ? buildVisibleActions(activeArtifact.artifactId, activeArtifact.actions)
+ : [];
+
+ const pipelineSession = useCallback(
+ (): PipelineSession => ({
+ sessionId,
+ status: activeArtifact?.status ?? "idle",
+ visibleActions,
+ }),
+ [sessionId, activeArtifact, visibleActions],
+ );
+
+ // ── helpers ──────────────────────────────────────────────────────────────────
+
+ function addMessage(role: ChatMessage["role"], text: string) {
+ setMessages((items) => [...items, { id: uid("msg"), role, text }]);
+ }
+
+ function addFlowEvent(event: Omit) {
+ setFlowEvents((items) => [...items, { id: uid("event"), ...event }]);
+ }
+
+ // ── NLU 结果处理 ─────────────────────────────────────────────────────────────
+
+ function handleNluResult(result: NluResult) {
+ addFlowEvent({
+ kind: "tech",
+ branch: `${result.decisionGrade} · ${result.routeHint}`,
+ title: `NLU:${result.domain} / ${result.intent}`,
+ detail: `confidence=${result.confidence.toFixed(3)}; routeHint=${result.routeHint}; slots=${JSON.stringify(result.slots)}`,
+ });
+
+ if (isGuidedProcedureActive(activeArtifact)) {
+ handleNluResultDuringProcedure(result);
+ return;
+ }
+
+ // 等待补槽:只回复文字,不渲染 Artifact
+ if (result.pendingSlots.length > 0) {
+ addMessage("assistant", result.replyText);
+ addFlowEvent({
+ kind: "ux",
+ branch: "ask_slot",
+ title: "等待补槽",
+ detail: `pending: ${result.pendingSlots.join(", ")}`,
+ });
+ return;
+ }
+
+ // ── LLM knowledge_search function call 命中 → 直接渲染知识卡片 ──────────
+ if (result.knowledgeContent) {
+ const knowledgeArtifact = buildFalseWeldKnowledgeArtifact();
+ setActiveArtifact(knowledgeArtifact);
+ setReferenceTabs([]);
+ setActiveReferenceId(undefined);
+ addMessage("assistant", result.replyText);
+ addFlowEvent({
+ kind: "ux",
+ branch: "knowledge_query",
+ title: `LLM 知识检索 → Artifact:knowledge_lesson`,
+ detail: `doc=${result.knowledgeDocId ?? "llm_answer"}`,
+ });
+ return;
+ }
+
+ // 尝试从 NLU 结果构造 Artifact
+ const artifact = buildArtifactFromNlu(result);
+ if (artifact) {
+ setActiveArtifact(artifact);
+ setReferenceTabs([]);
+ setActiveReferenceId(undefined);
+ addMessage("assistant", result.replyText);
+ addFlowEvent({
+ kind: "ux",
+ branch: result.routeHint,
+ title: `主画布生成 Artifact:${artifact.type}`,
+ detail: `intent=${result.intent}; artifact=${artifact.artifactId}`,
+ });
+ return;
+ }
+
+ // 无 Artifact:纯文字回复
+ addMessage("assistant", result.replyText);
+ addFlowEvent({
+ kind: "ux",
+ branch: result.routeHint,
+ title: "AI 文字回复",
+ detail: `decision=${result.rawDecision}`,
+ });
+ }
+
+ function handleNluResultDuringProcedure(result: NluResult) {
+ addMessage(
+ "assistant",
+ `当前处于调机流程中。${result.replyText}`,
+ );
+ addFlowEvent({
+ kind: "ux",
+ branch: result.routeHint,
+ title: "临时回答(调机流程中)",
+ detail: "大流程 B:结果进入参考区,不覆盖调机主卡。",
+ });
+
+ const tab: ReferenceTab = {
+ id: uid("ref"),
+ label: result.routeHint === "knowledge_query" ? "知识参考" : "工具结果",
+ kind: result.routeHint === "knowledge_query" ? "knowledge" : "smalltalk",
+ text: result.replyText,
+ branch: result.routeHint,
+ };
+ setReferenceTabs((items) => [...items, tab]);
+ setActiveReferenceId(tab.id);
+ }
+
+ // ── Artifact 动作处理 ────────────────────────────────────────────────────────
+
+ function runArtifactAction(
+ action: ArtifactAction,
+ value?: unknown,
+ source: ArtifactActionEvent["source"] = "click",
+ transcript?: string,
+ ) {
+ if (!activeArtifact) return;
+
+ const event = createActionEvent(activeArtifact.artifactId, action, source, value, transcript);
+ addFlowEvent({
+ kind: "action",
+ branch: "命中当前组件动作",
+ title: `ArtifactActionEvent:${action.actionId}`,
+ detail: transcript ? `source=${source}; transcript=${transcript}` : `source=${source}`,
+ });
+
+ if (
+ action.actionId === "artifact.confirm" &&
+ ["parameter_change", "device_action"].includes(activeArtifact.type)
+ ) {
+ setActiveArtifact({
+ ...activeArtifact,
+ status: "running",
+ actions: activeArtifact.actions.map((item) => ({ ...item, disabled: true })),
+ } as InteractionArtifact);
+ window.setTimeout(() => {
+ setActiveArtifact((current) =>
+ current ? updateArtifactForAction(current, event) : current,
+ );
+ }, 600);
+ return;
+ }
+
+ setActiveArtifact((current) =>
+ current ? updateArtifactForAction(current, event) : current,
+ );
+ }
+
+ function runReferenceAction(tabId: string, action: ArtifactAction, value?: unknown) {
+ const tab = referenceTabs.find((item) => item.id === tabId);
+ if (!tab?.artifact) return;
+
+ const event = createActionEvent(tab.artifact.artifactId, action, "click", value);
+ setReferenceTabs((items) =>
+ items.map((item) =>
+ item.id === tabId && item.artifact
+ ? { ...item, artifact: updateArtifactForAction(item.artifact, event) }
+ : item,
+ ),
+ );
+ }
+
+ // ── 表单提交 ─────────────────────────────────────────────────────────────────
+
+ async function handleSubmit(e: FormEvent) {
+ e.preventDefault();
+ const text = inputValue.trim();
+ if (!text || isLoading) return;
+
+ addMessage("user", text);
+ setInputValue("");
+ setIsLoading(true);
+
+ try {
+ // 阶段 1b:先检查 Artifact 文本命中(本地,同步)
+ if (activeArtifact) {
+ const matchedAction = matchTextToAction(activeArtifact, text);
+ if (matchedAction) {
+ runArtifactAction(matchedAction, text, inferInputSource(text), text);
+ addMessage("system", "命中当前组件动作,未进入新任务识别。");
+ return;
+ }
+ }
+
+ // pipeline(异步,调 intelligent_cabin)
+ const result = await processVoiceInput(text, pipelineSession(), userId);
+
+ if (isNluResult(result)) {
+ handleNluResult(result);
+ return;
+ }
+
+ // PipelineEvent 处理
+ switch (result.type) {
+ case "stop_action":
+ setActiveArtifact((current) =>
+ current ? { ...current, status: "paused" } : current,
+ );
+ addMessage("system", "已停止当前操作。");
+ addFlowEvent({ kind: "action", branch: "停止词", title: "停止操作", detail: result.sourceText });
+ break;
+
+ case "voice_click_event": {
+ if (activeArtifact) {
+ const action = activeArtifact.actions.find(
+ (a) => a.actionId === result.actionId,
+ );
+ if (action) {
+ runArtifactAction(action, undefined, "voice", text);
+ }
+ }
+ break;
+ }
+
+ case "slot_fill_event":
+ addMessage("system", `Slot 填写:${result.value}`);
+ // nluResult 已由 pipeline 内部更新服务端 session,Canvas 此处可选更新 UI
+ if ("nluResult" in result) {
+ handleNluResult((result as { nluResult: NluResult }).nluResult);
+ }
+ break;
+ }
+ } catch (err) {
+ const msg = err instanceof Error ? err.message : String(err);
+ addMessage("error", `NLU 服务错误:${msg}`);
+ } finally {
+ setIsLoading(false);
+ }
+ }
+
+ // ── 渲染 ─────────────────────────────────────────────────────────────────────
+
return (
-
-
-
-
-
- To get started, edit the page.tsx file.
-
-
- Looking for a starting point or more instructions? Head over to{" "}
-
- Templates
- {" "}
- or the{" "}
-
- Learning
- {" "}
- center.
-
-
-
-
-
- Deploy Now
-
-
- Documentation
-
+
+
+
+
+
+
+
+
工业 AI 交互画布
+
+ intelligent_cabin NLU · 大流程 {flowMode} · Artifact 状态机
+
+
+
+ {flowMode === "A" ? "大流程 A · 普通对话" : "大流程 B · 调机流程中"}
+
+
+
+
+
+
+
+
+
+ {flowMode === "A" ? "大流程 A · 普通对话" : "大流程 B · 调机流程中"}
+
+
+ {flowMode === "A"
+ ? "无激活调机流程:输入经过四阶段 Pipeline → intelligent_cabin NLU。"
+ : "GuidedProcedure 激活:短指令优先操作当前步骤,其他结果进入参考区。"}
+
+
+
+
+ {/* ── 演示工具栏(BERT 未训练弯管机语义时直接触发)── */}
+
+
+ 演示工具 · 直接触发(无需 NLU)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {activeArtifact ? (
+
+ ) : (
+
+ )}
+
+
+
+
+
);
}
+
+// ── 工具函数 ─────────────────────────────────────────────────────────────────
+
+function inferInputSource(text: string): ArtifactActionEvent["source"] {
+ return /^(语音|voice|asr)[::]/i.test(text.trim()) ? "voice" : "text";
+}
+
+// ── 纯展示组件 ───────────────────────────────────────────────────────────────
+
+function MessageList({ messages }: { messages: ChatMessage[] }) {
+ return (
+
+
+ {messages.length === 0 && (
+
+ 输入任意文字,经 Pipeline → intelligent_cabin NLU 处理后显示结果。
+ 服务地址:NEXT_PUBLIC_NLU_BASE_URL(默认 localhost:8000)
+
+ )}
+ {messages.map((message) => (
+
+
+
+ {message.role === "user" ? (
+
+ ) : message.role === "error" ? (
+
+ ) : (
+
+ )}
+ {message.role === "user"
+ ? "用户"
+ : message.role === "system"
+ ? "系统"
+ : message.role === "error"
+ ? "错误"
+ : "AI"}
+
+ {message.text}
+
+
+ ))}
+
+
+ );
+}
+
+function EmptyCanvas() {
+ return (
+
+
+
+
+
+
等待 intelligent_cabin NLU 响应
+
+ 输入会经过四阶段处理链路:停止词 → UI 语音点击 → 槽位填写 → BERT NLU。
+ NLU 服务需在 NEXT_PUBLIC_NLU_BASE_URL(默认 localhost:8000)运行。
+
+
+
+ );
+}
diff --git a/src/app/practice/page.tsx b/src/app/practice/page.tsx
new file mode 100644
index 0000000..cc11a41
--- /dev/null
+++ b/src/app/practice/page.tsx
@@ -0,0 +1,209 @@
+'use client';
+import { useState, useRef, useEffect } from 'react';
+import { useChat } from 'ai/react';
+
+export default function Practice() {
+ const { messages, append } = useChat();
+ const [inputValue, setInputValue] = useState('');
+ console.log("当前的消息记录是:", messages);
+ // ==========================================
+ // 📝 进阶练习:自动滚屏与画中画 (Artifacts)
+ //
+ // 【要求】:补全任务 7 到 10。完成后你的页面将拥有“天气卡片”和自动滚屏功能!
+ // ==========================================
+
+ // 💡 任务 7:创建一个“锚点”,用来指向聊天列表的最底部
+ const messagesEndRef = useRef
(null);
+
+
+ // 💡 任务 8:写一个 useEffect 监听器,只要 messages 变化,就让页面平滑滚动到上面创建的锚点
+ useEffect(() => {
+ messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
+ }, [messages]);
+
+ // 💡 任务 9:从 messages 里找出最后一次使用的工具(Tool)
+ // 提示:这行代码可以直接参考最终答案,主要是理解它在干嘛
+ const lastMessageWithTool = messages.slice().reverse().find(m => m.toolInvocations && m.toolInvocations.length > 0);
+ const activeTool = lastMessageWithTool?.toolInvocations?.[lastMessageWithTool.toolInvocations.length - 1];
+
+ const handleSend = (e: React.FormEvent) => {
+ e.preventDefault();
+ if (!inputValue.trim()) return;
+ append({ role: 'user', content: inputValue });
+ setInputValue('');
+ };
+
+ return (
+
+
+ {/* ================= 左侧:聊天区 ================= */}
+
+
💬 聊天区
+
+
+ {messages.length === 0 &&
暂无消息...
}
+
+ {messages.map(m => (
+
+
+ {m.role === 'user' ? '你:' : 'AI:'}
+
+
+ {/* 这里加了一个小判断,如果是工具调用,就在左边显示一行提示,不再显示一大坨代码 */}
+ {m.toolInvocations ? (
+ [生成了一个组件,请看右侧画布]
+ ) : (
+ {m.content}
+ )}
+
+ ))}
+
+ {/* 💡 任务 7 的搭档:在这里把那个看不见的锚点埋下 */}
+ {/*
*/}
+
+
+
+
+
+
+ {/* ================= 右侧:画布区 (Artifacts) ================= */}
+
+
+ {/* 💡 任务 10:完成条件渲染逻辑 */}
+ {/*
+ 如果 activeTool 不存在,显示一段提示文字:"等待 AI 召唤画布..."
+ 如果 activeTool 存在,并且 activeTool.toolName === 'getWeather',并且 activeTool.state === 'result',
+ 就用一个好看的 div 把 activeTool.args.location 和 activeTool.result.temperature 显示出来!
+ */}
+ {!activeTool ? (
+
+ ) : (
+
+ {activeTool.state === 'result' && activeTool.toolName === 'getWeather' && (
+
+
{activeTool.args.location}
+
+ {activeTool.result.temperature}°C
+
+
天气状况:{activeTool.result.condition}
+
+ )}
+
+ )}
+
+
+
+
+
+ {/* 答案区域在下面 */}
+
+
+ 👉 点击查看答案
+
+{`// 答案代码:
+'use client';
+import { useState, useRef, useEffect } from 'react';
+import { useChat } from 'ai/react';
+
+export default function Practice() {
+ const { messages, append } = useChat();
+ const [inputValue, setInputValue] = useState('');
+
+ // 任务 7:创建锚点
+ const messagesEndRef = useRef(null);
+
+ // 任务 8:监听 messages 并滚动
+ useEffect(() => {
+ messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
+ }, [messages]);
+
+ // 任务 9:提取最后一个工具
+ const lastMessageWithTool = messages.slice().reverse().find(m => m.toolInvocations && m.toolInvocations.length > 0);
+ const activeTool = lastMessageWithTool?.toolInvocations?.[lastMessageWithTool.toolInvocations.length - 1];
+
+ const handleSend = (e: React.FormEvent) => {
+ e.preventDefault();
+ if (!inputValue.trim()) return;
+ append({ role: 'user', content: inputValue });
+ setInputValue('');
+ };
+
+ return (
+
+
+
+
💬 聊天区
+
+
+ {messages.length === 0 &&
暂无消息...
}
+
+ {messages.map(m => (
+
+
+ {m.role === 'user' ? '你:' : 'AI:'}
+
+
+ {m.toolInvocations ? (
+ [生成了一个组件,请看右侧画布]
+ ) : (
+ {m.content}
+ )}
+
+ ))}
+
+ {/* 任务 7:埋下锚点 */}
+
+
+
+
+
+
+
+
+ {/* 任务 10:条件渲染画布 */}
+ {!activeTool ? (
+
+ ) : (
+
+ {activeTool.state === 'result' && activeTool.toolName === 'getWeather' && (
+
+
{activeTool.args.location}
+
+ {activeTool.result.temperature}°C
+
+
天气状况:{activeTool.result.condition}
+
+ )}
+
+ )}
+
+
+
+ );
+}`}
+
+
+
+
+ );
+}
diff --git a/src/components/artifacts/ArtifactRenderer.tsx b/src/components/artifacts/ArtifactRenderer.tsx
new file mode 100644
index 0000000..7699ff4
--- /dev/null
+++ b/src/components/artifacts/ArtifactRenderer.tsx
@@ -0,0 +1,524 @@
+"use client";
+
+import {
+ BookOpen,
+ CheckCircle2,
+ ChevronDown,
+ Droplets,
+ Gauge,
+ Lightbulb,
+ Loader2,
+ Pause,
+ Play,
+ Power,
+ RotateCcw,
+ SlidersHorizontal,
+ AlertTriangle,
+ Wrench,
+ XCircle,
+} from "lucide-react";
+import type React from "react";
+import { useState } from "react";
+import type {
+ ArtifactAction,
+ ArtifactComponentProps,
+ DeviceActionProps,
+ GuidedProcedureProps,
+ InteractionArtifact,
+ KnowledgeBlock,
+ KnowledgeLessonProps,
+ ParameterChangeProps,
+} from "@/lib/artifacts/types";
+import { KnowledgeArtifact } from "./KnowledgeArtifact";
+import { DieMaterialAdjust } from "./DieMaterialAdjust";
+import { DieStatusOverview } from "./DieStatusOverview";
+
+function cx(...classes: Array) {
+ return classes.filter(Boolean).join(" ");
+}
+
+function actionClass(kind: ArtifactAction["kind"]) {
+ if (kind === "primary") {
+ return "bg-zinc-950 text-white hover:bg-zinc-800";
+ }
+ if (kind === "danger") {
+ return "bg-red-600 text-white hover:bg-red-500";
+ }
+ return "border border-zinc-200 bg-white text-zinc-700 hover:bg-zinc-50";
+}
+
+function ArtifactFrame({
+ artifact,
+ eyebrow,
+ icon: Icon,
+ children,
+}: {
+ artifact: InteractionArtifact;
+ eyebrow: string;
+ icon: typeof SlidersHorizontal;
+ children: React.ReactNode;
+}) {
+ const statusLabel: Record = {
+ draft: "草稿",
+ waiting_confirmation: "等待确认",
+ running: "执行中",
+ success: "已完成",
+ failed: "失败",
+ paused: "已暂停",
+ };
+
+ return (
+
+
+
+
+
+
+
+
{eyebrow}
+
{artifact.title}
+
+
+
+ {statusLabel[artifact.status]}
+
+
+ {children}
+
+ );
+}
+
+function ArtifactActions({
+ artifact,
+ onAction,
+}: {
+ artifact: InteractionArtifact;
+ onAction: (action: ArtifactAction, value?: unknown) => void;
+}) {
+ if (artifact.actions.length === 0) return null;
+
+ const voiceHints = artifact.actions.flatMap((action) => action.voiceAliases ?? []).slice(0, 3);
+
+ return (
+
+ {voiceHints.length > 0 && artifact.status === "waiting_confirmation" && (
+
+ 可说:{voiceHints.join(" / ")}
+
+ )}
+
+ {artifact.actions.map((action) => (
+
+ ))}
+
+
+ );
+}
+
+function ParameterChangeCard({
+ artifact,
+ onAction,
+}: ArtifactComponentProps>) {
+ const props = artifact.props as ParameterChangeProps;
+
+ return (
+
+
+
+
{props.deviceName}
+
{props.parameterName}
+
{props.impact}
+
{props.executionNote}
+
+
+
+
+
+
+ {artifact.status === "running" ? (
+
+ ) : artifact.status === "success" ? (
+
+ ) : artifact.status === "failed" ? (
+
+ ) : (
+
+ )}
+
+ {artifact.status === "success"
+ ? "参数已写入,画布保留本次修改快照。"
+ : artifact.status === "running"
+ ? "正在模拟写入参数..."
+ : artifact.status === "failed"
+ ? "参数写入失败,可以修改后重试。"
+ : "请确认前后值无误后再执行。"}
+
+
+
+
+
+
+ );
+}
+
+function ValuePanel({
+ label,
+ value,
+ unit,
+ muted,
+}: {
+ label: string;
+ value: string | number;
+ unit?: string;
+ muted?: boolean;
+}) {
+ return (
+
+
{label}
+
+ {value}
+ {unit && {unit}}
+
+
+ );
+}
+
+function DeviceActionCard({
+ artifact,
+ onAction,
+}: ArtifactComponentProps>) {
+ const props = artifact.props as DeviceActionProps;
+ const isActive = artifact.status === "running" || artifact.status === "success";
+ const DeviceIcon = props.deviceKind === "pump" ? Droplets : props.deviceKind === "light" ? Lightbulb : Power;
+
+ return (
+
+
+
+
+
{props.deviceKind.toUpperCase()}
+
{props.deviceName}
+
{props.executionNote}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {props.progressLabel ?? "执行进度"}
+ {artifact.status === "success" ? "100%" : artifact.status === "running" ? "64%" : "0%"}
+
+
+
+
+
+
+
+ );
+}
+
+function DeviceMotionScene({
+ deviceKind,
+ icon: DeviceIcon,
+ active,
+ running,
+}: {
+ deviceKind: DeviceActionProps["deviceKind"];
+ icon: typeof Droplets;
+ active: boolean;
+ running: boolean;
+}) {
+ const isPump = deviceKind === "pump";
+ const isLight = deviceKind === "light";
+
+ return (
+
+
+
+ {isPump && (
+
+
+
+
+
+
+
+ )}
+
+ {isLight && active && (
+ <>
+
+
+ >
+ )}
+
+
+
+
+
+ );
+}
+
+function actionLabel(action: DeviceActionProps["action"]) {
+ return {
+ open: "打开",
+ close: "关闭",
+ start: "启动",
+ stop: "停止",
+ }[action];
+}
+
+function StatusRow({ label, value, emphasis }: { label: string; value: string; emphasis?: boolean }) {
+ return (
+
+ {label}
+ {value}
+
+ );
+}
+
+function KnowledgeLessonArtifact({
+ artifact,
+ onAction,
+}: ArtifactComponentProps>) {
+ const props = artifact.props as KnowledgeLessonProps;
+
+ return (
+
+
+
+
先看结论
+
{props.conclusion}
+
+
+ {props.blocks.map((block, index) => (
+
+ ))}
+
+
+
+
+ );
+}
+
+function KnowledgeBlockView({ block }: { block: KnowledgeBlock }) {
+ const [open, setOpen] = useState(block.type !== "details" || Boolean(block.defaultOpen));
+
+ if (block.type === "summary") {
+ return {block.text}
;
+ }
+
+ if (block.type === "key_points") {
+ return (
+
+
关键点
+
+ {block.items.map((item) => (
+
+ {item}
+
+ ))}
+
+
+ );
+ }
+
+ if (block.type === "steps") {
+ return (
+
+
处理步骤
+
+ {block.steps.map((step, index) => (
+
+
{index + 1}
+
+
{step.title}
+
{step.body}
+
+
+ ))}
+
+
+ );
+ }
+
+ if (block.type === "details") {
+ return (
+
+
+ {open &&
{block.markdown}
}
+
+ );
+ }
+
+ if (block.type === "citations") {
+ return (
+
+
来源
+
+ {block.citations.map((citation) => (
+
+ {citation.title} · {citation.location}
+
+ ))}
+
+
+ );
+ }
+
+ return null;
+}
+
+function GuidedProcedureArtifact({
+ artifact,
+ onAction,
+}: ArtifactComponentProps>) {
+ const props = artifact.props as GuidedProcedureProps;
+ const activeIndex = props.steps.findIndex((step) => step.stepId === props.currentStepId);
+ const activeStep = props.steps[activeIndex] ?? props.steps[0];
+
+ return (
+
+
+
+
{props.deviceName}
+
{props.procedureName}
+
+ {props.steps.map((step, index) => (
+
+
+ {index + 1}
+ {step.title}
+
+
+ ))}
+
+
+
+
+ {activeStep ? (
+ <>
+
+
+ {activeStep.type === "measurement_input" ? : }
+
+
+
第 {activeIndex + 1} 步
+
{activeStep.title}
+
+
+
{activeStep.instruction}
+ {activeStep.expectedFeedback && (
+
+
可输入反馈
+
+ {activeStep.expectedFeedback.map((feedback) => (
+
+ {feedback}
+
+ ))}
+
+
+ )}
+ >
+ ) : (
+
+
+ 流程已经完成。
+
+ )}
+
+
+
+
+ );
+}
+
+const registry = {
+ parameter_change: ParameterChangeCard,
+ device_action: DeviceActionCard,
+ knowledge_lesson: KnowledgeArtifact,
+ guided_procedure: GuidedProcedureArtifact,
+ die_material_adjust: DieMaterialAdjust,
+ die_status_overview: DieStatusOverview,
+};
+
+
+export function ArtifactRenderer({ artifact, onAction }: ArtifactComponentProps) {
+ const Component = registry[artifact.type] as (props: ArtifactComponentProps) => React.ReactNode;
+ return ;
+}
diff --git a/src/components/artifacts/DieMaterialAdjust.tsx b/src/components/artifacts/DieMaterialAdjust.tsx
new file mode 100644
index 0000000..5fc241a
--- /dev/null
+++ b/src/components/artifacts/DieMaterialAdjust.tsx
@@ -0,0 +1,235 @@
+"use client";
+
+/**
+ * src/components/artifacts/DieMaterialAdjust.tsx
+ *
+ * 三步流程:
+ * Step 1 (form) → 选择材料 / 外径 / 壁厚
+ * Step 2 (adjusting) → 模拟等待 2s
+ * Step 3 (done) → 显示各模具调节后的 X / Y 位置
+ */
+
+import { CheckCircle2, Loader2, Settings } from "lucide-react";
+import { useState } from "react";
+import type {
+ ArtifactAction,
+ ArtifactComponentProps,
+ DieMaterialAdjustProps,
+ InteractionArtifact,
+} from "@/lib/artifacts/types";
+import { generateDiePositions } from "@/lib/artifacts/die-mock-data";
+
+// ── 材料选项 ──────────────────────────────────────────────────────────────────
+const MATERIALS = [
+ "304 不锈钢",
+ "316L 不锈钢",
+ "201 不锈钢",
+ "Q235 碳钢",
+ "Q345 低合金钢",
+];
+
+// ── 表单界面 ──────────────────────────────────────────────────────────────────
+function FormStep({
+ onConfirm,
+}: {
+ onConfirm: (material: string, od: number, thickness: number) => void;
+}) {
+ const [material, setMaterial] = useState(MATERIALS[0]);
+ const [od, setOd] = useState(20);
+ const [thickness, setThickness] = useState(2);
+
+ return (
+
+
+ 选择材料规格后,系统将根据成型工艺数据自动计算各模具伺服位置并写入。
+
+
+
+
+
+
+
+
+
+ {/* 预览标签 */}
+
+ {material}
+ 圆管 Φ{od}
+ × 壁厚 {thickness} mm
+
+
+
+
+
+
+
+ );
+}
+
+// ── 等待界面 ──────────────────────────────────────────────────────────────────
+function AdjustingStep({ material, od, thickness }: { material: string; od: number; thickness: number }) {
+ return (
+
+
+
正在调节模具伺服位置…
+
+ {material} · Φ{od} × {thickness}mm
+
+
+ );
+}
+
+// ── 结果界面(仅显示编号 + X + Y)─────────────────────────────────────────────
+function DoneStep({
+ material,
+ od,
+ thickness,
+ dies,
+}: {
+ material: string;
+ od: number;
+ thickness: number;
+ dies: ReturnType;
+}) {
+ return (
+
+ {/* 成功提示 */}
+
+
+
+
调节完成
+
+ {material} · Φ{od} × {thickness}mm · {dies.length} 个模具
+
+
+
+
+ {/* 位置表 */}
+
+
+
+
+ | 模具 |
+ X 位置 (mm) |
+ Y 位置 (mm) |
+
+
+
+ {dies.map((die) => (
+
+ | {die.label} |
+ {die.xPos.toFixed(3)} |
+ {die.yPos.toFixed(3)} |
+
+ ))}
+
+
+
+
+ );
+}
+
+// ── 主组件 ────────────────────────────────────────────────────────────────────
+export function DieMaterialAdjust({
+ artifact,
+}: ArtifactComponentProps>) {
+ type Step = "form" | "adjusting" | "done";
+ const [step, setStep] = useState("form");
+ const [result, setResult] = useState<{
+ material: string;
+ od: number;
+ thickness: number;
+ dies: ReturnType;
+ } | null>(null);
+
+ function handleConfirm(material: string, od: number, thickness: number) {
+ setStep("adjusting");
+ setTimeout(() => {
+ const dies = generateDiePositions({ outerDiameter: od, thickness, totalDies: 15 });
+ setResult({ material, od, thickness, dies });
+ setStep("done");
+ }, 2000);
+ }
+
+ return (
+
+ {/* Header */}
+
+
+
+
+
+
模具伺服调节
+
{artifact.title}
+
+ {step === "done" && (
+
+ 已完成
+
+ )}
+
+
+
+ {step === "form" &&
}
+ {step === "adjusting" && result === null && (
+
+ )}
+ {step === "adjusting" && (
+
+ )}
+ {step === "done" && result && (
+
+ )}
+
+
+ );
+}
diff --git a/src/components/artifacts/DieStatusOverview.tsx b/src/components/artifacts/DieStatusOverview.tsx
new file mode 100644
index 0000000..7675ed6
--- /dev/null
+++ b/src/components/artifacts/DieStatusOverview.tsx
@@ -0,0 +1,275 @@
+"use client";
+
+/**
+ * src/components/artifacts/DieStatusOverview.tsx
+ *
+ * 模具位置总览
+ * - 截面图:描边线条风格(标量图),展示弯管成型渐进过程
+ * Die 1 → 平直钢带 + 两段浅下凹
+ * Die 2 → 平中间 + 两边微翘
+ * Die 3 → 整体圆弧(开口大)
+ * Die 4-15 → 弧度渐深,开口逐步收小
+ * Die 16 → 闭合圆
+ * - 只显示模具编号 + X 位置 + Y 位置
+ */
+
+import { Layers } from "lucide-react";
+import { useState } from "react";
+import type {
+ ArtifactComponentProps,
+ DiePositionData,
+ DieStatusOverviewProps,
+ InteractionArtifact,
+} from "@/lib/artifacts/types";
+
+// ── 成型截面路径计算 ───────────────────────────────────────────────────────────
+
+function getFormingPath(
+ dieIndex: number,
+ totalDies: number,
+ cx: number,
+ cy: number,
+ r: number,
+): string {
+ // ── Die 1:平直钢带 + 两段浅下凹(最左 / 中间 / 最右保持平直)────
+ if (dieIndex === 1) {
+ const depth = r * 0.11;
+ return [
+ `M ${(cx - r * 1.1).toFixed(1)} ${cy.toFixed(1)}`,
+ `L ${(cx - r * 0.64).toFixed(1)} ${cy.toFixed(1)}`,
+ `C ${(cx - r * 0.58).toFixed(1)} ${cy.toFixed(1)} ${(cx - r * 0.58).toFixed(1)} ${(cy + depth).toFixed(1)} ${(cx - r * 0.5).toFixed(1)} ${(cy + depth).toFixed(1)}`,
+ `C ${(cx - r * 0.42).toFixed(1)} ${(cy + depth).toFixed(1)} ${(cx - r * 0.42).toFixed(1)} ${cy.toFixed(1)} ${(cx - r * 0.36).toFixed(1)} ${cy.toFixed(1)}`,
+ `L ${(cx + r * 0.36).toFixed(1)} ${cy.toFixed(1)}`,
+ `C ${(cx + r * 0.42).toFixed(1)} ${cy.toFixed(1)} ${(cx + r * 0.42).toFixed(1)} ${(cy + depth).toFixed(1)} ${(cx + r * 0.5).toFixed(1)} ${(cy + depth).toFixed(1)}`,
+ `C ${(cx + r * 0.58).toFixed(1)} ${(cy + depth).toFixed(1)} ${(cx + r * 0.58).toFixed(1)} ${cy.toFixed(1)} ${(cx + r * 0.64).toFixed(1)} ${cy.toFixed(1)}`,
+ `L ${(cx + r * 1.1).toFixed(1)} ${cy.toFixed(1)}`,
+ ].join(" ");
+ }
+
+ // ── Die 2:平中间 + 两侧边缘微翘(只有角落开始弯)──────────────────────────
+ if (dieIndex === 2) {
+ const flatHalf = r * 0.42; // 中间平直段半宽
+ const curlUp = r * 0.36; // 边缘上翘高度
+ return [
+ `M ${(cx - r).toFixed(1)} ${(cy - curlUp).toFixed(1)}`,
+ `Q ${(cx - r * 0.65).toFixed(1)} ${cy.toFixed(1)} ${(cx - flatHalf).toFixed(1)} ${cy.toFixed(1)}`,
+ `L ${(cx + flatHalf).toFixed(1)} ${cy.toFixed(1)}`,
+ `Q ${(cx + r * 0.65).toFixed(1)} ${cy.toFixed(1)} ${(cx + r).toFixed(1)} ${(cy - curlUp).toFixed(1)}`,
+ ].join(" ");
+ }
+
+ // ── Die 3-16:弧线,开口角从大到零(圆弧 → 闭合圆)─────────────────────────
+ // t=0 (die 3): 开口半角 = 120°(浅弧)
+ // t=1 (die 16): 开口半角 = 0°(闭合圆)
+ const t = Math.min(1, (dieIndex - 3) / Math.max(1, totalDies - 3));
+ const gapHalfRad = (1 - t) * ((120 * Math.PI) / 180);
+
+ // 闭合圆(die 16 或极小开口)
+ if (gapHalfRad < 0.02) {
+ return [
+ `M ${(cx - r).toFixed(2)} ${cy.toFixed(2)}`,
+ `A ${r.toFixed(2)} ${r.toFixed(2)} 0 1 0 ${(cx + r).toFixed(2)} ${cy.toFixed(2)}`,
+ `A ${r.toFixed(2)} ${r.toFixed(2)} 0 1 0 ${(cx - r).toFixed(2)} ${cy.toFixed(2)}`,
+ ].join(" ");
+ }
+
+ // 开口圆弧:开口在上方,弧从右端绕底到左端
+ const rightX = cx + r * Math.sin(gapHalfRad);
+ const rightY = cy - r * Math.cos(gapHalfRad);
+ const leftX = cx - r * Math.sin(gapHalfRad);
+ const leftY = rightY;
+
+ const arcSpan = 2 * Math.PI - 2 * gapHalfRad;
+ const largeArc = arcSpan > Math.PI ? 1 : 0;
+
+ return [
+ `M ${rightX.toFixed(2)} ${rightY.toFixed(2)}`,
+ `A ${r.toFixed(2)} ${r.toFixed(2)} 0 ${largeArc} 1 ${leftX.toFixed(2)} ${leftY.toFixed(2)}`,
+ ].join(" ");
+}
+
+// ── 成型截面 SVG 组件 ─────────────────────────────────────────────────────────
+
+function FormingShape({
+ dieIndex,
+ totalDies,
+ size,
+}: {
+ dieIndex: number;
+ totalDies: number;
+ size: number;
+}) {
+ const cx = size / 2;
+ const r = size * 0.35;
+ // 小格子:底部对齐(让成型从下向上逐步收拢)
+ // 大图(详情面板):居中显示,避免圆偏角
+ const cy = size >= 80 || dieIndex === totalDies
+ ? size * 0.5 // 大图和闭合圆: 居中
+ : size * 0.9 - r; // 小格子: 底部对齐
+
+ const path = getFormingPath(dieIndex, totalDies, cx, cy, r);
+ const strokeW = size < 80 ? 1.6 : 2.6;
+
+ return (
+
+ );
+}
+
+// ── 模具格子 ──────────────────────────────────────────────────────────────────
+
+function DieCell({
+ die,
+ totalDies,
+ selected,
+ onClick,
+}: {
+ die: DiePositionData;
+ totalDies: number;
+ selected: boolean;
+ onClick: () => void;
+}) {
+ return (
+
+ );
+}
+
+// ── 详情面板 ──────────────────────────────────────────────────────────────────
+
+function DieDetailPanel({ die, totalDies }: { die: DiePositionData; totalDies: number }) {
+ // 大图的 stage 标签
+ const progress = die.dieIndex / totalDies;
+ const stageLabel =
+ die.dieIndex === 1 ? "原料钢带(平)" :
+ die.dieIndex === 2 ? "边缘初弯" :
+ progress < 0.35 ? "浅弧成型" :
+ progress < 0.6 ? "U 形成型" :
+ progress < 0.85 ? "近圆成型" :
+ "圆管闭合";
+
+ return (
+
+
+
{die.label}
+ {stageLabel}
+
+
+ {/* 大截面图 */}
+
+
+
+
+ {/* 只显示 X / Y */}
+
+
+ X 位置
+
+ {die.xPos.toFixed(3)} mm
+
+
+
+ Y 位置
+
+ {die.yPos.toFixed(3)} mm
+
+
+
+
+ );
+}
+
+// ── 主组件 ────────────────────────────────────────────────────────────────────
+
+export function DieStatusOverview({
+ artifact,
+}: ArtifactComponentProps>) {
+ const props = artifact.props as DieStatusOverviewProps;
+ const [selectedIdx, setSelectedIdx] = useState(props.selectedDieIndex);
+
+ const selectedDie = selectedIdx !== null
+ ? props.dies.find((d) => d.dieIndex === selectedIdx) ?? null
+ : null;
+
+ return (
+
+ {/* Header */}
+
+
+
+
+
+
+ 模具位置总览
+
+
{artifact.title}
+
+ {props.lastScanTime && (
+
读取时间:{props.lastScanTime}
+ )}
+
+
+
+
+
+ {/* 左:模具格子 */}
+
+
+ 截面线图展示该模具出口处管材的成型状态(平板 → 圆管)· 点击查看坐标
+
+
+ {props.dies.map((die) => (
+
+ setSelectedIdx(selectedIdx === die.dieIndex ? null : die.dieIndex)
+ }
+ />
+ ))}
+
+
+
+ {/* 右:详情 */}
+ {selectedDie && (
+
+
+
+ )}
+
+
+
+ );
+}
diff --git a/src/components/artifacts/KnowledgeArtifact.tsx b/src/components/artifacts/KnowledgeArtifact.tsx
new file mode 100644
index 0000000..bdeb07b
--- /dev/null
+++ b/src/components/artifacts/KnowledgeArtifact.tsx
@@ -0,0 +1,220 @@
+"use client";
+
+/**
+ * src/components/artifacts/KnowledgeArtifact.tsx
+ *
+ * 知识检索结果展示 —— 支持图片、视频、步骤、详情展开。
+ * 对应 Artifact type: "knowledge_lesson"
+ */
+
+import {
+ BookOpen,
+ ChevronDown,
+ FileText,
+ Image as ImageIcon,
+ Play,
+} from "lucide-react";
+import { useState } from "react";
+import type {
+ ArtifactComponentProps,
+ InteractionArtifact,
+ KnowledgeBlock,
+ KnowledgeLessonProps,
+ MediaRef,
+} from "@/lib/artifacts/types";
+
+function cx(...classes: Array) {
+ return classes.filter(Boolean).join(" ");
+}
+
+// ── MediaBlock ───────────────────────────────────────────────────────────────
+
+function MediaCard({ ref: mediaRef }: { ref: MediaRef }) {
+ const isVideo = mediaRef.type === "video";
+ return (
+
+ );
+}
+
+// ── KnowledgeBlock renderer ───────────────────────────────────────────────────
+
+function BlockView({ block }: { block: KnowledgeBlock }) {
+ const [open, setOpen] = useState(block.type !== "details" || Boolean(block.defaultOpen));
+
+ if (block.type === "summary") {
+ return (
+
+ {block.text}
+
+ );
+ }
+
+ if (block.type === "key_points") {
+ return (
+
+
关键点
+
+ {block.items.map((item) => (
+
+
+ {item}
+
+ ))}
+
+
+ );
+ }
+
+ if (block.type === "steps") {
+ return (
+
+
+ 处理步骤
+
+
+ {block.steps.map((step, index) => (
+
+
+ {index + 1}
+
+
+
{step.title}
+
{step.body}
+ {step.media && step.media.length > 0 && (
+
+ {step.media.map((m) => (
+
+ ))}
+
+ )}
+
+
+ ))}
+
+
+ );
+ }
+
+ if (block.type === "media") {
+ return (
+
+ {block.media.map((m) => (
+
+ ))}
+
+ );
+ }
+
+ if (block.type === "details") {
+ return (
+
+
+ {open && (
+
+ {block.markdown}
+
+ )}
+
+ );
+ }
+
+ if (block.type === "citations") {
+ return (
+
+
+ 引用文档
+
+
+ {block.citations.map((c) => (
+
+ {c.title} · {c.location}
+
+ ))}
+
+
+ );
+ }
+
+ return null;
+}
+
+// ── 主组件 ────────────────────────────────────────────────────────────────────
+
+export function KnowledgeArtifact({
+ artifact,
+}: ArtifactComponentProps>) {
+ const props = artifact.props as KnowledgeLessonProps;
+
+ return (
+
+ {/* Header */}
+
+
+
+
+
+
+ 知识检索
+
+
{artifact.title}
+
+
+
+
+ {/* Conclusion */}
+
+
先看结论
+
{props.conclusion}
+
+
+ {/* Blocks */}
+
+ {props.blocks.map((block, i) => (
+
+ ))}
+
+
+
+ );
+}
diff --git a/src/lib/artifacts/die-mock-data.ts b/src/lib/artifacts/die-mock-data.ts
new file mode 100644
index 0000000..7529a32
--- /dev/null
+++ b/src/lib/artifacts/die-mock-data.ts
@@ -0,0 +1,63 @@
+/**
+ * src/lib/artifacts/die-mock-data.ts
+ *
+ * 模具模拟数据生成器。
+ * 实际接入时替换为从 PLC / 伺服驱动器读取的真实数据。
+ */
+
+import type { DiePositionData } from "./types";
+
+/** 根据材料和尺寸生成 15 个模具的模拟伺服位置 */
+export function generateDiePositions(params: {
+ outerDiameter: number;
+ thickness: number;
+ totalDies?: number;
+}): DiePositionData[] {
+ const count = params.totalDies ?? 15;
+ const r = params.outerDiameter / 2;
+
+ return Array.from({ length: count }, (_, i) => {
+ const idx = i + 1;
+ // 模拟:越靠后的模具偏差越小(成形收敛)
+ const progressRatio = idx / count;
+ const baseX = +(r * 0.1 * (1 - progressRatio)).toFixed(3);
+ const baseY = +(r * 0.08 * (1 - progressRatio)).toFixed(3);
+
+ // 当前值 = 标准值 + 随机扰动
+ const noise = () => +(Math.random() * 0.4 - 0.2).toFixed(3);
+ const stdX = +baseX.toFixed(3);
+ const stdY = +baseY.toFixed(3);
+ const curX = +(stdX + noise()).toFixed(3);
+ const curY = +(stdY + noise()).toFixed(3);
+ const curAngle = +(noise() * 0.5).toFixed(3);
+ const deviation = +Math.sqrt((curX - stdX) ** 2 + (curY - stdY) ** 2).toFixed(3);
+
+ const status: DiePositionData["status"] =
+ deviation > 0.3 ? "over_limit" : deviation > 0.15 ? "warning" : "normal";
+
+ // 成形进度:椭圆度随模具推进逐渐减小
+ const ovality = +((1 - progressRatio) * 0.18).toFixed(3);
+
+ return {
+ dieIndex: idx,
+ label: `模具 ${idx}`,
+ xPos: curX,
+ yPos: curY,
+ angleOffset: curAngle,
+ standard: { xPos: stdX, yPos: stdY, angleOffset: 0 },
+ deviation,
+ status,
+ crossSection: {
+ outerRadius: r,
+ wallThickness: params.thickness,
+ ovality,
+ ovalityAngle: (idx * 22) % 180,
+ },
+ };
+ });
+}
+
+/** 生成 16 个模具的总览模拟数据(用于 die_status_overview) */
+export function generateDieStatusOverview(totalDies = 16): DiePositionData[] {
+ return generateDiePositions({ outerDiameter: 20, thickness: 2, totalDies });
+}
diff --git a/src/lib/artifacts/factory.ts b/src/lib/artifacts/factory.ts
new file mode 100644
index 0000000..8b7722b
--- /dev/null
+++ b/src/lib/artifacts/factory.ts
@@ -0,0 +1,319 @@
+/**
+ * src/lib/artifacts/factory.ts
+ *
+ * NLU 结果 → Artifact 工厂
+ *
+ * 根据 NluResult(domain / intent / slots)构造对应的 InteractionArtifact。
+ * 返回 null 表示该 intent 不需要展示 Artifact(纯文字回复即可)。
+ *
+ * ── 配置指南 ────────────────────────────────────────────────────────────────
+ *
+ * 1. 新增工具的 Artifact:
+ * 在 INTENT_TO_ARTIFACT 表里加一条 case,返回对应 InteractionArtifact。
+ *
+ * 2. 已有 Artifact 类型的结构:
+ * 参见 src/lib/artifacts/types.ts 里的 ParameterChangeProps / DeviceActionProps 等。
+ *
+ * 3. 对应的可视化组件:
+ * src/components/artifacts/ArtifactRenderer.tsx 底部的 registry 对象,
+ * key = ArtifactType,value = React 组件。新增 artifact_type 时在此注册。
+ *
+ * 4. 对应的 Python 工具实现:
+ * intelligent_cabin/app/plugins/mock.py —— 注册 plugin_id → 执行函数
+ * intelligent_cabin/config/actions.yml —— action_id → plugin_id 映射
+ * intelligent_cabin/config/domain.yml —— intent_id → action_id 映射
+ */
+
+import { createParameterChangeArtifact } from "./mock";
+import type { DieMaterialAdjustProps, DieStatusOverviewProps, InteractionArtifact } from "./types";
+import { generateDiePositions, generateDieStatusOverview } from "./die-mock-data";
+import type { NluResult } from "@/lib/nlu/types";
+
+
+// ── 统一确认/取消按钮(所有需要确认的操作共用) ──────────────────────────────
+// 如需修改语音别名,在此处或 voice_aliases.yml 中调整
+const CONFIRM_VOICE_ALIASES = ["确认执行", "可以执行", "执行吧", "确认", "好的"];
+const CANCEL_VOICE_ALIASES = ["取消执行", "不要执行", "先别执行", "取消", "算了"];
+
+function makeConfirmActions() {
+ return [
+ {
+ actionId: "artifact.confirm",
+ label: "确认执行",
+ kind: "primary" as const,
+ textAliases: ["确认", "确认执行", "执行", "开始执行", "确定", "没问题"],
+ voiceAliases: CONFIRM_VOICE_ALIASES,
+ requiresConfirmation: true,
+ },
+ {
+ actionId: "artifact.cancel",
+ label: "取消",
+ kind: "secondary" as const,
+ textAliases: ["取消", "先不执行", "不要"],
+ voiceAliases: CANCEL_VOICE_ALIASES,
+ },
+ ];
+}
+
+// ── 主映射函数 ────────────────────────────────────────────────────────────────
+
+/**
+ * 根据 NLU 识别结果构造 Artifact。
+ * 返回 null 时前端只显示文字回复,不渲染 Artifact 卡片。
+ */
+export function buildArtifactFromNlu(result: NluResult): InteractionArtifact | null {
+ const { intent, slots } = result;
+
+ switch (intent) {
+
+ // ── 空调温度设置 ─────────────────────────────────────────────────────────
+ // Python 链路:cabin_set_ac → action_cabin_set_ac → plugin.cabin.ac_control → mock._set_ac()
+ // 可视化:ParameterChangeCard(src/components/artifacts/ArtifactRenderer.tsx)
+ case "cabin_set_ac": {
+ const targetTemp = slots["temperature"] ?? slots["value"] ?? "?";
+ const currentTemp = 25; // 实际项目:从设备读取当前温度
+ return createParameterChangeArtifact({
+ parameterName: "空调温度",
+ currentValue: currentTemp,
+ targetValue: Number(targetTemp),
+ unit: "°C",
+ deviceName: "车载空调",
+ });
+ }
+
+ // ── 以下 intent 只返回文字,不需要 Artifact ───────────────────────────────
+ case "cabin_ac_on":
+ case "cabin_ac_off":
+ case "cabin_fan_up":
+ case "cabin_fan_down":
+ case "cabin_nav_cancel":
+ case "cabin_play_music":
+ case "cabin_pause_music":
+ case "cabin_next_track":
+ case "cabin_previous_track":
+ case "cabin_volume_up":
+ case "cabin_volume_down":
+ case "cabin_volume_mute":
+ case "cabin_lights_on":
+ case "cabin_lights_off":
+ case "cabin_seat_heat_on":
+ case "cabin_seat_heat_off":
+ case "cabin_mirror_fold":
+ case "cabin_mirror_unfold":
+ case "cabin_wiper_on":
+ case "cabin_wiper_off":
+ case "cabin_window_open":
+ case "cabin_window_close":
+ case "cabin_sunroof_open":
+ case "cabin_sunroof_close":
+ case "cabin_defog_front_on":
+ case "cabin_defog_rear_on":
+ case "cabin_lock_doors":
+ case "cabin_unlock_doors":
+ return null; // 执行成功,回复 replyText 即可
+
+ // ── 需要补槽(ask_slot),不展示确认卡片 ──────────────────────────────────
+ case "cabin_nav_to":
+ return null;
+
+ default:
+ return null;
+ }
+}
+
+// ── 独立 Artifact 构建器(用于演示按钮直接触发)─────────────────────────────────
+
+/** 构建知识检索卡:虚焊报警 / 弯管工序 / 激光扫描仪 */
+export function buildFalseWeldKnowledgeArtifact(): InteractionArtifact {
+ return {
+ artifactId: `knowledge_${Date.now()}`,
+ type: "knowledge_lesson",
+ title: "虚焊报警处理 — 弯管工序",
+ status: "success",
+ props: {
+ topic: "虚焊报警 / 涡流探伤 / 弯管成形偏差",
+ conclusion:
+ "弯管工序成形形态偏差是虚焊报警的主要原因。用激光扫描仪检测各模具点位,偏差超限时通过平板 AI 自动调节后再验证。",
+ blocks: [
+ {
+ type: "summary",
+ text: "涡流探伤报警(虚焊)通常来自管材表面形态异常,而形态偏差源头在弯管工序的模具成形质量。需用激光扫描仪逐点检测,找到偏差超限的模具后自动调节。",
+ },
+ {
+ type: "key_points",
+ items: ["定位报警管段对应模具区间", "激光扫描每个模具出口点位", "偏差 >0.30mm 立即 AI 自动调节", "调节后生产 1~2m 再验证"],
+ },
+ {
+ type: "steps",
+ steps: [
+ {
+ title: "停机 & 确认报警位置",
+ body: "在涡流探伤仪界面记录报警触发时的管材位置,折算到对应的弯管模具区间。",
+ },
+ {
+ title: "激光扫描检测",
+ body: "打开平板 App → 弯管检测 → 开始扫描。扫描仪逐一采集每个模具出口横截面,约 2s/点。",
+ media: [
+ {
+ type: "image",
+ title: "扫描仪安装位置",
+ description: "激光线垂直于管材轴线,安装于模具出口侧",
+ url: "/assets/knowledge/laser_scan_setup.jpg",
+ },
+ {
+ type: "video",
+ title: "激光扫描完整操作流程",
+ description: "约 4 分钟,含校准 + 扫描 + 报告生成",
+ url: "/assets/knowledge/laser_scan_tutorial.mp4",
+ },
+ ],
+ },
+ {
+ title: "查看差异云图",
+ body: "扫描完成后点击「生成报告」,平板 App 显示差异云图:绿色=正常,黄色=警告(>0.15mm),红色=超限(>0.30mm)。",
+ media: [
+ {
+ type: "image",
+ title: "平板 App 差异云图",
+ description: "红色区域即需要调节的模具",
+ url: "/assets/knowledge/tablet_deviation_map.jpg",
+ },
+ ],
+ },
+ {
+ title: "AI 自动调节",
+ body: "对红色(超限)模具点击「AI 自动调节」,系统计算补偿量后自动写入伺服位置,约 15s 完成。",
+ },
+ {
+ title: "验证",
+ body: "调节完毕后开机生产约 1~2m,重新扫描确认偏差已回到绿色范围,再恢复正常生产速度。",
+ },
+ ],
+ },
+ {
+ type: "details",
+ title: "偏差判定标准(参考表)",
+ markdown:
+ "正常:≤ ±0.15mm,无需处理。\n警告:±0.15~0.30mm,记录并于下次保养处理。\n超限:> ±0.30mm,立即停机调节。\n\n注:以上阈值适用于 20mm 圆管,其他规格请参考《焊管机维护手册》第 7 章。",
+ defaultOpen: false,
+ },
+ {
+ type: "citations",
+ citations: [
+ { title: "焊管机维护手册", location: "第 7 章:弯管工序成形质量管理" },
+ { title: "激光扫描仪操作规程", location: "SOP-QC-003 v1.2" },
+ { title: "涡流探伤报警处置流程", location: "SOP-QC-007 v2.0" },
+ ],
+ },
+ ],
+ },
+ actions: [],
+ llmContext: {
+ visibleSummary: "正在显示虚焊报警(弯管工序)的知识卡片,含激光扫描仪操作和 AI 自动调节步骤。",
+ currentState: "success",
+ visibleFields: [{ label: "主题", value: "虚焊报警 / 弯管工序 / 激光扫描" }],
+ availableActions: [],
+ lastEvents: [],
+ },
+ snapshotPolicy: "ephemeral",
+ };
+}
+
+/** 构建模具伺服调节 Artifact(材料 + 尺寸驱动) */
+export function buildDieMaterialAdjustArtifact(params?: {
+ material?: string;
+ outerDiameter?: number;
+ thickness?: number;
+}): InteractionArtifact {
+ const material = params?.material ?? "304 不锈钢";
+ const outerDiameter = params?.outerDiameter ?? 20;
+ const thickness = params?.thickness ?? 2;
+ const dies = generateDiePositions({ outerDiameter, thickness, totalDies: 15 });
+ const overCount = dies.filter((d) => d.status === "over_limit").length;
+
+ const props: DieMaterialAdjustProps = {
+ material,
+ outerDiameter,
+ thickness,
+ pipeShape: "round",
+ totalDies: 15,
+ dies,
+ executionNote:
+ overCount > 0
+ ? `检测到 ${overCount} 个模具位置超限,点击「AI 自动调节」将自动写入补偿量。`
+ : "所有模具位置在正常范围内,可按当前参数生产。",
+ };
+
+ return {
+ artifactId: `die_adjust_${Date.now()}`,
+ type: "die_material_adjust",
+ title: `模具伺服调节 — ${material} Φ${outerDiameter}×${thickness}`,
+ status: overCount > 0 ? "waiting_confirmation" : "success",
+ props,
+ actions:
+ overCount > 0
+ ? [
+ {
+ actionId: "artifact.confirm",
+ label: "AI 自动调节",
+ kind: "primary" as const,
+ textAliases: ["自动调节", "调节", "确认", "执行"],
+ voiceAliases: ["自动调节", "AI 调节", "确认调节"],
+ requiresConfirmation: true,
+ },
+ {
+ actionId: "artifact.cancel",
+ label: "取消",
+ kind: "secondary" as const,
+ textAliases: ["取消"],
+ voiceAliases: ["取消", "不调节"],
+ },
+ ]
+ : [],
+ llmContext: {
+ visibleSummary: `正在显示 ${material} Φ${outerDiameter}mm 管材的 15 个模具伺服位置,${overCount > 0 ? `${overCount} 个超限` : "全部正常"}。`,
+ currentState: overCount > 0 ? "waiting_confirmation" : "success",
+ visibleFields: [
+ { label: "材料", value: material },
+ { label: "外径", value: `${outerDiameter} mm` },
+ { label: "壁厚", value: `${thickness} mm` },
+ { label: "超限数量", value: String(overCount) },
+ ],
+ availableActions: [],
+ lastEvents: [],
+ },
+ snapshotPolicy: "session",
+ };
+}
+
+/** 构建模具位置总览 Artifact(16 个模具,可点击查看截面) */
+export function buildDieStatusOverviewArtifact(): InteractionArtifact {
+ const dies = generateDieStatusOverview(16);
+ const props: DieStatusOverviewProps = {
+ totalDies: 16,
+ selectedDieIndex: null,
+ dies,
+ lastScanTime: new Date().toLocaleTimeString("zh-CN", { hour: "2-digit", minute: "2-digit" }),
+ };
+
+ return {
+ artifactId: `die_overview_${Date.now()}`,
+ type: "die_status_overview",
+ title: "弯管模具位置总览",
+ status: "success",
+ props,
+ actions: [],
+ llmContext: {
+ visibleSummary: "正在显示全部 16 个弯管模具的当前位置和截面形态,可点击任意模具查看详情。",
+ currentState: "success",
+ visibleFields: [{ label: "模具总数", value: "16" }],
+ availableActions: [],
+ lastEvents: [],
+ },
+ snapshotPolicy: "session",
+ };
+}
+
+
+// 导出供 page.tsx 使用
+export { makeConfirmActions };
diff --git a/src/lib/artifacts/mock.ts b/src/lib/artifacts/mock.ts
new file mode 100644
index 0000000..39b19e9
--- /dev/null
+++ b/src/lib/artifacts/mock.ts
@@ -0,0 +1,258 @@
+import type { ArtifactAction, InteractionArtifact } from "./types";
+
+const confirmActions: ArtifactAction[] = [
+ {
+ actionId: "artifact.confirm",
+ label: "确认执行",
+ kind: "primary",
+ textAliases: ["确认", "确认执行", "执行", "开始", "开始执行", "确定", "没问题"],
+ voiceAliases: ["确认执行", "可以执行", "执行吧", "确认修改", "确认写入", "写入吧", "确定执行", "是的"],
+ requiresConfirmation: true,
+ },
+ {
+ actionId: "artifact.cancel",
+ label: "取消",
+ kind: "secondary",
+ textAliases: ["取消", "先不执行", "停止"],
+ voiceAliases: ["取消执行", "不要执行", "先别执行", "撤销", "返回"],
+ },
+];
+
+export function createParameterChangeArtifact(input: {
+ parameterName: string;
+ currentValue: string | number;
+ targetValue: string | number;
+ unit?: string;
+ deviceName?: string;
+}): InteractionArtifact {
+ const unit = input.unit ?? "";
+ return {
+ artifactId: `param_${Date.now()}`,
+ type: "parameter_change",
+ title: `${input.parameterName} 参数修改`,
+ status: "waiting_confirmation",
+ props: {
+ parameterName: input.parameterName,
+ currentValue: input.currentValue,
+ targetValue: input.targetValue,
+ unit,
+ deviceName: input.deviceName ?? "一号加工设备",
+ impact: "该参数会影响当前工艺节拍,执行前请确认目标值是否正确。",
+ executionNote: "Mock 工具将模拟写入参数并返回成功状态。",
+ },
+ actions: confirmActions,
+ llmContext: {
+ visibleSummary: `${input.parameterName} 将从 ${input.currentValue}${unit} 修改为 ${input.targetValue}${unit},当前等待确认。`,
+ currentState: "waiting_confirmation",
+ visibleFields: [
+ { label: "当前值", value: `${input.currentValue}${unit}` },
+ { label: "目标值", value: `${input.targetValue}${unit}` },
+ ],
+ availableActions: confirmActions.map(({ actionId, label, textAliases, voiceAliases }) => ({
+ actionId,
+ label,
+ textAliases,
+ voiceAliases,
+ })),
+ lastEvents: [],
+ },
+ snapshotPolicy: "session",
+ };
+}
+
+export function createDeviceActionArtifact(input: {
+ deviceName: string;
+ action: "open" | "close" | "start" | "stop";
+ deviceKind: "light" | "pump" | "fan" | "machine";
+}): InteractionArtifact {
+ const targetState = input.action === "open" || input.action === "start" ? "运行中" : "已关闭";
+ return {
+ artifactId: `device_${Date.now()}`,
+ type: "device_action",
+ title: `${input.deviceName} ${targetState}`,
+ status: "waiting_confirmation",
+ props: {
+ deviceName: input.deviceName,
+ action: input.action,
+ deviceKind: input.deviceKind,
+ currentState: "待机",
+ targetState,
+ progressLabel: "等待确认",
+ executionNote: "Mock 工具将模拟设备动作、动画和状态回读。",
+ },
+ actions: confirmActions,
+ llmContext: {
+ visibleSummary: `${input.deviceName} 准备切换到 ${targetState},当前等待确认。`,
+ currentState: "waiting_confirmation",
+ visibleFields: [
+ { label: "当前状态", value: "待机" },
+ { label: "目标状态", value: targetState },
+ ],
+ availableActions: confirmActions.map(({ actionId, label, textAliases, voiceAliases }) => ({
+ actionId,
+ label,
+ textAliases,
+ voiceAliases,
+ })),
+ lastEvents: [],
+ },
+ snapshotPolicy: "session",
+ };
+}
+
+export function createKnowledgeLessonArtifact(topic = "主轴温度报警处理"): InteractionArtifact {
+ return {
+ artifactId: `knowledge_${Date.now()}`,
+ type: "knowledge_lesson",
+ title: topic,
+ status: "success",
+ props: {
+ topic,
+ conclusion: "先确认冷却、润滑和负载三个方向,再决定是否继续生产。",
+ blocks: [
+ {
+ type: "summary",
+ text: "这个报警通常不是单点故障,需要先看冷却流量,再看润滑状态,最后检查最近是否提高了切削负载。",
+ },
+ {
+ type: "key_points",
+ items: ["检查冷却泵是否运行", "确认润滑油位和压力", "查看最近 10 分钟主轴负载曲线"],
+ },
+ {
+ type: "steps",
+ steps: [
+ {
+ title: "看冷却",
+ body: "确认冷却液液位、过滤器和泵状态,重点看流量是否明显偏低。",
+ },
+ {
+ title: "看润滑",
+ body: "确认润滑压力是否在设备手册建议范围内。",
+ },
+ {
+ title: "看负载",
+ body: "如果报警前负载持续升高,优先降低进给或暂停加工检查刀具。",
+ },
+ ],
+ },
+ {
+ type: "details",
+ title: "专业详情",
+ markdown:
+ "主轴温度报警可能来自冷却不足、润滑异常、轴承状态变化或切削负载过高。处理时不要只复位报警,应先确认温升趋势是否已经回落。",
+ },
+ {
+ type: "citations",
+ citations: [
+ { title: "设备维护手册", location: "第 4 章 主轴系统" },
+ { title: "调机知识库", location: "主轴温度报警 SOP v1" },
+ ],
+ },
+ ],
+ },
+ actions: [
+ {
+ actionId: "lesson.start_procedure",
+ label: "进入调机流程",
+ kind: "primary",
+ textAliases: ["开始调机", "进入流程", "按步骤处理"],
+ },
+ ],
+ llmContext: {
+ visibleSummary: `画布正在展示 ${topic} 的教学卡片。`,
+ currentState: "success",
+ visibleFields: [{ label: "结论", value: "先确认冷却、润滑和负载三个方向" }],
+ availableActions: [
+ {
+ actionId: "lesson.start_procedure",
+ label: "进入调机流程",
+ textAliases: ["开始调机", "进入流程", "按步骤处理"],
+ },
+ ],
+ lastEvents: [],
+ },
+ snapshotPolicy: "ephemeral",
+ };
+}
+
+export function createGuidedProcedureArtifact(): InteractionArtifact {
+ return {
+ artifactId: `procedure_${Date.now()}`,
+ type: "guided_procedure",
+ title: "主轴温度报警调机流程",
+ status: "running",
+ props: {
+ procedureName: "主轴温度报警调机流程",
+ deviceName: "一号加工设备",
+ currentStepId: "step_1",
+ steps: [
+ {
+ stepId: "step_1",
+ type: "auto_tool",
+ title: "读取主轴温度和负载",
+ instruction: "AI 将模拟读取当前主轴温度、负载和冷却状态。",
+ status: "waiting_feedback",
+ expectedFeedback: ["已读取", "下一步"],
+ },
+ {
+ stepId: "step_2",
+ type: "manual_action",
+ title: "检查冷却液流量",
+ instruction: "请确认冷却液流量是否稳定,没有明显断流或气泡。",
+ status: "pending",
+ expectedFeedback: ["已完成", "有异常"],
+ },
+ {
+ stepId: "step_3",
+ type: "measurement_input",
+ title: "输入润滑压力",
+ instruction: "请输入现场读取到的润滑压力,单位 MPa。",
+ status: "pending",
+ expectedFeedback: ["压力是 0.32", "0.32"],
+ },
+ {
+ stepId: "step_4",
+ type: "checklist_gate",
+ title: "确认是否恢复生产",
+ instruction: "确认温度趋势回落、冷却正常、润滑压力正常后,再恢复生产。",
+ status: "pending",
+ expectedFeedback: ["确认恢复", "暂停"],
+ },
+ ],
+ },
+ actions: [
+ {
+ actionId: "procedure.next",
+ label: "这一步完成",
+ kind: "primary",
+ textAliases: ["完成", "已完成", "下一步", "这一步完成了"],
+ },
+ {
+ actionId: "procedure.pause",
+ label: "暂停流程",
+ kind: "secondary",
+ textAliases: ["暂停", "先暂停"],
+ },
+ ],
+ llmContext: {
+ visibleSummary: "画布正在执行主轴温度报警调机流程,第 1 步等待反馈。",
+ currentState: "running",
+ activeStep: "读取主轴温度和负载",
+ visibleFields: [{ label: "当前步骤", value: "第 1 步:读取主轴温度和负载" }],
+ availableActions: [
+ {
+ actionId: "procedure.next",
+ label: "这一步完成",
+ textAliases: ["完成", "已完成", "下一步", "这一步完成了"],
+ },
+ {
+ actionId: "procedure.pause",
+ label: "暂停流程",
+ textAliases: ["暂停", "先暂停"],
+ },
+ ],
+ lastEvents: [],
+ },
+ snapshotPolicy: "persistent",
+ };
+}
diff --git a/src/lib/artifacts/reducer.ts b/src/lib/artifacts/reducer.ts
new file mode 100644
index 0000000..27e7374
--- /dev/null
+++ b/src/lib/artifacts/reducer.ts
@@ -0,0 +1,169 @@
+import type { ArtifactAction, ArtifactActionEvent, InteractionArtifact } from "./types";
+
+export function createActionEvent(
+ artifactId: string,
+ action: ArtifactAction,
+ source: ArtifactActionEvent["source"],
+ value?: unknown,
+ transcript?: string,
+): ArtifactActionEvent {
+ return {
+ artifactId,
+ actionId: action.actionId,
+ source,
+ value,
+ transcript,
+ createdAt: new Date().toISOString(),
+ };
+}
+
+export function updateArtifactForAction(artifact: InteractionArtifact, event: ArtifactActionEvent): InteractionArtifact {
+ if (event.actionId === "artifact.cancel") {
+ return {
+ ...artifact,
+ status: "paused",
+ llmContext: {
+ ...artifact.llmContext,
+ currentState: "paused",
+ lastEvents: [...artifact.llmContext.lastEvents, "用户取消了当前操作。"],
+ },
+ };
+ }
+
+ if (event.actionId === "artifact.confirm") {
+ if (artifact.type === "parameter_change") {
+ return {
+ ...artifact,
+ status: "success",
+ actions: [],
+ llmContext: {
+ ...artifact.llmContext,
+ currentState: "success",
+ visibleSummary: `${artifact.props.parameterName} 已从 ${artifact.props.currentValue}${artifact.props.unit ?? ""} 修改为 ${artifact.props.targetValue}${artifact.props.unit ?? ""}。`,
+ lastEvents: [...artifact.llmContext.lastEvents, "用户确认并完成参数修改。"],
+ },
+ };
+ }
+
+ if (artifact.type === "device_action") {
+ return {
+ ...artifact,
+ status: "success",
+ props: {
+ ...artifact.props,
+ currentState: artifact.props.targetState,
+ progressLabel: "状态回读完成",
+ },
+ actions: [],
+ llmContext: {
+ ...artifact.llmContext,
+ currentState: "success",
+ visibleSummary: `${artifact.props.deviceName} 已切换到 ${artifact.props.targetState}。`,
+ lastEvents: [...artifact.llmContext.lastEvents, "用户确认并完成设备动作。"],
+ },
+ };
+ }
+ }
+
+ if (event.actionId === "procedure.pause" && artifact.type === "guided_procedure") {
+ return {
+ ...artifact,
+ status: "paused",
+ llmContext: {
+ ...artifact.llmContext,
+ currentState: "paused",
+ lastEvents: [...artifact.llmContext.lastEvents, "用户暂停了调机流程。"],
+ },
+ };
+ }
+
+ if (event.actionId === "procedure.next" && artifact.type === "guided_procedure") {
+ const currentIndex = artifact.props.steps.findIndex((step) => step.stepId === artifact.props.currentStepId);
+ const nextIndex = currentIndex + 1;
+ const nextStep = artifact.props.steps[nextIndex];
+ const updatedSteps = artifact.props.steps.map((step, index) => {
+ if (index === currentIndex) return { ...step, status: "completed" as const, value: String(event.value ?? event.transcript ?? "") };
+ if (index === nextIndex) return { ...step, status: "waiting_feedback" as const };
+ return step;
+ });
+
+ if (!nextStep) {
+ return {
+ ...artifact,
+ status: "success",
+ actions: [],
+ props: {
+ ...artifact.props,
+ steps: updatedSteps,
+ },
+ llmContext: {
+ ...artifact.llmContext,
+ currentState: "success",
+ visibleSummary: `${artifact.props.procedureName} 已完成。`,
+ activeStep: undefined,
+ lastEvents: [...artifact.llmContext.lastEvents, "调机流程已完成。"],
+ },
+ };
+ }
+
+ return {
+ ...artifact,
+ status: "running",
+ props: {
+ ...artifact.props,
+ currentStepId: nextStep.stepId,
+ steps: updatedSteps,
+ },
+ llmContext: {
+ ...artifact.llmContext,
+ currentState: "running",
+ activeStep: nextStep.title,
+ visibleSummary: `调机流程进入下一步:${nextStep.title}。`,
+ visibleFields: [{ label: "当前步骤", value: nextStep.title }],
+ lastEvents: [...artifact.llmContext.lastEvents, `进入步骤:${nextStep.title}`],
+ },
+ };
+ }
+
+ return artifact;
+}
+
+export function matchTextToAction(artifact: InteractionArtifact, text: string): ArtifactAction | undefined {
+ const normalized = normalizeActionText(text);
+ const explicitAction = artifact.actions.find((action) =>
+ [...action.textAliases, ...(action.voiceAliases ?? [])].some((alias) => {
+ const normalizedAlias = normalizeActionText(alias);
+ return normalized === normalizedAlias || normalized.includes(normalizedAlias);
+ }),
+ );
+
+ if (explicitAction) return explicitAction;
+
+ if (artifact.type === "guided_procedure") {
+ const activeStep = artifact.props.steps.find((step) => step.stepId === artifact.props.currentStepId);
+ const nextAction = artifact.actions.find((action) => action.actionId === "procedure.next");
+
+ if (!activeStep || !nextAction) return undefined;
+
+ const matchesExpectedFeedback = activeStep.expectedFeedback?.some((feedback) => {
+ const normalizedFeedback = normalizeActionText(feedback);
+ return normalized === normalizedFeedback || normalized.includes(normalizedFeedback);
+ });
+
+ if (matchesExpectedFeedback) return nextAction;
+
+ if (activeStep.type === "measurement_input" && /[-+]?\d+(?:\.\d+)?/.test(normalized)) {
+ return nextAction;
+ }
+ }
+
+ return undefined;
+}
+
+function normalizeActionText(text: string) {
+ return text
+ .trim()
+ .toLowerCase()
+ .replace(/^(语音|voice|asr)[::]/, "")
+ .replace(/[\s,。,.!!??、]/g, "");
+}
diff --git a/src/lib/artifacts/types.ts b/src/lib/artifacts/types.ts
new file mode 100644
index 0000000..9d37cd2
--- /dev/null
+++ b/src/lib/artifacts/types.ts
@@ -0,0 +1,195 @@
+import type { LucideIcon } from "lucide-react";
+import type React from "react";
+
+export type ArtifactStatus =
+ | "draft"
+ | "waiting_confirmation"
+ | "running"
+ | "success"
+ | "failed"
+ | "paused";
+
+export type ArtifactType =
+ | "parameter_change"
+ | "device_action"
+ | "knowledge_lesson"
+ | "guided_procedure"
+ | "die_material_adjust"
+ | "die_status_overview";
+
+
+export type ArtifactAction = {
+ actionId: string;
+ label: string;
+ kind: "primary" | "secondary" | "danger" | "input" | "toggle" | "choice";
+ textAliases: string[];
+ voiceAliases?: string[];
+ requiresConfirmation?: boolean;
+ disabled?: boolean;
+};
+
+export type ArtifactLLMContext = {
+ visibleSummary: string;
+ currentState: string;
+ activeStep?: string;
+ visibleFields: Array<{
+ label: string;
+ value: string;
+ }>;
+ availableActions: Array<{
+ actionId: string;
+ label: string;
+ textAliases: string[];
+ voiceAliases?: string[];
+ }>;
+ lastEvents: string[];
+};
+
+export type InteractionArtifactBase = {
+ artifactId: string;
+ type: TType;
+ title: string;
+ status: ArtifactStatus;
+ props: TProps;
+ actions: ArtifactAction[];
+ llmContext: ArtifactLLMContext;
+ snapshotPolicy: "ephemeral" | "session" | "persistent";
+};
+
+export type ParameterChangeProps = {
+ parameterName: string;
+ currentValue: string | number;
+ targetValue: string | number;
+ unit?: string;
+ deviceName: string;
+ impact?: string;
+ executionNote?: string;
+};
+
+export type DeviceActionProps = {
+ deviceName: string;
+ action: "open" | "close" | "start" | "stop";
+ deviceKind: "light" | "pump" | "fan" | "machine";
+ currentState: string;
+ targetState: string;
+ progressLabel?: string;
+ executionNote?: string;
+};
+
+export type MediaRef = {
+ type: "image" | "video";
+ title: string;
+ url?: string;
+ description?: string;
+};
+
+export type KnowledgeBlock =
+ | { type: "summary"; text: string }
+ | { type: "key_points"; items: string[] }
+ | {
+ type: "steps";
+ steps: Array<{
+ title: string;
+ body: string;
+ media?: MediaRef[];
+ }>;
+ }
+ | { type: "media"; media: MediaRef[] }
+ | { type: "details"; title: string; markdown: string; defaultOpen?: boolean }
+ | { type: "citations"; citations: Array<{ title: string; location: string }> };
+
+export type KnowledgeLessonProps = {
+ topic: string;
+ conclusion: string;
+ blocks: KnowledgeBlock[];
+};
+
+export type ProcedureStep = {
+ stepId: string;
+ type: "auto_tool" | "manual_action" | "measurement_input" | "decision_branch" | "checklist_gate";
+ title: string;
+ instruction: string;
+ status: "pending" | "running" | "waiting_feedback" | "completed" | "failed" | "skipped";
+ expectedFeedback?: string[];
+ value?: string;
+};
+
+export type GuidedProcedureProps = {
+ procedureName: string;
+ deviceName: string;
+ currentStepId: string;
+ steps: ProcedureStep[];
+};
+
+// ── 模具伺服位置数据 ─────────────────────────────────────────────────────────
+
+export type DiePositionData = {
+ dieIndex: number; // 1-based, 1~16
+ label: string; // 如 "模具 1"
+ xPos: number; // X 轴伺服位置 (mm)
+ yPos: number; // Y 轴伺服位置 (mm)
+ angleOffset: number; // 角度偏移 (°)
+ standard: { xPos: number; yPos: number; angleOffset: number }; // 标准值
+ deviation: number; // 综合偏差 (mm)
+ status: "normal" | "warning" | "over_limit";
+ // 管材横截面形态描述(用于渲染 SVG)
+ crossSection: {
+ outerRadius: number; // 外径 (mm)
+ wallThickness: number; // 壁厚 (mm)
+ ovality: number; // 椭圆度 0~1(0=正圆)
+ ovalityAngle: number; // 椭圆长轴方向 (°)
+ };
+};
+
+// ── 材料 + 模具伺服调节 Artifact ─────────────────────────────────────────────
+
+export type DieMaterialAdjustProps = {
+ material: string; // 如 "304 不锈钢"
+ thickness: number; // 壁厚 (mm)
+ outerDiameter: number; // 外径 (mm)
+ pipeShape: "round" | "square" | "oval"; // 管型
+ totalDies: number; // 模具数量(默认 15)
+ dies: DiePositionData[]; // 各模具位置数据
+ executionNote?: string;
+};
+
+// ── 模具位置总览 Artifact ─────────────────────────────────────────────────────
+
+export type DieStatusOverviewProps = {
+ totalDies: number; // 16
+ selectedDieIndex: number | null; // 当前选中的模具索引
+ dies: DiePositionData[];
+ lastScanTime?: string;
+};
+
+
+export type InteractionArtifact =
+ | InteractionArtifactBase<"parameter_change", ParameterChangeProps>
+ | InteractionArtifactBase<"device_action", DeviceActionProps>
+ | InteractionArtifactBase<"knowledge_lesson", KnowledgeLessonProps>
+ | InteractionArtifactBase<"guided_procedure", GuidedProcedureProps>
+ | InteractionArtifactBase<"die_material_adjust", DieMaterialAdjustProps>
+ | InteractionArtifactBase<"die_status_overview", DieStatusOverviewProps>;
+
+
+export type ArtifactActionEvent = {
+ artifactId: string;
+ actionId: string;
+ source: "click" | "text" | "voice" | "system";
+ value?: unknown;
+ transcript?: string;
+ confidence?: number;
+ createdAt: string;
+};
+
+export type ArtifactComponentProps = {
+ artifact: T;
+ onAction: (action: ArtifactAction, value?: unknown) => void;
+};
+
+export type ArtifactShellProps = {
+ icon: LucideIcon;
+ eyebrow: string;
+ artifact: InteractionArtifact;
+ children: React.ReactNode;
+};
diff --git a/src/lib/nlu/client.ts b/src/lib/nlu/client.ts
new file mode 100644
index 0000000..da92a27
--- /dev/null
+++ b/src/lib/nlu/client.ts
@@ -0,0 +1,66 @@
+/**
+ * src/lib/nlu/client.ts
+ *
+ * 调用 intelligent_cabin /api/v1/agent/chat 的 HTTP 客户端。
+ * 报错直接抛出,不降级,不 Mock 兜底。
+ */
+
+import type { ChatResponse } from "./types";
+
+const NLU_BASE_URL = process.env.NEXT_PUBLIC_NLU_BASE_URL ?? "http://localhost:8000";
+
+export type ChatRequest = {
+ session_id: string;
+ user_id: string;
+ channel?: string;
+ input_text: string;
+ input_type?: "text" | "voice";
+};
+
+export type FillSlotsRequest = {
+ session_id: string;
+ user_id: string;
+ input_text: string;
+};
+
+/**
+ * 发送文本到 intelligent_cabin 进行 NLU 处理。
+ * 报错直接抛出(TypeError、HTTP 4xx/5xx)。
+ */
+export async function chatWithNlu(request: ChatRequest): Promise {
+ const res = await fetch(`${NLU_BASE_URL}/api/v1/agent/chat`, {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({
+ channel: "canvas",
+ input_type: "text",
+ ...request,
+ }),
+ });
+
+ if (!res.ok) {
+ const body = await res.text().catch(() => "(empty)");
+ throw new Error(`NLU service error ${res.status}: ${body}`);
+ }
+
+ return (await res.json()) as ChatResponse;
+}
+
+/**
+ * 填写 slot 值(在 waiting_slot 状态下调用)。
+ * 报错直接抛出。
+ */
+export async function fillSlotsWithNlu(request: FillSlotsRequest): Promise {
+ const res = await fetch(`${NLU_BASE_URL}/api/v1/agent/fill-slots`, {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify(request),
+ });
+
+ if (!res.ok) {
+ const body = await res.text().catch(() => "(empty)");
+ throw new Error(`NLU fill-slots error ${res.status}: ${body}`);
+ }
+
+ return (await res.json()) as ChatResponse;
+}
diff --git a/src/lib/nlu/mock.ts b/src/lib/nlu/mock.ts
new file mode 100644
index 0000000..cb09382
--- /dev/null
+++ b/src/lib/nlu/mock.ts
@@ -0,0 +1,205 @@
+import {
+ createDeviceActionArtifact,
+ createGuidedProcedureArtifact,
+ createKnowledgeLessonArtifact,
+ createParameterChangeArtifact,
+} from "@/lib/artifacts/mock";
+import type { InteractionArtifact } from "@/lib/artifacts/types";
+
+export type MockRouteHint =
+ | "artifact_action"
+ | "tool_call"
+ | "knowledge_query"
+ | "workflow_control"
+ | "smalltalk"
+ | "fallback";
+
+export type MockNluResult = {
+ modelVersion: string;
+ domain: string;
+ intent: string;
+ confidence: number;
+ slots: Record;
+ routeHint: MockRouteHint;
+ candidateTools: Array<{
+ toolName: string;
+ confidence: number;
+ }>;
+ branchLabel: string;
+ artifact?: InteractionArtifact;
+ reply?: string;
+};
+
+const mockParameterValues: Record = {
+ 主轴转速: 1200,
+ 水泵压力上限: 0.6,
+ 温度补偿: 0,
+ 进给速度: 480,
+};
+
+export function parseMockNlu(text: string): MockNluResult {
+ const normalized = normalizeText(text);
+
+ if (includesAny(normalized, ["开始调机", "进入调机", "调机流程", "按步骤处理"])) {
+ return {
+ modelVersion: "mock-bert-nlu-v1",
+ domain: "guided_procedure",
+ intent: "start_procedure",
+ confidence: 0.96,
+ slots: { procedureName: "主轴温度报警调机流程" },
+ routeHint: "workflow_control",
+ candidateTools: [{ toolName: "start_guided_procedure", confidence: 0.94 }],
+ branchLabel: "流程工具",
+ artifact: createGuidedProcedureArtifact(),
+ };
+ }
+
+ const parameter = detectParameter(normalized);
+ const value = detectNumber(normalized);
+ if (parameter && value !== undefined && includesAny(normalized, ["调", "改", "设置", "补偿", "加到", "设为"])) {
+ const unit = detectUnit(normalized, parameter);
+ return {
+ modelVersion: "mock-bert-nlu-v1",
+ domain: "machine_parameter",
+ intent: "set_parameter",
+ confidence: 0.94,
+ slots: { parameter, value, unit },
+ routeHint: "tool_call",
+ candidateTools: [{ toolName: "write_machine_parameter", confidence: 0.91 }],
+ branchLabel: "高置信度 + 设备控制域",
+ artifact: createParameterChangeArtifact({
+ parameterName: parameter,
+ currentValue: mockParameterValues[parameter] ?? "未读取",
+ targetValue: value,
+ unit,
+ deviceName: "一号加工设备",
+ }),
+ };
+ }
+
+ const deviceAction = detectDeviceAction(normalized);
+ if (deviceAction) {
+ return {
+ modelVersion: "mock-bert-nlu-v1",
+ domain: "machine_control",
+ intent: `${deviceAction.action}_device`,
+ confidence: 0.93,
+ slots: {
+ deviceName: deviceAction.deviceName,
+ action: deviceAction.action,
+ deviceKind: deviceAction.deviceKind,
+ },
+ routeHint: "tool_call",
+ candidateTools: [{ toolName: "control_industrial_device", confidence: 0.9 }],
+ branchLabel: "高置信度 + 设备控制域",
+ artifact: createDeviceActionArtifact(deviceAction),
+ };
+ }
+
+ if (includesAny(normalized, ["报警", "怎么办", "说明书", "sop", "处理", "为什么", "知识", "查一下"])) {
+ const topic = normalized.includes("冷却") ? "冷却泵无流量处理" : "主轴温度报警处理";
+ return {
+ modelVersion: "mock-bert-nlu-v1",
+ domain: "equipment_knowledge",
+ intent: "query_procedure",
+ confidence: 0.86,
+ slots: { topic },
+ routeHint: "knowledge_query",
+ candidateTools: [{ toolName: "search_equipment_knowledge", confidence: 0.83 }],
+ branchLabel: "知识域 / 低置信度兜底",
+ artifact: createKnowledgeLessonArtifact(topic),
+ };
+ }
+
+ if (includesAny(normalized, ["你好", "天气", "谢谢", "你是谁", "随便聊"])) {
+ return {
+ modelVersion: "mock-bert-nlu-v1",
+ domain: "smalltalk",
+ intent: "chat",
+ confidence: 0.77,
+ slots: {},
+ routeHint: "smalltalk",
+ candidateTools: [],
+ branchLabel: "smalltalk / fallback",
+ reply: "这是通用对话内容,不生成工业 Artifact,也不会覆盖当前调机流程。",
+ };
+ }
+
+ return {
+ modelVersion: "mock-bert-nlu-v1",
+ domain: "fallback",
+ intent: "unknown",
+ confidence: 0.41,
+ slots: {},
+ routeHint: "fallback",
+ candidateTools: [],
+ branchLabel: "fallback",
+ reply: "Mock NLU 暂时没有识别到固定意图。可以试试:把主轴转速调到 1800、打开探照灯、打开水泵、主轴温度报警怎么办、开始调机流程。",
+ };
+}
+
+function normalizeText(text: string) {
+ return text.trim().toLowerCase().replace(/\s+/g, "");
+}
+
+function includesAny(text: string, keywords: string[]) {
+ return keywords.some((keyword) => text.includes(keyword.toLowerCase()));
+}
+
+function detectParameter(text: string) {
+ if (text.includes("转速")) return "主轴转速";
+ if (text.includes("压力")) return "水泵压力上限";
+ if (text.includes("温度补偿") || text.includes("补偿")) return "温度补偿";
+ if (text.includes("进给")) return "进给速度";
+ return undefined;
+}
+
+function detectNumber(text: string) {
+ const match = text.match(/[-+]?\d+(?:\.\d+)?/);
+ if (!match) return undefined;
+ return Number(match[0]);
+}
+
+function detectUnit(text: string, parameter: string) {
+ if (text.includes("rpm")) return "rpm";
+ if (text.includes("mpa")) return "MPa";
+ if (text.includes("度") || parameter.includes("温度")) return "°C";
+ if (parameter.includes("转速")) return "rpm";
+ if (parameter.includes("压力")) return "MPa";
+ return "";
+}
+
+function detectDeviceAction(text: string):
+ | {
+ deviceName: string;
+ action: "open" | "close" | "start" | "stop";
+ deviceKind: "light" | "pump" | "fan" | "machine";
+ }
+ | undefined {
+ const action = text.includes("关闭") || text.includes("关掉")
+ ? "close"
+ : text.includes("停止")
+ ? "stop"
+ : text.includes("启动") || text.includes("开始")
+ ? "start"
+ : text.includes("打开")
+ ? "open"
+ : undefined;
+
+ if (!action) return undefined;
+
+ if (text.includes("探照灯") || text.includes("灯")) {
+ return { deviceName: "探照灯", action, deviceKind: "light" };
+ }
+ if (text.includes("水泵") || text.includes("泵")) {
+ return { deviceName: "冷却水泵", action, deviceKind: "pump" };
+ }
+ if (text.includes("风机")) {
+ return { deviceName: "除尘风机", action: action === "open" ? "start" : action, deviceKind: "fan" };
+ }
+ if (text.includes("生产") || text.includes("设备")) {
+ return { deviceName: "一号加工设备", action: action === "open" ? "start" : action, deviceKind: "machine" };
+ }
+
+ return undefined;
+}
diff --git a/src/lib/nlu/pipeline.ts b/src/lib/nlu/pipeline.ts
new file mode 100644
index 0000000..9bcd2de
--- /dev/null
+++ b/src/lib/nlu/pipeline.ts
@@ -0,0 +1,189 @@
+/**
+ * src/lib/nlu/pipeline.ts
+ *
+ * 四阶段语音处理链路:
+ * 阶段 0: 停止词检测
+ * 阶段 1: UI 可见元素语音点击匹配(1a: waiting_confirmation / 1b: Artifact 按钮)
+ * 阶段 1.5: waiting_slot + 数值输入
+ * 阶段 2: BERT NLU(调 intelligent_cabin)
+ *
+ * 规则:报错直接抛出,不降级,不 Mock 兜底。
+ */
+
+import { AFFIRM_WORDS, CANCEL_WORDS, DENY_WORDS } from "./voice-aliases.gen";
+import { chatWithNlu, fillSlotsWithNlu } from "./client";
+import {
+ adaptChatResponse,
+ type NluResult,
+ type PipelineEvent,
+ type PipelineResult,
+ type PipelineSession,
+ type SlotFillEvent,
+ type StopActionEvent,
+ type VisibleAction,
+ type VoiceClickEvent,
+} from "./types";
+
+// ── 文本标准化 ───────────────────────────────────────────────────────────────
+
+function normalizeVoice(text: string): string {
+ return text
+ .trim()
+ .toLowerCase()
+ .replace(/[,。!?、\s]+/g, "")
+ .replace(/^(好的?|嗯+|那就|那么|好吧)/, "");
+}
+
+function includesNormalized(haystack: string, needle: string): boolean {
+ return haystack.includes(normalizeVoice(needle));
+}
+
+// ── 阶段 0:停止词检测 ────────────────────────────────────────────────────────
+
+function detectStopWord(text: string): StopActionEvent | null {
+ const norm = normalizeVoice(text);
+ if (CANCEL_WORDS.some((w) => includesNormalized(norm, w))) {
+ return { type: "stop_action", sourceText: text };
+ }
+ return null;
+}
+
+// ── 阶段 1a:waiting_confirmation 下的 affirm/deny ────────────────────────────
+
+function detectConfirmationResponse(
+ text: string,
+ status: string,
+): VoiceClickEvent | null {
+ if (status !== "waiting_confirmation") return null;
+ const norm = normalizeVoice(text);
+
+ if (AFFIRM_WORDS.some((w) => includesNormalized(norm, w))) {
+ return { type: "voice_click_event", actionId: "artifact.confirm", sourceText: text };
+ }
+ if (DENY_WORDS.some((w) => includesNormalized(norm, w))) {
+ return { type: "voice_click_event", actionId: "artifact.cancel", sourceText: text };
+ }
+ return null;
+}
+
+// ── 阶段 1b:当前可见 Artifact 按钮匹配 ──────────────────────────────────────
+
+function detectVoiceClick(
+ text: string,
+ visibleActions: VisibleAction[],
+): VoiceClickEvent | null {
+ const norm = normalizeVoice(text);
+ for (const action of visibleActions) {
+ const matched = action.matchPhrases.some((phrase) =>
+ includesNormalized(norm, phrase),
+ );
+ if (matched) {
+ return {
+ type: "voice_click_event",
+ actionId: action.actionId,
+ artifactId: action.artifactId,
+ sourceText: text,
+ };
+ }
+ }
+ return null;
+}
+
+// ── 阶段 1.5:waiting_slot + 数值输入 ────────────────────────────────────────
+
+const NUMERIC_PATTERN = /[-+]?\d+(?:\.\d+)?/;
+
+function detectSlotFill(text: string, status: string): SlotFillEvent | null {
+ if (status !== "waiting_slot") return null;
+ const match = text.match(NUMERIC_PATTERN);
+ if (!match) return null;
+ return { type: "slot_fill_event", value: match[0], sourceText: text };
+}
+
+// ── 主流程 ───────────────────────────────────────────────────────────────────
+
+/**
+ * 处理单次用户输入,返回拦截事件或 NLU 识别结果。
+ *
+ * @param text - ASR 转录文本或直接文字输入
+ * @param session - 当前画布会话状态(status + visibleActions)
+ * @param userId - 用户 ID,用于 NLU 服务 session 跟踪
+ *
+ * @throws 当 intelligent_cabin 服务不可达或返回错误时直接抛出,不降级
+ */
+export async function processVoiceInput(
+ text: string,
+ session: PipelineSession,
+ userId: string = "default",
+): Promise {
+
+ // ── 阶段 0:停止词 ──────────────────────────────────────────────────────────
+ const stopEvent = detectStopWord(text);
+ if (stopEvent) return stopEvent;
+
+ // ── 阶段 1a:waiting_confirmation affirm/deny ───────────────────────────────
+ const confirmEvent = detectConfirmationResponse(text, session.status);
+ if (confirmEvent) return confirmEvent;
+
+ // ── 阶段 1b:可见 Artifact 按钮 ────────────────────────────────────────────
+ const voiceClickEvent = detectVoiceClick(text, session.visibleActions);
+ if (voiceClickEvent) return voiceClickEvent;
+
+ // ── 阶段 1.5:waiting_slot 数值填写 ────────────────────────────────────────
+ const slotFillEvent = detectSlotFill(text, session.status);
+ if (slotFillEvent) {
+ // 通知 intelligent_cabin 填槽,更新服务端 session 状态
+ const raw = await fillSlotsWithNlu({
+ session_id: session.sessionId,
+ user_id: userId,
+ input_text: text,
+ });
+ // 返回 slot_fill_event 让 Canvas 状态机处理,NLU 结果附在事件上
+ return {
+ ...slotFillEvent,
+ // 附上后端确认的槽位信息,便于 Canvas 更新 Artifact
+ // @ts-expect-error 扩展字段,Canvas 侧 reducer 可选消费
+ nluResult: adaptChatResponse(raw),
+ };
+ }
+
+ // ── 阶段 2:BERT NLU ────────────────────────────────────────────────────────
+ const raw = await chatWithNlu({
+ session_id: session.sessionId,
+ user_id: userId,
+ input_text: text,
+ });
+
+ return adaptChatResponse(raw);
+}
+
+// ── 工具:从 ArtifactAction[] 构建 VisibleAction[] ───────────────────────────
+
+/**
+ * 将当前激活 Artifact 的 actions 转换成 pipeline 能消费的 VisibleAction[]。
+ * 在 Artifact 变更时调用,更新 session.visibleActions。
+ */
+export function buildVisibleActions(
+ artifactId: string,
+ actions: Array<{ actionId: string; label: string; textAliases: string[]; voiceAliases?: string[] }>,
+): VisibleAction[] {
+ return actions.map((action) => ({
+ actionId: action.actionId,
+ artifactId,
+ matchPhrases: [
+ action.label,
+ ...action.textAliases,
+ ...(action.voiceAliases ?? []),
+ ],
+ }));
+}
+
+// ── 工具:判断 PipelineResult 类型 ──────────────────────────────────────────
+
+export function isNluResult(result: PipelineResult): result is NluResult {
+ return !("type" in result);
+}
+
+export function isPipelineEvent(result: PipelineResult): result is PipelineEvent {
+ return "type" in result;
+}
diff --git a/src/lib/nlu/types.ts b/src/lib/nlu/types.ts
new file mode 100644
index 0000000..32483cd
--- /dev/null
+++ b/src/lib/nlu/types.ts
@@ -0,0 +1,168 @@
+/**
+ * src/lib/nlu/types.ts
+ *
+ * 真实 NLU 类型定义,对应 intelligent_cabin 的 ChatResponse。
+ * 替代原 mock.ts 里的 MockNluResult。
+ */
+
+// ── HTTP 层:ChatResponse raw shape ────────────────────────────────────────
+
+export type RoutingStage = {
+ stage: string;
+ score?: number;
+ accepted?: boolean;
+ reason?: string | null;
+ candidates?: Array<{ intent_id: string; score: number }>;
+ metadata?: Record;
+};
+
+export type RoutingDebug = {
+ selected_intent: string | null;
+ decision: string;
+ confidence_grade: "high" | "medium" | "low" | null;
+ decision_reason?: string | null;
+ stages: RoutingStage[];
+};
+
+/** 来自 POST /api/v1/agent/chat 的原始响应 */
+export type ChatResponse = {
+ session_id: string;
+ reply_type: "text" | "ask_slot" | "ask_confirmation" | "workflow_result" | "fallback" | "clarify" | "reject";
+ reply_text: string;
+ intent: string | null;
+ domain: string | null;
+ decision: string | null;
+ decision_reason: string | null;
+ status: string;
+ pending_slots: string[];
+ filled_slots: Record;
+ routing_debug: RoutingDebug | null;
+ trace_id: string;
+ // 知识库查询结果(LLM function call 命中时)
+ knowledge_doc_id?: string | null;
+ knowledge_doc_title?: string | null;
+ knowledge_content?: string | null;
+};
+
+// ── Canvas 层:NluResult(路由使用) ───────────────────────────────────────
+
+export type RouteHint =
+ | "tool_call" // decision=execute + machine_control 域
+ | "knowledge_query" // decision=route_to_cloud 或 equipment_knowledge 域
+ | "smalltalk" // decision=reject / social
+ | "clarify" // 需要补槽
+ | "fallback";
+
+/** Canvas 消费的统一 NLU 结果,从 ChatResponse 映射而来 */
+export type NluResult = {
+ sessionId: string;
+ modelVersion: string;
+ domain: string;
+ intent: string;
+ confidence: number; // routing_debug.stages[classifier].score
+ slots: Record;
+ routeHint: RouteHint;
+ decisionGrade: "high" | "medium" | "low";
+ rawDecision: string;
+ replyText: string;
+ pendingSlots: string[];
+ traceId: string;
+ // 知识库结果(LLM function call 命中时千充)
+ knowledgeContent?: string | null;
+ knowledgeDocId?: string | null;
+ knowledgeDocTitle?: string | null;
+};
+
+// ── Pipeline 层:语音拦截事件 ───────────────────────────────────────────────
+
+export type StopActionEvent = {
+ type: "stop_action";
+ sourceText: string;
+};
+
+export type VoiceClickEvent = {
+ type: "voice_click_event";
+ actionId: string;
+ artifactId?: string;
+ sourceText: string;
+};
+
+export type SlotFillEvent = {
+ type: "slot_fill_event";
+ value: string;
+ sourceText: string;
+};
+
+export type PipelineEvent = StopActionEvent | VoiceClickEvent | SlotFillEvent;
+
+/** pipeline 返回值:被前置拦截处理 → PipelineEvent,进入 BERT → NluResult */
+export type PipelineResult = NluResult | PipelineEvent;
+
+// ── 会话状态(供 pipeline 读取) ───────────────────────────────────────────
+
+export type SessionStatus =
+ | "idle"
+ | "waiting_slot"
+ | "waiting_confirmation"
+ | "running"
+ | "completed"
+ | "stopped"
+ | "social"
+ | string;
+
+export type VisibleAction = {
+ actionId: string;
+ artifactId?: string;
+ matchPhrases: string[]; // 按钮文本 + voiceAliases,展平后
+};
+
+export type PipelineSession = {
+ sessionId: string;
+ status: SessionStatus;
+ visibleActions: VisibleAction[];
+};
+
+// ── 工具函数 ────────────────────────────────────────────────────────────────
+
+/** 从 ChatResponse 中提取 BERT 分类器的原始置信度 */
+export function extractConfidence(debug: RoutingDebug | null): number {
+ if (!debug) return 0;
+ const classifierStage = debug.stages.find((s) => s.stage === "classifier");
+ return classifierStage?.score ?? 0;
+}
+
+/** decision + domain → RouteHint */
+export function mapDecisionToRouteHint(decision: string | null, domain: string | null): RouteHint {
+ if (decision === "execute") {
+ if (domain === "machine_control") return "tool_call";
+ if (domain === "equipment_knowledge") return "knowledge_query";
+ return "tool_call";
+ }
+ if (decision === "clarify") return "clarify";
+ if (decision === "route_to_cloud") return "knowledge_query";
+ if (decision === "knowledge_llm" || domain === "knowledge") return "knowledge_query";
+ if (decision === "open_social") return "smalltalk";
+ return "fallback";
+}
+
+/** 将 ChatResponse 映射成 NluResult */
+export function adaptChatResponse(raw: ChatResponse): NluResult {
+ return {
+ sessionId: raw.session_id,
+ modelVersion: "intelligent-cabin-nlu",
+ domain: raw.domain ?? "unknown",
+ intent: raw.intent ?? "unknown",
+ confidence: extractConfidence(raw.routing_debug),
+ slots: raw.filled_slots as Record,
+ routeHint: mapDecisionToRouteHint(raw.decision, raw.domain),
+ decisionGrade: raw.routing_debug?.confidence_grade ?? "low",
+ rawDecision: raw.decision ?? "reject",
+ replyText: raw.reply_text,
+ pendingSlots: raw.pending_slots,
+ traceId: raw.trace_id,
+ // 知识库结果禁传递
+ knowledgeContent: raw.knowledge_content ?? null,
+ knowledgeDocId: raw.knowledge_doc_id ?? null,
+ knowledgeDocTitle: raw.knowledge_doc_title ?? null,
+ };
+}
diff --git a/src/lib/nlu/voice-aliases.gen.ts b/src/lib/nlu/voice-aliases.gen.ts
new file mode 100644
index 0000000..db9774b
--- /dev/null
+++ b/src/lib/nlu/voice-aliases.gen.ts
@@ -0,0 +1,90 @@
+// AUTO-GENERATED — do not edit manually
+// Source: intelligent_cabin/config/voice_aliases.yml
+// Regenerate: node scripts/generate-voice-aliases.mjs
+
+export const AFFIRM_WORDS: readonly string[] = [
+ "确认",
+ "好的",
+ "执行",
+ "是",
+ "对",
+ "继续",
+ "好",
+ "可以",
+ "确定",
+ "ok",
+ "yes"
+] as const;
+
+export const DENY_WORDS: readonly string[] = [
+ "不行",
+ "不要",
+ "不",
+ "否",
+ "no"
+] as const;
+
+export const CANCEL_WORDS: readonly string[] = [
+ "取消",
+ "算了",
+ "不用了",
+ "停止",
+ "中止",
+ "放弃"
+] as const;
+
+export const INTENT_ALIASES: Readonly> = {
+ "wirecut_start_run": [
+ "开始",
+ "启动",
+ "加工",
+ "跑起来",
+ "开始加工",
+ "启动加工"
+ ],
+ "wirecut_stop_run": [
+ "停",
+ "停机",
+ "急停",
+ "停止",
+ "停止加工"
+ ],
+ "wirecut_pause_run": [
+ "暂停",
+ "变频暂停"
+ ],
+ "wirecut_resume_run": [
+ "继续",
+ "恢复",
+ "继续加工"
+ ],
+ "wirecut_home_all": [
+ "回零",
+ "归零",
+ "回原点",
+ "全轴回零"
+ ],
+ "wirecut_home_x": [
+ "X轴回零",
+ "x回零"
+ ],
+ "wirecut_home_y": [
+ "Y轴回零",
+ "y回零"
+ ],
+ "wirecut_set_speed": [
+ "设置速度",
+ "调速度",
+ "修改速度"
+ ],
+ "wirecut_set_voltage": [
+ "设置电压",
+ "调电压",
+ "修改电压"
+ ],
+ "wirecut_set_tension": [
+ "设置拉力",
+ "调拉力",
+ "修改拉力"
+ ]
+} as const;