python自然语言处理实战学习笔记1
自信人生两百年,会当击水三千里。
第一章 NLP基础
1、NLP的概念
NLP(natural language processing,自然语言处理)是计算机科学领域以及人工智能领域的一个重要的研究方向,它研究用计算机来处理、理解以及运用人类语言,达到人与计算机之间进行有效通讯。
- 音系学:指代语言中发音的系统化组织
- 词态学:研究单词构成以及互相之间的关系
- 句法学:给定文本的哪部分是语法正确的
- 语义学:给定文本的含义是什么
- 语用学:文本的目的是什么
2、NLP的研究任务
NLP可以被应用与很多领域,这里大概总结出以下几种通用的应用:
- 机器翻译是自然语言处理中最为人熟知的场景
- 情感分析在一些评论网站比较有用
- 智能问答在一些电商网站有非常实际的价值,比如代替人工充当客服角色
- 文摘生成利用计算机自动地从原始文献中摘取文摘,全面准确地反映某一文献的中心内容
- 文本分类是机器对文本按照一定的分类体系自动标注类别的过程
- 舆论分析可以帮助分析哪些话题是目前的热点,分析传播路径以及发展趋势,对于不好的舆论导向也可以进行有效的控制
- 知识图谱又称科学知识图谱,在图书情报界称为知识域可视化或只是领域映射地图,是显示知识发展进程与结构关系的一些列各种不同的图形,用可视化技术描述知识资源及其载体,挖掘、分析、构建、绘制和显示知识及它们之间的相互联系。
3、NLP的发展历程
NLP的发展大致经历了3个阶段:
- 1956年以前的萌芽期
- 1980-1999年的快速发展期
- 21世界的突飞猛进期
4、NLP的基本术语
- 分词(segment)
中文词语分析是中文分词的基础与关键,由于中文是没有分隔符的,分词常用的手段是基于字典的最长串匹配 - 词性标注(part-of-speech tagging)
词性一般是指动词、名词、形容词等,词注的目的是表征词的一种隐藏状态,隐藏状态构成的转移就构成了状态转移序列 - 命题实体识别(NER,named entity recognition)
指从文本中识别具有特定类别的实体(通常是名词),例如人名、地名、机构名、专有名词等 - 句法分析(syntax parsing)
句法分析往往是一种基于规则的专家系统,句法分析的目的是解析句子中各个成分的依赖关系。句法分析可以解决传统词袋模型不考虑上下文的问题。 - 指代消解(anaphora resolution)
中文中代词出现的频率很高,它的作用是用来表征前文出现过的人名、地名等 - 情感识别(emotion recognition)
本质上是分类问题,经常被应用在舆情分析等领域。情感一般可以分为两类,即正面、负面,也可以是三类,在前面的基础上,再加上中性类别。一般来说,在电商企业,情感识别可以分析商品评价的好坏,以此作为下一个环节的评判依据。 - 纠错(correction)
自动纠错在搜索技术以及输入法中用的比较多。 - 问答系统(QA system)
这是一种类似于机器人的人工智能系统。问答系统往往需要语音识别、合成、自然语言理解、知识图谱等多项技术的配合。
5、NLP知识体系结构
- 句法语义分析
针对目标句子,进行各种句法分析,如分词、词性标记、命名实体识别及链接、句法分析、语义角色识别和多义词消歧等 - 关键词抽取
抽取目标文本中的主要信息。主要是了解是谁、于何时、为何、对谁、做了何事、产生了有什么结果。涉及实体识别、时间抽取、因果关系抽取等多项关键技术 - 文本挖掘
主要包含了对文本的聚类、分类、信息抽取、摘要、情感分析以及对挖掘的信息和知识的可视化、交互式的呈现界面 - 机器翻译
将输入的源语言文本通过自动翻译转化为另一种语言的文本。根据输入数据类型的不同,可细分为文本翻译、语音翻译、手语翻译、图形翻译等。 - 信息检索
对大规模的文档进行索引。可简单对文档中的词汇,赋以不同的权重来建立索引,也可使用算法模型来建立更加深层的索引。 - 问答系统
针对某个自然语言表达的问题,由问答系统给出一个精准的答案。需要对自然语言查询语句进行语义分析,包括实体链接、关系识别、形成逻辑表达式 - 对话系统
系统通过多回合对话,跟用户进行聊天、回答、完成某项任务。主要涉及用户意图理解、通用聊天引擎、问答引擎、对话管理等技术
6、NLP的三个层面
- 第一层面:词法分析
包括汉字的分析和词性标注这两部分 - 第二层面:句法分析
对输入的文本以句子为单位,进行分析以得到句子的句法结构的处理过程 - 第三层面:语义分析
最终目的是理解句子表达的真实语义
第二章 NLP前置技术解析
1、正则表达式
- 正则表达式是一种定义了搜索模式的特征序列,主要是用于字符串的模式匹配,或是字符的匹配。
- 正则表达式在自然语言处理中的作用之一是将文本格式的文档内容从非结构化转化为结构化以便后续的文本挖掘。
- 正则表达式的另一个作用就是去除“噪声”。在处理大量文本片段的时候,有非常多的文字信息与最终输出的文本无关,这些无关的片段称之为“噪声”(比如URL或者链接、语气助词、标点符号等)
2、匹配字符串
在python中,我们会使用re模块来实现正则表达式。
案例中,我们会提到re的一个方法——re.search
- 通过使用re.search(regex,string)这个方法,我们可以检查这个string字符串是否匹配正则表达式regex。如果匹配到,这个表达式会返回一个match对象,如果没有匹配到则返回None
例1 获取包含“爬虫”这个关键字的句子
import re
text_string = "文本最重要的来源无疑是网络。我们要把网络中的文本获取形成一个文本数据库。利用一个爬虫抓取到网络中的信息。爬取的策略有广度爬取和深度爬取。根据用户的需求,怕中可以有主题爬虫和通用爬虫之分"
regex = "爬虫"
p_string = text_string.split("。") #以句号为分隔符通过split切分
for line in p_string:
if re.search(regex,line) is not None: #search方法是用来查找匹配当前行是否匹配这个regex,返回的是一个match对象
print(line) #如果匹配到,打印这行信息
例2 匹配任意一个字符
正则表达式中,有一些保留的特殊符号可以帮助我们处理一些常用