書中自有黃金屋?從Sparktake.com的文章找Keywords

筆者最近想玩NLP和Text Mining,於是拿了朋友經營的網站Sparktake.com做了些小嘗試,Sparktake除了開發了熱門的手機程式:二手書買賣平台,也定期發佈不少令人發人深省的讀後感和心得。而筆者看看能不能在眾多的文章中準確和自動地抓住每一篇的重點字眼。

正所謂凡事起頭難,當手頭上沒有任何Data的時候,就唯有自己打開Sparktake.com動手Scrape吧。 經歷一番的折騰,終於把一共116篇的文章,包括標題 ,內容,發佈時間,Tag一併地拿下,把其放進一個csv檔裡作之後的分析。基於Sparktake的文章絕大部分是用中文所寫的,擷取的內容都encode成為utf-8再存起來,免得亂碼等問題暗中作怪。

Sparktake.com


接下來是Preprocessing的環節,就先把英文字母和一些Special Character (例如:”\n”, \r”等)都刪去,只留下中文字的UTF-8,再decode轉換成Unicode。同時,筆者用上大家都不會陌生的Jieba(結巴),這個Python Package來做中文的NLP。在找出關鍵字前,我們先從所有文章作一個整體的分析。Jieba的tokenizer可以把整篇內容的每一句句子都切成一組又一組的詞語,即是:

"一個人遇上一本書,都是緣份使然。看了多少本書並不重要,重要的是我從中有多少得益。"
切成: 
"一個", "人", "遇上", "一本", "書", ",", "都", "是", "緣份", "使然", "。", "看", "了", "多少", "本書", "並", "不", "重要", ",", "重要", "的", "是", "我", "從", "中", "有", "多少", "得益", "。"

要統計某詞語的出現過的次數,也變得”其實唔難”了。把曾經出現過的詞語Summarize其出現的次數由於單字詞的意義不大,所以我會先把它們從中剔除,然後再做統計,計算出來的結果由多至少排列出來。至於Sparktake文章的作者們最多的用詞是什麼,利用Wordcloud便一目了然了。順便一提,WordCloud的默認字體並不支援中文字,因此需要先下載simhei.ttf,並把font_path設定檔案的位置,方可顯示中文字體。




從WordCloud圖裡,最多的是"我們"、"自己"等人稱,可見作者們傾向利用第一人稱的寫作方法,使讀者看起來有親切感,讓他們感到身同感受,容易產生共鳴。除了人稱和連接詞的運用,剩下老是常出現的詞語離不開閱讀和生活,這也沒有出乎意料的,Sparktake的文章內容主要是探討不同的社會的現象及故事,從日常工作和生活中遇到的問題或事情中反思學習,分享和提出作者獨特的見解或有效的解決方法,啟發讀者們以及鼓勵大家思考。

接下來,我們要從每一篇獨立的文章找出一組關鍵字,那麼應該用什麼方法呢?最直覺的想法:關鍵字總會最常出現在一篇文章,例如一篇關於社交的文章,什麼"朋友","關係"等關鍵的字眼在文中出現無數次。所以,要找出關鍵字的其中一個的方法便是找出最出現的字眼,但根據剛才的整體分析,最常都是一些人稱和連接詞,而這些老是常出現的並不是我們想找的關鍵字詞。因此,需要用上Text Mining其中一個重要的的技術, TF-IDF (term frequency–inverse document frequency),可以幻想每個詞語均有一個基本分數,它的出現次數就有多少分數,除此之外,這裡還有一個懲罰機制會把在老是常出現每一篇文章中的詞語進行扣分,包括最常見的人稱和連接詞都會因為這個機制被扣分,這樣的做法能夠讓真正貼題的字眼獲得較高的分數,只要我們選擇頭幾位的"佳麗"很大機會是該文章的關鍵詞。

最後我在每一篇文章都利用以上方法擷取五個Keywords,由於文章太多未能逐個為大家闡釋的關係,筆者會以Sparktake最近五篇發佈的文章(截至2018年12月)來作例子。



1. 標題:香港尖沙咀文化中心自助圖書站正式啓用
候選Keywords: 圖書館, 自助, 尖沙咀, 服務, 圖書站

筆者對這個結果感到尚算滿意,因為文章的主題重點介紹位於尖沙咀自助圖書站,也還有在港島東體育館自助圖書站和誠品書店,但因為篇幅相對地少,所以沒有成為Keywords,正正是介紹尖沙咀的自助圖書館正式投入服務。唯一美中不足的是,"自助"和"服務"這兩個詞語,理應合一個四字詞:"自助服務",相信還有其他的四字詞都會被折開兩個兩字詞,若要解決這個問題,看來要先從結巴的tokenizer著手,但儘管如此,"自助服務"在文中只有出現一次,難以成為脫穎而出。


2. 標題:象與騎象人:了解什麼叫幸福
候選Keywords: 愉快, 變得, 以及, 幸福, 學校

對今次的結果,我只有一句Comment:這是甚麼玩意?"變得"和"以及"都被選成關鍵詞,感到非常好奇的筆者,於是研究這篇文章一番,發現原因是Sparktake的作者,在寫這篇文不停用上"以及"這個字眼,足足重覆了21次,那我知道問題的出在那,首先"以及"這詞,在眾多的文章都常現的,再者,它的分數比只有一共出現14次"變得"的還低,可見懲罰機制是有起到作用。看來要解決以上問題都要把動詞的剔除或者是對詞性都納入計分的準則,例如加上懲罰機制。


3. 標題:創意學院:打破學校所教的思維 | 為什麼傳統教育會扼殺我們的創意?
候選Keywords: 學校, 學生, 教育, 創意, 老師

從一本"創意學院:打破學校所教的思維"中寫出的讀後感和反思,這些字眼也完全貼近文章主題,是一個可接受的Result。


4. 標題:為什麼按下停止追蹤,你我的關係便能宣布結束?
候選Keywords: 二人, 的關, 簡單, 完結, 對方

當我看到這五位佳麗,我頓時作出以下反應:

黑人問號ICON的圖片搜尋結果

黑人問號?

當我再仔細閱讀這篇文章,亦因為利用故事式的寫作手法,也使機器難以單純根據出現頻率找出Keywords,要靠人腦用經驗interpret才能理解當中的中心意思,而總結出文中的關鍵詞應是"人際關係","社交平台","友情"等。由此可見,遇上小說類或故事式陳述的文章,會增加做Text Mining的難度。
除此之外,發現作者當"兩人"和"兩個人"都寫成了"二人",亦因為此文章集中描寫兩個人的關係,"二人"從此成為候選Keywords。
至於"的關"的出現,便要追溯到為何結巴的詞庫會有"的關",難道是因為自己孤漏寡聞,追不上現在的潮流嗎?一連串的心理反應促使筆者去找Google大神求救,得出的第一個搜尋結果是"超大的關刀".......還是算了。至於為何分詞器會有這耐人尋味的結果,便有待調查。


5. 標題:請問可以幫我找回我的注意力嗎?
候選Keywords: 注意力, 專注力, 冥想, 越來, 平台

除了"越來"這個奇怪的詞語以外,其餘的都十分貼題。


不過個人認為以上方法除了找出關鍵詞,還可以應用在找出常用而又不是重點字眼的,來檢討和改善寫作的用詞,避免過度依賴同一個字詞(尤其是連接詞),給讀者千篇一律的感覺,逼使自己想出不同的同義詞來代替。最後,希望讀者們喜歡這篇文章,亦歡迎各位和筆者交流Text Mining的心得,Cheers~!







Comments