一直覺得情報學/圖書館學沒什麼意思,但實際上還是之前沒有深入瞭解過,甚為慚愧。資訊檢索技術乃是現在搜尋引擎技術的基石;著名的Elsevier ScienceDirect,Springerlink,EBSCO Academic/Business Source Premier都是網路環境下的期刊文獻論文檢索利器;還有Amazon等電子商務中的熱門推薦,豆瓣網中的圖書,電影推薦,背後都是資料採礦的發揮核心作用,比如協同過濾演算法等等;還有知識發現,垃圾郵件過濾等等,不一而足。
花了四天時間,完成了這個課程作業(原始碼),要求很簡單:
1、合并使用停用詞表和關鍵詞表作為分詞詞表,應用逆向最長相符法對所有篇名分詞,給出每條篇名對應的分詞結果。在螢幕上顯示篇名序號、篇名、分詞結果。
2、去除停用詞(顯示在螢幕上)。
3、利用TF-IDF詞頻加權公式,計算各詞的權重,在螢幕上顯示每條篇名中各詞的權重。
4、根據輸入的閾值,確定標引詞,並在螢幕上顯示標引詞。
5、根據輸入的標引深度,確定標引詞,並在螢幕上顯示標引詞。
實現起來也能簡單,畢竟資料量不是很大,所以用ADO把資料存入了map容器,其中關鍵詞表以關鍵字為鍵,值為包含該關鍵字的篇名數。然後用逆向最大匹配法配合停用詞表進行分詞,再利用TF-IDF詞頻加權公式加權,最後通過設定標引閾值,標引深度顯示出選出的標引詞。如下:
整個程式類圖如下(呃,有點扭曲…):
完成這個作業,加上看了這一期《程式員》“透過產品看演算法”的專題文章,確實體會到了演算法是程式核心的這個觀點,而那些讓我們生活變得簡單的一個個應用,背後也正是優秀的演算法在支援。然而令人遺憾的是,國內很多高校只開設了資料結構課程,相對更重要的演算法課程去沒有開設,孰不知空懂得資料結構還不足以完成某項應用。中文分詞中,簡單有效是詞典法,進行最大正向/逆向匹配,加權的話主要是逆文獻(IDF)加權,香農資訊理論。若是沒有這些前人的演算法,這個程式很難短時間完成。回到開頭那段,那些應用,特別是與情報學/圖書館學相關的演算法,才是這個專業真正存在的意義吧。
演算法?演算法!