前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >iOS自带超强中文分词器说明实现

iOS自带超强中文分词器说明实现

作者头像
Cloudox
发布于 2021-11-23 06:10:14
发布于 2021-11-23 06:10:14
49300
代码可运行
举报
文章被收录于专栏:月亮与二进制月亮与二进制
运行总次数:0
代码可运行

说明

在处理文本的时候,第一步往往是将字符串进行分词,得到一个个关键词。苹果从很早就开始支持中文分词了,而且我们几乎人人每天都会用到,回想一下,在使用手机时,长按一段文字,往往会选中按住位置的一个词语,这里就是一个分词的绝佳用例,而iOS自带的分词效果非常棒,大家可以自己平常注意观察一下,基本对中文也有很好的效果。而这个功能也开放了API供开发者调用,我试用了一下,很好用!

效果如下:

实现

其实苹果给出了完整的API,想要全面了解的可以直接看文档:CFStringTokenizer Reference

这里说说简单的一个实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // 要分词的字符串
    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);
    }

其实逻辑很简单:创建分词器-->一个个地一次获取分词后的每个词的起始位置和长度,从而取出词。

示例里我用列表显示每个分词,比较清楚,列表的实现就不说明了,可以直接看工程代码。

值得一提的是,其分词速度很快,甚至一些网络词汇比如“木有”,一些成语等等都能够识别出,能看出这是分词的什么吗:


示例工程:https://github.com/Cloudox/OXStringTokenizerDemo

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/11/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
开源中文分词框架分词效果对比smartcn与IKanalyzer
  中文分词一直是自然语言处理的一个痛处,早在08年的时候,就曾经有项目涉及到相关的应用(Lunce构建全文搜索引擎),那时的痛,没想到5年后的今天依然存在,切分效果、扩展支持、业务应用等方面依然不甚理想。收费的版本不提了,原因自不必言表,开源版本中,发现之前曾经活跃的版本,大多已经没落(好几年没更新了),存活下来的寥寥无几。我是一个守旧的人,评估版本的选择有些保守,至少目前为止,只看1.0正式版本之后的版本,0.XX的不在考虑范围之内,用了一个周末的时间,对比了十多款的样子,个人感觉源于中科院ICTCLAS的smartcn和IKAnanlyzer效果还是不错的。
数据饕餮
2019/01/14
2.6K0
HashMap实现中文分词器
今天下午部门内部技术分享是分词器算法。这次的主讲是大名鼎鼎的Ansj分词器的作者-孙健。 作者简介: Ansj分词器作者 elasticsearch-sql(elasticsearch的sql插件)作者,支持sql查询 nlp-lang自然语言工具包发起人 NLPCN(自然语言处理组织)发起人 等等... 网站:http://www.nlpcn.org/ GIT地址:https://github.com/NLPchina 具体作者详情请百度、Google 大神首先对中文分词的概念进行详细的解释
java404
2018/05/18
9310
Swift 3 分词
发布Hipo Mac 版本后,花了一天时间升级Hipo iOS代码到Swift 3,然后准备为Hipo iOS 增加spotlight 搜索功能,因此就需要分词作为搜索的关键词。
小刀c
2022/08/16
3890
Trie Tree 实现中文分词器
前言 继上一篇HashMap实现中文分词器后,对Trie Tree的好奇,又使用Trie Tree实现了下中文分词器。效率比HashMap实现的分词器更高。 Trie Tree 简介 Trie Tree,又称单词字典树、查找树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 性质 它有3个基本性质: 根节点不包含字符,除根节点外每一个节点都只包含一个字符。
java404
2018/05/18
1.5K0
小说阅读器的设计和实现
阅读器的基本功能是文字展示、翻页滚动,以及目录展示、进度切换、调整字号和主题切换等,扩展功能包括文本选择和复制,可能还会有第三方分享的定制化界面等。
落影
2020/02/18
4.2K0
小说阅读器的设计和实现
ElasticSearch 分词器,了解一下
这篇文章主要来介绍下什么是 Analysis ,什么是分词器,以及 ElasticSearch 自带的分词器是怎么工作的,最后会介绍下中文分词是怎么做的。
武培轩
2020/03/09
2.5K0
ElasticSearch 分词器,了解一下
iOS表情键盘的完整实现
最近在公司做了个表情键盘的需求,这个需求的技术难度不会很大,比较偏向业务。但是要把用户体验做的好也是不容易的,其中有几个点需要特别注意。话不多说,下面开始正文(注:本文对应的Demo放在Github上:github.com/VernonVan/P…)。
iOSSir
2019/06/14
2.1K0
iOS表情键盘的完整实现
Elasticsearch分词:自定义分词器
虽然Elasticsearch带有一些现成的分析器,然而在分析器上Elasticsearch真正的强大之处在于,你可以通过在一个适合你的特定数据的设置之中组合字符过滤器、分词器、词汇单元过滤器来创建自定义的分析器。
HLee
2021/07/20
7.9K1
Elasticsearch分词:自定义分词器
一文学会iOS蓝牙开发
最近做APP对接蓝牙设备开发,这里分享一下iOS对接蓝牙设备中需要注意的东西,大致包含下面这些方面:
莫空9081
2023/12/27
2.4K0
ES中文分词器之精确短语匹配(自定义分词器)
楼主在上篇文章中,提出了将词和字分开,用不同的分词器分别构建索引,来解决match_phrase在中文中的短语或者句子匹配问题。详细的内容请看上一篇文章: ES中文分词器之精确短语匹配(解决了match_phrase匹配不全的问题) 为什么要自己写分词器? 楼主想要一种分词器,分词器完全按照词典分词,只要是词典有的词语,分词器就一定要分出来。测试了两个分词器比如说IK,MMseg,都不能按照楼主的要求分词。 MMSeg有考虑到词频,即使使用mmseg_max_word,也不能完全按照词典分词。 IK理论上
YG
2018/05/23
5K0
【学习】深度解析中文分词器算法(最大正向/逆向匹配)
中文分词算法概述: 1:非基于词典的分词(人工智能领域) 相当于人工智能领域计算。一般用于机器学习,特定领域等方法,这种在特定领域的分词可以让计算机在现有的规则模型中,推理如何分词。在某个领域(垂直领域)分词精度较高。但是实现比较复杂。 例:比较流行的语义网:基于本体的语义检索。 大致实现:用protege工具构建一个本体(在哲学中也叫概念,在80年代开始被人工智能),通过jena的推理机制和实现方法。 实现对Ontology的语义检索。 Ontology语义检索这块自己和一朋友也还在琢
小莹莹
2018/04/23
2.3K0
【学习】深度解析中文分词器算法(最大正向/逆向匹配)
Elasticsearch从入门到放弃:分词器初印象
Elasticsearch 系列回来了,先给因为这个系列关注我的同学说声抱歉,拖了这么久才回来,这个系列虽然叫「Elasticsearch 从入门到放弃」,但只有三篇就放弃还是有点过分的,所以还是回来继续更新。
Jackeyzhe
2020/07/03
5590
如何实现一个分词器
在开发代码补全插件的过程中,根据项目需要,我实现了一个分词器,本文将介绍分词器的具体实现细节。
winty
2024/07/31
2680
如何实现一个分词器
【愚公系列】2022年12月 Elasticsearch数据库-ELK添加中文分词器插件(三)
分词器的作用是把一段文本中的词按一定规则进行切分。对应的是Analyzer类,这是一个抽象类,切分词的具体规则是由子类实现的,所以对于不同的语言,要用不同的分词器。
愚公搬代码
2022/12/16
3650
【愚公系列】2022年12月 Elasticsearch数据库-ELK添加中文分词器插件(三)
如何在Elasticsearch中安装中文分词器(IK+pinyin)
如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题——中文词语被分成了一个一个的汉字,当用Kibana作图的时候,按照term来分组,结果一个汉字被分成了一组。 这是因为使用了Elasticsearch中默认的标准分词器,这个分词器在处理中文的时候会把中文单词切分成一个一个的汉字,因此引入中文的分词器就能解决这个问题。 本篇文章按照下面的内容进行描述: 分词器的作用 安装IK 简单的测试 模拟测试 安装elasticsearch-analysis-pinyin
用户1154259
2018/01/17
1.9K0
如何使用Pig集成分词器来统计新闻词频?
散仙在上篇文章中,介绍过如何使用Pig来进行词频统计,整个流程呢,也是非常简单,只有短短5行代码搞定,这是由于Pig的内置函数TOKENIZE这个UDF封装了单词分割的核心流程,当然,我们的需求是各种各样的,Pig的内置函数,仅仅解决了80%我们常用的功能,如果稍微我有一些特殊的需求,就会发现内置函数解决不了,不过也无需担忧,Pig开放了各个UDF的接口和抽象类,从加载,转换,过滤,存储等等,都有对应的实现接口,只要我们实现或继承它,就非常方便扩展。 本篇呢,散仙会使用Ansj分词器+Pig来统计中文的
我是攻城师
2018/05/11
9440
ES 中文分词器ik
参考Es 集群搭建及相关配置和相关参数解读,分别下载Es和kibana 8.2.3版本,部署到相应的服务器,删除es原有的data目录.配置elasticsearch.yml,节点配置如下:
郑小超.
2022/09/21
9730
ES 中文分词器ik
干货 | iOS 程序员眼中的 Emoji
一、Emoji 简介 绘文字(日语:絵文字/えもじ emoji)是日本在无线通信中所使用的视觉情感符号,绘指图画,文字指的则是字符,可用来代表多种表情,如笑脸表示笑、蛋糕表示食物等。在中国大陆,emoji通常叫做“小黄脸”,或者直称emoji 在NTTDoCoMo的i-mode系统电话系统中,绘文字的尺寸是12x12 像素,在传送时,一个图形有2个字节。Unicode编码为E63E到E757,而在Shift-JIS编码则是从F89F到F9FC。基本的绘文字共有176个符号,在C-HTML4.0
腾讯NEXT学位
2020/01/08
1.7K0
干货 | iOS 程序员眼中的 Emoji
OC史上最实用的runtime总结,面试、工作你看我就足够了
runtime的资料网上有很多了,部分有些晦涩难懂,我通过自己的学习方法总结一遍,主要讲一些常用的方法功能,以实用为主,我觉得用到印象才是最深刻的,并且最后两个demo也是MJExtension的实现原理,面试的时候也可以多扯点。
java爱好者
2019/06/17
1.5K0
ElasticSearch分布式搜索引擎——从入门到精通
elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容
不吃紫菜
2023/02/13
3.5K0
ElasticSearch分布式搜索引擎——从入门到精通
相关推荐
开源中文分词框架分词效果对比smartcn与IKanalyzer
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验