NLTK入门一:文本的信息统计、搜索和词频统计概览

NLTK以及相关包的安装

安装nltk包可以通过pip, 输入:

pip install nltk

即可。之后,打开一个python环境,输入:

import nltk
nltk.download()

在下列对话框中,选择all,点击Download,即可下载所有NLTK处理模块。 输入图片说明

下载完成后如图所示: 输入图片说明

导入自带文本的book模块:

通过:

from nltk.book import *

可导入nltk.book的所有模块,并且该模块自带9本书可以作为文本分析的例子,内容如下:

输入图片说明

参考翻译书名:《白鲸记》、《理智与情感》、《圣经》、《总统就职演说语料库》、《聊天语料库》、《巨蟒与圣杯》、《华尔街之旅》、《人事语料库》以及《星期四人》

此外,对于每本书的第一句,该模块都给出了一个特殊的变量供读者使用。例如,《白鲸记》的第一句即为变量sent1,《圣经》的第一句为sent3等等。每句话所代表的变量是一个字符(token,包括单词、符号和数字)组成的列表

输入图片说明

文本基本信息数据统计:

len(text)函数:

对于nltk中的文本,使用len(text)函数可以统计出文本中字符的个数。

"""
    Numbers of words, punctuations and numbers (tokens)
"""
len(text1)

输入图片说明

nltk中,所有的文本以python 列表形式储存,因此所有对于Python列表成立的操作对于nltk文本也适用。以下代码分别获取文本中独立的单词以及这些单词中按照字母排列的前10个单词:

# num of unique tokens
len(set(text1))

# Get part of the list
sorted(set(text3))[25 : 35]

输入图片说明

因此,文本中平均每个单词出现的次数(文本多样程度, lexical diversity)可以计算如下:

diversity = len(text) / len(set(text))

count() 函数:

使用count()函数可以统计文本中出现的关键词的次数:

text4.count('America')

并可以统计关键词占比:

# How would you calculate the percentage of Text 4 that is taken up by the word "America"?
print("Percentage of \"America\" %.3f %% " % ((text4.count('America') / len(text4)) * 100))

对于文本中出现的一些单词,还可以画出其分布情况:

# 画出文本4中以下单词的分类情况
import numpy as np
%matplotlib inline
text4.dispersion_plot([ "citizens", "democracy", "freedom", "duties", "America"])

输入图片说明

简要文本搜索

concordance(key_word)函数:搜索关键词在文本中出现的上下文:

以下代码搜索关键词"monstrous"在文本text1中出现的前后文:

text1.concordance('monstrous')

输入图片说明

此外,还可以限制每行文本的长度以及所显示的文本总数。例如,以下代码搜索关键词"the"出现的前后文,限制每行显示79个字符,并只显示前100个结果:

text1.concordance("the", 79, lines=100)

输入图片说明

搜索功能还包括一个具体的关键词在文本中出现的下标(是文本中第几个单词,从0开始数):

print(text4.index('awaken'))
print(text4[0])

输入图片说明

similar(key_word)函数:搜索关键词在文本中的其他近义词:

text2.similar('monstrous')

输入图片说明

collocations()函数:搜索文本中的常见关键词组:

该函数可以搜索出文本中经常出现的词组。

text4.collocations()

输入图片说明

文本词频统计相关模块:

NLTK中常用FreqDist和Counter模块做词频统计。

from nltk.probability import FreqDist
from collections import Counter

most_common(num):统计最常见的num个字符

以下代码输出被统计文本中最常见的50个字符:

fdist1 = FreqDist(text1)
fdist1.most_common(50)

输入图片说明

可以看到,统计结果中有许多标点符号,可能在文本分析中并没有实际意义。因此,作如下处理可以得到仅含有最常见的50个单词的列表:

text1 = [word for word in text1 if word.isalpha()]
fdist1 = FreqDist(text1)
fdist1.most_common(50)

输入图片说明

文本统计中将nltk模块与常见python字符串处理函数进行混合也是一种常见文本处理手段。适合于nltk一起使用的常见python字符串处理手段如下表:

输入图片说明

fDist[word]: 统计该单词在文本中的出现次数:

文本统计可以统计某一个单词在文本中出现的次数,比如:

fdist1['whale']

统计了whale这个单词在《白鲸记》中出现的次数。

输入图片说明

以下代码分别绘制最常用50个字符的频率以及他们总计的词频量:

fDist.plot(num, cumulative=False):绘制最常见的num个单词的分布情况

fdist1.plot(50)
fdist1.plot(50, cumulative=True)

输入图片说明

fDist.max()和fDist.freq(num):文本中最常出现的单词的长度和最常出现的单词占比

以下代码统计了文本《白鲸记》中最常见的单词的长度:

fdist2 = FreqDist(len(word) for word in text1)

# 3 letter words are most common
fdist2.max()

输入图片说明

反过来,也可以统计三个字母组成的单词所占总字符数的比例:

# What is the freq of 3 letter words?
fdist2.freq(3)

输入图片说明

其他常见的词频统计方式如图所示:

输入图片说明

以下代码输出文本中长于15个字母的单词:

vocab = set(text4)
long_words = [word for word in vocab if len(word) > 15]
sorted(long_words)

输入图片说明

附:Jupyter notebook使用简介:

本文代码展示环境为Jupyter notebook (旧名IPython notebook),这是一款浏览器交互型Python代码编辑器。文本处理中最常见功能(快捷键)如下:

A:在当前代码格上方新建代码格 B:在当前代码格下方新建代码格 D两次:删除该格 Ctrl + Enter: 运行格中的Python代码 Shift + M:合并代码格 Shift + Tab: 在jupyter notebook中显示python模块的用处 Tab: 自动补全代码 此外,单击 View -> Toggle line numbers,即可显示行号。

参考资料:

  1. NLTK官方文档,http://www.nltk.org/
  2. NLTKbook模块官方文档,http://www.nltk.org/book/
  3. 墨尔本大学科研委员会(Resbaz)NLTK培训课程
  4. Jupyter notebook常见快捷键:https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcut

猜你喜欢

转载自my.oschina.net/Samyan/blog/1796944