asp net mvc 5 pdf viewer : Batch merge pdf control application system azure web page .net console NaturalLanguageProcessingWithPython20-part2080

CHAPTER 5
Categorizing and Tagging Words
Back in elementary school you learned the difference between nouns, verbs, adjectives,
and adverbs. These “word classes” are not just the idle invention of grammarians, but
are useful categories for many language processing tasks. As we will see, they arise from
simple analysis of the distribution of words in text. The goal of this chapter is to answer
the following questions:
1.What are lexical categories, and how are they used in natural language processing?
2.What is a good Python data structure for storing words and their categories?
3.How can we automatically tag each word of a text with its word class?
Along the way, we’ll cover some fundamental techniques in NLP, including sequence
labeling, n-gram models, backoff, and evaluation. These techniques are useful in many
areas, and tagging gives us a simple context in which to present them. We will also see
how tagging is the second step in the typical NLP pipeline, following tokenization.
The process of classifying words into their parts-of-speech and labeling them accord-
ingly is known as part-of-speech taggingPOS tagging, or simply tagging. Parts-
of-speech are also known as word classes or lexical categories. The collection of tags
used for a particular task is known as a tagset. Our emphasis in this chapter is on
exploiting tags, and tagging text automatically.
5.1  Using a Tagger
A part-of-speech tagger, or POS tagger, processes a sequence of words, and attaches
a part of speech tag to each word (don’t forget to 
import nltk
):
>>> nltk.pos_tag(text)
('completely', 'RB'), ('different', 'JJ')]
Here we see that and is 
CC
, a coordinating conjunction; now and completely are 
RB
, or
adverbs; for is 
IN
, a preposition; something is 
NN
, a noun; and different is 
JJ
, an adjective.
179
Batch merge pdf - Merge, append PDF files in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Provide C# Demo Codes for Merging and Appending PDF Document
pdf combine files online; c# merge pdf files
Batch merge pdf - 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 together one file; batch combine pdf
NLTK provides documentation for each tag, which can be queried using
the tag, e.g., 
nltk.help.upenn_tagset('RB')
, or a regular expression,
e.g., 
nltk.help.upenn_brown_tagset('NN.*')
. Some corpora have RE-
ADME files with tagset documentation; see 
nltk.name.readme()
, sub-
stituting in the name of the corpus.
Let’s look at another example, this time including some homonyms:
>>> nltk.pos_tag(text)
Notice that refuse and permit both appear as a present tense verb (
VBP
) and a noun
(
NN
). E.g., refUSE is a verb meaning “deny,” while REFuse is a noun meaning “trash”
(i.e., they are not homophones). Thus, we need to know which word is being used in
order to pronounce the text correctly. (For this reason, text-to-speech systems usually
perform POS tagging.)
Your Turn: Many words, like ski and race, can be used as nouns or
verbs with no difference in pronunciation. Can you think of others?
Hint: think of a commonplace object and try to put the word to before
it to see if it can also be a verb, or think of an action and try to put the
before it to see if it can also be a noun. Now make up a sentence with
both uses of this word, and run the POS tagger on this sentence.
Lexical categories like “noun” and part-of-speech tags like 
NN
seem to have their uses,
but the details will be obscure to many readers. You might wonder what justification
there is for introducing this extra level of information. Many of these categories arise
from superficial analysis of the distribution of words in text. Consider the following
analysis involving woman (a noun), bought (a verb), over (a preposition), and the (a
determiner). The 
text.similar()
method takes a word w, finds all contexts w
1
w w
2
,
then finds all words w' that appear in the same context, i.e. w
1
w'w
2
.
>>> text.similar('woman')
Building word-context index...
man time day year car moment world family house country child boy
state job way war girl place room word
>>> text.similar('bought')
made said put done seen had found left given heard brought got been
was set told took in felt that
>>> text.similar('over')
in on to of and for with from at by that into as up out down through
is all about
>>> text.similar('the')
a his this their its her an that our any all one these my in your no
some other and
180 | | Chapter 5: Categorizing and Tagging Words
VB.NET Image: PDF to Image Converter, Convert Batch PDF Pages to
VB.NET Imaging - Convert PDF to Image Using VB. VB.NET Code for Converting PDF to Image within .NET Imaging Converting SDK. Visual
add multiple pdf files into one online; c# merge pdf
Convert Images, Batch Conversion in .NET Winfroms| Online
VB.NET File: Merge PDF; VB.NET File: Split PDF Generator. PDF Reader. Twain Scanning. DICOM Reading. speed; Include single image conversion; Support batch conversion
pdf mail merge plug in; combine pdf online
Observe that searching for woman finds nouns; searching for bought mostly finds verbs;
searching for over generally finds prepositions; searching for the finds several deter-
miners. A tagger can correctly identify the tags on these words in the context of a
sentence, e.g., The woman bought over $150,000 worth of clothes.
A tagger can also model our knowledge of unknown words; for example, we can guess
that scrobbling is probably a verb, with the root scrobble, and likely to occur in contexts
like he was scrobbling.
5.2  Tagged Corpora
Representing Tagged Tokens
By convention in NLTK, a tagged token is represented using a tuple consisting of the
token and the tag. We can create one of these special tuples from the standard string
representation of a tagged token, using the function 
str2tuple()
:
>>> tagged_token = nltk.tag.str2tuple('fly/NN')
>>> tagged_token
('fly', 'NN')
>>> tagged_token[0]
'fly'
>>> tagged_token[1]
'NN'
We can construct a list of tagged tokens directly from a string. The first step is to
tokenize the string to access the individual 
word/tag
strings, and then to convert each
of these into a tuple (using 
str2tuple()
).
>>> sent = '''
... The/AT grand/JJ jury/NN commented/VBD on/IN a/AT number/NN of/IN
... other/AP topics/NNS ,/, AMONG/IN them/PPO the/AT Atlanta/NP and/CC
... accepted/VBN practices/NNS which/WDT inure/VB to/IN the/AT best/JJT
... interest/NN of/IN both/ABX governments/NNS ''/'' ./.
... '''
>>> [nltk.tag.str2tuple(t) for t in sent.split()]
Reading Tagged Corpora
Several of the corpora included with NLTK have been tagged for their part-of-speech.
Here’s an example of what you might see if you opened a file from the Brown Corpus
with a text editor:
The/at Fulton/np-tl County/nn-tl Grand/jj-tl Jury/nn-tl said/vbd Friday/nr an/at inves-
tigation/nn of/in Atlanta’s/np$ recent/jj primary/nn election/nn produced/vbd 
/
no/at
evidence/nn ''/'' that/cs any/dti irregularities/nns took/vbd place/nn ./.
5.2  Tagged Corpora a | | 181
Convert Image & Documents Formats in Web Viewer| Online Tutorials
VB.NET File: Merge PDF; VB.NET File: Split PDF Generator. PDF Reader. Twain Scanning. DICOM Reading. Support for single conversion; Include batch conversion; Convert
add pdf pages together; pdf combine two pages into one
C# PDF: Use C# APIs to Control Fully on PDF Rendering Process
toolkit, users are able to control rendered image resolution, region size of PDF page or rendered picture, as well as batch or individual PDF to image
reader create pdf multiple files; pdf combine pages
Other corpora use a variety of formats for storing part-of-speech tags. NLTK’s corpus
readers provide a uniform interface so that you don’t have to be concerned with the
different file formats. In contrast with the file extract just shown, the corpus reader for
the Brown Corpus represents the data as shown next. Note that part-of-speech tags
have been converted to uppercase; this has become standard practice since the Brown
Corpus was published.
>>> nltk.corpus.brown.tagged_words()
>>> nltk.corpus.brown.tagged_words(simplify_tags=True)
Whenever a corpus contains tagged text, the NLTK corpus interface will have a
tagged_words()
method. Here are some more examples, again using the output format
illustrated for the Brown Corpus:
>>> print nltk.corpus.nps_chat.tagged_words()
>>> nltk.corpus.conll2000.tagged_words()
>>> nltk.corpus.treebank.tagged_words()
Not all corpora employ the same set of tags; see the tagset help functionality and the
readme()
methods mentioned earlier for documentation. Initially we want to avoid the
complications of these tagsets, so we use a built-in mapping to a simplified tagset:
>>> nltk.corpus.brown.tagged_words(simplify_tags=True)
>>> nltk.corpus.treebank.tagged_words(simplify_tags=True)
Tagged corpora for several other languages are distributed with NLTK, including Chi-
nese, Hindi, Portuguese, Spanish, Dutch, and Catalan. These usually contain non-
ASCII text, and Python always displays this in hexadecimal when printing a larger
structure such as a list.
>>> nltk.corpus.sinica_treebank.tagged_words()
>>> nltk.corpus.indian.tagged_words()
...]
>>> nltk.corpus.mac_morpho.tagged_words()
>>> nltk.corpus.conll2002.tagged_words()
>>> nltk.corpus.cess_cat.tagged_words()
If your environment is set up correctly, with appropriate editors and fonts, you should
be able to display individual strings in a human-readable way. For example, Fig-
ure 5-1 shows data accessed using 
nltk.corpus.indian
.
182 | | Chapter 5: Categorizing and Tagging Words
VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to
NET convert PDF to Jpeg, VB.NET compress PDF, VB.NET print PDF, VB.NET merge PDF files, VB Professional .NET PDF converter control for batch conversion.
build pdf from multiple files; break pdf file into multiple files
VB.NET Create PDF from Word Library to convert docx, doc to PDF in
text from PDF, VB.NET convert PDF to Jpeg, VB.NET compress PDF, VB.NET print PDF, VB.NET merge PDF files, VB.NET Professional .NET PDF batch conversion control.
attach pdf to mail merge; adding pdf pages together
If the corpus is also segmented into sentences, it will have a 
tagged_sents()
method
that divides up the tagged words into sentences rather than presenting them as one big
list. This will be useful when we come to developing automatic taggers, as they are
trained and tested on lists of sentences, not words.
A Simplified Part-of-Speech Tagset
Tagged corpora use many different conventions for tagging words. To help us get star-
ted, we will be looking at a simplified tagset (shown in Table 5-1).
Table 5-1. Simplified part-of-speech tagset
Tag
Meaning
Examples
ADJ
adjective
new, good, high, special, big, local
ADV
adverb
really, already, still, early, now
CNJ
conjunction
and, or, but, if, while, although
DET
determiner
the, a, some, most, every, no
EX
existential
there, there’s
FW
foreign word
dolce, ersatz, esprit, quo, maitre
MOD
modal verb
will, can, would, may, must, should
N
noun
year, home, costs, time, education
NP
proper noun
Alison, Africa, April, Washington
NUM
number
twenty-four, fourth, 1991, 14:24
PRO
pronoun
he, their, her, its, my, I, us
P
preposition
on, of, at, with, by, into, under
TO
the word to
to
UH
interjection
ah, bang, ha, whee, hmpf, oops
V
verb
is, has, get, do, make, see, run
VD
past tense
said, took, told, made, asked
VG
present participle e making, going, playing, working
VN
past participle
given, taken, begun, sung
WH
wh determiner
who, which, when, what, where, how
5.2  Tagged Corpora a | | 183
C# PDF Convert to Jpeg SDK: Convert PDF to JPEG images in C#.net
NET. .NET library to batch convert PDF files to jpg image files. High quality jpeg file can be exported from PDF in .NET framework.
attach pdf to mail merge in word; add pdf files together
VB.NET Create PDF from Excel Library to convert xlsx, xls to PDF
fonts fast. Professional .NET PDF converter component for batch conversion. Merge all Excel sheets to one PDF file in VB.NET. Change
pdf merge documents; best pdf merger
Figure 5-1. POS tagged data from four Indian languages: Bangla, Hindi, Marathi, and Telugu.
Let’s see which of these tags are the most common in the news category of the Brown
Corpus:
>>> from nltk.corpus import brown
>>> tag_fd = nltk.FreqDist(tag for (word, tag) in brown_news_tagged)
>>> tag_fd.keys()
Your Turn: Plot the frequency distribution just shown using
tag_fd.plot(cumulative=True)
. What percentage of words are tagged
using the first five tags of the above list?
We can use these tags to do powerful searches using a graphical POS-concordance tool
nltk.app.concordance()
. Use it to search for any combination of words and POS tags,
e.g., 
N N N N
hit/VD
hit/VN
, or 
the ADJ man
.
Nouns
Nouns generally refer to people, places, things, or concepts, e.g., woman, Scotland,
book, intelligence. Nouns can appear after determiners and adjectives, and can be the
subject or object of the verb, as shown in Table 5-2.
Table 5-2. Syntactic patterns involving some nouns
Word
After a determiner
Subject of the verb
woman
the woman who I saw yesterday ...
the woman sat down
Scotland
the Scotland I remember as a child ...
Scotland has five million people
book
the book I bought yesterday ...
this book recounts the colonization of Australia
intelligence
the intelligence displayed by the child ...
Mary’s intelligence impressed her teachers
The simplified noun tags are 
N
for common nouns like book, and 
NP
for proper nouns
like Scotland.
184 | | Chapter 5: Categorizing and Tagging Words
Let’s inspect some tagged text to see what parts-of-speech occur before a noun, with
the most frequent ones first. To begin with, we construct a list of bigrams whose mem-
bers are themselves word-tag pairs, such as 
(('The', 'DET'), ('Fulton', 'NP'))
and
(('Fulton', 'NP'), ('County', 'N'))
. Then we construct a 
FreqDist
from the tag parts
of the bigrams.
>>> word_tag_pairs = nltk.bigrams(brown_news_tagged)
This confirms our assertion that nouns occur after determiners and adjectives, includ-
ing numeral adjectives (tagged as 
NUM
).
Verbs
Verbs are words that describe events and actions, e.g., fall and eat, as shown in Ta-
ble 5-3. In the context of a sentence, verbs typically express a relation involving the
referents of one or more noun phrases.
Table 5-3. Syntactic patterns involving some verbs
Word
Simple
With modifiers and adjuncts (italicized)
fall
Rome fell
Dot com stocks suddenly fell like a stone
eat
Mice eat cheese
John ate the pizza with gusto
What are the most common verbs in news text? Let’s sort all the verbs by frequency:
>>> wsj = nltk.corpus.treebank.tagged_words(simplify_tags=True)
>>> word_tag_fd = nltk.FreqDist(wsj)
Note that the items being counted in the frequency distribution are word-tag pairs.
Since words and tags are paired, we can treat the word as a condition and the tag as an
event, and initialize a conditional frequency distribution with a list of condition-event
pairs. This lets us see a frequency-ordered list of tags given a word:
>>> cfd1 = nltk.ConditionalFreqDist(wsj)
>>> cfd1['yield'].keys()
['V', 'N']
>>> cfd1['cut'].keys()
['V', 'VD', 'N', 'VN']
We can reverse the order of the pairs, so that the tags are the conditions, and the words
are the events. Now we can see likely words for a given tag:
5.2  Tagged Corpora a | | 185
>>> cfd2['VN'].keys()
To clarify the distinction between 
VD
(past tense) and 
VN
(past participle), let’s find
words that can be both 
VD
and 
VN
, and see some surrounding text:
>>> idx1 = wsj.index(('kicked', 'VD'))
>>> wsj[idx1-4:idx1+1]
('kicked', 'VD')]
>>> idx2 = wsj.index(('kicked', 'VN'))
>>> wsj[idx2-4:idx2+1]
In this case, we see that the past participle of kicked is preceded by a form of the auxiliary
verb have. Is this generally true?
Your Turn: Given the list of past participles specified by
cfd2['VN'].keys()
, try to collect a list of all the word-tag pairs that im-
mediately precede items in that list.
Adjectives and Adverbs
Two other important word classes are adjectives and adverbs. Adjectives describe
nouns, and can be used as modifiers (e.g., large in the large pizza), or as predicates (e.g.,
the pizza is large). English adjectives can have internal structure (e.g., fall+ing in the
falling stocks). Adverbs modify verbs to specify the time, manner, place, or direction of
the event described by the verb (e.g., quickly in the stocks fell quickly). Adverbs may
also modify adjectives (e.g., really in Mary’s teacher was really nice).
English has several categories of closed class words in addition to prepositions, such
as articles (also often called determiners) (e.g., thea), modals (e.g., shouldmay),
and personal pronouns (e.g., she, they). Each dictionary and grammar classifies these
words differently.
Your Turn: If you are uncertain about some of these parts-of-speech,
study them using 
nltk.app.concordance()
, or watch some of the School-
house Rock! grammar videos available at YouTube, or consult Sec-
tion 5.9.
186 | | Chapter 5: Categorizing and Tagging Words
Unsimplified Tags
Let’s find the most frequent nouns of each noun part-of-speech type. The program in
Example 5-1 finds all tags starting with 
NN
, and provides a few example words for each
one. You will see that there are many variants of 
NN
; the most important contain 
$
for
possessive nouns, 
S
for plural nouns (since plural nouns typically end in s), and 
P
for
proper nouns. In addition, most of the tags have suffix modifiers: 
-NC
for citations,
-HL
for words in headlines, and 
-TL
for titles (a feature of Brown tags).
Example 5-1. Program to find the most frequent noun tags.
def findtags(tag_prefix, tagged_text):
if tag.startswith(tag_prefix))
>>> for tag in sorted(tagdict):
...     print tag, tagdict[tag]
...
NN$-HL ["Golf's", "Navy's"]
NN-NC ['eva', 'ova', 'aya']
NNS$-HL ["Dealers'", "Idols'"]
NNS-TL-HL ['Nations']
When we come to constructing part-of-speech taggers later in this chapter, we will use
the unsimplified tags.
Exploring Tagged Corpora
Let’s briefly return to the kinds of exploration of corpora we saw in previous chapters,
this time exploiting POS tags.
Suppose we’re studying the word often and want to see how it is used in text. We could
ask to see the words that follow often:
>>> brown_learned_text = brown.words(categories='learned')
However, it’s probably more instructive use the 
tagged_words()
method to look at the
part-of-speech tag of the following words:
5.2  Tagged Corpora a | | 187
>>> fd = nltk.FreqDist(tags)
>>> fd.tabulate()
VN    V   VD  DET  ADJ  ADV    P  CNJ    ,   TO   VG   WH  VBZ    .
15   12    8    5    5    4    4    3    3    1    1    1    1    1
Notice that the most high-frequency parts-of-speech following often are verbs. Nouns
never appear in this position (in this particular corpus).
Next, let’s look at some larger context, and find words involving particular sequences
of tags and words (in this case 
"<Verb> to <Verb>"
). In Example 5-2, we consider each
three-word window in the sentence 
, and check whether they meet our criterion 
.
If the tags match, we print the corresponding words 
.
Example 5-2. Searching for three-word phrases using POS tags.
from nltk.corpus import brown
def process(sentence):
for (w1,t1), (w2,t2), (w3,t3) in nltk.trigrams(sentence): 
print w1, w2, w3 
>>> for tagged_sent in brown.tagged_sents():
...     process(tagged_sent)
...
combined to achieve
continue to place
serve to protect
wanted to wait
allowed to place
expected to become
...
Finally, let’s look for words that are highly ambiguous as to their part-of-speech tag.
Understanding why such words are tagged as they are in each context can help us clarify
the distinctions between the tags.
>>> data = nltk.ConditionalFreqDist((word.lower(), tag)
>>> for word in data.conditions():
...     if len(data[word]) > 3:
...         tags = data[word].keys()
...         print word, ' '.join(tags)
...
best ADJ ADV NP V
better ADJ ADV V DET
close ADV ADJ V N
cut V N VN VD
even ADV DET ADJ V
grant NP N V -
hit V VD VN N
lay ADJ V NP VD
left VD ADJ N VN
188 | | Chapter 5: Categorizing and Tagging Words
Documents you may be interested
Documents you may be interested