赞
踩
这么大的字都看不见我就没办法了。
全部代码及完整版实验报告下载地址:
https://download.csdn.net/download/qq_33614902/10442074
代码运行方法:打开eclipse-->File-->import-->General-->Existing Projects into Workspace-->Select root directory-->Finish。
注意:导入前请关闭其他项目,否则可能导入失败。
这次的实验内容来源于一个应用问题。我们希望挖掘现有的网页内容和用户评级,以预测出其他网页的用户评级。数据集中一共有327个样本,每个样本包含1个的网页源代码和1个用户评级。数据集分为两部分,一部分包含287个样本,作为训练集;另一部分包含40个样本,作为测试集。最终的目的是改进学得模型,提高其预测的准确率。
网页中正面或者负面的关键词对网页的评级有很大影响。程序中构造了一种将网页的HTML源转换成0、1特征向量的函数,每个属性都有一个值,该值指示一个特定的关键词是否存在(如果存在则为1,不存在则为0)。
简单的来说,一个经常出现在评级为hot页面上的关键词很少出现在评级为cold的页面上;反之亦然。我们通过计算信息增益的方式来选取关键词。
具体的计算公式如下:
前人的论文报告表明,当关键词个数在75至150之间时,学到的模型表现最好。
关于如何从网页的HTML文件中提取合适的特征向量,具体的做法如下:
1、将选取的关键词存入一个字符串数组String keywords[]中。
2、将HTML文件中的所有字母转换成小写字母,并提取出其中的字符串存入Set<String> set中。(使用Set集合的原因是Set内部采用的是非常高效的平衡检索二叉树:红黑树,插入、查找效率比用其他容器高。)
3、遍历keywords[]中的每个元素,若set集合中存在该元素,对应的特征为1,否则为0。
代码实现部分只给出核心代码,完整代码可参见源代码。
数据预处理的具体实现在Preprocessing.java中。
读取关键字,并存入数组中。
File file = newFile("src/test/load_key");
BufferedReader br = newBufferedReader(new FileReader(file));
String str = null;
while ((str = br.readLine())!= null)
{
str = str.trim();
keywords =str.split(",");
}
br.close();
对网页的源码做词法分析,并放入set集合中。
Set<String>set_file_word = new HashSet<String>();
try
{
File file = new File(url);
BufferedReader br = newBufferedReader(new FileReader(file));
String str = null;
while ((str = br.readLine())!= null)
{
str.trim();
str =str.toLowerCase();
String f_word ="";
for (int i = 0; i< str.length();)
{
if(Character.isLetter(str.charAt(i)))
{
f_word= "";
for (;i < str.length();)
{
if(Character.isLetter(str.charAt(i)))
{
f_word= f_word + str.charAt(i);
i++;
}else
{
set_file_word.add(f_word);
break;
}
}
} else
{
i++;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。