当前位置:   article > 正文

【NLP】spaCy笔记_spacy vocab.txt

spacy vocab.txt

参考

快速掌握spacy在python中进行自然语言处理(附代码&链接)

spaCy 第一篇:核心类型

spaCy 第二篇:语言模型

spaCy 第三篇:依存分析

spaCy官方文档

简介

基本介绍

spaCy的架构

spaCy 是一个号称工业级的自然语言处理工具包,最核心的数据结构是Doc和VocabDoc对象包含Token的序列和Token的注释(Annotation),Vocab对象是spaCy使用的词汇表(vocabulary),用于存储语言中共享的数据,spaCy通过集中存储字符串,单词向量和词汇属性(lexical attribute)等,避免存储数据的多个副本。

spaCy模块有4个非常重要的

  • Doc:访问语言注释的容器
  • Span:Doc对象的一个切片
  • Token:单独的Token,例如,单词,符号,空格等
  • Vocab:存储词汇表和语言共享的数据

Doc对象由Tokenizer构造,然后由管道(pipeline)的组件进行适当的修改。 Language对象协调这些组件,它接受原始文本并通过管道发送,返回带注释(Annotation)的文档。 文本注释(Text Annotation)被设计为单一来源:Doc对象拥有数据,Span是Doc对象的视图。

上述文字的原文档

spaCy的重要类

token

在自然语言处理中,把一个单词,一个标点符号,一个空格等叫做一个token。

通常属性是成对存在的,不带下划线的是属性的ID形式,带下划线的是属性的文本形式。

Token · spaCy API Documentation

doc

对一个文本数据进行分词之后,doc对象是token的序列,Span对象是Doc对象的一个切片。

Span

Vocab

Vocab对象用于存储词汇表和语言共享的数据,可以在不同的Doc对象之间共享数据,词汇表使用Lexeme对象和StringStore对象来表示。

  • Lexeme类型

An entry in the vocabulary   A Lexeme has no string context – it’s a word type, as opposed to a word token. It therefore has no part-of-speech tag, dependency parse, or lemma (if lemmatization depends on the part-of-speech tag).

Lexeme对象是词汇表Vocab中的一个词条(entry),可以通过similarity()函数计算两个词条的相似性:

  1. import spacy
  2. nlp=spacy.load('en_core_web_lg')#注意:加载的不同
  3. apple=nlp.vocab['apple']
  4. # print(apple) apple是一个Lexeme对象>>><spacy.lexeme.Lexeme object at 0x0000020DFF08EEE8>
  5. orange=nlp.vocab['orange']
  6. pig=nlp.vocab['pig']
  7. apple_orange=apple.similarity(orange)
  8. apple_pig=apple.similarity(pig)
  9. #print(apple_orange) 0.56189173
  10. #print(apple_pig) 0.31820506
  • StringStore类型

StringStore类是一个string-to-int的对象,通过64位的哈希值来查找词汇,或者把词汇映射到64位的哈希值:

  1. import spacy
  2. from spacy.strings import StringStore
  3. nlp=spacy.load("en_core_web_lg")
  4. stringstore=StringStore(['apple'])
  5. apple_hash=stringstore['apple']
  6. #print(apple_hash) 8566208034543834098
  7. apple_id=nlp.vocab.strings['apple']
  8. #Vocab的strings属性是一个StringStore对象,用于存储共享的词汇数据:
  9. #print(apple_id) 8566208034543834098
  • Vocab类

在初始化Vocab类时,传递参数strings是list或者StringStore对象,得到Vocab对象:

  1. from spacy.vocab import Vocab
  2. vocab=Vocab(strings=['apple'])
  3. print(vocab.strings['apple']) #8566208034543834098

实践

加载语言模型

spaCy使用的语言模型是预先训练的统计模型,能够预测语言特征,对于英语,共有en_core_web_sm、en_core_web_md和en_core_web_lg三种语言模型,还有一种语言模型:en,需要以管理员权限运行以下命令来安装en模型。

  1. import spacy
  2. nlp=spacy.load('en_core_web_sm')
  3. #该nlp变量是您通向spaCy的入口,并装载了en_core_web_sm英文模型

创建doc

首先,我们从文本创建一个doc(spaCy中的一种数据结构)文档,它是一个容器,存放了文档以及文档对应的标注。然后我们遍历文档,看看spaCy解析了什么。将这个句子的spaCy解析结果 格式化为pandas库的 dataframe

  1. import pandas as pd
  2. import spacy
  3. nlp=spacy.load('en_core_web_sm')
  4. text = "The rain in Spain falls mainly on the plain."
  5. doc = nlp(text)
  6. cols=('text','lemma','POS','explain','stopword')
  7. rows=[]
  8. for t in doc:
  9. row=[t.text,t.lemma_,t.pos_,spacy.explain(t.pos_),t.is_stop]
  10. rows.append(row)
  11. #rows先被初始化为空列表,随后,在处理的过程中添加内容row
  12. df=pd.DataFrame(rows,columns=cols)
  13. print(df)

处理结果
理解token

tokenize功能

  1. text = "The rain in Spain falls mainly on the plain."
  2. doc = nlp(text)
  3. for token in doc:
  4. print(token)
  5. '''
  6. The
  7. rain
  8. in
  9. Spain
  10. falls
  11. mainly
  12. on
  13. the
  14. plain
  15. .
  16. '''

词干化(Lemmatize)

  1. for token in doc:
  2. print(token,token.lemma_)
  3. '''
  4. The the
  5. rain rain
  6. in in
  7. Spain Spain
  8. falls fall
  9. mainly mainly
  10. on on
  11. the the
  12. plain plain
  13. . .
  14. '''

词性标注(POS Tagging)

  1. for token in doc:
  2. print(token,token.pos_)
  3. '''
  4. The DET
  5. rain NOUN
  6. in ADP
  7. Spain PROPN
  8. falls VERB
  9. mainly ADV
  10. on ADP
  11. the DET
  12. plain NOUN
  13. . PUNCT
  14. '''

名词短语提取(noun_chunks)

  1. text = "The rain in Spain falls mainly on the plain."
  2. doc = nlp(text)
  3. for chunk in doc.noun_chunks:
  4. print(chunk.text)
  5. '''
  6. The rain
  7. Spain
  8. the plain
  9. '''

命名实体识别(Named Entity Recognition,NER)

在文本中标识命名实体,即专有名词。

如果你正在使用知识图谱(https://www.akbc.ws/2019/)的应用程序和其他关联数据(http://linkeddata.org/),那么构建文档中的命名实体和其他相关信息的联系就是一种挑战,即文本链接(http://nlpprogress.com/english/entity_linking.html)。识别文档中的命名实体是这类型AI工作的第一步

  1. text = "The rain in Spain falls mainly on the plain."
  2. doc = nlp(text)
  3. for ent in doc.ents:
  4. print(ent.text,ent.label_)
  5. #Spain GPE

spaCy - WordNet

WordNet (https://wordnet.princeton.edu/),它为英语提供了一个词汇数据库——换句话说,它是一个可计算的近义词典。

有一个针对WordNet的spaCy集成,名为spaCy - WordNet (https://github.com/recognai/spacy-wordnet),作者是Daniel Vila Suero(https://twitter.com/dvilasuero),他是自然语言和知识图谱研究的专家。

个人:暂不详述。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/343456
推荐阅读
相关标签
  

闽ICP备14008679号