Skip to content

Commit a5231d4

Browse files
claudefrankslin
authored andcommitted
新增 CONTRIBUTING.md 貢獻指南
新增完整的貢獻指南文檔,包含: - 如何新增詞典條目(強調使用 Tab 字元分隔) - 如何使用排序工具確保詞典正確排序 - 如何安裝 Bazel 並執行測試 - 如何撰寫測試案例(測試驅動開發流程) - 簡轉繁轉換的特殊注意事項(需測試多個配置) 使用台灣繁體中文撰寫。
1 parent 5ce4e41 commit a5231d4

1 file changed

Lines changed: 296 additions & 0 deletions

File tree

CONTRIBUTING.md

Lines changed: 296 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,296 @@
1+
# 貢獻指南
2+
3+
感謝您對 OpenCC 專案的貢獻!本文件說明如何為 OpenCC 貢獻詞典條目、撰寫測試並確保程式碼品質。
4+
5+
## 目錄
6+
7+
- [新增詞典條目](#新增詞典條目)
8+
- [排序詞典](#排序詞典)
9+
- [執行測試](#執行測試)
10+
- [撰寫測試案例](#撰寫測試案例)
11+
- [簡轉繁轉換的特殊注意事項](#簡轉繁轉換的特殊注意事項)
12+
13+
## 新增詞典條目
14+
15+
### 1. 選擇正確的詞典檔案
16+
17+
詞典檔案位於 `data/dictionary/` 目錄下,根據轉換類型選擇對應的檔案:
18+
19+
- **簡繁轉換**
20+
- `STCharacters.txt` - 簡體到繁體(單字)
21+
- `STPhrases.txt` - 簡體到繁體(詞組)
22+
- `TSCharacters.txt` - 繁體到簡體(單字)
23+
- `TSPhrases.txt` - 繁體到簡體(詞組)
24+
25+
- **臺灣地區用詞**
26+
- `TWVariants.txt` - 臺灣異體字
27+
- `TWPhrasesIT.txt` - 臺灣資訊科技用語
28+
- `TWPhrasesName.txt` - 臺灣人名地名
29+
- `TWPhrasesOther.txt` - 臺灣其他用語
30+
31+
- **香港地區用詞**
32+
- `HKVariants.txt` - 香港異體字
33+
- `HKVariantsRevPhrases.txt` - 香港異體字反向詞組
34+
35+
- **日文新舊字形**
36+
- `JPShinjitaiCharacters.txt` - 日文新字體(單字)
37+
- `JPShinjitaiPhrases.txt` - 日文新字體(詞組)
38+
- `JPVariants.txt` - 日文異體字
39+
40+
### 2. 詞典格式規範
41+
42+
詞典檔案使用 **Tab 字元**`\t`)分隔來源詞與目標詞,**請勿使用空格**
43+
44+
格式:`來源詞<TAB>目標詞`
45+
46+
範例:
47+
48+
```
49+
虚伪叹息 虛偽嘆息
50+
潮湿灶台 潮濕灶台
51+
赞叹 讚歎
52+
```
53+
54+
如果一個來源詞對應多個可能的目標詞,使用空格分隔:
55+
56+
```
57+
一出 一齣 一出
58+
```
59+
60+
### 3. 編輯詞典
61+
62+
使用文字編輯器開啟對應的 `.txt` 檔案,新增您的詞條。請確保:
63+
64+
1. 使用 **Tab 字元**`\t`)分隔來源詞與目標詞
65+
2. 每行一個條目
66+
3. 檔案使用 UTF-8 編碼
67+
68+
## 排序詞典
69+
70+
**重要**:詞典檔案必須按字典序排序,否則測試會失敗。
71+
72+
### 使用排序工具
73+
74+
專案提供了自動排序工具,位於 `data/scripts/` 目錄:
75+
76+
#### 排序單一檔案
77+
78+
```bash
79+
python3 data/scripts/sort.py data/dictionary/STPhrases.txt
80+
```
81+
82+
這會直接排序並覆蓋原檔案。如果想輸出到其他檔案:
83+
84+
```bash
85+
python3 data/scripts/sort.py data/dictionary/STPhrases.txt data/dictionary/STPhrases_sorted.txt
86+
```
87+
88+
#### 排序所有詞典檔案
89+
90+
```bash
91+
python3 data/scripts/sort_all.py data/dictionary
92+
```
93+
94+
這會自動排序 `data/dictionary/` 目錄下所有 `.txt` 檔案。
95+
96+
### 排序檢查
97+
98+
排序是否正確會在測試時自動檢查。如果詞典未排序或包含重複的鍵,`DictionaryTest` 會報錯:
99+
100+
```
101+
[ FAILED ] DictionaryTest/STPhrases.UniqueSortedTest
102+
STPhrases is not sorted.
103+
```
104+
105+
遇到此錯誤時,請執行排序工具重新排序。
106+
107+
## 執行測試
108+
109+
OpenCC 使用 [Bazel](https://bazel.build/) 作為建置系統。
110+
111+
### 安裝 Bazel
112+
113+
#### macOS
114+
115+
```bash
116+
brew install bazel
117+
```
118+
119+
#### Ubuntu/Debian
120+
121+
```bash
122+
sudo apt install bazel
123+
```
124+
125+
或參考 [Bazel 官方安裝指南](https://bazel.build/install)
126+
127+
#### 其他作業系統
128+
129+
請參考 [Bazel 安裝文件](https://bazel.build/install) 獲取適合您系統的安裝方式。
130+
131+
### 執行所有測試
132+
133+
```bash
134+
bazel test --test_output=all //src/... //data/... //test/... //python/...
135+
```
136+
137+
### 執行特定測試
138+
139+
僅測試詞典:
140+
141+
```bash
142+
bazel test //data/dictionary:dictionary_test
143+
```
144+
145+
僅測試轉換案例:
146+
147+
```bash
148+
bazel test //test:opencc_test
149+
```
150+
151+
### 測試輸出
152+
153+
- `--test_output=all`:顯示所有測試輸出
154+
- `--test_output=errors`:僅顯示失敗的測試
155+
156+
## 撰寫測試案例
157+
158+
### 測試驅動開發流程
159+
160+
在修改詞典前,建議先撰寫測試案例,遵循測試驅動開發(TDD)流程:
161+
162+
1. **先寫測試**:在 `test/testcases/testcases.json` 新增測試案例
163+
2. **確認測試失敗**:執行測試,確認新案例因為詞典未更新而失敗
164+
3. **修改詞典**:新增或修改詞典條目
165+
4. **測試通過**:再次執行測試,確認修改後測試通過
166+
167+
這樣可以確保您的修改確實達到預期效果。
168+
169+
### 測試案例格式
170+
171+
測試案例定義於 `test/testcases/testcases.json`,格式如下:
172+
173+
```json
174+
{
175+
"cases": [
176+
{
177+
"id": "case_xxx",
178+
"input": "輸入文字",
179+
"expected": {
180+
"s2t": "預期的簡轉繁輸出",
181+
"s2tw": "預期的簡轉臺灣正體輸出",
182+
"t2s": "預期的繁轉簡輸出"
183+
}
184+
}
185+
]
186+
}
187+
```
188+
189+
### 欄位說明
190+
191+
- `id`:唯一的測試案例識別碼,建議使用 `case_` 前綴加流水號
192+
- `input`:輸入文字
193+
- `expected`:各種轉換配置的預期輸出
194+
- 僅需包含您要測試的轉換配置
195+
- 可以同時測試多種配置
196+
197+
### 可用的轉換配置
198+
199+
- `s2t` - 簡體到繁體
200+
- `s2tw` - 簡體到臺灣正體
201+
- `s2twp` - 簡體到臺灣正體(含慣用詞)
202+
- `s2hk` - 簡體到香港繁體
203+
- `t2s` - 繁體到簡體
204+
- `t2tw` - 繁體到臺灣正體
205+
- `tw2s` - 臺灣正體到簡體
206+
- `tw2sp` - 臺灣正體到簡體(含慣用詞)
207+
- `hk2s` - 香港繁體到簡體
208+
- `hk2t` - 香港繁體到臺灣正體
209+
- `t2hk` - 繁體到香港繁體
210+
- `tw2t` - 臺灣正體到繁體
211+
- `jp2t` - 日文新字體到繁體
212+
- `t2jp` - 繁體到日文新字體
213+
214+
### 範例
215+
216+
```json
217+
{
218+
"id": "case_100",
219+
"input": "鼠标和键盘是计算机的输入设备",
220+
"expected": {
221+
"s2t": "鼠標和鍵盤是計算機的輸入設備",
222+
"s2tw": "滑鼠和鍵盤是電腦的輸入裝置",
223+
"s2twp": "滑鼠和鍵盤是電腦的輸入裝置"
224+
}
225+
}
226+
```
227+
228+
## 簡轉繁轉換的特殊注意事項
229+
230+
當您修改簡轉繁相關詞典時,需要特別注意不同地區的轉換配置可能都會受到影響。
231+
232+
### 涉及的配置檔案
233+
234+
簡轉繁轉換主要涉及以下配置:
235+
236+
1. **`s2t.json`** - 基本簡轉繁
237+
- 使用 `STPhrases.txt``STCharacters.txt`
238+
239+
2. **`s2tw.json`** - 簡體轉臺灣正體
240+
- 使用 `STPhrases.txt``STCharacters.txt`
241+
- 額外使用 `TWVariants.txt`
242+
243+
3. **`s2twp.json`** - 簡體轉臺灣正體(含慣用詞)
244+
- 使用 `STPhrases.txt``STCharacters.txt`
245+
- 額外使用 `TWPhrases.txt``TWVariants.txt`
246+
247+
4. **`s2hk.json`** - 簡體轉香港繁體
248+
- 使用 `STPhrases.txt``STCharacters.txt`
249+
- 額外使用 `HKVariants.txt`
250+
251+
### 測試建議
252+
253+
修改 `STPhrases.txt``STCharacters.txt` 時,建議在 `testcases.json` 中同時測試多個相關配置:
254+
255+
```json
256+
{
257+
"id": "case_example",
258+
"input": "简体文字",
259+
"expected": {
260+
"s2t": "繁體文字",
261+
"s2tw": "繁體文字",
262+
"s2twp": "臺灣慣用詞",
263+
"s2hk": "香港繁體"
264+
}
265+
}
266+
```
267+
268+
這樣可以確保您的修改在各種轉換情境下都能正確運作。
269+
270+
### 常見情況
271+
272+
- **僅修改基本簡繁對應**:修改 `STCharacters.txt`,測試至少包含 `s2t`
273+
- **修改詞組轉換**:修改 `STPhrases.txt`,測試包含 `s2t``s2tw``s2twp``s2hk`
274+
- **臺灣特有用詞**:修改 `TWPhrases*.txt``TWVariants.txt`,測試包含 `s2tw``s2twp`
275+
- **香港特有用詞**:修改 `HKVariants*.txt`,測試包含 `s2hk`
276+
277+
## 提交變更
278+
279+
完成修改後,請確認:
280+
281+
- [ ] 詞典檔案已使用 Tab 字元分隔
282+
- [ ] 詞典檔案已正確排序(執行 `sort.py``sort_all.py`
283+
- [ ] 已新增對應的測試案例到 `testcases.json`
284+
- [ ] 修改前測試案例失敗,修改後測試通過
285+
- [ ] 所有測試通過(`bazel test --test_output=all //src/... //data/... //test/...`
286+
287+
符合以上條件後,即可提交 Pull Request。
288+
289+
## 需要協助?
290+
291+
如有任何問題,歡迎:
292+
293+
-[GitHub Issues](https://github.com/BYVoid/OpenCC/issues) 提問
294+
- 加入 [Telegram 討論群組](https://t.me/open_chinese_convert)
295+
296+
感謝您的貢獻!

0 commit comments

Comments
 (0)