汉语言处理工具pyhanlp的拼音转换与字符正则化

简介: 汉字转拼音HanLP中的汉字转拼音功能也十分的强大。说明:l HanLP不仅支持基础的汉字转拼音,还支持声母、韵母、音调、音标和输入法首字母首声母功能。l HanLP能够识别多音字,也能给繁体中文注拼音。

汉字转拼音

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, 已经, 新增, 了, 新增, 自定义, 词典, 之后, ,, 自动, 删除, 快, 取, 的


 

相关文章
|
6月前
|
搜索推荐 JavaScript Java
计算机毕业设计 图书管理系统 Vue+SpringBoot+MySQL(一)
计算机毕业设计 图书管理系统 Vue+SpringBoot+MySQL
|
Python
Pycharm一直卡在connecting to console的解决办法[图文步骤]
之前因为重新装了电脑系统导致有些开发软件因为不是安装在C盘的,所以没有卸载但有些环境被改变了,所以使用不正常,今天在使用pycharm的时候,打开出现了connecting to console,并且一直卡在这里
1895 0
Pycharm一直卡在connecting to console的解决办法[图文步骤]
|
8月前
|
自然语言处理 数据可视化 API
ESRE 系列(二):如何部署自然语言处理 (NLP):命名实体识别 (NER) 示例
本文采用示例讲解的方式,介绍使用一个命名实体识别 (NER) NLP 模型来定位和提取非结构化文本字段中预定义类别的实体。我们将通过一个公开可用的模型向您展示如何完成以下几种操作:部署模型到 Elasticsearch 中,利用 new _infer API 查找文本中的命名实体,以及在 Ingest 管道中使用 NER 模型,在文档被采集到 Elasticsearch 中时提取实体。
17995 12
ESRE 系列(二):如何部署自然语言处理 (NLP):命名实体识别 (NER) 示例
|
11月前
|
JSON 数据格式 Docker
07-Registry搭建docker私仓
07-Registry搭建docker私仓
|
机器学习/深度学习 算法 搜索推荐
机器学习--模型评估、过拟合和欠拟合、模型验证
机器学习--模型评估、过拟合和欠拟合、模型验证
29453 2
机器学习--模型评估、过拟合和欠拟合、模型验证
|
XML 数据格式 Python
Python GUI编程:如何运行第一个PySide2的窗体程序
上一章节介绍了PySide2的安装以及如何去启动程序进行页面设计,并且将工具集成到pycharm的扩展工具中去,有2个地方写的不对,用的是pyuic工具,需要改一下,改成pyside2-uic.exe。
Python GUI编程:如何运行第一个PySide2的窗体程序
|
自然语言处理 Java API
ES索引重建reindex详解
ES索引重建reindex详解
1519 0
|
编译器 Linux Windows
NSIS安装包开发笔记(一):NSIS介绍、使用NSIS默认向导脚本制作Windows安装包
NSIS安装包开发笔记(一):NSIS介绍、使用NSIS默认向导脚本制作Windows安装包
NSIS安装包开发笔记(一):NSIS介绍、使用NSIS默认向导脚本制作Windows安装包
|
Web App开发 数据采集 存储
Python网络爬虫实战-抓取百合网真实相亲数据
百合网是一个相亲网站,里面拥有一些真实的妹子数据,如何抓取该网站的数据内容呢,接下来随我一探糗竟吧!
Python网络爬虫实战-抓取百合网真实相亲数据