pyhanlp 繁简转换,拼音转换与字符正则化

繁简转换

HanLP几乎实现了所有我们需要的繁简转换方式,并且已经封装到了HanLP中,使得我们可以轻松的使用,而分词器中已经默认支持多种繁简格式或者混合。这里我们不再做过多描述。

说明

HanLP能够识别简繁分歧词,比如打印机=印表機。许多简繁转换工具不能区分“以后”“皇后”中的两个“后”字,HanLP可以。

算法详解

《汉字转拼音与简繁转换的Java实现》

from pyhanlp import *

# 繁简转化

print(HanLP.convertToTraditionalChinese("“以后等你当上皇后,就能买草莓庆祝了”。发现一根白头发"))

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在台灣寫代碼"))


「以後等你當上皇后,就能買草莓慶祝了」。發現一根白頭髮

凭借笔记本电脑写程序HanLP

hankcs在臺灣寫程式碼

hankcs在台湾写代码

hankcs在香港寫代碼

hankcs在香港写代码

hankcs在臺灣寫程式碼

hankcs在香港寫代碼

hankcs在臺灣寫程式碼

hankcs在台灣寫代碼

hankcs在臺灣寫代碼

hankcs在臺灣寫代碼


汉字转拼音

HanLP中的汉字转拼音功能也十分的强大。

说明

HanLP不仅支持基础的汉字转拼音,还支持声母、韵母、音调、音标和输入法首字母首声母功能。

HanLP能够识别多音字,也能给繁体中文注拼音。

最重要的是,HanLP采用的模式匹配升级到AhoCorasickDoubleArrayTrie,性能大幅提升,能够提供毫秒级的响应速度!

算法详解

《汉字转拼音与简繁转换的Java实现》

# 汉字转拼音

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

text = "重载不是重任!"

pinyin_list = HanLP.convertToPinyinList(text)

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

print(text)

print("拼音(数字音调),", end=" ")

print(pinyin_list)

print("拼音(符号音调),", end=" ")

for pinyin in pinyin_list:

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

print("\n拼音(无音调),", end=" ")

for pinyin in pinyin_list:

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

print("\n声调,", 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))


原文, 重载不是重任!

拼音(数字音调), [chong2, zai3, bu2, shi4, zhong4, ren4, none5]

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

拼音(无音调), chong, zai, bu, shi, zhong, ren, none,

声调, 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中的数据结构和接口是灵活的,组合这些接口,可以自己创造新功能,我们可以使用AhoCorasickDoubleArrayTrie实现的最长分词器,需要用户调用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]


字符正则化

演示正规化字符配置项的效果(繁体->简体,全角->半角,大写->小写)。

该配置项位于hanlp.properties中,通过Normalization=true来开启(现在直接通过HanLP.Config.Normalization开启即可)。

切换配置后必须删除CustomDictionary.txt.bin缓存,否则只影响动态插入的新词。

在我动笔前一个星期,已经有同学添加了,添加自定义词典之后,自动删除缓存的功能。地址请点击https://github.com/hankcs/HanLP/pull/954,现在只需要开启正则化即可

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("现在的HanLP已经添加了添加自定义词典之后,自动删除缓存的功能,现在只需要开启正则化即可")

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, 在, 台湾, 写, 代码]

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

[现在, 的, hanlp, 已经, 新增, 了, 新增, 自定义, 词典, 之后, ,, 自动, 删除, 快, 取, 的, 功能, ,, 现在, 只, 需要, 开启, 正, 则, 化, 即可]




文章来源于Font Tian的博客

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容