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


二 模塊解析
2.1 seg [分詞模塊]
分詞庫仍以jieba的中文分詞效果最佳。
個人認為:jieba(多種分詞模式/用戶可自定義領域詞匯) / pynlpir (二者可結合) >> snownlp
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] ['今天', '我', '很', '快樂', '。', '你', '怎么樣', '呀', '?']
D:\Program Files (x86)\Anaconda3\lib\site-packages\snownlp\seg\seg.marshal

/b代表begin,/m代表middle,/e代表end,分別代表一個詞語的開始,中間詞和結尾,/s代表single,一個字是一個詞的意思
## 2.2 sentiment [情感分析]
``` python
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.971889316039116 #有博客博友推薦,設定 value>0.6:正面; value < 20%:負面; 反之:中性
D:\Program Files (x86)\Anaconda3\lib\site-packages\snownlp\sentiment\sentiment.marshal

text=u"https://news.ifeng.com/c/7kdJkIAg 2OO2月26日,四川大學華西醫院化妝品評價中心在微信公眾號上發布了一條招募信息,希望招募有脫發困擾的試用者,來測試一款防脫育發液產品,該消息很快引發網友關注,北青報記者27日上午從華西醫院工作人員處了解到,發布該消息僅一天時間,就已經有8000多人報名,但是醫院實際上只需要30名試用者即可。據四川大學華西醫院化妝品評價中心發布的消息顯示,這次試用者招募有幾項目要求,要求試用者年齡為18到60周歲,性別不限,有脫發困擾,目前未參加中心的其他項目。該招募信息稱,試用者3月1日到中心領取育發液,回家試用,產品試用期為28天,每周五到中心回訪,連續四周,同時,該實驗還有相應的報酬。“現在被脫發困擾的人很多,又因為這條信息里有‘脫發’字樣,所以很快引起了大家的關注,還上了微博熱搜。”華西大學工作人員告訴北青報記者,“我27日上午了解了一下,到目前為止已經有8000多人報名了。”該工作人員表示,這次招募是醫院的化妝品評價中心需要為一款產品做測試,需要30名左右的試用者,所以現在有這么多人報名,肯定是需要進行篩選的,“但是現在還無法統計報名的人主要集中地年齡段,不過現在脫發已經有年輕化的趨勢,所以應該從18到60歲的報名者都有。這次入選的人會給發放一定的報酬,但是金額應該不會太多,主要是為了解決試用者來醫院的交通費用等。”醫院工作人員告訴北青報記者,華西醫院化妝品評價中心經常會發布一些試用者招募活動,之前這些招募可能並未引起太多人的關注,“這次招募防脫育發液試用者,也讓我們的其他招募受到了關注,很多項目都增加了很多報名的試用者。”北青報記者看到,醫院的化妝品評價中心之前確實發不過許多試用者招募信息,例如“法國進口改善皮膚暗沉提高皮膚含水量產品招募試用者”、“皮膚封閉式斑貼實驗項目志願者招募”、“男士護膚品免費試用啦”等,對此,有網友表示,“找到了一條免費使用化妝品之路”。";
s = SnowNLP(text);
print("[summary]",s.summary(3));
[output]
[summary] ['華西醫院化妝品評價中心經常會發布一些試用者招募活動', '醫院的化妝品評價中心之前確實發不過許多試用者招募信息', '希望招募有脫發困擾的試用者']
<div align=center>
<img src="https://img2018.cnblogs.com/blog/1173617/201905/1173617-20190505150451254-63531395.png">
</div>
# 三 快速示例教程
``` python
# [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