spaCy 是一个号称工业级的天然语言处理工具包,最核心的数据结构是Doc和Vocab。Doc对象包含Token的序列和Token的注释(Annotation),Vocab对象是spaCy使用的词汇表(vocabulary),用于存储语言中共享的数据,spaCy经过集中存储字符串,单词向量和词汇属性(lexical attribute)等,避免存储数据的多个副本。git
spaCy模块有4个很是重要的类:web
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形式,带下划线的是属性的文本形式:函数
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。
>>> 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对象是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对象是Doc对象的一个切片,Span对象的属性:
Doc对象是由Tokenizer构造,而后由管道(pipeline)的组件进行适当的修改。 Language对象协调这些组件,它接受原始文本并经过管道发送,返回带注释(Annotation)的文档。 文本注释(Text Annotation)被设计为单一来源:Doc对象拥有数据,Span是Doc对象的视图。
参考文档: