当年锥子的大爆炸,如今12个语言版本都可轻松搞定!
第011期原創分享 作者:huber
大家好,我是Hub哥!又被Hub友們催更了。
這些天,刷抖音看到羅永浩老師的直播帶貨,發現了老羅的一些變化,頭發少了幾千根啊(瞎猜的),言行舉止少了往日懟天懟地的犀利,沒有了讓人懷念的單口相聲,而且好幾次在直播間翻車了,不禁讓我想起了當初做手機時的老羅,情懷與工匠精神,追求極致毫不妥協,每期發布會精彩的相聲,金句頻出流傳至今…… 真是萬分感概……
不知大家是否還記得,老羅當年帶領的錘子科技,推出最經典的一款手機M1 ,伴隨而出的系統Smartisan OS 3.1系統,其中一個主打功能,讓當時發布會的觀眾們瞬間都沸騰了
為什么觀眾們都沸騰了呢?因為該功能解決了手機用戶們長期的一個交互痛點:如果在一長段文字中,只需要提取其中一部分,然后再次組合編輯成一句新的句子。
用當時老羅的話說:你需要用一根胡蘿卜一樣的手指頭,在一塊小屏幕上不斷重復地復制、粘貼、拖拽著一個小小的光標在文字中到處定位,這是一件讓人抓狂的事!
就像下圖這樣:
圖片來自優酷
其實這個問題是每個手機用戶都感受過的,當時的老羅大發神威,指導著研發團隊推出一了錘子系統的一個主打功能之一:大爆炸(Big Bang)
相信不少童鞋已經了解過大爆炸這個功能了,這里再簡單描述一下:
你可在手機的任何場景下,用拇指大面積按壓屏幕中的文字,“Big Bang”會將按住的那段文字全部“炸”開,智能分解、供你任意操作。
圖片來自優酷
雖然已隔多年,但大爆炸在當時,那叫一個香!而其它品牌的手機用戶對這個功能真是羨慕嫉妒恨,紛紛嚷嚷著讓自己的手機品牌趕緊推出類似功能!
然而這樣一個功能,核心技術并不在UI交互,而是幕后的分詞引擎,而目前類似的分詞技術不止一種,當時的老羅也決定讓大爆炸這個技術開源了:
GitHub地址:
https://github.com/SmartisanTech/android
目前已經收獲star2.5k
然而!!!本文主要講的,卻是另一個項目!
對不住了羅老師!😂😂😂😂
這個項目就是 : 結巴中文分詞 (jieba)
“結巴”………這名字取的真形象。那為什么要介紹結巴,而不是大爆炸?因為結巴更通用,已經支持了12個語言版本
先來看一下該項目的基本數據:
GitHub地址:https://github.com/fxsjy/jieba
該項目主版本是以Python組件方式提供的中文分詞框架,大家都知道,Python用途廣泛。然而無論是前端還是后端,這個分詞組件在數據分析,爬蟲,搜索引擎中的關鍵詞處理等領域都有很大幫助
接下來,一起來看看結巴中文分詞的一些特征:
結巴分詞的特點:
支持繁體分詞
支持自定義詞典
MIT 授權協議
支持4種分詞模式
4種分詞模式:
精確模式,試圖將句子最精確地切開,適合文本分析;
全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
搜索引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用于搜索引擎分詞。
paddle模式,利用Paddle深度學習框架,訓練序列標注(雙向GRU)網絡模型實現分詞。同時支持詞性標注。paddle模式使用需安裝paddlepaddle-tiny,pip install paddlepaddle-tiny==1.6.1。目前paddle模式支持jieba v0.40及以上版本。jieba v0.40以下版本,請升級jieba,pip install jieba --upgrade 。
算法:
基于前綴詞典實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖 (DAG)
采用了動態規劃查找最大概率路徑, 找出基于詞頻的最大切分組合
對于未登錄詞,采用了基于漢字成詞能力的 HMM 模型,使用了 Viterbi 算法
來看一個示例:
encoding=utf-8
import jieba
jieba.enable_paddle()# 啟動paddle模式。0.40版之后開始支持,早期版本不支持
strs=[“我來到北京清華大學”,“乒乓球拍賣完了”,“中國科學技術大學”]
for str in strs:
seg_list = jieba.cut(str,use_paddle=True) # 使用paddle模式
print("Paddle Mode: " + ‘/’.join(list(seg_list)))
seg_list = jieba.cut(“我來到北京清華大學”, cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut(“我來到北京清華大學”, cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精確模式
seg_list = jieba.cut(“他來到了網易杭研大廈”) # 默認是精確模式
print(", ".join(seg_list))
seg_list = jieba.cut_for_search(“小明碩士畢業于中國科學院計算所,后在日本京都大學深造”) # 搜索引擎模式
print(", ".join(seg_list))
上面代碼輸出結果 :
【全模式】: 我/ 來到/ 北京/ 清華/ 清華大學/ 華大/ 大學
【精確模式】: 我/ 來到/ 北京/ 清華大學
【新詞識別】:他, 來到, 了, 網易, 杭研, 大廈 (此處,“杭研”并沒有在詞典中,但是也被Viterbi算法識別出來了)
【搜索引擎模式】:小明, 碩士, 畢業, 于, 中國, 科學, 學院, 科學院, 中國科學院, 計算, 計算所, 后, 在, 日本, 京都, 大學, 日本京都大學, 深造
語言版本
令人雞凍的是,結巴這個項目中,已經有多位作者貢獻出了各種語言的版本,因此大多出開發者都可以簡單快速地使用這個項目了:
結巴分詞 Java 版本
作者:piaolingxue
地址:https://github.com/huaban/jieba-analysis
結巴分詞 C++ 版本
作者:yanyiwu
地址:https://github.com/yanyiwu/cppjieba
結巴分詞 Rust 版本
作者:messense, MnO2
地址:https://github.com/messense/jieba-rs
結巴分詞 Node.js 版本
作者:yanyiwu
地址:https://github.com/yanyiwu/nodejieba
結巴分詞 Erlang 版本
作者:falood
地址:https://github.com/falood/exjieba
結巴分詞 R 版本
作者:qinwf
地址:https://github.com/qinwf/jiebaR
結巴分詞 iOS 版本
作者:yanyiwu
地址:https://github.com/yanyiwu/iosjieba
結巴分詞 PHP 版本
作者:fukuball
地址:https://github.com/fukuball/jieba-php
結巴分詞 .NET(C#) 版本
作者:anderscui
地址:https://github.com/anderscui/jieba.NET/
結巴分詞 Go 版本
作者: wangbin
地址: https://github.com/wangbin/jiebago
作者: yanyiwu
地址: https://github.com/yanyiwu/gojieba
結巴分詞Android版本
作者 Dongliang.W
地址:https://github.com/452896915/jieba-android
加上項目本身的Python版本,整整12個版本!已足夠各路開發者們使用
在這里插入圖片描述
思考
這樣一個項目,相信大多數的應用場景,還是會在客戶端,如果手機系統沒有內置類似功能,強烈建議各大APP集成類似功能,這樣能提升不小用戶體驗,試想現在哪個APP沒有社區模塊?有社區就有文字編寫,例如評論,發貼等等。文本編輯類的APP就更不用說了
當然了,這樣的分詞功能,對前后端常規應用、大數據分析,也會有不小的助力,比如最常見的搜索功能:當用戶在搜索框輸入 “男士黑色大褲衩”, 可分詞為 男士,黑色,大褲衩,然后再次走組合精確搜索流程
使用場景歡迎大家補充
最后
羅老師,本文雖然講的不是大爆炸,但我依然是您的粉絲,會繼續支持您,會去您直播間喊666 😂
總結
以上是生活随笔為你收集整理的当年锥子的大爆炸,如今12个语言版本都可轻松搞定!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HCIA综合实验
- 下一篇: 利用Python实现视频号自动赚钱一条龙