漢語言處理工具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分詞詞性標註
- js漢字轉換為拼音功能JS
- php 漢字轉換成拼音 程式PHP
- xpinyin:漢字轉換為拼音庫
- 文字相似度 HanPL漢語言處理
- oracle 外部表 漢字轉換為拼音Oracle
- 《NLP漢語自然語言處理原理與實踐》學習四自然語言處理
- Java語言中字元的處理 (轉)Java字元
- 正則替換 修改字元 去除空格字元
- 利用正則批次替換指定字元字元
- iOS漢字轉拼音的方法iOS
- R語言資料處理(二)字元分隔R語言字元
- Python自然語言處理 1 語言處理與PythonPython自然語言處理
- 漢字轉拼音pl/sqlSQL
- 漢語言處理包HanLP1.6.4釋出,優化新詞發現HanLP優化
- 使用 pymysql 的時候如何正確的處理轉義字元MySql字元
- js將漢字轉換為拼音程式碼例項JS
- R語言歸一化處理R語言
- C#中漢字轉拼音C#
- JavaScript 漢字與拼音互轉終極方案 附JS拼音輸入法JavaScriptJS
- Java下將漢字轉換為拼音的包pinyin4jJava
- 漢語拼音密碼安全性密碼
- NLP 與 NLU:從語言理解到語言處理
- Java處理正則匹配卡死(正則回溯問題)Java
- 自然語言處理與分析(one)自然語言處理
- Python 漢字轉拼音的庫--- PyPinyinPython
- 正則-元字元字元
- 12 種自然語言處理的開源工具自然語言處理開源工具
- Swift 語言的字串與字元Swift字串字元
- 自然語言處理歷史史詩:NLP的正規化演變與Python全實現自然語言處理Python
- Reactive設計語言與正規化React
- 使用微軟的多語言工具包進行網站簡體與繁體的互轉和得到漢字、拼音、筆畫等相關資訊微軟網站
- php 的字元編碼轉換工具 (轉)PHP字元