文本关键词的提取算法实验
轉載自:http://blog.csdn.net/samule704/article/details/5118425
? 近期剛剛開始進入 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 杭州 股民 放 鞭炮 慶祝 印花稅 下調?
-------------股民? 印花稅? ---
總結
以上是生活随笔為你收集整理的文本关键词的提取算法实验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java-net-php-python-
- 下一篇: 2021-2027全球与中国厨房工作台安