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

本書 (「プログラマのための文字コード技術入門」)の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日 公開

最近のブログ記事

libiconv に JIS X 0213がない場合
GNU libiconvはJIS X 0…
「キュレーション」なる語について
DeNAのキュレーションサイトWelqの…
雪の青の夜景、札幌と函館
何日か前の朝のNHKニュースで札幌の夜景…
「2バイト文字」という言い方
「2バイト文字」という言い方につっこみを…
EUCが国際標準化されていれば良かった
すごい後知恵なんですが、1980年代に「…

広告