汉字转拼音

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)
  1. print("原文,", end=" ")
  2. print(text)
  3. print("拼音(数字音调),", end=" ")
  4. print(pinyin_list)
  5. print("拼音(符号音调),", end=" ")
  6. for pinyin in pinyin_list:
  7. print("%s," % pinyin.getPinyinWithToneMark(), end=" ")
  8. print("\n拼音(无音调),", end=" ")
  9. for pinyin in pinyin_list:
  10. print("%s," % pinyin.getPinyinWithoutTone(), end=" ")
  11. print("\n声调,", end=" ")
  12. for pinyin in pinyin_list:
  13. print("%s," % pinyin.getTone(), end=" ")
  14. print("\n声母,", end=" ")
  15. for pinyin in pinyin_list:
  16. print("%s," % pinyin.getShengmu(), end=" ")
  17. print("\n韵母,", end=" ")
  18. for pinyin in pinyin_list:
  19. print("%s," % pinyin.getYunmu(), end=" ")
  20. print("\n输入法头,", end=" ")
  21. for pinyin in pinyin_list:
  22. print("%s," % pinyin.getHead(), end=" ")
  1. print()
  2. # 拼音转换可选保留无拼音的原字符
  3. print(HanLP.convertToPinyinString("截至2012年,", " ", True))
  4. 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的拼音转换与字符正则化的更多相关文章

  1. pyhanlp 繁简转换之拼音转换与字符正则化

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

  2. 汉语言处理工具pyhanlp的简繁转换

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

  3. java 支持分词的高性能拼音转换工具,速度是 pinyin4j 的两倍

    pinyin pinyin 是 java 实现的高性能中文拼音转换工具. 变更日志 创作目的 想为 java 设计一款便捷易用的拼音工具. 如何为 java 设计一款高性能的拼音转换工具 pinyin ...

  4. 使用Python的http.server实现一个简易的Web Api对外提供HanLP拼音转换服务

    由于采集省市区镇数据需要对地名进行拼音转换,由于第三方高准确度接口对IP进行了限制,处理大量数据变得异常缓慢. 使用了一个折中的办法,省市区 3级(3千+)用高准确度接口(几乎没有拼错的地名),镇级( ...

  5. Python分词工具——pyhanlp

    本文为本人学习pyhanlp的笔记,大多知识点来源于GitHubhttps://github.com/hankcs/HanLP/blob/master/README.md,文中的demo代码来源于该G ...

  6. Java-汉字繁体拼音转换

    import com.github.stuxuhai.jpinyin.ChineseHelper; import com.github.stuxuhai.jpinyin.PinyinFormat; i ...

  7. C#拼音转换,将简体中文转换成拼音

    1. 要进行拼音转换操作,首先要引入几个文件,也就是用于操作拼音转换的文件,就是微软提供给开发者的一个类库 Microsoft Visual Studio International Pack 1.0 ...

  8. 使用命令行工具将Android应用转换成BlackBerry PlayBook应用

    昨天写了篇文章关于Android应用转换的,通过BlackBerry的在线转换工具将Android应用转换成BlackBerry PlayBook应用.有网友反映说方法有点麻烦,所以今天补上新的转换方 ...

  9. OC1_汉字拼音转换 练习

    // // WordManager.h // OC1_汉字拼音转换 // // Created by zhangxueming on 15/4/27. // Copyright (c) 2015年 z ...

随机推荐

  1. 【文献07】基于MPC的WMR点镇定-极坐标系下和轨迹跟踪

    参考: Kuhne F , Lages W , Silva J D . Point stabilization of mobile robots with nonlinear model predic ...

  2. 文件上传下载显示进度(vue)

    编写了一个vue组件,可以实时显示文件上传和下载时候的进度 <template> <div v-show="circleProgress_wrapper_panel_sta ...

  3. ranch 源码分析(二)

    接上ranch 源码分析(一) 上次讲到了ranch.erl的start_listener函数,下面我们详细分析下这个函数 -module(ranch). %...... 省略若干行 -spec st ...

  4. 小程序组件 scroll-view 滑动

    小程序组件 scroll-view 中分别有上下竖向滑动和左右横向滑动之分,在这次项目中刚好需要用到横向滑动,但在测试过程中发现横向滑动没有了效果(静止在那里没移动过),经调试发现: 1.scroll ...

  5. django1

    * <pre>━━━━━━神兽出没━━━━━━ * ┏┓ ┏┓ * ┏┛┻━━━┛┻┓ * ┃ 王 ┃ * ┃   ┃ * ┃ ┳┛ ┗┳ ┃ * ┃ ┃ * ┃ ┻ ┃ * ┃ ┃ * ...

  6. coursera-斯坦福-机器学习-吴恩达-笔记week2

    1 多元线性回归 1.1 假设函数 多元线性回归是指有多个特征特征变量的情况.此时我们修改假设函数hθ(x)=θ0+θ1∗x为hθ(x)=θ0+θ1x1+θ2x2+⋯+θnxn.设x0=1,x为特征向 ...

  7. JavaScript原型与闭包相关

    1什么是对象 js中的值分为引用值和原始值 原始值:undefined  null  Boolean  string  number  原始值无法更改 存放在栈中 引用值:Array  Object  ...

  8. phython安装

    点击   https://www.python.org/downloads/ 下载合适的Python版本 下载获取到:python-x.x.x.msi安装包,我们双击python-x.x.x.msi即 ...

  9. python面向对象基本概念(OOP)

    面向对象(OOP)基本概念 面向对象编程 —— Object Oriented Programming 简写 OOP 目标 了解 面向对象 基本概念 01. 面向对象基本概念 我们之前学习的编程方式就 ...

  10. .Net Core 控制台程序生产exe

    打开csproj ,添加一行 <RuntimeIdentifier>win10-x64</RuntimeIdentifier> 具体如下: <Project Sdk=&q ...