作過搜索的同窗都知道,分詞的好壞直接決定了搜索的質量,在英文中分詞比中文要簡單,由於英文是一個個單詞經過空格來劃分每一個詞的,而中文都一個個句子,單獨一個漢字沒有任何意義,必須聯繫先後文字才能正確表達它的意思。python
所以,中文分詞技術一直是nlp領域中的一大挑戰。Python 中有個比較著名的分詞庫是結巴分詞,從易用性來講對用戶是很是友好的,可是準確度不怎麼好。這幾天發現另一個庫,pkuseg-python,看起來應該是北大的某個學生團隊弄出來的,由於這方面沒看到過多的介紹,pkuseg-python 的亮點是領域細分的中文分詞工具,簡單易用,跟現有開源工具相比提升了分詞的準確率。小程序
因而我想起用張小龍的3萬字演講作下測試,前幾天在朋友圈流傳了一張圖,採銅統計出張小龍演講中各個詞出現的頻率,不知他是怎麼統計的,不過做爲技術人,咱們用更專業的工具來試試會是什麼效果。微信
pip3 install pkuseg
複製代碼
第一步是將演講內容下載下來,保存到一個txt文件中,而後將內容加載到內存app
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))
複製代碼
輸出結果:spa
[(',', 1445),
('的', 1378),
('。', 755),
('是', 707),
('一', 706),
('個', 591),
('我', 337),
('咱們', 335),
('不', 279),
('你', 231),
('在', 230),
('會', 220),
('了', 214),
('有', 197),
('人', 190),
('就', 178),
('這', 172),
('它', 170),
('微信', 163),
('作', 149)]
複製代碼
什麼鬼,這都是些啥玩意,別急,其實啊,分詞領域還有一個概念叫作停用詞,所謂停用詞就是在語境中沒有具體含義的文字,例如這個、那個,你我他,的得地,以及標點符合等等。由於沒人在搜索的時候去用這些沒意義的停用詞搜索,爲了使得分詞效果更好,咱們就要把這些停用詞過去掉,咱們去網上找個停用詞庫。設計
第二版代碼:code
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))
複製代碼
打印的結果:cdn
[('微信', 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 設計
複製代碼
張小龍講得最多的詞就是用戶、朋友、原動力、價值、分享、創意、發現等這些詞,這些詞正是互聯網的精神,若是咱們把這些作成詞雲的話,可能效果會更好
本文首發於公衆號:Python之禪