python自然语言处理 第一章答案

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

12/4

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

26**100

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

['Monty','Python'] * 20
['Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python', 'Monty', 'Python']

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

len(text1)
len(set(text1))

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

text2.dispersion_plot(['Elinor','Edward','Willoughby','Marianne'])

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

[i for i, w in enumerate(sent3) if w=='the']

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

sorted([w for w in set(text5) if w.startswith('b')])

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

def solution(keyword, text):
    pun = [i for i, j in enumerate(text) if j == '.' or j == '?' or j == '!']
    sunset = [i for i, j in enumerate(text) if j == keyword]
    ans = []
    flag = 0
    for i in range(len(sunset)):
        j = flag
        while j < len(pun):
            if sunset[i] < pun[j] and pun[j - 1] < sunset[i]:
                ans.append([pun[j - 1] + 1, pun[j] + 1])
                flag = j + 1
                break
            j += 1
    # print ans
    for i in range(len(ans)):
        print ('start from %d to end in %d' % (ans[i][0], ans[i][1]))
        print (' '.join(text[ans[i][0]: ans[i][1]]))
 
solution('sunset',text9)

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

text5_freq = nltk.FreqDist(w for w in text5 if len(w)==4)
print(sorted(text5_freq, key=lambda x:text5_freq[x], reverse=True))

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

扫描二维码关注公众号,回复: 6731942 查看本文章
#a.ize结尾
text = [w for w in text6 if w.endswith('ize')]
#b.包含字母z
text = [w for w in text6 if 'z' in w]
#c.包含序列pt
text = [w for w in text6 if 'pt' in w]
#d.除了首字母外是全部小写字母的词(即titlecase)。
[w for w in text6 if w.istitle()]

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

def vocab_size(text):
    return len(set(w.lower() for w in text if w.isalpha()))
vocab_size(text1)

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

def percent(word,text):
    print("%s" % (nltk.FreqDist(text).freq(word)*100) ,"%")
    return
percent('the',brown.sents(categories='news')[1])

猜你喜欢

转载自blog.csdn.net/weixin_42307828/article/details/88746285