検索ジャンケンへの道

作成日 : 2013-02-16
最終更新日 :

検索ジャンケンとは

表記の揺れ、という問題がある。 二つの似通ったことばがあり、どちらの表記をとるべきか悩ましい場合がある。 たとえば、ベートーベンか、ベートーヴェンか、どちらを表記するべきか考える。 一つの方法は、検索エンジンで、どちらがより多く検索されるか、を基準とすることである。 この場合には、ベートーベンで検索してヒットしたページ数と、 ベートーヴェンで検索してヒットしたページ数を比べればよい。 私はこの方法を、当時購読していた人工知能学会誌 2006 年 1 月号を読んで知った。

英語、フランス語、ルーマニア語に限られるが、二つの単語のヒット数の多さを同時に比較できるアプリケーションがある。 Googlefight(www.googlefight.com)というページである。 なお、これは PHP で作られたようだ。残念ながら日本語には対応していない。このページは現在も残っているが、 2つのことばを fight させようとしても、時間切れで fight の結果がでない。おそらく、Google がヒット件数をめいじしなくなったためと思われる。

さて、Googlefight の日本版がないものかと探していた。 日本語対応と紹介されているサイトに行こうとすると、「自動転送がループしています」、 と表記されていて、今は見つからない。 このアプリは Ruby で作られたのだろう、というところまではわかった。

Googlefight の日本語対応は見つからなかったが、 Google ジャンケンということばが目に止まった。 調べてみると、Googlefight の日本語翻訳に相当するもののようだ。 実体はというと、手動による比較の意味で使ってあるのが一例、 システムを作ろうとして放置されているのが一例である。 2013 年当時では、JavaScript ではいろいろな技術的な問題点があると思われた。 具体的には同一起源ポリシーの問題がある。

JavaScript でだめなら CGI を考えた

そこで、JavaScript でだめなら CGI があると、ページを作ってみた。 作成日からその年いっぱいは正常に動作していたはずだ。 しかし、2020-03-27 現在では稼働していない。 その理由はやはり技術的問題である。 現在の Google における件数は、おそらくスクリプトを介して表示していると思われる。 すなわち、単に URI をオープンして HTTP で得られた文字列を参照するだけでは、 件数を得ることができない仕様になっている。

検索ジャンケンを作ることは WEB (スクレーピング|スクレイピング) の技術の習得のためだった。 ところが、上記の事情で WEB スクレーピングは困難であると考えられる。この困難を克服するには、 検索に関する API を取得するのが正しい方法であろうが、今回はその API を取得する意欲がなかった。 さらに、仮に API を取得して件数が取得できたとしても、 「約 *** 件」という件数の値が信頼に足るかどうかもわからない。 したがって、この件はいったん終了する。 WEB スクレ―ピングのページもどうぞ。

ということでいったん終了したが、自分のページが対象ならできるのではないかと考え、まずは自分のページを対象としてやりなおした。 検索じゃんけん(Bach 対 Brahms) のページをどうぞ。

当時考えた方法

当時考えた方法は次のとおりである。それを 2022 年 10 月 14 日現在で記すのはおかしいが、許してもらおう。

検索サイトに対して検索する

まず、適当な検索サイトに対して検索を要求する。当時は検索サイトに Google を考えていたが、 2022 年現在は Google は検索ヒット件数を表示していないし、私が常用する DuckDuckGo でも残念ながら同様だ。 しかし、Google と同じエンジンを使っているはずの Yahoo では、検索ヒット件数が表示される。したがって今回は Yahoo で説明する。 たとえば、scarlatti を検索するには次の URL を使えばよい。
https://search.yahoo.co.jp/search?p=scarlatti

検索結果を受け取る

検索した結果は HTML に従った文字列で返ってくるのでこの文字列を格納する。

ヒット数を切り出す

検索した結果からヒット数を表す文字列を切り出す。Yahoo 検索の場合、ヒット数の前後の HTML ソースは次のような文字列になっている。

<div class="Hits__item">約<!-- -->6,780,000<!-- -->件

まりんきょ学問所JavaScript 手習い > 検索ジャンケンへの道


MARUYAMA Satosi