美文网首页iOS程序猿
Swift 基于词库的汉字转拼音

Swift 基于词库的汉字转拼音

作者: 琳川 | 来源:发表于2021-01-01 12:17 被阅读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   
    
        }
    
    }
    

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

    相关文章

      网友评论

        本文标题:Swift 基于词库的汉字转拼音

        本文链接:https://www.haomeiwen.com/subject/rthjoktx.html