漢方処方

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味違いのものも見つけだすことができる。