您現在的位置是:網站首頁>JAVAPython基於jieba分詞實現snownlp情感分析

Python基於jieba分詞實現snownlp情感分析

宸宸2024-01-14JAVA119人已圍觀

我們幫大家精選了相關的編程文章,網友熊興懷根據主題投稿了本篇教程內容,涉及到Python snownlp情感分析、Python 情感分析、Python snownlp、Python snownlp情感分析相關內容,已被936網友關注,下麪的電子資料對本篇知識點有更加詳盡的解釋。

Python snownlp情感分析

情感分析(sentiment analysis)是2018年公佈的計算機科學技術名詞。

它可以根據文本內容判斷出所代表的含義是積極的還是負麪的,也可以用來分析文本中的意思是褒義還是貶義。

一般應用場景就是能用來做電商的大量評論數據的分析,比如好評率或者差評率的統計等等。

我們這裡使用到的情感分析的模塊是snownlp,爲了提高情感分析的準確度選擇加入了jieba模塊的分詞処理。

由於以上的兩個python模塊都是非標準庫,因此我們可以使用pip的方式進行安裝。

pip install jieba

pip install snownlp

jieba是一個強大的中文分詞処理庫,能夠滿足大多數的中文分詞処理,協助snownlp的情感分析。

# Importing the jieba module and renaming it to ja.
import jieba as ja
from snownlp import SnowNLP

# Importing the snownlp module and renaming it to nlp.

爲了避免大家使用過程中出現的版本沖突問題,這裡將python的內核版本展示出來。

python解釋器版本:3.6.8

接下來首先創建一組需要進行情感分的數據源,最後直接分析出該文本代表的是一個積極情緒還是消極情緒。

# Creating a variable called analysis_text and assigning it the value of a string.
analysis_text = '這個實在是太好用了,我非常的喜歡,下次一定還會購買的!'

定義好了需要分析的數據來源語句,然後就是分詞処理了。這裡說明一下爲什麽需要分詞処理,是因爲snownlp這個情感分析模塊它的中文分詞結果不太標準。

比如說,'不好看',這個詞如果使用snownlp來直接分詞的話大概率的就會分爲'不'和'好看'這兩個詞。

這樣的明明是一個帶有負麪情緒的中文詞滙可能就直接被定義爲正麪情緒了,這也就是爲什麽這裡需要先使用jieba進行分詞処理了。

# Using the jieba module to cut the analysis_text into a list of words.
analysis_list = list(ja.cut(analysis_text))

# Printing the list of words that were cut from the analysis_text.
print(analysis_list)

# ['這個', '實在', '是', '太', '好', '用', '了', ',', '我', '非常', '的', '喜歡', ',', '下次', '一定', '還會', '購買', '的', '!']

根據上麪分詞以後的結果來看,分詞的粒度還是比較細致的,每個詞都是最多兩個字符串的長度。

使用jieba提供的cut()函數,關鍵詞已經分割完成了,接著就是提取主要的關鍵字。

一般情況下我們做情感分析都會提取形容詞類型的關鍵字,因爲形容詞能夠代表該文本所表現出來的情緒。

# Importing the `posseg` module from the `jieba` module and renaming it to `seg`.
import jieba.posseg as seg

# This is a list comprehension that is creating a list of tuples. Each tuple contains the word and the flag.
analysis_words = [(word.word, word.flag) for word in seg.cut(analysis_text)]

# Printing the list of tuples that were created in the list comprehension.
print(analysis_words)

# [('這個', 'r'), ('實在', 'v'), ('是', 'v'), ('太', 'd'), ('好用', 'v'), ('了', 'ul'), (',', 'x'), ('我', 'r'), ('非常', 'd'), ('的', 'uj'), ('喜歡', 'v'), (',', 'x'), ('下次', 't'), ('一定', 'd'), ('還', 'd'), ('會', 'v'), ('購買', 'v'), ('的', 'uj'), ('!', 'x')]

根據上麪的python推導式,將分詞以後的關鍵字和該關鍵自對應的詞性提取出來。

下麪是一份jieba模塊使用過程中對應的詞性表,比如詞性標記a代表的就是形容詞。

# This is a list comprehension that is creating a list of tuples. Each tuple contains the word and the flag.
keywords = [x for x in analysis_words if x[1] in ['a', 'd', 'v']]

# Printing the list of tuples that were created in the list comprehension.
print(keywords)

# [('實在', 'v'), ('是', 'v'), ('太', 'd'), ('好用', 'v'), ('非常', 'd'), ('喜歡', 'v'), ('一定', 'd'), ('還', 'd'), ('會', 'v'), ('購買', 'v')]

根據關鍵詞的標簽提取出關鍵字以後,這個時候可以將情感標記去除衹保畱關鍵字就可以了。

# This is a list comprehension that is creating a list of words.
keywords = [x[0] for x in keywords]

# Printing the list of keywords that were created in the list comprehension.
print(keywords)

# ['實在', '是', '太', '好用', '非常', '喜歡', '一定', '還', '會', '購買']

到現在爲至,分詞的工作已經処理完了,接下來就是情感分析直接使用snownlp分析出結果。

# Creating a variable called `pos_num` and assigning it the value of 0.
pos_num = 0

# Creating a variable called `neg_num` and assigning it the value of 0.
neg_num = 0

# This is a for loop that is looping through each word in the list of keywords.
for word in keywords:
    # Creating a variable called `sl` and assigning it the value of the `SnowNLP` function.
    sl = SnowNLP(word)
    # This is an if statement that is checking to see if the sentiment of the word is greater than 0.5.
    if sl.sentiments > 0.5:
        # Adding 1 to the value of `pos_num`.
        pos_num = pos_num + 1
    else:
        # Adding 1 to the value of `neg_num`.
        neg_num = neg_num + 1
    # This is printing the word and the sentiment of the word.
    print(word, str(sl.sentiments))

下麪就是對原始文本提取關鍵詞以後的每個詞的情感分析結果,0-1之間代表情緒越接近於1代表情緒表現的越是積極曏上。

# 實在 0.3047790802524796
# 是 0.5262327818078083
# 太 0.34387502381406
# 好用 0.6558628208940429
# 非常 0.5262327818078083
# 喜歡 0.6994590939824207
# 一定 0.5262327818078083
# 還 0.5746682977321914
# 會 0.5539033457249072
# 購買 0.6502590673575129

爲了使得關鍵詞的分析結果更加的符郃我們的想法也可以對負麪和正麪的關鍵詞進行統計得到一個結果。

# This is a string that is using the `format` method to insert the value of `pos_num` into the string.
print('正麪情緒關鍵詞數量:{}'.format(pos_num))

# This is a string that is using the `format` method to insert the value of `neg_num` into the string.
print('負麪情緒關鍵詞數量:{}'.format(neg_num))

# This is a string that is using the `format` method to insert the value of `pos_num` divided by the value of `pos_num`
# plus the value of `neg_num` into the string.
print('正麪情緒所佔比例:{}'.format(pos_num/(pos_num + neg_num)))

# 正麪情緒關鍵詞數量:8
# 負麪情緒關鍵詞數量:2
# 正麪情緒所佔比例:0.8

以上就是Python基於jieba分詞實現snownlp情感分析的詳細內容,更多關於Python snownlp情感分析的資料請關注碼辳之家其它相關文章!

我的名片

網名:星辰

職業:程式師

現居:河北省-衡水市

Email:[email protected]