天天看點

.net/C# 實作漢字到拼音轉換

在進行語料庫的制作過程中,一項繁瑣的工作便是将已有的漢字手動轉換為拼音,格式如下:

Sentence m39C1041 :制約俄國、鞏固西方在東歐的立足點,

Sentence spell:Zhi4 yue1 e2 guo2 gong3 gu4 xi1 fang1 zai4 dong1 ou1 de0 li4 zu2 dian3

Sentence m39C1042 :避免東歐發生逆轉,

Sentence spell:Bi4 mian3 dong1 ou1 fa1 sheng1 ni4 zhuan3  (來自863語料庫)

當我們已知漢字的時候何不自動完成漢字到拼音的轉換,我們項目中對語料沒有音調的要求,是以“他、塔、榻”所對應的拼音都是“ta”。

這裡我們采用了一個工作量巨大的方法,在GB 2312編碼中,每一個漢字的編碼都是唯一确定的,漢字編碼與音節之間存在多對一的關系,通過對漢字編碼的總結,得到如下漢字編碼—音節對應表,如表1所示。通過對漢字編碼—音節對應表的查找,即可實作漢字到音節的轉換。例如“幫”字的GB 2312編碼為6182,對應的音節即為“bang”。

表1.  漢字編碼—音節對應表

漢字編碼 音節
6325|6436|7571|7925 a
6263|6440|7040|7208|7451|7733|7945 ai
…… ……
5815|7294|7840|8341 zhao
5826|6531|6571|7859|7903|8361 zheng

對于中文作業系統,系統預設編碼方式即為GB 2312編碼,是以.net中,Encoding.Default 對應于使用者在控制台中區域和語言選項中的預設編碼方式。

取得漢字編碼的代碼實作為:

byte[] ascii = Encoding.Default.GetBytes(strInput);//string為輸入的單個漢字

if (ascii.Length == 1)//如果不是漢字而是窄字元

            {

                return strInput;

            }

            else

            {

                int codeNo;

                codeNo = (ascii[0] - 0xa0) * 100 + ascii[1] - 0xa0;//最高位*100+最低位就是漢字編碼

            }

效果示範:

.net/C# 實作漢字到拼音轉換

需要源代碼請留下你的郵箱!