在進行語料庫的制作過程中,一項繁瑣的工作便是将已有的漢字手動轉換為拼音,格式如下:
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+最低位就是漢字編碼
}
效果示範:

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