時(shí) 睿,姚天昉
隨著互聯(lián)網(wǎng)的普及,電子商務(wù)在人們?nèi)粘I钪衅鹬絹碓街匾淖饔谩k娮由虅?wù)根據(jù)服務(wù)提供商和服務(wù)對(duì)象的不同分為3種:B2B、B2C和C2C,這里的B是Business的簡(jiǎn)稱,代表的是企業(yè),C是Customer的簡(jiǎn)稱,代表的是個(gè)人消費(fèi)者。B2B跟個(gè)人消費(fèi)者以及人們的日常生活關(guān)系不大,B2C與C2C相比,具有產(chǎn)品質(zhì)量和服務(wù)有保障的優(yōu)點(diǎn),人們慢慢開始從傳統(tǒng)購(gòu)物向B2C轉(zhuǎn)變。在人們使用的比較多的網(wǎng)上購(gòu)物網(wǎng)站,3C電子類的有京東、新蛋,圖書類的有卓越、當(dāng)當(dāng),日常生活用品類的有一號(hào)店等等。
在這些眾多的購(gòu)物網(wǎng)站和頻繁的交易中,人們已經(jīng)制造出相當(dāng)多的數(shù)據(jù),這給其他人商業(yè)機(jī)構(gòu)或者研究人員無數(shù)潛在的機(jī)會(huì)來洞悉用戶體驗(yàn)、商業(yè)營(yíng)銷、個(gè)人偏好和通常所謂的人類行為[1]。本文試用Web數(shù)據(jù)挖掘的有關(guān)方法,設(shè)計(jì)了一個(gè)可以為B2C用戶推薦優(yōu)惠商品的系統(tǒng)。
本系統(tǒng)中主要負(fù)責(zé)4個(gè)模塊:用戶管理系統(tǒng)、信息收集系統(tǒng)、信息監(jiān)測(cè)系統(tǒng)、結(jié)果通知系統(tǒng)。4個(gè)模塊的關(guān)系主要根據(jù)數(shù)據(jù)流的處理時(shí)間按來劃分。首先,用戶使用該推薦系統(tǒng)必須先登錄該系統(tǒng),使用完畢需要退出系統(tǒng),以保證私人的信息不被泄露。其次,用戶登錄系統(tǒng)后,需要填寫其所感興趣的商品的信息。然后,本系統(tǒng)會(huì)根據(jù)用戶的喜好,周期性地收集該產(chǎn)品的信息,主要用到的技術(shù)就是網(wǎng)絡(luò)爬蟲。在然后,收集到的信息由于信息量巨大,會(huì)放到一個(gè)非關(guān)系型的數(shù)據(jù)庫,同時(shí)監(jiān)測(cè)模塊會(huì)檢查數(shù)據(jù)的異常,比如降價(jià)促銷之類的。最后,一旦有用戶期望的行為發(fā)生,結(jié)果通知系統(tǒng)就會(huì)用某種方式通知該用戶。整個(gè)系統(tǒng)的架構(gòu)設(shè)計(jì),如圖1所示:
圖1 系統(tǒng)架構(gòu)
眾所周知,一個(gè)成功的信息系統(tǒng)會(huì)被很多用戶使用,這就需要這個(gè)系統(tǒng)提供一個(gè)管理用戶的功能,比如管理用戶的密碼,記錄用戶的喜好。本系統(tǒng)根據(jù)整個(gè)業(yè)務(wù)流程,將為用戶管理模塊需要實(shí)現(xiàn)以下幾個(gè)功能:
首先,使用該系統(tǒng)需要注冊(cè)一個(gè)用戶賬號(hào)。由于郵件地址的唯一性,和恢復(fù)密碼的便利性,本系統(tǒng)選擇郵箱地址作為用戶名。但同時(shí)為了與好友聯(lián)系時(shí)候稱呼上的方便,也為用戶提供了昵稱設(shè)置。
一旦創(chuàng)建好賬號(hào),用戶可以方便地登錄本系統(tǒng)。在同一瀏覽器,所有打開本系統(tǒng)的網(wǎng)頁,用戶所作的行為,都與存儲(chǔ)在該用戶的名下。如果用戶使用完畢,注銷登錄,該用戶或者其他人則不能再原來的瀏覽器上操作該用戶的數(shù)據(jù)[2]。
由于互聯(lián)網(wǎng)數(shù)據(jù)的巨大,單個(gè)用戶的能力往往十分微小,如果能夠共享他人的數(shù)據(jù)和行為,那么每個(gè)用戶得到的則不僅是自己擁有的。每個(gè)用戶都在自己關(guān)注的商品,同時(shí)會(huì)對(duì)該商品進(jìn)行某些數(shù)據(jù)上的操作,如果該用戶能夠分享其的數(shù)據(jù)或者行為,他的好友也會(huì)得到該商品的信息。
在用戶定義好監(jiān)測(cè)目標(biāo)后,本系統(tǒng)就會(huì)周期性地去互聯(lián)網(wǎng)獲取該商品的信息。這里首先要用到的就是網(wǎng)絡(luò)爬蟲,把商品所在的信息頁下載到本系統(tǒng),然后對(duì)這一非結(jié)構(gòu)化的數(shù)據(jù)進(jìn)行分析。最后將這些信息存儲(chǔ)起來,已備系統(tǒng)和用戶查用。
一般地,網(wǎng)絡(luò)爬蟲分為通用的,限定的和主題的。通用網(wǎng)絡(luò)爬蟲的算法有先進(jìn)先出(First In Fist Out, FIFO),對(duì)應(yīng)的是寬度優(yōu)先爬蟲(breadth-first crawler)。如果將隊(duì)列的實(shí)現(xiàn)有先進(jìn)先出隊(duì)列替換為優(yōu)先隊(duì)列,那么我們就獲得另外一種爬去策略,即帶偏好的爬蟲(Preferential Crawler)[3]。這兩種爬蟲爬取的網(wǎng)頁會(huì)是一個(gè)樹形的結(jié)構(gòu),在本系統(tǒng)中,由于用戶已經(jīng)給定商品的 URL,所以這些網(wǎng)頁相對(duì)互聯(lián)網(wǎng)來說都是孤兒節(jié)點(diǎn),也就是限定的爬蟲[4]。
在一個(gè)完整的網(wǎng)頁下載到本地后,接下來的工作就是從網(wǎng)頁中抽取目標(biāo)信息的問題,即從自然語言文本中和網(wǎng)頁的結(jié)構(gòu)化數(shù)據(jù)中抽取信息(Structured Data Extraction)。一個(gè)抽取這種數(shù)據(jù)的程序通常被稱作為包裝器(Wrapper)。研究人員和互聯(lián)網(wǎng)公司從20世紀(jì)90年代中期開始,著手研究信息抽取的問題,主要采用 3種方法:手工方法(Manual Approach)、包裝器歸納(Wrapper Induction)和自動(dòng)抽?。ˋutomatic Extraction)。本系統(tǒng)采用手工的方法抽取網(wǎng)頁的結(jié)構(gòu)化數(shù)據(jù)。手工方法通過觀察網(wǎng)頁及其源碼,由編程人員找出以下模式(pattern),再根據(jù)這些模式編寫程序獲取目標(biāo)數(shù)據(jù)。為了讓這一郭晨簡(jiǎn)單些,人們構(gòu)建了幾種模式規(guī)范語言及其用戶界面[1]。此外,網(wǎng)頁數(shù)據(jù)往往并不是結(jié)構(gòu)化的,需要容錯(cuò)處理[5]。
由于商品信息量的巨大,本系統(tǒng)采用非關(guān)系型的數(shù)據(jù)庫系統(tǒng)Hadoop保存商品信息。關(guān)系型數(shù)據(jù)庫的索引、關(guān)系以及事務(wù)處理等系統(tǒng)開銷會(huì)限制系統(tǒng)的橫向伸縮性,降低半結(jié)構(gòu)化、非結(jié)構(gòu)化數(shù)據(jù)的載入和批處理效率。所以 Hadoop刻意舍棄了索引、關(guān)系以及事務(wù)處理等關(guān)系型數(shù)據(jù)庫的特性,按照“Shared Nothing”的架構(gòu)原則,從底層開始設(shè)計(jì)了一個(gè)全新的分布式文件系統(tǒng)。
在可靠性要求極高的超大規(guī)模計(jì)算環(huán)境中,Hadoop建立了一個(gè)清晰的抽象層,解決了大規(guī)模數(shù)據(jù)分析任務(wù)和底層系統(tǒng)支撐能力之間存在的矛盾和挑戰(zhàn)。使用Hadoop模型,可以非常容易地實(shí)現(xiàn)并行數(shù)據(jù)處理任務(wù),程序員不必考慮諸如同步、并發(fā)、硬件失敗等底層技術(shù)細(xì)節(jié)。
當(dāng)商品信息的數(shù)據(jù)被采集到數(shù)據(jù)庫系統(tǒng)中,本系統(tǒng)后臺(tái)會(huì)運(yùn)行一個(gè)進(jìn)程,也就是規(guī)則引擎,針對(duì)用戶定義的監(jiān)測(cè)行為進(jìn)行檢查,如果數(shù)據(jù)符合用戶的期望要求,本系統(tǒng)會(huì)發(fā)一個(gè)通知請(qǐng)求給結(jié)果通知系統(tǒng)。
在這個(gè)模塊,程序的主要工作是對(duì)非關(guān)系型數(shù)據(jù)庫進(jìn)行查詢操作,如果數(shù)據(jù)收集模塊是每半小時(shí)執(zhí)行一次,那么信息監(jiān)測(cè)模塊也是每半小時(shí)執(zhí)行一次,而且緊跟著信息收集模塊后面進(jìn)行的。
一旦用戶登錄本系統(tǒng),最需要做的事情就是錄入他所關(guān)注的商品的信息。本系統(tǒng)讓用戶輸入該商品在B2C購(gòu)物網(wǎng)站的信息主頁,然后自動(dòng)獲得該商品的價(jià)格及相關(guān)信息。同時(shí),本系統(tǒng)也為用戶獲取該商品會(huì)在其他同類型的購(gòu)物網(wǎng)站上的信息。
在用戶定義好監(jiān)測(cè)目標(biāo)后,本系統(tǒng)就會(huì)周期性地去互聯(lián)網(wǎng)獲取該商品的信息?;ヂ?lián)網(wǎng)上的數(shù)據(jù)量是巨大的,用戶利用這個(gè)功能可以得到他所想要的數(shù)據(jù)。比如,某商品2011年一月份的價(jià)格是 150元,然后每個(gè)月都會(huì)或多或少地降價(jià),降幅在1元到5元不等,該用戶希望價(jià)格跌倒120元的時(shí)候通知他。本系統(tǒng)可以讓用戶為商品定義是否降價(jià)或者價(jià)降幅度來監(jiān)測(cè)商品的信息。
當(dāng)信息檢測(cè)模塊檢查到用戶定義的商品異常行為,該模塊就會(huì)給結(jié)果通知系統(tǒng)發(fā)送一個(gè)通知請(qǐng)求。通知系統(tǒng)支持兩種形式的通知,即郵件和短信。由于用戶使用的是互聯(lián)網(wǎng)系統(tǒng),所以本系統(tǒng)的默認(rèn)通知方式也是最通常的通知方式為郵件通知。但是郵件通知沒有及時(shí)性,如果用戶下班或者網(wǎng)上才看到通知,但是該商品的降價(jià)只持續(xù)了兩個(gè)小時(shí)之后又取消了,這是用戶不希望看到的。所以本系統(tǒng)也提供短信通知的方式。
本系統(tǒng)采用 SMTP協(xié)議實(shí)現(xiàn)郵件通知系統(tǒng),只需一個(gè)SMTP的服務(wù)器,就可以給用戶發(fā)送郵件通知,現(xiàn)在許多個(gè)人郵箱也提供這樣的服務(wù)。另外一個(gè)重要的通知方式是短信,現(xiàn)在許多通信運(yùn)行商都提供短信平臺(tái)。如果針對(duì)的事中國(guó)移動(dòng)的用戶,也可以使用OpenFetion平臺(tái)。
本系統(tǒng)只是利用Web數(shù)據(jù)挖掘的若干技術(shù)為B2C提供優(yōu)惠商品的推薦系統(tǒng),但是該系統(tǒng)在許多方面還有待完善。
在數(shù)據(jù)收集模塊中,現(xiàn)在許多購(gòu)物網(wǎng)站使用圖片來顯示價(jià)格的,主要是為了其他的購(gòu)物網(wǎng)站或者競(jìng)爭(zhēng)對(duì)手收集他們的商品信息,這也為本系統(tǒng)的信息收集帶來了困難。所以,如果要更好地更多地收集商品信息,本系統(tǒng)需要一個(gè)數(shù)字識(shí)別模塊,用在網(wǎng)絡(luò)爬蟲中,獲取圖片形式的商品價(jià)格信息。
在收據(jù)收集模塊中,還有一個(gè)問題,就是結(jié)構(gòu)化數(shù)據(jù)的抽取,如果支持的購(gòu)物網(wǎng)站很多,就需要一個(gè)自動(dòng)的包裝器。Web數(shù)據(jù)挖掘中,提供另外兩種信息提取的辦法,第一種是包裝器歸納(Wrapper Induction),它是有監(jiān)督學(xué)習(xí)方法,是半自動(dòng)的,這種辦法從手工標(biāo)注的網(wǎng)頁或者數(shù)據(jù)記錄中學(xué)習(xí)一組抽取規(guī)則,隨后這組規(guī)則即被用于從具有類似格式的網(wǎng)頁中抽取目標(biāo)數(shù)據(jù)項(xiàng)。第二種事自動(dòng)抽?。ˋutomation Extraction),即無監(jiān)督方法,給定一張或數(shù)張網(wǎng)頁,這種方法自動(dòng)從中尋找模式或語法,一邊進(jìn)行數(shù)據(jù)抽取。由于這種方法不需要手工標(biāo)注,所以他可以處理對(duì)大量站點(diǎn)和網(wǎng)頁的數(shù)據(jù)抽取工作[1]。
綜上所述,本系統(tǒng)使用了 Web數(shù)據(jù)挖掘的若干技術(shù),實(shí)現(xiàn)了一個(gè)為 B2C推薦優(yōu)惠商品的系統(tǒng)。具體使用到的技術(shù)有網(wǎng)絡(luò)爬蟲和包裝器生成。該系統(tǒng)為 B2C用戶完成了自動(dòng)監(jiān)測(cè)所關(guān)注商品的功能,同時(shí)提供商品信息收藏和與好友分享的功能。該系統(tǒng)是 Web數(shù)據(jù)挖掘技術(shù)在電子商務(wù)中一個(gè)非常有用的應(yīng)用。
[1]基于Hadoop及關(guān)系型數(shù)據(jù)庫的海量數(shù)據(jù)分析研究 程瑩,電信科學(xué)2010年11期
[2]Python Web Development with Django, Jeff Forcier, Paul Bissex, Wesley Chu, [j]Pearson Education, Inc. 2009.5.Charming Python: Easy Web data collection with mechanize and Beautiful Soup, David Mertz, Ph.D. IBM [j]Developer Works, Nov 24, 2009
[3]Web數(shù)據(jù)挖掘 Bing Liu著 俞勇等譯 清華大學(xué)出版社2009年4月第一版
[4]Programming Collective Intelligence, Toby Segaran,O’Reilly Media. Inc, 2009.1