基于词库的汉字转拼音

词库中既要包含每个字的拼音,也要包含常用单词/短语的读音。有些字是多音字,所以至少要保存其最常用的读音,不常用的读音多出现在单词/短语里。

好了,词库准备好了,现在手头有一句话要转换要转换为拼音,这句话是:

你好世界杯

我们的词库是这样子的:

你:nǐ

好:hǎo,hào

世:shì

界:jiè

杯:bēi

世界:shì,jiè

你好:nǐ,hǎo

苦尽甘来:kǔ,jìn,gān,lái

词库中最长的词苦尽甘来包含4个字。所以你好世界杯从4个字开始匹配:

判断你好世界是否在词库中,不在;

判断你好世是否在词库中,不在;

判断你好是否在词库中,在,得到nǐ,hǎo;

判断世界杯是否在词库中,不在;

判断世界是否在词库中,在,得到shì,jiè;

判断杯是否在词库中,在,得到bēi;

于是你好世界杯被转换为nǐ,hǎo,shì,jiè,bēi。

基于词库和分词工具的汉字转拼音

纯粹的基于词库的方法在实际的使用中会遇到问题,例如提出了解决方案这句话中了解会被当作一个单词,所以会得到错误的结果:

tí,chū,liǎo,jiě,jué,fāng,àn

更好的方法是先进行分词得到:

提出

解决

方案

然后基于词库对每个结果分别处理。

基于HMM的拼音转汉字

这里的拼音一般不带声调。

将汉字作为隐藏状态,拼音作为观测值,使用viterbi算法可以将多个拼音转换成合理的汉字。例如给出ti,chu,le,jie,jue,fang,an,viterbi算法会认为提出了解决方案是最合理的状态序列。

HMM需要三个分布,分别是:

初始时各个状态的概率分布

各个状态互相转换的概率分布

状态到观测值的概率分布

这个3个分布就是三个矩阵,根据一些文本库统计出来即可。

viterbi算法基于动态规划,维基百科 - Viterbi algorithm给出了很好的解释和示例。

基于词库的拼音转汉字

原则:

词的权重大于字的权重;

转换中匹配的词越多,权重越小。

词库的格式是:

拼音:单词:权重

例如:

ni:你:0.15

ni:泥:0.12

a:啊:0.18

hao:好:0.14

nihao:你好:0.6

假如输入是ni,hao,a,我们计算一下各种组合的权重:

组合

权重

你,好,啊

0.15*0.14*0.18 = 0.00378

泥,好,啊

0.12*0.14*0.18 = 0.003024

你好,啊

0.6*0.18 = 0.108

可以看出,你好,啊是最好的结果。

实际实现中需要用到动态规划, 和求有向无环图中两点之间最短距离类似。

代码实现

java 中文分词转拼音_如何实现拼音与汉字的互相转换相关推荐

  1. 开源 Java 中文分词器 Ansj 作者孙健专访

    Ansj 是一个开源的 Java 中文分词工具,基于中科院的 ictclas 中文分词算法,比其他常用的开源分词工具(如mmseg4j)的分词准确率更高. 在线演示: http://ansj.sdap ...

  2. Java中文分词组件 - word分词(skycto JEEditor)

    转自:https://my.oschina.net/apdplat/blog/228619#OSC_h4_8 Java分布式中文分词组件 - word分词 word分词是一个Java实现的分布式的中文 ...

  3. java中文分词的简单实现

    java中文分词的简单实现 中文分词 算法 算法思路 算法实现 代码及注释 评价 结语 中文分词 通俗来讲,中文分词是指将一句中文句子中的所有中文词汇相互分隔开来.它是文本挖掘的基础,有着十分广阔的应 ...

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

    java 支持分词的高性能拼音转换工具, 速度是 pinyin4j 的两倍 pinyin https://github.com/houbb/pinyin 是 java 实现的高性能中文拼音转换工具. ...

  5. java 中文分词转拼音_Java实现将汉字转化为汉语拼音的方法

    本文实例讲述了Java实现将汉字转化为汉语拼音的方法.分享给大家供大家参考,具体如下: 网上乱转,偶然看到一个很有意思的小工具,名字叫pinyin4j,可以把汉字转换为汉语拼音,利用他的话再配合上lu ...

  6. java中文分词工具_中文分词工具(LAC) 试用笔记

    一.背景 笔者2年前写过一篇<PHP使用elasticsearch搜索安装及分词方法>的文章,记录了使用ES的分词的实现步骤,最近又需要用到分词,在网上发现一个百度的中文分词项目,中文词法 ...

  7. java中文分词工具_中文分词常用方法简述

    中文分词 就是将一句话分解成一个词一个词,英文中可以用空格来做,而中文需要用一些技术来处理. 三类分词算法: 1. 基于字符串匹配: 将汉字串与词典中的词进行匹配,如果在词典中找到某个字符串,则识别出 ...

  8. Jcseg是基于mmseg算法的一个轻量级Java中文分词器

    Jcseg是基于mmseg算法的一个轻量级中文分词器,同时集成了关键字提取,关键短语提取,关键句子提取和文章自动摘要等功能,并且提供了一个基于Jetty的web服务器,方便各大语言直接http调用,同 ...

  9. java jcseg 官网_Jcseg轻量级Java中文分词器2.6.5最新版

    Jcseg分词器官方版是一款简单且超级好用的轻量级Java分词工具,它可以帮助用户轻松提取关键词和关键词,并为Java的使用提供帮助,该软件还提供了一个基于Jetty的Web服务器,可以满足用户的各种 ...

  10. java中文分词算法_Java实现逆向最大匹配中文分词算法

    写道 //Java实现逆向最大匹配中文分词算法 public class SplitChineseCharacter { public static void main(String[] args) ...

最新文章

  1. 老谢oracle视频笔记_day02
  2. 如何按PHP中给定键的值对关联数组进行排序?
  3. modelling notes and trails
  4. Mybatis+MySQL动态分页查询数据经典案例
  5. rpm linux gcc安装目录,Linux环境下通过rpm安装gcc的顺序
  6. Java中包、导包、修饰符和内部类
  7. Uva 437 - The Tower of Babylon(DP)
  8. 2019-4-21 - plan
  9. mysql可变数据类型_【Python面试】 说说Python可变与不可变数据类型?
  10. Linux查找命令与find命令详解
  11. 通过java下载B站视频
  12. 南京大学计算机考研的重点,南京大学计算机考研
  13. PCB表面贴片元件的手工焊接技巧
  14. 回声消除(AEC)初体验之matlab仿真
  15. SSL/TLS 受诫礼攻击漏洞的问题的解决记录
  16. 计算机用户名英文名称,好听的电脑英文用户名
  17. R语言forestplot 根据分组设置不同颜色
  18. 【MySQL5.7指南】第一章——概述
  19. 第14章传智书城前台程序设计
  20. 修改电脑C:\User\用户名文件夹的名字

热门文章

  1. C# 报错 provisional headers are shown learn more
  2. 计算机装系统找不到硬盘分区,系统安装找不到现有分区,教您如何解决系统安装找不到现有分区...
  3. 检测到硬盘错误:在MBR硬盘上没有找到可以引导的分区
  4. Windows微信双开,三开,多开小程序!start C:\“Program Files (x86)“\Tencent\WeChat\WeChat.exe
  5. LaTeX 页眉和页脚
  6. word文档单独删除或修改首页或某一页的页眉页脚及其下划线
  7. ubuntu 18.04设置静态ip(固定IP地址)
  8. 微信H5禁止分享功能
  9. LabVIEW编程LabVIEW控制GPS例程与相关资料
  10. acl 影响因子_计算机领域EI和SCI收录期刊及影响因子