溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python spaCy怎么使用

發(fā)布時間:2021-12-27 13:50:02 來源:億速云 閱讀:290 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“python spaCy怎么使用”,在日常操作中,相信很多人在python spaCy怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python spaCy怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

spaCy的統(tǒng)計模型

這些模型是spaCy的核心。這些模型使spaCy能夠執(zhí)行一些與NLP相關(guān)的任務(wù),例如詞性標(biāo)記、命名實體識別和依存關(guān)系解析。

下面我列出了spaCy中的不同統(tǒng)計模型及其規(guī)范:

  • en_core_web_sm:英語多任務(wù)CNN,在OntoNotes上訓(xùn)練,大小為11 MB

  • en_core_web_md:英語多任務(wù)CNN,在OntoNotes上訓(xùn)練,并且使用Common Crawl上訓(xùn)練的GLoVe詞嵌入,大小為91 MB

  • en_core_web_lg:英語多任務(wù)CNN,在OntoNotes上訓(xùn)練,并且使用Common Crawl上訓(xùn)練的GLoVe詞嵌入,大小為789 MB

導(dǎo)入這些模型非常容易。我們可以通過執(zhí)行spacy.load(‘model_name’) 導(dǎo)入模型,如下所示:

import spacy
nlp = spacy.load('en_core_web_sm')

spaCy的處理管道

使用spaCy時,文本字符串的第一步是將其傳遞給NLP對象。這個對象本質(zhì)上是由幾個文本預(yù)處理操作組成的管道,輸入文本字符串必須通過這些操作。

python spaCy怎么使用

如上圖所示,NLP管道有多個組件,如標(biāo)記生成器、標(biāo)簽器、解析器、ner等。因此,在處理輸入文本字符串之前,必須先通過所有這些組件。

讓我演示如何創(chuàng)建nlp對象:

import spacy
nlp = spacy.load('en_core_web_sm')

# 創(chuàng)建nlp對象
doc = nlp("He went to play basketball")

你可以使用以下代碼找出活動的管道組件:

nlp.pipe_names

輸出:['tagger','parser','ner']

如果您希望禁用管道組件并僅保持ner的運行,則可以使用下面的代碼禁用管道組件:

nlp.disable_pipes('tagger', 'parser')

讓我們再次檢查活動管道組件:

nlp.pipe_names

輸出:['ner']

當(dāng)您只需要標(biāo)記文本時,就可以禁用整個管道。標(biāo)記化過程變得非???。例如,可以使用以下代碼行禁用管道的多個組件:

nlp.disable_pipes('tagger', 'parser')

spaCy實戰(zhàn)

現(xiàn)在,讓我們練手。在本節(jié)中,你將學(xué)習(xí)使用spaCy執(zhí)行各種NLP任務(wù)。我們將從流行的NLP任務(wù)開始,包括詞性標(biāo)記、依存分析和命名實體識別。

1.詞性標(biāo)注

在英語語法中,詞類告訴我們一個詞的功能是什么,以及如何在句子中使用。英語中常用的詞類有名詞、代詞、形容詞、動詞、副詞等。

詞性標(biāo)注是自動將詞性標(biāo)注分配給句子中所有單詞的任務(wù)。它有助于NLP中的各種下游任務(wù),如特征工程、語言理解和信息提取。

在spaCy中執(zhí)行POS標(biāo)記是一個簡單的過程:

import spacy 
nlp = spacy.load('en_core_web_sm')

# 創(chuàng)建nlp對象
doc = nlp("He went to play basketball")
 
# 遍歷token
for token in doc:
    # Print the token and its part-of-speech tag
    print(token.text, "-->", token.pos_)

輸出:

He –> PRON went –> VERB to –> PART play –> VERB basketball –> NOUN

因此,該模型正確識別了句子中所有單詞的POS標(biāo)記。如果你對這些標(biāo)記中的任何一個都不確定,那么您可以簡單地使用*spacy.explain()*來確定:

spacy.explain("PART")

輸出: ‘particle’

2.使用spaCy進(jìn)行依存分析

每個句子都有一個語法結(jié)構(gòu),通過依存句法分析,我們可以提取出這個結(jié)構(gòu)。它也可以看作是一個有向圖,其中節(jié)點對應(yīng)于句子中的單詞,節(jié)點之間的邊是單詞之間的對應(yīng)依賴關(guān)系。

python spaCy怎么使用

在spaCy中,執(zhí)行依存分析同樣非常容易。我們將使用與詞性標(biāo)注相同的句子:

# 依存分析
for token in doc:
    print(token.text, "-->", token.dep_)

輸出:

He –> nsubj went –> ROOT to –> aux play –> advcl basketball –> dobj

依存標(biāo)記ROOT表示句子中的主要動詞或動作。其他詞與句子的詞根有直接或間接的聯(lián)系。通過執(zhí)行下面的代碼,你可以了解其他標(biāo)記的含義:

spacy.explain("nsubj"), spacy.explain("ROOT"), spacy.explain("aux"), spacy.explain("advcl"), spacy.explain("dobj")

輸出:

(‘nominal subject’, None, ‘a(chǎn)uxiliary’, ‘a(chǎn)dverbial clause modifier’, ‘direct object’)

3.基于spaCy的命名實體識別

首先讓我們了解什么是實體。實體是表示諸如個人、地點、組織等常見事物的信息的詞或詞組。這些實體具有專有名稱。

例如,請考慮以下句子:

python spaCy怎么使用

在這句話中,實體是“Donald Trump”、“Google”和“New York City”。

現(xiàn)在讓我們看看spaCy如何識別句子中的命名實體。

doc = nlp("Indians spent over $71 billion on clothes in 2018")
 
for ent in doc.ents:
    print(ent.text, ent.label_)

輸出:

Indians NORP over $71 billion MONEY 2018 DATE

spacy.explain("NORP")

輸出:‘Nationalities or religious or political groups’

4.基于規(guī)則的spaCy匹配

基于規(guī)則的匹配是spaCy的新功能。使用這個spaCy匹配器,您可以使用用戶定義的規(guī)則在文本中查找單詞和短語。

就像正則表達(dá)式。

正則表達(dá)式使用文本模式來查找單詞和短語,而spaCy匹配器不僅使用文本模式,還使用單詞的詞匯屬性,如POS標(biāo)記、依賴標(biāo)記、詞根等。

讓我們看看它是如何工作的:

import spacy
nlp = spacy.load('en_core_web_sm')

# 導(dǎo)入 spaCy Matcher
from spacy.matcher import Matcher

#用spaCy詞匯表初始化Matcher
matcher = Matcher(nlp.vocab)

doc = nlp("Some people start their day with lemon water")

# 定義規(guī)則
pattern = [{'TEXT': 'lemon'}, {'TEXT': 'water'}]

# 添加規(guī)則
matcher.add('rule_1', None, pattern)

所以,在上面的代碼中:

  • 首先,我們導(dǎo)入spaCy matcher

  • 之后,我們用默認(rèn)的spaCy詞匯表初始化matcher對象

  • 然后,我們像往常一樣在NLP對象中傳遞輸入

  • 在下一步中,我們將為要從文本中提取的內(nèi)容定義規(guī)則。

假設(shè)我們想從文本中提取“l(fā)emon water”這個短語。所以,我們的目標(biāo)是water跟在lemon后面。最后,我們將定義的規(guī)則添加到matcher對象。

現(xiàn)在讓我們看看matcher發(fā)現(xiàn)了什么:

matches = matcher(doc)
matches

輸出: [(7604275899133490726, 6, 8)]

輸出有三個元素。第一個元素“7604275899133490726”是匹配ID。第二個和第三個元素是匹配標(biāo)記的位置。

# 提取匹配文本
for match_id, start, end in matches:
    # 獲得匹配的寬度
    matched_span = doc[start:end]
    print(matched_span.text)

輸出:lemon water

因此,模式是一個標(biāo)記屬性列表。例如,“TEXT”是一個標(biāo)記屬性,表示標(biāo)記的確切文本。實際上,spaCy中還有許多其他有用的標(biāo)記屬性,可以用來定義各種規(guī)則和模式。

我列出了以下標(biāo)記屬性:

屬性類型描述
ORTHunicode精確匹配的文本
TEXTunicode精確匹配的文本
LOWERunicode文本小寫形式
LENGTHint文本的長度
IS_ALPHA, IS_ASCII, IS_DIGITbool文本由字母字符、ASCII字符、數(shù)字組成。
IS_LOWER, IS_UPPER, IS_TITLEbool文本是小寫、大寫、首字母大寫格式的。
IS_PUNCT, IS_SPACE, IS_STOPbool文本是標(biāo)點符號、空格、停用詞。
LIKE_NUM, LIKE_URL, LIKE_EMAILbool文本表示數(shù)字、URL和電子郵件。
POS, TAG, DEP, LEMMA, SHAPEunicode文本是詞性標(biāo)記、依存標(biāo)簽、詞根、形狀。
ENT_TYPEunicode實體標(biāo)簽

讓我們看看spaCy matcher的另一個用例??紤]下面的兩句話:

  1. You can read this book

  2. I will book my ticket

現(xiàn)在我們感興趣的是找出一個句子中是否含有“book”這個詞??雌饋硗χ苯亓水?dāng)?shù)膶Π??但這里有一個問題——只有當(dāng)“book”這個詞在句子中用作名詞時,我們才能找到它。

在上面的第一句中,“book”被用作名詞,在第二句中,它被用作動詞。因此,spaCy匹配器應(yīng)該只能從第一句話中提取。我們試試看:

doc1 = nlp("You read this book")
doc2 = nlp("I will book my ticket")

pattern = [{'TEXT': 'book', 'POS': 'NOUN'}]

# 用共享的vocab初始化matcher
matcher = Matcher(nlp.vocab)
matcher.add('rule_2', None, pattern)
matches = matcher(doc1)
matches

輸出: [(7604275899133490726, 3, 4)]

matcher在第一句話中找到了模式。

matches = matcher(doc2)
matches

輸出:[]

很好!盡管“book”出現(xiàn)在第二句話中,matcher卻忽略了它,因為它不是一個名詞。

到此,關(guān)于“python spaCy怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI