目錄(20 節)

廣東話拼音轉換教學:文字轉拼音、拼音轉字同批次處理

用兩個開源 G2P 工具實際跑過同一批文字,逐項對照正規化、分詞、多音字消歧嘅實際輸出同已知失效模式,附可重現嘅驗證方法。

— 港嘢內容團隊約 13 分鐘廣東話拼音粵拼轉換G2P批次處理
分享:

一句答你:「廣東話拼音轉換」其實係三件唔同嘅事 —— 文字轉拼音、拼音轉返漢字、同一批文字批量處理。三件事用嘅工具、會出嘅錯、驗證方法都唔一樣。而家免費工具已經做得幾齊:PyCantonese 處理分詞、詞界消歧同粵拼↔耶魯互轉;canto-hk-g2p 補上數字、日期、貨幣、單位嘅正規化同中英夾雜。但兩個都係單向(字 → 拼音),拼音轉返漢字一定要靠字典或者自己砌反查表。

「廣東話拼音轉換」呢個講法喺網上有兩個用法:一個係指將中文稿變成粵拼(做字幕、對照表、朗讀稿),另一個係指將粵拼變返中文(例如聽到一段音想知道點寫)。兩者技術上完全唔同,用錯工具會撞板。

呢篇唔會教你背拼音(嗰部分睇《粵拼 Jyutping 入門:完整教學指南》)。本文做嘅係一件事:真係跑一次兩個開源工具,逐項對照佢哋實際輸出乜,同埋指出每一步會點錯。

重點摘要(Key Takeaways)

  • 轉換係四層管線:正規化 → 分詞 → 多音字消歧 → 輸出。任何一層改動,結果就會變;只睇最後一行好易錯判。
  • 【實測】2026-10-30 同一批文字,兩個工具輸出唔同。香港銀行 一句,PyCantonese 出 ngan4 hong4(啱),canto-hk-g2p 出 ngan2 haang4(錯)—— 因為後者用最長詞匹配切詞,將「香港銀行」切開咗。同一個工具喺唔同詞界上,答案可以完全唔同。
  • 正規化係最易被忽略嗰層。2026年6月13日 喺 canto-hk-g2p 出 ji6 ling4 ji6 luk6 nin4 luk6 jyut6 sap6 saam1 jat6,但喺 PyCantonese 出 None —— 因為佢冇數字正規化,數字直接變未知詞。
  • 多音字唔只有一個答案。行 一個字,canto-hk-g2p 列出 9 個候選讀音(haang4/hang4/hong4…),由高頻排到低頻;正經 就只有兩個,而且標示做「並列」而唔係「有排序」。
  • 粵拼 → 耶魯 → 粵拼 可以無損往返。實測 hei3 hau6 → 耶魯 hei hauh → 粵拼 hei3 hau6,中間唔會走樣;唯一要留意嘅係耶魯嘅低調 h 標記同音節邊界會撞。
  • 冇任何工具可以替代人手核讀音。工具可以話你「邊個字最可能」,但權威讀音始終要查中大《粵語審音配詞字庫》。

「轉換」其實有三個方向,工具唔同

文字轉拼音(G2P) 係最常見嗰個:一句中文稿入去,出一串粵拼。呢個方向已經有幾個成熟開源工具,因為佢係可程式化嘅,所以最適合批次處理。

拼音轉返漢字(反查) 方向相反:聽到 daan6 gou1,想知係咩字。呢個方向冇乜好工具 —— 因為同一個讀音對應多個漢字,要靠詞典同語境。

批次轉換 其實唔係第三種轉換,而係同一件事嘅規模版本:一句變一萬句。佢帶嚟嘅新問題係速度、批次一致性、錯誤點樣捉。

三個方向嘅對照:

方向你有乜你想要乜用乜工具
文字 → 拼音中文稿粵拼字串PyCantonese、canto-hk-g2p
拼音 → 文字粵拼字串候選漢字粵典、審音配詞字庫、自建反查表
批次處理一批稿一批粵拼上面兩個工具嘅 batch API

我哋本文集中講第一個方向,因為嗰個係最多人問、亦係最多人做錯嗰個。方向一嘅基礎(19 聲母、9 韻腹、8 韻尾、6 聲調),《廣東話拼音(粵拼):聲母韻母全表》 一頁有齊。

一條四層管線:每層都會改變結果

由中文文字轉成粵拼嘅四層處理管線:正規化、分詞、多音字消歧、輸出
四層之中任何一層改動,輸出結果就會變;所以驗證要逐層睇,唔好只睇最後一行。

正規化 係將輸入改造成一個「工具一定識得」嘅形式:數字、日期、貨幣、單位、百分比展開成口語讀法,標點統一,英文同中文嘅邊界理順。分詞 係將字串切成詞 —— 粵語嘅詞界好重要,因為好多字嘅讀音要靠詞語先定得到。多音字消歧 係為一個字揀一個預設讀音。輸出 係加調號、加空格分隔音節。

四層之中,任何一層嘅實作唔同,結果就會唔同。呢個係理解工具差異嘅唯一入口。

【實測】同一批文字,兩個開源工具嘅實際輸出

【實測】我哋喺 2026-10-30 用 Python 3.12 虛擬環境,裝咗 pycantonese 5.0.0 同 canto-hk-g2p(PyPI 最新版),逐句跑 characters_to_jyutping() 同 Pipeline().convert()。以下全部係工具嘅真實輸出,冇任何改動。環境、指令同完整結果可以重跑。

輸入PyCantonesecanto-hk-g2p判定
香港人講廣東話[('香港人','hoeng1 gong2 jan4'), ('講','gong2'), ('廣東話','gwong2 dung1 waa2')]hoeng1 gong2 jan4 gong2 gwong2 dung1 waa2兩個都啱
蛋[('蛋','daan2')]daan2兩個都啱
蛋糕[('蛋糕','daan6 gou1')]daan6 gou1兩個都啱 —— 證明詞界會改聲調
銀行[('銀行','ngan4 hong4')]ngan4 hong4兩個都啱
行動[('行動','hang4 dung6')]hang4 dung6兩個都啱
香港銀行[('香港','hoeng1 gong2'), ('銀行','ngan4 hong4')]hoeng1 gong2 ngan2 haang4canto-hk-g2p 錯(見下)
2026年6月13日('2026', None) …ji6 ling4 ji6 luk6 nin4 luk6 jyut6 sap6 saam1 jat6PyCantonese 缺正規化
50%('50', None)baak3 fan6 zi1 ng5 sap6同上
HK$100全部 Nonejat1 baak3 jyun4同上
你好嘅,I love Hong Kong中文轉好,英文全部 Nonenei5 hou2 ge3 , I love Hong Kongcanto-hk-g2p 英文原樣保留
佢send咗email俾我email → ji1 me1 lou4keoi5 send zo2 email bei2 ngo5PyCantonese 逐字母讀英文
訓覺[('訓覺','fan3 gok3')]fan3 gaau3兩個都唔係「瞓覺」
岩岩[('岩岩','ngaam4 ngaam4')]ngaam1 ngaam1canto-hk-g2p 啱(借音字表)

最值得留意嗰行係「香港銀行」。兩個工具嘅底層詞典都收錄咗「銀行 → ngan4 hong4」,但 canto-hk-g2p 用最長詞匹配切詞,於是將「香港銀行」切成「香港」+「銀」+「行」,「銀」變咗 ngan2、「行」變咗 haang4。同一個詞喺唔同詞界上,答案可以完全唔同 —— 呢個唔係工具嘅 bug,係詞界本身攞到嘅線索唔同。

正規化:最易被忽略、亦最容易出事嗰層

如果你嘅稿入面有數字、日期、金額或者單位,正規化直接決定最終啲字讀得啱唔啱。

上表顯示嘅對比好清楚:canto-hk-g2p 內建咗完整嘅粵語口語正規化器 —— 2026年 → ji6 ling4 ji6 luk6 nin4、50% → baak3 fan6 zi1 ng5 sap6、HK$100 → jat1 baak3 jyun4。呢啲係佢內置規則嘅實際輸出(README 內有對應例子,2026-10-30 查閱)。

PyCantonese 呢邊冇做呢一層:上表入面 2026年6月13日 嘅「2026」直接出 None(代表無法轉換)。None 唔代表讀音唔存在,代表呢個工具嘅詞典冇呢個 token。如果你嘅流程會將 None 嘅位置當成「原樣保留」,咁數字就會喺最後一步先爆。

實務建議:如果稿入面有數字,就喺轉換之前先做正規化,唔好依賴工具。如果你用 canto-hk-g2p,佢內建嗰層已經够;如果你用自己嘅流程或者 PyCantonese,就自己補一個正規化步驟,並且專門測試年份、金額、百分比、溫度、樓層呢幾類。

分詞:詞界決定咗「行」點讀

分詞唔係「切得靚唔靚」嘅美觀問題,而係正確性問題。上表「蛋 → daan2」對「蛋糕 → daan6 gou1」就係最簡單嘅證明:同一個字,孤立講同喺詞入面,調號唔同。

粵拼詞典錄入嘅係「詞」而唔係「字」,所以詞界一變,命中嘅詞就變,讀音就變。Canto-hk-g2p 用最長詞匹配切詞;PyCantonese 用自己嘅分詞器(v4.0.0 起底層換咗 Rustling),並且可以用你自己指定嘅切法。

【獨家觀察】好多教程會話「G2P 工具唔夠準,所以要人手校」。但上表顯示嘅唔係「唔夠準」,而係同一個工具喺唔同詞界上會畀唔同答案。呢個分別好重要:如果你將「手工校過嘅讀音」當成「工具嘅預設讀音」,你就會以為工具有錯;實際上你要校嘅係詞界,而唔係逐個字。用固定嘅詞表、穩定嘅切詞規則去做,錯嘅地方會穩定落嚟 —— 呢啲位就係你可以靠詞表修;唔穩定嘅嗰啲位,先係要人手睇。

多音字:預設讀音點揀,同點知揀得啱唔啱

多音字係 G2P 最難嗰層。Canto-hk-g2p 提供咗一個「候選 API」,實測輸出:

convert_candidates("正經") → [('正經', ['zing3 ging1', 'zing1 ging1'], 'yue', 'tied', ...)]
convert_candidates("行")   → [('行', ['haang4','hang4','hong4','hang6','hong2',
                                       'hong6','haang2','hang2','haang1'], 'yue', 'ranked', ...)]
convert_candidates("香港") → [('香', ['hoeng1'], 'yue', 'certain', ...),
                               ('港', ['gong2'], 'yue', 'certain', ...)]

三個位值得留意:

第一,置信度係分類,唔係分數。 工具刻意唔俾概率值 —— 因為佢哋嘅詞典冇真實頻率數據,俾一個浮點概率出嚟只係作出嚟。所以 certain(無歧義)、ranked(有排序偏好)、tied(並列、無排序)三個類別先係可信嘅資訊。見到 tied 就代表「呢個工具分唔出」,唔好當成「頭一個啱」。

第二,歧義係喺詞層報告,唔係逐字報告。 香港 被切做「香」+「港」,兩個都 certain —— 個詞界先係有意義嘅單位。

第三,convert() 同 convert_candidates() 嘅第一名永遠一致。 即係話「最有把握嗰個」係同一個,候選清單只係俾你見到「第二個可能」。

實務做法:如果你做批次轉換,唔好淨睇 convert() 嘅輸出 —— 至少要將 tied 同 ranked 嘅 token 抽出嚟人手核。PyCantonese 嗰邊亦有類似情況:蛋 出 daan2、蛋糕 出 daan6 gou1,證明佢同樣靠詞界判斷。

多音字嘅讀音規則同處理方法,睇《廣東話多音字攻略:AI 讀錯點算?》。

拼音轉返漢字:反查嘅三種做法

反查方向冇開源工具可以直接用(PyCantonese 就係單向嘅),所以有三条路:

第一,用字典查。 粵典 可以由粵拼反查;中大《粵語審音配詞字庫》 有字頭、粵拼同配詞,適合逐字核。優點係權威、有上下文;缺點係逐個查,慢。

第二,自己砌反查表。 如果你已經有晒「字 → 拼音」嘅一對一對應(正規化之後嘅詞典就係),反查就係將佢倒轉。呢個做法嘅關鍵唔係技術,係詞典質量:一個字有幾多個讀音、反查表要唔要保留全部候選、預設讀音點定。

第三,用詞典做上下文消歧。 反查出嚟嘅唔係一個字,係一組候選。呢個時候要靠詞語搭配去收窄 —— 呢部分同查字典嘅流程一樣,睇《廣東話讀音字典點用?新手必睇完整教學指南》。

繁簡字、口語字同借音字

呢三類係「拼音轉換」入面最常出問題嘅輸入。

口語用字:「嘅」「咗」「喺」「噉」「㗎」呢啲字,部分唔喺通用漢字表入面。實測 佢send咗email俾我 喺 canto-hk-g2p 出 keoi5 send zo2 email bei2 ngo5 —— 全部口語字都轉到,因為佢內建咗手寫嘅口語字表。PyCantonese 都轉到 嘅(ge3),但英文部分出咗事:send 變 sen1、email 變 ji1 me1 lou4,即係逐個字母用粵拼讀。呢個對英文夾雜嘅稿係硬傷。

借音字:「訓覺」應該寫「瞓覺」、「岩岩」應該寫「啱啱」—— 用同音嘅字頂替。實測兩個工具都唔完美:canto-hk-g2p 出 岩岩 → ngaam1 ngaam1(啱,佢有借音字修正表),但 訓覺 → fan3 gaau3 同正確讀音仍然有出入;PyCantonese 就兩個都原樣轉(fan3 gok3、ngaam4 ngaam4),即係用咗變體字本身嘅讀音。呢類要人手改。

繁簡字:繁體字嘅粵拼同簡體字通常一致(粵語同普通話嘅字形對應唔影響讀音),但異體字要小心 —— 同一個意思嘅兩個寫法,粵拼可能唔同(例如口語字嘅「嘅」同「嘅」寫法變體)。呢部分整理,睇《粵語口語字點寫?常用字詞寫法懶人包》。

轉去其他羅馬化方案:粵拼、耶魯、IPA

有啲下游工具要嘅唔係粵拼,而係耶魯式或者 IPA。PyCantonese 呢三樣都有,而且往返無損。實測:

粵拼耶魯往返IPA(Chao 數字調)
gwong2 dung1 waa2gwóng dūng wágwong2 dung1 waa2 ✓kʷɔŋ25 tʊŋ55 waː25
m4 goi1m̀h gōim4 goi1 ✓m21 kɔy55
hei3 hau6hei hauhhei3 hau6 ✓hei33 hɐu22

唯一要留意嘅位係耶魯嘅音節邊界歧義:耶魯嘅低調用 h 標記,所以 heihauh 可以係 hei3 hau6(氣候)或者 hei6 au6。hei3 hau6 轉出嚟嘅耶魯係 hei hauh,中間嘅空格正係音節邊界嘅標記 —— 往返嘅時候靠佢分開。呢個細節唔講,大部分人會以為係 bug。

耶魯式同教院式嘅其他分別,睇《粵語拼音方案比較:Jyutping vs Yale vs 教院式》。

點驗證你嘅轉換結果

冇公開、可重複嘅「粵拼轉換準確率」測試集,所以本文唔會寫「準確率 98%」—— 咁啲數字冇比較價值(你唔會知佢係點量出嚟、喺咩稿上量)。但你可以自己跑一個可重現嘅驗證方法:

  1. 砌一個固定測試集。 三十至五十句,覆蓋你實際會用到嘅場景:常用句、含數字同金額嘅句、含人名同品牌嘅句、含中英夾雜嘅句、含多音字嘅句。寫低,之後每次改流程都打同一批。
  2. 逐句人手核一次正讀。 用中大《粵語審音配詞字庫》或粵典核,記低「工具啱 / 工具錯」。記低錯嘅嗰句屬於邊一層(正規化/分詞/消歧/輸出)。
  3. 記錄三個數:正確句數、None 或者未轉換 token 嘅數量、同一個讀音出現多過一個候選嘅 token 數量。
  4. 每次改流程之後重跑同一批,比較三個數嘅變化。邊個數跌,就知你改壞咗邊層。

呢個方法嘅價值唔在於數字靚,喺於每次變動都有可比較嘅基準。工具換咗、詞典換咗、正規化規則改咗,都可以即刻見到影響。

常見問題 FAQ

廣東話拼音轉換有冇官方工具?

有參考,但唔係俾你直接接 API 用。香港語言學學會嘅《粵拼方案》同《粵拼答問》係標音標準嘅來源;中大《粵語審音配詞字庫》係逐字查讀音嘅權威工具。真正可以程式化跑嘅係開源工具(PyCantonese、canto-hk-g2p),佢哋嘅詞典各有資料來源同授權,商用前要自己睇。

轉換出嚟嘅拼音可以直接用嚟合成語音嗎?

要留意三件事:多音字嘅預設讀音未必係你要嘅;變調(連讀變調)通常唔會自動處理 —— 呢類工具輸出嘅係本調;中英夾雜嘅英文部分,工具之間處理唔同(有啲原樣保留,有啲逐字母讀)。所以批量之前一定要有驗證步驟。

點解同一個字,兩個工具答案唔同?

最常見原因係詞界唔同:切詞方式唔同,命中嘅詞就唔同,讀音自然唔同。上表嘅「香港銀行」就係呢個情況。其次係詞典覆蓋範圍同正規化規則唔同。

拼音轉漢字一定要逐個查字典?

如果你只係查一兩個字,係。如果你做緊批次或者要系統化處理,值得自己砌反查表 —— 由已經正規化咗嘅「字 → 拼音」對應倒轉,再用字典核對有歧義嗰部分。反查表嘅質量取決於詞典同預設讀音嘅定義,所以建表時呢兩件事要一齊定。

有冇得一次過轉成我哋要嘅格式(耶魯、IPA)?

可以。PyCantonese 實測粵拼 → 耶魯 → 粵拼 往返無損,亦可以直接出 IPA(帶調號或調數字兩種)。 canto-hk-g2p 亦有對應嘅 IPA 輸出。要留意耶魯嘅音節邊界會用空格標記,唔好喺中間加嘢。

授權可以商用嗎?

逐個睇。PyCantonese 本身係 MIT,但內含嘅資料分別來自香港粵語語料庫(CC BY)、rime-cantonese(CC BY 4.0,要求署名)等;canto-hk-g2p 係 Apache-2.0,同樣有 rime-cantonese 嘅 CC BY 4.0 署名要求。兩者都明確排除咗授權唔相容嘅資料集(例如粵典內容屬專有,不可再分發)。商用前請逐個睇對應版本嘅授權同 NOTICE。

想試下轉一次?

貼一段你日常用嘅粵語稿入去,睇下系統點樣斷字揀音 —— 同時你就知道,自己嘅稿入面邊啲字最需要人手核。

相關文章