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

2020-12-15 Python雁橫

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

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,去官網下載就好,在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歸一化

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

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

大家有什麼問題都可以在評論區留言,如果大家想要一起學習可以加小編自己的*哦,如果你沒看到,就說明閱讀不仔細

相關焦點

  • Python程式設計師用文字加密的方式,給女程式設計師寫情書,一周後牽手回家
    在某公司,有這樣一位Python程式設計師,我們叫他小福,由於性格比較內向,一直沒有女朋友,直到今年6月來了一位女程式設計師,莫名心動的小福,突發奇想,用文字加密的方式嘗試寫情書給那位女程式設計師
  • python的中文文本挖掘庫snownlp進行購物評論文本情感分析實例
    所以前半個月開始了用Python進行文本挖掘的學習,很多人都推薦我從《python自然語言處理》這本書入門,學習了半個月以後,可能本科畢業設計的時候有些基礎了,再看這個感覺沒太多進步,並且這裡通篇將nltk庫進行英文文本挖掘的,英文文本挖掘跟中文是有很大差別的,或者說學完英文文本挖掘,再做中文的,也是完全懵逼的。所以我停了下來,覺得太沒效率了。
  • 看了這個鍵盤,你認為是什麼語言程式設計師?python程式設計師:不是我!
    百度員工:不好意思,我的C和V也沒了作者點評:這也是我正想問的,作為程式設計師,這兩個高頻使用的按鍵怎麼會可能好好的呢。騰訊員工:這幾個鍵都沒了的應該是遊戲玩家+程式設計師了吧。。不好意思,我好像暴露了什麼,我在公司不玩遊戲的。作者點評:懂了,我不會說的。網友一:能不打分號就不打的路過。
  • 戲精程式設計師,用python開發了一個女朋友,天天秀恩愛
    很多人都知道,程式設計師大部分都是單身狗,然而,無奈Python實在太強大,居然可以用來開發一個女朋友出來。#其實,這個女朋友類似很多視頻中,那些假裝自己有女朋友或男朋友的人一樣,也是在假裝哦,但是程式設計師的用python假裝自己有女朋友,要比他們更加真實。
  • 程式設計師Python編程必備5大工具,你用過幾個?
    Python是編程入門不錯的選擇,現在也有不少的程式設計師業餘時間會研究這門程式語言。學習Python有時候沒有第一時間找到好工具,會吃不少的苦頭。畢竟好的工具能將工作效率多倍速提升。它的自動補全非常好用,甚至用了它之後,很多程式設計師小夥伴們就不想再用自帶的Python shell啦!1、AnacondaAnaconda堪稱是數據分析的利器,附帶了一大批常用數據科學包,簡直是數據分析的標配。
  • wxpy庫+Pyecharts庫:用Python對微信好友進行數據分析
    老實講,本公眾號的初衷是本人學習記錄之用,如果可能的話,也希望通過這個公眾號和大家進行交流,歡迎指出過程中的不足。(我也不知道會有幾個人看到這個小透明公眾號哈哈)下面進入正題吧。二、Python庫簡單介紹wxpy庫wxpy庫基於ichat庫,為我們提供了個人微信號的Python接口。我們可以使用wxpy庫來進行個人微信的登錄、微信消息的發送、添加微信好友等等操作。
  • 手把手教你如何用 Python 做情感分析
    維基百科上,情感分析的定義是:文本情感分析(也稱為意見挖掘)是指用自然語言處理、文本挖掘以及計算機語言學等方法來識別和提取原素材中的主觀信息。聽著很高大上,是吧?如果說得具體一點呢?給你一段文本,你就可以用情感分析的自動化方法獲得這一段內容裡包含的情感色彩是什麼。神奇吧?
  • 看看如何用Python進行英文文本的情感分析
    如果只是人工地去跟蹤大量的輿論和研報顯然缺乏效率。我們可以試試讓機器來完成這個工作。數據科學在數值領域中很常見,但這個不斷壯大的領域現在也可以應用於非數值數據,比如文本。本文將探索一些理解文本數據的關鍵算法,包括基本文本分析、馬爾可夫鏈和情感分析。許多數據(比如文本)是非結構化的,需要採用不同的機制來提取洞察。
  • 用Python幫你脫單,24小時關注女朋友的情緒變化
    用Python幫你脫單,24小時關注女朋友的情緒變化 程式設計師找個對象不容易啊,好不容易有了女朋友,可以有的時候太忙,經常加班,於是暗自下決心,下次一定要準時發消息給她,哪怕是幾句話,想來想去不如用Python做一個守護機器人 作者:一碼到底來源
  • 好程式設計師Python培訓分享numpy簡介
    好程式設計師Python培訓分享numpy簡介:一、numpy簡介:NumPy是一個功能強大的Python庫,主要用於對多維數組執行計算。NumPy這個詞來源於兩個單詞-- Numerical和Python。NumPy提供了大量的庫函數和操作,可以幫助程式設計師輕鬆地進行數值計算。
  • 用 Python 對數據進行相關性分析
    在進行數據分析時,我們所用到的數據往往都不是一維的,而這些數據在分析時難度就增加了不少,因為我們需要考慮維度之間的關係。而這些維度關係的分析就需要用一些方法來進行衡量,相關性分析就是其中一種。本文就用python來解釋一下數據的相關性分析。
  • python數據分析我覺得可以用pandasql,真香!
    python非常好用,pandas也不差,但是,SQL仍然是最香的語言,如果把兩者結合起來怎麼樣?請看~下載、導入第三方庫下載:python -m pip install pandasql導入:from pandasql import sqldf,load_births,load_meat1from pandasql import sqldf,load_births,load_meat加載內置數據集1df1 = load_births
  • 好程式設計師Python教程分享常見的Python面試題
    好程式設計師Python教程分享常見的Python面試題,程式設計師面試難免會需要進行筆試,筆試是考驗程式設計師基礎功底的重要環節,根據很多小夥伴的面試反饋,今天總結分享了一些常見的Python面試題,想要看Python面試是不是可以順利通過,這些常見的Python面試題你應該看看。
  • 我是如何在六個月內學會 Python 的?
    這是我的經驗之談,因為我之前嘗試學習C和Java都沒有成功。我學這兩門語言都以失敗告終,是因為我不知道將它們用到哪裡,然後很快就放棄了學習的想法。沒有任何使用案例的情況下,我也沒能跨過語法學習那一關。但是,在我學習Python的過程中,情況有所不同。我的目標是提升自己數據科學方面的技能並將自己的職業方向往分析領域傾斜,而學習python只是我計劃的一部分。
  • Python 分析程式設計師最關心的竟不是技術,而是…
    這一年,程序人生收到了很多鼓勵和認可的留言,也收到了很多建議和批評。新的一年,CSDN程序人生,願和你一道,共同打造業內程式設計師第一內容陣地。所以,今天的這篇文章,是特意寫給你的。CSDN程序人生特約作者羅昭成,用Python爬取了程序人生一整年的文章,用數據來告訴你,這一年哪些文章最受歡迎,哪些文章曾激起了大家的思維漣漪,以及哪些詞語,是今年文章中的高頻詞.
  • 使用Python構建可擴展的社交媒體情感分析服務
    以下命令將使用 spaCy 模塊下載並安裝英語模型:python -m spacy download en_core_web_sm安裝了這些庫和模型之後,就可以開始編碼了。一個簡單的文本分析使用 Python 解釋器交互模式 編寫一些代碼來分析單個文本片段。
  • 八行python代碼展現程式設計師從入門到大神的八種階段
    人生苦短,我用python。python的世界裡無處不在的簡潔和短小,往往一行代碼可以實現很多有意思功能。這八種狀態也是一個程式設計師從入門到大神(跑路)的八個階段,每個階段對應一行代碼並且可以直接運行,看看你現在已經到了哪個階段1.初學pythonprint("Hello World!")
  • 用Python進行圖文識別(OCR)
    可以實現OCR 的底層庫並不多,目前很多庫都是使用共同的幾個底層OCR 庫,或者是在上面進行定製。  Tesseract 是一個OCR 庫,目前由Google 贊助(Google 也是一家以OCR 和機器學習技術聞名於世的公司)。Tesseract 是目前公認最優秀、最精確的開源OCR 系統。  除了極高的精確度,Tesseract 也具有很高的靈活性。
  • 人生苦短,我用Python,那麼問題來了,普通人要學python嗎?
    話說麼哥在金融和IT行當混跡了多年,python一直是被我隨手拿來當個小工具用用,有時候偷懶用python弄個excel自動化整理工具,有時候拿來上各種網站爬蟲搜集點信息,有時候也會拿來寫點量化小工具。那麼到底什麼是python?
  • 超適合Python小白的乾貨,Python數據分析50個實戰項目
    2.大話NBA | 用數據帶你回顧喬丹的職業生涯3.分析幾十萬條知乎數據,我挖掘出了這些秘密4.用(大)數據全方位解讀電視劇《大秦帝國之崛起》5.以虎嗅網4W+文章的文本挖掘為例,展現數據分析的一整套流程6.從大數據輿情傳播角度看《三生三世十裡桃花》7.北京二手房房價分析8.kaggle數據分析實踐項目練習