NLTK简介
NLTK是Python上著名的⾃然语⾔处理库。⾃带语料库,以及分词等功能。
NLTK被称为“使用Python进行教学和计算语言学工作的绝佳工具”,以及“用自然语言进行游戏的神奇图书馆”。
NLTK提供丰富的模块和功能⬇️
模块 | 功能 |
---|---|
nltk.corpus | 语料库 |
nltk.tokenize | 分词 |
nltk.stem | 句子主干 |
nltk.tag | 词性标识符 |
nltk.collocation | 搭配发现 |
nltk.classify, nltk.cluster | 分类,分簇 |
nltk.chunk | 分块 |
nltk.parse | 解析 |
nltk.probability | 概率与估计 |
… | … |
NLTK简单使用
先检查一下自己的nltk
import nltk
# 查看一下nltk的简介(是否导入成功?)
print(nltk.__doc__)
# 查看一下语料库路径(是否成功下载语料库?)
print(nltk.data.find("corpora"))
瞧瞧自带的语料库
from nltk.corpus import brown # 导入Brown语料库
print(brown.categories()) # 类别
print(brown.fileids()) # 文件
print(brown.sents()) # 句子
print(brown.words()) # 词语
from nltk.corpus import udhr # 人权宣言语料库
print(udhr.fileids())
print(udhr.words(fileids = "Chinese_Mandarin-GB2312")) #fileids可省略
做一些简单的统计
from nltk.book import * # 导入Book语料库下的book1,book2,book3...
# 获取词频(词语, 次数)
len(text1) # 单词的个数(单词有重复,甚至包含标点符号)
len(set(text1)) # set得到词汇表,len(set(...))即词汇的种类数(这个词汇表仍包含标点符号)
sorted(set(text1)) # 将词汇表按英文字母排序
text1.count('FBI') # 某个特定词出现的次数
# 计算每个词汇的平均使用次数
def token_avg(text):
return len(text) / len(set(text))
# 计算特定单词占比
def token_proportion(text):
return text.count('FBI') / len(text)
接下来是一个重要的功能——词频统计
from nltk.book import * # 还是导入Book语料库下的book1,book2,book3...
fd = FreqDist(text1) # (!!!)获取词频列表
print(fd['she']) # 某个词的频度
print(fd.most_common(10)) # 频度最高的十个词语及其频度
再结合强大的matplotlib库,可以轻易实现简单的可视化!
fd = FreqDist(text1) # 获取词频
from matplotlib.pyplot import *
fd.plot(10,cumulative=False) # 可视化前10个词频最高的单词(包括标点 >_<)
下面的例子很能体现自然语言处理的魅力 !
在一部小说(text2)中,Elinor,Marianne,Edward 和Willoughby四个人中有一对夫妻,我们如何判断呢?
text2.dispersion_plot(['Elinor','Marianne','Edward','Willoughby'])
通过这个离散词频图,我们直观地判断出Elinor和Marianne是一对夫妻