《Python自然语言处理》——1.8 练习

    xiaoxiao2024-04-20  7

    本节书摘来自异步社区《Python自然语言处理》一书中的第1章,第1.8节,作者[美]Steven Bird,Ewan Klein,Edward Loper, 陈涛,张旭,崔杨,刘海平 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

    1.8 练习

    1.○尝试使用Python解释器作为一个计算器,输入表达式,如12/(4+1)。

    2.○26个字母可以组成26的10次方或者26**10个10字母长的字符串。也就是141167095653376L(结尾处的L只是表示这是Python长数字格式)。100个字母长度的字符串可能有多少个?

    3.○Python乘法运算可应用于链表。当你输入['Monty', 'Python'] 20或者3 sent1会发生什么?

    4.○复习1.1节关于语言计算的内容。在text2中有多少个词?有多少个不同的词?

    5.○比较表格1-1中幽默和言情小说的词汇多样性得分,哪一个文体中词汇更丰富?

    6.○制作《理智与情感》中4个主角:Elinor、Marianne、Edward和Willoughby的分布图。在这部小说中关于男性和女性所扮演的不同角色,你能观察到什么?你能找出一对夫妻吗?

    7.○查找text5中的搭配。

    8.○思考下面的Python表达式:len(set(text4))。说明这个表达式的用途,并且描述在执行此计算中涉及的两个步骤。

    9.○复习1.2节关于链表和字符串的内容。

      a.定义一个字符串,并且将它分配给一个变量,如:my_string = 'My String'(在字符串中放一些更有趣的东西)。用两种方法输出这个变量的内容,一种是通过简单地输入变量的名称,然后按回车;另一种是通过使用print语句。

      b.尝试使用my_string+ my_string或者用它乘以一个数将字符串添加到它自身,例如:my_string* 3。请注意,连接在一起的字符串之间没有空格。怎样才能解决这个问题?

    10.○使用语法my_sent = ["My", "sent"],定义一个词链表变量my_sent(用自己的词或喜欢的话)。

      a.使用' '.join(my_sent)将其转换成一个字符串。

      b.使用split()在你指定的地方将字符串分割回链表。

    11.○定义几个包含词链表的变量,例如:phrase1、phrase2等。将它们连接在一起组成不同的组合(使用加法运算符),最终形成完整的句子。len(phrase1 + phrase2)与len(phrase1) + len(phrase2) 之间的关系是什么?

    12.○考虑下面两个具有相同值的表达式。哪一个在NLP中更常用?为什么?

    a."Monty Python"[6:12] b.["Monty", "Python"][1]

    13.○我们已经学习了如何用词链表表示一个句子,其中每个词是一个字符序列。sent12代表什么意思?为什么?并尝试其他的索引值。

    14.○在变量sent3中保存的是text3的第一句话。在sent3中the的索引值是1,因为sent3[1]的值是“the”。sent3中“the”的其他两种出现的索引值是多少?

    15.○复习1.4节讨论的条件语句。在聊天语料库(text5)中查找所有以字母b开头的词。按字母顺序显示出来。

    16.○在Python解释器提示符下输入表达式range(10)。再尝试range(10, 20), range(10, 20, 2)和range(20, 10, -2)。在后续章节中我们将看到这个内置函数的多种用途。

    17.◑使用text9.index()查找词sunset的索引值。你需要将这个词作为一个参数插入到圆括号之间。在尝试和出错的过程中,在完整的句子中找到包含这个词的切片。

    18.◑使用链表加法、set和sorted操作,计算句子sent1...sent8的词汇表。

    19.◑下面两行之间的差异是什么?哪一个的值比较大?其他文本也是同样情况吗?

    >>> sorted(set([w.lower() for w in text1])) >>> sorted([w.lower() for w in set(text1)]

    20.◑w.isupper()和not w.islower()这两个测试之间的差异是什么?

    21.◑编写一个切片表达式提取text2中的最后两个词。

    22.◑找出聊天语料库(text5)中所有4个字母的词。使用频率分布函数(FreqDist),以频率从高到低显示这些词。

    23.◑复习1.4节中的条件循环。使用for和if语句组合循环遍历电影剧本《巨蟒和圣杯》(text6)中的词,输出所有的大写词,每行输出一个。

    24.◑编写表达式并找出text6中所有符合下列条件的词。结果应该以词链表形式表示:['word1', 'word2', ...]。

      a.以ize结尾。

      b.包含字母z。

      c.包含字母序列pt。

      d.除了首字母外是全部小写字母的词(即titlecase)。

    25.◑定义sent为词链表['she', 'sells', 'sea', 'shells', 'by', 'the', 'sea', 'shore']。编写代码执行以下任务。

      a.输出所有sh开头的单词。

      b.输出所有长度超过4个字符的词。

    26.◑下面的Python代码是做什么的?sum([len(w) for w in text1]),你可以用它来算出一个文本的平均字长吗?

    27.◑定义一个名为vocab_size(text)的函数,以文本作为唯一的参数,返回文本的词汇量。

    28.◑定义一个函数percent(word, text),计算一个给定的词在文本中出现的频率,结果以百分比表示。

    29.◑我们一直在使用集合存储词汇表。试试下面的Python表达式:set(sent3) < set(text1)。尝试在set()中使用不同的参数。它是做什么用的?你能想到一个实际的应用吗?

    最新回复(0)