Constructing a TSX file with a Constraint Grammar

From Apertium
Jump to navigation Jump to search

Constraint Grammar (CG) is a method of POS-tagging ambiguous text. The apertium-tagger has a basic form of this in addition to probabilistic tagging. It should be possible to use an existing CG to write, or improve an existing TSX (tagger definition file) in the form of using it to create sets of forbid/enforce rules.

Terminology

  • cohort — a surface form of a word, along with its analyses.
Apertium equivalent: ^words/word<n><sg>/word<vblex><pres><p3><sg>$

Labels

Coarse tag "labels" in Constraint Grammar (CG) are specified either as list or set. Sometimes however, these are not complete sets, so may need to be combined.

For example:

LIST A-N-CC = A N CC ;
LIST A-pos = (A Pos) ;
LIST %etter/fram/opp% = ("etter" Pr) ("fram" Pr) ("frem" Pr) ("opp" Pr) ;

Is three lists, expressed in TSX format as below:

  <def-label name="A-N-CC">
    <tags-item tags="adj.*"/>
    <tags-item tags="n.*"/>
    <tags-item tags="cnjcoo"/>
  </def-label>
  <def-label name="A-pos">
    <tags-item tags="adj.pos.*"/>
  </def-label>
  <def-label name="%etter/fram/opp%">
    <tags-item lemma="etter" tags="pr"/>
    <tags-item lemma="fram" tags="pr"/>
    <tags-item lemma="frem" tags="pr"/>
    <tags-item lemma="opp" tags="pr"/>
  </def-label>

etc. Note that this may cause some problems, so it might be best to attempt this using only ambiguous tags to start with.

Constraints

Constraint Grammar uses a series of hand-written constraints in order to POS-tag ambiguous words.

Forbid rules

The operation analogous to a forbid rule is remove.

# 3526
"<bare>" REMOVE (CS) IF
        (-1 CS)
;

This means that it works on the lemma "bare", which can be a subordinating conjunction, verb or adverb. It says to forbid the string "bare bare" where both lexical units are subordinating conjunctions. In TSX format:

  <forbid>
    <label-sequence>
      <label-item label="bare-CS">
      <label-item label="bare-CS">
    </label-sequence>
  </forbid>

Presuming we have a label definition of:

  <def-label name="bare-CS">
    <tags-item lemma="bare" tags="conjsub"/>
  </def-label>

Enforce rules

The operation analogous to an enforce rule is select, which "selects a reading, if it contains a TARGETed tag. In practice, selection is equivalent to a removal of all other readings."

# 2866
SELECT (A Sg Neu Indef) IF
        (0 %rundt%)
        (1 Det-Qnt)
;

Means enforce adj.sg.nt.indef if the lemma of the word is "rundt" and the lexical unit to the left is a quantifier det.qnt

In order to convert this into Apertium format one would need to take all of the coarse tags which are not det.qnt and make them into label sequences as below:

  <forbid>
    <label-sequence>
      <label-item label="%rundt%"> 
      <label-item label="A-pos">
    </label-sequence>
    
    ...

  </forbid>

Prefer tags

Further reading

Note that vislcg3 is the version which is actively developed.