signed

QiShunwang

“诚信为本、客户至上”

NLTK学习1:用python语言进行计算:文本和单词

2021/3/21 0:38:33   来源:

1用python语言进行计算:文本和单词

在继续之前,您应该安装NLTK 3.0 ,教程见https://blog.csdn.net/weixin_44763047/article/details/115019546

1.1 NLTK的入门示例

加载text1,…, text9和lsend1,… send9
键入要查看的文本或句子的名称。
输入: texts () 或 sents () 以列出材料。
文本1:白鲸由赫尔曼·梅尔维尔1851年
文本2:理智与情感简·奥斯汀1811
文字3:创世记
文本4:就职演说语料库
text5:聊天语料库
text6:圣杯传奇
text7:华尔街日报
text8:交友语料库
text9 : G的《星期四的人》。。切斯特顿1908

from nltk.book import *
texts()

在这里插入图片描述

每当我们想查找这些文本时,我们只需要在Python提示符下输入它们的名称即可:
在这里插入图片描述
既然我们可以使用Python解释器,并且可以使用一些数据,那么我们就可以开始了。

1.2 NLTK搜索文字

除了简单阅读文本外,还有许多方法可以检查文本的上下文。一致视图显示了给定单词的每次出现以及上下文。在这里,我们在Moby Dick中通过输入text1,然后输入句号,然后输入 concordance,然后在括号中添加“ monstrous”,来查找单词monsterous:

text1.concordance("monstrous"

在这里插入图片描述
第一次在特定文本上使用一致性时,要花一些额外的时间来建立索引,以便快速进行后续搜索。一致性允许我们在上下文中看到单词。例如,我们看到 在___图片 和___ size之类的上下文中发生了可怕的事情。在相似的上下文范围内还会出现其他什么单词?我们可以通过添加与所讨论文本名称相似的术语,然后在括号中插入相关单词来找出答案:

text1.similar("monstrous")

在这里插入图片描述

text2.similar("monstrous")

在这里插入图片描述
common_contexts允许我们仅检查由两个或多个单词(例如monsterous 和very)共享的上下文。

text2.common_contexts(["monstrous", "very"])

在这里插入图片描述
自动检测文本中是否存在特定单词,并显示出现在相同上下文中的某些单词是一回事。但是,我们还可以确定单词在文本中的位置:从单词开始出现多少个单词。可以使用色散图显示此位置信息。每个条纹代表一个单词的实例,每一行代表整个文本。对于1.1中文本4:就职演说语料库,可以如下图所示绘制该图。尝试更多的单词(例如,自由,体质),以及不同的文字。可以在查看单词之前预测单词的离散度。

text4.dispersion_plot(["citizens", "democracy", "freedom", "duties", "America"])

提示: 需要安装Python的NumPy和Matplotlib软件包才能该图形化图表。
美国总统就职演说中单词的词汇分散图:可用于调查语言使用随时间的变化美国总统就职演说中单词的词汇分散图:可用于调查语言使用随时间的变化
尝试以我们刚刚看到的各种样式生成一些随机文本。为此,我们输入文本名称,后接术语generate

text3.generate()

在这里插入图片描述

1.3 词汇量

首先,我们根据出现的单词和标点符号找出文本从头到尾的长度。我们使用术语len来获取某物的长度,我们将其应用于text3《创世纪》一书:

len(text3)

在这里插入图片描述
在我们的示例短语中,有两次出现to,两次出现be,一次出现or和not。但是此短语中只有四个不同的词汇项目。创世记中包含多少个不同的单词?要在Python中解决此问题,我们必须提出稍有不同的问题。文本的词汇表只是它使用的标记集,因为在一个集合中,所有重复项都折叠在一起。在Python中,我们可以使用以下命令获取text3的词汇表:set(text3)。当您执行此操作时,许多字词的屏幕都会跳过。现在尝试以下操作:

sorted(set(text3))

在这里插入图片描述
我们获得了一个排序的词汇表,以各种标点符号开头,以A开头的单词继续。所有大写单词都在小写单词之前。我们通过询问集合中的项数来间接发现词汇量,然后再次可以使用len获得该数。尽管它有44,764个记号,但本书只有2,789个不同的单词或“单词类型”。一个字类型是单词的形式或拼写,与单词在文本中的特定出现无关,即该单词被认为是词汇的唯一项。我们共有2789个项目,其中包括标点符号,因此我们通常将这些唯一的项目类型称为单词类型。

len(set(text3))

在这里插入图片描述
现在,让我们计算一下文本的词汇丰富度。展示了不同单词的数量仅占单词总数的6%,或者每个单词平均使用了16次。(如果使用的是Python 2,请从__future__导入分区开始)

len(set(text3)) / len(text3)

在这里插入图片描述
接下来,让我们关注特定的单词。我们可以计算单词在文本中出现的频率,并计算特定单词占文本的百分比:

text3.count("smote")
100 * text4.count('a')/ len(text4)

在这里插入图片描述
我们用关键字def为函数定义一个简短的名称,lexical_diversity()和 percent (),并使用它。

from itertools import count
def lexical_diversity(text):
    return len(set(text))/len(text)
def percentage(count,total):
    return 100 * count / total
print(lexical_diversity(text3))
print(lexical_diversity(text5))
print(percentage(4, 5))
print(percentage(text4.count('a'),len(text4)))

在这里插入图片描述

接下来,我们将看到在制表数据时如何使用函数,如1.1所示。该表的每一行将涉及相同的计算,但具有不同的数据,我们将使用一个函数来执行此重复性工作。

表1.1:

布朗语料库中各种体裁的词汇多样性
在这里插入图片描述