Spacy自然语言处理库详解

自然语言处理NLP)是人工智能的一个分支,专注于处理日常语言。是否曾好奇过,像Alexa、Siri、Google助手这样的智能助手是如何通过语音理解并作出回应的?人类语言是模糊且复杂的。这些智能助手在接收到文本输入后,首先进行文本预处理,并嵌入了许多技术来理解语法。本教程将学习一些有助于分析和可视化文本数据的技术,使用一个非常强大的NLP库——Spacy。

目录

  • Spacy简介
  • Spacy安装
  • Spacy基础
  • Spacy实战
  • 分词
  • 短语匹配
  • 词性标注
  • 命名实体识别
  • 结束语

Spacy简介

Spacy是一个开源的Python自然语言处理库,用于检索信息、分析文本、可视化文本和理解自然语言。与NLTK相比,Spacy是一个更快速、更智能的库,提供了NER、词性标注、依存句法分析等高级技术。NLTK是NLP的入门级库,每个初学者都应该知道,而在实际项目中,Spacy用于生产环境。Spacy还支持深度学习工作流程,在卷积神经网络中执行文本处理。

Spacy安装

如果在Google Colab上工作,那么不需要安装它,但许多人喜欢在本地系统上工作,所以在使用前需要安装Spacy库。访问Spacy的官方文档网站,在安装Spacy的标签页中,根据系统配置和需求创建一个命令。它将要求选择操作系统、包管理器、语言以及一些额外的详细信息(如果需要),然后获取安装Spacy的命令,需要在命令行界面(CMD)中运行这个命令。

Spacy基础

导入Spacy模块后,在开始使用之前,还需要加载模型。模型名称包括想要使用的语言、Web界面和模型类型。例如,'en_core_web_sm'模型代表英语、Web界面和小型模型。然后,可以定义任何Unicode格式的文本文档,然后对其进行分词。

import spacy nlp = spacy.load('en_core_web_sm') doc = nlp(u'Microsoft is trying to buy France based startup at $7 Million') for token in doc: print(token.text)

Spacy智能地将“7 million dollars”分词为不同的部分,每个部分都有不同的含义。还可以简单地使用一个参数查看文本中每个词性的部分,Spacy为每个词性分配了一个唯一的代码。

for token in doc: print(token, token.pos_)

例如,'Microsoft'是专有名词(PROPN),'is'是助动词(AUX),'trying'是动词(VERB),依此类推。如果对文档的一部分进行切片,那么它被称为跨度(span)。还可以按照句子进行分词,并使用不同的方法进行分析或验证。

Spacy实战

现在将通过应用Spacy来执行一些高级NLP技术,这些技术是NLTK库不提供的,如依存句法分析、命名实体识别和文本可视化。

分词是一种将完整文本或文档分成小块的技术,以便更好地理解数据。Spacy在分词方面非常专业,因为它更好地理解文本中的标点符号和链接,正如在上述示例中所看到的。但问题是文本文档是不可变的,这意味着不能将文档中的任何文本替换为新文本,因为Spacy认为文档包含重要信息。

短语匹配类似于正则表达式的概念,可以在文档中找到创建的短语。如果想使用创建的模式,那么必须使用词汇匹配。短语匹配也被称为基于规则的匹配。

from spacy.matcher import Matcher matcher = Matcher(nlp.vocab) #solarpower pattern1 = [{'LOWER':'solarpower'}] #solar power pattern2 = [{'LOWER':'solar'},{'LOWER':'power'}] #solar-power pattern3 = [{'LOWER':'solar'},{"IS_PUNCT": True},{'LOWER':'power'}] matcher.add('SolarPower',None,pattern1,pattern2,pattern3) doc = nlp(u'The Solar Power industry continues to grow as demand for solarpower increases. solar-power operated products are popularity') found_matches = matcher(doc) print(found_matches)

导入了Spacy词汇Matcher对象,并创建了自己的三种不同的模式,需要在文档中匹配这些模式。当打印输出时,将得到模式的ID、匹配短语的起始和结束位置。现在,将通过打印每个模式及其匹配的ID来向展示。

在英语语法中,词性告诉一个词的功能以及它在句子中的使用方式。一些常见的词性包括名词、代词、动词、形容词、副词等。

词性标注是一种自动为文档中的所有单词分配词性标签的方法。词性标注有两种类型。一种是粗粒度的,其中正常单词如名词、动词和形容词出现。第二种是细粒度的,包括提供一些特殊信息的单词,如复数名词、过去或现在时态、最高级形容词等。

doc = nlp(u'The quick brown fox, snatch the piece of cube from mouth of black crow') for token in doc: print(f"{token.text:{10}} {token.pos_:{10}} {token.tag_:{10}} {spacy.explain(token.tag_)}")

可以看到Spacy如何智能地为每个标记分配正确的词性标签,也可以阅读其描述。还可以计算文档中每个词性标签的单词数量,它将显示每个词性代码及其计数。从词汇表中,可以检查确切的词性。

实体是代表一些特殊信息的单词或组,如国家、州、组织、人等。Spacy是一个知名的库,用于执行实体识别。它可以识别实体并解释它们的含义。让尝试这个。

doc3 = nlp(u"Ambani good to go at Gujrat to start a agro based industry in jio Mart for $70 million") for entity in doc3.ents: print(entity) print(entity.label_) print(str(spacy.explain(entity.label_))) print("n")
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485