中文手機評論情感分類系列(三)

2022-09-08 00:48:23 字數 3317 閱讀 8953

class predictsentiment():

def __init__(self):

self.stopword=

self.stopword_path='d:/**檔案/學習檔案/情感分析/dict詞典/哈工大stopword .txt'#停用詞路徑

with open(self.stopword_path, 'r', encoding='utf-8') as fr: # 載入停用詞

for word in fr.readlines():

def cut_word(self,sent):

line = re.sub(r'[a-za-z0-9]*', '', sent)

wordlist = jieba.lcut(line, cut_all=false)

return ' '.join([word for word in wordlist if word not in self.stopword]) # 文字分詞,並且用空格連線起來,便於下面向量化

'''將要分詞的檔案位址(.csv檔案)輸出分詞後的列表'''

def getstringlist(self,file_path):

f= pd.read_csv(file_path, sep=',', encoding='gbk')

# 將文字分詞,並且分詞用空格隔開變成文字存才dataframe中

#print(type(f))

wordlist = list(f.word_list) # 必須變成列表個是才能輸入下面的向量化函式

return wordlist

'''分詞文字向量化,輸入訓練和**資料,進行向量化'''

def vect(self,trainlist,predictlist1):

count_vec = countvectorizer(min_df=1)

words_vec = count_vec.fit_transform(trainlist)

train_x = words_vec.toarray()

pre_x = count_vec.transform(predictlist1)

return train_x, pre_x

def *****bayes(self,train_x,train_y,pre_x):

clf = multinomialnb()

clf.fit(train_x, train_y)

pre_result = clf.predict(pre_x)

print('正向情感率', len(np.where(pre_result == 1)[0]) / len(pre_result))

print('負向情感率', 1 - (len(np.where(pre_result == 1)[0]) / len(pre_result)))

'''集合所有功能的集合成函式,直接輸入訓練資料和**資料的位址就可以分類結果,並輸出**資料的正負情感比例'''

def nb_classify(self,train_path,pre_path):

train_x=self.getstringlist(train_path)

train_y=np.array(list(pd.read_csv(train_path, sep=',', encoding='gbk').label))

pre_x=self.getstringlist(pre_path)

train_vec_x, pre_vec_x=self.vect(train_x,pre_x)

self.*****bayes(train_vec_x, train_y,pre_vec_x)

if __name__=='__main__':

s=time.time()

train_path = 'd:/machinelearning data/crawlerdata/train_phone1.csv'

predict_path_xiaomi = 'd:/machinelearning data/crawlerdata/huaweip20_pre_jd100.csv'

predict_path_huawei = 'd:/machinelearning data/crawlerdata/xiaomi6x_pre_jd100.csv'

'''例項化,開始用樸素貝葉斯來分類並計算情感比例'''

demo=predictsentiment()

# c=demo.getstringlist(train_path)

# #print(c)

# demo.nb_classify(train_path,predict_path_xiaomi)

abs_path_xiaomi = 'd:\\machinelearning data\\crawlerdata\\cluster_data\\feature_phone_xiaomi\\'

abs_path_huawei = 'd:\\machinelearning data\\crawlerdata\\cluster_data\\feature_phone_huawei\\'

for i in file_name:

print(i+'的情感分布')

demo.nb_classify(train_path,abs_path_huawei+i+'.csv')

#print('\n')

e=time.time()

print('耗時:',e-s)

分類結果如下:

camera的情感分布

正向情感率 0.96513470681458

負向情感率 0.03486529318541998

processor的情感分布

正向情感率 0.9580152671755725

負向情感率 0.041984732824427495

price的情感分布

正向情感率 0.9159159159159159

負向情感率 0.08408408408408408

performance的情感分布

正向情感率 0.9122340425531915

負向情感率 0.08776595744680848

endurance的情感分布

正向情感率 0.9320754716981132

負向情感率 0.06792452830188678

正向情感率 0.9781771501925546

負向情感率 0.02182284980744542

serve的情感分布

正向情感率 0.9189944134078212

負向情感率 0.08100558659217882

耗時: 139.80674481391907

情感分類 中文語料

title 情感分類 中文語料 data 2017 03 04 tags nltk 折騰了幾天終於上午用nltk實現了中文語料的分類。把整個流程記錄一下。用的是譚松波老師的酒店分類的語料庫,有四個版本 2000 balanced 4000 balanced 6000 balanced 10000 u...

使用者評論實體識別及情感分類

實體識別方法 1.傳統常見方法 crf,hmm 2.深度學習方法 rnn下的lstm 3.規則匹配 基於詞典 1,2兩種方法都是序列標註問題,eg 寶馬的座椅比帕薩特更舒服 標註 寶 b 馬 e 寶馬座椅比帕薩特更舒服 標註 寶 b 馬 m 座 m 椅 e 情感分類 1.常見分類器,如svm,lr,...

情感極性 關於中文情感分類的知識

文字分類,就是在預定義的分類體系下,根據文字的特徵 內容或屬性 將給定文字與乙個或多個類別相關聯的過程。1 構建分類類別體系 2 獲取帶有類別標籤的文字 3 文字的特徵選擇及權重計算 4 分類器的選擇與訓練 5 文字的分類應用 對應每乙個類別,都可以訓練出對應的詞特徵檔案。對應到類別的細分或者合併,...