准备写一个系统的nlp入门博客,就从 nltk 开始把。 NLTK:Natural Language Toolkit,自然语言处理工具包,在NLP领域中,最常使用的一个Python库。
我们需要通过他里面的数据来进行学习和练习。
NLTK是一个开源的项目,包含:Python模块,数据集和教程,用于NLP的研究和开发 [1] 。 NLTK由StevenBird和Edward Loper在宾夕法尼亚大学计算机和信息科学系开发。 NLTK包括图形演示和示例数据。其提供的教程解释了工具包支持的语言处理任务背后的基本概念。
直接pip install 安装即可。
安装完成之后,导入nltk、
代码语言:javascript复制nltk.download()
使用nltk.download()可以浏览可用的软件包,我们要下载nltk图书集来下载我们学习需要的例子和练习所需要的全部数据。
选中book后,点击download(),大约有100mb,下载需要点时间。
。。。 这个装的贼慢。。 装好了就导入book 运行下看看
当我们需要这些文本的时候,只需要输入名字就可以了。
搜索文本:
我们通过 concordance(检索文章中的某个词)函数来看下text1《白鲸记》中的词"monstrous":
翻译过来:
使用 similar 函数可以看到与某词有相似的上下文的其他词:
代码语言:javascript复制print(text2.similar('monstrous'))
使用 common_contexts 两个或两个以上的词的共同的上下文
代码语言:javascript复制print(text2.common_contexts(['monstrous','very']))
使用 dispersion_plot 可以判断词在文本中的位置;竖线代表单词,行代表文本;可以用来研究随时间推移语言使用上的变化
代码语言:javascript复制print(text4.dispersion_plot(['citizens','democracy','freedom','duties','America']))#美国总统就职演说词汇分布图
词汇计数:
可以用 len 来统计所有的词数,包括词和标点符号。
代码语言:javascript复制print(len(text3)) # <创世纪>中的词汇计数,也叫标识符。
print(sorted(set(text3)))
可以看到,一共出现了有44764个标识符,下面使用set过滤sorted排序后就出现了标点符号之类的。
我们可以简单算下,每个词平均出现的词数。
代码语言:javascript复制s = sorted(set(text3))
print(44764 /len(s))
输出结果为:16.050197203298673
下面我们来针对一个词,计算他出现的词数。计算他出现的百分比。
代码语言:javascript复制print(text3.count('smote'))
print('%',(text4.count('a')/len(text4))*100)
输入结果: >>>5 >>> % 1.4643016433938312
smote在text3中出现了5次 ‘a’ 在text4中出现的百分比是 1.46%
频率分布:
我们可以使用 FreqDist 来查找《白鲸记》中最常见的前50个词。
代码语言:javascript复制fdist1 = FreqDist(text1)
print(fdist1)
v = fdist1.keys()
print(list(v)[:50])
使用 plot 可以绘制出50个最常用词的累计频率图。
代码语言:javascript复制fdist1.plot(50,cumulative=True)
可以使用 hapaxes()函数来查看只出现了一次的低频词。
代码语言:javascript复制print(fdist1.hapaxes())
细粒度的选择词:
让我们看看文本中的长词,也许他们有更多的特征和信息量。 我们想要找出文本词汇表长度超过15个字符的词汇
则:
代码语言:javascript复制v = set(text1)
long_words = [i for i in v if len(i)>15]
print(sorted(long_words))
输出:
再写一个长度大于 7 且 出现次数大于7的词:
代码语言:javascript复制fdist5 = FreqDist(text5)
print(sorted([i for i in set(text5) if len(i) > 7 and fdist5[i] > 7]))
另外可以通过 collocations 函数来统计频繁出现的双连词。
代码语言:javascript复制text4.collocations()