会津の旅人宿 地域との交流・旅人との交流が盛んな【会津野】宿主ブログ

地域の話題、旅人のホットな話題、季節のおいしい食べ物の話題など、会津へ旅する人々への話題中心の宿主ブログです。

【会津野】Rubyの勉強

2017年06月04日 | 宿主からのブログ

おはようございます。旅人宿 会津野 宿主の長谷川洋一です。

人工知能古本屋へ向けた勉強2日目。

ネットの海を巡回し、出版されている本のデータを集めるために、私はRubyというコンピュータ言語を使います。

そこでサンプルコードを勉強。たとえば、

1  # -*- coding: utf-8 -*-

2  html = <<XXXX

3  <p>1993年12月24日

4  < a href="http://www.ruby-lang.org/ja/">Ruby's Birthday</a></p>

5  <p>2014年1月1日

6  < a href="http://www.example.com">元日</a></p>

7  XXXX

8  dates = html.scan(/(\d+)年(\d+)月(\d+)日$/)

9  links = html.scan(%r!<a href="(.+?)">(.+?)</a></p>!)

.....

便宜上、行の先頭に行番号を振りました。

説明すると、

1は、utf-8という文字コードで処理しますという決め事を行うもの。ネット上には、shift-jisなどの文字コードで書かれたものも存在するので、ここではすべてutf-8に変換して処理することにします。

2は、htmlという変数に文字列を代入します。代入する範囲は、7行目のXXXXまでという意味。

8は、変数htmlに対し関数scanを実行します。scanはカッコ内に書かれた書式を見つけたら文字列を抽出する機能の関数です。ここでは、"(10進数)年(10進数)月(10進数)日"というものを見つけたら、変数datesに代入します。これにより、[["1993","12","24"],["2014","1","1"]]というデータが代入されます。

9も8と同じように、変数htmlに対し関数scanを実行し、カッコ内の(.+?)という部分に該当する文字列を抽出し、結果を変数linksに代入します。linksには、[["http://www.ruby-lang.org/ja/","Ruby's Birthday"],["http://www.example.com","元日"]]が入ります。

この後にもコードが続きますが、次に期待されるのは、変数datesと変数linksのそれぞれn番目どうしを結合してデータに意味を持たせるということでしょうか。

実際には、変数htmlにインターネットの海から必要なデータを集めてきて、自分に必要なデータを抜き出すことになります。

やっていることは案外簡単です。

出版されている本のデータは膨大なので、自動収集プログラムを作成しても、接続先にサーバに大きな負担をかける可能性があります。

負担をかけずに公開データを収集するにはどうすればよいか。あれこれと考えてみようと思います。

今日も素敵な一日を過ごしましょう。

※コメントは、旅人宿会津野Facebookにて承ります。
※ご予約は、旅人宿会津野ホームページにて承ります。