{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Getting Collocates for Words\n", "\n", "This shows how you can get collocates for a word. \n", "\n", "**Note:** It assumes you have the text in the same directory." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Checking files and getting a text\n", "\n", "First we check what texts we have in the directory." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hume Enquiry.txt negative.txt positive.txt\r\n", "Hume Treatise.txt obama_tweets.txt\r\n" ] } ], "source": [ "%ls *.txt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we open the text. \n", "\n", "Copy in the title of the text you want to process and run the next cell. Our example uses the plain text version of Hume's [A Treatise of Human Nature by David Hume](http://www.gutenberg.org/ebooks/4705) that we downloaded." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "This string has 1,344,061 characters\n" ] } ], "source": [ "targetText = \"Hume Treatise.txt\"\n", "\n", "with open(targetText, \"r\") as f:\n", " theText = f.read()\n", "\n", "print(\"This string has\", \"{:,}\".format(len(theText)), \"characters\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tokenizing\n", "\n", "Note that we are tokenizing the full Gutenberg text file which includes metadata and license information. If you want only the tokens of the book you should delete the Gutenberg information from the text file." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten']\n" ] } ], "source": [ "import re\n", "theTokens = re.findall(r'\\b\\w[\\w-]*\\b', theText.lower())\n", "print(theTokens[:10])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Finding the collocates\n", "\n", "This will ask you what words you want collocates for create a list of collocates. Note that you can have more than one target word. The list of words you want should be separated by spaces." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "What word do you want collocates for?one two\n", "['one', 'two']\n" ] } ], "source": [ "wrds2find = input(\"What word do you want collocates for?\").split(\" \") # Ask for the words to search for\n", "print(wrds2find)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is the main loop that goes through the text and pulls collocates. Note that you can set the context of collocates before and after the target word separately." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['one']\n" ] } ], "source": [ "contextBefore = 1 # This sets the context of words before the target word\n", "contextAfter = 0 # This sets the context of words after the target word\n", "\n", "end = len(theTokens)\n", "counter = 0\n", "theCollocates = []\n", "for word in theTokens:\n", " if word in wrds2find: # This checks to see if the word is what we want\n", " for i in range(contextBefore):\n", " if (counter - (i + 1)) >= 0: # This checks that we aren't at the beginning\n", " theCollocates.append(theTokens[(counter - (i + 1))]) # This adds words before\n", " for i in range(contextAfter):\n", " if (counter + (i + 1)) < end: # This checks that we aren't at the end\n", " theCollocates.append(theTokens[(counter + (i + 1))]) # This adds words after\n", " counter = counter + 1\n", " \n", "print(theCollocates[:30])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Doing things with the collocates\n", "\n", "Now we can do various things with the list of collocates." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Count collocates" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "71\n" ] } ], "source": [ "print(len(theCollocates))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Count unique words among collocates" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'same', 'no', 'passions', 'its', 'of', 'why', 'with', 'which', 'certain', 'at', 'undoubted', 'beside', 'concerning', 'the', 'if', 'render', 'like', 'as', 'following', 'confusion', 'betwixt', 'to', 'evident', 'that', 'this', 'falshood', 'any'}\n" ] } ], "source": [ "print(set(theCollocates))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Tabulate top collocates" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " the of to same that this its any following confusion \n", " 20 14 5 3 3 3 2 2 1 1 \n" ] } ], "source": [ "import nltk\n", "tokenDist = nltk.FreqDist(theCollocates)\n", "tokenDist.tabulate(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Plot top collocates" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib\n", "%matplotlib inline\n", "tokenDist.plot(25, title=\"Top Frequency Collocates for \" + wrd2find.capitalize())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Explort all collocates and counts as a CSV\n", "\n", "This will create CSV file with the name of the target word with the counts." ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Done\n" ] } ], "source": [ "import csv\n", "nameOfResults = wrd2find.capitalize() + \".Collocates.csv\"\n", "table = tokenDist.most_common()\n", "\n", "with open(nameOfResults, \"w\") as f:\n", " writer = csv.writer(f)\n", " writer.writerows(table)\n", " \n", "print(\"Done\")" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "---\n", "[CC BY-SA](https://creativecommons.org/licenses/by-sa/4.0/) From [The Art of Literary Text Analysis](ArtOfLiteraryTextAnalysis.ipynb) by [Stéfan Sinclair](http://stefansinclair.name) & [Geoffrey Rockwell](http://geoffreyrockwell.com)
Created January 7, 2015 and last modified August 8, 2016 (Jupyter 4.2.1)" ] }, { "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.6.3" } }, "nbformat": 4, "nbformat_minor": 1 }