编码存储方法、文本存储数据结构以及文本压缩存储和统计输出方法

文档序号:10577308阅读:541来源:国知局
编码存储方法、文本存储数据结构以及文本压缩存储和统计输出方法
【专利摘要】本发明公开了编码存储方法、文本存储数据结构以及文本压缩存储和统计输出方法,核心基于为大写字母和必要的标点符号设定32进制的用户编码。将单词中每三个字符对应的32进制用户编码转换为二进制后存储在一十六位二进制存储单元中。文本存储数据结构,将文本存于一散列树中,该散列树包含:32进制用户编码顺序对应的多个表节点;每个表节点为一级链表的首节点,所述一级链表中存储文本中全部相同首字母的单词或存储相同字符;作为所述一级链表中后续结点的单词节点,该单词节点包括记录单词长度和文本中重复单词数量的字段;每个单词节点为二级链表的首节点;作为所述二级链表中后续节点的存储节点,每个存储节点为存储应用权利要求2所述编码存储方法中所述规则划分的当前单词和重复单词的字符组的二进制存储单元。
【专利说明】
编码存储方法、文本存储数据结构以及文本压缩存储和统计 输出方法
技术领域
[0001] 本发明涉及一种能提供检索速度的存储文本字符的数据结构、以及基于该数据结 构的文本存储方法和文本检索方法。主要涉及专利分类号G06计算;推算;计数G06F电数字 数据处理G06F17/00特别适用于特定功能的数字计算设备或数据处理设备或数据处理方法 G06F17/30信息检索;及其数据库结构。
【背景技术】
[0002] 传统的字符或者文本存储的方法如下:
[0003] 核心:将当前文本的一段字符作为输入串AS='HE IS A DOCTOR.'进行阅读。阅读 过程:
[0004] 遇到大写时,认为是当前句子的开始;遇到空格时,认为是当前的单词结束;遇到 句点(或者"?则一句的结束。
[0005] 拼接单词对应的ASCII存放在IDC= 100开始的地址中,该字符串的机内表示如下 表所示:
[0006] 字符串的机内表示(ASCII形式)
即地址100的前八位存放字母H的ASCII,即(H)ASCII = 01001000;地址100的后八位存放字 母E的ASCI,即(E)ASCII = 01000101;
[0009] 地址101的前八位存放空格的ASCII,即(NULL)ASCII = 00000000,地址101的后八 位存放字母I的ASCI,即即(I )ASCII = 01001001;地址102的前八位存放字母S的ASCII,即 (S)ASCII = 01010011,地址102的后八位存放字母空格)的ASCII码,即(NULL)ASCn = 00000000;
[0010] 地址103的前八位存放字母"A"的ASCII,即(A)ASCII = 01000001,地址103的后八 位存放空格的ASCII,即(NULL)ASCII = 00000000;
[0011 ] 地址104的前八位存放"D"的ASCII,即(D)ASCII = 01000100,地址104的后八位存 放 "0" 的 ASCII,即(O)ASCII = 01001111;
[0012] 地址105的前八位存放字母C的ASCI,即(C)ASCII =01000011;地址105的后八位存 放"T" 的ASCII,即(T)ASCII = 01010100;
[0013] 地址106的前八位存放字母0的ASCI,即(O)ASCII = =01001111;地址106的后八位 存放"R" 的ASCII,即(R)ASCII = 01010010;
[0014] 地址107的前八位存放字母即句点的ASCI,即(.)ASCII = 00101110.
[0015] 可见,上述存放输入串AS='HE IS A DOCTOR·'的存储地址是100-107的连续空间 中,该存储方式,在编译过程成为字符串的机内表示,这种表示方式属于非紧凑的读字符串 过程。
[0016] 为了节省存储空间和程序运行处理字符串过程的快速处理和查找,一般采用压缩 编码技术,将当前的单词进行拼接和处理。
[0017] 组成单词即拼接单词过程
[0018] 为了组成一个有意义的英语单词,我们将上述的一个句子的机内表示进行分解。 其分解即拼接单词过程如下:
[0019] 步骤一:从地址IDC100开始组成单词
[0020] 字母"H"的ASCII =01001000;字母E的ASCII = 01000101遇到空格或逗号时,拼接 单词结束。
[0021] 以此类推,拼接出的所有单词如下:
[0022] 单词一 :HE
[0023] 单词二:IS
[0024] 单词三:A
[0025] 单词四:DOCTOR
[0026] 步骤二:按照分出的单词进行匹配和统计
[0027] 具体的单词匹配方法除了目前常用的方法外,还有KMP方法即字符串匹配方法、 逻辑匹配等方法。这些分词和统计方法简单容易实现,但是在后面的语义处理和句子统计 起来非常麻烦,如:
[0028] (1)统计单词和匹配单词时间太长;
[0029] (2)由于采取的诗非紧凑形式存储,因此拼接单词和匹配单词过程非常复杂,即占 用大量的内存有浪费了大量的统计单词的时间。

【发明内容】

[0030] 本发明针对以上问题的提出,而提出的一种编码存储方法,包括如下步骤:
[0031] 首先,设定32进制的用户编码,即1-32的顺序编码。编码1-26为大写字母A-Z。编码 26-30依次为句终结符和"!",剩余的两位可由用户另行指定其它字符。如下表 所示:
[0034]选用2的倍数的32进制,在计算机存储中更为合理,且计算更为方便。另外,选用32 进制的最大优点是:可以将三个字符压缩到一个十六位二进制单元中(假设当前的计算机 属于十六位二进制的计算机,并且假设下面统计的英语文本仅有26个字母组成的英语单 词),因为一个十六位二进制单元的最大十进制数是65535;而按照上述用户自定义的用户 编码字母的一个十六位二进制单元的最大数是:ZZZ对应的压缩编码数值为(Z)的用户编 码 *32~2+(Z)的用户编码 *32~1+(Z)的用户编码==26*32~2+26*32~ 1+26 = 26*1094+26*32 +26 = 28444+832+26 = 29302<65535〇
[0035]即使是自定义的最大编码也没有超过其最大值65535,因为其字符的最大值对应 的自定义编码值计算为:(!)的用户编码*32~2+(!)的用户编码*32~1 + (!)的用户编码== 30*32'2+30*32'1+30 = 30*1094+30*32+30 = 32820+960+30 = 33810<65535〇
[0036] 由于用户编码中只针对大写字母设定了编码,因此在开始转换或者说存储时,需 要将文本中的小写字母统一成大写字母(通过ASCII码即可完成小写、大写的转换)。
[0037] 以上的步骤顺序均可改变,顺序之间没有固定的先后顺序。
[0038] 然后,针对每一个单词,将单词每三个字母字符按用户编码转换成二进制后存储 在一个十六位二进制的存储单元中。
[0039] 作为优选的实施方式,转换的规则如下:
[0040] 首先,定义一个单词的首字母为最高位字符,单词的末尾字母为最低位字符;
[0041] 然后,对所述单词划分成多个字符组,这里主要分为两种情况。
[0042]对于单词字符数量超过3个的单词,由最高位字符开始,每三个字符划分为一个字 符组,剩余的数量少于3个的字符划分一字符组;而对于字符数量少于3个的单词,直接划分 或者说形成一个字符组。
[0043] 开始转换为二进制时,字符组中的字符按由字符组内末尾字符至首位字符的转换 权值依次为32的0次方、1次方和2次方的规则转换为二进制数。
[0044] -种文本存储数据结构,在此数据结构中,文本划分成以单词为单位的节点,存 于一散列树中,该散列树主要包含:
[0045] 32个表节点,表节点按设定的大写字母顺序和句终结符的顺序相同。每一个表节 点为一个一级链表的首节点。一级链表中存储文本中全部相同的首字母的单词或者说相同 的字符(主要是句终结符或者设定的其它字符)
[0046] 代表文本中具体单词的单词节点,文本中开头字母相同的单词的单词节点为一个 一级链表中的后续节点。每个单词节点为一个二级链表的首节点。
[0047] 通过使用链表节点的存储方法,从根本上解决了上述单词中长度超过3,并且运用 多单元存储的问题。
[0048] 存储具体单词的存储节点,每个存储节点为存储应用权利要求2所述编码存储方 法中所述规则划分的当前单词和重复单词的字符组的二进制存储单元。
[0049] 具体的,作为优选的实施方式,所述的每一个表节点包含:
[0050] 单词序号WN、记录文本中首字母相同单词总数的全文单词统计字段WS和单词首指 针WFIR;其中WS单元作为单词统计的共字符分区使用的字段。
[0051] 所述单词首指针WFIR直接指向文本中首次出现的以其所在表节点表示的首字母 起始的单词所对应的单词节点。
[0052]这样结合引入HASH表存储结构可以快速将一篇英文文章的以"A"到"Z'"打头的单 词的链表找出,即可完成单词的快速查找和快速链接单词。
[0053]作为优选的实施方式,每一个单词节点包括:单词长度统计字段WL、单词指针WP、 相同单词统计字段EMS和下一单词指针NWP。
[0054]考虑到每个单词的长度都是未知的,通过设置单词长度统计字段WL,即可选用更 为合理的不定长度的链表结构进行动态存储。同样的,设置相同单词统计字段EMS可以在遇 到压缩编码值相等,即相同单词的情况下,大幅度的节省单词拼接和存储时间和空间。
[0055] 所述下一单词指针NWP指向表示文本中以当前相同首字母开头、在文本中重复出 现的单词节点。
[0056] 作为优选的实施方式,所述的单词指针WP指向所述的存储节点,存储节点至少包 括一如权利要求1所述的十六位二进制存储单元和下一单词部分指针NWCHP,所述的十六位 二进制单元存储如权利要求1所述的单词对应的如权利要求1所述的用户编码。
[0057] 一种文本压缩存储方法,包括如下步骤:
[0058]首先,针对选定文本中首句,统计该句中起始单词的字符个数,将该单词按所述的 编码存储方法中的规则划分为一个或者多个二进制(每个字母对应32进制用户编码转换成 二级制)的字符组,将每个字符组存入16位二进制存储单元中。
[0059]然后,建立上述文本存储数据结构中的单词节点,通过单词节点引出的单词指针 依次连接存储当前单词字符组的二进制存储单元,形成二级链表。
[0060] 建立如权利要求4所述的文本存储数据结构中的多个表节点,通过指针连接对应 的表节点所述当前单词的单词节点,形成一级链表。
[0061] 将文本中下一单词转换后存储,生成当前单词对应的单词节点,形成二级链表;提 取该单词的首字母,使用对应首字母一级链表的指针指向单词节点,增加一级链表的长度, 在单词统计字段加1;
[0062] 重复上述步骤,完成文本的压缩存储,上述步骤之间并不具备固定的顺序关系,比 如建立表节点等步骤的顺序。
[0063] 更进一步的,为了节省存储空间,在单词文本转换成存储之前,首先检测当前单词 是否与已有的单词节点所记载的单词相同。若相同,所述的单词节点中相同单词统计字段 EMS加 1。
[0064] -种文本统计输出方法,包括有如下步骤:
[0065] 调取所述表节点中各表节点中单词统计字段中的数值,输出数值或者各表节点中 所述数值综合,完成文本中特定字母开头单词和全部单词数量的统计;
[0066] 遍历一级链表中的各单词节点,访问单词节点中相同字段,输出记录的数值,完成 文本中特定重复单词数量的统计;
[0067] 遍历二级链表中的各单词存储节点,依次将该单词节点二级链表中各二级制存储 单元中存储的二进制数转换为32进制用户编码,转换为字母,完成文本中单词的还原输出。
【附图说明】
[0068] 为了更清楚的说明本发明的实施例或现有技术的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图仅仅是 本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可 以根据这些附图获得其他的附图。
[0069]图1为实施例中第一例句的链表形式不意图
[0070] 图2为实施例中第二例句的链表形式示意图
[0071] 图3为实施例中第三例句的链表形式示意图
[0072] 图4为本发明表节点的结构示意图
[0073] 图5为本发明单词节点的结构示意图
[0074] 图6为本发明每个单词的存储节点的结构示意图
[0075] 图7为实施例中第一例句初始状态示意图
[0076] 图8为实施例中第一和第二例句合并后的状态示意图
[0077] 图9为实施例中三个例句合并后的状态示意图
[0078] 图10为本发明读字符与拼单词子程序的算法流程图 图11为本发明例句合并的流程图
【具体实施方式】
[0079] 为使本发明的实施例的目的、技术方案和优点更加清楚,下面结合本发明实施例 中的附图,对本发明实施例中的技术方案进行清楚完整的描述:
[0080] 实施例,假设当前的文本内容有三个句子组成:"HE IS A DOCTOR .SHE IS A D0CT0R,T00.I AM A DIRECTOR."(已完成大小写转换)
[00811 第一个句子"HE IS A DOCTOR"的用户编码对应的数值计算如下:
[0082] (1)可以将一个字符"HE"运用一个32进制的数值来表示:
[0083] 如:字符"HE"的用户编码是:
[0084] (H)的用户编码*32+(E)的用户编码==8*32+5 = 261;
[0085] (2)可以将第二个单词"IS"运用一个32进制的数值来表示:
[0086] 如:字符"IS"的用户编码是:8X32?(I)的用户编码*32+(S)的用户编码= 9*32+19 = 307;
[0087] (3)可以将第三个单词"A"运用一个32进制的数值来表示:
[0088]如:字符"A"的用户编码是:(A)的用户编码=1;
[0089] (4)可以将第四个单词"DOCTOR"运用一个32进制的数值来表示:
[0090] 如:高位字符"D0C"的用户编码是:(D)的用户编码*32~2+(0)的用户编码*32~1 + (C)的用户编码=4*32~2+15*32~1+3 = 4*1024+480+3 = 4096+480+3 = 4579;
[0091] 如:低三位字符" T0R"的用户编码是:(T)的用户编码*32~2+(0)的用户编码*32~1+ (R)的用户编码=20*32~2+15*32~1+18 = 20*1024+480+18 = 20480+480+18 = 20978。
[0092]因此,压缩后的第一个句子对应的四个字符的存储形式如下表所示:
[0094]压缩后第一个句子的链表形式如图1所示。
[0095]文本中的第二个句子是:SHE IS A D0CT0R,T00.。其扫描后第二个句子的用户编 码对应的数值计算如下所示:
[0096]其扫描后生成的用户编码的具体解释:
[0097] (1)将第一个单词"SHE"运用一个32进制的数值来表示:(S)的用户编码*32~2+(H) 的用户编码 *32~1+(E)的用户编码=19*32~2+8*32~ 1+5 = 19*1024+256+5 = 19456+256+5 = 19717
[0098] (2)将第二个单词"IS"运用一个32进制的数值来表示:
[0099] 如:字符"IS"的用户编码是:(I)的用户编码*32+(S)的用户编码= 9*32+19 = 307;
[0100] (3)将第三个单词"A"运用一个32进制的数值来表示:
[0101] 如:字符"A"的用户编码是:(A)的用户编码=1
[0102] (4)可以将第四个单词"DOCTOR"运用一个32进制的数值来表示:
[0103] 高三位字符"D0C"的用户编码是:(D)的用户编码*32~2+(0)的用户编码*32~1 + (C) 的用户编码=4*32~2+15*32~1+3 = 4*1024+480+3 = 4096+480+3 = 4579;
[0104] 低三位字符"TOR"的用户编码是:(T)的用户编码*32~2+(0)的用户编码*32~1 + (R) 的用户编码=20*32~2+15*32~1+18 = 20*1024+480+18 = 20480+480+18 = 20978
[0105] 将第五个单词"too"运用一个32进制的数值来表示:
[0106] 如:字符"too"的用户编码是:(T)的用户编码*32~2+(0)的用户编码*32~1+(0)的 用户编码=20*32~2+15*32~1+15 = 20*1024+15*32+15 = 20480+480+15 = 20975。
[0107] 田此.笛一.个句子# Λ存的存储形忒加下耒所沄,
[0109] 内存中,第二例句的链表形式如图2所示。
[0110] 文本中的第三个句子是:"I AM A DIRECTOR."。其扫描后生成的用户编码及其对 应链表形式如下:
[0111] 其扫描后生成的用户编码的具体解释:
[0112] (1)将第一个单词"Γ运用一个32进制的数值来表示:(I)的用户编码:(I)的用户 编码=9。
[0113] (2)将第二个单词"AM"运用一个32进制的数值来表示:
[0114] 如:字符"AM"的用户编码是:(A)的用户编码*32+(M)的用户编码= 1*32+13 = 45;
[0115] (3)将第三个单词"A"运用一个32进制的数值来表示:
[0116] 如:字符"A"的用户编码是:(A)的用户编码=1
[0117] (4)可以将第四个单词"director"运用一个32进制的数值来表示:
[0118] 如:高三位字符"DIR"的用户编码是:(D)的用户编码*32~2+(1)的用户编码*32~1+ (R)的用户编码=4*32~2+9*32~1+18 = 4*1024+288+18 = 4096+288+18 = 4402;
[0119] 如:中三位字符"ECT"的用户编码是:(E)的用户编码*32~2+(C)的用户编码*32~1+ (T)的用户编码=5*32~2+3*32~1+20 = 5*1024+96+20 = 5120+96+20 = 5236;
[0120] 如:低二字符"0R"的用户编码是:(0)的用户编码*32~1+(R)的用户编码=15*32~ 1+18 = 15*32+18 = 480+18 = 498。
[0121 ]因此,第三个句子在内存的存储形式如下表所示:
[0123]第三个句子的链表形式如图3所示。
[0124]如果需要统计上述单词出现的个数,采用hash树的方法进行统计。首先,建立Hash 树,其Hash树的顺序按照字母的顺序进行建立,具体单词的表结点的结构形式如图4所示: 每个单词序号开始与其他单词链接的结点结构形式如图5所示:每个单词的存储结点对应 的数据结构形式如图6所示。
[0125] 第一个句子的初始状态如图7所示。第一例句和第二例句合并后的链表状态如图8 所示。图9为三个例句合并后的链表状态示意图。
[0126] 合并的过程可以如图10和图11所示。
[0127] 以上所述,仅为本发明较佳的【具体实施方式】,但本发明的保护范围并不局限于此, 任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其 发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
【主权项】
1. 一种编码存储方法,其特征在于具有如下步骤: 一为大写字母A-Z和至少包含和"!"的句终结符设定从1开始至32结束的 32进制用户编码; 一将小写的字母转换为大写字母; 一将单词中每三个字符对应的32进制用户编码转换为二进制后存储在一^h六位二进 制存储单元中。2. 根据权利要求1所述的编码存储方法,其特征还在于所述转换的规则如下: 一定义单词的首字母为最高位字符,单词的末尾字母为最低位字符; 一对于字符数量超过3个的单词,由最高位字符开始,每三个字符划分为一个字符组, 剩余数量少于3个的字符划分一字符组;对于字符数量少于3个的单词,直接划分为一字符 组; 一转换为二进制时,字符组中的字符按由字符组内末尾字符至首位字符的转换权值依 次为32的0次方、1次方和2次方的规则转换为二进制数。3. -种文本存储数据结构,其特征在于文本存于一散列树中,该散列树包含: 与权利要求1所述的编码存储方法中32进制用户编码顺序对应的多个表节点;每个表 节点为一级链表的首节点,所述一级链表中存储文本中全部相同首字母的单词或存储相同 字符; 作为所述一级链表中后续结点的单词节点,该单词节点包括记录单词长度和文本中重 复单词数量的字段;每个单词节点为二级链表的首节点; 作为所述二级链表中后续节点的存储节点,每个存储节点为存储应用权利要求2所述 编码存储方法中所述规则划分的当前单词和重复单词的字符组的二进制存储单元。4. 根据权利要求3所述的文本存储数据结构,其特征还在于所述的每一个表节点包含: 单词序号WN、记录文本中首字母相同单词总数的全文单词统计字段WS和单词首指针WFIR; 所述单词首指针WFIR直接指向文本中首次出现的以其所在表节点表示的首字母起始 的单词所对应的单词节点。5. 根据权利要求3所述的文本存储数据结构,其特征还在于所述的单词节点包括:单词 长度统计字段WL、单词指针WP、相同单词统计字段EMS和下一单词指针NWP。 所述下一单词指针NWP指向表示文本中以当前相同首字母开头、在文本中多次出现的 单词的单词节点。6. 根据权利要求5所述的文本存储数据结构,其特征还在于所述的单词指针WP指向所 述的存储节点,存储节点至少包括一如权利要求1所述的十六位二进制存储单元和下一单 词部分指针NWCHP,所述的十六位二进制单元存储如权利要求1所述的单词对应的如权利要 求1所述的用户编码。7. -种文本压缩存储方法,具有如下步骤: 一统计目标文本中首个语句起始单词的字符个数,将该单词按权利要求2所述的编码 存储方法中的规则划分为字符组,将每个字符组存入16位二进制存储单元; 一建立如权利要求4所述的文本存储数据结构中的单词节点,通过单词节点引出的单 词指针依次连接存储当前单词字符组的二进制存储单元,形成二级链表; 一建立如权利要求4所述的文本存储数据结构中的多个表节点,通过指针连接对应的 表节点所述当前单词的单词节点,形成一级链表; 一将文本中下一单词转换后存储,生成当前单词对应的单词节点,形成二级链表;提取 该单词的首字母,使用对应首字母一级链表的指针指向单词节点,增加一级链表的长度,在 单词统计字段加1; 一重复上述步骤,完成文本的压缩存储。8. 根据权利要求7所述的文本压缩存储方法,其特征在于还具有如下步骤: 一检测当前单词是否与已有的单词节点所记载的单词相同; 一若相同,所述的单词节点中相同单词统计字段EMS加1。9. 一种基于权利要求4文本存储数据结构的文本统计输出方法,其特征在于具有如下 步骤: 一调取所述表节点中各表节点中单词统计字段中的数值,输出数值或者各表节点中所 述数值综合,完成文本中特定字母开头单词和全部单词数量的统计; 一遍历一级链表中的各单词节点,访问单词节点中相同字段,输出记录的数值,完成文 本中特定重复单词数量的统计; 一遍历二级链表中的各单词存储节点,依次将该单词节点二级链表中各二级制存储单 元中存储的二进制数转换为32进制用户编码,转换为字母,完成文本中单词的还原输出。
【文档编号】G06F17/22GK105938469SQ201610086498
【公开日】2016年9月14日
【申请日】2016年2月15日
【发明人】陈燕
【申请人】大连海事大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1