1. 程式人生 > >Mac os Pycharm 中使用Stanza進行實體識別(自然語言處理nlp)

Mac os Pycharm 中使用Stanza進行實體識別(自然語言處理nlp)

stanza 是斯坦福開源Python版nlp庫,對自然語言處理有好大的提升,具體好在哪裡,官網裡面都有介紹,這裡就不翻譯了。下面放上對應的官網和倉庫地址。

stanza 官網地址:點選我進入

stanza github 倉庫地址:點選我進入

安裝步驟

1、Pycharm 中在設定中安裝 stanza 是比較慢的,因此不建議這種方法,而且也考不到進度到那裡了。

 

 

 

 

 

 

 

 

 

2、直接在pycharm中安裝也有嘗試,但是很長時間都沒看到成功,這裡推薦使用將倉庫程式碼克隆下來,在本地進行手動安裝,最主要的是速度快。

# 為了方面查詢,這裡建議直接將倉庫克隆到桌面最省事。
cd ~/Destop
git clone https://github.com/stanfordnlp/stanza.git
cd stanza
pip install -e .

pip 安裝成功之後下面就是將安裝好的內容移動到pycharm使用的Interpreter,也就是下圖使用的python路徑對應的site-packages中。

 

 找到上圖對應的跟bin同一目錄的lib檔案,lib->python3.7->site-packages。開啟這個資料夾,將之前安裝好的 stanza 移過來。如果是克隆在桌面了,就到桌面去找對應的資料夾,會發現剛才克隆的stanza資料夾下多了兩個檔案:stanza、stanza.egg-info,將這兩個檔案移動到上面的 site-packages 中,這樣就可以在 pycharm 中直接匯入使用。以上stanza安裝完成。

使用

Pycharm 中使用stanza也比較簡單,直接匯入使用。

import stanza
# 這一步是去下載對應的英文模型,執行一下看命令列連結出來就可以,命令列有可能不會成功,還是老方法把命令列中的地址,放到瀏覽器中直接下載。
stanza.download('en') 

執行之後,會出現下面的連結,連結放到瀏覽器後下載完成解壓。

 

 第二個地址直接點選去下載也行,這裡放上地址:英文模型下載。

英文模型下載完成後,解壓會看到裡面有對應的檔案。將檔案放到下面命令執行後報錯的路徑下。

nlp = stanza.Pipeline('en')
doc = nlp("Barack Obama was born in Hawaii.  He was elected president in 2008.")

執行上面兩句會看到報錯,說在xxx路徑找不到模型包,把剛才下載的模型放到這個資料夾中,這個檔案一般是在使用者目錄下stanza_resources,比如:/Users/xxxx/stanza_resources,

該目錄下有en(代表英文模型),把下載的模型放到這個目錄:/Users/xxxx/stanza_resources/en/。

以上步驟完成後,就可以使用。

 

說下stanza進行實體識別時候好處是,直接將識別的實體封裝成了json格式,識別出的實體比如:PERSON、ORG、LOCATION等,詞性為“O”的並不會出現在識別結果中,這樣方便多了,不需要在進行過濾到不想要的實體。具體效果如下:

import stanza
nlp = stanza.Pipeline('en')
doc = nlp("Barack Obama was born in Hawaii.  John studies at Stanford University in NewYork.")
for sentence in doc.sentences:
    print(sentence.ents)

輸出如下:

[{
  "text": "Barack Obama",
  "type": "PERSON",
  "start_char": 0,
  "end_char": 12
}, {
  "text": "Hawaii",
  "type": "GPE",
  "start_char": 25,
  "end_char": 31
}, {
  "text": "John",
  "type": "PERSON",
  "start_char": 34,
  "end_char": 38
}, {
  "text": "Stanford University",
  "type": "ORG",
  "start_char": 50,
  "end_char": 69
}, {
  "text": "NewYork",
  "type": "GPE",
  "start_char": 73,
  "end_char": 80
}]

這裡比stanfordcorenlp實體識別區別是:實體會進行組塊分析,比如 Barack Obama識別成一個實體(PERSON)。而stanfordcorenlp則會分開識別:Barack(PERSON)、Obama(PEROSN