夏志富1,,王晗璐1,李玉平1,,曹磊2,,夏斌1
(1. 上海海事大學 信息工程學院,,上海 201306,; 2. 同濟大學 電子與信息工程學院,上海 201804)
摘要:隨著電子商務的迅速發(fā)展,,商品在電商平臺的排名變化信息愈來愈受到大家的關注,。市場上現(xiàn)有的排名查詢工具主要是基于C/S構(gòu)架,因為電商平臺的變化,,需要頻繁更新軟件,,使用較為不便。為了方便用戶對商品排名信息的查詢設計出一種基于B/S框架的排名查詢工具,。該工具實現(xiàn)了同一商品的多關鍵詞實時排名查詢,,并且能夠讓用戶自定義產(chǎn)品監(jiān)控列表并對列表中的產(chǎn)品排名變化情況進行長期監(jiān)控。本系統(tǒng)構(gòu)架采用Django來設計,,主要功能采用Python 2.7 語言來開發(fā),,云端采用穩(wěn)定便捷的亞馬遜公司的AWS云計算平臺進行服務器端的部署和搭建,經(jīng)過上線測試后發(fā)現(xiàn)系統(tǒng)達到了良好的效果,。
0引言
同濟大學嵌入式系統(tǒng)與服務計算教育部重點實驗室開放課題電子商務的興起促進了跨境貿(mào)易的發(fā)展,,作為當前最流行的跨境電商平臺,阿里巴巴擁有數(shù)量龐大的用戶群體,,約有40萬家電子商務公司入駐阿里巴巴平臺,。平臺上每家公司商品的銷量與其商品在阿里平臺上的排名情況緊密相連。商品排名越靠前,,關注度就越高,,銷量就會更好。因此提升商品排名是提升銷量的重要手段,。
目前關于阿里國際站的產(chǎn)品排名查詢工具主要有兩類,一類是阿里后臺提供的排名查詢工具,,但這個工具只能一次查詢一個關鍵詞,,使用起來不太方便而且沒有自定義關鍵詞查詢排名功能。另外一類就是由第三方公司提供的排名查詢工具,但主要是C/S構(gòu)架,,需要安裝客戶端軟件,。因為阿里巴巴服務器經(jīng)常會有變化,所以客戶端軟件也需要經(jīng)常更新,,給用戶使用過程中帶來不便,。并且此類軟件不具備長期追蹤產(chǎn)品排名變化的功能,公司不能及時了解自己商品排名變化情況,。因此本文設計了一個基于B/S構(gòu)架的產(chǎn)品排名查詢及監(jiān)控系統(tǒng),,用戶通過瀏覽器登錄本系統(tǒng)就可以進行商品排名查詢,并且可以長期追蹤商品排名變化情況,。
1系統(tǒng)設計
1.1系統(tǒng)架構(gòu)
系統(tǒng)基于Django架構(gòu)[1]的MVC模式:分為Model層,、View層、Control層,,將業(yè)務邏輯,、顯示邏輯和數(shù)據(jù)邏輯以低耦合、高復用的形式展現(xiàn)出來,,便于系統(tǒng)后期的擴展和維護,。
在View層,利用Django自帶的模板系統(tǒng)[2]跟前端開源框架Bootstrap結(jié)合,,增強用戶的交互體驗和提高前端頁面開發(fā)效率,。在Model層,系統(tǒng)采用MySQL關系型數(shù)據(jù)庫,,并利用Django的ORM機制將MySQL中的數(shù)據(jù)以對象接口的方式進行封裝,,極大方便了數(shù)據(jù)的查詢和操作。在Control層,,系統(tǒng)控制器通過分析請求,、邏輯判斷、模型操作以及重定向視圖等將整個系統(tǒng)業(yè)務流串聯(lián)起來,。系統(tǒng)結(jié)構(gòu)及邏輯流程如圖1所示,。
1.2系統(tǒng)功能結(jié)構(gòu)
該系統(tǒng)功能主要分為三個部分。
?。?)顯示邏輯模塊
系統(tǒng)前端靜態(tài)頁面利用前端開源框架Bootstarp實現(xiàn),,里面內(nèi)置了豐富的CSS樣式庫,可以快遞開發(fā)優(yōu)美的頁面,。系統(tǒng)動態(tài)頁面采用Javascript開源框架Jquery實現(xiàn),,能夠很方便地操控鼠標點擊事件和后臺數(shù)據(jù)的異步傳輸。
?。?)業(yè)務邏輯模塊
用戶注冊登錄后輸入商品名稱就可以直接檢索出該商品對應的3個關鍵詞,,并可以在下拉框中選擇備選商品,,或者刪除備選商品。當用戶輸入商品名發(fā)生錯誤時可以通過糾錯機制告知用戶,,并利用相似度算法[3]自動從數(shù)據(jù)庫中匹配出最相近的商品名,,減少用戶輸入時間。在批量導入查詢模塊中,,用戶可以上傳txt格式的待查詢商品名文件,,系統(tǒng)會自動檢索出其排名結(jié)果,并以Excel格式供用戶下載查看,。在管理產(chǎn)品頁面中,,用戶可以添加和刪改監(jiān)控的商品并觀察商品排名的變化趨勢,可以按時間段選擇商品在指定日期的排名變化情況,。
?。?)數(shù)據(jù)邏輯模塊
通過后臺Celery定時任務設定閑時爬取數(shù)據(jù)[4],定期自動地通過多線程并發(fā)更新數(shù)據(jù),,并在后臺服務器計算好商品排名的變化情況,,以便用戶可以立即從數(shù)據(jù)庫中調(diào)取數(shù)據(jù)查看,無需等待時間,。
1.3數(shù)據(jù)處理流程
在查詢頁面中進行商品查詢時,,如果用戶是首次查詢某個商品則系統(tǒng)進行實時商品排名查詢,并將排名信息存入數(shù)據(jù)庫,。這些信息被保存下來以后,,系統(tǒng)后臺設置了每天定時任務,會在設定的時間閑時爬取數(shù)據(jù)以更新排名和排名變化情況,。當用戶輸入以前查詢過的商品名時就可以直接從數(shù)據(jù)庫中調(diào)取其排名和排名變化數(shù)據(jù),,這樣可以減少服務器在同一時間的壓力,提升系統(tǒng)查詢的響應速度,。系統(tǒng)數(shù)據(jù)處理流程圖如圖2所示,。
2系統(tǒng)實現(xiàn)
2.1獲取數(shù)據(jù)資源
網(wǎng)絡爬蟲是獲取數(shù)據(jù)最快速有效的方法,是構(gòu)建搜索引擎最重要的組成部分之一,,通過對阿里國際站點爬蟲獲取數(shù)據(jù)是該系統(tǒng)構(gòu)建的基礎,。
本系統(tǒng)獲取商品數(shù)據(jù)分為以下流程。
?。?)通過用戶輸入的商品名在數(shù)據(jù)庫中檢索出其對應的關鍵詞,,根據(jù)其關鍵詞匹配出對應搜索結(jié)果的URL列表集合。
?。?)通過Python多線程爬蟲[5]獲取到URL列表集合對應的網(wǎng)頁源代碼,,并對每個網(wǎng)頁源代碼打好標記后裝載于queue隊列中,以便后面將數(shù)據(jù)以原順序展示出來,。
?。?)取出queue隊列里的網(wǎng)頁源代碼,,并使用Xpath解析工具通過多線程方式去解析網(wǎng)頁源代碼得到商品數(shù)據(jù)列表,,然后通過原先打好的標記對商品數(shù)據(jù)列表按照原網(wǎng)頁索引排序,,最終得到以原順序輸出的商品列表,最后通過列表索引計算排名,。
2.2數(shù)據(jù)庫設計
系統(tǒng)中利用Django ORM對象設定表之間的外鍵關聯(lián),,建立好數(shù)據(jù)之間的從屬關系,從而方便通過條件篩選出對應的數(shù)據(jù),。本系統(tǒng)創(chuàng)建了8個數(shù)據(jù)表,,主要通過loginuser(用戶信息表)和middleuser(查詢圖3系統(tǒng)外鍵關聯(lián)表關系圖
中間鍵表)作為橋梁與其他數(shù)據(jù)表建立外鍵關聯(lián)。通過loginuser表與其他表關聯(lián)使得用戶的查詢和數(shù)據(jù)信息管理可以通過外鍵把數(shù)據(jù)獨立起來,,形成以每個用戶為單元的數(shù)據(jù)塊,,以便于信息的維護和查詢速度的優(yōu)化。通過middleuser表和其他表的關聯(lián)可以使得用戶的下拉輸入框查詢變得容易處理,,減少了前端javascript的交互邏輯,,并且能夠記錄好用戶備選框中已經(jīng)添加了但還未得到查詢結(jié)圖4系統(tǒng)測試樣例圖果的商品列表,方便用戶下次直接一鍵查詢,。
系統(tǒng)的外鍵關聯(lián)表關系圖如圖3所示,。
2.3基于TF-IDF算法的相似度糾錯檢測
2.3.1TF-IDF算法的原理
TF-IDF(Term FrequencyInverse Document Frequency)是一種用于信息搜索和信息挖掘的常用加權技術[3]。TFIDF模型的主要思想是:用一個具有很強區(qū)分能力的詞w將文章d與其他文章區(qū)分開來,,該詞必須具備以下條件:在d文章中有很高的出現(xiàn)頻率并且該詞在其他文檔中較少出現(xiàn),。該模型主要包含了兩個因素:
(1)詞w在文檔d中的詞頻TF(Term Frequency),,即詞w在文檔d中出現(xiàn)次數(shù)count(w, d)和文檔d中總詞數(shù)size(d)的比值:
tf(w,d)=count(w,d)/size(d)(1)
?。?)詞w在整個文檔集合中的逆向文檔頻率idf (Inverse Document Frequency)[6],即文檔總數(shù)n與詞w所出現(xiàn)文件數(shù)docs(w,D)比值的對數(shù):
idf=log(n/docs(w,D))(2)
查詢串q與文檔d的匹配度可以由一個權重表示,,該權重是通過tfidf模型為每一個文檔d和由其關鍵詞w[1]…w[k]組成的查詢串q計算出來的:
tf-idf(q,d)
=sum{i=1..k/tf-idf(w[i],d)}
=sum{i=1..k/tf(w[i],d)*idf(w[i])}(3)
2.3.2相似度檢測的實現(xiàn)
系統(tǒng)利用Python自然語言處理中的開源框架Gensim可以對文本進行分詞,,再對分詞進行向量化處理并自動提取特征,利用這些向量化特征構(gòu)建TFIDF算法的模型從而計算出兩個文本之間的余弦夾角[7],,夾角越小則相似度越高,。按照此原理把用戶輸入的商品名與該用戶對應的店鋪所有商品名進行TFIDF算法的相似度對比,對比值放在列表中,,取出其最大值,,則可得到相似度最大的商品名,實現(xiàn)了用戶的糾錯檢測功能,。
3系統(tǒng)測試
通過上線測試和每天監(jiān)控商品排名數(shù)據(jù)的變化情況,,發(fā)現(xiàn)系統(tǒng)達到了預期效果。后臺定時爬蟲任務的數(shù)據(jù)能夠保證每天的更新,,并且正常穩(wěn)定運行,。數(shù)據(jù)能夠準確地反映真實商品的排名情況,,并且能夠計算出每天的商品排名變化,通過手動方式查詢對比符合真實情況的排名變化結(jié)果,。系統(tǒng)部分測試效果如圖4所示,。
4結(jié)論
通過將商品數(shù)據(jù)自動抓取下來,并利用Django框架開發(fā)出一個智能化的商品排名監(jiān)控系統(tǒng),,能有效監(jiān)控商品排名及其變化趨勢,,大大節(jié)約了眾多店鋪商的手工查詢時間,幫助他們實現(xiàn)更好的收益,。本文利用互聯(lián)網(wǎng)技術簡化了電子商務平臺上的繁雜性工作,,并把相似度算法應用于用戶輸入檢測,便于輸入信息的檢索,,實現(xiàn)了商務數(shù)據(jù)監(jiān)控的智能化,。本系統(tǒng)能夠?qū)惩怆娚藤Q(mào)易者提供極大的便利,有很強的應用價值,。
參考文獻
?。?] 柴慶龍, 謝剛, 陳澤華, 等. 基于Django框架的故障診斷和安全評估平臺[J].電子技術應用, 2015,43(4):1921.
[2] 王曉斌,,閆果,,基于Django開發(fā)的橋梁健康監(jiān)控數(shù)據(jù)查詢的Web應用[J].電子技術與軟件工程,2009,24(4):2324.
?。?] XU W, CALLISONBURCH C, DOLAN W B. SemEval2015 task 1: Paraphrase and semantic similarity in Twitter (PIT)[C].Proceedings of the 9th International Workshop on Semantic Evaluation (SemEval),, 2015.
[4] DETTINGER R D, KOLZ D P, STEVENS R J, et al. Automated data model extension through data crawler approach[P]. US: US8165989, 2012.
?。?] SINGHAL N, DIXIT A, SHARMA A K. Design of a priority based frequency regulated incremental crawler[M]. LAP LAMBERT Academic Publishing, 2014.