- 相關推薦
基于Google 搜索路徑的課程信息垂直搜索引擎
畢業論文【摘要】課程信息垂直搜索引擎,即在課程信息這個特定的領域里,讓用戶能搜索到最精準
最全面的結果。本文利用 Google 發現“學校-學院-教師-課程”路徑,利用 HTMLParser 進行
基于 WEB 頁面結構的課程元數據信息抽取。為了做到信息的最準確,為每個學校的每個學 院都編寫了包裝器 (解析頁面并將得到的元數據內容的抽取器)。在精確的課程領域元數據 信息支持下,本搜索引擎支持簡單檢索、元數據高級檢索、導航等綜合的檢索功能。
關鍵詞:垂直搜索;搜索路徑;元數據抽取;包裝器
Abstract
This paper proposes a Vertical Search Engine aiming to provide the most accurate and comprehensive results in the specific field of course information. After finding search paths by Google according to the
order "university - school - teacher - Course", we use HTMLParser to extract metadata information based on web page structures. Different wrappers (analyzing web pages and extracting metadata
information) for different schools are written for the sake of accuracy. By the support of precise
metadata information, this search engine supports integrated search functions, such as simple retrieval, metadata advanced search, and navigation.
Keywords: vertical search; searching path; metadata extraction; wrapper
1.引言
隨著因特網(Internet)和萬維網(World Wide Web)技術的發展,全球共享學習資料和 知識使得傳統意義上的教育向遠程教育和自主學習轉變,這就需要提供對學習資源的全球共 享和在線訪問,需要為資源的擁有者提供學習資料發布和共享的支持,需要為學習者提供獲 取知識的有效手段。
但是,由于因特網具有較大的自由性,教課老師可以按照任意形式在因特網上發布其與 課程有關的信息;沒有固定、標準的信息發布格式,且信息發布主要注重視覺效果,缺少語 義信息;信息源變化頻繁,信息源的和產生沒有規律性。因此,如何在海量的、多變的、缺 乏固定格式的因特網學習資源中查找需要的課程信息,并將這些信息快速而準確地抽取出 來、進行有效的整合并提供高質量的服務,具有重大的科研價值和現實意義。
課程信息垂直搜索引擎,通過對課程網頁的元數據信息進行自動提取和結構化的組織, 使用戶通過關鍵字搜索能得到最全面最精準的學習資源,為高校教師、學生等教育領域用戶 提供更好的服務。
目前國外比較成功的垂直搜索引擎包括:專門提供法律信息的 LawCrawler (www.lawcrawler.com);專門提供家居信息檢索服務 BuildingOnline(www.buildingonline.com) 等等。國內比較出名并且得到用戶認可的垂直搜索引擎包括:生活信息搜索引擎酷訊 (www.kooxoo.com),面向商業的天網商搜(sunsou.tianwang.com),電視精品節目搜索平臺 TV 貓(www.tvmao.com)以及面向餐飲的咕嘟媽咪(www.gudumami.cn)等等。
構建垂直搜索引擎,“爬蟲”(spiders)是不可缺少的部分。目前,為了獲得特定領域內的 相關信息,有兩種流行的方法來確保爬蟲抓取內容的相關性和質量:1. 讓爬蟲只抓取特定 的網域的內容。例如,在豐田汽車公司的網站 www.toyota.com 中抓取到的信息必定是和汽 車相關的;2. 根據領域的特定需要來過濾抓取到的內容。例如,編寫1個程序來過濾數量 關鍵字沒有達到1定數量的網頁。
目前有3種爬蟲能分析基于內容/基于鏈接的網頁,并把對這些網頁的分析與圖搜索算 法相結合。1. 廣度優先搜索的爬蟲(breadth-first search spider) [1],按照圖遍歷算法 BFS 來工 作。由于最重要的頁面往往含有指向其他頁面的大量鏈接,breadth-first search spider 在有效 組織的網站中有很高的抓取效率和準確率。2. 頁面權重爬蟲,結合了基于鏈接的分析與基
于遍歷的算法,采用了 Junhoo Cho 和他的實驗室成員發明的算法[2]。3. Hopfield Net Spider,
將 Web 看作為1個加權單層神經網絡,然后利用包含激活擴散算法的爬蟲來完成信息發現 和檢索的工作[3,4]。
命名實體識別(Named Entity Recognition,NE)作為信息抽取中的子任務,其主要目的 是從文本中檢測出專有名詞并進行分類,如人名、地名、公司名、日期等。很多知名研究機 構都致力這方面的研究,多個國際會議也舉辦了命名實體識別的評測活動,如 MUC[5]、 CoNLL[6]、ACE[7]、SIGHAN[8]等。
就本文而言,實體“課程”包括以下屬性:課程名稱、學院、學校、教師、教師主頁 URL, 課程鏈接以及課程簡介。本文的 NE 識別方法為基于 WEB 頁面結構分析的包裝器。
本文介紹了構建課程信息垂直搜索引擎的基本理論和實用方法。先利用 Google 按照“學
校-學院-教師-課程”發現搜索路徑,然后利用 HTMLParser 編寫包裝器進行基于 WEB 頁面結 構分析的課程元數據信息抽取。
第 2 節介紹了本文的總體思路與核心算法,重點介紹了抓取網頁的基類,并以卡耐基-
梅隆大學的生態環境研究學院為例,具體敘述了專門為該學院編寫的包裝器。
第 3 節評測了算法的查全率,查準率和 F-度量,分析了本文算法的性能。 第 4 節簡單介紹了本文涉及的實現技術。
最后,對本文的性能和擴展做了小結,指出了針對本文改進和發展的方向。
2.1 利用 Google 發現搜索路徑
課程的自然組織形式為從大學、學院、教師再到課程或者從大學、學院直接到課程。因 此,本文利用 Google AJAX Search API 以及 Google 的高級搜索語法按以下兩種順序之1來 發現課程信息:
(1) 學!鷮W院→教師→課程
(2) 學校→學院→課程
2.1.1 Google API 和高級搜索語法
如圖 1 所示,為本文設計的基于 Google 的路徑發現頁面有兩個輸入框,keyword 和 site。
用戶分別輸入關鍵字后,利用 Google AJAX Search API ,將 site 的 值 提交給 GwebSearch.setSiteRestriction,將 keyword 的值提交給 GwebSearch.execute,得到 Google 返 回的搜索結果。由于本文只需要搜索路徑,因此只顯示和保存 URL 地址(result.unescapedUrl), 通過 XMLHTTPRequest 發送給服務器,在服務器端保存需要的 URL 地址。
Google 的 高級搜索語 法 [9]“inurl:someKeyword” , 表 示只搜 索 URL 地址中含 有
“someKeyword”的頁面!-filetype:someType ”,表示過濾文件類型為“someType”的結果。
“intitle:someKeyword”, 表示只搜索頁面標題中含有“someKeyword”的頁面!発ey1 OR key2”
表示搜索包含關鍵字“key1”或者“key2”的結果。
圖 1 基于 Google API 的頁面
Fig1 Page base on Google API 2.1.2 搜索路徑的發現步驟
通過對各個學啊院的觀察,可以發現以下兩個重要規律:1.集中含有課程信息的頁面 URL 地址中含有關鍵詞“course”或者“courses” 2.集中含有教師信息的頁面 URL 地址中含有關鍵 詞“faculty”;谝陨蟽蓚規律,按以下步驟來發現搜索路徑,其中(3)(4)的搜索結果以 txt 形式保存于服務器上,為包裝器提供路徑。
(1) 大學主頁:在 keyword 中鍵入關鍵詞<大學名稱>“cmu”,site 留空。第1個得到的 結果即為 http://www.cmu.edu/
(2) 學院地址:在 keyword 中鍵入關鍵詞<學院名稱+大學名稱>“Civil and Environmental cmu”,site 留空。第1個結果即為 http://www.ce.cmu.edu/
(3) 課程信息頁面:在 keyword 中鍵入關鍵詞<inurl:course OR courses -filetype:pdf>,表 示搜索 URL 地址中含有 course 或者 courses 且文件類型不是 pdf 的結果,site 中鍵入<(2)中 獲得的學院地址>“www.ce.cmu.edu”。得到 2007-course-list 和 2008-course-list 的 URL 地址。
(4) 教師信息頁面:在 keyword 中鍵入關鍵詞 <inurl:faculty -filetype:pdf>,表示搜索 URL 地址中含有 faculty,且文件類型不是 pdf 的結果,site 中鍵入<(2)中獲得的學院地址> “www.ce.cmu.edu”。得到 falculty 的 URL 地址。
2.2 WEB 頁面的分析和信息提取
基于 WEB 頁面結構分析的包裝器利用 Apache 的開源項目——HTMLParser,使用的版 本為 1.6。HTMLParser 是1個簡單而功能強大的 Java HTML 解析器庫,可以分析和處理 WEB 文檔的內容,包括1些通用的服務器端標簽。
2.2.1 基類:Extractor.java
基類主要包括3個函數:
(1) insert(),向 Lucene 的索引插入課程信息的函數
(2) count(),統計 Lucene 的索引收錄的項(document)的數目,以便看出1次運行添加了 多少個課程
(3) getDescription(String url),通過分析指定 link 在 Schedule Of Classes 的 WEB 頁面結
構來獲得課程簡介,算法偽代碼見圖 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
//通過對頁面的源碼分析發現課程簡介的源碼組織方式都為
//<P><font size="2" face="helvetica,arial">課程簡介</font>
//因此設置用 AndFilter 將 filter 設置為必須同時滿足3個條件
AndFilter andfilter =結點名為<font>+有父結點<p>+有 size=2 的屬性
nodelist = 過濾得到的符合 andfilter 的所有節點
foreach(符合條件的節點)
if (長度(String.length)大于 50) {
//課程簡介長度字數必大于 50,過濾字數小于 50 的節點
return des; }
圖 2 getDexcription()函數偽代碼
Fig2 pseudocode of function getDescription()
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 =過濾得到的所有<strong>節點
4. foreach(節點)
String temp=<strong>節點的 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個數字”開頭), 如果不是,說明不是卡耐基梅隆大學課程的索引項,刪除該項。
1. 調用 setInfor()函數,設置了每1門課程的公共信息,本例為學校和學院
2. 初始化 HTMLParser 的分析器 parser,并設置編碼方式
3. 分析 WEB 頁面結構來選擇合適的 filter,課程編號均含有 12-,因此選用
StringFilter courseFilter = new StringFilter("12-");
4. NodeList nodelist =過濾得到的所有課程編號節點;
5. foreach(課程編號節點)
提取元數據課程名稱=課程編號節點+“ ”+課程名節點;
提取元數據教師 first name=課程編號節點之后的 nextSlibing 節點,即教師 first name 節點;
教師名=根據 first name 在 teacherList 中查找得到的教師全名;
教師主頁=根據 first name 在 teacherList 中查找得到的教師主頁;
提取元數據課程鏈接 = prefix+課程編號(不帶“-”)+suffix;
提取元數據課程簡介=getDescription(課程鏈接);
調用基類中的函數將抓取到的課程信息插入 Lucene 的索引
圖 4 getCourses()函數偽代碼
Fig4 pseudocode of function getCourses()
3.算法性能
以卡耐基-梅隆大學的3個學院為例,來分析本系統算法的查全率
P(Precision),F 度量(F-measure)。
F 度量讓用戶在查全率和查準率上求得平衡。我們認為垂直搜索應該給用戶提供準確的
信息,因此查準率的重要性大于查全率。據此,選擇查準率和查全率的重要程度值 =0.5, 代表 P
[1]
【基于Google 搜索路徑的課程信息垂直搜索引擎】相關文章:
垂直搜索引擎發展策略探討03-21
Web搜索引擎的智能搜索設計與實現03-08
搜索引擎技術及趨勢11-21
CPM搜索引擎的設計與實現03-08
搜索引擎排名與電子商務搜索營銷分析03-21
企業搜索引擎營銷分析03-24
學術搜索引擎的優化策略11-29
基于自編碼神經網絡建立的搜索信息模型03-11
談搜索引擎優化的鏈接策略03-19
淺談搜索引擎優化的鏈接策略03-22