利用sklearn進行豆瓣電影評論的文字分類

2021-08-17 12:32:43 字數 3377 閱讀 6848

在之前,我已經在豆瓣電影top250中爬取了約6w條好評和差評,在此我們來利用這些資料,進行入門級別的文字分類。

使用xlrd庫進行xlsx檔案的讀取,讀取完畢後使用jieba分詞工具進行分詞。

import numpy as np

import pandas as pd

import re

import jieba

import xlrd

from sklearn import feature_extraction

from sklearn.feature_extraction.text import tfidftransformer

from sklearn.feature_extraction.text import countvectorizer

from nltk.tokenize import word_tokenize

from sklearn.linear_model import logisticregression

from sklearn.model_selection import train_test_split

from sklearn.metrics import accuracy_score

from nltk.corpus import stopwords

from sklearn.svm import svc, linearsvc

from sklearn.ensemble import randomforestclassifier

from sklearn.neighbors import kneighborsclassifier

from sklearn.*****_bayes import gaussiannb

from sklearn.linear_model import perceptron

from sklearn.linear_model import sgdclassifier

from sklearn.tree import decisiontreeclassifier

# 載入資料

# 從excel檔案中讀取出book物件,並定位到sheet1,也就是具體的資料

douban_data_input = xlrd.open_workbook(r"./douban_xlsx.xlsx").sheet_by_index(0)

douban_data = [[0 for i in range(2)] for j in range(douban_data_input.nrows)]

for i in range(douban_data_input.nrows):

douban_data[i][0] = bool(douban_data_input.cell_value(rowx=i, colx=0))

str = douban_data_input.cell_value(rowx=i, colx=1)

douban_data[i][1] = " ".join(jieba.cut(str, cut_all=false, hmm=true))

tf-idf可以將一段文字對映到多維向量空間中,具體的解釋請參見《數學之美》(吳軍 著)p104開始的tf-idf解釋。

總的來說,就是把一段話的每個詞都配之以重要性指標,某個詞在這段話的出現次數多時,它就更重要。比如一段話中提到了三次「中國」,就比另一段只提到了一次的重要。

此外,當這個詞在所有話中出現的次數多時(比如「蘋果」,「賈伯斯」等不常見詞),這個詞就更加的重要;當這個詞在所有的段落中出現次數都多時(比如「的」,「這」等常見詞),這個詞的重要性下降。

對於每個詞都計算這樣的重要性並寫成乙個向量後,對映就完成了。

具體**:

# 由於記憶體不夠大,只取其中的一部分進行測試

all_star_list = [x[0] for x in douban_data] # 提取出第一列來

all_star_list = all_star_list[20000:34000]

all_comment_list = [x[1] for x in douban_data] # 提取出第二列來

all_comment_list = all_comment_list[20000:34000]

# 資料的tf-idf資訊計算

vectorizer = countvectorizer() # 該類會將文字中的詞語轉換為詞頻矩陣,矩陣元素a[i][j],表示j詞在i類文字下的詞頻

transformer = tfidftransformer() # 該類會統計每個詞語的tf-idf權值

# 第乙個fit_transform是計算tf-idf,第二個fit_transform是將文字轉為詞頻矩陣

tfidf = transformer.fit_transform(vectorizer.fit_transform(all_comment_list))

word = vectorizer.get_feature_names() # 獲取詞袋模型中的所有詞語

簡單起見,只呼叫最簡單的邏輯回歸進行擬合,拆分4成資料作為cv集

# 拆分資料為訓練集,交叉驗證集合

x_train, x_vc, y_train, y_vc = train_test_split(weight, all_star_list, test_size=0.4, random_state=0)

# 開始訓練

clf = logisticregression()

clf.fit(x_train, y_train)

y_pre = clf.predict(x_vc)

train_scores = clf.score(x_train, y_train)

valid_scores = accuracy_score(y_pre, y_vc)

print(c, train_scores, valid_scores)

結果:訓練集上0.888452380952381 ,cv集上0.85,結果還算可以。

調整正則化強度:將

clf = logisticregression()
替換為(c從1到30計算多次,取最大值)

clf = logisticregression(c=10.0)
訓練集上0.9907142857142858,cv集上0.87375,提公升2.3%

豆瓣讀書 豆瓣電影

1.獲取豆瓣讀書頁資訊,為 如下 coding utf 8 import requests from lxml import etree 1.獲取豆瓣讀書網頁內容 headers url response requests.get url,headers headers text response....

python豆瓣影評 python 豆瓣電影爬蟲

因為 的緣故,在家甚是無聊,想著可能會做乙個和資料分析相關的畢業設計,不如就提前準備一下資料。眼光一掃,就是你了,豆瓣!說起來很有意思,我最開始寫爬蟲就是從豆瓣開始的,現在又回來了。豆瓣,這世間所有的相逢都是久別重逢。好了,不皮了,開始正題。寫爬蟲之前,首先要明確乙個問題你需要什麼資料。先有目標,再...

python爬蟲 豆瓣電影

最近學習python 順便寫下爬蟲練手 爬的是豆瓣電影排行榜 python版本2.7.6 安裝 beautiful soup sudo apt get install python bs4 安裝 requests sudo apt get install python requests下面是py a...