CN103797480B - 提取方法、提取程序、提取装置、以及提取*** - Google Patents

提取方法、提取程序、提取装置、以及提取*** Download PDF

Info

Publication number
CN103797480B
CN103797480B CN201180073519.7A CN201180073519A CN103797480B CN 103797480 B CN103797480 B CN 103797480B CN 201180073519 A CN201180073519 A CN 201180073519A CN 103797480 B CN103797480 B CN 103797480B
Authority
CN
China
Prior art keywords
information
file
character
computer
compressed
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
Application number
CN201180073519.7A
Other languages
English (en)
Other versions
CN103797480A (zh
Inventor
片冈正弘
松村量
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of CN103797480A publication Critical patent/CN103797480A/zh
Application granted granted Critical
Publication of CN103797480B publication Critical patent/CN103797480B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/14Details of searching files based on file metadata
    • G06F16/148File search processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • G06F16/285Clustering or classification

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)
  • Library & Information Science (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Multimedia (AREA)

Abstract

本发明提供提取方法、提取程序、提取装置、以及提取***。对段(sg2(1))进行字符信息“人”的压缩符号(P(人))的汇集出现映射、字符信息“形”的压缩符号(P(形))的汇集出现映射、以及汇集删除映射的AND运算。AND结果为“1100”,可知在段(sg1(1))、(sg1(2))中有可能存在字符信息“人”和“形”。由于根据该AND结果指定了段(sg1(1))、(sg1(2)),因此执行AND运算。由此指定段(sg0(1))、段(sg0(5)),执行AND运算。由此从段(sg0(1))指定文件编号3,从段(sg0(5))指定文件编号19。因此可知在压缩文件(f3)、(f19)存在字符信息“人”和“形”这双方。

Description

提取方法、提取程序、提取装置、以及提取***
技术领域
本发明涉及提取信息的提取方法、提取程序、提取装置、以及提取***。
背景技术
以往,存在如下技术:在输入有包含规定的字符信息的检索字符串的情况下,参照表示检索对象的多个文件的哪一个包含规定的字符信息的索引信息,来筛选检索对象的文件中的包含规定的字符信息的文件。
专利文献1:专利第2986865号公报
发明内容
然而,若检索对象的文件数增加,则与此相应地索引信息的大小也增加。通过索引信息的大小增加,参照索引信息的处理所需要的时间增加,因此作为结果存在检索处理的时间增加这样的问题。
本发明的目的在于,为了消除上述的现有技术的问题点而提供能够抑制与文件数增加对应的检索处理时间的增加的提取方法、提取程序、提取装置、以及提取***。
为了解决上述技术问题而达到目的,根据本发明的一个方面,提出在存储单元存储表示针对多个文件的每一个是否包含规定的字符信息的第1信息、和表示上述多个文件的至少任意一个是否包含上述规定的字符信息的第2信息,并在接收到对上述规定的字符信息的检索请求时,若检测出上述第2信息表示包含上述规定的字符信息这一意思,则基于上述第1信息来提取包含上述规定的字符信息的文件的提取方法、提取程序、提取装置、以及提取***。
根据本发明的一个方面,实现能够抑制与文件数增加对应的检索处理时间的增加这样的效果。
附图说明
图1是表示本实施方式所涉及的压缩符号映射的分散化的说明图。
图2是表示存储有段组的服务器的说明图。
图3是表示追加了对象文件的情况下的压缩符号映射的追加例的说明图。
图4是表示出现映射的阶层化的说明图。
图5是表示删除映射的阶层化的说明图。
图6是详细表示被阶层化的段组的说明图。
图7是表示安装有图6所示的阶层结构段组的计算机***的构成例的说明图。
图8是表示使用了阶层结构段组的压缩文件的筛选例的说明图。
图9是表示实施方式所涉及的计算机的硬件构成例的框图。
图10是表示本实施方式所涉及的***构成例的说明图。
图11是表示本实施方式所涉及的计算机或者计算机***的功能构成例1的框图。
图12是表示图11所示的计算机的合计部~第2压缩部的处理流程的说明图。
图13是表示由合计部进行的合计以及由作成部进行的压缩符号映射Ms的作成例的说明图。
图14是详细表示(1)出现次数的合计的说明图。
图15是详细表示图13的(2)计算压缩符号长(N=11)的说明图。
图16是详细表示图13的(3)确定叶子数~(5)生成叶子的结构体(N=11)的说明图。
图17是表示每个字符信息的校正结果的说明图。
图18是详细表示图13的(6)生成叶子的指针(N=11)的说明图。
图19是详细表示图13的(7)2N分枝无节点哈夫曼树H的构建(N=11)的说明图。
图20是表示叶子的结构体的说明图。
图21是表示特定单一字符的结构体的说明图。
图22是表示分割字符码的结构体的说明图。
图23是表示基础词汇的结构体的说明图。
图24是表示压缩符号映射的生成例的说明图。
图25是表示由作成部进行的压缩符号映射作成处理步骤例的流程图。
图26是表示图25所示的合计处理(步骤S2501)的详细处理步骤例的流程图。
图27是表示图26所示的对象文件的合计处理(步骤S2603)的详细处理步骤例的流程图。
图28是表示字符出现频度合计表的说明图。
图29是表示图27所示的基础词汇合计处理(步骤S2702)的详细处理步骤例的流程图。
图30是表示基础词汇出现频度合计表的说明图。
图31是表示图29所示的最长一致检索处理(步骤S2901)的详细处理步骤的流程图。
图32是表示图25所示的映射分配数决定处理(步骤S2502)的详细处理步骤例的流程图。
图33是表示图25所示的再合计处理(步骤S2503)的详细处理步骤例的流程图。
图34是表示对象文件的再合计处理(步骤S3303)的详细处理步骤例的流程图。
图35是表示上位分割字符码出现频度合计表的说明图。
图36是表示下位分割字符码出现频度合计表的说明图。
图37是表示图34中所示的二元词串(2-gram)字符串确定处理(步骤S3406)的详细处理步骤的流程图。
图38是表示二元词串(2-gram)字符串出现频度合计表的说明图。
图39是表示图25所示的哈夫曼树生成处理(步骤S2504)的详细处理步骤例的流程图。
图40是表示图39所示的枝数确定处理(步骤S3904)的详细处理步骤例的流程图。
图41是表示图39所示的构建处理(步骤S3905)的详细处理步骤的流程图。
图42是表示图41所示的指向叶子的指针生成处理(步骤S4103)的详细处理步骤的流程图。
图43是表示图25所示的映射作成处理(步骤S2505)的详细处理步骤例的流程图。
图44是表示图43所示的对象文件的映射作成处理(步骤S4303)的详细处理步骤的流程图。
图45是表示图44中所示的基础词汇出现映射作成处理(步骤S4402)的详细处理步骤例的流程图。
图46是表示图44中所示的特定单一字符出现映射作成处理(步骤S4403)的详细处理步骤例的流程图。
图47是表示图46中所示的分割字符码出现映射作成处理(步骤S4603)的详细处理步骤例的流程图。
图48是表示图44所示的二元词串(2-gram)字符串映射作成处理(步骤S4404)的详细处理步骤例的流程图。
图49是表示二元词串(2-gram)字符串出现映射生成处理(步骤S4803)的详细处理步骤例的流程图。
图50是表示使用了2N分枝无节点哈夫曼树H的压缩处理的具体例的说明图。
图51是表示由第1压缩部进行的使用了2N分枝无节点哈夫曼树H的对象文件组的压缩处理步骤例的流程图。
图52是表示图51所示的压缩处理(步骤S5103)的详细处理步骤的流程图(其1)。
图53是表示图51所示的压缩处理(步骤S5103)的详细处理步骤的流程图(其2)。
图54是表示图51所示的压缩处理(步骤S5103)的详细处理步骤的流程图(其3)。
图55是表示出现率与出现率区域的关系的说明图。
图56是表示除出现率区域外还具有压缩模式的压缩模式表的说明图。
图57是表示B区域以及B’区域的情况下的压缩模式的说明图。
图58是表示C区域以及C’区域的情况下的压缩模式的说明图。
图59是表示D区域以及D’区域的情况下的压缩模式的说明图。
图60是表示E区域以及E’区域的情况下的压缩模式的说明图。
图61是表示压缩符号映射压缩处理步骤的流程图。
图62是表示本实施方式所涉及的计算机或者计算机***的功能构成例2的框图。
图63是表示文件解压例的说明图。
图64是表示图63中的解压处理的具体例的说明图(其1)。
图65是表示图63中的解压处理的具体例的说明图(其2)。
图66是表示文件追加处理的具体例的说明图。
图67是表示段追加处理的详细处理步骤的流程图。
图68是表示基于图67所示的追加文件的映射更新处理(步骤S6709)的详细处理步骤的流程图(前半)。
图69是表示基于图67所示的追加文件的映射更新处理(步骤S6709)的详细处理步骤的流程图(后半)。
图70是表示段阶层化处理的详细处理步骤的流程图。
图71是表示图70所示的选择出现映射汇集处理(步骤S7004)的详细处理步骤的流程图。
图72是表示图70所示的删除映射汇集处理(步骤S7005)的详细处理步骤的流程图。
图73是表示本实施方式所涉及的检索处理步骤的流程图。
图74是表示图73所示的指针确定处理(步骤S7302)的详细处理步骤的流程图(其1)。
图75是表示图73所示的指针确定处理(步骤S7302)的详细处理步骤的流程图(其2)。
图76是表示图73所示的文件筛选处理(步骤S7303)的详细处理步骤的流程图。
图77是表示图73所示的使用了2N分枝无节点哈夫曼树H的解压处理(步骤S7304)的详细处理步骤例的流程图(其1)。
图78是表示图73所示的使用了2N分枝无节点哈夫曼树H的解压处理(步骤S7304)的详细处理步骤例的流程图(其2)。
具体实施方式
以下参照附图,对本发明的实施方式详细地进行说明。另外,在本说明书中,“字符信息”是指,构成文本数据的单一字符、基础词汇、分割字符码等。对象文件组例如是文档文件、网页、电子邮件等电子数据,例如是文本形式、HTML(HyperText Markup Language:超文本标记语言)形式、XML(Extensible Markup Language:可延伸标记语言)形式的电子数据。
此外,“单一字符”是指,由1个字符码表现的字符。单一字符的字符码长根据字符码种类而不同。
例如,在UTF(Unicode Transformation Format:统一码变换格式)16的情况下是16位码,在ASCII(American Standard Code for Information Interchange:美国标准信息交组)码的情况下是8位码,在移位JIS(Japanese Industrial Standard:日本工业标准)码的情况下是8位码。在通过移位JIS码表现日语字符的情况下,成为组合两个8位码。
此外,“基础词汇”是指,在小中学校学习的基本词汇,或以特定的字符串表现的保留字。若以“This is a···.”的英文为例,则是“This”、“is”、“a”等词汇,其被分类成千词级、两千词级、数千词级,在英日辞典中,赋予“***”、“**”、“*”标记。此外,保留字是指事先决定的字符串,例如列举出HTML的标签(例如<br>)。
此外,“分割字符码”是指,将单一字符分割成上位码和下位码的各个码。在本实施方式中,如后述那样,存在将单一字符分割成上位码和下位码的情况。例如,“芝”这一单一字符的字符码在UTF16的情况下,以“9D82”表现,被分割成上位分割字符码“0x9D”和下位分割字符码“0x82”。
此外,“词串(gram)”是指字符单位。例如,对于单一字符,其一个字符为一元词串(1-gram)。对于分割字符码,分割字符码单独为一元词串。因此,单一字符“芝”为二元词串(2-gram)。另外,在本实施方式中,作为字符码,以UTF16举例进行说明。
此外,在本说明书中,以在设为“位有效”的情况下该位值为“1”,在设为“位失效”的情况下该位值为“0”进行说明。另外,也可以在设为“位有效”的情况下该位值为“0”,在设为“位失效”的情况下该位值为“1”。
“出现映射”是指用于全文检索的索引,是连结了指定字符信息的指针和表示字符信息在各对象文件中的有无的位串而得的位串。在检索处理时,能够将该位串用作根据位的有效/失效而表示是否包含检索对象的字符信息的索引。作为指定字符信息的指针,例如,采用字符信息的压缩符号。指定字符信息的指针例如也可以使用字符信息本身。“压缩符号映射”是指,将每个由压缩符号的指针表示的字符信息的出现映射集中起来的位映射。对于二元词串(2-gram)字符串的压缩符号映射,为组合了第1词串的压缩符号和第2词串的压缩符号的压缩符号串。
“二元词串(2-gram)字符串”是指一元词串(1-gram)的字符码连接的字符串。例如,在“人形芝居”这样的字符串中,包含有2连接字符“人形”、“形芝”、“芝居”。2连接字符“人形”的“人”、“形”分别为未被分割的单一字符,因此2连接字符“人形”保持原样地为二元词串(2-gram)字符串。
由于“芝”如上述那样被分割,因此单一字符“形”和“芝”的上位分割字符码“0x9D”的组合为二元词串(2-gram)字符串。此外,上位分割字符码“0x9D”和下位分割字符码“0x82”的组合也为二元词串(2-gram)字符串。另外,下位分割字符码“0x82”和未被分割的单一字符“居”的组合也为二元词串(2-gram)字符串。
根据基础词汇,在对象文件组被压缩的情况下,能够在压缩符号映射的生成时、检索时通过一个路径进行访问。另外,在未压缩对象文件组的情况下,作为指定字符信息的指针,也可以保持原样地采用字符信息的字符码。
此外,“删除映射”是指,以位串表示对象文件的存在或者删除的索引。另外,在删除映射中,与符合有效(=1)的位对应的文件编号的对象文件意味着存在。另一方面,若为失效(=0),则该对象文件意味着已被删除。由此,在使用压缩符号映射进行检索的情况下,即使不删除对象文件本身,只要通过使与对象文件对应的删除映射为失效,就能够从检索对象中除去对象文件。
图1是表示本实施方式所涉及的压缩符号映射的分散化的说明图。压缩符号映射以规定的文件数n为单位(例如n=256)被分割。将被分割的每一个称作段。
段sg0(1)是具有压缩文件f1~fn的压缩符号映射的段,段sg0(2)是具有压缩文件f(n+1)~f(2n)的压缩符号映射的段,段sg0(3)是具有压缩文件f(2n+1)~f(3n)的压缩符号映射的段。
段在初始状态下,仅存在段sg0(1),若由于文件追加而使文件数超过n,则生成段sg0(2),若文件数超过2n,则生成段sg0(3)。这样,通过文件数增加,最末尾的段sg0(K)成为具有压缩文件f((K-1)n+1)~f(Kn)的压缩符号映射的段(其中,K表示当前的段数。K是1以上的整数。)。
各段具有管理区域A1~AK(管理区域组As)。在管理区域A1~AK中存放有:指向在先段的指针、指向后续段的指针、指向构成该段内的压缩符号映射的各出现映射的指针、指向该段内的删除映射的指针、以及指向该段内的各压缩文件的指针。
对于前头段sg0(1),由于没有在先段,所以作为指向在先段的指针,例如存放“00000000h”。地址“00000000h”是指定前头段sg0(1)的逻辑地址。同样地,对于最末尾的段sg0(K),由于没有后续段,所以作为指向后续段的指针,例如存放“0FFFFFFFh”。若换言之,则作为指向后续段的指针,存放有“0FFFFFFFh”的段是最末尾段。
在K=1的情况下,即,在仅存在段sg0(1)的情况下,段sg0(1)的指向在先段的指针是“00000000h”,指向后续段的指针是“0FFFFFFFh”。若通过文件追加而使K=2,则段sg0(1)的指向后续段的指针从“0FFFFFFFh”变更为“指向段sg0(2)的指针”。
此外,在段sg0(2)的指向在先段的指针存放有“指向段sg0(1)的指针(段sg0(1)的地址“00000000h”)”。此外,在段sg0(2)的指向后续段的指针存放有“0FFFFFFFh”。这样,通过按每个段预先建立在先段以及后续段的关联,能够联合进行以段为单位的检索。
各段的压缩符号映射M1~MK(压缩符号映射Ms)虽然具有字符信息相同的出现映射,但是负责的文件编号不同。在各段的压缩符号映射M1~MK中负责的文件编号为该段保持的压缩文件的文件编号。例如,在段sg0(K)的压缩符号映射MK中,对于各字符信息的出现映射,具有表示文件编号(K-1)n~Kn的有无的位串。
对于各段的删除映射D1~DK(删除映射Ds),也与压缩符号映射组Ms同样,负责的文件编号不同。在各删除映射D1~DK中负责的文件编号为该段保持的压缩文件的文件编号。例如,在段sg0(K)的删除映射DK中,对于各字符信息的出现映射,具有表示针对文件编号(K-1)n~Kn的存在或者删除的位串。
图2是表示存储有段组的服务器的说明图。服务器200具有数据库201。在数据库201中存放有存档文件202。存档文件202具有批处理部211和追加部212。在批处理部211默认地存放有c个段sg0(1)~sg0(c)。在追加部212中存放有被追加的段sg0(c+1)~sg0(K)。另外,当在追加部212没有闲置区域的情况下,存放在能够经由网络而与服务器200通信的其他服务器。
图3是表示追加了对象文件的情况下的压缩符号映射的追加例的说明图。在(A)中,已登记有段sg0(1)、sg0(2),在针对字符信息LT1~LTz的压缩符号P(LT1)~P(LTz)的出现映射中,存放有文件编号1~2n的索引信息。
(B)表示从(A)的状态对出现映射组进行了压缩的状态。对压缩方法之后再叙述,作为进行压缩的时刻,例如,在成为1段的文件数n的倍数时进行压缩。在该情况下,由于文件数是n的倍数2n,所以按每个出现映射来压缩作为索引信息的位串。此外,在确认字符信息LT1~LTz的有无时进行解压。对解压方法也之后再叙述。这样,通常预先进行压缩保存,仅在需要时解压,由此能够实现节省存储空间化。
(C)表示从(B)的状态追加了新压缩文件f(2n+1)的状态。由于在作为(B)的最末尾段的段sg0(2)中无法存放压缩文件f(2n+1),所以新设定段sg0(3)来保存压缩文件f(2n+1)。此外,在段sg0(3)的压缩符号映射中,按每个压缩符号设定有针对压缩文件f(2n+1)的位。在(C)的例子中,对字符信息LT1、LT2设定有“1”,对LTz设定有“0”。
(D)表示从(C)的状态在段sg0(3)中追加了n个压缩文件f(2n+1)~f(3n)的状态。
(E)表示在(D)的状态下在段sg0(3)中追加了n个压缩文件f(2n+1)~f(3n),因此按每个压缩符号对段sg0(1)~sg0(3)的索引信息进行了压缩的状态。这样,当以段为单位积存了n个压缩文件时,进行出现映射的压缩。
图4是表示出现映射的阶层化的说明图。若增加段数,则按每个压缩符号而成为索引信息的位串变得冗余化。在冗余化的情况下,需要按每个压缩符号,即按每个字符信息,针对全文件数来确认表示有无的位的有效/失效,但是对不存在之处进行确认作业是不必要的,这成为检索时间增加的原因。因此,若按每个压缩符号,即按每个字符信息生成m+1个段,则以m个为单位汇集索引信息。
在图4中,作为例子,以将字符信息LTx的压缩符号P(LTx)的索引信息汇集在上位阶层的情况举例来进行说明。另外,“sgX(Y)”的X表示阶层编号,Y表示段编号。因此,在sgX(Y)的情况下,为第X阶层的第Y个段。此外,当前为止所说明的段sg0(1)~sg0(K)为第0阶层的段。
首先,对从作为基本阶层的第0阶层向作为上位阶层的第1阶层的汇集例进行说明。作为汇集的规则,在作为对象阶层的段的索引信息的位串全部为0,即,在该段内的对象文件组不存在字符信息LTx的情况下,汇集成“0”来作为上位阶层的索引。另一方面,在即使一个作为对象阶层的段的索引信息的位串存在“1”的情况下,即在该段内的对象文件组的至少一个存在字符信息LTx的情况下,汇集成“1”来作为上位阶层的索引。
例如,对于段sg0(1),由于存在“1”,因此对上位阶层的段sg1(1)设定“1”。同样地,对于段sg0(m),由于全部为0,因此对上位阶层的段sg1(1)设定“0”。该上位阶层的段sg1(1)的位的位置表示下位的段sg0(1)~sg0(m)的位置。这样,能够通过上位阶层的段的位值来确定下位段的索引信息的状态。
此外,这种汇集并不只在第0阶层与第1阶层之间进行,若最上位阶层的段数成为m个,则新生成上位阶层的段。例如,若在第1阶层中段形成到段sg1(m),则如上述那样生成第2阶层的段sg2(1)。另外,在图4中,表示了到第2阶层为止的例子,但是随着被追加的压缩文件数增加,汇集成第3阶层以上的阶层。
图5是表示删除映射的阶层化的说明图。对于删除映射,也和图4相同地以段为单位汇集成上位阶层。
图6是详细表示被阶层化的段组的说明图。在图6的阶层结构段组中,在第0阶层生成有如图1所示那样的m2个段sg0(1)~sg0(m2)。此外,针对上位阶层也生成有相同的数据结构的段sg1(1)~sg1(m)。例如,在第1阶层的段sg1(1)~sg1(m)中,按每个压缩符号而存放有在第0阶层中汇集而成的出现映射(汇集出现映射)。同样地,按每个压缩符号而存放有在第0阶层中汇集而成的删除映射(汇集删除映射)。
此外,与第0阶层相同,在每个管理区域设定有指向在先段的指针和指向后续段的指针。此外,也存放指向该段内的汇集出现映射的指针和指向汇集删除映射的指针。此外,在管理区域中分别存放有指向下位阶层的段(下位段)的指针。例如,在段sg1(1)中,存放有指向下位阶层的段sg0(1)的指针~指向段sg0(m)的指针,能够指定段sg0(1)~段sg0(m)。另外,在第1阶层以上的段不存放压缩文件。
图7是表示安装了图6所示的阶层结构段组SG的计算机***的构成例的说明图。在图7的阶层结构段组SG中,将m个段作为1个存档文件。另外,“AX(Y)”是存档文件的符号,X表示阶层编号,Y表示存档编号。因此,在AX(Y)的情况下,为第X阶层的第Y个存档文件。例如,存档文件A0(1)是第0阶层的段sg0(1)~sg0(m)的集合。
在图7的例子中,主服务器MS存放第1阶层以上的存档文件。此外,从属服务器S1、S2、…、S(2m+1)、…存放有由主服务器MS分配的1个存档文件。图7的存档文件的分配为1个例子,主服务器MS不需要负责全部的第1阶层以上的存档文件,可以使它们分散到其他服务器。此外,对于从属服务器S1、S2、…、S(2m+1)、…也不只是负责1个存档文件,也可以负责多个存档文件。
图8是表示使用了阶层结构段组SG的压缩文件的筛选例的说明图。在图8中,为了使说明简单化,将第0阶层的段的文件数n设为n=4,并设m=4。因此,虽然第0阶层段存在sg0(1)~sg0(16),但是对未图示的段省略说明。此外,在图8中,将最上位阶层作为第2阶层进行说明。此外,在图8中,实线箭头表示根据AND结果而指定了下位阶层的段,虚线箭头实际是不指定,但是为了与被指定的段对比而进行了图示。此外,在图8中,表示输入了“人形”来作为检索字符串的情况。
在(A)中,对于作为最上位阶层的第2阶层的段sg2(1),进行字符信息“人”的压缩符号P(人)的汇集出现映射、字符信息“形”的压缩符号P(形)的汇集出现映射、以及汇集删除映射的AND运算。AND结果为“1100”,可知在作为下位阶层的第1阶层的段sg1(1)、sg1(2)中,可能存在字符信息“人”以及“形”。
此外,对于下位段编号3、4,AND结果为“0”。因此,无需进行段sg1(3)、sg1(4)的各AND运算,就可知段sg1(3)、sg1(4)的各AND结果全部为0。
在(B)中,根据第2阶层的AND结果而指定了第1阶层的段sg1(1)、sg1(2),因此对于段sg1(1)、sg1(2),与(A)同样地执行AND运算。由此,根据段sg1(1)而指定了段sg0(1),根据段sg1(2)而指定了段sg0(5)。若着眼于段sg1(2),则对于下位段编号6~8,AND结果为“0”。因此,无需进行段sg0(6)~sg0(8)的各AND运算,就可知段sg0(6)~sg0(8)的各AND结果全部为0。
在(C)中,根据第1阶层的AND结果而指定了第0阶层的段sg0(1)、sg0(5),因此对于sg0(1)、sg0(5),与(A)、(B)同样地执行AND运算。由此,根据段sg0(1)指定文件编号3,根据段sg0(5)指定文件编号19。因此,可知在压缩文件f3、f19中,存在字符信息“人”以及“形”这两方。
<计算机的硬件构成例>
图9是表示实施方式所涉及的计算机的硬件构成例的框图。在图9中,计算机具备:CPU(Central Processing Unit:中央处理单元)901、ROM(Read Only Memory:只读存储器)902、RAM(Random AccessMemory:随机存取存储器)903、磁盘驱动器904、磁盘905、光盘驱动器906、光盘907、显示器908、I/F(Interface:接口)909、键盘910、鼠标911、扫描仪912、以及打印机913。此外,各构成部分别通过总线900而连接。
这里,CPU901管理计算机整体的控制。ROM902存储有引导程序等程序。此外,ROM902存储有生成/管理压缩符号映射Ms的程序、使用压缩符号映射Ms进行检索的程序。RAM903被用作CPU901的工作区域,CPU901能够将存储在ROM902的程序读出至RAM903并执行。磁盘驱动器904按照CPU901的控制来控制对磁盘905的数据的读/写。磁盘905存储通过磁盘驱动器904的控制而写入的数据。
光盘驱动器906按照CPU901的控制来控制对光盘907的数据的读/写。光盘907存储通过光盘驱动器906的控制而写入的数据,或使信息处理装置读取存储在光盘907的数据。
显示器908显示以光标、图标或者工具箱为代表的文档、图像、功能信息等数据。该显示器908例如能够采用CRT、TFT液晶显示器、等离子显示器等。
接口(以下,略称为“I/F”。)909通过通信线路而与LAN(Local Area Network:局域网)、WAN(Wide Area Network:广域网)、因特网等网络914连接,并经由该网络914而与其他装置连接。而且,I/F909负责与网络914的内部的接口,并控制来自外部装置的数据的输入输出。对I/F909例如能够采用调制解调器、LAN适配器等。
键盘910具备用于输入字符、数字、各种指示等的键,并进行数据的输入。此外,也可以是触摸面板式的输入板或数字键等。鼠标911进行光标的移动、范围选择,或者窗口的移动、大小的变更等。作为定位装置,只要是同样地具备功能的装置即可,可以是追踪球、控制杆等。
扫描仪912光学读取图像,在计算机内取入图像数据。另外,扫描仪912也可以具有OCR(Optical Character Reader)功能。此外,打印机913印刷图像数据、文档数据。对打印机913例如能够采用激光打印机、喷墨打印机。
此外,除了上述的各种服务器、台式个人电脑之外,计算机也可以是手机、智能手机、电子书籍终端、笔记本电脑等便携式终端。此外,也可以根据多个计算机来实施本实施方式。
图10是表示本实施方式所涉及的***构成例的说明图。在图10中,***包含:可包含图9所示的各硬件的计算机1001~1003、网络1004、开关1005、无线基站1007。计算机1003所包含的I/F具备无线通信功能。
例如,通过计算机1001执行生成针对包含多个文件的内容的压缩符号映射的处理,并向计算机1002、1003传送,也可以通过各个计算机1002、1003执行针对传送的内容的检索处理。
此外,也可以构成为,通过计算机1001执行生成针对包含多个文件的内容的压缩符号映射的处理,计算机1001从计算机1002或者计算机1003受理针对内容的检索委托并执行检索处理,将执行完的检索处理的结果分别返回至计算机1002、计算机1003。与图2相同,除了上述各种服务器、台式个人电脑之外,每个计算机1001~1003还可以是智能手机、电子书籍终端、笔记本电脑等便携式终端。
<功能构成例1>
图11是表示本实施方式所涉及的计算机或者计算机***的功能构成例1的框图,图12是表示图11所示的计算机或者计算机***的合计部~第2压缩部的处理流程的说明图。在图11中,计算机或者计算机***(以下,为“计算机1100”)具备:合计部1101、第1生成部1102、第1压缩部1103、作成部1104、第2生成部1105、以及第2压缩部1106。
具体而言,合计部1101~第2压缩部1106例如通过使CPU901执行存储于图9所示的ROM902、RAM903、磁盘905等存储装置的程序而实现其功能作为提取装置。另外,合计部1101~第2压缩部1106分别将执行结果写入至存储装置,并读出其他部的执行结果,从而分别执行运算。以下,对合计部1101~第2压缩部1106简单地进行说明。
合计部1101合计对象文件组内的字符信息的出现次数。具体而言,例如如图12的(A)所示,合计部1101合计对象文件组Fs内的字符信息的出现次数。在合计部1101中,分别对特定单一字符、上位分割字符码、下位分割字符码、二元词串(2-gram)字符、基础词汇的出现次数进行计数。对合计部1101的详细的处理内容之后再叙述。
第1生成部1102基于合计部1101的合计结果生成2N分枝无节点哈夫曼树H(图12(B))。2N分枝无节点哈夫曼树H是指,从根分叉的枝为2N根,且通过1根或多根枝直接指向叶子的哈夫曼树。没有节点(内部节点)。由于没有节点地直接命中叶子,因此,与具有节点的通常的哈夫曼树相比,能够实现解压速度的高速化。叶子是包含符合的字符信息和其压缩符号的结构体。也称为叶子的结构体。被分配给叶子的枝数取决于存在于分配目的地的叶子的压缩符号的压缩符号长。对第1生成部1102的详细的处理内容之后再叙述。
第1压缩部1103使用2N分枝无节点哈夫曼树H来压缩对象文件组Fs的各对象文件而形成压缩文件组fs(图12(C))。对第1压缩部1103的详细的处理内容之后再叙述。
作成部1104基于合计部1101的合计结果和在2N分枝无节点哈夫曼树H中按每个字符信息而被分配的压缩符号,来作成压缩符号映射Ms。作成部1104对压缩符号映射Ms也分别作成特定单一字符、上位分割字符码、下位分割字符码、二元词串(2-gram)字符、基础词汇。若压缩符号映射Ms中符合的字符信息在1个对象文件即使出现1次,作成部1104也将该文件编号的位设为有效(图12(D))。此外,在初始状态下,删除映射Ds在各对象文件中全部为有效。对作成部1104的详细的处理内容之后再叙述。
第2生成部1105基于字符信息的出现概率来生成压缩出现映射的无节点哈夫曼树h(图12(E))。对第2生成部1105的详细的处理内容之后再叙述。此外,在图7所示的计算机***的情况下,由主服务器MS的第2生成部1105生成的无节点哈夫曼树被发送至从属服务器S1、S2、…。
第2压缩部1106使用由第2生成部1105生成的无节点哈夫曼树来压缩各出现映射(图12(F))。对第2压缩部1106的详细的处理内容之后再叙述。此外,在图7所示的计算机***的情况下,从属服务器S1、S2、…使用由主服务器MS的第2生成部1105生成并发送而获得的哈夫曼树,通过第2压缩部1106压缩从属服务器S1、S2、…内的出现映射。
<合计以及压缩符号映射Ms的详细作成>
接着,对由合计部1101进行的合计以及由作成部1104进行的压缩符号映射Ms的作成详细进行说明。在作成压缩符号映射Ms的情况下,在作成之前,需要通过合计部1101,从对象文件组Fs合计字符信息的出现次数,并通过第1生成部1102,预先生成2N分枝无节点哈夫曼树H。
图13是表示由合计部1101进行的合计以及由作成部1104进行的压缩符号映射Ms的作成例的说明图。
(1)出现次数的合计
首先,计算机1100对存在于对象文件组Fs的字符信息的出现次数进行计数。合计结果按出现次数降序排序,从出现次数较大的一方开始付与升序的序次。另外,这里,作为例子,设字符信息的总种类数为1305个(<2048(=211))。通过图14对(1)出现次数的合计详细地进行说明。
(2)计算压缩符号长
接着,基于通过(1)得到的合计结果,计算机1100计算每个字符信息的压缩符号长。具体而言,计算机1100按每个字符信息计算出现率。出现率通过用字符信息的出现次数除以全字符信息的总出现次数而得到。而且,计算机1100求出与出现率对应的发生概率,并根据发生概率来导出压缩符号长。
发生概率用1/2x来表现。x是指数。压缩符号长为发生概率的指数x。具体而言,通过出现率是以下的发生概率的哪个范围来决定压缩符号长。AR是出现率。
1/20>AR≥1/21···压缩符号长为1位。
1/21>AR≥1/22···压缩符号长为2位。
1/22>AR≥1/23···压缩符号长为3位。
1/23>AR≥1/24···压缩符号长为4位。
·
·
·
1/2N-1>AR≥1/2N···压缩符号长为N位。
通过图15对(2)压缩符号长的计算详细地进行说明。
(3)确定叶子数
接着,计算机1100通过按每个压缩符号长合计叶子数,来确定每个压缩符号长的叶子数。这里,最大压缩符号长为17位。此外,叶子数是指字符信息的种类数。因此,在压缩符号长5位的叶子数是2的情况下,表示5位的压缩符号被分配的字符信息存在两个的情况。
(4)校正叶子数
接着,计算机1100校正叶子数。具体而言,计算机1100进行校正,以使得枝数的上限2N的指数N为最大压缩符号长。例如,在指数N=11的情况下,使压缩符号长11位~17位的叶子数的总和成为校正后的压缩符号长11位的叶子数。而且,计算机1100按每个压缩符号长来分配每个叶子的枝数。具体而言,对于校正后的压缩符号长,按照其降序决定每个叶子的枝数为20、21、22、23、24、25、26
例如,在图13中,压缩符号长11位的压缩符号被分配的字符信息的总数(叶子数)为1215个,但是其每个叶子的枝数为1。对于压缩符号长11位的压缩符号被分配的字符信息,分别仅分配到1根枝。另一方面,压缩符号长6位的压缩符号被分配的字符信息的总数(叶子数)为6个,但是其每个叶子的枝数为32。对于压缩符号长6位的压缩符号被分配的字符信息,分别分配到32根枝。(4)叶子数校正在需要的情况下执行即可,也可以不执行。
(5)生成叶子的结构体
接着,计算机1100生成叶子的结构体。叶子的结构体是指,将字符信息、其压缩符号长、以及以该压缩符号长的压缩符号被建立了对应的数据结构体。例如,出现序次是1位的字符“0”的压缩符号长是6位,压缩符号为“000000”。在图13的例子中,由于字符信息的种类数(叶子数)是1305个,因此生成叶子L1的结构体~叶子L1305的结构体。通过图16对(3)确定叶子数~(5)生成叶子的结构体(N=11)详细地进行说明。
(6)生成指向叶子的指针
接着,计算机1100按每个叶子的结构体生成指向叶子的指针。指向叶子的指针是连接成为该指向目的地的叶子的结构体内的压缩符号与相当于该每个叶子的枝数的编号的位串而得的位串。例如,由于分配给作为叶子L1的字符“0”的压缩符号“000000”的压缩符号长为6位,因此每个叶子L1的枝数为32根。
因此,指向叶子L1的指针的前头6位为压缩符号“000000”。后续位串为通过每个叶子L1的枝数而表现的32(=25)种的位串。即,32种的5位的位串为压缩符号“000000”的后续位串。因此,指向叶子L1的指针的前头6位为由“000000”固定的32种的11位的位串。另外,在每个叶子的枝数为1根的情况下,指向叶子的指针为1个,压缩符号与指向该叶子的指针为同一位串。通过图18对(6)生成指向叶子的指针生成详细地进行说明。
(7)2N分枝无节点哈夫曼树H的构建
最后,计算机1100构建2N分枝无节点哈夫曼树H。具体而言,通过将叶子的指针作为根,来构建直接指定叶子的结构体的2N分枝无节点哈夫曼树H。在压缩符号串的前头6位为“000000”的11位的位串的情况下,无论后续5位是32种的哪种位串,也能够通过2N分枝无节点哈夫曼树H而指向字符“0”的叶子L1的结构体。通过图19对(7)2N分枝无节点哈夫曼树H的构建详细地进行说明。
图14是详细表示(1)出现次数的合计的说明图。在图14中,计算机1100执行:(A)根据对象文件组Fs的合计、(B)按照出现频度的降序的排序、(C)到目标出现率的序次为止的提取这三个阶段。以下,分为基础词汇和单一字符进行说明。
(A1)首先,计算机1100读入对象文件组Fs,并对基础词汇的出现频度(出现次数)进行计数。计算机1100参照基础词汇的结构体,当基础词汇的结构体内的与基础词汇一致的字符串存在于对象文件的情况下,将该基础词汇的出现频度(初始值为0)加1。基础词汇的结构体是指记述基础词汇的数据结构体。
(B1)若在对象文件组Fs中结束基础词汇的合计,则计算机1100按照出现频度的降序排序基础词汇出现频度合计表。即,按照出现频度从高到低的顺序排列,从出现频度最高的基础词汇起进行序次的赋予。
(A2)此外,计算机1100读入对象文件组Fs,对单一字符的出现频度进行计数。具体而言,计算机1100将单一字符的出现频度(初始值为0)加1。
(B2)若在对象文件组Fs中结束单一字符的合计,则计算机1100按照出现频度的降序排序单一字符出现频度合计表。即,按照出现频度从高到底的顺序排列,从出现频度最高的单一字符起进行序次的赋予。
(C1)接着,计算机1100参照(B1)排序后的基础词汇出现频度合计表,来提取到目标出现率Pw为止的序次的基础词汇。具体而言,计算机1100将全部基础词汇的出现频度的总和(总出现频度)作为分母,从序次为1位的基础词汇起降序累计出现频度并将其作为分子,计算到各序次为止的目标出现率Pw。
例如,若总出现频度为40000,从1位到y位的基础词汇组的累计出现频度为30000,则到y位为止的出现频度为(30000/40000)×100=75[%]。这里,在目标出现率Pw是75[%]的情况下,提取到上位y位为止的基础词汇。
(C21)接着,计算机1100参照(B2)排序后的单一字符出现频度合计表,来提取到目标出现率Pc为止的序次的单一字符。具体而言,计算机1100将全部单一字符的出现频度的总和(总出现频度)作为分母,从序次为1位的单一字符起降序累计出现频度并将其作为分子,计算到各序次为止的出现率。
例如,若总出现频度为50000,从1位到y位的单一字符组的累计出现频度为40000,则到y位为止的出现频度为(40000/50000)×100=80[%]。这里,在目标出现率Pc为80[%]的情况下,提取到上位y位为止的单一字符。另外,为了将通过(C21)提取的单一字符与原来的单一字符组区别开来,将其称为“特定单一字符(组)”。
(C22)此外,由于单一字符组中从特定单一字符组被排除的单一字符(以下,为“非特定单一字符(组)”)的出现频度比各特定单一字符低,因此对其字符码进行分割。具体而言,将非特定单一字符的字符码分割成上位的位字符码和下位的位字符码。
例如,在以UTF16位字符码表现单一字符的情况下,被分割成上位的8位字符码和下位的8位字符码。该情况下,分割而成的任意字符码都以0x00~0xFF码来表现。这样,上位的位字符码是上位分割字符码,下位的位字符码是下位分割字符码。
图15是详细表示图13的(2)计算压缩符号长(N=11)的说明图。图15的字符信息表是反映了图13的(1)中的合计结果的表,按字符信息设定有序次项目、展开类别项目、码项目、字符项目、出现次数项目、总次数项目、出现率项目、在校正前的发生概率项目以及压缩符号长项目。其中,序次项目~总次数项目是通过再排序结果而得到的信息。
这里,在序次项目中,按照字符信息的出现次数的降序写入有序次(升序)。在字符信息项目中的展开类别项目中,写入有字符信息的类别。“16”表示16位码(的单一字符)。“8”表示8位的分割字符码。“基”表示基础词汇。
在字符信息项目中的码项目中写入有特定单一字符或者分割字符码。在是基础词汇情况下为空栏。在字符信息项目中的字符项目中,写入有字符或基础词汇。在是分割字符码的情况下为空栏。在出现次数项目中,写入有字符信息在对象文件组Fs中的出现次数。在总次数项目中,写入有全部字符信息的总出现次数。
在出现率项目中,写入有用出现次数除以总次数而算出的值来作为出现率。在校正前项目的发生概率项目中,写入有与出现率对应的发生概率。在压缩符号长项目中,写入有与发生概率对应的压缩符号长,即,写入有发生概率1/2y的指数y来作为压缩符号长。
图16是详细表示图13的(3)特定叶子数~(5)生成叶子的结构体(N=11)的说明图。对图15的字符信息表以压缩符号长为单位合计叶子数(字符信息的总种类数)而得到的结果成为图16中的校正前的叶子数。这里,校正A是指,将被分配到压缩符号长的上限长N(即,2N分枝无节点哈夫曼树H的最大枝数2N的指数N)以上的压缩符号长的叶子数汇集于压缩符号长的上限长N的校正。该情况下,校正前的最大压缩符号长是17位,字符信息的总种类数是1305种,因此压缩符号长的上限长N为N=11。因此,在校正A中,压缩符号长11位的叶子数为压缩符号长是11位~17位的叶子数的总和(1190个)。
然后,计算机1100求出发生概率总和。由于每个压缩符号长的发生概率被决定(若是5位则为1/25),因此通过按每个压缩符号长而将发生概率乘以叶子数,来得到每个压缩符号长的乘法结果。例如,校正A中的压缩符号长为5位的叶子数是2。压缩符号长5位的发生概率是1/25。因此,校正A中的压缩符号长为5位的发生概率为2×(1/25)=1/24。在压缩符号长为6位以后也同样地求出校正A中的压缩符号长发生概率。然后,通过合计校正A后的各压缩符号长的发生概率,得到校正A中的发生概率总和。
然后,计算机1100判断发生概率总和是否在1以下。阈值t为0<t≤1。在不想设置阈值t的情况下,t=1即可。若低于阈值t,则转移至校正B。当在阈值t以上且1以下的情况下,不转移至校正B,而以该时刻的每个压缩符号长的叶子数来确定。
校正B是不改变校正A中的压缩符号长组(5位~12位)而更新叶子数的校正。具体而言,是当校正A中的发生概率总和不在阈值t以上且1以下的情况下进行的校正。更具体而言,校正B有2种。
第1种是,在发生概率总和小于阈值t的情况下,使发生概率总和增加到发生概率总和得到1以下的最大值为止,例如到收敛于最大渐近值为止的校正(以下为校正B+)。另一种是,在发生概率总和比1大的情况下,使发生概率总和减少,以使其从发生概率总低于1起到得到1以下的最大值为止,例如到收敛于最大渐近值为止的校正(以下为校正B-)。
在图16所示的例子中,由于校正A中的发生概率总和为“1.146”,因此进行校正B-。另外,无论是校正B+以及校正B-的哪一种校正B,都进行用叶子数除以发生概率总和这样的相同的校正。
首先,在校正B-的第1次(校正B-1)中,通过用每个压缩符号长的校正A中的叶子数除以上次校正(该情况下为校正A)的发生概率的总和(1.146),来更新叶子数。另外,小数点以下可以舍去,也可以四舍五入。另外,对于校正A中的压缩符号长的上限长N(N=11位),不除以上次校正(该情况下为校正A)的发生概率总和(1.146),而是通过从叶子的总数(1305个)减去校正B-1中的每个压缩符号长的叶子总数(除压缩符号长的上限长N的叶子数之外),来求出压缩符号长的上限长N的叶子数。该情况下为1208个。
然后,计算机1100通过与校正A的情况下的相同的计算处理,来求出校正B-1中的发生概率总和。然后,计算机1100判断校正B-1中的发生概率总和是否收敛于1以下的最大渐近值。若校正B-1中的发生概率总和未收敛于1以下的最大渐近值,则转移至校正B-的第2次(校正B-2)。在收敛于最大渐近值的情况下,不转移至校正B-2,而是以该时刻的每个压缩符号长的叶子数来确定。由于校正B-1中更新的发生概率总和“1.042”比1大,因此不收敛于最大渐近值,转移至校正B-2。
在校正B-2中,通过用每个压缩符号长的校正B-1中的叶子数除以上次校正(该情况下为校正B-1)的发生概率总和(1.042)来更新叶子数。另外,小数点以下可以舍去,也可以四舍五入。另外,对于校正B-1中的压缩符号长的上限长N(N=11位),不除以上次校正(该情况下为校正B-1)的发生概率总和(1.042),而是通过从叶子的总数(1305个)减去校正B-2中的每个压缩符号长的叶子总数(除压缩符号长的上限长N的叶子数之外),来求出压缩符号长的上限长N的叶子数。该情况下是1215个。
然后,计算机1100通过与校正B-1的情况下相同的计算处理,来求出校正B-2中的发生概率总和。然后,计算机1100判断校正B-2中的发生概率总和是否收敛于1以下的最大渐近值。若校正B-2中的发生概率总和未收敛于1以下的最大渐近值,则转移至校正B的第3次(校正B-3)。在收敛于最大渐近值的情况下,不转移至校正B-3,而是以该时刻的每个压缩符号长的叶子数来确定。虽然校正B-2中更新的发生概率总和“0.982”在1以下,但是不清楚是否收敛于最大渐近值,因此转移至校正B-3。
在校正B-3中,通过用每个压缩符号长的校正B-2中的叶子数除以上次校正(该情况下为校正B-2)的发生概率总和(0.982),来更新叶子数。另外,小数点以下可以舍去,也可以四舍五入。另外,对于校正B-2中的压缩符号长的上限长N(N=11位),不除以上次校正(该情况下为校正B-2)的发生概率总和(0.982),而是通过从叶子的总数(1305个)减去校正B-3中的每个压缩符号长的叶子的总数(除压缩符号长的上限长N的叶子数之外),来求出压缩符号长的上限长N的叶子数。该情况下是1215个。
然后,计算机1100通过与校正B-2的情况下相同的计算处理,来求出校正B-3中的发生概率总和。然后,计算机1100判断校正B-3中的发生概率总和是否收敛于1以下的最大渐近值。若校正B-3中的发生概率总和未收敛于1以下的最大渐近值,则转移到校正B-的第4次(校正B-4)。在收敛于最大渐近值的情况下,不转移至校正B-4,而是以该时刻的每个压缩符号长的叶子数来确定。
校正B-3中更新的发生概率总和“0.982”是与校正B-2中更新的发生概率总和“0.982”相同的值。即,校正B-3中的各压缩符号长的叶子数与校正B-2中的各压缩符号长的叶子数相同。该情况下,计算机1100判断为发生概率总和收敛于最大渐近值,并确定叶子数。
通过这种方式,直到确定叶子数为止持续进行校正B-。在图16的例子中,在校正B-3中确定了每个压缩符号长的叶子数。然后,计算机1100按每个压缩符号长,计算每个叶子的枝数。每个叶子的枝数的计算如上述那样,从压缩符号长的上限长N(该情况下为N=11位)起降序地分配每个叶子的枝数为20、21、22、23、24、25、26。另外,枝数的小计是按每个压缩符号长将每个叶子的枝数乘以确定的叶子数而得到的乘法结果。
图17是表示每个字符信息的校正结果的说明图。在图17的字符信息表中,追加有校正A、校正B-1~校正B-2的校正结果。如图17所示,由于通过校正而更新了不同压缩符号长的叶子数,因此从序次项目的第1位字符信息起分配较短的压缩符号长。
例如,当在校正B-2中确定了的情况下,压缩符号长为6位时叶子数为6,压缩符号长为7位时叶子数为18,…,压缩符号长为11位时叶子数为1215。因此,对序次从第1位到第6位的字符信息(叶子数6个)分配6位的压缩符号长,对序次从第7位到第24位的字符信息(叶子数18个)分配7位的压缩符号长,…,对序次从第91位到第1305位的字符信息(叶子数1215个)分配11位的压缩符号长。
然后,计算机1100基于字符信息、分配给字符信息的压缩符号长、以及每个压缩符号长的叶子数,按每个字符信息分配压缩符号,生成叶子的结构体。例如,由于出现率第1位的单一字符“0”被分配有5位的压缩符号长,因此压缩符号为“000000”。因此,生成包含压缩符号“000000”、压缩符号长“6”、字符信息“0”的叶子L1的结构体。
另外,在上述的校正处理中,也存在压缩符号长为5位~11位,但是分割二元词串(2-gram)字符串的压缩符号映射M的情况,因此也可以将压缩符号长校正为偶数位。具体而言,例如,对压缩符号长5位以及7位的字符信息设为6位,对9位的字符信息设为8位,对11位的字符信息设为10位。
图18是详细表示图13的(6)生成指向叶子的指针(N=11)的说明图。图18表示压缩符号长的上限N为11位的情况下的指向叶子的指针。在图18中,由于压缩符号长为6位的叶子数是6个,因此压缩符号被分配了“000000”~“000101”。此外,压缩符号长为6位的每个叶子的枝数为32根。因此,生成32(=25)个指向针对压缩符号长为6位的压缩符号的叶子的指针。具体而言,成为指向叶子的指针的前头6位为压缩符号且后续5位为32种的位串。因此,对各个压缩符号长为6位的压缩符号分别生成32种指向叶子的指针。
另外,虽未图示,但是压缩符号长为7位的叶子数是18个,因此被分配了压缩符号“0001100”~“0011111”。此外,压缩符号长为7位的每个叶子的枝数为16根。因此,生成16(=24)个指向针对压缩符号长为7位的压缩符号的叶子的指针。具体而言,成为指向叶子的指针的前头7位为压缩符号且后续4位为16种的位串。因此,对各个压缩符号长为7位的压缩符号分别生成16种指向叶子的指针。
同样地,由于压缩符号长为8位的叶子数是23个,因此被分配了压缩符号“01000000”~“01010110”。此外,压缩符号长为8位的每个叶子的枝数是8根。因此,生成8(=23)个指向针对压缩符号长为8位的压缩符号的叶子的指针。具体而言,成为指向叶子的指针的前头8位为压缩符号且后续3位为8种的位串。因此,对各个压缩符号长为8位的压缩符号生成8种指向叶子的指针。
同样地,由于压缩符号长为9位的叶子数是23个,所以被分配了压缩符号“010101110”~“011000100”。此外,压缩符号长为9位的每个叶子的枝数是4根。因此,生成4(=22)个指向针对压缩符号长为9位的压缩符号的叶子的指针。具体而言,成为指向叶子的指针的前头9位为压缩符号且后续2位为4种的位串。因此,对各个压缩符号长为9位的压缩符号分别生成4种指向叶子的指针。
同样地,由于压缩符号长为10位的叶子数是20个,所以被分配了压缩符号“0110000110”~“0110011101”。此外,压缩符号长为10位的每个叶子的枝数是2根。因此,生成2(=21)个指向针对压缩符号长为10位的压缩符号的叶子的指针。具体而言,成为指向叶子的指针的前头10位为压缩符号且后续1位为2种的位串。因此,对各个压缩符号长为10位的压缩符号分别生成2种指向叶子的指针。
同样地,由于压缩符号长为11位的叶子数是1215个,因此被分配了压缩符号“01100111100”~“11111111010”。此外,压缩符号长为11位的每个叶子的枝数是1根。因此,生成1(=20)个指向针对压缩符号长为11位的压缩符号的叶子的指针。具体而言,成为压缩符号保持原样地指向叶子的指针。因此,对各个压缩符号长为11位的压缩符号分别生成1种指向叶子的指针。
图19是详细表示图13的(7)2N分枝无节点哈夫曼树H的构建(N=11)的说明图。在图19中,表示设N=11的情况下的2048(=211)分枝无节点哈夫曼树H。在根的结构体中,存放有指向叶子的指针。指向叶子的指针能够指定指向目的地的叶子的结构体。
具体而言,如图18所示那样生成32个指向针对存放有压缩符号长为6位的压缩符号的叶子的结构体的叶子的指针。因此,针对叶子L1的结构体,向根的结构体存放32个指向叶子L1的指针L1P(1)~L1P(32)。针对叶子L2的结构体~叶子L6的结构体也是相同的。对叶子L7以后的结构体如图19所示。
图20是表示叶子的结构体的说明图。叶子的结构体是具有第1区域~第4区域的数据结构体。叶子的结构体在第1区域中存放有压缩符号以及其压缩符号长。在第2区域中,存放有叶子的标识和展开类别(参照图15)、出现率(参照图15)。在第3区域中,根据展开类别而存放有作为特定单一字符的16位字符码、分割了非特定单一字符的字符码的8位分割字符码、或者指向基础词汇的指针。利用指向基础词汇的指针来指定基础词汇的结构体内的基础词汇。此外,还存放有对照标志。对照标志默认为“0”。在是“0”的情况下,将要解压的字符直接写到解压缓冲区,在“1”的情况下,以***<color>标签和</color>标签的方式写在解压缓冲区。
在第4区域中存放有字符信息的出现率和出现映射的出现率区域。出现率是指图15所示的字符信息的出现率。通过图55以及图56对出现映射的出现率区域进行说明。另外,在第3区域中,另外还存放有符号类别和符号区分。符号类别是指识别字符是否码符合数字、英文字、特殊记号、片假名、平假名、汉字的某一种,或者是否是指向基础词汇的指针的信息。符号区分是指识别字符码是16位还是8位的信息。在作为16位字符码的情况下或者在作为保留字的情况下,分配“1”作为符号区分,在8位分割字符码的情况下,分配“0”作为符号区分。
另外,第1区域~第4区域内的信息在后述的构建处理(步骤S3905)中被存放。
图21是表示特定单一字符的结构体的说明图。特定单一字符的结构体2100是存放特定单一字符码e#和指向其叶子L#的指针的数据结构体。具体而言,例如,在计算机1100获得了来自对象文件组Fs的合计结果时,计算机1100向特定单一字符的结构体2100存放特定单一字符码e#。而且,若构建了2N分枝无节点哈夫曼树H,则计算机1100存放与2N分枝无节点哈夫曼树H中的各叶子的结构体中存放的压缩符号对应的、指向特定单一字符的结构体2100中的特定字符码e#的指针。
此外,若指向特定单一字符码e#的指针被存放于对应的叶子的结构体,则计算机1100将指向2N分枝无节点哈夫曼树H中的对应于各特定单一字符码e#的叶子的指针与特定单一字符的结构体2100内的对应的特定单一字符码e#关联地存放。由此,生成特定单一字符的结构体2100。
图22是表示分割字符码的结构体的说明图。分割字符码的结构体2200存放分割字符码和指向其叶子L#的指针。具体而言,例如,在计算机1100获得了来自对象文件组Fs的合计结果时,计算机1100向分割字符码的结构体2200存放分割字符码。而且,若构建了2N分枝无节点哈夫曼树H,则计算机1100存放与2N分枝无节点哈夫曼树H中的各叶子的结构体中存放的压缩符号对应的、指向分割字符码的结构体2200中的分割字符码的指针。
此外,若指向分割字符码的指针被存放于对应的叶子的结构体,计算机1100将指向2N分枝无节点哈夫曼树H中的对应于各分割字符码的叶子的指针与分割字符码的结构体2200内的对应的分割字符码关联地存放。由此,生成分割字符码的结构体2200。
图23是表示基础词汇的结构体的说明图。基础词汇的结构体2300是存放基础词汇和指向其叶子L#的指针的数据结构体。在基础词汇的结构体2300中,事先存放有基础词汇。若构建了2N分枝无节点哈夫曼树H,则计算机1100存放与2N分枝无节点哈夫曼树H中的各叶子的结构体中存放的压缩符号对应的、指向基础词汇的结构体2300中的基础词汇的指针。
此外,若指向基础词汇的指针被存放在对应的叶子的结构体,则计算机1100将指向2N分枝无节点哈夫曼树H中的对应于各基础词汇的叶子的指针与基础词汇的结构体2300内的对应的基础词汇关联地存放。
<压缩符号映射Ms的作成例>
若通过第1生成部1102生成2N分枝无节点哈夫曼树H,则作成部1104作成单一字符的压缩符号映射Ms、上位分割字符码的压缩符号映射Ms、下位分割字符码的压缩符号映射Ms、词汇的压缩符号映射Ms、二元词串(2-gram)字符串的压缩符号映射Ms。以下,对单一字符的压缩符号映射Ms、上位分割字符码的压缩符号映射Ms、下位分割字符码的压缩符号映射Ms、二元词串(2-gram)字符串的压缩符号映射Ms的详细作成例进行说明。另外,由于基础词汇的压缩符号映射Ms与单一字符的压缩符号映射Ms同样地作成故省略说明。
图24是表示压缩符号映射Ms的生成例的说明图。在图24中,在对象文件Fi内记述有“竜馬は脱藩した”这样的字符串。
(A)首先,前头字符“竜”是对象字符。由于对象字符“竜”是特定单一字符,因此通过访问2N分枝无节点哈夫曼树H来取得特定单一字符“竜”的压缩符号,从而确定特定单一字符“竜”的出现映射。在未生成的情况下,将特定单一字符“竜”的压缩符号作为指针,并且,生成使表示对象文件的有无的位串全部为0的特定单一字符“竜”的出现映射。然后,针对特定单一字符“竜”的出现映射,将对象文件Fi的位设为有效(“0”→“1”)。
(B)接着,将对象字符移动一元词串(1-gram),使对象字符变成“馬”。由于对象字符“馬”是特定单一字符,因此通过访问2N分枝无节点哈夫曼树H来取得特定单一字符“馬”的压缩符号,从而确定特定单一字符“馬”的出现映射。在未生成的情况下,将特定单一字符“馬”的压缩符号作为指针,并且,生成使表示对象文件的有无的位串全部成为0的特定单一字符“馬”的出现映射。然后,针对特定单一字符“馬”的出现映射,将对象文件Fi的位设为有效(“0”→“1”)。
此外,在对象字符移动到“馬”的情况下,由于获得“竜馬”这样的二元词串(2-gram)字符串,因此利用结合了“竜”的压缩符号和“馬”的压缩符号的“竜馬”的压缩符号串,来确定二元词串(2-gram)字符串“竜馬”的出现映射。在未生成的情况下,将“竜馬”的压缩符号串作为指针,并且,生成使表示对象文件的有无的位串全部成为0的二元词串(2-gram)字符串“竜馬”的出现映射。然后,在二元词串(2-gram)字符串“竜馬”的出现映射中将对象文件Fi的位设为有效(“0”→“1”)。
(C)接着,将对象字符移动一元词串(1-gram),使对象字符为“は”。通过对对象字符“は”也与(B)同样地进行处理,从而针对特定单一字符“は”的出现映射,将对象文件Fi的位设为有效(“0”→“1”)。同样地,在二元词串(2-gram)字符串“馬は”的出现映射中,将对象文件Fi的位设为有效(“0”→“1”)。
(D)接着,将对象字符移动一元词串(1-gram),使对象字符为“脱”。由于对象字符“脱”不是特定单一字符,因此将对象字符“脱”的字符码“0x8131”分割成上位分割字符码“0x81”和下位分割字符码“0x31”。而且,使对象字符成为上位分割字符码“0x81”。通过对上位分割字符码“0x81”也与特定单一字符同样地进行处理,从而针对上位分割字符码“0x81”的出现映射,将对象文件Fi的位设为有效(“0”→“1”)。同样地,在二元词串(2-gram)字符串“は0x81”的出现映射中将对象文件Fi的位设为有效(“0”→“1”)。
(E)接着,将对象字符移动一元词串(1-gram),使对象字符成为字符“脱”的下位分割字符码“0x31”。通过对下位分割字符码“0x31”也同样地进行处理,从而针对下位分割字符码“0x31”的出现映射,将对象文件Fi的位设为有效(“0”→“1”)。同样地,在二元词串(2-gram)字符串“0x810x31”的出现映射中,将对象文件Fi的位设为有效(“0”→“1”)。
通过对(F)~(I)也进行相同的处理,对最后的对象文件Fn完成处理,从而对各个单一字符、上位分割字符码、下位分割字符码、二元词串(2-gram)字符串生成压缩符号映射Ms。
<压缩符号映射生成处理步骤>
接着,说明由作成部1104进行的压缩符号映射作成处理步骤例。
图25是表示由作成部1104进行的压缩符号映射作成处理步骤例的流程图。计算机1100执行合计处理(步骤S2501)、映射分配数决定处理(步骤S2502)、再合计处理(步骤S2503)、哈夫曼树生成处理(步骤S2504)、映射作成处理(步骤S2505)。计算机1100通过合计部1101执行合计处理(步骤S2501)~再合计处理(步骤S2503)。此外,还通过第1生成部1102执行哈夫曼树生成处理(步骤S2504)、通过作成部1104执行映射作成处理(步骤S2505)。
合计处理(步骤S2501)是指,对对象文件组Fs内的单一字符、基础词汇的出现次数(也称为出现频度)进行计数的处理。映射分配数决定处理(步骤S2502)是指,决定针对通过合计处理(步骤S2501)合计的单一字符以及基础词汇的映射分配数的处理。与映射分配数对应的出现序次的单一字符以及基础词汇分别为特定单一字符以及基础词汇。
再合计处理(步骤S2503)是指,对单一字符中的特定单一字符以外的非特定单一字符进行分割,来作为上位分割字符码以及下位分割字符码,并合计各自的出现次数的处理。此外,在再合计处理(步骤S2503)中,也合计二元词串(2-gram)字符串的出现次数。
哈夫曼树生成处理(步骤S2504)是指,如图15~图20所示那样生成2N分枝无节点哈夫曼树H的处理。映射作成处理(步骤S2505)是指,生成针对特定单一字符、基础词汇、上位分割字符码、下位分割字符码、二元词串(2-gram)字符串的压缩符号映射M的处理。
(合计处理(步骤S2501))
图26是表示图25所示的合计处理(步骤S2501)的详细处理步骤例的流程图。首先,计算机1100将文件编号i设定成i=1(步骤S2601),并读入对象文件Fi(步骤S2602)。然后,计算机1100执行对象文件Fi的合计处理(步骤S2603)。通过图27对对象文件Fi的合计处理(步骤S2603)详细地进行说明。之后,计算机1100判断文件编号i是否为i>n(n是对象文件F1~Fn的总数)(步骤S2604)。
在不是i>n的情况下(步骤S2604:否),计算机1100对i进行自加1(步骤S2605),返回至步骤S2602。另一方面,在是i>n的情况下(步骤S2604:是),计算机1100转移至图25所示的映射分配数决定处理(步骤S2502),结束合计处理(步骤S2501)。根据该合计处理(步骤S2501),能够按每个对象文件Fi执行对象文件Fi的合计处理(步骤S2603)。
(对象文件Fi的合计处理(步骤S2603))
图27是表示图26所示的对象文件Fi的合计处理(步骤S2603)的详细处理步骤例的流程图。首先,计算机1100将对象字符设为对象文件Fi的前头字符(步骤S2701),执行基础词汇合计处理(步骤S2702)。通过图29对基础词汇合计处理(步骤S2702)详细地进行说明。之后,计算机1100在字符出现频度合计表中将对象字符的出现次数增加1(步骤S2703)。
图28是表示字符出现频度合计表的说明图。字符出现频度合计表2800被存储在RAM903、磁盘905等存储装置中,每当符合的字符出现,便使出现次数逐一增加。
返回至图27,计算机1100判断对象字符是否是对象文件Fi的末尾字符(步骤S2704)。在对象字符不是对象文件Fi的末尾字符的情况下(步骤S2704:否),计算机1100将对象字符向末尾方向移动一个字符(步骤S2705),返回至步骤S2702。
另一方面,在对象字符是对象文件Fi的末尾字符的情况下(步骤S2704:是),计算机1100转移到步骤S2604,结束对象文件Fi的合计处理(步骤S2603)。根据该对象文件Fi的合计处理(步骤S2603),能够合计对象文件组Fs中存在的基础词汇以及单一字符的出现频度。
(基础词汇合计处理(步骤S2702))
图29是表示图27所示的基础词汇合计处理(步骤S2702)的详细处理步骤例的流程图。首先,计算机1100执行最长一致检索处理(步骤S2901),判断是否存在最长一致的基础词汇(步骤S2902)。通过图31对最长一致检索处理(步骤S2901)详细地进行说明。在存在最长一致的基础词汇的情况下(步骤S2902:是),计算机1100在基础词汇出现频度合计表中将最长一致的基础词汇的出现次数增加1(步骤S2903),转移到步骤S2703。
图30是表示基础词汇出现频度合计表的说明图。基础词汇出现频度合计表3000被存储在RAM903、磁盘905等存储装置中,每当符合的基础词汇出现,便使出现次数逐一增加。
返回至图29,在不存在最长一致的基础词汇的情况下(步骤S2902:否),转移到步骤S2703。由此,结束基础词汇合计处理(步骤S2702)。根据该基础词汇合计处理(步骤S2702),能够通过最长一致检索处理(步骤S2901)对基础词汇进行计数,因此能够对字符串较长的基础词汇优先进行计数。
(最长一致检索处理(步骤S2901))
图31是表示图29所示的最长一致检索处理(步骤S2901)的详细处理步骤的流程图。首先,计算机1100设c=1(步骤S3101)。c是对象字符的字符数(包含对象字符)。在c=1的情况下,仅是对象字符。接着,计算机1100对和从对象字符到第c个字符的对象字符串前方一致的基础词汇进行二分搜索(步骤S3102)。然后,计算机1100通过检索判断是否存在基础词汇(步骤S3103)。在通过二分搜索未查找到基础词汇的情况下(步骤S3103:否),转移到步骤S3106。
另一方面,在通过二分搜索查找到基础词汇的情况下(步骤S3103:是),计算机1100判断查找到的基础词汇和对象字符串是否完全一致(步骤S3104)。然后,在不完全一致的情况下(步骤S3104:否),转移到步骤S3106。另一方面,在完全一致的情况下(步骤S3104:是),计算机1100将其保持在存储装置作为最长一致候补(步骤S3105),转移到步骤S3106。
在步骤S3106中,计算机1100判断针对对象字符串是否结束了二分搜索(步骤S3106)。具体而言,计算机1100判断是否到末尾的基础词汇为止进行了二分搜索。在未结束二分搜索的情况下(步骤S3106:否),计算机1100转移到步骤S3102,继续执行直到结束二分搜索为止。
另一方面,在针对对象字符串结束了二分搜索的情况下(步骤S3106:是),计算机1100判断第c个字符的字符是否是对象文件Fi的末尾字符(步骤S3107)。在第c个字符的字符是对象文件Fi的末尾字符的情况下(步骤S3107:是),转移到步骤S3110。另一方面,在第c个字符的字符不是对象文件Fi的末尾字符的情况下(步骤S3107:否),计算机1100判断是否是c>cmax(步骤S3108)。cmax是事先设定好的值,由此设定对象字符串的上限字符数。
在不是c>cmax的情况下(步骤S3108:否),计算机1100对c进行自加1(步骤S3109),返回至步骤S3102。另一方面,在是c>cmax的情况下(步骤S3108:是),计算机1100判断是否存在最长一致候补(步骤S3110)。具体而言,计算机1100判断在步骤S3105中是否向存储器保持有哪怕一个最长一致候补。
在存在最长一致候补的情况下(步骤S3110:是),计算机1100将最长一致候补中的最长字符串决定为最长一致的基础词汇(步骤S3111)。然后,转移到步骤S2902。另一方面,在步骤S3110中,当最长一致候补一个也不存在的情况下(步骤S3110:否),转移到步骤S2902。由此,结束最长一致检索处理(步骤S2901)。根据该最长一致检索处理(步骤S2901),能够从位于基础词汇的结构体的基础词汇中,检索完全一致的字符串中最长的字符串作为基础词汇。
(映射分配数决定处理(步骤S2502))
图32是表示图25所示的映射分配数决定处理(步骤S2502)的详细处理步骤例的流程图。首先,计算机1100按出现频度从高到低的顺序排序表示基于合计处理(步骤S2501)的每个基础词汇的出现频度的基础词汇出现频度合计表3000和表示每个单一字符的出现频度的字符出现频度合计表2800(步骤S3201)。然后,计算机1100参照排序后的基础词汇出现频度合计表3000,将基础词汇的出现序次Rw设为Rw=1(步骤S3202),对到出现序次Rw为止的累积出现次数Arw进行计数(步骤S3203)。然后,计算机1100判断是否满足下述式(1)(步骤S3204)。
Arw>Pw×Aw···(1)
Aw是合计的基础词汇的总出现次数。
在不满足上述(1)式的情况下(步骤S3204:否),计算机1100对出现序次Rw进行自加1(步骤S3205),返回至步骤S3203。即,将出现序次Rw继续向后移动直到满足上述式(1)为止。
然后,在满足了上述式(1)的情况下(步骤S3204:是),计算机1100将基础词汇的映射分配数Nw设为Nw=Rw-1(步骤S3206)。这里,映射分配数Nw是指,被分配给通过映射作成处理(步骤S3205)生成的基础词汇出现映射的基础词汇数,意味着基础词汇出现映射的记录数(行数)。
此外,计算机1100将单一字符的出现序次Rc设为Rc=1(步骤S3207),对到出现序次Rc为止的累积出现次数Arc进行计数(步骤S3208)。然后,计算机1100判断是否满足下述式(2)(步骤S3209)。
Arc>Pc×Ac···(2)
Ac是合计的单一字符的总出现次数。
在不满足上述(2)式的情况下(步骤S3209:否),计算机1100对出现序次Rc进行自加1(步骤S3210),返回至步骤S3208。即,将出现序次Rc继续向后移动直到满足上述式(2)为止。
然后,在满足了上述式(2)的情况下(步骤S3209:是),计算机1100将单一字符的映射分配数Nc设为Nc=Rc-1(步骤S3211)。这里,映射分配数Nc是指,被分配给通过映射作成处理(步骤S2505)生成的特定单一字符出现映射的特定单一字符数,意味着特定单一字符出现映射的记录数(行数)。然后,转移到再合计处理(步骤S2503),结束映射分配数决定处理(步骤S2502)。
根据该映射分配数决定处理(步骤S2502),能够在映射作成处理(步骤S2505)中对和目标出现率Pw对应的数量的基础词汇生成基础词汇出现映射。因此,不需要对全部的基础词汇进行映射分配,而根据目标出现率Pw来决定,因此能够实现映射大小的最适化。
此外,对单一字符,也能够在映射作成处理(步骤S2505)中对和目标出现率Pc对应的数量的单一字符生成特定单一字符的压缩符号映射M。因此,不需要对全部的单一字符进行映射分配,而根据目标出现率Pc来决定,因此能够实现映射大小的最适化。
(再合计处理(步骤S2503))
图33是表示图25所示的再合计处理(步骤S2503)的详细处理步骤例的流程图。首先,计算机1100将文件编号i设定为i=1(步骤S3301),读入对象文件Fi(步骤S3302)。然后,计算机1100执行对象文件Fi的再合计处理(步骤S3303)。通过图33详细说明对象文件Fi的再合计处理(步骤S3303)。之后,计算机1100判断文件编号i是否是i>n(n是对象文件F1~Fn的总数)(步骤S3304)。
在不是i>n的情况下(步骤S3304:否),计算机1100对i进行自加1(步骤S3305),返回至步骤S3302。另一方面,在是i>n的情况下(步骤S3304:是),计算机1100转移至图25所示的哈夫曼树生成处理(步骤SS3304),结束再合计处理(步骤S3303)。根据该再合计处理(步骤S3303),能够按每个对象文件Fi执行对象文件Fi的再合计处理(步骤S3303)。
(对象文件Fi的再合计处理(步骤S3303))
图34是表示对象文件Fi的再合计处理(步骤S3303)的详细处理步骤例的流程图。首先,计算机1100将对象字符设为对象文件Fi的前头字符(步骤S3401),判断对象字符是否是特定单一字符(步骤S3402)。在是特定单一字符的情况下(步骤S3402:是),不进行分割而转移到步骤S3404。
另一方面,在不是特定单一字符的情况下(步骤S3402:否),计算机1100将对象字符的字符码分割成上位分割字符码和下位分割字符码(步骤S3403)。然后,转移到步骤S3404。
在步骤S3404中,计算机1100针对上位分割字符码出现频度合计表,将与通过步骤S3403得到的上位分割字符码相同的分割字符码的出现次数加1(步骤S3404)。
图35是表示上位分割字符码出现频度合计表的说明图。上位分割字符码出现频度合计表3500被存储在RAM903、磁盘905等存储装置中,每当符合的上位分割字符码出现,便使出现次数逐一增加。
此外,在图34中,计算机1100针对下位分割字符码出现频度合计表,将与通过步骤S3403得到的下位分割字符码相同的分割字符码的出现次数加1(步骤S3405)。
图36是表示下位分割字符码出现频度合计表的说明图。下位分割字符码出现频度合计表3600被存储在RAM903、磁盘905等存储装置中,每当符合的下位分割字符码出现,便使出现次数逐一增加。
此外,在图34中,计算机1100执行二元词串(2-gram)字符串确定处理(步骤S3406)。在二元词串(2-gram)字符串确定处理(步骤S3406)中,确定以对象字符为基点的二元词串(2-gram)字符串。通过图37对二元词串(2-gram)字符串确定处理(步骤S3406)详细地进行说明。
计算机1100针对二元词串(2-gram)字符串出现频度合计表,将通过二元词串(2-gram)字符串确定处理(步骤S3406)确定的二元词串(2-gram)字符串的出现次数加1(步骤S3407)。
图37是表示图34所示的二元词串(2-gram)字符串确定处理(步骤S3406)的详细处理步骤的流程图。首先,计算机1100针对对象字符,判断对象字符是否被分割(步骤S3701)。即,计算机1100判断对象字符是否是分割字符码。在未被分割的情况下(步骤S3701:否),即,在单一字符的情况下,计算机1100判断是否存在前一个字符(步骤S3702)。
在存在前一个字符的情况下(步骤S3702:是),计算机1100判断前一个字符是否被分割(步骤S3703)。即,计算机1100判断前一个字符是否是分割字符码。在未被分割的情况下(步骤S3703:否),即,在单一字符的情况下,计算机1100将由对象字符的前一个单一字符和对象字符(单一字符)构成的字符串决定为二元词串(2-gram)字符串(步骤S3704)。然后,转移到步骤S3407。
另一方面,在步骤S3703中,当前一个字符被分割的情况下(步骤S3703:是),即,在是分割字符码的情况下,作为其前一个字符的分割字符码为下位分割字符码。因此,计算机1100将由作为前一个字符的下位分割字符码和对象字符构成的字符串决定为二元词串(2-gram)字符串(步骤S3705)。然后,转移到步骤S3407。
此外,在步骤S3702中,当不存在前一个字符的情况下(步骤S3702:否),由于仅为对象字符,因此不决定二元词串(2-gram)字符串,而转移到步骤S3407。
此外,在步骤S3701中,在对象字符被分割的情况下(步骤S3701:是),即,在是分割字符码的情况下,计算机1100判断该分割字符码是上位分割字符码还是下位分割字符码(步骤S3706)。
在是上位分割字符码的情况下(步骤S3706:上位),计算机1100判断前一个字符是否被分割(步骤S3707)。即,判断前一个字符是否是分割字符码。在未被分割的情况下(步骤S3707:否),即,在单一字符的情况下,计算机1100将由对象字符的前一个单一字符和从对象字符分割而成的上位分割字符码构成的字符串决定为二元词串(2-gram)字符串(步骤S3708)。然后,转移到步骤S3407。
另一方面,在步骤S3707中,当前一个字符被分割的情况下(步骤S3707:是),即,在是分割字符码的情况下,作为其前一个字符的分割字符码为下位分割字符码。因此,计算机1100将由作为前一个字符的下位分割字符码和从对象字符分割而成的上位分割字符码构成的字符串决定为二元词串(2-gram)字符串(步骤S3709)。然后,转移到步骤S3407。
此外,在步骤S3706中,当作为下位分割字符码的情况下(步骤S3706:下位),计算机1100将从对象字符分割而成的上位分割字符码以及下位分割字符码构成的字符串决定为二元词串(2-gram)字符串(步骤S3710)。然后,转移到步骤S3407。
根据该二元词串(2-gram)字符串确定处理(步骤S3406),即便在对象字符被分割的情况下,也能够确定二元词串(2-gram)字符串。此外,由于根据移动1个字符来确定二元词串(2-gram)字符串,因此能够同时并列地生成基础词汇的压缩符号映射M以及特定单一字符的压缩符号映射M。
这样,根据上述的信息生成,利用目标出现率Pw、Pc来限制被映射作成的基础词汇数以及单一字符数,因此能够制止无关的映射作成,并同时实现映射作成的高速化以及映射大小的最适化。此外,能够通过移动1个字符而同时并列地执行多种映射作成,并能够实现用于高精度检索的多种映射作成的效率化。
图38是表示二元词串(2-gram)字符串出现频度合计表的说明图。二元词串(2-gram)字符串出现频度合计表3800被存储在RAM903、磁盘905等存储装置中,每当符合的二元词串(2-gram)字符串出现,便使出现次数逐一增加。
之后,计算机1100判断对象字符的后续字符是否位于对象文件Fi内(步骤S3408),在存在后续字符的情况下(步骤S3408:是),将后续字符设定为对象字符(步骤S3409),返回至步骤S3402。另一方面,在不存在后续字符的情况下(步骤S3408:否),结束对象文件Fi的再合计处理(步骤S3303),转移至步骤S3304。
由此,能够按每个对象文件Fi,合计存在于对象文件Fi内的上位分割字符码、下位分割字符码、以及二元词串(2-gram)字符串的出现次数。
(哈夫曼树生成处理(步骤S2504))
图39是表示图25所示的哈夫曼树生成处理(步骤S2504)的详细处理步骤例的流程图。在图39中,计算机1100决定压缩符号长的上限长N(步骤S3901)。接着,计算机1100执行校正处理(步骤S3902)。这里,校正处理是指,如图15~图17说明那样使用压缩符号长的上限长N来校正每个字符信息的发生概率以及压缩符号长的处理。
接着,计算机1100按每个字符信息生成叶子的结构体(步骤S3903)。然后,计算机1100执行枝数确定处理(步骤S3904)。在枝数确定处理(步骤S3904)中,确定每个压缩符号长的每个叶子的枝数。通过图40对枝数确定处理(步骤S3904)详细地进行说明。
然后,计算机1100执行构建处理(步骤S3905)。由于通过枝数确定处理(步骤S3904)确定每个叶子的结构体的枝数,因此,首先,计算机1100按每个叶子的结构体,生成枝数量的指向叶子的指针组。然后,汇集指向针对生成的各叶子的结构体的叶子的指针组来作为根的结构体。由此,生成2N分枝无节点哈夫曼树H。另外,生成的2N分枝无节点哈夫曼树H被存放在计算机1100内的存储装置(RAM903、磁盘905等)中。之后,转移到图25的映射作成处理(步骤S2505)。
图40是表示图39所示的枝数确定处理(步骤S3904)的详细处理步骤例的流程图。首先,计算机1100计算最大压缩符号长CLmax(=N)与最小压缩符号长CLmin(=M)的差分D(=N-M)(步骤S4001)。例如,在N=11的情况下,若参照图26,为M=6。因此,为D=5。
接着,计算机1100将2的指数的变量j设为j=0,将压缩符号长的变量CL设为CL=N(步骤S4002)。然后,计算机1100判断是否是j>D(步骤S4003)。在不是j>D的情况下(步骤S4003:否),计算机1100计算压缩符号长CL的每个叶子的枝数b(CL)(步骤S4004)。压缩符号长CL的每个叶子的枝数b(CL)通过b(CL)=2j而算出。例如,当j=0时,压缩符号长CL=N=11,因此压缩符号长是11位的每个叶子的枝数b(11)为b(11)=2j=20=1。
接着,计算机1100计算压缩符号长CL的总枝数B(L)(步骤S4005)。压缩符号长CL的总枝数B(L)通过B(L)=L(CL)×b(CL)而算出。L(CL)是压缩符号长CL中的叶子数(字符信息的种类数)。例如,在j=0时,压缩符号长CL=N=11,因此压缩符号长是11位的总枝数B(L)为1216×20=1216。
之后,计算机1100对j进行自加1,对压缩符号长CL进行自减1(步骤S4006),返回至步骤S4003,判断自加1后的j是否是j>D。另外,在N=11的情况下,若为j=D则j=D=5,CL=M=6。因此,在步骤S4004中,压缩符号长CL(5位)的每个叶子的枝数b(6)为b(6)=26=64。同样地,总枝数B(L)为B(6)=0×26=0。然后,在是j>D的情况下(步骤S4003:是),转移到构建处理(步骤S3905)。
图41是表示图39所示的构建处理(步骤S3905)的详细处理步骤的流程图。首先,计算机1100将压缩符号长CL设为CL=CLmin=M(步骤S4101)。接着,计算机1100判断是否存在压缩符号长CL中的未选择的叶子(步骤S4102)。在存在未选择的叶子的情况下(步骤S4102:是),计算机1100执行指向叶子的指针生成处理(步骤S4103),返回至步骤S4102。在指向叶子的指针生成处理(步骤S4103)中,按每个叶子的结构体,生成与压缩符号长CL对应的枝数量的指向叶子的指针组。另外,通过图42对指向叶子的指针生成处理(步骤S4103)详细地进行说明。
另一方面,在步骤S4102中,在不存在未选择的叶子的情况下(步骤S4102:否),计算机1100判断是否是CL>N(步骤S4104)。在不是CL>N的情况下(步骤S4104:否),计算机1100对CL进行自加1(步骤S4105),返回至步骤S4102。另一方面,在是CL>N的情况下(步骤S4104:是),构建2N分枝无节点哈夫曼树H,转移到步骤S2505。另外,在该构建处理(步骤S3905)中,存放第1区域~第5区域内的信息。
图42是表示图41所示的指向叶子的指针生成处理(步骤S4103)的详细处理步骤的流程图。首先,计算机1100对未选择的叶子L进行选择(步骤S4201),将指向选择叶子的指针数k设定成k=1(步骤S4202)。然后,计算机1100将指向选择叶子的指针PL(k)的在先位串设定成选择叶子的压缩符号(步骤S4203)。例如,对于上限长N=11,在选择叶子是字符信息为“0”的叶子的结构体的情况下,压缩符号是“000000”。因此,指向选择叶子的指针PL(k)的在先位串也为“000000”。
接着,计算机1100将指向选择叶子的指针PL(k)的后续位串的位长设为从最大压缩符号长N减去选择叶子的压缩符号长CL的差分,并将后续位串的初始值全部设定成0(步骤S4204)。例如,在选择叶子是字符信息为“0”的叶子的结构体的情况下,由于压缩符号长CL是6位,因此后续位串的位长为5位(=11-6)。在k=1的情况下,由于后续位串全部为0,因此后续位串为5位的“00000”。
然后,计算机1100将指向选择叶子的指针PL(k)存放于根的结构体(步骤S4205)。之后,计算机1100判断是否是k>b(CL)(步骤S4206)。b(CL)是选择叶子的压缩符号长CL的每个叶子的枝数。在不是k>b(CL)的情况下(步骤S4206:否),由于未对分配给选择叶子的全部枝生成指向叶子的指针,因此计算机1100对k进行自加1(步骤S4207)。
然后,计算机1100通过对当前的后续位串进行自加1,并将自加1后的后续位串与在先位串的末端连结,新生成指向选择叶子的指针PL(k)(步骤S4208)。然后,计算机1100将指向选择叶子的指针PL(k)存放于根的结构体(步骤S4209),返回至步骤S4206。通过反复进行步骤S4206~步骤S4209,生成每个叶子的枝数量的指向叶子的指针组。然后,在步骤S4206中,在是k>b(CL)的情况下(步骤S4206:是),转移到步骤S4102。
这样,能够根据对象文件组Fs中出现的字符信息的种类数,将2N分枝无节点哈夫曼树H的最大枝数2N设定成最合适的根数,因此能够实现2N分枝无节点哈夫曼树H的大小的适当化。此外,根据本实施方式,即使在上限长N不是2~4的整数倍的情况下(例如,上限长N=11、13),也能够生成压缩效率高的2N分枝无节点哈夫曼树H。
之后,计算机1100参照图17的字符信息表,相互关联2N分枝无节点哈夫曼树H的各叶子的结构体和基础词汇的结构体、特定字符码的结构体、分割字符码的结构体。具体而言,如上述那样,在叶子的结构体中,存放与存放在该叶子的压缩符号对应的特定字符、分割字符码以及指向叶子的指针、指向基础词汇的指针。
此外,计算机1100按每个基础词汇的结构体的基础词汇,存放指向存放对应的压缩符号的叶子的指针。此外,计算机1100按每个特定字符码的结构体的特定字符,存放指向存放对应的压缩符号的叶子的指针。此外,计算机1100按每个分割字符码的结构体的分割字符码,存放指向存放对应的压缩符号的叶子的指针。
(映射作成处理(步骤S2505))
图43是表示图25所示的映射作成处理(步骤S2505)的详细处理步骤例的流程图。首先,计算机1100将文件编号i设定成i=1(步骤S4301),读入对象文件Fi(步骤S4302)。然后,计算机1100执行对象文件Fi的映射作成处理(步骤S4303)。通过图44详细说明对象文件Fi的映射作成处理(步骤S4303)。之后,计算机1100判断文件编号i是否是i>α(α是对象文件Fs的文件总数)(步骤S4304)。
在不是i>α的情况下(步骤S4304:否),计算机1100对i进行自加1(步骤S4305),返回至步骤S4302。另一方面,在是i>α的情况下(步骤S4304:是),结束映射作成处理(步骤S2505)。根据该映射作成处理(步骤S2505),能够按每个对象文件Fi执行对象文件Fi的映射作成处理(步骤S4303)。
图44是表示图43所示的对象文件Fi的映射作成处理(步骤S4303)的详细处理步骤的流程图。首先,计算机1100将对象字符设为对象文件Fi的前头字符(步骤S4401),执行基础词汇出现映射作成处理(步骤S4402)、特定单一字符出现映射作成处理(步骤S4403)、二元词串(2-gram)字符串出现映射作成处理(步骤S4404)。
通过图45对基础词汇出现映射作成处理(步骤S4402)详细地进行说明。此外,通过图46对特定单一字符出现映射作成处理(步骤S4403)详细地进行说明。另外,通过图48对二元词串(2-gram)字符串出现映射作成处理(步骤S4404)详细地进行说明。
之后,计算机1100判断对象字符是否是对象文件Fi的末尾字符(步骤S4405)。在对象字符不是对象文件Fi的末尾字符的情况下(步骤S4405:否),计算机1100将对象字符向末尾方向移动1个字符(步骤S4406),返回至步骤S4402。另一方面,在对象字符是对象文件Fi的末尾字符的情况下(步骤S4405:是),转移到步骤S4304,结束对象文件Fi的映射作成处理(步骤S4303)。
根据该对象文件Fi的映射作成处理(步骤S4303),能够随着将对象字符移动1个字符,同时并列地生成基础词汇出现映射、特定单一字符出现映射以及二元词串(2-gram)字符串出现映射。
图45是表示图44中所示的基础词汇出现映射作成处理(步骤S4402)的详细处理步骤例的流程图。首先,计算机1100针对对象字符执行最长一致检索处理(步骤S4501)。由于最长一致检索处理(步骤S4501)的详细处理步骤是与图31所示的最长一致检索处理(步骤S2901)相同的处理内容,因此省略说明。
然后,计算机1100判断是否存在最长一致的基础词汇,即,基础词汇(步骤S4502)。在不存在最长一致的基础词汇的情况下(步骤S4502:否),转移到特定单一字符出现映射作成处理(步骤S4403)。另一方面,在存在最长一致的基础词汇的情况下(步骤S4502:是),计算机1100针对该最长一致的基础词汇,判断基础词汇出现映射是否已设定(步骤S4503)。
在是已设定的情况下(步骤S4503:是),转移到步骤S4506。另一方面,在不是已设定的情况下(步骤S4503:否),计算机1100访问2N分枝无节点哈夫曼树H中的最长一致的基础词汇的叶子,并取得其压缩符号(步骤S4504)。然后,计算机1100将取得的压缩符号设定成指向针对最长一致的基础词汇的基础词汇出现映射的指针(步骤S4505),转移到步骤S4506。之后,在步骤S4506中,计算机1100将针对最长一致的基础词汇的基础词汇出现映射的对象文件Fi的位设为有效(步骤S4506)。
由此,结束基础词汇出现映射作成处理(步骤S4402),转移到特定单一字符出现映射作成处理(步骤S4403)。根据该基础词汇出现映射作成处理(步骤S4402),能够按每个对象字符将最长一致的基础词汇作为基础词汇来作成映射。
图46是表示图44中所示的特定单一字符出现映射作成处理(步骤S4403)的详细处理步骤例的流程图。首先,计算机1100对特定单一字符的结构体进行对象字符的二分搜索(步骤S4601),判断是否一致(步骤S4602)。在不存在一致的单一字符的情况下(步骤S4602:否),计算机1100执行分割字符码出现映射作成处理(步骤S4603),转移到二元词串(2-gram)字符串出现映射作成处理(步骤S4404)。通过图47对分割字符码出现映射作成处理(步骤S4603)详细地进行说明。
另一方面,在步骤S4602中,当通过二分搜索存在与对象字符一致的单一字符的情况下(步骤S4602:是),计算机1100访问2N分枝无节点哈夫曼树H中的进行了二分搜索的单一字符的叶子,并取得其压缩符号(步骤S4604)。然后,计算机1100对该取得的压缩符号,判断特定单一字符出现映射是否已设定(步骤S4605)。在是已设定的情况下(步骤S4605:是),转移到步骤S4607。
另一方面,在不是已设定的情况下(步骤S4605:否),计算机1100将取得的压缩符号设定成指向针对进行了二分搜索的单一字符的特定单一字符出现映射的指针(步骤S4606),转移到步骤S4607。之后,在步骤S4607中,将针对进行了二分搜索的单一字符的特定单一字符出现映射的对象文件Fi的位设为有效(步骤S4607)。
由此,结束特定单一字符出现映射作成处理(步骤S4403),转移到二元词串(2-gram)字符串出现映射作成处理(步骤S4404)。根据该特定单一字符出现映射作成处理(步骤S4403),能够将进行了二分搜索的对象字符作为特定单一字符来作成映射。
图47是表示图46中所示的分割字符码出现映射作成处理(步骤S4603)的详细处理步骤例的流程图。首先,计算机1100分割对象字符(步骤S4701),访问2N分枝无节点哈夫曼树H中的上位分割字符码的叶子,取得压缩符号(步骤S4702)。然后,计算机1100对该取得的压缩符号,判断上位分割字符码出现映射是否已设定(步骤S4703)。
在是设定的情况下(步骤S4703:是),转移到步骤S4705。另一方面,在不是已设定的情况下(步骤S4703:否),计算机1100将取得的压缩符号设定成指向上位分割字符码的出现映射的指针(步骤S4704),转移到步骤S4705。之后,在步骤S4705中,计算机1100将从对象字符分割的上位分割字符码的出现映射的对象文件Fi的位设为有效(步骤S4705)。
此外,计算机1100访问2N分枝无节点哈夫曼树H中的下位分割字符码的叶子,取得压缩符号(步骤S4706)。然后,计算机1100对该取得的压缩符号,判断下位分割字符码的出现映射是否已设定(步骤S4707)。在是已设定的情况下(步骤S4707:是),转移到步骤S4709。
另一方面,在不是已设定的情况下(步骤S4707:否),计算机1100将取得的压缩符号设定成指向下位分割字符码的出现映射的指针(步骤S4708),转移到步骤S4709。之后,在步骤S4709中,计算机1100将从对象字符分割的下位分割字符码的出现映射的对象文件Fi的位设为有效(步骤S4709)。
由此,结束分割字符码出现映射作成处理(步骤S4603),转移到二元词串(2-gram)字符串出现映射作成处理(步骤S4404)。根据该分割字符码出现映射作成处理(步骤S4603),针对比与目标出现率Pc对应的序次靠下位的单一字符,由于出现频度较低,所以较多出现失效的位。
然而,针对比与目标出现率Pc对应的序次靠下位的单一字符,通过将其设成特定单一字符的出现映射的生成对象外,能够实现特定单一字符的压缩符号映射Ms的映射大小的最适化。此外,通过进行分割,针对比与目标出现率Pc对应的序次靠下位的单一字符,设定成上位分割字符码的压缩符号映射Ms以及下位分割字符码的压缩符号映射Ms这样的、将映射大小固定化的映射。因此,无论将目标出现率Pc设定成怎样的出现率,都能够防止映射大小的增大化,能够实现省存储空间化。
图48是表示图44所示的二元词串(2-gram)字符串映射作成处理(步骤S4404)的详细处理步骤例的流程图。在图48中,首先,计算机1100执行二元词串(2-gram)字符串确定处理(步骤S4801)。由于二元词串(2-gram)字符串确定处理(步骤S4801)的详细处理步骤与图37所示的二元词串(2-gram)字符串确定处理(步骤S4806)是相同的处理内容,故省略说明。
接着,计算机1100通过二元词串(2-gram)字符串确定处理(步骤S4801)来判断是否确定了二元词串(2-gram)字符串(步骤S4802)。在未确定的情况下(步骤S4802:否),转移到图44的步骤S4405。
另一方面,在确定了的情况下(步骤S4802:是),计算机1100执行二元词串(2-gram)字符串出现映射生成处理(步骤S4803),转移到步骤S4405。
图49是表示二元词串(2-gram)字符串出现映射生成处理(步骤S4803)的详细处理步骤例的流程图。在图49中,首先,计算机1100针对通过图48的二元词串(2-gram)字符串确定处理(步骤S4801)确定的二元词串(2-gram)字符串的第一词串(特定单一字符或者分割字符码),访问2N分枝无节点哈夫曼树H的叶子,取得压缩符号(步骤S4901)。同样地,计算机1100针对第二元词串(2-gram)(特定单一字符或者分割字符码),访问2N分枝无节点哈夫曼树H的叶子,取得压缩符号(步骤S4902)。
然后,计算机1100连结第一元词串(1-gram)的压缩符号和第二元词串(2-gram)的压缩符号(步骤S4903)。然后,计算机1100判断以连结压缩符号作为指针的出现映射是否已设定(步骤S4904)。在是已设定的情况下(步骤S4904:是),转移到步骤S4906。
另一方面,在不是已设定的情况下(步骤S4904:否),计算机1100将连结压缩符号设定成指向确定的二元词串(2-gram)字符串的出现映射的指针(步骤S4905)。之后,在步骤S4906中,计算机1100将确定的二元词串(2-gram)字符串的出现映射的对象文件Fi的位设为有效(步骤S4906)。
由此,结束二元词串(2-gram)字符串出现映射生成处理(步骤S4803),转移到步骤S4405。根据该二元词串(2-gram)字符串出现映射生成处理(步骤S4803),能够通过二元词串(2-gram)字符串的连结压缩符号,直接指定二元词串(2-gram)字符串的出现映射。
<压缩处理的具体例>
接着,说明对象文件Fi的压缩处理的具体例。如上述那样,在生成了压缩符号映射Ms的情况下,能够通过对检索字符串进行压缩而得到的压缩符号串,指向压缩符号映射Ms内的出现映射。以下,对压缩处理的具体例进行说明。
图50是表示使用了2N分枝无节点哈夫曼树H的压缩处理的具体例的说明图。首先,计算机1100预先从对象文件组Fs取得第1个字符的压缩对象字符码,并保持对象文件Fi上的位置。然后,计算机1100对基础词汇的结构体2300进行二分树搜索。由于基础词汇是2个字符以上的字符码串,因此在查找到第1个字符的压缩对象字符码的情况下,取得第2个字符的字符码作为压缩对象字符码。
然后,从查找到第1个字符的压缩对象字符码的位置开始搜索第2个字符的字符码。在第3个字符以后也反复进行二分树搜索直到出现不一致的压缩对象字符码为止。在搜索到一致的基础词汇ra(a是叶子的编号)的情况下,通过在基础词汇的结构体2300中指向对应的叶子La的指针来访问叶子La的结构体。然后,计算机1100搜索存放在访问目的地的叶子La的结构体中的基础词汇ra的压缩符号,并将其存放于压缩缓冲区5000。
另一方面,在出现不一致的压缩字符码的情况下,结束对基础词汇的结构体2300的二分树搜索(进行到EOT(End Of Transmission:传输结束)为止)。然后,计算机1100将第1个字符的压缩对象字符码再度设置于寄存器,并进行对特定单一字符的结构体2100的二分树搜索。
在搜索到一致的字符码eb(b是叶子的编号)的情况下,计算机1100通过指向其叶子Lb的指针来访问叶子Lb的结构体。然后,计算机1100搜索存放在访问目的地的叶子Lb的结构体中的字符码eb的压缩符号,并将其存放于压缩缓冲区5000。
另一方面,在未出现一致的字符码而结束了二分树搜索的情况下,由于压缩对象字符码不是特定单一字符码,因此计算机1100将其分割成上位8位和下位8位。然后,计算机1100针对上位8位的分割字符码,进行对分割字符码的结构体2200的二分树搜索。在搜索到一致的分割字符码Dc1(c1是叶子的编号)的情况下,计算机1100通过指向其叶子Lc1的指针来访问叶子Lc1的结构体。然后,计算机1100搜索存放在访问目的地的叶子Lc1的结构体中的分割字符码Dc1的压缩符号,并将其存放于压缩缓冲区5000。
接着,计算机1100针对下位8位的分割字符码进行对分割字符码的结构体的二分树搜索。在搜索到一致的分割字符码Dc2(c2是叶子的编号)的情况下,计算机1100通过指向其叶子Lc2的指针来访问叶子Lc2的结构体。然后,计算机1100搜索存放在访问目的地的叶子Lc2的结构体中的分割字符码Dc2的压缩符号,并将其存放于压缩缓冲区5000。由此来压缩对象文件Fi。
<对象文件组Fs的压缩处理>
接着,对由第1压缩部1103进行的对象文件组Fs的压缩处理的处理步骤进行说明。
图51是表示由第1压缩部1103进行的使用了2N分枝无节点哈夫曼树H的对象文件组Fs的压缩处理步骤例的流程图。首先,计算机1100将文件编号:p设为p=1(步骤S5101),读入对象文件Fp(步骤S5102)。接着,计算机1100执行压缩处理(步骤S5103),对文件编号:p进行自加1(步骤S5104)。通过图52对压缩处理(步骤S5103)详细地进行说明。
然后,计算机1100判断是否是p>α(步骤S5105)。α是对象文件组Fs的文件总数。在不是p>α的情况下(步骤S5105:否),返回至步骤S5102。另一方面,在是p>α的情况下(步骤S5105:是),结束对象文件组Fs的压缩处理。
图52是表示图51所示的压缩处理(步骤S5103)的详细处理步骤的流程图(其1)。在图52中,首先,计算机1100判断在对象文件组Fs是否存在压缩对象字符码(步骤S5201)。在存在的情况下(步骤S5201:是),计算机1100取得压缩对象字符码并将其设置于寄存器(步骤S5202)。然后,计算机1100判断是否是前头的压缩对象字符码(步骤S5203)。
这里,前头的压缩对象字符码是指未压缩的第1个字符的字符码。在是前头的情况下(步骤S5203:是),计算机1100取得成为该压缩对象字符码的对象文件组Fs上的位置(前头位置)的指针(步骤S5204),转移到步骤S5205。另一方面,在不是前头的情况下(步骤S5203:否),不取得前头位置而转移到步骤S5205。
然后,计算机1100对基础词汇的结构体2300进行二分树搜索(步骤S5205)。在压缩对象字符码一致的情况下(步骤S5206:是),计算机1100连续地判断一致的字符码串是否符合基础词汇(的字符码串)(步骤S5207)。在不符合的情况下(步骤S5207:否),计算机1100返回至步骤S5202,取得后续的字符码作为压缩对象字符码。该情况下,由于后续的字符码不在前头,因此不取得前头位置。
另一方面,在步骤S5207中,当符合基础词汇的情况下(步骤S5207:是),计算机1100通过指向符合的基础词汇的叶子L#的指针来访问叶子L#的结构体(步骤S5208)。然后,计算机1100提取存放在被指向的叶子L#的结构体中的基础词汇的压缩符号(步骤S5209)。
之后,计算机1100将提取的压缩符号存放于压缩缓冲区5000(步骤S5210),返回至步骤S5201。该循环为基础词汇的压缩处理的流程。在步骤S5201中,当不存在压缩对象字符码的情况下(步骤S5201:否),计算机1100从压缩缓冲区5000文件输出由对象文件Fp压缩而得到的压缩文件fp并进行保存(步骤S5211)。然后,转移到步骤S5104。另一方面,当在步骤S5206中为不一致的情况下(步骤S5206:否),进入16位字符码的压缩处理的循环。
图53是表示图51所示的压缩处理(步骤S5103)的详细处理步骤的流程图(其2)。在图53中,计算机1100参照通过步骤S5204取得的前头位置的指针,从对象文件组Fs取得压缩对象字符码并将其设置于寄存器(步骤S5301)。
接着,计算机1100针对压缩对象字符码,对特定单一字符的结构体2100进行二分树搜索(步骤S5302)。在一致的情况下(步骤S5303:是),计算机1100通过指向符合的字符的叶子L#的指针来访问叶子L#的结构体(步骤S5304)。然后,计算机1100提取存放在被指向的叶子L#的结构体中的压缩对象字符码的压缩符号(步骤S5305)。
之后,计算机1100将搜索到的压缩符号存放于压缩缓冲区5000(步骤S5306),返回至步骤S5201。该循环为16位的字符码的压缩处理的流程。另一方面,当在步骤S5303中不存在一致的字符码的情况下(步骤S5303:否),进入分割字符码的压缩处理的循环。
图54是表示图51所示的压缩处理(步骤S5103)的详细处理步骤的流程图(其3)。在图54中,首先,计算机1100将压缩对象字符码分割成上位8位和下位8位(步骤S5401),提取上位8位的分割字符码(步骤S5402)。然后,计算机1100对分割字符码的结构体2200进行二分树搜索(步骤S5403)。
然后,计算机1100通过指向搜索到的分割字符码的叶子L#的指针来访问叶子L#的结构体(步骤S5404)。然后,计算机1100提取存放在被指向的叶子L#的结构体中的分割字符码的压缩符号(步骤S5405)。之后,计算机1100将搜索到的压缩符号存放于压缩缓冲区5000(步骤S5406)。
接着,计算机1100判断下位8位是否搜索完(步骤S5407),在不是搜索完的情况下(步骤S5407:否),计算机1100提取下位8位的分割字符码(步骤S5408),执行步骤S5403~S5406。另一方面,在下位8位是搜索完的情况下(步骤S5407:是),返回至步骤S5301,进入基础词汇的压缩处理的循环。
这样,在使用了2N分枝无节点哈夫曼树H的压缩处理中,由于没有内部节点而无需向根进行搜索,只要提取存放在被指向的叶子L#的结构体中的字符信息,来写入到压缩缓冲区5000即可。因此,能够实现压缩处理的高速化。
此外,通过基础词汇的结构体、特定单一字符码的结构体以及分割字符码的结构体,能够立即确定存放有压缩对象字符码的叶子L#的结构体。因此,无需搜索2N分枝无节点哈夫曼树H的叶子,能够实现压缩处理的高速化。此外,通过将低位字符码分割成上位位码和下位位码,能够将非特定单一字符压缩成256种分割字符码的压缩符号。因此,能够实现压缩率的提高。
<映射压缩的具体例>
接着,对由第2压缩部1106进行的压缩符号映射Ms内的各出现映射的映射压缩的具体例进行说明。第2压缩部1106对压缩区域内的出现映射进行压缩,不压缩非压缩区域的出现映射。压缩区域是指,在采取文件编号1~α的情况下,到为n×(α/n的商)的文件编号为止的出现映射的位串。例如,在n=256位且当前的对象文件数α=600的情况下,由于α/n的商为2,因此文件编号1~2n的出现映射的位串为压缩区域。而且,文件编号(2n+1)~α的位串为非压缩区域而不被压缩。
此外,出现映射的位串由于文件总数α增大,从而位串内的“0”连续之处也增多。此外,关于出现频度较高的字符信息,与此相反地“1”连续之处增多。因此,设定与字符的出现率对应的出现率区域。出现率区域是指出现率的范围。根据出现率区域,来分配出现映射压缩用的哈夫曼树h。
图55是表示出现率与出现率区域的关系的说明图。若设出现率为0~100%的范围,则能够如图55所示那样,区域分割成A~E区域以及A’~E’区域。因此,根据A~E区域以及A’~E’区域中确定的出现率区域,来分配出现映射压缩用的哈夫曼树h作为压缩模式。
图56是表示具有不同出现率区域的压缩模式的压缩模式表的说明图。如图20所示,由于出现率被存放在叶子L#的结构体的第5区域中,因此通过叶子L#的结构体被指定,参照压缩模式表5600来确定压缩模式。另外,由于A区域以及A’区域是非压缩区域,因此不存在作为压缩模式的哈夫曼树。
图57是表示B区域以及B’区域的情况下的压缩模式的说明图。压缩模式5700为叶子是16种的哈夫曼树h。
图58是表示C区域以及C’区域的情况下的压缩模式的说明图。压缩模式5800为叶子是16种+1种的哈夫曼树h。在压缩模式5800中,相比B区域以及B’区域,“0”连续之处或者“1”连续之处概率上增多。因此,对16位连续且值为“0”的位串分配有符号语言“00”。
图59是表示D区域以及D’区域的情况下的压缩模式的说明图。压缩模式5900为叶子是16种+1种的哈夫曼树。在压缩模式5900中,相比C区域以及C’区域,“0”连续之处或者“1”连续之处概率上增多。因此,对32位连续且值为“0”的位串分配有符号语言“00”。
图60是表示E区域以及E’区域的情况下的压缩模式的说明图。压缩模式6000为叶子是16种+1种的哈夫曼树。在压缩模式6000中,相比D区域以及D’区域,“0”连续之处或者“1”连续之处概率上增多。因此,对64位连续且值为“0”的位串分配有符号语言“00”。这样,由于根据出现率区域,意味不存在字符码的“0”的连续数增加,因此,能够根据字符码的出现率来实现压缩符号映射Ms的压缩效率的提高。
(压缩符号映射压缩处理步骤)
接着,对压缩符号映射压缩处理进行说明。压缩符号映射压缩处理是对压缩区域的位串进行压缩的处理。具体而言,使用图56所示的压缩模式表5600和图57~图60所示的压缩模式表5700~6000(哈夫曼树h),对压缩符号映射Ms的压缩区域的位串进行压缩。以下,对压缩符号映射压缩处理步骤进行说明。
图61是表示压缩符号映射压缩处理步骤的流程图。在图61中,首先,计算机1100判断在压缩符号映射Ms中是否存在指向未选择的出现映射的指针(步骤S6101)。在存在未选择的地址的情况下(步骤S6101:是),计算机1100对未选择的地址进行选择并访问叶子L#的结构体(步骤S6102),从叶子L#的结构体的第1区域中取得字符码(步骤S6103)。然后,计算机1100通过从访问目的地的叶子L#的结构体的第5区域取得出现率区域,来确定所取得的字符码的出现率区域(步骤S6104)。
之后,计算机1100参照图59的压缩模式表5900,判断所确定的出现率区域是否是非压缩区域(例如,出现率区域A,A')(步骤S6105)。在是非压缩区域的情况下(步骤S6105:是),返回至步骤S6101,选择下一个地址。
另一方面,在不是非压缩区域的情况下(步骤S6105:否),计算机1100根据确定的出现率区域,从图57~图60所示的压缩模式5700~6000(哈夫曼树h)中选择符合的压缩模式(哈夫曼树h)(步骤S6106)。此外,计算机1100提取成为压缩对象的取得字符码的出现映射中的压缩区域的位串(步骤S6107)。
然后,计算机1100判断取得字符码的出现率是否在50%以上(步骤S6108)。出现率是指,如上述那样将对象文件组Fs内的全部文件数作为母群(分母),将存在该字符信息的文件数作为分子的值。由于出现率区域是根据出现率而决定的(参照图55),因此在出现率区域是A~E的情况下,判断为取得字符码的出现率不在50%以上。另一方面,在出现率区域是A’~E’的情况下,计算机1100判断为取得字符码的出现率在50%以上。
然后,当出现率在50%以上的情况下(步骤S6108:是),计算机1100为了提高压缩效率,对通过步骤S6107提取到的位串进行反转(步骤S6109)。例如,在提取到的位串是“1110”的情况下,成为“0001”,增加了“0”的个数。然后,计算机1100对反转后的位串使用通过步骤S6106选择的哈夫曼树进行压缩,并存放于存储装置(例如闪存存储器或磁盘905)(步骤S6110)。然后,返回至步骤S6101。这样,通过进行位串反转,无需准备出现率区域A’~E’的哈夫曼树h,因此能够实现省存储空间化。
另一方面,在步骤S6108中当出现率不在50%以上的情况下(步骤S6108:否),计算机1100不进行位串反转(步骤S6109),而使用通过步骤S6106选择的哈夫曼树对通过步骤S6107提取到的位串进行压缩(步骤S6110),返回至步骤S6101。此外,在步骤S6101中当不存在未选择的地址的情况下(步骤S6101:否),结束压缩符号映射压缩处理。
通过这种压缩符号映射压缩处理步骤,如图3所示那样,按每个字符信息,根据出现率对压缩区域内的位串进行压缩。这样,由于根据出现率区域,意味不存在字符信息的“0”的连续数增加,因此能够根据字符信息的出现率而实现压缩符号映射Ms的压缩效率的提高。
此外,若之后追加对象文件,则在压缩所追加的对象文件时,也需要对压缩符号映射Ms追加表示字符的有无的位串。在压缩前的压缩符号映射Ms中,针对文件编号:1~α的出现映射的位串,通过压缩模式5700~6000而压缩,由此符号长按每个记录而不同。即,由于是可变长而成为压缩区域。
因此,如图3所示,压缩符号串的前头(文件编号k侧)进行排序但是末尾(文件编号1侧)不进行排序。若假设从指向压缩符号映射Ms的指针(字符信息的压缩符号)侧按文件编号:1~α的顺序来分配位串的排列,则将追加文件的位串***压缩符号串的末尾侧,导致压缩符号串和追加文件的位串成为非连续。因此,预先将压缩符号映射Ms的压缩区域的位串从前头位置到末尾位置按照对象文件组Fs的文件编号p的降序来排列。然后,在压缩符号映射Ms中,在指向出现映射的指针(字符信息的压缩符号)与压缩区域之间设定非压缩区域。
若以图3举例,则向文件编号:1~2n+1中的压缩符号串进行排序的侧分配文件编号:2n+1的位。由此,即使在压缩了文件编号:1~2n的位串的情况下***非压缩的文件编号:2n+1~3n的位串,也能够按文件编号顺序使位串连续。由此,即使压缩文件编号:1~2n的位串,也不会发生追加文件的文件编号与其位的偏移,而能够准确地执行对象文件的筛选。
<功能性构成例2>
图62是表示本实施方式所涉及的计算机或者计算机***的功能构成例2的框图。在图62中,计算机1100具备:指定部6201、第1解压部6202、第1压缩部1103、输入部6203、提取部6204、第2解压部6205、确定部6206、以及段生成部6207。具体而言,指定部6201~段生成部6207通过使CPU901执行例如存储在图9所示的ROM902、RAM903、磁盘905等存储装置中的程序来实现其功能。另外,指定部6201~段生成部6207分别将执行结果写入存储装置,或读出其他部的执行结果,分别执行运算。以下,对指定部6201~段生成部6207简单地进行说明。
指定部6201受理对象文件组Fs内的任意一个对象文件的打开指定。具体而言,指定部6201通过用户操作键盘、鼠标、触摸面板来受理对象文件Fi的打开指定。若受理该打开指定,则在压缩符号映射Ms中,指定指向与被指定打开的对象文件Fi的文件编号i关联的压缩文件fi的指针。由此,读出存放在成为指向目的地的地址中的、被指定打开的对象文件Fi的压缩文件fi。
在由主服务器执行了指定部6201的指定的情况下,确定与用被指定的对象文件Fi的文件编号i除以第0阶层的段数K时的商一致的段编号的段。由此,能够根据确定的段来指定压缩文件fi。
此外,指定部6201受理对象文件Fi的追加指定。具体而言,指定部6201通过用户操作键盘、鼠标、触摸面板,来受理对象文件Fi的追加指定。若受理该追加指定,则由第1压缩部1103利用2N分枝无节点哈夫曼树H压缩被指定追加的对象文件Fi,作为压缩文件fi,保存在第0阶层的最末尾段。
此外,指定部6201受理段的汇集指定。具体而言,指定部6201通过用户操作键盘、鼠标、触摸面板,来受理段的汇集指定。此外,也可以通过计时器以规定时刻或者规定时间单位来受理段的汇集指定。
第1解压部6202利用2N分枝无节点哈夫曼树H来解压对象文件Fi的压缩文件fi。具体而言,例如,第1解压部6202利用2N分枝无节点哈夫曼树H解压由指定部6201指定打开的对象文件Fi的压缩文件fi。此外,针对由后述的确定部6206确定的对象文件Fi也利用2N分枝无节点哈夫曼树H来解压。针对解压的具体例之后再叙述。
输入部6203受理检索字符串的输入。具体而言,输入部6203通过用户操作键盘、鼠标、触摸面板,来受理检索字符串的输入。此外,输入部6203经由网络从客户端装置接收检索字符串,由此受理检索字符串的输入。
提取部6204从2N分枝无节点哈夫曼树H提取由输入部6203输入的检索字符串内的字符信息的压缩符号。具体而言,例如,提取部6204根据检索字符串,提取特定单一字符、上位分割字符码、下位分割字符码、二元词串(2-gram)字符串、以及基础词汇中符合的字符信息。
例如,在检索字符串是“人形”的情况下,提取特定单一字符“人”、“形”和二元词串(2-gram)字符串“人形”。由此,提取部6204能够利用2N分枝无节点哈夫曼树H来确定所提取的字符信息的压缩符号,并指向压缩符号映射Ms符合的出现映射。例如,能够指向特定单一字符“人”的已压缩的出现映射、“形”的已压缩的出现映射、二元词串(2-gram)字符串“人形”的已压缩的出现映射。
在图7所示的计算机***中,主服务器MS进行基于提取部6204的字符信息的提取,并利用2N分枝无节点哈夫曼树H取得提取字符信息的压缩符号。由于取得的压缩符号为指向出现映射的指针,因此被发送至从属服务器S1、S2、…。
第2解压部6205解压由提取部6204提取的已压缩的出现映射。具体而言,由于能够根据字符信息的出现率来确定出现率区域,因此第2解压部6205利用与确定的出现率区域对应的映射用的哈夫曼树,来解压已压缩的出现映射的压缩区域。例如,在上述的例子中,在全部存档文件(参照图7)中,解压特定单一字符“人”的已压缩的出现映射、“形”的已压缩的出现映射、二元词串(2-gram)字符串“人形”的已压缩的出现映射。
在图7所示的计算机***中,通过各个主服务器MS以及从属服务器S1、S2、…,执行基于第2解压部6205的解压处理。
确定部6206通过执行基于第2解压部6205的解压后的出现映射组以及删除映射D的AND运算,从压缩文件组确定包含检索字符串内的字符信息的对象文件的压缩文件。在上述的例子中,确定部6206对特定单一字符“人”的已压缩的出现映射、“形”的已压缩的出现映射、二元词串(2-gram)字符串“人形”的已压缩的出现映射、以及删除映射进行AND运算。
如图8所示,该AND运算从最上位阶层的段开始执行,最后筛选到第0阶层的段,在筛选出的第0阶层的段执行AND运算。另外,由于在图8中简略化,因此省略了二元词串(2-gram)字符串“人形”的已压缩的出现映射。
在图7所示的计算机***中,主服务器MS从最上位阶层起针对第1阶层的段进行基于确定部6206的筛选,将包含检索字符串的对象文件的文件编号发送至管理该文件编号的从属服务器。接收到文件编号的从属服务器通过由确定部6206进行的确定处理,利用出现映射以及删除映射进行AND运算,由此筛选压缩文件。
由此,如图8所示,确定文件编号3、19(的压缩文件f3、f19)。在第1解压部6202中,利用2N分枝无节点哈夫曼树H来解压由确定部6206确定的压缩文件(在上述的例子中为压缩文件f3、f19)。
之后,通过从属服务器筛选的压缩文件被发送至主服务器MS。主服务器MS通过第1解压部6202,利用2N分枝无节点哈夫曼树H解压来自从属服务器的压缩文件。所解压的对象文件(在上述的例子中是F3,F19)被显示于显示器等显示装置。此外,在从客户端装置受理检索字符串的情况下,主服务器MS向客户端装置发送作为检索结果而解压的对象文件(在上述的例子中是F3、F19)。此外,当在确定部6206中未确定压缩文件的情况下,返回这一主旨的检索结果。
若段生成部6207受理对象文件的追加指定,则判断当前的文件总数α是否是每段的文件数n的倍数。在是n的倍数的情况下,由于在最末尾段不存在能够保存被指定追加的对象文件的压缩文件的闲置区域,因此新生成第0阶层的段。若新生成段,则如图1、图6所示那样,进行管理区域间的关联。然后,对新段依次存放所追加的压缩文件。
在执行段生成部6207的计算机为主服务器MS的情况下,对具有最末尾段的从属服务器,发送第0阶层的新段的生成指示。此外,当在保持最末尾段的从属服务器不存在保持新段的闲置区域的情况下,向其他从属服务器发送第0阶层的新段的生成指示。然后,若生成新段,则主服务器MS依次发送所追加的压缩文件。由此,向新段依次存放所追加的压缩文件。
此外,段生成部6207进行出现映射、删除映射的汇集。具体而言,例如,段生成部6207如图4所示那样,按每个出现映射,进行向上位阶层的汇集。然后,段生成部6207如图4所示那样,进行汇集目的地的上位阶层的段(例如,段sg1(1))的管理区域和汇集源的下位阶层的段组(例如,段sg0(1)~sg0(m))的各管理区域之间的关联。对删除映射也同样地执行该汇集处理。
<文件解压例>
图63是表示文件解压例的说明图。文件解压例所示的处理通过输入部6203、提取部6204、第2解压部6205、确定部6206、第1解压部6202来执行。(G1)首先,在通过输入部6203输入了检索字符串“人形”的情况下,针对构成检索字符串“人形”的字符“人”、“形”,通过对特定单一字符的结构体2100进行二分搜索,来检索特定单一字符“人”、“形”。在特定单一字符的结构体2100中,关联有指向2N分枝无节点哈夫曼树H的叶子(特定单一字符)的指针。因此,若通过特定单一字符的结构体进行查找,则能够直接指定2N分枝无节点哈夫曼树H的叶子。
(G2)直接指定2N分枝无节点哈夫曼树H的叶子后,将该叶子的结构体内的对照标志设定成有效,并提取压缩符号。由于压缩符号为指向特定单一字符的出现映射的指针,因此能够直接进行指定。本例的情况下,由于提取特定单一字符“人”、“形”的压缩符号,因此提取“人”的出现映射和“形”的出现映射。此外,由于连结了“人”的压缩符号以及“形”的压缩符号的连结压缩符号也为指向二元词串(2-gram)字符串的出现映射的指针,所以能够直接进行指定。因此,也提取二元词串(2-gram)字符串“人形”的出现映射。
(G3)提取的3个出现映射利用映射用哈夫曼树来解压。之后,如图8所示,确定部6206从最上位阶层的段进行筛选,在段sg0(1)中,利用被解压的出现映射和删除映射执行AND运算,得到AND结果。
(G4)由于在段sg0(1)的AND结果中文件编号3成为有效,所以判明检索字符串“人形”存在于对象文件F3。因此,从压缩文件组fs提取到压缩文件f3。由此能够筛选要解压的压缩文件,降低无关的解压处理。
(G5)最后,通过将提取的压缩文件f3保持压缩状态地进行对照、解压,来打开解压后的对象文件F3。另外,由于在“人”、“形”的叶子的结构体中对照标志成为有效,因此在解压“人”、“形”之际,以替换字符串的方式而解压,以便强调显示。例如,针对对照标志为有效的“人”、“形”,通过用<B></B>标签夹持并解压,从而以粗体字显示。针对对照标志为失效的字符,不以<B></B>标签夹持而保持原样地解压。
<解压处理的具体例>
接着,对图63中的解压处理的具体例进行说明。这里,针对使用检索字符串“人形”的压缩符号串与压缩文件fi进行对照并将其解压缩的例子进行说明。另外,作为例子,将特定单一字符“人”的压缩符号设为“1100010011”(10位),将特定单一字符“形”的压缩符号设为“0100010010”(10位)。
此外,在解压处理中,向寄存器设置压缩符号串,并通过掩码模式来提取压缩符号。通过1个路径(访问1个枝)从2N分枝无节点哈夫曼树H的根开始搜索被提取的压缩符号。然后,读出存放在所访问的叶子L#的结构体中的字符码并将其存放于解压缓冲区。
此外,为了提取压缩符号,而使掩码模式的掩码位置偏移。此外,将掩码模式的初始值设为“0xFFF00000”。该掩码模式是前头12位为“1”、后续20位为“0”的位串。
图64以及图65是表示图63中的解压处理的具体例的说明图。在图64中,表示出针对特定单一字符“人”的解压例(A)。在图64中,首先,CPU计算位地址abi、字节偏移byos、以及位偏移bios。位地址abi是表示提取的压缩符号的位的位置的值,此次的位地址abi为将上次的位地址abi与上次提取的压缩符号的压缩符号长leg相加得到的值。另外,在初始状态下,设位地址abi为abi=0。
字节偏移byos是表示保持在存储器中的压缩符号串的字节边界的值,通过位地址abi/8的商而求出。例如,字节偏移byos=0时,将从存储在存储器中的前头开始的压缩符号串设置于寄存器,字节偏移byos=1时,将从存储在存储器中的前头第1个字节开始的压缩符号串设置于寄存器。
此外,位偏移bios是使掩码模式的掩码位置(“FFF”)偏移的值,是位地址abi/8的余数。例如,位偏移bios=0时,不移动掩码位置,掩码模式为“0xFFF00000”。另一方面,位偏移bios=4时,掩码位置向末尾方向移动4位,掩码模式为“0x0FFF0000”。
寄存器移动数rs是将与掩码模式AND运算后的寄存器内的压缩符号串向末尾方向移动的位数,通过rs=32-12-bios来求出。通过该移动,将移动后的寄存器的末尾m位的位串提取为对象位串。在提取对象位串后,清空寄存器。
另外,存储器内的块表示1个字节的位串,内部的数字表示成为字节边界的字节位置。在图64中,由于位地址abi=0,从而字节偏移byos=0,位偏移bios=0。由于字节偏移byos=0,因此将保持在存储器中的压缩符号串中的从前头开始4字节(图中的阴影)的压缩符号串设置于寄存器。
此外,由于位偏移bios=0,因此掩码模式是“0xFFF00000”。因此,通过对设置在寄存器中的压缩符号串与掩码模式“0xFFF00000”进行逻辑加(AND)运算,来获得AND结果。
此外,由于位偏移bios=0,所以寄存器移动数rs为rs=32-m-bios=32-12-0=20。因此,将寄存器内的AND结果向末尾方向移动20位。由于通过该移动,在寄存器中剩下“110001001100”,因此将末尾12位提取为对象位串。该情况下,提取“110001001100”作为对象位串。提取后,清空寄存器。
由于在2N分枝无节点哈夫曼树H的根的结构体中,存在所提取的对象位串“110001001100”,因此搜索指向与该对象位串一致的叶子L#的指针(枝编号)。该情况下,由于与指向叶子L97的指针组中的一个一致,因此读出指向符合的叶子L97的指针,访问叶子L97的结构体。
在叶子L97的结构体中,存放有字符码“0xBA4E”,因此提取该字符码“0xBA4E”并存放于解压缓冲区。该情况下,由于对照标志是有效,因此将字符码“0xBA4E”以<B></B>标签夹持着存放。
此外,在叶子L97的结构体中,还存放有字符码“0xBA4E”的压缩符号长leg(=10位),因此也提取字符码“0xBA4E”的压缩符号长leg。根据该提取的压缩符号长leg来更新位地址abi。该情况下,更新后的位地址abi为abi=0+10=10。
在图65中,表示对特定单一字符“形”解压缩的例子(B)。具体而言,在从图64的状态(A)将寄存器移动位偏移bios的情况下,作为上次的(A)的位地址abi是abi=0,压缩符号长leg是10位,因此(B)的位地址abi为abi=10位。
此外,由于该位地址abi=10,所以字节偏移为byos=1,位偏移为bios=2。由于字节偏移byos=1,所以将保持在存储器中的压缩符号串中的从前头第1个字节开始4字节(图中的阴影)的压缩符号串设置于寄存器。
此外,由于位偏移bios=2,所以掩码模式为“0x3FFC0000”。因此,通过将设置在寄存器中的压缩符号串与掩码模式“0x3FFC0000”进行逻辑加(AND)运算,来获得AND结果。
此外,由于位偏移bios=2,所以寄存器移动数rs为rs=32-m-bios=32-12-2=18。因此,将寄存器内的AND结果向末尾方向移动18位。由于通过该移动,在寄存器中剩下“00000100010010”,因此将末尾10位提取为对象位串。该情况下,提取“0100010010”作为对象位串。提取后,清空寄存器。
由于在2N分枝无节点哈夫曼树H的根的结构体中存在所提取的对象位串“0100010010”,因此搜索指向与该位串一致的叶子L#的指针(枝编号)。该情况下,由于对象位串“0100010010”与指向叶子L105的指针组中的一个一致,因此读出指向符合的叶子L105的指针,访问叶子L24的结构体。
由于在叶子L105的结构体中,存放有字符码“0x625F”,因此提取该字符码“0x625F”并存放于解压缓冲区。在文件解压例(G1)的情况下,保持原样地存放于解压缓冲区,但是文件解压例(G2)的情况下,由于对照标志是有效,因此将字符码“0x625F”以<B></B>标签夹持着进行存放。此外,由于在叶子L105的结构体中,还存放有字符码“0x625F”的压缩符号长leg(=8位),也提取字符码“0x625F”的压缩符号长leg。根据该提取的压缩符号长leg来更新位地址abi。该情况下,更新后的位地址abi为abi=10+8=18。通过这种方式进行解压而打开对象文件。
<文件追加处理的具体例>
接着,对文件追加处理的具体例进行说明。这里,不解压已压缩的压缩符号映射Ms,而是由段生成部6207执行成为追加对象的对象文件F(n+1)的追加和压缩符号映射Ms的更新。
图66是表示文件追加处理的具体例的说明图。在图66中,以追加对象文件F(n+1)的情况举例进行说明。首先,根据图63的文件解压例,从压缩文件组fs解压压缩文件f3,解压后的对象文件F3被写在主存储器(例如,RAM903)上。这里,变更成对象文件F(n+1),并赋予新的保存指示。该情况下,对主存储器上的对象文件F(n+1)分配新编号的文件编号n+1。即,由于在段sg0(1)中没有闲置区域,因此设定段sg0(2),并在与段sg0(1)之间进行关联。
(I)然后,通过2N分枝无节点哈夫曼树H压缩对象文件F(n+1)作为压缩文件f(n+1),并保存于段sg0(2)。(J)此外,通过合计部1101合计主存储器上的对象文件F(n+1)的字符信息,从而能够检测字符信息的有无。因此,将新编号的文件编号n+1的位追加到各字符信息的出现映射(默认为失效),将出现字符信息的位设为有效。此外,将文件编号n+1的位也追加到删除映射D(默认为有效)。
(K)此外,针对压缩文件f(n+1),在段sg0(2)的管理区域中关联指针。由此,在以后,若在段sg0(2)中指定文件编号(n+1),则能够解压压缩文件f(n+1)而打开对象文件F(n+1)。
此外,在图7所示的计算机***中,若文件总数是α,则在α=文件编号m×n的情况下,在从属服务器S1中仅存放有存档文件A0(1)。然后,在新追加对象文件F(m×n+1)的情况下,主服务器MS将对象文件F(m×n+1)的压缩文件f(m×n+1)发送至成为分配目的地的从属服务器S2。哪个从属服务器为分配目的地是预先决定的。从属服务器S2生成段sg0(m+1)作为从属服务器S1的段sg0(m)的后续段,并保存来自主服务器MS的压缩f(m×n+1)。
图67是表示段追加处理的详细处理步骤的流程图。首先,计算机1100等待通过指定部6201指定文件追加(步骤S6701:否)。在进行了文件追加的指定的情况下(步骤S6701:是),计算机1100确定保存对象段sg0(K)(步骤S6702)。具体而言,将与用文件数i除以每段的文件数n得到的商相同的编号的段作为保存对象段sg0(K)。
然后,计算机1100对文件数i进行自加1(步骤S6703),判断是否是i>Kn(步骤S6704)。在不是i>Kn的情况下(步骤S6704:否),由于在当前段sg0(K)仍能够保存压缩文件,因此计算机1100执行追加文件的映射更新处理(步骤S6709)。对详细的追加文件的映射更新处理(步骤S6709)之后再叙述。
之后,计算机1100利用2N分枝无节点哈夫曼树H压缩追加文件(步骤S6710),并将压缩追加文件保存于保存对象段sg0(K)(步骤S6711)。然后,计算机1100向保存对象段sg0(K)的管理区域AK关联指向压缩追加文件的指针(步骤S6712)。由此,结束段追加处理。
此外,在步骤S6704中,当是i>Kn的情况下(步骤S6704:是),由于在当前段sg0(K)无法保存压缩追加文件,因此计算机1100利用映射用哈夫曼树来压缩当前段sg0(K)的压缩符号映射(步骤S6705)。然后,计算机1100确保新段的区域(步骤S6706),对段编号K进行自加1(步骤S6707)。之后,计算机1100执行自加1后的段sg0(K)和其在先段的指针的联合处理(步骤S6708)。由此,如图1所示,与在先段建立关联。之后,转移到步骤S6709。
图68是表示图67所示的追加文件的映射更新处理(步骤S6709)的详细处理步骤的流程图(前半)。首先,计算机1100在压缩符号映射Ms以及删除映射Ds中设定追加文件的文件编号的位(步骤S6801)。具体而言,针对出现映射,对追加文件的文件编号设定失效的位,针对删除映射D,对追加文件的文件编号设定有效的位。
接着,计算机1100将追加文件内的前头字符设定成对象字符(步骤S6802),针对对象字符执行最长一致检索处理(步骤S6803)。最长一致检索处理(步骤S6803)是与图31所示的处理相同的处理,故省略说明。
之后,计算机1100判断最长一致的基础词汇是否存在于基础词汇的结构体2300中(步骤S6804)。在不存在的情况下(步骤S6804:否),转移到图69的步骤S6901。另一方面,在存在的情况下(步骤S6804:是),计算机1100根据2N分枝无节点哈夫曼树H确定最长一致的基础词汇的压缩符号,并通过该压缩符号,指定最长一致的基础词汇的出现映射(步骤S6805)。然后,计算机1100将指定的出现映射中与追加文件的文件编号对应的位设为有效(步骤S6806)。然后,转移到图69的步骤S6901。
图69是表示图67所示的追加文件的映射更新处理(步骤S6709)的详细处理步骤的流程图(后半)。首先,计算机1100判断对象字符是否是特定单一字符(步骤S6901)。具体而言,例如,计算机1100判断在特定单一字符的结构体中是否查找到对象字符。
在对象字符是特定单一字符的情况下(步骤S6901:是),计算机1100根据2N分枝无节点哈夫曼树H确定查找到的特定单一字符的压缩符号,并通过该压缩符号,指定查找到的特定单一字符的出现映射(步骤S6902)。然后,计算机1100将指定的出现映射中与追加文件的文件编号对应的位设为有效(步骤S6903)。之后,转移到步骤S6909。
另一方面,在对象字符不是特定单一字符的情况下(步骤S6901:否),计算机1100将对象字符分割成上位分割字符码和下位分割字符码(步骤S6904)。然后,计算机1100根据2N分枝无节点哈夫曼树H确定在分割字符码的结构体中查找到的上位分割字符码的压缩符号,并通过该压缩符号,指定查找到的上位分割字符码的出现映射(步骤S6905)。然后,计算机1100将指定的出现映射中与追加文件的文件编号对应的位设为有效(步骤S6906)。
同样地,计算机1100根据2N分枝无节点哈夫曼树H确定在分割字符码的结构体中查找到的下位分割字符码的压缩符号,并通过该压缩符号,指定查找到的下位分割字符码的出现映射(步骤S6907)。然后,计算机1100将指定的出现映射中与追加文件的文件编号对应的位设为有效(步骤S6908)。之后,转移到步骤S6909。
此外,在步骤S6909中,计算机1100执行二元词串(2-gram)字符串确定处理(步骤S6909)。二元词串(2-gram)字符串确定处理(步骤S6909)是与图37所示的处理相同的处理,故省略说明。
之后,计算机1100连结二元词串(2-gram)字符串(例如“人形”)中前头词串字符(例如,“人”)的压缩符号和末尾词串字符(例如,“形”)的压缩符号(步骤S6910)。接着,计算机1100通过连结压缩符号,指定二元词串(2-gram)字符串的出现映射(步骤S6911)。然后,计算机1100将指定的出现映射中与追加文件的文件编号对应的位设为有效(步骤S6912),结束一系列的处理。
<段阶层化处理>
接着,对段阶层化处理进行说明。段阶层化处理是指,如图4以及图5所示那样,将下位阶层的段组的索引信息组汇集到上位阶层的索引信息的处理。由段生成部6207执行段阶层化处理。
图70是表示段阶层化处理的详细处理步骤的流程图。在图70中,计算机1100通过指定部等待段的汇集指定(步骤S7001:否)。在受理了汇集指定的情况下(步骤S7001:是),计算机1100依次选择作为指定出现映射的指针的压缩符号(步骤S7002)。具体而言,在存在未选择的压缩符号的情况下(步骤S7002:是),计算机1100选择一个未选择的压缩符号(步骤S7003),执行选择出现映射汇集处理(步骤S7004)。对详细的选择出现映射汇集处理(步骤S7004)之后再叙述。
在选择出现映射汇集处理(步骤S7004)之后,返回至步骤S7002。而且,在不存在未选择的压缩符号的情况下(步骤S7002:否),计算机1100执行删除映射汇集处理(步骤S7005)。对详细的删除映射汇集处理(步骤S7005)之后再叙述。由此,结束段阶层化处理。
图71是表示图70所示的选择出现映射汇集处理(步骤S7004)的详细处理步骤的流程图。首先,计算机1100设定为f=0、h=f+1、j=1(步骤S7101)。这里,f是成为对象的阶层编号,h是对象阶层的上位阶层的阶层编号。j是段编号。接着,计算机1100判断作为对象阶层的第f阶层的段sgf(j)~sgf(j+m-1)中是否存在压缩文件的闲置区域(步骤S7102)。m是能够汇集的段数。
在不存在闲置区域的情况下(步骤S7102:否),由于在各个第f阶层的段sgf(j)~sgf(j+m-1)最大限度地存放有压缩文件,因此计算机1100判断在作为上位阶层的第h阶层的段sgh(j)是否汇集完(步骤S7103)。具体而言,例如,计算机1100判断是否存在第h阶层的段sgh(j)。
在未汇集完的情况下(步骤S7103:否),计算机1100设定上位段sgh(j),在上位段sgh(j)内确保选择压缩符号的索引区域(步骤S7104)。然后,设定为a=j(步骤S7105)。这里,a是确定对象段sgh(j)的变量。
然后,计算机1100判断是否是a=j+m(步骤S7106)。在不是a=j+m的情况下(步骤S7106:否),针对第f阶层的段sgf(j)~sgf(j+m-1)的全部未完成汇集处理。因此,计算机1100针对选择压缩符号,提取段sgf(a)的索引信息(步骤S7107)。
然后,计算机1100判断作为提取的段sgf(a)的索引信息的位串是否全部为0,即,是否段sgf(a)内的压缩文件组的哪一个也不存在针对选择压缩符号的字符信息(步骤S7108)。
在全部为0的情况下(步骤S7108:是),计算机1100向上位段sgh(a)写入“0”作为汇集结果(步骤S7109),转移到步骤S7111。
另一方面,在不全部为0的情况下(步骤S7108:否),向上位段sgh(a)写入“1”作为汇集结果(步骤S7110),转移到步骤S7111。在步骤S7111中,对a进行自加1(步骤S7111),返回至步骤S7106。
此外,在步骤S7106中,当成为a=j+m的情况下(步骤S7106:是),针对第f阶层的段sgf(j)~sgf(j+m-1)的全部完成汇集处理。因此,计算机1100在上位段sgh(j)与第f阶层的段sgf(j)~sgf(j+m-1)之间进行基于指针的关联(步骤S7112)。之后,成为j=j+m,将j移动段m个(步骤S7113),返回至步骤S7102。
此外,在步骤S7102中,当存在闲置区域的情况下(步骤S7102:是),由于无法执行第f阶层的段sgf(j)~sgf(j+m-1)的汇集处理,因此设f=f+1、j=1(步骤S7114)。然后,计算机1100判断是否存在段sgf(j)(步骤S7115)。在存在的情况下(步骤S7115:是),返回至步骤S7102。由此,能够阶段地增加阶层进行汇集。另一方面,在不存在的情况下(步骤S7115:否),返回至步骤S7002。
图72是表示图70所示的删除映射汇集处理(步骤S7005)的详细处理步骤的流程图。首先,计算机1100设定为f=0、h=f+1、j=1(步骤S7201)。这里,f是成为对象的阶层编号,h是对象阶层的上位阶层的阶层编号。j是段编号。接着,计算机1100判断作为对象阶层的第f阶层的段sgf(j)~sgf(j+m-1)中是否存在压缩文件的闲置区域(步骤S7202)。m是能够汇集的段数。
在不存在闲置区域的情况下(步骤S7202:否),由于在各个第f阶层的段sgf(j)~sgf(j+m-1)最大限度地存放有压缩文件,因此计算机1100判断在作为上位阶层的第h阶层的段sgh(j)是否汇集完(步骤S7203)。具体而言,例如,计算机1100判断是否存在第h阶层的段sgh(j)。
在未汇集完的情况下(步骤S7203:否),计算机1100在上位段sgh(j)内确保删除映射的索引区域(步骤S7204)。然后,设定成a=j(步骤S7205)。这里,a是确定对象段sgh(j)的变量。
然后,计算机1100判断是否是a=j+m(步骤S7206)。在不是a=j+m的情况下(步骤S7206:否),针对第f阶层的段sgf(j)~sgf(j+m-1)的全部未完成汇集处理。因此,计算机1100针对删除映射,提取段sgf(a)的索引信息(步骤S7207)。
然后,计算机1100判断作为提取的段sgf(a)的索引信息的位串是否全部为0,即,是否删除了段sgf(a)内的压缩文件组(步骤S7208)。
在全部为0的情况下(步骤S7208:是),计算机1100向上位段sgh(a)写入“0”作为汇集结果(步骤S7209),转移到步骤S7211。另一方面,在不全部为0的情况下(步骤S7208:否),计算机1100向上位段sgh(a)写入“1”作为汇集结果(步骤S7210),转移到步骤S7211。在步骤S7211中,对a进行自加1(步骤S7211),返回至步骤S7206。
此外,在步骤S7206中,当成为a=j+m的情况下(步骤S7206:是),针对第f阶层的段sgf(j)~sgf(j+m-1)的全部完成汇集处理。因此,计算机1100在上位段sgh(j)与第f阶层的段sgf(j)~sgf(j+m-1)之间进行基于指针的关联(步骤S7212)。之后,成为j=j+m,将j移动段m个(步骤S7213),返回至步骤S7202。
此外,在步骤S7202中,当存在闲置区域的情况下(步骤S7202:是),由于无法对第f阶层的段sgf(j)~sgf(j+m-1)执行汇集处理,因此设f=f+1、j=1(步骤S7214)。然后,计算机1100判断是否存在段sgf(j)(步骤S7215)。在存在的情况下(步骤S7215:是),返回至步骤S7202。由此,能够阶段地增加阶层进行汇集。另一方面,在不存在的情况下(步骤S7215:否),返回至步骤S7002。
这样,通过执行段阶层化处理,如图4以及图5所示那样实现段的阶层化。因此,能够构建如图7所示那样的存档文件的阶层结构。
<检索处理步骤>
接着,对本实施方式所涉及的检索处理步骤进行说明。具体而言,例如,为针对图63所示的文件解压例的处理步骤。
图73是表示本实施方式所涉及的检索处理步骤的流程图。首先,计算机1100等待检索字符串的输入(步骤S7301:否),在输入有检索字符串的情况下(步骤S7301:是),执行指针确定处理(步骤S7302)、文件筛选处理(步骤S7303)、解压处理(步骤S7304)。指针确定处理(步骤S7302)根据检索字符串确定成为指定出现映射的指针的压缩符号。通过图74以及图75对指针确定处理(步骤S7302)详细地进行说明。
如图8所示,文件筛选处理(步骤S7303)从阶层结构段组筛选存在构成检索字符串的字符信息的对象文件Fi的压缩文件fi。通过图76对文件筛选处理(步骤S7303)详细地进行说明。
解压处理(步骤S7304)是在解压通过文件筛选处理(步骤S7303)筛选的压缩文件fi的过程中,对照成为解压对象的压缩符号串与检索字符串的压缩字符串。通过图77以及图78对解压处理(步骤S7304)详细地进行说明。
图74是表示图73所示的指针确定处理(步骤S7302)的详细处理步骤的流程图(其1)。首先,计算机1100将检索字符串设定成对象字符串(步骤S7401),执行最长一致检索处理(步骤S7402)。最长一致检索处理(步骤S7402)是与图31所示的最长一致检索处理(步骤S2901)相同的处理,故省略说明。
然后,计算机1100在基础词汇的结构体中,对通过最长一致检索处理(步骤S7402)得到的最长一致检索结果进行二分搜索(步骤S7403)。当在基础词汇的结构体中搜索到最长一致检索结果的情况下(步骤S7403:是),从2N分枝无节点哈夫曼树H取得搜索到的基础词汇的压缩符号,并保存于检索缓冲区(步骤S7404)。
然后,计算机1100判断是否存在后续的对象字符串(步骤S7405)。在存在后续的情况下(步骤S7405:是),计算机1100将后续字符串设定成对象字符串(步骤S7406),返回至最长一致检索处理(步骤S7402)。另一方面,在不存在后续的情况下(步骤S7405:否),结束指针确定处理(步骤S7302),转移到文件筛选处理(步骤S7303)。
此外,在步骤S7403中,当在基础词汇的结构体中未搜索到最长一致检索结果的情况下(步骤S7403:否),转移到图75的步骤S7501。具体而言,当最长一致检索结果未被登记在基础词汇的结构体中的情况下,或者,在通过最长一致检索不存在最长一致候补的情况下(步骤S7403:否),转移到图75的步骤S7501。
图75是表示图73所示的指针确定处理(步骤S7302)的详细处理步骤的流程图(其2)。首先,计算机1100将对象字符串的前头字符设定成对象字符(步骤S7501)。接着,计算机1100在特定单一字符的结构体中对对象字符进行二分搜索(步骤S7502)。在搜索到对象字符的情况下(步骤S7503:是),计算机1100从2N分枝无节点哈夫曼树H取得特定单一字符的压缩符号,并保存于检索缓冲区(步骤S7504)。
另一方面,在步骤S7503中,在未搜索到的情况下(步骤S7503:否),计算机1100将对象字符分割成上位8位和下位8位(步骤S7505)。然后,计算机1100从2N分枝无节点哈夫曼树H取得上位分割字符码的压缩符号,并保存于检索缓冲区(步骤S7506)。
此外,计算机1100从2N分枝无节点哈夫曼树H取得下位分割字符码的压缩符号,并保存于检索缓冲区(步骤S7507)。此外,计算机1100针对对象字符、通过步骤S7505分割得到的分割字符码,访问2N分枝无节点哈夫曼树H的叶子,将对照标志设为有效(步骤S7508)。之后,计算机1100执行二元词串(2-gram)字符串确定处理(步骤S7509)。二元词串(2-gram)字符串确定处理(步骤S7509)是与图37所示的二元词串(2-gram)字符串确定处理(步骤S3406)相同的处理,故省略说明。
然后,计算机1100在通过二元词串(2-gram)字符串确定处理(步骤S7509)未确定二元词串(2-gram)字符串的情况下(步骤S7510:否),返回至图74的步骤S7405。另一方面,在确定了二元词串(2-gram)字符串的情况下(步骤S7510:是),计算机1100从2N分枝无节点哈夫曼树H取得二元词串(2-gram)字符串的压缩符号,并保存于检索缓冲区(步骤S7511)。具体而言,例如,计算机1100通过访问2N分枝无节点哈夫曼树H来取得第一元词串(1-gram)的压缩符号以及第二元词串(2-gram)的压缩符号并进行连结,由此从二元词串(2-gram)字符串的压缩符号映射M取得由连结压缩符号指定的出现映射。然后,返回至图74的步骤S7405。
图76是表示图73所示的文件筛选处理(步骤S7303)的详细处理步骤的流程图。首先,计算机1100将阶层编号h设为当前时刻的最上位阶层的阶层编号H(步骤S7601),将段编号j设定成j=1(步骤S7602)。
接着,计算机1100判断是否存在段sgH(j)(步骤S7603)。在存在段sgH(j)的情况下(步骤S7603:是),计算机1100按每个检索缓冲区内的压缩符号,指定出现映射以及删除映射(步骤S7604)。然后,计算机1100从指定的出现映射以及删除映射提取对象段sgH(j)的索引信息(步骤S7605)。
然后,计算机1100对提取的索引信息组进行AND运算(步骤S7606)。之后,计算机1100判断当前的阶层编号h是否是h=0(步骤S7607)。在h≠0的情况下(步骤S7607:否),由于通过AND结果而得到的“1”的位置为下位段的编号,因此将该编号保存于检索缓冲区,转移到步骤S7610(步骤S7608)。
另一方面,在h=0的情况下(步骤S7607:是),由于通过AND结果而得到的“1”的位置为文件编号,因此将该编号的压缩文件保存于检索缓冲区,转移到步骤S7610(步骤S7609)。
在步骤S7610中,对段编号j进行自加1(步骤S7610),返回至步骤S7603。此时,由于利用指针与后续段关联,因此能够通过段编号的自加1来确定后续段。
此外,在步骤S7603中,当不存在对象段sgH(j)的情况下(步骤S7603:否),计算机1100对阶层编号h进行自减1(步骤S7611),并判断是否是h<0(步骤S7612)。在不是h<0的情况下(步骤S7612:否),返回至步骤S7602。另一方面,在是h<0的情况下(步骤S7612:是),由于能够通过步骤S7609来确定解压对象的压缩文件,因此转移到解压处理(步骤S7304)。
图77是表示图73所示的使用了2N分枝无节点哈夫曼树H的解压处理(步骤S7304)的详细处理步骤例的流程图(其1)。在图77中,首先,计算机1100将位地址abi设为abi=0(步骤S7701),计算字节偏移byos(步骤S7702),并计算位偏移bios(步骤S7703)。然后,计算机1100将从字节偏移byos的位置开始的压缩符号串设置于寄存器r1(步骤S7704)。
接着,计算机1100将设置在寄存器r2中的掩码模式向末尾方向移动位偏移bios(步骤S7705),进行与设置在寄存器r1中的压缩符号串的AND运算(步骤S7706)。之后,计算机1100计算寄存器移动数rs(步骤S7707),将AND运算后的寄存器r2向末尾移动寄存器移动数rs(步骤S7708)。
图78是表示图73所示的使用了2N分枝无节点哈夫曼树H的解压处理(步骤S7304)的详细处理步骤例的流程图(其2)。步骤S7708之后,在图78中,计算机1100从移动后的寄存器r2提取末尾N位作为对象位串(步骤S7801)。接着,计算机1100从2N分枝无节点哈夫曼树H的根的结构体确定指向叶子L#的指针(步骤S7802),通过1个路径访问成为指向目的地的叶子L#的结构体(步骤S7803)。之后,计算机1100判断访问目的地的叶子L#的结构体的对照标志是否是有效(步骤S7804)。
在对照标志为有效的情况下(步骤S7804:是),计算机1100针对访问目的地的叶子L#的结构体内的字符信息,将替换字符写在解压缓冲区(步骤S7805),转移到步骤S7807。另一方面,在对照标志为失效的情况下(步骤S7804:否),计算机1100将访问目的地的叶子L#的结构体内的字符信息(解压字符)写在解压缓冲区(步骤S7806),转移到步骤S7807。
在步骤S7807中,计算机1100从访问目的地的叶子L#的结构体提取压缩符号长leg(步骤S7807),更新位地址abi(步骤S7808)。之后,计算机1100判断存储器中是否存在压缩符号串,具体而言,是否存在未实施基于掩码模式的掩码处理的压缩符号串(步骤S7809)。例如,根据是否存在符合字节偏移byos的字节位置来判断。在存在压缩符号串的情况下(步骤S7809:是),返回至图77的步骤S7702。另一方面,在不存在压缩符号串的情况下(步骤S7809:否),结束解压处理(步骤S7304)。
通过这种解压处理(步骤S7304),能够保持压缩状态地进行对照、解压,能够实现解压速度的高速化。
如以上说明的那样,根据本实施方式,由于将检索对象文件组分割成多段进行保存,因此能够通过以段为单位的索引信息进行检索。因此,即使索引信息的大小随检索对象文件的文件数的增加而增大,也能够抑制检索处理时间的增加。
此外,汇集同一阶层的段组生成上位阶层的段来构建阶层结构段组SG。因此,通过从阶层结构段组SG的最上位阶层的段的索引信息依次进行筛选,能够从筛选对象排除不存在检索字符串的段以及存在于该段的下位的压缩文件。这样,由于不进行无用的筛选而完成,因此能够实现检索速度的提高。
此外,在上述的实施方式中,主服务器进行到第1阶层为止的筛选,将筛选的文件编号发送至具有该文件编号的从属服务器。因此,由于在未被发送的从属服务器中不执行筛选处理而完成,所以能够抑制无关的检索,实现检索效率的提高。
另外,在上述的实施方式中,对主服务器MS进行压缩文件fi的解压的例子进行了说明,但是也可以是,主服务器MS通过预先将2N分枝无节点哈夫曼树H发送至各从属服务器,在各从属服务器中执行压缩文件fi的解压处理。该情况下,从主服务器MS收到文件编号i的从属服务器解压该文件编号i的对象文件Fi,并将解压的对象文件Fi返回至主服务器MS。这样,通过使从属服务器执行解压处理,能够抑制向主服务器MS的负荷集中而实现负荷分散。
此外,在上述的实施方式中,对筛选压缩文件fi的例子进行了说明,但筛选对象也可以是非压缩的对象文件Fi。该情况下,不需要上述的压缩处理和解压处理。此外,指向出现映射的指针不是压缩符号,只要是确定字符信息的指针即可。
此外,预先将压缩符号映射Ms的压缩区域的位串从前头位置到末尾位置按照对象文件组Fs的文件编号p的降序排序。由此,即使压缩文件编号:1~n的位串,也不会发生追加文件的文件编号与其位的偏移,从而能够准确地执行对象文件Fi的筛选。
此外,通过使压缩符号映射Ms的压缩区域成为规定数的最大倍数(例如,规定文件数n=256的最大倍数)的位串,从而每当追加对象文件时,无需进行压缩符号映射Ms的压缩。由此,能够降低计算机的运算负荷。此外,在追加后的文件总数达到初始的文件数的最大倍数的情况下,由于与压缩符号映射Ms的文件编号对应的整个位成为压缩区域,因此压缩符号映射Ms通过哈夫曼树h而被压缩。由此,能够实现省存储空间化。这样,由于以规定文件数n(例如256个)为单位进行压缩,因此能够同时实现运算负荷降低和省存储空间化。
另外,在本实施方式说明的信息处理方法能够通过由个人计算机、工作站等计算机1100执行预先准备的程序来实现。本信息处理程序被记录在硬盘、软盘、CD-ROM、MO、DVD等的能够由计算机1100读取的记录介质中,通过由计算机1100从记录介质读出该信息处理程序来执行。此外本信息处理程序也可以经由因特网等网络而发布。
图中符号说明:
6201 指定部
6202 第1解压部
6203 输入部
6204 提取部
6205 第2解压部
6206 确定部
6207 段生成部

Claims (12)

1.一种提取方法,其特征在于,
使计算机执行以下步骤:
在存储单元中存储表示针对多个文件的每一个是否分别包含规定的多个字符信息的第1信息、和针对所述多个规定字符信息的每一个,表示所述多个文件的至少任意一个是否包含所述规定的字符信息的第2信息;
根据追加文件向所述多个文件的追加,合并表示所述追加文件是否分别包含所述规定的多个字符信息的追加有无信息来更新所述第1信息,并且,使用所述追加有无信息,来将所述第2信息更新为表示被追加了所述追加文件后的所述多个文件的至少任意一个是否包含所述规定的多个字符信息的信息;以及
在接收到针对所述规定的多个字符信息的检索请求时,若检测出所述第2信息表示包含所述规定的多个字符信息这一意思,则基于所述第1信息来提取包含所述规定的多个字符信息的文件。
2.根据权利要求1所述的提取方法,其特征在于,
还使所述计算机执行以下步骤:
在接收到所述检索请求时,若检测出所述第2信息不表示包含所述规定的多个字符信息这一意思,则判定为所述多个文件不包含所述规定的多个字符信息。
3.根据权利要求1所述的提取方法,其特征在于,
所述第1信息是基于位的位串,该位表示针对所述多个文件的每一个是否分别包含所述规定的多个字符信息,
所述第2信息是通过运算所述位串所包含的各位而得到的位。
4.根据权利要求2所述的提取方法,其特征在于,
所述第1信息是基于位的位串,该位表示针对所述多个文件的每一个是否分别包含所述规定的多个字符信息,
所述第2信息是通过运算所述位串所包含的各位而得到的位。
5.根据权利要求1~4的任意一项所述的提取方法,其特征在于,
使所述计算机执行以下步骤:
在所述存储单元中还存储表示针对所述多个文件的每一个是否为检索对象的第3信息;在所述多个文件的任意一个被从检索对象排除时,将所述第3信息中的针对被排除的文件表示为检索对象这一意思的信息更新成不表示为检索对象这一意思的信息;以及
在接收到所述检索请求时,若检测出所述第2信息表示包含所述规定的多个字符信息这一意思,则基于所述第1信息以及所述第3信息来提取检索对象且是包含所述规定的多个字符信息的文件。
6.根据权利要求1~4的任意一项所述的提取方法,其特征在于,
使所述计算机执行以下步骤:
在所述存储单元中还存储表示所述多个文件的至少任意一个是否为检索对象的第4信息;
在全部所述多个文件被从检索对象排除时,将所述第4信息更新成不表示所述多个文件的至少任意一个为检索对象这一意思的信息;以及在接收到所述检索请求时,若检测出所述第2信息表示包含所述规定的多个字符信息这一意思,且所述第4信息表示所述多个文件的至少任意一个为检索对象这一意思,则基于所述第1信息来提取包含所述规定的多个字符信息的文件。
7.一种提取方法,其特征在于,
使计算机执行以下步骤:
存储表示针对多个文件的每一个是否分别包含规定的多个字符信息的第1信息、针对所述多个规定字符信息的每一个,表示所述多个文件的至少任意一个是否包含所述规定的字符信息的第2信息、以及表示针对所述多个文件的每一个是否为检索对象的第3信息;
在所述多个文件的任意一个被从检索对象排除时,将所述第3信息中的针对被排除的文件表示为检索对象这一意思的信息更新成不表示为检索对象这一意思的信息;以及
在接收到针对所述规定的多个字符信息的检索请求时,若检测出所述第2信息表示包含所述规定的多个字符信息这一意思,则基于所述第1信息以及所述第3信息来提取检索对象且是包含所述规定的多个字符信息的文件。
8.一种提取方法,其特征在于,
使计算机执行以下步骤:
在存储单元中存储表示针对多个文件的每一个是否分别包含规定的多个字符信息的第1信息、和针对所述多个文件中的一部分文件且针对所述多个规定字符信息的每一个,表示所述一部分文件的至少任意一个是否包含所述规定的字符信息的第2信息;
根据追加文件向所述多个文件的追加,合并表示所述追加文件是否分别包含所述规定的多个字符信息的追加有无信息来更新所述第1信息,并且,使用所述追加有无信息,来将所述第2信息更新为表示被追加了所述追加文件后的所述多个文件的至少任意一个是否包含所述规定的多个字符信息的信息;在接收到针对所述规定的多个字符信息的检索请求时,若检测出所述第2信息表示包含所述规定的多个字符信息这一意思,则基于所述第1信息来从所述多个文件提取包含所述规定的多个字符信息的文件;以及
在接收到针对所述规定的多个字符信息的检索请求时,若检测出所述第2信息不表示包含所述规定的多个字符信息这一意思,则基于所述第1信息来从不包含在所述多个文件中的所述一部分文件的文件提取包含所述规定的多个字符信息的文件。
9.一种提取装置,其特征在于,具备:
存储单元,其存储表示针对多个文件的每一个是否分别包含规定的多个字符信息的第1信息、和针对所述多个规定字符信息的每一个,表示所述多个文件的至少任意一个是否包含所述规定的字符信息的第2信息;
更新单元,其根据追加文件向所述多个文件的追加,合并表示所述追加文件是否分别包含所述规定的多个字符信息的追加有无信息来更新所述第1信息,并且,使用所述追加有无信息,来将所述第2信息更新为表示被追加了所述追加文件后的所述多个文件的至少任意一个是否包含所述规定的多个字符信息的信息;以及
提取单元,在接收到针对所述规定的多个字符信息的检索请求时,若检测到所述第2信息表示包含所述规定的多个字符信息这一意思,则该提取单元基于所述第1信息来提取包含所述规定的多个字符信息的文件。
10.一种提取装置,其特征在于,具备:
存储单元,其存储表示针对多个文件的每一个是否分别包含规定的多个字符信息的第1信息、和针对所述多个文件中的一部分文件且针对所述多个规定字符信息的每一个表示所述一部分文件的至少任意一个是否包含所述规定的字符信息的第2信息;
更新单元,其根据追加文件向所述多个文件的追加,合并表示所述追加文件是否分别包含所述规定的多个字符信息的追加有无信息来更新所述第1信息,并且,使用所述追加有无信息,来将所述第2信息更新为针对被追加了所述追加文件后的所述多个文件中的一部分文件,表示所述一部分文件的至少任意一个是否包含所述规定的多个字符信息的信息;以及
提取单元,在接收到对所述规定的多个字符信息的检索请求时,若检测出所述第2信息表示包含所述规定的多个字符信息这一意思,则该提取单元基于所述第1信息来从所述多个文件提取包含所述规定的多个字符信息的文件,在接收到针对所述规定的多个字符信息的检索请求时,若检测出所述第2信息不表示包含所述规定的多个字符信息这一意思,则该提取单元基于所述第1信息来从不包含在所述多个文件中的所述一部分文件的文件提取包含所述规定的多个字符信息的文件。
11.一种提取装置,其特征在于,具备:
存储单元,其存储表示针对多个文件的每一个是否分别包含规定的多个字符信息的第1信息、针对所述多个规定字符信息的每一个,表示所述多个文件的至少任意一个是否包含所述规定的字符信息的第2信息、以及表示针对所述多个文件的每一个是否为检索对象的第3信息;
更新单元,在所述多个文件的任意一个被从检索对象排除时,该更新单元将所述第3信息中的针对被排除的文件表示为检索对象这一意思的信息更新为不表示为检索对象这一意思的信息;以及
提取单元,在接收到针对所述规定的多个字符信息的检索请求时,若检测出所述第2信息表示包含所述规定的多个字符信息这一意思,则该提取单元基于所述第1信息以及所述第3信息来提取检索对象且是包含所述规定的多个字符信息的文件。
12.一种提取***,包含多个计算机和分配装置,其特征在于,
所述分配装置包含:
保持单元,其保持针对分割多个文件而得到的多个文件组的每一个且针对所述多个规定字符信息的每一个,表示各个文件组所包含的至少一个文件是否包含规定的字符信息的信息;
更新单元,其根据追加文件向所述多个文件组的任意一个的追加,来将保持在所述保持单元的信息更新为表示包含在被追加了所述追加文件后的文件组中的至少一个文件是否包含所述规定的多个字符信息的信息;以及
分配单元,在接收到针对所述规定的多个字符信息的检索请求时,该分配单元根据保持在所述保持单元的信息中表示包含至少一个包含所述规定的多个字符信息的文件这一意思的文件组的数量,来将所述多个文件组分别分配给所述多个计算机,
所述多个计算机分别包含:
存储单元,其存储针对所述多个文件组的每一个且针对所述多个规定字符信息的每一个,表示各个文件组所包含的任意文件是否包含规定的字符信息的索引信息;
更新单元,其根据所述追加文件向所述多个文件组的任意一个的追加,来将存储在所述存储单元中的索引信息更新为表示包含在被追加了所述追加文件后的文件组中的任意一个文件是否包含所述规定的多个字符信息的信息;以及
提取单元,其基于在针对各个存储在所述存储单元中的所述多个文件组的索引信息之中针对被分配给所述分配装置的文件组的所述索引信息来提取包含所述规定的多个字符信息的文件。
CN201180073519.7A 2011-09-14 2011-09-14 提取方法、提取程序、提取装置、以及提取*** Active CN103797480B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2011/071028 WO2013038527A1 (ja) 2011-09-14 2011-09-14 抽出方法、抽出プログラム、抽出装置、および抽出システム

Publications (2)

Publication Number Publication Date
CN103797480A CN103797480A (zh) 2014-05-14
CN103797480B true CN103797480B (zh) 2017-11-28

Family

ID=47882786

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201180073519.7A Active CN103797480B (zh) 2011-09-14 2011-09-14 提取方法、提取程序、提取装置、以及提取***

Country Status (7)

Country Link
US (1) US9916314B2 (zh)
EP (1) EP2757488B1 (zh)
JP (1) JP5741699B2 (zh)
KR (1) KR101560109B1 (zh)
CN (1) CN103797480B (zh)
AU (1) AU2011377004B2 (zh)
WO (1) WO2013038527A1 (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6086021B2 (ja) * 2013-04-25 2017-03-01 富士通株式会社 検索システムおよび検索方法
US10540404B1 (en) * 2014-02-07 2020-01-21 Amazon Technologies, Inc. Forming a document collection in a document management and collaboration system
US9450601B1 (en) * 2015-04-02 2016-09-20 Microsoft Technology Licensing, Llc Continuous rounding of differing bit lengths
JP6662169B2 (ja) 2016-04-18 2020-03-11 富士通株式会社 符号化プログラム、符号化方法、符号化装置、検索プログラム、検索方法および検索装置
JP6720664B2 (ja) 2016-04-18 2020-07-08 富士通株式会社 インデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法
JP6648620B2 (ja) 2016-04-19 2020-02-14 富士通株式会社 符号化プログラム、符号化装置および符号化方法
KR102006245B1 (ko) * 2017-09-15 2019-08-06 주식회사 인사이너리 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템
CN109993025B (zh) * 2017-12-29 2021-07-06 中移(杭州)信息技术有限公司 一种关键帧提取方法及设备
US10541708B1 (en) * 2018-09-24 2020-01-21 Redpine Signals, Inc. Decompression engine for executable microcontroller code
CN109855566B (zh) * 2019-02-28 2021-12-03 易思维(杭州)科技有限公司 一种槽孔特征的提取方法

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0437615B1 (en) 1989-06-14 1998-10-21 Hitachi, Ltd. Hierarchical presearch-type document retrieval method, apparatus therefor, and magnetic disc device for this apparatus
US5469354A (en) * 1989-06-14 1995-11-21 Hitachi, Ltd. Document data processing method and apparatus for document retrieval
JP3263963B2 (ja) * 1991-12-25 2002-03-11 株式会社日立製作所 文書検索方法及び装置
US5748953A (en) * 1989-06-14 1998-05-05 Hitachi, Ltd. Document search method wherein stored documents and search queries comprise segmented text data of spaced, nonconsecutive text elements and words segmented by predetermined symbols
JP2986865B2 (ja) 1989-07-24 1999-12-06 株式会社日立製作所 データ検索方法および装置
US5745745A (en) * 1994-06-29 1998-04-28 Hitachi, Ltd. Text search method and apparatus for structured documents
US5778361A (en) * 1995-09-29 1998-07-07 Microsoft Corporation Method and system for fast indexing and searching of text in compound-word languages
JPH09138809A (ja) * 1995-11-15 1997-05-27 Oki Electric Ind Co Ltd 全文検索方法
CA2340531C (en) * 2001-03-12 2006-10-10 Ibm Canada Limited-Ibm Canada Limitee Document retrieval system and search method using word set and character look-up tables
US7149748B1 (en) * 2003-05-06 2006-12-12 Sap Ag Expanded inverted index
CN1567174A (zh) * 2003-06-09 2005-01-19 吴胜远 对象表示和处理的方法及其装置
US8504565B2 (en) * 2004-09-09 2013-08-06 William M. Pitts Full text search capabilities integrated into distributed file systems— incrementally indexing files
US20100005072A1 (en) 2004-09-09 2010-01-07 Pitts William M Nomadic File Systems
WO2006123429A1 (ja) * 2005-05-20 2006-11-23 Fujitsu Limited 情報検索方法、装置、プログラム、該プログラムを記録した記録媒体
JP2009048352A (ja) * 2007-08-17 2009-03-05 Nippon Telegr & Teleph Corp <Ntt> 情報検索装置、情報検索方法および情報検索プログラム
WO2009063925A1 (ja) * 2007-11-15 2009-05-22 Nec Corporation 文書管理・検索システムおよび文書の管理・検索方法
CN101452465A (zh) * 2007-12-05 2009-06-10 高德软件有限公司 大批量文件数据存放和读取方法
US8266179B2 (en) * 2009-09-30 2012-09-11 Hewlett-Packard Development Company, L.P. Method and system for processing text
JP4893805B2 (ja) 2009-11-06 2012-03-07 富士通株式会社 情報処理プログラム、情報検索プログラム、および情報処理装置
JP5418218B2 (ja) * 2009-12-25 2014-02-19 富士通株式会社 情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置

Also Published As

Publication number Publication date
WO2013038527A1 (ja) 2013-03-21
US9916314B2 (en) 2018-03-13
EP2757488B1 (en) 2019-02-20
KR101560109B1 (ko) 2015-10-13
JP5741699B2 (ja) 2015-07-01
KR20140061450A (ko) 2014-05-21
US20140229484A1 (en) 2014-08-14
EP2757488A1 (en) 2014-07-23
AU2011377004A1 (en) 2014-03-27
EP2757488A4 (en) 2015-04-22
AU2011377004B2 (en) 2015-11-12
JPWO2013038527A1 (ja) 2015-03-23
CN103797480A (zh) 2014-05-14

Similar Documents

Publication Publication Date Title
CN103797480B (zh) 提取方法、提取程序、提取装置、以及提取***
JP4707198B2 (ja) 情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置
US8037035B2 (en) Apparatus for searching and managing compressed files
JP5391583B2 (ja) 検索装置、生成装置、プログラム、検索方法および生成方法
JP4893805B2 (ja) 情報処理プログラム、情報検索プログラム、および情報処理装置
JP2010093414A (ja) 情報処理プログラム、情報処理装置、および情報処理方法
JPWO2008142800A1 (ja) 情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法
JP5605288B2 (ja) 出現マップ生成方法、ファイル抽出方法、出現マップ生成プログラム、ファイル抽出プログラム、出現マップ生成装置、およびファイル抽出装置
JPWO2012150637A1 (ja) 抽出方法、情報処理方法、抽出プログラム、情報処理プログラム、抽出装置、および情報処理装置
US6675171B2 (en) Memory based on a digital trie structure
US20120239664A1 (en) Bit string search apparatus, search method, and program
JP5621906B2 (ja) 検索プログラム、検索装置、および検索方法
JP2016149160A (ja) 情報生成方法、およびインデックス情報
Zhou et al. Double-Indexing Mechanism of Search Engine Based on Campus Net
JP2016149160A5 (zh)
JP5494860B2 (ja) 情報管理プログラム、情報管理装置および情報管理方法
JP6476346B2 (ja) データ分類方法及びデータ分類装置
KR100645711B1 (ko) 다수의 정보 블록으로 구분된 웹 페이지를 이용한 정보검색 서비스 제공 서버, 방법 및 시스템
Allen A file index for document storage and retrieval utilizing descriptor fragments
JPH06195381A (ja) データ検索装置
JP2018060425A (ja) インデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant