作過搜索的同窗都知道,分詞的好壞直接決定了搜索的質量,在英文中分詞比中文要簡單,由於英文是一個個單詞經過空格來劃分每一個詞的,而中文都一個個句子,單獨一個漢字沒有任何意義,必須聯繫先後文字才能正確表達它的意思。html
所以,中文分詞技術一直是nlp領域中的一大挑戰。Python 中有個比較著名的分詞庫是結巴分詞,從易用性來講對用戶是很是友好的,可是準確度不怎麼好。這幾天發現另一個庫,pkuseg-python,看起來應該是北大的某個學生團隊弄出來的,由於這方面沒看到過多的介紹,pkuseg-python 的亮點是領域細分的中文分詞工具,簡單易用,跟現有開源工具相比提升了分詞的準確率。python
因而我想起用張小龍的3萬字演講作下測試,前幾天在朋友圈流傳了一張圖,採銅統計出張小龍演講中各個詞出現的頻率,不知他是怎麼統計的,不過做爲技術人,咱們用更專業的工具來試試會是什麼效果。git
pip3 install pkuseg
第一步是將演講內容下載下來,保存到一個txt文件中,而後將內容加載到內存github
content = [] with open("yanjiang.txt", encoding="utf-8") as f: content = f.read()
我統計了一下,文字總數是32546個。小程序
接下來咱們用pkuseg對內容進行分詞處理,並統計出現頻率最高的前20個詞語是哪些。微信
import pkuseg from collections import Counter import pprint content = [] with open("yanjiang.txt", encoding="utf-8") as f: content = f.read() seg = pkuseg.pkuseg() text = seg.cut(content) counter = Counter(text) pprint.pprint(counter.most_common(20))
輸出結果:app
[(',', 1445), ('的', 1378), ('。', 755), ('是', 707), ('一', 706), ('個', 591), ('我', 337), ('咱們', 335), ('不', 279), ('你', 231), ('在', 230), ('會', 220), ('了', 214), ('有', 197), ('人', 190), ('就', 178), ('這', 172), ('它', 170), ('微信', 163), ('作', 149)]
什麼鬼,這都是些啥玩意,別急,其實啊,分詞領域還有一個概念叫作停用詞,所謂停用詞就是在語境中沒有具體含義的文字,例如這個、那個,你我他,的得地,以及標點符合等等。由於沒人在搜索的時候去用這些沒意義的停用詞搜索,爲了使得分詞效果更好,咱們就要把這些停用詞過去掉,咱們去網上找個停用詞庫。工具
第二版代碼:測試
import pkuseg from collections import Counter import pprint content = [] with open("yanjiang.txt", encoding="utf-8") as f: content = f.read() seg = pkuseg.pkuseg() text = seg.cut(content) stopwords = [] with open("stopword.txt", encoding="utf-8") as f: stopwords = f.read() new_text = [] for w in text: if w not in stopwords: new_text.append(w) counter = Counter(new_text) pprint.pprint(counter.most_common(20))
打印的結果:spa
[('微信', 163), ('用戶', 112), ('產品', 89), ('朋友', 81), ('工具', 56), ('程序', 55), ('社交', 55), ('圈', 47), ('視頻', 40), ('但願', 39), ('時間', 39), ('遊戲', 36), ('閱讀', 33), ('內容', 32), ('平臺', 31), ('文章', 30), ('信息', 29), ('團隊', 27), ('AI', 27), ('APP', 26)]
看起來比第一次好多了,由於停用詞都過濾掉了,跟採銅那張圖片有點像了,不過他挑出來的詞多是從另一個維度來的,畢竟人家是搞心理學的。可是咱們選出來的前20個高頻詞仍是不許確,有些不該該分詞的也被拆分了,例如朋友圈,公衆號,小程序等詞,咱們認爲這是一個總體。
對於這些專有名詞,咱們只須要指定一個用戶詞典, 分詞時用戶詞典中的詞固定不分開,從新進行分詞。
lexicon = ['小程序', '朋友圈', '公衆號'] # seg = pkuseg.pkuseg(user_dict=lexicon) # 加載模型,給定用戶詞典 text = seg.cut(content)
最後的出來的結果前50個高頻詞是這樣的
163 微信 112 用戶 89 產品 72 朋友圈 56 工具 55 社交 53 小程序 40 視頻 39 但願 39 時間 36 遊戲 33 閱讀 32 內容 31 朋友 31 平臺 30 文章 29 信息 27 團隊 27 AI 26 APP 25 公衆號 25 服務 24 好友 22 照片 21 時代 21 記錄 20 手機 20 推薦 20 企業 19 原動力 18 功能 18 真實 18 生活 17 流量 16 電腦 15 空間 15 發現 15 創意 15 體現 15 公司 15 價值 14 版本 14 分享 14 將來 13 互聯網 13 發佈 13 能力 13 討論 13 動態 12 設計
張小龍講得最多的詞就是用戶、朋友、原動力、價值、分享、創意、發現等這些詞,這些詞正是互聯網的精神,若是咱們把這些作成詞雲的話,可能效果會更好
代碼傳送門:https://github.com/lzjun567/crawler_html2pdf/tree/master/fencitongji