8 练习
- ☼ 创建一个变量
phrase
包含一个词的列表。实验本章描述的操作,包括加法、乘法、索引、切片和排序。 - ☼ 使用语料库模块处理
austen-persuasion.txt
。这本书中有多少词符?多少词型? - ☼ 使用布朗语料库阅读器
nltk.corpus.brown.words()
或网络文本语料库阅读器nltk.corpus.webtext.words()
来访问两个不同文体的一些样例文本。 - ☼ 使用
state_union
语料库阅读器,访问 《国情咨文报告》 的文本。计数每个文档中出现的men
、women
和people
。随时间的推移这些词的用法有什么变化? - ☼ 考查一些名词的整体部分关系。请记住,有 3 种整体部分关系,所以你需要使用:
member_meronyms()
,part_meronyms()
,substance_meronyms()
,member_holonyms()
,part_holonyms()
和substance_holonyms()
。 - ☼ 在比较词表的讨论中,我们创建了一个对象叫做
translate
,通过它你可以使用德语和意大利语词汇查找对应的英语词汇。这种方法可能会出现什么问题?你能提出一个办法来避免这个问题吗? - ☼ 根据 Strunk 和 White 的 《Elements of Style》,词 however 在句子开头使用是“in whatever way”或“to whatever extent”的意思,而没有“nevertheless”的意思。他们给出了正确用法的例子:However you advise him, he will probably do as he thinks best.(
http://www.bartleby.com/141/strunk3.html
) 使用词汇索引工具在我们一直在思考的各种文本中研究这个词的实际用法。也可以看 LanguageLog 发布在http://itre.cis.upenn.edu/~myl/languagelog/archives/001913.html
上的“Fossilized prejudices abou‘t however’”。 - ◑ 在名字语料库上定义一个条件频率分布,显示哪个 首 字母在男性名字中比在女性名字中更常用(参见4.4)。
- ◑ 挑选两个文本,研究它们之间在词汇、词汇丰富性、文体等方面的差异。你能找出几个在这两个文本中词意相当不同的词吗,例如在 《白鲸记》 与 《理智与情感》 中的 monstrous?
- ◑ 阅读 BBC 新闻文章:UK’s Vicky Pollards ‘left behind’
http://news.bbc.co.uk/1/hi/education/6173441.stm
。文章给出了有关青少年语言的以下统计:“使用最多的 20 个词,包括 yeah, no, but 和 like,占所有词的大约三分之一”。对于大量文本源来说,所有词标识符的三分之一有多少词类型?你从这个统计中得出什么结论?更多相关信息请阅读http://itre.cis.upenn.edu/~myl/languagelog/archives/003993.html
上的 LanguageLog。 - ◑ 调查模式分布表,寻找其他模式。试着用你自己对不同文体的印象理解来解释它们。你能找到其他封闭的词汇归类,展现不同文体的显著差异吗?
- ◑ CMU 发音词典包含某些词的多个发音。它包含多少种不同的词?具有多个可能的发音的词在这个词典中的比例是多少?
- ◑ 没有下位词的名词同义词集所占的百分比是多少?你可以使用
wn.all_synsets('n')
得到所有名词同义词集。 - ◑ 定义函数
supergloss(s)
,使用一个同义词集s
作为它的参数,返回一个字符串,包含s
的定义和s
所有的上位词与下位词的定义的连接字符串。 - ◑ 写一个程序,找出所有在布朗语料库中出现至少 3 次的词。
- ◑ 写一个程序,生成一个词汇多样性得分表(例如词符/词型的比例),如我们在1.1所看到的。包括布朗语料库文体的全集 (
nltk.corpus.brown.categories()
)。哪个文体词汇多样性最低(每个类型的标识符数最多)?这是你所期望的吗? - ◑ 写一个函数,找出一个文本中最常出现的 50 个词,停用词除外。
- ◑ 写一个程序,输出一个文本中 50 个最常见的双连词(相邻词对),忽略包含停用词的双连词。
- ◑ 写一个程序,按文体创建一个词频表,以1节给出的词频表为范例。选择你自己的词汇,并尝试找出那些在一个文体中很突出或很缺乏的词汇。讨论你的发现。
- ◑ 写一个函数
word_freq()
,用一个词和布朗语料库中的一个部分的名字作为参数,计算这部分语料中词的频率。 - ◑ 写一个程序,估算一个文本中的音节数,利用 CMU 发音词典。
- ◑ 定义一个函数
hedge(text)
,处理一个文本和产生一个新的版本在每三个词之间插入一个词'like'
。 - ★ 齐夫定律:f(w) 是一个自由文本中的词 w 的频率。假设一个文本中的所有词都按照它们的频率排名,频率最高的在最前面。齐夫定律指出一个词类型的频率与它的排名成反比(即 f × r = k,k 是某个常数)。例如:最常见的第 50 个词类型出现的频率应该是最常见的第 150 个词型出现频率的 3 倍。
- 写一个函数来处理一个大文本,使用
pylab.plot
画出相对于词的排名的词的频率。你认可齐夫定律吗?(提示:使用对数刻度会有帮助。)所绘的线的极端情况是怎样的? - 随机生成文本,如使用
random.choice("abcdefg ")
,注意要包括空格字符。你需要事先import random
。使用字符串连接操作将字符累积成一个很长的字符串。然后为这个字符串分词,产生前面的齐夫图,比较这两个图。此时你怎么看齐夫定律?
- 写一个函数来处理一个大文本,使用
- ★ 修改例2.2的文本生成程序,进一步完成下列任务:
- 在一个列表
words
中存储 n 个最相似的词,使用random.choice()
从列表中随机选取一个词。(你将需要事先import random
。) - 选择特定的文体,如布朗语料库中的一部分或者《创世纪》翻译或者古腾堡语料库中的文本或者一个网络文本。在此语料上训练一个模型,产生随机文本。你可能要实验不同的起始字。文本的可理解性如何?讨论这种方法产生随机文本的长处和短处。
- 现在使用两种不同文体训练你的系统,使用混合文体文本做实验。讨论你的观察结果。
- 在一个列表
- ★ 定义一个函数
find_language()
,用一个字符串作为其参数,返回包含这个字符串作为词汇的语言的列表。使用《世界人权宣言》udhr
的语料,将你的搜索限制在 Latin-1 编码的文件中。 - ★ 名词上位词层次的分枝因素是什么?也就是说,对于每一个具有下位词——上位词层次中的子女——的名词同义词集,它们平均有几个下位词?你可以使用
wn.all_synsets('n')
获得所有名词同义词集。 - ★ 一个词的多义性是它所有含义的个数。利用 WordNet,使用
len(wn.synsets('dog', 'n'))
我们可以判断名词 dog 有 7 种含义。计算 WordNet 中名词、动词、形容词和副词的平均多义性。 - ★使用预定义的相似性度量之一给下面的每个词对的相似性打分。按相似性减少的顺序排名。你的排名与这里给出的顺序有多接近?(Miller & Charles, 1998)实验得出的顺序: car-automobile, gem-jewel, journey-voyage, boy-lad, coast-shore, asylum-madhouse, magician-wizard, midday-noon, furnace-stove, food-fruit, bird-cock, bird-crane, tool-implement, brother-monk, lad-brother, crane-implement, journey-car, monk-oracle, cemetery-woodland, food-rooster, coast-hill, forest-graveyard, shore-woodland, monk-slave, coast-forest, lad-wizard, chord-smile, glass-magician, rooster-voyage, noon-string。
关于本文档…
针对 NLTK 3.0 作出更新。本章来自于 Natural Language Processing with Python,Steven Bird, Ewan Klein 和Edward Loper,Copyright © 2014 作者所有。本章依据 Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 United States License [http://creativecommons.org/licenses/by-nc-nd/3.0/us/] 条款,与 自然语言工具包 [http://nltk.org/
] 3.0 版一起发行。
本文档构建于星期三 2015 年 7 月 1 日 12:30:05 AEST