中文分词技术在电子病历系统中的应用.docx_第1页
中文分词技术在电子病历系统中的应用.docx_第2页
中文分词技术在电子病历系统中的应用.docx_第3页
中文分词技术在电子病历系统中的应用.docx_第4页
中文分词技术在电子病历系统中的应用.docx_第5页
免费预览已结束,剩余18页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中文分词技术在电子病历系统中的应用中文分词技术在电子病历系统中的应用二一二年十月摘 要电子病历(Electronic Medical Record,EMR)是医疗机构医务人员对门诊、住院患者临床诊疗和指导干预的、使用信息系统生成的文字、符号、图表、图形、数据、影像等数字化的医疗服务工作记录,是居民个人在医疗机构历次就诊过程中产生和被记录的完整、详细的临床信息资源,它可在医疗卫生服务中作为主要的信息源,取代纸张病历,医院通过电子病历以电子化方式记录患者就诊的信息,包括:首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等,其中既有结构化信息,也有非结构化的自由文本,还有图形图象信息,在医疗中作为主要的信息源,提供超越纸张病历的服务,满足医疗、法律和管理需求。电子病历系统(Electronic Medical Record System, EMRs)是针对基于计算机和信息网络的电子病历进行采集、储存、传输、展现、检索、质量控制、统计和利用的系统。为了进一步推进以电子病历为核心的医院信息化建设工作,提高医院信息化管理水平,截止2012年1月底,卫生部先后制定下发了电子病历基本规范(试行)、电子病历系统功能规范(试行)、电子病历系统功能应用水平分级评价方法及标准、电子病历基本数据集(征求意见稿)等法规和规范性文件。在电子病历系统功能规范(试行)中明确了对电子病历书写需要将自然语言方式录入的医疗文书按照医学信息学的要求进行结构化以及对结构化数据的检索和统计进行了要求。在电子病历基本数据集(征求意见稿)中进一步确定了电子病历数据进行数据交换的基本数据集模型。由此可见电子病历的“结构化”是电子病历系统设计和实施的重点和难点。本文将阐述如何通过在目前新版电子病历系统中引入中文分词技术,解决目前电子病历系统中电子病历数据的“结构化”难题,实现电子病历用户在实际应用中通过自然语言进行自由文本方式的输入的同时,能够通过计算机的辅助进行病历内容的结构化,为日后的查询、统计、数据交换提供基础。本文阐述的主要内容如下:(1) 目前电子病历系统的结构化问题;(2) 中文分词技术概述;(3) 中文分词技术在电子病历系统结构化中的具体应用;(4) 中文分词技术应用的分析总结及展望。关键词:中文分词、电子病历系统、结构化第一章 电子病历的结构化1.1 为什么要结构化电子病历相对于传统手写病历的优点是显而易见的,并且随着IT技术的发展,以及医疗信息化建设的利益加强,电子病历的发展是必然的趋势。而且顺应以电子病历为核心的医院信息化建设工作的推进,电子病历已经成为医疗信息化的重要组成部分。国内电子病历开始于2000年左右,在此之前所开发的电子病历只能称之为病历电子文档化,基本上都是基于Word或写字板的功能,目前这种电子文档化病历目前仍然在一些医院正在使用。国内较早的一些结构化电子病历采用全结构化的书写方式,比如南京海泰基于WEB架构的表格式电子病历,东软的自定义报表式电子病历。所谓的电子病历的“结构化”是指从医学信息学的角度将以自然语言方式录入的医疗文书按照医学术语的要求进行结构化分析,并将这些语义结构最终以关系型结构的方式保存到数据库中。例如:如果描述一个“腹部疼痛2日,伴呕吐”的病症,按照词语的类别,把它划分为“腹部”(名词)、“疼痛”(动词)、“2”(数词)和“日”(单位名词),“伴呕吐”(动词)5个部分。如果按照医学术语进行结构化分类分析,“腹部”是这一句话中描述“身体部位“的元素,”疼痛“是描述“症状“的元素,”2“是“数值”元素,“日”是“时间单位”元素。这样电子病历的内容就成了结构化的描述,上述的结构不仅在编辑过程中使用,在保存时依然可以保持这些结构以便后续的利用。电子病历结构化的优势表现在于以下几个方面:1. 降低了病历出错的概率,多层次的结构化病历通过数据量化标准模式,把文字录入式的描述降低到最少,操作简单,同时避免了书写病历过程中用词的随意性,为今后的数据收集,研究提供了方便;2. 优化了电子病历通过结构化中的元数据信息进行查询和统计分析;3. 实现了共享和交换,电子病历和医院中其它系统的数据交换是必然的。这意味着,只有遵循国标所规定的全结构化的病历文档结构才是自由交换数据的前提。4. 更适合临床信息化的需要,通过结构化电子病历,才能将病历中的病史、临床检查检验结果、诊断治疗信息进行提取和关联,并分析出最科学的临床路径。1.2 结构化的挑战结构化电子病历相对于传统的电子文档化病历有很多现实性的意义和优势,在实际应用中,结构化电子病历在教学、科研方面的优势也得到了大家一致认可。但是,电子病历不应该为结构化而结构化,比如,前文所提到的一些早期的一些结构化电子病历产品,就是强制的将病历划分成几个条目或者区域,要医生逐条逐项的去输入,不仅输入起来很不方便,而且灵活性也很差。而且,结构电子病历虽然从某种程度上减轻了医生的工作量,提高了书写效率,改善了病历正规化,但是也存在一些弊端,一是医生可以对电子化内容进行复制粘贴,影响了医生的思维过程,虽然节约了书写的时间,使得病历本身的内容失去了科研循证的价值和病历质量;二是医生依赖于电子病历的结构化辅助输入,不能起到业务训练的效果和目的,所以,现在有些医院要求实习医师、试用期医务人员不允许采用结构化电子病历模板进行病历书写,而且为了防止实习医师、试用期医务人员依赖范文,减少差错,还要求注册医生对病历进行审阅,并保留双签名。从结构化电子病历的各个优势比较来看,电子病历的存储结构的“结构化”的需求更甚于电子病历输入方式的“结构化”的需求,所以,电子病历更应该是“可结构化”的电子病历,即电子病历在存储结构上应当是“可结构化”的。这里的“可结构化”的含义是,在占有合理的存储空间和高效的性能的基础上能够根据医疗工作中不同情况的实际需求实现病历数据的结构化、非结构化和半结构化存储。这就是说,当仅仅为了记录医疗经过,不需要快速查询的情况下,病历应当是非结构化的。当需要快速检索和结构化查询的情况下,病历应当时结构化的。要在同一病历中同时出现上述两种情况复合存在的时候,病历应当是半结构化的。电子病历系统在实际临床环境的运用情况是,医生希望书写病历时采用自由文本录入的方式录入,能够对病历内容的进行复制、粘贴操作,同时通过病历记录(范文)和内容片断两级模板的辅助输入,通过数据共享快捷输入,迅速检索,调用处理各种诊疗信息,减轻书写强度,提高工作效率。结构化电子病历那种元数据输入方式在有些科室用起来可能比较顺畅,比如耳鼻喉科;因为具体的业务的关系,这些科室的结构化电子病历原型或模板比较适合结构化定义,而在有些科室,因为实际业务的关系会存在不好进行结构化定义和结构化输入不方便这两个问题,所以,他们更倾向于采用非结构病历。正因为如此,电子病历系统必须考虑结构化和非结构化模式并存,而且应该考虑所有病历文件应该都是“可结构化”的。从技术的角度来看,电子病历文本的“结构化”的实现过程就是将非结构化的自由文本按结构化的要求进行结构化分析出语义结构并转换成结构化需要的关系型模型结构的过程。图示如下:这里的结构化处理,就将运用下面将要介绍的中文分词技术。第二章 中文分词技术2.1 中文分词技术概述什么是分词?分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。在英文为代表的印欧语系中,句子是以词为单位,词与词之间是通过空格隔开,而以中文为代表的汉藏语系中,句子由字构成,句子中所有的字连起来才能够表达一个完整的意思。例如:英文中典型的主系表的句子,“Im a student”,翻译成中文为“我是一个学生”,在英文中通过句子中的空格可以很容易的区分student是一个单词,意思是学生,在中文中“学”,“生”假如分开来,就无法理解正确的意思,必须将它们合在一起才能表示出准确的意思。在上面的例子中可以看出,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段可以通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,但是在词这一层上,中文比之英文要复杂的多、困难的多。所以在印欧语系中将句子中的单词重新组合成词序列,基本上不存在任何问题,但是将中文的句子中的汉字序列切分成有意义的词就相当困难了。比如:“南京市长江大桥欢迎你“,可以划分成”南京市/长江/大桥/欢迎/你”,也可以划分成“南京/市长/江大桥/欢迎/你”,所以如果是在一定的语境下,人是可以很容易的得到确切的意思的,但是,如果交给计算机来做,是相当的困难的。所谓的中文分词,就是把中文的汉字序列切分成有意义的词的序列的过程。中文分词主要应用于信息检索、人机交互、信息提取、文本挖掘、中外文对译、中文校对、自动摘要、自动分类等很多方面。在互联网信息量飞速增长的今天,使得搜索引擎成为人们高效获取有效信息的首要途径,目前主流的搜索引擎,比如Google,Baidu,都是基于关键字来匹配搜索结果的,评价一个搜索引擎的优劣,最直接的标准就是信息检索的效率,搜索引擎怎么才能快速检索到关键字呢?这就得依赖搜索引擎的数据存储机制-倒排索引。这里的倒排索引类似于数据库中的索引,搜索引擎在外边扒完网站内容后,要将所有的内容中的关键字预先进行编目,形成一个结果和关键字的对应表,这个对应表就是所谓的倒排索引,搜索引擎在建立倒排索引时,就需要用到中文分词技术,并且分词的过程发生在用户输入查询内容时和服务器建立索引时。例如:Baidu搜索引擎搜索用户查询词“中国民歌钢琴曲”2.2 中文分词算法现有的中文分词算法大体可以分为三大类:基于字符串匹配的分词方法、基于统计的分词方法、基于理解的分词方法;下面就这三大类中文分词算法分别做一个简要的描述。2.2.1 基于字符串匹配的分词方法这种算法是目前搜索引擎广泛采用的一种分词方法,也称之为基于词典的分词法或机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功。比如,匹配“中联信息”,在词典里面能够匹配的有:中、联、信、息、中联、信息、中联信息。如何选择其中最佳的匹配就需要依然定义的策略,比如,这里可以定义策略为长度最大的最佳匹配。常用的匹配规则有:l 正向最大匹配算法正向最大匹配即方向为从左往右正向匹配,例如:“我有意见分歧”,词典中有如下词条:我、有、意见、有意、分歧,按正向最大匹配算法进行匹配,得到的结果就是“我/有意/见/分歧”,这里明显就错了,那是因为“有意”在词典中优先被匹配出来了。l 逆向最大匹配算法逆向最大匹配即方向为从右往左逆向匹配,上例经过逆向最大匹配算法进行匹配,得到的结果就是“我/有/意见/分歧”,这样就正确了,统计结果表明:单纯使用正向最大匹配的错误率为1/169,单纯使用反向最大匹配的错误率为1/245。逆向匹配的切分精度略高于正向匹配。l MMSEG算法MMSEG算法相对上面两种算法来说比较复杂,是一种带4个歧义消解规则的正向匹配算法,因为其正确率比较高所以被普遍采用。上述各种基于字符串匹配的算法都不是完美的,总会有出错的时候。2.2.2 基于统计的分词方法这种分词方法的基本思想是,从形式上看,词是稳定的字的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好的反映成词的可信度。可以对语料中相邻共现的各个字的组合的频度进行统计,计算它们的互现信息。定义两个字的互现信息,计算两个汉字X、Y的相邻共现概率。互现信息体现了汉字之间结合关系的紧密程度。当紧密程度高于某一个阈值时,便可认为此字组可能构成了一个词。这种方法只需对语料中的字组频度进行统计,不需要切分词典,因而又叫做无词典分词法或统计取词方法。但这种方法也有一定的局限性,会经常抽出一些共现频度高、但并不是词的常用字组,例如“这一”、“之一”、“有的”、“我的”、“许多的”等,并且对常用词的识别精度差,时空开销大。实际应用的统计分词系统都要使用一部基本的分词词典(常用词词典)进行串匹配分词,同时使用统计方法识别一些新的词,即将串频统计和串匹配结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。另外一类是基于统计机器学习的方法。首先给出大量已经分词的文本,利用统计机器学习模型学习词语切分的规律(称为训练),从而实现对未知文本的切分。2.2.3 基于理解的分词方法这种分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。句法分析过程如下图所示:对于任何一个成熟的分词系统来说,不可能单独依靠某一种算法来实现,都需要综合不同的算法。2.3 中文分词面临的问题当前中文分词主要面临两个问题:1. 歧义消除2. 新词发现其中歧义消除主要是在中文分词过程中存在两种歧义:交叉歧义和组合歧义;比如:“研究生命”,可以分成“研究生/命”和“研究/生命”,这里的两个词,“研究生”和“生命”,存在一个“生”这个交集。这就形成了交叉歧义。再如:“学生会组织义演活动”可以分成“学生/会/组织/义演/活动”或者“学生会/组织/义演/活动”,因为这里“学生”和“会”可以既可以组成“学生会”整个词也可以拆分成“学生”和“会”两个词独立存在。另外,新词发现是指优先识别已知词还是未知词,比如:“内塔尼亚/胡说”和“内塔尼亚胡/说”,新词发现很多是因为姓名拆分造成的歧义。第三章 中文分词技术在结构化病历中的应用3.1 当前电子病历系统结构化综述目前新版电子病历编辑器支持多层次的结构化输入方式,同时存储完全采用的XML结构。电子病历的内容的结构化是通过文档结构模型上关系对象分类实现的,具体的模型示意图如下:从上图可以看出,电子病历编辑器的内容是由基本的元素对象组成,电子病历中的文本内容由自由文本和普通文本元素组成,而普通文本元素根据输入的需要而扩展成枚举、列表、树形元素。电子病历的结构化其实就是简单的将自由文本和能够标记数据的文本元素或者元素进行区分就可以了。这些可以标记的元素,在卫生部推荐标准电子病历基本架构与数据标准(试行)中被定义为数据元,并给数据元给出了5类17项数据元素属性的描述,而这些所定义的数据元在病历文档中存在的最基本形式就是文本元素,而这些文本元素在文档中的两个作用,一个是显示文本,一个存储数据。下图是一个结构化文档原型的表现样式:其中文档中黄色背景部分的文本被区分为一个元素,例如:“病史陈述者”是一个枚举元素,“健康状况”是一个普通文本元素,他们在文档中的表现形式都是一串文本值,他们在文档中的区别在限于元素对象的属性和所对应的输入方式。另外,因为元素对象的属性不同,他们在文档中的存储格式也不同,不同类型的元素通过不同的XML节点名称进行区分,例如:普通文本节点名称为element,枚举元素节点名称为e_enum。文档中的结构化输入方式主要有两种:一种是通过输入框的方式进行辅助输入,另外一种是通过接口方式进行查询赋值填充;最直接也是最直观的方式就是输入框输入方式,例如:下图为命名为“常见疾病”的枚举元素,在该元素上通过回车键调用元素输入窗口界面,输入界面会通过元素值域的定义提取出枚举值数据,用户通过选择对元素进行赋值,这时,元素在文档上就显示对应选中的枚举项目的文本值。元素另外一个关键概念就是元素的值域,值域可以简单的理解为元素可选值的一个集合,在新版电子病历中除了普通文本元素之外,称之为复杂元素的元素都具有值域,元素的值域存在两种存储形式,一种是自描述值域,一种是外部描述值域,自描述值域目前只存在于枚举类型元素中。这里,简单的描述一下电子病历编辑器中结构化元素(数据元)和文档内容的关系如下:简单的说,结构化文档和非结构化文档最大的区别就是文档的内容中是否存在有结构化元素(数据元)这个可以进行赋值的最小、不可再细分的数据单元。目前将电子病历进行结构化的最主要途径就是通过定义结构化的病历模板来实现病历内容的结构化,在电子病历基本架构与数据标准(试行)中,对文档模板的描述是这样的:“临床文档基础模板是用于指导临床文档数据创建的形式和方法。制定临床文档基础模板的目的,是用标准化的数据组和数据元,根据临床文档信息模型以及各类医疗服务活动的业务规则, 通过对数据组和数据元的基数约束以及数据元允许值约束,生成各类实际应用的结构化、标准化临床文档,以保证电子病历数据采集和交换的一致性。一个临床文档基础模板可生成对应的一个或多个临床文档(业务活动记录),是临床文档信息模型的应用实例。其基本构件是可重用的数据组、数据元及数据元值域。”这段话的主要意思是临床文档基础模板通过对元素(数据元)的约束,来生成各类实际应用的结构化、标准化临床文档。换句话说就是要创建结构化的电子病历文档,首先要有已经结构化成元素(数据元)的集合的文档基础模板。所以,医院要使用结构化的电子病历,所要面对的最突出的一个问题就是如何能够定义出一个好的模板,这又引申其他一些问题:怎么能够兼顾各科室的特色?模板由谁来制订?如何制订?模板是由每个医院统一设置,还是具体到每个科室、每个医生?而这些问题在标准和规范中都是没有答案的。目前,卫生部提出了电子病历的数据标准,但是要真正实现临床文档基础模板的标准化几乎是不可能的,而且这些问题已经不在技术的范畴中了,而是关键业务问题,结构化电子病历模板的制订,目前正是电子病历系统实际实施的重点和难点。目前,现实中很多情况是每个医生根据自由度很高的模板按自己的习惯去书写病历文档,然后根据自己的喜好和经验将写好的文档保存为范文,然后将范文当作今后书写文档的模板,这样,这种自由度太高的模板不仅没有达到结构化的目的,同时造成文档缺少规范而不好管理。在医疗信息化飞速发展的今天,各种医疗信息都可以通过设备和仪器生成并具有各自的数据标准,唯独医生书写的病历资料是医生根据自己所学的专业知识将患者的情况用自然语言组织起来的大段文字,电子病历发展到今天,“结构化”是它一个非常显著的特点,在病历中是按照医学专业要求尽可能地将知识点提炼出来,并使用医学规范用语和诊断专业术语书写,使病历书写能够达到医学要求的规范化和标准化,电子病历虽然改变了病历的存储和书写方式,但是病历本身并没有任何变化。应该认识到,在电子病历发展历程中,病历模板是因技术限制而不得不采用的一个过渡手段。病历模板只是病历的部分结构化,从某种程度上它限制了医生的思维。真正智能化的电子病历应该是能够自动从自由文本中提炼出医学所需的知识点及其逻辑关系,提醒医生不要遗漏必须记录的内容。因此,结合目前新版电子病历编辑器的特点,通过技术手段,自动从电子病历中的自由文本中提取可以结构化的信息,使电子病历的非结构化内容成为可结构化的内容,实现智能化的电子病历系统将是电子病历系统发展的重点,也是本文阐述的重点。3.2 中文分词技术与结构化的结合点目前电子病历编辑器提供了下拉单选、下拉多选、平面单选、平面多选、下拉选项、文本输入、数字输入、日期输入控件,文档中的每个元素根据各自的元素类型调用不同的输入控件,实施维护人员或者医生编辑结构化电子病历模板就是将各种类型的元素进行合理的组合,形成一份能够描述患者病状且语言标准、内容丰富详实的结构化病历。如原文本病历体格检查书写内容为“体温36.9,脉博72次/分,呼吸16次/分,血压收缩压120.75mmHg。发育正常,营养稍差,病容急性,查体合作。全身皮肤粘膜无黄染,浅表淋巴结未触及肿大。鼻腔、外耳道无异常分泌物。双肺听诊呼吸音清,心前区无膨窿,心率72次/分,律齐,各瓣膜听诊区未闻及病理性杂音”,用结构化的元素(数据元)进行组合,形式如下:“体温体温,脉博脉博次/分,呼吸呼吸次/分,血压收缩压收缩压mmHg。发育发育,营养营养,病容病容,查体检查合作。全身皮肤粘膜皮肤,浅表淋巴结淋巴结。鼻腔、外耳道眼耳鼻。双肺听诊呼吸杂音,心前区心前区,心率心率次/分,心律,各瓣膜听诊区杂音”其中“发育”、“营养”、“病容”、“检查合作”、“皮肤”、“淋巴结”、“眼耳鼻”、“肺脏”都应该是一系列医疗专业术语和标准的诊断学名词,实际输入时,根据病人病情,通过提供下拉选项框进行输入,另外“体温”、“脉搏”、“呼吸”、“血压”都应该是数值输入并且期望的输入值不能超过某种边界,比如体温应该最大程度的避免输入大于50和小于0的数值,这样的结构不但避免了表达上出现的歧义和不合理值,而且为今后的检索和病历分析奠定了数据基础。但是,你会发现将原来的文本病历书写的内容转换为数据元的合理组合本身就是一件很复杂和很困难的事,首先你要分析文本中哪些专业术语是可以抽取成值域,然后就是在要保证语义之间的连贯通顺。如果我们能够建立起这样的模板,而且模板看起来也会很工整,我们也希望病历书写人员书写结构化病历时能够像做选择题和填空题一样,按一下键盘,点几下鼠标就可以搞定一份病历,轻松和快捷,真的是这样么?绝对不是!医生写病历不同于开医嘱或者填写手术申请单,写病历的过程是医生将其所学的专业知识结合患者的病情,用自然语言,也就是中文根据一定的语义、语法和逻辑关系进行组织,形成的一段文本。结构化模板因为格式上的过于标准、固定而显得呆板和欠缺灵活,比如,体格检查文本中的皮肤诊断和眼耳鼻诊断一定要是固定顺序吗?虽然在实际书写中可以通过操作进行调整,但是可能调整所花费的时间比直接输入自由文本更多。结构化模板的作用虽然规范了输入,但是以牺牲灵活性为代价的,规范和灵活好像是两个矛盾对立的属性,如何做到矛盾的统一呢?下面一个图描述了结构化书写和自由书写的区别:通过自由书写得到自由文本文档是一个很自然的过程,这是电子病历最为普通的功能了;另外是依据结构化模板通过结构化书写,得到结构化文档;而且,结构化文档通过另存和复制粘贴可以很容易的得到自由文本,但是自由文本转换为结构化文档的过程却很复杂,可能比创建结构化文档模板更困难,因为将病历文本抽取成结构化模板是一次性过程,并且带有一定的主观性,但是要从大量已存在的包含了大量医疗术语和普通单词的实例病历文档转换成有结构化特性的结构化文档是人力不可能完成的,必须要计算机来完成。这里需要一个将自由文本转换成结构化元素的过程,实现这个过程的主要思路如下:1、 一段病历文本从逻辑上是由描述性文本(名词、动词、形容词、介词、连词、助词等等)+医疗术语+标点符号组成;2、 其中的医疗术语可能是某个元素的值域集合中的一项;3、 根据匹配的值域定义可以找到元素的定义;4、 可以根据匹配的元素将医疗术语替换为元素;例如:病历自由文本“发育正常,营养稍差,病容急性,查体合作。”其中“正常”是枚举元素-“发育描述”的值域的集合中的一项,那么“正常”很可能是“发育描述”元素的一个输入值,通过编辑器将“正常”文本替换为了输入值为“正常”的“发育描述”元素即完成自由文本向结构化元素的转换。这其中最关键的一步就是如何从一段由连续的字序列组成的自由文本中将可能是医疗术语的词从描述性文本中抽取出来,而这个过程类似于中文分词技术的过程,而且匹配某个元素值域集合项的过程也符合中文分词算法中的“基于字符串匹配的分词法”的概念,其中用来进行分词的机器词典就是电子病历系统中的元素值域集合。在以上分析的基础上,可以进一步分析电子病历编辑器结合中文分词技术实现病历中自由文本的结构化处理。3.3 中文分词技术在电子病历编辑器中的实际应用目前电子病历编辑器整体结构如下:对于电子病历编辑器而言,分为三个层次,其中最核心的一层是TrichView,它是一套第三方的基于Delphi的文档编辑器,主要负责最基本的文档显示和文档操作以及一些特殊的处理功能。再往外一层是zlRichPages,它是基于ActiveX的OCX控件,他主要负责提供外部应用程序调用文档编辑器功能所需要的函数和事件接口,最外一层就是基于.NET C#开发的zlDocEditor自定义控件,它主要是封装了ActiveX控件上的属性以及方法,以及一些组合了ActiveX控件方法的预定义方法,并提供了具体功能调用的UI界面接口以及一些逻辑控制,另外zlDocEditor具有了通过应用服务器访问EMR数据库数据的能力,同时为了满足编辑器离线使用的目的,zlDocEditor提供了将EMR数据库基础数据缓存成本地离线文件供编辑器离线时调用。针对前面一章的分析,分词的过程就是对选中的自由文本进行分词处理后,将原文本替换为元素的过程,在进行分词处理时,需要调用经过值域生成的分词字典,而分词字典的生成和分词处理暂时不考虑放到应用服务器上,目前先模拟通过本地的值域缓存文件生成独立的分词词典,然后由分词处理组件通过分词词典得到分词结果,交给编辑器做替换处理。为了满足基于值域的字符串匹配算法的中文分词处理,这里引入了CodePlex上的开源基于.NET的中文分词项目:盘古分词-开源中文分词组件(/)。盘古分词组件满足了基本的基于词典的中英文分词的需要,盘古分词在下载中提供了字典文件,盘古的字典文件包含了几万个单词。为了满足现在的实际需要,针对盘古分词的词典进行了改造,以满足通过值域匹配到元素ID的目的。这里重新设计了盘古分词组件的DictStruct类,重新定义了新的ElementDictStruct类,相关的词典类模型图如下:/ / 元素词典结构 / Serializable public class ElementDictStruct / / 单词 / public String Word; public String Value; / / 词频 / public double Frequency; / / 对应元素列表 / public List ElementIDs = new List(); public override string ToString() return Word; 这里主要是重新定义了字典结构,因为在电子病历中,值域和元素是一对多的关系,所以同一个单词对应着1个或多个元素,这里,将所对应的元素ID,ElementIDs定义为List列表类型变量。生成词典的过程分为两步,第一步是通过缓存的元素列表得到元素定义,然后得到该元素是否存在值域定义。如果有值域定义则进入第二步-创建ElementDictStruct结构,生成一个ElementDictStruct.Word为值域单项显示值的类实例,并将第一步所找到的元素定义的ID值填入到ElementIDs属性中。最后完成整个词典的构造,最后调用Dict类的SaveToXmlFile方法,将字典文件保存为XML字典文件。为了能够将分词后的结果传回给编辑器做替换处理,这里分词结果包含了4个属性 Offs分词处理后的结果在原文的偏移位置 Len分词处理结果的长度(这里和原词长度相同) NewText分词处理结果中的元素显示的新文本(这里和原词一致) Value分词处理后的元素中存储的值 ElementDef分词处理后的元素定义(暂默认为第一个元素定义)因为需要采用基于.NET的分词组件,整个处理流程需要由zlDocEditor控件调用zlRichPages(OCX)控件分词方法获得选中文本,通过事件发出分词请求,经过.NET分词组件处理后得到结果,再通过事件参数传回给zlRichPages做替换处理。这里为了避免添加很多没必要公布的OCX接口函数,而没有采用zlDocEditor直接调用多个OCX接口函数来实现这个功能。整个调用流程时序图如下所示:接下来,zlRichPages控件得到结果后,开始进行替换处理,因为zlRichPages返回给zlDocEditor进行分词处理的是整个自由文本,返回的结果中的偏移也是整个相对于整个自由文本的偏移,而在TrichView基础控件中的字的定位是以Item为单位,Item是TrichView中最基本的显示对象,TrichView中划分Item的规则是先类型后样式,在同一类型下,如果样式不同则为不同的Item,比如同样是Text Item,因为字体和字号等样式信息不同,将划分为不同的Item对象,而TrichView中的选择方法,是以Item的序号重置偏移的,所以对于传回的结果,TrichView必须进行修正。这里的修正出现在两个地方:1、返回结果的总偏移Offs在TrichView中的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论