基於Python爬蟲的大眾點評商家評論的文字挖掘
使用工具
程式語言工具:Python 2.7 R 2 .2.1 excel
瀏覽器:Google Chrome
資料庫: Mongodb
相關演算法:情感分析
情感分析(Sentiment Analysis),又被稱為傾向性分析、意見挖掘,是通過對帶有一定的情感色彩的主觀性文字進行處理分析,歸納推理的過程,例如通過使用者對產品的效能、價格、便攜性等方面的評價分析使用者對該產品的情感傾向。通常來說,文字情感分析的目的是找出說話者在某些話題上或者針對同一事物的兩極的觀點的態度。或許是說話者當時的情感狀態,抑或是作者有意向的情感交流。
情感分析的基本步驟是分類,即將文字傳達的情感劃分為不同的類別。在句子級、功能級判斷文字所闡述的觀點是正面的,負面的,抑或是中性的。
確定目標網站
對目標網站結構進行解析:利用瀏覽器自帶的解析工具檢視評論在網頁的前端程式碼中的位置。
通過結構的解析我們發現每一條評論都是在<div class=’comment-list’></div>,所以我們只需要遍歷這個層疊樣式表裡面的每一個 <divclass=’comment -text’></div>就能獲取到當前頁的所有的評論。
Python中有許多用於網路爬蟲的包 在這裡我們使用了“request” 和”Beautiful soup”兩個用於爬取和解析網頁的軟體包,以及“pymongo”連線上mongodb資料庫方便存取資料。
(1)使用反-反爬機制
大眾點評網站因為經常被網路爬蟲訪問已經確立了一些反爬機制。測試之後其主要反爬機制的原理是:在某一時段內某一IP地址訪問該網站的頻率超過某一個閾值就會對這個IP地址進行封禁使其無法訪問從而限制網路爬蟲,因此我們使用兩個反-反爬方法:一、使用代理IP地址偽裝從多個地址對網站進行訪問。二、使用瀏覽器頭和Cookies 使Python爬蟲的訪問更像是瀏覽器的訪問爬取資料:在之前的網頁分析之中我們已經對單頁的網頁進行解析了,我們現在只需要進一步的使用語言把它的內容下載並且解析出我們需要的內容。
存入資料庫
我們使用的是mongodb 資料庫,Python自帶了pymongo 包我們可以通過這個包在mongodb中創立一個數據庫“dianping”:
client = pymongo.MongoClient('localhost', 27017)
dianping = client['new']
infors = dianping['info']
而後把資料插入到資料庫中就完成了整個過程。而後對資料內的資料進行資料清洗
文字挖掘過程:
詞頻統計
為了方便檢視每個詞出現的次數,找出消費者使用最多的詞語,我們先使用軟體包進行分詞,而後再將分詞結果寫入excel表格當中,方便視覺化。思想十分簡單,就是先分詞,而後統計頻次再寫入excel表格中,再製作成餅圖方便檢視。
商品關鍵詞抽取
結巴中文分詞包的基於TF-IDF演算法的關鍵詞抽取,TF-IDF是一種統計方法,用以評估一字詞對於一個檔案集或一個語料庫中的其中一份檔案的重要程度。字詞的重要性隨著它在檔案中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。
我們將抽選出來的關鍵詞寫入TXT文字中方便查閱,在這個過程當然中也要考慮到中文編碼的問題。
抽取出來的關鍵詞主要有:不錯,東西,新鮮,好吃,三文魚,味道,菜品,環境,排隊,很多,自助,海鮮,火鍋,就是,感覺,比較,還是,喜歡,價效比,服務員。
對評論的情感分析(基於SnowNLP)
SnowNLP是一個用python語言寫的類庫,可以方便的處理中文文字內容,是受到了TextBlob的啟發而寫的,由於現在所能找到的大部分的自然語言處理庫基本都是針對英文的,少有針對中文處理的,於是我們實現了一個方便處理中文的類庫,並且和TextBlob不同的是,這裡沒有用到NLTK,所有的演算法都是自己實現的,並且自帶了一些訓練好的字典。
在對評論進行情感分析的時候,因為每個商品評論都是單獨成句地使用,所以我們就把評論都放到一個Dataframe中,新增一列用來記錄每一行也就是每一句評價的評分。這個評分在0~1之間。並且將這個dataframe寫入到excel表格內方便後續的資料分析操作。
結果對比:
關鍵詞對比
大眾點評網站給出的關鍵詞是如下一張圖:
我們實際由商品評論得出來的關鍵詞是:不錯,東西,新鮮,好吃,三文魚,味道,菜品,環境,排隊,很多,自助,海鮮,火鍋,就是,感覺,比較,還是,喜歡,價效比,服務員。我們可以人工剔除一些沒什麼實際含義的關鍵詞,最後得到的關鍵詞應該是:不錯,新鮮,好吃,三文魚,味道,菜品,環境,排隊,自助,海鮮,火鍋,喜歡,價效比,服務員。由此可以看出消費者對這家店鋪的影響整體還是比較積極的,從關鍵詞的角度,來看這家店的服務員和三文魚以及菜品相對是比較得到一些關注,但是排隊的問題也是存在的。
情感分數比對
大眾點評的打分機制是五分制,所以說我們可以這樣認為,單句情感分數在0.8分以上的就是五分。0.6~0.8為4分以此類推。我們對得到的情感分數值進行計算處於每個分段的評論數量有多少。我們使用pandas計算出滿分的評論有5868條而在實際的網站,滿分的評論有8451條中間相差了大概2500條。