文本压缩方法及装置与流程

文档序号:11950389阅读:463来源:国知局
文本压缩方法及装置与流程

本申请涉及文件压缩处理技术领域,更具体地,涉及基于HADOOP集群和关系数据库的文本数据存储、压缩和分析方法及装置。



背景技术:

文本压缩,是根据一定方法对大量文本数据进行编码处理以实现信息压缩存储目的,被压缩的数据能够通过解码恢复到压缩以前的状态,且不会丢失信息。

现有的一种文本压缩方式是LZO(Lempel Ziv Oberhumer)压缩,其使用字典表对数据中重复出现的字符串进行替换,从而实现压缩。该种文本压缩方式的安全性较低。



技术实现要素:

有鉴于此,本申请提供了一种文本压缩方法,用以提高文本的安全性。另外,本申请还提供了一种文本压缩装置,用以保证所述方法在实际中的应用及实现。

为实现所述目的,本申请提供的技术方案如下:

本申请的第一方面提供了一种文本压缩方法,应用于分布式集群HADOOP中,所述HADOOP中的多个机器节点使用计算框架MapReduce并行执行所述文本压缩方法,所述文本压缩方法包括:

在所述MapReduce的Map阶段,从原始文本文件中,确定采样词组;

在所述MapReduce的Reduce阶段,生成每个所述采样词组的映射函数,并将映射函数保存在关系数据库中;其中,所述映射函数表示所述采样词组与相应编码之间的对应关系,且所述编码占用的存储空间不高于所述采样词组占用的存储空间;

使用所述映射函数,对所述原始文本文件进行压缩,获得压缩文件;

接收到待查询词组后,使用所述映射函数,对所述待查询词组进行压缩,获得待查询压缩词组;

在所述压缩文件中,查找所述待查询压缩词组。

本申请的第二方面提供了一种文本压缩装置,应用于分布式集群HADOOP中,所述HADOOP中的多个机器节点使用计算框架MapReduce并行触发所述文本压缩装置,该装置包括:

采样词组确定模块,用于在所述MapReduce的Map阶段,从原始文本文件中,确定若干采样词组;

映射函数生成模块,用于在所述MapReduce的Reduce阶段,生成每个所述采样词组的映射函数,并将映射函数保存在关系数据库中;其中,所述映射函数表示采样词组与编码之间的对应关系,且所述编码占用的存储空间不高于所述采样词组的存储空间;

压缩文件获得模块,用于使用所述映射函数,对所述原始文本文件进行压缩,获得压缩文件;

待查询词组压缩模块,用于接收到待查询词组后,使用所述映射函数,对所述待查询词组进行压缩,获得待查询压缩词组;

待查询词组查询模块,用于在所述压缩文件中,查找所述待查询压缩词组。

由以上技术方案可知,本申请提供了一种文本压缩方法,该应用在HADOOP集群中,HADOOP集群中的多个机器节点可以并行执行该文本压缩方法,该方法使用计算框架MapReduce在原始文本文件中,提取采样词组,并为每个采样词组设置其所对应的编码,采样词组与编码之间的对应关系可以作为映射函数,获得映射函数后,使用映射函数对原始文本文件进行整体压缩,获得压缩文件,并且在接收到待查询词组后,可以使用该映射函数,对待查询词组进行压缩后获得压缩词组,在压缩文件中,查找压缩词组。在本申请中,映射函数是基于待压缩的原始文本文件自身生成的,这样,一方面,不同的原始文本文件会生成不同的映射函数,相对于现有内容固定的字典表而言,映射函数是根据当前待压缩文件生成的,映射函数的安全性较高,进而获得的压缩文件不易被破解,保密性较高,另一方面,映射函数可以反映待压缩的原始文本文件的数据特征,使用该映射函数生成的压缩文件压缩率较高。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请提供的文本压缩方法实施例1的流程图;

图2为本申请提供的提取采样词组的具体流程图;

图3为本申请提供的为采样词组生成编码的具体流程图;

图4为本申请提供的使用映射树生成压缩文件的具体流程图;

图5为本申请提供的一种映射树的示意图;

图6为本申请提供的文本压缩方法实施例2的流程图;

图7为本申请提供的文本压缩装置实施例1的结构示意图;

图8为本申请提供的文本压缩装置实施例2的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

参见图1,其示出了本申请提供的文本压缩方法实施例1的流程。在具体应用中,该文件压缩方法应用在HADOOP集群中,HADOOP集群中的各个机器节点并行执行该文本压缩方法。

如图1所示,文本压缩方法实施例1可以包括步骤S101~步骤S103。

步骤S101:在原始文本文件中,确定若干采样词组。

其中,在原始文本文件中,提取多个采样词组。在具体的应用场景中,该文本文件是从关系型数据库中导出的文件,且文件仅具有少量字符。

HADOOP集群中的机器节点可以使用计算框架MapReduce进行文本压缩方法。具体地,在MapReduce的Map阶段,从原始文本文件中,提取若干采样词组。

优选的提取的方式是在原始文件中隔行提取。采样词组中包含一个或多个词元素,词元素可以是数字、字符等。采样词组的长度(即采样词组中包含的词元素的个数)可以相同,也可以不同。

例如,从原始文本文件中,提取到的采样词组包括“11”、“12”、“112”、“122”、“1121”、“1121”等。

步骤S102:生成每个采样词组的映射函数;其中,映射函数表示采样词组与编码之间的对应关系,且编码的存储空间不高于采样词组的存储空间。

具体地,在MapReduce的Reduce阶段,生成映射函数。映射函数可以保存在关系型数据库中。

其中,为每个采样词组生成其所对应的编码,并将采样词组与编码之间的映射关系称为映射函数。例如,映射函数可以表示为Y=f(x),其中,x表示采样词组,Y表示编码,x和Y可以直接是一一对应的关系。

需要说明的是,为了实现压缩,编码所占用的存储空间不高于采样词组所占用的存储空间。在某些具体应用场景中,采样词组的种类个数较少,如不超过255个,编码可以是0-254之间的数值,这些编码仅占用1个字节,可以实现较高的压缩比。

例如,采样词组“11”中2个字符占据4个字节,其所对应的编码为仅占据1个字节的数值15,在此种情况下,压缩比能达到25%以上。

步骤S103:使用映射函数,对原始文本文件进行压缩,获得压缩文件。

进一步地,使用映射函数,逐行对原始文本文件中的数据进行压缩,从而生成压缩文件。

需要说明的是,为了实现原始文本文件的安全存储与并行处理,原始文本文件可以存储在分布式文件系统HDFS中。分布式文件系统HDFS中包含多个节点设备,原始文本文件被划分为多个小文件,分别保存在该多个节点设备中,因此,在进行压缩时,多个节点设备可以同时使用映射函数,对本节点设备上存储的小文件进行压缩,并行压缩方式的压缩效率较高。

由以上技术方案可知,本申请提供了一种文本压缩方法实施例,本实施例在原始文本文件中,提取采样词组,并为每个采样词组设置其所对应的编码,采样词组与编码之间的对应关系可以作为映射函数,获得映射函数后,使用映射函数对原始文本文件进行整体压缩,获得压缩文件。在本实施例中,映射函数是基于待压缩的原始文本文件自身生成的,不同的原始文本文件会生成不同的映射函数,相对于使用同一个压缩函数(即使用相同的字典表)的现有技术而言,压缩文件不易被破解,安全性较高。并且,映射函数可以反映待压缩的原始文本文件的数据特征,使用该映射函数生成的压缩文件压缩率较高。

本申请的一个具体应用是,对银行业务系统生成的文本数据进行压缩。具体地,银行业务系统中的一类数据存储在数据表中,数据表中的数据是结构化的数据,该类结构化的数据可以导出至文本文件中。

需要说明的是,导出的文本文件具有特殊的数据特征,包含数字型字符及少量英文字符。其中,英文字符通常不属于业务数据,仅用来表示格式,如分隔符、换行字符、小数点等。数字型字符有些是单个的数字字符(即0-9),也有连续的多个数字字符组成的字符串。

本申请可以为单个的数字字符及英文字符设置固定的编码。如下表1所示,将数字字符0至9的编码设置为数值0-9,将换行字符的编码设置为10、将小数点的编码设置为11,将空格的编码设置为12。当然,英文字符的种类及其所对应的编码可以为其他,并非局限于表1所示。

表1

以上单个数字字符及英文字符的编码可以是固定编码,可以知道的是,原始文本文件中除了此两种数据外,还包含连续多个数字字符组成的字符串,以下具体说明如何生成字符串所对应的映射函数。

如图2所示,在原始文本文件中确定采样词组的具体流程包括步骤S201~步骤S203。

步骤S201:在原始文本文件中,每隔预设行间隔,获取单行的采样文本;其中,采样文本中包括若干词元素串,且各个词元素串之间设置有分隔符。

其中,原始文本文件包括多行文本,采用隔行方式获取采样数据,即每隔预设的行数,便获取一行采样文本。采样文本中包含多个词元素串,在此种应用场景下,词元素串即上文多个数字字符组成的字符串。

各个字符串之间使用分隔符进行隔开,从而可以保证字符串的结构性。具体来讲,在本应用场景中,原始文本文件中的字符串源自于数据表中的字段,字段值虽然包括多个字符,但多个字符是连续的、结构化的。字符串不能随意分割压缩,否则生成的压缩文件不满足应用要求。

例如,文本文件中的一行采样文本为“1121113||1121114”,其包括两个“1121113”及“1121114”两个字符串。字符串表示的是存款流水号,为了保证存款流水号的结构性,使用分隔符“||”进行分隔。

需要说明的是,原始文本文件中,一个结构化的字符串并不会分隔在两行中,这样,获取到的采样文本的末尾或者开头并不会出现一个连续字符串的部分字符,换句话说,采样文本中的各个词元素串均是完整的结构化的字符串。

步骤S202:在每行采样文本中,根据分隔符,对各个词元素串进行分割。

其中,获得采样文本后,便可以根据分隔符,提取出各个字符串。例如,提取到两个字符串,分别为“1121113”及“1121114”。

提取到各个字符串后,则可以按照步骤S203的方式提取每个字符串中的采样词组。当然,本步骤还可以与下述步骤S203交替执行,即每提取到一个字符串便执行步骤S203以提取采样词组,然后,提取下一个字符串,再执行步骤S203以提取采样词组。

步骤S203:使用变长滑动窗口,在词元素串中,提取采样词组。

其中,滑动窗口可以从字符串的头部开始,依次提取采样词组。但是,本申请中的滑动窗口的窗口长度可以是变化的。即,首先使用初始化长度的滑动窗口,按照上述方法在字符串中提取采样词组,然后将窗口长度增加,继续按照上述方法在字符串中提取采样词组。可见,提取过程中,滑动窗口的窗口长度是变化的,因此,提取到的采样词组的长度也是不尽相同的。

本步骤的具体实现方式可以包括以下步骤A1~步骤A2。

步骤A1:初始化窗口当前值,获得滑动窗口。

例如,将窗口的当前值初始化为2,即每次采样两个长度的字符。

步骤A2:使用滑动窗口,从词元素串的头部开始,每次滑动一个长度,提取采样词组,若到达词元素串的末尾,则将滑动窗口的窗口当前值加1,获得新的滑动窗口,返回使用新的滑动窗口,从词元素串的头部开始,提取采样词组;若滑动窗口的窗口当前值达到预设值,则返回在下一词元素串中,提取采样词组,直至最后一个词元素串。

例如,字符串为“1121113”,从该字符串的头部开始,使用2个长度的滑动窗口提取到的采样词组分别为:“11”、“12”、“21”、“11”、“11”及“13”。滑动窗口到达末尾后,将滑动窗口的窗口长度设置为3,再次从该字符串的头部开始,提取到的采样词组分别为:“112”、“121”、“211”、“111”及“113”。

当然,在每次增加滑动窗口的窗口长度后,首先判断增加后的窗口长度是否达到预设值,若达到,则不再继续在字符串中提取采样词组,而是获取下一字符串,并继续按照步骤A1及步骤A2的方式提取采样词组,直至最后一个采样词组。

以上一个示例中的字符串“1121113”为例,窗口长度对应的预设值为3,则在字符串“1121113”中提取到的采样词组为“11”、“12”、“21”、“11”、“11”、“13”、“112”、“121”、“211”、“111”及“113”。

获得采样词组后,如图3所示,生成每个采样词组的映射函数的具体流程包括步骤S301~步骤S302。

步骤S301:统计每个采样词组出现的次数。

或者可以说,将包含相同词元素的采样词组作为一个统计组,并统计各个统计组中采样词组的个数。

可以理解的是,上述获取的采样词组可能存在重复的情况,本步骤即统计每种采样词组的个数。具体地,对上述获得的所有采样词组进行分组,并统计每个分组中包含的采样词组的个数。

在本应用场景中,词元素即字符串中的数字字符,因此,将包含相同数字字符的字符串划分为一个统计组,并统计每个统计组内的字符串的个数。

以上述采样词组为例,分组并统计后可以获得以下数据,即:<11,3>、<211,1>、<111,1>、<113,1>、<112,1>、<121,1>、<12,1>、<21,1>及<13,1>。其中,尖括号内的第一项内容为采样词组,第二项内容为采样词组的个数。

步骤S302:按照出现次数由高到低的顺序,设置每个采样词组的编码;其中,出现次数越高的采样词组的编码越小。

具体地,可以将占据1个字节的数值依次设置为统计组中各个采样词组的编码。

其中,按照采样词组个数由多到少的顺序,依次为各个采样词组设置编码。可选地,使用1个字节的字节值进行编码。具体地,1个字节的字节值包括0~254的255个数值,由以上可知,单个数字字符及英文字符已经占据固有的一些数值作为编码,则将剩余的数值依次为各个采样词组进行编码。

例如下表2所示,固有编码为0~14,则从15开始为采样词组设置编码,如将采样词组“11”的编码设置为13,将采样词组“13”的编码设置为14,将采样词组“211”的编码设置为15。

表2

按照以上图2及图3所示的步骤,便可以从原始文本文件中,提取到采样词组,并为采样词组设置各自的编码。其中,采样词组与编码之间的对应关系即采样词组的映射函数。

使用以上方式生成的映射函数,不仅可以提高压缩效率,还可以进一步提高压缩比。具体来讲,映射函数是根据隔行的采样文本生成的,因此可以提高映射函数的生成效率,进而提高压缩效率。另外,映射函数中的编码是1个字节的字节值,压缩比可以达到25%以上(即将至少4个字节映射为1个字节)。对于存在较多空格、连续0的金融类数据而言,压缩比可以达到10%。相较于现有的压缩方法,具有较高的压缩比。

进一步地,采样词组、采样词组的编码、采样词组与编码之间的映射函数保存在关系型数据库中,原始文本文件存储在分布式文件系统中,且关系型数据库与分布式文件系统相互独立。这样,映射函数和原始文本文件是分开存储的。

现有的LZO(Lempel Ziv Oberhumer)压缩,使用字典表对数据中重复出现的字符串进行替换来实现压缩,但对于仅包含少量字符组成的海量文本文件,LZO压缩较难自动感知数据重复率、出现频率等信息。另外,LZO压缩需要将字典表保存在HDFS系统的压缩文件中,若保存字典表的文件头损坏将导致解压缩失败。

将映射函数与原始文本文件分开独立存储的方式,不仅可以避免映射函数受损导致压缩文件也不可再被解压的问题,而且相当于压缩文件的密钥与压缩文件分离,从而提高了压缩文件的保密性。

在生成映射函数后,使用映射函数,对原始文本文件进行压缩的具体流程如图4所示,包括以下步骤S401~步骤S403。

步骤S401:依据各个映射函数,生成映射树;其中,映射树的非根节点为采样词组中的词元素,从根节点到叶子节点的路径所经过的词元素构成采样词组,每个采样词组具有各自的编码。

其中,根据以上各个采样词组的映射函数,生成映射树。参见图5所示的映射树,除根节点以外,各个叶子节点表示的是采样词组中的词元素,如第一层级上的叶子节点包括“0”、“1”、“2”...“9”、“\r”、“.”及“+”。

从根节点“1”到叶子节点“1”表示的是采样词组“11”,从根节点“2”、经过中间节点“1”、到达叶子节点“1”表示的是采样词组“211”。需要说明的是,由于根节点内并未包含词元素,因此,从根节点开始所经过的词元素实际上是从第一层叶子节点开始所经过的词元素。

每条路径获得的采样词组均具有各自对应的编码,如采样词组“11”的编码为13,采样词组“13”的编码为14,采样词组“211”的编码为15。

步骤S402:将原始文本中的词元素与映射树中的节点比较,以对原始文本进行分词操作,得到待压缩词组;其中,待压缩词组所包含的词元素与映射树中相应采样词组所包含的词元素相同。

其中,从映射树的第一层叶子节点开始,将原始文本文件中的词元素依次与各个叶子节点比较,从而实现分词。

例如,将字符串“1121113”与映射树中节点比较以进行分词,得到分词“11”,将“21113”与映射树中节点比较以进行分词,得到分词“211”,再将“13”与映射树中节点比较以进行分词,得到分词“13”。从而,字符串“1121113”的分词结果为“11”、“211”及“13”。

需要说明的是,使用映射树进行分词时,需要依循最长匹配原则,即将经过最多相同节点的词元素作为一个分词。假设,映射树中包含依次经过节点“1”和“1”的采样词组,也包含依次经过节点“1”、“1”和“3”的采样词组,若原始文本中包含有“1132311”的字符串,则会切分出“113”的分词,而非“11”的分词。

步骤S403:将所述待压缩词组替换为相应采样词组所对应的编码,获得压缩文件。

进而,将分词替换为采样词组对应的编码,从而实现压缩。例如,分词“11”、“211”及“13”分别替换为13、15、14,因此,该段字符串“1121113”被压缩为131514。

获得压缩文件后,还可以在压缩文件中,查询待查询词组。具体地,如图6所示,其示出了文本压缩方法实施例2的流程。如图6所示,本实施例可以具体包括步骤S601~步骤S605。

步骤S601:在原始文本文件中,确定若干采样词组。

步骤S602:生成每个采样词组的映射函数,并将映射函数保存在关系型数据库中;其中,映射函数表示采样词组与编码之间的对应关系,且编码的存储空间不高于采样词组的存储空间。

步骤S603:使用映射函数,对原始文本文件进行压缩,获得压缩文件。

其中,以上步骤S601~步骤S603可以参见图1所示的步骤S101~步骤S103,此处并不赘述。

步骤S604:接收到待查询词组后,使用映射函数,对待查询词组进行压缩,获得待查询压缩词组。

其中,在接收到某个待查询的词组后,可以使用上述生成的映射函数,压缩待查询词组。例如,待查询词组为“1121113”,其被压缩为131514。

步骤S605:在压缩文件中,查找待查询压缩词组。

从而,在压缩文件中,查找是否存在该待查询的压缩词组。若存在,则执行后续处理操作,如后续处理操作可以是但不限定于定位,或者将压缩文件中该待查询压缩词组周围的数据解压缩,即使用与映射函数对应的逆映射函数对待查询压缩词组周围的数据解压缩等。若不存在,则输出不存在的检索结果。

本申请提供的在压缩文件中检索待查询词组的方式,不需要对压缩文件进行解压缩操作,而是将待查询词组压缩后,在压缩文件中进行检索,该种方式检索效率较高。

以下对本申请提供的文本压缩装置进行介绍,需要说明的是,下文有关文本压缩方法的说明可以参见上文提供的文本压缩装置,以下并不赘述。

与上述文本压缩方法实施例1相对应,本申请提供了一种文本压缩装置实施例1。如图7所示,本实施例可以具体包括:采样词组确定模块701、映射函数生成模块702及压缩文件获得模块703。

采样词组确定模块701,用于在原始文本文件中,确定若干采样词组;

映射函数生成模块702,用于生成每个采样词组的映射函数,并将映射函数保存在关系型数据库中;其中,映射函数表示采样词组与编码之间的对应关系,且编码的存储空间不高于采样词组的存储空间;

压缩文件获得模块703,用于使用映射函数,对原始文本文件进行压缩,获得压缩文件。

由以上技术方案可知,本申请提供了一种文本压缩装置实施例,本实施例中的采样词组确定模块701在原始文本文件中,提取采样词组,映射函数生成模块702为每个采样词组设置其所对应的编码,采样词组与编码之间的对应关系可以作为映射函数,获得映射函数后,压缩文件获得模块703使用映射函数对原始文本文件进行整体压缩,获得压缩文件。在本实施例中,映射函数是基于待压缩的原始文本文件自身生成的,不同的原始文本文件会生成不同的映射函数,相对于使用同一个压缩函数的现有技术而言,压缩文件不易被破解,安全性较高。并且,映射函数可以反映待压缩的原始文本文件的数据特征,使用该映射函数生成的压缩文件压缩率较高。

与上述文本压缩方法实施例2相对应,本申请提供了一种文本压缩装置实施例2。如图8所示,本实施例可以具体包括:采样词组确定模块701、映射函数生成模块702、压缩文件获得模块703、待查询词组压缩模块704及待查询词组查询模块705。

待查询词组压缩模块704,用于接收到待查询词组后,使用映射函数,对待查询词组进行压缩,获得待查询压缩词组;

待查询词组查询模块705,用于在压缩文件中,查找待查询压缩词组。

在一个具体实施方式中,采样词组确定模块701可以具体包括:采样文本获取子模块、词元素串分割子模块及采样词组提取子模块。

采样文本获取子模块,用于在原始文本文件中,每隔预设行间隔,获取单行的采样文本;其中,采样文本中包括若干词元素串,且各个词元素串之间设置有分隔符;

词元素串分割子模块,用于在每行采样文本中,根据分隔符,对各个词元素串进行分割;

采样词组提取子模块,用于使用变长滑动窗口,在词元素串中,提取采样词组。

其中,采样词组提取子模块可以具体包括:滑动窗口初始化单元及滑动窗口截取单元。

滑动窗口初始化单元,用于初始化窗口当前值,获得滑动窗口;

滑动窗口截取单元,用于使用滑动窗口,从词元素串的头部开始,每次滑动一个长度,提取采样词组,若到达词元素串的末尾,则将滑动窗口的窗口当前值加1,获得新的滑动窗口,返回使用新的滑动窗口,从词元素串的头部开始,提取采样词组;若滑动窗口的窗口当前值达到预设值,则返回在下一词元素串中,提取采样词组,直至最后一个词元素串。

在一个具体实施方式中,映射函数生成模块702可以具体包括:采样词组个数统计子模块及采样词组编码子模块。

采样词组个数统计子模块,用于统计每个采样词组出现的次数;

采样词组编码子模块,用于按照出现次数由高到低的顺序,设置每个采样词组的编码;其中,出现次数越高的采样词组的编码越小。

在一个具体实施方式中,压缩文件获得模块703可以具体包括:映射树生成子模块、文本分词子模块及文本压缩子模块。

映射树生成子模块,用于依据各个映射函数,生成映射树;其中,映射树的非根节点为采样词组中的词元素,从根节点到叶子节点的路径所经过的词元素构成采样词组,每个采样词组具有各自的编码;

文本分词子模块,用于将原始文本中的词元素与映射树中的节点比较,以对原始文本进行分词操作,得到待压缩词组;其中,所述待压缩词组所包含的词元素与所述映射树中相应采样词组所包含的词元素相同;

文本压缩子模块,用于将所述待压缩词组替换为相应采样词组所对应的编码,获得压缩文件。

另外,采样词组、采样词组的编码、采样词组与编码之间的映射函数保存在关系型数据库中,原始文本文件存储在分布式文件系统中,且关系型数据库与分布式文件系统相互独立。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括上述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1