地名抽出のコード

都道府県、市町村区の名前をDBへのデータを使った物は上げてなかった気がするので一応。ちなみに、下記のコードの時点ではSQLite内のデータを使用しているが、先に書いた項目名-地名の一覧表示をするSQLではMySQL内に入れたデータを使っている。

require 'rubygems'
require 'mysql'
require 'sqlite3'

#sqliteで地名準備
db_location = "AAcode.sqlite"

#地名と行政区分コードの一覧
sqlite = SQLite3::Database.new(db_location)
sqlite.results_as_hash = true #添字にカラム名を使えるようにする

sql = "SELECT \"tiiki-code\" AS \"tiiki-code\", \"ken-name\" AS \"ken-name\",
    \"sityouson-name1\" AS \"name1\", \"sityouson-name3\" AS \"name3\"
FROM \"aacode\""

loc_names = sqlite.query(sql)

#mysqlのdbを開く
hostname = "localhost"
user = "root"
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")

puts "old_id,aac"

#本文中の都道府県名検索
res.each do |wiki_row|
  search_word = "string"
  
  #地名を回す
  loc_names.each do |name|
    search_word = ""
    
    #検索すべき地名の決定
    if name["name3"] != nil           
      search_word = name["name3"]     #name3に地名がある場合
    elsif name["name1"] != nil
      search_word = name["name1"]     #name1に地名がある場合。3との違いがよく分からない。
    else
      search_word = name["ken-name"]  #都道府県自体を示すRowだった場合
    end
    
    #本文中に地名があるか探す
    if wiki_row[1].to_s.include?(search_word)
      #出力する
      print search_word
      puts "#{wiki_row[0]},#{name["tiiki-code"]}" #CSVの一行として出力
    end
    
  end
  
  loc_names.reset  #loc_namesのカーソルリセット
  
end

mysql.close #DB接続を閉じて終了する