自然語言處理 樸素貝葉斯 情感分析

2021-10-12 12:33:04 字數 3409 閱讀 6419

from nlpia.data.loaders import get_data

import pandas as pd

from nltk.tokenize import casual_tokenize

from collections import counter

from sklearn.*****_bayes import multinomialnb

# 載入資料

movies = get_data(

'hutto_movies'

)print

(movies.head().

round(2

))# 電影的評分區間在−4 到+4 之間

print

(movies.describe().

round(2

))# 橫向最多顯示多少個字元,用於幫助在控制台更美觀地顯示較寬的 dataframe

pd.set_option(

'display.width',75

)bags_of_words =

# nltk 的casual_tokenize 可以更好地處理表情符號、不尋常的標點符號以及行業術語

# python 內建的 counter 的輸入是一系列物件,然後對這些物件進行計數,並返回一

# 部字典,其中鍵是物件本身(這裡是詞條),值是這些物件計數後得到的整數值

for text in movies.text:))

# dataframe構造器from_records()的輸入是乙個字典的序列,它為所有鍵構建列,值被加入合適的列對應的**中,

# 而缺失值用 nan 進行填充

df_bows = pd.dataframe.from_records(bags_of_words)

# numpy 和 pandas 只能用浮點物件來表示 nan,因此一旦將所有 nan 填充為 0,可以將 dataframe 轉換為整

# 數,這樣在記憶體儲存和顯示上可以緊湊得多

df_bows = df_bows.fillna(0)

.astype(

int)

# 詞袋**可能會快速增長到很大的規模,特別是在沒有使用大小寫歸一

# 化、停用詞過濾、詞幹還原和詞形歸併過程時更是如此。

print

(df_bows.shape)

print

(df_bows.head())

print

(df_bows.head()[

list

(bags_of_words[0]

.keys())

])nb = multinomialnb(

)# 樸素貝葉斯是分類器,因此需要將輸出的變數(代表情感的浮點數)轉換成離散的

# 標籤(整數、字串或者布林值)

nb = nb.fit(df_bows, movies.sentiment >0)

# 將二值的分類結果變數(0 或 1)轉換到−4 到+4 之間,從而能夠和標準情感得分進行比較。

movies[

'predicted_sentiment'

]= nb.predict(df_bows)

.astype(

int)*8

-4movies[

'error']=

(movies.predicted_sentiment - movies.sentiment)

.abs()

# mae:平均**錯誤絕對值

print

(movies.error.mean().

round(1

))movies[

'sentiment_ispositive']=

(movies.sentiment >0)

.astype(

int)

movies[

'predicted_ispositive']=

(movies.predicted_sentiment >0)

.astype(

int)

movies[

'''sentiment predicted_sentiment sentiment_ispositive predicted_ispositive'''

.split()]

.head(8)

# 點讚評級的正確率是 93%

print

((movies.predicted_ispositive == movies.sentiment_ispositive)

.sum()

/len

(movies)

)# 載入資料

products = get_data(

'hutto_products'

)bags_of_words =

for text in products.text:))

df_product_bows = pd.dataframe.from_records(bags_of_words)

df_product_bows = df_product_bows.fillna(0)

.astype(

int)

print

(df_all_bows.columns)

df_product_bows = df_all_bows.iloc[

len(movies):]

[df_bows.columns]

df_product_bows = df_product_bows.fillna(0)

.astype(

int)

print

(df_product_bows.shape)

print

(df_bows.shape)

products[

'ispos']=

(products.sentiment >0)

.astype(

int)

products[

'pred'

]= nb.predict(df_product_bows)

.astype(

int)

print

(products.head())

'''1.乙個原因是,利用 casual_tokenize 從商品文字中得到的詞彙表中有 2546 個詞條

模型中不會有任何權重或者得分

2.樸素貝葉斯模型沒有像 vader 一樣處理否定詞如『not good』

必須要將 n-gram 放到分詞器中才能夠將否定詞(如「not」或「never」)與其修飾的可能要用的正

向詞關聯起來。

'''print

((products.pred == products.ispos)

.sum()

/len

(products)

)

R語言自然語言處理 情感分析

歡迎關注天善智慧型,我們是專注於商業智慧型bi,人工智慧ai,大資料分析與挖掘領域的垂直社群,學習,問答 求職一站式搞定!情感分析,就是根據一段文字,分析其表達情感的技術。比較簡單的情感分析,能夠辨別文字內容是積極的還是消極的 褒義 貶義 比較複雜的情感分析,能夠知道這些文字是否流露出恐懼 生氣 狂...

R語言自然語言處理 情感分析

前文參考 hoper r語言自然語言處理 中文分詞 hoper r語言自然語言處理 詞性標註與命名實體識別 hoper r語言自然語言處理 詞嵌入 word embedding 情感分析,就是根據一段文字,分析其表達情感的技術。比較簡單的情感分析,能夠辨別文字內容是積極的還是消極的 褒義 貶義 比較...

R語言之樸素貝葉斯演算法應用

樸素貝葉斯演算法在r語言中的應用,對應klar包中的 bayes 方法。問題描述 主要通過樸素貝葉斯演算法對於測試資料集中的nmkat屬性值進行 我們使用的資料是kknn包中的自帶資料miete資料。主要對於該資料進行劃分 1 3為測試資料,2 3為訓練資料,通過對於資料的觀察,測試資料中的nmka...