rime/rime-jyutping

關於有聲調版碼表嘅問題

laubonghaudoi opened this issue · 5 comments

喺之前嘅討論中,我哋認爲有必要喺用戶輸入粵語嗰陣增加聲調嘅支持。但係考慮到向下兼容現有用戶詞庫嘅問題,唔可以單純噉將jyutping.dict.yaml替換成有聲調版碼表,否則現有用戶詞典會全部失效。而一種解決方案係新建一個有聲調嘅碼表jyut6ping3.dict.yaml,與現行嘅jyutping.dict.yaml同時維護,但噉亦會引發以下問題:

碼表維護方式

  1. 呢個jyut6ping3.dict.yaml,係應該
    1. 單獨另起一個倉庫,抑或
    2. 直接新建喺本倉庫維護
  2. 呢個jyut6ping3.dict.yaml同原有嘅jyutping.dict.yaml係應該
    1. 分開單獨維護,抑或
    2. 僅維護jyut6ping3.dict.yaml,然後利用腳本生成jyutping.dict.yaml

對於問題1,目前luna-pinyinterra-pinyin即爲分立於兩倉庫嘅無聲調添加有聲調版普通話拼音方案。而同一倉庫維護多個碼表,甚至同一schema共用多個dict嘅實現,參考hubehua

目前terra-pinyinluna-pinyin分開維護,因爲無聲調版嘅後者字數比有聲調嘅前者多,無法直接通過腳本用前者生成後者。所以對於問題2,若採用方法ii就需要先確定jyut6ping3.dict.yaml,再使用腳本轉換成jyutping.dict.yaml

碼表數據來源

目前嘅jyutping.dict.yaml碼表數據來源係Unihan,喺下面kCantonese一欄可以睇到字音嘅數據來源都較複雜,而且暫時無法確定Unihan具體點確定某字讀音,剩知佢對ng- 0-嘅問題採用咗全部收錄嘅方法(呢點已經喺最新一次更新#17 中解決)。

而爲咗製作jyut6ping3.dict.yaml,需要先確定字音數據來源。目前可以搵到嘅較權威嘅數據來源有:

  1. Unihan (現有碼表數據)
  2. LSHK Jyutping - Char - JP (12,000+字音)
  3. 粵音小鏡 (5000+字音)
  4. 廣州話正音字典 (10,000+字音)
  5. 常用字廣州話讀音表 建議讀音 (5000+字音)

所以可以見到,即使係以上資料,都冇辦法覆蓋現有碼表中嘅所有字(24,000+隻字)。對於呢啲無法覆蓋嘅字,應該捨棄定係就直接用Unihan入邊嘅發音?定係有其他解決方法?

我覺得方案2.ii.最為可取。因為,維護成本理應為眾多方案中最低,且維護時比較難產生不協調的地方。

我亦覺得方案2.ii.最為可取。

單字方面,若不計重複字,現有無聲調詞庫收單字 20081 個(本表中第 560 行「洴」,第 7329 行「枅」,第 7703-7705 行「龜」,第 11725 行「益」,第 15187 行「廊」,第 15310 行「虜」屬於兼容區漢字,應刪去)。LSHK Jyutping - Char - JP.csv 表收字 10684 個,剩餘字使用 Unihan 補充即可。Unihan 資料有聲調,因此可以達到有聲調碼表的要求。

詞語方面,可以採用 LSHK Jyutping Word List 的數據。根據我在 sgalal/lshk-word-list-crawler 的統計,該表包含的詞組讀音資料有 15616 筆。

我認為有聲調粵拼方案可以設計如下:

該方案是一個粵語拼音輸入方案,採用粵語標準音,拼音默認使用香港語言學學會粵語拼音方案,同時提供其他拼音方案的支持,詞庫中的拼音包含聲調。該方案同時支援書面語和粵語口語。

該方案的資料來源為:單字讀音資料來自 LSHK Jyutping - Char - JP.csv 與 Unihan 中的 kCantonese,優先採用 LSHK 表中的資料,且對來自 kCantonese 中的資料進行一定的修正(例如恢復 ng 聲母與零聲母之對立)。詞語讀音資料來自 LSHK Jyutping Word List。粵語正字資料來自 粵語協會方案.csv。另外,由於資料中的漢字採用香港標準,為兼容 Rime 八股文詞庫,首先將資料中的漢字變換為 OpenCC 標準,再使用 Rime 內置的 OpenCC 模組變換為包括香港標準在內的其他標準。

@sgalal 關於轉換爲OpenCC的問題,我還不太清楚如何操作。目前的無聲調碼表是否OpenCC標準?

關於正字的問題,我認爲目前暫無需考慮。因爲輸入法碼表只用儘可能將所有寫法收錄,正字只影響詞頻,即把正字放於後選詞第一位。而這一步可以等到最後完成。另外粵語協會方案有一個更新版,即粵研社方案,位於我倉庫的dev branch裏粵研社方案.csv

如果按照這個方案,那下一步需要進行的工作如下:

  1. 將Unihan和LSHK表中數據轉換爲OpenCC標準
  2. 收錄LSHK表中全部10684個字
  3. Diff出LSHK表和Unihan中數據差異,收錄Unihan中剩餘字
  4. 修正碼表中疑影不分等其他讀音問題,參考數據爲《廣韻》和《廣州話正音字典》等
  5. 開發碼表轉換腳本,將此jyut3ping6.dict.yaml轉換成無聲調,再與本倉庫的jyutping.dict.yamldiff出差異,根據此差異分別對兩碼表字音修正
  6. 收錄本倉庫中jyutping.dict.yaml已收錄詞組,及LSHK詞表。

如果是這樣,我認爲暫時不要將此帶聲調版碼表放於此倉庫內,而是單獨在sgalal/rime-cantonese中維護。

目前有聲調版粵拼方案已初步完成,相關討論將轉移至此倉庫rime-cantonese