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...