教你文本聚类(参考http://www.kuqin.com/searchengine/20080511/8323.html)
參考 蛙蛙池塘 的 教你文本聚類 一文http://www.kuqin.com/searchengine/20080511/8323.html?? 以 Java 代碼的形式予以實現。一下為我對此文的理解及源碼。
?
???
?
??? 摘要:文本聚類是搜索引擎和語義web的基本技術,本文和大家一起學習一下簡單的文本聚類算法,可能不能直接用于實際應用中,但對于想學搜索技術的初學者還是有一定入門作用的。下面簡單列舉該程序所涉及的內容:
?? A》》TF/IDF權重
????? TF-IDF(term frequency–inverse document frequency)
???????? 這是一種用于信息檢索的一種常用加權技術。它是一種統計方法,用以評估一個字詞對于一個文件集或一個語料庫中的其中一份文件的重要程度。字詞的重要性隨著它在文件中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。
?
????????? 假如一篇文件的總詞語數是100個,而詞語“母?!背霈F了3次,那么“母?!币辉~在該文件中的詞頻就是 0.03 (3/100)。一個計算文件頻率 (DF) 的方法是測定有多少份文件出現過“母?!币辉~,然后除以文件集里包含的文件總數。所以,如果“母?!币辉~在1,000份文件出現過,而文件總數是 10,000,000份的話,其文件頻率就是 0.0001 (1000/10,000,000)。
?
???????? 最后,TF-IDF分數就可以由計算詞頻除以文件頻率而得到。以上面的例子來說,“母?!币辉~在該文件集的TF- IDF分數會是 300 (0.03/0.0001)。這條公式的另一個形式是將文件頻率取對數。(具體的計算原理,請參考維基百科tf–idf條目)
?
? B》》用余弦夾角計算文本相似度,用方差計算兩個數據間歐式距離
?
????????? 請參考 數學之美, 以便理解余玄相似度的實際理論應用。
?
? C》》用k-means進行數據聚類等數學和統計知識。關于這些概念可以去google,或者參考文本后的參考鏈接。
????????? 請參考:http://beauty9235.javaeye.com/blog/161675
?
??? 文本聚類思路:計算兩篇文檔的相似度,最簡單的做法就是用提取文檔的TF/IDF權重,然后用余弦定理計算兩個多維向量的距離。能計算兩個文本間的距離后,用標準的k-means算法就可以實現文本聚類了,具體描述如下:
???
??? 1》文檔預處理:1)文檔分詞;2)移除停用詞;3)單詞正規化處理
?
??? 2》分出的單詞就作為索引項(或單詞表),它們代表的就是向量空間的項向量
?
??? 3》計算項權值:這包括要計算1)詞頻 ; 2)倒排文件頻率;3)TF-IDF權值
?
??? 4》計算文檔之間的相似度,一般用余弦相似度(cosine similarity)一同使用于向量空間模型中,用以判斷兩份文件之間的相似性
測試:首先我們準備以下數據
===================
奧運 拳擊 入場券 基本 分罄 鄒市明 奪冠 對手 浮出 水面
股民 要 清楚 自己 的 目的
印花稅 之 股民 四季
杭州 股民 放 鞭炮 慶祝 印花稅 下調
殘疾 女 青年 入圍 奧運 游泳 比賽 創 奧運 歷史 兩 項 第一
介紹 一 個 ASP.net MVC 系列 教程
在 asp.net 中 實現 觀察者 模式 ,或 有 更 好 的 方法 (續)
輸 大錢 的 股民 給 我們 啟迪
Asp.Net 頁面 執行 流程 分析
運動員 行李 將 “后 上 先 下” 奧運 相關 人員 行李 實名制
asp.net 控件 開發 顯示 控件 內容
奧運 票務 網上 成功 訂票 后 應 及時 到 銀行 代售 網點 付款
某 心理 健康 站 開張 后 首 個 咨詢 者 是 位 新 股民
ASP.NET 自定義 控件 復雜 屬性 聲明 持久性 淺析
==================
很明顯以上數據可以分為三類:asp.net,奧運和股民。
我們就寫程序來實現它,蛙蛙池塘 已用 C# 實現了,但是為了加深理解,我將代碼以Java的形式實現了一遍, 具體參見附件:
?
??? 下面對整個程序的思路作一下簡單描述:
1. 首先要建立分詞的方法,提取每個文本的詞語,以便于其他方法的調用;
?
2. 建立構造在所有文本中出現過的詞語的向量空間,以便于后面的相似度計算(該方法將調用 1中的方法變量所有的文本,然后構造詞語?? 集合,得到詞語的向量空間), 通過 Map<String, Integer> 構造每個詞語的索引,便于到排序索引的建立。
?
3. 正向索引的獲取:統計每個詞語在每篇文檔中的出現次數,描述如下:
?????? 首先 1 中的方法提取文本中的詞語,然后獲得該文本的詞語集合(即,消重);然后通過 Arrays.binarySearch? 找到每個詞語的位置,然后統計個數,記得每篇文章的詞語的正向索引。
?
4. 實現到排序索引:(覺得很經典)
?? 調用 3 中的方法,構造到排序索引,并統計每個詞語的文檔頻率 及 詞語的最大文檔頻率(標準化處理每個詞語的頻率,為求 td/idf 做準備)
?
5. 其他地方的關鍵就在于 文本分詞(在該例子中以 接口 實現, 以使的可以提供其他分詞方法, 該類例子的實現只是以空??? 格的方式分割,分詞方法正在研究中,希望與大家交流), K-nn聚類方法(該方法在原來的項目中做過,覺得優化空間不大,故只用原型)
?
聚類結果如下
Iteration 0...
Iteration 1...
Iteration 2...
-----------------
0? 聚類成員是 :[2, 3, 7, 11]
印花稅 之 股民 四季
杭州 股民 放 鞭炮 慶祝 印花稅 下調
輸 大錢 的 股民 給 我們 啟迪
奧運 票務 網上 成功 訂票 后 應 及時 到 銀行 代售 網點 付款
-----------------
1? 聚類成員是 :[0, 4, 9]
奧運 拳擊 入場券 基本 分罄 鄒市明 奪冠 對手 浮出 水面
殘疾 女 青年 入圍 奧運 游泳 比賽 創 奧運 歷史 兩 項 第一
運動員 行李 將 “后 上 先 下” 奧運 相關 人員 行李 實名制
-----------------
2? 聚類成員是 :[1, 5, 6, 8, 10, 12, 13]
股民 要 清楚 自己 的 目的
介紹 一 個 ASP.net MVC 系列 教程
在 asp.net 中 實現 觀察者 模式 ,或 有 更 好 的 方法 (續)
Asp.Net 頁面 執行 流程 分析
asp.net 控件 開發 顯示 控件 內容
某 心理 健康 站 開張 后 首 個 咨詢 者 是 位 新 股民
ASP.NET 自定義 控件 復雜 屬性 聲明 持久性 淺析
?
?? 好了,寫了這么多,我來列舉下參考資料吧,當然也是對其他博主的知識產權的尊重,呵呵~
?? http://www.cnblogs.com/onlytiancai/archive/2008/05/10/1191557.html
?? http://blog.csdn.net/lkf0217/archive/2009/08/23/4475872.aspx
?? http://mx19841031.javaeye.com/blog/224443
?
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/Samule704/archive/2010/01/01/5116717.aspx
總結
以上是生活随笔為你收集整理的教你文本聚类(参考http://www.kuqin.com/searchengine/20080511/8323.html)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue 仿网易云音乐项目
- 下一篇: Debezium同步之oracle ra