モンゴル語 電子化計画

第三弾

Mongolian Electronizing Project
このモンゴル文字は『モンゴル語 電子化計画』第一弾付属のTruetype +Fontを利用して作ったものです。
MEP_cyrillic

Copyright (C) 1997-2004 NAKAZATO, Chigen
全体の目次に戻る。

UNIXでモンゴル語(暫定版)


 これは「第一弾」で公開したスクリプト群をUNIX環境に移植したものです。 とは言え、総てのスクリプトを移植したわけではありません。逆に、第一弾に はなかった機能を加えた部分もあります。
 一応、密かに公開しますが、あくまで暫定版ということで…
何故、暫定なのかと言うと、フォントに変なことをしてるからです。

 動作確認は、Solaris 2.6 と TurboLinux 3.0, 6.0 で行なっていましたが、 近頃は VineLinux 2.6 あたりを主に使っています。


1 【全体に関わる準備作業】

 以下、それぞれの項目の中で注意すべき点は説明しますが、全体に亙る 留意点として、スクリプト内で指定するファイルの位置について 述べておきます。
 添付のスクリプト内には、リダイレクト先など、ドライブやディレクトリ の指定が必要なところが多々あります。これは、それぞれのマシンの設定 状況によって違いますので、自分の環境に合わせて入出力先を変更して おかないと、うまく行かないことがあります(大抵はうまく行かない)。 このマニュアルに従って実行する前に、必ず確認をして下さい。
 こうした面倒なパスの修正をなるべく軽減する為に、以下の環境変数を使用します。

 csh系のシェルならば、~/.cshrc などに

などと書いておくとよいでしょう。そして、$MNGPATH にパスを通しておけば使い勝手が良くなります。

 sh系のシェルならば、~/.bashrc などに

などと書きます。パスも同じように

のようにしておきます。

 なお、TEMP は一般に使われる環境変数ですので、他のプロセスが利用する ことも十分にあり得ます。TEMP内に謎のディレクトリなどができていても、 それは「電子化計画」とは無関係ですので念の為。

  • 注意

  •  次に、スクリプト内でのパス指定を修正します。
     具体的には、

     期待した通りに動かない場合は、まず、このパス関係 を疑ってみて下さい。


     モンゴル語電子化計画は、ネットワーク上で簡単・無料で手に入る、幾つ かのツールを前提にしています。具体的には、 AWK , SED , PERL , GREP などです。いずれも 有名なものばかりですので、聞いたことがない人は、その手のことに詳し い人に訊いてみて下さい。
     一言で説明するなら、

    です。これは極めて乱暴な要約ですので、「違う」と言う人もいるでしょう。 しかし、とりあえず、これくらいの理解で構いません。

     一般的なUNIXシステムなら、改めてこうしたツールを求めなくても、初めか ら使えるようになっている筈です。但し、それがマルチバイト対応のものであ るかどうかは、なんとも言えません。
    公開している辞書データの大部分は ASCII文字で書かれていますが、綴りの 乱れなどについての注釈を日本語で書き込んだ部分も若干ながらあります。日 本語はマルチバイトですので、マルチバイト文字対応のものでないと期待 通りに動作しない可能性があります。
     なお、このマニュアルを読んでいるのは日本語環境にいる方が大半でしょう し、私は日本語環境以外のマルチバイト文字環境を知らないので、「マルチバ イト文字対応」と「日本語対応」というのを同義と見做します。(中国語環境 とかは判らない、ということです。)

     私が使用しているものは、

    です。
     また、この他に日本語の文字コード変換ツールとしてqkc を使っています。 qkc は一般的なUNIXシステムに常に入っているというものではありません 。別途 ftp 等で入手されるか、同等の機能を持つツールを使って下さい。


     
    【著作権・版権の問題、及び免責に ついて】で触れた様に、検索システムは元はWebsterの辞書用に作られた ものをモンゴル語用に手直ししたものです。元の形では索引ファイルを作るに はPERLだけあれば良く、AWKは必要なかったのですが、私はPERLのpの字も知ら なかったので、モンゴル語辞書用に改変する時に、やむなくAWKとSEDで書き直し ました。(書き直したというより、全く別のものを作ったという方が正確。)
     今回、UNIX に移植するにあたり、索引ファイル作りの心臓部を PERL で 書き直してみました。本当なら、これで AWK も SED も必要なくなる筈なの ですが、使い慣れたツールを手放し難く、結局必須ツールとして残してあり ます。

     とは言え、私の手元にある SED や GREP は、DOS で使っていたものと正規 表現の解釈が異なることがあるようです。何故こういうことが起きるのか私に は解りません。ソースをよく読んでコンパイルし直せばいいのかも知れません が、面倒です。「とりあえず動けばいい」ということで、おかしな動きをする ものだけ、PERLなどに書き換えています。
     私の使っている環境は決して特殊ではないとは思いますが、普遍的という わけでもありません。私のところで「とりあえず動いている」ものが、誰の ところでも同じように動くとは限りませんので、変だと思われたら連絡して下 さい。できる範囲で対処します。

    目次に戻る。

    2 【モンゴル語の検索方法】

     モンゴル語からモンゴル語を検索するのに、三種類の方法を用意しました。
    です。このいずれの検索方法で使用する場合も、予め索引ファイル "mongol.idx" を作っておかなくてはなりません。

     
    日本語からモンゴル語を検索する 場合は、索引ファイルは要りません。正規表現が使える利点(却って 面倒だという話も…)はありますが、遅いです。

    とすれば、通常の索引をまず作ります。DOS版と違い、曖昧検索用の索引 までは作りませんので、注意して下さい。

     次に、曖昧検索用の索引を作ります。

     と打てば、入力した単語を曖昧化して検索します。

    目次に戻る。

    3 【モンゴル語の表示】

     
    「DOSでモンゴル語」で実現したような、 チープな方法によるモンゴル語表示を UNIX 環境でもできないだろうか、 と考えてみました。

    3.1 【ISO/IEC 10646 もしくは Unicode について】

     まっとうな開発者なら、せっかくISO/IEC 10646 にモンゴル文字が含まれた ことだし、国際規格に則った表示システムを作ろうと思うでしょう。私にも、 そういう欲が全然ないわけではありませんでした。でも、大変そうで…
     なにしろ、日本語のコードも EUC から移行しなくてはならないし、キリル 文字をどうするかも面倒です。文字コードの問題を解決したとしても、表示シ ステムを作るには、画面周りのことに詳しくなければなりません。途方もない 作業と知識が予想されます。どうしても必要な機能というわけでもないし、手 元には快適に動くDOSマシンもありますので、移植に積極的になれないまま数 年が経ってしまいました。

     まあ、それでもモンゴル文字のフォントくらい作ってみようかと思い、 ISO の表を調べてみました。モンゴル文字だけでなく、トド文字、シボ文字、 満洲文字、その上アリガリまで含んだ一覧です。すごい!
     しかし、冷静になって考えてみると、コードに対応したフォントを作るだけ では駄目だということに気がつきます。文字コードは音素にほぼ一致しており、 表記には一致していません。つまり、タイプライターの発想では文字の表示は できないということです。コードの前後関係を判断する仕組みが、コードと表 示の間に必要になります。
     同じ ISO/IEC 10646 でも、例えばアラビア文字の場合、モンゴル文字同様 の音素的な文字コードとは別に、字形的な文字コードも持っています。この中 には、独立形・語頭形・語中形・語末形は勿論のこと、合字にもコードが割り 当てられています。これだったらコードと表記が一致するので、タイプライター式 の単純な表示が可能です。
     こっちの方がいい、というわけではありません。単位としては、音素の方が 人間にとって分かり易いでしょう。入力や検索の時に、いちいち文字の形を考 慮しなければならないとしたら、それはそれで不便です。

     うーん、これって同じ議論を以前にしたような…。
     結局、ISO/IEC 10646 の考え方は、「モンゴル語電子化計画」と基本的に同 じなわけです。データの「形式」と、画面や印刷というデータの「表示」は別 の問題である、ということですね。
     つまり、Corff式なり致元式なりで書かれたモンゴル語を ISO に変換してみ たところで、それだけではモンゴル語を表示することはできません。なーんだ、 だったら別に ISO にこだわる必要はないじゃないか。面倒なことが嫌いな私 は、そう判断しました。で、初めに述べたチープな方法に逃げたわけです。

    3.2 【半角カナとUNIX】

     「DOSでモンゴル語」では、半角カナの領域を乗っ取ることでモンゴル 文字の表示を実現していました。同じことが UNIX でも可能だと思われます。
     しかし半角カナという場所は、結構面倒なものです。電子メールでも、半角 カナは使うな、ということが言われます。UNIX 系の OS で用いられる日本語 コード EUC でも、半角カナは嫌われ者なのです。(というより、半角カナ領 域を2バイト文字の一部として使用しているので、両立しない。)
     では、どうするか。EUC を使わなければいいのです。UNIX 上でシフトJIS が使えないわけではないのですから。

     EUC と SJIS の変換を行なう方法には様々ありますが、とりあえず qkc を 使うことにします。標準的に使われていると思われる nkf では(少なくとも 私の持っているnkfでは)半角カナが全角に変換されてしまうので都合が悪かっ たのです。なので、adv の UNIX移植版を使うには、qkc が必要です。気に入 らない人は、adv を適宜変更して下さい。

    3.3 【UNIX移植版advを使えるようにするには】

     今回、モンゴル文字を表示する為に X Window を使うことにしました。日本 語の使えるコンソール kon での実現も考えたのですが、kon は Linux 以外の システムでは使えないみたいですので、より一般的な環境と思われる X への 対応を優先することにしたわけです。

     というわけで、やらなければならない作業は以下の通りです。(環境によっ て若干異なるかも知れません。)

    1. 半角カナ領域を改変したフォントを用意する。(本パッケージに付属)
    2. mkfontdir で fonts.dir を作る。
    3. xset fp+ でフォントのパスを通す。
    4. xset fp rehash でフォントパスを有効にする。
    5. シフトJISが使える仮想端末(ktermなど)を使えるようにする。
    6. Xresourceやコマンドラインなどで、その仮想端末が使うフォントを指定する。
    7. qkc を用意する。または、類似のコード変換ツールをadv に書き込む。


     フォントの作成には xmbdfed (Motif-based BDF font editor)を使用して います。
     12dotフォントはフリーの要町フォントを改造して作りました。
    -MNKANAME_mng-Fixed-Medium-R-Normal--12-110-75-75-C-60-JISX0201.1976mng-0
    -MNKANAME_mng-Fixed-Medium-R-Normal--12-110-75-75-C-120-JISX0208.1983-0
    
     という名前をつけてありますので、仮想端末の設定の参考にして下さい。
     14dotフォントもフリーのk14フォントを改造して作りました。
    -Misc-Fixed-Medium-R-Normal--14-130-75-75-C-70-JISX0201.1976mng-0
    
     という名前です。

    kterm -fr  -mnkaname_mng-*-*-*-*-*-*-*-*-*-*-*-jisx0201.1976mng-* \
          -fkB -mnkaname_mng-*-*-*-*-*-*-*-*-*-*-*-jisx0208.1983-* \
          -km  sjis
    
    みたいな感じで kterm を起動すれば、モンゴル語と日本語が同時に表示でき る環境になります。aliasにするなり、ウィンドウマネージャのメニューに入 れるなりすれば、起動も簡単でしょう。
     xset も、.xinitrc などに書き込んでおけば楽です。とりあえず mongfontload というスクリプトを用意しましたので、これを使ってもいいで しょう。

    注意  
       半角カナ領域を改変したフォントの名前に"jisx0201.1976"という部分があ ります。しかし、モンゴル文字を載せている以上、これは JIS 準拠のフォン トではありません
     ただ、全然違う名前をつけてしまうと、このフォントの骨格が JIS に基づ いていることが判らなくなってしまいます。それはそれで不便ですので、こん な風にしてみました。
     "mnkaname" の文字を残したのも、同じ理由からです。私が勝手に改造した フォントですので、これについて要町フォントを製作した方々に問い合わせた りしないで下さい。
    なお、全角(2バイト)文字の12dotフォントに手を加えたのは、キリル文 字の表示を見易くする為です。ロシア文字とギリシャ文字の一部を改変した だけで、殆んどは元のままです。

     付属のフォントは、こうした極めて怪しいフォントなので、一般のフォント ディレクトリに混ぜたりせず、個人的に使うようにして下さい。

     後は、$MNGPATH に付属の
  • adv
  • cgn2dsv_euc.sed
  • crf2dsv_euc.sed
  • ad_dsv_euc.sed
  • を置き、ad が走るのと同じ環境設定をしておけば準備完了です。SJIS設定の 仮想端末で

    と入力してみて下さい。

    目次に戻る。

    4 【モンゴル語の印刷】

    モンゴル語を印刷したい人は、Infosystem Mongolei から MonTeX を拾って来て使うといいと思います。こんな素晴らしいものが できたので、第一弾で公開した印刷関係はUNIX環境に移植しません。

     もっとも、MonTeX は独特の転写方法を採用していますので、これまで入力 したデータをそのまま流し込むわけには行きません。
    とりあえず、モンゴル文字の変換スクリプトを作りました。キリル文字は最近 使っていないので、おいおい作ることにします。


    5 【パッケージ一覧】

    アーカイブのダウンロード
    ファイル名内容






    ad曖昧検索シェルスクリプト
    adv曖昧検索シェルスクリプト(モンゴル文字表示用)
    mdic通常検索perlスクリプト
    mkidx通常検索索引作成シェルスクリプト
    mkaimai曖昧検索索引作成シェルスクリプト
    amdic.pl曖昧検索用部品
    mkaimai_euc.sed曖昧検索用部品
    mdidx.awk通常索引作成用部品
    mkidxcrl.pl通常索引作成用部品
    mkidxmng.pl通常索引作成用部品










    cgn2dsv_euc.sedadv用部品(キリル文字部分)
    crf2dsv_euc.pladv用部品(モンゴル文字部分)
    ad_dsv_euc.sedadv用部品
    knmhn12mng.pcf.gzadv用圧縮フォント(半角)
    knmzn12mng.pcf.gzadv用圧縮フォント(全角)
    mischn14mng.pcf.gzadv用圧縮フォント(半角)
    knmhn12mng.bdfadv用フォント(半角。pcf化する前のもの)
    knmzn12mng.bdfadv用フォント(全角。pcf化する前のもの)
    mischn14mng.bdfadv用フォント(半角。pcf化する前のもの)



    crf2mtex.plcorff式転写をMonTeX用に変換するスクリプト
    md_unx_j.htmこのファイル

    目次に戻る。

    6 【期待通りに動かない場合】

     ありがちな原因を列挙しておきます。  ついでに言うと、辞書データが EUCコード・LF改行であることを前提に スクリプトは書かれています。このパッケージで配布している辞書は、 Shift-JIS・CR/LF改行ですので、qkcなどのツールを使って辞書を変更して 下さい。


     スクリプトの中にも、それぞれ簡単な説明が書いてあります。この マニュアルだけでなく、スクリプトやバッチ・ファイルにも目を通して おくと、理解が深まると思います。


    東北大学大学院 情報科学研究科(2004年満期退学) 中里致元 NAKAZATO,Chigen
    chigen@human.is.tohoku.ac.jp