DeepNLP結合CRF++的簡明實踐筆記和WordCloud詞雲使用

DeepNLP大概已經出現將近1年了,之前一直沒有涉及這方面的研究。最近纔開始進行了一些實驗性的嘗試。
DeepNLP = Deep Learning + NLP(Natural Language Proceing)是谷歌開源的一個自然語言處理包

當常規的機器學習Machine Learning升級發展到了一定的階段後,慢慢的被後起的深度學習Deep Learning奪勢而去,並迅速發展壯大起來,不僅因爲Deep Learning有machinelearning的算法優勢,而且隨着谷歌等巨頭的框架開源而來的是大大降低了算法開發、應用的門檻!自然的,Deep Learning進入NLP領域之後,也的確出現了很大的變化。

本文不描述DeepNLP的原理,僅就最近的環境部署和實例進行表述
首先是開發環境 【認爲已經安裝了tensorflow 1.4版本以上】

我在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
安裝完成

windows安裝CRF++就有些麻煩,網上找到的幾個編譯好的庫都不能正常加載,可能是編譯的都是32位的或者較舊的庫,我又重新編譯了一下。
安裝的時候比較麻煩,我是後來自己編譯了庫文件【*.lib,*.dll】。
1、先將下載了用於Linux的包在windows下解壓,cmd到解壓文件夾中的python目錄,將*.lib,*.dll和頭文件拷貝過來,然後執行 python setup.py build, python setup.py install,應該就成功了。

下面是一個例子,進行了分詞、詞頻、詞雲的內容. 其中的詞雲需要藉助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

Tensorflow:         https://www.tensorflow.org/

WordCloude:      https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章