- 相關推薦
基于 Google 搜索路徑的課程信息垂直搜索引擎
畢業論文【摘要】課程信息垂直搜索引擎,即在課程信息這個特定的領域里,讓用戶能搜索到最精準
最全面的結果。本文利用 Google 發現“學校-學院-教師-課程”路徑,利用 HTMLParser 進行
基于 WEB 頁面結構的課程元數據信息抽取。為了做到信息的最準確,為每個學校的每個學 院都編寫了包裝器 (解析頁面并將得到的元數據內容的抽取器)。在精確的課程領域元數據 信息支持下,本搜索引擎支持簡單檢索、元數據高級檢索、導航等綜合的檢索功能。 關鍵詞:垂直搜索;搜索路徑;元數據抽取;包裝器
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) 學校→學院→教師→課程
(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”的頁面。“key1 OR key2”
表示搜索包含關鍵字“key1”或者“key2”的結果。
圖 1 基于 Google API 的頁面
Fig1 Page base on Google API
[NextPage] 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()
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 =過濾得到的所有<strong>節點
4. foreach(節點)
String temp=<strong>節點的 firstChild
if (temp 是教師名字,要過濾掉不以字母開頭的節點) {
if(有教師主頁信息){
teacher = temp; //提取教師姓名元數據
teacherHome = prefix + first name +后綴.htm; //提取教師主頁地址元數據
} else(沒有教師主頁信息) {
教師主頁地址默認為 prefix,不為 teacherHome 賦值
teacher =temp; //提取教師姓名元數據}
將提取到的該名教師的信息加入到 teacherList 中去
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 兩 個值都相 等的項;
[1]
【基于 Google 搜索路徑的課程信息垂直搜索引擎】相關文章:
垂直搜索引擎發展策略探討03-21
Web搜索引擎的智能搜索設計與實現03-08
搜索引擎技術及趨勢11-21
CPM搜索引擎的設計與實現03-08
搜索引擎排名與電子商務搜索營銷分析03-21
企業搜索引擎營銷分析03-24
學術搜索引擎的優化策略11-29
基于自編碼神經網絡建立的搜索信息模型03-11
談搜索引擎優化的鏈接策略03-19
淺談搜索引擎優化的鏈接策略03-22