?? 18.txt
字號:
發信人: zrs (tita), 信區: DataMining
標 題: 基于 Web 的數據挖掘
發信站: 南京大學小百合站 (Fri Mar 22 16:25:47 2002)
自動抽取用 HTML、XML 和 Java 編寫的信息
Jared Jackson (jjared@almaden.ibm.com)
Jussi Myllymaki (jussi@almaden.ibm.com)
IBM 研究員
2001 年 6 月
不可否認,萬維網是到目前為止世界上最豐富和最密集的信息來源。但是,它的結構使它
很難用系統的方法來利用信息。本文描述的方法和工具將使那些熟悉 Web 最常用技術的開
發人員能快速而便捷地獲取他們所需的以 Web 方式發布的信息。
在信息時代快速成長起來的萬維網導致各種各樣的公用信息被大量分發。不幸的是,盡管
作為信息主要載體的 HTML 提供了一種方便地向讀者呈現信息的方法,但它可能并不是一
個很好的可以從中自動抽取與數據驅動的服務或應用程序相關的信息的結構。
已經嘗試了多種方法來解決這個問題。大多數方法都采用一些專用查詢語言的形式把 HTM
L 頁面的各個部分映射成代碼,而這些代碼將 Web 頁面上的信息填入到數據庫中。盡管這
些方法可能提供一些好處,但大部分會因為以下兩個原因變得不切實際:首先,它們需要
開發人員花時間去學習一種無法在其它情況下使用的查詢語言,其次,它們還不夠健壯到
能處理不可避免的對目標 Web 頁面的簡單更改。
在本文中,將討論使用標準 Web 技術—— HTML、XML 和 Java ——開發的一種基于 Web
的數據挖掘方法。這種方法即使不比其它專用方法更強大,也和其它方法不相上下,并且
對于那些已經熟悉 Web 技術的人來說,只需要付出很少的努力就可以收到很好的效果。另
外,本文還附送了許多開始數據抽取所需的代碼。
HTML:優點與缺點
HTML 通常是一個很難用程序手段處理的媒體。Web 頁面中的大多數內容描述與數據驅動的
系統無關的格式編排,并且,由于要動態添加標題以及編寫其它服務器端腳本,所以文檔
結構可能在每次連接到頁面時都需要進行更改。又因為所有 Web 頁面主要部分的格式編排
不合理,所以使問題變得更為復雜,其結果是現在的 Web 瀏覽器在進行 HTML 語法分析時
非常不嚴謹。
盡管存在這些問題,但是 HTML 在數據挖掘方面仍然具有優勢。您所感興趣的數據通常可
以用 HTML 樹中深度嵌套的單個 <table> 或 <div> 標記隔離開來。這使得抽取過程可以
專門在文檔的一小部分內執行。在缺少客戶機端腳本的情況下,只有一種定義下拉菜單和
其它數據列表的方法。HTML 的這些方面允許我們在一旦擁有可用格式的數據時能集中精力
于數據抽取。
背景技術
這里描述的數據挖掘技術的關鍵是把現有的 Web 頁面轉換成 XML,或轉換成 XHTML 可能
更適當,并使用眾多工具中的一小部分來處理 XML 結構的數據,以檢索出適當的數據。
幸好有一個解決方案可以改正 HTML 頁面設計的薄弱之處。Tidy(可以從一些編程語言中
獲取的庫)是一個免費使用的產品,可用于改正 HTML 文檔中的常見錯誤并生成格式編排
良好的等價文檔。還可以使用 Tidy 來生成 XHTML(XML 的子集)格式的這些文檔。(請
參閱參考資料)。
本文中的代碼示例是用 Java 編寫的,并且在編譯和運行它們時,需要在您系統的 class
path 中存在 Tidy jar 文件。它們還需要通過 Apache 項目、Xerces 和 Xalan 使 XML
庫可用。這兩個庫都基于 IBM 提供的代碼并分別控制 XML 語法分析和 XSL 變換。這三種
庫中的每一個都可從 Web 上免費獲取,要找到它們,可以追隨上述鏈接或參考本文后面的
參考資料。理解 Java 編程語言、XML 和 XSL 變換將對您理解以下示例有幫助。有關這些
技術的參考資料,可以在本文后面找到。
方法概述和示例簡介
我們用示例的方式來介紹數據抽取的方法。假設我們有興趣跟蹤幾個月以來每天不同時間
測得的華盛頓州西雅圖的溫度和濕度級別。假如,沒有現成的軟件用于報告此類信息以滿
足我們的需求,我們仍然擁有從眾多公共網站收集此類信息的機會。
圖 1 舉例說明了抽取的全過程。Web 頁面只有在創建了一個可合并到現有數據集的數據集
后才會被檢索和處理。
圖 1. 概要說明抽取過程
只需要很少的幾個步驟,我們就可以擁有一個收集我們信息的合適而可靠的系統。這里列
出這些步驟是為了提供該過程的簡要概述,圖 1 中顯示的是這一過程的較高形式。
標識數據源并把它映射成 XHTML。
查找數據內的引用點。
將數據映射成 XML。
合并結果并處理數據。
這些步驟中的每一步都將加以詳細說明,并將提供執行它們所必需的代碼。
獲取信 XHTML 格式的源信息
為了抽取數據,當然需要知道可以在哪里找到它。在大多數情況下,源信息是顯而易見的
。如果要從 developerWorks 收集文章的標題和 URL,我們將使用 http://www.ibm.com/
developerWorks 作為我們的目標。在天氣這個例子中,我們有若干可供選擇的信息源。我
們將在示例中使用 Yahoo!Weather,但使用其它信息源也具有同等效果。我們將特別跟蹤
URL:http://weather.yahoo.com/forecast/Seattle_WA_US_f.html 上的數據。圖 2 顯
示了這個頁面的屏幕快照。
圖 2. 華盛頓州西雅圖的 Yahoo! Weather Web 頁面
在考慮信息源時,牢記以下這些要素非常重要:
信息源是否是在可靠的網絡連接上生成可靠的數據?
信息源從現在起將存在多久?一個星期、一個月或甚至一年?
信息源的布局結構有多穩定?
我們尋求能夠在動態環境下工作的健壯的解決方案的過程中,在抽取可用的最可靠和最穩
定的信息源時,我們的工作將是最簡單的。
一旦確定了信息源,我們在抽取過程中的第一步就是將數據從 HTML 轉換成 XML。我們將
通過構造名為 XMLHelper(由 static helper 函數組成)的 Java 類來完成這一任務以及
其它與 XML 相關任務。這個類的全部信息源可以通過以下到 XMLHelper.java 和 XMLHel
perException.java 的鏈接找到。隨著本文的繼續展開,我們將構建這個類的方法。
我們使用 Tidy 庫提供的函數在 XMLHelper.tidyHTML() 方法中執行轉換。這個方法接受
URL 作為一個參數并返回一個“XML 文檔”作為結果。當調用此方法或任何其它與 XML
相關的方法時,請仔細檢查是否有任何異常。清單 1 中顯示了執行這些操作的代碼。圖
3 顯示了代碼結果,Microsoft 的 Internet Explorer XML 查看器使用 Weather 頁面中
的 XML。
圖 3. 轉換成 XHTML 的 Yahoo! Weather Web 頁面
查找數據的引用點
請注意,無論是在 Web 頁面還是源 XHTML 視圖中的絕大多數的信息都與我們完全無關。
我們接下來的一個任務是在 XML 樹中找出一個特定區域,我們可從中抽取我們的數據而無
需關心外來信息。對于更復雜的抽取,我們可能需要在單個頁面上找出這些區域的若干實
例。
完成這一任務的最簡單的辦法通常是,首先檢查 Web 頁面,然后使用 XML。只需要看一下
頁面,就可以知道我們正在查找的信息位于頁面的中上部區域中。即使對 HTML 的熟悉程
度非常有限,也很容易推斷出我們正在查找的數據可能都包含在同一個 <table> 元素下,
并且這個表可能總是包含象“Appar Temp”和“Dewpoint”這樣的字,無論當天的數據可
能是什么。
記下我們觀察到的內容,現在要考慮頁面所生成的 XHTML。搜索“Appar Temp”的文本(
如圖 4 所示)說明該文本確實在一個包含我們所需的所有數據的表中。我們將把該表作為
引用點或錨。
圖 4:通過查找包含文本“Appar Temp”的表找到錨
現在,我們需要找到這個錨的方法。因為我們正準備使用 XSL 來轉換我們的 XML,所以可
以使用 XPath 表達式來完成這個任務。我們將使用以下這個普通的表達式:
/html/body/center/table[6]/tr[2]/td[2]/table[2]/tr/td/table[6]
這個表達式指定了從根 <html> 元素到錨的路徑。這個普通的方法將導致我們對頁面布局
的修改非常容易遭到破壞。較好的方法是根據周圍的內容指定錨。通過使用這個方法,我
們把 XPath 表達式重新構造成:
//table[starts-with(tr/td/font/b,'Appar Temp')]
...更好一些,可以利用 XSL 將 XML 樹轉換成字符串的方法:
//table[starts-with(normalize-space(.), 'Appar Temp')]
將數據映射成 XML
擁有這個錨,我們可以創建實際抽取數據的代碼。這個代碼將以 XSL 文件的形式出現。X
SL 文件的目的是標識錨,指定如何從錨獲取我們正在查找的數據(以簡短跳躍的方式),
并且用我們所需的格式構造一個 XML 輸出文件。這個過程實際上比想象的要簡單得多。清
單 2 給出了將執行這個過程的 XSL 代碼,這些代碼還可以作為一個 XSL 文本文件獲取。
<xsl:output> 元素僅告訴處理器我們希望的的變換結果是 XML。第一個,<xsl:template
> 建立名為 <xsl:apply-templates> 的根元素以搜索錨。第二個,<xsl:template> 讓我
們只匹配需要匹配的內容。最后那個,<xsl:template> 在 match 屬性中定義錨,然后告
訴處理器跳到我們嘗試挖掘的溫度與濕度數據。
當然,只編寫 XSL,作業將不會完成。我們還需要一個執行轉換的工具。因此,我們利用
XMLHelper 類方法對 XSL 進行語法分析并執行這個轉換。執行這些任務的方法分別名為
parseXMLFromURL() 和 transformXML()。清單 3 給出了使用這些方法的代碼。
清單 3
/**
* Retrieve the XHTML file written to disk in the Listing 1
* and apply our XSL Transformation to it. Write the result
* to disk as XML.
*/
public static void main(String args[]) {
try {
Document xhtml = XMLHelper.parseXMLFromURLString("file://weather.xml");
Document xsl = XMLHelper.parseXMLFromURLString("file://XSL/weather.xsl")
;
Document xml = XMLHelper.transformXML(xhtml, xsl);
XMLHelper.outputXMLToFile("XML" + File.separator + "result.xml");
} catch (XMLHelperException xmle) {
// ... Do Something ...
}
}
合并與處理結果
如果我們只執行一次數據抽取,我們現在已經完成了。但是,我們并不只是想知道某一時
刻的溫度,而是要知道若干不同時刻的溫度。現在,我們需要做的是反復執行抽取過程,
把結果合并到單個 XML 數據文件中。我們本來可以再次使用 XSL 執行,但我們將為把 X
SL 文件合并到 XMLHelper 類中最后創建一個方法。mergeXML() 方法允許我們把在當前抽
取中獲得的數據合并到包含以前抽取數據的檔案文件中。
WeatherExtractor.java 文件中給出了用于運行整個過程的代碼。我把程序執行調度任務
留給讀者,因為執行這些任務的與系統相關的方法通常比簡單的編程方法高級。圖 5 顯示
了每天運行一次 WeatherExtractor,共運行四天的結果。
圖 5. Web 抽取的結果
結束語
在本文中,我們已經描述并證明從目前存在的最大信息來源——萬維網——抽取信息的強
壯方法的基本原則。我們還討論了能夠使任何 Java 開發人員花最少的精力和具備最少的
抽取經驗就可以開始他們自己抽取工作所必需的編碼工具。盡管本文中的示例僅集中于抽
取有關華盛頓,西雅圖天氣的信息,但是這里出現的所有代碼幾乎都可以在任何數據抽取
中重復使用。事實上,除對 WeatherExtractor 類進行少許更改外,需要為其它數據挖掘
項目進行更改的代碼只有 XSL 變換代碼(順便提一下,它從不需要編譯)。
這種方法與想象中的一樣簡單。通過明智地選擇可靠的數據源以及在這些數據源中選取與
內容相關但與格式無關的錨,可以使您擁有一個維護成本低廉,可靠的數據抽取系統。并
且,根據經驗級別和要抽取的數據量,您可以在一小時之內就能安裝與運行它。
參考資料
Tidy for Java 由 Sami Lempinen 維護,并可從 SourceForge 下載。
XML 庫、Xerces 和 Xalan 可以從 Apache Project 網站獲取。
有關 XML 的更詳細信息,developerWorks 提供了一個與該技術相關的專區。
有關 XSL 和 XPath 的教程有很多,可以使用您喜愛的 Web 搜索引擎找到它們。
Jussi Myllymaki 著有一篇有關 ANDES 系統中 Web 搜尋與數據抽取之間關系的論文,刊
登在香港的 WWW10 上。
這里有一些使網站個性化的技術,以及使站點性能最大化的提示。
“管理網站性能”介紹了如何對網站性能從瀏覽器到數據庫服務器以及舊系統,進行微調
。
關于作者
Jared Jackson 自 2000 年 5 月 Harvey Mudd 大學畢業以來一直在 IBM Almaden Resea
rch Center 工作。Jared 還是斯坦福大學“計算機科學”系的研究生。可通過 jjared@a
lmaden.ibm.com 與 Jared 聯系。
Jussi Myllymaki 于 1999 年作為“研究職員”加盟 IBM Almaden Research Center,并
從麥迪遜的威斯康星大學獲得博士學位。可通過 jussi@almaden.ibm.com 與 Jussi 聯系
。
英文原文
http://www-900.ibm.com/developerWorks/xml/x-wbdm/index_eng.shtml
--
※ 來源:.南京大學小百合站 http://bbs.nju.edu.cn [FROM: 218.0.250.175]
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -