>>> nltk.corpus.timit.word_times('dr1-fvmh0/sa1')
('all', 43091, 46052), ('year', 46052, 50522)]
In addition to this text data, TIMIT includes a lexicon that provides the canonical
pronunciation of every word, which can be compared with a particular utterance:
>>> timitdict = nltk.corpus.timit.transcription_dict()
>>> phonetic[17:30]
This gives us a sense of what a speech processing system would have to do in producing
or recognizing speech in this particular dialect (New England). Finally, TIMIT includes
demographic data about the speakers, permitting fine-grained study of vocal, social,
and gender characteristics.
>>> nltk.corpus.timit.spkrinfo('dr1-fvmh0')
comments='BEST NEW ENGLAND ACCENT SO FAR')
Notable Design Features
TIMIT illustrates several key features of corpus design. First, the corpus contains two
layers of annotation, at the phonetic and orthographic levels. In general, a text or speech
corpus may be annotated at many different linguistic levels, including morphological,
syntactic, and discourse levels. Moreover, even at a given level there may be different
labeling schemes or even disagreement among annotators, such that we want to rep-
resent multiple versions. A second property of TIMIT is its balance across multiple
dimensions of variation, for coverage of dialect regions and diphones. The inclusion of
speaker demographics brings in many more independent variables that may help to
account for variation in the data, and which facilitate later uses of the corpus for pur-
poses that were not envisaged when the corpus was created, such as sociolinguistics.
A third property is that there is a sharp division between the original linguistic event
captured as an audio recording and the annotations of that event. The same holds true
of text corpora, in the sense that the original text usually has an external source, and
is considered to be an immutable artifact. Any transformations of that artifact which
involve human judgment—even something as simple as tokenization—are subject to
later revision; thus it is important to retain the source material in a form that is as close
to the original as possible.
A fourth feature of TIMIT is the hierarchical structure of the corpus. With 4 files per
sentence, and 10 sentences for each of 500 speakers, there are 20,000 files. These are
organized into a tree structure, shown schematically in Figure 11-2. At the top level
11.1  Corpus Structure: A Case Study y | | 409
Merge pdf files - 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 together; add pdf files together
Merge pdf 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
combine pdf online; merge pdf files
there is a split between training and testing sets, which gives away its intended use for
developing and evaluating statistical models.
Finally, notice that even though TIMIT is a speech corpus, its transcriptions and asso-
ciated data are just text, and can be processed using programs just like any other text
corpus. Therefore, many of the computational methods described in this book are ap-
plicable. Moreover, notice that all of the data types included in the TIMIT Corpus fall
into the two basic categories of lexicon and text, which we will discuss later. Even the
speaker demographics data is just another instance of the lexicon data type.
This last observation is less surprising when we consider that text and record structures
are the primary domains for the two subfields of computer science that focus on data
management, namely text retrieval and databases. A notable feature of linguistic data
management is that it usually brings both data types together, and that it can draw on
results and techniques from both fields.
Figure 11-2. Structure of the published TIMIT Corpus: The CD-ROM contains doc, train, and test
directories at the top level; the train and test directories both have eight sub-directories, one per dialect
region; each of these contains further subdirectories, one per speaker; the contents of the directory for
female speaker aks0 are listed, showing 10 wav files accompanied by a text transcription, a word-
aligned transcription, and a phonetic transcription.
410 | | Chapter 11: Managing Linguistic Data
Online Merge PDF files. Best free online merge PDF tool.
Online Merge PDF, Multiple PDF files into one. Download Free Trial. Easy converting! We try to make it as easy as possible to merge your PDF files.
c# merge pdf files; combine pdfs online
C# PDF File Split Library: Split, seperate PDF into multiple files
Also able to combine generated split PDF document files with other PDF files to form a new PDF file. Split PDF Document into Multiple PDF Files in C#.
split pdf into multiple files; acrobat merge pdf files
Fundamental Data Types
Despite its complexity, the TIMIT Corpus contains only two fundamental data types,
namely lexicons and texts. As we saw in Chapter 2, most lexical resources can be rep-
resented using a record structure, i.e., a key plus one or more fields, as shown in
Figure 11-3. A lexical resource could be a conventional dictionary or comparative
wordlist, as illustrated. It could also be a phrasal lexicon, where the key field is a phrase
rather than a single word. A thesaurus also consists of record-structured data, where
we look up entries via non-key fields that correspond to topics. We can also construct
special tabulations (known as paradigms) to illustrate contrasts and systematic varia-
tion, as shown in Figure 11-3 for three verbs. TIMIT’s speaker table is also a kind of
lexicon.
Figure 11-3. Basic linguistic data types—lexicons and texts: Amid their diversity, lexicons have a
record structure, whereas annotated texts have a temporal organization.
At the most abstract level, a text is a representation of a real or fictional speech event,
and the time-course of that event carries over into the text itself. A text could be a small
unit, such as a word or sentence, or a complete narrative or dialogue. It may come with
annotations such as part-of-speech tags, morphological analysis, discourse structure,
and so forth. As we saw in the IOB tagging technique (Chapter 7), it is possible to
represent higher-level constituents using tags on individual words. Thus the abstraction
of text shown in Figure 11-3 is sufficient.
11.1  Corpus Structure: A Case Study y | | 411
C# TIFF: C#.NET Code to Merge and Append TIFF Files
string[] tifFiles = new string[] { @"C:\demo1.tif", @"C:\demo2.tif" }; // Merge these Tiff files to a single Tiff file and save it to output.tif.
apple merge pdf; add pdf pages together
VB.NET PDF Convert to HTML SDK: Convert PDF to html files in vb.
' Convert PDF file to HTML5 files DocumentConverter.ConvertToHtml5("..\1.pdf", "..output\", RelativeType.SVG). Copyright © <2000-2016> by <RasterEdge.com>.
pdf split and merge; c# merge pdf files into one
Despite the complexities and idiosyncrasies of individual corpora, at base they are col-
lections of texts together with record-structured data. The contents of a corpus are
often biased toward one or the other of these types. For example, the Brown Corpus
contains 500 text files, but we still use a table to relate the files to 15 different genres.
At the other end of the spectrum, WordNet contains 117,659 synset records, yet it
incorporates many example sentences (mini-texts) to illustrate word usages. TIMIT is
an interesting midpoint on this spectrum, containing substantial free-standing material
of both the text and lexicon types.
11.2  The Life Cycle of a Corpus
Corpora are not born fully formed, but involve careful preparation and input from
many people over an extended period. Raw data needs to be collected, cleaned up,
documented, and stored in a systematic structure. Various layers of annotation might
be applied, some requiring specialized knowledge of the morphology or syntax of the
language. Success at this stage depends on creating an efficient workflow involving
appropriate tools and format converters. Quality control procedures can be put in place
to find inconsistencies in the annotations, and to ensure the highest possible level of
inter-annotator agreement. Because of the scale and complexity of the task, large cor-
pora may take years to prepare, and involve tens or hundreds of person-years of effort.
In this section, we briefly review the various stages in the life cycle of a corpus.
Three Corpus Creation Scenarios
In one type of corpus, the design unfolds over in the course of the creator’s explorations.
This is the pattern typical of traditional “field linguistics,” in which material from elic-
itation sessions is analyzed as it is gathered, with tomorrow’s elicitation often based on
questions that arise in analyzing today’s. The resulting corpus is then used during sub-
sequent years of research, and may serve as an archival resource indefinitely. Comput-
erization is an obvious boon to work of this type, as exemplified by the popular program
Shoebox, now over two decades old and re-released as Toolbox (see Section 2.4). Other
software tools, even simple word processors and spreadsheets, are routinely used to
acquire the data. In the next section, we will look at how to extract data from these
sources.
Another corpus creation scenario is typical of experimental research where a body of
carefully designed material is collected from a range of human subjects, then analyzed
to evaluate a hypothesis or develop a technology. It has become common for such
databases to be shared and reused within a laboratory or company, and often to be
published more widely. Corpora of this type are the basis of the “common task” method
of research management, which over the past two decades has become the norm in
government-funded research programs in language technology. We have already en-
countered many such corpora in the earlier chapters; we will see how to write Python
412 | | Chapter 11: Managing Linguistic Data
C# Word - Merge Word Documents in C#.NET
File: Merge Word Files. |. Home ›› XDoc.Word ›› C# Word: Merge Word Files. Combine and Merge Multiple Word Files into One Using C#.
pdf merger; append pdf files reader
C# PDF Convert to HTML SDK: Convert PDF to html files in C#.net
How to Use C#.NET Demo Code to Convert PDF Document to HTML5 Files in C#.NET Class. Add necessary references: RasterEdge.Imaging.Basic.dll.
break a pdf into multiple files; combine pdf files
programs to implement the kinds of curation tasks that are necessary before such cor-
pora are published.
Finally, there are efforts to gather a “reference corpus” for a particular language, such
as the American National Corpus (ANC) and the British National Corpus (BNC). Here
the goal has been to produce a comprehensive record of the many forms, styles, and
uses of a language. Apart from the sheer challenge of scale, there is a heavy reliance on
automatic annotation tools together with post-editing to fix any errors. However, we
can write programs to locate and repair the errors, and also to analyze the corpus for
balance.
Quality Control
Good tools for automatic and manual preparation of data are essential. However, the
creation of a high-quality corpus depends just as much on such mundane things as
documentation, training, and workflow. Annotation guidelines define the task and
document the markup conventions. They may be regularly updated to cover difficult
cases, along with new rules that are devised to achieve more consistent annotations.
Annotators need to be trained in the procedures, including methods for resolving cases
not covered in the guidelines. A workflow needs to be established, possibly with sup-
porting software, to keep track of which files have been initialized, annotated, validated,
manually checked, and so on. There may be multiple layers of annotation, provided by
different specialists. Cases of uncertainty or disagreement may require adjudication.
Large annotation tasks require multiple annotators, which raises the problem of
achieving consistency. How consistently can a group of annotators perform? We can
easily measure consistency by having a portion of the source material independently
annotated by two people. This may reveal shortcomings in the guidelines or differing
abilities with the annotation task. In cases where quality is paramount, the entire corpus
can be annotated twice, and any inconsistencies adjudicated by an expert.
It is considered best practice to report the inter-annotator agreement that was achieved
for a corpus (e.g., by double-annotating 10% of the corpus). This score serves as a
helpful upper bound on the expected performance of any automatic system that is
trained on this corpus.
Caution!
Care should be exercised when interpreting an inter-annotator agree-
ment score, since annotation tasks vary greatly in their difficulty. For
example, 90% agreement would be a terrible score for part-of-speech
tagging, but an exceptional score for semantic role labeling.
The Kappa coefficient κ measures agreement between two people making category
judgments, correcting for expected chance agreement. For example, suppose an item
is to be annotated, and four coding options are equally likely. In this case, two people
coding randomly would be expected to agree 25% of the time. Thus, an agreement of
11.2  The Life Cycle of a Corpus s | | 413
C# PowerPoint - Merge PowerPoint Documents in C#.NET
File: Merge PowerPoint Files. |. Home ›› XDoc.PowerPoint ›› C# PowerPoint: Merge PowerPoint Files. C# DLLs: Merge PowerPoint Files.
add multiple pdf files into one online; asp.net merge pdf files
VB.NET PDF File Split Library: Split, seperate PDF into multiple
splitter control provides VB.NET developers an easy to use solution that they can split target multi-page PDF document file to one-page PDF files or they can
acrobat combine pdf files; add pdf files together reader
25% will be assigned κ = 0, and better levels of agreement will be scaled accordingly.
For an agreement of 50%, we would get κ = 0.333, as 50 is a third of the way from 25
to 100. Many other agreement measures exist; see 
help(nltk.metrics.agreement)
for
details.
We can also measure the agreement between two independent segmentations of lan-
guage input, e.g., for tokenization, sentence segmentation, and named entity recogni-
tion. In Figure 11-4 we see three possible segmentations of a sequence of items which
might have been produced by annotators (or programs). Although none of them agree
exactly, S
1
and S
2
are in close agreement, and we would like a suitable measure. Win-
dowdiff is a simple algorithm for evaluating the agreement of two segmentations by
running a sliding window over the data and awarding partial credit for near misses. If
we preprocess our tokens into a sequence of zeros and ones, to record when a token is
followed by a boundary, we can represent the segmentations as strings and apply the
windowdiff
scorer.
>>> s1 = "00000010000000001000000"
>>> s2 = "00000001000000010000000"
>>> s3 = "00010000000000000001000"
>>> nltk.windowdiff(s1, s1, 3)
0
>>> nltk.windowdiff(s1, s2, 3)
4
>>> nltk.windowdiff(s2, s3, 3)
16
In this example, the window had a size of 3. The 
windowdiff
computation slides this
window across a pair of strings. At each position it totals up the number of boundaries
found inside this window, for both strings, then computes the difference. These dif-
ferences are then summed. We can increase or shrink the window size to control the
sensitivity of the measure.
Curation Versus Evolution
As large corpora are published, researchers are increasingly likely to base their inves-
tigations on balanced, focused subsets that were derived from corpora produced for
Figure 11-4. Three segmentations of a sequence: The small rectangles represent characters, words,
sentences, in short, any sequence which might be divided into linguistic units; S
1
and S
2
are in close
agreement, but both differ significantly from S
3
.
414 | | Chapter 11: Managing Linguistic Data
entirely different reasons. For instance, the Switchboard database, originally collected
for speaker identification research, has since been used as the basis for published studies
in speech recognition, word pronunciation, disfluency, syntax, intonation, and dis-
course structure. The motivations for recycling linguistic corpora include the desire to
save time and effort, the desire to work on material available to others for replication,
and sometimes a desire to study more naturalistic forms of linguistic behavior than
would be possible otherwise. The process of choosing a subset for such a study may
count as a non-trivial contribution in itself.
In addition to selecting an appropriate subset of a corpus, this new work could involve
reformatting a text file (e.g., converting to XML), renaming files, retokenizing the text,
selecting a subset of the data to enrich, and so forth. Multiple research groups might
do this work independently, as illustrated in Figure 11-5. At a later date, should some-
one want to combine sources of information from different versions, the task will
probably be extremely onerous.
Figure 11-5. Evolution of a corpus over time: After a corpus is published, research groups will use it
independently, selecting and enriching different pieces; later research that seeks to integrate separate
annotations confronts the difficult challenge of aligning the annotations.
The task of using derived corpora is made even more difficult by the lack of any record
about how the derived version was created, and which version is the most up-to-date.
An alternative to this chaotic situation is for a corpus to be centrally curated, and for
committees of experts to revise and extend it at periodic intervals, considering sub-
missions from third parties and publishing new releases from time to time. Print dic-
tionaries and national corpora may be centrally curated in this way. However, for most
corpora this model is simply impractical.
A middle course is for the original corpus publication to have a scheme for identifying
any sub-part. Each sentence, tree, or lexical entry could have a globally unique identi-
fier, and each token, node, or field (respectively) could have a relative offset. Annota-
tions, including segmentations, could reference the source using this identifier scheme
(a method which is known as standoff annotation). This way, new annotations could
be distributed independently of the source, and multiple independent annotations of
the same source could be compared and updated without touching the source.
If the corpus publication is provided in multiple versions, the version number or date
could be part of the identification scheme. A table of correspondences between
11.2  The Life Cycle of a Corpus s | | 415
identifiers across editions of the corpus would permit any standoff annotations to be
updated easily.
Caution!
Sometimes an updated corpus contains revisions of base material that
has been externally annotated. Tokens might be split or merged, and
constituents may have been rearranged. There may not be a one-to-one
correspondence between old and new identifiers. It is better to cause
standoff annotations to break on such components of the new version
than to silently allow their identifiers to refer to incorrect locations.
11.3  Acquiring Data
Obtaining Data from the Web
The Web is a rich source of data for language analysis purposes. We have already
discussed methods for accessing individual files, RSS feeds, and search engine results
(see Section 3.1). However, in some cases we want to obtain large quantities of web text.
The simplest approach is to obtain a published corpus of web text. The ACL Special
Interest Group on Web as Corpus (SIGWAC) maintains a list of resources at http://
www.sigwac.org.uk/. The advantage of using a well-defined web corpus is that they are
documented, stable, and permit reproducible experimentation.
If the desired content is localized to a particular website, there are many utilities for
capturing all the accessible contents of a site, such as GNU Wget (http://www.gnu.org/
software/wget/). For maximal flexibility and control, a web crawler can be used, such
as Heritrix (http://crawler.archive.org/). Crawlers permit fine-grained control over
where to look, which links to follow, and how to organize the results. For example, if
we want to compile a bilingual text collection having corresponding pairs of documents
in each language, the crawler needs to detect the structure of the site in order to extract
the correspondence between the documents, and it needs to organize the downloaded
pages in such a way that the correspondence is captured. It might be tempting to write
your own web crawler, but there are dozens of pitfalls having to do with detecting
MIME types, converting relative to absolute URLs, avoiding getting trapped in cyclic
link structures, dealing with network latencies, avoiding overloading the site or being
banned from accessing the site, and so on.
Obtaining Data from Word Processor Files
Word processing software is often used in the manual preparation of texts and lexicons
in projects that have limited computational infrastructure. Such projects often provide
templates for data entry, though the word processing software does not ensure that the
data is correctly structured. For example, each text may be required to have a title and
date. Similarly, each lexical entry may have certain obligatory fields. As the data grows
416 | | Chapter 11: Managing Linguistic Data
in size and complexity, a larger proportion of time may be spent maintaining its con-
sistency.
How can we extract the content of such files so that we can manipulate it in external
programs? Moreover, how can we validate the content of these files to help authors
create well-structured data, so that the quality of the data can be maximized in the
context of the original authoring process?
Consider a dictionary in which each entry has a part-of-speech field, drawn from a set
of 20 possibilities, displayed after the pronunciation field, and rendered in 11-point
bold type. No conventional word processor has search or macro functions capable of
verifying that all part-of-speech fields have been correctly entered and displayed. This
task requires exhaustive manual checking. If the word processor permits the document
to be saved in a non-proprietary format, such as text, HTML, or XML, we can some-
times write programs to do this checking automatically.
Consider the following fragment of a lexical entry: “sleep [sli:p] v.i. condition of body
and mind...”. We can key in such text using MSWord, then “Save as Web Page,” then
inspect the resulting HTML file:
<p class=MsoNormal>sleep
<span style='mso-spacerun:yes'> </span>
[<span class=SpellE>sli:p</span>]
<span style='mso-spacerun:yes'> </span>
<b><span style='font-size:11.0pt'>v.i.</span></b>
<span style='mso-spacerun:yes'> </span>
<i>a condition of body and mind ...<o:p></o:p></i>
</p>
Observe that the entry is represented as an HTML paragraph, using the 
<p>
element,
and that the part of speech appears inside a 
<span style='font-size:11.0pt'>
element.
The following program defines the set of legal parts-of-speech, 
legal_pos
. Then it ex-
tracts all 11-point content from the dict.htm file and stores it in the set 
used_pos
. Observe
that the search pattern contains a parenthesized sub-expression; only the material that
matches this subexpression is returned by 
re.findall
. Finally, the program constructs
the set of illegal parts-of-speech as the set difference between 
used_pos
and 
legal_pos
:
>>> pattern = re.compile(r"'font-size:11.0pt'>([a-z.]+)<")
>>> document = open("dict.htm").read()
>>> used_pos = set(re.findall(pattern, document))
>>> illegal_pos = used_pos.difference(legal_pos)
>>> print list(illegal_pos)
['v.i', 'intrans']
This simple program represents the tip of the iceberg. We can develop sophisticated
tools to check the consistency of word processor files, and report errors so that the
maintainer of the dictionary can correct the original file using the original word
processor.
11.3  Acquiring Data a | | 417
Once we know the data is correctly formatted, we can write other programs to convert
the data into a different format. The program in Example 11-1 strips out the HTML
markup using 
nltk.clean_html()
, extracts the words and their pronunciations, and
generates output in “comma-separated value” (CSV) format.
Example 11-1. Converting HTML created by Microsoft Word into comma-separated values.
def lexical_data(html_file):
SEP = '_ENTRY'
html = open(html_file).read()
html = re.sub(r'<p', SEP + '<p', html)
text = nltk.clean_html(html)
text = ' '.join(text.split())
for entry in text.split(SEP):
if entry.count(' ') > 2:
yield entry.split(' ', 3)
>>> import csv
>>> writer = csv.writer(open("dict1.csv", "wb"))
>>> writer.writerows(lexical_data("dict.htm"))
Obtaining Data from Spreadsheets and Databases
Spreadsheets are often used for acquiring wordlists or paradigms. For example, a com-
parative wordlist may be created using a spreadsheet, with a row for each cognate set
and a column for each language (see 
nltk.corpus.swadesh
and 
www.rosettapro
ject.org
). Most spreadsheet software can export their data in CSV format. As we will
see later, it is easy for Python programs to access these using the 
csv
module.
Sometimes lexicons are stored in a full-fledged relational database. When properly
normalized, these databases can ensure the validity of the data. For example, we can
require that all parts-of-speech come from a specified vocabulary by declaring that the
part-of-speech field is an enumerated type or a foreign key that references a separate
part-of-speech table. However, the relational model requires the structure of the data
(the schema) be declared in advance, and this runs counter to the dominant approach
to structuring linguistic data, which is highly exploratory. Fields which were assumed
to be obligatory and unique often turn out to be optional and repeatable. A relational
database can accommodate this when it is fully known in advance; however, if it is not,
or if just about every property turns out to be optional or repeatable, the relational
approach is unworkable.
Nevertheless, when our goal is simply to extract the contents from a database, it is
enough to dump out the tables (or SQL query results) in CSV format and load them
into our program. Our program might perform a linguistically motivated query that
cannot easily be expressed in SQL, e.g., select all words that appear in example sentences
for which no dictionary entry is provided. For this task, we would need to extract enough
information from a record for it to be uniquely identified, along with the headwords
and example sentences. Let’s suppose this information was now available in a CSV file
dict.csv:
418 | | Chapter 11: Managing Linguistic Data
Documents you may be interested
Documents you may be interested