maoring blog

このブログはセマンティックウェブ関連の技術的なあれこれを綴ったブログです。

希少疾病用医薬品・希少疾病用医療機器のデータをRDF化しよう。その6

日本語のデータをRDF化しよう。

基本的な手順は英語版の時と同じです。OpenRefineを使って,データを綺麗にし(下画像),Export→Templatingにて,json形式に出力します。

f:id:maoring:20130904161707p:plain

英語版の時と同様にprefixを入れ,以前に決めたpredicateを入れていったらOKです。

#!/usr/local/bin/ruby -Ku
require "json"
require "date"
fp_json = []
open("orphan_j.json",'r'){|fp|
 fp_json = JSON.parse(fp.read)
}
puts "@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix eob: <http://pashworth.org/orangebook#> .
@prefix drgb: <http://bio2rdf.org/drugbank_vocabulary/> .
@prefix drgn: <http://www.nibio.go.jp/drugVocabulary#> .
@prefix odrgn: <http://www.nibio.go.jp/orphanDrugVocabulary#> .
@prefix cc: <http://creativecommons.org/ns#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
"
puts

fp_json.each do |key,val|
    val.each_with_index do |column,i|
        print "<http://www.nibio.go.jp/orphanDrugTarget#"+ i.to_s + "> drgn:designationFiscalYear \""+ column["Column 1"].to_s + "\";\n"
        print " drgn:designationDate \"" + column["Column 2"].to_s + "\"^^xsd:date;\n";
        if column["Column 3"].nil?
           print " drgn:number \" \";\n"
        else
        print " drgn:number \"" + column["Column 3"] + "\";\n";
        end 
...中略
       if column["Column 8"].nil?
            print  "drgb:pharmacology \" \"; \n"
        else
        print " drgb:pharmacology \'\'\'" + column["Column 8"] + "\'\'\';\n";
        end 
...中略
        print " drgn:revocationDate \"" + column["Column 23"].to_s + "\"^^xsd:date;\n";
        print " drgn:status \"" + column["Column 24"].to_s + "\".\n";
puts
puts

            end 
end
puts "<http://www.nibio.go.jp/orphanDrug_j.ttl>
 dcterms:creator \"伊藤 真和吏 \" ;
 dcterms:publisher \"独立行政法人 医薬基盤研究所\" ;"
print(" dcterms:date \"",Date.today.to_s,"\"^^xsd:date ;\n")
puts " cc:license <http:\/\/creativecommons.org/licenses/by-sa/3.0> ."

このような形で,書いていけばOKです。
なお,print " drgb:pharmacology \'\'\'" + column["Column 8"] + "\'\'\';\n";の部分ですが,記述が複数行にわたり,改行が必要な場合には,シングルクオテーション*3をすることが必要のようです。(そうしないと上手く,SPARQLで調べられませんでした…参考 Turtle literals←Thanks to @32nmさん!!
実行結果はこのようになります。日本語だと,なんかより親しみが持てる感じがします(私だけ?)

@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix eob: <http://pashworth.org/orangebook#> .
@prefix drgb: <http://bio2rdf.org/drugbank_vocabulary/> .
@prefix drgn: <http://www.nibio.go.jp/drugVocabulary#> .
@prefix odrgn: <http://www.nibio.go.jp/orphanDrugVocabulary#> .
@prefix cc: <http://creativecommons.org/ns#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix db: <http://dbpedia.org/ontology/> .

<http://www.nibio.go.jp/orphanDrugTarget#1> drgn:designationFiscalYear "1993";
 drgn:designationDate "1993-11-15"^^xsd:date;
 drgn:number "(5薬B)第2号";
 drgn:grantPeriod "";
 drgb:name " ";
 dc:description "ゴーシェ病Ⅰ型患者の諸症状(貧血・血小板減少症、肝脾腫等)の改善";
 drgn:designationApplicant "ジェンザイム・ジャパン㈱";
 drgb:pharmacology '''ゴーシェ病Ⅰ型患者の諸症状(貧血、血小板減少症、肝脾腫及び骨症状)の改善''';
 drgb:manufacturer "ジェンザイム・ジャパン㈱";
 eob:approvalDate "1996-07-10"^^xsd:date;
 drgb:product "セレデース注50U";
 drgb:product "セレデース注400U";
 drgb:brand " ";
 drgn:HOT9 " ";
 drgn:approvedNameDrugPackageJ " ";
 drgn:approvedNameDrugPackage " ";
 drgn:JSCC " ";
 drgn:CODE106 " ";
 drgn:approvedName "";
 drgn:approvedNameJ "";
 drgn:CASNumber " ";
 drgn:clinicalTrialNumber " ";
 rdfs:comment "これらの2製剤については現在、供給されていませんが、代わりに指定番号(8薬)第81号の製剤が供給されています。";
 drgn:revocationDate ""^^xsd:date;
 drgn:status "承認".
 drgn:specifiedDiseaseNumber " ";
・・・中略
<http://www.nibio.go.jp/orphanDrug_j.ttl>
 dcterms:creator "伊藤 真和吏 " ;
 dcterms:publisher "独立行政法人 医薬基盤研究所" ;
 dcterms:date "2013-09-04"^^xsd:date ;
 cc:license <http://creativecommons.org/licenses/by-sa/3.0> .

これでデータのRDF化がひと通り完成しました。バンザーイ。
(後で補足はするかもしれません。)

次回予告

せっかく,データをRDF化したので,次回はこれらのデータを使って,SPARQLでのクエリを投げてみましょうか(予定は未定,ちょっと遅くなるかもです。)SPARQLのクエリを投げると,より口語的な表現で,データを得ることが出来るようになります。ここがRDFの醍醐味の1つ,でもあるかもしれません。乞うご期待ください☆