當常規的機器學習Machine Learning升級發展到了一定的階段後,慢慢的被後起的深度學習Deep Learning奪勢而去,並迅速發展壯大起來,不僅因爲Deep Learning有machinelearning的算法優勢,而且隨着谷歌等巨頭的框架開源而來的是大大降低了算法開發、應用的門檻!自然的,Deep Learning進入NLP領域之後,也的確出現了很大的變化。
我在windows和Linux(Ubuntu16.04)都進行了。
Linux下 DeepNLP直接下載即可安裝最新的 $ pip install DeepNLP
Windows下我是直接在Anaconda中安裝的 也是這個命令行 $ pip install DeepNLP
DeepNLP中沒有集成所需要的CRF++,因此還需要安裝上CRF++(當然也可以用其他的分詞庫)
Ubuntu16.04:需要安裝gcc&g++
$ sudo install gcc
1.解壓CRF++安裝包 tar zxvfv CRF++-0.58.tar.gz
2.進入解壓後的目錄 $ ./configure
3.$ make
4.$ sudo make install
5.進入python目錄 $ python setup.py build
6.$ sudo python setup.py install
7.$ sudo ln -s /usr/local/lib /usr/lib
安裝完成
下面是一個例子,進行了分詞、詞頻、詞雲的內容. 其中的詞雲需要藉助WordCloud.
#coding=utf-8
#分詞、詞頻統計
from __future__ import unicode_literals
from deepnlp import segmenter #分詞
from deepnlp import pos_tagger #詞性規則
from deepnlp import ner_tagger #角色命名規則
#
import sys
#PyQt5不是必須的,就是獲取文件名的時候用了一下。這裏用純粹是因爲我多年使用Qt而來的情結。
from PyQt5 import QtWidgets #如果沒有PyQt5可以安裝
from PyQt5.QtWidgets import QFileDialog
import matplotlib.pyplot as plt
from wordcloud import WordCloud,STOPWORDS,ImageColorGenerator
obj_file = open("blackList.txt")
text = "text"
blacklist = []
while text != "":
text = obj_file.readline().strip()
text2 = text.replace('\n', '')
blacklist.append(text2)
print(blacklist)
# 使用P有Qt5打開文件讀取文本
app=QtWidgets.QApplication(sys.argv)
fileName, filetype = QFileDialog.getOpenFileName()
obj_file = open(fileName)
text = obj_file.read()
#分詞
tokenizer = segmenter.load_model(name = 'zh')
words = tokenizer.seg(text)
#詞頻
hist = {}
for w in words:
if w in blacklist:
continue
if len(w) <= 1:
continue
hist[w] = hist.get(w, 0) + 1
print(hist)
#排序
#hist.sort() #sorted(hist)
tempItems = hist.items()
print(tempItems)
map = sorted(tempItems, key=lambda d: d[1],reverse=True)
print("排序:")
print(map)
#生成詞雲
showText = ""
for w in map:
showText += w[0]
showText +=","
backgroud_Image=plt.imread('china.jpg')
wc=WordCloud(
background_color='white',
font_path='C:\Windows\Fonts\STZHONGS.TTF',#沒有此設置無法顯示中文
max_words=200,
width=1024, height=768, margin=2,
mask=backgroud_Image
).generate(showText)
#wc.generate_from_text(showText)
plt.imshow(wc)
plt.axis('off')
plt.show()
#詞雲保存爲文件
wc.to_file("test.png")
這是《星星之火,可以燎原》的運行結果,基本上能夠看清主題。
下一步就開始細緻的研究一下精緻的實現。DeepNLP: https://github.com/rockingdingo/deepnlp#textsum