-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathREADME
More file actions
66 lines (48 loc) · 2.31 KB
/
README
File metadata and controls
66 lines (48 loc) · 2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# Lexd
A lexicon compiler specialising in non-suffixational morphologies.
This module compiles lexicons in a format loosely based on hfst-lexc and produces transducers in ATT format which are equivalent to those produced using the overgenerate-and-constrain approach with hfst-twolc (see [here](https://wiki.apertium.org/wiki/Morphotactic_constraints_with_twol) and [here](https://wiki.apertium.org/wiki/Replacement_for_flag_diacritics)). However, it is much faster (see below).
See [Usage.md](Usage.md) for the rule file syntax.
## Installation
First, clone this repository.
To build, do
```bash
./autogen.sh
make
make install
```
If installing to a system-wide path, you may want to run `sudo make install` instead for the last step.
To compile a lexicon file into a transducer, do
```bash
lexd lexicon_file att_file
```
To get a speed comparison, do
```bash
make timing-test
```
To run basic feature smoke-tests (fast), do
```bash
make check
```
## Why is it faster?
When dealing with prefixes, the overgenerate-and-constrain approach initially builds a transducer like this:

Then composes that with a twolc rule to turn it into somehting like this:

But compiling the rule needed to do that can take hundreds of times longer than compiling the lexicon.
Lexd, meanwhile, makes multiple copies of the lexical portion and attaches one to each prefix, thus generating the second transducer directly in a similar amount of time to what is required to generate the first one.
| Language | Wamesa | Hebrew | Navajo | Lingala |
|---|---:|---:|---:|---:|
| Stems | 262 | 127 | 19 | 1470
| Total forms | 12576 | 2540 | 473 | 1649496
| Path restrictions | 14 | 10 | 17 | 19
| **Lexc + Twolc**
| Lexc compilation | 25ms | 15ms | 25ms | 230ms
| Twolc compilation | 10245ms | 1360ms | 8460ms | 275525ms
| Rule composition | 2050ms | 225ms | 1705ms | 45550ms
| Minimization | 65ms | 5ms | 20ms | 155ms |
| Total time | 12385ms | 1605ms | 10210ms | 321460ms |
| **Lexd**
| Lexd compilation | 210ms | 85ms | 10ms | 490ms |
| Format conversion | 30ms | 5ms | 5ms | 55ms |
| Total time | 240ms | 90ms | 15ms | 545ms |
| **Speedup** | 52x | 18x | 681x | 590x |