Python自然语言处理核心技术与算法(持续更新 ing)

文章目录

      • 第一章 NLP基础
        • 1.1 什么是NLP
        • 1.2 NLP相关知识的构成
      • 第二章 NLP前置技术解析
        • 2.1 正则表达式在NLP中的应用
        • 2.2 Numpy使用详解
      • 第三章 中文分词技术
        • 3.1 中文分词简介
        • 3.2 规则分词
        • 3.3 统计分词
        • 3.4 混合分词
        • 3.5 中文分词工具 - jieba

第一章 NLP基础

1.1 什么是NLP

  • NLP的概念
    它是计算机科学领域以及人工智能领域一个重要的研究方向,它研究用计算机来处理、理解以及运用人类语言达到人与计算机之间进行有效的通讯
  • NLP的分类
    NLP包含自然语言生成与自然语言理解
    • 自然语言生成
      • 自然语言文本:包含文本规划、语句规划、实现三个阶段
    • 自然语言理解
      • 音系学:指代语言中发音的系统化组织
      • 词态学:研究单词构成以及相互之间的关系
      • 句法学:给定文本哪部分的语法是正确的
      • 语义句法学:给定文本的含义是什么
      • 语用学:文本的目的是什么
  • NLP的研究任务
    • 机器翻译
      计算机具备将一种语言翻译成另一种语言的能力
    • 情感分析
      计算机能够判断用户的评论是否积极
    • 智能回答
      计算机能够正确回答输入的问题
    • 文摘生成
      计算机能够准确归纳、总结并产生文本摘要
    • 文本分类
      计算机能够采集各种文章,进行主题分析,从而进行分类
    • 舆论分析
      计算机能够判断目前舆论的导向
    • 知识图谱
      知识点相互连接而成的语义网络

1.2 NLP相关知识的构成

  • 基本术语
    • 分词(segment)
      词是最小的能够独立活动的有意义的语言成分,英文单词之间是以空格作为自然分界符,而中文词语分析是中文分析的基础和关键。分词常用的手段是基于字典的最长串匹配
    • 词性标注(part-of-speech tagging)
      基于机器学习的方法里,往往需要对词的词性进行标注。词性一般指名词、动词、形容词等。标注的目的是表征词的一种隐藏状态,隐藏状态构成的转移就构成了状态转移序列
    • 命名实体识别(NER,Named Entity Recognition)
      是指从文本中识别具有特定类别的实体(通常是名词),例如人名、地名、机构名、专有名词等
    • 句法分析(syntax parsing)
      句法分析往往是一种基于规则的专家系统,也可用统计学的方法进行,句法分析的目的是解析句子中各个成分的依赖关系
    • 指代消解(anaphora resolution)
      中文中代词出现频率很高,它的作用是用来表征前文出现过的人名、地名等
    • 情感识别(emotion recognition)
      本质是分类问题,情感一般分类为正面、反面,也可以分为正面、反面、中性。通常是基于词袋模型+分类器,或者是现在流行的词向量模型+RNN
    • 纠错(correction)
      自动纠错在搜索技术以及输入法中利用的很多。纠错系统可以基于N-Gram,也可以通过字典树、有限状态机等方法
    • 问答系统(QA system)
      类似机器人的人工智能系统。往往需要语音识别、合成,自然语言理解、知识图谱等多项技术配合
  • 知识结构
    • 语义分析
      针对目标句子,进行各种句法分析,如分词、词性标记、命名实体识别及链接、句法分析、语义角色识别和多义词消歧等
    • 信息抽取
      抽取目标文本中的主要信息,主要是了解是谁、于何时、为何、对谁、做了何事、产生了有什么结果,涉及实体识别、时间抽取、因果关系抽取等多项关键技术
    • 情感分析
      情感一般分类为正面、反面,也可以分为正面、反面、中性。通常是基于词袋模型+分类器,或者是现在流行的词向量模型+RNN
    • 文本挖掘
      主要包含对文本的聚类、分类、信息抽取、摘要、情感分析以及对挖掘的信息和知识的可视化、交互式的界面
    • 机器翻译
      将输入的源语言文本通过自动翻译转化为另一种语言的文本,根据输入的数据类型不同,可细分为文本翻译、语音翻译、手语翻译、图形翻译等。机器翻译从基于规则到基于统计到现在的基于深度学习的方法,逐渐形成一种比较严谨的方法体系
    • 信息检索
      对大规模的文档进行索引,可简单对文档中的词汇赋以不同的权重建立素引,也可使用算法建立模型来建立深层的索引。查询时,首先对输入比进行分析,然后在索引里查找匹配的候选文档,再根据一个排序机制把候选文档排序,最后输出排序得分最高文档
    • 问答系统
      针对某个自然语言表达问题,由问答系统给出一个精准答案,需要对自然语言查询语句进行语义分析,包括实体链接、关系识别,形成逻辑表达式,然后到知识库中查找可能的候选答案并通过一个排序机制找出最佳答案
    • 对话系统
      系统通过多回合对话,跟用户进行聊天、回答、完成某项任务。主要涉及用户意图理解、通用聊天引擎、问答引擎、对话管理技术。此外,为了体现上下文相关,要具备多轮对话能力。同时,为了体现个性化,对话系统还需要基于用户画像做个性化回复

第二章 NLP前置技术解析

2.1 正则表达式在NLP中的应用

  • 正则表达式
    是一种定义了搜索模式的特征序列,主要用于字符串的匹配,或是字符匹配

  • 匹配字符串
    在 Python 中 , 会使用 re 这个模块实现正则表达式 . 通过使用 re.search(regex, string) 这个方法可以检查 string 这个字符串是否匹配正则表达式 regex , 若匹配到 , 返回 match 对象 , 否则返回None

    • 获取包含 “爬虫” 关键字的句子
    import re
    text_string = '文本最重要的来源无疑是网络。我们要把网络中的文本获取形成一个文本数据库。利用一个爬虫抓取网络中的信息。爬取的策略有广度爬取和深度爬取。根据用户的需求,爬虫可以有主题爬虫和通用爬虫之分. '
    regex = '爬虫'
    p_string = text_string.split('。')
    for line in p_string :
        if re.search(regex,line) is not None:
            print(line)
    
    • 匹配任意一个字符 “.”
    import re
    text_string = '文本最重要的来源无疑是网络。我们要把网络中的文本获取形成一个文本数据库。利用一个爬虫抓取网络中的信息。爬取的策略有广度爬取和深度爬取。根据用户的需求,爬虫可以有主题爬虫和通用爬虫之分. '
    regex = '爬.'
    p_string = text_string.split('。')
    for line in p_string :
        if re.search(regex,line) is not None:
            print(line)
    
    • 匹配起始和结尾字符
      ^ : 匹配开始的字符串,^a 就是匹配所以以a 开头的字符串
      $ : 匹配结尾的字符串,a$ 就是匹配所有以 a 结尾的字符串
    import re
    text_string = '文本最重要的来源无疑是网络。我们要把网络中的文本获取形成一个文本数据库。利用一个爬虫抓取网络中的信息。爬取的策略有广度爬取和深度爬取。根据用户的需求,爬虫可以有主题爬虫和通用爬虫之分. '
    regex = '^文本'
    p_string = text_string.split('。')
    for line in p_string :
        if re.search(regex,line) is not None:
            print(line)
    
    • 使用中括号匹配多个字符
      [] : 匹配多个字符,[bc]at : 代表的是匹配 “bat” 和“cat”。
    import re
    text_string = ['[重要的]今年第七号台风23日登陆广东东部沿海地区', '上海发布车库销售监管通知:违规者暂停网签资格', '[紧要的]中国对印连发强硬信息,印度急切需要结束对峙']
    regex = '^\[[重紧]..\]'
    for line in text_string :
        if re.search(regex,line) is not None:
            print(line)
        else:
            print('not match')
    
  • 使用转义符
    假如需要匹配文本中的字符“\”,那么使用编程语言表示的正则表达式里将需要 4 个反斜杠:前两个和后两个分别用于编程语言里转义成反斜杠,转换为两个反斜杠后再在正则表达式里转义成一个反斜杠。Python 里的原生字符串解决了这个问题。
    例如 “\\d” 可以写成 r“\d”。

    import re
    if re.search(r"\\", "i have one nee\dle") is not None:
        print("yes")
    else:
        print("no")
    
  • 抽取文本中的数字

    • 通过正则表达式匹配年份
    import re
    strings = ['War of 1812', 'There are 5280 feet to a mile', 'Happy New Year 2016!']
    for string in strings:
        if re.search('[1-2][0-9]{3}', string) :
            print(string)
    
    • 抽取所有年份
      使用 Python 中的 re 模块的 findall()来返回匹配正则表达式的字符串
    import re
    years_string = '2016 was a good year, but 2017 will be better!'
    years = re.findall('[2][0-9]{3}', years_string)
    print(years)
    

2.2 Numpy使用详解

Numpy使用详解

第三章 中文分词技术

3.1 中文分词简介

  • 早处理中文文本时,将句子转化为词的表示,这个切词处理过程就是中文分词。通过计算机自动识别出句子的词,在词间加入边界标记符,分隔出各个词汇。

3.2 规则分词

  • 正向最大匹配法

  • 逆向最大匹配法

  • 双向最大匹配法

3.3 统计分词

3.4 混合分词

3.5 中文分词工具 - jieba

本文章参考书目
《Python自然语言处理核心技术与算法》

你可能感兴趣的:(Python自然语言处理核心技术与算法(持续更新 ing))