mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-25 10:48:54 -06:00
introductions to chapters
This commit is contained in:
@@ -47,6 +47,15 @@ Draft %%date(%c)
|
|||||||
%--!
|
%--!
|
||||||
=Introduction=
|
=Introduction=
|
||||||
|
|
||||||
|
In this Introduction, we will discuss the field of natural language processing
|
||||||
|
and locate the place of GF in the field. We will continue with a brief history
|
||||||
|
of GF and its applications, followed by an overview of this book.
|
||||||
|
This Introduction contains no technical material that is presupposed in
|
||||||
|
later chapters. Therefore, the practically oriented reader can jump
|
||||||
|
directly to the Tutorial starting from Chapter 2.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
==Natural language application programming==
|
==Natural language application programming==
|
||||||
|
|
||||||
Making computers understand human language is one of the oldest dreams of
|
Making computers understand human language is one of the oldest dreams of
|
||||||
@@ -240,32 +249,123 @@ aspects, our experience is that writing grammars is an excellent introduction
|
|||||||
to the problems of linguistics. In this way, theory can be learnt at the
|
to the problems of linguistics. In this way, theory can be learnt at the
|
||||||
same time as it is motivated by concrete problems.
|
same time as it is motivated by concrete problems.
|
||||||
|
|
||||||
The book thus starts with a tutorial, which gradually explains all
|
The book thus starts with a Tutorial (Part I), which gradually explains all
|
||||||
the constructs of the GF programming language. Also the design and style
|
the constructs of the GF programming language. Also the design and style
|
||||||
aspects of grammar engineering are covered, to help the user to scale
|
aspects of grammar engineering are covered, to help the user to scale
|
||||||
up from small to large and possibly collaborative applications.
|
up from small to large and possibly collaborative applications.
|
||||||
After the tutorial, the book continues with a "cook book" containing
|
|
||||||
hints and case studies for advanced users. Moreover, the resource
|
After the Tutorial, the book continues with a manual on building applications
|
||||||
grammar library is covered in some detail, which will help those
|
that have embedded grammars as components (Part II). Part III goes through some
|
||||||
programmers who want to port the library to new languages, but also
|
examples of more advanced grammar writing, in particular, the internals of the
|
||||||
motivate linguistically the choices made in the libraries.
|
resource grammar library.
|
||||||
A complete reference manual concludes the book, with a quick reference
|
Part IV is a complete reference manual, and the two Appendices
|
||||||
card as an appendix.
|
show a grammar of the GF language and a quick reference card of GF.
|
||||||
|
|
||||||
What is not given much space in the book is theoretical discussions of
|
What is not given much space in the book is theoretical discussions of
|
||||||
GF, especially in comparison to other grammar formalism. Even though important
|
GF, especially in comparison to other grammar formalism. Even though important
|
||||||
in the development of GF as a scientifically justified framework, such
|
in the development of GF as a scientifically justified framework, such
|
||||||
discussions are not relevant for programmers who just want to use GF - any more
|
discussions are not relevant for programmers who just want to use GF - any more
|
||||||
than, say, a book on Haskell has to include comparisons with Java. In fact,
|
than, say, a book on Haskell has to include comparisons with Java. In fact,
|
||||||
introducing Haskell by references to Java may make more sense
|
comparisons with Java in a Haskell introduction would make more sense
|
||||||
than comparing GF with DCG or HPSG or LFG: many Haskell learners can
|
than comparisons with DCG or HPSG or LFG in a GF introduction:
|
||||||
already be expected to know Java, but most GF learners are not expected
|
many Haskell learners can already be expected to know Java, whereas
|
||||||
to know any grammar formalism, except perhaps BNF.
|
most GF learners are not expected
|
||||||
|
to know any grammar formalisms, except perhaps BNF.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#PARTone
|
#PARTone
|
||||||
|
|
||||||
|
=An overview of the tutorial=
|
||||||
|
|
||||||
|
The tutorial gives a hands-on introduction to grammar writing in GF.
|
||||||
|
We start in Chapter 3
|
||||||
|
by building a "Hello World" grammar, which covers greetings
|
||||||
|
in three languages: English (//hello world//),
|
||||||
|
Finnish (//terve maailma//), and Italian (//ciao mondo//).
|
||||||
|
This **multilingual grammar** is based on the distinction, central in
|
||||||
|
GF, between **abstract syntax**
|
||||||
|
(the logical structure) and **concrete syntax** (the
|
||||||
|
sequence of words).
|
||||||
|
|
||||||
|
From the "Hello World" example, we proceed
|
||||||
|
in Chapter 4
|
||||||
|
to a larger grammar for the domain of food.
|
||||||
|
In this grammar, you can say things like
|
||||||
|
```
|
||||||
|
this Italian cheese is delicious
|
||||||
|
```
|
||||||
|
in English and Italian. This grammar illustrates how translation is
|
||||||
|
more than just replacement of words. For instance, the order of
|
||||||
|
words may have to be changed:
|
||||||
|
```
|
||||||
|
Italian cheese ===> formaggio italiano
|
||||||
|
```
|
||||||
|
Moreover, words can have different forms, and which forms
|
||||||
|
they have vary from language to language. For instance,
|
||||||
|
Italian adjectives usually have four forms where English
|
||||||
|
has just one:
|
||||||
|
```
|
||||||
|
delicious (wine, wines, pizza, pizzas)
|
||||||
|
vino delizioso, vini deliziosi, pizza deliziosa, pizze deliziose
|
||||||
|
```
|
||||||
|
The **morphology** of a language describes the
|
||||||
|
forms of its words, and the basics of it are explained in Chapter 5.
|
||||||
|
|
||||||
|
The complete description of morphology
|
||||||
|
belongs to resource grammars, whose use is covered in Chapter 6.
|
||||||
|
However, we will explain all the
|
||||||
|
programming concepts involved in resource grammars.
|
||||||
|
|
||||||
|
In addition to multilinguality, **semantics** is an important aspect of GF
|
||||||
|
grammars. The concepts needed for "purely linguistic" grammars belong to
|
||||||
|
the concrete syntax part of GF, whereas semantics is expressed in the abstract
|
||||||
|
syntax. After the presentation of concrete syntax constructs, we proceed
|
||||||
|
in Chapter 7 to the enrichment of abstract syntax with **dependent types**,
|
||||||
|
**variable bindings**, and **semantic definitions**.
|
||||||
|
|
||||||
|
Italian is used as the example language of many grammars.
|
||||||
|
Of course, we will not presuppose that the reader knows any Italian.
|
||||||
|
We have chosen Italian because it has a rich structure
|
||||||
|
that illustrates very well the capacities of GF.
|
||||||
|
Moreover, even those readers who don't know Italian, will find many of
|
||||||
|
its words familiar. The exercises will encourage the reader to
|
||||||
|
port the examples to other languages; in fact, many GF
|
||||||
|
applications work for 5-10 languages.
|
||||||
|
|
||||||
|
To learn how to write GF grammars is not the only goal of
|
||||||
|
this tutorial. We will also explain the most important
|
||||||
|
commands of the GF system, mostly in passing. With these commands,
|
||||||
|
simple application programs such as translation and
|
||||||
|
quiz systems, can be built simply by writing scripts for the
|
||||||
|
GF system. More complicated applications, such as natural-language
|
||||||
|
interfaces and dialogue systems, moreover require programming in
|
||||||
|
some general-purpose language; such applications are covered in Part II.
|
||||||
|
|
||||||
|
|
||||||
|
==Who should read this tutorial==
|
||||||
|
|
||||||
|
This tutorial has been written for all programmers
|
||||||
|
who want to learn to write grammars in GF.
|
||||||
|
It will go through GF's programming concepts, and does not
|
||||||
|
presuppose knowledge of any of the main ingredients of GF:
|
||||||
|
linguistics, functional programming, and type theory.
|
||||||
|
This knowledge will be introduced as a part of grammar writing
|
||||||
|
practice.
|
||||||
|
|
||||||
|
Thus the tutorial should be accessible to anyone who has some
|
||||||
|
previous programming experience from any programming language; the basics
|
||||||
|
of using computers are also presupposed, e.g. the use of
|
||||||
|
text editors and the management of files.
|
||||||
|
|
||||||
|
Those who already know GF well can skip the tutorial part,
|
||||||
|
or skim thorough it, and go directly to the parts on applications
|
||||||
|
and advanced grammar writing.
|
||||||
|
Many of these topics will involve large scale GF programming,
|
||||||
|
and/or programming in other languages in which GF grammars are embedded.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
=Getting started=
|
=Getting started=
|
||||||
|
|
||||||
In this chapter, we will introduce the GF program and write the first GF grammar,
|
In this chapter, we will introduce the GF program and write the first GF grammar,
|
||||||
@@ -274,7 +374,6 @@ how GF can be used for the tasks of translation and multilingual
|
|||||||
generation.
|
generation.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
==What GF is==
|
==What GF is==
|
||||||
|
|
||||||
We use the term GF for three different things:
|
We use the term GF for three different things:
|
||||||
@@ -355,99 +454,6 @@ is given in the libraries.
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
==Who should read this tutorial==
|
|
||||||
|
|
||||||
The tutorial part of this book is mainly for programmers
|
|
||||||
who want to learn to write application grammars.
|
|
||||||
It will go through GF's programming concepts, and does not
|
|
||||||
presuppose knowledge of any of the main ingredients of GF:
|
|
||||||
linguistics, functional programming, and type theory.
|
|
||||||
This knowledge will be introduced as a part of grammar writing
|
|
||||||
practice.
|
|
||||||
|
|
||||||
Thus the tutorial should be accessible to anyone who has some
|
|
||||||
previous programming experience from any programming language; the basics
|
|
||||||
of using computers are also presupposed, e.g. the use of
|
|
||||||
text editors and the management of files.
|
|
||||||
|
|
||||||
Those who already know GF well can skip the tutorial part,
|
|
||||||
or skim thorough it, and go directly to the part on advanced applications.
|
|
||||||
Many of these applications will involve large scale GF programming,
|
|
||||||
and/or programming in other languages in which GF grammars are embedded.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
==The coverage of the tutorial==
|
|
||||||
|
|
||||||
The tutorial gives a hands-on introduction to grammar writing.
|
|
||||||
We start in this chapter
|
|
||||||
by building a "Hello World" grammar, which covers greetings
|
|
||||||
in three languages: English (//hello world//),
|
|
||||||
Finnish (//terve maailma//), and Italian (//ciao mondo//).
|
|
||||||
This **multilingual grammar** is based on the distinction, central in
|
|
||||||
GF, between **abstract syntax**
|
|
||||||
(the logical structure) and **concrete syntax** (the
|
|
||||||
sequence of words).
|
|
||||||
|
|
||||||
From the "Hello World" example, we proceed
|
|
||||||
in the next chapter
|
|
||||||
to a larger grammar for the domain of food.
|
|
||||||
In this grammar, you can say things like
|
|
||||||
```
|
|
||||||
this Italian cheese is delicious
|
|
||||||
```
|
|
||||||
in English and Italian. This grammar illustrates how translation is
|
|
||||||
more than just replacement of words. For instance, the order of
|
|
||||||
words may have to be changed:
|
|
||||||
```
|
|
||||||
Italian cheese ===> formaggio italiano
|
|
||||||
```
|
|
||||||
Moreover, words can have different forms, and which forms
|
|
||||||
they have vary from language to language. For instance,
|
|
||||||
Italian adjectives usually have four forms where English
|
|
||||||
has just one:
|
|
||||||
```
|
|
||||||
delicious (wine, wines, pizza, pizzas)
|
|
||||||
vino delizioso, vini deliziosi, pizza deliziosa, pizze deliziose
|
|
||||||
```
|
|
||||||
The **morphology** of a language describes the
|
|
||||||
forms of its words, and the basics of it are explained in Chapter 4.
|
|
||||||
|
|
||||||
The complete description of morphology
|
|
||||||
belongs to resource grammars, whose use is covered in Chapter 6.
|
|
||||||
However, we will explain all the
|
|
||||||
programming concepts involved in resource grammars, and also
|
|
||||||
build a miniature resource grammar in order
|
|
||||||
to give an introduction to linguistically oriented grammar writing (Chapter 5).
|
|
||||||
|
|
||||||
Italian is used as the example language of many grammars.
|
|
||||||
Of course, we will not presuppose that the reader knows any Italian.
|
|
||||||
We have chosen Italian because it has a rich structure
|
|
||||||
that illustrates very well the capacities of GF.
|
|
||||||
Moreover, even those readers who don't know Italian, will find many of
|
|
||||||
its words familiar. The exercises will encourage the reader to
|
|
||||||
port the examples to other languages; in fact, many GF
|
|
||||||
applications work for 5-10 languages.
|
|
||||||
|
|
||||||
In addition to multilinguality, **semantics** is an important aspect of GF
|
|
||||||
grammars. The concepts needed for "purely linguistic" grammars belong to
|
|
||||||
the concrete syntax part of GF, whereas semantics is expressed in the abstract
|
|
||||||
syntax. After the presentation of concrete syntax constructs, we proceed
|
|
||||||
in Chapter 7 to the enrichment of abstract syntax with **dependent types**,
|
|
||||||
**variable bindings**, and **semantic definitions**.
|
|
||||||
|
|
||||||
To learn how to write GF grammars is not the only goal of
|
|
||||||
this tutorial. We will also explain the most important
|
|
||||||
commands of the GF system. With these commands,
|
|
||||||
simple application programs such as translation and
|
|
||||||
quiz systems, can be built simply by writing scripts for the
|
|
||||||
GF system.
|
|
||||||
|
|
||||||
More complicated applications, such as natural-language
|
|
||||||
interfaces and dialogue systems, moreover require programming in
|
|
||||||
some general-purpose language. Part II on advanced applications will
|
|
||||||
explain how GF grammars are used as components of Haskell and Java programs.
|
|
||||||
|
|
||||||
|
|
||||||
%--!
|
%--!
|
||||||
==Getting the GF program==
|
==Getting the GF program==
|
||||||
@@ -1685,6 +1691,17 @@ The ``.cf`` grammar format.
|
|||||||
|
|
||||||
=Grammars with parameters=
|
=Grammars with parameters=
|
||||||
|
|
||||||
|
In this Chapter, we will introduce the techniques needed for
|
||||||
|
describing the inflection of words, as well as the rules by
|
||||||
|
which propor word forms are selected in syntactic combinations.
|
||||||
|
These techniques are already needed in a very slight extension
|
||||||
|
of the Food grammar of the previous Chapter. While explaining
|
||||||
|
how the linguistic problems are solved for English and Italian,
|
||||||
|
we also explain all the language constructs GF has for
|
||||||
|
defining concrete syntax.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
==The problem: words have to be inflected==
|
==The problem: words have to be inflected==
|
||||||
|
|
||||||
Suppose we want to say, with the vocabulary included in
|
Suppose we want to say, with the vocabulary included in
|
||||||
@@ -2690,10 +2707,9 @@ now aiming for complete grammatical correctness by the use of parameters.
|
|||||||
|
|
||||||
In this chapter, we will take a look at the GF resource grammar library.
|
In this chapter, we will take a look at the GF resource grammar library.
|
||||||
We will use the library to implement a slightly extended ``Food`` grammar
|
We will use the library to implement a slightly extended ``Food`` grammar
|
||||||
and port it to some new languages.
|
and port it to some new languages. Some new concepts of GF's module system
|
||||||
|
are also introduced, most notably the technique of **parametrized modules**,
|
||||||
**Exercise**. Define the mini resource of the previous chapter by
|
which has become an important "design pattern" for multilingual grammars.
|
||||||
using a functor over the full resource.
|
|
||||||
|
|
||||||
|
|
||||||
==The coverage of the library==
|
==The coverage of the library==
|
||||||
@@ -3310,6 +3326,14 @@ build the terms manually.
|
|||||||
|
|
||||||
=Refining semantics in abstract syntax=
|
=Refining semantics in abstract syntax=
|
||||||
|
|
||||||
|
While the concrete syntax constructs of GF have been already
|
||||||
|
introduced, there is much more that can be done in the abstract
|
||||||
|
syntax. The techniques of **dependent types** and
|
||||||
|
**higher order abstract syntax** are introduced in this Chapter,
|
||||||
|
which thereby concludes the presentation of the GF language.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
==GF as a logical framework==
|
==GF as a logical framework==
|
||||||
|
|
||||||
In this section, we will show how
|
In this section, we will show how
|
||||||
@@ -5033,7 +5057,7 @@ the command
|
|||||||
```
|
```
|
||||||
% gfdoc
|
% gfdoc
|
||||||
```
|
```
|
||||||
provided `gfdoc`` has been installed as a part of one's GF installation.
|
The `gfdoc`` program is normally installed as a part of GF installation.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user