Skip to content

Instantly share code, notes, and snippets.

@hisnipes
Created September 7, 2014 07:22
Show Gist options
  • Save hisnipes/948bf33ca3fd2feb4c68 to your computer and use it in GitHub Desktop.
Save hisnipes/948bf33ca3fd2feb4c68 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"worksheets": [
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "#Introduction\n\n(Be sure to start this notebook with the command \"ipython notebook --pylab inline\".)\n\nSection 1.1 of the NLTK book describes some pre-loaded books and pre-defined functions that come with them. Section 1.2 reviews fundamental concepts abßout python lists and strings -- if you need to brush up on these concepts, then study this subsection carefully. Be sure you know the difference between a *set* and a *list* and that you can work easily with python slices.\n\nThe part that I am most interested in having you focus on is Section 1.3, which introduces NLTK's frequency distribution data structure. You need to have the books loaded and accessible from section 1.1 for this part to work.\n\n##NLTK's Frequency Distribution Object\n\nThis data structure makes it easy to tally up frequencies across words and other items, and incorporate them into list comprehensions (and later we'll see the conditional frequency distribution as well).\n\nThe code below counts up all of the words in *Monty Python and the Holy Grail* (text6 in the nltk.book collection) and the final line shows the top 50 most frequent."
},
{
"metadata": {},
"cell_type": "code",
"input": "import nltk\nfrom nltk.book import * # loads in pre-defined texts\nmp_freqdist = FreqDist(text6) # compute the frequency distribution\nmp_freqdist.items()[:50] # show the top 50 (word, frequency) pairs",
"prompt_number": 1,
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "*** Introductory Examples for the NLTK Book ***\nLoading text1, ..., text9 and sent1, ..., sent9\nType the name of the text or sentence to view it.\nType: 'texts()' or 'sents()' to list the materials.\ntext1:"
},
{
"output_type": "stream",
"stream": "stdout",
"text": " Moby Dick by Herman Melville 1851\ntext2:"
},
{
"output_type": "stream",
"stream": "stdout",
"text": " Sense and Sensibility by Jane Austen 1811\ntext3:"
},
{
"output_type": "stream",
"stream": "stdout",
"text": " The Book of Genesis\ntext4:"
},
{
"output_type": "stream",
"stream": "stdout",
"text": " Inaugural Address Corpus\ntext5:"
},
{
"output_type": "stream",
"stream": "stdout",
"text": " Chat Corpus\ntext6: Monty Python and the Holy Grail\ntext7:"
},
{
"output_type": "stream",
"stream": "stdout",
"text": " Wall Street Journal\ntext8: Personals Corpus\ntext9:"
},
{
"output_type": "stream",
"stream": "stdout",
"text": " The Man Who Was Thursday by G . K . Chesterton 1908\n"
},
{
"output_type": "pyout",
"prompt_number": 1,
"metadata": {},
"text": "[(':', 1197),\n ('.', 816),\n ('!', 801),\n (',', 731),\n (\"'\", 421),\n ('[', 319),\n (']', 312),\n ('the', 299),\n ('I', 255),\n ('ARTHUR', 225),\n ('?', 207),\n ('you', 204),\n ('a', 188),\n ('of', 158),\n ('--', 148),\n ('to', 144),\n ('s', 141),\n ('and', 135),\n ('#', 127),\n ('...', 118),\n ('Oh', 110),\n ('it', 107),\n ('is', 106),\n ('-', 88),\n ('in', 86),\n ('that', 84),\n ('t', 77),\n ('1', 76),\n ('LAUNCELOT', 76),\n ('No', 76),\n ('your', 75),\n ('not', 70),\n ('GALAHAD', 69),\n ('KNIGHT', 68),\n ('What', 65),\n ('FATHER', 63),\n ('we', 62),\n ('BEDEVERE', 61),\n ('You', 61),\n ('We', 60),\n ('this', 59),\n ('no', 55),\n ('HEAD', 54),\n ('Well', 54),\n ('GUARD', 53),\n ('have', 53),\n ('Sir', 52),\n ('are', 52),\n ('A', 50),\n ('And', 50)]"
}
],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "markdown",
"source": "**Task 1** Wow, those are some weird results. It might make some sense to look at the actual text itself. In the line below, write a line of code that pulls out the first 500 words of the text and shows them to you (hint: the text object is simply a list of strings)."
},
{
"metadata": {},
"cell_type": "code",
"input": "first500 = [word for word in text6[:500]]\nfirst500",
"prompt_number": 2,
"outputs": [
{
"output_type": "pyout",
"prompt_number": 2,
"metadata": {},
"text": "['SCENE',\n '1',\n ':',\n '[',\n 'wind',\n ']',\n '[',\n 'clop',\n 'clop',\n 'clop',\n ']',\n 'KING',\n 'ARTHUR',\n ':',\n 'Whoa',\n 'there',\n '!',\n '[',\n 'clop',\n 'clop',\n 'clop',\n ']',\n 'SOLDIER',\n '#',\n '1',\n ':',\n 'Halt',\n '!',\n 'Who',\n 'goes',\n 'there',\n '?',\n 'ARTHUR',\n ':',\n 'It',\n 'is',\n 'I',\n ',',\n 'Arthur',\n ',',\n 'son',\n 'of',\n 'Uther',\n 'Pendragon',\n ',',\n 'from',\n 'the',\n 'castle',\n 'of',\n 'Camelot',\n '.',\n 'King',\n 'of',\n 'the',\n 'Britons',\n ',',\n 'defeator',\n 'of',\n 'the',\n 'Saxons',\n ',',\n 'sovereign',\n 'of',\n 'all',\n 'England',\n '!',\n 'SOLDIER',\n '#',\n '1',\n ':',\n 'Pull',\n 'the',\n 'other',\n 'one',\n '!',\n 'ARTHUR',\n ':',\n 'I',\n 'am',\n ',',\n '...',\n 'and',\n 'this',\n 'is',\n 'my',\n 'trusty',\n 'servant',\n 'Patsy',\n '.',\n 'We',\n 'have',\n 'ridden',\n 'the',\n 'length',\n 'and',\n 'breadth',\n 'of',\n 'the',\n 'land',\n 'in',\n 'search',\n 'of',\n 'knights',\n 'who',\n 'will',\n 'join',\n 'me',\n 'in',\n 'my',\n 'court',\n 'at',\n 'Camelot',\n '.',\n 'I',\n 'must',\n 'speak',\n 'with',\n 'your',\n 'lord',\n 'and',\n 'master',\n '.',\n 'SOLDIER',\n '#',\n '1',\n ':',\n 'What',\n '?',\n 'Ridden',\n 'on',\n 'a',\n 'horse',\n '?',\n 'ARTHUR',\n ':',\n 'Yes',\n '!',\n 'SOLDIER',\n '#',\n '1',\n ':',\n 'You',\n \"'\",\n 're',\n 'using',\n 'coconuts',\n '!',\n 'ARTHUR',\n ':',\n 'What',\n '?',\n 'SOLDIER',\n '#',\n '1',\n ':',\n 'You',\n \"'\",\n 've',\n 'got',\n 'two',\n 'empty',\n 'halves',\n 'of',\n 'coconut',\n 'and',\n 'you',\n \"'\",\n 're',\n 'bangin',\n \"'\",\n \"'\",\n 'em',\n 'together',\n '.',\n 'ARTHUR',\n ':',\n 'So',\n '?',\n 'We',\n 'have',\n 'ridden',\n 'since',\n 'the',\n 'snows',\n 'of',\n 'winter',\n 'covered',\n 'this',\n 'land',\n ',',\n 'through',\n 'the',\n 'kingdom',\n 'of',\n 'Mercea',\n ',',\n 'through',\n '--',\n 'SOLDIER',\n '#',\n '1',\n ':',\n 'Where',\n \"'\",\n 'd',\n 'you',\n 'get',\n 'the',\n 'coconuts',\n '?',\n 'ARTHUR',\n ':',\n 'We',\n 'found',\n 'them',\n '.',\n 'SOLDIER',\n '#',\n '1',\n ':',\n 'Found',\n 'them',\n '?',\n 'In',\n 'Mercea',\n '?',\n 'The',\n 'coconut',\n \"'\",\n 's',\n 'tropical',\n '!',\n 'ARTHUR',\n ':',\n 'What',\n 'do',\n 'you',\n 'mean',\n '?',\n 'SOLDIER',\n '#',\n '1',\n ':',\n 'Well',\n ',',\n 'this',\n 'is',\n 'a',\n 'temperate',\n 'zone',\n '.',\n 'ARTHUR',\n ':',\n 'The',\n 'swallow',\n 'may',\n 'fly',\n 'south',\n 'with',\n 'the',\n 'sun',\n 'or',\n 'the',\n 'house',\n 'martin',\n 'or',\n 'the',\n 'plover',\n 'may',\n 'seek',\n 'warmer',\n 'climes',\n 'in',\n 'winter',\n ',',\n 'yet',\n 'these',\n 'are',\n 'not',\n 'strangers',\n 'to',\n 'our',\n 'land',\n '?',\n 'SOLDIER',\n '#',\n '1',\n ':',\n 'Are',\n 'you',\n 'suggesting',\n 'coconuts',\n 'migrate',\n '?',\n 'ARTHUR',\n ':',\n 'Not',\n 'at',\n 'all',\n '.',\n 'They',\n 'could',\n 'be',\n 'carried',\n '.',\n 'SOLDIER',\n '#',\n '1',\n ':',\n 'What',\n '?',\n 'A',\n 'swallow',\n 'carrying',\n 'a',\n 'coconut',\n '?',\n 'ARTHUR',\n ':',\n 'It',\n 'could',\n 'grip',\n 'it',\n 'by',\n 'the',\n 'husk',\n '!',\n 'SOLDIER',\n '#',\n '1',\n ':',\n 'It',\n \"'\",\n 's',\n 'not',\n 'a',\n 'question',\n 'of',\n 'where',\n 'he',\n 'grips',\n 'it',\n '!',\n 'It',\n \"'\",\n 's',\n 'a',\n 'simple',\n 'question',\n 'of',\n 'weight',\n 'ratios',\n '!',\n 'A',\n 'five',\n 'ounce',\n 'bird',\n 'could',\n 'not',\n 'carry',\n 'a',\n 'one',\n 'pound',\n 'coconut',\n '.',\n 'ARTHUR',\n ':',\n 'Well',\n ',',\n 'it',\n 'doesn',\n \"'\",\n 't',\n 'matter',\n '.',\n 'Will',\n 'you',\n 'go',\n 'and',\n 'tell',\n 'your',\n 'master',\n 'that',\n 'Arthur',\n 'from',\n 'the',\n 'Court',\n 'of',\n 'Camelot',\n 'is',\n 'here',\n '.',\n 'SOLDIER',\n '#',\n '1',\n ':',\n 'Listen',\n '.',\n 'In',\n 'order',\n 'to',\n 'maintain',\n 'air',\n '-',\n 'speed',\n 'velocity',\n ',',\n 'a',\n 'swallow',\n 'needs',\n 'to',\n 'beat',\n 'its',\n 'wings',\n 'forty',\n '-',\n 'three',\n 'times',\n 'every',\n 'second',\n ',',\n 'right',\n '?',\n 'ARTHUR',\n ':',\n 'Please',\n '!',\n 'SOLDIER',\n '#',\n '1',\n ':',\n 'Am',\n 'I',\n 'right',\n '?',\n 'ARTHUR',\n ':',\n 'I',\n \"'\",\n 'm',\n 'not',\n 'interested',\n '!',\n 'SOLDIER',\n '#',\n '2',\n ':',\n 'It',\n 'could',\n 'be',\n 'carried',\n 'by',\n 'an',\n 'African',\n 'swallow',\n '!',\n 'SOLDIER',\n '#',\n '1',\n ':',\n 'Oh',\n ',',\n 'yeah',\n ',',\n 'an',\n 'African',\n 'swallow',\n 'maybe',\n ',',\n 'but',\n 'not',\n 'a',\n 'European',\n 'swallow',\n '.',\n 'That',\n \"'\",\n 's',\n 'my',\n 'point',\n '.',\n 'SOLDIER',\n '#',\n '2',\n ':',\n 'Oh',\n ',',\n 'yeah',\n ',',\n 'I',\n 'agree',\n 'with',\n 'that',\n '.',\n 'ARTHUR',\n ':',\n 'Will',\n 'you',\n 'ask',\n 'your']"
}
],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "markdown",
"source": "**Task 2** Now that you've looked at the text, what are two reasons for these strange results?\n* Answer 1: The code does not differentiate punctuation or numbers from words.\n* Answer 2: For contractions, the code sees the part of the word before the apostrophe as one word, the apostrophe as the second word, and the letters after the apostrophe as the third word. So for one contraction, that's three different words counted.\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "**Task 3** Address one of the problems by modifying the text of Monty Python and rerunning the frequency distribution calculation. In the box below write your code to modify the text:"
},
{
"metadata": {},
"cell_type": "code",
"input": "first500 = [word for word in text6[:500] if word not in('!','.',',',':','?','#','[',']',\"'\",'--','...','-')]\nmp_freqdist = FreqDist(first500)",
"prompt_number": 3,
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "markdown",
"source": "**Task 4** In the box below, show the output after applying this version of the text to a FreqDist."
},
{
"metadata": {},
"cell_type": "code",
"input": "mp_freqdist.items()[:50]",
"prompt_number": 4,
"outputs": [
{
"output_type": "pyout",
"prompt_number": 4,
"metadata": {},
"text": "[('SOLDIER', 16),\n ('1', 15),\n ('ARTHUR', 15),\n ('the', 14),\n ('of', 13),\n ('a', 8),\n ('I', 6),\n ('clop', 6),\n ('swallow', 6),\n ('you', 6),\n ('It', 5),\n ('and', 5),\n ('not', 5),\n ('What', 4),\n ('coconut', 4),\n ('could', 4),\n ('is', 4),\n ('s', 4),\n ('Camelot', 3),\n ('We', 3),\n ('coconuts', 3),\n ('in', 3),\n ('it', 3),\n ('land', 3),\n ('my', 3),\n ('this', 3),\n ('to', 3),\n ('with', 3),\n ('your', 3),\n ('2', 2),\n ('A', 2),\n ('African', 2),\n ('Arthur', 2),\n ('In', 2),\n ('Mercea', 2),\n ('Oh', 2),\n ('The', 2),\n ('Well', 2),\n ('Will', 2),\n ('You', 2),\n ('all', 2),\n ('an', 2),\n ('at', 2),\n ('be', 2),\n ('by', 2),\n ('carried', 2),\n ('from', 2),\n ('have', 2),\n ('master', 2),\n ('may', 2)]"
}
],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "markdown",
"source": "**Task 5** How if at all has the output changed?\n* Answer: The list now does not contain any punctuation marks. It's more in line with just displaying words, though it doesn't solve the issue of the letters coming after the apostrophes."
},
{
"metadata": {},
"cell_type": "markdown",
"source": "**Task 6** Following the example from the book, show a cumulative frequency plot for the words in Monty Python as newly computed, in the box below."
},
{
"metadata": {},
"cell_type": "code",
"input": "mp_freqdist.plot(50, cumulative=True)",
"prompt_number": 5,
"outputs": [
{
"output_type": "display_data",
"metadata": {},
"png": "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\n",
"text": "<matplotlib.figure.Figure at 0x10c36cfd0>"
}
],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "markdown",
"source": "**Task 7** In the box below, write a list comprehension that users the FreqDist you computed above to find all words in *Monty Python* that are longer than 5 characters long and occur at least 5 times (hint: the text shows how to do a variation of this). \nShow the output sorted in alphabetical order."
},
{
"metadata": {},
"cell_type": "code",
"input": "long_words = sorted([word.lower() for word in mp_freqdist if len(word) > 5 and mp_freqdist[word] >= 5])\nlong_words",
"prompt_number": 6,
"outputs": [
{
"output_type": "pyout",
"prompt_number": 6,
"metadata": {},
"text": "['arthur', 'soldier', 'swallow']"
}
],
"language": "python",
"trusted": true,
"collapsed": false
}
],
"metadata": {}
}
],
"metadata": {
"name": "",
"signature": "sha256:2222887c602c2874cddb0b69033523e0ed933604ab673258ed94fa56e3e075cf"
},
"nbformat": 3
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment