[サンスクリットページ雑感集・技術情報]

まんどぅーかネットで使っている技術(4)

Since 2004/9/5 Last Updated 2005/7/18


  1. ウルドゥー語/ヒンディー語の内部表現
  2.  前記事の末尾で、 他言語では内部表現を変えているという話をしたので、 具体的にウルドゥー語/ヒンディー語について書いてみる。
     サンスクリットと大いに違う点は、鼻母音の存在である。 普通の母音+アヌスヴァーラまたはアヌナーシカのように処理してもいいのだし、 現にウルドゥー語ではそのように扱われている。 しかし現在のヒンディー語の参考書ではまず例外なく、 普通の母音とは別、しかも鼻音を別ものとしない、 「一つの母音」という形での取り扱いをしている。 技術的にも、一つの母音を母音+鼻母音記号に切り分けるのと、 母音+鼻母音記号を一つの母音として処理をするのでは、 前者のほうがはるかにラクである。 そこで鼻母音10種類のコードを母音の間にぶちこむこととなった。 もともと10進数二桁で1文字を表すので、00〜99の100種類しか文字を表現できない中で、 10種類もそんなコードを入れるのは、サンスクリットと互換性を保つ中では不可能である。 これが、サンスクリットとのコードの互換性を無視した最大の理由である。
     あとは、サンスクリットにない を、 点のない のあとにぶちこむ。
     具体的には以下のとおり。 細かい点の説明はそのあとである。
    文字 Unicodeで、
    *はあとに2305を出力、
    +はあとに2306を出力。
    まんどぅーか式 aa~ ai~ au~ a~ ii~ i~
    内部コード 03 17 22 01 07 05
    Unicode(記号) 2366*( काँ ) 2376+( कैं ) 2380+( कौं ) *( कँ ) 2368+( कीं ) 2367+( किं )
    Unicode(独立) 2310*( आँ ) 2320+( ऐं ) 2324+( औं ) 2309*( अँ ) 2312+( ईं ) 2311*( इँ )
    文字
    まんどぅーか式 uu~ u~ e~ o~ e^ o^
    内部コード 11 09 14 19 15 20
    Unicode(記号) 2370*( कूँ ) 2369*( कुँ ) 2375+( कें ) 2379+( कों ) 2374( कॆ ) 2378( कॊ )
    Unicode(独立) 2314*( ऊँ ) 2313*( उँ ) 2319*( एँ ) 2323+( ओं ) 2317( ऍ ) 2322( ऒ )
    文字
    まんどぅーか式 aa ai au a ii i uu u
    内部コード 04 18 23 02 08 06 12 10
    Unicode(記号) 2366( का ) 2376( कै ) 2380( कौ ) ---- 2368( की ) 2367( कि ) 2370( कू ) 2369( कु )
    Unicode(独立) 2310( आ ) 2320( ऐ ) 2324( औ ) 2309( अ ) 2312( ई ) 2311( इ ) 2314( ऊ ) 2313( उ )
    文字 ヴィラーマ
    まんどぅーか式 r1 e o h3 m3 ' w
    内部コード 13 16 21 24 25 26 27
    Unicode(記号) 2371( कृ ) 2375( के ) 2379( को ) 2307( कः ) 2306( कं ) 2365( ऽ ) 2381( क् )
    Unicode(独立) 2315( ऋ ) 2319( ए ) 2323( ओ )
    文字
    まんどぅーか式 z2 z f x
    内部コード 41 39 57 31
    Unicode 2333 2364( झ़ ) 2395( ज़ ) 2398( फ़ ) 2393( ख़ )
    文字
    まんどぅーか式 r3h r3 l3 g2 q
    内部コード 48 46 64 33 29
    Unicode 2397( ढ़ ) 2396( ड़ ) 2355( ळ ) 2394( ग़ ) 2392( क़ )
    文字
    まんどぅーか式 kh k gh g n1
    内部コード 30 28 34 32 35
    Unicode 2326( ख ) 2325( क ) 2328( घ ) 2327( ग ) 2329( ङ )
    文字
    まんどぅーか式 ch c jh h n2
    内部コード 37 36 40 38 42
    Unicode 2331( छ ) 2330( च ) 2333( झ ) 2332( ज ) 2334( ञ )
    文字
    まんどぅーか式 t3h t3 d3h d3 n3
    内部コード 44 43 47 45 49
    Unicode 2336( ठ ) 2335( ट ) 2338( ढ ) 2337( ड ) 2339( ण )
    文字
    まんどぅーか式 th t dh d n
    内部コード 51 50 53 52 54
    Unicode 2341( थ ) 2340( त ) 2343( ध ) 2342( द ) 2344( न )
    文字
    まんどぅーか式 ph p bh b m
    内部コード 56 55 59 58 60
    Unicode 2347( फ ) 2346( प ) 2349( भ ) 2348( ब ) 2350( म )
    文字
    まんどぅーか式 y r l v
    内部コード 61 62 63 65
    Unicode 2351( य ) 2352( र ) 2354( ल ) 2357( व )
    文字
    まんどぅーか式 s2 s3 s h
    内部コード 66 67 68 69
    Unicode 2358( श ) 2359( ष ) 2360( स ) 2361( ह )
    文字
    まんどぅーか式 0 1 2 3 4 5 6 7 8 9
    内部コード 70 71 72 73 74 75 76 77 78 79
    Unicode 2406( ० ) 2407( १ ) 2408( २ ) 2409( ३ ) 2410( ४ ) 2411( ५ ) 2412( ६ ) 2413( ७ ) 2414( ८ ) 2415( ९ )
    文字 ヒンディノンスペース
    まんどぅーか式 . , - ! ? ; : ( ) ~ + $ %
    内部コード 80 81 00 83 84 85 86 87 88 89 90 91 92
    Unicode 2404( । ) 2405( ॥ )   2416( ॰ )  
    文字    
    まんどぅーか式 _ @ \
    内部コード 97 98 99

  3. 補足説明
  4.  前記事同様、ところどころヘンな順序になっているのは、 変換ルーチンでのキーワード(トークン)解析の優先順である。
     鼻母音はUnicodeでは定義されていないので、 自分でピンドゥないしチャンドラビンドゥを出力しなければならない。 しかも、どちらを出すべきかをこちら側で判断しなければならないわけである。
     は、実際にはローマ字として以外は出力することはない。 後述のように、これが出てくる単語はプリプロセスで別の字に変換してしまうからである。
     はサンスクリットでいうである。 ウルドゥー語/ヒンディー語でと書くとの反舌音になるので、 別のローマ字表記をあてた。 もっとも、これにお目にかかる機会はほとんどないだろう。
     ヴィラーマにwというローマナイズを与えて、 独自の内部コードをわりあてている件については後述する。
     はUnicodeのデーヴァナーガリーに見当たらない。 そこでに点のコード(2364)を追加する形にした。 それでも正しく組みあがるはずである。
     はヒンディー語では不要だが、念のため入れておいた。
     ヒンディノンスペースについては次で。
     一応これで、ほぼデーヴァナーガリーの順番に並ぶはずである。 違いは、ヴィサルガが前に来ないことくらいである。

  5. ヴィラーマとヒンディーノンスペース
  6.  サンスクリットでは、子音で終わる場合や子音が連続する場合には、 ヴィラーマのコードを出力していた。 しかしヒンディー語では、これらはほとんどが潜在母音を含む形で表記されているので、 そのまま子音を出せばいい。
     ただしヒンディー語でも時々結合子音で表記される場合がある。 これが上記のwで表現したヴィラーマである。 wは、ローマ字で出力するときは無視し、 デーヴァナーガリーで出力するときはヴィラーマを出せというしるしである。 このことによって、デーヴァナーガリーでは結合子音になるし、 ローマ字では余計なものが見えなくなるというわけである。
     ヒンディーノンスペースというのは、 のような、代名詞のあとに後置詞がついた場合などの処理用である。 ローマ字とウルドゥー語ではスペースを出したいのだが、 ヒンディー語では続けて書かれる。 こういうときに+を用いて打っておき、 ローマ字とウルドゥー語ではスペースに変換して出し、 ヒンディー語では無視してしまえばいいわけである。

  7. 特殊なスペルの語
  8.  ヒンディー語ではたまにつづりと発音が異なる語がある。 その中でもよく出てくるのは、(これ)と(あれ)である。 これらの語については、デーヴィナーガリーとして出す場合は、 いったんye^h→yaha、vo^h→vahaのような変換をしてから処理をすることにしている。
     もっともこの二語は、ウルドゥー語では単複同形であり、 ヒンディー語では単数と複数で形が違うというやっかいものである。 これはさすがに、自動処理では手に余る。 ウルドゥー語としてローマ字にしたものをヒンディー語として出す場合は、 ここらへんは手で直すしかあるまい。

  9. ウルドゥー語への変換
  10.  目下のところはローマ字→ウルドゥー語への変換は実現していないが、 がんばればこちらもできそうだ。 以下、見通しを書いておく。
     まず、アラビア文字への変換自体はそう難しくない。 ローマ字を機械的にUnicodeに変換していけばいい。 短母音はとりあえず無視する方向でいけばいいだろう。
     ローマ字ではアレフとアインの区別がつかないが、 何か適当なローマナイズを考えればいい。 たとえば、aと書けばアレフ、qqaと書けばアインにする、などとして、 ローマ字やヒンディー語で出力する場合はqqを無視、 ウルドゥー語のときにはアインを出す、というふうにすればいいだろう。
     問題はこの先。 ヒンディー語やサンスクリットでは、 Unicodeを10進数で&#と;で囲んで、HTMLとして出力して、 それをブラウザに食わせればよかったし、 Wordで処理したい場合はブラウザからコピー&ペーストすればよかった。 しかしウルドゥー語では、これではナスフ体になってしまう。 やはりウルドゥー語ではナスターリーク体にしたいので、 なんとかInpageに食わせたい。 しかしInpageでは、&#〜;囲みのUnicodeファイルを読めないのはもちろんのこと、 ブラウザ経由のコピー&ペーストもダメである。
     Impageには、File - Import というメニューがあり、 ここでUnicode Fileをインポートするメニューがある。 ところがここでいうUnicode Fileとは、ホンモノのUnicodeでなければならない。 つまり、&#〜;で囲まれた10進数というのはダメだし、 UTF-8もダメである。
     たとえば、ウルドゥーという4文字(アレフ・レー・ダール・ワウ)のコードは、 Unicodeでは(下の「関連サイト」のリンクを参照)、 16進数で0627、0631、062F、0648となる。 今までならこれを اردوと書けばよかったわけである。 実際に書いてみよう→اردو。
     ところがこんどはこれをバイナリーで直接出さねばならないわけである。 それさえ可能ならば問題ない。 ヘンにUTF-8に変換しなければならないというよりはなんぼかラクである。 念のためいうと、コードは下位バイト→上位バイトの順に出す。 だから上記は、27 06 31 06 2F 06 48 06の順に出す。 ローマ字や改行コードなど、7Fまでのコードは、上位に00を出せばいい。 だから改行は 0D 00 0A 00 だし、 数字の1は 31 00、ローマ字のAは41 00である。
    なお、私の持っているバージョンだけかもしれないが、Inpageに食わせる(吐き出す)ユニコードファイルでは、()のコードがおかしい。本来なら0698(10進数では1688)のはずが、0696(10進数では1686)になっている。データ変換プログラムを書く際は注意されたい。
    ちなみに、ウルドゥー語語彙集で使っているURDUスペル入力のローマ字を、Inpage用のユニコードファイルに変換するプログラムならば、ローマ字と字母とが一対一対応なのですぐに作れる。例えば、ktab→、Kda KafV→のような変換をするものである。実際に私の手元でウルドゥー語語彙集の作成に役立っている。上記のInpageバグもこのプログラムを使っているうちに発見したものである。
    発音を表すローマ字からの変換はなかなか難しい。その難しさとはユニコードファイル作成のような技術的なものではなく、ローマ字表記をどうするかというものである。アラビア語起源の語などでは、のように同音に対して複数の可能性がある。これをうまくローマ字表記できさえすれば、あとはすぐにでもプログラムは完成するのだが。

    (2005/7/18付記)

  11. 関連サイト
    1. Unicode デーヴァナーガリー コード表
    2. Unicode アラビア文字 コード表


※ご意見、ご教示などは、に戻り、掲示板あるいはメールで賜るとありがたく思います。