中文NLP那些事系列(1)

最近拜讀鄭捷的《NLP漢語自然語言處理原理與實踐》,其中涉及到中文文本處理的工具模塊,並重點介紹了哈工大的FTP工具包與斯坦福的stanfordNLP工具包。

這兩個工具包包含:中文分詞、詞性標註、命名實體識別、句法依存分析等功能,在處理中文文本方面直接調用的話非常方便。

但是該書的編程環境是windows10+python2.7,因此書中許多代碼以及工具包的安裝方式移植到筆者的電腦(windows10 + python3.5)總是莫名其妙地出現一些問題,因而我又大費周章地從網上找了許多資料來填坑。

果然,盡信書不如無書。

書中安裝FLP3.3版本使用指令pip install pyltp,但是一直報錯顯示:

後來發現是版本問題(pyltp最新版本存在兼容性問題)

改用以下方式安裝

set STATICBUILD=true && pip install pyltp==0.1.9.1

(set STATICBUILD=true安裝依賴包)

安裝成功。

值得一提的是,pyltp是用C++開發的,因此在安裝pyltp之前需要先安裝microsoft visual studio C++編譯器 ,本文下載的2017社區版:

下載 | IDE、Code 和 Team Foundation Server | Visual Studio?

www.visualstudio.com

詳情參考:

Python3.6.3中pyltp的安裝錯誤總結 - CSDN博客?

blog.csdn.net

安裝成功之後,還需要下載相應的模型文件。

下載鏈接:

HIT-SCIR/pyltp?

github.com圖標

這裡安裝的pyltp版本:0.1.9,對應LTP版本: 3.3.2, 對應模型版本:3.3.1

下載模型文件之後,將模型文件ltp_data_v3.3.1.zip解壓到本地文件中:

其中cws.model是中文分詞模塊,pos.model是詞性標註模塊,parser.model是句法解析模塊。

下面開始嘗試用pyltp來處理中文文本吧!

新建一個pyltpDemo.py文件中:

其中model_path是cws.model的本地路徑。

分詞的結果在輸出的第二行:

可以看到這裡面的分詞粒度過細,「解空間樹」、「深度優先」、「解空間」等詞語被分開了,這裡人為替換一下:

分詞的結果為:

可以看到專屬名詞被保留了

接下來進行詞性標註的工作:

這裡需要注意的是:

(1)詞性標註需要實現對文本進行分詞處理,生成詞語列表,再進行詞性標註;

(2)導入Postagger包;

(3)導入pos.model的本文路徑。

最終生成的詞性標註結果:

接下來就是stanfordCoreNLP介面的使用了,同樣的stanfordCoreNLP是基於java開發的,因此在安裝stanfordCoreNLP之前,先安裝JDK,而且JDK版本必須是1.8+。JDK的安裝這裡就不詳述了,網上的教程實在是太多了,無非是官網下載、安裝、環境變數這些事兒。

剩下的就是安裝stanfordCoreNLP:

這裡我選擇了一個超級簡潔的法子,不同於書中的調用JAVA命令行,也不同於NLTK包中的stanford包,而是直接安裝stanfordCoreNLP:

pip install stanfordcorenlp

這個是使用python對stanfordCoreNLP的封裝,可以直接安裝stanfordCoreNLP並可以直接在python中調用。

Lynten/stanford-corenlp?

github.com圖標

當然了這裡需要去stanfordNLP官網去下載Stanford CoreNLP的模型文件以及中文處理的模型文件。下載地址在上面的鏈接里都可以找到。

將Stanford CoreNLP壓縮包解壓到本地:

然後將中文處理的模型文件放到上面的文件夾中即可。

安裝完畢之後,用python調用一下看看:

這裡StanfordCoreNLP需要輸入兩個變數:

第一個是Stanford CoreNLP解壓文件夾的路徑;

第二個lang="zh",表示中文的意思。

可以看到一共有 分詞(word_tokenize)、詞性標註(pos_tag)、命名實體識別(ner)、句法解析(parse)、句法依存分析(dependency_parse)這幾個較為常用的功能。

最終的結果:

推薦閱讀:

關於神經網路參數初始化為全0的思考
【deeplearning.ai】深度學習(9):自然語言處理
Bag of Word
機器學習中的數學基礎(簡介)
TextGAN 代碼閱讀筆記

TAG:NLP漢語自然語言處理原理與實踐書籍 | 自然語言處理 |