天天看點

漢語言處理工具pyhanlp的拼音轉換與字元正則化

漢字轉拼音

HanLP中的漢字轉拼音功能也十分的強大。

說明

l HanLP不僅支援基礎的漢字轉拼音,還支援聲母、韻母、音調、音标和輸入法首字母首聲母功能。

l HanLP能夠識别多音字,也能給繁體中文注拼音。

l 最重要的是,HanLP采用的模式比對更新到AhoCorasickDoubleArrayTrie,性能大幅提升,能夠提供毫秒級的響應速度!

算法詳解

l 《漢字轉拼音與簡繁轉換的Java實作》

1. # 漢字轉拼音

2. Pinyin = JClass("com.hankcs.hanlp.dictionary.py.Pinyin")

3. text = "重載不是重任!"

4. pinyin_list = HanLP.convertToPinyinList(text)

5. print("原文,", end=" ")

6. print(text)

7. print("拼音(數字音調),", end=" ")

8. print(pinyin_list)

9. print("拼音(符号音調),", end=" ")

10. for pinyin in pinyin_list:

11. print("%s," % pinyin.getPinyinWithToneMark(), end=" ")

12. print("\n拼音(無音調),", end=" ")

13. for pinyin in pinyin_list:

14. print("%s," % pinyin.getPinyinWithoutTone(), end=" ")

15. print("\n聲調,", end=" ")

16. for pinyin in pinyin_list:

17. print("%s," % pinyin.getTone(), end=" ")

18. print("\n聲母,", end=" ")

19. for pinyin in pinyin_list:

20. print("%s," % pinyin.getShengmu(), end=" ")

21. print("\n韻母,", end=" ")

22. for pinyin in pinyin_list:

23. print("%s," % pinyin.getYunmu(), end=" ")

24. print("\n輸入法頭,", end=" ")

25. for pinyin in pinyin_list:

26. print("%s," % pinyin.getHead(), end=" ")

27. print()

28. # 拼音轉換可選保留無拼音的原字元

29. print(HanLP.convertToPinyinString("截至2012年,", " ", True))

30. print(HanLP.convertToPinyinString("截至2012年,", " ", False))

1.原文, 重載不是重任!

2.拼音(數字音調), [chong2, zai3, bu2, shi4, zhong4, ren4, none5]

3.拼音(符号音調), chóng, zǎi, bú, shì, zhòng, rèn, none,

4.拼音(無音調), chong, zai, bu, shi, zhong, ren, none,

5.聲調, 2, 3, 2, 4, 4, 4, 5,

6.聲母, ch, z, b, sh, zh, r, none,

7.韻母, ong, ai, u, i, ong, en, none,

8.輸入法頭, ch, z, b, sh, zh, r, none,

9.jie zhi none none none none nian none

10.jie zhi 2 0 1 2 nian ,

拼音轉中文

HanLP中的資料結構和接口是靈活的,組合這些接口,可以自己創造新功能,我們可以使用AhoCorasickDoubleArrayTrie實作的最長分詞器,需要使用者調用setTrie()提供一個AhoCorasickDoubleArrayTrie

1.StringDictionary = JClass(

2."com.hankcs.hanlp.corpus.dictionary.StringDictionary")

3.CommonAhoCorasickDoubleArrayTrieSegment = JClass(

4."com.hankcs.hanlp.seg.Other.CommonAhoCorasickDoubleArrayTrieSegment")

5.Config = JClass("com.hankcs.hanlp.HanLP$Config")

6.

7.TreeMap = JClass("java.util.TreeMap")

8.TreeSet = JClass("java.util.TreeSet")

9.

10.dictionary = StringDictionary()

11.dictionary.load(Config.PinyinDictionaryPath)

12.entry = {}

13.m_map = TreeMap()

14.for entry in dictionary.entrySet():

15.pinyins = entry.getValue().replace("[\\d,]", "")

16.words = m_map.get(pinyins)

17.if words is None:

18.words = TreeSet()

19.m_map.put(pinyins, words)

20.words.add(entry.getKey())

21.words = TreeSet()

22.words.add("綠色")

23.words.add("濾色")

24.m_map.put("lvse", words)

25.

26.segment = CommonAhoCorasickDoubleArrayTrieSegment(m_map)

27.print(segment.segment("renmenrenweiyalujiangbujianlvse"))

28.print(segment.segment("lvsehaihaodajiadongxidayinji"))

1.[renmenrenweiyalujiangbujian/null, lvse/[濾色, 綠色]]

2.[lvse/[濾色, 綠色], haihaodajiadongxidayinji/null]

字元正則化

示範正規化字元配置項的效果(繁體->簡體,全角->半角,大寫->小寫)。

該配置項位于hanlp.properties中,通過Normalization=true來開啟(現在直接通過HanLP.Config.Normalization開啟即可)。

切換配置後必須删除CustomDictionary.txt.bin緩存,否則隻影響動态插入的新詞。

在我動筆前一個星期,已經有同學添加了,添加自定義詞典之後,自動删除緩存的功能。位址請參閱github.com/hankcs/HanLP/pull/954,現在隻需要開啟正則化即可

1.CustomDictionary =JClass("com.hankcs.hanlp.dictionary.CustomDictionary")

2.print("HanLP.Config.Normalization = False\n")

3.HanLP.Config.Normalization = False

4.CustomDictionary.insert("愛聽4G", "nz 1000")

5.print(HanLP.segment("愛聽4g"))

6.print(HanLP.segment("愛聽4G"))

7.print(HanLP.segment("愛聽4G"))

8.print(HanLP.segment("愛聽4G"))

9.print(HanLP.segment("愛聽4G"))

10.

11.print(HanLP.segment("喜歡4G"))

12.print(HanLP.segment("hankcs在臺灣寫代碼"))

13.

14.print("\nHanLP.Config.Normalization = True\n")

15.HanLP.Config.Normalization = True

16.print(HanLP.segment("愛聽4g"))

17.print(HanLP.segment("愛聽4G"))

18.print(HanLP.segment("愛聽4G"))

19.print(HanLP.segment("愛聽4G"))

20.print(HanLP.segment("愛聽4G"))

21.

22.print(HanLP.segment("喜歡4G"))

23.print(HanLP.segment("hankcs在臺灣寫代碼"))

24.

25.HanLP.Config.ShowTermNature = False

27.text = HanLP.s2tw("現在的HanLP已經添加了添加自定義詞典之後,自動删除緩存的功能,現在隻需要開啟正則化即可")

28.print(text)

29.print(HanLP.segment(text))

30.HanLP.Config.ShowTermNature = False

1.HanLP.Config.Normalization = False

2.

3.[愛聽4g]

4.[愛聽4G]

5.[愛, 聽, 4, G]

6.[愛, 聽, 4, G]

7.[愛, 聽, 4, G]

8.[喜歡, 4, G]

9.[hankcs, 在, 臺, 灣寫, 代, 碼]

11.HanLP.Config.Normalization = True

12.

13.[愛聽4g]

14.[愛聽4g]

15.[愛聽4g]

16.[愛聽4g]

17.[愛聽4g]

18.[喜歡, 4, g]

19.[hankcs, 在, 台灣, 寫, 代碼]

20.現在的HanLP已經新增了新增自定義詞典之後,自動刪除快取的功能,現在隻需要開啟正則化即可

21.[現在, 的, hanlp, 已經, 新增, 了, 新增, 自定義, 詞典, 之後, ,, 自動, 删除, 快, 取, 的