中文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詳情參考:
Python3.6.3中pyltp的安裝錯誤總結 - CSDN博客安裝成功之後,還需要下載相應的模型文件。
下載鏈接:
HIT-SCIR/pyltp這裡安裝的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當然了這裡需要去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漢語自然語言處理原理與實踐書籍 | 自然語言處理 |