{ "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# Adding Context to Word Frequency Counts" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "While the raw data from word frequency counts is compelling, it does little but describe quantitative features of the corpus. In order to determine if the statistics are indicative of a trend in word usage we must add value to the word frequencies. In this exercise we will produce a ratio of the occurences of `privacy` to the number of words in the entire corpus. Then we will compare the occurences of `privacy` to the indivudal number of transcripts within the corpus. This data will allow us identify trends that are worthy of further investigation.\n", "\n", "Finally, we will determine the number of words in the corpus as a whole and investigate the 50 most common words by creating a frequency plot. The last statistic we will generate is the type/token ratio, which is a measure of the variability of the words used in the corpus." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Part 1: Determining a ratio" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To add context to our word frequency counts, we can work with the corpus in a number of different ways. One of the easiest is to compare the number of words in the entire corpus to the frequency of the word we are investigating." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's begin by calling on all the functions we will need. Remember that the first few sentences are calling on pre-installed Python modules, and anything with a `def` at the beginning is a custom function built specifically for these exercises. The text in red describes the purpose of the function." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# This is where the modules are imported\n", "\n", "import nltk\n", "from os import listdir\n", "from os.path import splitext\n", "from os.path import basename\n", "from tabulate import tabulate\n", "\n", "# These functions iterate through the directory and create a list of filenames\n", "\n", "def list_textfiles(directory):\n", " \"Return a list of filenames ending in '.txt'\"\n", " textfiles = []\n", " for filename in listdir(directory):\n", " if filename.endswith(\".txt\"):\n", " textfiles.append(directory + \"/\" + filename)\n", " return textfiles\n", "\n", "\n", "def remove_ext(filename):\n", " \"Removes the file extension, such as .txt\"\n", " name, extension = splitext(filename)\n", " return name\n", "\n", "\n", "def remove_dir(filepath):\n", " \"Removes the path from the file name\"\n", " name = basename(filepath)\n", " return name\n", "\n", "\n", "def get_filename(filepath):\n", " \"Removes the path and file extension from the file name\"\n", " filename = remove_ext(filepath)\n", " name = remove_dir(filename)\n", " return name\n", "\n", "# These functions work on the content of the files\n", "\n", "def read_file(filename):\n", " \"Read the contents of FILENAME and return as a string.\"\n", " infile = open(filename)\n", " contents = infile.read()\n", " infile.close()\n", " return contents\n", "\n", "def count_in_list(item_to_count, list_to_search):\n", " \"Counts the number of a specified word within a list of words\"\n", " number_of_hits = 0\n", " for item in list_to_search:\n", " if item == item_to_count:\n", " number_of_hits += 1\n", " return number_of_hits" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the next piece of code we will cycle through our directory again: first assigning readable names to our files and storing them as a list in the variable `filenames`; then we will remove the case and punctuation from the text, split the words into a list of tokens, and assign the words in each file to a list in the variable `corpus`." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "filenames = []\n", "for files in list_textfiles('../Counting Word Frequencies/data'):\n", " files = get_filename(files)\n", " filenames.append(files)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "corpus = []\n", "for filename in list_textfiles('../Counting Word Frequencies/data'):\n", " text = read_file(filename)\n", " words = text.split()\n", " clean = [w.lower() for w in words if w.isalpha()]\n", " corpus.append(clean)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we recreate our list from the last exercise, counting the instances of the word `privacy` in each file." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Instances of the word 'privacy' in 2006 : 356\n", "Instances of the word 'privacy' in 2007 : 258\n", "Instances of the word 'privacy' in 2008 : 252\n", "Instances of the word 'privacy' in 2009 : 612\n", "Instances of the word 'privacy' in 2010 : 533\n", "Instances of the word 'privacy' in 2011 : 624\n", "Instances of the word 'privacy' in 2012 : 552\n", "Instances of the word 'privacy' in 2013 : 918\n", "Instances of the word 'privacy' in 2014 : 1567\n", "Instances of the word 'privacy' in 2015 : 806\n", "Instances of the word 'privacy' in 39-1 : 538\n", "Instances of the word 'privacy' in 39-2 : 308\n", "Instances of the word 'privacy' in 39 : 846\n", "Instances of the word 'privacy' in 40-1 : 20\n", "Instances of the word 'privacy' in 40-2 : 603\n", "Instances of the word 'privacy' in 40-3 : 2022\n", "Instances of the word 'privacy' in 40 : 1643\n", "Instances of the word 'privacy' in 41-1 : 1287\n", "Instances of the word 'privacy' in 41-2 : 885\n", "Instances of the word 'privacy' in 41 : 3989\n" ] } ], "source": [ "for words, names in zip(corpus, filenames):\n", " print(\"Instances of the word \\'privacy\\' in\", names, \":\", count_in_list(\"privacy\", words))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we use the `len` function to count the total number of words in each file." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "There are 5186114 words in 2006\n", "There are 6010963 words in 2007\n", "There are 4828789 words in 2008\n", "There are 6754622 words in 2009\n", "There are 6262656 words in 2010\n", "There are 5403480 words in 2011\n", "There are 7126994 words in 2012\n", "There are 6177922 words in 2013\n", "There are 7036280 words in 2014\n", "There are 3989031 words in 2015\n", "There are 9335283 words in 39-1\n", "There are 6173272 words in 39-2\n", "There are 15508555 words in 39\n", "There are 517311 words in 40-1\n", "There are 6764265 words in 40-2\n", "There are 15747242 words in 40-3\n", "There are 15145554 words in 40\n", "There are 15278566 words in 41-1\n", "There are 4967345 words in 41-2\n", "There are 28122742 words in 41\n" ] } ], "source": [ "for files, names in zip(corpus, filenames):\n", " print(\"There are\", len(files), \"words in\", names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can calculate the ratio of the word `privacy` to the total number of words in the file. To accomplish this we simply divide the two numbers." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ratio of instances of privacy to total number of words in the corpus:\n", "0.000069 : 2006\n", "0.000043 : 2007\n", "0.000052 : 2008\n", "0.000091 : 2009\n", "0.000085 : 2010\n", "0.000115 : 2011\n", "0.000077 : 2012\n", "0.000149 : 2013\n", "0.000223 : 2014\n", "0.000202 : 2015\n", "0.000058 : 39-1\n", "0.000050 : 39-2\n", "0.000055 : 39\n", "0.000039 : 40-1\n", "0.000089 : 40-2\n", "0.000128 : 40-3\n", "0.000108 : 40\n", "0.000084 : 41-1\n", "0.000178 : 41-2\n", "0.000142 : 41\n" ] } ], "source": [ "print(\"Ratio of instances of privacy to total number of words in the corpus:\")\n", "for words, names in zip(corpus, filenames):\n", " print('{:.6f}'.format(float(count_in_list(\"privacy\", words))/(float(len(words)))),\":\",names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now our descriptive statistics concerning word frequencies have added value. We can see that there has indeed been a steady increase in the frequency of the use of the word `privacy` in our corpus. When we investigate the yearly usage, we can see that the frequency almost doubled between 2008 and 2009, as well as dramatic increase between 2012 and 2014. This is also apparent in the difference between the 39th and the 40th sittings of Parliament. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "------" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's package all of the data together so it can be displayed as a table or exported to a `CSV` file. First we will write our values to a list: `raw` contains the raw frequencies, and `ratio` contains the ratios. Then we will create a tuple that contains the `filename` variable and includes the corresponding `raw` and `ratio` variables. Here we'll generate the ratio as a percentage." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "raw = []\n", "for i in range(len(corpus)):\n", " raw.append(count_in_list(\"privacy\", corpus[i]))\n", "\n", "ratio = [] \n", "for i in range(len(corpus)):\n", " ratio.append('{:.3f}'.format((float(count_in_list(\"privacy\", corpus[i]))/(float(len(corpus[i])))) * 100))\n", " \n", "table = zip(filenames, raw, ratio)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the `tabulate` module, we will display our tuple as a table." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Filename Raw Ratio %\n", "---------- ----- ---------\n", "2006 356 0.007\n", "2007 258 0.004\n", "2008 252 0.005\n", "2009 612 0.009\n", "2010 533 0.009\n", "2011 624 0.012\n", "2012 552 0.008\n", "2013 918 0.015\n", "2014 1567 0.022\n", "2015 806 0.020\n", "39-1 538 0.006\n", "39-2 308 0.005\n", "39 846 0.005\n", "40-1 20 0.004\n", "40-2 603 0.009\n", "40-3 2022 0.013\n", "40 1643 0.011\n", "41-1 1287 0.008\n", "41-2 885 0.018\n", "41 3989 0.014\n" ] } ], "source": [ "print(tabulate(table, headers = [\"Filename\", \"Raw\", \"Ratio %\"], floatfmt=\".3f\", numalign=\"left\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And finally, we will write the values to a `CSV` file called `privacyFreqTable`." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import csv\n", "with open('privacyFreqTable.csv','wb') as f:\n", " w = csv.writer(f)\n", " w.writerows(table)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "-----------" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Part 2: Counting the number of transcripts" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Another way we can provide context is to process the corpus in a different way. Instead of splitting the data by word, we will split it in larger chunks pertaining to each individual transcript. Each transcript corresponds to a unique debate but starts with exactly the same formatting, making the files easy to split. The text below shows the beginning of a transcript. The first words are `OFFICIAL REPORT (HANSARD)`." ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we will pass the files to another variable, called `corpus_1`. Instead of removing capitalization and punctuation, all we will do is split the files at every occurence of `OFFICIAL REPORT (HANSARD)`." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "corpus_1 = []\n", "for filename in list_textfiles('../Counting Word Frequencies/data'):\n", " text = read_file(filename)\n", " words = text.split(\" OFFICIAL REPORT (HANSARD)\")\n", " corpus_1.append(words)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we can count the number of files in each dataset. This is also an important activity for error-checking. While it is easy to trust the numerical output of the code when it works sucessfully, we must always be sure to check that the code is actually performing in exactly the way we want it to. In this case, these numbers can be cross-referenced with the original XML data, where each transcript exists as its own file. A quick check of the directory shows that the numbers are correct." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "There are 97 files in 2006\n", "There are 117 files in 2007\n", "There are 93 files in 2008\n", "There are 128 files in 2009\n", "There are 119 files in 2010\n", "There are 99 files in 2011\n", "There are 131 files in 2012\n", "There are 111 files in 2013\n", "There are 127 files in 2014\n", "There are 74 files in 2015\n", "There are 177 files in 39-1\n", "There are 119 files in 39-2\n", "There are 294 files in 39\n", "There are 14 files in 40-1\n", "There are 129 files in 40-2\n", "There are 299 files in 40-3\n", "There are 290 files in 40\n", "There are 276 files in 41-1\n", "There are 95 files in 41-2\n", "There are 512 files in 41\n" ] } ], "source": [ "for files, names in zip(corpus_1, filenames):\n", " print(\"There are\", len(files), \"files in\", names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is a screenshot of some of the raw data. We can see that there are 97 files in 2006, 117 in 2007 and 93 in 2008. The rest of the data is also correct. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can compare the amount of occurences of `privacy` with the number of debates occuring in each dataset." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "In 2006 there were 97 debates. The word privacy was said 356 times.\n", "In 2007 there were 117 debates. The word privacy was said 258 times.\n", "In 2008 there were 93 debates. The word privacy was said 252 times.\n", "In 2009 there were 128 debates. The word privacy was said 612 times.\n", "In 2010 there were 119 debates. The word privacy was said 533 times.\n", "In 2011 there were 99 debates. The word privacy was said 624 times.\n", "In 2012 there were 131 debates. The word privacy was said 552 times.\n", "In 2013 there were 111 debates. The word privacy was said 918 times.\n", "In 2014 there were 127 debates. The word privacy was said 1567 times.\n", "In 2015 there were 74 debates. The word privacy was said 806 times.\n", "In 39-1 there were 177 debates. The word privacy was said 538 times.\n", "In 39-2 there were 119 debates. The word privacy was said 308 times.\n", "In 39 there were 294 debates. The word privacy was said 846 times.\n", "In 40-1 there were 14 debates. The word privacy was said 20 times.\n", "In 40-2 there were 129 debates. The word privacy was said 603 times.\n", "In 40-3 there were 299 debates. The word privacy was said 2022 times.\n", "In 40 there were 290 debates. The word privacy was said 1643 times.\n", "In 41-1 there were 276 debates. The word privacy was said 1287 times.\n", "In 41-2 there were 95 debates. The word privacy was said 885 times.\n", "In 41 there were 512 debates. The word privacy was said 3989 times.\n" ] } ], "source": [ "for names, files, words in zip(filenames, corpus_1, corpus):\n", " print(\"In\", names, \"there were\", len(files), \"debates. The word privacy was said\", \\\n", " count_in_list('privacy', words), \"times.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These numbers confirm our earlier results. There is a clear indication that the usage of the term `privacy` is increasing, with major changes occuring between the years 2008 and 2009, as well as between 2012 and 2014. This trend is also clearly obervable between the 39th and 40th sittings of Parliament. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "------" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Part 3: Looking at the corpus as a whole" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "While chunking the corpus into pieces can help us understand the distribution or dispersion of words throughout the corpus, it's valuable to look at the corpus as a whole. Here we will create a third corpus variable `corpus_3` that only contains the files named `39`, `40`, and `41`. Note the new directory named `data2`. We only need these files; if we used all of the files we would literally duplicate the results." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [], "source": [ "corpus_3 = []\n", "for filename in list_textfiles('../Counting Word Frequencies/data2'):\n", " text = read_file(filename)\n", " words = text.split()\n", " clean = [w.lower() for w in words if w.isalpha()]\n", " corpus_3.append(clean)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we will combine the three lists into one large list and assign it to the variable `large`." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ "large = list(sum(corpus_3, []))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can use the same calculations to determine the total number of occurences of `privacy`, as well as the total number of words in the corpus. We can also calculate the total ratio of `privacy` to the total number of words." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "There are 6478 occurences of the word 'privacy' and a total of 58776851 words.\n", "The ratio of instances of privacy to total number of words in the corpus is: 0.000110 or 0.011 %\n" ] } ], "source": [ "print(\"There are\", count_in_list('privacy', large), \"occurences of the word 'privacy' and a total of\", \\\n", "len(large), \"words.\")\n", "\n", "print(\"The ratio of instances of privacy to total number of words in the corpus is:\", \\\n", "'{:.6f}'.format(float(count_in_list(\"privacy\", large))/(float(len(large)))), \"or\", \\\n", "'{:.3f}'.format((float(count_in_list(\"privacy\", large))/(float(len(large)))) * 100),\"%\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Another type of word frequency statistic we can generate is a type/token ratio. The types are the total number of unique words in the corpus, while the tokens are the total number of words. The type/token ratio is used to determine the variability of the language used in the text. The higher the ratio, the more complex the text will be. First we'll determine the total number of types, using Python's `set` function." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "There are 71415 unique words in the Hansard corpus.\n" ] } ], "source": [ "print(\"There are\", (len(set(large))), \"unique words in the Hansard corpus.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can divide the types by the tokens to determine the ratio." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The type/token ratio is: 0.001215 or 0.122 %\n" ] } ], "source": [ "print(\"The type/token ratio is:\", ('{:.6f}'.format(len(set(large))/(float(len(large))))), \"or\",\\\n", "'{:.3f}'.format(len(set(large))/(float(len(large)))*100),\"%\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we will use the `NLTK` module to create a graph that shows the top 50 most frequent words in the Hansard corpus. Although `privacy` will not appear in the graph, it's always interesting to see what types of words are most common, and what their distribution is. `NLTK` will be introduced with more detail in the next section featuring concordance outputs, but here all we need to know is that we assign our variable `large` to the `NLTK` function `Text` in order to work with the corpus data. From there we can determine the frequency distribution for the whole text." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [], "source": [ "text = nltk.Text(large)\n", "fd = nltk.FreqDist(text)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we will assign the frequency distribution to the `plot` function to produce a graph. While it's a little hard to read, the most commonly used word in the Hansard corpus is `the`, with a frequency just over 400,000 occurences. The next most frequent word is `to`, which only has a frequency of about 225,000 occurences, almost half of the first most common word. The first 10 most frequent words appear with a much greater frequency than any of the other words in the corpus." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "image/png": "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\na7OuL01bWdeXpq1K05emrazrK4etYpTV4ZjZZ8BXzWwPYDdglKR9gXHAg2b2BeBh4EIASUOBo4Gd\ngYOBGyXlhmUTgbFmNgQYIml0lI8FFpvZYOA64MqoqxdwMTAC2BsYn3BsE4Cro676qKMoUuEHeDqO\n4zjNJ7UcjqRNgBnAScDdwP5m9oGkvsAMM9tJ0jjAzGxCbHM/cAnwJvCwmQ2N8jGx/Q8k1QLjzexJ\nSZ2B98xsq+Qxsc3EaOcuSf8E+pjZGkn7AJeY2UEF+my58zN4MLz6KsybB0OGlOssOY7jdHzaLYcj\nqZOkWcD7hAv+S4SL/QcAZvY+sFU8vB/wdqL5O1HWD0im6xdGWaM2ZrYaWCKpdzFdkjYH6sxsTULX\nNut6H57HcRzHaR0FcxdtSbyw7yFpM+ABSQcA+cOqthxmNfGqLTyG/fbbj3HjxlFVVcXixTBo0HA+\n/ngkUN0oflkdvVF9fT3Lli2jf//+a/eT9QsXLqR79+6Njs/Vuz6ayCpdX6nz6/papw+Kf16Vpq8t\nft8zZsygtrYWgKqqKopiZqltwH8C5wJzCaMcgL7A3FgeB1yQOL6WkH9Ze0yUjwEmJo+J5c7Ah4lj\nbkq0uQk4JpY/BDrF8j7A/YX6W1NTYzmOOsoMzH7967BfV1dnhSgmb2ldpelL01bW9aVpq9L0pWkr\n6/rKYSu4lqbX1LLmcCRtAaw0syWSNgYeAC4FDiQk+idIugDoZWbj4qSBO6KT6Qf8BRhsZibpCeBM\n4Gngz8D1ZlYr6XRgFzM7PeZtDjezMXHSwDPAMELo8BlgTzOrl3QXcLeFfM5E4Hkzu6lA/y13fr7/\nffjf/4WJE+G008p2yhzHcTo8xXI45Q6pbQ1MijPNOgFTzOyhmNOZJukUwoSAowHM7CVJ04CXgJXA\n6dbgEX8I3A5UAfeZWW2U3wpMkTQfWEQY2WBmdZJ+SnA0BlxqZrlx4zhgaqyfFXWUxGepOY7jtI5y\nT4t+wcyGmdkeZra7mf08yheb2dfN7AtmdmDCEWBmV5jZjma2s5lNT8ifNbNdzWywmZ2VkH9mZkdH\n+T5mtiBRd3uUDzGzyQn5G2a2d5QfY2YrC/U/9z8caDppoKPOuc+6vjRtZV1fmrYqTV+atrKurxy2\niuFPGmgmhR7g6TiO4zQff5ZaCZI5nKlT4dhj4aijYNq0du6Y4zhOhvFnqbUSH+E4juO0Dnc4JfAc\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "fd.plot(50,cumulative=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Another feature of the `NLTK` frequency distribution function is the generation of a list of hapaxes. These are words that appear only once in the entire corpus. While not meaningful for this study, it's an interesting way to explore the data." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "['eeny',\n", " 'subscriptive',\n", " 'barnwell',\n", " 'ejects',\n", " 'dod',\n", " 'haditha',\n", " 'ul',\n", " 'goodhew',\n", " 'salmonids',\n", " 'avening',\n", " 'blanchfield',\n", " 'thenceforward',\n", " 'rothsay',\n", " 'coulomb',\n", " 'rcmps',\n", " 'chrétienne',\n", " 'tiampo',\n", " 'commited',\n", " 'homespun',\n", " 'stringray',\n", " 'kurd',\n", " 'arda',\n", " 'burnishing',\n", " 'premarketing',\n", " 'competences',\n", " 'hanlon',\n", " 'ormstown',\n", " 'mitel',\n", " 'manaye',\n", " 'arrowheads',\n", " 'impôtante',\n", " 'habbib',\n", " 'irreplaceably',\n", " 'wasley',\n", " 'militarize',\n", " 'kulak',\n", " 'egotistic',\n", " 'naden',\n", " 'quirky',\n", " 'naturescape',\n", " 'maybelline',\n", " 'biodome',\n", " 'lasantha',\n", " 'agop',\n", " 'horsing',\n", " 'disarticulation',\n", " 'advertized',\n", " 'mobasher',\n", " 'velocities',\n", " 'strenghtening',\n", " 'secur',\n", " 'grandmaster',\n", " 'ephat',\n", " 'bracton',\n", " 'unabomber',\n", " 'greedily',\n", " 'carlington',\n", " 'nordick',\n", " 'entrapped',\n", " 'ole',\n", " 'moldable',\n", " 'leber',\n", " 'gosinski',\n", " 'brownouts',\n", " 'meteors',\n", " 'roschlau',\n", " 'hpr',\n", " 'tragicomic',\n", " 'subitem',\n", " 'darwinian',\n", " 'nickola',\n", " 'bûcheron',\n", " 'maclennan',\n", " 'dashes',\n", " 'deconfederation',\n", " 'volcano',\n", " 'irrelevancies',\n", " 'cheeks',\n", " 'sewell',\n", " 'mulch',\n", " 'metroworks',\n", " 'bifurcate',\n", " 'misadministering',\n", " 'consorted',\n", " 'consummation',\n", " 'tinting',\n", " 'worshiped',\n", " 'whoppingly',\n", " 'amendeet',\n", " 'walloons',\n", " 'farbus',\n", " 'defencehad',\n", " 'garvin',\n", " 'taiwain',\n", " 'serhiy',\n", " 'misgotten',\n", " 'gowlings',\n", " 'preventtive',\n", " 'emad',\n", " 'ustr',\n", " 'panjwaii',\n", " 'phonographs',\n", " 'snazzy',\n", " 'evenhanded',\n", " 'rosannagh',\n", " 'whcih',\n", " 'besets',\n", " 'lotakow',\n", " 'poinsettias',\n", " 'pagan',\n", " 'gnome',\n", " 'shintah',\n", " 'ckvl',\n", " 'smags',\n", " 'knockwood',\n", " 'manjit',\n", " 'deposes',\n", " 'kubota',\n", " 'bredburn',\n", " 'madrassahs',\n", " 'tunisias',\n", " 'pétrole',\n", " 'suspectible',\n", " 'alexan',\n", " 'fwhla',\n", " 'perspicacious',\n", " 'rghts',\n", " 'acrs',\n", " 'naseem',\n", " 'spool',\n", " 'rayons',\n", " 'montauban',\n", " 'anesthetics',\n", " 'reeking',\n", " 'sealy',\n", " 'reminiscence',\n", " 'estadística',\n", " 'shanah',\n", " 'creba',\n", " 'shakedowns',\n", " 'unpressured',\n", " 'ehr',\n", " 'thems',\n", " 'wellhead',\n", " 'deliriously',\n", " 'sultanate',\n", " 'getafix',\n", " 'guglielmo',\n", " 'motherisk',\n", " 'kamikaze',\n", " 'useable',\n", " 'grattan',\n", " 'pummel',\n", " 'pulps',\n", " 'bahrami',\n", " 'unacquainted',\n", " 'fanshaw',\n", " 'regularizes',\n", " 'iloilo',\n", " 'encouragements',\n", " 'ahr',\n", " 'abdi',\n", " 'reification',\n", " 'reprehensibly',\n", " 'snails',\n", " 'requestor',\n", " 'fjordhas',\n", " 'théàtre',\n", " 'klironomos',\n", " 'dooley',\n", " 'photogenic',\n", " 'asad',\n", " 'volkswagens',\n", " 'mountainoak',\n", " 'blackish',\n", " 'torys',\n", " 'puvirnituq',\n", " 'multiserv',\n", " 'wildernesses',\n", " 'riprap',\n", " 'kororma',\n", " 'fucain',\n", " 'propofol',\n", " 'palaion',\n", " 'gulvinder',\n", " 'kwcs',\n", " 'sedans',\n", " 'fromages',\n", " 'bonspiels',\n", " 'wichita',\n", " 'preceptive',\n", " 'safeness',\n", " 'hazzard',\n", " 'incisiveness',\n", " 'waterflow',\n", " 'thiara',\n", " 'humidifying',\n", " 'soacha',\n", " 'indecently',\n", " 'ecoagricultural',\n", " 'mikaël',\n", " 'teppers',\n", " 'corruptly',\n", " 'ordres',\n", " 'doggpound',\n", " 'bardy',\n", " 'henan',\n", " 'ginsberg',\n", " 'antioxidants',\n", " 'hage',\n", " 'troubadours',\n", " 'sauli',\n", " 'paluck',\n", " 'wesberry',\n", " 'magnates',\n", " 'firmament',\n", " 'skillet',\n", " 'gîte',\n", " 'turr',\n", " 'macos',\n", " 'variabilities',\n", " 'sigma',\n", " 'ovat',\n", " 'souviens',\n", " 'jodhan',\n", " 'intergalactic',\n", " 'vergara',\n", " 'belvédère',\n", " 'queasiness',\n", " 'rephrased',\n", " 'sapin',\n", " 'barbour',\n", " 'docomo',\n", " 'whycocomagh',\n", " 'etag',\n", " 'khavaran',\n", " 'caldéron',\n", " 'upends',\n", " 'muséums',\n", " 'distinguishment',\n", " 'gummy',\n", " 'crouched',\n", " 'wapachee',\n", " 'gordan',\n", " 'quebecer',\n", " 'obelisk',\n", " 'smurfit',\n", " 'tawakkul',\n", " 'breakeven',\n", " 'perde',\n", " 'recharges',\n", " 'suzan',\n", " 'taba',\n", " 'tapp',\n", " 'unruliness',\n", " 'beefsteak',\n", " 'banyan',\n", " 'earthcare',\n", " 'dineen',\n", " 'ctr',\n", " 'alepo',\n", " 'prances',\n", " 'villes',\n", " 'besmirches',\n", " 'kaegi',\n", " 'grightmire',\n", " 'ebert',\n", " 'incrdible',\n", " 'dayna',\n", " 'rowantree',\n", " 'degreed',\n", " 'gainsaying',\n", " 'rppps',\n", " 'foxhound',\n", " 'gangbuster',\n", " 'fujimori',\n", " 'outrider',\n", " 'prozak',\n", " 'tradeoffs',\n", " 'plastunky',\n", " 'plaisir',\n", " 'camcorded',\n", " 'incapacities',\n", " 'pacifier',\n", " 'katsav',\n", " 'balboa',\n", " 'parkhouse',\n", " 'uee',\n", " 'cyanobacterial',\n", " 'ouelette',\n", " 'guarda',\n", " 'shelton',\n", " 'franciscan',\n", " 'decontextualize',\n", " 'mencken',\n", " 'napo',\n", " 'yarrow',\n", " 'overstretching',\n", " 'oppenheimer',\n", " 'tintos',\n", " 'hallux',\n", " 'divia',\n", " 'atacama',\n", " 'refouled',\n", " 'overmuch',\n", " 'thornlea',\n", " 'immunosuppressive',\n", " 'freckle',\n", " 'endeth',\n", " 'chaplin',\n", " 'mortagne',\n", " 'lpperwash',\n", " 'aqpp',\n", " 'zebedee',\n", " 'underpopulated',\n", " 'nickolas',\n", " 'ondina',\n", " 'chambermaid',\n", " 'envahissant',\n", " 'libra',\n", " 'brien',\n", " 'lloydminister',\n", " 'remmelink',\n", " 'scatari',\n", " 'shards',\n", " 'unfertilized',\n", " 'healthpro',\n", " 'rolando',\n", " 'mcfees',\n", " 'constructors',\n", " 'abitibis',\n", " 'enregistré',\n", " 'pinera',\n", " 'captioned',\n", " 'lumbered',\n", " 'thors',\n", " 'polka',\n", " 'zuehlke',\n", " 'unsourced',\n", " 'ryno',\n", " 'hucksters',\n", " 'anabolic',\n", " 'rowan',\n", " 'herzliya',\n", " 'figo',\n", " 'dreg',\n", " 'haydon',\n", " 'wakaw',\n", " 'guignard',\n", " 'raindrops',\n", " 'counterattacks',\n", " 'dupras',\n", " 'frigo',\n", " 'crosbyville',\n", " 'kerrie',\n", " 'rigoureux',\n", " 'cbrt',\n", " 'oem',\n", " 'fxb',\n", " 'abstractly',\n", " 'brochette',\n", " 'hauser',\n", " 'facussé',\n", " 'heraldic',\n", " 'mono',\n", " 'jordanna',\n", " 'mullally',\n", " 'mohamod',\n", " 'pallasite',\n", " 'histochemistry',\n", " 'barnabas',\n", " 'darkroom',\n", " 'kirsch',\n", " 'laszlo',\n", " 'macklem',\n", " 'undercount',\n", " 'sajjan',\n", " 'mahé',\n", " 'clergypersons',\n", " 'conséquences',\n", " 'shelburn',\n", " 'loftiness',\n", " 'mutagenic',\n", " 'lok',\n", " 'livingsocial',\n", " 'ronak',\n", " 'uncorking',\n", " 'theis',\n", " 'andresen',\n", " 'penac',\n", " 'beckton',\n", " 'panes',\n", " 'catchwords',\n", " 'specialness',\n", " 'positional',\n", " 'reraising',\n", " 'puri',\n", " 'atif',\n", " 'precribed',\n", " 'maharashtra',\n", " 'farnworth',\n", " 'mestizo',\n", " 'segueing',\n", " 'diloram',\n", " 'elena',\n", " 'reactivation',\n", " 'pépinière',\n", " 'serenely',\n", " 'wass',\n", " 'fizzling',\n", " 'chromium',\n", " 'cruikshank',\n", " 'snarls',\n", " 'yodelling',\n", " 'metformin',\n", " 'mayeur',\n", " 'inequitous',\n", " 'fragilities',\n", " 'jerking',\n", " 'moyer',\n", " 'tweeter',\n", " 'frst',\n", " 'pollués',\n", " 'tomifobia',\n", " 'transoceanic',\n", " 'raymore',\n", " 'underages',\n", " 'natioanl',\n", " 'heartbreaks',\n", " 'hurtles',\n", " 'sasso',\n", " 'steinbeck',\n", " 'babbar',\n", " 'beehives',\n", " 'mvsun',\n", " 'cattleman',\n", " 'crowbush',\n", " 'interring',\n", " 'fuhrman',\n", " 'appending',\n", " 'declivitous',\n", " 'salaison',\n", " 'kucera',\n", " 'lusted',\n", " 'maavara',\n", " 'qualiporc',\n", " 'ekosti',\n", " 'belch',\n", " 'fia',\n", " 'helibellule',\n", " 'nce',\n", " 'canvasser',\n", " 'mexicana',\n", " 'parlaympic',\n", " 'wilts',\n", " 'dettloff',\n", " 'nabs',\n", " 'cef',\n", " 'fasds',\n", " 'podiatrists',\n", " 'shotokan',\n", " 'fersovitch',\n", " 'sikaran',\n", " 'boylston',\n", " 'bedecked',\n", " 'hwang',\n", " 'plasterer',\n", " 'aequitas',\n", " 'maman',\n", " 'roping',\n", " 'rooyen',\n", " 'irking',\n", " 'decays',\n", " 'crossiron',\n", " 'jany',\n", " 'gowing',\n", " 'guinchard',\n", " 'videocassette',\n", " 'stategies',\n", " 'snhr',\n", " 'yrs',\n", " 'mullins',\n", " 'anklet',\n", " 'regrowing',\n", " 'covidien',\n", " 'mien',\n", " 'iterate',\n", " 'linghu',\n", " 'lelivère',\n", " 'mcmorris',\n", " 'hollyburn',\n", " 'vocalist',\n", " 'thorax',\n", " 'prolix',\n", " 'reportability',\n", " 'fobs',\n", " 'housekeepers',\n", " 'datacom',\n", " 'machismo',\n", " 'mcfarland',\n", " 'mcavoy',\n", " 'biosolid',\n", " 'chuseok',\n", " 'vieth',\n", " 'ecclesia',\n", " 'cetaceans',\n", " 'sabstock',\n", " 'blabbered',\n", " 'thrashers',\n", " 'crapshoot',\n", " 'janz',\n", " 'reminisce',\n", " 'cellules',\n", " 'cupas',\n", " 'jila',\n", " 'squinting',\n", " 'lenti',\n", " 'vildrac',\n", " 'chenard',\n", " 'charlette',\n", " 'brimful',\n", " 'elli',\n", " 'brazeaus',\n", " 'ntt',\n", " 'bushwhacked',\n", " 'crags',\n", " 'photonics',\n", " 'reachability',\n", " 'calver',\n", " 'eldridge',\n", " 'ozonization',\n", " 'listenership',\n", " 'disproportions',\n", " 'vélopousse',\n", " 'muckrake',\n", " 'cautio',\n", " 'mair',\n", " 'disconcerts',\n", " 'estrada',\n", " 'mountaineering',\n", " 'tickles',\n", " 'sdt',\n", " 'dollops',\n", " 'tenir',\n", " 'neoconservative',\n", " 'bhavan',\n", " 'lineman',\n", " 'socreds',\n", " 'boning',\n", " 'yanch',\n", " 'westernized',\n", " 'hydrofracking',\n", " 'burch',\n", " 'choeurs',\n", " 'endorser',\n", " 'traderealize',\n", " 'markale',\n", " 'frémont',\n", " 'arlo',\n", " 'trps',\n", " 'elt',\n", " 'cboc',\n", " 'kiosque',\n", " 'crothers',\n", " 'tozer',\n", " 'lyla',\n", " 'canonize',\n", " 'theobald',\n", " 'samarre',\n", " 'buut',\n", " 'vigneault',\n", " 'nonchalant',\n", " 'bellenden',\n", " 'thoughest',\n", " 'armavia',\n", " 'bogach',\n", " 'erve',\n", " 'shush',\n", " 'demarcate',\n", " 'jackpots',\n", " 'nonunion',\n", " 'coven',\n", " 'pisiquid',\n", " 'bedore',\n", " 'willowbrook',\n", " 'seely',\n", " 'bayside',\n", " 'arouses',\n", " 'schmitz',\n", " 'wabasse',\n", " 'farrell',\n", " 'federico',\n", " 'dressings',\n", " 'expiation',\n", " 'tostrengthen',\n", " 'flessner',\n", " 'whitsuntide',\n", " 'sculpted',\n", " 'heibein',\n", " 'overreaches',\n", " 'frivolity',\n", " 'ramgarhia',\n", " 'girder',\n", " 'ntp',\n", " 'rabiâ',\n", " 'overexuberant',\n", " 'esquiminac',\n", " 'zeppelin',\n", " 'reaffirmations',\n", " 'claudius',\n", " 'interdependencies',\n", " 'amasses',\n", " 'nutashquan',\n", " 'zigzagged',\n", " 'crce',\n", " 'ventricular',\n", " 'microbusiness',\n", " 'freebooters',\n", " 'mccumber',\n", " 'weevils',\n", " 'bénédict',\n", " 'cardiopulmonary',\n", " 'nodto',\n", " 'warmers',\n", " 'sonde',\n", " 'kalinin',\n", " 'nefariousness',\n", " 'gunfight',\n", " 'sensibleness',\n", " 'aztec',\n", " 'bridesmaid',\n", " 'mortars',\n", " 'nathalia',\n", " 'mbc',\n", " 'ceuda',\n", " 'scruffy',\n", " 'textures',\n", " 'callowest',\n", " 'allegory',\n", " 'cultivar',\n", " 'guèvrement',\n", " 'jörg',\n", " 'wotherspoon',\n", " 'gazes',\n", " 'krawetz',\n", " 'kasarda',\n", " 'geds',\n", " 'intscher',\n", " 'undescended',\n", " 'gabereaus',\n", " 'stalemated',\n", " 'ogoniland',\n", " 'précises',\n", " 'rutter',\n", " 'nominator',\n", " 'ssnate',\n", " 'resourcerich',\n", " 'dumpings',\n", " 'daley',\n", " 'calumnies',\n", " 'annexair',\n", " 'unfunny',\n", " 'descendance',\n", " 'allegorical',\n", " 'retools',\n", " 'akshay',\n", " 'fungo',\n", " 'avaaz',\n", " 'plantings',\n", " 'weider',\n", " 'unshackled',\n", " 'larijani',\n", " 'knifing',\n", " 'sadhu',\n", " 'kelen',\n", " 'lugs',\n", " 'outlasts',\n", " 'chatzibasile',\n", " 'agricultureplease',\n", " 'carboplatin',\n", " 'martinville',\n", " 'brunskill',\n", " 'metigosh',\n", " 'metrology',\n", " 'highlighter',\n", " 'bussey',\n", " 'heeba',\n", " 'ladybird',\n", " 'miraloma',\n", " 'troper',\n", " 'airgun',\n", " 'uncorrected',\n", " 'blusters',\n", " 'castillho',\n", " 'lebrun',\n", " 'backstab',\n", " 'exinvest',\n", " 'agitator',\n", " 'autorail',\n", " 'sob',\n", " 'corporatizing',\n", " 'coppens',\n", " 'webaware',\n", " 'démarches',\n", " 'alin',\n", " 'heston',\n", " 'damnation',\n", " 'lysol',\n", " 'bastardizes',\n", " 'mausoleums',\n", " 'xeni',\n", " 'scrapheap',\n", " 'equitableness',\n", " 'panache',\n", " 'prodigal',\n", " 'colebatch',\n", " 'sequences',\n", " 'antelope',\n", " 'jurisdicition',\n", " 'bennie',\n", " 'pawnshops',\n", " 'ludwik',\n", " 'gatsby',\n", " 'kerps',\n", " 'cknx',\n", " 'kitza',\n", " 'uninspected',\n", " 'lubelska',\n", " 'calmative',\n", " 'gangaram',\n", " 'énergétiques',\n", " 'lightbox',\n", " 'lueders',\n", " 'ruefully',\n", " 'dta',\n", " 'marilena',\n", " 'hankering',\n", " 'brayford',\n", " 'nawqa',\n", " 'nicol',\n", " 'ruhl',\n", " 'belying',\n", " 'hasidic',\n", " 'minni',\n", " 'saywell',\n", " 'lrc',\n", " 'interlineations',\n", " 'surtout',\n", " 'debte',\n", " 'mortimer',\n", " 'langelier',\n", " 'huxley',\n", " 'decapitations',\n", " 'cherie',\n", " 'downsizes',\n", " 'acuerdo',\n", " 'munley',\n", " 'uncreative',\n", " 'corded',\n", " 'foodbank',\n", " 'taillon',\n", " 'sako',\n", " 'disturbers',\n", " 'advereignist',\n", " 'dicker',\n", " 'blairs',\n", " 'takada',\n", " 'leisurely',\n", " 'byfield',\n", " 'latinisms',\n", " 'renault',\n", " 'vitalité',\n", " 'weizhen',\n", " 'transgress',\n", " 'orebody',\n", " 'huskinson',\n", " 'disassembly',\n", " 'chickening',\n", " 'syntactical',\n", " 'zecharya',\n", " 'fallouts',\n", " 'miscreants',\n", " 'capstick',\n", " 'whetted',\n", " 'alumina',\n", " 'nhss',\n", " 'bobak',\n", " 'jaffa',\n", " 'zalinski',\n", " 'nbl',\n", " 'kingscot',\n", " 'yachting',\n", " 'falklands',\n", " 'gluttony',\n", " 'cadex',\n", " 'mesenchymal',\n", " 'soapboxes',\n", " 'amparo',\n", " 'worrisomely',\n", " 'dematerialization',\n", " 'raeburn',\n", " 'unprojected',\n", " 'pawittar',\n", " 'rasputin',\n", " 'formet',\n", " 'invisibly',\n", " 'unleavened',\n", " 'difficultly',\n", " 'rygiel',\n", " 'helipads',\n", " 'granularity',\n", " 'dvali',\n", " 'instated',\n", " 'behar',\n", " 'capprt',\n", " 'pluripotent',\n", " 'overlaid',\n", " 'impermissibly',\n", " 'jcmt',\n", " 'determinism',\n", " 'fars',\n", " 'halber',\n", " 'annulling',\n", " 'wildaid',\n", " 'webs',\n", " 'gearboxes',\n", " 'alkali',\n", " 'lillington',\n", " 'riggs',\n", " 'matteau',\n", " 'axles',\n", " 'charbonniers',\n", " 'mutur',\n", " 'adga',\n", " 'cremated',\n", " 'foaling',\n", " 'cappadocia',\n", " 'distech',\n", " 'joslyn',\n", " 'henco',\n", " 'lembe',\n", " 'mitsui',\n", " 'neighing',\n", " 'pharmacologically',\n", " 'skookumchuck',\n", " 'marland',\n", " 'dalrymple',\n", " 'sointula',\n", " 'idlib',\n", " 'shendel',\n", " 'discriminative',\n", " 'uniatox',\n", " 'yoshizaki',\n", " 'undetectably',\n", " 'bertschi',\n", " 'airy',\n", " 'standpipes',\n", " 'inverhuron',\n", " 'neilburg',\n", " 'glucosides',\n", " 'refounded',\n", " 'paralymlpics',\n", " 'windstorms',\n", " 'ings',\n", " 'neary',\n", " 'benard',\n", " 'couchepin',\n", " 'regraded',\n", " 'throug',\n", " 'carolinas',\n", " 'bleury',\n", " 'chawathil',\n", " 'exalto',\n", " 'necked',\n", " 'aro',\n", " 'heraldry',\n", " 'bendrich',\n", " 'nazmul',\n", " 'gilliland',\n", " 'semkowski',\n", " 'petrillo',\n", " 'hygrading',\n", " 'gratis',\n", " 'unchallenging',\n", " 'clile',\n", " 'gliders',\n", " 'devault',\n", " 'newsmedia',\n", " 'occupier',\n", " 'knudsen',\n", " 'frosh',\n", " 'hireling',\n", " 'cartes',\n", " 'période',\n", " 'riverkeepers',\n", " 'uncompetitively',\n", " 'supermailboxes',\n", " 'selectiveness',\n", " 'ministerexplain',\n", " 'devant',\n", " 'munqith',\n", " 'joffrey',\n", " 'trang',\n", " 'crain',\n", " 'translucent',\n", " 'potomac',\n", " 'framatome',\n", " 'plaxton',\n", " 'leedum',\n", " 'gix',\n", " 'ponta',\n", " 'slimmer',\n", " 'fi',\n", " 'bankability',\n", " 'writtten',\n", " 'thatcherism',\n", " 'redcliff',\n", " 'existthey',\n", " 'jc',\n", " 'lowlifes',\n", " 'swetlikoff',\n", " 'tingle',\n", " 'counterintuitiveness',\n", " 'doorknocking',\n", " 'msnbc',\n", " 'retrievable',\n", " 'beyoncé',\n", " 'amadi',\n", " 'toolset',\n", " 'sucha',\n", " 'renewability',\n", " 'barbier',\n", " 'sweetest',\n", " 'icecaps',\n", " 'rigor',\n", " 'saran',\n", " 'stimson',\n", " 'bagwomen',\n", " 'bekaa',\n", " 'sharif',\n", " 'kaleden',\n", " 'importantance',\n", " 'phan',\n", " 'frans',\n", " 'enkhbold',\n", " 'revelatory',\n", " 'perishing',\n", " 'beaugé',\n", " 'egotistically',\n", " 'hemphill',\n", " 'soep',\n", " 'casefiles',\n", " 'litanies',\n", " 'lalondes',\n", " 'niccolo',\n", " 'novaks',\n", " 'aghans',\n", " 'mockler',\n", " 'canterra',\n", " 'bif',\n", " 'urbanist',\n", " 'patersons',\n", " 'downswing',\n", " 'binyon',\n", " 'vertige',\n", " 'civilianized',\n", " 'undersubscribed',\n", " 'doerksen',\n", " 'colonialists',\n", " 'teichroeb',\n", " 'gekkos',\n", " 'desperadoes',\n", " 'inhibitors',\n", " 'akhinen',\n", " 'inniskillin',\n", " 'peregrines',\n", " 'unsmis',\n", " 'isobel',\n", " 'lapen',\n", " 'hanif',\n", " 'prioritaire',\n", " 'jasyn',\n", " 'émilienne',\n", " 'licenseable',\n", " 'jamia',\n", " 'waffley',\n", " 'baccaro',\n", " 'southland',\n", " 'spasm',\n", " 'pcu',\n", " 'secularists',\n", " 'katharina',\n", " 'microclimates',\n", " 'migs',\n", " 'aunjanue',\n", " 'wisecrack',\n", " 'eshaq',\n", " 'documenteur',\n", " 'artemis',\n", " 'fundings',\n", " ...]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fd.hapaxes()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The next section will use `NLTK` to create generate concordance outputs featuring the word `privacy`." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.0" } }, "nbformat": 4, "nbformat_minor": 0 }