Skip to content

Commit f1feedd

Browse files
committed
Add AGENTS.md and CLAUDE.md for AI agents.
1 parent 602377e commit f1feedd

2 files changed

Lines changed: 73 additions & 0 deletions

File tree

AGENTS.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# OpenCC 專案速覽
2+
3+
本文檔彙整目前代理掌握的 Open Chinese Convert(OpenCC)專案資訊,協助快速熟悉程式碼結構、資料組織與配套工具。
4+
5+
## 專案概述
6+
- OpenCC 是一套開源的中文簡繁體與地區用詞轉換工具,支援簡↔繁、港澳臺差異、日文新舊字形等多種轉換方案。
7+
- 專案同時提供 C++ 核心程式庫、C 語言介面、命令列工具,以及 Python、Node.js 等語言綁定,詞庫與程式解耦,方便自訂與擴充。
8+
- 主要相依:`rapidjson` 解析設定,`marisa-trie` 處理高效能詞典(`.ocd2`),可選 `Darts` 以支援舊版 `.ocd`
9+
10+
## 核心模組與流程
11+
1. **設定載入 (`src/Config.cpp`)**
12+
- 讀取 JSON 設定(位於 `data/config/*.json`),解析分詞器定義與轉換鏈。
13+
-`type` 欄位載入不同格式的詞典(純文字、`ocd2`、詞典組),並支援附加搜尋路徑。
14+
- 建立 `Converter` 物件,持有分詞器與轉換鏈。
15+
16+
2. **分詞 (`src/MaxMatchSegmentation.cpp`)**
17+
- 預設分詞型態為 `mmseg`,即最大正向匹配。
18+
- 以詞典做最長前綴匹配,將輸入切成 `Segments`;無法匹配的 UTF-8 片段依字元長度保留。
19+
20+
3. **轉換鏈 (`src/ConversionChain.cpp`, `src/Conversion.cpp`)**
21+
- 轉換鏈是有序的 `Conversion` 清單,每個節點依賴一個詞典,透過最長前綴匹配把片段替換為目標值。
22+
- 支援詞組優先、異體字替換、多階段組合等進階情境。
23+
24+
4. **詞典系統**
25+
- 抽象介面 `Dict` 統一前綴匹配、全前綴匹配與詞典遍歷。
26+
- `TextDict` (`.txt`) 由制表符純文字建構詞典;`MarisaDict` (`.ocd2`) 提供高效能字典樹;`DictGroup` 可將多個詞典依序組成集合。
27+
- `SerializableDict` 定義序列化與檔案載入邏輯,命令列工具據此在不同格式間互轉。
28+
29+
5. **API 封裝**
30+
- `SimpleConverter`(高階 C++ 介面)封裝 `Config + Converter`,提供字串、指標緩衝、部分長度轉換等多種多載。
31+
- `opencc.h` 暴露 C API:`opencc_open``opencc_convert_utf8` 等,供語言綁定與命令列重用。
32+
- 命令列程式 `opencc``src/tools/CommandLine.cpp`)示範批次轉換、串流讀取、自動刷新與同檔案輸入輸出處理。
33+
34+
## 資料與設定
35+
- 詞庫維護在 `data/dictionary/*.txt`,涵蓋短語、單字、地區差異、日文新字等專題檔;建置時轉成 `.ocd2` 加速。
36+
- 預設設定位於 `data/config/`,如 `s2t.json``t2s.json``s2tw.json` 等,定義分詞器型態、使用的詞典與組合方式。
37+
- `data/scheme``data/scripts` 提供詞庫編譯腳本與規範校驗工具。
38+
39+
### 詞典二進位格式:`.ocd``.ocd2`
40+
- `.ocd`(舊格式)以 `OPENCCDARTS1` 為檔頭,主體為 Darts double-array trie 的序列化資料,搭配 `BinaryDict` 結構保存鍵值偏移與拼接緩衝,載入流程見 `src/DartsDict.cpp``src/BinaryDict.cpp`。常用於需要 `ENABLE_DARTS` 的相容環境。
41+
- `.ocd2`(預設格式)以 `OPENCC_MARISA_0.2.5` 為檔頭,接著寫入 `marisa::Trie` 資料,然後用 `SerializedValues` 模組保存所有候選值列表,詳見 `src/MarisaDict.cpp``src/SerializedValues.cpp`。此格式體積更小、載入更快(例如 `NEWS.md` 記錄 `STPhrases` 從 4.3MB 縮減至 924KB)。
42+
- 命令列工具 `opencc_dict` 支援 `text ↔ ocd2`(以及可選 `ocd`)互轉,新增或調整詞典時先編輯 `.txt`,再執行工具產生目標格式。
43+
44+
## 開發與測試
45+
- 頂層建置系統支援 CMake、Bazel、Node.js 的 `binding.gyp`、Python `pyproject.toml`,跨平台整合 CI。
46+
- `src/*Test.cpp``test/` 目錄包含 Google Test 風格的單元測試,涵蓋詞典匹配、轉換鏈、分詞等關鍵邏輯。
47+
- 工具 `opencc_dict``opencc_phrase_extract``src/tools/`)協助開發者轉換詞庫格式、抽取短語。
48+
49+
## 生態綁定
50+
- Python 模組位於 `python/`,透過 C API 提供 `OpenCC` 類別。
51+
- Node.js 擴充在 `node/` 目錄,使用 N-API/Node-API 呼叫核心程式庫。
52+
- README 列出第三方 Swift、Java、Go、WebAssembly 等移植專案,展示生態廣度。
53+
54+
## 常見自訂步驟
55+
1. 編輯或新增 `data/dictionary/*.txt` 詞條。
56+
2. 使用 `opencc_dict` 轉換為 `.ocd2`
57+
3.`data/config` 複製/修改設定 JSON 並指定新的詞典檔案。
58+
4. 透過 `SimpleConverter`、命令列工具或語言綁定載入自訂設定驗證效果。
59+
60+
> 若需更深入,可閱讀 `src/README.md` 的模組說明,或參考 `test/` 下的案例理解轉換鏈組合。
61+
62+
## 瀏覽器與第三方實作注意事項
63+
- 官方未直接支援純前端執行,社群方案(如 `opencc-js``wasm-opencc`)可供參考。
64+
- 若自行編譯 WebAssembly,可用 Emscripten 將 `.ocd2` 寫入虛擬檔案系統,在 Web Worker 中呼叫轉換以避免阻塞 UI,並搭配 gzip/brotli 與 Service Worker 快取降低首次載入成本。
65+
- 純 JavaScript 查表可先將詞典預處理為 JSON/Trie 結構,手寫最長前綴匹配;請留意控制資源體積,並在轉換長文本時避免多餘字串拷貝。
66+
67+
### 第三方實作常見偏差(推測)
68+
- **缺少分詞與轉換鏈順序**:若未還原 `group` 設定或詞典優先級,複合詞可能被拆開或被單字覆蓋。
69+
- **最長前綴邏輯缺失**:只按字元替換會遺漏成語、多字詞結果。
70+
- **UTF-8 處理不嚴謹**:疏漏多位元組字元或 surrogate pair 處理,容易位移或截斷。
71+
- **詞典/設定不完整**:缺少分詞詞典、地區差異等 `.ocd2`,輸出會缺詞。
72+
- **路徑與載入流程差異**:若未遵循 OpenCC 的路徑搜尋與設定解析細節,實際載入的資源與官方不同,結果自然偏差。

CLAUDE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@AGENTS.md

0 commit comments

Comments
 (0)