pyhanlp 繁簡轉換,拼音轉換與字符正則化

繁簡轉換

HanLP幾乎實現(xiàn)了所有我們需要的繁簡轉換方式,并且已經(jīng)封裝到了HanLP中,使得我們可以輕松的使用,而分詞器中已經(jīng)默認支持多種繁簡格式或者混合。這里我們不再做過多描述。

說明

HanLP能夠識別簡繁分歧詞,比如打印機=印表機。許多簡繁轉換工具不能區(qū)分“以后”“皇后”中的兩個“后”字,HanLP可以。

算法詳解

《漢字轉拼音與簡繁轉換的Java實現(xiàn)》

from pyhanlp import *

# 繁簡轉化

print(HanLP.convertToTraditionalChinese("“以后等你當上皇后,就能買草莓慶祝了”。發(fā)現(xiàn)一根白頭發(fā)"))

print(HanLP.convertToSimplifiedChinese("憑藉筆記簿型電腦寫程式HanLP"))

# 簡體轉臺灣繁體

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

# 臺灣繁體轉簡體

print(HanLP.tw2s("hankcs在臺灣寫程式碼"))

# 簡體轉香港繁體

print(HanLP.s2hk("hankcs在香港寫代碼"))

# 香港繁體轉簡體

print(HanLP.hk2s("hankcs在香港寫代碼"))

# 香港繁體轉臺灣繁體

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

# 臺灣繁體轉香港繁體

print(HanLP.tw2hk("hankcs在香港寫程式碼"))

# 香港/臺灣繁體和HanLP標準繁體的互轉

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

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

print(HanLP.tw2t("hankcs在臺灣寫程式碼"))

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


「以後等你當上皇后,就能買草莓慶祝了」。發(fā)現(xiàn)一根白頭髮

憑借筆記本電腦寫程序HanLP

hankcs在臺灣寫程式碼

hankcs在臺灣寫代碼

hankcs在香港寫代碼

hankcs在香港寫代碼

hankcs在臺灣寫程式碼

hankcs在香港寫代碼

hankcs在臺灣寫程式碼

hankcs在臺灣寫代碼

hankcs在臺灣寫代碼

hankcs在臺灣寫代碼


漢字轉拼音

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

說明

HanLP不僅支持基礎的漢字轉拼音,還支持聲母、韻母、音調(diào)、音標和輸入法首字母首聲母功能。

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

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

算法詳解

《漢字轉拼音與簡繁轉換的Java實現(xiàn)》

# 漢字轉拼音

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

text = "重載不是重任!"

pinyin_list = HanLP.convertToPinyinList(text)

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

print(text)

print("拼音(數(shù)字音調(diào)),", end=" ")

print(pinyin_list)

print("拼音(符號音調(diào)),", end=" ")

for pinyin in pinyin_list:

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

print("\n拼音(無音調(diào)),", end=" ")

for pinyin in pinyin_list:

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

print("\n聲調(diào),", end=" ")

for pinyin in pinyin_list:

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

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

for pinyin in pinyin_list:

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

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

for pinyin in pinyin_list:

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

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

for pinyin in pinyin_list:

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

print()

# 拼音轉換可選保留無拼音的原字符

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

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


原文, 重載不是重任!

拼音(數(shù)字音調(diào)), [chong2, zai3, bu2, shi4, zhong4, ren4, none5]

拼音(符號音調(diào)), chóng, zǎi, bú, shì, zhòng, rèn, none,

拼音(無音調(diào)), chong, zai, bu, shi, zhong, ren, none,

聲調(diào), 2, 3, 2, 4, 4, 4, 5,

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

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

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

jie zhi none none none none nian none

jie zhi 2 0 1 2 nian ,


拼音轉中文

HanLP中的數(shù)據(jù)結構和接口是靈活的,組合這些接口,可以自己創(chuàng)造新功能,我們可以使用AhoCorasickDoubleArrayTrie實現(xiàn)的最長分詞器,需要用戶調(diào)用setTrie()提供一個AhoCorasickDoubleArrayTrie

StringDictionary = JClass(

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

CommonAhoCorasickDoubleArrayTrieSegment = JClass(

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

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

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

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

dictionary = StringDictionary()

dictionary.load(Config.PinyinDictionaryPath)

entry = {}

m_map = TreeMap()

for entry in dictionary.entrySet():

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

? ? words = m_map.get(pinyins)

? ? if words is None:

? ? ? ? words = TreeSet()

? ? ? ? m_map.put(pinyins, words)

? ? words.add(entry.getKey())

words = TreeSet()

words.add("綠色")

words.add("濾色")

m_map.put("lvse", words)

segment = CommonAhoCorasickDoubleArrayTrieSegment(m_map)

print(segment.segment("renmenrenweiyalujiangbujianlvse"))

print(segment.segment("lvsehaihaodajiadongxidayinji"))


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

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


字符正則化

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

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

切換配置后必須刪除CustomDictionary.txt.bin緩存,否則只影響動態(tài)插入的新詞。

在我動筆前一個星期,已經(jīng)有同學添加了,添加自定義詞典之后,自動刪除緩存的功能。地址請點擊https://github.com/hankcs/HanLP/pull/954,現(xiàn)在只需要開啟正則化即可

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

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

HanLP.Config.Normalization = False

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

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

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

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

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

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

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

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

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

HanLP.Config.Normalization = True

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

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

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

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

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

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

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

HanLP.Config.ShowTermNature = False

text = HanLP.s2tw("現(xiàn)在的HanLP已經(jīng)添加了添加自定義詞典之后,自動刪除緩存的功能,現(xiàn)在只需要開啟正則化即可")

print(text)

print(HanLP.segment(text))

HanLP.Config.ShowTermNature = False


HanLP.Config.Normalization = False

[愛聽4g]

[愛聽4G]

[愛, 聽, 4, G]

[愛, 聽, 4, G]

[愛, 聽, 4, G]

[喜歡, 4, G]

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

HanLP.Config.Normalization = True

[愛聽4g]

[愛聽4g]

[愛聽4g]

[愛聽4g]

[愛聽4g]

[喜歡, 4, g]

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

現(xiàn)在的HanLP已經(jīng)新增了新增自定義詞典之後,自動刪除快取的功能,現(xiàn)在只需要開啟正則化即可

[現(xiàn)在, 的, hanlp, 已經(jīng), 新增, 了, 新增, 自定義, 詞典, 之后, ,, 自動, 刪除, 快, 取, 的, 功能, ,, 現(xiàn)在, 只, 需要, 開啟, 正, 則, 化, 即可]




文章來源于Font Tian的博客

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,125評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,506評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,402評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,934評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,168評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,690評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,596評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,027評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,398評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,743評論 2 370

推薦閱讀更多精彩內(nèi)容