Finnish–English dictionary for rule-based machine translation
This is a visualisation of some rules in apertium transfer.
These are the categories Apertium is using in order to chunk, re-order and transfer lexemes.
| Category | Items |
|---|---|
| neg-verb |
|
| conneg |
|
| cop-conneg |
|
| conneg_nottable |
|
| adneg |
|
| adv |
|
| quant |
|
| cnjcoo |
|
| cnjsub |
|
| necessive |
|
| gen-subj |
|
| adv-misc |
|
| pron-misc |
|
| pron-pers |
|
| habitive |
|
| possessional |
|
| sint-pers |
|
| infma-ade |
|
| infma-ine |
|
| just-inf |
|
| vbneg |
|
| post |
|
| num |
|
| adj |
|
| verb-mood |
|
| cm |
|
| nom-cmp |
|
| nom |
|
| nominal |
|
| sent |
|
| clbpunct |
|
| verb |
|
| verb-pprs |
|
| verb-pp |
|
| verb-past |
|
| verb-pres-impers |
|
| verb-pres |
|
| vbolla |
|
These are the morphological analysis value (tag) sets that can be processed in the transfer.
| Attribute set name | Tags |
|---|---|
| a_voice |
|
| a_verb |
|
| a_vb |
|
| a_person |
|
| moodtense |
|
| a_num |
|
| a_cnj |
|
| a_adv |
|
| a_supernominal |
|
| a_nom |
|
| a_adj |
|
| a_prn |
|
| a_prnpers |
|
| a_nbr |
|
| a_pers |
|
| a_gen |
|
| a_cas |
|
| a_poss |
|
| a_post |
|
| synfunc |
|
Macros are helper functions in apertium transfer files.
-
let tl[1]['synfunc'] ≔
""
-
- if
-
- tl[1]['a_verb'] ≟ <vaux.actv>
- tl[1]['a_nbr'] ≟ <sg>
- tl[1]['a_person'] ≟ <p3>
then:
-
let tl[1]['a_nbr'] ≔
""
-
let tl[1]['a_person'] ≔
""
let tl[1]['a_voice'] ≔
""
-
let tl[1]['synfunc'] ≔
""
-
- if
-
- sl[1]['moodtense'] ≟ <pri>
- sl[1]['moodtense'] ≟ <cond>
- sl[1]['moodtense'] ≟ <imp>
- sl[1]['moodtense'] ≟ <pot>
then:
-
let
$screeve ≔ <pres>
- elseif
-
- sl[1]['moodtense'] ≟ <past>
then:
-
let
$screeve ≔ <past>
- else:
-
let
$screeve ≔ <inf>
-
let tl[1]['synfunc'] ≔
""
-
- if
-
- tl[1]['a_prn'] ≟ <prn.pers>
- sl[1]['a_cas'] ≟ <ine>
- sl[1]['a_cas'] ≟ <ela>
- sl[1]['a_cas'] ≟ <ill>
- sl[1]['a_cas'] ≟ <par>
- sl[1]['a_cas'] ≟ <ade>
- sl[1]['a_cas'] ≟ <abl>
- sl[1]['a_cas'] ≟ <all>
- sl[1]['a_cas'] ≟ <abe>
- sl[1]['a_cas'] ≟ <ins>
- sl[1]['a_cas'] ≟ <com>
- sl[1]['a_cas'] ≟ <ess>
then:
-
let tl[1]['a_cas'] ≔ <acc>
-
let
$sntype ≔ <SN>
- elseif
-
- sl[1]['a_cas'] ≟ <nom>
- sl[1]['a_cas'] ≟ <ine>
- sl[1]['a_cas'] ≟ <ela>
- sl[1]['a_cas'] ≟ <ill>
- sl[1]['a_cas'] ≟ <par>
- sl[1]['a_cas'] ≟ <ade>
- sl[1]['a_cas'] ≟ <abl>
- sl[1]['a_cas'] ≟ <all>
- sl[1]['a_cas'] ≟ <abe>
- sl[1]['a_cas'] ≟ <ins>
- sl[1]['a_cas'] ≟ <com>
- sl[1]['a_cas'] ≟ <ess>
then:
-
let tl[1]['a_cas'] ≔
""
-
let
$sntype ≔ <SN>
- elseif
-
- tl[1]['a_cas'] ≟ <gen>
- tl[1]['a_prn'] ≟ <prn.pers>
then:
-
let tl[1]['a_cas'] ≔
""
-
let
$sntype ≔ <SN.GEN>
- if
-
- sl[1]['a_cas'] ≟ <nom>
then:
-
let tl[1]['a_prnpers'] ≔ <subj>
else:
-
let tl[1]['a_prnpers'] ≔ <obj>
The actual rules concerning stuff.
- case-handler1(
$1
)
- proc-synlabel1(
$1
)
- case-handler1(
$2
)
- Output:
-
[
-
tl[1]['whole']
- b0
-
"of"
<pr>
- b1
-
tl[2]['whole']
]pron
<SN>
sl[1]['a_cas']
- case-handler1(
$1
)
- proc-synlabel1(
$1
)
- Output:
-
[
-
tl[1]['lem']
tl[1]['a_adv']
]adv
<SN>
sl[1]['a_cas']
- case-handler1(
$1
)
- proc-synlabel1(
$1
)
- Output:
-
[
-
tl[1]['lem']
tl[1]['a_prn']
tl[1]['a_prnpers']
tl[1]['a_pers']
tl[1]['a_nbr']
]pron
<SN.pers>
sl[1]['a_pers']
sl[1]['a_prnpers']
sl[1]['a_nbr']
sl[1]['a_cas']
- case-handler1(
$1
)
- proc-synlabel1(
$1
)
- Output:
-
[
-
tl[1]['whole']
]pron
<SN>
sl[1]['a_cas']
- case-handler1(
$1
)
- proc-synlabel1(
$1
)
- Output:
-
[
-
tl[1]['lemh']
tl[1]['a_nom']
tl[1]['a_nbr']
tl[1]['a_cas']
tl[1]['lemq']
]n
$sntype
sl[1]['a_cas']
sl[1]['a_poss']
- proc-synlabel1(
$1
)
- Output:
-
[
-
tl[1]['lemh']
tl[1]['a_adj']
tl[1]['lemq']
]j
<SA>
- case-handler1(
$4
)
- proc-synlabel1(
$4
)
- Output:
-
[
-
tl[1]['lemh']
tl[1]['a_adj']
tl[1]['lemq']
- b1
-
tl[2]['whole']
- b2
-
tl[3]['lemh']
tl[3]['a_adj']
tl[3]['lemq']
- b3
-
tl[4]['lemh']
tl[4]['a_nom']
tl[4]['a_nbr']
tl[4]['a_cas']
tl[4]['lemq']
]j_j_n
$sntype
sl[4]['a_cas']
- case-handler1(
$2
)
- proc-synlabel1(
$2
)
- Output:
-
[
-
tl[1]['lemh']
tl[1]['a_nom']
tl[1]['a_nbr']
tl[1]['lemq']
- b1
-
tl[2]['lemh']
tl[2]['a_nom']
tl[2]['a_nbr']
tl[2]['lemq']
]n_n
$sntype
sl[2]['a_cas']
- case-handler1(
$2
)
- proc-synlabel1(
$2
)
- Output:
-
[
-
tl[1]['lemh']
tl[1]['a_adj']
tl[1]['lemq']
- b1
-
tl[2]['lemh']
tl[2]['a_nom']
tl[2]['a_nbr']
tl[2]['a_cas']
tl[2]['lemq']
]j_n
$sntype
sl[2]['a_cas']
- mood-handler1(
$1
)
- proc-synlabel1(
$2
)
-
- if
-
- tl[2]['a_verb'] ≟ <vaux.actv>
- tl[1]['a_nbr'] ≟ <sg>
- tl[1]['a_person'] ≟ <p3>
then:
-
let tl[1]['a_nbr'] ≔
""
-
let tl[1]['a_person'] ≔
""
Output:
-
[
-
tl[2]['whole']
- b1
-
tl[3]['lem']
tl[3]['a_vb']
$screeve
tl[1]['a_person']
tl[1]['a_nbr']
]notted
<SV>
sl[1]['moodtense']
-
let tl[1]['a_voice'] ≔
""
- Output:
-
[
-
tl[1]['lem']
tl[1]['a_vb']
<ger>
]ger
<SN>
-
let tl[1]['a_voice'] ≔
""
- Output:
-
[
-
tl[1]['lem']
tl[1]['a_vb']
<pp>
]ger
<SN>
-
let tl[1]['a_voice'] ≔
""
- Output:
-
[
-
"by"
<pr>
- b
-
tl[1]['lem']
tl[1]['a_vb']
<ger>
]ger
<SN>
- Output:
-
[
-
tl[1]['lem']
tl[1]['a_vb']
<ger>
]ger
<SN>
- Output:
-
[
-
"to"
<pr>
- b
-
tl[1]['lem']
<vblex.inf>
]to-do
<SV>
- proc-synlabel1(
$3
)
- mood-handler1(
$2
)
-
- if
-
- tl[2]['a_verb'] ≟ <vaux.actv>
- tl[1]['a_nbr'] ≟ <sg>
- tl[1]['a_person'] ≟ <p3>
then:
-
let tl[1]['a_nbr'] ≔
""
-
let tl[1]['a_person'] ≔
""
Output:
-
[
-
tl[2]['lem']
tl[2]['a_vb']
$screeve
tl[1]['a_person']
tl[1]['a_nbr']
- b1
-
"not"
<adv>
- b2
-
tl[3]['whole']
]notted
<SV>
sl[2]['moodtense']
- mood-handler1(
$2
)
-
- if
-
- tl[2]['a_verb'] ≟ <vaux.actv>
- tl[1]['a_nbr'] ≟ <sg>
- tl[1]['a_person'] ≟ <p3>
then:
-
let tl[1]['a_nbr'] ≔
""
-
let tl[1]['a_person'] ≔
""
Output:
-
[
-
tl[2]['lem']
tl[2]['a_vb']
$screeve
tl[1]['a_person']
tl[1]['a_nbr']
- b1
-
"not"
<adv>
]neg-cop
<SV.COP>
$moodtense
- mood-handler1(
$3
)
-
- if
-
- tl[2]['a_verb'] ≟ <vaux.actv>
then:
-
let tl[1]['a_nbr'] ≔
""
-
let tl[1]['a_person'] ≔
""
Output:
-
[
-
tl[3]['lem']
tl[3]['a_vb']
$screeve
tl[3]['a_person']
tl[1]['a_nbr']
- b1
-
"not"
<adv>
]notted
<SV>
$screeve
- mood-handler1(
$2
)
-
- if
-
- tl[2]['a_verb'] ≟ <vaux.actv>
- tl[1]['a_nbr'] ≟ <sg>
- tl[1]['a_person'] ≟ <p3>
then:
-
let tl[1]['a_nbr'] ≔
""
-
let tl[1]['a_person'] ≔
""
Output:
-
[
-
tl[2]['lem']
tl[2]['a_vb']
$screeve
tl[1]['a_person']
tl[1]['a_nbr']
- b1
-
"not"
<adv>
]notted
<SV>
$screeve
- Output:
-
[
-
"do"
<vblex.pres>
tl[1]['a_pers']
tl[1]['a_nbr']
- b1
-
"not"
<adv>
- b1
-
tl[2]['lem']
tl[2]['a_verb']
<inf>
]negation
<SN>
- Output:
-
[
-
"not"
<adv>
]neg
<SV.NEG>
sl[1]['moodtense']
- mood-handler1(
$1
)
-
- if
-
- sl[1]['moodtense'] ≟ <pres>
- sl[1]['a_nbr'] ≟ <pl>
then:
-
let tl[1]['a_nbr'] ≔
""
-
let tl[1]['a_person'] ≔
""
- elseif
-
- sl[1]['moodtense'] ≟ <past>
- sl[1]['a_nbr'] ≟ <sg>
then:
-
let tl[1]['a_nbr'] ≔
"sg"
-
let tl[1]['a_person'] ≔
"p3"
Output:
-
[
-
tl[1]['lem']
tl[1]['a_vb']
$screeve
tl[1]['a_person']
tl[1]['a_nbr']
]cop
<SV.COP>
$screeve
- mood-handler1(
$1
)
-
let tl[1]['a_nbr'] ≔
""
-
let tl[1]['a_person'] ≔
""
- Output:
-
[
-
tl[1]['lem']
tl[1]['a_vb']
$screeve
]v
<SV>
sl[1]['a_person']
sl[1]['a_nbr']
$screeve
- mood-handler1(
$1
)
-
- if
-
- tl[1]['a_verb'] ≟ <vaux.actv>
- tl[1]['a_nbr'] ≟ <sg>
- tl[1]['a_person'] ≟ <p1>
- tl[1]['a_person'] ≟ <p3>
then:
-
let tl[1]['a_nbr'] ≔
""
-
let tl[1]['a_person'] ≔
""
let tl[1]['a_voice'] ≔
""
Output:
-
[
-
"be"
<vbser>
$screeve
<p3.sg>
- b
-
tl[1]['lem']
tl[1]['a_vb']
<pp>
]v
<SV>
sl[1]['a_person']
sl[1]['a_nbr']
- mood-handler1(
$1
)
-
- if
-
- tl[1]['a_verb'] ≟ <vaux.actv>
- tl[1]['a_verb'] ≟ <vbmod.actv>
- tl[1]['a_nbr'] ≟ <sg>
- tl[1]['a_person'] ≟ <p3>
then:
-
let tl[1]['a_nbr'] ≔
""
-
let tl[1]['a_person'] ≔
""
let tl[1]['a_voice'] ≔
""
Output:
-
[
-
tl[1]['lem']
tl[1]['a_vb']
$screeve
tl[1]['a_person']
tl[1]['a_nbr']
]v
<SV>
sl[1]['a_person']
sl[1]['a_nbr']
- mood-handler1(
$1
)
-
- if
-
- tl[1]['a_verb'] ≟ <vaux.actv>
- tl[1]['a_nbr'] ≟ <sg>
- tl[1]['a_person'] ≟ <p3>
then:
-
let tl[1]['a_nbr'] ≔
""
-
let tl[1]['a_person'] ≔
""
Output:
-
[
-
tl[1]['lem']
tl[1]['a_vb']
$screeve
tl[1]['a_person']
tl[1]['a_nbr']
]v
<SV>
sl[1]['a_person']
sl[1]['a_nbr']
$screeve
- Output:
-
[
-
tl[1]['lem']
tl[1]['a_num']
]num
<NUM>
- case-handler1(
$2
)
-
- if
-
- tl[1]['lem'] ≟
"one"
then:
-
let tl[2]['a_nbr'] ≔ <pl>
-
let tl[1]['a_nbr'] ≔ <pl>
Output:
-
[
-
tl[1]['lem']
tl[1]['a_num']
tl[1]['a_nbr']
- b0
- b1
-
tl[2]['lem']
tl[2]['a_nom']
tl[2]['a_nbr']
tl[2]['a_cas']
]num
<NUM>
- proc-synlabel1(
$2
)
-
- if
-
- tl[1]['a_nom'] ≟ <n>
then:
-
let tl[1]['tags'] ≔ <n>
tl[1]['a_nbr']<gen>
- elseif
-
- tl[1]['a_verb'] ≟ <vblex>
then:
-
let tl[1]['tags'] ≔ <vblex.subs>
Output:
-
[
-
tl[1]['lemh']
tl[1]['tags']
tl[1]['lemq']
- b1
-
tl[2]['whole']
]verb phrase
<SV>
- proc-synlabel1(
$1
)
- Output:
-
[
-
tl[1]['lem']
tl[1]['a_post']
]post
<POST>
tl[1]['a_post']
- proc-synlabel1(
$1
)
- Output:
-
[
-
tl[1]['whole']
]adv
<ADV>
- case-handler1(
$1
)
- Output:
-
[
-
tl[1]['whole']
- b1
-
"must"
<vbmod.pres>
]NECESSIVE
<NP-NEC>
- case-handler1(
$2
)
- Output:
-
[
-
tl[1]['lem']
tl[1]['a_supernominal']
tl[1]['a_nbr']
"+"
"'s"
<gen>
- b1
-
tl[2]['whole']
]REALGEN
<NP-GEN>
- proc-synlabel1(
$1
)
- Output:
-
[
-
tl[1]['lem']
tl[1]['a_cnj']
]cc
<CC>
- proc-synlabel1(
$1
)
- Output:
-
[
-
tl[1]['lem']
tl[1]['a_cnj']
]cs
<CS>
- Output:
-
[
-
"no"
<adv>
]v
<SV.NEG>
- mood-handler1(
$1
)
- person-handler1(
$1
)
- Output:
-
[
-
tl[1]['lem']
tl[1]['a_vb']
$screeve
$person
]v
<SV>
$person
$screeve
- proc-synlabel1(
$1
)
- Output:
-
[
-
tl[1]['whole']
]sent
<SENT>
- proc-synlabel1(
$1
)
- Output:
-
[
-
tl[1]['whole']
]sent
<SENT>