1、中医问诊语料库的建立和初步加工 1 本科毕业论文 (科研训练、毕业设计 ) 题 目: 中医问诊语料库的建立 、 初步加工 和词频统计 姓 名: 学 院: 软件学院 系: 专 业: 软件工程专业 年 级: 学 号: 指导教师(校内): 职称: 指导教师(校外): 职称: 年 月 日 中医问诊语料库的建立和初步加工 2 中医问诊语料库的建立 、 初步加工 和词频统计 【 摘 要 】 随着现代社会计算机技术的发展,传统中医诊断和现代计算机技术的结合成为了现代中医发展的一种趋势 。 中医问诊语料库的建立对实现传统中医问诊 的计算机化有着重要意义。本文介绍了中医问诊语料库建立的意义,语料库建立 、 初步
2、加工(分词, 属性 标注和词频统计) 和基于熟语料库的词频统计 的具体实现。 【 关 键 词 】 中医问诊 语料库 分词 标注 词频 中医问诊语料库的建立和初步加工 3 The Establishment And Primary Processing Of Language Database About Inquiry In Chinese Medicine 【 Abstract】 As the development of computer technolgy in modern society, modern Chinese Medicine followed the trend to c
3、ombinate the traditonal Chinese Medicine with modern computer technology. The establishment of corpus about inquiry in Chinese Medicine is very important to realize the computer-based diagnosis of traditional Chinese Medicine , this article introduces the significance of establishment of corpus abou
4、t inquiry in Chinese Medicine and detailed realization technique in establishment and primary processing of language database( segment of word , label of word attribute ) and Counting of frequency of word. 【 Keywords】 Inquiry in Chinese Medicine Corpus Segment of word Label of word attribute Frequen
5、cy of word 中医问诊语料库的建立和初步加工 4 目录 第一章 引言 .5 1.1 汉语语料库的发展现状 . 5 1.2 中医问诊语料库建立的必要性 . 5 1.3 中医诊断语料库的初步加工 . 6 1.4 基于中医诊断熟语料库的词频统计 . 6 第二章 中医问诊语料库建立和加工的技术知识 .6 2.1 语料分词 . 6 2.1.1 基于字符串匹配的分词算法 . 7 2.1.2 基于概率统计的分词方法 . 9 2.1.3 基于理解的分词方法 . 11 2.2 词频统计程序设计算法 . 11 2.2.1.逐字匹配算法 . 12 2.2.2.KMP 算法 . 12 2.2.3.Boyer_
6、Moore 算法 . 12 第三章 中医问诊语料库的建立和初步加工的具体实现 . 14 3.1 具体步骤 . 14 3.1.1 原始语料库的建立 . 14 3.1.2 对原始语料的分词和属性标注 . 14 3.1.3 基于“熟语料“的词频统计 . 15 3.2 词频统计程序的具体设计 . 16 3.2.1 程序界面 . 16 3.2.2 程序中涉及到的类和定义的函数 . 16 3.2.3 程序实现的具体流程 . 17 第四章 课题成果 . 21 第五章 结束语 . 21 致谢语 . 22 参考文献 . 23 中医问诊语料库的建立和初步加工 5 第一章 引言 1.1 汉语语料库的发展现状 语料库
7、是存储于计算机中并可利用计算机进行检索、查询、分析的语言素材的总体。基于语料库的分析方法是对传统的基于规则的分析语言的方法的一个重要补充。语料库具有 “ 大规模 ” 和 “ 真实 ” 这两个特点,因此是最理想的语 言知识资源,是直接服务于语言文字信息处理等领域的基础工程。 汉语语料库顾名思义就是 存 放汉语材料的仓库。 建立大型、国家级现代汉语语料库是推进我国信息化进程的基础工程。 近年来,随着我国经济的快速发展,科研经费的大量增加,汉语语料库的建设得到开展。 国家语委从 1991 年开始组织建立现代汉语语料库, 1993 年国务院批准的国家语委三定方案规定了建立国家级现代汉语语料库的职能。至
8、此,语料库的建立已经取得 较 大的成果, 逐步建立了数个国家级,具有较大应用价值的汉语语料库。例如, 由国家语言文字工作委员会主持,组织了语言学界和计算 机界的专家学者共同建立 的 国家语委现代汉语语料库 ,该语料库 按照通用性、描述性、实用性等原则系统地抽样选择了1919-1992 年的现代汉语语言材料 7000 万字,由人文与社会科学、自然科学及综合三个大类约 40 个小类组成 ,已经 于 2001 年底建成;由北京大学计算语言学研究所和 富士通公司联合开发加工的人民日报标注语料库,该语料库以 1998年全年 人民日报 的纯文本文件为对象,并对原语料库中的生语料进行分词和属 性标注。这些语
9、料库语料的建立之后,广泛地应用于各方面的科学研究,大大地推动了汉语自然语言处理技术的发展。 1.2 中医问诊语料库建立的必要性 大型国家级语料库的建立在相关的科学研究领域有着巨大的应用价值。但是,我们也应该看到中国汉语文化传统的丰富性,使得这些现有的通用语料库在某些较为的特殊的领域的应用受到了限制。 中医是中华民族灿烂文化的重要组成部分 , 几千年来为中华民族的繁荣昌盛做出了卓越的贡献 。在其漫长的发展过程中,中医问诊逐渐形成了自己一套独特的问诊方法,积累沉淀了一套丰富的 、 具有 浓郁的民族特色 的中医专有词语。 随着现代社会计算机技术的发展,传统中医诊断和现代计算机技术的结合成为了现代中医
10、发展的一种趋势 。如何使用现代汉语自然语言处理技术来实现传统的中医问诊计算机化成为现代计算机汉语自然语言处理技术应用的一个热点,而中医问诊语料库的建立和加工是其中一个不少缺少的部分。在现有通用的国家级语料库中,中医专有词语的出现频率显然是很有限的,有的甚至没有被收录,这就不能正确反映出中医专有词语在中医问诊过程中的出现频率。现有的中医问诊语料库寥寥无几,随着传统中医问诊和现代计算机汉语自然语言处理技术应用结合的日益密切,对中医问诊语料库的应用需求会越来越大。所以,建立一个中医中医问诊语料库的建立和初步加工 6 问诊语料库并对其加工和提取知识是有其应用价值的。 1.3 中医诊断语料库的初步加工
11、中医问诊语料库要成为名副其实的中医问诊语言知识库,它不能仅仅是所收集中医问诊语言的简单的样本集合,而要进行从词性 、 句法 、 语义等不同层次的加工,使得“生语料“变成“熟语料“,才能使知识获取成为可能。 对中医问诊语料库来讲,语料加工由浅入深要进行分词 、 词性 标注 、 句法 分析 和语义 分析 。 未经过加工的生语料库通过自动分词系统处理,成为经分词处理过的语料库;再经过词性标注系统加工,成为词性标注过的语料库;然后经过句法关系标注环境处理,成为带有句法标注的语料库;最后经过语义关系标注 环境,成为带 有 语义标注的语料库。 上述的每个阶段都是 产生新的有用的语言知识 的一个过程。 1.
12、 4 基于 中医诊断 熟 语料库的词频统计 中医问诊语料库 经过加工成为中医问诊语言知识库之后, 我们便可以从中提取有用的语言知识了 。 而词频统计就是 获取语言知识的很重要的一种方法 。 词频统计 分为基于“生语料“和“熟语料“的词频统计 。然而由于基于生语料的词频统计本身没有考虑到词语歧义的情 况,不能准确地反映出中医 专有词语在中医问诊过程中的出现频率,因而基于生语料的词频统计能提供的语言知识是极其有限的。只有先对生语料库进行分词、词 性标注形成熟语料库,再进行词频统计,这样才能准确地反映出中医 专有词语 在中医问诊过程中的出现频率。在这里,我们主要讨论的 是 基于熟语料库的词频统计。
13、第二章 中医问诊语料库建立和加工的技术知识 2.1 语料分词 中医问诊语料库和其他的汉语语料库一样,建立之后第一步的加工技术就是对语料进行分词。分词技术属于自然语言处理技术范畴,对于一句话,人可以通过自己的知识来明白哪些是词,哪些不是词,但如何让计算机也能理解?其处理中医问诊语料库的建立和初步加工 7 过程就是分词算法。 现有的汉语分词算法可分为三大类:基于字符串匹配的分词方法、基于概率统 计的分词方法和基于理解的分词方法 ,针对这些分词算法和面临的分词难点,下面对这些分词算法和分词难点进行简单的介绍。 2.1.1 基于字符串匹配的分词算法 这种方法又叫做机械分词方法,它是按照一定的策略将待分
14、 词 的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照扫描方向的不同,串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相 结合的一体化方法。最常用的机械分词方法主要是最大匹配法,包括正向最大匹配法和逆向最大匹配法: 1.基本过程: 1.1 正向最大匹配算法: 1).从被处理文本中的起点取出不超过词典最大长度的汉字串作为匹配字段; 2).在词典中查找该匹配字段; 3).如果找到该匹配字段,则切分出一条词,设长
15、度为 n,并后移 n 个字作为下一分词的起点,再转到步骤( 1); 4).如果未找到该匹配字段,则去除匹配字段的最后一个字,作为新的匹配字段,并转到步骤( 2) ; 1.2 逆向最大匹配算法: 1).从被处理文本中的终点逆向取出不超过词典 最大长度的汉字串作为匹配字段; 2).在词典中查找该匹配字段; 3).如果找到该匹配字段,则切分出一条词,设长度为 n,并前移 n 个字作为下一分词的起点,再转到步骤( 1); 4).如果未找到该匹配字段,则去除匹配字段的第一个字,作为新的匹配字段,并转到步骤( 2); 2.示例: 2.1 正向最大匹配法的例子 S1: “计算语言学课程是三个课时 “ S2:
16、 “ MaxLen: 5 1).S2=“; S1不为空,从 S1左边取出候选子串 W=“计算语言学 “; 2).查词表 ,“ 计算语言学 ” 在词表中,将 W加入到 S2 中, S2=“计算语言学 / “,将 W 从 S1中去掉,此时 S1=“课程是三个课时 “; 3).S1不为空,于是从 S1左边取出候选子串 W=“课程是三个 “; 4).查词表, W不在词表中,将 W最右边一个字去掉,得到 W=“课程是三 “; 5).查词表, W不在词表中,将 W最右边一个字去掉,得到 W=“课程是 “; 中医问诊语料库的建立和初步加工 8 6).查词表, W不在词表中,将 W最右边一个字去掉,得到 W=
17、“课程 “; 7).查词表, W在词表中,将 W加入到 S2 中, S2=“计算语言学 / 课程 / “,并将 W从 S1 中去掉,此时 S1=“是三个课时 “; 8).S1不为空,于是从 S1左边取出候选子串 W=“是三个课时 “; 9).查词表, W不在词表中,将 W最右边一个字去掉,得到 W=“是三个课 “; 10).查词表, W 不在词表中,将 W最右边一个字去掉,得到 W=“是三个 “; 11).查词表, W 不在词表中,将 W最右边一个字去掉,得到 W=“是三 “; 12).查词表, W 不在词表中,将 W最右边一个字去掉,得到 W=“ 是 “,这时 W 是单字,将 W加入到 S2
18、 中, S2=“计算语言学 / 课程 / 是 / “,并将 W 从 S1 中去掉,此时 S1=“三个课时 “; 13).S1不为空,从 S1左边取出候选子串 W=“三个课时 “; 14).查词表, W 不在词表中,将 W最右边一个字去掉,得到 W=“三个课 “; 15).查词表, W 不在词表中,将 W最右边一个字去掉,得到 W=“三个 “; 16).查词表, W不在词表中,将 W最右边一个字去掉,得到 W=“三 “,这时W 是单字 ,将 W 加入到 S2 中, S2=“计算语言学 / 课程 / 是 / 三 / “,并将 W从 S1 中掉,此时 S1=“个课时 “; 17).S1 不为空,从
19、S1 左边取出候选子串 W=“个课时 “.查词表, W 不在词表中,将 W 最右边一个字去掉,得到 W=“个课 “; 18).查词表, W 不在词表中,将 W最右边一个字 去掉,得到 W=“个课 “; 19).查词表, W不在词表中,将 W最右边一个字去掉,得到 W=“个 “,这时W是单字,将 W 加入到 S2 中, S2=“ 计算语言学 / 课程 / 是 / 三 / 个 / “,并将 W 从 S1中去掉,此时 S1=“课时 “; 20).S1不为空,从 S1左边取出候选子串 W=“课时 “; 21).查词表, W 在词表中,将 W 加入到 S2 中, S2=“ 计算语言学 / 课程 / 是
20、/ 三 / 个 / 课时 / “,并将 W从 S1 中去掉,此时 S1=“; 22).S1为空,输出 S2作为分词结果,分词过程结束。 2.2 逆向 最大匹配法的例子 S1: “他考上了研究生 “ S2: “ MaxLen: 5 1).S2=“; S1不为空,从 S1右边逆向取出候选子串 W=“上了研究生 “; 2).查词表, W不在词表中,将 W最左边一个字去掉,得到 W=“了研究生 “; 3).查词表, W不在词表中,将 W最左边一个字去掉,得到 W=“研究生 “; 4).查词表, W在词表中,将 W加入到 S2中, S2=“研究生 / “,并将 W从S1中去掉,此时 S1=“他考上了 “
21、; 5).S1不为空,于是从 S1右边逆向取出候选子串 W=“他考上了 “; 6).查词表, W不在词表中 ,将 W最左边一个字去掉,得到 W=“考上了 “; 7).查词表, W不在词表中,将 W最左边一个字去掉,得到 W=“上了 “; 8).查词表, W不在词表中,将 W最左边一个字去掉,得到 W=“了 “; 9).查词表, W 在词表中,将 W 加入到 S2 中, S2=“了 / 研究生 / “,并将 W 从 S1中去掉,此时 S1=“他考上 “; 10).S1不为空,从 S1右边逆向取出候选子串 W=“他考上 “; 11).查词表, W 不在词表中,将 W最左边一个字去掉,得到 W=“考
22、上 “; 12).查词表, W 不在词表中,将 W最左边一个字去掉,得到 W=上 “; 中医问诊语料库的建立和初步加工 9 13).查词表, W在词表中,将 W加入到 S2中, S2=“上 / 了 / 研究生 / “,并将 W 从 S1中去掉,此时 S1=“他考 “; 14).S1不为空,从 S1左边逆向取出候选子串 W=“他考 “; 15).查词表, W 不在词表中,将 W最左边一个字去掉,得到 W=“考 “; 16).查词表, W 在词表中,将 W 加入到 S2 中, S2=“考 / 上 / 了 / 研究生 / “,并将 W 从 S1中去掉,此时 S1=“他 “; 17).S1不为空,从
23、S1右边逆向取出候选子串 W=“他 “; 18).查词表, W在词表中,将 W加入到 S2 中, S2=“他 / 考 / 上 / 了 / 研究生 / “, 并将 W 从 S1 中去掉,此时 S1=“; 19).S1为空,输出 S2作为分词结果,分词过程结束。 3.所面临的问题: 3.1 最大词长的确定 词长过短,长词就会被切错,例如: “中华人民共和国 “;词长过长,程序运行效率低。 3.2 掩盖了分词歧义 1).交集型歧义 如果 AB 和 BC 都是词典中的词,那么如果待切分字串中包含 “ABC“这个子串,就必然会造成两种可能的切分: “AB/ C/ “ 和 “A/ BC/ “。这种类型的歧
24、义就是交集型歧义。比如 “有意见分歧 “,正向最大匹配法切 分结果为: “有意 / 见 / 分歧 / “;逆向最大匹配法切分结果为:“有 / 意见 / 分歧 / “。 2).组合型歧义 如果 AB 和 A、 B 都是词典中的词,那么如果待切分字串中包含 “AB“这个子串,就必然会造成两种可能的切分: “AB/ “ 和 “A/ B/ “。这种类型的歧义就是组合型歧义。比如 “个人 “就可能造成组合型歧义,我 / 个人 / 和三 / 个 / 人 / 。 在实际得分词过程中 经常将上述两种方法相互组合,例如,将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。一般说来,逆向匹配的切分精 度略
25、高于正向匹配,遇到的歧义现象也较少。统计结果表明,单纯使用正向最大匹配的错误率为 1/169,单纯使用逆向最大匹配的错误率为 1/245。但这种精度还远远不能满足实际的需要。实际使用的分词系统,都是把机械分词作为一种初分手段,还需通过利用各种其它的语言信息来进一步提高切分的准确率。一种方法是改进扫描方式,称为特征扫描或标志切分,优先在待分析字符串中识别和切分出一些带有明显特征的词,以这些词作为断点,可将原字符串分为较小的串再来进机械分词,从而减少匹配的错误率。另一种方法是将分词和词类标注结合起来,利用丰富的 词类信息对分词决策提供帮助,并且在标注过程中又反过来对分词结果进行检验、调整,从而极大
26、地提高切分的准确率。 2.1.2 基于概率统计的分词方法 从形式上看,词是稳定的字的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好的反映成词的可信度。可以对语料中相邻共现的各个字的组合的频度进行统计,中医问诊语料库的建立和初步加工 10 计算它们的互现信息。定义两个字的互现信息,计算两个汉字 X、 Y 的相邻共现概率。互现信息体现了汉字之间结合关系的紧密程度。当紧密程度高于某一个阈值时,便可认 为此字组可能构成了一个词。这种方法只需对语料中的字组频度进行统计,不需要切分词典,因而又叫做无词典分词法或统计取词方法。 1.概率统计公式
27、: P(W/S) = P(S/W) * P(W)/P(S) = P(W); P(W) = P(W1, W2, Wi) = P(W1)*P(W2)* *P(Wi); P(Wi) = Wi 在语料库中出现的次数 n/语料库中的总词数 N 累计概率: P (Wi) = P (Wi-1) * P(Wi) 例如:有意见分歧 P (意见 ) = P (有 ) * P(意见 ) P (有 ) = P(有 ) 2.基本过程: 2.1左邻词 假定对字串从左到右进行扫描,可以得到 W1 ,W2 , , Wi-1 ,Wi , 等若干候选词,如果 Wi-1的尾字跟 Wi 的首字邻接,就称 Wi-1为 Wi 的左邻词。
28、比如上面例中,候选词 “ 有 ” 就是候选词 “ 意见 ” 的左邻词, “ 意见 ” 和 “ 见 ” 都是 “ 分歧 ” 的左邻词。字串最左边的词没有左邻词。 2.2 最佳左邻词 如果某个候选词 Wi 有若干个左邻词 Wj ,Wk , 等等,其中累计概率最大的候选词称为 Wi 的最佳左邻词。比如候选词 “ 意见 ” 只有一个左邻词“ 有 ” ,因此, “ 有 ” 同时也就是 “ 意见 ” 的最佳左邻词;候选词 “ 分歧 ”有两个左邻词 “ 意见 ” 和 “ 见 ” ,其中 “ 意见 ” 的累计概率大于 “ 见 ” 累计概率,因此 “ 意见 ” 是 “ 分歧 ” 的最佳左邻词。 2.3 算法 1
29、).对一个待分词的字串 S,按照从左到右的顺序取出全部候选W1,W2, , Wi, , Wn; 2).到词典中查出每个候选词 的概率值 P(Wi),并记录每个候选词的全部左 邻 词; 3).按照公式 1 计算每个候选词的累计概率,同时比较得到每个候选词的最佳左邻词; 4).如果当前词 Wn是字串 S 的尾词,且累计概率 P(Wn)最大,则 Wn 就是S的终点词; 5).从 Wn 开始,按照从右到左顺序,依次将每个词的最佳左邻词输出,即为 S 的分词结果。 3.示例: S = 有意见分歧,运用概率统计的方法分词过程如下: 1).对 “ 有意见分歧 ” ,从左到右进行一遍扫描,得到全部候选词: “ 有 ” ,“ 有意 ” , “ 意见 ” , “ 见 ” , “ 分歧 ” ; 2).对每个候选词,记录下它的概率值,并将累计概率赋初值为 0; 3).顺次计算各个候选词的累计概率值,同时记录每个候选词的最佳左邻词: P(有 ) = P(有 ), P(有意 ) = P(有意 ), P(意见 ) = P(有 ) P(意见 ),( “ 意见 ” 的最佳左 邻词为 “ 有 ” )