1. 程式人生 > >NLP之情感分析:SnowNLP

NLP之情感分析:SnowNLP

blog bash 提取關鍵字 用戶 nic 你們 nltk .cn 推薦

一 安裝與介紹

SnowNLP是一個python寫的類庫,可以方便的處理中文文本內容,是受到了TextBlob的啟發而寫的,由於現在大部分的自然語言處理庫基本都是針對英文的,於是寫了一個方便處理中文的類庫,並且和TextBlob不同的是,這裏沒有用NLTK,所有的算法都是自己實現的,並且自帶了一些訓練好的字典。註意本程序都是處理的unicode編碼,所以使用時請自行decode成unicode。

pip install snownlp
技術分享圖片

二 模塊解析

2.1 seg [分詞模塊]

from snownlp import seg
from snownlp import SnowNLP

s = SnowNLP(u"今天我很快樂。你怎麽樣呀?");
print("[words]",s.words); # 分詞

seg.train(trainDataFileOfPath); # 訓練用戶提供的自定義的新的訓練分詞詞典的數據集
seg.save(targetDir+'seg2.marshal'); #保存訓練後的模型
print(seg.data_path) # 查看 or 設置snownlp提供的默認分詞的詞典的路徑

# [output]
[words] ['蘇', '寧易', '購', ',', '是', '誰', '給', '你們', '下', '架', 'OV', '的', '勇氣']
D:\Program Files (x86)\Anaconda3\lib\site-packages\snownlp\seg\seg.marshal 
技術分享圖片
# 打開其目錄seg中的data.txt:
邁/b 向/e 充/b 滿/e 希/b 望/e 的/s 新/s 世/b 紀/e
中/b 共/m 中/m 央/e 總/b 書/m 記/e

# /b代表begin,/m代表middle,/e代表end,分別代表一個詞語的開始,中間詞和結尾,/s代表single,一個字是一個詞的意思

2.2 sentiment [情感分析]

from snownlp import sentiment

s = SnowNLP(u"今天我很快樂。你怎麽樣呀?");
print("[sentiments]",s.sentiments); #情感性分析

sentiment.train(neg1.txt,pos1.txt); #   訓練用戶提供的自定義的新的訓練分詞詞典的負面情感數據集和正面情感數據集
sentiment.save('sentiment2.marshal');  #保存訓練後的模型

print(sentiment.data_path) # 查看 or 設置snownlp提供的默認情感分析模型的路徑
# [output]
[sentiments] 0.884423983248302
D:\Program Files (x86)\Anaconda3\lib\site-packages\snownlp\sentiment\sentiment.marshal
技術分享圖片

二 API

2.1 SnowNLP(text)

# s as SnowNLP(text)
1) s.words        詞語
2) s.sentences   句子
3) s.sentiments 情感偏向,0-1之間的浮點數,越靠近1越積極
4) s.pinyin         轉為拼音
5) s.han             轉為簡體
6) s.keywords(n) 提取關鍵字,n默認為5
7) s.summary(n)  提取摘要,n默認為5
8) s.tf                   計算term frequency詞頻
9) s.idf                 計算inverse document frequency逆向文件頻率
10) s.sim(doc,index)          計算相似度

三 快速示例教程

# [code]
import os
from snownlp import SnowNLP
from snownlp import sentiment
from snownlp import seg

# snownlp - demo
text = [u"今天我很快樂。你怎麽樣呀?",u"蘇寧易購,是誰給你們下架OV的勇氣",u"恐怖",u"質量不太好"];
s = SnowNLP(text[2]) #載入文本
print("[words]",s.words); # 分詞
print("[sentiments]",s.sentiments); #情感性分析
for sentence in s.sentences :#分句
    print("[sentence]",sentence);
    pass;

#sentiment.train('./neg.txt', './pos.txt');# 重新訓練語料模型
#sentiment.save('sentiment.marshal'); # 保存好新訓練的詞典模型
print("[seg.data_path]",seg.data_path); # 查看seg子模塊的詞典位置
print("[sentiment.data_path]",sentiment.data_path); # 查看sentiment子模塊的詞典位置
#seg.data_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),'sentiment.marshal') # 設置詞典位置
# [output]
[words] ['恐怖']
[sentiments] 0.293103448275862
[sentence] 恐怖
[seg.data_path] D:\Program Files (x86)\Anaconda3\lib\site-packages\snownlp\seg\seg.marshal
[sentiment.data_path] D:\Program Files (x86)\Anaconda3\lib\site-packages\snownlp\sentiment\sentiment.marshal

四 參考文獻

  • SnowNLP 中文文本分析器基本用法
  • snownlp 0.12.3 - PYPI - 推薦

NLP之情感分析:SnowNLP