FC2ブログ
日々の開発でぶち当たった疑問解消のプロセスを残していきます。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
-------- : スポンサー広告 :
Pagetop

[JavaScript]入力された文字列のふりがな取得

テキストボックスに入力された文字列のふりがなを取得するには

UI要件でたまーに出くわす入力補助系の要件に、入力された文字列のふりがなを自動的に隣のテキストボックスに入れる、なんていうのがあると思います。たまにそういったことを実現しているWebサイトを見かけますよね。というわけで早速先人たちの知恵をお借りしようと検索してみました。

どうもこの話が話題になってきたのは2005年ころ。そして2008年ころからまた話題が再燃して多くの方たちがこの問題にチャレンジされてきた形跡がうかがえます。一番多く紹介されているのがAutoRuby.jsという名前のもののようです。

実際にこのスクリプトを適用してみると、ちゃんとふりがながしゅとくできちゃいます。おーすごい!

AutoRuby.jsの問題点

精度の問題については仕方ない点もありますし、とやかく言う立場にはありませんので触れません。

ちょっと調べてみると、このたぐいのスクリプトはprototype.jsが前提になっているものが多いわけです。AutoRuby.jsもprototype.jsの上に構築されています。私の担当しているプロジェクトはASP.NETです。そう、やっぱりjQueryにのっておきたいと思ってしまうわけですよ。。。実際に既にjQuery UIのライブラリを使用しているので、prototype.jsを持ってくるのはやっぱりリスキーです。jQueryのアップデート時に面倒な作業を作りたくありませんし、余計なテストもしたくないですしね。

というわけでjQueryを使っていても動作するAutoRuby.jsみたいなものを探してみることにしました。

jquery.auto_ruby.js

まずjQueryのプラグイン形式で使用可能なスクリプトとしては jquery.auto_ruby.jsを発見しました。オプションもいくつかあるので割と柔軟に使えます。実装自体はAutoRuby.jsをjQueryに書き直したものらしいです。

kanaTextExtension.js

続いてjQueryにもprototype.jsにも依存しないライブラリであるkanaTextExtension.jsをご紹介します。 こちらのライブラリは完全に素のJavaScriptで作られていますので、ライブラリに依存することなく使用できるというメリットがあります。またオプションもいくつか提供されていますので設定変更もある程度は柔軟に対応できるようです。

その他の方法

JavaScriptでの実装は、基本的に変換が確定する前に入力されているひらがな状態の文字列を取得する、という方法になっています。そのため、ひらがなまじりの文字列を変換した場合、どうしてもうまく取得できないといった問題にぶち当たります。またうまく対処できているように見えても、文字の削除などに対応するのはほぼ不可能、というのが現状です。IMEにアクセスしているわけではないので当然これ以上のことはできないわけです。

変換前の文字列を横取りする方法はお手軽に実装できる半面、精度には問題があるわけです。この問題点を解消する方法は、入力されている文字列からひらがなへ逆変換する方法が考えられます。ActiveXなんかが使える環境であればIMEを呼び出して元に戻してあげるように実装することも可能でしょう(この実装については保障されませんし、実際動作させることができるかかなり微妙なところですが・・・)。

あとはWebサービスを使ってサーバサイドで逆変換することも可能です。かな漢字まじりの文字列をひらがなに変換するのは主にIMEと考えてしまいますが、サーバサイドでIMEを呼び出すのは一般的にNGです。Officeをサーバサイドで使ってはいけないのと同様、IMEもユーザ操作を伴うことが前提となって実装さているため、サーバサイドで呼び出すのはNGというわけです(MSへ問い合わせてみたところそう言われました。)。

残された方法は形態素解析のエンジンをサーバサイドで動かし、そこでひらがなへの変換を行ってもらうという方式です。多くの形態素解析エンジンはIMEと同様自分で辞書定義を拡張することが可能です。人名や地名、商品名などの固有名詞のふりがなを取得する場合、一般的な形態素解析エンジンはうまく形態素解析をすることができませんが、辞書を拡張することで可能になるものがほとんどです。 ここに漢字かな対応表にのようなデータベース(データを運用時に積み重ねていくようなものを作る)を組み合わせればかなり精度を上げることができるかと思います。 ただし、当然JavaScriptで動作させるよりレスポンスが悪くなりますので、どちらを選択するかはケースバイケース、ということになるでしょう。

結論

ただの入力補助として考えるならフリーのJavaScriptを適用して素直にやろう。 レスポンスより精度が求められるならサーバサイドで変換の方式を検討しよう。

スポンサーサイト
2011-10-10 : JavaScript : コメント : 0 : トラックバック : 0
Pagetop
コメントの投稿
非公開コメント

Pagetop
« next  ホーム  prev »

プロフィール

masatsuna

筆者:某システム会社のダメSE
競技スキーをこよなく愛するダメSEです。

月別アーカイブ

検索フォーム

ブロとも申請フォーム

この人とブロともになる

QRコード

QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。