【python 走進NLP】hanNLP 簡繁拼音轉換

漢語少不了面對簡體繁體、漢字拼音的相互轉換。HanLP基於雙數組Trie樹AC自動機算法提供了性能極高的轉換功能。
下面我寫了三個函數包括了這三個功能,避免以後重複造輪子。

官方網站
github:https://github.com/hankcs/HanLP
java:http://hanlp.linrunsoft.com/doc/_build/html/util.html

優點:

  • HanLP不僅支持基礎的漢字轉拼音,還支持聲母、韻母、音調、音標和輸入法首字母首聲母功能。
  • HanLP能夠識別多音字,也能給繁體中文注拼音。
  • 最重要的是,HanLP採用的模式匹配升級到 AhoCorasickDoubleArrayTrie,性能大幅提升,能夠提供毫秒級的響應速度!

安裝庫:

pip install pyhanlp 
# -*- encoding=utf-8 -*-


from  pyhanlp import *


# 中文轉拼音
def chiness2pinyin(text):
    """
    :param text: 中文
    :return: 中文轉拼音
    """
    pinyinList=HanLP.convertToPinyinList(text)
    pin=[]
    for each in pinyinList:
        pin.append(each.getPinyinWithoutTone())

    res=' '.join(pin)
    res=str(res).replace('none',' ')

    return res


# 繁體轉簡體
def convertToSimplifiedChinese(text):
    """
    :param text: 繁體文字
    :return: 繁體轉簡體
    """
    return HanLP.convertToSimplifiedChinese(text)


# 簡體轉繁體

def convertToTraditionalChinese(text):
    """
    :param text: 簡體文字
    :return: 簡體轉繁體
    """

    return HanLP.convertToTraditionalChinese(text)



if __name__ == '__main__':
    text="你知道你和星星的區別麼,星星在天上,你在我心裏,我愛你中國!"

    print(chiness2pinyin(text))
    print(convertToSimplifiedChinese(text))
    print(convertToTraditionalChinese(text))

運行結果:

ni zhi dao ni he xing xing de qu bie me   xing xing zai tian shang   ni zai wo xin li   wo ai ni zhong guo  
你知道你和星星的區別麼,星星在天上,你在我心裏,我愛你中國!
你知道你和星星的區別麼,星星在天上,你在我心裏,我愛你中國!

Process finished with exit code 0

java用法:

import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.dictionary.py.Pinyin;
import java.util.List;

public class hanNLP3 {
    public static void main(String[] args) {

        /*拼音轉換*/

        String text = "重載不是重任";
        List<Pinyin> pinyinList = HanLP.convertToPinyinList(text);
        System.out.print("原文,");
        for (char c : text.toCharArray()) {
            System.out.printf("%c,", c);
        }
        System.out.println();

        System.out.print("拼音(數字音調),");
        for (Pinyin pinyin : pinyinList) {
            System.out.printf("%s,", pinyin);
        }
        System.out.println();

        System.out.print("拼音(符號音調),");
        for (Pinyin pinyin : pinyinList) {
            System.out.printf("%s,", pinyin.getPinyinWithToneMark());
        }
        System.out.println();

        System.out.print("拼音(無音調),");
        for (Pinyin pinyin : pinyinList) {
            System.out.printf("%s,", pinyin.getPinyinWithoutTone());
        }
        System.out.println();

        System.out.print("聲調,");
        for (Pinyin pinyin : pinyinList) {
            System.out.printf("%s,", pinyin.getTone());
        }
        System.out.println();

        System.out.print("聲母,");
        for (Pinyin pinyin : pinyinList) {
            System.out.printf("%s,", pinyin.getShengmu());
        }
        System.out.println();

        System.out.print("韻母,");
        for (Pinyin pinyin : pinyinList) {
            System.out.printf("%s,", pinyin.getYunmu());
        }
        System.out.println();

        System.out.print("輸入法頭,");
        for (Pinyin pinyin : pinyinList) {
            System.out.printf("%s,", pinyin.getHead());
        }
        System.out.println();


        /*  簡繁轉換*/

        System.out.println(HanLP.convertToTraditionalChinese("用筆記本電腦寫程序"));
        System.out.println(HanLP.convertToSimplifiedChinese("「以後等妳當上皇后,就能買士多啤梨慶祝了」"));

    }
}

運行結果:

原文,重,載,不,是,重,任,
拼音(數字音調),chong2,zai3,bu2,shi4,zhong4,ren4,
拼音(符號音調),chóng,zǎi,bú,shì,zhòng,rèn,
拼音(無音調),chong,zai,bu,shi,zhong,ren,
聲調,2,3,2,4,4,4,
聲母,ch,z,b,sh,zh,r,
韻母,ong,ai,u,i,ong,en,
輸入法頭,ch,z,b,sh,zh,r,
用筆記本電腦寫程序
“以後等你當上皇后,就能買草莓慶祝了”

Process finished with exit code 0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章