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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

(作者:___________单位: ___________邮编: ___________)

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

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

中医文献浩如烟海,《中国中医古籍总目》收录1949年以前的中医古籍,总数达到13 455种[1];解放后,随着中医学的发展,中医文献资料更是日渐增多。庞大规模的资料,为中医文献研究提供了丰富的内容,但同时也决定了其研究任务的繁重性。面对这种情况,只有寻找一种能够从海量文献中抽取有用信息的辅助工具,将文献研究化繁为简,才能有效地扩大文献利用的规模,从而提高研究结果的精确度和可信度。笔者实践发现,正则表达式正是这样一种可以方便地从海量中医文献中抽取特定信息的工具,并且具有简单易学的特点,实为中医文献研究不可多得的辅助工具。故撰文于此,以飨同道。

1 正则表达式

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

一种十分简单的程序语言,专门用以表示模式,即文本构成的某种规则。在此基础上,配合特定工具所提供的支持,正则表达式可以对文本进行添加、删除、分离、叠加、插入、修整等操作[2]。

“模式”是一类事物的共有特征,而正则表达式的强大之处正是在于其对模式的表达。“模式”是人们思考问题和描述事物时不可或缺的逻辑工具,只有对某一类事物有了深入的认识,概括出其共有的特征,即掌握了该事物的模式,才有可能构建概念,并在概念的基础上通过逻辑来进行推理和判断。可以说“模式”是思考和描述的基础,因此它于自然语言中无所不在。

事物的模式,在自然语言中往往通过特定的语言模式表示出来。比如“××是××”,即通过“名词1+是+名词2”的语言模式来表示“名词2”对“名词1”属性的说明。一般而言,文字表达比语言更偏重于对模式的应用,因此文本往往表现出更为规范和密集的模式,更有利于发挥正则表达式的作用,而这一特点,在中医文本中表现得尤为突出。

大多数程序语言都支持正则表达式,在编程中调用正则表达式来解决问题可以最大限度地发挥正则表达式的威力。同时,由于正则表达式的强大功能,人们亦开发出多种正则表达式的专用工具软件,因此,即使不会编写程序,学习了正则表达式后也同样可以运用这些

工具来进行文本处理。常用的正则表达式工具有REGEX、RegexBuddy、The Regulator等,本文举例所使用的工具为RegexBuddy 3.0.3。

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

与一般的自然语言文本不同,作为科技文献的一种,虽然未做明确规定,但是中医文献自然而然地遵循了一种半结构化的文本组织方式,即更多地运用“模式”来表达语意。这就使得文本中的有用信息可以通过某种模式被唯一地辨识出来。例如医案中常以“姓+左(右)”的模式来表示一个患者及其姓名、性别,如“张左”,表示一个姓张的男性患者;以“部位+描述”来表示一个症状,如“头痛”、“腹胀”,其中“部位”又可以省略,如“乏力”等;以脏、腑、气、血、津液与八纲相互组合表示一个证型,如“肾阳虚”;以“词+数词+量词”的模式表示处方用药,如“熟地八两”等等。不仅如此,在这些模式之外,医案中还常加标示词,形成模式嵌套,以进一步明确语意,如“辨证:”标示紧随其后的文字表示证型,“治以”标示其后是治法,“处方:”表示其后为用药。

中医文献资料的这些特点,为正则表达式的应用提供了条件。因此,编制合适的正则表达式,可以一次性提取大量文献中的有用信息,从而大大节省文献研究的人力,提高结果的准确度和可信度。

3 正则表达式应用举例

中国方剂数据库是由中国中医科学院研制的大型文献型数

据库,共收录了来自710余种古籍及现代文献中的古今方剂84 464首。该数据库提供网络查询服务,是中医文献研究中重要的信息源。本文就以提取该库中便秘方剂的药名为例,讨论正则表达式在中医文献研究中的应用。

查询中国方剂数据库,关键词为“便秘”,查询字段为“主治”,返回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 去掉药物中的炮制信息

相关文档
最新文档