PHP汉语转拼音(支持20378汉字)



PHP汉语转拼音(支持20378汉字)

在项目中需要通过php来实现抽取汉字的拼音功能,当时实现的方式使用GB2312的字库来实现的,但是在项目中发现像”咔咔“这样的汉字就无能为力了,抽取不出来正确的拼音了。GB2312类库的版本地址:http://blog.csdn.net/wgw335363240/article/details/38588151

为了能够尽可能多的正确抽取出汉字的拼音,参考了pinyin4j.jar的java实现,把汉语拼音的抽取转换为php版本,经测试,使用到的汉字基本都可以转换正确。在转换的过程中,php引擎需要安装了”mbstring“类库的支持,因为php引擎默认是使用iso-8859-1编码来实现的(即strlen(‘中国‘)的长度为6,相当于java中的”中国“.getBytes().length,它的长度也为6,当时java提供了”中国“.tochars()的实现,这个方法得到的chars集合长度为2,实际上就是按照汉字来遍历的),mbstring类库就相当于java中的tochars方法,把字符串按照汉字来遍历。如果不安装类库,还要自己根据utf8编码的规则类遍历byte,从而实现对汉字的拼音的抽取。

注意:

(1)php需要支持mbstring类库

(2)php要是使用utf-8编码编写,这里比较懒,没有编写支持其他语言

汉字转换拼音的原理如下:

(1)定义Unicode与拼音的映射字典(在php体现为数组),该字典从pinyin4j.jar文件,去掉了多音字和声调

(2)输入一个汉字如”严厉“,利用mbstring类库解析为”严“和”厉“两个字符

(3)把解析后的”严“和”厉“依次调用相关方法抽取一个汉字的拼音,如先抽取”严“

(4)把”严“字(此时是3个byte编码)转换为Unicode码(4E25,十进制为:20005)

(5)把Unicode码(4E25)与字典的key进行比较,获取到对应的拼音

(6)”厉”字也采取同样的策略来抽取拼音

抽取效率:

抽取一个汉字的时间:0.00076600000000004秒

代码:

         上传到资源中,现在上传不上去。

时间: 2024-12-30 03:02:20

PHP汉语转拼音(支持20378汉字)的相关文章

Atian inputmethod 输入法解决方案 方言与多语言多文字支持 英语汉字汉语阿拉伯文的支持 (au

1.1. Overview概论 支持母语优先的战略性产品,主要是针对不想以及不愿使用普通话拼音方案的输入法的时候,就需要有一个自己方言的输入法. 现有输入法绝大部分都是基于普通话语言拼音实现的,少部分得到广泛应用的方言输入法是粤语输入法,而我们大部分人是其他方言为母语的. 存在一个大脱节,所以搞了输入法,以方言为基础核心.. 1.2. App scence应用场景 不想以及不愿使用普通话拼音方案的输入法..以及不能很好使用普通话拼音的输入法.. 企业内部加密文档使用,使用自定义拼写规则拼写,保密

[从头学声学] 第208节 汉语的拼音

剧情提要: [机器小伟]在[工程师阿伟]的陪同下进行着声学神通的修炼. 这次要研究的是[汉语的拼音]. 星历2016年05月09日 16:16:57, 银河系厄尔斯星球中华帝国江南行省. [工程师阿伟]正在和[机器小伟]一起研究[汉语的拼音]. #生成声波数据 def tmp2_2(): print('生成波形开始.>>>'); fout= open('output.txt', 'w'); #普通话元音,浊辅音 frequence = [[1000,1400,2400], #a [110

Android 汉语转拼音

有很多时候我们需要将汉字转换为拼音,例如手机中的联系人排序.在12306买车票时输入SZ\shenzhen就会提示深圳. Android提供了汉字转拼音的类HanziToPinyin.java,据说这个类是在联系人app下的.具体目录是packages/providers/ContactsProvider /src/com/android/providers/contacts的HanziToPinyin.java文件. 不过俺是新手没有找到这个类,不过网上有不少大神都把源码贴出来了,我也借鉴一下

C# 汉字转拼音(支持GB2312字符集中所有汉字)

GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个. 分区表示  GB 2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号.这种表示方式也称为区位码. 1)01-09区为特殊符号. 2)16-55区为一级汉字,按拼音排序.  3)56-87区为二级汉字,按部首/笔画排序. 4)10-15区及88-94区则未有编码. 也就是说二级汉字与拼音不存在联系.这样网上大部分汉字转拼音类只能正确获取部分汉字的拼音(一级汉字).只有小数的3000多一点汉字.  而二

PHP similar_text()、levenshtein()、lcs()支持中文汉字版

PHP 原生的similar_text()函数.levenshtein()函数对中文汉字支持不好,我自己写了一个 similar_text()中文汉字版 1 <?php 2 //拆分字符串 3 function split_str($str) { 4 preg_match_all("/./u", $str, $arr); 5 return $arr[0]; 6 } 7 8 //相似度检测 9 function similar_text_cn($str1, $str2) { 10

汉语转拼音(全转与只转首个字母)工具类

1.全转的工具类 ChineseConvertAll.java package Utils.Chinese; /** * 将中文词组转换成拼音 * @author mei * */ public class ChineseConvertAll { private static int[] pyvalue = new int[] { -20319, -20317, -20304, -20295, -20292, -20283, -20265, -20257, -20242, -20230, -20

js汉语转拼音(全拼、首字母、拼音首字母)

新建js文件first_alphabet.js 1 // JavaScript Document 2 // 汉字拼音首字母列表 本列表包含了20902个汉字,用于配合 ToChineseSpell 3 //函数使用,本表收录的字符的Unicode编码范围为19968至40869, XDesigner 整理 4 var strChineseFirstPY = "YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSC" + 5 "DQLDYLYBSSJGYZZJJFKCC

asp.net汉字转拼音和获取汉字首字

http://www.readnovel.com/novel/52620/3508.htmlhttp://www.readnovel.com/novel/52620/3509.htmlhttp://www.readnovel.com/novel/52620/3510.htmlhttp://www.readnovel.com/novel/52620/3511.htmlhttp://www.readnovel.com/novel/52620/3512.htmlhttp://www.readnovel

iOS 中汉语转拼音

方法一: + (NSString *) chineseCharactersToPinyin:(NSString*)sourceString { NSMutableString *source = [sourceString mutableCopy]; CFStringTransform((__bridge CFMutableStringRef)source, NULL, kCFStringTransformMandarinLatin, NO); CFStringTransform((__brid