Python分詞、情感分析工具——SnowNLP

本文內容主要參考GitHub:https://github.com/isnowfy/snownlppython

what's the SnowNLP

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

 

安裝github

pip install snownlp

 

主要用法web

# 導入SnowNLP庫
from snownlp import SnowNLP

# 須要操做的句子
text = '你站在橋上看風景,看風景的人在樓上看你。明月裝飾了你的窗子,你裝飾了別人的夢'

s = SnowNLP(text)

# 分詞
print(s.word)

 

 

主要功能算法

  • 中文分詞(Character-Based Generative Model
  • 詞性標註(TnT 3-gram 隱馬)
  • 情感分析(如今訓練數據主要是買賣東西時的評價,因此對其餘的一些可能效果不是很好,待解決)
  • 文本分類(Naive Bayes)
  • 轉換成拼音(Trie樹實現的最大匹配)
  • 繁體轉簡體(Trie樹實現的最大匹配)
  • 提取文本關鍵詞(TextRank算法)
  • 提取文本摘要(TextRank算法)
  • tf,idf(信息衡量)
  • Tokenization(分割成句子)
  • 文本類似(BM25
from snownlp import SnowNLP
text = '李達康就是這樣的人,她窮哭出聲,不攀龍附鳳,不結黨營私,不一樣流合污,不貪污受賄,也不僞造政績,手下貪污出事了他自責用人不當,服裝廠出事了他沒想過隱瞞,後面這些是繁體字'

s = SnowNLP(text)
# 1、分詞
print(s.words)
# ['李', '達康', '就', '是', '這樣', '的', '人', ',', '她窮', '哭出', '聲', ',', '不', '攀龍', '附', '鳳', ',', '不結', '黨', '營私', ',', '不一樣', '流', '合', '污', ',', '不', '貪污', '受賄', ',', '也', '不', '僞造', '政績', ',', '手下', '貪污', '出事', '了', '他', '自', '責', '用人', '不當', ',', '服裝廠', '出事', '了', '他', '沒', '想過', '隱瞞', ',', '後面', '這些', '是', '繁', '體字']


# 2、詞性標註
tags = [x for x in s.tags]
print(tags)
# [('李', 'nr'), ('達康', 'nr'), ('就', 'd'), ('是', 'v'), ('這樣', 'r'), ('的', 'u'), ('人', 'n'), (',', 'w'), ('她窮', 'Rg'), ('哭出', 'Rg'), ('聲', 'q'), (',', 'w'), ('不', 'd'), ('攀龍', 'Vg'), ('附', 'v'), ('鳳', 'Ng'), (',', 'w'), ('不結', 'vvn'), ('黨', 'n'), ('營私', 'Bg'), (',', 'w'), ('不一樣', 'a'), ('流', 'Ng'), ('合', 'v'), ('污', 'Ng'), (',', 'w'), ('不', 'd'), ('貪污', 'v'), ('受賄', 'v'), (',', 'w'), ('也', 'd'), ('不', 'd'), ('僞造', 'v'), ('政績', 'n'), (',', 'w'), ('手下', 'n'), ('貪污', 'v'), ('出事', 'v'), ('了', 'u'), ('他', 'r'), ('自', 'p'), ('責', 'Ng'), ('用人', 'v'), ('不當', 'a'), (',', 'w'), ('服裝廠', 'n'), ('出事', 'v'), ('了', 'u'), ('他', 'r'), ('沒', 'd'), ('想過', 'ad'), ('隱瞞', 'v'), (',', 'w'), ('後面', 'Rg'), ('這些', 'Rg'), ('是', 'v'), ('繁', 'Rg'), ('體字', 'Rg')]


# 3、斷句
print(s.sentences) # ['李達康就是這樣的人', '她窮哭出聲', '不攀龍附鳳', '不結黨營私', '不一樣流合污', '不貪污受賄', '也不僞造政績', '手下貪污出事了他自責用人不當', '服裝廠出事了他沒想過隱瞞', '後面這些是繁體字']


# 4、情緒判斷,返回值爲正面情緒的機率,越接近1表示正面情緒,越接近0表示負面情緒
text1 = '這部電影真心棒,全程無尿點'
text2 = '這部電影簡直爛到爆'
s1 = SnowNLP(text1)
s2 = SnowNLP(text2)
print(text1, s1.sentiments) # 這部電影真心棒,全程無尿點 0.9842572323704297
print(text2, s2.sentiments) # 這部電影簡直爛到爆 0.0566960891729531


# 5、拼音
print(s.pinyin)
# ['li', 'da', 'kang', 'jiu', 'shi', 'zhe', 'yang', 'de', 'ren', ',', 'ta', 'qiong', 'ku', 'chu', 'sheng', ',', 'bu', 'pan', 'long', 'fu', 'feng', ',', 'bu', 'jie', 'dang', 'ying', 'si', ',', 'bu', 'tong', 'liu', 'he', 'wu', ',', 'bu', 'tan', 'wu', 'shou', 'hui', ',', 'ye', 'bu', 'wei', 'zao', 'zheng', 'ji', ',', 'shou', 'xia', 'tan', 'wu', 'chu', 'shi', 'liao', 'ta', 'zi', 'ze', 'yong', 'ren', 'bu', 'dang', ',', 'fu', 'zhuang', 'chang', 'chu', 'shi', 'liao', 'ta', 'mo', 'xiang', 'guo', 'yin', 'man', ',', '後', 'mian', '這', 'xie', 'shi', 'fan', '體', 'zi']


# 6、繁體轉簡體
print(s.han) # 李達康就是這樣的人,她窮哭出聲,不攀龍附鳳,不結黨營私,不一樣流合污,不貪污受賄,也不僞造政績,手下貪污出事了他自責用人不當,服裝廠出事了他沒想過隱瞞,後面這些是繁體字

# 7、關鍵字抽取
text3 = '''
北京故宮 是 中國 明清兩代 的 皇家 宮殿 , 舊 稱爲 紫禁城 , 位於 北京 中軸線 的 中心 , 是 中國 古代 宮廷 建築 之 精華 。 北京故宮 以 三 大殿 爲 中心 , 佔地面積 72 萬平方米 , 建築面積 約 15 萬平方米 , 有 大小 宮殿 七十 多座 , 房屋 九千餘 間 。 是 世界 上 現存 規模 最大 、 保存 最爲 完整 的 木質 結構 古建築 之一 。 
北京故宮 於 明成祖 永樂 四年 ( 1406 年 ) 開始 建設 , 以 南京 故宮 爲 藍本 營建 , 到 永樂 十八年 ( 1420 年 ) 建成 。 它 是 一座 長方形 城池 , 南北 長 961 米 , 東西 寬 753 米 , 四面 圍有 高 10 米 的 城牆 , 城外 有 寬 52 米 的 護城河 。 紫禁城 內 的 建築 分爲 外朝 和內廷 兩 部分 。 外朝 的 中心 爲 太和殿 、 中和殿 、 保和殿 , 統稱 三 大殿 , 是 國家 舉行 大 典禮 的 地方 。 內廷 的 中心 是 乾清宮 、 交泰 殿 、 坤寧宮 , 統稱 後 三宮 , 是 皇帝 和 皇后 居住 的 正宮 。   [ 1 ]   
北京故宮 被譽爲 世界 五大 宮之首 ( 法國 凡爾賽宮 、 英國 白金漢宮 、 美國白宮 、 俄羅斯 克里姆林宮 ) , 是 國家 AAAAA 級 旅遊 景區 ,   [ 2 - 3 ]     1961 年 被 列爲 第一批 全國 重點 文物保護 單位 ;   [ 4 ]     1987 年 被 列爲 世界 文化遺產 。   [ 5 ]   
2012 年 1 月 至 2018 年 6 月 , 故宮 累計 接待 觀衆 達到 1 億人次 。 2019 年 起 , 故宮 將 試行 分 時段 售票   [ 6 ]     。 2018 年 9 月 3 日 , 故宮 養心殿 正式 進入 古建築 研究性 保護 修繕 工做 的 實施 階段 。   [ 7 ]     2019 年 3 月 4 日 , 故宮 公佈 了 2019 年 下半年 展覽 計劃 。   [ 8 ]   
'''

s = SnowNLP(text3)
print(s.keywords(limit=10)) # ['故宮', '年', '米', '外', '中心', '世界', '建築', '北京', '宮', '保護']

# 8、歸納總結文章
print(s.summary(limit=4)) # ['北京故宮 以 三 大殿 爲 中心', '2012 年 1 月 至 2018 年 6 月', '[ 7 ]     2019 年 3 月 4 日', '北京故宮 於 明成祖 永樂 四年 ( 1406 年 ) 開始 建設']


# 9、信息衡量
'''
TF-IDF是一種統計方法,用以評估一字詞對於一個文件集或一個語料庫中的其中一份文件的重要程度。

TF詞頻越大越重要,可是文中會的「的」,「你」等無心義詞頻很大,卻信息量幾乎爲0,這種狀況致使單純看詞頻評價詞語重要性是不許確的。所以加入了idf

IDF的主要思想是:若是包含詞條t的文檔越少,也就是n越小,IDF越大,則說明詞條t越重要

TF-IDF綜合起來,才能準確的綜合的評價一詞對文本的重要性。
'''
s = SnowNLP([
    ['性格', '善良'],
    ['溫柔', '善良', '善良'],
    ['溫柔', '善良'],
    ['好人'],
    ['性格', '善良'],
])
print(s.tf) # [{'性格': 1, '善良': 1}, {'溫柔': 1, '善良': 2}, {'溫柔': 1, '善良': 1}, {'好人': 1}, {'性格': 1, '善良': 1}]
print(s.idf) # {'性格': 0.33647223662121295, '善良': -1.0986122886681098, '溫柔': 0.33647223662121295, '好人': 1.0986122886681098}


# 10、文本類似性
print(s.sim(['溫柔'])) # [0, 0.2746712135683371, 0.33647223662121295, 0, 0]
print(s.sim(['善良'])) # [-1.0986122886681098, -1.3521382014376737, -1.0986122886681098, 0, -1.0986122886681098]
print(s.sim(['好人'])) # [0, 0, 0, 1.4175642434427222, 0]

 

關於訓練api

  如今提供訓練的包括分詞,詞性標註,情感分析ui

from snownlp import seg
seg.train('data.txt')
seg.save('seg.marshal')
# from snownlp import tag
# tag.train('199801.txt')
# tag.save('tag.marshal')
# from snownlp import sentiment
# sentiment.train('neg.txt', 'pos.txt')
# sentiment.save('sentiment.marshal')
# 這樣訓練好的文件就存儲爲seg.marshal了,以後修改snownlp/seg/__init__.py裏的data_path指向剛訓練好的文件便可
相關文章
相關標籤/搜索