more in tutorial

This commit is contained in:
aarne
2005-05-16 16:07:18 +00:00
parent c5594ea07b
commit f00d44b57d
2 changed files with 158 additions and 3 deletions

View File

@@ -607,6 +607,38 @@ Translate by using a pipe:
</pre>
<!-- NEW -->
<h4>Translation quiz</h4>
This is a simple kind of language exercises that can be automatically
generated from a multilingual grammar. The system generates a set of
random sentence, displays them in one language, and checks the user's
answer given in another language. The command <tt>translation_quiz = tq</tt>
makes this in a subshell of GF.
<pre>
> translation_quiz PaleolithicEng PaleolithicIta
Welcome to GF Translation Quiz.
The quiz is over when you have done at least 10 examples
with at least 75 % success.
You can interrupt the quiz by entering a line consisting of a dot ('.').
a green boy washes the louse
un ragazzo verde lava il gatto
No, not un ragazzo verde lava il gatto, but
un ragazzo verde lava il pidocchio
Score 0/1
</pre>
You can also generate a list of translation exercises and save it in a
file for later use, by the command <tt>translation_list = tl</tt>
<pre>
> translation_list PaleolithicEng PaleolithicIta 25
</pre>
(The number 25 is the number of sentences generated.)
<!-- NEW -->
<h4>The multilingual shell state</h4>
@@ -966,16 +998,138 @@ resource module <tt>Prelude</tt>, which therefore has to be
<!-- NEW -->
<h4>An intelligent noun paradigm using <tt>case</tt> expressions</h4>
It may be hard for the user of a resource morphology to pick the right
inflection paradigm. A way to help this is to define a more intelligent
paradigms, which chooses the ending by first analysing the lemma.
The following variant for English regular nouns puts together all the
previously shown paradigms, and chooses one of them on the basis of
the final letter of the lemma.
<pre>
regNoun : Str -> Noun = \s -> case last s of {
"s" | "z" => mkNoun s (s + "es") ;
"y" => mkNoun s (init s + "ies") ;
_ => mkNoun s (s + "s")
} ;
</pre>
This definition displays many GF expression forms not shown befores;
these forms are explained in the following section.
<p>
The paradigms <tt>regNoun</tt> does not give the correct forms for
all nouns. For instance, <i>louse - lice</i> and
<i>fish - fish</i> must be given by using <tt>mkNoun</i>.
Also the word <i>boy</i> would be inflected incorrectly; to prevent
this, either use <tt>mkNoun</i> or modify
<tt>regNoun</tt> so that the <tt>"y"</tt> case does not
apply if the second-last character is a vowel.
<!-- NEW -->
<h4>Pattern matching</h4>
Expressions of the <tt>table</tt> form are built from lists of
argument-value pairs. These pairs are called the <b>branches</b>
of the table. In addition to constants introduced in
<tt>param</tt> definitions, the left-hand side of a branch can more
generally be a <b>pattern</b>, and the computation of selection is
then performed by <b>pattern matching</b>:
<ul>
<li> a variable pattern (identifier other than constant parameter) matches anything
<li> the wild card <tt>_</tt> matches anything
<li> a string literal pattern, e.g. <tt>"s"</tt>, matches the same string
<li> a disjunctive pattern <tt>P | ... | Q</tt> matches anything that
one of the disjuncts matches
</ul>
Pattern matching is performed in the order in which the branches
appear in the table.
<p>
As syntactic sugar, one-branch tables can be written concisely,
<pre>
\\P,...,Q => t === table {P => ... table {Q => t} ...}
</pre>
Finally, the <tt>case</tt> expressions common in functional
programming languages are syntactic sugar for table selections:
<pre>
case e of {...} === table {...} ! e
</pre>
<!-- NEW -->
<h4>Parametric vs. inherent features, agreement</h4>
The rule of subject-verb agreement in English says that the verb
phrase must be inflected in the number of the subject. This
means that a noun phrase (functioning as a subject), in some sense
<i>has</i> a number, which it "sends" to the verb. The verb does not
have a number, but must be able to receive whatever number the
subject has. This distinction is nicely represented by the
different linearization types of noun phrases and verb phrases:
<pre>
lincat NP = {s : Str ; n : Number} ;
lincat VP = {s : Number => Str} ;
</pre>
We say that the number of <tt>NP</tt> is an <b>inherent feature</b>,
whereas the number of <tt>NP</tt> is <b>parametric</b>.
<p>
The agreement rule itself is expressed in the linearization rule of
the predication structure:
<pre>
lin PredVP np vp = {s = np.s ++ vp.s ! np.n} ;
</pre>
The following page will present a new version of
<tt>PaleolithingEng</tt>, assuming an abstract syntax
xextended with <tt>All</tt> and <tt>Two</tt>.
It also assumes that <tt>MorphoEng</tt> has a paradigm
<tt>regVerb</tt> for regular verbs (which need only be
regular only in the present tensse).
The reader is invited to inspect the way in which agreement works in
the formation of noun phrases and verb phrases.
<!-- NEW -->
<h4>English concrete syntax with parameters</h4>
<pre>
concrete PaleolithicEng of Paleolithic = open MorphoEng in {
lincat
S, A = {s : Str} ;
VP, CN, V, TV = {s : Number => Str} ;
NP = {s : Str ; n : Number} ;
lin
PredVP np vp = {s = np.s ++ vp.s ! np.n} ;
UseV v = v ;
ComplTV tv np = {s = \\n => tv.s ! n ++ np.s} ;
UseA a = {s = \\n => case n of {Sg => "is" ; Pl => "are"} ++ a.s} ;
This cn = {s = "this" ++ cn.s ! Sg } ;
Indef cn = {s = "a" ++ cn.s ! Sg} ;
All cn = {s = "all" ++ cn.s ! Pl} ;
Two cn = {s = "two" ++ cn.s ! Pl} ;
ModA a cn = {s = \\n => a.s ++ cn.s ! n} ;
Louse = mkNoun "louse" "lice" ;
Snake = regNoun "snake" ;
Green = {s = "green"} ;
Warm = {s = "warm"} ;
Laugh = regVerb "laugh" ;
Sleep = regVerb "sleep" ;
Kill = regVerb "kill" ;
}
</pre>
<!-- NEW -->
<h2>Topics still to be written</h2>
Morpho and translation quiz
Morpho quiz
<p>

View File

@@ -4,9 +4,9 @@
-- Stability : (stable)
-- Portability : (portable)
--
-- > CVS $Date: 2005/05/14 08:38:55 $
-- > CVS $Date: 2005/05/16 17:07:18 $
-- > CVS $Author: aarne $
-- > CVS $Revision: 1.10 $
-- > CVS $Revision: 1.11 $
--
-- chop an HTML file into separate files, each linked to the next and previous.
-- the names of the files are n-file, with n = 01,02,...
@@ -19,6 +19,7 @@
module Main (main) where
import System
import Char
main :: IO ()
main = do