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_hash
8566208034543834098

Vocab的strings属性是一个StringStore对象,用于存储共享的词汇数据:

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

spaCy 第一篇:核心类型的更多相关文章

  1. Java面试系列第一篇-基本类型与引用类型

    这篇文章总结一下我认为面试中最应该掌握的关于基本类型和引用类型的面试题目. 面试题目1:值传递与引用传递 对于没有接触过C++这类有引用传递的Java程序员来说,很容易误将引用类型的参数传递理解为引用 ...

  2. 20151010 C# 第一篇 变量类型

    20151010 变量类型: 1. 值类型:变量本身直接存储数据 整数类型:代表没有小数点的整数数值 类型 说明 范围 sbyte 8位有符号整数 -128——127 short 16位有符号整数 - ...

  3. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  4. 深入理解ajax系列第一篇——XHR对象

    × 目录 [1]创建对象 [2]发送请求 [3]接收响应[4]异步处理[5]实例演示 前面的话 ajax是asynchronous javascript and XML的简写,中文翻译是异步的java ...

  5. 《javascript权威指南》读书笔记——第一篇

    <javascript权威指南>读书笔记——第一篇 金刚 javascript js javascript权威指南 由于最近想系统学习下javascript,所以开始在kindle上看这本 ...

  6. .net开发笔记(十三) Winform常用开发模式第一篇

    上一篇博客最后我提到“异步编程模型”(APM),之后本来打算整理一下这方面的材料然后总结一下写篇文章与诸位分享,后来在整理的过程中不断的延伸不断地扩展,发现完全偏离了“异步编程”这个概念,前前后后所有 ...

  7. 国内第一篇详细讲解hadoop2的automatic HA+Federation+Yarn配置的教程

    前言 hadoop是分布式系统,运行在linux之上,配置起来相对复杂.对于hadoop1,很多同学就因为不能搭建正确的运行环境,导致学习兴趣锐减.不过,我有免费的学习视频下载,请点击这里. hado ...

  8. 回合对战制游戏第一篇(初识java)

    回合对战制游戏第一篇 一,所谓的java. java是一门完全面向对象的编程语言,而之前所接触到的C语言是一门面向有一个过程的语音,对于两个的区别应该有一个清楚的认识. java的第一个内容. 类和对 ...

  9. 第一篇:SOUI是什么?

    概述 用C++做产品最痛苦的是什么?肯定是做UI. SOUI的使命就是把痛苦的UI变化成快乐的UI. 什么?UI还能快乐?脑子进水了吗? 当你看完这个系统教程的时候相信你面对UI至少不会再痛苦.你可以 ...

随机推荐

  1. 关闭google默认打开翻译提醒

    关闭google默认打开翻译提醒 在header中添加以下代码: <meta name="google" content="notranslate" /& ...

  2. Css制作table细线表格

    制作细线表格,我想应该是最基本的css知识了,记录下来巩固下. 推荐: table{ border-collapse:collapse; border: 1px solid #000000; } td ...

  3. Java 之 Map 接口

    一.Map 接口概述 java.util.Map 接口专门用来存放键值对这种对象关系的对象. 下面比较一下 Collection 与 Map 的区别: Collection 中的集合,元素是孤立存在的 ...

  4. 注解Annotation原理详解及其应用示例

    一.什么是注解 注解也叫元数据,例如我们常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包.类.接口.字段.方法参数.局部变量等进 ...

  5. ResizeObserver - 元素resize监听API ResizeObserver

    Motivation 响应式网站/Web应用程序 根据视口大小调整内容展示方式.这通常通过CSS和media查询来完成.当CSS表现不好我们会使用Javascript. 比如document.addE ...

  6. graph Laplacian 拉普拉斯矩阵

    转自:https://www.kechuang.org/t/84022?page=0&highlight=859356,感谢分享! 在机器学习.多维信号处理等领域,凡涉及到图论的地方,相信小伙 ...

  7. EF方式增加数据

             单条记录添加 第一种方式: public void AddRegion() { using(Northwind db = new Northwind()) { Region regi ...

  8. 用js刷剑指offer(二叉树的镜像)

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...

  9. Hadoop动态增加节点与删除节点

    Hadoop的全分布式安装网上也很多教程,踩过很多坑,整理不出来了……赶紧把增加删除节点留住. 均衡数据 (1)设置数据传输带宽为64M(默认值比较低) hdfs dfsadmin -setBalan ...

  10. jQuery.each(object, [callback])

    jQuery.each(object, [callback]) 概述 通用遍历方法,可用于遍历对象和数组.大理石平台检定规程 不同于遍历 jQuery 对象的 $().each() 方法,此方法可用于 ...