[发明专利]一种地质资料包目录与文件类型自动识别方法有效
申请号: | 201911042814.0 | 申请日: | 2019-10-30 |
公开(公告)号: | CN110795397B | 公开(公告)日: | 2022-02-01 |
发明(设计)人: | 刘文毅;邓吉秋;程广国;何美香;王振生;马鹏远;周斌;孙宏伟 | 申请(专利权)人: | 河南省有色金属地质矿产局第七地质大队 |
主分类号: | G06F16/14 | 分类号: | G06F16/14;G06F16/16 |
代理公司: | 郑州先风知识产权代理有限公司 41127 | 代理人: | 马柯柯 |
地址: | 450000 河南*** | 国省代码: | 河南;41 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 地质 资料 目录 文件类型 自动识别 方法 | ||
1.一种地质资料包目录与文件类型自动识别方法,其特征在于:包括如下步骤:
(1)遍历:从地质资料包所在目录local_root开始,逐层对当前目录文件与子目录进行遍历处理:设每次遍历的当前目录为root,当前目录root所含文件集为files,文件集files中的具体文件为file,当前目录root所含子目录集为dirs、子目录集dirs中的具体目录为dir;逐层遍历时,当前目录root开始,然后以子目录名的字母顺序先后进行处理,每次处理目录root所含子目录集dirs中一个子目录dir,每一子目录dir的处理亦即下一层的遍历;遍历完所有的子目录dir,即处理完子目录集,之后处理当前目录的文件集files,以文件名的字母顺序循环,每次处理文件集files中的当前具体文件file;当前文件集files处理完后,进入下一个文件集files,文件集files的处理顺序是按照其名称字母在字母表中的顺序进行;之后,返回上级目录,直至所有文件和子目录遍历完毕;
(2)规则定义
建立目录与文件类型判别规则表,规则表具有以下特征:
A.覆盖地质资料包中目录与文件的可能类型;
B.为每个类型定义两级规则:
第一级规则为扩展名定义:所有目录的扩展名定义为DIR;无需识别具体类型的文件,扩展名定义为*;不按扩展名而按整个文件名识别的文件,扩展名定义为整个文件名;其它文件,按实际扩展名定义;
第二级为关联准则,用于目录或文件扩展名相同的不同类型的进一步判断;根据其上下级目录、及所含文件判断;对于文件,根据其所在目录、同目录文件进行判断;关联准则定义采用关键字\、*\、IS、LIKE、DIR、FILE、FILE NAME、FILE image,以及通配符*、分号;、斜杠\、具体名称字符串,其中关联准则基本关键字与语法规则如表1:
表1 基本关联准则定义
ID 关联准则的类型 准则含义 1 \exp 所在文件夹的上级文件夹 2 *\exp 所在文件夹的任一上级文件夹 3 ISstr 所在文件夹为str 4 LIKEstr 所在文件夹名包含str 5 DIRstr 所在文件夹含str目录 6 FILENAME 所在文件夹有同名但扩展名不同的文件 7 FILE*.str 所在文件夹有扩展名为.str的文件 8 FILEimage 所在文件夹有图片文件
其中:str表示具体名称字符串,多个字符串用分号;分割;exp为第2条至第8条准则中的任意一条;
上述关联准则可组合使用,形成具体文件类型的关联准则;
目录与文件类型规则定义如表2:
表2 目录与文件类型规则表
C.规则表以数据库表的方式存储;
D.所有目录与文件类型的判别准则,均需根据规则预先定义,即所有可能的类型,在识别处理前,需预先按照数据库表中表2规则定义其准则;
(3)目录与文件类型识别过程:
当遍历具体目录root或具体文件file时,对于文件file,直接从名称中提取点号及以后的部分作为其扩展名ext;对于目录root,根据第一级规则,直接设为DIR;然后在规则表中,查找扩展名字段Extension值等于扩展名ext的记录,并统计满足条件的记录数n,即扩展名匹配数;根据匹配数的不同,并结合关联准则Rules检验,进入步骤(3-2);确定唯一匹配的扩展名记录,获取该记录的编号ID作为当前文件类型;
(3-1)扩展名匹配数n的不同取值:
(3-1-1)当n=1、且Rules为空时,存在1条匹配记录,获取该匹配记录对应的文件类型,作为当前目录或文件的类型;Rules为空是指前述表2中对应行Rules字段为空值;
(3-1-2)当n≥1、且Rules不为空时,按ID从小到大顺序依次进行关联准则Rules检验,检验方法见步骤(3-2);当找到一条符合关联准则的记录时,获取对应ID,作为当前目录或文件类型,剩余的记录不再检验;当遍历完所有匹配记录,且无任何匹配记录满足关联准则检验时,则将其类型设为:其它未指明,ID为:90109;
(3-1-3)当n=0时,则不存在匹配记录,则将其类型设为:其它未指明,ID为:90109;
(3-2)当前类型关联准则检验方法:
根据当前类型ID,从数据库规则表中读取当前类型的规则字符串Rules,依据基本关联准则定义表1,依次判断Rules字符串中是否包含基本准则定义中的关键字,所述关键字是指基本关联准则定义表1中“关联准则”一栏对应字符串中非str的部分;
(3-2-1)str:判断的是由关键字所限定范围的当前目录或文件file名称,如果不包含分号,则名称字符串为仅包含str的集合;如果str包含分号,则按顺序从左边第一个分号开始,将字符串分割,分号前的部分为第一字符串,分号后的部分为第二字符串,如果第二字符串含有分号则继续分割,直到所有字符串均不含分号,名称字符串为str被分号所分割得到的所有字符串的集合;之后,判断名称字符串中的任一个字符串是否包含通配符*:如果名称字符串中的一个字符串S不包含通配符*,则判断S是否与file名称字符串相等,如相等则称为完全相等关系,若不相等则为不相等关系;如包含则称为包含关系,若不包含是为不包含关系;完全相等关系、不相等关系、包含关系、不包含关系,四种关系与关键字的组合用于关联准则检验,具体组合与判断方法见(3-2-2)~(3-2-5);
(3-2-2)关键字\、*\判断的是上级或任一上级目录的名称:判断当前目录root的上级目录,其名称是否是root字符串中倒数第一、第二个斜杠\或/之间的字符串,判断任一上级目录名称,是否是root字符串中按斜杠\或/分割所得的一字符串;
(3-2-3)关键字IS、LIKE:判断的是当前目录名称按步骤(3-2-1)的方法是否与名称字符串str有完全相等或包含关系,其中IS采用字符串完全相等关系匹配、LIKE采用字符串包含关系匹配;
(3-2-4)关键字DIR:判断的是当前目录的任一子文件夹名称,在当前目录root的子目录集dirs中,查找能完全相等、或包含关系匹配DIR后字符串str的子目录dir;
(3-2-5)关键字FILE:判断的是当前目录是否存在特定文件,其中NAME表示与当前文件file同名、但扩展名不同的文件,*.str表示扩展名为.str的任一文件,image表示任一图片文件;所述的NAME是规则中的字符串;
(4)目录与文件类型识别过程
(4-1)进入系统初始化,定义名称与规则匹配函数re_file,名称与规则匹配函数re_file的输入参数为名称name、关联准则Rules,输出为匹配true或不匹配false,函数的实现过程见步骤4-1-1)~4-1-3));之后进入4-2);
(4-1-1)获取输入参数:名称name、关联准则Rules;
(4-1-2)将关联准则rule中的.替换成\.,将关联准则rule中的*替换成.*,将关联准则rule中的;替换成)|(,在关联准则Rules第一个字符前加(,在关联准则Rules最后一个字符后加),得到正则表达式str_rule;
(4-1-3)判断名称name中是否有满足str_rule正则表达式的字符串,若有,则判定为匹配成功,名称与规则匹配函数re_file函数
(4-2)获取目录文件类别规则表file_types,创建目录文件列表file_lists,记录目录文件信息,包括编号ID、名称name、上级目录root、文件类别编号type,获取当前需要识别的目录root_dir,进入步骤4-3);
(4-3)遍历目录root_dir下各层级子目录,识别每层级子目录中的子目录与文件类型,直到遍历完所有子目录,具体循环步骤如下:
(4-3-1)获取当前目录root,将当前目录类型编号dir_type赋初值为0;获得当前目录下所有文件的集合,即文件集files;获取当前目录下所有一级子目录的集合,即子目录集dirs;获取当前目录root的路径字符串,从中查找最后一个斜杠\或/的位置,以该斜杠\或/的位置为界,从root路径字符串中截取该位置以后的字符串,作为当前目录名称name,从root路径字符串中截取该该斜杠\或/的位置以前的字符串,作为上级目录root的路径;然后进入步骤4-3-2);
(4-3-2)从规则表file_types中获取所有Extension字段为DIR的记录集dir_types,循环遍历该记录集dir_types中每个类型记录record,判断目录名称name是否与当前记录root的关联准则Rules匹配,具体循环步骤如下:
(4-3-2-1)获得当前类型记录record的类型编号ID与关联准则Rules,进入步骤4-3-2-2);
(4-3-2-2)判断关联准则Rules是否包含字符串LIKE,如果包含LIKE,则表示目录名称需
(4-3-2-3)判断关联准则Rules是否包含字符串*\DIR LIKE:
如果包含*\DIR LIKE,则表示其任一上级目录名称需匹配Rules中*\DIR LIKE后面的字符串,将Rules中的*\DIR LIKE”删除,将目录root按顺序从左边第一个斜杠\或/开始,将字符串分割,斜杠\或/前的部分为第一字符串,斜杠\或/后的部分为第二字符串,如果第二字符串含有斜杠\或/则继续分割,直到所有字符串均不含斜杠\或/,目录root被斜杠\或/所分割得到的所有字符串的集合,为所有上级目录名称集names;按分割后原始顺序,依次获得names中每个上级目录名称name;以上级目录名name、关联准则Rules为参数,调用re_file函数;如果re_file函数输出true,则当前目录类型为当前record的类型Types若re_file函数输出false,则不处理;循环结束时,进入步骤4-3-2-9);
如果关联准则Rules不包含字符串*\DIR LIKE,则进入步骤(4-3-2-4);
(4-3-2-4)判断关联准则Rules是否包含字符串DIR,如果包含DIR,则表示该子目录名称需匹配Rules中DIR后的字符串,将Rules中的DIR删除,再判断Rules是否包含在子目录集dirs中,如果是,则当前目录类型为当前record的类型Types,进入步骤4-3-2-9);如果Rules不包含在子目录集dirs中,则进入步骤4-3-3);如果关联准则Rules不包含字符串DIR,则进入步骤4-3-2-5);
(4-3-2-5)判断关联准则是否包含字符串IS,如果包含IS,则表示目录名称需与Rules中IS后的字符串具有完全相等关系;将该规则中的IS删除,再判断Rules是否与name相等,如果是则当前目录类型为当前record的类型Types,进入步骤4-3-2-9),否则进入步骤4-3-3);如果关联准则Rules不包含IS,则进入步骤4-3-2-6);
(4-3-2-6)判断关联准则Rules是否包含字符串\DIR,如果包含\DIR,则表示上级目录中存在某子目录,其名称与Rules中\DIR后的字符串相等;将该规则中的\DIR替换成空字符串,获得上级目录的子目录名称集names,从names中移除当前目录名称;按字母序循环对names中的目录名称name,以目录名称name、规则Rules为参数,调用re_file函数;如果re_file函数输出true,表示上级目录存在满足规则的子目录,则当前目录类型为当前record的ID,进入步骤4-3-2-9);如果re_file函数输出false,则进入步骤4-3-3);如果关联准则Rules不包含\DIR,且非记录集dir_types最后一条记录,则读取记录集dir_types下一条记录作为当前类型记录record,进入步骤4-3-2-1;否则进入步骤4-3-2-7);
(4-3-2-7)判断当前目录名称name是否包含.files字符串:如包含则表示目录为Markdown或HTML的附属目录,在规则表file_types中,查询Extension字段字符串包含.files的记录:如有输出记录,则当前目录类型编号dir_type为该记录的ID,进入步骤4-3-2-9);如没有输出记录,进入步骤4-3-2-8);若判断当前目录名称name不包含.files字符串,则不出路;
(4-3-2-8)判断当前目录类型编号dir_type是否为0;如为0,则表示未匹配成功任何目录类型,则该目录为一般目录,其目录类型编号为80101,进入步骤4-3-2-9);如当前目录类型编号dir_type不为0,则不处理;
(4-3-2-9)向目录文件列表file_lists添加已判断的当前目录信息,包括名称name、上级目录root、类型编号dir_type等,进入步骤4-3-3);
(4-3-3)按字母顺序循环遍历当前目录root下文件集files中每个文件file,依次以文件file扩展名、关联准则Rules、目录类型编号dir_type综合判断文件类型,具体循环处理步骤如下:
(4-3-3-1)将当前文件类型编号file_type赋初值为0,进入步骤4-3-3-2);
(4-3-3-2)通过以下步骤4-3-3-2-1)~4-3-3-2-3)从文件file中抽取用于扩展名匹配的字符串file_match,之后进入步骤4-3-3-3);
(4-3-3-2-1)以编码ID从小到大遍历规则表file_types中记录,读取当前记录的Extension字段;设判断条件一:该字段字符串包含.且不以.开头、不含通配符*;设判断条件二;文件file名称与Extension字段相等;如满足条件一、条件二中任一条件或同时满足,则file_match等于Extension字段值;如条件一、条件二均不满足,则进入步骤4-3-3-2-2);
(4-3-3-2-2)判断文件file名称中是否含有.,如有,则从名称中截取从.所在位置开始至结尾的字符串,赋值给file_match,如无.则进入步骤4-3-3-2-3);
(4-3-3-2-3)将file名称赋值给file_match;
(4-3-3-3)根据当前目录类型编号dir_type,判断其是否等于10109或10110:如等于10109或10110,则文件类型编号file_type为10100;如不等于10109或10110,再判断当前目录类型编号dir_type是否等于80201或80202:如当前目录类型编号dir_type等于80201或80202,则文件类型编号file_type为80203,如当前目录类型编号dir_type不等于80201或80202,则判断当前目录类型编号dir_type是否等于80301或80302:如当前目录类型编号dir_type等于80301或80302,则文件类型编号file_type为80303;如当前目录类型编号dir_type不等于80301或80302,则进入步骤4-3-3-4);
(4-3-3-4)获取file_types中Extension字段等于file_match的记录,并统计为匹配数n,进入步骤4-3-3-5);
(4-3-3-5)循环遍历每个满足条件的记录,获取其类型编号ID、关联准则Rules,通过以下步骤匹配文件file名称与字段Extension、关联准则Rules之间的关系:
(4-3-3-5-1)如关联准则Rules字段值中出现LIKE或*\DIR LIKE关键字,则返回步骤4-3-2-1)~4-3-2-8),判断当前目录类型编号dir_type:如目录类型dir_type0,则匹配数n赋值为1,文件类型编号file_type赋值为当前记录类型编号ID,进入步骤4-3-4-6);如dir_type=0,则匹配数n减1后的值赋为本次匹配数n的值,进入步骤4-3-3-5-2);
(4-3-3-5-2)如关联准则Rules字段值中出现FILE NAME关键字,则Rules
(4-3-3-5-3)如关联准则Rules字段值中出现FILE*.str关键字,则Rules表示当前目录需存在与文件file名称相同仅扩展名不同的文件,且该文件扩展名为.str;获取当前目录root所有文件列表,从中剔除扩展名不为.str且文件主名不为file_main的字符串,由此得到当前文件filed的同主名、扩展名为.str的文件列表,获得列表长度l;如果l0,则n为1、文件类型编号file_type为当前记录ID,进入步骤4-3-3-6);如果l=0,则n减1,进入步骤4-3-4-6);
(4-3-3-6)如果匹配数n=0,则表示未匹配成功,赋值file_type为90109,进入步骤4-3-3-7);
(4-3-3-7)向目录文件列表file_lists添加已判断的当前文件信息,包括名称name、上级目录root、类型编号file_type,进入步骤4-3-4);
(4-3-4)如当前目录root的文件集files中存在未确定类型的文件,表示循环未结束,则继续循环、进入步骤4-3-3-1);当前目录root的文件集files中所有文件的类型均已确定,则循环结束,输出目录文件列表file_lists。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于河南省有色金属地质矿产局第七地质大队,未经河南省有色金属地质矿产局第七地质大队许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911042814.0/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种冷热数据区分方法、系统及其存储介质
- 下一篇:一种模型文件调用系统及方法