1.一种基于规则和词典的地铁设计规范中主体识别方法,其特征在于,按照以下步骤实施:步骤1,利用词典文件构建名词哈希词典索引;
词典文件是从IFC实体类得到,构建名词哈希词典索引采用hash_map数据结构;
步骤2,将待处理《地铁设计规范》文本作为输入文本S1;
步骤3,对输入文本S1进行处理,去除中英文标点符号,生成句子集合S1’;
步骤4,对步骤3得到的句子集合S1’进行逆向最大匹配算法处理,生成第一结果集S2;
步骤5,对步骤3得到的句子集合S1’进行正向最大匹配算法处理,生成第二结果集S3;
步骤6,对步骤4得到的第一结果集S2、步骤5得到的第二结果集S3分别进行规则集匹配,生成地铁设计规范中名词的最终结果集S4,输出该最终结果集S4。
2.根据权利要求1所述的基于规则和词典的地铁设计规范中主体识别方法,其特征在于:所述的步骤3中,具体过程是,将输入文本S1存入数组S1[]中,设定S1[0]为第一个字符;先根据ASCII码值对输入文本S1中的英文标点符号进行识别,并添加预定义的分隔符“/”,初步对输入文本S1进行划分,并以英文标点符号作为划分结点将输入文本S1划分为多个部分;然后根据汉字GB2312编码利用高低区位码进行再次识别,并进行再次划分,并以中文符号作为划分结点,并添加分隔符“/”,最终生成句子集合S1’。
3.根据权利要求2所述的基于规则和词典的地铁设计规范中主体识别方法,其特征在于:所述的步骤4中,逆向最大匹配算法的具体过程如下:
4.1)在经步骤3处理的句子集合S1’中,将句子集合S1’中的句子按照从前往后的顺序,从第一个划分点处获取一个句子;
4.2)若步骤4.1)中获取的一个句子长度小于预设定的最大词长n,n即名词哈希词典中最长词的长度,则将该句作为匹配字段w,执行步骤4.3);
若大于或者等于最大词长n,则从该句的最右侧开始,取最大词长长度的字符串作为匹配字段w,执行步骤4.3);
4.3)查找步骤1中的词典文件,根据哈希索引匹配步骤4.2)中所得的匹配字段w,判断其是否在名词哈希词典中,若匹配成功,则添加分隔符“/”,输出至第一结果集S2中,并将匹配字段w从句子中剔除;
再将剩余句子重复步骤4.2);若不存在,则执行步骤4.4);
4.4)将匹配字段w的最左侧字剔除,用剩下的n-1个字组成的字段作为新的匹配字段w,反复执行步骤4.2);若剔除至单个字还未匹配成功,则添加分隔符“/”并将该字从句子中剔除,直至句子为空;
4.5)对一个句子处理完成后,该句子即从句子集合S1’中剔除,在剩余的句子集合S1’中,按照从前往后的顺序,从第一个划分点处获取一个新句子;
4.6)重复执行步骤4.2)~步骤4.5),直至句子集合S1’为空,最终输出第一结果集S2。
4.根据权利要求3所述的基于规则和词典的地铁设计规范中主体识别方法,其特征在于:所述的步骤5中,正向最大匹配算法的具体过程如下:
5.1)在经步骤3处理得到的句子集合S1’中,将句子集合S1’中句子按照从前往后的顺序,从第一个划分点处获取一个句子;
5.2)若步骤5.1)中获取的一个句子长度小于预设定的最大词长n,则将该句作为匹配字段w,执行步骤5.3);若大于或者等于最大词长n,则从该句的最左侧开始,取最大词长长度的字符串作为匹配字段w,执行步骤5.3);
5.3)查找步骤1中的词典文件,根据名词哈希词典索引匹配步骤5.2)中所得匹配字段w,判断其是否在名词哈希词典中,若匹配成功,则添加分隔符“/”,输出至S3中,并将匹配字段w从句子中去除;
再将剩余句子重复步骤5.2);若不存在,则执行步骤5.4);
5.4)将匹配字段w的最右侧字剔除,用剩下的n-1个字组成的字段作为新的匹配字段w,反复执行步骤5.2;若剔除至单个字还未匹配成功,则添加分隔符“/”并将该字从句子中剔除,直至句子为空;
5.5)对一个句子处理完成后,该句子即从句子集合S1’中剔除,在剩余的句子集合S1’文本中,按照从前往后的顺序,从第一个划分点处获取一个新句子;
5.6)重复执行步骤5.2)~步骤5.5),直至句子集合S1’为空,最终输出第二结果集S3。
5.根据权利要求4所述的基于规则和词典的地铁设计规范中主体识别方法,其特征在于:所述的步骤6中,具体过程如下:
6.1)读取第一结果集S2、第二结果集S3,将第一结果集S2、第二结果集S3分别存入数组S2[]、S3[]中,设定S2[0]、S3[0]均为第一个字符,再将S2[]、S3[]数组中的分隔符所在位置的下标分别存入数组a[]、b[]中;
6.2)循环遍历数组a[]、b[],判断a[]、b[]中的相同下标下的对应的数组元素是否相同,若所有相同下标下的对应数组元素均相同,则执行步骤6.3);
若a[]、b[]两个数组中相同下标下的对应数组元素出现不同,则执行步骤6.4);
6.3)判断若a[0]大于3且a[1]减去a[0]大于3,则将第一结果集S2中a[0]位置处的分隔符去除,否则不做处理;
再从a[]中第二个元素位置(a[1])开始循环,判断若a[i]-a[i-1]大于3且a[i+1]-a[i]大于3,则将第一结果集S2中a[i]位置处的分隔符去除,否则不做处理,直至a[]中最后一个元素,结束循环,输出最终结果集S4,直接执行步骤6.5);
6.4)循环遍历a[]、b[]中元素,直到找出不一致的元素所对应的下标j,将第一结果集S2中a[j]位置处的分隔符去除,当a[]、b[]两个数组中元素均相同时,返回执行步骤6.3);
6.5)重复步骤6.2)~步骤6.4),直至将第一结果集S2、第二结果集S3中对应句子都比较处理完,并输出最终结果集S4,即成。