}
return alNames;
表3.1 构词表代码分析
DataClass dc = new DataClass();
Hashtable htgongxiao = new Hashtable();
string sql = "select * from gongxiao";//功效表
SqlDataReader reader = dc.ReturnDataReader(sql);
string strv = (30000 + Convert.ToInt32(reader["id"])).ToString();//功效的代码
htgongxiao.Add(strv, reader["mc"].ToString());//指定键和值放进hashtable
表3.2 功效处理代码分析
DataClass dc = new DataClass();
Hashtable htAllMedicines = new Hashtable();
ArrayList alAllMedicines = new ArrayList();
string sql = "select * from zhongyao";
SqlDataReader reader = dc.ReturnDataReader(sql);
ArrayList alNames = getAlisNames();//获得有异名的所有药及其异名
Hashtable htGXCode = getGongXiaoandCode(out count); //获得gongxiaocode里的内容
Medicine medc = new Medicine();//Medicine()为自定义类
medc.medName = reader["mc"].ToString();//药名
medc.id =Convert.ToString(reader["mccode"]);//中药id
medc.alProperty.Add(reader["sixing"]).ToString();//四性
string[] strwuwei = reader["wuwei"].ToString().Split(new char[] { ' ' });//五
string[] strguijing = reader["guijing"].ToString().Split(new char[] { ' ' });//归经
medc.alProperty.Add(reader["duxing"]).ToString();//毒性
string[] strgongxiaocode = reader["gongxiaocode"].ToString().Split(new char[] { ' ' });
foreach(string code in strgongxiaocode ) //功效数组
{
if (code!="")
medc.alEffects.Add(htGXCode[code]);
}
表3.3药物规范代码分析
对文本中出现的药物、功效等词语进行提取的时候,由于我们的标准词表数据量不大,所以不需要对文本进行分词处理,只需判断标准词表中的每个词条是否在文本中存在,记录存在的词条在文本中出现的位置,加到结果数组中。最后对所有查找存在的词条进行筛选,保留长的词条,并按照在文本中出现的顺序进行排序。在文本中药物用量紧接着药物名称,所以如果需要获得方剂中的药物用量,则可以从对应的药物名称所在的位置开始查找数字,得到的结果即为药物的用量。文本数据提取与规范算法的流程如图3.1。
图3.1 文本数据提取与规范流程
经过药物、功效等提取后的方剂如表3.4所示,便于后期算法处理。
方名 麻黄汤
组成 麻黄(9g) 桂枝(6g) 杏仁尖(6g) 甘草炙(3g)
药物代码 40113 40004 40093 40088
剂量(g) 9 6 6 3
功效代码 30002 30007 30004 30155
表3.4 方剂预处理结果
3.1.3 基于模糊理论的药剂量处理
从系统中已有的药方中,提取出的每一药的剂量表现形式有离散型(9g)和连续型(4.5g-6g)两种。要判断不同的药方中的同一药的用量是否相同,如果仅从药剂量的绝对数值去判断是不合理的,例如两个药方中的当归分别为9g与10g,我可以认为它们处于同一个用量等级,用量是相同的。所以系统使用时需要将剂量数值模糊化至对应的低中高药量区间中,思路如图3.2。首先统计每药在所有的方剂和病案中出现过的剂量,把这些剂量聚成三类,然后将类中心进行模糊化,通过三角函数模型计算隶属度将绝对的药剂量值模糊为药物用量区间。 肺癌中医治疗特点的数据挖掘研究+文献综述(6):http://www.youerw.com/jisuanji/lunwen_3678.html