日本の医薬品名だけを取り出そう

とある事情から日本の医薬品名を抜き出してクエリーに投げる必要が出てきた。英語の医薬品名（売れ筋トップ100）は　[Wiki:List of largest selling pharmaceutical products](http://en.wikipedia.org/wiki/List_of_largest_selling_pharmaceutical_products) から[取り出せた](http://qiita.com/items/e06549327037fae7a5af)のだが，今日は日本の医薬品をやってみよう。

##日本の今売っている医薬品名を取り出そう。

### どこかに構造化されたデータは無いかしら

うーん(｡･_･｡)どこが良いかしらと，[KEGG DRUG](http://www.genome.jp/kegg/drug/drug_ja.html)とか探してみたのですが，ぱっと見，見つからなかったので厚労省のページに行った。[使用薬剤の薬価（薬価基準）に収載されている医薬品について（平成24年1月16日現在）](http://www.mhlw.go.jp/topics/2010/06/tp0630-4.html)ま，これでよいのではないでしょか。内用薬，注射薬，外用薬，歯科用薬剤に分かれてエクセルファイル化されていると。
こういうのこそ，構造化して（RDFとか他でも）おいたら良いのでしょうな，と思ったけど，私がやればいいのか。ちょっと検討事項に入れておこう。

### エクセルの中身

区分	|薬価基準収載医薬品コード	|成分名	|規格	|品名			|メーカー名
:----------:|:------------:|:------------:|:------------:|:------------:|:------------:
内用薬|	1121001X1042	|ブロモバレリル尿素|１ｇ	|局 ブロムワレリル尿素|「三恵」	|三恵薬品
内用薬	|1121001X1050	|ブロモバレリル尿素|１ｇ	|局「純生」ブロムワレリル尿素|純生薬品工業

こんな感じで載っている。[Sagace](http://sagace.nibio.go.jp/index.html)で調べると品名は少なそうだし，ちょっと正規表現が面倒になりそうだったので，成分名を取り出すことにします。ただ，成分名は重複がありそうだから，一回配列にいれるかなぁ。愚直に成分名の列だけをコピペして，タブ区切りテキスト(oralmedicine.txt)にして保存し直す。

愚直にとりあえず出してみよっかとやったら

```ruby:jdruglist.rb
File.open("oralmedicine.txt"){|file|
 
while line = file.gets
    p line 
end
}
```

盛大に文字化けしたので，エンコードをみると(nkfはmacに標準装備されていませんが，簡単にエンコードのチェックと変換が出来るので，導入をおすすめします。[nkfインストール](http://ameblo.jp/a21b14/entry-10772763588.html) [nkf使い方まとめ](http://blog.layer8.sh/ja/2011/12/23/%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89%E5%A4%89%E6%8F%9B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89nkf%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%BE%E3%81%A8%E3%82%81-linux/)

```script
nkf -g oralmedicine.txt
Shift_JIS
```
rubyのkconvとか使おうとしても上手く行かなかったので，
UTF8にエンコードを変更する。

```script
nkf -w -w80 --overwrite oralmedicine.txt 
```

それでもって，ruby側もエンコード指定をしておく。
[参考:コマンドラインオプションで文字コードの指定](http://www.rubylife.jp/ini/japan/index3.html)

```ruby:jdruglist.rb
#! ruby -Ku
#↑なにを隠そう上記の薄い文字がポイントだ。
File.open("oralmedicine.txt"){|file|
 
while line = file.gets
    p line 
end
}
```
ぞろぞろ出てきたぞなもし。

```script
ruby jdruglist.rb | tail -n 3
"ブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\r抱水クロラール\r
````


さて後は配列に入れて，重複を消していきます。

```ruby:idruglist.rb
#! ruby -Ku
File.open("oralmedicine.txt"){|file|
 
while line = file.gets
    lineAry =  line.split("\r") #文字列からタブで区切って配列にいれる
end
p lineAry.uniq #重複削除
}
```

```script
ruby jdruglist.rb 
["ブロモバレリル尿素", "抱水クロラール", "エスタゾラム", "塩酸フルラゼパム", "ニトラゼパム", "ニメタゼパム", "ハロキサゾラム", "トリアゾラム", "フルニトラゼパム", "ブロチゾラム", "ロルメタゼパム", "オキサゾラム", "クロキサゾラム", "クロラゼプ酸二カリウム", "ジアゼパム", "プラゼパム", "フルジアゼパム", "ブロマゼパム", "メダゼパム", "ロラゼパム", "アルプラゾラム", "フルタゾラム", "メキサゾラム", "トフィソパム", "フルトプラゼパム", "クロルジアゼポキシド", "ロフラゼプ酸エチル", "クアゼパム", "アモバルビタール", "バルビタール", "フェノバルビタール", "ペントバルビター…
```

大分綺麗になってきた。

最後にQiitaのMarkdownの出力形式に編集し直し，Sagaceのクエリーにする。

```ruby:jdruglist.rb
#! ruby -Ku
print "| Drug Name | Sagace URL |\n|:----------:|:------------:|\n" 
File.open("oralmedicine.txt"){|file|
while line = file.gets
    lineAry =  line.split("\r")
end
lineAry.uniq!

lineAry.each{|elem|
 print "|"+elem+"|http://sagace.nibio.go.jp/cgi-bin/sagace/search.cgi?action=search&keyword="+elem+"|\n"
}
}
```

出来た。ちょっと長くなりすぎて載せられなかったので，[別ページ(GithubのWiki)](https://github.com/maoringo/SampleRepository/wiki/%E6%97%A5%E6%9C%AC%E3%81%AE%E5%86%85%E7%94%A8%E8%96%AC%E3%83%AA%E3%82%B9%E3%83%88)に載せました。