iOS中自帶超強(qiáng)中文分詞器的實(shí)現(xiàn)方法
說(shuō)明
在處理文本的時(shí)候,第一步往往是將字符串進(jìn)行分詞,得到一個(gè)個(gè)關(guān)鍵詞。蘋(píng)果從很早就開(kāi)始支持中文分詞了,而且我們幾乎人人每天都會(huì)用到,回想一下,在使用手機(jī)時(shí),長(zhǎng)按一段文字,往往會(huì)選中按住位置的一個(gè)詞語(yǔ),這里就是一個(gè)分詞的絕佳用例,而iOS自帶的分詞效果非常棒,大家可以自己平常注意觀察一下,基本對(duì)中文也有很好的效果。而這個(gè)功能也開(kāi)放了API供開(kāi)發(fā)者調(diào)用,我試用了一下,很好用!
效果如下:
實(shí)現(xiàn)
其實(shí)蘋(píng)果給出了完整的API,想要全面了解的可以直接看文檔:CFStringTokenizer Reference
這里說(shuō)說(shuō)簡(jiǎn)單的一個(gè)實(shí)現(xiàn):
// 要分詞的字符串 NSString *string = @"俠士隱鋒,莽夫露刃"; self.keywords = [[NSMutableArray alloc] init]; CFStringTokenizerRef ref = CFStringTokenizerCreate(NULL, (__bridge CFStringRef)string, CFRangeMake(0, string.length), kCFStringTokenizerUnitWord, NULL);// 創(chuàng)建分詞器 CFRange range;// 當(dāng)前分詞的位置 // 獲取第一個(gè)分詞的范圍 CFStringTokenizerAdvanceToNextToken(ref); range = CFStringTokenizerGetCurrentTokenRange(ref); // 循環(huán)遍歷獲取所有分詞并記錄到數(shù)組中 NSString *keyWord; while (range.length>0) { keyWord = [string substringWithRange:NSMakeRange(range.location, range.length)]; [self.keywords addObject:keyWord]; CFStringTokenizerAdvanceToNextToken(ref); range = CFStringTokenizerGetCurrentTokenRange(ref); }
其實(shí)邏輯很簡(jiǎn)單:創(chuàng)建分詞器–>一個(gè)個(gè)地一次獲取分詞后的每個(gè)詞的起始位置和長(zhǎng)度,從而取出詞。
示例里我用列表顯示每個(gè)分詞,比較清楚,列表的實(shí)現(xiàn)就不說(shuō)明了,可以直接看工程代碼。
值得一提的是,其分詞速度很快,甚至一些網(wǎng)絡(luò)詞匯比如“木有”,一些成語(yǔ)等等都能夠識(shí)別出,能看出這是分詞的什么嗎:
示例工程:https://github.com/Cloudox/OXStringTokenizerDemo
本地下載:http://xiazai.jb51.net/201706/yuanma/OXStringTokenizerDemo(jb51.net).rar
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
iOS內(nèi)存管理Tagged Pointer使用原理詳解
這篇文章主要為大家介紹了iOS內(nèi)存管理Tagged Pointer使用原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01在uiview 的tableView中點(diǎn)擊cell進(jìn)入跳轉(zhuǎn)到另一個(gè)界面的實(shí)現(xiàn)方法
這篇文章主要介紹了在uiview 的tableView中點(diǎn)擊cell進(jìn)入跳轉(zhuǎn)到另一個(gè)界面的實(shí)現(xiàn)方法,首先重寫(xiě)uiviewcontrol方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10iOS實(shí)現(xiàn)搭建聊天頁(yè)面的實(shí)例代碼
本篇文章主要介紹了iOS實(shí)現(xiàn)搭建聊天頁(yè)面的實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07iOS UITextField最大字符數(shù)和字節(jié)數(shù)的限制詳解
在開(kāi)發(fā)中我們經(jīng)常遇到這樣的需求:在UITextField或者UITextView中限制用戶可以輸入的最大字符數(shù)。但在UITextView , UITextfield 中有很多坑,網(wǎng)上的方法也很多。但是并不是很全面吧,這里全面進(jìn)行了總結(jié),有需要的朋友們可以參考借鑒,下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2016-11-11iOS如何自定義控制器轉(zhuǎn)場(chǎng)動(dòng)畫(huà)push詳解
在平時(shí)開(kāi)發(fā)中,有時(shí)候需要一些轉(zhuǎn)場(chǎng)動(dòng)畫(huà)給界面調(diào)整增添一些活力,而實(shí)現(xiàn)這些動(dòng)畫(huà)相對(duì)比較繁瑣。下面這篇文章主要給大家介紹了關(guān)于iOS如何自定義控制器轉(zhuǎn)場(chǎng)動(dòng)畫(huà)push的相關(guān)資料,需要的朋友可以參考下。2017-12-12iOS表視圖之下拉刷新控件功能的實(shí)現(xiàn)方法
下拉刷新是重新刷新表視圖或列表,以便重新加載數(shù)據(jù),這種模式廣泛用于移動(dòng)平臺(tái),相信大家對(duì)于此也是非常熟悉的,那么iOS是如何做到的下拉刷新呢?下面小編給大家分享iOS表視圖之下拉刷新控件的實(shí)現(xiàn)方法,一起看看吧2017-01-01iOS UILabel根據(jù)內(nèi)容自動(dòng)調(diào)整高度
這篇文章主要為大家詳細(xì)介紹了iOS UILabel根據(jù)內(nèi)容自動(dòng)調(diào)整高度,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06安裝win10+黑蘋(píng)果雙系統(tǒng)零基礎(chǔ)教程(圖文)
這篇文章主要介紹了安裝win10+黑蘋(píng)果雙系統(tǒng)零基礎(chǔ)教程(圖文),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2020-01-01