akasaka_34の日記

ネトウヨと呼ばれた男の日記。しかし頻度から言えば週報ぐらい。

野球観戦の部屋

タイトルの元ネタは中国語の部屋。
下の文章を斜め読みして、その先に進んで欲しい。

1回巨人の攻撃は立岡 宗一郎 1球目を打って右中間へのスリーベースヒット ランナー:3塁。
ところがここで片岡 治大 ピッチャーゴロ。
坂本 勇人 カウント3-0から四球。
4番 阿部 慎之助 4球目をセンターへの犠牲フライ 3塁ランナー タッチアップで本塁へ 。 あらら。
1塁ランナー 坂本 勇人 盗塁を試みるも失敗 攻撃終了。
2回巨人の攻撃は亀井 善行 セカンドゴロ 4-6-3のダブルプレイ。
5回阪神の攻撃は4番 ゴメス 2球目を打ってライト線へのツーベースヒット。
ここで5番 マートン サードへの内野安打 ランナー:1、2塁。
6番 関本 賢太郎 カウント1-2から空振り三振。 あらら。
さらに7番 江越 大賀 カウント1-2から空振り三振。
鶴岡 一成に代わって新井 良太。
ビールんまい。
新井 良太 2球目を打ってショートゴロ。
6回巨人の攻撃は坂本 勇人 5球目を打ってセンターへのヒット ランナー:1、3塁。
ビールんまい。
そして4番 阿部 慎之助 ライトへのタイムリーヒット 巨人得点! 巨 2-0 神。 しっかりしろ。
そしてピッチャー 岩田 稔 ワイルドピッチにより 3塁ランナー 本塁へ 1塁ランナー も2塁へ  巨人得点! 巨 3-0 神。 いたたた。
そして5番 長野 久義 7球目を打ってセンターへのヒット。
岩田 稔 に代わって 歳内 宏明。
3塁ランナー 阿部 慎之助に代わって寺内 崇幸。
6番 村田 修一に代わってアンダーソン。
1塁ランナー 長野 久義 盗塁成功 2塁へ  ランナー:2、3塁。
しかし6番 アンダーソン カウント1-2から見逃し三振 ランナー:2、3塁。 やった!
7番 亀井 善行 カウント3-0から四球。
8番 加藤 健 2球目を打ってセンターフライ。
ビールんまい。
7回阪神の攻撃は福留 孝介 ライトスタンドへのホームラン!。 やりぃ!
ポレダ に代わって マシソン。
ここで4番 ゴメス カウント0-2から空振り三振 1アウト。 なんてこった。
そしてマートン カウント2-2から空振り三振 2アウト。 いたたた。
6番 関本 賢太郎 2球目を打ってライトフライ 攻撃終了。
7回巨人の攻撃は2番 片岡 治大 ライトへのヒット ランナー:1塁。
坂本 勇人 3球目を打ってサードへのポップフライ。
9回阪神の攻撃はマシソン に代わって 澤村 拓一。
1番 鳥谷 敬 5球目を打ってライトオーバーのヒット。
2番 福原 忍に代わって西岡 剛。
ここで西岡 剛 2球目を打ってセンターへのヒット ランナー:1、2塁。 やりぃ!
福留 孝介 セカンドゴロ 2塁ランナー その間に3塁へ 1塁ランナー も2塁へ  1アウト ランナー:2、3塁。
ビールんまい。
ゴメス カウント2-2から空振り三振 2アウト。
マートン 5球目を打ってショートゴロ 攻撃終了。
試合終了。
阪神 1 - 3 巨人
いたたた。

立派な文章じゃないけど、こういうの書く人居てもおかしくないと思う。
以下のスクリプトで生成した。

# coding: utf-8
require 'rubygems'
require 'selenium-webdriver'
start = "http://www.nikkansports.com/baseball/professional/team/tigers/"
side = "阪神"
topic = {"ヒット" => 1, "ダブルプレイ" => 1, "タイムリー" => 1, "ツーベース" => 2, "スリーベース" => 3, "ホームラン" => 4, "得点" => 4}
appreciation = {
true => {"ヒット" => 1, "塁へ" => 1, "得点" => 4, "三振" => -1, "アウト" => -1, "ポップフライ" => -1},
false => {"ヒット" => -1, "塁へ" => -1, "得点" => -4, "三振" => 1, "アウト" => 1, "ファンブル" => -1}}
wow = ["やった!", "やりぃ!", "わーい!", "よっしゃ!", "いぇええい!", "でかした!"]
boo = ["あらら。", "むむむ。", "いたたた。", "おいおい。", "なんてこった。", "しっかりしろ。"]
random = Random.new
wd = Selenium::WebDriver.for :firefox
wd.get(start)
wd.find_element(:class, "realtime").find_elements(tag_name: 'a').first.click
wd.find_element(:id, "tab-inning").find_elements(tag_name: 'a').first.click
wd.find_elements(:class, "sj-close").each { |e| e.click }
teams = wd.find_elements(:class, "scoreBoard").first.find_elements(:class, "team").map{|team| team.text.strip}[1..2]
scores = wd.find_elements(:class, "scoreBoard").first.find_elements(:class, "sum").map{|sum| sum.text.strip}[1..2]
innings = wd.find_element(:id, "inningDetailArea").find_elements(:class, "inningBody").reverse
for i in 0...innings.length
halves = innings[i].find_elements(tag_name: 'ul').reverse
for j in 0...halves.length
prev = nil
halves[j].find_elements(tag_name: 'li').reverse.each do |li|
if (i == innings.length - 1 && j == halves.length - 1) || random.rand(3) < topic.map{|key,value| li.text.include?(key) ? value : 0}.inject(0){|sum,n|sum+n} || prev != nil
text = li.text
a = appreciation[side==teams[j]].map{|key,value| text.include?(key) ? value : 0}.inject(0){|sum,n|sum+n}
if prev == nil
print "#{i+1}回#{teams[j]}の攻撃は"
elsif (prev < 0 && a < 0) || (prev > 0 && a > 0)
print ["そして", "さらに"].sample
elsif (prev < 0 && a > 0) || (prev > 0 && a < 0)
print ["しかし", "ところが"].sample
end
print "ここで" if random.rand(100) < 20
text.gsub!(/^.*?番 /,'') if random.rand(100) < 50
text.gsub!(/ [^ ]*球目を打って/,' ') if random.rand(100) < 50
text.gsub!(/ ランナー:.*?塁/,'') if random.rand(100) < 50
text.gsub!(/ [^ ]*得点! . .*?-.*? ./,'') if random.rand(100) < 50
text.gsub!(/ .アウト/,'') if random.rand(100) < 50
text.gsub!(/ 攻撃終了/,'') if random.rand(100) < 50
text.gsub!(/^投手交代:|^選手交代:|^代打:|^代走:/,'')
if random.rand(4) < a
print "#{text}。 #{wow.sample}\n"
elsif a < -random.rand(4)
print "#{text}。 #{boo.sample}\n"
else
print "#{text}。\n"
end
# Irren ist menschlich, Überflüssigkeit auch
print "ビールんまい。\n" if random.rand(100) < 10
prev = a
end
end
end
end
wd.quit
print "#{teams[0]} #{scores[0]} - #{scores[1]} #{teams[1]}\n"
if (teams[0] == side && scores[0] > scores[1]) || (teams[1] == side && scores[0] < scores[1])
print "#{wow.sample}\n"
else
print "#{boo.sample}\n"
end

大きな欠点が2つある。

  • ウェイトが入ってないせいで不安定。よく止まる。
  • データ取りと作文は別にした方が効率的だけど、そうなってない。

とりあえずコードを短くしたかったので。
あと一番最近の試合を見に行くからシーズンオフはずっと同じ試合。