dictx 0.1.2

A fast, colorful terminal dictionary with offline indexes and optional AI explanations.
# DictX

DictX 是一个 Rust 编写的终端词典应用:本地优先、离线检索、彩色排版,并支持按需调用在线 AI API 做词义详解。

DictX 不直接把 CSV、SQLite、MDX 当作运行期查询文件。外部词库会先转换成 DictX 专有 `.dxdict` 二进制词库包,再构建本地 Tantivy 索引。查询时只读取本地索引和二进制词条包,普通查词不联网。

[![Crates.io](https://img.shields.io/crates/v/dictx.svg)](https://crates.io/crates/dictx)
[![Docs.rs](https://docs.rs/dictx/badge.svg)](https://docs.rs/dictx)

## 特性

- **内置高质量词库**:默认内置 `新世纪汉英大词典``kd_data` 转换后的 DictX 词库分片。
- **离线优先**`lookup``search``zh` 都基于本地索引,普通查询不会请求网络。
- **专有词库格式**:支持把 MDX、SQLite、ECDICT CSV、Anki JSONL、CC-CEDICT 转换为 `.dxdict`- **终端交互**:Rich 模式默认显示前 3 条结果,支持加载更多、数字键触发 AI 详解、鼠标点击操作栏。
- **可选 AI**:兼容 OpenAI Chat Completions 风格接口,默认面向 DeepSeek 配置。

## 安装

```bash
cargo install dictx --locked
```

Cargo 通常会把可执行文件安装到 `~/.cargo/bin`。如果终端提示找不到 `dictx`,请确认该目录已经加入 `PATH`。

## 快速开始

```bash
dictx init
dictx build
dictx lookup apple
dictx zh 老师
dictx search '~appple'
```

`dictx init` 只写入配置和内置词源,不会自动生成索引。第一次安装、执行 `dictx init --force`、更换词源或更换索引目录后,都需要先运行 `dictx build`。

查看当前路径和词源:

```bash
dictx config paths
dictx source list
```

Rich 输出进入交互状态后:

- `n` 加载更多结果
-`1``2``3` 查询当前可见卡片的 AI 详解
- 支持鼠标的终端可以点击底部操作栏
-`q` 退出

## 内置词库

`dictx init` 默认写入两个内置词源:

| 词源名 | 虚拟路径 | 内容 |
| --- | --- | --- |
| `builtin_new_century` | `builtin:new-century-han-eng` | 新世纪汉英大词典转换后的汉英词库 |
| `builtin_kd_data` | `builtin:kd-data` | kd_data 转换后的英汉/汉英词库 |

内置词库随 Cargo 依赖安装,用户不需要保留原始 `.mdx` 或 `.db` 文件。第一次使用时运行 `dictx build` 即可生成本地索引。

## 支持格式

| 类型 | `--format` | 用途 |
| --- | --- | --- |
| DictX 内置包 | `builtin-dxdict` | 内置词库专用格式 |
| DictX 专有包 | `dxdict` | 推荐的运行期词库格式 |
| MDX / MDict | `mdx` | 解析 `.mdx`,清洗 HTML,并提取释义、例句、短语 |
| SQLite 词典库 | `sqlite` | 已适配 `kd_data.db``en/ch` 表结构 |
| ECDICT CSV | `ecdict` | 英汉词库,可包含音标、标签、词频等字段 |
| Anki JSONL | `anki-jsonl` | 自制词卡、导出词卡、JSONL 词库 |
| CC-CEDICT | `cedict` | 汉英补充词库 |

导入外部词库并登记配置:

```bash
dictx source import new_century /path/to/新世纪汉英大词典.mdx --format mdx
dictx source import kd_data /path/to/kd_data.db --format sqlite
dictx source import ecdict /path/to/ecdict.csv --format ecdict
dictx build
```

只生成 `.dxdict` 文件,不修改配置:

```bash
dictx source pack /path/to/dict.mdx ./dict.dxdict --format mdx
dictx source add my_dict ./dict.dxdict --format dxdict
dictx build --source my_dict
```

大词库可以按词条数拆分:

```bash
dictx source pack /path/to/kd_data.db ./kd-data.dxdict --format sqlite --shard-size 22000
```

## 查询

```bash
dictx lookup bus                  # 精确查词
dictx l bus                       # lookup 短别名
dictx zh 伙计                     # 中文反查英文
dictx search fruit --pos n        # 全文搜索并按词性过滤
dictx search '~buss'              # 模糊搜索
dictx search 'trans*'             # 通配符搜索
dictx lookup bus --format plain   # 纯文本输出
dictx lookup bus --format json    # JSON 输出
```

默认 Rich 模式只展示前 3 条结果。需要一次性展示更多时:

```bash
dictx zh 伙计 --limit 10
```

## 配置

查看配置:

```bash
dictx config path
dictx config show
```

常用配置项:

| Key | 说明 |
| --- | --- |
| `dict_dir` | DictX 管理的 `.dxdict` 词库目录 |
| `index_dir` | 索引和 `entries.dxp` 缓存目录 |
| `search.default_limit` | 默认查询数量 |
| `search.fuzzy_distance` | 模糊搜索距离,最大为 2 |
| `output.color` | 是否启用彩色输出 |
| `output.examples` | 是否显示例句 |
| `ai.base_url` | OpenAI-compatible API 地址 |
| `ai.model` | AI 模型名称 |
| `ai.api_key_env` | API key 所在环境变量名 |

默认 AI 配置:

```text
base_url = https://api.deepseek.com
model = deepseek-v4-flash
api_key_env = DEEPSEEK_API_KEY
```

使用 DeepSeek:

```bash
export DEEPSEEK_API_KEY=...
dictx ai "take off" --context "The plane will take off at noon."
```

切换到其他 OpenAI-compatible 服务:

```bash
dictx config set ai.base_url https://api.openai.com/v1
dictx config set ai.model gpt-4o-mini
dictx config set ai.api_key_env OPENAI_API_KEY
```

## 文件位置

DictX 按系统标准目录保存运行期文件:

- 配置文件:`dictx config path`
- 词库目录:`dictx config get dict_dir`
- 索引目录:`dictx config get index_dir`

索引属于可重建缓存。词库更新或索引格式升级后,运行:

```bash
dictx build --force
```

早期版本使用过 `~/.dictx/config.toml`。如果新的系统标准配置文件不存在,DictX 会继续读取旧路径;需要重建默认配置时运行:

```bash
dictx init --force
```

## 许可

DictX 程序代码采用 MIT License。内置词库数据以其原始词库来源和发布许可为准。