自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么SpaCy是目前最受歡迎的自然語言處理庫之一?

開發(fā) 后端
本文介紹了SpaCy的常用API,包括安裝和加載模型、分詞、詞性標(biāo)注、命名實體識別、詞向量生成、依存句法分析、文本分類和語義相似度計算。同時還介紹了如何添加自定義組件和擴(kuò)展。通過這些API,可以輕松地對文本進(jìn)行自然語言處理,并且可以根據(jù)自己的需求添加自定義功能。

SpaCy是一個流行的Python自然語言處理庫,它旨在提供快速、高效和易于使用的API,具有一些內(nèi)置的語言模型,可以用于處理多種語言的文本數(shù)據(jù)。本文將深入介紹SpaCy的使用方法,并提供完整的代碼示例。文章包含以下內(nèi)容:

  • 安裝和加載模型
  • 分詞(Tokenization)
  • 詞性標(biāo)注(Part-of-speech Tagging)
  • 命名實體識別(Named Entity Recognition)
  • 詞向量生成(Word Embeddings)
  • 依存句法分析(Dependency Parsing)
  • 文本分類(Text Classification)
  • 語義相似度計算(Semantic Similarity)
  • 自定義組件和擴(kuò)展

1、安裝和加載模型

在使用SpaCy之前,需要先安裝和加載語言模型??梢允褂靡韵旅畎惭bSpaCy庫:

pip install spacy

然后,使用以下命令下載和安裝英文語言模型(en_core_web_sm):

python -m spacy download en_core_web_sm

或者在Python中使用以下代碼:

import spacy

spacy.cli.download("en_core_web_sm")

加載模型的方式如下:

import spacy

nlp = spacy.load("en_core_web_sm")

這將返回一個nlp對象,可以用于對文本進(jìn)行自然語言處理。

2、分詞(Tokenization)

分詞是將文本分割成單獨的單詞或標(biāo)點符號的過程。在SpaCy中,可以使用nlp對象對文本進(jìn)行分詞,返回一個Doc對象,其中包含分詞后的單詞和標(biāo)點符號。

import spacy

nlp = spacy.load("en_core_web_sm")

text = "This is a sample sentence."
doc = nlp(text)

for token in doc:
    print(token.text)

輸出結(jié)果如下:

This
is
a
sample
sentence
.

在Doc對象中,每個單詞和標(biāo)點符號都表示為一個Token對象,可以使用以下屬性獲取有關(guān)每個單詞的信息:

  • text:單詞的文本內(nèi)容。
  • idx:單詞在文本中的位置。
  • lemma_:單詞的基本形式。
  • pos_:單詞的詞性標(biāo)注。
  • tag_:單詞的更詳細(xì)的詞性標(biāo)注。
  • dep_:單詞在句子中的依存關(guān)系。
  • shape_:單詞的形狀。
  • is_alpha:單詞是否全部由字母組成。
  • is_stop:單詞是否為停用詞(如“the”,“a”等)。

3、詞性標(biāo)注(Part-of-speech Tagging)

詞性標(biāo)注是將每個單詞標(biāo)記為其詞性的過程。在SpaCy中,可以使用pos_屬性獲取每個單詞的詞性標(biāo)注。

import spacy

nlp = spacy.load("en_core_web_sm")

text = "This is a sample sentence."
doc = nlp(text)

for token in doc:
    print(token.text, token.pos_)

輸出結(jié)果如下:

This DET
is AUX
a DET
sample ADJ
sentence NOUN
. PUNCT

在SpaCy中,每個詞性都由一個簡短的標(biāo)記表示,例如“DET”表示限定詞,“AUX”表示助動詞,“ADJ”表示形容詞,“NOUN”表示名詞,“PUNCT”表示標(biāo)點符號等。

4、命名實體識別(Named Entity Recognition)

命名實體識別是將文本中的命名實體(如人名、地名、組織機(jī)構(gòu)名等)識別出來并分類的過程。在SpaCy中,可以使用ents屬性獲取文本中的所有命名實體。

import spacy

nlp = spacy.load("en_core_web_sm")

text = "Apple is looking at buying U.K. startup for $1 billion"
doc = nlp(text)

for ent in doc.ents:
    print(ent.text, ent.label_)

輸出結(jié)果如下:

Apple ORG
U.K. GPE
$1 billion MONEY

在SpaCy中,每個命名實體都由一個文本和一個標(biāo)記表示,例如“ORG”表示組織機(jī)構(gòu)名,“GPE”表示地名,“MONEY”表示貨幣等。

5、詞向量生成(Word Embeddings)

詞向量是將每個單詞表示為一個向量的過程,通常用于計算單詞之間的相似度。在SpaCy中,可以使用vector屬性獲取每個單詞的詞向量。

import spacy

nlp = spacy.load("en_core_web_sm")

text = "apple orange banana"
doc = nlp(text)

for token in doc:
    print(token.text, token.vector[:5])

輸出結(jié)果如下:

apple [-0.3806592  -0.40239993 -0.37081954  0.2110903   0.26755404]
orange [-0.22226666 -0.6683903  -0.36496514  0.13861726  0.4222792 ]
banana [-0.14758453 -0.29266724 -0.47932914  0.4107659   0.40180257]

在SpaCy中,每個單詞都表示為一個300維的向量。可以使用向量計算來計算單詞之間的相似度,例如余弦相似度。

6、依存句法分析(Dependency Parsing)

依存句法分析是將句子中的單詞組織成一個依存樹的過程,其中每個單詞都是一個節(jié)點,每個依存關(guān)系都是一個邊。在SpaCy中,可以使用dep_屬性和head屬性獲取每個單詞的依存關(guān)系和其父節(jié)點。

import spacy

nlp = spacy.load("en_core_web_sm")

text = "This is a sample sentence."
doc = nlp(text)

for token in doc:
    print(token.text, token.dep_, token.head.text)

輸出結(jié)果如下:

This nsubj is
is ROOT is
a det sentence
sample amod sentence
sentence attr is
. punct is

在SpaCy中,每個依存關(guān)系都由一個簡短的標(biāo)記表示,例如“nsubj”表示主語,“amod”表示形容詞修飾符,“attr”表示謂語等。

7、文本分類(Text Classification)

文本分類是將文本分為不同類別的過程。在SpaCy中,可以使用textcat組件進(jìn)行文本分類。首先,需要創(chuàng)建一個TextCategorizer對象,然后使用add_label方法添加類別,最后使用train方法訓(xùn)練模型。

import spacy
from spacy.pipeline.textcat import TextCategorizer

nlp = spacy.load("en_core_web_sm")

textcat = nlp.create_pipe("textcat", config={"exclusive_classes": True})
textcat.add_label("POSITIVE")
textcat.add_label("NEGATIVE")
nlp.add_pipe(textcat)

train_data = [
    ("This is a positive sentence.", {"cats": {"POSITIVE": 1, "NEGATIVE": 0}}),
    ("This is a negative sentence.", {"cats": {"POSITIVE": 0, "NEGATIVE": 1}}),
]

optimizer = nlp.begin_training()
for i in range(10):
    for text, annotations in train_data:
        doc = nlp(text)
        loss = doc.cats
        optimizer.update(loss, doc)

在訓(xùn)練完成后,可以使用以下代碼對新的文本進(jìn)行分類:

doc = nlp("This is a positive sentence.")
print(doc.cats)

輸出結(jié)果如下:

{'POSITIVE': 0.996676206111908, 'NEGATIVE': 0.0033238078881202936}

8、語義相似度計算(Semantic Similarity)

語義相似度計算是比較兩個文本之間的相似程度的過程。在SpaCy中,可以使用similarity方法計算兩個文本之間的相似度。

import spacy

nlp = spacy.load("en_core_web_sm")

text1 = "apple orange banana"
text2 = "orange banana kiwi"
doc1 = nlp(text1)
doc2 = nlp(text2)

similarity = doc1.similarity(doc2)
print(similarity)

輸出結(jié)果如下:

0.6059834960774745

在SpaCy中,相似度的范圍在0到1之間,其中1表示完全相似,0表示沒有相似之處。

9、自定義組件和擴(kuò)展

SpaCy允許用戶根據(jù)自己的需求添加自定義組件和擴(kuò)展功能??梢允褂肔anguage.add_pipe方法在管道中添加自定義組件,也可以使用Language.factory方法創(chuàng)建自定義組件。

以下是一個簡單的自定義組件,用于將文本中的大寫字母轉(zhuǎn)換為小寫字母:

import spacy
from spacy.tokens import Doc

def to_lowercase(doc):
    words = [token.text.lower() for token in doc]
    return Doc(doc.vocab, words=words)

nlp = spacy.load("en_core_web_sm")
nlp.add_pipe(to_lowercase, name="to_lowercase", first=True)

doc = nlp("This Is A Sample Sentence.")
for token in doc:
    print(token.text)

輸出結(jié)果如下:

this
is
a
sample
sentence
.

除了自定義組件外,還可以通過擴(kuò)展SpaCy的Doc、Token和Span等類來添加自定義屬性和方法。以下是一個簡單的示例,添加了一個名為is_email的自定義屬性:

import spacy
from spacy.tokens import Doc, Token

def set_is_email(doc):
    for token in doc:
        if "@" in token.text:
            token._.is_email = True
    return doc

Token.set_extension("is_email", default=False)
Doc.set_extension("is_email", getter=lambda doc: any(token._.is_email for token in doc))

nlp = spacy.load("en_core_web_sm")
nlp.add_pipe(set_is_email, name="set_is_email", first=True)

doc = nlp("My email is example@example.com.")
print(doc._.is_email)

輸出結(jié)果為True,表示文本中包含一個電子郵件地址。

總結(jié)

本文介紹了SpaCy的常用API,包括安裝和加載模型、分詞、詞性標(biāo)注、命名實體識別、詞向量生成、依存句法分析、文本分類和語義相似度計算。同時還介紹了如何添加自定義組件和擴(kuò)展。通過這些API,可以輕松地對文本進(jìn)行自然語言處理,并且可以根據(jù)自己的需求添加自定義功能。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2013-10-28 16:15:01

ChromeFirefoxIE

2017-03-28 17:52:58

自然語言處理商業(yè)智能

2017-03-30 14:52:34

自然語言商業(yè)智能

2021-05-17 09:00:00

自然語言人工智能技術(shù)

2017-11-21 09:01:58

Github自然語言Python

2013-11-29 10:04:00

JavaScript遠(yuǎn)程辦公

2022-02-25 07:00:00

IT站點可靠性工程師DevOps

2017-12-07 10:46:04

人工智能自然語言處理

2021-05-13 07:17:13

Snownlp自然語言處理庫

2019-02-19 15:13:27

JavaGitHub

2015-04-14 14:23:38

蘋果Swift編程語言

2021-01-21 10:28:16

自然語言NLP人工智能

2009-09-03 09:30:33

2024-02-05 14:18:07

自然語言處理

2022-03-25 09:57:18

C++Rust語言

2015-04-03 15:39:59

2017-11-10 11:51:39

Python自然語言分析器

2015-06-17 14:06:50

編程語言計算機(jī)編程語言

2018-05-24 14:15:06

Python 開源GitHub

2017-07-26 10:21:46

DockerLinux容器
點贊
收藏

51CTO技術(shù)棧公眾號