ようやくversio 0.9.0で実装を始めた音韻関連の機能が整いつつあります。直近で更新した内容は、韻文中での発音に関する二点です。
前者では、アクセントを変更しないという点が曲者です。エスペラントの規則性ゆえに、実装も極めて論理的かつ簡素なものとなっていたのですが、こういう特例の存在により、優雅さとは程遠い泥臭い実装を行う羽目になります。前者ではl’を「ル」と読めるようになるのですが、l’armoをルアーモと読んでしまうために、ここでも特例を設けてラーモと読めるように処理を書き加えました。
良い機会なので、発音をカタカナやIPAで転記する処理の概要をご紹介します。あまり変なことを考えず、人間の頭の中で行っている処理を素直にコード化することが一番と言えます。
('sam', 'ide', 'an', 'o', 'j', 'n')は('sam', 'ideanojn')になります。これはまだ文法上の区切りですが、続け読みが出来るように配慮された配列になっています。'sam'は('sa', 'm')に、'ideanojn'は('i', 'de', 'a', 'no', 'j', 'n')に分解されます。これで、それぞれの要素が一つの音に対応するような配列になりました。('sa', 'm', 'i', 'de', 'a', 'n', 'o', 'j', 'n')というリストを得て、配列に突っ込みます。trすれば事足ります。アクセント位置には長母音の記号を与えて完成です。samとideanojとの間は空白を入れておきます。'sa'は$japana->{'s'}{'a'}で「サ」が求まりますし、母音のみや子音のみの場合にはダミーのキーを与えて$japana->{'m'}{'_'}で「ム」、$japana->{'_'}{'i}で「イ」が求まるという次第です。長母音で「ー」を与えて完成です。このように可能な限り手を抜いて楽をして発音させている無邪気な実装なので、世知辛いesper’などという文字列を与えたら、まず「’」なんてハッシュキーがないのでこけますし、これを無視したら母音が一つ足りないわけでエスペル(エがアクセント)と読もうとするしで大変です。
そこで、以下のように機能追加することによって、こうした言語現象にも対応出来るようにしました。
(#39「エスペラント発音解析の実装方法 (単語辞書引き機能 versio 0.9.5)」の続きを読む)
本サイトで提供している「エスペラント語単語辞書引き機能」の形態素解析(・単語変換・文字列生成)機能が、エスペラント検定に合格したことを発表致します。……といっても、Akademio de Esperanto(エスペラント学士院)や日本エスペラント学会等の機関により権威付けられた検定では全くなく、けんてーごっこというサイトで有志が公開しているいくつかの検定を通過しただけです。半ば確信犯(誤用)的な発表ですが、景気付けということでご寛恕願います。
例えば『エスペラント合成語検定第三弾』を例に取りますと、最初はエスペラント日本語小辞典にも(合成語の形で)見出し語が存在するsendependeco等の語がありますが、進めていくとporvirina等の、『小辞典』の語根を組み合わせないと訳語に辿り着けないような合成語も出て来ます。この検定は三択問題の連続となっていますが、「引っ掛け」としても優れた選択肢が用意されています。poŝtelefonoを例に取り上げますと、poŝt/…と区切ってしまった場合の「“郵便”貯金」という選択肢があったりします。この辺り、出題者のbarkituro氏(「空想エスペラント」著者)の機知に感心致しました。なお、語根区切りを間違えて「郵便」という形態素訳を誤導出する例は、エスペラント日本語翻訳プログラムの先達である山野敏夫氏が「トラちゃん95処理概要」にて採り上げています。
何にせよ、上記の例ですと合成語の分解理解には成功していることが裏打ちされているわけで、設計書のメモの山だけでコードが1行もなかった1年前と比べれば、本サイトの翻訳システムの土台である形態素解析機能も成長した感があります。親馬鹿のようですが、「ごっこ」とはいえ合格を賜ったことは素直に嬉しく感じました。日本エスペラント学会が開催するエスペラント学力検定試験のエス和翻訳部分で満点をいただけることを目指しつつ、エスペラント語日本語翻訳システム「Ermitejo」の完成を目指して邁進する所存です。
もっとも、「ごっこ」とはいえあくまで検定ですので、本サイトの辞書引き機能の実力を計るのではなく、皆さんご自身が受験する場合には、本サイトの機能をお試しになるのは受験結果が出た後の復習まで取っておいてくださいね。
……と、もっともらしいことを書いておきながら、音韻関係の開発の際に参考となるウェブサイトを求めてGoogleの結果に引っ掛かった上記サイトに於いて、真っ先に本サイトの辞書引き機能を用いてカンニングしたのは内緒です。ただ、『エスペラント検定大学編』については、流石に天地神明に誓って素直に受験しました。元歴史学徒としてはつつがなく合格しましたが、どちらかというとエスペラントというより文化史的な分野の問いで、人工知能でいうところのいわゆる世界知識が必要となるような問題でした。これをプログラムにカンニングさせるには、翻訳システム以上の実装が求められそうです。
音韻関係のモジュールを先の辞書引き機能の改版に合わせて新規に作成したのですが、予想通り、初物の機能はなかなか安定しませんでした。それというのも、エスペラントの規則性を過大評価したというかこれに甘えてしまい、乏しいテストケースしか用意しなかったのが敗因と言えます。結果、連日連夜の改版を行うこととなりました。大多数の場合は問題なかったとはいえ、誤った発音が表示されたり、処理が異常終了したりすることがあり、反省しています。
もう少し具体的に述べますと、エスペラントの規則性に例外があるというのではなく(sam/ide/an/oやらといった場合は除きますが)、Perlで字上符付き文字を実装する際に手抜きをしており、これが後々尾を引いているといったところでしょうか。
実は、エスペラント語日本語翻訳システム「Ermitejo」は、21世紀、このUnicodeの時代に、字上符付き文字の内部処理を前時代的なx後置式の代用表記で行っています。関数名やら変数名やらをエスペラント式に名付けているだけなら特に問題がないのですが、取り扱うデータを代用表記すると、色々不都合が起きます。
普通に処理している場合には、外部から正書法ないし代用表記で突っ込まれたデータのアルファベートを変換して内部で使い、外部に表示する際には逆変換して正書法で返しているので問題はありませんでした。しかし、エスペラントの誇る1文字1音という原則が崩れ、「ĉ」の音「ʧ」を「cx」と2文字で表現することになりますので、音韻関係の機能の実装で舞台裏が拙さが露見したという次第です。
責任転嫁するつもりは毛頭ありませんが、コーディングに使っているエディタのサクラエディタがUTF-8への対応が甘く、なかなかこうした悪癖を改められないという思いもあります。サクラエディタは内部コードがUTF-8等ではなくShift-JISなので、UTF-8のファイルの読み書き自体は出来ますが、エスペラントの字上符付き文字等やIPA等は保存出来ないので、痛いところです。今更秀丸にも戻れませんが、さりとてサクラエディタの抜本的な書き直しを行える技量も時間も私には無いので、開発者の方々に声援を送ることしか出来ません。
【追記】kobake氏のウェブサイト「digital hole」にて、UNICODE版サクラエディタの開発が進められています。
ということで、そうした発音関係の修正を中心として、ここ数日での改版点の委細を以下に転記します。
(#33「字上符付き文字の葛藤 (単語辞書引き機能 versio 0.9.4)」の続きを読む)
大変長らくお待たせ致しました。ドメイン取得後2ヶ月が経って何らの公開用成果物が出ていなかった当サイトですが、翻訳システム開発の副産物として、形態素解析の一環である、エスペラント語の単語の「なんちゃって単語辞書引き機能」をさり気なくリリース致しました。
ただし、あくまでα版なので、なんとエス和辞書引きなのに日本語のニの字も出ないエス和辞書引きらしく日本語の訳語も表示されるようになったものの、各種内部コード値をそのまま使ったデバッグ用文字列を流しているだけの素敵な状態ですが。ああっ、石を投げないでください。なお、さしあたって5月末を目処にフロントエンド部の処理(くだんのデバッグ文字列のパーサをでっち上げて、それらしく表示する処理)を設ける予定です。ようやっとそれらしい表示を出来るようにしました。
いわゆる世間一般で言うところの「翻訳サイト」(excite等のアレ)としての機能をアルファリリース出来る時期が数年先になる見通しで、その先の(オフラインアプリ然とした)「翻訳ソフト」並みのエスペラント語対訳翻訳であるとか、「ウェブサイト翻訳」等は見通しがまだ立たないという状況に戦々恐々とする今日この頃です。
まさか数年間もこのウェブサイトを塩漬けする訳にもいかないので、生存報告がてら基礎中の基礎の機能のみアルファリリースする予定です。具体的には、以下のような機能です。
| 月 | 火 | 水 | 木 | 金 | 土 | 日 |
|---|---|---|---|---|---|---|
| « 12 月 | ||||||
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |