摘要:Web信息的急劇增長,給信息的有效使用提出了巨大挑戰,如何快速、準確地從Web中獲取所需信息己經成為亟待解決的問題?;贖TML Parser包的Web頁面信息提取系統能夠準確的提取用戶感興趣的信息用于進一步分析,更加充分有效地利用Web這個巨大的信息源。這種方法可以普遍適用于WEB頁面的信息提取。
關鍵詞:WEB信息提??;HTMLParser正則表達式
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2011)04-0970-03
隨著計算機的普及以及互聯網(WWW)的迅猛發展,大量信息以電子文檔的形式出現在人們的面前,但由于人類審美觀以及商業上的需求,現在的Web頁面除了包含與主題相關內容外,還充斥著大量與主題無關的信息,影響了對有用信息的辨別。為了應對信息過載的挑戰,信息提取技術應運而生,它的主要功能是從WEB文本中提取出特定的事實信息,比如,從新聞報道中提取出恐怖事件的詳細情況:地點、作案者、受害者、襲擊目標、使用的武器等;從經濟新聞中提取出公司發布新產品的情況:公司名、產品名、發布時間、產品性能等。如何讓計算機從WEB數據源中獲取用戶感興趣的信息,避免“數據爆炸,知識匾乏”的尷尬,正是WEB提取技術的關鍵所在。
1 系統結構
HTML Parser是一個純Java編寫的HTML解析工具庫,它不依賴于其它的Java庫文件,主要用于改造或提取HTML。它能高效率解析HTML文檔,而錯誤率幾乎為零,是目前最好的HTML解析和分析的工具。本系統首先利用HTML Parser遞歸提取各層URL信息,然后利用正則表達式對各URL對應頁面進行電子郵件信息提取。
1.1 提取網站內部的電子郵件數據算法
輸入:某一網站首頁地址(URL)。
輸出:本網站內部Deep層頁面上的電子郵件信息。
算法:
l) 提取首頁URL信息(n個);
2) 遞歸處理首頁的URL信息Deep層,分別提取各層頁面上的URL信息;
3) 將提取到的URL信息存入數據庫;
4) 分析所有URL對應的頁面并提取電子郵件信息,將提取到的電子郵件信息存入數據庫。
1.2 系統構成
l) 提取URL模塊
系統的核心之一,它實現的主要功能是利用HTML Parser API,提取初始URL頁面Deep層上的所有URL。
2) 提取Email信息模塊
首先利用HTML Parser API將所有URL頁面的文本內容存入文本文件中,然后利用正則表達式提取該文本文檔中的Email信息,接著對其余頁面做同樣處理。
3) 存儲模塊
利用MySql存儲提取的Email數據,并不斷更新數據庫避免保存重復信息。
2 系統實現
2.1 提取Deep層頁面內鏈接
提取Deep層頁面內鏈接的算法為extractLinks(String loc),該算法實現了遞歸搜索網站內部Deep層所有的URL信息并保存于svecLink。
算法所需全局變量定義如下:
Public static Vector svecLink=new Vector();//存放內部的URL
Public static Vector svecOutLink=new Vector();//存放外部的URL
Public static String hostName;//主機名稱
GetHostName(String URL);//判斷URL是否為網站內部URL
遞歸搜索部分代碼如下:
Public void extractLinks(String loc) throwsParserException
{
Vector vecTemp=new Vector();//保存一層頁面的URL用于遞歸搜索
this.parser=new Parser(loc);//HTML parser的入口
parser.setEncoding(“gh2312”);
Node [] links=parser.extractAllNodesThatAre(LinkTag.class);//解析出loc對應頁面內所有鏈接標簽
for(int i=0;i LinkTag linkTag=(LinkTag)links[i]; strl=linkTag.getLink();//獲得某一URL[I] if(!svecLink.contains(strl)){//避免保存重復的URL if(GetHostName(strl).equals(hostName)) { svecLink.add(strl); vecTemp.add(strl);//vecTemp保存某一層所有URL } else{ svecOutlink.add(strl); }}}; String strNew; if(a>0b<=Deep) //如果小于深度Deep繼續遞歸搜索 { for(int i=0;i strNew=(String)vecTemp.get(i);//獲得vecTemp層第i個URL extractLinks(strNew);//遞歸搜索strNew頁面內部所有的URL }}}}//解析到的所有URL保存在svecLink中。 2.2 提取各層頁面的電子郵件信息 利用HTML Parser中的nodeIterator接口,可以得到頁面中所有標簽位置以及相應的信息,然后可以提取Title、Image和Link等信息,但是還有一些信息HTMLParser解析不到,因此需要利用正則表達式解析并提取這些信息。 l) 獲得URL頁面文檔顯示的所有文本信息。使用HTMLParserAPI編寫FilterBean和StringBean兩個類,將URL頁面的所有文本內容存入文本文件中。 Public String getDocumentAt(String urlString) { String a; FilterBean fb=new FilterBean(); NodeClassFilter span=new NodeClassFilter(BodyTag.class); fb.setFilters(new NodeFilter[]{span}); fb.setURL(“urlstring”); Bufferedwriter be=new Bufferedwriter(newFileWriter(“al.txt”)); a=fb.getText(); be.write(a); } 2) 查找文本文檔文件內部Email信息并存入數據庫 Public void lookEmail(String doeument)//找出一個頁面上的Email { Pattern pattern=Patten.compile(“([a-z0-9A-z]+[-|\\\\.]?)+[ a-z0-9A-z]@([ a-z0-9A-z]+(-[ a-z 0-9A-z]+)?\\\\.){l,2}[a-zA-Z]{2,}”;Pattern.CASE-INSENSITIVE);//引號中為提取電子郵件的正則表達式,利用該正則表達式,提取頁面中電子郵件信息 Matcher matcher=Pattern.matcher(doccument); 建立到數據庫的連接; while(matcher.find())//如果匹配到,文檔還沒結束則繼續匹配 {String match=matcher.group(); 將匹配到的電子郵件即match插入數據庫; db.execute Update(strsql);//更新數據庫 } db.close;//關閉數據庫 } 2.3 存儲提取的電子郵件信息 系統采用MySQL Driver操作數據庫,類DBConnect建立到Mysql數據庫的連接,方法executeQuery()執行產生單個結果集操作,方法executeUpdate()根據參數不同執行插入、更新、刪除等操作。 //加載Mysql驅動程序類 Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306; databaseName= DB; user=id;password=pass”); //建立到數據庫DB的連接 }catch(..….)//捕捉沒有成功加載驅動程序類的異常 } //executeQuery()示例代碼 Public Resultset executeQuery(String sql){ try{ Statement stmt=conn.createStatement();//創建statement對象,執行簡單的SQL語句 ResultSet rs=stmt.executeQuery(sql);}catch(……){}//捕捉顯示數據庫連接錯誤或查詢錯誤 return rs; } //executeupdate()示例代碼 Public int executeUpdate(String sql){ int number=0; try{ Statement stmt=conn.createStatement(); stmt.executeUpdate(sql); if(conn==1){return-1;} if(stmt==1){retum-1;} }catch(……){} return number;//number區別更新操作是否成功 } 3 小結 WEB信息提取是一個新興的研究熱點,由于WEB文檔的多樣性,WEB信息提取還面臨很多技術難題。本文對WEB信息提取技術做了初步研究,基于HTMLParser技術和正則表達式,以提取網站內部電子郵件信息為例,提出了WEB信息提取系統設計方案,闡述了電子郵件信息提取的工作原理和關鍵技術,給出了電子郵件信息提取算法,詳細介紹了系統的提取URL、電子郵件和存儲模塊,對于WEB頁面信息的提取具有一定的現實意義。