diff --git a/cbrook53.ipynb b/cbrook53.ipynb new file mode 100644 index 0000000..53d1ca4 --- /dev/null +++ b/cbrook53.ipynb @@ -0,0 +1,387 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Written text as operational data\n", + "\n", + "Written text is one type of data\n", + "\n", + "### Why people write?\n", + "\n", + " - To communicate: their thoughts, feelings, urgency, needs, information\n", + "\n", + "### Why people communicate?\n", + "\n", + "1. To express emotions\n", + "1. To share information\n", + "1. To enable or elicit an action\n", + "1. ...\n", + "\n", + "### We will use written text for the purpose other than \n", + "1. To experience emotion\n", + "1. To learn something the author intended us to learn\n", + "1. To do what the author intended us to do\n", + "\n", + "### Instead, we will use written text to recognize who wrote it\n", + " - By calculating and comparing word frequencies in written documents\n", + " \n", + "See, for example, likely fictional story https://medium.com/@amuse/how-the-nsa-caught-satoshi-nakamoto-868affcef595" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example 1. Dictionaries in python (associative arrays)\n", + "\n", + "Plot the frequency distribution of words on a web page." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "of\t4853\n", + "to\t2985\n", + "and\t2425\n", + "in\t2181\n", + "a\t1691\n", + "his\t1330\n", + "he\t1211\n", + "is\t1176\n", + "was\t1173\n", + "that\t1156\n", + "as\t1050\n", + "by\t963\n", + "with\t918\n", + "I\t798\n" + ] + } + ], + "source": [ + "import requests, re\n", + "# re is a module for regular expressions: to detect various combinations of characters\n", + "import operator\n", + "\n", + "# Start from a simple document\n", + "r = requests .get('https://www.gutenberg.org/ebooks/41537.txt.utf-8')\n", + "\n", + "# What comes back includes headers and other HTTP stuff, get just the body of the response\n", + "t = r.text\n", + "\n", + "# obtain words by splitting a string using as separator one or more (+) space/like characters (\\s) \n", + "wds = re.split('\\s+',t)\n", + "\n", + "# now populate a dictionary (wf)\n", + "wf = {}\n", + "for w in wds:\n", + " if w in wf: wf [w] = wf [w] + 1\n", + " else: wf[w] = 1\n", + "\n", + "# dictionaries can not be sorted, so lets get a sorted *list* \n", + "wfs = sorted (wf .items(), key = operator .itemgetter (1), reverse=True) \n", + "\n", + "# lets just have no more than 15 words \n", + "ml = min(len(wfs),15)\n", + "for i in range(1,ml,1):\n", + " print (wfs[i][0]+\"\\t\"+str(wfs[i][1])) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example 2\n", + "\n", + "Lots of markup in the output, lets remove it --- \n", + "\n", + "use BeautifulSoup and nltk modules and practice some regular expressions." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import requests, re, nltk\n", + "from bs4 import BeautifulSoup\n", + "from nltk import clean_html\n", + "from collections import Counter\n", + "import operator\n", + "\n", + "# we may not care about the usage of stop words\n", + "stop_words = nltk.corpus.stopwords.words('english') + [\n", + " 'ut', '\\'re','.', ',', '--', '\\'s', '?', ')', '(', ':', '\\'',\n", + " '\\\"', '-', '}', '{', '&', '|', u'\\u2014', 'project', 'gutenburg',\n", + " 'rom', 'jul' ]\n", + "\n", + "# We most likely would like to remove html markup\n", + "def cleanHtml (html):\n", + " from bs4 import BeautifulSoup\n", + " soup = BeautifulSoup(html, 'html.parser')\n", + " return soup .get_text()\n", + "\n", + "# We also want to remove special characters, quotes, etc. from each word\n", + "def cleanWord (w):\n", + " # r in r'[.,\"\\']' tells to treat \\ as a regular character \n", + " # but we need to escape ' with \\'\n", + " # any character between the brackets [] is to be removed \n", + " wn = re.sub('[,\"\\.\\'&\\|:@>*;/=]', \"\", w)\n", + " # get rid of numbers\n", + " return re.sub('^[0-9\\.]*$', \"\", wn)\n", + " \n", + "# define a function to get text/clean/calculate frequency\n", + "def get_wf (URL):\n", + " # first get the web page\n", + " r = requests .get(URL)\n", + " \n", + " # Now clean\n", + " # remove html markup\n", + " t = cleanHtml (r .text) .lower()\n", + " \n", + " # split string into an array of words using any sequence of spaces \"\\s+\" \n", + " wds = re .split('\\s+',t)\n", + " \n", + " # remove periods, commas, etc stuck to the edges of words\n", + " for i in range(len(wds)):\n", + " wds [i] = cleanWord (wds [i])\n", + " \n", + " # If satisfied with results, lets go to the next step: calculate frequencies\n", + " # We can write a loop to create a dictionary, but \n", + " # there is a special function for everything in python\n", + " # in particular for counting frequencies (like function table() in R)\n", + " wf = Counter (wds)\n", + " \n", + " # Remove stop words from the dictionary wf\n", + " for k in stop_words:\n", + " wf. pop(k, None)\n", + " \n", + " #how many regular words in the document?\n", + " tw = 0\n", + " for w in wf:\n", + " tw += wf[w] \n", + " \n", + " \n", + " # Get ordered list\n", + " wfs = sorted (wf .items(), key = operator.itemgetter(1), reverse=True)\n", + " ml = min(len(wfs),15)\n", + "\n", + " #Reverse the list because barh plots items from the bottom\n", + " return (wfs [ 0:ml ] [::-1], tw)\n", + " \n", + "# Now populate two lists \n", + "(wf_ee, tw_ee) = get_wf('https://www.gutenberg.org/ebooks/1112.txt.utf-8')\n", + "(wf_bu, tw_bu) = get_wf('https://www.gutenberg.org/ebooks/1531.txt.utf-8')\n", + "(wf_ra, tw_ra) = get_wf('https://www.gutenberg.org/files/84/84-0.txt')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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CoD27duze/duli5dyrJlyxgyZAht27bl448/JixM71hSwc9fDcBVQCTwKLBKRM4aY7KA17ENuyVOuM+BO4A9InLaT2lTKiR07dqVkydPMmHCBLp27Up4eDipqakMHz6cuLg4evfuDdgT08KFC2nYsOE5Jy+lqoIWLVoQGRnJnj176NGjR4lhWrZsSceOHXn99deZPXs2zzzzTNG8du3aISLs37+f7t27l7g8QGxsLLfffju33347GRkZdOrUiR07dpCYmOj1PCnlbX75N8XlPsDBwHJn8jogHuiE7Q0EmALUBBYYYzoaY5oYY3oaY6YbY2L9kValglXhfYCzZ88uOil16tSJH374gXXr1pGamgrAAw88wNGjR7nzzjtZv349O3fu5JNPPmHEiBEcP348gDlQyj9iY2MZM2YMY8aMYebMmezYsYNNmzYxdepUpk+fXhRu+PDhTJgwgby8PO68886i6YmJiaSlpZGRkcFbb73Fzp07yc7OZuLEiUVPCU+aNIl58+axbds2duzYwdy5c7n44ouJj4/3e36VKg9/9lNnYXscswBE5AT2PsCT2Pv/EJG9QBegANsruAXbKDzpDEpVaampqZw5c6aosVe9enU6duxIZGQkHTp0AODKK69k9erVhIWF0bt3b1q2bMkDDzxAZGQkkZGRAUy9Uv4zfvx4xo0bx8SJE2nZsiXXX389b7/9No0bNy4Kc+eddxIREcEdd9xBbGzxPoZZs2YxdOhQHn30UZo3b87NN9/MypUradiwIWAbmS+++CIdOnSgffv2bNq0iY8++ojo6Gi/5lOp8jIiEug0+E1k3aZSd8jLAU3D7uf7BHT9qnSSk5PL9cRsZRdZtymBqkNad0JPsNejvXv30qBBA1asWEGXLl38ss5A1qFgpXXbM2PMRhEp11tQLsRf9wAqpZRSQeH06dP89NNPPPHEE7Rr185vjT+lgkmVagC2rleTbP1PQ6ly0zqkKoPVq1fTvXt3mjZtysKFC/26bq1DKlhUqQagUkoplZqaSlW6/UmpkujLipRSSimlqhhtACqllFJKVTFV6hLw1z8epdFjiwOybn3KSVUGgahDWndUZRLI81Cw0joeGNoDqJRSSilVxWgDUCmllFKqitEGoFJBLiMjg5tvvjnQyVCqyipNHbz55pvJyMjwT4KU8oIqdQ+gUkopVVaTJ0/W18ao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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Plot the results: are there striking differences in language?\n", + "import numpy as np\n", + "import pylab\n", + "import matplotlib.pyplot as plt\n", + "\n", + "%matplotlib inline\n", + "def plotTwoLists (wf_ee, wf_bu, wf_ra, title):\n", + " f = plt.figure (figsize=(10, 6))\n", + " # this is painfully tedious....\n", + " f .suptitle (title, fontsize=20)\n", + " ax = f.add_subplot(111)\n", + " ax .spines ['top'] .set_color ('none')\n", + " ax .spines ['bottom'] .set_color ('none')\n", + " ax .spines ['left'] .set_color ('none')\n", + " ax .spines ['right'] .set_color ('none')\n", + " ax .tick_params (labelcolor='w', top='off', bottom='off', left='off', right='off', labelsize=20)\n", + "\n", + " # Create two subplots, this is the first one\n", + " ax1 = f .add_subplot (131)\n", + " plt .subplots_adjust (wspace=.5)\n", + " pos = np .arange (len(wf_ee)) \n", + " ax1 .tick_params (axis='both', which='major', labelsize=14)\n", + " pylab .yticks (pos, [ x [0] for x in wf_ee ])\n", + " ax1 .barh (range(len(wf_ee)), [ x [1] for x in wf_ee ], align='center')\n", + "\n", + " ax2 = f .add_subplot (132)\n", + " ax2 .tick_params (axis='both', which='major', labelsize=14)\n", + " pos = np .arange (len(wf_bu)) \n", + " pylab .yticks (pos, [ x [0] for x in wf_bu ])\n", + " ax2 .barh (range (len(wf_bu)), [ x [1] for x in wf_bu ], align='center')\n", + " \n", + " ax3 = f .add_subplot(133)\n", + " ax3 .tick_params (axis='both', which='major', labelsize=14)\n", + " pos = np .arange (len(wf_ra))\n", + " pylab .yticks (pos, [ x [0] for x in wf_ra ])\n", + " ax3 .barh (range (len(wf_ra)), [ x [1] for x in wf_ra ], align='center')\n", + "\n", + "plotTwoLists (wf_ee, wf_bu, wf_ra, 'Romeo & Juliet, Othello, & Frankenstein')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "and\t2836\n", + "of\t2676\n", + "to\t2646\n", + "a\t2217\n", + "in\t1422\n", + "his\t1205\n", + "he\t928\n", + "that\t920\n", + "was\t823\n", + "for\t798\n", + "with\t797\n", + "as\t672\n", + "I\t505\n", + "you\t497\n" + ] + } + ], + "source": [ + "#In case Project gutenberg is blocked you can download text to your laptop and copy to the docker container via scp\n", + "#Assuming the file name you copy is pg4680.txt here is how you change the script\n", + "# Please note the option errors='replace'\n", + "# without it python invariably runs into unicode errors\n", + "f = open ('pg4680.txt', 'r', encoding=\"ascii\", errors='replace')\n", + " \n", + "# What comes back includes headers and other HTTP stuff, get just the body of the response\n", + "t = f.read()\n", + "\n", + "# obtain words by splitting a string using as separator one or more (+) space/like characters (\\s) \n", + "wds = re.split('\\s+',t)\n", + "\n", + "# now populate a dictionary (wf)\n", + "wf = {}\n", + "for w in wds:\n", + " if w in wf: wf [w] = wf [w] + 1\n", + " else: wf [w] = 1\n", + "\n", + "# dictionaries can not be sorted, so lets get a sorted *list* \n", + "wfs = sorted (wf .items(), key = operator .itemgetter (1), reverse=True) \n", + "\n", + "# lets just have no more than 15 words \n", + "ml = min(len(wfs),15)\n", + "for i in range(1,ml,1):\n", + " print (wfs[i][0]+\"\\t\"+str(wfs[i][1])) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Assignment 1\n", + "\n", + "1. Compare word frequencies between two works of a single author.\n", + "1. Compare word frequencies between works of two authors.\n", + "1. Are there some words preferred by one author but used less frequently by another author?\n", + "\n", + "Extra credit\n", + "\n", + "1. The frequency of a specific word, e.g., \"would\" should follow a binomial distribution (each regular word in a document is a trial and with probability p that word is \"would\". The estimate for p is N(\"would\")/N(regular word)). Do these binomial distributions for your chosen word differ significantly between books of the same author or between authors? \n", + "\n", + "Project Gutenberg is a good source of for fiction and non-fiction.\n", + "\n", + "E.g below are two most popular books from Project Gutenberg:\n", + "- Pride and Prejudice at http://www.gutenberg.org/ebooks/1342.txt.utf-8\n", + "- Adventures of Huckleberry Finn at http://www.gutenberg.org/ebooks/76.txt.utf-8" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import requests, re, nltk\n", + "#In case your text is not on Project Gutenberg but at some other URL\n", + "#http://www.fullbooks.com/Our-World-or-The-Slaveholders-Daughter2.html\n", + "# that contains 12 parts\n", + "t = \"\"\n", + "for i in range(2,13):\n", + " r = requests .get('http://www.fullbooks.com/Our-World-or-The-Slaveholders-Daughter' + str(i) + '.html')\n", + " t = t + r.text" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1323653" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(t)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +}