From 9a711c2a08f181c2f293ebfb6a904e6084d1c6f8 Mon Sep 17 00:00:00 2001 From: aarne Date: Wed, 30 Nov 2005 15:23:27 +0000 Subject: [PATCH] resource howto started --- lib/resource-1.0/gf/Cat.gf | 1 + lib/resource-1.0/gf/CatEng.gf | 2 +- lib/resource-1.0/gf/Conjunction.gf | 14 +- lib/resource-1.0/gf/ConjunctionEng.gf | 11 +- lib/resource-1.0/gf/Lang.png | Bin 0 -> 10923 bytes lib/resource-1.0/gf/Resource-HOWTO.html | 257 ++++++++++++++++++++++++ lib/resource-1.0/gf/Sequence.gf | 13 -- lib/resource-1.0/gf/SequenceEng.gf | 15 -- lib/resource-1.0/gf/Test.png | Bin 0 -> 9172 bytes 9 files changed, 282 insertions(+), 31 deletions(-) create mode 100644 lib/resource-1.0/gf/Lang.png create mode 100644 lib/resource-1.0/gf/Resource-HOWTO.html delete mode 100644 lib/resource-1.0/gf/Sequence.gf delete mode 100644 lib/resource-1.0/gf/SequenceEng.gf create mode 100644 lib/resource-1.0/gf/Test.png diff --git a/lib/resource-1.0/gf/Cat.gf b/lib/resource-1.0/gf/Cat.gf index a0b7ede1c..46705d793 100644 --- a/lib/resource-1.0/gf/Cat.gf +++ b/lib/resource-1.0/gf/Cat.gf @@ -76,4 +76,5 @@ abstract Cat = { Voc ; -- vocative or "please" + } diff --git a/lib/resource-1.0/gf/CatEng.gf b/lib/resource-1.0/gf/CatEng.gf index 348a67e7b..0610e5cbc 100644 --- a/lib/resource-1.0/gf/CatEng.gf +++ b/lib/resource-1.0/gf/CatEng.gf @@ -1,4 +1,4 @@ -concrete CatEng of Cat = open ResEng, Prelude in { +concrete CatEng of Cat = open ResEng, Prelude, (R = ParamX) in { lincat Text, Phr, Utt = {s : Str} ; diff --git a/lib/resource-1.0/gf/Conjunction.gf b/lib/resource-1.0/gf/Conjunction.gf index 10317eee2..0c8ea9559 100644 --- a/lib/resource-1.0/gf/Conjunction.gf +++ b/lib/resource-1.0/gf/Conjunction.gf @@ -1,4 +1,4 @@ -abstract Conjunction = Sequence ** { +abstract Conjunction = Cat ** { fun @@ -12,4 +12,16 @@ abstract Conjunction = Sequence ** { DConjNP : DConj -> SeqNP -> NP ; -- "either John or Mary" DConjAdv : DConj -> SeqAdv -> Adv ; -- "both badly and slowly" + +-- these are rather uninteresting + + TwoS : S -> S -> SeqS ; + AddS : SeqS -> S -> SeqS ; + TwoAdv : Adv -> Adv -> SeqAdv ; + AddAdv : SeqAdv -> Adv -> SeqAdv ; + TwoNP : NP -> NP -> SeqNP ; + AddNP : SeqNP -> NP -> SeqNP ; + TwoAP : AP -> AP -> SeqAP ; + AddAP : SeqAP -> AP -> SeqAP ; + } diff --git a/lib/resource-1.0/gf/ConjunctionEng.gf b/lib/resource-1.0/gf/ConjunctionEng.gf index 899c04ce8..6bc13bc58 100644 --- a/lib/resource-1.0/gf/ConjunctionEng.gf +++ b/lib/resource-1.0/gf/ConjunctionEng.gf @@ -1,5 +1,5 @@ concrete ConjunctionEng of Conjunction = - SequenceEng ** open ResEng, Coordination in { + CatEng ** open ResEng, Coordination, Prelude in { lin @@ -23,4 +23,13 @@ concrete ConjunctionEng of Conjunction = isPre = ss.isPre } ; + TwoS = twoSS ; + AddS = consSS comma ; + TwoAdv = twoSS ; + AddAdv = consSS comma ; + TwoNP x y = twoTable Case x y ** {a = conjAgr x.a y.a} ; + AddNP xs x = consTable Case comma xs x ** {a = conjAgr xs.a x.a} ; + TwoAP x y = twoTable Agr x y ** {isPre = andB x.isPre y.isPre} ; + AddAP xs x = consTable Agr comma xs x ** {isPre = andB xs.isPre x.isPre} ; + } diff --git a/lib/resource-1.0/gf/Lang.png b/lib/resource-1.0/gf/Lang.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba07002bd601c1cf93cc181b08f0a26662e83d4 GIT binary patch literal 10923 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 literal 0 HcmV?d00001 diff --git a/lib/resource-1.0/gf/Resource-HOWTO.html b/lib/resource-1.0/gf/Resource-HOWTO.html new file mode 100644 index 000000000..845dfb1cf --- /dev/null +++ b/lib/resource-1.0/gf/Resource-HOWTO.html @@ -0,0 +1,257 @@ + + + +

+

HOW TO WRITE A RESOURCE GRAMMAR

+ +

+ +Aarne Ranta +

+30 November 2005 +

+ +

+ +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. + +

+ +Notice. This document concerns the API V. 1.0 which has not +yet been released. You can find the beginnings of it +in GF/lib/resource-1.0/gf, but the locations of +files are not yet final. + + +

The resource grammar API

+ +The API is divided into a bunch of abstract modules. +The following figure gives the dependencies of these modules. + +
+ +
+ +It is advisable to start with a simpler subset of the API, which +leaves out certain complicated but not always necessary things: +tenses and most part of the lexicon. + +
+ +
+ +The module structure is rather flat: almost every module is a direct +parent of the top module (Lang or Test). The idea +is that you can concentrate on one linguistic aspect at a time, or +also distribute the work among several authors. + + +

Phrase modules

+ +The direct parents of the top could be called phrase, +since each of them concentrates on a particular phrase category (nouns, verbs, +adjectives, sentences,...). A phrase 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: constuction 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 +
+ + +

Infrastructure modules

+ +Expressions of each phrase category are constructed in the corresponding +phrase 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 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 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, most categories do have this linearization type! + +

+ +As a slight asymmetry in the module diagrams, you find the following +modules: +

    +
  • Tense: defines the parameters of polarity, anteriority, and tense +
  • Tensed: defines how sentences use those parameters +
  • Untensed: makes sentences use the polarity parameter only +
+The full resource API (Lang) uses Tensed, whereas the +restricted Test API uses Untensed. + + + +

Lexical modules

+ +What is lexical and what is syntactic is not as clearcut in GF as in +some other grammar formalisms. Logically, however, lexical means +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. + +

+ +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 three such modules: +

    +
  • Structural: structural words (determiners, conjunctions,...) +
  • Basic: basic everyday content words (nouns, verbs,...) +
  • Lex: a very small sample of both structural and content words +
+The module Structural aims for completeness, and is likely to +be extended in future releases of the resource. The module Basic +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. + +

+ +The module Lex is used in Test instead of the two +larger modules. Its purpose is to provide a quick way to test the +syntactic structures of the phrase modules without having to implement +the larger lexica. + +

+ +In the case of Basic 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. + + + +

How to start

+ +

Putting up a directory

+ +Unless you are writing an instance of a parametrized implementation +(Romance or Scandinavian), which will be covered later, the most +simple way is to follow roughly the following procedure. Assume you +are building a grammar for the Dutch language. Here are the first steps. +
    +
  1. Create a sister directory for GF/lib/resource/english, named + dutch. +
    +       cd GF/lib/resource/
    +       mkdir dutch
    +       cd dutch
    +     
    + +
  2. Check out the + ISO 639 3-letter language code for Dutch: it is Dut. + +
  3. Copy the *Eng.gf files from english dutch, + and rename them: +
    +       cp ../english/*Eng.gf .
    +       rename -n 's/Eng/Dut/' *Eng.gf
    +     
    + +
  4. Change the Eng module references to Dut references + in all files: +
    +       sed -i 's/Eng/Dut/g' *Dut.gf
    +     
    + +
  5. This may of course change unwanted occurrences of the + string Eng - verify this by +
    +       grep Dut *.gf
    +     
    + But you will have to make lots of manual changes in all files anyway! + +
  6. Comment out the contents of these files, except their headers and module + brackets. + +
+ + +

The develop-test cycle

+ +Now starts the real work. The order in which the Phrase modules +were introduced above is a natural order to proceed, even though not the +only one. So you will find yourseld iterating the following steps: + +
    +
  1. Select a phrase module, e.g. NounDut, and uncomment one + linearization rule (for instance, DefSg, which is + not too complicated). + +
  2. Write down some Dutch examples of this rule, in this case translations + of "the dog", "the house", "the big house", etc. + +
  3. Think about the categories involved (CN, NP, N) and the + variations they have. Encode this in the lincats of CatDut. + You may have to define some new parameter types in ResDut. + +
  4. To be able to test the construction, + define some words you need to instantiate it + in LexDut. Again, it can be helpful to define some simple-minded + morphological paradigms in ResDut, e.g. corresponding to + ResEng.regN. + +
  5. Doing this, you may want to test the resource independently. Do this by +
    +       i -retain ResDut
    +       cc regN "huis"
    +     
    + +
  6. Uncomment NounDut and LexDut in TestDut, + and compile TestDut in GF. Then 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
    +     
    + +
  7. Spare some tree-linearization pairs for later regression testing. + +
+You are likely to run this cycle a few times for each linearization rule +you implement, and some hundreds of times altogether. There are 159 +funs in Test (at the moment). + +

+ +Of course, you don't need to complete one phrase module before starting +with the next one. Actually, a suitable subset of Noun, +Verb, and Adjective will lead to a reasonable coverage +very soon, keep you motivated, and reveal errors. + + + + diff --git a/lib/resource-1.0/gf/Sequence.gf b/lib/resource-1.0/gf/Sequence.gf deleted file mode 100644 index 715c8f08e..000000000 --- a/lib/resource-1.0/gf/Sequence.gf +++ /dev/null @@ -1,13 +0,0 @@ -abstract Sequence = Cat ** { - - fun - TwoS : S -> S -> SeqS ; - AddS : SeqS -> S -> SeqS ; - TwoAdv : Adv -> Adv -> SeqAdv ; - AddAdv : SeqAdv -> Adv -> SeqAdv ; - TwoNP : NP -> NP -> SeqNP ; - AddNP : SeqNP -> NP -> SeqNP ; - TwoAP : AP -> AP -> SeqAP ; - AddAP : SeqAP -> AP -> SeqAP ; - -} \ No newline at end of file diff --git a/lib/resource-1.0/gf/SequenceEng.gf b/lib/resource-1.0/gf/SequenceEng.gf deleted file mode 100644 index 844743161..000000000 --- a/lib/resource-1.0/gf/SequenceEng.gf +++ /dev/null @@ -1,15 +0,0 @@ -concrete SequenceEng of Sequence = - CatEng ** open ResEng, Coordination, Prelude in { - - lin - - TwoS = twoSS ; - AddS = consSS comma ; - TwoAdv = twoSS ; - AddAdv = consSS comma ; - TwoNP x y = twoTable Case x y ** {a = conjAgr x.a y.a} ; - AddNP xs x = consTable Case comma xs x ** {a = conjAgr xs.a x.a} ; - TwoAP x y = twoTable Agr x y ** {isPre = andB x.isPre y.isPre} ; - AddAP xs x = consTable Agr comma xs x ** {isPre = andB xs.isPre x.isPre} ; - -} diff --git a/lib/resource-1.0/gf/Test.png b/lib/resource-1.0/gf/Test.png new file mode 100644 index 0000000000000000000000000000000000000000..0bafdc87678b22191a226f5719884d912412350f GIT binary patch literal 9172 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 Mp00i_>zopr0Bh7sqyPW_ literal 0 HcmV?d00001