源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

iOS中自带超强中文分词器的实现方法

  • 时间:2020-01-16 06:29 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:iOS中自带超强中文分词器的实现方法
[b]说明[/b] 在处理文本的时候,第一步往往是将字符串进行分词,得到一个个关键词。苹果从很早就开始支持中文分词了,而且我们几乎人人每天都会用到,回想一下,在使用手机时,长按一段文字,往往会选中按住位置的一个词语,这里就是一个分词的绝佳用例,而iOS自带的分词效果非常棒,大家可以自己平常注意观察一下,基本对中文也有很好的效果。而这个功能也开放了API供开发者调用,我试用了一下,很好用! [b]效果如下:[/b] [img]http://files.jb51.net/file_images/article/201706/2017628183439939.png?2017528183458[/img] [b]实现[/b] 其实苹果给出了完整的API,想要全面了解的可以直接看文档:[url=https://developer.apple.com/documentation/corefoundation/cfstringtokenizer-rf8]CFStringTokenizer Reference[/url] [b]这里说说简单的一个实现:[/b]
 // 要分词的字符串
 NSString *string = @"侠士隐锋,莽夫露刃";

 self.keywords = [[NSMutableArray alloc] init];
 CFStringTokenizerRef ref = CFStringTokenizerCreate(NULL, (__bridge CFStringRef)string, CFRangeMake(0, string.length), kCFStringTokenizerUnitWord, NULL);// 创建分词器
 CFRange range;// 当前分词的位置
 // 获取第一个分词的范围
 CFStringTokenizerAdvanceToNextToken(ref);
 range = CFStringTokenizerGetCurrentTokenRange(ref);

 // 循环遍历获取所有分词并记录到数组中
 NSString *keyWord;
 while (range.length>0) {
  keyWord = [string substringWithRange:NSMakeRange(range.location, range.length)];
  [self.keywords addObject:keyWord];
  CFStringTokenizerAdvanceToNextToken(ref);
  range = CFStringTokenizerGetCurrentTokenRange(ref);
 }
其实逻辑很简单:创建分词器–>一个个地一次获取分词后的每个词的起始位置和长度,从而取出词。 示例里我用列表显示每个分词,比较清楚,列表的实现就不说明了,可以直接看工程代码。 值得一提的是,其分词速度很快,甚至一些网络词汇比如“木有”,一些成语等等都能够识别出,能看出这是分词的什么吗: [img]http://files.jb51.net/file_images/article/201706/2017628183542831.png?2017528183550[/img] 示例工程:[url=https://github.com/Cloudox/OXStringTokenizerDemo]https://github.com/Cloudox/OXStringTokenizerDemo[/url] 本地下载:[url=http://xiazai.jb51.net/201706/yuanma/OXStringTokenizerDemo(jb51.net).rar]http://xiazai.jb51.net/201706/yuanma/OXStringTokenizerDemo(jb51.net).rar[/url] [b]总结[/b] 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程素材网的支持。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部