iOS中自帶超強中文分詞器的實現(xiàn)方法
說明
在處理文本的時候,第一步往往是將字符串進行分詞,得到一個個關鍵詞。蘋果從很早就開始支持中文分詞了,而且我們幾乎人人每天都會用到,回想一下,在使用手機時,長按一段文字,往往會選中按住位置的一個詞語,這里就是一個分詞的絕佳用例,而iOS自帶的分詞效果非常棒,大家可以自己平常注意觀察一下,基本對中文也有很好的效果。而這個功能也開放了API供開發(fā)者調(diào)用,我試用了一下,很好用!
效果如下:
實現(xiàn)
其實蘋果給出了完整的API,想要全面了解的可以直接看文檔:CFStringTokenizer Reference
這里說說簡單的一個實現(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;// 當前分詞的位置 // 獲取第一個分詞的范圍 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); }
其實邏輯很簡單:創(chuàng)建分詞器–>一個個地一次獲取分詞后的每個詞的起始位置和長度,從而取出詞。
示例里我用列表顯示每個分詞,比較清楚,列表的實現(xiàn)就不說明了,可以直接看工程代碼。
值得一提的是,其分詞速度很快,甚至一些網(wǎng)絡詞匯比如“木有”,一些成語等等都能夠識別出,能看出這是分詞的什么嗎:
示例工程:https://github.com/Cloudox/OXStringTokenizerDemo
本地下載:http://xiazai.jb51.net/201706/yuanma/OXStringTokenizerDemo(jb51.net).rar
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
iOS內(nèi)存管理Tagged Pointer使用原理詳解
這篇文章主要為大家介紹了iOS內(nèi)存管理Tagged Pointer使用原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01在uiview 的tableView中點擊cell進入跳轉到另一個界面的實現(xiàn)方法
這篇文章主要介紹了在uiview 的tableView中點擊cell進入跳轉到另一個界面的實現(xiàn)方法,首先重寫uiviewcontrol方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-10-10iOS UITextField最大字符數(shù)和字節(jié)數(shù)的限制詳解
在開發(fā)中我們經(jīng)常遇到這樣的需求:在UITextField或者UITextView中限制用戶可以輸入的最大字符數(shù)。但在UITextView , UITextfield 中有很多坑,網(wǎng)上的方法也很多。但是并不是很全面吧,這里全面進行了總結,有需要的朋友們可以參考借鑒,下面跟著小編一起來學習學習吧。2016-11-11iOS UILabel根據(jù)內(nèi)容自動調(diào)整高度
這篇文章主要為大家詳細介紹了iOS UILabel根據(jù)內(nèi)容自動調(diào)整高度,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06