正则表达式在中医文献研究中的应用初探.docx

上传人:b****3 文档编号:486286 上传时间:2022-10-10 格式:DOCX 页数:6 大小:19.79KB
下载 相关 举报
正则表达式在中医文献研究中的应用初探.docx_第1页
第1页 / 共6页
正则表达式在中医文献研究中的应用初探.docx_第2页
第2页 / 共6页
正则表达式在中医文献研究中的应用初探.docx_第3页
第3页 / 共6页
正则表达式在中医文献研究中的应用初探.docx_第4页
第4页 / 共6页
正则表达式在中医文献研究中的应用初探.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

正则表达式在中医文献研究中的应用初探.docx

《正则表达式在中医文献研究中的应用初探.docx》由会员分享,可在线阅读,更多相关《正则表达式在中医文献研究中的应用初探.docx(6页珍藏版)》请在冰豆网上搜索。

正则表达式在中医文献研究中的应用初探.docx

正则表达式在中医文献研究中的应用初探

 

正则表达式在中医文献研究中的应用初探

(作者:

___________单位:

___________邮编:

___________)

 

作者:

王志飞,李晓君,郭霞珍,张德政

【关键词】正则表达式;中医文献;自然语言理解

中医文献浩如烟海,《中国中医古籍总目》收录1949年以前的中医古籍,总数达到13455种[1];解放后,随着中医学的发展,中医文献资料更是日渐增多。

庞大规模的资料,为中医文献研究提供了丰富的内容,但同时也决定了其研究任务的繁重性。

面对这种情况,只有寻找一种能够从海量文献中抽取有用信息的辅助工具,将文献研究化繁为简,才能有效地扩大文献利用的规模,从而提高研究结果的精确度和可信度。

笔者实践发现,正则表达式正是这样一种可以方便地从海量中医文献中抽取特定信息的工具,并且具有简单易学的特点,实为中医文献研究不可多得的辅助工具。

故撰文于此,以飨同道。

  1正则表达式

  正则表达式(RegularExpression)是广泛应用于信息技术领域的文本处理工具,具有强大、便捷、高效的特点。

正则表达式是一种十分简单的程序语言,专门用以表示模式,即文本构成的某种规则。

在此基础上,配合特定工具所提供的支持,正则表达式可以对文本进行添加、删除、分离、叠加、插入、修整等操作[2]。

  “模式”是一类事物的共有特征,而正则表达式的强大之处正是在于其对模式的表达。

“模式”是人们思考问题和描述事物时不可或缺的逻辑工具,只有对某一类事物有了深入的认识,概括出其共有的特征,即掌握了该事物的模式,才有可能构建概念,并在概念的基础上通过逻辑来进行推理和判断。

可以说“模式”是思考和描述的基础,因此它于自然语言中无所不在。

  事物的模式,在自然语言中往往通过特定的语言模式表示出来。

比如“××是××”,即通过“名词1+是+名词2”的语言模式来表示“名词2”对“名词1”属性的说明。

一般而言,文字表达比语言更偏重于对模式的应用,因此文本往往表现出更为规范和密集的模式,更有利于发挥正则表达式的作用,而这一特点,在中医文本中表现得尤为突出。

  大多数程序语言都支持正则表达式,在编程中调用正则表达式来解决问题可以最大限度地发挥正则表达式的威力。

同时,由于正则表达式的强大功能,人们亦开发出多种正则表达式的专用工具软件,因此,即使不会编写程序,学习了正则表达式后也同样可以运用这些工具来进行文本处理。

常用的正则表达式工具有REGEX、RegexBuddy、TheRegulator等,本文举例所使用的工具为RegexBuddy3.0.3。

  2中医文献特点及正则表达式的应用

  与一般的自然语言文本不同,作为科技文献的一种,虽然未做明确规定,但是中医文献自然而然地遵循了一种半结构化的文本组织方式,即更多地运用“模式”来表达语意。

这就使得文本中的有用信息可以通过某种模式被唯一地辨识出来。

例如医案中常以“姓+左(右)”的模式来表示一个患者及其姓名、性别,如“张左”,表示一个姓张的男性患者;以“部位+描述”来表示一个症状,如“头痛”、“腹胀”,其中“部位”又可以省略,如“乏力”等;以脏、腑、气、血、津液与八纲相互组合表示一个证型,如“肾阳虚”;以“词+数词+量词”的模式表示处方用药,如“熟地八两”等等。

不仅如此,在这些模式之外,医案中还常加标示词,形成模式嵌套,以进一步明确语意,如“辨证:

”标示紧随其后的文字表示证型,“治以”标示其后是治法,“处方:

”表示其后为用药。

  中医文献资料的这些特点,为正则表达式的应用提供了条件。

因此,编制合适的正则表达式,可以一次性提取大量文献中的有用信息,从而大大节省文献研究的人力,提高结果的准确度和可信度。

  3正则表达式应用举例

  中国方剂数据库是由中国中医科学院研制的大型文献型数据库,共收录了来自710余种古籍及现代文献中的古今方剂84464首。

该数据库提供网络查询服务,是中医文献研究中重要的信息源。

本文就以提取该库中便秘方剂的药名为例,讨论正则表达式在中医文献研究中的应用。

  查询中国方剂数据库,关键词为“便秘”,查询字段为“主治”,返回598首方剂。

用“套录”的方法批量下载方剂,将所有内容粘贴在一个文本文档中。

其文本结构如下。

 NO.6

  [方名]降胃汤

  [处方来源]《产孕集》卷下

  [药物组成]人参1钱,陈皮1钱

  [主治]津亏或误发汗,阳泄于外,胃气下降,便秘不通

  [用法用量]作1服

  要研究这样598首方剂中的中药用药规律,就必须获得方剂中的中药信息,而提取药名是一切工作的基础。

如何提取药名信息呢?

一个方法是建立中药词库,通过程序来提取。

但是建设词库是一个浩大的工程,且无法保证词库可以覆盖文献中的全部药名;同时,这种方法亦要求操作者有一定的编程能力。

  其实,上述文本资料是典型的半结构化文本,文字结构具有很强的规律性,提取中药完全可以通过模式匹配来完成。

事实上,只须依次使用3个正则表达式就可以提取文本中的所有药名信息。

  3.1提取药物所在行

  药物所在行的文本结构是“[药物组成]+空格+空格+药物及剂量”,其他行均不具有此种结构,也就是说,“[药物组成]+空格+空格”标示此段落中接下来的内容是药物、炮制及其剂量;而所有药物所在的行,亦必然是以“[药物组成]+空格+空格”的标示开始的。

因此建立正则表达式为:

“[药物组成].*”。

  其中“[药物组成]”作为标示词表示“[药物组成]+空格+空格”。

而“.*”表示一段文本,这段文本可以是任意长度;其中“.”在正则表达式中表示任意字符,其后的“*”则表示其前面的任意字符可以有任意多个(包括0个)。

  在RegexBuddy中以正则表达式匹配文本,返回的文本结构显示,已成功提取了药物所在的行,举例如下。

  [药物组成]秦艽2~3钱,胡麻(炒,研)3~5钱,鲜首乌5钱至1两,生地3~5钱,松子仁5钱至2两(研烂调服),牛乳1杯(或牛酥1~2两),梨汁1杯。

  [药物组成]川芎1钱半,当归2钱,炙草5分,桃仁10个。

  [药物组成]人参4两,白术4两,枳实1两半,当归3两,白芍3两,抚芎1两,麦冬2两,柏子仁1两。

  [药物组成]前胡(去芦头)2两,大黄(锉,炒)1两1分,黄芩(去黑心)1两1分,木通(锉)1两1分,麻子仁1两1分,芍药1两1分。

  [药物组成]大黄半两,桔梗1钱,枳壳1钱,前胡1钱,杏仁1钱,葛根2钱。

  如果使用文本编辑器的“替换”功能去掉标示词“[药物组成]”(当然亦可通过正则表达式完成),这时文本就只含有药物、炮制及剂量信息。

  3.2去掉药物中的炮制信息

  炮制信息有更为明显的标志,就是用小括号括起来的部分。

因此,可以用正则表达式“(.*·)”来匹配,从而将文本中匹配的信息即炮制信息去掉,返回的文本结构如下。

  秦艽2~3钱,胡麻3~5钱,鲜首乌5钱至1两,生地3~5钱,松子仁5钱至2两,牛乳1杯,梨汁1杯。

  川芎1钱半,当归2钱,炙草5分,桃仁10个。

  人参4两,白术4两,枳实1两半,当归3两,白芍3两,抚芎1两,麦冬2两,柏子仁1两。

  前胡2两,大黄1两1分,黄芩1两1分,木通1两1分,麻子仁1两1分,芍药1两1分。

  大黄半两,桔梗1钱,枳壳1钱,前胡1钱,杏仁1钱,葛根2钱。

  3.3去掉药物的剂量

  药物剂量的表现形式概括起来大概有以下几种:

①“数量+单位”,如“1两”;②“数量+连词符+数量+单位”,如“2-3钱”;③“数量+波纹线+数量+单位”,如“2~3钱”;④“数量+至(或到)+数量+单位”如“4至5钱”、“四到五钱”;⑤“数量+单位+数量+单位”,如“1钱5分”;⑥“数量+单位+半(或五)”,如“1两半”、“一两五”;⑦“数量+单位+至(或到)+数量+单位”,如“5钱至2两”;⑧“单位+数量”,如“两半”。

  综合以上8种形式,以“[0-9]|半|一|二|三|四|五|六|七|八|九|十”匹配数量,“酒(杯|盏)|钱匕|两|斤|钱|匙|个|厘|分|斗|茎|撮|升|寸|粒|只|枚|g|G|条|团|把|尾|石|挺|梃|片|具|握|合|字|尺|盏|铢|杯|块|根|支|束|匕|株|张|颗|对|朵|帖|石|丸|碗|副|瓢|克|匣|滴|钟|铤”匹配单位,建立正则表达式为:

“(([0-9]|半|一|二|三|四|五|六|七|八|九|十)+(两|斤|钱|个|厘|分|斗|升|粒|只|枚|g|G|合|颗|克)(至|到)([0-9]|半|一|二|三|四|五|六|七|八|九|十)+(两|斤|钱|个|厘|分|斗|升|粒|只|枚|g|G|合|颗|克))|(([0-9]|半|一|二|三|四|五|六|七|八|九|十)*[-~.]*([0-9]|半|一|二|三|四|五|六|七|八|九|十|多)+(小|大)*(酒(杯|盏)|钱匕|两|斤|钱|匙|个|厘|分|斗|茎|撮|升|寸|粒|只|枚|g|G|条|团|把|尾|石|挺|梃|片|具|握|合|字|尺|盏|铢|杯|块|根|支|束|匕|株|张|颗|对|朵|帖|石|丸|碗|副|瓢|克|匣|滴|钟|铤)(半|一|二|三|四|五|六|七|八|九|十)*(两|斤|钱|个|厘|分|斗)*)”。

去掉剂量信息后,返回的文本结构如下。

  秦艽,胡麻,鲜首乌,生地,松子仁,牛乳,梨汁。

  川芎,当归,炙草,桃仁。

  人参,白术,枳实,当归,白芍,抚芎,麦冬,柏子仁。

  前胡,大黄,黄芩,木通,麻子仁,芍药。

  大黄,桔梗,枳壳,前胡,杏仁,葛根。

  这样,就完成了中药名的提取。

之后的工作,只须简单操作就可完成多种分析。

比如结合中药同义词表,可获知此598首方剂中共用药408种,其中用药次数最多的是大黄,共出现290次,支持度为48.50%,即将近一半的便秘方剂中使用大黄。

支持度大于10.00%的药物有17种,排名前5的分别为大黄、甘草、当归、黄芩、枳壳。

  4小结

  综上所述,正则表达式是一种便捷、高效、功能强大的文本处理工具,应用十分广泛;而中医文本具有结构化强的特点,因此十分适宜将正则表达式作为一种工具引入中医文献研究。

深入挖掘正则表达式在中医文献研究中的应用,对于大幅度减轻文献研究的工作量具有重要意义。

【参考文献】

 [1]薛清录.中国中医古籍总目[M].上海:

上海辞书出版社,2007.

  [2]JeffreyEFFriedl.余晟,译.精通正则表达式[M].第3版.北京:

电子工业出版社,2008.1.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1