From c09783e60443d5443e9a1d1609b08c31da5f9d91 Mon Sep 17 00:00:00 2001 From: aarne Date: Tue, 16 Sep 2008 08:01:47 +0000 Subject: [PATCH] restored the summer school and Resource-HOWTO documents --- doc/Grammar.dot | 75 +++ doc/Grammar.png | Bin 0 -> 78790 bytes doc/Resource-HOWTO.html | 827 ++++++++++++++++++++++++++++++++ doc/Resource-HOWTO.txt | 789 ++++++++++++++++++++++++++++++ doc/eu-langs.dot | 79 +++ doc/eu-langs.png | Bin 0 -> 85484 bytes doc/gf-summerschool.html | 368 ++++++++++++++ doc/gf-summerschool.txt | 332 +++++++++++++ examples/jem-math/LexMath.gf | 16 + examples/jem-math/LexMathFre.gf | 18 + examples/jem-math/LexMathSwe.gf | 18 + examples/jem-math/MathFre.gf | 8 + examples/jem-math/MathI.gf | 51 ++ examples/jem-math/MathSwe.gf | 8 + 14 files changed, 2589 insertions(+) create mode 100644 doc/Grammar.dot create mode 100644 doc/Grammar.png create mode 100644 doc/Resource-HOWTO.html create mode 100644 doc/Resource-HOWTO.txt create mode 100644 doc/eu-langs.dot create mode 100644 doc/eu-langs.png create mode 100644 doc/gf-summerschool.html create mode 100644 doc/gf-summerschool.txt create mode 100644 examples/jem-math/LexMath.gf create mode 100644 examples/jem-math/LexMathFre.gf create mode 100644 examples/jem-math/LexMathSwe.gf create mode 100644 examples/jem-math/MathFre.gf create mode 100644 examples/jem-math/MathI.gf create mode 100644 examples/jem-math/MathSwe.gf diff --git a/doc/Grammar.dot b/doc/Grammar.dot new file mode 100644 index 000000000..cb2998eb3 --- /dev/null +++ b/doc/Grammar.dot @@ -0,0 +1,75 @@ +digraph { + +size = "12,8" ; + +Lang [style = "solid", shape = "ellipse", URL = "Lang.gf"]; + +Lang -> Grammar [style = "solid"]; +Lang -> Lexicon [style = "solid"]; + +Grammar [style = "solid", shape = "ellipse", URL = "Lang.gf"]; + + +Grammar -> Noun [style = "solid"]; +Grammar -> Verb [style = "solid"]; +Grammar -> Adjective [style = "solid"]; +Grammar -> Adverb [style = "solid"]; +Grammar -> Numeral [style = "solid"]; +Grammar -> Sentence [style = "solid"]; +Grammar -> Question [style = "solid"]; +Grammar -> Relative [style = "solid"]; +Grammar -> Conjunction [style = "solid"]; +Grammar -> Phrase [style = "solid"]; +Grammar -> Text [style = "solid"]; +Grammar -> Idiom [style = "solid"]; +Grammar -> Structural [style = "solid"]; + + +Noun [style = "solid", shape = "ellipse", URL = "Noun.gf"]; +Noun -> Cat [style = "solid"]; + +Verb [style = "solid", shape = "ellipse", URL = "Verb.gf"]; +Verb -> Cat [style = "solid"]; + +Adjective [style = "solid", shape = "ellipse", URL = "Adjective.gf"]; +Adjective -> Cat [style = "solid"]; + +Adverb [style = "solid", shape = "ellipse", URL = "Adverb.gf"]; +Adverb -> Cat [style = "solid"]; + +Numeral [style = "solid", shape = "ellipse", URL = "Numeral.gf"]; +Numeral -> Cat [style = "solid"]; + +Sentence [style = "solid", shape = "ellipse", URL = "Sentence.gf"]; +Sentence -> Cat [style = "solid"]; + +Question [style = "solid", shape = "ellipse", URL = "Question.gf"]; +Question -> Cat [style = "solid"]; + +Relative [style = "solid", shape = "ellipse", URL = "Relative.gf"]; +Relative -> Cat [style = "solid"]; + +Conjunction [style = "solid", shape = "ellipse", URL = "Conjunction.gf"]; +Conjunction -> Cat [style = "solid"]; + +Phrase [style = "solid", shape = "ellipse", URL = "Phrase.gf"]; +Phrase -> Cat [style = "solid"]; + +Text [style = "solid", shape = "ellipse", URL = "Phrase.gf"]; +Text -> Cat [style = "solid"]; + +Idiom [style = "solid", shape = "ellipse", URL = "Phrase.gf"]; +Idiom -> Cat [style = "solid"]; + +Structural [style = "solid", shape = "ellipse", URL = "Structural.gf"]; +Structural -> Cat [style = "solid"]; + +Lexicon [style = "solid", shape = "ellipse", URL = "Lexicon.gf"]; +Lexicon -> Cat [style = "solid"]; + +Cat [style = "solid", shape = "ellipse", URL = "Cat.gf"]; +Cat -> Common [style = "solid"]; + +Common [style = "solid", shape = "ellipse", URL = "Tense.gf"]; + +} diff --git a/doc/Grammar.png b/doc/Grammar.png new file mode 100644 index 0000000000000000000000000000000000000000..ada2847d799ef0e72d7b823678cc56ba776d65fc GIT binary patch literal 78790 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 + + + +Resource grammar writing HOWTO + +

Resource grammar writing HOWTO

+ +Author: Aarne Ranta <aarne (at) cs.chalmers.se>
+Last update: Tue Sep 16 09:58:01 2008 +
+ +

+History +

+

+September 2008: partly outdated - to be updated for API 1.5. +

+

+October 2007: updated for API 1.2. +

+

+January 2006: first version. +

+

+The purpose of this document is to tell how to implement the GF +resource grammar API for a new language. We will not cover how +to use the resource grammar, nor how to change the API. But we +will give some hints how to extend the API. +

+

+A manual for using the resource grammar is found in +

+

+http://www.cs.chalmers.se/~aarne/GF/lib/resource-1.0/doc/synopsis.html. +

+

+A tutorial on GF, also introducing the idea of resource grammars, is found in +

+

+http://www.cs.chalmers.se/~aarne/GF/doc/tutorial/gf-tutorial2.html. +

+

+This document concerns the API v. 1.0. You can find the current code in +

+

+http://www.cs.chalmers.se/~aarne/GF/lib/resource-1.0/ +

+

The resource grammar structure

+

+The library is divided into a bunch of modules, whose dependencies +are given in the following figure. +

+

+ +

+
    +
  • solid contours: module used by end users +
  • dashed contours: internal module +
  • ellipse: abstract/concrete pair of modules +
  • rectangle: resource or instance +
  • diamond: interface +
+ +

+The solid ellipses show the API as visible to the user of the library. The +dashed ellipses form the main of the implementation, on which the resource +grammar programmer has to work with. With the exception of the Paradigms +module, the visible API modules can be produced mechanically. +

+

+ +

+

+Thus the API consists of a grammar and a lexicon, which is +provided for test purposes. +

+

+The module structure is rather flat: most modules are direct +parents of Grammar. The idea +is that you can concentrate on one linguistic aspect at a time, or +also distribute the work among several authors. The module Cat +defines the "glue" that ties the aspects together - a type system +to which all the other modules conform, so that e.g. NP means +the same thing in those modules that use NPs and those that +constructs them. +

+

Phrase category modules

+

+The direct parents of the top will be called phrase category modules, +since each of them concentrates on a particular phrase category (nouns, verbs, +adjectives, sentences,...). A phrase category module tells +how to construct phrases in that category. You will find out that +all functions in any of these modules have the same value type (or maybe +one of a small number of different types). Thus we have +

+
    +
  • Noun: construction of nouns and noun phrases +
  • Adjective: construction of adjectival phrases +
  • Verb: construction of verb phrases +
  • Adverb: construction of adverbial phrases +
  • Numeral: construction of cardinal and ordinal numerals +
  • Sentence: construction of sentences and imperatives +
  • Question: construction of questions +
  • Relative: construction of relative clauses +
  • Conjunction: coordination of phrases +
  • Phrase: construction of the major units of text and speech +
  • Text: construction of texts as sequences of phrases +
  • Idiom: idiomatic phrases such as existentials +
+ +

Infrastructure modules

+

+Expressions of each phrase category are constructed in the corresponding +phrase category module. But their use takes mostly place in other modules. +For instance, noun phrases, which are constructed in Noun, are +used as arguments of functions of almost all other phrase category modules. +How can we build all these modules independently of each other? +

+

+As usual in typeful programming, the only thing you need to know +about an object you use is its type. When writing a linearization rule +for a GF abstract syntax function, the only thing you need to know is +the linearization types of its value and argument categories. To achieve +the division of the resource grammar to several parallel phrase category modules, +what we need is an underlying definition of the linearization types. This +definition is given as the implementation of +

+
    +
  • Cat: syntactic categories of the resource grammar +
+ +

+Any resource grammar implementation has first to agree on how to implement +Cat. Luckily enough, even this can be done incrementally: you +can skip the lincat definition of a category and use the default +{s : Str} until you need to change it to something else. In +English, for instance, many categories do have this linearization type. +

+

Lexical modules

+

+What is lexical and what is syntactic is not as clearcut in GF as in +some other grammar formalisms. Logically, lexical means atom, i.e. a +fun with no arguments. Linguistically, one may add to this +that the lin consists of only one token (or of a table whose values +are single tokens). Even in the restricted lexicon included in the resource +API, the latter rule is sometimes violated in some languages. For instance, +Structural.both7and_DConj is an atom, but its linearization is +two words e.g. both - and. +

+

+Another characterization of lexical is that lexical units can be added +almost ad libitum, and they cannot be defined in terms of already +given rules. The lexical modules of the resource API are thus more like +samples than complete lists. There are two such modules: +

+
    +
  • Structural: structural words (determiners, conjunctions,...) +
  • Lexicon: basic everyday content words (nouns, verbs,...) +
+ +

+The module Structural aims for completeness, and is likely to +be extended in future releases of the resource. The module Lexicon +gives a "random" list of words, which enable interesting testing of syntax, +and also a check list for morphology, since those words are likely to include +most morphological patterns of the language. +

+

+In the case of Lexicon it may come out clearer than anywhere else +in the API that it is impossible to give exact translation equivalents in +different languages on the level of a resource grammar. In other words, +application grammars are likely to use the resource in different ways for +different languages. +

+

Language-dependent syntax modules

+

+In addition to the common API, there is room for language-dependent extensions +of the resource. The top level of each languages looks as follows (with English as example): +

+
+    abstract English = Grammar, ExtraEngAbs, DictEngAbs
+
+

+where ExtraEngAbs is a collection of syntactic structures specific to English, +and DictEngAbs is an English dictionary +(at the moment, it consists of IrregEngAbs, +the irregular verbs of English). Each of these language-specific grammars has +the potential to grow into a full-scale grammar of the language. These grammar +can also be used as libraries, but the possibility of using functors is lost. +

+

+To give a better overview of language-specific structures, +modules like ExtraEngAbs +are built from a language-independent module ExtraAbs +by restricted inheritance: +

+
+    abstract ExtraEngAbs = Extra [f,g,...]
+
+

+Thus any category and function in Extra may be shared by a subset of all +languages. One can see this set-up as a matrix, which tells +what Extra structures +are implemented in what languages. For the common API in Grammar, the matrix +is filled with 1's (everything is implemented in every language). +

+

+In a minimal resource grammar implementation, the language-dependent +extensions are just empty modules, but it is good to provide them for +the sake of uniformity. +

+

The core of the syntax

+

+Among all categories and functions, a handful are +most important and distinct ones, of which the others are can be +seen as variations. The categories are +

+
+    Cl ; VP ; V2 ; NP ; CN ; Det ; AP ;
+
+

+The functions are +

+
+    PredVP  : NP  -> VP -> Cl ;  -- predication
+    ComplV2 : V2  -> NP -> VP ;  -- complementization
+    DetCN   : Det -> CN -> NP ;  -- determination
+    ModCN   : AP  -> CN -> CN ;  -- modification
+
+

+This toy Latin grammar shows in a nutshell how these +rules relate the categories to each other. It is intended to be a +first approximation when designing the parameter system of a new +language. +

+

Another reduced API

+

+If you want to experiment with a small subset of the resource API first, +try out the module +Syntax +explained in the +GF Tutorial. +

+

The present-tense fragment

+

+Some lines in the resource library are suffixed with the comment +```--# notpresent +which is used by a preprocessor to exclude those lines from +a reduced version of the full resource. This present-tense-only +version is useful for applications in most technical text, since +they reduce the grammar size and compilation time. It can also +be useful to exclude those lines in a first version of resource +implementation. To compile a grammar with present-tense-only, use +

+
+    i -preproc=GF/lib/resource-1.0/mkPresent LangGer.gf
+
+

+

Phases of the work

+

Putting up a directory

+

+Unless you are writing an instance of a parametrized implementation +(Romance or Scandinavian), which will be covered later, the +simplest way is to follow roughly the following procedure. Assume you +are building a grammar for the German language. Here are the first steps, +which we actually followed ourselves when building the German implementation +of resource v. 1.0. +

+
    +
  1. Create a sister directory for GF/lib/resource/english, named + german. +
    +         cd GF/lib/resource/
    +         mkdir german
    +         cd german
    +
    +

    +
  2. Check out the [ISO 639 3-letter language code + http://www.w3.org/WAI/ER/IG/ert/iso639.htm] + for German: both Ger and Deu are given, and we pick Ger. +

    +
  3. Copy the *Eng.gf files from english german, + and rename them: +
    +         cp ../english/*Eng.gf .
    +         rename 's/Eng/Ger/' *Eng.gf
    +
    +

    +
  4. Change the Eng module references to Ger references + in all files: +
    +         sed -i 's/English/German/g' *Ger.gf
    +         sed -i 's/Eng/Ger/g' *Ger.gf
    +
    + The first line prevents changing the word English, which appears + here and there in comments, to Gerlish. +

    +
  5. This may of course change unwanted occurrences of the + string Eng - verify this by +
    +         grep Ger *.gf
    +
    + But you will have to make lots of manual changes in all files anyway! +

    +
  6. Comment out the contents of these files: +
    +         sed -i 's/^/--/' *Ger.gf
    +
    + This will give you a set of templates out of which the grammar + will grow as you uncomment and modify the files rule by rule. +

    +
  7. In all .gf files, uncomment the module headers and brackets, + leaving the module bodies commented. Unfortunately, there is no + simple way to do this automatically (or to avoid commenting these + lines in the previous step) - but uncommenting the first + and the last lines will actually do the job for many of the files. +

    +
  8. Uncomment the contents of the main grammar file: +
    +         sed -i 's/^--//' LangGer.gf
    +
    +

    +
  9. Now you can open the grammar LangGer in GF: +
    +         gf LangGer.gf
    +
    + You will get lots of warnings on missing rules, but the grammar will compile. +

    +
  10. At all following steps you will now have a valid, but incomplete + GF grammar. The GF command +
    +         pg -printer=missing
    +
    + tells you what exactly is missing. +
+ +

+Here is the module structure of LangGer. It has been simplified by leaving out +the majority of the phrase category modules. Each of them has the same dependencies +as e.g. VerbGer. +

+

+ +

+

Direction of work

+

+The real work starts now. There are many ways to proceed, the main ones being +

+
    +
  • Top-down: start from the module Phrase and go down to Sentence, then + Verb, Noun, and in the end Lexicon. In this way, you are all the time + building complete phrases, and add them with more content as you proceed. + This approach is not recommended. It is impossible to test the rules if + you have no words to apply the constructions to. +

    +
  • Bottom-up: set as your first goal to implement Lexicon. To this end, you + need to write ParadigmsGer, which in turn needs parts of + MorphoGer and ResGer. + This approach is not recommended. You can get stuck to details of + morphology such as irregular words, and you don't have enough grasp about + the type system to decide what forms to cover in morphology. +
+ +

+The practical working direction is thus a saw-like motion between the morphological +and top-level modules. Here is a possible course of the work that gives enough +test data and enough general view at any point: +

+
    +
  1. Define Cat.N and the required parameter types in ResGer. As we define +
    +    lincat N  = {s : Number => Case => Str ; g : Gender} ;
    +
    +we need the parameter types Number, Case, and Gender. The definition +of Number in common/ParamX works for German, so we +use it and just define Case and Gender in ResGer. +

    +
  2. Define regN in ParadigmsGer. In this way you can +already implement a huge amount of nouns correctly in LexiconGer. Actually +just adding mkN should suffice for every noun - but, +since it is tedious to use, you +might proceed to the next step before returning to morphology and defining the +real work horse reg2N. +

    +
  3. While doing this, you may want to test the resource independently. Do this by +
    +         i -retain ParadigmsGer
    +         cc regN "Kirche"
    +
    +

    +
  4. Proceed to determiners and pronouns in +NounGer (DetCN UsePron DetSg SgQuant NoNum NoOrd DefArt IndefArt UseN)and +StructuralGer (i_Pron every_Det). You also need some categories and +parameter types. At this point, it is maybe not possible to find out the final +linearization types of CN, NP, and Det, but at least you should +be able to correctly inflect noun phrases such as every airplane: +
    +    i LangGer.gf
    +    l -table DetCN every_Det (UseN airplane_N)
    +  
    +    Nom: jeder Flugzeug
    +    Acc: jeden Flugzeug
    +    Dat: jedem Flugzeug
    +    Gen: jedes Flugzeugs
    +
    +

    +
  5. Proceed to verbs: define CatGer.V, ResGer.VForm, and +ParadigmsGer.regV. You may choose to exclude notpresent +cases at this point. But anyway, you will be able to inflect a good +number of verbs in Lexicon, such as +live_V (regV "leven"). +

    +
  6. Now you can soon form your first sentences: define VP and +Cl in CatGer, VerbGer.UseV, and SentenceGer.PredVP. +Even if you have excluded the tenses, you will be able to produce +
    +    i -preproc=mkPresent LangGer.gf
    +    > l -table PredVP (UsePron i_Pron) (UseV live_V)
    +  
    +    Pres Simul Pos Main: ich lebe
    +    Pres Simul Pos Inv:  lebe ich
    +    Pres Simul Pos Sub:  ich lebe
    +    Pres Simul Neg Main: ich lebe nicht
    +    Pres Simul Neg Inv:  lebe ich nicht
    +    Pres Simul Neg Sub:  ich nicht lebe
    +
    +

    +
  7. Transitive verbs (CatGer.V2 ParadigmsGer.dirV2 VerbGer.ComplV2) +are a natural next step, so that you can +produce ich liebe dich. +

    +
  8. Adjectives (CatGer.A ParadigmsGer.regA NounGer.AdjCN AdjectiveGer.PositA) +will force you to think about strong and weak declensions, so that you can +correctly inflect my new car, this new car. +

    +
  9. Once you have implemented the set +(``Noun.DetCN Noun.AdjCN Verb.UseV Verb.ComplV2 Sentence.PredVP), +you have overcome most of difficulties. You know roughly what parameters +and dependences there are in your language, and you can now produce very +much in the order you please. +
+ +

The develop-test cycle

+

+The following develop-test cycle will +be applied most of the time, both in the first steps described above +and in later steps where you are more on your own. +

+
    +
  1. Select a phrase category module, e.g. NounGer, and uncomment some + linearization rules (for instance, DefSg, which is + not too complicated). +

    +
  2. Write down some German examples of this rule, for instance translations + of "the dog", "the house", "the big house", etc. Write these in all their + different forms (two numbers and four cases). +

    +
  3. Think about the categories involved (CN, NP, N) and the + variations they have. Encode this in the lincats of CatGer. + You may have to define some new parameter types in ResGer. +

    +
  4. To be able to test the construction, + define some words you need to instantiate it + in LexiconGer. You will also need some regular inflection patterns + inParadigmsGer. +

    +
  5. Test by parsing, linearization, + and random generation. In particular, linearization to a table should + be used so that you see all forms produced: +
    +         gr -cat=NP -number=20 -tr | l -table
    +
    +

    +
  6. Spare some tree-linearization pairs for later regression testing. Use the + tree_bank command, +
    +         gr -cat=NP -number=20 | tb -xml | wf NP.tb
    +
    + You can later compared your modified grammar to this treebank by +
    +         rf NP.tb | tb -c
    +
    +
+ +

+You are likely to run this cycle a few times for each linearization rule +you implement, and some hundreds of times altogether. There are 66 cats and +458 funs in Lang at the moment; 149 of the funs are outside the two +lexicon modules). +

+

+Here is a live log of the actual process of +building the German implementation of resource API v. 1.0. +It is the basis of the more detailed explanations, which will +follow soon. (You will found out that these explanations involve +a rational reconstruction of the live process! Among other things, the +API was changed during the actual process to make it more intuitive.) +

+

Resource modules used

+

+These modules will be written by you. +

+
    +
  • ResGer: parameter types and auxiliary operations +(a resource for the resource grammar!) +
  • ParadigmsGer: complete inflection engine and most important regular paradigms +
  • MorphoGer: auxiliaries for ParadigmsGer and StructuralGer. This need +not be separate from ResGer. +
+ +

+These modules are language-independent and provided by the existing resource +package. +

+
    +
  • ParamX: parameter types used in many languages +
  • CommonX: implementation of language-uniform categories + such as $Text$ and $Phr$, as well as of + the logical tense, anteriority, and polarity parameters +
  • Coordination: operations to deal with lists and coordination +
  • Prelude: general-purpose operations on strings, records, + truth values, etc. +
  • Predefined: general-purpose operations with hard-coded definitions +
+ +

+An important decision is what rules to implement in terms of operations in +ResGer. A golden rule of functional programming says that, whenever +you find yourself programming by copy and paste, you should write a function +instead. This indicates that an operation should be created if it is to be +used at least twice. At the same time, a sound principle of vicinity says that +it should not require too much browsing to understand what a rule does. +From these two principles, we have derived the following practice: +

+
    +
  • If an operation is needed in two different modules, +it should be created in ResGer. An example is mkClause, +used in Sentence, Question, and Relative- +
  • If an operation is needed twice in the same module, but never +outside, it should be created in the same module. Many examples are +found in Numerals. +
  • If an operation is only needed once, it should not be created (but rather +inlined). Most functions in phrase category modules are implemented in this +way. +
+ +

+This discipline is very different from the one followed in earlier +versions of the library (up to 0.9). We then valued the principle of +abstraction more than vicinity, creating layers of abstraction for +almost everything. This led in practice to the duplication of almost +all code on the lin and oper levels, and made the code +hard to understand and maintain. +

+

Morphology and lexicon

+

+The paradigms needed to implement +LexiconGer are defined in +ParadigmsGer. +This module provides high-level ways to define the linearization of +lexical items, of categories N, A, V and their complement-taking +variants. +

+

+For ease of use, the Paradigms modules follow a certain +naming convention. Thus they for each lexical category, such as N, +the functions +

+
    +
  • mkN, for worst-case construction of N. Its type signature + has the form +
    +         mkN : Str -> ... -> Str -> P -> ... -> Q -> N
    +
    + with as many string and parameter arguments as can ever be needed to + construct an N. +
  • regN, for the most common cases, with just one string argument: +
    +         regN : Str -> N
    +
    +
  • A language-dependent (small) set of functions to handle mild irregularities + and common exceptions. +

    +For the complement-taking variants, such as V2, we provide +

    +
  • mkV2, which takes a V and all necessary arguments, such + as case and preposition: +
    +         mkV2 : V -> Case -> Str -> V2 ;
    +
    +
  • A language-dependent (small) set of functions to handle common special cases, + such as direct transitive verbs: +
    +         dirV2 : V -> V2 ;
    +         -- dirV2 v = mkV2 v accusative [] 
    +
    +
+ +

+The golden rule for the design of paradigms is that +

+
    +
  • The user will only need function applications with constants and strings, + never any records or tables. +
+ +

+The discipline of data abstraction moreover requires that the user of the resource +is not given access to parameter constructors, but only to constants that denote +them. This gives the resource grammarian the freedom to change the underlying +data representation if needed. It means that the ParadigmsGer module has +to define constants for those parameter types and constructors that +the application grammarian may need to use, e.g. +

+
+    oper 
+      Case : Type ;
+      nominative, accusative, genitive, dative : Case ;
+
+

+These constants are defined in terms of parameter types and constructors +in ResGer and MorphoGer, which modules are not +visible to the application grammarian. +

+

Lock fields

+

+An important difference between MorphoGer and +ParadigmsGer is that the former uses "raw" record types +for word classes, whereas the latter used category symbols defined in +CatGer. When these category symbols are used to denote +record types in a resource modules, such as ParadigmsGer, +a lock field is added to the record, so that categories +with the same implementation are not confused with each other. +(This is inspired by the newtype discipline in Haskell.) +For instance, the lincats of adverbs and conjunctions are the same +in CommonX (and therefore in CatGer, which inherits it): +

+
+    lincat Adv  = {s : Str} ;
+    lincat Conj = {s : Str} ;
+
+

+But when these category symbols are used to denote their linearization +types in resource module, these definitions are translated to +

+
+    oper Adv  : Type = {s : Str  ; lock_Adv  : {}} ;
+    oper Conj : Type = {s : Str} ; lock_Conj : {}} ;
+
+

+In this way, the user of a resource grammar cannot confuse adverbs with +conjunctions. In other words, the lock fields force the type checker +to function as grammaticality checker. +

+

+When the resource grammar is opened in an application grammar, the +lock fields are never seen (except possibly in type error messages), +and the application grammarian should never write them herself. If she +has to do this, it is a sign that the resource grammar is incomplete, and +the proper way to proceed is to fix the resource grammar. +

+

+The resource grammarian has to provide the dummy lock field values +in her hidden definitions of constants in Paradigms. For instance, +

+
+    mkAdv : Str -> Adv ;
+    -- mkAdv s = {s = s ; lock_Adv = <>} ;
+
+

+

Lexicon construction

+

+The lexicon belonging to LangGer consists of two modules: +

+
    +
  • StructuralGer, structural words, built by directly using + MorphoGer. +
  • BasicGer, content words, built by using ParadigmsGer. +
+ +

+The reason why MorphoGer has to be used in StructuralGer +is that ParadigmsGer does not contain constructors for closed +word classes such as pronouns and determiners. The reason why we +recommend ParadigmsGer for building LexiconGer is that +the coverage of the paradigms gets thereby tested and that the +use of the paradigms in LexiconGer gives a good set of examples for +those who want to build new lexica. +

+

Inside grammar modules

+

+Detailed implementation tricks +are found in the comments of each module. +

+

The category system

+ + +

Phrase category modules

+ + +

Resource modules

+ + +

Lexicon

+ + +

Lexicon extension

+

The irregularity lexicon

+

+It may be handy to provide a separate module of irregular +verbs and other words which are difficult for a lexicographer +to handle. There are usually a limited number of such words - a +few hundred perhaps. Building such a lexicon separately also +makes it less important to cover everything by the +worst-case paradigms (mkV etc). +

+

Lexicon extraction from a word list

+

+You can often find resources such as lists of +irregular verbs on the internet. For instance, the +Irregular German Verbs +page gives a list of verbs in the +traditional tabular format, which begins as follows: +

+
+    backen (du bäckst, er bäckt)	                 backte [buk]              gebacken
+    befehlen (du befiehlst, er befiehlt; befiehl!) befahl (beföhle; befähle) befohlen
+    beginnen                                       begann (begönne; begänne) begonnen
+    beißen                                         biß                       gebissen
+
+

+All you have to do is to write a suitable verb paradigm +

+
+    irregV : (x1,_,_,_,_,x6 : Str) -> V ;
+
+

+and a Perl or Python or Haskell script that transforms +the table to +

+
+    backen_V   = irregV "backen" "bäckt" "back" "backte" "backte" "gebacken" ;
+    befehlen_V = irregV "befehlen" "befiehlt" "befiehl" "befahl" "beföhle" "befohlen" ;
+
+

+

+When using ready-made word lists, you should think about +coyright issues. Ideally, all resource grammar material should +be provided under GNU General Public License. +

+

Lexicon extraction from raw text data

+

+This is a cheap technique to build a lexicon of thousands +of words, if text data is available in digital format. +See the Functional Morphology +homepage for details. +

+

Extending the resource grammar API

+

+Sooner or later it will happen that the resource grammar API +does not suffice for all applications. A common reason is +that it does not include idiomatic expressions in a given language. +The solution then is in the first place to build language-specific +extension modules. This chapter will deal with this issue (to be completed). +

+

Writing an instance of parametrized resource grammar implementation

+

+Above we have looked at how a resource implementation is built by +the copy and paste method (from English to German), that is, formally +speaking, from scratch. A more elegant solution available for +families of languages such as Romance and Scandinavian is to +use parametrized modules. The advantages are +

+
    +
  • theoretical: linguistic generalizations and insights +
  • practical: maintainability improves with fewer components +
+ +

+In this chapter, we will look at an example: adding Italian to +the Romance family (to be completed). Here is a set of +slides +on the topic. +

+

Parametrizing a resource grammar implementation

+

+This is the most demanding form of resource grammar writing. +We do not recommend the method of parametrizing from the +beginning: it is easier to have one language first implemented +in the conventional way and then add another language of the +same family by aprametrization. This means that the copy and +paste method is still used, but at this time the differences +are put into an interface module. +

+

+This chapter will work out an example of how an Estonian grammar +is constructed from the Finnish grammar through parametrization. +

+ + + + diff --git a/doc/Resource-HOWTO.txt b/doc/Resource-HOWTO.txt new file mode 100644 index 000000000..e160232ca --- /dev/null +++ b/doc/Resource-HOWTO.txt @@ -0,0 +1,789 @@ +Resource grammar writing HOWTO +Author: Aarne Ranta +Last update: %%date(%c) + +% NOTE: this is a txt2tags file. +% Create an html file from this file using: +% txt2tags --toc -thtml Resource-HOWTO.txt + +%!target:html + +**History** + +September 2008: partly outdated - to be updated for API 1.5. + +October 2007: updated for API 1.2. + +January 2006: first version. + + +The purpose of this document is to tell how to implement the GF +resource grammar API for a new language. We will //not// cover how +to use the resource grammar, nor how to change the API. But we +will give some hints how to extend the API. + +A manual for using the resource grammar is found in + +[``http://www.cs.chalmers.se/~aarne/GF/lib/resource-1.0/doc/synopsis.html`` http://www.cs.chalmers.se/~aarne/GF/lib/resource-1.0/doc/synopsis.html]. + +A tutorial on GF, also introducing the idea of resource grammars, is found in + +[``http://www.cs.chalmers.se/~aarne/GF/doc/tutorial/gf-tutorial2.html`` ../../../doc/tutorial/gf-tutorial2.html]. + +This document concerns the API v. 1.0. You can find the current code in + +[``http://www.cs.chalmers.se/~aarne/GF/lib/resource-1.0/`` ..] + + + + +==The resource grammar structure== + +The library is divided into a bunch of modules, whose dependencies +are given in the following figure. + +[Syntax.png] + +- solid contours: module used by end users +- dashed contours: internal module +- ellipse: abstract/concrete pair of modules +- rectangle: resource or instance +- diamond: interface + + +The solid ellipses show the API as visible to the user of the library. The +dashed ellipses form the main of the implementation, on which the resource +grammar programmer has to work with. With the exception of the ``Paradigms`` +module, the visible API modules can be produced mechanically. + +[Grammar.png] + +Thus the API consists of a grammar and a lexicon, which is +provided for test purposes. + +The module structure is rather flat: most modules are direct +parents of ``Grammar``. The idea +is that you can concentrate on one linguistic aspect at a time, or +also distribute the work among several authors. The module ``Cat`` +defines the "glue" that ties the aspects together - a type system +to which all the other modules conform, so that e.g. ``NP`` means +the same thing in those modules that use ``NP``s and those that +constructs them. + + + +===Phrase category modules=== + +The direct parents of the top will be called **phrase category modules**, +since each of them concentrates on a particular phrase category (nouns, verbs, +adjectives, sentences,...). A phrase category module tells +//how to construct phrases in that category//. You will find out that +all functions in any of these modules have the same value type (or maybe +one of a small number of different types). Thus we have + + +- ``Noun``: construction of nouns and noun phrases +- ``Adjective``: construction of adjectival phrases +- ``Verb``: construction of verb phrases +- ``Adverb``: construction of adverbial phrases +- ``Numeral``: construction of cardinal and ordinal numerals +- ``Sentence``: construction of sentences and imperatives +- ``Question``: construction of questions +- ``Relative``: construction of relative clauses +- ``Conjunction``: coordination of phrases +- ``Phrase``: construction of the major units of text and speech +- ``Text``: construction of texts as sequences of phrases +- ``Idiom``: idiomatic phrases such as existentials + + + + +===Infrastructure modules=== + +Expressions of each phrase category are constructed in the corresponding +phrase category module. But their //use// takes mostly place in other modules. +For instance, noun phrases, which are constructed in ``Noun``, are +used as arguments of functions of almost all other phrase category modules. +How can we build all these modules independently of each other? + +As usual in typeful programming, the //only// thing you need to know +about an object you use is its type. When writing a linearization rule +for a GF abstract syntax function, the only thing you need to know is +the linearization types of its value and argument categories. To achieve +the division of the resource grammar to several parallel phrase category modules, +what we need is an underlying definition of the linearization types. This +definition is given as the implementation of + +- ``Cat``: syntactic categories of the resource grammar + + +Any resource grammar implementation has first to agree on how to implement +``Cat``. Luckily enough, even this can be done incrementally: you +can skip the ``lincat`` definition of a category and use the default +``{s : Str}`` until you need to change it to something else. In +English, for instance, many categories do have this linearization type. + + + +===Lexical modules=== + +What is lexical and what is syntactic is not as clearcut in GF as in +some other grammar formalisms. Logically, lexical means atom, i.e. a +``fun`` with no arguments. Linguistically, one may add to this +that the ``lin`` consists of only one token (or of a table whose values +are single tokens). Even in the restricted lexicon included in the resource +API, the latter rule is sometimes violated in some languages. For instance, +``Structural.both7and_DConj`` is an atom, but its linearization is +two words e.g. //both - and//. + +Another characterization of lexical is that lexical units can be added +almost //ad libitum//, and they cannot be defined in terms of already +given rules. The lexical modules of the resource API are thus more like +samples than complete lists. There are two such modules: + +- ``Structural``: structural words (determiners, conjunctions,...) +- ``Lexicon``: basic everyday content words (nouns, verbs,...) + + +The module ``Structural`` aims for completeness, and is likely to +be extended in future releases of the resource. The module ``Lexicon`` +gives a "random" list of words, which enable interesting testing of syntax, +and also a check list for morphology, since those words are likely to include +most morphological patterns of the language. + +In the case of ``Lexicon`` it may come out clearer than anywhere else +in the API that it is impossible to give exact translation equivalents in +different languages on the level of a resource grammar. In other words, +application grammars are likely to use the resource in different ways for +different languages. + + +==Language-dependent syntax modules== + +In addition to the common API, there is room for language-dependent extensions +of the resource. The top level of each languages looks as follows (with English as example): +``` + abstract English = Grammar, ExtraEngAbs, DictEngAbs +``` +where ``ExtraEngAbs`` is a collection of syntactic structures specific to English, +and ``DictEngAbs`` is an English dictionary +(at the moment, it consists of ``IrregEngAbs``, +the irregular verbs of English). Each of these language-specific grammars has +the potential to grow into a full-scale grammar of the language. These grammar +can also be used as libraries, but the possibility of using functors is lost. + +To give a better overview of language-specific structures, +modules like ``ExtraEngAbs`` +are built from a language-independent module ``ExtraAbs`` +by restricted inheritance: +``` + abstract ExtraEngAbs = Extra [f,g,...] +``` +Thus any category and function in ``Extra`` may be shared by a subset of all +languages. One can see this set-up as a matrix, which tells +what ``Extra`` structures +are implemented in what languages. For the common API in ``Grammar``, the matrix +is filled with 1's (everything is implemented in every language). + +In a minimal resource grammar implementation, the language-dependent +extensions are just empty modules, but it is good to provide them for +the sake of uniformity. + + +==The core of the syntax== + +Among all categories and functions, a handful are +most important and distinct ones, of which the others are can be +seen as variations. The categories are +``` + Cl ; VP ; V2 ; NP ; CN ; Det ; AP ; +``` +The functions are +``` + PredVP : NP -> VP -> Cl ; -- predication + ComplV2 : V2 -> NP -> VP ; -- complementization + DetCN : Det -> CN -> NP ; -- determination + ModCN : AP -> CN -> CN ; -- modification +``` +This [toy Latin grammar latin.gf] shows in a nutshell how these +rules relate the categories to each other. It is intended to be a +first approximation when designing the parameter system of a new +language. + + +===Another reduced API=== + +If you want to experiment with a small subset of the resource API first, +try out the module +[Syntax http://www.cs.chalmers.se/~aarne/GF/doc/tutorial/resource/Syntax.gf] +explained in the +[GF Tutorial http://www.cs.chalmers.se/~aarne/GF/doc/tutorial/gf-tutorial2.html]. + + +===The present-tense fragment=== + +Some lines in the resource library are suffixed with the comment +```--# notpresent +which is used by a preprocessor to exclude those lines from +a reduced version of the full resource. This present-tense-only +version is useful for applications in most technical text, since +they reduce the grammar size and compilation time. It can also +be useful to exclude those lines in a first version of resource +implementation. To compile a grammar with present-tense-only, use +``` + i -preproc=GF/lib/resource-1.0/mkPresent LangGer.gf +``` + + + +==Phases of the work== + +===Putting up a directory=== + +Unless you are writing an instance of a parametrized implementation +(Romance or Scandinavian), which will be covered later, the +simplest way is to follow roughly the following procedure. Assume you +are building a grammar for the German language. Here are the first steps, +which we actually followed ourselves when building the German implementation +of resource v. 1.0. + ++ Create a sister directory for ``GF/lib/resource/english``, named + ``german``. +``` + cd GF/lib/resource/ + mkdir german + cd german +``` + ++ Check out the [ISO 639 3-letter language code + http://www.w3.org/WAI/ER/IG/ert/iso639.htm] + for German: both ``Ger`` and ``Deu`` are given, and we pick ``Ger``. + ++ Copy the ``*Eng.gf`` files from ``english`` ``german``, + and rename them: +``` + cp ../english/*Eng.gf . + rename 's/Eng/Ger/' *Eng.gf +``` + ++ Change the ``Eng`` module references to ``Ger`` references + in all files: +``` + sed -i 's/English/German/g' *Ger.gf + sed -i 's/Eng/Ger/g' *Ger.gf +``` + The first line prevents changing the word ``English``, which appears + here and there in comments, to ``Gerlish``. + ++ This may of course change unwanted occurrences of the + string ``Eng`` - verify this by +``` + grep Ger *.gf +``` + But you will have to make lots of manual changes in all files anyway! + ++ Comment out the contents of these files: +``` + sed -i 's/^/--/' *Ger.gf +``` + This will give you a set of templates out of which the grammar + will grow as you uncomment and modify the files rule by rule. + ++ In all ``.gf`` files, uncomment the module headers and brackets, + leaving the module bodies commented. Unfortunately, there is no + simple way to do this automatically (or to avoid commenting these + lines in the previous step) - but uncommenting the first + and the last lines will actually do the job for many of the files. + ++ Uncomment the contents of the main grammar file: +``` + sed -i 's/^--//' LangGer.gf +``` + ++ Now you can open the grammar ``LangGer`` in GF: +``` + gf LangGer.gf +``` + You will get lots of warnings on missing rules, but the grammar will compile. + ++ At all following steps you will now have a valid, but incomplete + GF grammar. The GF command +``` + pg -printer=missing +``` + tells you what exactly is missing. + + +Here is the module structure of ``LangGer``. It has been simplified by leaving out +the majority of the phrase category modules. Each of them has the same dependencies +as e.g. ``VerbGer``. + +[German.png] + + +===Direction of work=== + +The real work starts now. There are many ways to proceed, the main ones being +- Top-down: start from the module ``Phrase`` and go down to ``Sentence``, then + ``Verb``, ``Noun``, and in the end ``Lexicon``. In this way, you are all the time + building complete phrases, and add them with more content as you proceed. + **This approach is not recommended**. It is impossible to test the rules if + you have no words to apply the constructions to. + +- Bottom-up: set as your first goal to implement ``Lexicon``. To this end, you + need to write ``ParadigmsGer``, which in turn needs parts of + ``MorphoGer`` and ``ResGer``. + **This approach is not recommended**. You can get stuck to details of + morphology such as irregular words, and you don't have enough grasp about + the type system to decide what forms to cover in morphology. + + +The practical working direction is thus a saw-like motion between the morphological +and top-level modules. Here is a possible course of the work that gives enough +test data and enough general view at any point: ++ Define ``Cat.N`` and the required parameter types in ``ResGer``. As we define +``` + lincat N = {s : Number => Case => Str ; g : Gender} ; +``` +we need the parameter types ``Number``, ``Case``, and ``Gender``. The definition +of ``Number`` in [``common/ParamX`` ../common/ParamX.gf] works for German, so we +use it and just define ``Case`` and ``Gender`` in ``ResGer``. + ++ Define ``regN`` in ``ParadigmsGer``. In this way you can +already implement a huge amount of nouns correctly in ``LexiconGer``. Actually +just adding ``mkN`` should suffice for every noun - but, +since it is tedious to use, you +might proceed to the next step before returning to morphology and defining the +real work horse ``reg2N``. + ++ While doing this, you may want to test the resource independently. Do this by +``` + i -retain ParadigmsGer + cc regN "Kirche" +``` + ++ Proceed to determiners and pronouns in +``NounGer`` (``DetCN UsePron DetSg SgQuant NoNum NoOrd DefArt IndefArt UseN``)and +``StructuralGer`` (``i_Pron every_Det``). You also need some categories and +parameter types. At this point, it is maybe not possible to find out the final +linearization types of ``CN``, ``NP``, and ``Det``, but at least you should +be able to correctly inflect noun phrases such as //every airplane//: +``` + i LangGer.gf + l -table DetCN every_Det (UseN airplane_N) + + Nom: jeder Flugzeug + Acc: jeden Flugzeug + Dat: jedem Flugzeug + Gen: jedes Flugzeugs +``` + ++ Proceed to verbs: define ``CatGer.V``, ``ResGer.VForm``, and +``ParadigmsGer.regV``. You may choose to exclude ``notpresent`` +cases at this point. But anyway, you will be able to inflect a good +number of verbs in ``Lexicon``, such as +``live_V`` (``regV "leven"``). + ++ Now you can soon form your first sentences: define ``VP`` and +``Cl`` in ``CatGer``, ``VerbGer.UseV``, and ``SentenceGer.PredVP``. +Even if you have excluded the tenses, you will be able to produce +``` + i -preproc=mkPresent LangGer.gf + > l -table PredVP (UsePron i_Pron) (UseV live_V) + + Pres Simul Pos Main: ich lebe + Pres Simul Pos Inv: lebe ich + Pres Simul Pos Sub: ich lebe + Pres Simul Neg Main: ich lebe nicht + Pres Simul Neg Inv: lebe ich nicht + Pres Simul Neg Sub: ich nicht lebe +``` + ++ Transitive verbs (``CatGer.V2 ParadigmsGer.dirV2 VerbGer.ComplV2``) +are a natural next step, so that you can +produce ``ich liebe dich``. + ++ Adjectives (``CatGer.A ParadigmsGer.regA NounGer.AdjCN AdjectiveGer.PositA``) +will force you to think about strong and weak declensions, so that you can +correctly inflect //my new car, this new car//. + ++ Once you have implemented the set +(``Noun.DetCN Noun.AdjCN Verb.UseV Verb.ComplV2 Sentence.PredVP), +you have overcome most of difficulties. You know roughly what parameters +and dependences there are in your language, and you can now produce very +much in the order you please. + + + +===The develop-test cycle=== + +The following develop-test cycle will +be applied most of the time, both in the first steps described above +and in later steps where you are more on your own. + ++ Select a phrase category module, e.g. ``NounGer``, and uncomment some + linearization rules (for instance, ``DefSg``, which is + not too complicated). + ++ Write down some German examples of this rule, for instance translations + of "the dog", "the house", "the big house", etc. Write these in all their + different forms (two numbers and four cases). + ++ Think about the categories involved (``CN, NP, N``) and the + variations they have. Encode this in the lincats of ``CatGer``. + You may have to define some new parameter types in ``ResGer``. + ++ To be able to test the construction, + define some words you need to instantiate it + in ``LexiconGer``. You will also need some regular inflection patterns + in``ParadigmsGer``. + ++ Test by parsing, linearization, + and random generation. In particular, linearization to a table should + be used so that you see all forms produced: +``` + gr -cat=NP -number=20 -tr | l -table +``` + ++ Spare some tree-linearization pairs for later regression testing. Use the + ``tree_bank`` command, +``` + gr -cat=NP -number=20 | tb -xml | wf NP.tb +``` + You can later compared your modified grammar to this treebank by +``` + rf NP.tb | tb -c +``` + + + +You are likely to run this cycle a few times for each linearization rule +you implement, and some hundreds of times altogether. There are 66 ``cat``s and +458 ``funs`` in ``Lang`` at the moment; 149 of the ``funs`` are outside the two +lexicon modules). + +Here is a [live log ../german/log.txt] of the actual process of +building the German implementation of resource API v. 1.0. +It is the basis of the more detailed explanations, which will +follow soon. (You will found out that these explanations involve +a rational reconstruction of the live process! Among other things, the +API was changed during the actual process to make it more intuitive.) + + +===Resource modules used=== + +These modules will be written by you. + +- ``ResGer``: parameter types and auxiliary operations +(a resource for the resource grammar!) +- ``ParadigmsGer``: complete inflection engine and most important regular paradigms +- ``MorphoGer``: auxiliaries for ``ParadigmsGer`` and ``StructuralGer``. This need +not be separate from ``ResGer``. + + +These modules are language-independent and provided by the existing resource +package. + +- ``ParamX``: parameter types used in many languages +- ``CommonX``: implementation of language-uniform categories + such as $Text$ and $Phr$, as well as of + the logical tense, anteriority, and polarity parameters +- ``Coordination``: operations to deal with lists and coordination +- ``Prelude``: general-purpose operations on strings, records, + truth values, etc. +- ``Predefined``: general-purpose operations with hard-coded definitions + + +An important decision is what rules to implement in terms of operations in +``ResGer``. A golden rule of functional programming says that, whenever +you find yourself programming by copy and paste, you should write a function +instead. This indicates that an operation should be created if it is to be +used at least twice. At the same time, a sound principle of vicinity says that +it should not require too much browsing to understand what a rule does. +From these two principles, we have derived the following practice: +- If an operation is needed //in two different modules//, +it should be created in ``ResGer``. An example is ``mkClause``, +used in ``Sentence``, ``Question``, and ``Relative``- +- If an operation is needed //twice in the same module//, but never +outside, it should be created in the same module. Many examples are +found in ``Numerals``. +- If an operation is only needed once, it should not be created (but rather +inlined). Most functions in phrase category modules are implemented in this +way. + + +This discipline is very different from the one followed in earlier +versions of the library (up to 0.9). We then valued the principle of +abstraction more than vicinity, creating layers of abstraction for +almost everything. This led in practice to the duplication of almost +all code on the ``lin`` and ``oper`` levels, and made the code +hard to understand and maintain. + + + +===Morphology and lexicon=== + +The paradigms needed to implement +``LexiconGer`` are defined in +``ParadigmsGer``. +This module provides high-level ways to define the linearization of +lexical items, of categories ``N, A, V`` and their complement-taking +variants. + + + +For ease of use, the ``Paradigms`` modules follow a certain +naming convention. Thus they for each lexical category, such as ``N``, +the functions + +- ``mkN``, for worst-case construction of ``N``. Its type signature + has the form +``` + mkN : Str -> ... -> Str -> P -> ... -> Q -> N +``` + with as many string and parameter arguments as can ever be needed to + construct an ``N``. +- ``regN``, for the most common cases, with just one string argument: +``` + regN : Str -> N +``` +- A language-dependent (small) set of functions to handle mild irregularities + and common exceptions. + +For the complement-taking variants, such as ``V2``, we provide + +- ``mkV2``, which takes a ``V`` and all necessary arguments, such + as case and preposition: +``` + mkV2 : V -> Case -> Str -> V2 ; +``` +- A language-dependent (small) set of functions to handle common special cases, + such as direct transitive verbs: +``` + dirV2 : V -> V2 ; + -- dirV2 v = mkV2 v accusative [] +``` + + +The golden rule for the design of paradigms is that + +- The user will only need function applications with constants and strings, + never any records or tables. + + +The discipline of data abstraction moreover requires that the user of the resource +is not given access to parameter constructors, but only to constants that denote +them. This gives the resource grammarian the freedom to change the underlying +data representation if needed. It means that the ``ParadigmsGer`` module has +to define constants for those parameter types and constructors that +the application grammarian may need to use, e.g. +``` + oper + Case : Type ; + nominative, accusative, genitive, dative : Case ; +``` +These constants are defined in terms of parameter types and constructors +in ``ResGer`` and ``MorphoGer``, which modules are not +visible to the application grammarian. + + +===Lock fields=== + +An important difference between ``MorphoGer`` and +``ParadigmsGer`` is that the former uses "raw" record types +for word classes, whereas the latter used category symbols defined in +``CatGer``. When these category symbols are used to denote +record types in a resource modules, such as ``ParadigmsGer``, +a **lock field** is added to the record, so that categories +with the same implementation are not confused with each other. +(This is inspired by the ``newtype`` discipline in Haskell.) +For instance, the lincats of adverbs and conjunctions are the same +in ``CommonX`` (and therefore in ``CatGer``, which inherits it): +``` + lincat Adv = {s : Str} ; + lincat Conj = {s : Str} ; +``` +But when these category symbols are used to denote their linearization +types in resource module, these definitions are translated to +``` + oper Adv : Type = {s : Str ; lock_Adv : {}} ; + oper Conj : Type = {s : Str} ; lock_Conj : {}} ; +``` +In this way, the user of a resource grammar cannot confuse adverbs with +conjunctions. In other words, the lock fields force the type checker +to function as grammaticality checker. + +When the resource grammar is ``open``ed in an application grammar, the +lock fields are never seen (except possibly in type error messages), +and the application grammarian should never write them herself. If she +has to do this, it is a sign that the resource grammar is incomplete, and +the proper way to proceed is to fix the resource grammar. + +The resource grammarian has to provide the dummy lock field values +in her hidden definitions of constants in ``Paradigms``. For instance, +``` + mkAdv : Str -> Adv ; + -- mkAdv s = {s = s ; lock_Adv = <>} ; +``` + + +===Lexicon construction=== + +The lexicon belonging to ``LangGer`` consists of two modules: + +- ``StructuralGer``, structural words, built by directly using + ``MorphoGer``. +- ``BasicGer``, content words, built by using ``ParadigmsGer``. + + +The reason why ``MorphoGer`` has to be used in ``StructuralGer`` +is that ``ParadigmsGer`` does not contain constructors for closed +word classes such as pronouns and determiners. The reason why we +recommend ``ParadigmsGer`` for building ``LexiconGer`` is that +the coverage of the paradigms gets thereby tested and that the +use of the paradigms in ``LexiconGer`` gives a good set of examples for +those who want to build new lexica. + + + + + + + +==Inside grammar modules== + +Detailed implementation tricks +are found in the comments of each module. + + +===The category system=== + +- [Common gfdoc/Common.html], [CommonX ../common/CommonX.gf] +- [Cat gfdoc/Cat.html], [CatGer gfdoc/CatGer.gf] + + +===Phrase category modules=== + +- [Noun gfdoc/Noun.html], [NounGer ../german/NounGer.gf] +- [Adjective gfdoc/Adjective.html], [AdjectiveGer ../german/AdjectiveGer.gf] +- [Verb gfdoc/Verb.html], [VerbGer ../german/VerbGer.gf] +- [Adverb gfdoc/Adverb.html], [AdverbGer ../german/AdverbGer.gf] +- [Numeral gfdoc/Numeral.html], [NumeralGer ../german/NumeralGer.gf] +- [Sentence gfdoc/Sentence.html], [SentenceGer ../german/SentenceGer.gf] +- [Question gfdoc/Question.html], [QuestionGer ../german/QuestionGer.gf] +- [Relative gfdoc/Relative.html], [RelativeGer ../german/RelativeGer.gf] +- [Conjunction gfdoc/Conjunction.html], [ConjunctionGer ../german/ConjunctionGer.gf] +- [Phrase gfdoc/Phrase.html], [PhraseGer ../german/PhraseGer.gf] +- [Text gfdoc/Text.html], [TextX ../common/TextX.gf] +- [Idiom gfdoc/Idiom.html], [IdiomGer ../german/IdiomGer.gf] +- [Lang gfdoc/Lang.html], [LangGer ../german/LangGer.gf] + + +===Resource modules=== + +- [ResGer ../german/ResGer.gf] +- [MorphoGer ../german/MorphoGer.gf] +- [ParadigmsGer gfdoc/ParadigmsGer.html], [ParadigmsGer.gf ../german/ParadigmsGer.gf] + + +===Lexicon=== + +- [Structural gfdoc/Structural.html], [StructuralGer ../german/StructuralGer.gf] +- [Lexicon gfdoc/Lexicon.html], [LexiconGer ../german/LexiconGer.gf] + + +==Lexicon extension== + +===The irregularity lexicon=== + +It may be handy to provide a separate module of irregular +verbs and other words which are difficult for a lexicographer +to handle. There are usually a limited number of such words - a +few hundred perhaps. Building such a lexicon separately also +makes it less important to cover //everything// by the +worst-case paradigms (``mkV`` etc). + + + +===Lexicon extraction from a word list=== + +You can often find resources such as lists of +irregular verbs on the internet. For instance, the +[Irregular German Verbs http://www.iee.et.tu-dresden.de/~wernerr/grammar/verben_dt.html] +page gives a list of verbs in the +traditional tabular format, which begins as follows: +``` + backen (du bäckst, er bäckt) backte [buk] gebacken + befehlen (du befiehlst, er befiehlt; befiehl!) befahl (beföhle; befähle) befohlen + beginnen begann (begönne; begänne) begonnen + beißen biß gebissen +``` +All you have to do is to write a suitable verb paradigm +``` + irregV : (x1,_,_,_,_,x6 : Str) -> V ; +``` +and a Perl or Python or Haskell script that transforms +the table to +``` + backen_V = irregV "backen" "bäckt" "back" "backte" "backte" "gebacken" ; + befehlen_V = irregV "befehlen" "befiehlt" "befiehl" "befahl" "beföhle" "befohlen" ; +``` + +When using ready-made word lists, you should think about +coyright issues. Ideally, all resource grammar material should +be provided under GNU General Public License. + + + +===Lexicon extraction from raw text data=== + +This is a cheap technique to build a lexicon of thousands +of words, if text data is available in digital format. +See the [Functional Morphology http://www.cs.chalmers.se/~markus/FM/] +homepage for details. + + + +===Extending the resource grammar API=== + +Sooner or later it will happen that the resource grammar API +does not suffice for all applications. A common reason is +that it does not include idiomatic expressions in a given language. +The solution then is in the first place to build language-specific +extension modules. This chapter will deal with this issue (to be completed). + + +==Writing an instance of parametrized resource grammar implementation== + +Above we have looked at how a resource implementation is built by +the copy and paste method (from English to German), that is, formally +speaking, from scratch. A more elegant solution available for +families of languages such as Romance and Scandinavian is to +use parametrized modules. The advantages are + +- theoretical: linguistic generalizations and insights +- practical: maintainability improves with fewer components + + +In this chapter, we will look at an example: adding Italian to +the Romance family (to be completed). Here is a set of +[slides http://www.cs.chalmers.se/~aarne/geocal2006.pdf] +on the topic. + + +==Parametrizing a resource grammar implementation== + +This is the most demanding form of resource grammar writing. +We do //not// recommend the method of parametrizing from the +beginning: it is easier to have one language first implemented +in the conventional way and then add another language of the +same family by aprametrization. This means that the copy and +paste method is still used, but at this time the differences +are put into an ``interface`` module. + + + +This chapter will work out an example of how an Estonian grammar +is constructed from the Finnish grammar through parametrization. + + diff --git a/doc/eu-langs.dot b/doc/eu-langs.dot new file mode 100644 index 000000000..115ce0040 --- /dev/null +++ b/doc/eu-langs.dot @@ -0,0 +1,79 @@ +graph{ + +size = "7,7" ; + +overlap = scale ; + +"Abs" [label = "Abstract Syntax", style = "solid", shape = "rectangle"] ; + +"1" [label = "Bulgarian", style = "solid", shape = "ellipse", color = "green"] ; +"1" -- "Abs" [style = "solid"]; + +"2" [label = "Czech", style = "solid", shape = "ellipse", color = "red"] ; +"2" -- "Abs" [style = "solid"]; + +"3" [label = "Danish", style = "solid", shape = "ellipse", color = "green"] ; +"3" -- "Abs" [style = "solid"]; + +"4" [label = "German", style = "solid", shape = "ellipse", color = "green"] ; +"4" -- "Abs" [style = "solid"]; + +"5" [label = "Estonian", style = "solid", shape = "ellipse", color = "red"] ; +"5" -- "Abs" [style = "solid"]; + +"6" [label = "Greek", style = "solid", shape = "ellipse", color = "red"] ; +"6" -- "Abs" [style = "solid"]; + +"7" [label = "English", style = "solid", shape = "ellipse", color = "green"] ; +"7" -- "Abs" [style = "solid"]; + +"8" [label = "Spanish", style = "solid", shape = "ellipse", color = "green"] ; +"8" -- "Abs" [style = "solid"]; + +"9" [label = "French", style = "solid", shape = "ellipse", color = "green"] ; +"9" -- "Abs" [style = "solid"]; + +"10" [label = "Italian", style = "solid", shape = "ellipse", color = "green"] ; +"10" -- "Abs" [style = "solid"]; + +"11" [label = "Latvian", style = "solid", shape = "ellipse", color = "red"] ; +"11" -- "Abs" [style = "solid"]; + +"12" [label = "Lithuanian", style = "solid", shape = "ellipse", color = "red"] ; +"Abs" -- "12" [style = "solid"]; + +"13" [label = "Irish", style = "solid", shape = "ellipse", color = "red"] ; +"Abs" -- "13" [style = "solid"]; + +"14" [label = "Hungarian", style = "solid", shape = "ellipse", color = "red"] ; +"Abs" -- "14" [style = "solid"]; + +"15" [label = "Maltese", style = "solid", shape = "ellipse", color = "red"] ; +"Abs" -- "15" [style = "solid"]; + +"16" [label = "Dutch", style = "solid", shape = "ellipse", color = "red"] ; +"Abs" -- "16" [style = "solid"]; + +"17" [label = "Polish", style = "solid", shape = "ellipse", color = "red"] ; +"Abs" -- "17" [style = "solid"]; + +"18" [label = "Portuguese", style = "solid", shape = "ellipse", color = "red"] ; +"Abs" -- "18" [style = "solid"]; + +"19" [label = "Slovak", style = "solid", shape = "ellipse", color = "red"] ; +"Abs" -- "19" [style = "solid"]; + +"20" [label = "Slovene", style = "solid", shape = "ellipse", color = "red"] ; +"Abs" -- "20" [style = "solid"]; + +"21" [label = "Romanian", style = "solid", shape = "ellipse", color = "red"] ; +"Abs" -- "21" [style = "solid"]; + +"22" [label = "Finnish", style = "solid", shape = "ellipse", color = "green"] ; +"Abs" -- "22" [style = "solid"]; + +"23" [label = "Swedish", style = "solid", shape = "ellipse", color = "green"] ; +"Abs" -- "23" [style = "solid"]; + + +} diff --git a/doc/eu-langs.png b/doc/eu-langs.png new file mode 100644 index 0000000000000000000000000000000000000000..8c46a19dbdd452d13e8ecee56c4504f3002e7d6c GIT binary patch literal 85484 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 literal 0 HcmV?d00001 diff --git a/doc/gf-summerschool.html b/doc/gf-summerschool.html new file mode 100644 index 000000000..239dbd7ef --- /dev/null +++ b/doc/gf-summerschool.html @@ -0,0 +1,368 @@ + + + + + +European Resource Grammar Summer School + +

European Resource Grammar Summer School

+ +Gothenburg, August 2009
+Aarne Ranta (aarne at chalmers.se) +
+ +

+ +

+

Executive summary

+

+We plan to organize a summer school with the goal of implementing the GF +resource grammar library for 15 new languages, so that the library will +cover all the 23 official EU languages of year 2009. +As a test application of the grammars, also an extension of +the WebALT mathematical exercise translator will be built for each +language. +

+

+2 students per language are selected to the summer school, after a phase of +self-studies and on the basis of assignments that consist of parts of the resource +grammars. Travel and accommodation are paid to these participants. +If funding gets arranged, the call of participation for the summer school will +be announced in February 2009, and the summer school itself will take place +in August 2009, in Gothenburg. +

+

Introduction

+

+Since 2007, EU-27 has 23 official languages, listed in the diagram on top of this +document. +There is a growing need of translation between +these languages. The traditional language-to-language method requires 23*22 = 506 +translators (humans or computer programs) to cover all possible translation needs. +

+

+An alternative to language-to-language translation is the use of an interlingua: +a language-independent representation such that all translation problems can +be reduced to translating to and from the interlingua. With 23 languages, +only 2*23 = 46 translators are needed. +

+

+Interlingua sounds too good to be true. In a sense, it is. All attempts to +create an interlingua that would solve all translation problems have failed. +However, interlinguas for restricted applications have shown more +success. For instance, mathematical texts and weather reports can be translated +by using interlinguas tailor-made for the domains of mathematics and weather reports, +respectively. +

+

+What is required of an interlingua is +

+
    +
  • semantic accuracy: correspondence to what you want to say in the application +
  • language-independence: abstraction from individual languages +
+ +

+Thus, for instance, an interlingua for mathematical texts may be based on +mathematical logic, which at the same time gives semantic accuracy and +language independence. In other domains, something else than mathematical +logic may be needed; the ontologies defined within the semantic +web technology are often good starting points for interlinguas. +

+

GF: a framework for multilingual grammars

+

+The interlingua is just one part of a translation system. We also need +the mappings between the interlingua and the involved languages. As the +number of languages increases, this part grows while the interlingua remains +constant. +

+

+GF (Grammatical Framework, +gf.digitalgrammars.com) +is a programming language designed to support interlingua-based translation. +A "program" in GF is a multilingual grammar, which consists of an +abstract syntax and a set of concrete syntaxes. A concrete +syntaxes is a mapping from the abstract syntax to a particular language. +These mappings are reversible, which means that they can be used for +translating in both directions. This means that creating an interlingua-based +translator for 23 languages just requires 1 + 23 = 24 grammar modules (the abstract +syntax and the concrete syntaxes). +

+

+The diagram first in this document shows a system covering the 23 EU languages. +Languages marked in +red are of particular interest for the summer school, since they are those +on which the effort will be concentrated. +

+

The GF resource grammar library

+

+The GF resource grammar library is a set of grammars used as libraries when +building interlingua-based translation systems. The library currently covers +the 9 languages coloured in green in the diagram above; in addition, +Catalan, Norwegian, and Russian are covered, and there is ongoing work on +Arabic, Hindi/Urdu, and Thai. +

+

+The purpose of the resource grammar library is to define the "low-level" structure +of a language: inflection, word order, agreement. This structure belongs to what +linguists call morphology and syntax. It can be very complex and requires +a lot of knowledge. Yet, when translating from one language to another, knowing +morphology and syntax is but a part of what is needed. The translator (whether human +or machine) must understand the meaning of what is translated, and must also know +the idiomatic way to express the meaning in the target language. This knowledge +can be very domain-dependent and requires in general an expert in the field to +reach high quality: a mathematician in the field of mathematics, a meteorologist +in the field of weather reports, etc. +

+

+The problem is to find a person who is an expert in both the domain of translation +and in the low-level linguistic details. It is the rareness of this combination +that has made it difficult to build interlingua-based translation systems. +The GF resource grammar library has the mission of helping in this task. It encapsulates +the low-level linguistics in program modules accessed through easy-to-use interfaces. +Experts on different domains can build translation systems by using the library, +without knowing low-level linguistics. The idea is much the same as when a +programmer builds a graphical user interface (GUI) from high-level elements such as +buttons and menus, without having to care about pixels or geometrical forms. +

+

Applications of the library

+

+In addition to translation, the library is also useful in localization, +that is, porting a piece of software to new languages. +The GF resource grammar library has been used in three major projects that need +interlingua-based translation or localization of systems to new languages: +

+ + +

+The library is also a generic linguistic resource, which can be used for tasks +such as language teaching and information retrieval. The liberal license (GPL) +makes it usable for anyone and for any task. GF also has tools supporting the +use of grammars in programs written in other programming languages: C, C++, Haskell, +Java, JavaScript, and Prolog. In connection with the TALK project, support has also been +developed for translating GF grammars to language models used in speech +recognition. +

+

The structure of the library

+

+The library has the following main parts: +

+
    +
  • Inflection paradigms, covering the inflection of each language. +
  • Common Syntax API, covering a large set of syntax rule that + can be implemented for all languages involved. +
  • Common Test Lexicon, giving ca. 500 common words that can be used for + testing the library. +
  • Language-Specific Syntax Extensions, covering syntax rules that are + not implementable for all languages. +
  • Language-Specific Lexica, word lists for each language, with + accurate morphological and syntactic information. +
+ +

+The goal of the summer school is to implement, for each language, at least +the first three components. The latter three are more open-ended in character. +

+

The summer school

+

+The goal of the summer school is to extend the GF resource grammar library +to covering all 23 EU languages, which means we need 15 new languages. +

+

+The amount of work and skill is between a Master's thesis and a PhD thesis. +The Russian implementation was made by Janna Khegai as a part of her +PhD thesis; the thesis contains other material, too. +The Arabic implementation was started by Ali El Dada in his Master's thesis, +but the thesis does not cover the whole API. The realistic amount of work is +somewhere around 8 person months, but this is very much language-dependent. +Dutch, for instance, can profit from previous implementations of German and +Scandinavian languages, and will probably require less work. +Latvian and Lithuanian are the first languages of the Baltic family and +will probably require much more work. +

+

+In any case, the proposed allocation of work power is 2 participants per +language. They will have 6 months to work at home, followed +by 2 weeks of summer school. Who are these participants? +

+

Selecting participants

+

+After the call has been published, persons interested to participate in +the project are expected to learn GF by self-study from the +tutorial. +This should take a couple of weeks. +

+

+After and perhapts in parallel with +working out the tutorial, the participants should continue to +implement selected parts of the resource grammar, following the advice from +the +Resource-HOWTO document. +What parts exactly are selected will be announced later. +This work will take another couple of weeks. +

+

+This sample resource grammar fragment +will be submitted to the Summer School Committee in the beginning of May. +The Committee then decides who is invited to represent which language +in the summer school. +

+

+After the Committee decision, the participants have around three months +to work on their languages. The work is completed in the summer school itself. It is also +thoroughly tested by using it to add a new language to the WebALT mathematical +exercise translator. +

+

+Depending on the quality of submitted work, and on the demands of different +languages, the Committee may decide to select another number than 2 participants +for a language. We will also consider accepting participants who want to +pay their own expenses. +

+

+Also good proposals from non-EU languages will be considered. Proponents of +such languages should contact the summer school organizers as early as possible. +

+

+To keep track on who is working on which language, we will establish a web page +(Wiki or similar) soon after the call is published. The participants are encourage +to contact each other and even work in groups. +

+

Who is qualified

+

+Writing a resource grammar implementation requires good general programming +skills, and a good explicit knowledge of the grammar of the target language. +A typical participant could be +

+
    +
  • native or fluent speaker of the target language +
  • interested in languages on the theoretical level, and preferably familiar + with many languages (to be able to think about them on an abstract level) +
  • familiar with functional programming languages such as ML or Haskell + (GF itself is a language similar to these) +
  • on Master's or PhD level in linguistics, computer science, or mathematics +
+ +

+But it is the quality of the assignment that is assessed, not any formal +requirements. The "typical participant" was described to give an idea of +who is likely to succeed in this. +

+

Costs

+

+Our aim is to make the summer school free of charge for the participants +who are selected on the basis of their assignments. And not only that: +we plan to cover their travel and accommodation costs, up to 1000 EUR +per person. +

+

+We want to get the funding question settled by mid-February 2009, and make +the final decision on the summer school then. +

+

Teachers

+

+Krasimir Angelov +

+

+?Olga Caprotti +

+

+?Lauri Carlson +

+

+?Robin Cooper +

+

+?Björn Bringert +

+

+Håkan Burden +

+

+?Elisabet Engdahl +

+

+?Markus Forsberg +

+

+?Janna Khegai +

+

+?Peter Ljunglöf +

+

+?Wanjiku Ng'ang'a +

+

+Aarne Ranta +

+

+?Jordi Saludes +

+

+In addition, we will look for consultants who can help to assess the results +for each language +

+

The Summer School Committee

+

+This committee consists of a number of teachers and consultants, +who will select the participants. +

+

Time and Place

+

+The summer school will +be organized in Gothenburg in the latter half of August 2009. +

+

+Time schedule (2009): +

+
    +
  • February: announcement of summer school and the grammar + writing contest to get participants +
  • March-April: work on the contest assignment (ca 1 month) +
  • May: submission deadline and notification of acceptance +
  • June-July: more work on the grammars +
  • August: summer school +
+ +

Dissemination and intellectual property

+

+The new resource grammars will be released under the GPL just like +the current resource grammars, +with the copyright held by respective authors. +

+

+The grammars will be distributed via the GF web site. +

+

+The WebALT-specific grammars will have special licenses agreed between the +authors and WebALT Inc. +

+

Why I should participate

+

+Seven reasons: +

+
    +
  1. free trip and stay in Gothenburg (to be confirmed) +
  2. participation in a pioneering language technology work in an enthusiastic atmosphere +
  3. work and fun with people from all over Europe +
  4. job opportunities and business ideas +
  5. credits: the school project will be established as a course worth + 15 ETCS points per person, but extensions to Master's thesis will + also be considered +
  6. merits: the resulting grammar can easily lead to a published paper +
  7. contribution to the multilingual and multicultural development of Europe +
+ + + + + diff --git a/doc/gf-summerschool.txt b/doc/gf-summerschool.txt new file mode 100644 index 000000000..076578598 --- /dev/null +++ b/doc/gf-summerschool.txt @@ -0,0 +1,332 @@ +European Resource Grammar Summer School +Gothenburg, August 2009 +Aarne Ranta (aarne at chalmers.se) + +%!Encoding : iso-8859-1 + +%!target:html + +[eu-langs.png] + + +===Executive summary=== + +We plan to organize a summer school with the goal of implementing the GF +resource grammar library for 15 new languages, so that the library will +cover all the 23 official EU languages of year 2009. +As a test application of the grammars, also an extension of +the WebALT mathematical exercise translator will be built for each +language. + +2 students per language are selected to the summer school, after a phase of +self-studies and on the basis of assignments that consist of parts of the resource +grammars. Travel and accommodation are paid to these participants. +If funding gets arranged, the call of participation for the summer school will +be announced in February 2009, and the summer school itself will take place +in August 2009, in Gothenburg. + + + +==Introduction== + +Since 2007, EU-27 has 23 official languages, listed in the diagram on top of this +document. +%[``http://ec.europa.eu/education/policies/lang/languages/index_en.html`` +%http://ec.europa.eu/education/policies/lang/languages/index_en.html]. +There is a growing need of translation between +these languages. The traditional language-to-language method requires 23*22 = 506 +translators (humans or computer programs) to cover all possible translation needs. + +An alternative to language-to-language translation is the use of an **interlingua**: +a language-independent representation such that all translation problems can +be reduced to translating to and from the interlingua. With 23 languages, +only 2*23 = 46 translators are needed. + +Interlingua sounds too good to be true. In a sense, it is. All attempts to +create an interlingua that would solve all translation problems have failed. +However, interlinguas for restricted applications have shown more +success. For instance, mathematical texts and weather reports can be translated +by using interlinguas tailor-made for the domains of mathematics and weather reports, +respectively. + +What is required of an interlingua is +- semantic accuracy: correspondence to what you want to say in the application +- language-independence: abstraction from individual languages + + +Thus, for instance, an interlingua for mathematical texts may be based on +mathematical logic, which at the same time gives semantic accuracy and +language independence. In other domains, something else than mathematical +logic may be needed; the **ontologies** defined within the semantic +web technology are often good starting points for interlinguas. + + +==GF: a framework for multilingual grammars== + +The interlingua is just one part of a translation system. We also need +the mappings between the interlingua and the involved languages. As the +number of languages increases, this part grows while the interlingua remains +constant. + +GF (Grammatical Framework, +[``gf.digitalgrammars.com`` http://gf.digitalgrammars.com]) +is a programming language designed to support interlingua-based translation. +A "program" in GF is a **multilingual grammar**, which consists of an +**abstract syntax** and a set of **concrete syntaxes**. A concrete +syntaxes is a mapping from the abstract syntax to a particular language. +These mappings are **reversible**, which means that they can be used for +translating in both directions. This means that creating an interlingua-based +translator for 23 languages just requires 1 + 23 = 24 grammar modules (the abstract +syntax and the concrete syntaxes). + +The diagram first in this document shows a system covering the 23 EU languages. +Languages marked in +red are of particular interest for the summer school, since they are those +on which the effort will be concentrated. + + + + +==The GF resource grammar library== + +The GF resource grammar library is a set of grammars used as libraries when +building interlingua-based translation systems. The library currently covers +the 9 languages coloured in green in the diagram above; in addition, +Catalan, Norwegian, and Russian are covered, and there is ongoing work on +Arabic, Hindi/Urdu, and Thai. + +The purpose of the resource grammar library is to define the "low-level" structure +of a language: inflection, word order, agreement. This structure belongs to what +linguists call morphology and syntax. It can be very complex and requires +a lot of knowledge. Yet, when translating from one language to another, knowing +morphology and syntax is but a part of what is needed. The translator (whether human +or machine) must understand the meaning of what is translated, and must also know +the idiomatic way to express the meaning in the target language. This knowledge +can be very domain-dependent and requires in general an expert in the field to +reach high quality: a mathematician in the field of mathematics, a meteorologist +in the field of weather reports, etc. + +The problem is to find a person who is an expert in both the domain of translation +and in the low-level linguistic details. It is the rareness of this combination +that has made it difficult to build interlingua-based translation systems. +The GF resource grammar library has the mission of helping in this task. It encapsulates +the low-level linguistics in program modules accessed through easy-to-use interfaces. +Experts on different domains can build translation systems by using the library, +without knowing low-level linguistics. The idea is much the same as when a +programmer builds a graphical user interface (GUI) from high-level elements such as +buttons and menus, without having to care about pixels or geometrical forms. + + + +===Applications of the library=== + +In addition to translation, the library is also useful in **localization**, +that is, porting a piece of software to new languages. +The GF resource grammar library has been used in three major projects that need +interlingua-based translation or localization of systems to new languages: +- in KeY, + [``http://www.key-project.org/`` http://www.key-project.org/], + for writing formal and informal software specifications (3 languages) +- in WebALT, + [``http://webalt.math.helsinki.fi/content/index_eng.html`` http://webalt.math.helsinki.fi/content/index_eng.html], + for translating mathematical exercises to 7 languages +- in TALK [``http://www.talk-project.org`` http://www.talk-project.org], + where the library was used for localizing spoken dialogue systems to six languages + + +The library is also a generic linguistic resource, which can be used for tasks +such as language teaching and information retrieval. The liberal license (GPL) +makes it usable for anyone and for any task. GF also has tools supporting the +use of grammars in programs written in other programming languages: C, C++, Haskell, +Java, JavaScript, and Prolog. In connection with the TALK project, support has also been +developed for translating GF grammars to language models used in speech +recognition. + + + +===The structure of the library=== + +The library has the following main parts: +- **Inflection paradigms**, covering the inflection of each language. +- **Common Syntax API**, covering a large set of syntax rule that + can be implemented for all languages involved. +- **Common Test Lexicon**, giving ca. 500 common words that can be used for + testing the library. +- **Language-Specific Syntax Extensions**, covering syntax rules that are + not implementable for all languages. +- **Language-Specific Lexica**, word lists for each language, with + accurate morphological and syntactic information. + + +The goal of the summer school is to implement, for each language, at least +the first three components. The latter three are more open-ended in character. + + +==The summer school== + +The goal of the summer school is to extend the GF resource grammar library +to covering all 23 EU languages, which means we need 15 new languages. + +The amount of work and skill is between a Master's thesis and a PhD thesis. +The Russian implementation was made by Janna Khegai as a part of her +PhD thesis; the thesis contains other material, too. +The Arabic implementation was started by Ali El Dada in his Master's thesis, +but the thesis does not cover the whole API. The realistic amount of work is +somewhere around 8 person months, but this is very much language-dependent. +Dutch, for instance, can profit from previous implementations of German and +Scandinavian languages, and will probably require less work. +Latvian and Lithuanian are the first languages of the Baltic family and +will probably require much more work. + +In any case, the proposed allocation of work power is 2 participants per +language. They will have 6 months to work at home, followed +by 2 weeks of summer school. Who are these participants? + + +===Selecting participants=== + +After the call has been published, persons interested to participate in +the project are expected to learn GF by self-study from the +[tutorial http://www.cs.chalmers.se/Cs/Research/Language-technology/GF/doc/gf-tutorial.html]. +This should take a couple of weeks. + +After and perhapts in parallel with +working out the tutorial, the participants should continue to +implement selected parts of the resource grammar, following the advice from +the +[Resource-HOWTO document http://www.cs.chalmers.se/Cs/Research/Language-technology/GF/doc/Resource-HOWTO.html]. +%[``http://www.cs.chalmers.se/~aarne/GF/lib/resource-1.0/doc/Resource-HOWTO.html`` http://www.cs.chalmers.se/~aarne/GF/lib/resource-1.0/doc/Resource-HOWTO.html]. +What parts exactly are selected will be announced later. +This work will take another couple of weeks. + +This sample resource grammar fragment +will be submitted to the Summer School Committee in the beginning of May. +The Committee then decides who is invited to represent which language +in the summer school. + +After the Committee decision, the participants have around three months +to work on their languages. The work is completed in the summer school itself. It is also +thoroughly tested by using it to add a new language to the WebALT mathematical +exercise translator. + +Depending on the quality of submitted work, and on the demands of different +languages, the Committee may decide to select another number than 2 participants +for a language. We will also consider accepting participants who want to +pay their own expenses. + +Also good proposals from non-EU languages will be considered. Proponents of +such languages should contact the summer school organizers as early as possible. + +To keep track on who is working on which language, we will establish a web page +(Wiki or similar) soon after the call is published. The participants are encourage +to contact each other and even work in groups. + + + +===Who is qualified=== + +Writing a resource grammar implementation requires good general programming +skills, and a good explicit knowledge of the grammar of the target language. +A typical participant could be +- native or fluent speaker of the target language +- interested in languages on the theoretical level, and preferably familiar + with many languages (to be able to think about them on an abstract level) +- familiar with functional programming languages such as ML or Haskell + (GF itself is a language similar to these) +- on Master's or PhD level in linguistics, computer science, or mathematics + + +But it is the quality of the assignment that is assessed, not any formal +requirements. The "typical participant" was described to give an idea of +who is likely to succeed in this. + + +===Costs=== + +Our aim is to make the summer school free of charge for the participants +who are selected on the basis of their assignments. And not only that: +we plan to cover their travel and accommodation costs, up to 1000 EUR +per person. + +We want to get the funding question settled by mid-February 2009, and make +the final decision on the summer school then. + + +===Teachers=== + +Krasimir Angelov + +?Olga Caprotti + +?Lauri Carlson + +?Robin Cooper + +?Björn Bringert + +Håkan Burden + +?Elisabet Engdahl + +?Markus Forsberg + +?Janna Khegai + +?Peter Ljunglöf + +?Wanjiku Ng'ang'a + +Aarne Ranta + +?Jordi Saludes + +In addition, we will look for consultants who can help to assess the results +for each language + + +===The Summer School Committee=== + +This committee consists of a number of teachers and consultants, +who will select the participants. + + +===Time and Place=== + +The summer school will +be organized in Gothenburg in the latter half of August 2009. + +Time schedule (2009): +- February: announcement of summer school and the grammar + writing contest to get participants +- March-April: work on the contest assignment (ca 1 month) +- May: submission deadline and notification of acceptance +- June-July: more work on the grammars +- August: summer school + + +===Dissemination and intellectual property=== + +The new resource grammars will be released under the GPL just like +the current resource grammars, +with the copyright held by respective authors. + +The grammars will be distributed via the GF web site. + +The WebALT-specific grammars will have special licenses agreed between the +authors and WebALT Inc. + + +==Why I should participate== + +Seven reasons: ++ free trip and stay in Gothenburg (to be confirmed) ++ participation in a pioneering language technology work in an enthusiastic atmosphere ++ work and fun with people from all over Europe ++ job opportunities and business ideas ++ credits: the school project will be established as a course worth + 15 ETCS points per person, but extensions to Master's thesis will + also be considered ++ merits: the resulting grammar can easily lead to a published paper ++ contribution to the multilingual and multicultural development of Europe + + diff --git a/examples/jem-math/LexMath.gf b/examples/jem-math/LexMath.gf new file mode 100644 index 000000000..f6f22bb46 --- /dev/null +++ b/examples/jem-math/LexMath.gf @@ -0,0 +1,16 @@ +interface LexMath = open Syntax in { + +oper + zero_PN : PN ; + successor_N2 : N2 ; + sum_N2 : N2 ; + product_N2 : N2 ; + even_A : A ; + odd_A : A ; + prime_A : A ; + equal_A2 : A2 ; + small_A : A ; + great_A : A ; + divisible_A2 : A2 ; + number_N : N ; +} diff --git a/examples/jem-math/LexMathFre.gf b/examples/jem-math/LexMathFre.gf new file mode 100644 index 000000000..fefacda1e --- /dev/null +++ b/examples/jem-math/LexMathFre.gf @@ -0,0 +1,18 @@ +instance LexMathFre of LexMath = + open SyntaxFre, ParadigmsFre, (L = LexiconFre) in { + +oper + zero_PN = mkPN "zéro" ; + successor_N2 = mkN2 (mkN "successeur") genitive ; + sum_N2 = mkN2 (mkN "somme") genitive ; + product_N2 = mkN2 (mkN "produit") genitive ; + even_A = mkA "pair" ; + odd_A = mkA "impair" ; + prime_A = mkA "premier" ; + equal_A2 = mkA2 (mkA "égal") dative ; + small_A = L.small_A ; + great_A = L.big_A ; + divisible_A2 = mkA2 (mkA "divisible") (mkPrep "par") ; + number_N = mkN "entier" ; + +} diff --git a/examples/jem-math/LexMathSwe.gf b/examples/jem-math/LexMathSwe.gf new file mode 100644 index 000000000..1c5d7d802 --- /dev/null +++ b/examples/jem-math/LexMathSwe.gf @@ -0,0 +1,18 @@ +instance LexMathSwe of LexMath = + open SyntaxSwe, ParadigmsSwe, (L = LexiconSwe) in { + +oper + zero_PN = mkPN "noll" neutrum ; + successor_N2 = mkN2 (mkN "efterföljare" "efterföljare") (mkPrep "till") ; + sum_N2 = mkN2 (mkN "summa") (mkPrep "av") ; + product_N2 = mkN2 (mkN "produkt" "produkter") (mkPrep "av") ; + even_A = mkA "jämn" ; + odd_A = mkA "udda" "udda" ; + prime_A = mkA "prim" ; + equal_A2 = mkA2 (mkA "lika" "lika") (mkPrep "med") ; + small_A = L.small_A ; + great_A = L.big_A ; + divisible_A2 = mkA2 (mkA "delbar") (mkPrep "med") ; + number_N = mkN "tal" "tal" ; + +} diff --git a/examples/jem-math/MathFre.gf b/examples/jem-math/MathFre.gf new file mode 100644 index 000000000..3804142dc --- /dev/null +++ b/examples/jem-math/MathFre.gf @@ -0,0 +1,8 @@ +--# -path=.:present + +concrete MathFre of Math = MathI with + (Syntax = SyntaxFre), + (Mathematical = MathematicalFre), + (LexMath = LexMathFre) ; + + diff --git a/examples/jem-math/MathI.gf b/examples/jem-math/MathI.gf new file mode 100644 index 000000000..848b583aa --- /dev/null +++ b/examples/jem-math/MathI.gf @@ -0,0 +1,51 @@ +incomplete concrete MathI of Math = open + Syntax, + Mathematical, + LexMath, + Prelude in { + +lincat + Prop = S ; + Exp = NP ; + +lin + And = mkS and_Conj ; + Or = mkS or_Conj ; + If a = mkS (mkAdv if_Subj a) ; + + Zero = mkNP zero_PN ; + Successor = funct1 successor_N2 ; + + Sum = funct2 sum_N2 ; + Product = funct2 product_N2 ; + + Even = pred1 even_A ; + Odd = pred1 odd_A ; + Prime = pred1 prime_A ; + + Equal = pred2 equal_A2 ; + Less = predC small_A ; + Greater = predC great_A ; + Divisible = pred2 divisible_A2 ; + +oper + funct1 : N2 -> NP -> NP = \f,x -> mkNP the_Art (mkCN f x) ; + funct2 : N2 -> NP -> NP -> NP = \f,x,y -> mkNP the_Art (mkCN f (mkNP and_Conj x y)) ; + + pred1 : A -> NP -> S = \f,x -> mkS (mkCl x f) ; + pred2 : A2 -> NP -> NP -> S = \f,x,y -> mkS (mkCl x f y) ; + predC : A -> NP -> NP -> S = \f,x,y -> mkS (mkCl x f y) ; + +lincat + Var = Symb ; +lin + X = MkSymb (ss "x") ; + Y = MkSymb (ss "y") ; + + EVar x = mkNP (SymbPN x) ; + EInt i = mkNP (IntPN i) ; + + ANumberVar x = mkNP a_Art (mkCN (mkCN number_N) (mkNP (SymbPN x))) ; + TheNumberVar x = mkNP the_Art (mkCN (mkCN number_N) (mkNP (SymbPN x))) ; + +} diff --git a/examples/jem-math/MathSwe.gf b/examples/jem-math/MathSwe.gf new file mode 100644 index 000000000..1011a8985 --- /dev/null +++ b/examples/jem-math/MathSwe.gf @@ -0,0 +1,8 @@ +--# -path=.:present + +concrete MathSwe of Math = MathI with + (Syntax = SyntaxSwe), + (Mathematical = MathematicalSwe), + (LexMath = LexMathSwe) ; + +