iOS程序猿

Swift 基于词库的汉字转拼音

2021-01-01  本文已影响0人  琳川

很多时候我们都会遇到把汉字转换为拼音的需求,其实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   

    }

}

希望各位小伙伴多多提出宝贵意见,交流学习~

上一篇 下一篇

猜你喜欢

热点阅读