PDIC用エスペラント辞書、または私は如何にして心配するのをやめてことのはアムリラートを愛するようになったか

以前Qiitaに載せていた記事を削除したので転載しておきます。

TL;DR

Esperanto - Vastaltoで配布されてる実用エスペラント小辞典第1.81版をPDIC/Unicodeで使えるようにした。

f:id:seamlessbias:20200402235401p:plain
PDIC

ことのはアムリラート

8月25日にsukerasparoから出た純百合アドベンチャー。百合はいいものです。わかりますね?

ユリアーモ。あるいはエスペラント

作中の異世界で使われる言語、ユリアーモ、はエスペラントを使っているんですが、そうなるとやっぱりエスペラント辞書が欲しい。一応ゲーム内に出てくる単語はゲーム内辞書に実装されてはいるんですが、プレイ中に引けるような仕様でないのでちょっと困る。

PDICエスペラント辞書はある。ただしちょっと古い版だ。

最新の辞書が1.81なんですが、PDIC用ファイルは1.63から変換した版なので少し古いのです。なので、自分で変換スクリプトを用意して、PDICでひけるようにしてみる。

で、自前で作ってみる。

サーカムフレックスとかブレーヴェ付きの文字を代用表記したもの(c^, g^, h^, j^, s^, u^)と、Unicodeで表記したもの(ĉ, ĝ, ĥ, ĵ, ŝ, ŭ)が配布されてるので、今回はUnicode表記のファイルを使いました。PDIC/Unicodeで使うので、わざわざ代用表記を使う意味もないですし。変換する方針は、

  1. 見出し語から語根の区切りは取り除く。
  2. とはいえ語根の区切りは必要なので、訳語の末尾に付け足しておく。
  3. 公認基礎語根はLv1、公認語根はLv2にマークする。

PDICが読み込めるCSVに変換します。

つまりこうだ。

use strict;
use warnings;
use utf8;

use Text::CSV;

my $csv = Text::CSV->new({binary => 1, always_quote => 1}) or die Text::CSV->error_diag;

open my $rh, '<:encoding(UTF-8)', 'pejvo.txt' or die $!;
open my $wh, '>:raw:encoding(UTF-16LE)', 'esperanto.csv' or die $!;

print $wh "\x{feff}"; # BOM
print $wh "word,trans,level\r\n";

while (my $line = <$rh>) {
    chomp $line;

    my ($word, $trans) = split /:/, $line;
    my $level = 0;

    #{B} => lv1, {O} => lv2に変換
    if ($trans =~ s<{([BO])}><>) {
        $level = $1 eq 'B' ? 1 : 2;
    }

    if ($word =~ m{/}) {
        $trans .= " $word";
        $word =~ s{/}{}g;
    }

    my @col = ($word, $trans, $level);
    $csv->print($wh, \@col);
    print $wh "\r\n";
}

close $wh;
close $rh;

これでCSVに変換できるので、PDICにmgmgさせれば辞書ファイルが作れます。

Perl入ってないし自分で変換するの面倒

そう言うだろうと思ったよ。なので用意しました。