我用Python進行情感分析,讓程式員和女神牽手成功

来源:https://www.cnblogs.com/xiaomu-/archive/2018/04/27/8965130.html
-Advertisement-
Play Games

Python,Python,web,爬蟲,開發,機器學習,人工智慧,數據分析,資料庫,編程,基礎入門 先用電影評論來做情感分析,要看到最後哦 ...


先用電影評論來做情感分析,主要包括下麵幾個主要內容(看到最後哦):

1、準備文本數據

2、基於文本文檔來構建特征向量

3、訓練機器學習模型來區分電影評論的正面評論和負面評論(對你的女神同樣適用哦~~)

4、使用外存學習和線上學習演算法來處理大數據

在本篇文章中,主要介紹對於電影評論數據的準備工作。

 


 

一、情感分析

情感分析也稱觀點挖掘(opinion mining),是機器學習中自然語言處理(NLP)領域一個非常流行的分支,它主要是分析文檔的情感傾向。


 

二、下載數據

請自行準備一個電影信息(或者直接使用你和女神的聊天信息)


 

該電影評論是來自IMDb中的電影評論,數據集一共包含了50000個關於電影的正面評論和負面評論,正面評論代表對於影片的評分超過了6顆星,而負面評論則表示評分低於5顆星。50000條評論被分成了四個文件夾train的neg和pos和test的neg和pos,其中每個文件夾中包含了12500個txt電影評論文件,其中pos代表正面評論,neg代表負面評論。所以,我們需要將這50000個txt文件整合成一個表格,表格分為兩列,第一列表示評論的內容,第二列表示評論是屬於正面(用1表示)還是負面(用0表示)。

三、生成電影評論的表格文件

將50000個txt文件整合成一個表格文件的時候,需要十分鐘左右。我們可以通過Python的pyprind庫將整個處理過程可視化,同時它還能根據當前電腦的運行狀態來估計剩餘處理時間,處理完成之後,還能查看消耗的總時間。通過python的數據分析庫pandas將電影評論保存成一個csv文件。

1、預計處理總時間


 

2、統計處理總時間


 

3、python實現代碼


 
 

 

我們還需要知道將文本轉換為特征向量前的一些準備工作,主要內容包括:

1、清洗文本數據

2、標記文檔

3、詞袋模型

 


 

一、清洗文本數據

清洗文本需要將文本中所包含的一些不必要的字元刪除。

1、刪除不必要的字元

print(data["review"][0][-50:])

is seven.

Title (Brazil): Not Available

發現評論中含有一些HTML標記符、標點符號、以及其他的非字母符號。HTML標記符在對於我們對評論做情感分析的時候沒有影響,至於標點符號可能會影響句子的語義,為了簡化處理我們將標點符號進行刪除,保留表情符號(如":)"),因為表情符號對於電影評論情感的分析很有幫助。下麵,我們通過python的正則表達式來刪除這些不必要的字元。

python的正則表達式提供了一種字元串搜索特定字元串的方便有效方法,正則表達式也要很多的技巧和方法,如果對正則表達式有興趣的話可以自己去瞭解一下。在這裡我們只是簡單的使用一下,所以對正則表達式不會有太過詳細的介紹。


 

2、標記文檔

對於英文文檔我們可以利用其天然的空格作為單詞的分隔符,如果是中文的時候,可以利用一些分詞庫如jieba分詞。在句子中,我們可能會遇見先"runners"、"run"、"running"單詞不同的形式,所以我們需要通過詞乾提取(word

stemming)來提取單詞原形。最初的詞乾提取演算法是由Martin F. Porter在1979年提出的,被稱為porter

stemming演算法。我們可以通過安裝python的自然語言工具包NLTK,官網安裝鏈接:http://www.nltk.org/install.html,在NLTK中已經是實現了Porter

Stemming演算法,還有實現了比它更高級的Snowball stemmer和Lancaster stemmer與porter

stemming相比,它們更加的提取速度更快。可以通過pip命令進行安裝

pip install nltk


 

3、停用詞的移除

停用詞大致可以分為兩類,一類是功能詞,這些功能詞非常普遍,與其他的詞相比,功能詞沒有什麼實際的含義,比如"the"、"is"、"at"、"which"等。還有一類是辭彙詞,比如"want"等。停用詞對於電影評論的情緒分類沒有任何意義,所以我們需要將一些停用詞進行刪除。通過nltk.download函數獲取NLTK提供的停用詞,並使用這些停用詞來移除電影評論中的停用詞。NLTK庫提供的停用詞,一共有179個,下麵給出部分的停用詞


 

我們還需要做什麼呢?

1、將單詞轉換為特征向量

2、TF-IDF計算單詞關聯度

在之前,我們已經知道一些文本的預處理和分詞。這篇文章中,主要介紹如何將單詞等分類數據轉成為數值格式,以方便我們後面使用機器學習來訓練模型。


 

一、將單詞轉換為特征向量

詞袋模型(bag-of-words model):將文本以數值特征向量的形式來表示。主要通過兩個步驟來實現詞袋模型:

1、為整個文檔集(包含了許多的文檔)上的每個單詞創建一個唯一的標記。

2、為每個文檔構建一個特征向量,主要包含每個單詞在文檔上的出現次數。

註意:由於每個文檔中出現的單詞數量只是整個文檔集中很少的一部分,因此會有很多的單詞沒有出現過,就會被標記為0。所以,特征向量中大多數的元素就會為0,就會產生稀疏矩陣。

下麵通過sklearn的CountVectorizer來實現一個詞袋模型,將文檔轉換成為特征向量


 

通過count.vocabulary_我們可以看出每個單詞所對應的索引位置,每一個句子都是由一個6維的特征向量所組成。其中,第一列的索引為0,對應單詞"and","and"在第一和二條句子中沒有出現過,所以為0,在第三條句子中出現過一些,所以為1。特征向量中的值也被稱為原始詞頻(raw

term frequency)簡寫為tf(t,d),表示在文檔d中辭彙t的出現次數。

註意:在上面詞袋模型中,我們是使用單個的單詞來構建詞向量,這樣的序列被稱為1元組(1-gram)或單元組(unigram)模型。除了一元組以外,我們還可以構建n元組(n-gram)。n元組模型中的n取值與特定的應用場景有關,如在反垃圾郵件中,n的值為3或4的n元組可以獲得比較好的效果。下麵舉例說明一下n元組,如在"the weather is sweet"這句話中,1元組:"the"、"weather"、"is"、"sweet"。2元組:"the weather"、"weather is"、"is sweet"。在sklearn中,可以設置CountVecorizer中的ngram_range參數來構建不同的n元組模型,預設ngram_range=(1,1)。sklearn通過CountVecorizer構建2元組


 
 

二、TF-IDF計算單詞關聯度

在使用上面的方法來構建詞向量的時候可能會遇到一個問題:一個單詞在不同類型的文檔中都出現,這種類型的單詞其實是不具備文檔類型的區分能力。我們通過TF-IDF演算法來構建詞向量,從而來剋服這個問題。

詞頻-逆文檔頻率(TF-IDF,term frequency-inverse document frequency):tf-idf可以定義為詞頻×逆文檔頻率


 

其中tf(t,d)表示單詞t在文檔d中的出現次數,idf(t,d)為逆文檔頻率,計算公式如下


 

其中,nd表示文檔的總數,df(t,d)表示包含單詞t的文檔d的數量。分母中加入常數1,是為了防止df(t,d)=0的情況,導致分母為0。取log的目的是保證當df(t,d)很小的時候,不會導致idf(t,d)過大。

通過sklearn的TfidfTransformer和CountVectorizer來計算tf-idf


 
 

可以發現"is"(第二列)和"the"(第六列),它們在三個句子中都出現過,它們對於文檔的分類所提供的信息並不會很多,所以它們的tf-idf的值相對來說都是比較小的。

註意:sklearn中的TfidfTransformer的TF-IDF的計算與我們上面所定義TF-IDF的公式有所不同,sklearn的TF-IDF計算公式


 

通常在計算TF-IDF之前,會對原始詞頻tf(t,d)做歸一化處理,TfidfTransformer是直接對tf-idf做歸一化。TfidfTransformer預設使用L2歸一化,它通過與一個未歸一化特征向量L2範數的比值,使得返迴向量的長度為1,計算公式如下:


 

下麵通過一個例子來說明sklearn中的TfidfTransformer的tf-idf的計算過程,以上面的第一句話"The sun is shining"為例子

1、計算原始詞頻

a、單詞所對應的下標


 

b、計算第三句話的原始詞頻tf(t,d)


 

c、計算逆文檔頻率idf(t,d)


 

註意:其他的詞在計算tf-idf都是0,因為原始詞頻為0,所以就不需要計算idf了,log是以自然數e為底。

d、計算tf-idf


 

所以,第一個句子的tf-idf特征向量為[0,1,1.29,1.29,0,1,0]

e、tf-idf的L2歸一化


 

在下一篇文章中將介紹如何使用這些句子的特征向量來構建一個模型進行情感分類。雖然在實際演示的是電影影評,但是訓練好了可是可以用來處理你的聊天信息的哦~~~


 

想不想用來測試一下你的女神和你聊天時候的情緒呢?保你牽手成功!!!

另外,小編有自己的學習交流群大家如果想要來學習的話,可以一起來交流:719+139+688,不管你是小白還是大牛,小編都歡迎,而且小編會在群裡面不定期分享乾貨,包括小編自己整理的一份2018年最新學習資料和大神分享直播,歡迎初學和進階中的小伙伴


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 雖然Java培訓已經有很久的年頭了,但是現在想學java的人數卻沒有減少的跡象。其中許多人對java的學費感到很好奇,不知道參加java培訓要花多少錢 參加java培訓學費基本上是10000到30000左右,有的肯能比這還高,不同的機構價錢會有略微的差別。不過你可千萬不要認為說學費貴的就一定最好,你 ...
  • 一、SQL註入與防範 使用PreparedStatement替代Statement對象,它提供了參數化SQL的方式 二、事務 定義 事務是併發控制的基本單位,滿足ACID特征 原子性:atomicity 一致性:consistency 隔離性:isolation 持久性:durability 事務控 ...
  • http://https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=3102410964,4206562405&fm=27&gp=0.jpg ...
  • 題目描述 如圖:有n個重物,每個重物系在一條足夠長的繩子上。每條繩子自上而下穿過桌面上的洞,然後系在一起。圖中X處就是公共的繩結。假設繩子是完全彈性的(不會造成能量損失),桌子足夠高(因而重物不會垂到地上),且忽略所有的摩擦。 問繩結X最終平衡於何處。 註意:桌面上的洞都比繩結X小得多,所以即使某個 ...
  • 1、VO:value object值對象。通常用於業務層之間的數據傳遞,和PO一樣也是僅僅包含數據而已。但應是抽象出的業務對象,可以和表對應,也可以不,這根據業務的需要. 2、 String[]類型列印tosring時顯示為一塊記憶體空間,這時候根據鍵可以判斷值已經成功接收 3、 在對條件進行判斷的時 ...
  • 1、信號和槽 2、自定義信號槽 3、自定義信號槽需要註意的事項 4、信號槽的更多用法 5、案例代碼........ ...
  • 面向對象學習目錄 1 面向對象介紹 2 類、實例、屬性、方法詳解 3 面向過程與面向對象進一步比較 4 類與對象 5 屬性查找與綁定方法 6 小結 7 繼承與派生 8 組合 9 抽象類 10 多態 11 封裝 12 綁定方法與非綁定方法 13 內置方法(上) 14 內置方法(中)之描述符 15 內置 ...
  • 1 class A(object): 2 x = 1 3 4 class B(A): 5 pass 6 7 class C(A): 8 pass 9 10 # 通過父類修改類屬性,子類繼承的類屬性也改變 11 A.x = 3 12 print(A.x, B.x, C.x) 13 # 通過子類修改繼承... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...