Python實現拼音轉換

什麼是拼音轉換

在我們學習語言之前,我們一般會學習拼音來認識漢字,並學會如何讀漢字。所以,拼音在對於我們語言的重要性不言而喻。

而拼音轉換指的是將漢字轉為拼音的過程。但是,我們中文博大精深,一般來說某個字並不僅僅隻有一個讀音,比如“翟”,它作為姓氏可以讀作zhái,作為其他可讀作di。這是就需要結合上下文,或者說結合與其組合的詞匯進行轉換拼音。不僅如此,拼音還有音調,比如一二三四聲表示的意義有時候也是不一樣的。

本篇博文將介紹字符串到拼音的轉換。

拼音轉換

首先,HanLP庫提供的拼音轉換為本位於data/dictionary/pinyin/pinyin.txt文件中。每行分別由=隔開漢字與拼音。其中多音字的拼音數量多餘漢字數量。在實際的轉換過程中,默認讀取多音字的第一個拼音,除非匹配到更長的詞語。

此外,HanLP庫還支持聲母,韻母,音調,音標以及輸入法首字母與收聲母功能。當然,也能給前文的繁體字轉換為拼音。

下面,我們來看一段代碼示例:

if __name__ == "__main__":
    text = "重載不是重量"
    pinyin_list = HanLP.convertToPinyinList(text)
    print(pinyin_list)

運行之後,控制臺輸出如下:

拼音輸出

可以看到,基本上每個字的拼音都輸出瞭。如果程序判斷不出來多音字是哪個聲調,會輸出其所有的聲調。比如這裡的體輸出瞭3聲和1聲,重輸出瞭3聲與2聲。

在python中,我們通過HanLP.convertToPinyinList進行漢字與拼音的轉換。

輸出音調

鑒於我們已經知道瞭如何轉換漢字到拼音,那麼我們現在需要實現的是單獨獲取每個漢字的音調,不需要聲調。現在該如何去實現呢?不妨先來看看代碼:

if __name__ == "__main__":
    Pinyin = JClass("com.hankcs.hanlp.dictionary.py.Pinyin")
    text = "重載不是體重"
    pinyin_list = HanLP.convertToPinyinList(text)
    print(pinyin_list)
    print("輸出音調")
    for pinyin in pinyin_list:
        print("%s," % pinyin.getPinyinWithToneMark(), end=" ")

如上面代碼所示,我們獲取瞭Java的HanLP庫中的Pinyin類,這個類可以幫我們處理很多的拼音相關的問題,比如這裡的獲取音調。

運行之後,效果如下:

輸出音調

需要註意的是,前面博文已經說過瞭,通過python進行HanLP庫使用時,盡量調用Java類進行處理,因為Java類的處理時間比python快很多。這裡我們通過Pinyin類的getPinyinWithToneMark()方法獲取聲調。

輸出聲調

既然可以隻輸出音調,那麼肯定也可以單獨輸出聲調。具體代碼如下:

if __name__ == "__main__":
    Pinyin = JClass("com.hankcs.hanlp.dictionary.py.Pinyin")
    text = "重載不是體重"
    pinyin_list = HanLP.convertToPinyinList(text)
    print(pinyin_list)
    print("輸出聲調")
    for pinyin in pinyin_list:
        print("%s," % pinyin.getTone(), end=" ")

運行之後,效果如下:

輸出聲調

這裡我們通過Pinyin類的getTone()方法獲取聲調。

輸出聲母

同樣的,我們還可以輸出聲母。代碼如下:

if __name__ == "__main__":
    Pinyin = JClass("com.hankcs.hanlp.dictionary.py.Pinyin")
    text = "重載不是體重"
    pinyin_list = HanLP.convertToPinyinList(text)
    print(pinyin_list)
    print("\r\n輸出聲母")
    for pinyin in pinyin_list:
        print("%s," % pinyin.getShengmu(), end=" ")

運行之後,效果如下:

輸出聲母

這裡我們用getShengmu()方法輸出聲母,方法名就是中文意思,很好理解。

輸出韻母

接著,我們再來輸出韻母。代碼如下:

if __name__ == "__main__":
    Pinyin = JClass("com.hankcs.hanlp.dictionary.py.Pinyin")
    text = "重載不是體重"
    pinyin_list = HanLP.convertToPinyinList(text)
    print(pinyin_list)
    print("\r\n輸出韻母")
    for pinyin in pinyin_list:
        print("%s," % pinyin.getYunmu(), end=" ")

運行之後,效果如下:

輸出韻母

這裡我們用getYunmu()方法輸出韻母,方法名就是中文意思,很好理解。

處理數字拼音

除此之外,上面因為都是漢字,所以大傢肯定都很好處理成拼音。但是現在很多時候,中文文本裡面並不僅僅隻有漢字,也有數字和英文。但是拼音是漢字獨有的,那怎麼辦呢?

我們先來看看按上面直接處理帶數字與英文時,效果怎麼樣。代碼如下所示:

if __name__ == "__main__":
    Pinyin = JClass("com.hankcs.hanlp.dictionary.py.Pinyin")
    text = "我們到2035年就會稱為世界第一"
    pinyin_list = HanLP.convertToPinyinList(text)
    print(pinyin_list)

運行之後,效果如下:

輸出none

可以看到數字都直接替換為none5,也就是缺失的意義。拼音文件找不到與其匹配的漢語拼音。

而我們實際在處理中文文檔時,都是保留數字與英文的並不直接翻譯。其實這裡我們想保留其數字的話,HanLP.convertToPinyinString()方法就能實現,我們來看看這個方法的完整定義:

convertToPinyinString(轉換為拼音的字符串文本,輸出間隔符,佈爾類型)

相信看瞭上面方法的讀者應該很快就知道瞭,第3個佈爾類型就是轉換數字與保留數字的關鍵參數,這裡我們再來變換代碼:

if __name__ == "__main__":
    Pinyin = JClass("com.hankcs.hanlp.dictionary.py.Pinyin")
    text = "我們到2035年就會稱為世界第一"
    pinyin_list = HanLP.convertToPinyinString(text," ",False)
    print(pinyin_list)

運行之後,我們的英文與數字就會原封不動的保留下來。效果如下:

輸出數字

到此這篇關於Python實現拼音轉換的文章就介紹到這瞭,更多相關Python 拼音轉換內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: