地名抽出のコード
都道府県、市町村区の名前を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接続を閉じて終了する