自然语言处理(NLP)是人工智能的一个分支,专注于处理日常语言。是否曾好奇过,像Alexa、Siri、Google助手这样的智能助手是如何通过语音理解并作出回应的?人类语言是模糊且复杂的。这些智能助手在接收到文本输入后,首先进行文本预处理,并嵌入了许多技术来理解语法。本教程将学习一些有助于分析和可视化文本数据的技术,使用一个非常强大的NLP库——Spacy。
Spacy是一个开源的Python自然语言处理库,用于检索信息、分析文本、可视化文本和理解自然语言。与NLTK相比,Spacy是一个更快速、更智能的库,提供了NER、词性标注、依存句法分析等高级技术。NLTK是NLP的入门级库,每个初学者都应该知道,而在实际项目中,Spacy用于生产环境。Spacy还支持深度学习工作流程,在卷积神经网络中执行文本处理。
如果在Google Colab上工作,那么不需要安装它,但许多人喜欢在本地系统上工作,所以在使用前需要安装Spacy库。访问Spacy的官方文档网站,在安装Spacy的标签页中,根据系统配置和需求创建一个命令。它将要求选择操作系统、包管理器、语言以及一些额外的详细信息(如果需要),然后获取安装Spacy的命令,需要在命令行界面(CMD)中运行这个命令。
导入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来执行一些高级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")