漢語言處理工具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, 在, 臺, 灣寫, 代, 碼]
10.
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, 已經, 新增, 了, 新增, 自定義, 詞典, 之後, ,, 自動, 刪除, 快, 取, 的
---------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524777/viewspace-2639721/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- pyhanlp 繁簡轉換之拼音轉換與字元正則化HanLP字元
- 漢語言處理工具pyhanlp的簡繁轉換HanLP
- 漢字轉漢語拼音
- JS 漢字轉換拼音JS
- C#漢字轉漢語拼音C#
- Pyhanlp自然語言處理中的新詞識別HanLP自然語言處理
- 自然語言處理工具pyhanlp分詞與詞性標註自然語言處理HanLP分詞詞性標註
- xpinyin:漢字轉換為拼音庫
- 文字相似度 HanPL漢語言處理
- 《NLP漢語自然語言處理原理與實踐》學習四自然語言處理
- 正則替換 修改字元 去除空格字元
- 使用 pymysql 的時候如何正確的處理轉義字元MySql字元
- Python 漢字轉拼音的庫--- PyPinyinPython
- Golang語言包-字串處理strings和字串型別轉換strconvGolang字串型別
- 自然語言處理歷史史詩:NLP的正規化演變與Python全實現自然語言處理Python
- 漢語言處理包HanLP1.6.4釋出,優化新詞發現HanLP優化
- C#中漢字轉拼音C#
- NLP 與 NLU:從語言理解到語言處理
- 12 種自然語言處理的開源工具自然語言處理開源工具
- 正則-元字元字元
- Java處理正則匹配卡死(正則回溯問題)Java
- 使用正則 轉換大小寫
- Java SimpleDateFormat處理日期與字串的轉換JavaORM字串
- 探索自然語言處理:語言模型的發展與應用自然語言處理模型
- 處理日期和時區轉換:為什麼正確的 UTC 轉換很重要
- ptyon 特殊處理 url 編碼與解碼,字元編碼轉化 unicode字元Unicode
- 【scikit-learn基礎】--『預處理』之 正則化
- 自然語言處理與情緒智慧自然語言處理
- Python 編碼轉換與中文處理Python
- lua自動化指令碼關於文字讀寫和特殊不可見字元轉換的處理指令碼字元
- C語言進位制轉換與列印C語言
- PHP 字元轉拼音首字iconv 警告錯誤PHP字元
- Python-網頁轉義字元及正則全文匹配Python網頁字元
- 正則匹配指定字元之前的字串字元字串
- Hanlp漢字轉拼音使用python呼叫詳解HanLPPython
- C 語言整數與字串的相互轉換介紹字串
- Oracle sql 語句中帶有特殊的字元處理OracleSQL字元
- [譯] 最詳細的 CSS 字元轉義處理CSS字元