Cross Model

From Apertium
Jump to: navigation, search

En français

Main article: Crossdics

Contents

[edit] Cross Model

[edit] Defining cross actions

Cross actions are needed to cross certain language pairs correctly.

These patterns and actions are described in XML, as follows:

<!DOCTYPE cross-model SYSTEM "crossmodel.dtd">
<cross-model>
  <cross-action id="pattern-1" a="author">
    <pattern>...</pattern>
    <action-set>...</action-set>
  </cross-action>
  ...
  <cross-action id="pattern-n" a="author">
    <pattern>...</pattern>
    <action-set>...</action-set>
  </cross-action>
</cross-model>

Click on each element in the schema above or read more about cross model elements.

[edit] Example of pattern-action

[edit] Pattern

<cross-action id="pattern-1" a="ebenimeli">
  <description>Pattern 1</description>
  <pattern>
    <e>
      <p>
        <l>$lemmaA<s n="n"/><v n="X"/></l>
        <r>$lemmaB<s n="n"/><v n="Y"/></r>
      </p>
    </e>
    <e r="RL">
      <p>
        <l>$lemmaB<s n="n"/></l>
        <r>$lemmaC<s n="n"/></r>
      </p>
    </e>
  </pattern>
  <action-set>
    <action>
      <e>
        <p>
          <l>$lemmaA<s n="n"/><v n="X"/></l>
          <r>$lemmaC<s n="n"/><v n="Y"/></r>
        </p>
      </e>
    </action>
  </action-set>
</cross-action>

Example of how this cross action could be applied.

[edit] Default cross action

By default, the apertium-crossdics tool uses a simple cross model (schemas/cross-model.xml) defining only a default pattern-action rule.

<cross-model>
  <cross-action id="default" a="ebenimeli">
    <description>Default pattern</description>
    <pattern>
      <e>
        <p>
          <l>$lemmaA<v n="cat"/><t n="tailA"/></l>
          <r>$lemmaB<v n="cat"/><t/></r>
        </p>
      </e>
      <e>
        <p>
          <l>$lemmaB<v n="cat"/><t/></l>
          <r>$lemmaC<v n="cat"/><t n="tailC"/></r>
        </p>
      </e>
    </pattern>
    <action-set>
      <action>
        <e>
          <p>
            <l>$lemmaA<v n="cat"/><t n="tailA"/></l>
            <r>$lemmaC<v n="cat"/><t n="tailC"/></r>
          </p>
        </e>
      </action>
    </action-set>
  </cross-action>
</cross-model>

In the example above:

  • <v n="cat"/> is a variable that can store just one element (for example, <s n="adj"/>). In this example we use a variable because we need to use the value in the action element. Besides that, we force the value of the first <s n="..."/> element to be the same. There is another symbol (<v/>) that can be used if we don't want to use the value afterwards.
  • the tag <t/> is a sequence of 0 or more <s n="..."/> elements.
  • <t n="tailA"/> and <t n="tailC"/> are also sequences of 0 or more <s n="..."/> elements, but, in this particular case, we store the value in a variable because we need to use it afterwards (in the action element).

These special tags are explained in the section Cross Model Elements

[edit] Limitations

Some pairs use bidix pardefs, e.g.

<e><p><l>lemmaA</l><r>lemmaB</r></p> <par n="vblex_adj"/></e>

It does not seem to be possible to put par elements into the crossmodel. What you can do is run

awk '/<par [^>]*n="vblex_adj"/{gsub(/<\/[lr]>/, "<s n=\"vblex_adj\"/>&")} {print}' <orig.bi.dix >new.bi.dix

to add a fake s-tag, then run crossdics, and then remove the fake s-tag afterwards. This seems to work.

[edit] See also

[edit] External links

Personal tools