首頁>技術>

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

spaCy模組有4個非常重要的類:

Doc:訪問語言註釋的容器Span:Doc物件的一個切片Token:單獨的Token,例如,單詞,符號,空格等Vocab:儲存詞彙表和語言共享的資料一,Vocab類

Vocab物件用於儲存詞彙表和語言共享的資料,可以在不同的Doc物件之間共享資料,詞彙表使用Lexeme物件和StringStore物件來表示。

>>> 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()函式計算兩個詞條的相似性:

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位的雜湊值:

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

Vocab的strings屬性是一個StringStore物件,用於儲存共享的詞彙資料:

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

3,Vocab類

在初始化Vocab類時,傳遞引數strings是list或者StringStore物件,得到Vocab物件:

from spacy.vocab import Vocabvocab = 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:父docsent: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_spacelike_url、like_num、like_emailsentiment三,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物件的檢視。

16
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Scipy 學習 第1篇:插補