Djangoでの練習を兼ねて、以前にPHPとXMLデータを利用した漢方処方の処理を行ってみた。
漢方処方
漢方処方の構成を比較してみた。結果、処方同士の内包関係がわかりやすくなった。データはJSONファイルで保持し、Djangoで構築している。構成生薬の比較にはPythonの集合機能が有用だった。
今回はXMLデータではなく、JSONデータに変換して処理した。 RDBは使わない。
漢方はその名称や薬効に加えて、構成生薬データがある。
ある漢方処方を選択したら、その生薬の構成を含む漢方処方、あるいは逆にその構成が含まれる別の漢方処方を探し出す。 PHPの時には、それなりに苦労したけれど、百人一首の処理のときと同様、Pythonで集合を用いることで、簡単に処理できた。
JSONの例
{
"kID": "001",
"kKana": "カッコントウ",
"kName": "葛根湯",
"RECIPE": [
{
"sID": "013",
"sName": "葛根",
"Ryo": "4"
},
{
"sID": "018",
"sName": "甘草",
"Ryo": "2"
},
{
"sID": "026",
"sName": "桂皮",
"Ryo": "2"
},
{
"sID": "049",
"sName": "芍薬",
"Ryo": "2"
},
{
"sID": "052",
"sName": "生姜",
"Ryo": "2"
},
{
"sID": "066",
"sName": "大棗",
"Ryo": "3"
},
{
"sID": "102",
"sName": "麻黄",
"Ryo": "3"
}
]
},
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Views.py
s=[]
for d in recipe[0]['RECIPE']:
s.append(d['sID'])
set_s=set(s)
for c in recipe_data:
r=[]
if c['kID'] != id:
for d in c['RECIPE']:
r.append(d['sID'])
if(set(r) <= set_s):
hasdict.append(c)
…
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー それぞれの生薬をリストに追加し、集合の内包をチェックしている。 差集合を利用すれば、一致しなかった生薬の構成を取得することができるし、 積集合を利用すれば、1味違いのものも見つけだすことができる。
