運用詞向量模型分辨評論

代碼實現:

import jieba
import pandas as pd
hp = pd.read_table('優質評價.txt',encoding='gbk')
cp = pd.read_table('差評1.txt',encoding='gbk')
cp_segments = []
contents = cp.content.values.tolist()
for content in contents:results = jieba.lcut(content)if len(results)>1:cp_segments.append(results)
cp_fc_results = pd.DataFrame({'content':cp_segments})
cp_fc_results.to_excel('cp_fc_results.xlsx',index=False)
hp_segments = []
contents = hp.content.values.tolist()
for content in contents:results = jieba.lcut(content)if len(results)>1:hp_segments.append(results)
hp_fc_results = pd.DataFrame({'content':hp_segments})
hp_fc_results.to_excel('hp_fc_results.xlsx',index=False)
stopwords = pd.read_csv('StopwordsCN.txt',encoding='utf-8',engine='python',on_bad_lines='skip')
def drop_stopwords(contents,stopwords):segments_clean=[]for content in contents:line_clean = []for word in content:if word in stopwords:continueline_clean.append(word)segments_clean.append(line_clean)return segments_clean
contents = cp_fc_results.content.values.tolist()
stopwords = stopwords.stopword.values.tolist()
cp_fc_clean = drop_stopwords(contents,stopwords)
# print(cp_fc_clean)
contents = hp_fc_results.content.values.tolist()
hp_fc_clean = drop_stopwords(contents,stopwords)
# print(hp_fc_clean)
cp_train=pd.DataFrame({'segments_clean':cp_fc_clean, 'label':1})
hp_train=pd.DataFrame({'segments_clean':hp_fc_clean, 'label':0})
pj_train = pd.concat([cp_train,hp_train])
pj_train.to_excel('pj_train.xlsx',index=False)
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from imblearn.over_sampling import SMOTE
all_words = []
for seg in pj_train['segments_clean'].values:all_words.append(' '.join(seg))
vec = CountVectorizer(max_features=5000, lowercase=False, ngram_range=(1,3))
all_vec = vec.fit_transform(all_words)
all_labels = pj_train['label'].values
smote = SMOTE(random_state=42)
all_vec_resampled, all_labels_resampled = smote.fit_resample(all_vec, all_labels)
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(all_vec_resampled,all_labels_resampled,test_size=0.2,random_state=0)
from sklearn.naive_bayes import MultinomialNB
classifier = MultinomialNB(alpha=0.1)
classifier.fit(x_train, y_train)
from sklearn import metrics
print("\n過采樣后的訓練集評估 ")
train_pr = classifier.predict(x_train)
print(metrics.classification_report(y_train, train_pr))
print("\n過采樣后的測試集評估")
test_pr = classifier.predict(x_test)
print(metrics.classification_report(y_test, test_pr))
s = '這個玩意真好,我很喜歡'
s_seg = jieba.lcut(s)
s_seg_clean = []
for word in s_seg:if word  in stopwords:continues_seg_clean.append(word)
s_words = [' '.join(s_seg_clean)]
s_vec = vec.transform(s_words)
predicted = classifier.predict(s_vec)
if predicted[0] == 0:print('這段話是好評')
else :print('這段話是差評')

代碼解析:

這段代碼實現了一個基于機器學習的文本情感分析系統,能夠區分文本是好評還是差評。整個流程涵蓋了數據加載、文本預處理、特征工程、模型訓練和預測評估等完整環節。

一、數據加載與預處理

1. 導入必要庫

import jiebaimport pandas as pd

jieba:中文分詞庫,用于將中文文本拆分為詞語

pandas:數據處理庫,用于數據讀取、轉換和存儲

2. 加載評論文本數據

hp = pd.read_table('優質評價.txt',encoding='gbk')cp = pd.read_table('差評1.txt',encoding='gbk')

從本地文件加載好評和差評數據

使用gbk編碼讀取文本文件,適應中文編碼格式

3. 文本分詞處理

# 差評分詞cp_segments = []contents = cp.content.values.tolist()for content in contents:results = jieba.lcut(content) # 精確分詞if len(results)>1: # 過濾過短文本cp_segments.append(results)cp_fc_results = pd.DataFrame({'content':cp_segments})cp_fc_results.to_excel('cp_fc_results.xlsx',index=False)# 好評分詞(與差評處理邏輯相同)hp_segments = []contents = hp.content.values.tolist()for content in contents:results = jieba.lcut(content)if len(results)>1:hp_segments.append(results)hp_fc_results = pd.DataFrame({'content':hp_segments})hp_fc_results.to_excel('hp_fc_results.xlsx',index=False)

將文本內容轉換為列表形式便于處理

使用jieba.lcut()進行中文分詞

過濾長度過短的文本,避免無意義數據

將分詞結果保存為 Excel 文件,便于后續分析

二、停用詞處理

1. 加載停用詞表

stopwords = pd.read_csv('StopwordsCN.txt',encoding='utf-8',engine='python',on_bad_lines='skip')

加載中文停用詞表(如 "的"、"是"、"在" 等無實際意義的詞)

設置on_bad_lines='skip'跳過格式錯誤的行

2. 定義停用詞過濾函數

def drop_stopwords(contents,stopwords):segments_clean=[]for content in contents:line_clean = []for word in content:if word in stopwords: # 如果是停用詞則跳過continueline_clean.append(word)segments_clean.append(line_clean)return segments_clean

遍歷每個分詞結果

過濾掉屬于停用詞表中的詞語

返回清洗后的分詞結果

3. 執行停用詞過濾

# 處理差評數據contents = cp_fc_results.content.values.tolist()stopwords = stopwords.stopword.values.tolist()cp_fc_clean = drop_stopwords(contents,stopwords)# 處理好評數據contents = hp_fc_results.content.values.tolist()hp_fc_clean = drop_stopwords(contents,stopwords)

將 DataFrame 中的分詞結果轉換為列表

將停用詞表轉換為列表便于查找

對好評和差評數據分別進行停用詞過濾

三、數據集構建

# 構建帶標簽的訓練數據cp_train=pd.DataFrame({'segments_clean':cp_fc_clean, 'label':1}) # 差評標簽為1hp_train=pd.DataFrame({'segments_clean':hp_fc_clean, 'label':0}) # 好評標簽為0pj_train = pd.concat([cp_train,hp_train]) # 合并正負樣本pj_train.to_excel('pj_train.xlsx',index=False) # 保存訓練數據

為不同情感的文本添加標簽(1 表示差評,0 表示好評)

使用pd.concat()合并好評和差評數據

保存合并后的訓練數據集

四、特征工程

1. 文本特征向量化

from sklearn.feature_extraction.text import CountVectorizer# 將分詞列表轉換為字符串all_words = []for seg in pj_train['segments_clean'].values:all_words.append(' '.join(seg))# 構建詞袋模型vec = CountVectorizer(max_features=5000, lowercase=False, ngram_range=(1,3))all_vec = vec.fit_transform(all_words)

CountVectorizer:將文本轉換為詞頻特征向量

max_features=5000:保留出現頻率最高的 5000 個詞

lowercase=False:不將文本轉換為小寫(中文無需此操作)

ngram_range=(1,3):考慮 1-3 個詞的組合特征(如 "性價比"、"非常好" 等)

fit_transform():擬合模型并將文本轉換為特征向量

2. 處理類別不平衡問題

from imblearn.over_sampling import SMOTEall_labels = pj_train['label'].values # 獲取標簽smote = SMOTE(random_state=42) # 初始化SMOTE過采樣器all_vec_resampled, all_labels_resampled = smote.fit_resample(all_vec, all_labels)

SMOTE:一種過采樣技術,用于解決類別不平衡問題

通過生成少數類別的合成樣本,使正負樣本比例平衡

random_state=42:設置隨機種子,保證結果可復現

五、模型訓練與評估

1. 劃分訓練集和測試集

from sklearn.model_selection import train_test_splitx_train, x_test, y_train, y_test = train_test_split(all_vec_resampled, all_labels_resampled,test_size=0.2, random_state=0)

將數據集劃分為訓練集(80%)和測試集(20%)

random_state=0:固定隨機種子,確保劃分結果一致

2. 訓練樸素貝葉斯模型

from sklearn.naive_bayes import MultinomialNBclassifier = MultinomialNB(alpha=0.1) # 初始化多項式樸素貝葉斯模型classifier.fit(x_train, y_train) # 訓練模型

MultinomialNB:適用于離散特征的樸素貝葉斯分類器,常用于文本分類

alpha=0.1:添加平滑參數,避免零概率問題

3. 模型評估

from sklearn import metricsprint("\n過采樣后的訓練集評估 ")train_pr = classifier.predict(x_train)print(metrics.classification_report(y_train, train_pr))print("\n過采樣后的測試集評估")test_pr = classifier.predict(x_test)print(metrics.classification_report(y_test, test_pr))

使用classification_report生成詳細評估指標

包括精確率(precision)、召回率(recall)、F1 分數等

分別評估模型在訓練集和測試集上的表現

六、實際預測應用

# 待預測文本s = '這個玩意真好,我很喜歡'# 文本預處理(與訓練數據處理保持一致)s_seg = jieba.lcut(s) # 分詞s_seg_clean = []for word in s_seg:if word in stopwords: # 過濾停用詞continues_seg_clean.append(word)s_words = [' '.join(s_seg_clean)] # 轉換為字符串# 特征轉換與預測s_vec = vec.transform(s_words) # 使用訓練好的向量器轉換predicted = classifier.predict(s_vec) # 預測# 輸出結果if predicted[0] == 0:print('這段話是好評')else :print('這段話是差評')

對新文本進行與訓練數據相同的預處理(分詞、去停用詞)

使用訓練好的CountVectorizer進行特征轉換

利用訓練好的模型進行情感預測

根據預測結果輸出對應的情感標簽

總結

這段代碼完整實現了一個中文文本情感分析系統,核心流程包括:

文本數據加載與分詞處理

停用詞過濾凈化文本

構建帶標簽的訓練數據集

文本特征向量化與類別平衡處理

樸素貝葉斯模型訓練與評估

實際文本情感預測應用

通過這個流程,我們可以將非結構化的文本數據轉換為機器學習模型可處理的結構化數據,最終實現對中文文本情感的自動分類。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95635.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95635.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95635.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于Apache Flink的實時數據處理架構設計與高可用性實戰經驗分享

基于Apache Flink的實時數據處理架構設計與高可用性實戰經驗分享 一、業務場景描述 在現代電商平臺中,實時用戶行為數據(點擊、瀏覽、購物車操作等)對業務決策、個性化推薦和風控都至關重要。我們需要搭建一個高吞吐、低延遲且具備高可用性的…

第二十四天:虛函數與純虛函數

虛函數(Virtual Function) 定義:在基類中使用 virtual 關鍵字聲明的成員函數,允許在派生類中被重新定義(覆蓋,override)。其目的是實現多態性,即通過基類指針或引用調用函數時&#…

uniapp微信小程序-登錄頁面驗證碼的實現(springboot+vue前后端分離)EasyCaptcha驗證碼 超詳細

一、項目技術棧登錄頁面暫時涉及到的技術棧如下:前端 Vue2 Element UI Axios,后端 Spring Boot 2 MyBatis MySQL Redis EasyCaptcha JWT Maven后端使用IntelliJ IDEA 2024.3.5 前端使用 HBuilder X 和 微信開發者工具二、實現功能及效果圖過期管理驗證碼有…

【Java】HashMap的詳細介紹

目錄 一.HashMap 1.基本概念 2.底層數據結構: 3.HashCode和equals方法 為什么重寫HashCode方法? 為什么重新equals方法? 4.put操作 1.初始化和數組檢查 2.計算索引并檢查桶是否為空 3.桶不為null,處理哈希沖突 4.判斷鏈…

nifi 增量處理組件

在Apache NiFi中,QueryDatabaseTable 是一個常用的處理器,主要用于從關系型數據庫表中增量查詢數據,特別適合需要定期抽取新增或更新數據的場景(如數據同步、ETL流程)。它的核心功能是通過跟蹤指定列的最大值&#xff…

【數據可視化-90】2023 年城鎮居民人均收入可視化分析:Python + pyecharts打造炫酷暗黑主題大屏

🧑 博主簡介:曾任某智慧城市類企業算法總監,目前在美國市場的物流公司從事高級算法工程師一職,深耕人工智能領域,精通python數據挖掘、可視化、機器學習等,發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

Multiverse模型:突破多任務處理和硬件效率瓶頸的AI創新(上)

隨著人工智能技術的快速發展,多模態模型成為了當前研究的熱點。多模態模型的核心思想是能夠同時處理和理解來自不同模態(如文本、圖像、音頻等)的數據,從而為模型提供更加全面的語境理解和更強的泛化能力。 楊新宇,卡…

OpenCV 高斯模糊降噪

# 高斯模糊處理(降噪) # 參數1: 原始圖像 # 參數2: 高斯核尺寸(寬,高,必須為正奇數) # 其他模糊方法: # - cv.blur(): 均值模糊 # - cv.medianBlur(): 中值模糊 # - cv.bilateralFilter(): 雙邊濾波 blur cv.GaussianBlur(img, (7,7), cv…

常見通信協議詳解:TCP、UDP、HTTP/HTTPS、WebSocket 與 RPC

在現代網絡通信中,各種協議扮演著至關重要的角色,它們決定了數據如何在網絡中傳輸、控制其可靠性、實時性與適用場景。對于開發者而言,理解這些常見的通信協議,不僅有助于更好地設計系統架構,還能在面對不同業務需求時…

深入解析MPLS網絡中的路由器角色

一、 MPLS概述:標簽交換的藝術 在深入角色之前,我們首先要理解MPLS的核心思想。傳統IP路由是逐跳進行的,每一臺路由器都需要對數據包的目的IP地址進行復雜的路由表查找(最長匹配原則),這在網絡核心層會造成…

AI的拜師學藝,模型蒸餾技術

AI的拜師學藝,模型蒸餾技術什么是模型蒸餾,模型蒸餾是一種高效的模型壓縮與知識轉移方法,通過將大型教師模型的知識精煉至小型學生模型,讓學生模型模仿教師模型的行為和內化其知識,在保持模型性能的同時降低資源消耗。…

Python爬蟲從入門到精通(理論與實踐)

目錄 1. 爬蟲的魅力:從好奇心到數據寶藏 1.1 爬蟲的基本流程 1.2 準備你的工具箱 2. 第一個爬蟲:抓取網頁標題和鏈接 2.1 代碼實戰:用requests和BeautifulSoup 2.2 代碼解析 2.3 遇到問題怎么辦? 3. 進階爬取:結構化數據抓取 3.1 分析網頁結構 3.2 代碼實戰:抓取…

【DDIA】第三部分:衍生數據

1. 章節介紹 本章節是《設計數據密集型應用》的第三部分,聚焦于多數據系統集成問題。前兩部分探討了分布式數據庫的基礎內容,但假設應用僅用一種數據庫,而現實中大型應用常需組合多種數據組件。本部分旨在研究不同數據系統集成時的問題&#…

Spring配置線程池開啟異步任務

一、單純使用Async注解。1、Async注解在使用時,如果不指定線程池的名稱,則使用Spring默認的線程池,Spring默認的線程池為SimpleAsyncTaskExecutor。2、方法上一旦標記了這個Async注解,當其它線程調用這個方法時,就會開…

AI數據倉庫優化數據管理

內容概要AI數據倉庫代表了現代企業數據管理的重大演進,它超越了傳統數據倉庫的范疇。其核心在于利用人工智能技術,特別是機器學習和深度學習算法,來智能化地處理從多源數據整合到最終價值提取的全過程。這種新型倉庫不僅能高效地統一存儲來自…

SpringMVC(詳細版從入門到精通)未完

SpringMVC介紹 MVC模型 MVC全稱Model View Controller,是一種設計創建Web應用程序的模式。這三個單詞分別代表Web應用程序的三個部分: Model(模型):指數據模型。用于存儲數據以及處理用戶請求的業務邏輯。在Web應用中,JavaBean對象,業務模型等都屬于Model。 View(視圖…

vue3運行機制同tkinter做類比

把剛才“Vue3 蓋別墅”的故事,和 Python 的 tkinter 做一個“一一對應”的翻譯,你就能瞬間明白兩件事的異同。 為了直觀,用同一棟房子比喻: Vue3 的“網頁” ? tkinter 的“桌面窗口”瀏覽器 ? Python 解釋器 Tcl/Tk 引擎 下面…

Fastadmin后臺列表導出到表格

html中添加按鈕<a href"javascript:;" class"btn btn-success btn-export" title"{:__(導出數據)}" ><i class"fa fa-cloud-download"></i> {:__(導出數據)}</a>對應的js添加代碼處理點擊事件&#xff0c;添加…

Nginx反向代理與緩存實現

1. Nginx反向代理核心配置解析 1.1 反向代理基礎配置結構 Nginx反向代理的基礎配置結構主要包括server塊和location塊的配置。一個典型的反向代理配置示例如下&#xff1a; server {listen 80;server_name example.com;location / {proxy_pass http://backend_servers;proxy_se…

第2節 如何計算神經網絡的參數:AI入門核心邏輯詳解

?? 核心目標:找到最佳w和b! 上期咱們聊了神經網絡就是復雜的"線性變換+激活函數套娃",今天的重頭戲就是:怎么算出讓模型完美擬合數據的w(權重)和b(偏置)!先從最簡單的線性函數說起,一步步揭開神秘面紗 那么如何計算w和b呢?首先明確我們需要的w和b能夠讓…