asp net mvc 5 pdf viewer : C# pdf merge application control utility azure web page asp.net visual studio NaturalLanguageProcessingWithPython6-part2115

CHAPTER 2
Accessing Text Corpora
and Lexical Resources
Practical work in Natural Language Processing typically uses large bodies of linguistic
data, or corpora. The goal of this chapter is to answer the following questions:
1.What are some useful text corpora and lexical resources, and how can we access
them with Python?
2.Which Python constructs are most helpful for this work?
3.How do we avoid repeating ourselves when writing Python code?
This chapter continues to present programming concepts by example, in the context
of a linguistic processing task. We will wait until later before exploring each Python
construct systematically. Don’t worry if you see an example that contains something
unfamiliar; simply try it out and see what it does, and—if you’re game—modify it by
substituting some part of the code with a different text or word. This way you will
associate a task with a programming idiom, and learn the hows and whys later.
2.1  Accessing Text Corpora
As just mentioned, a text corpus is a large body of text. Many corpora are designed to
contain a careful balance of material in one or more genres. We examined some small
text collections in Chapter 1, such as the speeches known as the US Presidential Inau-
gural Addresses. This particular corpus actually contains dozens of individual texts—
one per address—but for convenience we glued them end-to-end and treated them as
a single text. Chapter 1 also used various predefined texts that we accessed by typing
from book import *
. However, since we want to be able to work with other texts, this
section examines a variety of text corpora. We’ll see how to select individual texts, and
how to work with them.
39
C# pdf merge - Merge, append PDF files in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Provide C# Demo Codes for Merging and Appending PDF Document
add pdf files together; batch combine pdf
C# pdf merge - 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
acrobat merge pdf; pdf combine pages
Gutenberg Corpus
NLTK includes a small selection of texts from the Project Gutenberg electronic text
archive, which contains some 25,000 free electronic books, hosted at http://www.gu
tenberg.org/. We begin by getting the Python interpreter to load the NLTK package,
then ask to see 
nltk.corpus.gutenberg.fileids()
, the file identifiers in this corpus:
>>> import nltk
>>> nltk.corpus.gutenberg.fileids()
'shakespeare-macbeth.txt', 'whitman-leaves.txt']
Let’s pick out the first of these texts—Emma by Jane Austen—and give it a short name,
emma
, then find out how many words it contains:
>>> emma = nltk.corpus.gutenberg.words('austen-emma.txt')
>>> len(emma)
192427
In Section 1.1, we showed how you could carry out concordancing of a
text such as 
text1
with the command 
text1.concordance()
. However,
this assumes that you are using one of the nine texts obtained as a result
of doing 
from nltk.book import *
. Now that you have started examining
data from 
nltk.corpus
, as in the previous example, you have to employ
the following pair of statements to perform concordancing and other
tasks from Section 1.1:
>>> emma.concordance("surprize")
When we defined 
emma
, we invoked the 
words()
function of the 
gutenberg
object in
NLTK’s 
corpus
package. But since it is cumbersome to type such long names all the
time, Python provides another version of the 
import
statement, as follows:
>>> from nltk.corpus import gutenberg
>>> gutenberg.fileids()
>>> emma = gutenberg.words('austen-emma.txt')
Let’s write a short program to display other information about each text, by looping
over all the values of 
fileid
corresponding to the 
gutenberg
file identifiers listed earlier
and then computing statistics for each text. For a compact output display, we will make
sure that the numbers are all integers, using 
int()
.
>>> for fileid in gutenberg.fileids():
...     num_chars = len(gutenberg.raw(fileid)) 
...     num_words = len(gutenberg.words(fileid))
...     num_sents = len(gutenberg.sents(fileid))
40 | | Chapter 2: Accessing Text Corpora and Lexical Resources
C# WPF PDF Viewer SDK to view, annotate, convert and print PDF in
C#, C# convert PDF to HTML, C# convert PDF to Word, C# extract text from PDF, C# convert PDF to Jpeg, C# compress PDF, C# print PDF, C# merge PDF files, C# view
apple merge pdf; pdf merger online
C# PDF insert image Library: insert images into PDF in C#.net, ASP
Merge several images into PDF. Insert images into PDF form field. Access to freeware download and online C#.NET class source code.
.net merge pdf files; pdf combine two pages into one
fileid
...
4 21 26 austen-emma.txt
4 23 16 austen-persuasion.txt
4 24 22 austen-sense.txt
4 33 79 bible-kjv.txt
4 18 5 blake-poems.txt
4 17 14 bryant-stories.txt
4 17 12 burgess-busterbrown.txt
4 16 12 carroll-alice.txt
4 17 11 chesterton-ball.txt
4 19 11 chesterton-brown.txt
4 16 10 chesterton-thursday.txt
4 18 24 edgeworth-parents.txt
4 24 15 melville-moby_dick.txt
4 52 10 milton-paradise.txt
4 12 8 shakespeare-caesar.txt
4 13 7 shakespeare-hamlet.txt
4 13 6 shakespeare-macbeth.txt
4 35 12 whitman-leaves.txt
This program displays three statistics for each text: average word length, average sen-
tence length, and the number of times each vocabulary item appears in the text on
average (our lexical diversity score). Observe that average word length appears to be a
general property of English, since it has a recurrent value of 4. (In fact, the average word
length is really 3, not 4, since the 
num_chars
variable counts space characters.) By con-
trast average sentence length and lexical diversity appear to be characteristics of par-
ticular authors.
The previous example also showed how we can access the “raw” text of the book 
,
not split up into tokens. The 
raw()
function gives us the contents of the file without
any linguistic processing. So, for example, 
len(gutenberg.raw('blake-poems.txt')
tells
us how many letters occur in the text, including the spaces between words. The
sents()
function divides the text up into its sentences, where each sentence is a list of
words:
>>> macbeth_sentences
>>> macbeth_sentences[1037]
>>> longest_len = max([len(s) for s in macbeth_sentences])
>>> [s for s in macbeth_sentences if len(s) == longest_len]
'mercilesse', 'Macdonwald', ...], ...]
2.1  Accessing Text Corpora a | | 41
C# HTML5 PDF Viewer SDK to view PDF document online in C#.NET
C#, C# convert PDF to HTML, C# convert PDF to Word, C# extract text from PDF, C# convert PDF to Jpeg, C# compress PDF, C# print PDF, C# merge PDF files, C# view
pdf split and merge; combine pdfs online
C# PDF Image Extract Library: Select, copy, paste PDF images in C#
PDF. |. Home ›› XDoc.PDF ›› C# PDF: Extract PDF Image. A powerful C#.NET PDF control compatible with windows operating system and built on .NET framework.
add pdf together; combine pdf files
Most NLTK corpus readers include a variety of access methods apart
from 
words()
raw()
, and 
sents()
. Richer linguistic content is available
from some corpora, such as part-of-speech tags, dialogue tags, syntactic
trees, and so forth; we will see these in later chapters.
Web and Chat Text
Although Project Gutenberg contains thousands of books, it represents established
literature. It is important to consider less formal language as well. NLTK’s small col-
lection of web text includes content from a Firefox discussion forum, conversations
overheard in New York, the movie script of Pirates of the Carribean, personal adver-
tisements, and wine reviews:
>>> from nltk.corpus import webtext
>>> for fileid in webtext.fileids():
...     print fileid, webtext.raw(fileid)[:65], '...'
...
There is also a corpus of instant messaging chat sessions, originally collected by the
Naval Postgraduate School for research on automatic detection of Internet predators.
The corpus contains over 10,000 posts, anonymized by replacing usernames with
generic names of the form “UserNNN”, and manually edited to remove any other
identifying information. The corpus is organized into 15 files, where each file contains
several hundred posts collected on a given date, for an age-specific chatroom (teens,
20s, 30s, 40s, plus a generic adults chatroom). The filename contains the date, chat-
room, and number of posts; e.g., 
10-19-20s_706posts.xml
contains 706 posts gathered
from the 20s chat room on 10/19/2006.
>>> from nltk.corpus import nps_chat
>>> chatroom = nps_chat.posts('10-19-20s_706posts.xml')
>>> chatroom[123]
Brown Corpus
The Brown Corpus was the first million-word electronic corpus of English, created in
1961 at Brown University. This corpus contains text from 500 sources, and the sources
have been categorized by genre, such as news, editorial, and so on. Table 2-1 gives an
example of each genre (for a complete list, see http://icame.uib.no/brown/bcm-los.html).
42 | | Chapter 2: Accessing Text Corpora and Lexical Resources
C# PDF Convert to Jpeg SDK: Convert PDF to JPEG images in C#.net
›› C# PDF: Convert PDF to Jpeg. C# PDF - Convert PDF to JPEG in C#.NET. C#.NET PDF to JPEG Converting & Conversion Control. Convert PDF to JPEG Using C#.NET.
pdf merge documents; scan multiple pages into one pdf
C# PDF Page Insert Library: insert pages into PDF file in C#.net
RasterEdge offers detailed guidances for each of those page processing functions, such as how to merge PDF document files by C# code, how to rotate PDF
add pdf files together reader; merge pdf
Table 2-1. Example document for each section of the Brown Corpus
ID
File
Genre
Description
A16
ca16
news
Chicago Tribune: Society Reportage
B02
cb02
editorial
Christian Science Monitor: Editorials
C17
cc17
reviews
Time Magazine: Reviews
D12
cd12
religion
Underwood: Probing the Ethics of Realtors
E36
ce36
hobbies
Norling: Renting a Car in Europe
F25
cf25
lore
Boroff: Jewish Teenage Culture
G22
cg22
belles_lettres
Reiner: Coping with Runaway Technology
H15
ch15
government
US Office of Civil and Defence Mobilization: The Family Fallout Shelter
J17
cj19
learned
Mosteller: Probability with Statistical Applications
K04
ck04
fiction
W.E.B. Du Bois: Worlds of Color
L13
cl13
mystery
Hitchens: Footsteps in the Night
M01 cm01 science_fiction n Heinlein: Stranger in a Strange Land
N14
cn15
adventure
Field: Rattlesnake Ridge
P12
cp12
romance
Callaghan: A Passion in Rome
R06
cr06
humor
Thurber: The Future, If Any, of Comedy
We can access the corpus as a list of words or a list of sentences (where each sentence
is itself just a list of words). We can optionally specify particular categories or files to
read:
>>> from nltk.corpus import brown
>>> brown.categories()
'science_fiction']
>>> brown.words(categories='news')
>>> brown.words(fileids=['cg22'])
The Brown Corpus is a convenient resource for studying systematic differences between
genres, a kind of linguistic inquiry known as stylistics. Let’s compare genres in their
usage of modal verbs. The first step is to produce the counts for a particular genre.
Remember to 
import nltk
before doing the following:
>>> from nltk.corpus import brown
>>> news_text = brown.words(categories='news')
>>> fdist = nltk.FreqDist([w.lower() for w in news_text])
>>> for m in modals:
...     print m + ':', fdist[m],
2.1  Accessing Text Corpora a | | 43
C# PDF Text Extract Library: extract text content from PDF file in
XDoc.PDF ›› C# PDF: Extract PDF Text. C# PDF - Extract Text from PDF in C#.NET. Best C#.NET PDF text extraction library and component for free download.
append pdf; split pdf into multiple files
C# PDF File Split Library: Split, seperate PDF into multiple files
PDF ›› C# PDF: Split PDF. C# PDF - Split PDF Document in C#.NET. Explain How to Split PDF Document in Visual C#.NET Application. C# DLLs: Split PDF Document.
add two pdf files together; merge pdf online
...
can: 94 could: 87 may: 93 might: 38 must: 53 will: 389
Your Turn: Choose a different section of the Brown Corpus, and adapt
the preceding example to count a selection of wh words, such as what,
whenwherewho and why.
Next, we need to obtain counts for each genre of interest. We’ll use NLTK’s support
for conditional frequency distributions. These are presented systematically in Sec-
tion 2.2, where we also unpick the following code line by line. For the moment, you
can ignore the details and just concentrate on the output.
>>> cfd = nltk.ConditionalFreqDist(
...           (genre, word)
...           for genre in brown.categories()
...           for word in brown.words(categories=genre))
>>> cfd.tabulate(conditions=genres, samples=modals)
can could  may might must will
news   93   86   66   38   50  389
religion   82   59   78   12   54   71
hobbies  268   58  131   22   83  264
science_fiction   16   49    4   12    8   16
romance   74  193   11   51   45   43
humor   16   30    8    8    9   13
Observe that the most frequent modal in the news genre is will, while the most frequent
modal in the romance genre is could. Would you have predicted this? The idea that
word counts might distinguish genres will be taken up again in Chapter 6.
Reuters Corpus
The Reuters Corpus contains 10,788 news documents totaling 1.3 million words. The
documents have been classified into 90 topics, and grouped into two sets, called “train-
ing” and “test”; thus, the text with fileid 
'test/14826'
is a document drawn from the
test set. This split is for training and testing algorithms that automatically detect the
topic of a document, as we will see in Chapter 6.
>>> from nltk.corpus import reuters
>>> reuters.fileids()
>>> reuters.categories()
Unlike the Brown Corpus, categories in the Reuters Corpus overlap with each other,
simply because a news story often covers multiple topics. We can ask for the topics
44 | | Chapter 2: Accessing Text Corpora and Lexical Resources
covered by one or more documents, or for the documents included in one or more
categories. For convenience, the corpus methods accept a single fileid or a list of fileids.
>>> reuters.categories('training/9865')
['barley', 'corn', 'grain', 'wheat']
>>> reuters.categories(['training/9865', 'training/9880'])
>>> reuters.fileids('barley')
>>> reuters.fileids(['barley', 'corn'])
Similarly, we can specify the words or sentences we want in terms of files or categories.
The first handful of words in each of these texts are the titles, which by convention are
stored as uppercase.
>>> reuters.words('training/9865')[:14]
>>> reuters.words(['training/9865', 'training/9880'])
>>> reuters.words(categories='barley')
>>> reuters.words(categories=['barley', 'corn'])
Inaugural Address Corpus
In Section 1.1, we looked at the Inaugural Address Corpus, but treated it as a single
text. The graph in Figure 1-2 used “word offset” as one of the axes; this is the numerical
index of the word in the corpus, counting from the first word of the first address.
However, the corpus is actually a collection of 55 texts, one for each presidential ad-
dress. An interesting property of this collection is its time dimension:
>>> from nltk.corpus import inaugural
>>> inaugural.fileids()
>>> [fileid[:4] for fileid in inaugural.fileids()]
Notice that the year of each text appears in its filename. To get the year out of the
filename, we extracted the first four characters, using 
fileid[:4]
.
Let’s look at how the words America and citizen are used over time. The following code
converts the words in the Inaugural corpus to lowercase using 
w.lower()
, then checks
whether they start with either of the “targets” 
america
or 
citizen
using 
startswith()
. Thus it will count words such as American’s and Citizens. We’ll learn about condi-
tional frequency distributions in Section 2.2; for now, just consider the output, shown
in Figure 2-1.
2.1  Accessing Text Corpora a | | 45
>>> cfd = nltk.ConditionalFreqDist(
...           (target, file[:4])
...           for fileid in inaugural.fileids()
...           for w in inaugural.words(fileid)
...           for target in ['america', 'citizen']
...           if w.lower().startswith(target)) 
>>> cfd.plot()
Figure 2-1. Plot of a conditional frequency distribution: All words in the Inaugural Address Corpus
that begin with america or citizen are counted; separate counts are kept for each address; these are
plotted so that trends in usage over time can be observed; counts are not normalized for document
length.
Annotated Text Corpora
Many text corpora contain linguistic annotations, representing part-of-speech tags,
named entities, syntactic structures, semantic roles, and so forth. NLTK provides
convenient ways to access several of these corpora, and has data packages containing
corpora and corpus samples, freely downloadable for use in teaching and research.
Table 2-2  lists some of the corpora. For information about downloading them, see
http://www.nltk.org/data. For more examples of how to access NLTK corpora, please
consult the Corpus HOWTO at http://www.nltk.org/howto.
Table 2-2. Some of the corpora and corpus samples distributed with NLTK
Corpus
Compiler
Contents
Brown Corpus
Francis, Kucera
15 genres, 1.15M words, tagged, categorized
CESS Treebanks
CLiC-UB
1M words, tagged and parsed (Catalan, Spanish)
Chat-80 Data Files
Pereira & Warren
World Geographic Database
CMU Pronouncing Dictionary
CMU
127k entries
CoNLL 2000 Chunking Data
CoNLL
270k words, tagged and chunked
46 | | Chapter 2: Accessing Text Corpora and Lexical Resources
Corpus
Compiler
Contents
CoNLL 2002 Named Entity
CoNLL
700k words, POS and named entity tagged (Dutch, Spanish)
CoNLL 2007 Dependency Parsed Tree-
banks (selections)
CoNLL
150k words, dependency parsed (Basque, Catalan)
Dependency Treebank
Narad
Dependency parsed version of Penn Treebank sample
Floresta Treebank
Diana Santos et al.
9k sentences, tagged and parsed (Portuguese)
Gazetteer Lists
Various
Lists of cities and countries
Genesis Corpus
Misc web sources
6 texts, 200k words, 6 languages
Gutenberg (selections)
Hart, Newby, et al.
18 texts, 2M words
Inaugural Address Corpus
CSpan
U.S. Presidential Inaugural Addresses (1789–present)
Indian POS Tagged Corpus
Kumaran et al.
60k words, tagged (Bangla, Hindi, Marathi, Telugu)
MacMorpho Corpus
NILC, USP, Brazil
1M words, tagged (Brazilian Portuguese)
Movie Reviews
Pang, Lee
2k movie reviews with sentiment polarity classification
Names Corpus
Kantrowitz, Ross
8k male and female names
NIST 1999 Info Extr (selections)
Garofolo
63k words, newswire and named entity SGML markup
NPS Chat Corpus
Forsyth, Martell
10k IM chat posts, POS and dialogue-act tagged
Penn Treebank (selections)
LDC
40k words, tagged and parsed
PP Attachment Corpus
Ratnaparkhi
28k prepositional phrases, tagged as noun or verb modifiers
Proposition Bank
Palmer
113k propositions, 3,300 verb frames
Question Classification
Li, Roth
6k questions, categorized
Reuters Corpus
Reuters
1.3M words, 10k news documents, categorized
Roget’s Thesaurus
Project Gutenberg
200k words, formatted text
RTE Textual Entailment
Dagan et al.
8k sentence pairs, categorized
SEMCOR
Rus, Mihalcea
880k words, POS and sense tagged
Senseval 2 Corpus
Pedersen
600k words, POS and sense tagged
Shakespeare texts (selections)
Bosak
8 books in XML format
State of the Union Corpus
CSpan
485k words, formatted text
Stopwords Corpus
Porter et al.
2,400 stopwords for 11 languages
Swadesh Corpus
Wiktionary
Comparative wordlists in 24 languages
Switchboard Corpus (selections)
LDC
36 phone calls, transcribed, parsed
TIMIT Corpus (selections)
NIST/LDC
Audio files and transcripts for 16 speakers
Univ Decl of Human Rights
United Nations
480k words, 300+ languages
VerbNet 2.1
Palmer et al.
5k verbs, hierarchically organized, linked to WordNet
Wordlist Corpus
OpenOffice.org et al. . 960k words and 20k affixes for 8 languages
WordNet 3.0 (English)
Miller, Fellbaum
145k synonym sets
2.1  Accessing Text Corpora a | | 47
Corpora in Other Languages
NLTK comes with corpora for many languages, though in some cases you will need to
learn how to manipulate character encodings in Python before using these corpora (see
Section 3.3).
>>> nltk.corpus.cess_esp.words()
>>> nltk.corpus.floresta.words()
>>> nltk.corpus.indian.words('hindi.pos')
\x82\xe0\xa4\xa7', ...]
>>> nltk.corpus.udhr.fileids()
>>> nltk.corpus.udhr.words('Javanese-Latin1')[11:]
The last of these corpora, 
udhr
, contains the Universal Declaration of Human Rights
in over 300 languages. The fileids for this corpus include information about the char-
acter encoding used in the file, such as 
UTF8
or 
Latin1
. Let’s use a conditional frequency
distribution to examine the differences in word lengths for a selection of languages
included in the 
udhr
corpus. The output is shown in Figure 2-2 (run the program your-
self to see a color plot). Note that 
True
and 
False
are Python’s built-in Boolean values.
>>> from nltk.corpus import udhr
>>> cfd = nltk.ConditionalFreqDist(
...           (lang, len(word))
...           for lang in languages
...           for word in udhr.words(lang + '-Latin1'))
>>> cfd.plot(cumulative=True)
Your Turn: Pick a language of interest in 
udhr.fileids()
, and define a
variable 
raw_text = udhr.raw(Language-Latin1)
. Now plot a frequency
distribution of the letters of the text using
nltk.FreqDist(raw_text).plot().
Unfortunately, for many languages, substantial corpora are not yet available. Often
there is insufficient government or industrial support for developing language resour-
ces, and individual efforts are piecemeal and hard to discover or reuse. Some languages
have no established writing system, or are endangered. (See Section 2.7 for suggestions
on how to locate language resources.)
48 | | Chapter 2: Accessing Text Corpora and Lexical Resources
Documents you may be interested
Documents you may be interested