Beginner's Constraint Grammar HOWTO
The installation part for Apertium and language pairs described below refer to Ubuntu distribution. For others Linux distributions or others operating systems, let see the general Installation page.
Sourced from Install Apertium core using packaging First, remove any Apertium packages you have installed from operating system repositories. They will be out-of-date, sometimes by years.
Add the repository,
# Pick one: # Nightly, unstable, new, almost always use this: wget https://apertium.projectjj.com/apt/install-nightly.sh -O - | sudo bash # Release, stable, old: wget https://apertium.projectjj.com/apt/install-release.sh -O - | sudo bash
You should see messages.
Install dev tools,
sudo apt-get -f install apertium-all-dev
About the Debian repository install
Check the script installed Apertium repository details,
apt-cache policy | grep apertium
Unfortunately, due to the seamless upgrading of Debian packaging, it is difficult to see which packages the new repository has added, and where. Even Synaptic, the wonder GUI, has no way through. You could try this brute force commandline,
find /var/lib/apt/lists/ |grep projectjj.*Packages | xargs grep -h Package
Which will, if nothing else, tell you a lot about byways of the Apertium project.
- Constraint grammar
To use CG we must have lttoolbox (we have it), apertium (we have it too) and ICU (we have to install it now).
How to install ICU for Ubuntu. Open terminal and copy/paste this code:
apt-get install libicu-dev
Now we can install apertium, lttoolbox and CG.
Before installing apertium we have to install lttoolbox(which has been downloaded with apertium at same time).To do that you have to copy/paste this code:
sudo make install
Terminal will ask us for password again [sudo] password for user: When you write it press Enter. Wait to show you terminal user@ubuntu:~/apertium/lttoolbox$ then copy/paste this code:
sudo make install
This will start installing apertium.You have to wait a few minutes.When shows you
vasil@ubuntu:~/apertium/apertium$ sudo ldconfig
the process is ready.
- Constraint grammar
How to install CG.Open terminal and copy/paste this code:
$ svn co --username anonymous --password anonymous http://beta.visl.sdu.dk/svn/visl/tools/vislcg3/trunk vislcg3
$ cd vislcg3
$ sh autogen.sh --prefix=<prefix>
$ make install
It will ask you for password [sudo] password for user: . When you write it press Enter.
We are ready.
For the examples below, we use the language pair apertium-es-ca, but the principles should be applicable to any language pair. First we have to compile this pair. Go into the directory from where you checked out the apertium SVN, then
cd apertium/apertium-es-ca sh autogen.sh make
Let's try that what we installed is working. First copy/paste this code:
echo "vino a la playa" | lt-proc es-ca.automorf.bin
This should give you:
^vino/vino<n><m><sg>/venir<vblex><ifi><p3><sg>$ ^a/a<pr>$ ^la/el<det><def><f><sg>/lo<prn><pro><p3><f><sg>$ ^playa/playa<n><f><sg>$
Here we have ambiguities,one between a noun and a verb and other between a determiner and a pronoun.We can write some rules which can impose to categorize between two ambiguities.First we define our categories, these can be tags, wordforms or lemmas. It might help to think of them as "coarse tags", which may involve a set of fine tags or lemmas. So, create a file grammar.txt, and add the following text:
DELIMITERS = "<$.>" ; LIST NOUN = n; LIST VERB = vblex; LIST DET = det; LIST PRN = prn; LIST PREP = pr; SECTION
So first rule is states "When the current lexical unit can be a pronoun or a determiner, and it is followed on the right by a lexical unit which could be a noun, choose the determiner". We have to add this rule to the file, and compile using cg-comp:
# 1 SELECT DET IF (0 DET) (0 PRN) (1 NOUN) ;
$ ./cg-comp grammar.txt grammar.bin Sections: 1, Rules: 1, Sets: 6, Tags: 7
To try what we have done copy/paste this code:
$ echo "vino a la playa" | lt-proc es-ca.automorf.bin | cg-proc grammar.bin ^vino/vino<n><m><sg>/venir<vblex><ifi><p3><sg>$ ^a/a<pr>$ ^la/el<det><def><f><sg>$ ^playa/playa<n><f><sg>$
Second rule is states "When the current lexical unit can be a noun or a verb, if the subsequent two units to the right are preposition and determiner, remove the noun reading." Now we have to add this rule:
# 2 REMOVE NOUN IF (0 NOUN) (0 VERB) (1 PREP) (2 DET) ;
re-compile the grammar and test:
$ echo "vino a la playa" | lt-proc es-ca.automorf.bin | cg-proc grammar.bin ^vino/venir<vblex><ifi><p3><sg>$ ^a/a<pr>$ ^la/el<det><def><f><sg>$ ^playa/playa<n><f><sg>$
Third rule states "Remove interjection if the preceeding word is a modal verb."