読者です 読者をやめる 読者になる 読者になる

Perlexの動詞活用に登場する謎の記号について

Perlexの動詞屈折辞には謎の記号が出現する.
例えば

3sgPreSubjNegFam n ↙e n £e
2*3plPreSubjNegFam n ↙n n £n

のように.
はじめはまったく意味がわからなかったのだが,ようやく意味がわかったので,ここに書き記しておく.

端的に書くと,「謎の記号は動詞の現在語根を判別するためのもの」であった.
ペルシア語動詞では不定形と過去形と現在語根が存在する.過去形は不定形から語尾のnを削除するだけで簡単につくれるのだが,現在語根はそうは問屋が卸さない.現在語根は一定の語尾を削除するだけでよい場合もあるし,完全に不規則変化の場合もある.
ここで問題になるのが,「語尾は同じなんだけど,活用カテゴリが違う」場合だ.なんらかの手段で活用カテゴリの違いを明示的に記さないといけない.そこで,perlexではこの違いを記す記号として謎の記号を導入しているらしい.

Perlex内のPerlのコードをよくよく読んでいくと,morpho.fa.check.plというコードがあった.
このスクリプトの中で,fusionという,なんともかわった名前のサブルーチンが存在している.
で,このサブルーチンはという記述がされている.

sub fusion {
my $s=shift;
my $gotfusion=1;
my $loopn=0;
while ($gotfusion==1) {
if ($loopn++>20) {die((" "x50)."
Infinite loop detected on form $s \n");};
$gotfusion=0;
if ($s=~s/([adđrzžw]) _/$1 /o) {$gotfusion=1} # rank = 0
if ($s=~s/yd «/ /o) {$gotfusion=1} # rank = 1
if ($s=~s/d :/ /o) {$gotfusion=1} # rank = 2
if ($s=~s/rd ¨/ar /o) {$gotfusion=1} # rank = 3
if ($s=~s/ad ~/ /o) {$gotfusion=1} # rank = 4

(略)

※記号がつぶれてしまうので,あえてコード表記にしない

fusionでは,動詞(過去形)とその動詞につけられた屈折辞を見て,該当する場合のみに現在語根を返している.
whileループの先頭部分で,スカラ変数の$gotfusion==0の記述がある.この変数は,制御のために用いる変数で,入力が特定の現在語根に書き換え成功した場合にのみ,$gotfusionが1になる.そして,1になった時に,whileループを終了する.という仕組み.
(ちなみにこのサブルーチンの入力は何なの?と聞かれるととてもイタイ.それを検証できる程にPerlは読めていないので)

以上がコードの内容だが,以外にもとても重要な情報だったりする.
と,いうのも,動詞の活用表(自分で作った活用表)を見ても,謎の記号が多数存在し,この記号が実際にどんな文字に置き換えられるか?は不明だからだ.

では,それを確かめる手順を記しておく.

例えば,動詞のdadnを例にとる.

V.ilexによると,dadnは

dadn    v22     222;Lemma;V;;cat=V;%default             # Known to the PPD: dadm, dade, bdey, bdem, my_dem, dadn, dadny, dende, bde, dean
dadn    v23     222;Lemma;V;;cat=V;%default             # Known to the PPD: bd, dnde, dadm, dade, dadn, dadny, bdy, bde, bdn
dadn    v28     222;Lemma;V;;cat=V;%default             # light verb
dadn    v29     222;Lemma;V;;cat=V;%default             # light verb

の4つを持っている.

この中で,light verbのv28とv29はあまり関係ないので,今回は無視.

ではv23とv22の違いは何か?というと,(自分で作った活用表)を見ると,屈折辞に↙か£が記載されている違いだ.

で,次にすべきはサブルーチンのfusionの中身を見ること.
dad ↙は if ($s=~s/dad ↙/de /o) {$gotfusion=1} # rank = 25
dad £は if ($s=~s/dad £/d /o) {$gotfusion=1} # rank = 66

なので,dad ↙の場合はdeにマップされ,dad £の場合にはdにマップされることがわかる.

従って,以上からわかることは,
↙を屈折辞に用いているv22に属するdadnは現在語根がdeにマップされる.
£を屈折辞に用いているv23に属するdadnは現在語根がdにマップされる.

と,いうことがわかる.

という以上の手順は,アノテーションの時に必要になる.
dadnはタグがv22とv23の2つがつけられるが,正解はどっち?となった時に役にたつのが,上の検証手順だからだ.

ちなみにdadnでもv22とv23で何が違うの?っていう話だが,v22は文語の現在語根で,v23は口語の現在語根である.