基于Google 搜索路径的课程信息垂直搜索引擎(第3页)
本文共计7493个字,预计阅读时长25分钟。【 字体:大 中 小 】
构来获得课程简介,算法伪代码见图 2:
(4)1. 根据 2.1 获得的 URL 地址初始化 HTMLParser 的分析器 parser,设置编码方式
2. 根据 WEB 页面结构选择适合的 Filter,比如本页面要提取课程简介,则该节点必定含有关键词
Description,因此选用 StringFilter coursefilter = new StringFilter("Description")
3. NodeList nodelist =过滤得到的所有 Description 节点
4. if (nodelist.size() == 0) {
//dexcription 不存在,相当于本页不存在,因为只要页面存在就必定含有 Description 结点
return null; //说明本 URL 地址的页面不存在}
5. else(dexcription 存在) {
重置 HTMLParser 的 parser,根据 WEB 页面结构选择更加精确的 filter
//通过对页面的源码分析发现课程简介的源码组织方式都为
//
课程简介
//因此设置用 AndFilter 将 filter 设置为必须同时满足3个条件
AndFilter andfilter =结点名为+有父结点
+有 size=2 的属性
nodelist = 过滤得到的符合 andfilter 的所有节点
foreach(符合条件的节点)
if (长度(String.length)大于 50) {
//课程简介长度字数必大于 50,过滤字数小于 50 的节点
return des; }
图 2 getDexcription()函数伪代码
Fig2 pseudocode of function getDescription()
2.2.2 学院包装器类
CivilAndEnvironmental.java 继承(extends)于 Extractor.java 主要包括两个函数:
(1) getTeachers(),通过分析 WEB 页面结构获得教师信息,并存储于 teacherList,
伪代码见图 3:
1. 初始化 teacherList,数据,类型为 ArrayList
2. 根据 WEB 页面结构选择 filter,教师名的结点形式为< strong >教师名< /strong >,因此选用含有 strong
属性的 TagNameFilter filter = new TagNameFilter("strong")
3. NodeList nodelist =过滤得到的所有节点
4. foreach(节点)
String temp=节点的 firstChild
if (temp 是教师名字,要过滤掉不以字母开头的节点) {
if(有教师主页信息){
teacher = temp; //提取教师姓名元数据
teacherHome = prefix + first name +后缀.htm; //提取教师主页地址元数据
} else(没有教师主页信息) {
教师主页地址默认为 prefix,不为 teacherHome 赋值
teacher =temp; //提取教师姓名元数据}
将提取到的该名教师的信息加入到 teacherList 中去
图 3 getTeachers()函数伪代码
Fig3 pseudocode of function getTeachers()
(2) getCourses(String page, String suffix),通过分析 page 的页面结构获得课程名称以及
教授该门课程的教师的 First Name,然后在 teacherList 中查找教师的全名及教师主页。对每
1个课程,调用基类的 getDescription()获得课程简介。当课程的所有信息都取到值后,调用 基类的 insert()函数,将该课程插入到索引中去。算法伪代码见图 4:
2.2.3 索引维护类
抽取 WEB 页面数据并将写入 Lucene 的索引之后,为了提高精度和准度,编写了索引
维护类。 遍历索引 , DeleteRepeated 删除 name 和 url 两 个值都相 等的项;
SelectRealOnesForCMU 根据卡耐基梅隆大学课程编号的统1形式,用正则匹 配
[0-9]{2}-[0-9]{3},(即判断索引中的 name 域的值是否以“两个数字”+“-”+“3个数字”开头), 如果不是,说明不是卡耐基梅隆大学课程的索引项,删除该项。

