本发明涉及自然语言处理领域医学文献的分词方法,特别是面向中医古籍文献的分词方法和装置。
背景技术:
中文分词是中文文本处理的一个基本步骤。不同于英文等文字,中文句子中不使用空格进行单词与单词之间的划分,所以在进行文本分类、信息检索、信息过滤、文献自动标引、摘要自动生成等中文信息处理的任务时,中文分词作为基础步骤具有关键的意义。中文分词结果的正确性将直接影响后续任务的正确性。
在中医领域,从原始社会诞生并不断发展变化的中医学积累了大量的医学文献古籍著作。这些文献著作数量庞大、内容繁杂,种类多样,包括精气学说、阴阳五行学说、气血津液、藏象、经络、体质、病因、发病、病机、治则、养生等。它们中大多使用文言文或古人的口语、歌诀进行记载,书写方式,成书年代都有所不同,与现代汉语有着较大的区别。并且,包含很多中医领域的专有名词和专业术语。合理的对中医古籍文献进行分词是将中医知识结构化的基础,但是目前并没有专门针对中医领域的分词器,而通用领域的分词器不能很好的解决在中医古籍文献上的分词任务。
技术实现要素:
有鉴于此,本发明实施例提供一种面向中医古籍文献的分词方法、装置,能够提高中医领域文献分词的正确率。
一种面向中医古籍文献的分词方法,包括:
对中医领域的古籍文献进行预处理,生成训练语言模型的语料
对所述语料进行训练,生成语言模型;
使用所述语言模型对所述古籍文献进行无监督分词,生成初步分词结果;
根据词性关系、句式的固定搭配以及语言学知识,对所述初步分词结果进行总结,整理出切分规则,形成规则文件;
根据所述规则文件中的规则,对所述初步分词结果进行第一次修正,生成第一次修正结果。
所述方法还包括:
获取根据所述古籍文献整理出的中医领域术语,作为词表;
使用所述词表,对所述第一次修正结果进行修正,得到最终的分词结果。
所述对所述古籍文献进行预处理的步骤包括:
获取所述古籍文献的原始文本,从所述原始文本中删除所述古籍文献的目录,并删除含有不能使用utf-8表示的字符的句子,生成清理后的文本;
在清理后的文本中的每一个字后面添加一个空格,作为训练语言模型的语料。
所述使用所述语言模型对所述古籍文献进行无监督分词的步骤包括:
将字的转移状态划分为四种:第一种为:单字词或者多字词的首字,标记为a;第二种为:多字词的第二字,标记为b;第三种为:多字词的第三字,标记为c;第四种为:多字词的其余部分,标记为d;
其中,单字词的后面只能是单字词或多字词的词首,单字词的首字后面只能是多字词的第二字,多字词的第二字后面只能是多字词的第三字或单字词或多字词的首字,多字词的第三字后面只能是多字词的其余部分或单字词或多字词的首字,多字词的其余部分后面能是单字词或多字词的首字或多字词的其余部分,除上述转移状态,其余转移概率为零;
综上,非零的状态转移概率有8种,即:
p(a|a),p(b|a),p(c|b),p(a|b),p(a|c),p(d|c),p(a|d),p(d|d);
其中,p(a|a)表示在前一个字是单字词的条件下,后一个字是单字词或多字词的首字的条件概率,p(b|a)表示在前一个字是多字词的首字的条件下,后一个字是多字词的第二字的条件概率,p(c|b)表示在前一个字是多字词的第二字的条件下,后一个字是多字词的第三字的条件概率,p(a|b)表示在前一个字是多字词的第二字的条件下,后一个字是单字词或多字词的首字的条件概率,p(a|c)表示在前一个字是多字词的第三字的条件下,后一个字是单字词或多字词的首字的条件概率,p(d|c)表示在前一个字是多字词的第三字的条件下,后一个字是多字词的其余部分的条件概率,p(a|d)表示在前一个字是多字词的其余部分的条件下,后一个字是单字词或多字词的首字的条件概率,p(d|d)表示在前一个字是多字词的其余部分的条件下,后一个字是多字词的其余部分的条件概率;
设置不同的转移概率进行实验对比,得到转移概率;
p(a|a)=0.96,p(b|a)=0.2,p(c|b)=0.009,p(a|b)=0.9,p(a|c)=1,p(d|c)=0.005,
p(a|d)=1,p(d|d)=0.0001
使用所述语言模型计算条件概率;
使用动态规划的方法找到最优路径,即条件概率最大的路径,作为切分结果,得到最初的分词结果。
所述使用所述语言模型计算条件概率的步骤包括:
p(w)=p(z1)p(z2|z1)p(z3|z2z1)...p(zk|zk-1...z2z1)(1)
其中,词w是由k个字组成的词,z1,z2,…zk分别是词w的第1,2…k个字,词w是一个词的可能性,即词w的存在概率p(w)可以转换为组成的每个字的概率。其中,每个字的概率通过使用在训练语言模型的文本中该字出现的次数除以总字数来计算。
所述根据词性关系、句式的固定搭配以及语言学知识,对所述初步分词结果进行总结,整理出切分规则,形成规则文件的步骤包括:
按照拼音顺序对所述初步分词结果进行排序;
依次对排序的所述初步分词结果进行处理;所述处理具体为:
对于汉字和标点符号被分割成为一个词语的结果,根据所述标点符号编写规则文件;
对于汉字和汉字被分割成为一个词语的结果,对相同首字的单词,根据词性和语言学知识进行判断,当为动词+名词的形式时,拆分为动词、名词两个词语;为形容词+名词的形式时,拆分为形容词、名词两个词语。根据所述动词词语编写规则文件;
对于汉字和汉字被分割成为一个词语的结果,当为前两字相同的单词时,根据词性和语言学知识进行判断,比如为当为动词+名词的形式时,拆分为动词、名词两个词语;为形容词+名词的形式时,拆分为形容词、名词两个词语。根据相同的所述前两字编写规则文件;
对于汉字和汉字被分割成为一个词语的结果,整理具有相同结尾字的单词,根据词性和语言学知识进行判断,比如为当为动词+名词的形式时,拆分为动词、名词两个词语;为形容词+名词的形式时,拆分为形容词、名词两个词语。根据所述结尾字编写规则文件。
所述根据词性关系、句式的固定搭配以及语言学知识,对所述初步分词结果进行总结,整理出切分规则,形成规则文件的步骤还包括:
统计所述初步分词结果中的全部词语以及每个词语出现的次数;
按照次数从高到低的进行排序,获取前预定数量的词语;
判断前预定数量的所述词语是否在预先设定的词表中;
如果在,则根据所述词语编制规则文件。
所述使用所述词表,对所述第一次修正结果进行修正,得到最终的分词结果的步骤包括:
在所述原始文本中寻找所述词表中的一词,作为待修正词;
记录所述待修正词在所述原始文本中的位置;
根据记录的所述位置,找到所述第一次修正后的所述待修正词的分词结果;
判断所述分词结果与所述词表中的词语是否一致;
如果不一致,则按照词表对所述所述待修正词的分词结果进行修改;如果一致,则保留分词结果;
依次对所述第一次修正结果进行词表修正,得到最终的分词结果。
所述使用所述词表,对所述第一次修正结果进行修正,得到最终的分词结果的步骤还包括:
当所述第一词既是所述词表中的词又是所述词表中一个词的子词时,进行长短词消歧。
一种面向中医古籍文献的分词装置,其特征在于,包括:
预处理模块,对中医领域的古籍文献进行预处理,生成训练语言模型的语料
训练模块,对所述语料进行训练,生成语言模型;
分词模块,使用所述语言模型对所述古籍文献进行无监督分词,生成初步分词结果;
规则建立模块,根据词性关系、句式的固定搭配以及语言学知识,对所述初步分词结果进行总结,整理出切分规则,形成规则文件;
第一修正模块,根据所述规则文件中的规则,对所述初步分词结果进行第一次修正,生成第一次修正结果。
所述的装置,还包括:
获取模块,获取根据所述古籍文献整理出的中医领域术语,作为词表;
第二修正模块,使用所述词表,对所述第一次修正结果进行修正,得到最终的分词结果。
上述实施例中,特别针对中医领域设计,提高了中医领域分词的正确性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明的实施例面向中医古籍文献的分词方法的流程示意图;
图2为本发明的面向中医古籍文献的分词装置的连接示意图;
图3为本发明的中医古籍文献分词方法的流程图;
图4为本发明的训练语料预处理结果;
图5为本发明的规则文件;
图6为本发明的分词结果。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
如图1所示,为本发明所述的一种面向中医古籍文献的分词方法,包括:
步骤101,对中医领域的古籍文献进行预处理,生成训练语言模型的语料;其中,所述对所述古籍文献进行预处理的步骤包括:获取所述古籍文献的原始文本,从所述原始文本中删除所述古籍文献的目录,并删除含有不能使用utf-8表示的字符的句子,生成清理后的文本;在清理后的文本中的每一个字后面添加一个空格,作为训练语言模型的语料。
步骤102,对所述语料进行训练,生成语言模型;
步骤103,使用所述语言模型对所述古籍文献进行无监督分词,生成初步分词结果;
所述使用所述语言模型对所述古籍文献进行无监督分词的步骤包括:
将字的转移状态划分为四种:第一种为:单字词或者多字词的首字,标记为a;第二种为:多字词的第二字,标记为b;第三种为:多字词的第三字,标记为c;第四种为:多字词的其余部分,标记为d;
其中,单字词的后面只能是单字词或多字词的词首,单字词的首字后面只能是多字词的第二字,多字词的第二字后面只能是多字词的第三字或单字词或多字词的首字,多字词的第三字后面只能是多字词的其余部分或单字词或多字词的首字,多字词的其余部分后面能是单字词或多字词的首字或多字词的其余部分,除上述转移状态,其余转移概率为零;
综上,非零的状态转移概率有8种,即:
p(a|a),p(b|a),p(c|b),p(a|b),p(a|c),p(d|c),p(a|d),p(d|d);
其中,p(a|a)表示在前一个字是单字词的条件下,后一个字是单字词或多字词的首字的条件概率,p(b|a)表示在前一个字是多字词的首字的条件下,后一个字是多字词的第二字的条件概率,p(c|b)表示在前一个字是多字词的第二字的条件下,后一个字是多字词的第三字的条件概率,p(a|b)表示在前一个字是多字词的第二字的条件下,后一个字是单字词或多字词的首字的条件概率,p(a|c)表示在前一个字是多字词的第三字的条件下,后一个字是单字词或多字词的首字的条件概率,p(d|c)表示在前一个字是多字词的第三字的条件下,后一个字是多字词的其余部分的条件概率,p(a|d)表示在前一个字是多字词的其余部分的条件下,后一个字是单字词或多字词的首字的条件概率,p(d|d)表示在前一个字是多字词的其余部分的条件下,后一个字是多字词的其余部分的条件概率。
设置不同的转移概率进行实验对比,得到转移概率;
p(a|a)=0.96,p(b|a)=0.2,p(c|b)=0.009,p(a|b)=0.9,p(a|c)=1,p(d|c)=0.005,
p(a|d)=1,p(d|d)=0.0001
使用所述语言模型计算条件概率;
使用动态规划的方法找到最优路径,即条件概率最大的路径,作为切分结果,得到最初的分词结果。
所述使用所述语言模型计算条件概率的步骤包括:
p(w)=p(z1)p(z2|z1)p(z3|z2z1)...p(zk|zk-1...z2z1)(1)
其中,词w是由k个字组成的词,z1,z2,…zk分别是词w的第1,2…k个字,词w是一个词的可能性,即词w的存在概率p(w)可以转换为组成的每个字的概率。其中,每个字的概率通过使用在训练语言模型的文本中该字出现的次数除以总字数来计算。
步骤104,根据词性关系、句式的固定搭配以及语言学知识,对所述初步分词结果进行总结,整理出切分规则,形成规则文件;
所述根据词性关系、句式的固定搭配以及语言学知识,对所述初步分词结果进行总结,整理出切分规则,形成规则文件的步骤包括:
按照拼音顺序对所述初步分词结果进行排序;
依次对排序的所述初步分词结果进行处理;所述处理具体为:
对于汉字和标点符号被分割成为一个词语的结果,根据所述标点符号编写规则文件;
对于汉字和汉字被分割成为一个词语的结果,对相同首字的单词,根据词性和语言学知识进行判断,当为动词+名词的形式时,拆分为动词、名词两个词语;为形容词+名词的形式时,拆分为形容词、名词两个词语。根据所述动词词语编写规则文件;
对于汉字和汉字被分割成为一个词语的结果,当为前两字相同的单词时,根据词性和语言学知识进行判断,比如为当为动词+名词的形式时,拆分为动词、名词两个词语;为形容词+名词的形式时,拆分为形容词、名词两个词语。根据相同的所述前两字编写规则文件;
对于汉字和汉字被分割成为一个词语的结果,整理具有相同结尾字的单词,根据词性和语言学知识进行判断,比如为当为动词+名词的形式时,拆分为动词、名词两个词语;为形容词+名词的形式时,拆分为形容词、名词两个词语。根据所述结尾字编写规则文件。
所述根据词性关系、句式的固定搭配以及语言学知识,对所述初步分词结果进行总结,整理出切分规则,形成规则文件的步骤还包括:
统计所述初步分词结果中的全部词语以及每个词语出现的次数;
按照次数从高到低的进行排序,获取前预定数量的词语;
判断前预定数量的所述词语是否在预先设定的词表中;
如果在,则根据所述词语编制规则文件。
步骤105,根据所述规则文件中的规则,对所述初步分词结果进行第一次修正,生成第一次修正结果。
所述方法还包括:
步骤106,获取根据所述古籍文献整理出的中医领域术语,作为词表;
步骤107,使用所述词表,对所述第一次修正结果进行修正,得到最终的分词结果。该步骤包括:
在所述原始文本中寻找所述词表中的一词,作为待修正词;
记录所述待修正词在所述原始文本中的位置;
根据记录的所述位置,找到所述第一次修正后的所述待修正词的分词结果;
判断所述分词结果与所述词表中的词语是否一致;
如果不一致,则按照词表对所述所述待修正词的分词结果进行修改;如果一致,则保留分词结果;
依次对所述第一次修正结果进行词表修正,得到最终的分词结果。
该步骤还可以包括:
当所述第一词既是所述词表中的词又是所述词表中一个词的子词时,进行长短词消歧。
如图2所示,为本发明所述的一种面向中医古籍文献的分词装置,包括:
预处理模块21,对中医领域的古籍文献进行预处理,生成训练语言模型的语料
训练模块22,对所述语料进行训练,生成语言模型;
分词模块23,使用所述语言模型对所述古籍文献进行无监督分词,生成初步分词结果;
规则建立模块24,根据词性关系、句式的固定搭配以及语言学知识,对所述初步分词结果进行总结,整理出切分规则,形成规则文件;
第一修正模块25,根据所述规则文件中的规则,对所述初步分词结果进行第一次修正,生成第一次修正结果。
所述的装置,还包括:
获取模块26,获取根据所述古籍文献整理出的中医领域术语,作为词表;
第二修正模块27,使用所述词表,对所述第一次修正结果进行修正,得到最终的分词结果。
以下描述本发明的应用场景。本发明为了解决中医领域古籍文献的分词问题,而提出来的一种基于中医古籍文献的分词方法。具体实施步骤如下:
步骤一:获取中医领域相关的古籍文献,作为训练语言模型的语料,整理中医领域特有术语作为词表。词表每一行一个词,存储格式为txt。
步骤二:对文献进行预处理,使用kenlm工具,训练语言模型。
其中预处理包括:
(1)删除目录,删除含有不能使用utf-8表示的特殊字符的句子(这里的句子以句号,感叹号,问号进行划分);
(2)在清理后的文本中的每一个字后面添加一个空格,作为训练字语言模型的语料。
步骤三:使用语言模型对中医领域的古籍文献进行初步的无监督分词。
在中文中,长度大于四字的词比较少,所以在本专利中,将字的状态划分为四种:单字词或者多字词的首字,标记为a、多字词的第二字,标记为b、多字词的第三字,标记为c和多字词的其余部分,标记为d。其中单字词的后面只能是单字词或多字词的词首,单字词的首字后面只能是多字词的第二字,多字词的第二字后面只能是多字词的第三字或单字词或多字词的首字,多字词的第三字后面只能是多字词的其余部分或单字词或多字词的首字,多字词的其余部分后面能是单字词或多字词的首字或多字词的其余部分,除上述转移状态,其余转移概率为零。综上,非零的转移概率有8种,即:
p(a|a),p(b|a),p(c|b),p(a|b),p(a|c),p(d|c),p(a|d),p(d|d)。
根据古文长词较少,具有完整语义的单字比较多的情况,通过设置不同的转移概率进行实验对比,得到转移概率
p(a|a)=0.96,p(b|a)=0.2,p(c|b)=0.009,p(a|b)=0.9,p(a|c)=1,p(d|c)=0.005,
p(a|d)=1,p(d|d)=0.0001
使用步骤二中得到的语言模型计算条件概率,如公式(1)所示。其中词w是由k个字组成的词,词w的概率可以转换为组成的字的概率。使用动态规划的方法找到最优路径,即概率最大的路径,作为切分结果,得到最初的分词结果。
p(w)=p(z1)p(z2|z1)p(z3|z2z1)...p(zk|zk-1...z2z1)(1)
步骤四:根据词性关系、句式的固定搭配以及语言学知识对步骤三中的初步分词结果进行总结,整理出切分规则,形成规则文件。其中总结形成规则文件的方法具体如下:
(1)统计由步骤三得到的分词结果中的全部词语以及每个词语出现的次数;
(2)按照拼音顺序对统计结果进行排序;
(3)对于汉字和标点符号被分割成为一个词语的结果,将该标点符号作为规则写入规则文件;
(4)对于汉字和汉字被分割成为一个词语的结果,首先整理出相同首字的单词,然后根据词性和语言学知识进行判断,如在一般情况下,动词+名词的形式,一般都应该拆分为动词,名词两个词语,则将该动词词语添加进规则文件;
(5)整理出前两字相同的单词,根据词性和语言学知识进行判断,添加相应的词语进规则文件;
(6)整理具有相同结尾字的单词,根据词性和语言学知识进行判断,添加相应的词语进规则文件。
(7)再按照频率从高到低进行排序,对高频词进行判断。
规则文件存储格式为txt,每行写一条规则。具体说明如下表1所示:
表1规则文件
步骤五:根据规则文件中的规则对步骤三中的初步分词结果进行第一次修正;
步骤六:使用词表对步骤五中的第一次修正结果进行修正,详细的修正方法如下:
(1)在原始文本中寻找词表中出现的词,并记下出现的位置;
(2)如果出现一个词既是词表中的词又是词表中某一个词的子词的时候,进行长短词消歧,确定此处应该使用的是哪一个词表中的词;
(3)根据(1)记录的位置找到步骤五经过一次修正得到的分词结果;
(4)如果分词结果与词表不一致,即将词表中的一个词分割成了多个词或者分割界限不正确,将分词结果按照词表进行合并修改;如果一致,则保留结果;
(5)经过词表修正后得到最终的分词结果。
本发明的优点在于:
在现有的分词工具中,没有针对中文古文特点进行分词的分词器,也缺少专门针对中医领域的分词器。在表达方式上面,中文古文和现代汉语之间有着较大的差别,比如现代汉语一般使用“呢”、“吗”、“呀”等作为语气词,但是在古文中的语气词一般为“之”、“乎”、“者”、“也”;且相对于现代汉语,古文中有更多的单字能够表示出完整的语义。这些都导致了现有的分词器在古文分词任务的上频频出现的错误结果。而且在中医古籍文献中,有大量的药名方剂症状描写,这些中医领域特有的表述方法很难在通用领域上见到,也就导致了目前通用领域上的分词器不能很好的解决中医古籍上的分词任务。本发明通过使用无监督的方法,训练了专门应用于中医古籍文献的分词模型,能够很好的解决中医古籍文献的分词任务。而且采用无监督的方法,节省了人工标注的人力和时间成本。这种方法很容易扩展到其他领域的古文文献上使用,通过更改训练模型的数据集和相关的领域的词表,就可以将本文发明的分词器应用于其他领域。
以下一篇中医古籍文献为例,说明中医古籍文献的分词方法,如图3所示。
第一,获取中医古籍文献,作为训练语言模型的语料。整理中医领域特有术语作为词表,如表1所示。
表1:中医领域特有术语词表
第二,对训练语料进行预处理,预处理结果如图4所示。使用kenlm工具训练语言模型,其中gram的参数设置为4。
第三,使用步骤二训练的语言模型对中医领域的古籍文献进行无监督分词。词与词之间通过空格隔开。
第四,整理总结出初次的分词结果。首先按照拼音进行排序,将符号和汉字分割成一个词的这种结果进行分割。比如在分词结果中出现了“,茯苓”,在规则文件中添加“,|*”。“*”表示所有字符,即一旦出现“,”和任意字符相连的情况都进行分割。接下来将首字相同的单词全部找出来,根据语言学常识比如“动词+名词”这种组合一般都应该分割成两个单词,比如“吃温酒”,“吃盐”,“吃热物”等以“吃”字为字首的单词,在规则文件中添加“吃”字的规则,“吃|*”。同理,整理开头两字相同的词和结尾单字相同的词,并在规则问价中添加相应的规则。再将初次的分词结果按照词频从高到低进行排序,对高频词进行检查,需要切分的将相应规则添加到规则文件中。
第五,使用规则文件中的规则对初次分词结果进行修正。规则文件如图5所示。
第六,使用词表对第五步得到的结果进行修正。
首先,在原始未分词的中医文献中找到词表中的词,并记录下位置。
然后,在使用规则修正过的分词结果中找到词表的词。
如果此处的分词结果是词表中的词不一致,将此处的结果按照词表中进行修正。比如原始中医文献中有一句话为“加减六味汤治遗尿,虚人多有此证。”若在使用规则修正过的分词结果为“加减六味汤治遗尿,虚人多有此证。”但是加减六味汤是词表中的词,是一个中医方名,这种情况,将会在最终的分词结果中将“加减六味汤”合并成为一个词。最终的分词结果为“加减六味汤治遗尿,虚人多有此证。”分词结果的形式如图6所示。
为了描述的方便,描述以上装置是以功能分为各种单元/模块分别描述。当然,在实施本发明时可以把各单元/模块的功能在同一个或多个软件和/或硬件中实现。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。