- PR -

ローカライズする際の漢字ソート

1
投稿者投稿内容
tokyo
会議室デビュー日: 2005/04/26
投稿数: 2
投稿日時: 2005-04-26 10:41
はじめまして。お知恵をお借りしたく書き込みしています。ローカライズの分野で働いている者ですが、プログラミング知識はほとんどありません・・。

欧州で開発されたソフトを日本語にローカライズしているのですが、ドロップダウンリストで漢字が「あいうえお」順にソートされません。漢字は、音読みするものと訓読みするものが混じっています。

日本語のソフトではきちんとソートされていると思いますが、どのようにされているのでしょうか?素人ながら「読み仮名」フォールドを作って、そこを基準にソートしたら?と提案したのですが、それではユーザーが入力する動的な文字列はソートできないという問題が残ります。

中国人の開発者がこの問題を見てくれているのですが、
1.日本語のJavaでは、漢字をどうやってソートしているのか
2.漢字を自動的に振り仮名(ひらがな)に変換するようなプログラムまたはソフトはないのか?

という質問です。どうぞよろしくお願いいたします。
TomScissors
ベテラン
会議室デビュー日: 2003/06/05
投稿数: 79
投稿日時: 2005-04-26 11:06
普通は文字コード順に並ぶのでは。

たとえば、「眼」は、
ガン・ゲン・まなこ・め
と音読み、訓読みで複数の読み方があります。

中国語のJavaはどのように漢字をソートしているのか聞いてみては。
(私は知らないのですが、中国語は読みが1通りなんでしょうか?)

漢字があいうえお順にソートされないのは仕様(?)だと思います。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2005-04-26 11:26
足りなかったので補足。

ローカル文字列のソートについては、java.text.Collator、java.text.
RuleBasedCollatorというインターフェイス及び実装はありますよ。

(ものすごく大変だとは思いますが)ソーティングのルール(文字の大小
関係の定義)を自作すれば、一応自由自在ではあります。

国際化版JREであれば、Collator#getInstance(Locale)で、ロケール毎
のRuleBasedCollatorのデフォルト実装を取得できます(ソートのルール
は、おそらくローカライゼーション担当者の恣意的なものかと思います
ので、ユーザーの望みに完全に一致しているかは微妙ですが)ので、とり
あえずそれを使うという手もあるかと思います。

日本語でソートが必要な漢字文字列がある場合、対応するカナ文字列を
別途準備(氏名入力などでカナの入力を要求したり)しておいて、そちら
でソートを行うのが、私の知っている範囲ではよく行われている方法
のようですが。


[ メッセージ編集済み 編集者: シュン 編集日時 2005-04-26 14:02 ]
tokyo
会議室デビュー日: 2005/04/26
投稿数: 2
投稿日時: 2005-04-26 11:46
早速お返事ありがとうございます!中国語でもごく一部、違う読み方をする漢字はあるそうなのですが、中国語のローカライズに際してソートのためのプログラムを追加していないにもかかわらず、中国語の漢字はピンイン通りに整列しています。

漢字の読み方を自動的に変換するものはないということですよね・・多様な読み方ができるわけですから。
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2005-04-26 11:51
引用:

1.日本語のJavaでは、漢字をどうやってソートしているのか
2.漢字を自動的に振り仮名(ひらがな)に変換するようなプログラムまたはソフトはないのか?



1. ISO-2022-JP, 日本語 EUC, Shift_JIS, UTF-8 等のエンコーディングによるコード順と考えられます。
当然、「相性」「懐疑的」「相対性理論」をソートするとこの順には並びません。

2. 完全自動で変換するのは無理です。
TomScissors さんも書かれましたが、単漢字ではなく熟語であっても同綴異義語で発音も変わる、例えば「水色」(みずいろ、すいしょく)などの例があります。
これは文脈を考慮しないと読みが決められません。
(自然言語研究の分野で、こういった文脈理解の上で合成音声を決定するという研究もあります。その成果が利用できれば、あるいは解決できるかもしれません。)

固有名詞を含むと更に複雑になり、姓で「東海林」(「しょうじ」の他に「とうかいりん」と読む姓もある)など、tokyo さんも認識されている通り、読み仮名フィールドを別に設けた方が良い場合もあります。

プログラミングによる機能追加が可能であれば、シュンさんが書かれた方法を用いて
・読み仮名フィールドを新設する。
・プログラム中の固定文字列の場合は、予め読みをフィールドに設定する。

・ユーザ入力文字列の場合は、形態素解析を行ってから、形態素に対する読みを辞書データから検索する。
・検索結果が一意の場合は、読みが正しいかユーザに確認する。
正しくない場合は読みを入力してもらう。(辞書データが充分に大きく、検索精度の高さが期待できる場合は省略しても良いかも)
・一意でない場合は選択、ないし入力してもらう。(この場合入力は必須)

という方法で対応できるかもしれません。

中国語の場合は単漢字に対するピンインが一意に決められるので、日本語よりは対応が簡単と思われます。
(が、結合の時に四声が変化するので、熟語としての読みでは難しいかもしれません。)

# と書きましたが誤った認識である場合はご指摘ください > 各位
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2005-04-26 12:04
JISコードが読みを意識した配列でEUCやSJIS は許容できますが、UNICODEではダメですね。
LOCALE を意識した漢字SORTは、OFFICE 等では実現してます、読み無しでも良好です。
角田 かくた、かどた、すみた
は、「読み」がないと無理。
1

スキルアップ/キャリアアップ(JOB@IT)