「クラウド」を検索したら「ザウアークラウト」が出てきた例

本書 (「プログラマのための文字コード技術入門」)のAppendixでは、Unicodeの正規化の必要性を示す例として、Webブラウザを使った問題例を示しました(pp.350-351)。同様の問題は、ブラウザだけでなく、Web検索エンジンでも生じます。

実例として、ある著名なWeb検索エンジンを使って実験してみましょう。

たとえばあなたがクラウドコンピューティングについて調べるために、「クラウド」というキーワードでWebを検索しようとしたとします。ただし、検索語を入力する際、画面上の別のアプリケーションにたまたま「クラウド」という文字列が表示されていたので、キーをタイプするのでなくコピー&ペーストで検索窓に貼り込んだとします。

ここでコピーした4文字目の「ド」という文字が、実はこの文字を表す単一の符号位置U+30C9でなく、Unicodeの結合文字を用いてU+30C8 (ト) とU+3099 (合成用濁点)という2つの符号位置の列によって表現されていたとします。すると何が起こるでしょうか。

(なお、「ド」を結合文字で表現した文字列はWindows XPに添付のフォントでは正しく表示されません。Windows Vistaに添付のフォント「メイリオ」をインストールすればXPでも正しく表示されます。)

下図に検索結果画面の一部を示します。濁点のない「クラウト」にヒットしており、ドイツ料理の「ザウアークラウト」についての文章が出てきてしまっています。「クラウドコンピューティング」は出てきません。「クラウド」という一般的な語にもかかわらず検索結果がわずか2千件強しかないことからしても、期待通りの挙動を示していないことがわかります。

文字合成の有無による検索漏れの画面例

つまり、この検索エンジンにUnicodeの合成文字を使った「ド」を与えると、あくまでも「ト」と半濁点の並びとみなし、合成済みの「ド」とは同一視されないという結論になります。

このように、同じ「ド」に2種類の符号化表現があるというのは、検索漏れなどの問題を引き起こす原因となるのです。

なお、ここで示した画面は2009年10月に採取した例であり、現在では動作や検索結果が変更されている可能性があります。


[「プログラマのための文字コード技術入門」紹介ページ]

2010年3月7日 公開

最近のブログ記事

ゲッティと英語と日本語
私は1年ちょっと前くらいから、自分で撮っ…
ウソに戸惑う
JIS X 0213の追補1:2004で…
第3第4水準辞書を使おう!
いまだに、広く使われている日本語入力環境…
文字コードを知るための本棚
当サイトのメモのセクションに「文字コード…
今年もやります
震災被災地支援プログラム2012を実施し…