NLP之情感分析:SnowNLP
阿新 • • 發佈:2019-05-05
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