天天看點

《Python自然語言處理》——1.8 練習

本節書摘來異步社群《python自然語言處理》一書中的第1章,第1.8節,作者:【美】steven bird , ewan klein , edward loper,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

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"

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.◑下面兩行之間的差異是什麼?哪一個的值比較大?其他文本也是同樣情況嗎?

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()中使用不同的參數。它是做什麼用的?你能想到一個實際的應用嗎?