2010年04月21日

かな英字交じり文を一度に変換する方法のまとめ【追記】4/22

「日本語入力」「かな漢字変換」とは言っても、実際にユーザが入力したいのは「ひらがな」「カタカナ」「漢字」だけじゃなく、「アラビア数字(算用数字)」や「アルファベット」や「記号」もある。

それらを uim-anthy, scim-anthy, ibus-anthy でどう入力するか、というお話(但し、uim-anthy 以外はローマ字入力方式限定ですが)。

尤も、「カタカナ」「漢字」は通常「ひらがな」から変換して出すし、ローマ字入力なら「アラビア数字」と「記号」はそのまま普通に入力できるので、結局、問題は「アルファベット」だけ、ということになる。

まぁ、知ってる人はとっくに知ってる話だと思いますが、一応自分の知ってる範囲でのまとめ。

お題の文章: 「1990年のWHOのreportによれば」
これを一度で入力/変換してみます。

[uim-anthy]
≪使用したバージョン≫
uim-1.5.7

≪準備≫
・「uim の設定」(uim-pref-gtk)→「Anthy キー設定4」→「かな/英数入力モードを反転」にキーを設定しておく(例えば、Eisu_toggle)

≪実際の入力≫
・上で設定した「かな/英数入力モードを反転」でかなと英数を切り替えながら入力します

1. 「1990ねんの」まで入力
2. 上で設定したキー(以下 Eisu_toggle)を押し、英数モードにする
3. 「WHO」を入力
4. Eisu_toggle
5. 「の」を入力
6. Eisu_toggle
7. 「report」を入力
8. Eisu_toggle
9. 「によれば」を入力

入力したところ(上)と変換キーを押したところ(下)
uim-anthy_alph.png

確かめてませんが、この uim-anthy 方式はかな入力系でも使えるのではないかと思います。
-----
【追記】4/22
uim-anthy が無駄な子音を捨てるのは、アルファベットはこっちの方法で入力しろってことなのかもしれません。
-----

[scim-anthy]
≪使用したバージョン≫
scim-anthy-1.2.7

≪準備≫
・「SCIM入力メソッドの設定」→「IMエンジン」の「Anthy」→「ローマ字入力」タブ→「大文字入力時に一時ASCIIモードに切り替える」にチェック
・「キーバインド」タブ→「一時ASCIIモードキャンセル」にキーを設定(たとえば、Hiragana_Katakana)

≪実際の入力≫
scim-anthy 方式(pseudo-ASCII mode と言うんだった気がする)の場合、大文字にすることが英数モードに入るトリガーとなる

1. 「1990ねんの」まで入力
2. Shift を押しながら「WHO」を入力
3. 上で設定した「一時ASCIIモードキャンセル」キー(以下 Hiragana_Katakana)を押す
4. 「の」を入力
5. Shift を押しながら「R」を入力
6. 続けて「eport」を入力
7. Hiragana_Katakana
8. 「によれば」を入力

入力したところ(上)と変換キーを押したところ(下)
scim-anthy_alph.png

大文字にすることが英数モードに入るトリガーである以上、どうしても英単語の先頭は大文字になってしまう。
あと、「一時ASCIIモードキャンセル」キーが時々効かなくなることがある気がする。一旦、他の IM に変えてから戻せば(要するに再起動?)直るみたいですが。再現条件は今のところ不明なのでアレなんですが。

[ibus-anthy]
≪使用したバージョン≫
ibus-anthy-1.2.0-20100313

≪準備≫
特に不要

≪実際の入力≫
アルファベットの大文字はそのままにされる。

1. 「1990ねんの」まで入力
2. Shift を押しながら「WHO」を入力
4. 「の」を入力
5. Shift を押しながら「REPORT」を入力
8. 「によれば」を入力

入力したところ(上)と変換キーを押したところ(下)
ibus-anthy_alph.png

小文字は通常のローマ字→かな変換に使われるため、アルファベットはすべて大文字になってしまう。
-----
【追記】4/22
setup/anthyprefs.py に「"cancel_pseudo_ascii_mode_key"」がコメントアウトされてました。そのうち、scim-anthy ライクな方法で入力するようになるのかもしれません。
-----

以上です。
uim-anthy での変換結果を見ればわかる通り、フロントエンドでは英単語や頭字語を入力できても、Anthy がそれらを単語として認識していないので、「|WHO|の|」のように助詞が分かれてしまっている。「WHOが」なら「|WHO|我|」になるかもしれない。

辞書に「WHO」や「report」等を登録すればちゃんと変換できるようになるはず。

free の英語辞書があれば辞書を作ること自体は簡単ですが、辞書登録する方法だと辞書が肥大化して動作が重くなるんじゃないかと思うので、気が進まない(大文字/小文字、全角/半角のケースすべてを登録することを考えると、数十万エントリになると思う)。

英単語や頭字語はすべて品詞コード T00 として扱って問題ないように思うので、

1. フロントエンドがアルファベット交じりの読みを Anthy に投げる
2. Anthy はアルファベットの連続した部分を T00 の名詞と見なして文節区切り等を行う
3. また、読みの「report」から「report」「Report」「REPORT」の 3種+その全角版の候補を自動生成(読み自体、「report」「Report」「REPORT」の 3種+その全角版がくる可能性があるわけですが…)

ということができれば、辞書は要らない。
辞書が要らないということは、辞書の肥大化によって動作が重くなることがないだけじゃなく、辞書の作成/メンテが不要、「辞書にない単語がうまく出せない」ということがない、というなので、辞書メンテ人にはとってもシアワセなことですが、記号や数字との絡みを考えるとなかなか難しいかな、という気もします。

たとえば、「GT-400」というのは一語で扱って欲しいわけですが、数字も記号も混じってる。単に「アルファベットの連続を一単語と見なす」というだけでは「|GT|-|400|」のようにぶつ切りにされてしまう。かと言って、「アルファベット、記号、数字の連続」という風にすると、これは広すぎる気がする。記号は限定した方がいいのでは…等々、よく考えると結構悩ましそうです。なので、実はまだちゃんと考えてない。
「こんな風なことを考えついたりしましたよ」というレベルのお話でした。

実は、上の 3IME の話は、これを書きたいがための前フリでした。

他に「単語の前後に半角空白をいれたいんだけど」というのもあるんですが、これもまた難しそう。これはフロントエンドの方の話ですが。


# ひぇー、こんな時間になってしまった…
posted by vagus at 01:51| 東京 ☔| Comment(0) | 日本語入力 - アプリ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。