文本关键词的提取算法实验[又是转的]
?? 近期剛剛開始進入 SE 的領域,覺得這里面確實有很多值得研究的東西,從 網絡爬蟲 到 網頁信息的抽取 再到 文本關鍵詞的提取 以及用戶檢索(個性化SE) 等等 包羅萬象。
??? 下午玩完,先來無事,再次瀏覽了一下? 蛙蛙池塘 的博客,覺得里面的對關鍵詞的提取算法還不錯,所以個人又在上午實驗的基礎上,完善了下這部分。
??? 對于該部分,蛙蛙池塘 的實現我覺得有一點是不合理的(個人意見):對于詞頻的統計應該是該詞在該類中所出現的所有次數(如:在某一類(1,2,4)中,單詞A在1中出現的次數是3次, 在4中出現的次數是1次, 在 2中出現了 0次, 那么單詞A的詞頻應該是 3+1+0 =4 , 而不是 1+1+0=2 )
?? 輸入數據是:
測試輸入如下
================================
a 奧運 拳擊 入場券 基本 分罄 鄒市明 奪冠 對手 浮出 水面
a 股民 要 清楚 自己 的 目的
a 印花稅 之 股民 四季
a ASP.NET 自定義 控件 復雜 屬性 聲明 持久性 淺析
a 運動員 行李 將 “后 上 先 下” 奧運 相關 人員 行李 實名制
a asp.net 控件 開發 顯示 控件 內容
a 奧運 票務 網上 成功 訂票 后 應 及時 到 銀行 代售 網點 付款
a 某 心理 健康 站 開張 后 首 個 咨詢 者 是 位 新 股民
a 殘疾 女 青年 入圍 奧運 游泳 比賽 創 奧運 歷史 兩 項 第一
a 介紹 一 個 ASP.net MVC 系列 教程
a 在 asp.net 中 實現 觀察者 模式 ,或 有 更 好 的 方法 (續)
a 輸 大錢 的 股民 給 我們 啟迪
a Asp.Net 頁面 執行 流程 分析
a 杭州 股民 放 鞭炮 慶祝 印花稅 下調
================================
具體的Java實現如下:? 只列舉了 GetKeyword的實現
?public List<String> GetKeyword(List<Integer> arr, int count) {// 1、給每個文檔分詞并保存在一個列表里List<String> allWords = new ArrayList<String>();for (int i = 0; i < arr.size(); i++) {// 這里把一個文檔里出現的多個詞進行消重List s1 = this._tokenizer.Partition(_docs[arr.get(i)]);String[] s2 = this.GetDistinctWords((String[]) s1.toArray(new String[s1.size()]));for (int i1 = 0; i1 < s2.length; i1++)allWords.add(s2[i1]);}// 2、用一個字典保存詞的詞頻,key是詞,value是重復次數Map.Entry[] tfDict = SortByDuplicateCount(allWords);// 3、遍歷已排序的詞頻字典,并獲取每個詞的IDF值,并把更新后的結果放入一個tfidfDict詞典// 該詞典的key是詞,value是tfidf值Map<String, Float> tfidfDict = new HashMap<String, Float>();for (int i = 0; i < tfDict.length; i++) {int termt = (Integer) tfDict[i].getValue();String term = (String) tfDict[i].getKey();{int index = this._wordsIndex.get(term);float idf = GetInverseDocumentFrequency(index);// System.out.println(tfDict[i].getKey()+" 詞頻:"+ termt// +"文檔頻率:"+idf+" "+termt * idf);tfidfDict.put(term, termt * idf);}}// 4、給tfidf字典俺權重排序Map.Entry[] tfidfDictSet = SortMap.getSortedHashtableByValue(tfidfDict);// GetSortByValueDict(tfidfDict);// 5、更新要提取的關鍵詞數量int keywordCount = count;if (keywordCount > tfidfDict.size())keywordCount = tfidfDict.size();// 6、用一個數組保存tfidf字典的keys,這些key已排序// String[] keywordArr = new String[tfidfDict.size()];// tfidfDict.Keys.CopyTo(keywordArr,0);// Set keySet = tfidfDict.keySet();// 7、在關鍵詞數組里取出前幾個關鍵詞返回給調用者List<String> result = new ArrayList<String>(keywordCount);int tempCount = 0;for (int i = 0; i < tfidfDictSet.length; i++) {tempCount++;result.add((String) tfidfDictSet[i].getKey());if (tempCount >= keywordCount)break;}return result;}
輸出數據:
Iteration 0...
Iteration 1...
Iteration 2...
-----------------
0? 聚類成員是 :[3, 5, 9, 10, 11]
a ASP.NET 自定義 控件 復雜 屬性 聲明 持久性 淺析
a asp.net 控件 開發 顯示 控件 內容
a 介紹 一 個 ASP.net MVC 系列 教程
a 在 asp.net 中 實現 觀察者 模式 ,或 有 更 好 的 方法 (續)
a 輸 大錢 的 股民 給 我們 啟迪
-------------asp.net? 控件? ---
-----------------
1? 聚類成員是 :[0, 4, 6, 8]
a 奧運 拳擊 入場券 基本 分罄 鄒市明 奪冠 對手 浮出 水面
a 運動員 行李 將 “后 上 先 下” 奧運 相關 人員 行李 實名制
a 奧運 票務 網上 成功 訂票 后 應 及時 到 銀行 代售 網點 付款
a 殘疾 女 青年 入圍 奧運 游泳 比賽 創 奧運 歷史 兩 項 第一? 拳擊
-------------奧運? 拳擊? ---
-----------------
2? 聚類成員是 :[1, 2, 7, 12, 13]
a 股民 要 清楚 自己 的 目的
a 印花稅 之 股民 四季
a 某 心理 健康 站 開張 后 首 個 咨詢 者 是 位 新 股民
a Asp.Net 頁面 執行 流程 分析
a 杭州 股民 放 鞭炮 慶祝 印花稅 下調
-------------股民? 印花稅? ---
?
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/Samule704/archive/2010/01/01/5118425.aspx
總結
以上是生活随笔為你收集整理的文本关键词的提取算法实验[又是转的]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 360安全卫士防黑加固关闭了Telnet
- 下一篇: ML.net 3-情绪预测