很多时候我们都会遇到把汉字转换为拼音的需求,其实iOS就提供了把汉字转拼音的API,但是在对于多音字转换来说,我们还是需要有一个自己的词库来提高我们转换的准确率,所以我就自己简单写了一个,PinYinSwift
(https://github.com/hlc0000/PinYinSwift)请各位大佬批评指正。
关于多音字
想要准确得识别每一条语句中的多音字有两个关键因素,一个是能否准确得给语句进行分词,还有一个就是我们的词库的丰富程度。
关于PinYinSwift
中的一些介绍:
因为PinYinSwift
原来是我自己工作中所需要使用到的,然后我把它整理了之后向外部提供了几个接口,目前功能比较当一,就是单纯得转换为拼音而已,也没有提供带声调的转换或者是首字母排序等等,这些以后如果有时间我会再添加进去。
PinYinSwift
内部的转换方式分为两种:
1:默认模式:通过最大匹配方式进行转换,比如:
北京奥运会
这样一句需要转换为拼音的语句,我的unicode_sentenceto_pinyin
这个词库中最长的词是4个字
判断 北京奥运
是否在词库中,不在;
判断北京奥
是否在词库中,不在;
判断 北京
是否在词库中,在,得到bei3 jing1
;
判断 奥运会
是否在词库中,不在;
判断 奥运
是否在词库中,在,得到ao4 yun4
;
判断会
是否在词库中,在,得到 hui4
;
2:采用系统分词方式进行转换,比如说:
北京奥运会
这样的语句采用系统分词可能会被分成北京/奥运会
判断北京
是否在词库中,在,得到bei3 jing1
;
判断 奥运会
是否在词库中,不在;
判断奥运
是否在词库中,在,得到ao4 yun4
;
判断会
是否在词库中,在,得到hui4
;
说明:采用系统API进行分词后转换的,标点符号会被丢弃
使用方法:
手动导入:
1、下载PinYinSwift
文件夹内所有内容
2、将PinYinSwiftDemo
中的PinYinSwift
文件夹添加到你的工程
几个开放接口的使用介绍:
可以直接穿入一个String
类型数据转换为拼音,isDefaultParticiple
默认为true
,默认使用最大匹配算法,如果设置为false
,即使用系统API进行分词
static func hanyuPinyinString(content:String,
isDefaultParticiple:Bool=true)->String{}
可以传入一个[String]
,然后内部会循环把[String]
中的语句转换为拼音
static func hanyuPinyinStringArray(array:Array<String>,
isDefaultParticiple:Bool=true)->[String]{}
可以传入一个[AnyObject]
类型数据,并且指定要转换为拼音的属性名称,内部会创建一个transformationModel
的对象,并且把外部传递进来的[AnyObject]
中的模型作为transformationModel
中的一个属性
外部class
需要继承NSObject
以及在class
前面加上@objcMembers
static func hanyuPinyinAnyArray(array:Array<AnyObject>,
propertyName:String,isDefaultParticiple:Bool=true)->[transformationModel]?{}
class transformationModel{
var pinyinName:String = ""
var model:AnyObject
init(model:AnyObject) {
self.model = model
}
}
希望各位小伙伴多多提出宝贵意见,交流学习~
网友评论