首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
4.1 分类变量
4.1.1 One-Hot 编码(虚拟变量)
4.1.2 数字可以编码分类变量
4.2 分箱、离散化、线性模型与树
4.3 交互特征与多项式特征
4.4 单变量非线性变换
4.5 自动化特征选择
4.5.1 单变量统计
4.5.2 基于模型的特征选择
4.5.3 迭代特征选择
4.6 利用专家知识
5.1 交叉验证
5.1.1 scikit-learn 中的交叉验证
5.1.2 交叉验证的优点
5.1.3 分层k 折交叉验证和其他策略
5.2 网格搜索
5.2.1 简单网格搜索
5.2.2 参数过拟合的风险与验证集
5.2.3 带交叉验证的网格搜索
5.3 评估指标与评分
5.3.1 牢记目标
5.3.2 二分类指标
5.3.3 多分类指标
5.3.4 回归指标
5.3.5 在模型选择中使用评估指标
6.1 用预处理进行参数选择
6.2 构建管道
6.3 在网格搜索中使用管道
6.4 通用的管道接口
6.4.1 用make_pipeline 方便地创建管道
6.4.2 访问步骤属性
6.4.3 访问网格搜索管道中的属性
6.5 网格搜索预处理步骤与模型参数
6.6 网格搜索选择使用哪个模型
7.1 用字符串表示的数据类型
7.2 示例应用:电影评论的情感分析
7.3 将文本数据表示为词袋
7.3.1 将词袋应用于玩具数据集
7.3.2 将词袋应用于电影评论
7.4 停用词
7.5 用tf-idf 缩放数据
7.6 研究模型系数
7.7 多个单词的词袋(n元分词)
7.8 分词、词干提取与词形还原
7.9 主题建模与文档聚类
8.1 处理机器学习问题
8.2 从原型到生产
8.3 测试生产系统
8.4 构建你自己的估计器
8.5 下一步怎么走
8.5.1 理论
8.5.2 其他机器学习框架和包
8.5.3 排序、推荐系统与其他学习类型
8.5.4 概率建模、推断与概率编程
8.5.5 神经网络
8.5.6 推广到更大的数据集
当前位置:
首页>>
技术小册>>
Python机器学习基础教程(下)
小册名称:Python机器学习基础教程(下)
### 7.8 分词、词干提取与词形还原 在自然语言处理(NLP)领域,文本预处理是构建高效、准确模型的关键步骤之一。分词、词干提取与词形还原作为文本预处理的三大核心技术,对于提升文本数据的处理效率和模型的性能至关重要。本章节将深入探讨这三项技术的原理、应用场景及实现方法,旨在为读者在Python环境下进行机器学习项目时提供坚实的理论基础与实践指导。 #### 7.8.1 分词(Tokenization) **7.8.1.1 概述** 分词是将连续的自然语言文本切割成一系列有意义的单元(通常是词或短语)的过程。这些单元(即“token”)是后续文本分析(如词性标注、命名实体识别等)和机器学习模型训练的基础。不同语言因其语法结构和书写习惯的不同,分词方法也各异。对于英文等以西文为主的语言,分词相对简单,因为单词之间通常由空格分隔;而对于中文、日文等没有显式分隔符的语言,分词则成为了一个挑战。 **7.8.1.2 Python实现** 在Python中,可以通过多种库来实现分词,包括`nltk`(自然语言工具包)、`jieba`(针对中文)、`spaCy`等。 - **英文分词示例**:使用`nltk`库 首先,需要安装并导入`nltk`库,并下载相应的资源(如punkt模型用于句子分割)。 ```python import nltk nltk.download('punkt') from nltk.tokenize import word_tokenize text = "Python machine learning is fun and exciting." tokens = word_tokenize(text) print(tokens) ``` - **中文分词示例**:使用`jieba`库 `jieba`支持三种分词模式:精确模式、全模式和搜索引擎模式。 ```python import jieba text = "我爱自然语言处理" seg_list = jieba.cut(text, cut_all=False) # 精确模式 print("精确模式: " + "/ ".join(seg_list)) seg_list = jieba.cut(text, cut_all=True) # 全模式 print("全模式: " + "/ ".join(seg_list)) ``` #### 7.8.2 词干提取(Stemming) **7.8.2.1 概述** 词干提取是一种将单词缩减到其基本形式(词干)的过程,旨在减少词汇的多样性,提高文本处理的效率。与词形还原不同,词干提取通常不依赖于词汇的语法和形态信息,而是基于一系列启发式规则来删除单词的后缀,因此可能会产生非词汇化的结果。 **7.8.2.2 Python实现** Python中,`nltk`库提供了词干提取的工具,如`PorterStemmer`、`SnowballStemmer`等。 ```python from nltk.stem import PorterStemmer stemmer = PorterStemmer() words = ['running', 'runner', 'run', 'runs'] stemmed_words = [stemmer.stem(word) for word in words] print(stemmed_words) # 输出可能是 ['run', 'runn', 'run', 'run'] ``` 注意,上述例子中`runner`的词干化结果`runn`并不是一个实际存在的英文单词,这显示了词干提取可能带来的问题。 #### 7.8.3 词形还原(Lemmatization) **7.8.3.1 概述** 词形还原是将单词还原到其词典中的基本或词根形式的过程,同时保留其词性信息。与词干提取相比,词形还原能够更准确地反映单词的语义,因为它依赖于词汇的语法和形态分析。词形还原通常用于需要深入理解文本含义的场景,如情感分析、文本摘要等。 **7.8.3.2 Python实现** 在Python中,`nltk`库同样提供了词形还原的功能,通过`WordNetLemmatizer`类实现。 ```python from nltk.stem import WordNetLemmatizer from nltk.corpus import wordnet lemmatizer = WordNetLemmatizer() words = ['running', 'runners', 'ran', 'run'] # 需要指定词性,否则默认使用名词词性 # 'n'名词, 'v'动词, 'a'形容词, 'r'副词, 's'形容词卫星词(satellite adjective) pos_tag = {'n':'n', 'v':'v', 'a':'a', 'r':'r', 's':'s'} lemmatized_words = [lemmatizer.lemmatize(word, pos=pos_tag.get(word[-1].lower(), 'n')) for word in words] print(lemmatized_words) # 尝试根据词尾判断词性,实际应用中可能需要更复杂的词性标注 ``` 注意,上述代码中的词性判断非常简化,实际应用中通常需要使用更复杂的词性标注工具(如`nltk`的`pos_tag`函数)来确定每个单词的词性。 #### 7.8.4 应用场景与比较 **分词**:广泛应用于搜索引擎、文本挖掘、信息检索等领域,是文本处理的第一步。 **词干提取与词形还原**:两者都用于降低词汇的多样性,但词形还原在保留词汇语义方面更为准确。词干提取因其简单高效,适用于对准确性要求不高的场景;而词形还原则更适合需要深入理解文本含义的复杂任务。 **选择策略**:在实际应用中,应根据任务的具体需求选择合适的技术。例如,对于快速文本分类任务,词干提取可能是一个不错的选择;而对于需要精确理解文本情感的场景,则更倾向于使用词形还原。 #### 结论 分词、词干提取与词形还原是自然语言处理中不可或缺的文本预处理步骤。它们不仅能够有效减少文本数据的复杂性,提高处理效率,还能为后续的文本分析和机器学习模型训练奠定坚实的基础。通过本章节的学习,读者应能够掌握这些技术的基本原理、Python实现方法及其在不同场景下的应用策略。
上一篇:
7.7 多个单词的词袋(n元分词)
下一篇:
7.9 主题建模与文档聚类
该分类下的相关小册推荐:
Python数据分析与挖掘实战(下)
Python合辑1-Python语言基础
Python编程轻松进阶(二)
Python合辑12-面向对象
Python合辑10-函数
Python爬虫入门与实战开发(下)
Python面试指南
实战Python网络爬虫
Python甚础Django与爬虫
Python与办公-玩转PPT
Python编程轻松进阶(五)
Python合辑11-闭包函数