CN110795397B - 一种地质资料包目录与文件类型自动识别方法 - Google Patents
一种地质资料包目录与文件类型自动识别方法 Download PDFInfo
- Publication number
- CN110795397B CN110795397B CN201911042814.0A CN201911042814A CN110795397B CN 110795397 B CN110795397 B CN 110795397B CN 201911042814 A CN201911042814 A CN 201911042814A CN 110795397 B CN110795397 B CN 110795397B
- Authority
- CN
- China
- Prior art keywords
- file
- directory
- name
- type
- rules
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/148—File search processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Library & Information Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种地质资料包目录与文件类型自动识别方法,包括如下步骤:(1)遍历;(2)规则定义:建立目录与文件类型判别规则表,规则表具有以下特征:A.覆盖地质资料包中目录与文件的可能类型;B.为每个类型定义两级规则:第一级规则为扩展名定义;第二级为关联准则;C.规则表以数据库表的方式存储;D.所有目录与文件类型的判别准则,均需根据规则预先定义,即所有可能的类型,在识别处理前,需预先按照数据库表中表2规则定义其准则;(3)目录与文件类型识别过程。
Description
技术领域
本发明涉及数字化地质资料信息处理技术领域,尤其涉及一种地质资料包目录与文件类型自动识别方法。
背景技术
数字化地质资料是地质工作形成的信息资源,是地质勘查和科学研究的依据与基础,具有重要的保存价值和服务利用价值。数字化地质资料内容包含各种有原始地质资料、实物地质资料与成果地质资料数字化后的各种内容,譬如各种报告、地质图件图、统计表格、实物照片视频等,不同内容与形式特征如下:
1)文字资料:包括各种地质报告、地质文献等文字资料,文件格式有Word、PDF、TXT、HTML、CAJ、PPT等;
2)地图资料:包括各种地质图、剖面图、物化探图等跟地质工作相关的各种图件资料,文件格式有MapGIS、ArcGIS、MapInfo、Surfer、Grapher、CorelDRAW、CAD等;
3)表格资料:包括各种钻孔与巷道等编录、采样与样品分析测试、其它记录与列表等表数据,文件格式有Excel、CSV、DBF、MDB等;
4)图片资料:包括各种野外与室内照片、地质文档插图、地图制图输出、遥感影像等图片型数据,文件格式有JPG、BMP、TIF、IMG等;
5)影音资料:包括各种记录地质及相关信息的语音、视频、动画等,文件格式有AVI、MPG、WMV、MP3/4等。
地质资料多数情况下是多种内容与形式的集合体,对应一个地质项目或工程,其所有相关地质资料的集合可以称之为地质资料包,通常情况下地质资料包在未进行规范化整理与登记及录入相应的管理系统前均是在文件系统中以文件夹(含子目录与文件)的形式存储。
存于文件夹下的不同内容的地质资料其数字化文件格式类型可能相同、亦可能不同,如地质报告可能是Word文件、亦可能是PDF文件;同一格式类型的文件其实际文档性质亦可能不同,譬如后缀名为DBF的文件可能是ESRI Shapefile中的属性文件、亦可能是FoxPro/dBase等数据库表文件;目录或同一扩展名文件,从管理的需求上有时需进一步分类;另外,地质资料文件夹中的某些子目录具有特殊性质,需当作某种文件或特殊目录处理。此类复杂的类型关系一般需要有经验的专业人员才能很好地判断、清理、登记,使之适用于后续的各种可能的人为或计算机管理。
文件类型的识别一般通过文件扩展名来识别,通过扩展名操作系统(或应用系统)能初步确定文件类型与打开方式,但是扩展名是可以随意修改的。事实上,所有的文件都是以二进制的形式进行存储的,本质上没有差别,之所以类型及使用方法不同,只是因为其内容的组织形式不同。在每一个文件(包括图片,视频或其他的非ASCII文件)的开头(十六进制表示)实际上都有一片区域来显示这个文件的实际类型,这就是文件头标志,一般情况下不同的类型的文件其文件头标志不同,但亦存在相同文件头的情况。
文件夹中的子目录被当成目录处理,一般没做进一步的识别。
针对地质资料文件类型的识别,现有技术采用扩展名识别、通过人工判断或计算机识别文件类型。人工判断需要有经验的操作人员才能完成,速度慢、效率低、无法避免人为疏忽带来的判断错误;计算机判断无法有效避免具有相同文件扩展名、但实际类型不同文件的类型误判。
地质资料目录类型未做识别,需基于人工判断,同样存在速度慢、效率低、判断错误等问题。
在不同用途条件下的目录或同扩展名文件的进一步分类一般未涉及。
面对繁杂的地质资料,针对地质资料文件类型的识别成了目前的研究方向和亟待解决的问题。
发明内容
为解决上述技术问题,本发明提出一种地质资料包目录与文件类型自动识别方法,通过计算机技术使错综复杂的目录与文件类型关系得到清理与标识。
一种地质资料包目录与文件类型自动识别方法,其中:包括如下步骤:
(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 | IS<str> | 所在文件夹为<str> |
4 | LIKE<str> | 所在文件夹名包含<str> |
5 | DIR<str> | 所在文件夹含<str>目录 |
6 | FILE NAME | 所在文件夹有同名但扩展名不同的文件 |
7 | FILE*.<str> | 所在文件夹有扩展名为<.str>的文件 |
8 | FILE image | 所在文件夹有图片文件 |
其中:<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函数输出true;若没有,则判定为匹配不成功、函数输出false;
(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,则表示目录名称需与关联准则Rules中字符串LIKE后的字符串有完全相等或包含关系;将Rules中的LIKE替换成空字符串,以目录名称name、规则Rules为参数再调用re_file函数,返回步骤(4-1);如果re_file函数输出true,则当前目录类型为当前record的类型Types,进入步骤4-3-2-9);如果re_file函数输出false,则进入步骤4-3-3);如果关联准则Rules不包含字符串LIKE,则进入步骤4-3-2-3);
(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_type>0,则匹配数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表示当前目录需存在与文件file名称相同仅扩展名不同的文件,该文件名与文件file名称的相同部分赋为文件主名file_main,该文件名与文件file名称的不同部分赋为扩展名file_ext;获取当前目录root所有文件名列表,从中删除文件主名不为file_main的文件名字符串,由此得到当前文件file的同主名文件名列表;获得同主名文件名列表长度l,如果l<1,则匹配数n为1,当前文件类型编号file_type为类型编号ID,进入步骤4-3-3-6);如l=1,则匹配数n减1,进入步骤(4-3-3-5-3);
(4-3-3-5-3)如关联准则Rules字段值中出现FILE*.<str>关键字,则Rules表示当前目录需存在与文件file名称相同仅扩展名不同的文件,且该文件扩展名为.<str>;获取当前目录root所有文件列表,从中剔除扩展名不为.<str>且文件主名不为file_main的字符串,由此得到当前文件filed的同主名、扩展名为.<str>的文件列表,获得列表长度l;如果l>0,则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。
本发明提供的一种地质资料包目录与文件类型自动识别方法,其地质资料包目录与文件类型自动识别过程包括目录与文件类型规则定义与完善、目录文件遍历、文件扩展名提取、基于规则的文件类型与目录类型识别,特别是其中规则定义、类型识别方法与过程,有效提高识别效率。
附图说明
图1为本发明地质资料包目录与文件类型自动识别方法的流程图。
具体实施方式
本发明提供了一种地质资料包目录与文件类型自动识别方法,如图1所示,其包括如下步骤:
(1)遍历:从地质资料包所在目录local_root开始,逐层对当前目录文件与子目录进行遍历处理:设每次遍历的当前目录为root,当前目录root所含文件集为files,文件集files中的具体文件为file,当前目录root所含子目录集为dirs、子目录集dirs中的具体目录为dir;逐层遍历时,当前目录root开始,然后以子目录名的字母顺序先后进行处理(是针对子目录集继续循环处理,子目录集中的具体子目录只处理一遍),每次处理目录root所含子目录集dirs中一个子目录dir,每一子目录dir的处理亦即下一层的遍历(子目录所包含的内容包括其子目录集、文件集,每一层子目录结构都是类似的,只是具体子目录与文件名称不同);遍历完所有的子目录dir,即处理完子目录集,之后处理当前目录的文件集files(目录包括子目录集和文件集,子目录包含0到多个目录,文件集包含0到多个文件;子目录集中的一个目录,又可以包含子目录集和文件集,一层层往下嵌套),以文件名的字母顺序循环(即以文件名的字母为依据,按照字母表的顺序依次处理),每次处理文件集files中的当前具体文件file(即为每次处理一个具体文件file,将文件集files中的所有具体文件file处理完,具体文件file的处理顺序是按其名称字母在字母表中的顺序);当前文件集files处理完后,进入下一个文件集files,文件集files的处理顺序是按照其名称字母在字母表中的顺序进行(当前文件集files处理完后,当前目录处理完毕,需返回上级目录,按照字母名称顺序对下一个文件集files进行处理);之后;返回上级目录,直至所有文件和子目录遍历完毕;
(2)规则定义;建立目录与文件类型判别规则表,规则表具有以下特征:
A.覆盖地质资料包中目录与文件的可能类型;
B.为每个类型定义两级规则:
第一级规则为扩展名定义:所有目录的扩展名定义为DIR;无需识别具体类型的文件,扩展名定义为*;不按扩展名而按整个文件名识别的文件,扩展名定义为整个文件名;其它文件,按实际扩展名定义;
第二级为关联准则,用于目录或文件扩展名相同的不同类型的进一步判断(扩展名相同存在两种情况:1普通目录由于在第一级被统一定义为DIR,在第二级判断时会遇到同为DIR的目录,需根据第二级关联准则进一步判断其类型;2在规则中存在同一扩展名的不同文件类型,需根据第二级关联准则进一步判断其类型);根据其上下级目录、及所含文件判断(是根据规则中所定义的本级、或上下级目录,及其所包含文件来判断,具体规则见表1,上级目录由第1、2条准则定义,本级目录第3、4条,下级目录第5条,所包含文件为第6、7、8条);对于文件,根据其所在目录、同目录文件进行判断(是根据规则中所定义的本级、或上下级目录,及其所包含文件来判断,具体规则见表1,上级目录由第1、2条准则定义,本级目录第3、4条,下级目录第5条,所包含文件为第6、7、8条);关联准则定义采用关键字\、*\、IS、LIKE、DIR、FILE、FILE NAME、FILE image),以及通配符*、分号;、斜杠\、具体名称字符串,其中关联准则基本关键字与语法规则如表1:
表1基本关联准则定义
ID | 关联准则的类型 | 准则含义 |
1 | \<exp> | 所在文件夹的上级文件夹 |
2 | *\<exp> | 所在文件夹的任一上级文件夹 |
3 | IS<str> | 所在文件夹为<str> |
4 | LIKE<str> | 所在文件夹名包含<str> |
5 | DIR<str> | 所在文件夹含<str>目录 |
6 | FILE NAME | 所在文件夹有同名但扩展名不同的文件 |
7 | FILE*.<str> | 所在文件夹有扩展名为<.str>的文件 |
8 | FILE image | 所在文件夹有图片文件 |
其中:<str>表示具体名称字符串,多个字符串用分号;分割;<exp>为第2条至第8条准则中的任意一条;
实际某个类型的关联准则是按规则生成的,如表2中10103的准则FILE*.MPJ按第7条准则生成;上述\与*\所指代的范围理论上是有重叠,但在针对具体目录与文件类型,在人为输入其规则时只能选一种,只限定上级目录的按第1条,不限定的按第2条,具体某个类型不会出现规则重叠。上述关联准则可组合使用,形成具体文件类型的关联准则;如:*\DIRLIKE*色库*;*slib;*6SK”,表示任一上级目录名能匹配规则*色库*;*slib;*6SK中分号;分割的*色库*、*slib、*6SK三个中的任一正则表达式;
目录与文件类型规则定义如表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名称字符串相等,如相等则称为完全相等关系,若不相等则为不相等关系;如名称字符串中的一个字符串S包含通配符*,则判断file名称字符串是否包含S,如包含则称为包含关系,若不包含是为不包含关系;完全相等关系、不相等关系、包含关系、不包含关系,四种关系与关键字的组合用于关联准则检验,具体组合与判断方法见(3-2-2)~(3-2-5);
(3-2-2)关键字\、*\判断的是上级或任一上级目录的名称:判断当前目录root的上级目录,其名称是否是root字符串中倒数第一、第二个斜杠\或/之间的字符串(是或否,是(4-3-2)目录匹配与(4-3-4)文件匹配中完全相等关系、包含关系的判断依据),判断任一上级目录名称,是否是root字符串中按斜杠\或/分割所得的一字符串;
(3-2-3)关键字IS、LIKE:判断的是当前目录名称按步骤(3-2-1)的方法是否与名称字符串<str>有完全相等或包含关系,其中IS(IS是表1中定义的IS<str>,指的是与名称字符串<str>完全相等)采用字符串完全相等关系匹配、LIKE(LIKE是表1中定义的LIKE<str>,指的是包含名称字符串<str>)采用字符串包含关系匹配;
(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(name是目录或文件file的名称字符串)、关联准则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函数输出true;若没有,则判定为匹配不成功、函数输出false;
(4-2)获取目录文件类别规则表file_types,见表2,创建目录文件列表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,则表示目录名称需与关联准则Rules中字符串LIKE后的字符串有完全相等或包含关系;将Rules中的LIKE替换成空字符串,以目录名称name、规则Rules为参数再调用re_file函数,返回步骤(4-1);如果re_file函数输出true,则当前目录类型为当前record的类型Types,进入步骤4-3-2-9);如果re_file函数输出false,则进入步骤4-3-3);如果关联准则Rules不包含字符串LIKE,则进入步骤4-3-2-3);
(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_type>0,则匹配数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表示当前目录需存在与文件file名称相同仅扩展名不同的文件,该文件名与文件file名称的相同部分赋为文件主名file_main,该文件名与文件file名称的不同部分赋为扩展名file_ext;获取当前目录root所有文件名列表,从中删除文件主名不为file_main的文件名字符串,由此得到当前文件file的同主名文件名列表;获得同主名文件名列表长度l,如果l<1,则匹配数n为1,当前文件类型编号file_type为类型编号ID,进入步骤4-3-3-6);如l=1,则匹配数n减1,进入步骤(4-3-3-5-3);
(4-3-3-5-3)如关联准则Rules字段值中出现FILE*.<str>关键字,则Rules表示当前目录需存在与文件file名称相同仅扩展名不同的文件,且该文件扩展名为.<str>;获取当前目录root所有文件列表,从中剔除扩展名不为.<str>且文件主名不为file_main的字符串,由此得到当前文件filed的同主名、扩展名为.<str>的文件列表,获得列表长度l;如果l>0,则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。
本发明特点在于:
1)用目录与文件类型判断的第二级规则(关联准则)可解决目录的不同用途分类识别、及同一扩展名的不同用途分类识别;
2)关联准则的关键字与基本语法规则,关联准则定义及具体关联准则具有可扩充性;
3)只需更改或完善规则表,无需(或很少)更改程序编码,即可实现地质资料包目录与文件类型的高效自动化识别;
4)该方法可扩展至任何类型基于文件系统、文件夹存储的资料包其目录与文件类型的自动识别。
综上可见,本发明能提高地质资料包目录与文件类型识别的效率与准确度,避免同扩展名类型的误判,使目录或同扩展名能分类更细;大大减少人工判断与程序设计工作量,降低成本,方法具有通用性与可扩充性。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (1)
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 基本关联准则定义
其中:<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函数输出true;若没有,则判定为匹配不成功、函数输出false;
(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,则表示目录名称需与关联准则Rules中字符串LIKE后的字符串有完全相等或包含关系;将Rules中的LIKE替换成空字符串,以目录名称name、规则Rules为参数再调用re_file函数,返回步骤(4-1);如果re_file函数输出true,则当前目录类型为当前record的类型Types,进入步骤4-3-2-9);如果re_file函数输出false,则进入步骤4-3-3);如果关联准则Rules不包含字符串LIKE,则进入步骤4-3-2-3);
(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_type>0,则匹配数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表示当前目录需存在与文件file名称相同仅扩展名不同的文件,该文件名与文件file名称的相同部分赋为文件主名file_main,该文件名与文件file名称的不同部分赋为扩展名file_ext;获取当前目录root所有文件名列表,从中删除文件主名不为file_main的文件名字符串,由此得到当前文件file的同主名文件名列表;获得同主名文件名列表长度l,如果l<1,则匹配数n为1,当前文件类型编号file_type为类型编号ID,进入步骤4-3-3-6);如l=1,则匹配数n减1,进入步骤(4-3-3-5-3);
(4-3-3-5-3)如关联准则Rules字段值中出现FILE*.<str>关键字,则Rules表示当前目录需存在与文件file名称相同仅扩展名不同的文件,且该文件扩展名为.<str>;获取当前目录root所有文件列表,从中剔除扩展名不为.<str>且文件主名不为file_main的字符串,由此得到当前文件filed的同主名、扩展名为.<str>的文件列表,获得列表长度l;如果l>0,则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。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911042814.0A CN110795397B (zh) | 2019-10-30 | 2019-10-30 | 一种地质资料包目录与文件类型自动识别方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911042814.0A CN110795397B (zh) | 2019-10-30 | 2019-10-30 | 一种地质资料包目录与文件类型自动识别方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110795397A CN110795397A (zh) | 2020-02-14 |
CN110795397B true CN110795397B (zh) | 2022-02-01 |
Family
ID=69441982
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911042814.0A Active CN110795397B (zh) | 2019-10-30 | 2019-10-30 | 一种地质资料包目录与文件类型自动识别方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110795397B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112699637B (zh) * | 2021-01-08 | 2024-04-12 | 中南大学 | 段落类型识别方法及系统和文档结构识别方法及系统 |
CN114398319B (zh) * | 2021-12-17 | 2024-01-12 | 苏州浪潮智能科技有限公司 | 一种具有目录忽略机制的文件遍历方法及系统 |
CN114896467B (zh) * | 2022-04-24 | 2024-02-09 | 北京月新时代科技股份有限公司 | 基于神经网络的字段匹配方法和数据智能录入方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104866630A (zh) * | 2015-06-16 | 2015-08-26 | 吉林大学 | 成矿预测中gis与es自动空间建模系统及方法 |
CN105488100A (zh) * | 2015-11-18 | 2016-04-13 | 国信司南(北京)地理信息技术有限公司 | 一种非涉密环境下涉密地理数据的高效检测发现系统 |
CN106407223A (zh) * | 2015-07-31 | 2017-02-15 | 中国石油化工股份有限公司 | 快速提取地质有效信息的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8402058B2 (en) * | 2009-01-13 | 2013-03-19 | Ensoco, Inc. | Method and computer program product for geophysical and geologic data identification, geodetic classification, organization, updating, and extracting spatially referenced data records |
-
2019
- 2019-10-30 CN CN201911042814.0A patent/CN110795397B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104866630A (zh) * | 2015-06-16 | 2015-08-26 | 吉林大学 | 成矿预测中gis与es自动空间建模系统及方法 |
CN106407223A (zh) * | 2015-07-31 | 2017-02-15 | 中国石油化工股份有限公司 | 快速提取地质有效信息的方法 |
CN105488100A (zh) * | 2015-11-18 | 2016-04-13 | 国信司南(北京)地理信息技术有限公司 | 一种非涉密环境下涉密地理数据的高效检测发现系统 |
Non-Patent Citations (3)
Title |
---|
Key Technologies of a Large-Scale Urban Geological Information Management System Based on a Browser/Server Structure;Cuiying Zhou et al.;《IEEE Access 》;20190913;全文 * |
地震数据处理系统Earthworm在福建地震预警系统项目中的应用;方伟华 等;《震灾防御技术》;20180331;全文 * |
大数据环境下地质资料的存储策略与文本化导入技术;刘文毅 等;《地质学刊》;20190930;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110795397A (zh) | 2020-02-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111241241B (zh) | 基于知识图谱的案件检索方法、装置、设备及存储介质 | |
CN110795397B (zh) | 一种地质资料包目录与文件类型自动识别方法 | |
JP5798503B2 (ja) | ファイルリスト生成方法及びシステム、ファイルリスト生成装置並びにプログラム | |
JP5680063B2 (ja) | デジタル写真のコレクションからのランドマーク | |
CN102053991B (zh) | 用于多语言文档检索的方法及系统 | |
JP5550669B2 (ja) | 検索装置、検索方法およびプログラム | |
JP5759915B2 (ja) | ファイルリスト生成方法及びシステム並びにプログラム、ファイルリスト生成装置 | |
US20060026127A1 (en) | Method and apparatus for classification of a data object in a database | |
RU2568276C2 (ru) | Способ извлечения полезного контента из установочных файлов мобильных приложений для дальнейшей машинной обработки данных, в частности поиска | |
CN110795520B (zh) | 一种数字化地质资料包目录与文件关联关系自动识别方法 | |
CN112434250B (zh) | 一种基于在线网站的cms识别特征规则提取方法 | |
JP2007164633A (ja) | コンテンツ検索方法及び装置及びプログラム | |
US20120197909A1 (en) | Method for determining a similarity of objects | |
US11645312B2 (en) | Attribute extraction apparatus and attribute extraction method | |
JP2002007413A (ja) | 画像検索装置 | |
US8422831B2 (en) | Information management apparatus, information management method, and computer readable medium which determine similarities | |
KR102081867B1 (ko) | 역 색인 구성 방법, 역 색인을 이용한 유사 데이터 검색 방법 및 장치 | |
KR20180077397A (ko) | 소프트웨어 프로젝트 관계도 구성 시스템 및 그 방법 | |
JP5810937B2 (ja) | 管理プログラムおよび装置 | |
US10789245B2 (en) | Semiconductor parts search method using last alphabet deletion algorithm | |
JP5903372B2 (ja) | キーワード関連度スコア算出装置、キーワード関連度スコア算出方法、及びプログラム | |
CN117474000B (zh) | 用于提取化合物专利文件中的主题药物的方法及装置 | |
CN113536133B (zh) | 基于单一舆情事件的互联网数据处理方法 | |
JP3719089B2 (ja) | 文書処理装置 | |
CN117112877A (zh) | 应用于询证医学的医疗文献处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |