Python NLP 入门教程
本文简要介绍Python自然语言处理(NLP),使用Python的NLTK库。NLTK是Python的自然语言处理工具包,在NLP领域中,最常使用的一个Python库。
什么是NLP?
简单来说,自然语言处理(NLP)就是开发能够理解人类语言的应用程序或服务。
这里讨论一些自然语言处理(NLP)的实际应用例子,如语音识别、语音翻译、理解完整的句子、理解匹配词的同义词,以及生成语法正确完整句子和段落。
这并不是NLP能做的所有事情。
NLP实现
搜索引擎: 比如谷歌,Yahoo等。谷歌搜索引擎知道你是一个技术人员,所以它显示与技术相关的结果;
社交网站推送:比如Facebook News Feed。如果News Feed算法知道你的兴趣是自然语言处理,就会显示相关的广告和帖子。
语音引擎:比如Apple的Siri。
垃圾邮件过滤:如谷歌垃圾邮件过滤器。和普通垃圾邮件过滤不同,它通过了解邮件内容里面的的深层意义,来判断是不是垃圾邮件。
NLP 库
下面是一些开源的自然语言处理库(NLP):
Natural language toolkit (NLTK);
Apache OpenNLP;
Stanford NLP suite;
Gate NLP library
其中自然语言工具包(NLTK)是最受欢迎的自然语言处理库(NLP),它是用Python编写的,而且背后有非常强大的社区支持。
NLTK也很容易上手,实际上,它是最简单的自然语言处理(NLP)库。
在这个NLP教程中,我们将使用Python NLTK库。
安装 NLTK
如果您使用的是Windows/Linux/Mac,您可以使用pip安装NLTK:
打开python终端导入NLTK检查NLTK是否正确安装:
如果一切顺利,这意味着您已经成功地安装了NLTK库。首次安装了NLTK,需要通过运行以下代码来安装NLTK扩展包:
这将弹出NLTK 下载窗口来选择需要安装哪些包:
您可以安装所有的包,因为它们的大小都很小,所以没有什么问题。
使用Python Tokenize文本
首先,我们将抓取一个web页面内容,然后分析文本了解页面的内容。
我们将使用urllib模块来抓取web页面:
从打印结果中可以看到,结果包含许多需要清理的HTML标签。 然后BeautifulSoup模块来清洗这样的文字:
现在我们从抓取的网页中得到了一个干净的文本。 下一步,将文本转换为tokens,像这样:
统计词频
text已经处理完毕了,现在使用Python NLTK统计token的频率分布。
可以通过调用NLTK中的FreqDist()方法实现:
如果搜索输出结果,可以发现最常见的token是PHP。 您可以调用plot函数做出频率分布图:
这上面这些单词。比如of,a,an等等,这些词都属于停用词。
一般来说,停用词应该删除,防止它们影响分析结果。
处理停用词
NLTK自带了许多种语言的停用词列表,如果你获取英文停用词:
现在,修改下代码,在绘图之前清除一些无效的token:
最终的代码应该是这样的:
现在再做一次词频统计图,效果会比之前好些,因为剔除了停用词:
使用NLTK Tokenize文本
在之前我们用split方法将文本分割成tokens,现在我们使用NLTK来Tokenize文本。
文本没有Tokenize之前是无法处理的,所以对文本进行Tokenize非常重要的。token化过程意味着将大的部件分割为小部件。
你可以将段落tokenize成句子,将句子tokenize成单个词,NLTK分别提供了句子tokenizer和单词tokenizer。
假如有这样这段文本:
使用句子tokenizer将文本tokenize成句子:
输出如下:
这是你可能会想,这也太简单了,不需要使用NLTK的tokenizer都可以,直接使用正则表达式来拆分句子就行,因为每个句子都有标点和空格。
那么再来看下面的文本:
这样如果使用标点符号拆分,Hello Mr将会被认为是一个句子,如果使用NLTK:
输出如下:
这才是正确的拆分。
接下来试试单词tokenizer:
输出如下:
Mr.这个词也没有被分开。NLTK使用的是punkt模块的PunktSentenceTokenizer,它是NLTK.tokenize的一部分。而且这个tokenizer经过训练,可以适用于多种语言。
非英文 Tokenize
Tokenize时可以指定语言:
输出结果如下:
同义词处理
使用nltk.download()安装界面,其中一个包是WordNet。
WordNet是一个为自然语言处理而建立的数据库。它包括一些同义词组和一些简短的定义。
您可以这样获取某个给定单词的定义和示例:
输出结果是:
WordNet包含了很多定义:
结果如下:
可以像这样使用WordNet来获取同义词:
输出:
反义词处理
也可以用同样的方法得到反义词:
输出:
词干提取
语言形态学和信息检索里,词干提取是去除词缀得到词根的过程,例如working的词干为work。
搜索引擎在索引页面时就会使用这种技术,所以很多人为相同的单词写出不同的版本。
有很多种算法可以避免这种情况,最常见的是波特词干算法。NLTK有一个名为PorterStemmer的类,就是这个算法的实现:
输出结果是:
还有其他的一些词干提取算法,比如 Lancaster词干算法。
非英文词干提取
除了英文之外,SnowballStemmer还支持13种语言。
支持的语言:
你可以使用SnowballStemmer类的stem函数来提取像这样的非英文单词:
单词变体还原
单词变体还原类似于词干,但不同的是,变体还原的结果是一个真实的单词。不同于词干,当你试图提取某些词时,它会产生类似的词:
结果:
结果可能会是一个同义词或同一个意思的不同单词。
有时候将一个单词做变体还原时,总是得到相同的词。
这是因为语言的默认部分是名词。要得到动词,可以这样指定:
结果:
实际上,这也是一种很好的文本压缩方式,最终得到文本只有原先的50%到60%。
结果还可以是动词(v)、名词(n)、形容词(a)或副词(r):
输出:
词干和变体的区别
通过下面例子来观察:
输出:
词干提取不会考虑语境,这也是为什么词干提取比变体还原快且准确度低的原因。
个人认为,变体还原比词干提取更好。单词变体还原返回一个真实的单词,即使它不是同一个单词,也是同义词,但至少它是一个真实存在的单词。
如果你只关心速度,不在意准确度,这时你可以选用词干提取。
在此NLP教程中讨论的所有步骤都只是文本预处理。在以后的文章中,将会使用Python NLTK来实现文本分析。
我已经尽量使文章通俗易懂。希望能对你有所帮助。
Python NLP 入门教程相关推荐
- Python NLP入门教程
什么是NLP? 简单来说,自然语言处理(NLP)就是开发能够理解人类语言的应用程序或服务. 这里讨论一些自然语言处理(NLP)的实际应用例子,如语音识别.语音翻译.理解完整的句子.理解匹配词的同义词, ...
- python爬虫入门教程--优雅的HTTP库requests(二)
requests 实现了 HTTP 协议中绝大部分功能,它提供的功能包括 Keep-Alive.连接池.Cookie持久化.内容自动解压.HTTP代理.SSL认证等很多特性,下面这篇文章主要给大家介绍 ...
- 编程入门python语言是多大孩子学的-不学点编程,将来怎么给孩子辅导作业―Python新手入门教程...
为了填满AI时代的人才缺口,编程语言教育都从娃娃抓起了!如果你还不懂Python是什么将来怎么给孩子辅导作业呢? Python新手入门教程 近期,浙江省信息技术课程改革方案出台,Python言语现已断 ...
- python教学视频下载-Python机器学习入门教程全套视频下载【传智播客】
Python机器学习入门教程 初级共3天课 本套教程是机器学习的入门课程,主要介绍一些经典的传统机器学习算法,如分类算法:KNN算法,朴素贝叶斯算法,逻辑回归,决策树算法以及随机森林;回归算法:线性回 ...
- python基础教程是什么语言-终于懂得python中文入门教程
Python作为一门新型的编程语言(一般常用作脚本语言)很受欢迎,毕竟相对其他的编程语言(Java ,C#等)来说比较容易入手.那么,在刚开始学习Python时有哪些疑难点需要掌握呢?以下是小编为你整 ...
- python菜鸟工具-终于清楚python菜鸟入门教程
Python是一款功能强大的脚本语言,具有丰富和强大的库,重要的是,它还具有很强的可读性,易用易学,非常适合编程初学者入门.以下是小编为你整理的python菜鸟入门教程 环境配置:下载Python并安 ...
- python新手入门教程-Python简明入门教程
本文实例讲述了Python简明入门教程.分享给大家供大家参考.具体如下: 一.基本概念 1.数 在Python中有4种类型的数――整数.长整数.浮点数和复数. (1)2是一个整数的例子. (2)长整数 ...
- python免费入门手册-Python 基础入门教程
Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. <Python 基础入 ...
- Python基础入门教程:使用 Python 3 协程快速获得一个代理池
Python基础入门教程:使用 Python 3 协程快速获得一个代理池 前言 在执行 IO 密集型任务的时候,程序会因为等待 IO 而阻塞.比如我们使用 requests 库来进行网络爬虫请求的话, ...
最新文章
- 那些到了 30 岁的技术人,后来都去哪了?
- Windows Admin Center 高可用部署
- html video 设置进度条不可拖动_PHP大文件切割上传并带上进度条功能,不妨一试...
- arm linux 中断 分析,armlinux中断异常的处理分析.pdf
- 什么90%的人,自学python都不能学会,原来问题出在这,赶紧看看!
- react-native 金币彩带雨下落动画
- mysql实验6答案_SQL 2008课后习题答案 实验6
- viewpager 获取当前现实的view
- 20200718每日一句
- NetBeans简介和简单使用
- Windows 7 SP1 多国语言包(MUI language packs)官方下载
- 从网络启动恢复RG750Gr3
- 《小样本学习研究综述》赵凯琳等 Survey on Few-shot Learning,文献阅读笔记
- 数值分析 解线性方程组的编程实现(Hilbert)
- LINUX操作命令汇总(zt)
- html+dwcs6代码,Dreamweaver cs6如何快速整理代码?
- 玩转 Windows 10 中的 Linux 子系统
- 戴蒙德对新冠疫情等的分析与看法笔记
- html表格翻页简单,利用jQuery实现一个简单的表格上下翻页效果
- ubuntu 检测网络状态命令