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