Google検索結果のグラフ化


9

Googleで何かを検索すると、ページの上部近くにのようなメッセージが表示されますAbout 53,000,000 results (0.22 seconds)。(もちろん、何を検索したかによって数字が変わります。)

この課題では、特定の検索フレーズの空でないすべての接頭辞検索されたときに、Googleから提供された結果数の対数 ASCIIグラフを描画するプログラムを作成します。

検索フレーズは、互いに1つのスペースで区切って、小文字の英数字の一つ以上の文字列として定義されています。正規表現では、検索フレーズは(?:[a-z0-9]+ )*[a-z0-9]+です。

ですからim okr、および1a 2すべての検索フレーズがありますが、I'm OKR1a 2、と、ではありません。

(Googleではほとんどの場合、大文字や特殊記号が考慮されないため、文字の制限が設けられています。URLで英数字以外の文字をエスケープするのも面倒です。)

スペック

プログラムは、stdinまたはコマンドラインから検索フレーズと正の浮動小数点数Hを取り込む必要があります。(あなたはそれらが有効であると仮定することができ、引用句または検索フレーズの周りに何かが必要な場合は問題ありません。)

実際の例として、検索フレーズがa carHで0.75であるとします。

ステップ1:
検索フレーズの空でないプレフィックスを収集し、二重引用符で囲みます。引用符により、正確なフレーズが確実に検索され、「もしかして...」のリダイレクト回避されます。

などのスペースで終わるすべてのプレフィックスを除外しa[space]ます。

Prefixes
"a"
"a c"
"a ca"
"a car"

ステップ2:https://www.google.com
を使用して、表示されるとおりにこれらの各用語を検索し、返される結果の数をメモします

Search Term    Message                                       Results
"a"            About 6,950,000,000 results (0.27 seconds)    6950000000
"a c"          About 861,000,000 results (0.27 seconds)      861000000 
"a ca"         About 2,990,000 results (0.30 seconds)        2990000
"a car"        About 53,900,000 results (0.39 seconds)       53900000

検索語句がどのドキュメントとも一致しなかった場合は、Results列に0を入力します。

ステップ3:各行について
計算y = floor(H * log10(r + 1))します。rはResults値です。Hはまだ0.75です。

Search Term    Results       y
"a"            6950000000    7
"a c"          861000000     6
"a ca"         2990000       4
"a car"        53900000      5

ステップ4:
アレンジy縦棒(数|棒グラフの一種で、空き領域を埋めるためにスペースを使用して、各引用符で囲まれていない検索語の最後の文字以降)。

|
| |
| | |
| |||
| |||
| |||
| |||
a car

このグラフはプログラムの最終結果であり、出力する必要がある唯一のものです。それは標準出力に行く必要があります。

得点

これはなので、バイト単位で最も短いプログラムが優先されます

ノート

  • 結果がhttps://www.google.comを検索した場合と同じである限り、URL短縮サービスまたは他の検索ツール/ APIを使用できます。
  • 二重引用符は「もしかして...」リダイレクトを除外する確実な方法でないことを知っています。&nfpr=1URLへの追加も常に機能するとは限りません。これらの不正確さについて心配しないでください。About X results...何がポップアップしてもメッセージを探すか、何Resultsもない場合は0に設定します。
  • グラフの検索フレーズのスペースの上に空の列があります。
  • グラフは必要以上に広くしたり、高くしたりしないでください(たとえば、空白を含む)。
  • あなたのプログラムがウェブブラウザを開くような副作用を持っているので問題はありません。そうすれば、謎めいたグーグルのhtml / jsページがレンダリングされたときに読むことができます。

結果ゼロになるのは一般的ではないことはわかっていますが、その場合、「約x件の結果...」はありません。私はそれを検出して0バーとして表示する必要があると思いますか?
Geobits 2014

@Geobitsはい、結果は0と仮定します。
Calvin's Hobbies

1
ちょうどあなたが知っている-グーグルを槌で打たないでください
キャプチャで応答し

回答:


4

Ruby、316 295バイト

require 'open-uri'
s,h=*$*
r=[]
s.size.times{|i|r<<(s[i]==' '?'':?|*(h.to_f*Math.log10((URI.parse("http://google.com/search?q=#{URI::encode ?"+s[0..i]+?"}").read[/About [\d,]+ results/]||?0).gsub(/\D/,'').to_i+1)).floor)+s[i]}
puts r.map{|l|l.rjust(r.map(&:size).max).chars}.transpose.map &:join

残念ながら、私が使用していたオンラインテスターでのリクエストが機能しなくなったため、今夜または明日、これをさらに掘り下げる必要があります。

説明:ARGVを介して入力を取得しています。次に、スペースで終わっていない各部分文字列に対してリクエストを送信し、正規表現を介して結果を見つけ(そして0、正規表現が一致しない場合はデフォルトで)、水平棒でヒストグラムを作成します。最後に、すべての線を反転して転置して、垂直ヒストグラムを作成します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.