From 6603a1eb5dd490b13503425fd18497426ca6f58f Mon Sep 17 00:00:00 2001 From: Robert Schenck Date: Wed, 7 Sep 2022 22:38:05 -0400 Subject: [PATCH 1/3] added rschenck.ipynb --- rschenck.ipynb | 382 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 382 insertions(+) create mode 100644 rschenck.ipynb diff --git a/rschenck.ipynb b/rschenck.ipynb new file mode 100644 index 0000000..59b489b --- /dev/null +++ b/rschenck.ipynb @@ -0,0 +1,382 @@ +{ + "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": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "class=\"menu-item\t54\n", + "\t38\n", + "\t35\n", + "
  • \t28\n", + "\t21\n", + "\t21\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('http://eecs.utk.edu')\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": 12, + "metadata": { + "collapsed": true + }, + "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' ]\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('http://www.gutenberg.org/ebooks/1342.txt.utf-8')\n", + "(wf_bu, tw_bu) = get_wf('http://www.gutenberg.org/ebooks/76.txt.utf-8')" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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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, 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 (121)\n", + " plt .subplots_adjust (wspace=.5)\n", + "\n", + " pos = np .arange (len(wf_ee)+1) \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 (122)\n", + " ax2 .tick_params (axis='both', which='major', labelsize=14)\n", + " pos = np .arange (len(wf_bu)+1) \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", + "plotTwoLists (wf_ee, wf_bu, 'Difference between Pride and Prejudice and Huck Finn')" + ] + }, + { + "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", + "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.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} From aa9862c731e7cc7856461aa4b15bc6814a28bfdb Mon Sep 17 00:00:00 2001 From: Robert Schenck Date: Thu, 15 Sep 2022 02:56:32 -0400 Subject: [PATCH 2/3] added text analysis work --- mp1_text_analysis.ipynb | 95 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 mp1_text_analysis.ipynb diff --git a/mp1_text_analysis.ipynb b/mp1_text_analysis.ipynb new file mode 100644 index 0000000..757a70a --- /dev/null +++ b/mp1_text_analysis.ipynb @@ -0,0 +1,95 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 33, + "id": "871b9b47", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The least used word is carews\n", + "It was used 1 times\n", + "The most used word is to\n", + "It was used 238375 times\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "data = pd.read_csv('/home/robert/Desktop/abcnews-date-text.csv')\n", + "headlines = data['headline_text']\n", + "test = {}\n", + "\n", + "for strObject in headlines.values:\n", + " words = strObject.split()\n", + " for word in words:\n", + " if word.isdigit() or word == '5;919' or word == '2;093':\n", + " continue\n", + " if word in test:\n", + " num = test.get(word)\n", + " test[word] = num + 1\n", + " else:\n", + " test[word] = 1\n", + " \n", + "mostUsed = 0\n", + "leastUsed = 1000000\n", + "mostUsedWord = ''\n", + "leastUsedWord = ''\n", + "\n", + "for word in test:\n", + " if test[word] < leastUsed:\n", + " leastUsedWord = word\n", + " leastUsed = test[word]\n", + " if test[word] > mostUsed:\n", + " mostUsedWord = word\n", + " mostUsed = test[word]\n", + " \n", + "print('The least used word is', leastUsedWord)\n", + "print('It was used', leastUsed, 'times')\n", + "print('The most used word is', mostUsedWord)\n", + "print('It was used', mostUsed, 'times')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c142ecef", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "597d8216", + "metadata": {}, + "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": 5 +} From ba0eb0c0b62ec8a2c1d46e8c6e74239c52e26939 Mon Sep 17 00:00:00 2001 From: Robert Schenck Date: Thu, 15 Sep 2022 14:53:01 -0400 Subject: [PATCH 3/3] moved mp1 work to rschenck.ipnb --- mp1_text_analysis.ipynb | 95 ---------- rschenck.ipynb | 381 +++++----------------------------------- 2 files changed, 47 insertions(+), 429 deletions(-) delete mode 100644 mp1_text_analysis.ipynb diff --git a/mp1_text_analysis.ipynb b/mp1_text_analysis.ipynb deleted file mode 100644 index 757a70a..0000000 --- a/mp1_text_analysis.ipynb +++ /dev/null @@ -1,95 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 33, - "id": "871b9b47", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The least used word is carews\n", - "It was used 1 times\n", - "The most used word is to\n", - "It was used 238375 times\n" - ] - } - ], - "source": [ - "import pandas as pd\n", - "\n", - "data = pd.read_csv('/home/robert/Desktop/abcnews-date-text.csv')\n", - "headlines = data['headline_text']\n", - "test = {}\n", - "\n", - "for strObject in headlines.values:\n", - " words = strObject.split()\n", - " for word in words:\n", - " if word.isdigit() or word == '5;919' or word == '2;093':\n", - " continue\n", - " if word in test:\n", - " num = test.get(word)\n", - " test[word] = num + 1\n", - " else:\n", - " test[word] = 1\n", - " \n", - "mostUsed = 0\n", - "leastUsed = 1000000\n", - "mostUsedWord = ''\n", - "leastUsedWord = ''\n", - "\n", - "for word in test:\n", - " if test[word] < leastUsed:\n", - " leastUsedWord = word\n", - " leastUsed = test[word]\n", - " if test[word] > mostUsed:\n", - " mostUsedWord = word\n", - " mostUsed = test[word]\n", - " \n", - "print('The least used word is', leastUsedWord)\n", - "print('It was used', leastUsed, 'times')\n", - "print('The most used word is', mostUsedWord)\n", - "print('It was used', mostUsed, 'times')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c142ecef", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "597d8216", - "metadata": {}, - "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": 5 -} diff --git a/rschenck.ipynb b/rschenck.ipynb index 59b489b..757a70a 100644 --- a/rschenck.ipynb +++ b/rschenck.ipynb @@ -1,366 +1,79 @@ { "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": 5, + "execution_count": 33, + "id": "871b9b47", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "class=\"menu-item\t54\n", - "\t38\n", - "\t35\n", - "
  • \t28\n", - "\t21\n", - "\t21\n" + "The least used word is carews\n", + "It was used 1 times\n", + "The most used word is to\n", + "It was used 238375 times\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('http://eecs.utk.edu')\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": 12, - "metadata": { - "collapsed": true - }, - "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' ]\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", + "import pandas as pd\n", + "\n", + "data = pd.read_csv('/home/robert/Desktop/abcnews-date-text.csv')\n", + "headlines = data['headline_text']\n", + "test = {}\n", + "\n", + "for strObject in headlines.values:\n", + " words = strObject.split()\n", + " for word in words:\n", + " if word.isdigit() or word == '5;919' or word == '2;093':\n", + " continue\n", + " if word in test:\n", + " num = test.get(word)\n", + " test[word] = num + 1\n", + " else:\n", + " test[word] = 1\n", + " \n", + "mostUsed = 0\n", + "leastUsed = 1000000\n", + "mostUsedWord = ''\n", + "leastUsedWord = ''\n", + "\n", + "for word in test:\n", + " if test[word] < leastUsed:\n", + " leastUsedWord = word\n", + " leastUsed = test[word]\n", + " if test[word] > mostUsed:\n", + " mostUsedWord = word\n", + " mostUsed = test[word]\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('http://www.gutenberg.org/ebooks/1342.txt.utf-8')\n", - "(wf_bu, tw_bu) = get_wf('http://www.gutenberg.org/ebooks/76.txt.utf-8')" + "print('The least used word is', leastUsedWord)\n", + "print('It was used', leastUsed, 'times')\n", + "print('The most used word is', mostUsedWord)\n", + "print('It was used', mostUsed, 'times')" ] }, { "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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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, 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 (121)\n", - " plt .subplots_adjust (wspace=.5)\n", - "\n", - " pos = np .arange (len(wf_ee)+1) \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 (122)\n", - " ax2 .tick_params (axis='both', which='major', labelsize=14)\n", - " pos = np .arange (len(wf_bu)+1) \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", - "plotTwoLists (wf_ee, wf_bu, 'Difference between Pride and Prejudice and Huck Finn')" - ] - }, - { - "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", + "execution_count": null, + "id": "c142ecef", "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)" - ] + "source": [] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "id": "597d8216", + "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -374,9 +87,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.8.10" } }, "nbformat": 4, - "nbformat_minor": 1 + "nbformat_minor": 5 }