NLTK学习之一:简单文本分析
nltk的全称是natural language toolkit,是一套基于python的自然语言处理工具集。
1 NLTK的安装
nltk的安装十分便捷,只需要pip就可以。
pip install nltk
在nltk中集成了语料与模型等的包管理器,通过在python解释器中执行
>>> import nltk
>>> nltk.download()
便会弹出下面的包管理界面,在管理器中可以下载语料,预训练的模型等。
2 对文本进行简单的分析
2.1 Text类介绍
nltk.text.Text()类用于对文本进行初级的统计与分析,它接受一个词的列表作为参数。Text类提供了下列方法。
方法 | 作用 |
---|---|
Text(words) | 对象构造 |
concordance(word, width=79, lines=25) | 显示word出现的上下文 |
common_contexts(words) | 显示words出现的相同模式 |
similar(word) | 显示word的相似词 |
collocations(num=20, window_size=2) | 显示最常见的二词搭配 |
count(word) | word出现的词数 |
dispersion_plot(words) | 绘制words中文档中出现的位置图 |
vocab() | 返回文章去重的词典 |
nltk.text.TextCollection类是Text的集合,提供下列方法
方法 | 作用 |
---|---|
nltk.text.TextCollection([text1,text2,]) | 对象构造 |
idf(term) | 计算词term在语料库中的逆文档频率,即 log总文章数文中出现term的文章数 log\frac{总文章数}{文中出现term的文章数} |
tf(term,text) | 统计term在text中的词频 |
tf_idf(term,text) | 计算term在句子中的tf_idf,即tf*idf |
2.2 示例
下面我们对青春爱情小说《被遗忘的时光》做下简单的分析。首先加载文本:
import ntlk
import jiebaraw=open('forgotten_times.txt').read()
text=nltk.text.Text(jieba.lcut(raw))
对于言情小说,先看下风花雪月这样的词出现的情况
print text.concordance(u'风花雪月')
输出如下:
>>> Displaying 2 of 2 matches:
彼时 校园 民谣 不复 大热 了 , 但 处身 校园 , 喜欢 吟唱 风花雪月 的 感性 青年 还是 喜欢 借此 抒怀 。 邵伊敏 平常 听 英语歌 较
的 眼睛 看 的 是 自己 , 迷恋 的 却 多半 只是 少女 心中 的 风花雪月 , 而 迷恋 过后 不可避免 不是 失望 就是 幻灭 。 他 将 目光
再看下作者对于某些同义词的使用习惯
print text.common_contexts([u'一起',u'一同'])
输出如下:
>>> 爷爷奶奶_生活 在_时
下面看下文章常用的二词搭配
text.collocations()
输出
出入境 管理处; 沃尔沃 XC90; 慢吞吞 爬起来; 没交过 男朋友; 邵伊敏 回头一看; 戴维凡 哭笑不得; 没想到 邵伊敏; 邵伊敏 第二天; 邵伊敏 没想到
查看关心的词在文中出现的位置
text.dispersion_plot([u'校园',u'大学'])
输出如下图:
3 对文档用词进行分布统计
3.1 FreqDist类介绍
这个类主要记录了每个词出现的次数,根据统计数据生成表格,或绘图。其结构很简单,用一个有序词典进行实现。所以dict类型的方法在此类也是适用的。如keys()等。
方法 | 作用 |
---|---|
B() | 返回词典的长度 |
plot(title,cumulative=False) | 绘制频率分布图,若cumu为True,则是累积频率分布图 |
tabulate() | 生成频率分布的表格形式 |
most_common() | 返回出现次数最频繁的词与频度 |
hapaxes() | 返回只出现过一次的词 |
3.2 示例
对歌曲《The day you went away》的歌词进行分析。
text = open('corpus/the_day_you_went_away.txt').read()
fdist = nltk.FreqDist(nltk.word_tokenize(text))
fdist.plot(30,cumulative=True)
代码第二行调用了word_tokenize()函数,此函数的作用是基于空格/标点等对文本进行分词,返回分词后的列表。如果要处理中文,需要三方的分词器先处理,之后才能使用nltk进行处理。运行输出分布图如下:
4 nltk自带的语料库
在nltk.corpus包下,提供了几类标注好的语料库。见下表:
语料库 | 说明 |
---|---|
gutenberg | 一个有若干万部的小说语料库,多是古典作品 |
webtext | 收集的网络广告等内容 |
nps_chat | 有上万条聊天消息语料库,即时聊天消息为主 |
brown | 一个百万词级的英语语料库,按文体进行分类 |
reuters | 路透社语料库,上万篇新闻方档,约有1百万字,分90个主题,并分为训练集和测试集两组 |
inaugural | 演讲语料库,几十个文本,都是总统演说 |
更多语料库,可以用nltk.download()在下载管理器中查看corpus。
4.1语料库处理
方法明 | 说明 |
---|---|
fileids() | 返回语料库中文件名列表 |
fileids[categories] | 返回指定类别的文件名列表 |
raw(fid=[c1,c2]) | 返回指定文件名的文本字符串 |
raw(catergories=[]) | 返回指定分类的原始文本 |
sents(fid=[c1,c2]) | 返回指定文件名的语句列表 |
sents(catergories=[c1,c2]) | 按分类返回语句列表 |
words(filename) | 返回指定文件名的单词列表 |
words(catogories=[]) | 返回指定分类的单词列表 |
5 文本预处理
NLP在获取语料之后,通常要进行文本预处理。英文的预处理包括:分词,去停词,提取词干等步骤。中文的分词相对于英文更复杂一些,也需要去停词。但没有提取词干的需要。
对于英文去停词的支持,在corpus下包含了一个stopword的停词库。
对于提取词词干,提供了Porter和Lancaster两个stemer。另个还提供了一个WordNetLemmatizer做词形归并。Stem通常基于语法规则使用正则表达式来实现,处理的范围广,但过于死板。而Lemmatizer实现采用基于词典的方式来解决,因而更慢一些,处理的范围和词典的大小有关。
porter = nltk.PorterStemmer()
porter.stem('lying') #'lie'lema=nltk.WordNetLemmatizer()
lema.lemmatize('women') #'woman'
NLTK学习之一:简单文本分析相关推荐
- NLTK学习之三:文本分类与构建基于分类的词性标注器
1 有监督的分类 1.1 分类相关概念 分类是为给定输入选择正确的类标签的任务.比如判断一封Email是否是垃圾邮件,确定一篇新闻的主题. 如果分类需要人工标准的标签进行训练,则称为有监督分类.有监督 ...
- NTLK1 :简单文本分析
参考链接1 参考链接2 import nltk import jieba import numpy as np import pandas as pd import matplotlib.pyplot ...
- NLTK学习笔记(二):文本、语料资源和WordNet汇总
目录 语料库基本函数表 文本语料库分类 常见语料库及其用法 载入自定义语料库 词典资源 停用词语料库 WordNet面向语义的英语字典 语义相似度 语料库基本函数表 示例 描述 fileids() 语 ...
- R语言:对说唱歌词的简单文本分析
这一阵公司的事情越来越忙,感觉光是应付工作就要耗费很大的精力,工作之外的越来越没有时间做了.再加上最近一直在搞落户的事情,耗费了很多精力,大概工作之后的状态都是这样吧.12月份因为报表的事情连续加了半 ...
- 《计算传播学导论》读书笔记——第二章文本分析简介
<计算传播学导论>读书笔记--第二章文本分析简介 第一节 文本分析研究现状 常用文本挖掘技术 第二节 文本分析与传播学研究 (一)为什么文本挖掘技术逐渐受到传播学者的关注 (二)不同文本分 ...
- Python文本分析技巧
上一章提到,Python是一门易用且强大的编程语言,所以本书将其作为示例语言使用,同时也提供了一套基础的Python文本分析的教程. 为什么要介绍这些Python技巧?原因是希望读者具有Python和 ...
- python爬虫自学笔记分析解密_python爬虫学习笔记——1 各种文本分析工具简介之汇总...
此处只简单汇总一下各种文本工具名目,他们的详细使用参见具体帖子.本文主要参考<8种目前Python使用率最高的文本处理工具>一文0.SnowNLP包 用于中文文本的处理 1.Jieba 2 ...
- [深度学习TF2][RNN-LSTM]文本情感分析包含(数据预处理-训练-预测)
基于LSTM的文本情感分析 0. 前言 1. 数据下载 2. 训练数据介绍 3. 用到Word2Vector介绍 wordsList.npy介绍 wordVectors.npy介绍 4 数据预处理 4 ...
- 《人民的名义》---简单的文本分析
我们都知道进行自然语言处理的第一步就是分词,下面使用jieba模块对最近比较热的电视剧<人民的名义>进行分词,并对它进行一些简单的文本分析. 一.jieba模块中常用的方法说明(githu ...
最新文章
- 防止被算力“锁死”,人工智能进化急需革命性算法
- [Django学习]第三章 视图和url配置
- 【PC工具】常用USB转串口芯片CP210x驱动,CH340G驱动安装有可能遇到的问题及解决办法...
- I2C总线之(二)---时序
- HTTP和HTTPS回顾
- SQL Server中追踪器Trace的介绍和简单使用-----(转)
- 小酌一下:Pycharm 2019.1.3 64位版本破解
- 数据库执行update语句,一直执行不完【已解决】
- SOME/IP报文格式-Payload
- 计算机毕业论文中期论文质量,计算机 毕业论文(设计)中期报告(1页)-原创力文档...
- 蜂窝移动电话定位技术与应用(转)
- Java 程序该怎么优化?(命令篇)
- 国外最流行的几个外包接活网站 简要介绍
- 7-16 新浪微博热门话题 (30分)
- C# 判断是否是节假日
- JSP智能小区物业管理系统
- keil5 字符编码的问题
- java全文检索word中的内容_搜索引擎时对WORD,EXCEL,PDF,POWERPOINT文件全文检索的总结...
- Java基础之——缓冲流、转换流、序列化流、打印流
- CSDN访客统计(不用量子恒道)
热门文章
- Vulkan的基本概念:如何使用Vulkan绘制三角形?
- 鸡啄米:C++编程入门系列之二(原码、反码与补码)
- Java项目:springboot客户关系管理系统
- Pandas 最全的使用方式(下)
- 个人feedly订阅源分享
- Linux Snap 命令
- AForge学习笔记(10):AForge.Imaging.Filters
- 树莓派更改WiFi信息
- 当使用maven的clear功能导致数据库链接出现Using a password on the command line interface can be insecure.的解决方案
- 软件测试到底在学什么