中文NLP技術學習(1):搭建NLP開發環境

中文NLP技術學習系列文章,將以NLTK系統爲主體框架,通過整合相關的開源系統來學習NLP中涉及的所有模塊。下面是我的PC環境:

  • win10 64bits
  • python 3.6.8+pip+virtualenv
  • PyCharm 2018.3.5 (Professional Edition)

本系列Demo地址:NLPDemos

1. NLTK平臺搭建

NLTKNature Language Tool Kit,即自然語言工具包,是一個免費、開源且使用Python程序構建的自然語言數據工作平臺。NTLK系統提供了易於使用的界面和超過50種語料庫、詞彙資源,同時還包含一套分類、分詞、詞幹、標註、分析和語義推理的基本框架,更爲重要的是我們可以將目前比較好的NLP開源應用系統整合到NLTP平臺來開發NLP項目。

NLTK平臺特徵:

  • 跨平臺。完全兼容Windows、Linux等系統;
  • 跨語言。允許自由整合基於Java、C++、Python等語言實現的NLP系統;
  • 預先包含絕大多數的NLP常用功能,即各類基於規則的或基於統計的詞法、句法、語義等分析模塊;
  • 系統內存開銷小;
1.1 安裝Python3.6和第三方庫

(1) 安裝python3.6.8

(2) 安裝網絡包

pip install Tornado

(3) 安裝數學運算包

pip install numpy

pip install scipy
1.2 搭建NLTK平臺

(1) 安裝NLTK開發環境

pip install nltk

(2) 下載中文語料庫

# NLTK_Download.py

import sys
import nltk
import importlib

# 加載sys庫
importlib.reload(sys)

# 打開NLTK Downloader下載頁面
nltk.download()

執行腳本python NLTK_Download.py,看到如下界面:

語料庫

 NLTK平臺提供了50種語料庫、詞彙庫,但默認使用的都是英文語料庫。由於我們研究的是中文NLP,因此不必要下載所有語料庫,就我所知Sinica是中央研究院提供的一個繁體中文語料庫。

2. LTP環境搭建

LTP(3.4.0)Language Technology Platform,即語言技術平臺,是哈爾濱工業大學開發的一整套中文語言處理系統,該平臺基於C++實現,提供包括中文分詞詞性標註命名實體識別依存句法分析語義角色標註等豐富、高效、精確的自然語言處理技術,且支持可視化圖形輸出。另外,爲了便於在python環境下使用,LTP還提供了它的Python封裝pyltp(0.2.0),其依賴支持情況:

Py2.6 Py2.6 Py3.4 Py3.5 Py3.6 conda-python
Linux 支持 支持 支持 支持 支持 不支持
Mac OS 支持 支持 支持 支持 支持 不支持
Windows VS2015 不支持 不支持 不支持 支持 支持 不支持
Windows VS2017 不支持 不支持 不支持 支持 支持 不支持
2.1 pyltp開發環境搭建

(1) 安裝pyltp

 LTP官方提供了兩種安裝方式,即使用pip在線安裝編譯源碼本地安裝,具體如下:

  • 使用pip安裝
pip install pyltp

注:如果安裝過程中出現Microsoft Visual Studio 14.0錯誤,這裏推薦下載pyltp-0.2.1-cp36-cp36m-win_amd64.whl,然後直接使用pip install pyltp-0.2.1-cp36-cp36m-win_amd64.whl安裝即可。

  • 從源代碼安裝(PC需安裝git)
 $ git clone https://github.com/HIT-SCIR/pyltp
 $ git submodule init
 $ git submodule update
 $ python setup.py install 

(2) 下載LTP模型文件ltp_data_v3.4.0.zip,需要注意的是,在windows下 3.4.0 版本的語義角色標註模塊模型需要單獨下載,即pisrl_win.model
在這裏插入圖片描述
 其中,cws.model爲中文分詞模型;ner.model爲命名實體模型;parser.model爲句法解析模型;pisrl_win.model爲語義角色標註模型;pos.model爲詞性標註模型。

3. 示例演示

 在上一小節中,我們成功將NLP開源系統pyltp整合到NLTK平臺,本節編寫一個句法解析示例來演示如何利用NLTK和pyltp研究NLP相關技術。關於什麼是句法解析,這裏我們放在後面文章中詳講,你只需要知道句法解析就是漢語中解析一個句子的語法結構。示例代碼如下:

# Parser.py 句法解析示例
# Date:2019-05-07 9:43
# Author:Jiangdongguo

from pyltp import *
import nltk
from scipy._lib.six import xrange

sentence = "中國南部的湖南省,省會是長沙市,也是一座世界知名的城市。"

segment_model_path = "data/ltp_models/cws.model"    # 中文分詞模型
postagger_model_path = "data/ltp_models/pos.model"  # 詞性標註模型
parser_model_path = "data/ltp_models/parser.model"  # 句法分析模型

# 1. 中文分詞
segmentor = Segmentor()
segmentor.load(segment_model_path)
segResult = segmentor.segment(sentence)
tmp = " ".join(segResult)
print(tmp)

# 2. 詞性標註
words = tmp.split(" ")
postagger = Postagger()
postagger.load(postagger_model_path)
postags = postagger.postag(words)

# 3. 句法分析
#   將詞性標註和分詞結果都加入到分析器進行句法解析
parser = Parser()
parser.load(parser_model_path)
arcs = parser.parse(words, postags)
arcLen = len(arcs)
conll = ""

# 構建Conll標準的數據結構
for i in xrange(arcLen):
    if arcs[i].head == 0:
        arcs[i].relation = "ROOT"
    conll += "\t"+words[i]+"("+postags[i]+")"+"\t"+postags[i]+"\t"+str(arcs[i].head)+"\t"+arcs[i].relation+"\n"
print(conll)

# 使用nltk構建依存句法關係樹
conllTree = nltk.DependencyGraph(conll)  # 轉換爲依存句法圖
tree = conllTree.tree()  # 構建樹結構
tree.draw()  # 顯示輸出樹

注:模型文件由於比較大,就沒有上傳,請下載後自行放在項目的data/ltp_models目錄下。

  • 運行結果:

(venv) E:\ComPython\NLPDemos>python lesson01/Parser.py
中國 南部 的 湖南省 , 省會 是 長沙市 , 也 是 一 座 世界 知名 的 城市 。
中國(ns) ns 2 ATT
南部(nd) nd 4 ATT
的(u) u 2 RAD
湖南省(ns) ns 7 SBV
,(wp) wp 4 WP
省會(n) n 7 SBV
是(v) v 0 ROOT
長沙市(ns) ns 7 VOB
,(wp) wp 7 WP
也(d) d 11 ADV
是(v) v 7 COO
一(m) m 13 ATT
座(q) q 17 ATT
世界(n) n 15 SBV
知名(a) a 17 ATT
的(u) u 15 RAD
城市(n) n 11 VOB
。(wp) wp 7 WP

  • 依存句法關係樹:

在這裏插入圖片描述
本文Demo:Lesson01

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