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 交互画布:流程总览 + + + +
+
+
+

工业 AI 交互画布 · 操作流程与技术链路

+

选择视角,分别查看"用户界面交互路径"或"背后技术判断逻辑"。语音输入经过四阶段前置拦截后再进入 BERT NLU。

+
+
+ +
+ + + + +
+
+
+ + +
+
+ + +
+
+
+
+
+
+
+ + + + 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 交互画布:流程总览 + + + +
+
+
+

工业 AI 交互画布 · 操作流程与技术链路

+

选择视角,分别查看"用户界面交互路径"或"背后技术判断逻辑"。语音输入经过四阶段前置拦截后再进入 BERT NLU。

+
+
+ +
+ + + + +
+
+
+ + +
+
+
+
+
+
+
+ + + + 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 + + + +
+
+
+
+
+
Agent 演示台
+
Bert-first 意图识别,多轮补槽续跑,右侧展示每轮请求的完整处理链路
+
+
+
服务状态:检测中
+ +
+
+
+
+ + +
+
+ + +
+
+
+ +
+ +
+ +
+
当前会自动判断是首次请求还是补槽续跑。
+
+ + + + + +
+
+
+
+ + +
+ + + + 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 ( -
-
- Next.js logo -
-

- To get started, edit the page.tsx file. -

-

- Looking for a starting point or more instructions? Head over to{" "} - - Templates - {" "} - or the{" "} - - Learning - {" "} - center. -

-
-
- - Vercel logomark - 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) +

+
+ + + + +
+
+ +
+
+ setInputValue(e.target.value)} + placeholder={ + flowMode === "B" + ? "输入:已完成 / 压力是 0.32 / 或新的问题" + : "输入工业设备问题或控制请求(接 intelligent_cabin NLU)" + } + value={inputValue} + disabled={isLoading} + /> + +
+
+
+ +
+
+ {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 的搭档:在这里把那个看不见的锚点埋下 */} + {/*
*/} +
+
+ +
+ setInputValue(e.target.value)} + style={{ flex: 1, padding: '10px', borderRadius: '4px', border: '1px solid #ccc' }} + placeholder="试试问:“北京天气怎么样?”" + /> + +
+
+ + {/* ================= 右侧:画布区 (Artifacts) ================= */} +
+ + {/* 💡 任务 10:完成条件渲染逻辑 */} + {/* + 如果 activeTool 不存在,显示一段提示文字:"等待 AI 召唤画布..." + 如果 activeTool 存在,并且 activeTool.toolName === 'getWeather',并且 activeTool.state === 'result', + 就用一个好看的 div 把 activeTool.args.location 和 activeTool.result.temperature 显示出来! + */} + {!activeTool ? ( +
+

等待 AI 召唤画布...

+
+ ) : ( +
+ {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:埋下锚点 */} +
+
+ +
+ setInputValue(e.target.value)} + style={{ flex: 1, padding: '10px', borderRadius: '4px', border: '1px solid #ccc' }} + placeholder="试试问:“北京天气怎么样?”" + /> + +
+
+ +
+ + {/* 任务 10:条件渲染画布 */} + {!activeTool ? ( +
+

等待 AI 召唤画布...

+
+ ) : ( +
+ {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 ( +
+

+ 选择材料规格后,系统将根据成型工艺数据自动计算各模具伺服位置并写入。 +

+
+
+ + +
+ +
+
+ + setOd(Number(e.target.value))} + className="w-full rounded-lg border border-zinc-200 bg-white px-3 py-2 text-sm text-zinc-900 outline-none focus:border-zinc-950" + /> +
+
+ + setThickness(Number(e.target.value))} + className="w-full rounded-lg border border-zinc-200 bg-white px-3 py-2 text-sm text-zinc-900 outline-none focus:border-zinc-950" + /> +
+
+ + {/* 预览标签 */} +
+ {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} 个模具 +

+
+
+ + {/* 位置表 */} +
+ + + + + + + + + + {dies.map((die) => ( + + + + + + ))} + +
模具X 位置 (mm)Y 位置 (mm)
{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 ( +
+
+ {isVideo ? : } +
+
+

{mediaRef.title}

+ {mediaRef.description && ( +

{mediaRef.description}

+ )} + {mediaRef.url && ( + + + {isVideo ? "播放视频" : "查看图片"} + + )} +
+
+ ); +} + +// ── 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;