具体实施方式
以下,将结合附图和实施例对本发明进行详细描述。
本发明的技术构思在于以词为单位,而不是以字为单位进行压缩,从而提高压缩率。为了实现以上目的,根据本发明的文本压缩方法包括以下步骤:
步骤S1、从待压缩的文本中筛选满足预定词长和出现频率条件的词;
步骤S2、根据筛选词的出现频率对筛选词分配编码;和
步骤S3、利用分配的编码对所述文本进行压缩。
其中,步骤S3和S4属于现有技术,可通过各种已知的技术来实现,因此,在本说明书中省略其详细描述。以下,将主要针对步骤S1进行说明。
图1是根据本发明的一个实施例的文本压缩方法的流程图。参照图1,根据本实施例的文本压缩方法包括以下步骤:
步骤S11、提取所述待压缩的文本中的不长于最大词长的词作为备选词;
步骤S12、根据备选词的出现频率对备选词进行筛选,以仅保留出现频率大于预定频率的筛选词;
步骤S13、与步骤S2相同;
步骤S14、与步骤S3相同。
以下,将对实现本实施例的具体方法进行说明。在实际实现时,建立一个记录备选词和/或筛选后的词以及这些词的出现频率的字典,通过该字典进行备选词的提取、筛选、编码和文本的压缩。
(1)步骤S11
该步骤的目的在于对整个待压缩文本进行扫描,以从其中提取出不长于预定的最大词长的所有词作为字典的备选词。图2是根据本发明的一个实施例的提取备选词步骤的流程图。参照图2,该步骤包括以下步骤:
步骤S100、设定最大词长kmax;
步骤S101、将当前位置设为文本的开始处;
步骤S102、判断当前位置与文本的末尾位置之间的词长k_end是否小于最大词长kmax,如果k_end<kmax,则在步骤S103中令当前词长j=k_end,否则在步骤S104中令当前词长j=kmax,然后,跳转到步骤S105;
步骤S105、判断从当前位置开始的j个字组成的词是否在字典中,如果是,则执行步骤S106-S107,否则执行步骤S108-S112;
步骤S106、将从当前位置开始的j个字组成的词和该词的所有前缀词的频率加1,并将当前位置往前进j个字;
步骤S107、判断当前位置是否已到达文本末尾,如果是,则结束步骤S11,否则跳转到步骤S102;
步骤S108、将从当前位置开始的j个字组成的词加入到字典中,并将该词的初始频率赋为0;
步骤S109、判断j是否等于1,如果是,则在步骤S111中将当前位置往前进1个字,并跳转到步骤S112,否则在步骤S110中将j减1,并跳转到步骤S105;
步骤S112、判断当前位置是否已到达文本末尾,如果是,则结束步骤S11,否则跳转到步骤S102。
在以上流程中,从文本数据的开头依次判断从当前位置开始的词长为j个字(j<最大词长kmax)的词是否在字典中。如果该词已在字典中,则将该词及其所有前缀词的频率加1,并将将当前位置往前进词长,即,j个字。如果该词不在字典中,则将该词加入到字典中并赋予初始频率0,此时如果j=1,则将当前位置往前进1个字,否则将词长j减1,继续判断从当前位置开始的j个字组成的词是否在字典中,直到扫描完所有文本数据为止。这种提取方法可称为“最大正向匹配法”,通过这种方法,可有效地从中文等非拉丁语种文本中提取备选词和更新词频。
(2)步骤S12
该步骤的目的在于根据备选词的出现频率对备选词进行筛选,以仅保留出现频率相对大的词,从而缩小字典中的词的总数,即,缩小字典的体积。比如,可简单地从字典中删除出现频率小的备选词,仅保留出现频率大于预定频率的词,和/或基于词长较长的词的删留取决于词长较短的词的出现频率的原则来决定备选词的删留。
图3是根据本发明的一个实施例的筛选备选词步骤的流程。参照图3,该步骤包括以下步骤:
步骤S201、将当前词长k设为1;
步骤S202、将词长为k的下一个词赋给当前词,并判断当前词的出现频率是否小于最小出现频率fmin,如果当前词的出现频率小于fmin,则在步骤S214中删除当前词,并跳转到步骤S211,否则执行步骤S203-S204;
步骤S203、判断当前词长k是否等于1,如果当前词长k等于1,则跳转到步骤S211,否则跳转到步骤S204;
步骤S204、对当前词进行切分,以寻找当前词的所有存在于字典中的前缀词;根据当前词及其前缀词的出现频率删除当前词及其前缀词中出现频率相对小的词,并跳转到步骤S211;
步骤S211、判断词长为k的词是否判断完毕,如果判断完毕,则执行步骤S212-S213,否则跳转到步骤S202;
步骤S212、判断当前词长k是否为最大词长kamx,如果当前词长k为最大词长kmax,则结束步骤S12,否则执行步骤S213;
步骤S213、将当前词长k加1,并跳转到步骤S202。
如图4所示,步骤S204中根据当前词及其前缀词的出现频率删除当前词及其前缀词中出现频率相对小的词的步骤进一步包括:
步骤S205、判断以下公式(1)是否成立:
其中,fα为当前词的出现频率,f为当前词的所有前缀词的频率之和,ωmin为指定参数,n为当前词的所有前缀词的个数,如果公式(1)成立,则执行步骤S206,否则执行步骤S207-S210;
步骤S206、将当前词从字典中删除,并跳转到步骤S211;
步骤S207、判断以下公式(2)是否成立:
其中,i为当前词的存在于字典中的前缀词的索引,i=1,...,n,fβ,i为当前词的第i个前缀词的出现频率,ωmax为指定参数,如果公式(2)成立,则执行步骤S208-S210,否则执行步骤S209-S210;
步骤S208、将当前词的第i个前缀词从字典中删除;
步骤S209、判断i是否等于n,如果i等于n,则跳转到步骤S211,否则执行步骤S210;
步骤S210、将i加1,并跳转到步骤S207。
这里,所述最大词长k优选为2或3或4。
在以上流程中,按照词长从短(即,1)到长(即,最大词长kmax)的顺序进行筛选。对于词长为1的当前词,仅判断其出现频率是否小于指定的最小出现频率fmin,如果小于fmin,则将其从字典中删除,否则保留,而对于词长大于1的当前词,除了判断其出现频率是否小于指定的最小出现频率fmin之外,还需对其进行切分来寻找其出现在字典中的所有前缀词,并且基于词长较长的词的删留取决于词长较短的词的出现频率的原则来决定当前词及其前缀词的删留。具体地,如果当前词的所有前缀词的频率之和与指定参数ωmin的乘积除以前缀词的个数大于当前词的出现频率(即,公式(1)成立),则将当前词从字典中删除,该步骤也可看作为将出现频率小于其所有前缀词的加权平均频率的词从字典中删除。如果当前词的所有前缀词的频率之和与指定参数ωmin的乘积除以前缀词的个数不长于当前词的出现频率(即,公式(1)不成立),则对于当前词的每个前缀词,判断当前词的出现频率除以该前缀词的出现频率是否大于指定参数ωmax,如果大于ωmax(即,公式(2)成立),则将该前缀词从字典中删除,该步骤也可看作为将出现频率过小的词长较短的前缀词从字典中删除。通过以上这种筛选方法,可容易获得中文等非拉丁语种文本数据中的高频扩展词。
此外,可替换地,可首先对词长为1的所有备选词判断其出现频率是否小于指定的最小出现频率,并将其出现频率小于指定的最小出现频率的单个字的备选词从字典中删除。然后在保留下来的备选词中,从词长2开始进行按照与图3所示流程类似的流程进行处理,具体地,在图3所示流程中,在步骤S201中将2赋给当前词长k,并删除步骤S203,在执行完步骤S202之后,直接执行步骤S204即可。
另外可替换地,还可首先按照词长从短(即,1)到长(即,最大词长kmax)的顺序将所有出现频率小于指定的最小出现频率的词删除,然后在保留下来的备选词中从从词长2开始进行按照与图3所示流程类似的流程进行处理,具体地,在图3所示流程中,在步骤S201中将2赋给当前词长k,并删除步骤S202和S203。
图5是根据本发明的一个实施例的切分备选词步骤的流程图。参照图5,该步骤包括以下步骤:
步骤S301、将待被切分的词赋给当前词,并设当前词的词长为k’,待查找的前缀词长度k”=k’-1;
步骤S302、判断当前词长k’是否等于1,如果是,则结束步骤S204中的切分步骤,否则跳转到步骤S303;
步骤S303、判断当前词的前p个字组成的词是否在字典中,其中p的值与k”相等,如果是,则执行步骤S304-S305,否则执行步骤S306-S307;
步骤S304、将当前词的前p个字组成的词放入前缀词表中;
步骤S305、将当前词的后k’-p个字组成的词赋给当前词,并设当前词的长度k’=k’-p,待查找的前缀词长度k”=k’-1,然后跳转到步骤S302;
步骤S306、判断p是否等于1,如果是,则跳转到步骤S305,否则在步骤S307中将p减1,并跳转到步骤S303。
在以上流程中,从长到短依次判断当前词的前缀词是否存在于字典中,并将存在于字典中的前缀词放入前缀词表中,以便利用该前缀词表来判断当前词及其前缀词的删留。
(3)步骤S13和步骤S14
在这两个步骤中,可按照现有的字典编码法来实现编码和压缩。关于字典编码法,比如,可以参考huffman编码,即对频率高的词分配短编码,对频率低的词分配长编码,用编码替换词在原文中的位置以实现压缩的目的。
以下,将对本发明的压缩质量有重要影响的三个参数,即,最大词长kmax、指定参数ωmin和ωmax的取值进行说明。
(1)最大词长kmax
一般来讲,最大词长kmax越大,压缩率越高,但是压缩时间也越长。经过测试,发现当kmax取2或3或4时比较合适。
(2)参数ωmin
图6是对两个测试文件,即,“小说”文件和“资源”文件进行压缩测试的实验图,该图反映了当最大词长kmax为2时,排除ωmax的影响后(ωman=1.0),ωmin对压缩率的影响,其中,横轴表示ωmin,纵轴表示压缩率。图5中的曲线图表明,当ωmin在0.05附近时压缩率最优。
(3)参数ωmax
图7也是对两个测试文件,即,“小说”文件和“资源”文件进行压缩测试的实验图,该图反映了当最大词长kmax为2时,排除ωmin的影响后(ωmin=0.0),ωmax对压缩率的影响,其中,横轴表示ωmax,纵轴表示压缩率。图6中的曲线图表明,当ωmax在0.9附近时压缩率变化趋于稳定。
因此,在实际实现时,可将kmax=2、ωmin=0.05、ωmax=0.9作为默认值。
以下,将结合一个具体的实例对本发明方法进行进一步的说明。
以下为一段待处理的中文文本,其大小为2,195,488字节。
在本示例中,令最大词长kmax为3,最小出现频率为3,ωmin为0.1、ωmax为0.9。
首先,扫描文本数据,提取备选词。比如,对于第一句话,按照图2所示流程,可依次提取如下备选词:古丽娜、古丽、古、丽娜的、丽娜、丽、娜的眼、娜的、娜……。以下表1为对以上整篇文本进行扫描获得的部分备选词表,其中删除了出现频率小于3的所有备选词。
表1
备选词 |
频率 |
影 |
12 |
影风 |
11 |
古丽 |
10 |
古 |
10 |
古丽娜 |
10 |
正 |
3 |
正常 |
3 |
接着,对提取的备选词进行筛选,具体举例如下:
(1)“影风”的出现频率为11,“影”的出现频率为12,“风”不在备选词中(由于其出现频率小于3,所以已被删除)。
由于所以保留“影风”。
由于所以将“影”从字典中删除。
(2)“古丽”的出现频率为10,“古”的出现频率为10,“丽”不在备选词中(由于其出现频率小于3,所以已被删除)。
由于所以保留“古丽”。
由于所以将“古”从字典中删除。
(3)“正常”的出现频率为3,“正”的出现频率为3,“常”不在备选词中(由于其出现频率小于3,所以已被删除)。
由于所以保留“正常”。
由于所以将“正”从字典中删除。
(4)“古丽娜”的前缀“古丽”在备选词中,所以按照图3所示切分流程图,将其分为“古丽”和“娜”。
“古丽娜”的出现频率为10,“古丽”的出现频率为10,“娜”不在备选词中(由于其出现频率小于3,所以已被删除)。
由于所以保留“古丽娜”。
由于所以将“古丽”从字典中删除。
表1所示部分备选词经过筛选后的结果如表2所示。
表2
接着,利用对字典中筛选后的词分配编码,并利用这些编码对文本进行字典压缩。经过压缩之后,可得到大小为682,688字节的压缩文本,压缩率约为68.9%。而采用zip压缩方法对以上文本进行压缩,仅能得到大小为946,588字节的压缩文本,压缩率仅为约56.9%。从而,可看出通过本发明方法可提高文本,尤其是对于不能以空格和标点等分隔符进行分词的语种的文本的压缩率。
这里,应该指出,以上实例仅仅用作示例性目的。如上所述,本发明还可应用于日文、韩文等非拉丁语种的文本,并且,除了利用字典以外,还可以以其它方式提取和筛选备选词。
此外,为了实现以上方法,本发明提供一种文本压缩装置。图8中显示了利用字典提取、筛选备选词的文本压缩装置的框图。如图8所示,该装置包括输入单元100、压缩单元300、字典存储单元400、编码单元600和备选词筛选单元,其中,备选词筛选单元用于从通过输入单元输入的待压缩的文本中筛选满足预定词长和出现频率条件的词,包括备选词提取单元200和筛选单元500。
具体地讲,输入单元100用于输入待压缩的文本。备选词提取单元200用于提取通过输入单元100输入的文本中的不长于预定的最大词长的所有词作为备选词,并将这些备选词及其出现频率记录到字典存储单元400中的字典中。压缩单元300用于利用字典存储单元400中存储的字典对通过输入单元100输入的待压缩文本进行压缩。字典存储单元400用于存储字典,在该字典中,写入备选词和/或筛选后的词以及这些词的出现频率。筛选单元500用于根据备选词的出现频率对字典存储单元400中存储的字典中通过备选词提取单元200提取的备选词进行筛选,以仅保留出现频率大于预定频率的词。编码单元600用于对字典存储单元400中存储的字典中经过筛选单元500筛选的词根据它们的出现频率分配编码。
以上已参照附图和实施例对本发明进行了详细描述,但是,应该理解,本发明并不限于以上所公开的具体实施例,任何本领域的技术人员在此基础之上容易想到的修改和变型都应包括在本发明的保护范围内。