论坛首页 Java企业应用论坛

关于PinYin4J的原理解析

浏览 8326 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-09-21  
char c1 = '我';
String s = Integer.toHexString(c1).toUpperCase(); //6211 

接下来程序便从初始化过的Properties中获取相应的拼音,即6211 (wo3)

jar包中的三个文件之一 /pinyindb/unicode_to_hanyu_pinyin.txt
附件中包含这三个文件,相信大家一看便知晓了,
  • 源.rar (100.7 KB)
  • 下载次数: 312
   发表时间:2011-09-21  
那么对多音字的处理呢?特别是特定词语?
0 请登录后投票
   发表时间:2011-09-22  
i2534 写道
那么对多音字的处理呢?特别是特定词语?

多音字肯定处理不了的
0 请登录后投票
   发表时间:2011-09-22  
多音字呀,这的确是个问题
0 请登录后投票
   发表时间:2011-09-22  
我也在一直思考这个问题,原来是吧unicode码和pinyin对应了起来啊,呵呵

这个小东西其实挺有意思,用的地方应该有很多
0 请登录后投票
   发表时间:2011-09-22  
完美的休止符 写道
i2534 写道
那么对多音字的处理呢?特别是特定词语?

多音字肯定处理不了的

PinYin4J 支持多音字处理的

PinYin4J  你可以这样子来理解,每个字符(中文字)在java中都可以转化成一个int值或者说每一个中文字都是一个char字符,每个字符最终存储在计算机中的都是数字,其实到这里问题就解决了。

PinYin4J  是把已知的中文字 int值(用的是16进制)和对应的拼音(包含多音字、读音声调)都存在在txt文件中的,然后在程序初次加载的时候,读出文件加载到hashtable中(hashtable中key是16进制的数,value是拼音),查字的时候先把字转换成16进制的数,然后从hashtable中取对应的拼音...

这个基本就是PinYin4J 实现的思路了。至于源代码中写了那么多 自己debug 一路下去,什么原型都能看到吧...
0 请登录后投票
   发表时间:2011-09-22  
6211 (wo3)
弱弱的问一下,这里的“3”表示什么意思?
0 请登录后投票
   发表时间:2011-09-22  
fainfy 写道
6211 (wo3)
弱弱的问一下,这里的“3”表示什么意思?


声调,第三声
原来是有提供toPinyinString(String input)这个接口的,后来就去掉了,估计就是因为多音字的问题

不考虑多音字的话,可以直接简化成一一映射,更简单一些
0 请登录后投票
   发表时间:2011-09-22  
完美的休止符 写道
i2534 写道
那么对多音字的处理呢?特别是特定词语?

多音字肯定处理不了的


很遗憾,pinyin4j真的可以处理多音字
0 请登录后投票
   发表时间:2011-09-22  
包含多少汉字??
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics