Wikipediaダンプから地名を抽出
↓このへんの記事の続き
Wikipedia記事データのローカルDBへの取り込み - 泥縄トラップ
「日本の妖怪一覧」からリンクされたページIDを抽出 - 泥縄トラップ
妖怪の生息地 - 泥縄トラップ
- Wikipediaの本文のデータを落としてMySQLの中へ取り込む
- 落としたデータから「日本の妖怪の一覧」に含まれる妖怪のページを抽出
- 折角なので「妖怪」のページへリンクしている項目は全部抽出してみる
- 項目本文のテキストから地名を抽出して、項目と地名を関連付ける
- 地名を地理情報のデータと関連付けて、「妖怪の生息地図」的な物を作る
出力結果
左の数字がpageテーブルとtextテーブルの内容を繋げるID「text.old_id」。右がそのテキスト内に含まれる都道府県名。テーブル構造についてはText table/ja - MediaWikiなどを参照。
これだけ見てもあまり面白くはない。このままだと扱うのが面倒なのでMySQLに取り込みたいところ。
31161681,兵庫県 31161681,大阪府 31161681,奈良県 … 28607176,新潟県 28607176,福井県 28607176,福島県
コード例
require 'rubygems' require 'mysql' require 'sqlite3' #sqliteで地名準備 db_location = "F:\\tools\\spatialite-gui-win-x86-1.3.0_beta\\20100318.sqlite" #都道府県の一覧 sqlite = SQLite3::Database.new(db_location) sql = "select distinct PRN from japan" loc_names = sqlite.query(sql) #mysqlのdbを開く hostname = "localhost" user = "****" password = "****" dbname = "yokai_wiki" #yokai_wikiの本文テーブルを見る mysql = Mysql::new(hostname, user, password, dbname) res = mysql.query("select old_id, old_text from yokai_wiki.text") #本文中の都道府県名検索 res.each do |ms_row| #都道府県を全部回す loc_names.each do |name| name = name.to_s puts ms_row[0]+","+name if ms_row[1].to_s.include?(name) #=>"0001,北海道" end #loc_namesのカーソルリセット loc_names.reset end mysql.close
*1:手元にあるのが現代の行政区分のデータだけなので別にデータが必要になる