spaCy 學習 第一篇:核心類型

spaCy 是一個號稱工業級的天然語言處理工具包,最核心的數據結構是Doc和Vocab。Doc對象包含Token的序列和Token的註釋(Annotation),Vocab對象是spaCy使用的詞彙表(vocabulary),用於存儲語言中共享的數據,spaCy經過集中存儲字符串,單詞向量和詞彙屬性(lexical attribute)等,避免存儲數據的多個副本。git

spaCy模塊有4個很是重要的類:web

  • Doc:訪問語言註釋的容器
  • Span:Doc對象的一個切片
  • Token:單獨的Token,例如,單詞,符號,空格等
  • Vocab:存儲詞彙表和語言共享的數據

一,Vocab類

Vocab對象用於存儲詞彙表和語言共享的數據,能夠在不一樣的Doc對象之間共享數據,詞彙表使用Lexeme對象和StringStore對象來表示。api

>>> import spacy
>>> nlp=spacy.load("en_core_web_lg")
>>> apple=nlp.vocab[u'apple']

apple是一個Lexeme對象,vocab還包含一個strings屬性,用於表示把單詞映射到64位的哈希值,這使得每個單詞在spaCy中只存儲一份。數據結構

1,Lexeme類型架構

Lexeme對象是詞彙表Vocab中的一個詞條(entry),能夠經過該similarity()函數計算兩個詞條的類似性:app

apple = nlp.vocab[u"apple"]
orange = nlp.vocab[u"orange"]
apple_orange = apple.similarity(orange)

Lexeme對象的屬性,一般屬性是成對存在的,不帶下劃線的是屬性的ID形式,帶下劃線的是屬性的文本形式:函數

  • text:文本內容(Verbatim text content)
  • orth、orth_:文本ID和文本內容
  • lower、lower_:文本的小寫
  • is_alpha、is_ascii、is_digit、is_lower、is_upper、is_title、is_punct、is_space:指示文本的類型,返回值是boolean類型
  • like_url、like_num、like_email:指示文本是不是url、數字和email,返回值是boolean類型
  • sentiment:標量值,用於指示詞彙的積極性
  • cluster:布朗Cluster ID

2,StringStore類型工具

StringStore類是一個string-to-int的對象,經過64位的哈希值來查找詞彙,或者把詞彙映射到64位的哈希值:url

>>> from spacy.strings import StringStore
>>> stringstore = StringStore([u"apple", u"orange"])
>>> apple_hash = stringstore[u"apple"]
>>> apple_hash
8566208034543834098

Vocab的strings屬性是一個StringStore對象,用於存儲共享的詞彙數據:spa

apple_id=nlp.vocab.strings[u'apple']
>>> apple_id
8566208034543834098

3,Vocab類

在初始化Vocab類時,傳遞參數strings是list或者StringStore對象,獲得Vocab對象:

from spacy.vocab import Vocab
vocab = Vocab(strings=[u"apple", u"orange"])
>>> vocab.strings[u"apple"]
8566208034543834098

二,Token類

Token是一個單詞、標點符號、空格等,在天然語言處理中,把一個單詞,一個標點符號,一個空格等叫作一個token。

>>> import spacy
>>> nlp=spacy.load("en_core_web_sm")
>>> doc=nlp("I like apples and oranges")
>>> token_apple =doc[2]
>>> token_orange=doc[4]

1,Token對象的函數

計算不一樣token之間的語義類似性

token_apple.similarity(token_orange)

對一段文本,得到相鄰的token,默認狀況下,獲得的是下一個相鄰的token:

>>> token_apple.nbor()
and

從一段文本種,得到相連的token:

token_apple.conjuncts
(oranges,)

2,Token對象的屬性

Token對象,除了具備Lexeme對象屬性以外,還具備Token對象特有的屬性:

  • doc:父doc
  • sent:token所在的Span對象
  • text:文本
  • orth、orth_:文本ID和文本
  • i:token在父doc中的索引
  • ent_type、ent_type_:命名實體類型
  • lemma、lemma_:token的基本形式(base form)
  • norm、norm_:token的標準化形式
  • pos、pos_:token的詞性(Coarse-grained POS)
  • tag、tag_:token的詞性(Fine-grained POS)
  • lower、lower_:token的小寫形式
  • is_alpha、is_ascii、is_digit、is_lower、is_upper、is_title、is_punct、is_space
  • like_url、like_num、like_email
  • sentiment

三,Doc類

對一個文本數據進行分詞以後,Doc對象是token的序列,Span對象是Doc對象的一個切片:

>>> import spacy
>>> nlp=spacy.load("en_core_web_sm")
>>> doc=nlp("I like apples and oranges")
>>> span=doc[0:3]

1,得到文本的命名實體

doc.ents

2,得到文本的名詞塊

doc.noun_chunks

3,得到文本的句子

doc.sents

4,查看doc的文本

doc.text

四,Span類

Span對象是Doc對象的一個切片,Span對象的屬性:

  • start:span的第一個token在doc中的索引
  • end:span的最後一個token在doc中的索引
  • text:span的文本
  • orth、orth_:span的文本
  • lemma_:span的lemma

六,spaCy的架構

 Doc對象是由Tokenizer構造,而後由管道(pipeline)的組件進行適當的修改。 Language對象協調這些組件,它接受原始文本並經過管道發送,返回帶註釋(Annotation)的文檔。 文本註釋(Text Annotation)被設計爲單一來源:Doc對象擁有數據,Span是Doc對象的視圖。

 

參考文檔:

spaCy Architecture

相關文章
相關標籤/搜索