文本关键词的提取算法实验
来源:互联网 发布:java权限管理系统demo 编辑:程序博客网 时间:2024/05/18 17:44
近期刚刚开始进入 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 杭州 股民 放 鞭炮 庆祝 印花税 下调
-------------股民 印花税 ---
- 文本关键词的提取算法实验
- 文本关键词的提取算法实验
- 文本关键词的提取算法实验[又是转的]
- 文本关键词提取算法
- 文本关键词提取算法
- 文本关键词提取算法
- 文本关键词提取算法
- 文本关键词提取算法总结
- 文本关键词提取算法及自动摘要
- 关于关键词提取,摘要提取的,及文本相似总结
- TextRank算法提取关键词的Java实现
- TextRank算法提取关键词的Java实现
- TextRank 算法提取关键词的 Java 实现
- 基于TextRank的关键词提取算法
- 关键词提取算法
- C#--关键词提取算法
- 文章关键词提取算法
- 文章关键词提取算法
- 如何从EXPDP导出的文件里获得用户授权的SQL语句
- 继续摘抄:Can't connect to local MySQL server through socket '/tmp/mysql.sock'
- oracle巨大表的数据删除的方法,20分钟搞定
- dm9000驱动移植 之二
- CS8900 base address的确定方法
- 文本关键词的提取算法实验
- 从ORACLE的表里生成DBF的简单办法
- ORACLE下如何获得全部的索引创建语句
- Eclipse中java.lang.OutOfMemoryError: Java heap space 的问题解决方法
- Android上的skype
- 请看下面的文章,请不要试图读,中文真牛
- 控制文件和REDOLOG同时损坏的ORACLE数据库恢复一例
- Qt Creator 下配置 OpenCV2.0
- Android之父:Android不封杀Skype等VOIP应用