汉语言处理工具pyhanlp的拼音转换与字符正则化
汉字转拼音
HanLP中的汉字转拼音功能也十分的强大。
说明:
l HanLP不仅支持基础的汉字转拼音,还支持声母、韵母、音调、音标和输入法首字母首声母功能。
l HanLP能够识别多音字,也能给繁体中文注拼音。
l 最重要的是,HanLP采用的模式匹配升级到AhoCorasickDoubleArrayTrie,性能大幅提升,能够提供毫秒级的响应速度!
算法详解:
l 《汉字转拼音与简繁转换的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))
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, 已经, 新增, 了, 新增, 自定义, 词典, 之后, ,, 自动, 删除, 快, 取, 的
---------------------
作者:Font Tian
原文:https://blog.csdn.net/FontThrone/article/details/82828779
汉语言处理工具pyhanlp的拼音转换与字符正则化的更多相关文章
- pyhanlp 繁简转换之拼音转换与字符正则化
繁简转换 HanLP几乎实现了所有我们需要的繁简转换方式,并且已经封装到了HanLP中,使得我们可以轻松的使用,而分词器中已经默认支持多种繁简格式或者混合.这里我们不再做过多描述. ·说明 · Han ...
- 汉语言处理工具pyhanlp的简繁转换
繁简转换 HanLP几乎实现了所有我们需要的繁简转换方式,并且已经封装到了HanLP中,使得我们可以轻松的使用,而分词器中已经默认支持多种繁简格式或者混合.这里我们不再做过多描述. 说明: ·Ha ...
- java 支持分词的高性能拼音转换工具,速度是 pinyin4j 的两倍
pinyin pinyin 是 java 实现的高性能中文拼音转换工具. 变更日志 创作目的 想为 java 设计一款便捷易用的拼音工具. 如何为 java 设计一款高性能的拼音转换工具 pinyin ...
- 使用Python的http.server实现一个简易的Web Api对外提供HanLP拼音转换服务
由于采集省市区镇数据需要对地名进行拼音转换,由于第三方高准确度接口对IP进行了限制,处理大量数据变得异常缓慢. 使用了一个折中的办法,省市区 3级(3千+)用高准确度接口(几乎没有拼错的地名),镇级( ...
- Python分词工具——pyhanlp
本文为本人学习pyhanlp的笔记,大多知识点来源于GitHubhttps://github.com/hankcs/HanLP/blob/master/README.md,文中的demo代码来源于该G ...
- Java-汉字繁体拼音转换
import com.github.stuxuhai.jpinyin.ChineseHelper; import com.github.stuxuhai.jpinyin.PinyinFormat; i ...
- C#拼音转换,将简体中文转换成拼音
1. 要进行拼音转换操作,首先要引入几个文件,也就是用于操作拼音转换的文件,就是微软提供给开发者的一个类库 Microsoft Visual Studio International Pack 1.0 ...
- 使用命令行工具将Android应用转换成BlackBerry PlayBook应用
昨天写了篇文章关于Android应用转换的,通过BlackBerry的在线转换工具将Android应用转换成BlackBerry PlayBook应用.有网友反映说方法有点麻烦,所以今天补上新的转换方 ...
- OC1_汉字拼音转换 练习
// // WordManager.h // OC1_汉字拼音转换 // // Created by zhangxueming on 15/4/27. // Copyright (c) 2015年 z ...
随机推荐
- hdoj5754
题意:略 国王和骑士用记忆搜索,注意骑士的移动是x-2,y-1或x-1,y-2.车是NIM博弈,后是威佐夫博弈.注意威佐夫博弈中两堆石子有大小之分,而输入不一定小在前. #include <io ...
- POJ-3294 Life Forms n个字符串中出现超过n/2次的最长子串(按字典序依次输出)
按照以前两个字符串找两者的最长公共子串的思路类似,可以把所有串拼接到一起,这里为了避免讨论LCP跨越多个串需需要特别处理的问题用不同的字符把所有串隔开(因为char只有128位,和可能不够用,更推荐设 ...
- Github如何创建|删除仓库
一.创建 1.1.点击官网(https://github.com/),注册并登陆后点击Start a project或者点击网页右上角的加号选择New repository 1.2.网址自动变更为ht ...
- 转载 [c#] 虚函数(Virtual),抽象函数(abstract)和接口的区别
1.virtual:允许被重写,但不强制要求.声明时提供其自身实现: 2.abstract:强制要求其继承者重写.声明时不提供其自身的实现,抽象类不能被实例化: 3.interface:接口就是协议, ...
- Win10系列:C#应用控件基础9
TextBox控件 在前文中已经或多或少的接触到过TextBox控件.TextBox控件是一种常用的,也是比较容易掌握的文本编辑控件,它不仅可以接收输入的数据,还可以像TextBlock控件(Text ...
- NAT资料
第1章 NAT 1.1 NAT概述 1990年代中期,NAT是作为一种解决IPv4地址短缺以避免保留IP地址困难的方案而流行起来的.网络地址转换在很多国家都有很广泛的使用.所以NAT就成了家庭和小型办 ...
- Unity调试模式设置辅助线是否可见
1.新建变量 //调试的标识(状态开关) public bool m_debug = true; 2.在画线方法中写 //如果非调试状态,则不再输出网格和立方体 if (!m_debug) { ret ...
- Java正则表达式易错题
以下代码将打印出 public static void main (String[] args) { String classFile = "com.jd.". replaceAl ...
- Java基础-方法
方法 Java方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 注意: 在一些其它语言中方法指过程和函数.一个 ...
- 字符串format拼接格式化
# ###字符串的格式化 format"""(1)顺序传参(2)索引传参(3)关键字传参(4)容器类型传参(列表和元组) {} 相当于占位符""&qu ...