14
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-03-14

とある事情から日本の医薬品名を抜き出してクエリーに投げる必要が出てきた。英語の医薬品名(売れ筋トップ100)は Wiki:List of largest selling pharmaceutical products から取り出せたのだが,今日は日本の医薬品をやってみよう。

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

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

うーん(。・_・。)どこが良いかしらと,KEGG DRUGとか探してみたのですが,ぱっと見,見つからなかったので厚労省のページに行った。使用薬剤の薬価(薬価基準)に収載されている医薬品について(平成24年1月16日現在)ま,これでよいのではないでしょか。内用薬,注射薬,外用薬,歯科用薬剤に分かれてエクセルファイル化されていると。
こういうのこそ,構造化して(RDFとか他でも)おいたら良いのでしょうな,と思ったけど,私がやればいいのか。ちょっと検討事項に入れておこう。

エクセルの中身

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

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

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

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

盛大に文字化けしたので,エンコードをみると(nkfはmacに標準装備されていませんが,簡単にエンコードのチェックと変換が出来るので,導入をおすすめします。nkfインストール nkf使い方まとめ

nkf -g oralmedicine.txt
Shift_JIS

rubyのkconvとか使おうとしても上手く行かなかったので,
UTF8にエンコードを変更する。

nkf -w -w80 --overwrite oralmedicine.txt 

それでもって,ruby側もエンコード指定をしておく。
参考:コマンドラインオプションで文字コードの指定

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

ぞろぞろ出てきたぞなもし。

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

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

idruglist.rb
# ! ruby -Ku
File.open("oralmedicine.txt"){|file|
 
while line = file.gets
    lineAry =  line.split("\r") #文字列からタブで区切って配列にいれる
end
p lineAry.uniq #重複削除
}
ruby jdruglist.rb 
["ブロモバレリル尿素", "抱水クロラール", "エスタゾラム", "塩酸フルラゼパム", "ニトラゼパム", "ニメタゼパム", "ハロキサゾラム", "トリアゾラム", "フルニトラゼパム", "ブロチゾラム", "ロルメタゼパム", "オキサゾラム", "クロキサゾラム", "クロラゼプ酸二カリウム", "ジアゼパム", "プラゼパム", "フルジアゼパム", "ブロマゼパム", "メダゼパム", "ロラゼパム", "アルプラゾラム", "フルタゾラム", "メキサゾラム", "トフィソパム", "フルトプラゼパム", "クロルジアゼポキシド", "ロフラゼプ酸エチル", "クアゼパム", "アモバルビタール", "バルビタール", "フェノバルビタール", "ペントバルビター…

大分綺麗になってきた。

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

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)に載せました。

14
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?