廖賽恩 楊靜
摘 要 中醫(yī)學(xué)的辨證論治思想和因人、因時(shí)、因地制宜的治療原則,賦予了中醫(yī)臨床組方用藥的極大靈活性。方劑是按照“君臣佐使”的原則,在辨證論治的基礎(chǔ)上,由兩味或兩味以上的藥物組成的有機(jī)體,是按照組方原則,通過(guò)選擇合適藥物食物,酌定適當(dāng)劑量,規(guī)定適宜劑型及用法等一系列過(guò)程,最后完成的藥物治療處方,是中醫(yī)理、法、方、藥中的重要組成部分。
關(guān)鍵詞 中醫(yī);藥物;處方
引言
方與藥之間的關(guān)系非常復(fù)雜,清代醫(yī)家徐靈胎曾指出:“方之與藥,似合而實(shí)離也……圣人為之制方,以調(diào)劑之,或用以專(zhuān)攻,或用以兼治,或以相輔者,或以相反者,或以相用者,或以相制者。方之既成,能使藥各全其性,亦能使藥各失其性,操縱之法有大權(quán)焉,此方之妙也?!毙焓稀胺剿庪x合論”提示方與藥的關(guān)系可以從“方以藥成”和“方藥異同”兩個(gè)層面來(lái)理解。前者指方劑由藥味組成,后者指方劑與單味藥在性能方面存在一定的差異[1,2]。
然而,中藥與方劑的功效都是中醫(yī)基礎(chǔ)理論指導(dǎo)下臨床經(jīng)驗(yàn)的總結(jié),兩者內(nèi)涵并無(wú)本質(zhì)區(qū)別。許多情況下,方劑與方中諸藥的功效基本一致。此時(shí),通過(guò)方中藥物大致可以判斷出該方劑的整體功效。方劑的功效好比一個(gè)團(tuán)隊(duì)的實(shí)力,一個(gè)合適的出色的人才來(lái)到這個(gè)團(tuán)隊(duì)會(huì)對(duì)其實(shí)力產(chǎn)生很大的影響,成員之間的相互關(guān)系也構(gòu)成團(tuán)隊(duì)實(shí)力的重要部分。取長(zhǎng)補(bǔ)短,通過(guò)合理的組織,使整個(gè)團(tuán)隊(duì)發(fā)揮最大的實(shí)力。如同優(yōu)秀團(tuán)隊(duì)理念的核心是人一樣,方劑配伍規(guī)律的核心就是藥物,所以方劑組成的數(shù)據(jù)預(yù)處理是非常重要的工作。
1問(wèn)題提出
現(xiàn)在讓我們看一看方劑中的藥物(食物)組成[3]:
方名 方劑組成
牛髓膏子 黃精膏5兩,地黃膏3兩,天門(mén)冬膏1兩,牛骨頭內(nèi)油2兩。
十正湯 白豆蔻仁、附子(炮,去皮臍)、陳橘皮(去瓤)、丁香(不見(jiàn)火)、白茯苓(去皮)、干姜(炮,洗)、人參(去蘆)、白術(shù)(炒)、肉豆蔻(面裹煨)、藿香葉(去土)各等分
逡巡酒 桃花3兩3錢(qián)(3月3日收),馬藺花5兩5錢(qián)(5月5日收),脂麻花6兩6錢(qián)(6月6日收),黃甘菊花9兩9錢(qián)(9月9日收)
資生大造丸 人參2兩,山藥2兩,山茱萸2兩,補(bǔ)骨脂2兩,五味子1兩(去蒂),川牛膝2兩,覆盆子1兩,楮實(shí)子1兩,龜板1兩(酥炙),鹿角膠2兩,生地1兩,枸杞子1兩,肉蓯蓉2兩,菟絲子1兩,紫河車(chē)1具,白茯苓4兩,川杜仲2兩
從隨機(jī)抽取的這幾個(gè)方劑來(lái)考慮,我們面對(duì)的最大的問(wèn)題是藥物的名稱(chēng)、劑量以及單位混在一起,如“官白芷3錢(qián)”,這是需要編寫(xiě)程序把藥物的名稱(chēng)、劑量和單位分開(kāi),放在不同的字段當(dāng)中。
除此之外,每味藥都有它自身特定的性味、歸經(jīng)、功效等屬性,所以必須將切分出來(lái)的藥物與中藥食物表映射起來(lái),為配伍規(guī)律的分析研究掃清障礙。
簡(jiǎn)言之,與中藥食物表建立映射就是讓程序能“認(rèn)識(shí)”方劑的組成藥物。我們建立的中藥表共有規(guī)范的藥物766味,而令人頭痛的是沒(méi)有絕對(duì)統(tǒng)一的標(biāo)準(zhǔn)是中醫(yī)藥的特點(diǎn)之一,幾乎所有的中藥都有一個(gè)以上的別名,如大黃(ID:017400),其別名如下[4-6]:
ID 中藥名
017402 生軍
017403 生大黃
017404 熟大黃
017405 川大黃
017406 川軍
017407 酒軍
017408 箱黃
017409 箱軍
017410 箱大黃
017411 西吉
017412 西莊
017413 西莊黃
017414 莊黃
017415 中吉
017416 蛋吉
017417 片吉
017418 酒大黃
017419 將軍
017420 大王
017421 錦紋
017422 川錦紋
017423 錦紋大黃
017424 馬蹄黃
017425 火參
017426 黃良
017427 膚如
017428 膚如
因此,把中醫(yī)古籍中整理出來(lái)的方劑劑中的藥物,與規(guī)范中藥食物表映射起來(lái),是一項(xiàng)煩瑣艱澀而又必需完成的任務(wù)。
2初步預(yù)處理
我們對(duì)方劑組成字段預(yù)處理的目的是把劑量、劑量單位與中藥名稱(chēng)或食物名稱(chēng)分離,同時(shí)刪除與方劑藥物組成無(wú)關(guān)的文字,將中藥和食物重新編碼索引,使方劑組成數(shù)字化,從而得到方劑組成數(shù)據(jù)集,確保各種數(shù)據(jù)挖掘算法能順利實(shí)施[4]。
2.1 算法概述
首先將方劑組成字段按標(biāo)點(diǎn)符號(hào)分割,這些標(biāo)點(diǎn)符號(hào)主要有“,。:、”等。這部工作只是程序問(wèn)題,實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單。我們選用 Public String[] split(String regex) 方法。該方法根據(jù)給定正則表達(dá)式的匹配拆分此字符串。 其作用就像是使用給定的表達(dá)式和限制參數(shù) 0 來(lái)調(diào)用兩參數(shù) split 方法。因此,所得數(shù)組中不包括結(jié)尾空字符串。
分割過(guò)程中,我們的分割符號(hào)默認(rèn)是“,”號(hào),如果是其他標(biāo)點(diǎn)符號(hào)分割的方劑組成,可以由用戶自己選擇分割符號(hào)。
然后刪除或者替換部分與劑量有關(guān)的字符,接著進(jìn)行劑量單位標(biāo)準(zhǔn)統(tǒng)一,確定劑量換算關(guān)系。
(1)特定字符的替換
經(jīng)過(guò)對(duì)中藥或食物名稱(chēng)組成字段的抽樣觀察分析,在描述中藥或食物劑量上存在以下模糊詞匯,這些詞匯對(duì)于中藥或食物劑量的整理,只會(huì)造成麻煩,而不會(huì)有貢獻(xiàn),所以需要?jiǎng)h除或用合適恰當(dāng)?shù)脑~語(yǔ)要代替。字段末尾的標(biāo)點(diǎn)符號(hào)對(duì)結(jié)構(gòu)化無(wú)用且構(gòu)成障礙,因此也施以刪除。
算法步驟如下:
1)標(biāo)點(diǎn)符號(hào)全角轉(zhuǎn)半角;
2)刪除首尾空格:
選用public String trim()方法。該方法返回字符串的副本,忽略前導(dǎo)空白和尾部空白。返回的字符串移除了前導(dǎo)和尾部空白的副本;如果沒(méi)有前導(dǎo)和尾部空白,則返回此字符串。
3)模糊詞匯刪除或替換:
選用public String replace(CharSequencetarget,CharSequence replacement)使用指定的字面值替換序列替換此字符串所有匹配字面值目標(biāo)序列的子字符串。參數(shù):target - 要被替換的 char 值序列,replacement - char 值的替換序列。
4)字段末尾標(biāo)點(diǎn)刪除:
選用public String replaceAll(String regex,String replacement)使用給定的replacement 替換此字符串所有匹配給定的正則表達(dá)式的子字符串。匹配末尾是否為[,\.;\:"'!] 其中之一,若匹配則刪除[7-8]。
(2)確立單位換算關(guān)系以及中文數(shù)字轉(zhuǎn)換
經(jīng)過(guò)對(duì)單位的拆分,我們注意到在方劑組成中出現(xiàn)的單位有:“錢(qián) 兩 分 厘 斤”等等。通過(guò)查找相關(guān)文獻(xiàn),確定單位換算關(guān)系公式:
古代醫(yī)家對(duì)古代方劑用量,雖曾做了很多考證,但至今仍未做出定論。因此,我們只做中文數(shù)字的轉(zhuǎn)換,至于換算關(guān)系的確定,由使用者自己選擇。
2.2 結(jié)果分析——中藥或食物名稱(chēng)拆分結(jié)果分析
經(jīng)過(guò)初步的預(yù)處理,方劑組成字段的拆分初步完成。然而在抽樣檢查中,中藥名稱(chēng)(包括食物)的規(guī)范準(zhǔn)確率(即程序能正確“認(rèn)出”的中藥或食物名稱(chēng))只有60%左右:
上表所示的是程序識(shí)別的中藥或食物名稱(chēng),大部分名稱(chēng)是符合要求的,特別是諸如“沒(méi)藥,木香”等中藥名稱(chēng)是完全規(guī)范正確的,“龍眼”等食物名稱(chēng)是完全規(guī)范正確的,這說(shuō)明拆分程序是有效果的,可以使用的;但也有許多中藥的名稱(chēng)的識(shí)別是錯(cuò)誤的,如“去皮臍”等。所以方劑組成字段在經(jīng)過(guò)上邊初步的整理后,還需要應(yīng)用新的規(guī)則進(jìn)一步規(guī)范、處理。
盡管有許多不盡如人意的地方,但在預(yù)處理實(shí)現(xiàn)的方劑字段拆分,特別是劑量與中藥或食物名稱(chēng)的分離是相當(dāng)成功的,而且僅就中藥或食物名稱(chēng)而言,那些錯(cuò)誤的中藥或食物名稱(chēng)70%左右出現(xiàn)的次數(shù)僅僅只有1到2次,這對(duì)于根據(jù)關(guān)聯(lián)規(guī)則來(lái)研究方劑配伍沒(méi)有多大的影響,因此得到的數(shù)據(jù)集是可用的。
3中藥食物名稱(chēng)的規(guī)范
3.1 與中藥食物表的映射建立初步
經(jīng)過(guò)初步預(yù)處理,主要實(shí)現(xiàn)了中藥名稱(chēng)(包括食物,下同)與劑量的分離,并且去除了一些對(duì)數(shù)據(jù)挖掘用處不大的數(shù)據(jù);但是中藥名稱(chēng)只有60%左右能正確識(shí)別,其余中藥名稱(chēng)尚有許多的不規(guī)范和錯(cuò)誤,因此進(jìn)一步規(guī)范處理是必要的?!胺揭运幊伞?,方劑劑配伍規(guī)律的研究離不開(kāi)藥物,離不開(kāi)方中中藥的性味,功效,歸經(jīng),藥性的分析,這就提出了一個(gè)迫切需要解決的問(wèn)題,如何將拆分出來(lái)的中藥食物名稱(chēng)與中藥食物表的中藥名稱(chēng)映射起來(lái)。
而一旦將方劑組成的中藥與中藥食物表中的數(shù)據(jù)一一映射起來(lái),則為后續(xù)配伍規(guī)律的深入研究提供了可能。
3.2 映射建立步驟
我們程序中方劑劑組成字段中藥或食物名稱(chēng)的處理并非完美,還有許多細(xì)節(jié)的工作要做,以期達(dá)到更加準(zhǔn)確的結(jié)果。下面將詳細(xì)描述中藥或食物名稱(chēng)預(yù)處理的過(guò)程,以期拋磚引玉:
經(jīng)過(guò)細(xì)致的分析,認(rèn)為目前方劑劑組成字段數(shù)據(jù)整理存在以下問(wèn)題:
(1) 用來(lái)分割中藥或食物名稱(chēng)的符號(hào)并不一致,大部分是“,”但也有“、;空格”等等。對(duì)于這個(gè)現(xiàn)狀,使用默認(rèn)+高頻標(biāo)點(diǎn)+自定義解決;
(2) 有些劑量使用中文數(shù)字如“一兩”,導(dǎo)致中藥名稱(chēng)識(shí)別成“甘草一兩”,進(jìn)而影響到映射正確率;
(3) 一些炮制方法、中藥性狀,如研,伴,去皮尖,鮮等,這些詞匯的處理較復(fù)雜,一般采用人工干預(yù);
(4) 與用藥劑量有關(guān)系的詞匯,如等分、隨證、不限、無(wú)問(wèn)、些等,對(duì)于這些詞匯的處理方法是直接去除,剩下的一般較正確。
處理解決上述問(wèn)題后,我們將得到的中藥或食物名稱(chēng)與中藥食物表建立映射。
步驟一:對(duì)中藥別名進(jìn)行拆分與編碼
為方便處理,我們把常見(jiàn)的中藥或食物名稱(chēng)都放入別名表的中藥食物名字段,而不嚴(yán)格區(qū)分是別名還是加了炮制方法的名稱(chēng)。如007606酒當(dāng)歸 007607炒當(dāng)歸,這樣在識(shí)別中藥名稱(chēng)時(shí)就降低了技術(shù)難度。
中藥或食物名稱(chēng)ID編碼的規(guī)則是前4位為原有中藥或食物的ID,如“015600天花粉”表示天花粉的ID為0156,其中最后兩位為‘00表示是規(guī)范的中藥或食物名稱(chēng),從‘01-99為中藥或食物別名,對(duì)于別名的中藥名稱(chēng),通過(guò)前4位的代碼可以找到規(guī)范的中藥或食物名稱(chēng),給中藥或食物的匹配帶來(lái)極大的便利。
步驟二:進(jìn)行匹配,將前面拆分出來(lái)的中藥或食物名稱(chēng)一一與中藥食物表中的名稱(chēng)進(jìn)行匹配。對(duì)于匹配命中的中藥或食物,有兩種情況,一種是ID的后兩位是‘00,即匹配中的中藥或食物名稱(chēng)是規(guī)范的名稱(chēng);第二種是匹配的中藥或食物ID后兩位是‘01-99中的一個(gè)數(shù)字,則所匹配的中藥或食物名稱(chēng)是別名,取出其ID的前4位,找到該中藥或食物別名對(duì)應(yīng)的規(guī)范中藥食物名稱(chēng)。
步驟三:匹配完畢,方劑劑組成字段的數(shù)據(jù)表示用新的ID數(shù)字表示。
3.3 結(jié)果分析
為方便程序處理,本中藥食物表盡可能列入詳細(xì)的中藥食物別名,而不是嚴(yán)格意義的中藥或食物別名。如黃耆、麥門(mén)冬、白茯苓等均視作別名。所以這里的別名還包括約定成俗或不規(guī)范的叫法等,主要是讓程序能準(zhǔn)確“識(shí)別”并數(shù)字化方劑組成。
匹配中(hit)的中藥食物名稱(chēng)是規(guī)范的名稱(chēng)的藥物(即ID后兩位為‘00),頻度前11位的中藥是: