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中。
找到上圖對應的跟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)。