Source: Natural Language Processing with Python --- Analyzing Text with the Natural Language Toolkit. Status. We have had three weeks of Object-Oriented Programming in Python. Simple I/O, File I/O. Lists, Strings, . ID: 484997
DownloadNote - The PPT/PDF document "Introduction to Natural Language Process..." is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.
Introduction to Natural Language Processing
Source: Natural Language Processing with Python --- Analyzing Text with the Natural Language ToolkitSlide2
We have had three weeks of Object-Oriented Programming in Python
Simple I/O, File I/O
, and their methods
Numeric types and operations
Control structures: if, for, while
Function definition and use
Parameters for defining the function, arguments for calling the functionSlide3
Applying what we have
The first chapter of the NLTK book repeats much of what we have seen
Now in the context of an application domain: Natural Language Processing
Note: there are similar packages for other domains
Book examples in chapter 1 are all done with the interactive python shellSlide4
What can we achieve by combining simple programming techniques with large quantities of text?How can we automatically extract key words and phrases that sum up the style and content of a text?What tools and techniques does the Python programming language provide for such work?What are some of the interesting challenges of natural language processing?
Quote from nltk book
Since text can cover any subject area, it is a general interest area to explore in some depth.Slide5
The natural language tool kit modulesdatasetstutorialsContains: align, app (package), book, ccg (package), chat (package, chunk (package), classify (package), cluster (package), collocations, compat, containers, corpus (package), data, decorators, downloader, draw (package), etree (package), evaluate, examples (package), featstruct, grammar), help, inference (package), internals, lazyimport, metrics (package), misc (package), model (package), olac, parse (package), probability, sem (package), sourcedstring, stem (package), tag (package), text, tokenize (package), toolbox (package), tree, treetransforms, util, yamltags
We will not have time to explore all of them, but this gives a full list for further exploration.Slide6
) is True for all values
) is True for any
Using the NLTK
opens a window showing this:
Do it nowSlide8
Getting data from the downloaded files
Previously, we used
from math import pi
to get something specific from a module
Now, from the
, we will get the text files we will use
Import the data files
>>> import nltk>>> from nltk.book import **** Introductory Examples for the NLTK Book ***Loading text1, ..., text9 and sent1, ..., sent9Type the name of the text or sentence to view it.Type: 'texts()' or 'sents()' to list the materials.text1: Moby Dick by Herman Melville 1851text2: Sense and Sensibility by Jane Austen 1811text3: The Book of Genesistext4: Inaugural Address Corpustext5: Chat Corpustext6: Monty Python and the Holy Grailtext7: Wall Street Journaltext8: Personals Corpustext9: The Man Who Was Thursday by G . K . Chesterton 1908
Do it now.Then type sent1 at a python prompt to see the fist sentence of Moby DickRepeat for sent2 .. sent9 to see the first sentence of each text.Take note of the collection of texts. Great variety. Different ones will be useful for different types of exploration
What type of data is each first sentence?Slide10
Searching the texts
>>> text9.concordance("sunset")Building index...Displaying 14 of 14 matches:E suburb of Saffron Park lay on the sunset side of London , as red and ragged n , as red and ragged as a cloud of sunset . It was built of a bright brick thbered in that place for its strange sunset . It looked like the end of the worival ; it was upon the night of the sunset that his solitude suddenly ended . he Embankment once under a dark red sunset . The red river reflected the red sst seemed of fiercer flame than the sunset it mirrored . It looked like a strehe passionate plumage of the cloudy sunset had been swept away , and a naked mder the sea . The sealed and sullen sunset behind the dark dome of St . Paul 'ming with the colour and quality of sunset . The Colonel suggested that , befogold . Up this side street the last sunset light shone as sharp and narrow as of gas , which in the full flush of sunset seemed coloured like a sunset cloudsh of sunset seemed coloured like a sunset cloud . " After all ," he said , " y and quietly , like a long , low , sunset cloud , a long , low house , mellowhouse , mellow in the mild light of sunset . All the six friends compared note
A concordance shows a word in contextSlide11
Same word in different texts
>>> text1.concordance("monstrous")Building index...Displaying 11 of 11 matches:ong the former , one was of a most monstrous size . ... This came towards us , ON OF THE PSALMS . " Touching that monstrous bulk of the whale or ork we have rll over with a heathenish array of monstrous clubs and spears . Some were thickd as you gazed , and wondered what monstrous cannibal and savage could ever havthat has survived the flood ; most monstrous and most mountainous ! That Himmalthey might scout at Moby Dick as a monstrous fable , or still worse and more deth of Radney .'" CHAPTER 55 Of the Monstrous Pictures of Whales . I shall ere ling Scenes . In connexion with the monstrous pictures of whales , I am stronglyere to enter upon those still more monstrous stories of them which are to be foght have been rummaged out of this monstrous cabinet there is no telling . But of Whale - Bones ; for Whales of a monstrous size are oftentimes cast up dead u>>> text2.concordance("monstrous")Building index...Displaying 11 of 11 matches:. " Now , Palmer , you shall see a monstrous pretty girl ." He immediately wentyour sister is to marry him . I am monstrous glad of it , for then I shall haveou may tell your sister . She is a monstrous lucky girl to get him , upon my hok how you will like them . Lucy is monstrous pretty , and so good humoured and Jennings , " I am sure I shall be monstrous glad of Miss Marianne ' s company usual noisy cheerfulness , " I am monstrous glad to see you -- sorry I could nt however , as it turns out , I am monstrous glad there was never any thing in so scornfully ! for they say he is monstrous fond of her , as well he may . I spossible that she should ." " I am monstrous glad of it . Good gracious ! I havthing of the kind . So then he was monstrous happy , and talked on some time abe very genteel people . He makes a monstrous deal of money , and they keep thei>>>
Sense and SensibilitySlide12
abundant candid careful christian contemptible curious delightfullydetermined doleful domineering exasperate fearless few gamesomehorrible impalpable imperial lamentable lazy loving>>>
>>> text2.similar("monstrous")Building word-context index...very exceedingly heartily so a amazingly as extremely good greatremarkably sweet vast>>>
Note different sense of the word in the two texts.Slide13
Choose a word and generate a concordance for it in two or three texts.Do you see any difference in meaning?Look for similar terms in the texts.
Not sure what words are in what texts?
will return true or false
Look at the first sentence to get some words that are in the text.
Guess. ex: “money” appears in all but text6 and text8Slide14
Looking at vocabulary
>>> len(set(text3))2789>>> len(set(text2))6833>>>
Total number of tokens, includes non words and repeated words
What do these numbers mean?Slide15
What does this tell us?
On average, a word is used > 20 times
A rough measure of lexical richness
>>> from __future__ import division>>> 100*text2.count("money")/len(text2)0.018364694581002431>>>
Note two ways to get floating point results when dividing integers
What does this tell us?Slide16
Making life easier
>>> lexical_diversity(text2)20.719449729255086>>> percentage(text2.count('money'),len(text2))0.018364694581002431>>>
... return 100*count/total
Modify the function percentage so that you only have to pass it the name of the text and the word to count
the new call will look like this:
In which of the texts is “money” most dominant?
Where is it least dominant?
What are the percentages for each text?Slide18
Indexing the texts
Each of the texts is a list, and so all our list methods work, including slicing:
>>> text2[0:100]['[', 'Sense', 'and', 'Sensibility', 'by', 'Jane', 'Austen', '1811', ']', 'CHAPTER', '1', 'The', 'family', 'of', 'Dashwood', 'had', 'long', 'been', 'settled', 'in', 'Sussex', '.', 'Their', 'estate', 'was', 'large', ',', 'and', 'their', 'residence', 'was', 'at', 'Norland', 'Park', ',', 'in', 'the', 'centre', 'of', 'their', 'property', ',', 'where', ',', 'for', 'many', 'generations', ',', 'they', 'had', 'lived', 'in', 'so', 'respectable', 'a', 'manner', 'as', 'to', 'engage', 'the', 'general', 'good', 'opinion', 'of', 'their', 'surrounding', 'acquaintance', '.', 'The', 'late', 'owner', 'of', 'this', 'estate', 'was', 'a', 'single', 'man', ',', 'who', 'lived', 'to', 'a', 'very', 'advanced', 'age', ',', 'and', 'who', 'for', 'many', 'years', 'of', 'his', 'life', ',', 'had', 'a', 'constant', 'companion']>>>
The first 101 elements in the list for text2 (Sense and Sensibility) Note that the first element is itself a list.Slide19
We can see what is at a position:>>> text2'devolved’And where a word appears:>>> text2.index('marriage')255>>>
Remember that indexing begins at 0 and the index tells how far removed you are from the initial element.Slide20
Each of the elements in each of the text lists is a string, and all the string methods apply.Slide21
>>> fdist1=FreqDist(text1)>>> fdist1<FreqDist with 260819 outcomes>>>> vocabulary1=fdist1.keys()>>> vocabulary1[:50][',', 'the', '.', 'of', 'and', 'a', 'to', ';', 'in', 'that', "'", '-', 'his', 'it', 'I', 's', 'is', 'he', 'with', 'was', 'as', '"', 'all', 'for', 'this', '!', 'at', 'by', 'but', 'not', '--', 'him', 'from', 'be', 'on', 'so', 'whale', 'one', 'you', 'had', 'have', 'there', 'But', 'or', 'were', 'now', 'which', '?', 'me', 'like']>>>
These are the 50 most common tokens in the text of Moby Dick. Many of these are not useful in characterizing the text. We call them “stop words” and will see how to eliminate them from consideration later.Slide22
More precise specification
Consider the mathematical expressionPython implementation is[w for w in V if p(w)]
>>> AustenVoc=set(text2)>>> long_words_2=[w for w in AustenVoc if len(w) >15]>>> long_words_2['incomprehensible', 'disqualifications', 'disinterestedness', 'companionableness']>>>
List comprehension – we saw it first last weekSlide23
Add to the condition
fdist2=FreqDist(text2)>>> long_words_2=sorted([w for w in AustenVoc if len(w) >12 and fdist2[w]>5])>>> long_words_2['Somersetshire', 'accommodation', 'circumstances', 'communication', 'consciousness', 'consideration', 'disappointment', 'distinguished', 'embarrassment', 'encouragement', 'establishment', 'extraordinary', 'inconvenience', 'indisposition', 'neighbourhood', 'unaccountable', 'uncomfortable', 'understanding', 'unfortunately']
) can be as complex as we needSlide24
Find all the words longer than 12 characters, which occur at least 5 times, in each of the texts.
How well do they give you a sense of the texts?Slide25
Collocations and Bigrams
Sometimes a word by itself is not representative of its role in a text. It is only with a companion word that we get the intended sense.
sign of hope
Bigrams are two word combinations
not all bigrams are useful, of course
len(bigrams(text2)) == 141575
including “and among”, “they could” , …
Collocations provides bigrams that include uncommon words – words that might be significant in the text.
text2.collocations has 20 pairsSlide26
>>> colloc2=text2.collocations()Colonel Brandon; Sir John; Lady Middleton; Miss Dashwood; every thing;thousand pounds; dare say; Miss Steeles; said Elinor; Miss Steele;every body; John Dashwood; great deal; Harley Street; Berkeley Street;Miss Dashwoods; young man; Combe Magna; every day; next morning>>> [len(w) for w in text2][1, 5, 3, 11, 2, 4, 6, 4, 1, 7, 1, 3, 6, 2, 8, 3, 4, 4, 7, 2, 6, 1, 5, 6, 3, 5, 1, 3, 5, 9, 3, 2, 7, 4, 1, 2, 3, 6, 2, 5, 8, 1, 5, 1, 3, 4, 11, 1, 4, 3, 5, 2, 2, 11, 1, 6, 2, 2, 6, 3, 7, 4, 7, 2, 5, 11, 12, 1, 3, 4, 5, 2, 4, 6, 3, 1, 6, 3, 1, 3, 5, 2, 1, 4, 8, 3, 1, 3, 3, 3, 4, 5, 2, 3, 4, 1, 3, 1, 8, 9, 3, 11, 2, 3, 6, 1, 3, 3, 5, 1, 5, 8, 3, 5, 6, 3, 3, 1, 8, …
For each word in text2, return its length
>>> fdist2=FreqDist([len(w) for w in text2])>>> fdist2<FreqDist with 141576 outcomes>>>> fdist2.keys()[3, 2, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 16]>>>
There are 141,576 words, each with a length. But there are only 17 different word lengths.Slide27
[(3, 28839), (2, 24826), (1, 23009), (4, 21352), (5, 11438), (6, 9507), (7, 8158), (8, 5676), (9, 3736), (10, 2596), (11, 1278), (12, 711), (13, 334), (14, 87), (15, 24), (17, 3), (16, 2)]>>>
There are 28,839 3-letter words in Sense and Sensibility (not unique words, necessarily)
>>> fdist2.keys()[3, 2, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 16]>>> fdist2.items()[(3, 28839), (2, 24826), (1, 23009), (4, 21352), (5, 11438), (6, 9507), (7, 8158), (8, 5676), (9, 3736), (10, 2596), (11, 1278), (12, 711), (13, 334), (14, 87), (15, 24), (17, 3), (16, 2)]>>> fdist2.max()3>>> fdist228839>>> fdist2334>>>
There are 28,839 3-letter words and 334 13-letter words in Sense and SensibilitySlide28
Table 1.2 – FreqDist functions
create a frequency distribution containing the given samples
increment the count for this sample
count of the number of times a given sample occurred
frequency of a given sample
total number of samples
The samples sorted in order of decreasing frequency
for sample in
iterate over the samples, in order of decreasing frequency
with the greatest count
tabulate the frequency distribution
graphical plot of the frequency
cumulative plot of the frequency distribution
test if samples in fdist1
occur less frequently than in fdist2Slide29
Function Meanings.startswith(t) test if s starts with ts.endswith(t) test if s ends with tt in s test if t is contained inside ss.islower() test if all cased characters in s are lowercases.isupper() test if all cased characters in s are uppercases.isalpha() test if all characters in s are alphabetics.isalnum() test if all characters in s are alphanumerics.isdigit() test if all characters in s are digitss.istitle() test if s is titlecased (all words in s have have initial capitals)
We have seen conditionals and loop statements. These are some special functions for work on textSlide30
>>> sorted([w for w in set(text7) if '-' in w and 'index' in w])>>> sorted([wd for wd in set(text3) if wd.istitle() and len(wd) > 10])>>> sorted([w for w in set(sent7) if not w.islower()])>>> sorted([t for t in set(text2) if 'cie' in t or 'cei' in t])
From the NLTK book: Run the following examples and explain what is happening. Then make up some tests of your own.Slide31
Ending the double count of words
The count of words from the various texts was flawed. How?We hadWhat’s the problem? How do we fix it?
>>> len(text1)260819>>> len(set(text1))19317>>> len(set([word.lower() for word in text1]))17231>>>
() for word in text1 if
Nested loops and loops with conditions
Follow what happens.
>>> for token in sent1:
... print token, 'is a lowercase word'
... print token, 'is a
... print token, 'is punctuation'
Call is a
me is a lowercase word
Ishmael is a
. is punctuation
>>> tricky =
in set(text2) if '
>>> for word in tricky:
... print word,
ancient ceiling conceit conceited conceive conscience
conscientious conscientiously deceitful deceive ...
Automatic Text Understanding
See section 1.5Word sense disambiguation
a. The lost children were found by the searchers (agentive)b. The lost children were found by the mountain (locative)c. The lost children were found by the afternoon (temporal)
a. The thieves stole the paintings. They were subsequently sold.
. The thieves stole the paintings. They were subsequently caught.
. The thieves stole the paintings. They were subsequently found.Slide35
>>> text4.generate()Building ngram index...Fellow - Citizens : Under Providence I have given freedom new reach ,and maintain lasting peace -- based on righteousness and justice .There was this reason only why the cotton - producing States should bepromoted by just and abundant society , on just principles . Theselater years have elapsed , and civil war . More than this , we affirma new beginning is a destiny . May Congress prohibit slavery in theworkshop , in translating humanity ' s strongest , but we have adopted, and fear of God . And , in each>>>
An inaugural address??
-- MIT hoax – conference submissionSlide36
Babel> How long before the next flight to Alice Springs?
0> How long before the next flight to Alice Springs?
2> How long before the following flight to Alice jump?
4> How long before the following flight to Alice do you jump?
6> How long, before the following flight to Alice does, do you jump?
8> How long before the following flight to Alice does, do you jump?
10> How long, before the following flight does to Alice, do do you jump?
12> How long before the following flight does leap to Alice, does you?
Jeopardy and Watson
http://www.youtube.com/watch?v=7h4baBEi0iA&feature=related -- the strange response
http://www.youtube.com/watch?src_vid=7h4baBEi0iA&feature=iv&v=lI-M7O_bRNg&annotation_id=annotation_383798#t=3m11sExplanation of the strange response
The ultimate example of a machine and languageSlide38Slide39Slide40Slide41Slide42Slide43Slide44Slide45Slide46