Your Turn: Write down all the senses of the word dish that you can
think of. Now, explore this word with the help of WordNet, using the
same operations shown earlier.
The WordNet Hierarchy
WordNet synsets correspond to abstract concepts, and they don’t always have corre-
sponding words in English. These concepts are linked together in a hierarchy. Some
concepts are very general, such as EntityState, Event; these are called unique begin-
ners or root synsets. Others, such as gas guzzler and hatchback, are much more specific.
A small portion of a concept hierarchy is illustrated in Figure 2-8.
Figure 2-8. Fragment of WordNet concept hierarchy: Nodes correspond to synsets; edges indicate the
hypernym/hyponym relation, i.e., the relation between superordinate and subordinate concepts.
WordNet makes it easy to navigate between concepts. For example, given a concept
like motorcar, we can look at the concepts that are more specific—the (immediate)
hyponyms.
>>> motorcar = wn.synset('car.n.01')
>>> types_of_motorcar = motorcar.hyponyms()
>>> types_of_motorcar[26]
Synset('ambulance.n.01')
2.5  WordNet t | | 69
Reader create pdf multiple files - Merge, append PDF files in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Provide C# Demo Codes for Merging and Appending PDF Document
acrobat merge pdf; c# merge pdf files into one
Reader create pdf multiple files - VB.NET PDF File Merge Library: Merge, append PDF files in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET Guide and Sample Codes to Merge PDF Documents in .NET Project
add pdf files together online; combine pdf online
'wagon']
We can also navigate up the hierarchy by visiting hypernyms. Some words have multiple
paths, because they can be classified in more than one way. There are two paths between
car.n.01
and 
entity.n.01
because 
wheeled_vehicle.n.01
can be classified as both a
vehicle and a container.
>>> motorcar.hypernyms()
[Synset('motor_vehicle.n.01')]
>>> paths = motorcar.hypernym_paths()
>>> len(paths)
2
>>> [synset.name for synset in paths[0]]
>>> [synset.name for synset in paths[1]]
We can get the most general hypernyms (or root hypernyms) of a synset as follows:
>>> motorcar.root_hypernyms()
[Synset('entity.n.01')]
Your Turn: Try out NLTK’s convenient graphical WordNet browser:
nltk.app.wordnet()
. Explore the WordNet hierarchy by following the
hypernym and hyponym links.
More Lexical Relations
Hypernyms and hyponyms are called lexical relations because they relate one synset
to another. These two relations navigate up and down the “is-a” hierarchy. Another
important way to navigate the WordNet network is from items to their components
(meronyms) or to the things they are contained in (holonyms). For example, the parts
of a tree are its trunk, crown, and so on; these are the 
part_meronyms()
. The substance
a tree is made of includes heartwood and sapwood, i.e., the 
substance_meronyms()
. A
collection of trees forms a forest, i.e., the 
member_holonyms()
:
>>> wn.synset('tree.n.01').part_meronyms()
Synset('trunk.n.01'), Synset('limb.n.02')]
>>> wn.synset('tree.n.01').substance_meronyms()
[Synset('heartwood.n.01'), Synset('sapwood.n.01')]
70 | | Chapter 2: Accessing Text Corpora and Lexical Resources
C# PDF File Split Library: Split, seperate PDF into multiple files
pages. Divide PDF file into multiple files by outputting PDF file size. Split outputFiles); Split PDF Document into Multiple PDF Files in C#. You
add pdf files together; build pdf from multiple files
VB.NET PDF File Split Library: Split, seperate PDF into multiple
Split PDF Document into Multiple PDF Files Demo Code in String = Program.RootPath + "\\" 1.pdf" Dim outputFileName to (Page Count - 1). ' Create output PDF
append pdf files reader; c# combine pdf
>>> wn.synset('tree.n.01').member_holonyms()
[Synset('forest.n.01')]
To see just how intricate things can get, consider the word mint, which has several
closely related senses. We can see that 
mint.n.04
is part of 
mint.n.02
and the substance
from which 
mint.n.05
is made.
>>> for synset in wn.synsets('mint', wn.NOUN):
...     print synset.name + ':', synset.definition
...
small mauve flowers
mint.n.03: any member of the mint family of plants
mint.n.04: the leaves of a mint plant used fresh or candied
mint.n.05: a candy that is flavored with a mint oil
mint.n.06: a plant where money is coined by authority of the government
>>> wn.synset('mint.n.04').part_holonyms()
[Synset('mint.n.02')]
>>> wn.synset('mint.n.04').substance_holonyms()
[Synset('mint.n.05')]
There are also relationships between verbs. For example, the act of walking involves
the act of stepping, so walking entails stepping. Some verbs have multiple entailments:
>>> wn.synset('walk.v.01').entailments()
[Synset('step.v.01')]
>>> wn.synset('eat.v.01').entailments()
[Synset('swallow.v.01'), Synset('chew.v.01')]
>>> wn.synset('tease.v.03').entailments()
[Synset('arouse.v.07'), Synset('disappoint.v.01')]
Some lexical relationships hold between lemmas, e.g., antonymy:
>>> wn.lemma('supply.n.02.supply').antonyms()
[Lemma('demand.n.02.demand')]
>>> wn.lemma('rush.v.01.rush').antonyms()
[Lemma('linger.v.04.linger')]
>>> wn.lemma('horizontal.a.01.horizontal').antonyms()
>>> wn.lemma('staccato.r.01.staccato').antonyms()
[Lemma('legato.r.01.legato')]
You can see the lexical relations, and the other methods defined on a synset, using
dir()
. For example, try 
dir(wn.synset('harmony.n.02'))
.
Semantic Similarity
We have seen that synsets are linked by a complex network of lexical relations. Given
a particular synset, we can traverse the WordNet network to find synsets with related
meanings. Knowing which words are semantically related is useful for indexing a col-
lection of texts, so that a search for a general term such as vehicle will match documents
containing specific terms such as limousine.
2.5  WordNet t | | 71
C# Create PDF Library SDK to convert PDF from other file formats
Tell Users How to Create New PDF File and Load PDF from Other Files. Free PDF creator SDK for Visual Studio .NET. Batch create adobe PDF from multiple forms.
all jpg to one pdf converter; batch combine pdf
VB.NET Create PDF from CSV to convert csv files to PDF in vb.net
XImage.Barcode Reader. XImage.Barcode Generator. Help VB.NET Users to Create PDF Document from CSV File. CSV files are saved to PDF documents by keeping original
c# merge pdf pages; pdf merger
Recall that each synset has one or more hypernym paths that link it to a root hypernym
such as 
entity.n.01
. Two synsets linked to the same root may have several hypernyms
in common (see Figure 2-8). If two synsets share a very specific hypernym—one that
is low down in the hypernym hierarchy—they must be closely related.
>>> right = wn.synset('right_whale.n.01')
>>> orca = wn.synset('orca.n.01')
>>> minke = wn.synset('minke_whale.n.01')
>>> tortoise = wn.synset('tortoise.n.01')
>>> novel = wn.synset('novel.n.01')
>>> right.lowest_common_hypernyms(minke)
[Synset('baleen_whale.n.01')]
>>> right.lowest_common_hypernyms(orca)
[Synset('whale.n.02')]
>>> right.lowest_common_hypernyms(tortoise)
[Synset('vertebrate.n.01')]
>>> right.lowest_common_hypernyms(novel)
[Synset('entity.n.01')]
Of course we know that whale is very specific (and baleen whale even more so), whereas
vertebrate is more general and entity is completely general. We can quantify this concept
of generality by looking up the depth of each synset:
>>> wn.synset('baleen_whale.n.01').min_depth()
14
>>> wn.synset('whale.n.02').min_depth()
13
>>> wn.synset('vertebrate.n.01').min_depth()
8
>>> wn.synset('entity.n.01').min_depth()
0
Similarity measures have been defined over the collection of WordNet synsets that
incorporate this insight. For example, 
path_similarity
assigns a score in the range
0
1
based on the shortest path that connects the concepts in the hypernym hierarchy
(
-1
is returned in those cases where a path cannot be found). Comparing a synset with
itself will return 
1
. Consider the following similarity scores, relating right whale to minke
whaleorcatortoise, and novel. Although the numbers won’t mean much, they decrease
as we move away from the semantic space of sea creatures to inanimate objects.
>>> right.path_similarity(minke)
0.25
>>> right.path_similarity(orca)
0.16666666666666666
>>> right.path_similarity(tortoise)
0.076923076923076927
>>> right.path_similarity(novel)
0.043478260869565216
72 | | Chapter 2: Accessing Text Corpora and Lexical Resources
C# Create PDF from CSV to convert csv files to PDF in C#.net, ASP.
Create PDF from CSV in both .NET WinForms and ASP.NET CSV files are saved to PDF documents by keeping Supports converting multiple sheets CSV file to one PDF
reader combine pdf; batch pdf merger
C# Create PDF from images Library to convert Jpeg, png images to
Create PDF from images in both .NET WinForms and ASP.NET multiple image formats into one or multiple PDF file in example shows how to build a PDF document with
add pdf files together online; c# combine pdf
Several other similarity measures are available; you can type 
help(wn)
for more information. NLTK also includes VerbNet, a hierarchical verb
lexicon linked to WordNet. It can be accessed with 
nltk.corpus.verb
net
.
2.6  Summary
• A text corpus is a large, structured collection of texts. NLTK comes with many
corpora, e.g., the Brown Corpus, 
nltk.corpus.brown
.
• Some text corpora are categorized, e.g., by genre or topic; sometimes the categories
of a corpus overlap each other.
• A conditional frequency distribution is a collection of frequency distributions, each
one for a different condition. They can be used for counting word frequencies,
given a context or a genre.
• Python programs more than a few lines long should be entered using a text editor,
saved to a file with a .py extension, and accessed using an 
import
statement.
• Python functions permit you to associate a name with a particular block of code,
and reuse that code as often as necessary.
• Some functions, known as “methods,” are associated with an object, and we give
the object name followed by a period followed by the method name, like this:
x.funct(y)
, e.g., 
word.isalpha()
.
• To find out about some variable 
v
, type 
help(v)
in the Python interactive interpreter
to read the help entry for this kind of object.
• WordNet is a semantically oriented dictionary of English, consisting of synonym
sets—or synsets—and organized into a network.
• Some functions are not available by default, but must be accessed using Python’s
import
statement.
2.7  Further Reading
Extra materials for this chapter are posted at http://www.nltk.org/, including links to
freely available resources on the Web. The corpus methods are summarized in the
Corpus HOWTO, at http://www.nltk.org/howto, and documented extensively in the
online API documentation.
Significant sources of published corpora are the Linguistic Data Consortium (LDC) and
the European Language Resources Agency (ELRA). Hundreds of annotated text and
speech corpora are available in dozens of languages. Non-commercial licenses permit
the data to be used in teaching and research. For some corpora, commercial licenses
are also available (but for a higher fee).
2.7  Further Reading g | 73
VB.NET Create PDF from images Library to convert Jpeg, png images
Support create PDF from multiple image formats in VB.NET Turn multiple image formats into one or multiple PDF file. shows how to build a PDF document with three
add two pdf files together; reader combine pdf
VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.
XImage.Barcode Reader. XImage.Barcode Generator. C#.NET Annotate PDF in WPF, C#.NET PDF Create, C#.NET Turn multiple pages PDF into multiple jpg files in VB.NET
.net merge pdf files; adding pdf pages together
These and many other language resources have been documented using OLAC Meta-
data, and can be searched via the OLAC home page at http://www.language-archives
.org/Corpora List (see http://gandalf.aksis.uib.no/corpora/sub.html) is a mailing list for
discussions about corpora, and you can find resources by searching the list archives or
posting to the list. The most complete inventory of the world’s languages is Ethno-
loguehttp://www.ethnologue.com/. Of 7,000 languages, only a few dozen have sub-
stantial digital resources suitable for use in NLP.
This chapter has touched on the field of Corpus Linguistics. Other useful books in
this area include (Biber, Conrad, & Reppen, 1998), (McEnery, 2006), (Meyer, 2002),
(Sampson & McCarthy, 2005), and (Scott & Tribble, 2006). Further readings in quan-
titative data analysis in linguistics are: (Baayen, 2008), (Gries, 2009), and (Woods,
Fletcher, & Hughes, 1986).
The original description of WordNet is (Fellbaum, 1998). Although WordNet was
originally developed for research in psycholinguistics, it is now widely used in NLP and
Information Retrieval. WordNets are being developed for many other languages, as
documented at http://www.globalwordnet.org/. For a study of WordNet similarity
measures, see (Budanitsky & Hirst, 2006).
Other topics touched on in this chapter were phonetics and lexical semantics, and we
refer readers to Chapters 7 and 20 of (Jurafsky & Martin, 2008).
2.8  Exercises
1.○ Create a variable 
phrase
containing a list of words. Experiment with the opera-
tions described in this chapter, including addition, multiplication, indexing, slic-
ing, and sorting.
2.○ Use the corpus module to explore 
austen-persuasion.txt
. How many word
tokens does this book have? How many word types?
3.○ Use the Brown Corpus reader 
nltk.corpus.brown.words()
or the Web Text Cor-
pus reader 
nltk.corpus.webtext.words()
to access some sample text in two differ-
ent genres.
4.○ Read in the texts of the State of the Union addresses, using the 
state_union
corpus
reader. Count occurrences of 
men
women
, and 
people
in each document. What has
happened to the usage of these words over time?
5.○ Investigate the holonym-meronym relations for some nouns. Remember that
there are three kinds of holonym-meronym relation, so you need to use 
member_mer
onyms()
part_meronyms()
substance_meronyms()
member_holonyms()
,
part_holonyms()
, and 
substance_holonyms()
.
6.○ In the discussion of comparative wordlists, we created an object called 
trans
late
, which you could look up using words in both German and Italian in order
74 | | Chapter 2: Accessing Text Corpora and Lexical Resources
VB.NET PDF Library SDK to view, edit, convert, process PDF file
quality PDF conversions to or from multiple supported images Tell VB.NET users how to: create a new formats; merge, append, and split PDF files; insert, delete
pdf combine two pages into one; add pdf together
to get corresponding words in English. What problem might arise with this ap-
proach? Can you suggest a way to avoid this problem?
7.○ According to Strunk and White’s Elements of Style, the word however, used at
the start of a sentence, means “in whatever way” or “to whatever extent,” and not
“nevertheless.” They give this example of correct usage: However you advise him,
he will probably do as he thinks best. (http://www.bartleby.com/141/strunk3.html)
Use the concordance tool to study actual usage of this word in the various texts we
have been considering. See also the LanguageLog posting “Fossilized prejudices
about ‘however’” at http://itre.cis.upenn.edu/~myl/languagelog/archives/001913
.html.
8.◑ Define a conditional frequency distribution over the Names Corpus that allows
you to see which initial letters are more frequent for males versus females (see
Figure 2-7).
9.◑ Pick a pair of texts and study the differences between them, in terms of vocabu-
lary, vocabulary richness, genre, etc. Can you find pairs of words that have quite
different meanings across the two texts, such as monstrous in Moby Dick and in
Sense and Sensibility?
10.◑ Read the BBC News article: “UK’s Vicky Pollards ‘left behind’” at http://news
.bbc.co.uk/1/hi/education/6173441.stm. The article gives the following statistic
about teen language: “the top 20 words used, including yeah, no, but and like,
account for around a third of all words.” How many word types account for a third
of all word tokens, for a variety of text sources? What do you conclude about this
statistic? Read more about this on LanguageLog, at http://itre.cis.upenn.edu/~myl/
languagelog/archives/003993.html.
11.◑ Investigate the table of modal distributions and look for other patterns. Try to
explain them in terms of your own impressionistic understanding of the different
genres. Can you find other closed classes of words that exhibit significant differ-
ences across different genres?
12.◑ The CMU Pronouncing Dictionary contains multiple pronunciations for certain
words. How many distinct words does it contain? What fraction of words in this
dictionary have more than one possible pronunciation?
13.◑ What percentage of noun synsets have no hyponyms? You can get all noun syn-
sets using 
wn.all_synsets('n')
.
14.◑ Define a function 
supergloss(s)
that takes a synset 
s
as its argument and returns
a string consisting of the concatenation of the definition of 
s
, and the definitions
of all the hypernyms and hyponyms of 
s
.
15.◑ Write a program to find all words that occur at least three times in the Brown
Corpus.
16.◑ Write a program to generate a table of lexical diversity scores (i.e., token/type
ratios), as we saw in Table 1-1. Include the full set of Brown Corpus genres
2.8  Exercises s | | 75
(
nltk.corpus.brown.categories()
). Which genre has the lowest diversity (greatest
number of tokens per type)? Is this what you would have expected?
17.◑ Write a function that finds the 50 most frequently occurring words of a text that
are not stopwords.
18.◑ Write a program to print the 50 most frequent bigrams (pairs of adjacent words)
of a text, omitting bigrams that contain stopwords.
19.◑ Write a program to create a table of word frequencies by genre, like the one given
in Section 2.1 for modals. Choose your own words and try to find words whose
presence (or absence) is typical of a genre. Discuss your findings.
20.◑ Write a function 
word_freq()
that takes a word and the name of a section of the
Brown Corpus as arguments, and computes the frequency of the word in that sec-
tion of the corpus.
21.◑ Write a program to guess the number of syllables contained in a text, making
use of the CMU Pronouncing Dictionary.
22.◑ Define a function 
hedge(text)
that processes a text and produces a new version
with the word 
'like'
between every third word.
23.● Zipf’s Law: Let f(w) be the frequency of a word w in free text. Suppose that all
the words of a text are ranked according to their frequency, with the most frequent
word first. Zipf’s Law states that the frequency of a word type is inversely
proportional to its rank (i.e., f × r = k, for some constant k). For example, the 50th
most common word type should occur three times as frequently as the 150th most
common word type.
a.Write a function to process a large text and plot word frequency against word
rank using 
pylab.plot
. Do you confirm Zipf’s law? (Hint: it helps to use a
logarithmic scale.) What is going on at the extreme ends of the plotted line?
b.Generate random text, e.g., using 
random.choice("abcdefg ")
, taking care to
include the space character. You will need to 
import random
first. Use the string
concatenation operator to accumulate characters into a (very) long string.
Then tokenize this string, generate the Zipf plot as before, and compare the
two plots. What do you make of Zipf’s Law in the light of this?
24.● Modify the text generation program in Example 2-1 further, to do the following
tasks:
76 | | Chapter 2: Accessing Text Corpora and Lexical Resources
a.Store the n most likely words in a list 
words
, then randomly choose a word
from the list using 
random.choice()
. (You will need to 
import random
first.)
b.Select a particular genre, such as a section of the Brown Corpus or a Genesis
translation, one of the Gutenberg texts, or one of the Web texts. Train the
model on this corpus and get it to generate random text. You may have to
experiment with different start words. How intelligible is the text? Discuss the
strengths and weaknesses of this method of generating random text.
c.Now train your system using two distinct genres and experiment with gener-
ating text in the hybrid genre. Discuss your observations.
25.● Define a function 
find_language()
that takes a string as its argument and returns
a list of languages that have that string as a word. Use the 
udhr
corpus and limit
your searches to files in the Latin-1 encoding.
26.● What is the branching factor of the noun hypernym hierarchy? I.e., for every
noun synset that has hyponyms—or children in the hypernym hierarchy—how
many do they have on average? You can get all noun synsets using 
wn.all_syn
sets('n')
.
27.● The polysemy of a word is the number of senses it has. Using WordNet, we can
determine that the noun dog has seven senses with 
len(wn.synsets('dog', 'n'))
.
Compute the average polysemy of nouns, verbs, adjectives, and adverbs according
to WordNet.
28.● Use one of the predefined similarity measures to score the similarity of each of
the following pairs of words. Rank the pairs in order of decreasing similarity. How
close is your ranking to the order given here, an order that was established exper-
imentally by (Miller & Charles, 1998): car-automobile, gem-jewel, journey-voyage,
boy-lad, coast-shore, asylum-madhouse, magician-wizard, midday-noon, furnace-
stove, food-fruit, bird-cock, bird-crane, tool-implement, brother-monk, lad-
brother, crane-implement, journey-car, monk-oracle, cemetery-woodland, food-
rooster, coast-hill, forest-graveyard, shore-woodland, monk-slave, coast-forest,
lad-wizard, chord-smile, glass-magician, rooster-voyage, noon-string.
2.8  Exercises s | | 77
Documents you may be interested
Documents you may be interested