切詞功能 幫你找到適合的標籤
最近寫文發現會遇到一個問題,就是每篇文章都需要下標籤(Tags),有時會不知道要下哪些,或是這個詞是不是大家比較常搜尋的關鍵字。WordPress 會把每個標籤獨立成一頁,所以想把標籤盡量設成跟關鍵字有關,以利 SEO。
這幾天有朋友在問切詞工具的事,才發現原來有切詞的套件可以用,就是把文字丟進去,他就會回傳這些文字裡出現的關鍵字是什麼,也會照著關鍵字的權重來排列。
本篇筆記用的是這套:NodeJieba “结巴”分词的 Node.js 版本
會選它的原因是因為,Google 來 Google 去就是找到這套,星星數也算多,應該是蠻實用的。
結巴 Jieba 基本使用
結巴這套切詞工具,有多種程式語言版本,因為後端的部份 August 主要用 Node.js,所以就選用 Node Jieba。
先輸入指令安裝:
npm install nodejieba
接著 require
後就可以開始使用了:
const nodejieba = require('nodejieba');
文件說明結巴的切詞有分為幾種,範例使用了以下:
const txt = 'August, 前端工程師的學習筆記。希望可以幫上你的忙,也閃掉我曾踩過的坑。'; const result1 = nodejieba.cut(txt); // 切詞 const result2 = nodejieba.cut(txt, true); // 切詞 + 精準模式 const result3 = nodejieba.extract(txt, max); // 關鍵字抽取。 max:Number 最多顯示幾筆
讀出來的結果如下圖:

文件上說還可以加上字典,像這樣:
nodejieba.load({ userDict: './test/testdata/userdict.utf8', });
另外也提供了默認的字典介紹:
nodejieba.load({ // 主詞典,帶權重和詞性標籤,建議使用替代詞典。 dict: nodejieba.DEFAULT_DICT, // 隱式馬爾科夫模型,建議使用替代字典。 hmmDict: nodejieba.DEFAULT_HMM_DICT, // 用戶詞典,建議自己根據需要定制。 userDict: './test/testdata/userdict.utf8', // 關鍵詞抽取所需的idf信息。 idfDict: nodejieba.DEFAULT_IDF_DICT, // 關鍵詞撤除所需的終止詞列表。 stopWordDict: nodejieba.DEFAULT_STOP_WORD_DICT, });
關於字典的說明,應該就是切詞的大宇宙了,看不太出來背後的意思。
本篇會實作的是 jieba.extract
這個,它會回傳像關鍵字列表的陣列,並且依照權重排序,就是這一段:

切詞功能實際應用
因為之後想優化的是下標籤的部份,所以實作一個功能,就是查某篇網址底下內文中的關鍵字。步驟如下:
- 網址帶入一個參數
url
,如:https://xxxxx.xxx.xx/tags?url=要抓關鍵字的網址
- 抓 url 的值,寫一隻爬蟲去爬內文。
- 把爬到的內文存成 string,丟給結巴去取出關鍵字。
因為是用 Node.js 的,所以可以寫在本機,或是放在 Google Cloud Platform 上。
如何在 GCP 上放 Node.js 的檔案可參考這篇:用 Google Cloud Platform(GCP)建 Node.js 網站
引用的套件有:express、axios、cheerio、nodejieba。
因為必須等爬蟲爬完,回傳了關鍵字後再 send 到頁面上,所以用的是 Async 的寫法,如果對 Async 還不太熟的話可參考這篇:Promise, Async, Await 基本使用筆記
最後完成的 code 如下:
最後先拿本機來測試,輸入網址:
http://localhost:8080/tags?url=https://letswrite.tw/promise-async-await/
就會看到結果了:

呵呵,竟然切了一個 XXX 出來,但 Promise、async、await 確實是文章裡最常出現的,可以當個參考。
參考資料
結巴 Jieba 的 GitHub:nodejieba
結巴 Jieba 的 NPM:nodejieba

