1. 程式人生 > >NLTK和Stanford NLP兩個工具的安裝配置

NLTK和Stanford NLP兩個工具的安裝配置

 

 

 

 

 

這裡安裝的是兩個自然語言處理工具,NLTK和Stanford NLP。


宣告:筆者作業系統是Windows10,理論上Windows都可以;

           版本號:NLTK 3.2

                         Stanford NLP 3.6.0

                         JDK 1.8

           重要檔案在講述過程中會以網盤連結給出,可隨時下載。

 

一、 NLTK的安裝

1、檢查python版本:NLTK是python語言編寫的,依託python來安裝。當前通行的python版本是python3.5.2。筆者的python版本也是python3.5.2,為了防止不可預估的問題,建議大家都選擇python3.5.2,日後再改也可以。

 

2、下載NLTK安裝檔案,版本是NLTK 3.2,網盤連結:https://pan.baidu.com/s/1fPxL36TGZtrzMdq3pFxlcg
      下載後直接執行exe檔案進行安裝,會自動匹配到python安裝路徑,如果沒有找到路徑則說明NLTK版本不正確,或者說python版本不正確。
3.  開啟python編輯器,輸入“import nltk”,再輸入“nltk.download()”,下載NLTK資料包,在下載介面選中book模組,這個模組包含了許多資料案例和內建函式。
     修改book下載目的路徑建議如下:D:\DevelopmentTools\Anaconda3\nltk_data,也就是在Anaconda下建立一個nltk_data的資料夾,將book下載目標路徑放在此處即可,這樣做便於管理和維護。如下如:

 


4、環境變數的配置:計算機→屬性→高階系統設定→高階→環境變數-系統變數→path,在path中加入剛剛定的路徑:D:\DevelopmentTools\Anaconda3\nltk_data
5、配置完成之後,開啟python編輯器,輸入from nltk.book import *,只要沒有輸出明顯的錯誤,正確顯示了相關資訊,就表示NLTK安裝成功了,如下圖:

 

 

 

二、Stanford NLP工具的安裝

1、版本檢查:python版本依舊是python3.5.2,同時要確保安裝的是Java 8及以後版本(Stanford NLP只支援Java 8及以後的版本),也就是確定系統安裝的jdk1.8及以上版本。筆者電腦安裝的是jdk1.8.0_161。這裡就不說jdk的安裝了,自己百度下。    附上jdk1.8連結:https://pan.baidu.com/s/1RltrIesUoEcQvVshsns6Aw   2、下載nltk-develop.zip,這個檔案提供的NLTK工具連線到Stanford NLP工具的介面。 下載之後解壓,然後把解壓後的nltk-develop資料夾複製到python安裝的主路徑下,筆者是Anaconda方式安裝的python,所以就直接放在了Anaconda3的主目錄下,如下:

 

3、然後進入Windows的cmd命令列

 

從命令進入到剛剛複製的路徑下:D:\DevelopmentTools\Anaconda3\nltk-develop  ,然後輸入python setup.py install,並執行  如下:

等待安裝即可,由於筆者已經安裝過了,就不展示安裝後的資訊了。

 

4、Stanford NLP版本是3.6.0,所有檔案可在網盤下載:https://pan.baidu.com/s/15y7gfy167cfLJhvRurWMCA       筆者已經將所需的檔案和jar包統一打包好了,下載下來的就是打包好的資料夾“stanfordNLP”,直接將此資料夾複製到Anaconda3的目錄下即可(理論上放到別的路徑也可以,這個路徑最終是要來設定環境變數,這裡統一放在Anaconda3目錄下是為了更方便的統一管理和維護而已),如下:  

 

 

5、下面就來開始設定剛剛“stanfordNLP”資料夾下各個檔案的環境變數,環境變數都是在系統變數的classpath中來操作。

設定環境變數的目的是為了能隨時快速的呼叫,設定環境變數之後,以後的所有呼叫都不需要傳輸絕對路徑的引數了。

(1)StanfordSegmenter環境變數的設定

進入“stanfordNLP”資料夾,將stanford-segmenter.jar的絕對路徑拷貝到classpath下,分別如下:

 

注意,每一個不同路徑之間要用分號分隔。

 

 

(2)slf4j-api.jar加入classpath環境變數。slf4j-api.jar是stanford-segmenter-2015-12-09.zip解壓後含有的檔案。

同理,將“stanfordNLP”中的slf4j-api.jar的絕對路徑加入到classpath中去,如下:

 

 

(3)StanfordPOSTagger環境變數的設定

同理,進入“stanfordNLP”資料夾,將stanford-postagger.jar檔案的絕對路徑新增到classpath中,如下:

 

(4)StanfordNERTagger環境變數的設定

同理,進入“stanfordNLP”資料夾,將stanford-ner.jar檔案的絕對路徑新增到classpath中,如下:

 

(5)將classifiers資料夾也新增入classpath環境變數。classifiers資料夾是從stanford-ner-2015-12-09.zip解壓後含有的資料夾,直接複製提取的

 

 

(6)將models資料夾新增入classpath環境變數。models資料夾是stanford-postagger-full-2015-12-09.zip解壓後含有的資料夾。環境變數如下:

 

(7)StanfordParser環境變數的設定

同理,進入“stanfordNLP”資料夾,將stanford-parser.jar和stanford-parser-3.6.0-models.jar分別新增到classpath環境變數中去,分別如下:

 

 

 

(8)StanfordNeuralDependencyParser環境變數的設定

同上,進入“stanfordNLP”資料夾,分別將stanford-corenlp-3.6.0.jar和stanford-corenlp-3.6.0-models.jar新增入classpath環境變數,分別如下:

 

 三、測試

由於Stanford NLP工具安裝最繁瑣,也最容易出問題,於是特別展示對Stanford NLP的測試,所有簡短的程式碼都是在python編輯器中執行的,其它地方也可:

程式碼如下:

路徑:相應路徑是筆者前面安裝所使用的路徑,結合更改為自己電腦的實際路徑。只要按照上述步驟將所有環境變數配置了,那麼,在所有函式的呼叫中,函式引數就不用再輸入絕對路徑了,只需要直接輸入相應的檔名即可,函式執行時自會在環境變數的路徑下來找該檔案,找不到的話就會報錯的。

1、分詞
(1)中文分詞 from nltk.tokenize.stanford_segmenter import StanfordSegmenter
segmenter = StanfordSegmenter(
  path_to_sihan_corpora_dict="D:\DevelopmentTools\Anaconda3\stanfordNLP\data\",   path_to_model="D:\DevelopmentTools\Anaconda3\stanfordNLP\data\pku.gz",   path_to_dict="D:\DevelopmentTools\Anaconda3\stanfordNLP\data\dict-chris6.ser.gz")
str="我在部落格園開了一個部落格,我的部落格名字叫鈍學累功。"
result = segmenter.segment(str) ==>執行有錯誤,未解決 (2)英文分詞 from nltk.tokenize import StanfordTokenizer
tokenizer=StanfordTokenizer()
sent="Good muffins cost $3.88\nin New York. Please buy me\ntwo of them.\nThanks."
print(tokenizer.tokenize(sent)) 2、命名實體識別
(1)英文命名實體識別
from nltk.tag import StanfordNERTagger
eng_tagger=StanfordNERTagger(model_filename=r'D:\DevelopmentTools\Anaconda3\stanfordNLP\classifiers\english.all.3class.distsim.crf.ser.gz')
print(eng_tagger.tag('Rami Eid is studying at Stony Brook University in NY'.split())) (2)中文命名實體識別 略
3、詞性標註
(1)英文詞性標註
from nltk.tag import StanfordPOSTagger
eng_tagger=StanfordPOSTagger(model_filename=r'D:\DevelopmentTools\Anaconda3\stanfordNLP\models\english-bidirectional-distsim.tagger')
print(eng_tagger.tag('What is the airspeed of an unladen swallow ?'.split()))
(2)中文詞性標註
from nltk.tag import StanfordPOSTagger
chi_tagger=StanfordPOSTagger(model_filename=r'chinese-distsim.tagger')
result="四川省 成都 資訊 工程 大學 我 在 部落格 園 開 了 一個 部落格 , 我 的 部落格 名叫 鈍學累功 。 \r\n"
print(chi_tagger.tag(result.split()))
4、句法分析
(1)英文句法分析
from nltk.parse.stanford import StanfordParser
eng_parser=StanfordParser()
print(list(eng_parser.parse("the quick brown for jumps over the lazy dog".split()))) (2)中文句法分析
from nltk.parse.stanford import StanfordParser
chi_parser=StanfordParser()
sent=u'北海 已 成為 中國 對外開放 中 升起 的 一 顆 明星'
print(list(chi_parser.parse(sent.split())))   5、依存句法分析
(1)英文依存句法分析
from nltk.parse.stanford import StanfordDependencyParser
eng_parser=StanfordDependencyParser()
res=list(eng_parser.parse("the quick brown fox jumps over the lazy dog".split()))
for row in res[0].triples():
    print(row) (2)中文依存句法分析
from nltk.parse.stanford import StanfordDependencyParser
chi_parser=StanfordDependencyParser()
res=list(chi_parser.parse(u'四川 已 成為 中國 西部 對外開放 中 升起 的 一 顆 明星'.split()))
for row in res[0].triples():
     print(row)

 

 

 

總結,環境變數的設定總的來說是自由的,但是要設定的便於自己識別和 維護,筆者只是提供了自己的設定方案。只要能正常執行上述測試程式碼,就表示Stanford NLP和NLTK安裝成功了,之後開發可以結合兩個工具一起使用。。。