NLP之中文天然語言處理工具庫:SnowNLP(情感分析/分詞/自動摘要)

一 安裝與介紹

1.1 概述

SnowNLP是一個python寫的類庫,能夠方便的處理中文文本內容,是受到了TextBlob的啓發而寫的,因爲如今大部分的天然語言處理庫基本都是針對英文的,因而寫了一個方便處理中文的類庫,而且和TextBlob不一樣的是,這裏沒有用NLTK,全部的算法都是本身實現的,而且自帶了一些訓練好的字典。注意本程序都是處理的unicode編碼,因此使用時請自行decode成unicode。html

1.2 特色

<div align=center> <img src="https://img2018.cnblogs.com/blog/1173617/201905/1173617-20190505151012809-670304442.png"> </div> ``` python # 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) 計算類似度 ``` ## 1.3 安裝 ``` bash pip install snownlp ``` <div align=center> <img src="https://img2018.cnblogs.com/blog/1173617/201905/1173617-20190505142214091-834291673.png"> </div>python

二 模塊解析

2.1 seg [分詞模塊]

分詞庫仍以jieba的中文分詞效果最佳。 我的認爲:jieba(多種分詞模式/用戶可自定義領域詞彙) / pynlpir (兩者可結合) >> snownlpgit

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

<div align=center> <img src="https://img2018.cnblogs.com/blog/1173617/201905/1173617-20190505142737570-1344414685.png"> </div> ``` python # 打開其目錄seg中的data.txt: 邁/b 向/e 充/b 滿/e 希/b 望/e 的/s 新/s 世/b 紀/e 中/b 共/m 中/m 央/e 總/b 書/m 記/egithub

/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

<div align=center> <img src="https://img2018.cnblogs.com/blog/1173617/201905/1173617-20190505144122579-664853726.png"> </div> ## 2.3 summary [文本摘要] 算法基於TextRank。 ``` python from snownlp import summary算法

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));bash

[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

四 推薦文獻

相關文章
相關標籤/搜索