1. 程式人生 > >python簡單實現天貓手機評論標籤提取--自然語言處理

python簡單實現天貓手機評論標籤提取--自然語言處理

這裡寫圖片描述
這裡寫圖片描述
作為國產機的腦殘粉,這次試試用自然語言處理的方法簡單的提取手機評論的標籤。大概步驟:

  1. 爬取手機的10萬條評論文字
  2. 結巴中文分詞,提取前20個頻率高的名詞+形容詞
  3. 結巴分詞,去停用詞,製作語料庫
  4. gensim自然語言處理庫的word2vec,訓練語料庫,計算各個名詞和形容詞之間的相似度,得出前20相似度最高的組合短語

1.爬取手機的10萬條評論文字

天貓的評論資料並非直接在評論頁中網頁點選右鍵“檢視網頁原始碼”,你會發現這樣是不能直接獲取到評論文字的,因為天貓的評論資料是非同步儲存在一個JS連線裡面的。
具體操作可以參考原文的–[通過Python抓取天貓評論資料]

我的操作可簡化,只需要文字就好,不需要時間、型號什麼的。
直接貼程式碼:

#!/usr/bin/python
#-*-coding:utf-8-*-
# 匯入所需的開發模組
import requests
import re
from bs4 import BeautifulSoup,NavigableString
import time
import random

# 建立迴圈連結
urls = []
for i in list(range(0,6000)):
    urls.append('https://rate.tmall.com/list_detail_rate.htm?itemId=534715680661&spuId=649678568&sellerId=1114511827&order=3&currentPage=%s'
%i) #偽裝瀏覽器 homepage = 'https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-15291748836.71.6de0f6b7FVqGYN&id=534715680661&rn=923b06965813887ae5b9b07a6f062f3e&abbucket=2&sku_properties=10004:653780895;5919063:6536025' headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0'
} cookies = requests.get(homepage,headers=headers).cookies ratecontent = [] # 迴圈抓取資料 for url in urls: # content=(requests.get(url).text) r = requests.get(url,headers=headers,cookies=cookies).text ratecontent.extend(re.findall(re.compile('"rateContent":"(.*?)","rateDate"'),r)) #正則化提取評論內容 print(url) time.sleep(random.uniform(3,8)) file =open('榮耀8天貓評論.csv','w') for i in ratecontent: file.write(i+'\n') file.close()

我獲取的評論文字是這樣的,挺順利的,分部分去爬取比較不容易被反爬蟲
這裡寫圖片描述

2.結巴中文分詞提取關鍵詞

建議認真讀讀官網,挺容易上手的–結巴分詞官網

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import jieba
import jieba.analyse
import logging

logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)  #設定日誌
content = open('/mnt/share/jieba_test/榮耀8天貓評論.csv','rb').read()
tagsA = jieba.analyse.extract_tags(content, topK=20,allowPOS='a')    #allowPOS是選擇提取的詞性,a是形容詞
tagsN = jieba.analyse.extract_tags(content, topK=20, allowPOS='n')   #allowPOS='n',提取名詞

這是關鍵詞的截圖
這是結果
其中‘棒棒’識別成了名詞哈!後期我們可以制定結巴分詞的詞庫進行糾正。這也是結巴分詞的功能之一。

3.製作語料庫

import pandas as pd
import numpy as np
import logging
import codecs

words=jieba.lcut(content,cut_all=False)   #分詞,精確模式

#去停用詞,先自己網上找中文停用詞,製作好“停用詞表.txt”
stopwords = []  
for word in open("/mnt/share/jieba_test/stopword.txt", "r"):  
    stopwords.append(word.strip())  
stayed_line = ""  
for word in words:  
    if word not in stopwords:  
        stayed_line += word + " "   

#儲存預料
file=open('/mnt/share/jieba_test/corpus.txt','wb')
file.write(stayed_line.encode("utf-8"))
file.close()

分詞後的語料是這樣的,分詞很重要!非常影響word2vec的訓練效果
這裡寫圖片描述

4.深度學習word2vec訓練評論語料

word2vec官網:https://code.google.com/p/word2vec/
word2vec的使用,Python,利用gensim模組。
語料不大,普通配置的電腦都可以,一兩分鐘的事情。
直接上程式碼:

from gensim.models import word2vec

sentences = word2vec.Text8Corpus('/mnt/share/jieba_test/corpus.txt')  # 載入剛剛製作好的語料
model = word2vec.Word2Vec(sentences, size=200)  # 預設window=5

commit_index=pd.DataFrame(columns=['commit','similarity'],index=np.arange(100))  

index=0
for i in tagsN:
    for j in tagsA:
        commit_index.loc[index,:]=[i+j,model.similarity(i,j)]
        index+=1

comit_index_final=commit_index.sort(columns='similarity',ascending=False)
comit_index_final.index=commit_index.index

出來的結果是這樣的,還不錯,雖然有幾個組合是比較奇怪哈哈
這裡寫圖片描述

總結:

  1. 由於時間問題,我只處理1萬條評論文字
  2. 後期可增加評論文字,越大越好!
  3. 分詞時候可以新增自己的庫,比如說‘榮耀8’應該為同一個詞,而不應該分為‘榮耀’和‘8’;再比如說,可以設定‘棒棒’應該識別為形容詞,而不是名詞哈。
  4. 後面可以增加同義詞分析,‘成色不錯’和‘外觀很好’應該為同一類等等。
  5. 這次主要心得還是jieba和word2vec的功能確實很強大!
  6. 這次是試試手,肯定會有更好的辦法,希望大家再指教指教,文中如有錯誤請提出,寫得比較匆忙。

相關推薦

python簡單實現手機評論標籤提取--自然語言處理

作為國產機的腦殘粉,這次試試用自然語言處理的方法簡單的提取手機評論的標籤。大概步驟: 爬取手機的10萬條評論文字 結巴中文分詞,提取前20個頻率高的名詞+形容詞 結巴分詞,去停用詞,製作語料庫 gensim自然語言處理庫的word2v

抓取手機評論

meta pen 天貓 lang ret ntp cat last eat import re import json import time import requests from bs4 import BeautifulSoup tm_headers =

Python 2.7下下載並安裝nltk (自然語言處理工具包)

>>>import nltk >>>nltk.download() 下載器上的Collection選項卡顯示軟體包如何被打包分組。選擇book標記所在行,然後選擇下載路徑(注意不要安裝到二級或三級目錄下,最好安裝到D盤或C盤的根目錄下,否則會報錯, 我這裡地址就是不

通過爬取商品評論例項分析Python爬取ajax動態生成的資料

本文主要通過爬取天貓商品kindle的評論為例來說明利用python爬取ajax動態生成的資料的方式,本文使用的工具如下: 工具 chrome瀏覽器【尋找評論的動態連結】 python3.5【執行程式碼】 mysql【儲存爬蟲獲得

通過Python抓取評論資料

接著點進去後,發現有非常多的歷史累計評價,於是我一條條的檢視,一頁頁的翻,覺得口碑還是非常不錯的,於是選擇這款商品。我想大家可能也是這樣的購物模式,也許還可能更加複雜(貨比三家,口碑比較,聯絡賣家......)。如果有一天,我想研究這些個評論資料,然後玩玩高大上的自然語言處理,我是不

DNN的BP算法Python簡單實現

images 相等 1.0 [] 重要 work arange imp into BP算法是神經網絡的基礎,也是最重要的部分。由於誤差反向傳播的過程中,可能會出現梯度消失或者爆炸,所以需要調整損失函數。在LSTM中,通過sigmoid來實現三個門來解決記憶問題,用tenso

Python簡單實現產生隨機位數的密碼及註意事項小結

初學 需要 模塊 swd watermark cal raw 感謝 digits Python簡單實現產生隨機位數的密碼 #!/usr/bin/python#coding:utf-8#產生任意位數的隨機密碼import random,string #導入隨機數和字符串模

Python簡單實現Web服務器

Python 簡單web服務器實現 import socket import re import gevent from gevent import monkey monkey.patch_all()# 識別等待時間,讓協程切換 def client_handler(client_socket)

18、OpenCV Python 簡單實現一個圖片生成(類似抖音生成字母人像)

gaussian int read 。。 str gray clas range TE 1 __author__ = "WSX" 2 import cv2 as cv 3 import numpy as np 4 5 def local_threshold(i

基於SVM的python簡單實現驗證碼識別

save def lse highlight pro imp bubuko uac 如果 1. 爬取驗證碼圖片 from urllib import request def download_pics(pic_name): url = ‘http://wsbs

SGD/BGD/MBGD使用python簡單實現

while [1] python 批量 break pri 向量 梯度下降 其他 算法具體可以參照其他的博客: 隨機梯度下降: # coding=utf-8 ‘‘‘ 隨機梯度下降 ‘‘‘ import numpy as np # 構造訓練數據 x = np.arange

OneR演算法的Python簡單實現

OneR演算法就是,在已有資料中,根據具有相同特徵值的個體最可能屬於哪個類別進行分類。即取效果最好的那個特徵進行分類。 #-*- coding=utf-8 -*- # import numpy as np from sklearn.datasets import load_iris f

Python簡單實現ATM自動存取款機

# ATM後臺資料庫 id cipher name money ATMDataBase = [ {‘id’:‘001’,‘cipher’:‘123456’,‘name’:‘張三’,‘money’:1000}, {‘id’:‘002’,‘cipher’:‘123456’,‘name

python簡單實現Kinesis方法

1.建立自己的應用目錄,cd進入目錄 2.Kinesis增加應用: cp ~/amazon-kinesis-client-python-master/samples/sample_kclpy_app.py . cp ~/amazon-kinesis-client-python-mas

基於Storm+KafKa技術實現雙十一”大屏實時展示專案

基於Storm+KafKa技術實現“天貓雙十一”大屏實時展示專案資料下載: https://pan.baidu.com/s/1BX7jG1llz4zdT5fqdi4sHQ 提取碼:c2nl Storm是什麼? 為什麼學習Storm? Storm是Twitter開源的分散式實時大資料處理框架,被業界稱為實時

基於Storm+KafKa技術實現雙十一”大屏實時展示項目

動態 twitter 學習 初始化 ask 計算 keep targe pig 基於Storm+KafKa技術實現“天貓雙十一”大屏實時展示項目資料下載: https://pan.baidu.com/s/1BX7jG1llz4zdT5fqdi4sHQ 提取碼:c2nl St

storm視訊教程_Storm實現雙十一”大屏實時展示專案

基於Storm+KafKa+HBase+Java Web+HighChart技術實現的“天貓雙十一”大屏實時展示專案分享下載地址:https://pan.baidu.com/s/1BX7jG1llz4zdT5fqdi4sHQ 提取碼:c2nl Storm是什麼? 為什麼學習Storm? Storm是Twit

python簡單實現學生管理系統

#!/usr/bin/env python # -*- coding: UTF-8 -*- # Author:Du Fei import os #學號,姓名,年齡,性別,身高 allStudentsList=[] #從檔案中讀取資料 def readFromFile(fileName): if

常見資料探勘演算法和Python簡單實現

1、K近鄰演算法 原理:計算待分類樣本與每個訓練樣本的距離,取距離最小的K個樣本,這k個樣本,哪個類別佔大多數,則該樣本屬於這個類別。 優點:1、無需訓練和估計引數,2、適合多分類,3、適合樣本容量比較大的問題 缺點:1、對測試樣本記憶體開銷大,2、可解釋性差,無法

Python簡單實現表白藏頭詩

匯入資料資料分行存在很多空行長度為24和16的行可能是正確的詩句(分別對應五言和七言)部分長度正確的行,可能是目錄行,標題等,需要仔細甄別資料清洗203 秦川雄帝宅,函谷壯皇居。綺殿千尋起,離宮百雉餘。 24204 連薨遙接漢,飛觀迥凌虛。雲日隱層闕,風煙出綺疏。 24206