天天看點

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

Stanza 包含了 60 多種語言模型,在 Universal Dependencies v2.5 資料集上進行了預訓練。這些模型包括簡體、繁體、古文中文,英語、法語、西班牙語、德語、日語、韓語、阿拉伯語等,甚至還有北薩米語等不太常見的語言。

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中。

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

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

使用

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

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

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

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

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

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

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)。