NLP自然语言处理001:NLTK入门

2021-11-22 14:16:14 浏览数 (1)

准备写一个系统的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()

NLTK频率分布类中定义的函数:

0 人点赞