【自然语言处理通关手册_NLP】2.文本预处理

【知识点总结】

1. 正则表达式

2. 分词

  • 难点
  • 方法
  • 常见分词工具
  • jieba的使用例子

3. 词性标注

  • 方法
  • 常见工具
  • 应用工具进行中英文的词性标注:jieba中文例子、NLTK英文例子

4.词干提取和词性还原

  • 异同点
  • NLTK工具包进行词干提取:NLTK工具包中的三种词干提取器对比

  • NLTK.stem进行词形还原
  • 对于文本,实施词性还原的三步骤:分词、词性标注、词形还原

5. 命名实体识别

  • 方法
  • 常见工具
  • NLTK工具包进行命名实体识别例子

6. 文本的数据增强

  • 替换
  • 回译
  • 顺序变化

(中文数据增强工具 nlpcda)

========================================================

 

1. 正则表达式

1) re模块

【自然语言处理通关手册_NLP】2.文本预处理

  • re.match(正则表达式, str):从首字符开始匹配,返回一个匹配对象,否则None
  • re.search():从任意位置匹配,找到首个即返回,否则None
  • re.findall():任意位置,找到所有匹配结果,返回列表。没有.group,返回正则里的括号部分(特征标群)
  • re.sub(正则,替换内容,str):要删除即替换成''

【自然语言处理通关手册_NLP】2.文本预处理

【自然语言处理通关手册_NLP】2.文本预处理

【自然语言处理通关手册_NLP】2.文本预处理

 【自然语言处理通关手册_NLP】2.文本预处理

 

2. 分词

1)难点

  • 分词就是分解成以词为基本单位的数据结构
  • 字的粒度太小,无法表达明确含义;句子粒度太大,信息量多难以复用
  • 有些情况下分字更好,比如古文;粒度扩张如固定短语、专业术语
  • 英文天然有空格做分隔符,但中文没有;且中文一词多义,容易有歧义,因此

    中文分词无统一标准:如/*/,中华/人民/*

    歧义词难分:羽毛球拍卖完了,羽毛球拍/卖/完了,羽毛球/拍卖/完了

    未登录词难以识别:新词e.g. 奥利给

2)方法

  • 基于词典的

    介绍:首先将待分词的中⽂⽂本根据⼀定规则切分和调整,然后和词典中的词语进⾏匹配,匹配成功则按照词典的词分词,匹配失败通过调整或者重新选择,如此反复循环即可。

    优点:速度快、成本低。

    缺点:适应性不强,不同领域效果差异⼤。

    代表方法:正向最大匹配、逆向最大匹配、双向匹配

  • 基于统计的

    优点:适应性较强。

    缺点:成本较⾼,速度较慢。

           【自然语言处理通关手册_NLP】2.文本预处理

  •  基于深度学习的

    优点:准确率⾼、适应性强。

    缺点:成本⾼,速度慢。

            【自然语言处理通关手册_NLP】2.文本预处理

  •  结合使用:常见的分词器都是机器学习算法和词典相结合的

【分词问题转换为序列标注问题:B、M、E来表示词的头、中、尾,则王先生就职于武汉大学=BMEBESBMME,BME/BE/S/BMME = 王先生/就职/于/武汉大学】

 3)常见中文分词工具

  • Hanlp
  • Stanford
  • ansj分词器
  • 哈工大LTP
  • KCWS分词器
  • jieba
  • 清华大学THULAC
  • ICTCLAS

4)jieba的使用

  • 模式:

    全模式:把所有可能的分词结果展示出来

【自然语言处理通关手册_NLP】2.文本预处理

    精确模式:只取一种最有可能的切分方式

【自然语言处理通关手册_NLP】2.文本预处理

    搜索引擎模式:在精确模式的基础上,对长词再次划分

【自然语言处理通关手册_NLP】2.文本预处理

  •  在jieba中添加词典

    新建一个词典文件,内容规则:

      一个新词占一行

      每一行三部分:词语、词频(可略)、词性(可略),空格隔开,顺序不能变

      文件优先用utf-8编码

    【自然语言处理通关手册_NLP】2.文本预处理

    用jieba.load_userdict(词典文件路径)来加载新词典,再进行分词操作

  • 修改词典

    添加新词:jieba.add_word(词,freq=None,tag=None)

    删除词:jieba.del_word(词)

 

3. 词性标注

1)难点

  • 一般而言,文本里的动词比较重要,助词可能不太重要
  •  中文中常用词兼类现象严重(一词可具备多种词性):如领导,会造成歧义

2)方法

  • 基于规则的:按兼类词搭配关系和上下文语境来建造消歧规则
  • 基于统计的

【自然语言处理通关手册_NLP】2.文本预处理

  • 基于统计与规则相结合的:对统计标注结果中那些被认为可疑的,才用规则方法消除歧义
  • 基于深度学习的:可当作序列标注任务来做,⽬前深度学习解决序列标注任务常⽤⽅法包括 LSTM+CRF、BiLSTM+CRF 等。

3)常见的具备词性标注功能的工具

  • jieba
  • SnowNLP
  • THULAC
  • StanfordCoreNLP
  • HanNLP
  • NLTK
  • SpaCy:不支持中文

4)应用工具,实现中英文词性标注

  • 以jieba为例,实现中文词性标注

【自然语言处理通关手册_NLP】2.文本预处理

  •  以NLTK为例,实现英文词性标注

【自然语言处理通关手册_NLP】2.文本预处理

 【自然语言处理通关手册_NLP】2.文本预处理

【自然语言处理通关手册_NLP】2.文本预处理

 

4. 词干提取与词形还原

只针对具有形态变化的语言。中文是固定形态的语言,不需要这两种预处理操作

1)异同点

  • 词干提取Stemming:去掉前后缀得到词根,一般用于扩展检索

    常见前后缀:第三人称-s、进行时-ing、过去分词-ed

  • 词形还原Lemmatisation:基于词典将单词的复杂形态转变为基础形态

  将词汇统一为一般形式再进行后续分析处理

  基于词典:不是简单地去掉前后缀,而是根据词典将单词转换

  are、is、been、was、were都变成been

  • 相同点:

【自然语言处理通关手册_NLP】2.文本预处理

  •  不同点:

【自然语言处理通关手册_NLP】2.文本预处理

 

2)NLTK工具包进行词干提取

  • NLTK工具包中的三种词干提取器对比

【自然语言处理通关手册_NLP】2.文本预处理

【自然语言处理通关手册_NLP】2.文本预处理

 

  3)NLTK.stem进行词形还原

  • 用NLTK.stem时,指定单词词性很重要。词形还原是根据单词再文本中的词性而变化的

【自然语言处理通关手册_NLP】2.文本预处理

【自然语言处理通关手册_NLP】2.文本预处理

 

 4)对于文本,实施词性还原的三步骤

  • 分词、词性标注、词形还原

【自然语言处理通关手册_NLP】2.文本预处理

【自然语言处理通关手册_NLP】2.文本预处理

 

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

识别文本中具有特定意义的实体,比如人名、地点名、组织机构名、时间等

1)方法:

【自然语言处理通关手册_NLP】2.文本预处理

2)工具:

  • 大部分工具只能识别一些基本的常见的,特殊领域的实体如药物名就难以识别了,因为工具背后的训练集不存在这些实体
  • 此时需要标注好的领域数据,可应用Crfsuite训练个性化的识别器
  • 也可搭建一些深度学习模型进行序列标注训练

【自然语言处理通关手册_NLP】2.文本预处理

 3)NLTK工具包进行命名实体识别例子:

【自然语言处理通关手册_NLP】2.文本预处理

 

6. 文本的数据增强

收集的真实数据往往存在数据类别不平衡的问题。比如,垃圾邮件比正常邮件少些,有错字的文本比正常的文本少些。

对于样本少的类别,模型可能就学习不到其特性。而有时我们想识别那些样本少的类别,如错别字预测

针对文本数据,在未被转化成数值表征形式时,可以在字符层面进行数据增广

nlpcda 是一个中文数据增强工具

1)同义词替换

  • 根据同义词典/词向量相相似度,替换相同用法的词汇,从而获取不同的文本表达方式
  • nlpcda实现随机实体替换:Randomword(creat_num=3返回增强文本的个数, change_rate=0.3 随即替换的概率)  【自然语言处理通关手册_NLP】2.文本预处理
  • 实现随机同义词变换:SimilarWord(同Randomword)

【自然语言处理通关手册_NLP】2.文本预处理

2)文本回译

  • 将文本翻译成某一语言,再翻译回来,一般生成意思相近但表达不同的文本
  • 注意:特殊文风、特殊领域或长度较长的文本翻译效果不佳,回译会造成更多的误差传递,慎用
  • 减少回译误差:尽量选择与源语言渊源相近的语言(如中文可选日语),或被广泛应用于翻译研究的语言(如研究广泛的英文)
  • nlpcda实现百度中英翻译互转实现的增强:

    baidu_translate(content=原文本,appid=百度翻译api的appid,secretKey=百度翻译api的secretKey,t_from=原文本的语言,t_to=翻译文本的语言)

    申请 appid、secretKey 链接: http://api.fanyi.baidu.com/api/trans

【自然语言处理通关手册_NLP】2.文本预处理

3)词汇顺序变化

  针对某些特殊提交的文本(如条例类的文本),在语块层面重新进行语序的排列不影响整体语义的表达

上一篇:中文WordNet的安装与使用


下一篇:python操作excel报错