一种文本文档乱码检测及修复方法和系统
技术领域
本发明涉及一种乱码检测及修复方法和系统,具体是一种文本文档乱码检测及修复方法和系统,属于文字处理相关技术领域。
背景技术
乱码(比如网页乱码、文档乱码等)是经常困扰终端设备用户阅读的一个问题,影响了用户的阅读体验。造成乱码的原因是由于终端设备系统缺少对某种字符的支持而产生不能正常阅读的混乱字符。
目前,常用的乱码恢复方法有两种,一是在计算机控制面板上手动调整地区及语言选项的设置;二是下载乱码解析器,利用该乱码解析器对乱码进行解析,来解决乱码问题。但是这两种乱码恢复方法都存在如下问题,一是都需要用户手动操作进行恢复,增加了重复性劳动,大大降低了工作效率;二是由于不同的操作系统对应于不同的地区及语言选项,大大限制了乱码恢复的范围,致使有些乱码不能恢复,因此不能满足所有用户的需求。
为了克服上述乱码恢复方法的缺陷,出现了一种通过转换编码格式进行乱码恢复的方法,该方法为通过终端设备的地区及语言选项中的文字编码格式,生成地区与编码格式对应表,当读取文本文档时,先解析所述文本文档的文字编码格式并根据解析得到的编码格式在所述地区与编码格式对应表中进行查询,若查询失败,则说明编码格式不匹配,产生乱码,之后按照所述地区与编码格式对应表中的编码格式对所述文本文档进行编码格式转换,尝试对乱码进行修复。但是,乱码产生的原因不只一种,用户阅读文本文档时,经常出现文本文档编码格式匹配,但部分文字仍然出现乱码的情况。出现这种现象的主 要原因就是文本文档在传输或编辑的过程中受到破坏,造成文档中的一些字节丢失,因此就会出现一些混乱不能正确显示的字符,这在一定程度上破坏了文档的完整性。因此,针对这种乱码出现的情况,如果仅仅通过转换编码格式来进行乱码修复,并不能达到预期的效果。
发明内容
本发明所要解决的技术问题是现有技术中仅仅通过转换编码格式来进行乱码修复,但这种方法对于文本文档受到破坏而产生的乱码无法进行有效修复,从而提供一种能够对文本文档受到破坏而产生的乱码进行有效修复,进而提升用户阅读体验的文本文档乱码检测及修复方法和系统。
为解决上述技术问题,本发明是通过以下技术方案实现的:
本发明所述一种文本文档乱码检测及修复方法,包括如下步骤:
建立编码区间库步骤,所述编码区间库中包括文本文档编码格式下所有字符编码构成的编码区间;
确定字符编码的步骤:根据文本文档的编码格式,获取文本文档中每一个字符的编码;
乱码确定步骤,比较每一个所述编码是否在所述编码区间内,将不在所述编码区间内的编码判断为乱码,第一个乱码和最后一个乱码之间的编码构成乱码区间;
乱码修复步骤,删减所述乱码区间中导致乱码产生的若干字节,对文本文档进行修复。
上述的文本文档乱码检测及修复方法,所述确定字符编码的步骤进一步包括:
确定字节数步骤,根据文本文档的编码格式确定每个字符的编码 对应的字节数;
获取编码步骤,按照与所述字节数数量相等的连续字节构成一个字符的编码的标准,依次获取文本文档中每一个字符的编码。
上述的文本文档乱码检测及修复方法,所述乱码修复步骤进一步包括:
逐字节删减步骤,逐一删减所述乱码区间中导致乱码产生的字节,形成新的乱码区间;
第二比较判断步骤,判断所述新的乱码区间中的编码是否均在所述编码区间内,若是则修复完成,否则返回至所述逐字节删减步骤,直到修复完成。
上述的文本文档乱码检测及修复方法,所述逐字节删减步骤中,删减的字节总数小于字符的编码对应的字节数。
上述的文本文档乱码检测及修复方法,若所述文本文档编码格式下字符的编码对应的字节数为固定值M,其中M为大于或等于2的整数,所述乱码修复步骤进一步包括:
获取所述乱码区间包括的字节总数Z的步骤;
确定删减字节数步骤,确定删减字节数S=MOD(Z/M);
字节删减步骤,删减所述乱码区间中导致乱码产生的S个连续的字节,对所述文本文档进行修复。
上述的文本文档乱码检测及修复方法,还包括如下步骤:
建立字典库的步骤,所述字典库中包含不同语言下的常用词语;
解码步骤,将所述乱码修复步骤得到的文本文档的字符编码进行解码,获得字符;
分词步骤,对解码后的所述文本文档进行分词操作,得到若干乱码区间词语及若干非乱码区间词语;
设定阈值Tth的步骤;
获取比对结果步骤,取出相同个数的所述乱码区间词语和所述非乱码区间词语,与所述字典库中的常用词语进行比对,分别确定所述乱码区间词语和所述非乱码区间词语在所述字典库中比对成功的词语个数,分别获取乱码区间词语比对结果和非乱码区间词语比对结果:比对成功的词语个数/进行比对的词语个数;
获取比对结果差值步骤,获取所述非乱码区间词语比对结果与所述乱码区间词语比对结果的差值T;
第三比较判断步骤,将所述差值T同所述阈值Tth进行比较,若T小于或者等于Tth,则修复结果满足精度要求并显示修复后文本文档;若T大于Tth,则提示用户是否保留显示修复后文本文档。
本发明还提供一种文本文档乱码检测及修复系统,包括:
编码区间库,用于存储文本文档编码格式下所有字符编码构成的编码区间;
字符编码获取模块,用于根据文本文档的编码格式,获取文本文档中每一个字符的编码;
乱码确定模块,用于将字符编码获取模块获取的每一个字符的编码是否在所述编码区间库存储的编码区间内,将不在所述编码区间内的编码判断为乱码,并将第一个乱码和最后一个乱码之间的编码确定为乱码区间;
乱码修复模块,用于删减所述乱码区间中导致乱码产生的若干字节,对文本文档进行修复。
上述的文本文档乱码检测及修复系统,所述字符编码获取模块进一步包括:
字节数获取单元,用于根据文本文档的编码格式确定每个字符的编码对应的字节数;
编码获取单元,按照与所述字节数获取单元确定的所述字节数数量相等的连续字节构成一个字符的编码的标准,依次获取文本文档中每一个字符的编码。
上述的文本文档乱码检测及修复系统,所述乱码修复模块进一步包括:
逐字节删减单元,用于逐一删减所述乱码区间中导致乱码产生的字节,形成新的乱码区间;
第二比较判断单元,用于判断所述新的乱码区间中的编码是否均在所述编码区间内,若是则修复完成并输出,否则将所述新的乱码区间返回所述逐字节删减单元。
上述的文本文档乱码检测及修复系统,所述逐字节删减单元删减的字节总数小于字符的编码对应的字节数。
上述的文本文档乱码检测及修复系统,所述乱码修复模块进一步包括:
字节总数获取单元,用于获取所述乱码区间包括的字节总数Z;
删减字节数确定单元,用于从所述字节总数获取单元获取所述字节总数Z,并据此确定删减字节数S=MOD(Z/M);
字节删减单元,用于从所述删减字节数确定单元获取所述删减字节数S,并删减所述乱码区间中导致乱码产生的S个连续的字节,对所述文本文档进行修复。
上述的文本文档乱码检测及修复系统,还包括:
字典库,用于存储不同语言下的常用词语;
解码模块,用于从所述乱码修复模块获取修复后的所述文本文档,并对所述文本文档的字符编码进行解码,获得字符;
分词模块,用于将经所述解码模块解码后的所述文本文档中进行分词操作,进而获取若干乱码区间词语和若干非乱码区间词语;
阈值设定模块,用于设定阈值Tth;
比对结果获取模块,包括:
取词单元,用于从所述分词模块中取出相同个数的所述乱码区间词语和所述非乱码区间词语;
第一比对结果获取单元,用于将从所述取词单元取出的所述乱码区间词语,与所述字典库中的常用词语进行比对,确定其在所述字典库中比对成功的词语个数,获取乱码区间词语比对结果:比对成功的词语个数/进行比对的词语个数;
第二比对结果获取单元,用于将从所述取词单元获取的所述非乱码区间词语,与所述字典库中的常用词语进行比对,确定其在所述字典库中比对成功的词语个数,获取非乱码区间词语比对结果:比对成功的词语个数/进行比对的词语个数;
比对结果差值获取模块,用于获得将从所述第一比对结果获取单元获取的所述非乱码区间词语比对结果与从所述第二比对结果获取单元获取的所述乱码区间词语比对结果的差值T;
第三比较判断模块,用于将从所述比对结果差值获取模块获取的所述差值T与从所述阈值设定模块获取的所述阈值Tth进行比较,若T小于或者等于Tth,则修复结果满足精度要求并显示修复后文本文档; 若T大于Tth,则提示用户是否保留显示修复后文本文档。
本发明的上述技术方案相比现有技术具有以下优点:
(1)本发明所述的文本文档乱码检测及修复方法和系统,通过建立包括文本文档编码格式下所有字符编码构成的编码区间的编码区间库,并根据文本文档的编码格式确定每个字符的编码对应的字节数,并依此获取文本文档中每一个字符的编码,并比较每一个编码是否在编码区间内,若不在,判定其为乱码,第一个乱码和最后一个乱码之间的编码构成乱码区间,删减所述乱码区间中导致乱码产生的若干字节,修复文本文档。
现有技术只是通过尝试转换编码格式来对文本文档进行修复,这种方式一般适用于文本文档的编码格式不匹配的情况。但对于有些情况,比如文本文档受到破坏,则无法对文本文档进行有效修复。而本发明通过删减乱码区间的字节,使字节删减后的所述乱码区间的编码均落在编码范围内,从而对遭到破坏的文本文档能够进行有效修复。因此本发明相较于现有技术,有了很大的改进,提升了用户体验。
(2)本发明所述的文本文档乱码检测及修复方法和系统,在乱码修复过程中,逐一删减所述乱码区间导致乱码产生的字节,形成新的乱码区间,并判断新的乱码区间的编码是否均在所述编码区间内,若是,则修复完成,否则继续删减字节,并且所述删减的字节总数小于字符的编码对应的字节数。
本发明每删减一个字符,都会判断是否修复完成,还是需要再删减字符对文本文档进行修复,因此本发明对文本文档乱码的修复结果接近于原始的文本文档,误差比较小。另外,乱码出现的主要原因是文本文档受到破坏,导致文本文档中的字符所对应的编码中的部分字节丢失而无法正常显示,因此,乱码区间的起始位置的乱码所对应的字节数肯定小于字符的编码所对应的字节数,本发明通过设置删减的 字节总数小于字符的编码对应的字节数,比较符合实际情况。将遭到破坏的编码中的剩余字节删除,则剩余的文本文档中的字符所对应的编码基本都会落在编码范围内,从而在使文本文档得到很好的修复的同时,也不会误删除未遭到破坏的编码。
(3)本发明所述的文本文档乱码检测及修复方法和系统,在所述文本文档编码格式下字符的编码对应的字节数为固定值M时,通过获取所述乱码区间包括的总字节数Z,进而确定删减的字节数S=MOD(Z/M),删减所述乱码区间导致乱码产生的S个连续的字节,对文本文档进行修复。
在所述字节数为固定值M时,如果文本文档没有遭到破坏,则文本文档的总字节数是能够被M整除的,如果不能被M整除,则肯定文本文档被破坏,出现了字节的丢失,由此可以判断出所述乱码区间中遭到破坏的编码的字节数即为所述乱码区间包括的总字节数Z与M相除后的余数S,因此,本发明通过一次性删除S个连续的字节对文本文档进行修复,能够达到很好的修复效果,修复效率也比较高,提升了用户体验。
(4)本发明所述的文本文档乱码检测及修复方法和系统,还包括判断所述修复完成的文本文档是否成功的过程。首先建立包含不同语言下的常用词语的字典库,并将所述修复完成的文本文档进行解码,然后对解码后的所述文本文档得到的字符进行分词,得到若干乱码区间词语和若干非乱码区间词语,并取出相同个数的乱码区间词语和非乱码区间词语与所述字典库中的常用词语进行比对,获取乱码区间词语比对结果和非乱码区间词语比对结果,并将所述乱码区间词语比对结果和非乱码区间词语比对结果做差,获取比对结果差值T,并将T与阈值Tth进行比较,若T小于或者等于Tth,则证明修复满足精度要求并显示修复后文本文档;若T大于Tth,则提示用户是否保留显示 修复后文本文档。所述阈值Tth可以由用户自行设定,若用户对修复的精度要求比较高,则所述阈值Tth取值就会较小,通过这种方式,即使修复未满足用户设定的精度要求,也给用户以提示,是否还需要显示修复后的文本文档,能够尽可能的满足用户的需求,提升了用户体验。而且即使没有满足用户设定的精度要求,但还是对遭到破坏的文本文档进行了有效修复,提升了用户的阅读体验。
附图说明
为了使本发明的内容更容易被清楚的理解,下面结合附图,对本发明作进一步详细的说明,其中:
图1是实施例1所述文本文档乱码检测及修复方法的流程图;
图2是实施例2所述文本文档乱码检测及修复方法的流程图;
图3是实施例3所述的一种乱码修复步骤的流程图;
图4是实施例3所述字节数为固定值时的乱码修复步骤的流程图;
图5是实施例4所述文本文档乱码检测及修复系统的结构框图;
图6是实施例5所述文本文档乱码检测及修复系统的结构框图;
图7是实施例6所述的一种乱码修复模块的结构框图;
图8是实施例6所述字节数为固定值时的乱码修复模块的结构框图;
图9是实施例3所述文本文档乱码示意图;
图10是实施例3所述文本文档编码区间示意图;
图11是实施例3所述文本文档修复后编码区间示意图;
图12是实施例3所述文本文档修复后效果示意图。
图中附图标记表示为:1-编码区间库,2-字节数获取单元,3-编码获取单元,4-乱码确定模块,5-字符编码获取模块,6-乱码修复模块,7-字典库,8-解码模块,9-分词模块,10-阈值设定模块,11-比对结果获取模块,12-比对结果差值获取模块,13-第三比较判断模块,61-逐字节删减单元,62-第二比较判断单元, 63-字节总数获取单元,64-删减字节数确定单元,65-字节删减单元,111-取词单元,112-第一比对结果获取单元,113-第二比对结果获取单元。
具体实施方式
实施例1
本实施例所述的文本文档乱码检测及修复方法,如图1所示,包括如下步骤:
建立编码区间库步骤,所述编码区间库中包括文本文档编码格式下所有字符编码构成的编码区间。
确定字符编码的步骤:根据文本文档的编码格式,获取文本文档中每一个字符的编码。
乱码确定步骤,比较每一个所述编码是否在所述编码区间内,将不在所述编码区间内的编码判断为乱码,第一个乱码和最后一个乱码之间的编码构成乱码区间。
乱码修复步骤,删减所述乱码区间中导致乱码产生的若干字节,对文本文档进行修复。
乱码出现的主要原因是文本文档受到破坏,导致文本文档中的字符所对应的编码中的部分字节丢失而无法正常显示。当某一字符所对应的编码有字节丢失后,在进行解码时依然按照与每一字符所对应的字节数数量相等的连续字节构成一个字符的编码标准进行解码,依次获取文本文档中每一个字符的编码,因为编码遭到破坏导致字节丢失,其必须从后续的字节中选择相应的字节满足字节数的要求,即在进行解码时,由于首个字符的字节丢失,会导致后续的一串字节均被错误的进行组合导致无法解码成功。因此,一般情况下出现乱码就至少会有一个以上,基本上都是成段出现的。所以本实施例中将第一个乱码 与最后一个乱码之间的编码定义为乱码区间。
因为编码由若干个字节构成,并且每个字符的编码对应的字节数由文本文档的编码格式确定。因此,所述确定字符编码的步骤进一步包括:确定字节数步骤,根据文本文档的编码格式确定每个字符的编码对应的字节数。获取编码步骤,按照与所述字节数数量相等的连续字节构成一个字符的编码的标准,依次获取文本文档中每一个字符的编码。
若字符的编码遭到破坏,则其肯定不在所述编码区间内,因此可以通过判断编码是否在所述编码范围内,来确定编码是否为乱码。而且,若删除掉被破坏的字符所对应的编码,剩余的没有遭到破坏的字符的编码一般均会落在所述编码范围内,会对遭到破坏的文本文档进行很好的修复。并且,所述遭到破坏的编码肯定位于所述乱码区间的起始位置,因此,从所述乱码区间的起始位置删减导致乱码产生的若干字节,可以对文本文档进行有效修复。
关于编码格式的确定,因为每个字符的头两个字节都具备特殊含义,通过获取字符的头两个字节,即可判定文本文档的编码格式,进而确定该编码格式下每个字符应该对应的字节数。作为一种优选,可以从文本文档中字符编码的起始位置,按照与所述字节数数量相等的连续字节构成一个字符的编码的标准,依次获取文本文档中每一个字符的编码。当然,也可以从任意位置选取与所述字节数数量相等的连续字节构成一个字符的编码,之后判断所述编码是否在所述编码区间内,若不在,则将所述选取字节的位置向前或向后移动,直至选取的与所述字节数数量相等的连续字节构成的字符的编码在所述编码区间内,然后以此位置为基准,向前以及向后按照与所述字节数数量相等的连续字节构成一个字符的编码的标准,依次获取文本文档中每一个字符的编码。
现有技术一般只是通过尝试转换编码格式来对出现乱码的文本文档进行修复,这种方式一般适用于文本文档的编码格式不匹配的情况。但对于有些情况,比如文本文档受到破坏,则无法对文本文档进行有效修复。而本实施例通过删减乱码区间的字节,使字节删减后的所述乱码区间的编码均落在编码范围内,从而对遭到破坏的文本文档能够进行有效修复。因此本实施例相较于现有技术,有了很大的改进,提升了用户体验。
实施例2
在实施例1的基础上,本实施例所述的文本文档乱码检测及修复方法,如图2所示,还包括如下步骤:
建立字典库的步骤,所述字典库中包含不同语言下的常用词语。
解码步骤,将所述乱码修复步骤得到的文本文档的字符编码进行解码,获得字符。
分词步骤,对解码后的所述文本文档进行分词操作,得到若干乱码区间词语及若干非乱码区间词语。
设定阈值Tth的步骤。
获取比对结果步骤,取出相同个数的所述乱码区间词语和所述非乱码区间词语,与所述字典库中的常用词语进行比对,分别确定所述乱码区间词语和所述非乱码区间词语在所述字典库中比对成功的词语个数,分别获取乱码区间词语比对结果和非乱码区间词语比对结果:比对成功的词语个数/进行比对的词语个数。
获取比对结果差值步骤,获取所述非乱码区间词语比对结果与所述乱码区间词语比对结果的差值T。
第三比较判断步骤,将所述差值T同所述阈值Tth进行比较,若T小于或者等于Tth,则修复结果满足精度要求并显示修复后文本文档; 若T大于Tth,则提示用户是否保留显示修复后文本文档。
所述阈值Tth可以事先由厂家设定好,也可以由用户自行设定,比如用户对修复的精度要求比较高,则所述阈值Tth取值就会较小,通过这种方式,能够尽可能的满足用户的需求,提升用户体验。
所述字典库可以根据不同的终端设备选择是否集成在终端设备上还是通过网络实现与终端设备的信号传输。
作为一种可选的实施方式,可以取得各个不同领域较有代表性的文档,来用两两分词的方式对其进行分词,比如“获取一些文档”,可以切分为:获取/取一/一些/些文/文档,之后统计词频,最后选择词频出现率高的词来建立所述字典库。解码后的所述文本文档中乱码区间所对应的字符以及解码后的所述文本文档中非乱码区间所对应的字符也可以采用两两分词的方式进行分词,之后与所述字典库中的常用词语进行比对,确定比对成功的词语个数。
本实施例通过对修复后的文本文档的精度进行判断,判断是否修复成功,提升了用户的体验。即使修复未满足用户设定的精度要求,也给用户以提示,是否还需要保留显示修复后文本文档,能够尽可能的满足用户的需求,提升了用户体验。而且即使没有满足用户设定的精度要求,但还是对遭到破坏的文本文档进行了有效修复,提升了用户的阅读体验。
实施例3
在实施例1或实施例2的基础上,本实施例所述的文本文档乱码检测及修复方法,如图3所示,所述乱码修复步骤进一步包括:
逐字节删减步骤,逐一删减所述乱码区间中导致乱码产生的字节,形成新的乱码区间。
第二比较判断步骤,判断所述新的乱码区间中的编码是否均在所 述编码区间内,若是则修复完成,否则返回至所述逐字节删减步骤,直到修复完成。
所述逐字节删减步骤中,删减的字节总数小于字符的编码对应的字节数。
因为所述遭到破坏的编码肯定位于所述乱码区间的起始位置,因此,从所述乱码区间的起始位置,删减一个字节,即可删除导致乱码产生的一个字节,形成新的乱码区间,并判断所述新的乱码区间中的编码是否均在所述编码区间内。通过此种方式,即可从所述乱码区间的起始位置,删除所有导致乱码产生的字节,对文本文档进行有效修复。
本实施例中,每删减一个字符,都会判断是否修复完成,还是需要再删减字符对文本文档进行修复,因此本实施例对文本文档乱码的修复结果接近于原始的文本文档,误差比较小。另外,乱码出现的主要原因是文本文档受到破坏,导致文本文档中的字符所对应的编码中的部分字节丢失而无法正常显示,因此,乱码区间的起始位置的乱码所对应的字节数肯定小于字符的编码所对应的字节数,本实施例通过设置删减的字节总数小于字符的编码对应的字节数,比较符合实际情况。将遭到破坏的编码中的剩余字节删除,则剩余的文本文档中的字符所对应的编码基本都会落在编码范围内,从而在使文本文档得到很好的修复的同时,也不会误删除未遭到破坏的编码。
上述实施方式即适用于文本文档编码格式下字符的编码对应的字节数为固定值的文本文档的修复,也适用于文本文档编码格式下字符的编码对应的字节数不固定的文本文档的修复,适用范围非常广。
作为另一种可选的实施方式,若所述文本文档编码格式下字符的编码对应的字节数为固定值M,其中M为大于或等于2的整数,如图4所示,则所述乱码修复步骤进一步包括:
获取所述乱码区间包括的字节总数Z的步骤。
确定删减字节数步骤,确定删减字节数S=MOD(Z/M)。
字节删减步骤,删减所述乱码区间中导致乱码产生的S个连续的字节,对所述文本文档进行修复。
在所述字节数为固定值M时,如果文本文档没有遭到破坏,则文本文档的总字节数是能够被M整除的,如果不能被M整除,则肯定文本文档被破坏,出现了字节的丢失,由此可以判断出所述乱码区间中遭到破坏的编码的字节数即为所述乱码区间包括的总字节数Z与M相除后的余数S,且所述遭到破坏的编码肯定位于所述乱码区间的起始位置,因此,通过从所述乱码区间的起始位置一次性删除S个连续的字节对文本文档进行修复,能够达到很好的修复效果,修复效率也比较高,提升了用户体验。
本实施例还提供了一个对文本文档进行乱码检测及修复的具体案例,具体方案如下:
此案例的环境为移动设备应用的文档阅读,且所述字典库已集成在所述移动设备上,并且之前用户已设定阈值Tth=20%。
首先定位目标文档是否有乱码,判断方法如下:
通过编码检测发现此文档为UTF-16编码,进而确定此编码格式下每个字符的编码对应的字节数为2。从所述字符编码的起始位置起,按照两个连续字节构成一个字符的编码的标准,依次获取所述文本文 档中每一个字符的编码。之后判断每一所述编码是否在UTF-16编码格式下的编码区间内,结果发现部分字符的编码并没有在正确的编码区间,出现乱码。乱码参见图9。
通过编码的检测发现不在正常的编码区间的效果,参见图10(不在编码区间的编码见框内)。
确定乱码“52A3”一直到乱码“8B0C”之间的乱码构成乱码区间。
从所述乱码区间的起始位置,即“52A3”尝试删减一个字节,即删减52,形成新的乱码区间,如下图所述,为“A390”一直到“0CFF”,并判断所述新的乱码区间中的编码是否均在所述编码区间内。检测后发现所述新的乱码区间中的编码都处于正确的编码区间,修复结果(方框中的编码为修复后均落在编码区间内的编码)参见图11。
将所述修复后的文本文档的字符编码进行解码,获得字符。并对解码后的字符进行分词操作,获得若干乱码区间词语和非乱码区间词语。并取出相同个数的所述乱码区间词语和非乱码区间词语,比如都取出300个,与所述字典库中的常用词语进行比对。测试结果发现160个乱码区间词语在所述字典库中比对成功,则乱码区间词语比对结果即为160/300=53%。测试结果发现有170个非乱码区间词语在所述字典库中比对成功,则非乱码区间词语比对结果即为170/300=57%,将所述非乱码区间词语比对结果与所述乱码区间词语比对结果做差,获取比对结果差值T=4%,,将T与Tth进行比较,4%小于20%,表明修复成功,修复结果参见图12。
实施例4
本实施例所述的一种文本文档乱码检测及修复系统,如图5所示,包括:
编码区间库1,用于存储文本文档编码格式下所有字符编码构成的编码区间。
字符编码获取模块5,用于根据文本文档的编码格式,获取文本文档中每一个字符的编码。
乱码确定模块4,用于将字符编码获取模块5获取的每一个字符的编码是否在所述编码区间库1存储的编码区间内,将不在所述编码区间内的编码判断为乱码,并将第一个乱码和最后一个乱码之间的编码确定为乱码区间。
乱码修复模块6,删减所述乱码区间中导致乱码产生的若干字节,对文本文档进行修复。
所述字符编码获取模块5进一步包括:
字节数获取单元2,用于根据文本文档的编码格式确定每个字符的编码对应的字节数;
编码获取单元3,按照与所述字节数获取单元2确定的所述字节数数量相等的连续字节构成一个字符的编码的标准,依次获取文本文档中每一个字符的编码。
现有技术一般只是通过尝试转换编码格式来对出现乱码的文本文档进行修复,这种方式一般适用于文本文档的编码格式不匹配的情况。但对于有些情况,比如文本文档受到破坏,则无法对文本文档进行有效修复。而本实施例通过第一比较判断模块4,判断所述编码是否在所述编码区间库存储的编码区间内,进而判断出遭到破坏的编码,将其判定为乱码,并通过乱码区间确定模块5确定连续的所述乱码构成的区间为乱码区间,之后乱码修复模块6从所述乱码区间的起始位置删减导致乱码产生的若干字节,对文本文档进行修复。使字节删减后的所述乱码区间的编码均落在编码范围内,从而对遭到破坏的文本文档能够进行有效修复。因此本实施例相较于现有技术,有了很大的改进,提升了用户体验。
实施例5
在实施例4的基础上,本实施例所述的文本文档乱码检测及修复系统,如图6所示,还包括:
字典库7,用于存储不同语言下的常用词语。
解码模块8,用于从所述乱码修复模块6获取修复后的所述文本文档,并对所述文本文档的字符编码进行解码,获得字符。
分词模块9,用于将经所述解码模块8解码后的所述文本文档中进行分词操作,进而获取若干乱码区间词语和若干非乱码区间词语。
阈值设定模块10,用于设定阈值Tth。
比对结果获取模块11,包括:
取词单元111用于从所述分词模块9中取出相同个数的所述乱码区间词语和所述非乱码区间词语;
第一比对结果获取单元112,用于将从所述取词单元111获取的所述乱码区间词语,与所述字典库7中的常用词语进行比对,确定其在所述字典库7中比对成功的词语个数,获取乱码区间词语比对结果:比对成功的词语个数/进行比对的词语个数;
第二比对结果获取单元113,用于将从所述取词单元111获取的所述非乱码区间词语,与所述字典库7中的常用词语进行比对,确定其在所述字典库7中比对成功的词语个数,获取非乱码区间词语比对结果:比对成功的词语个数/进行比对的词语个数。
比对结果差值获取模块12,用于将从所述第一比对结果获取单元112获取的所述非乱码区间词语比对结果与从所述第二比对结果获取单元113获取的所述乱码区间词语比对结果做差,获取比对结果差值T。
第三比较判断模块13,用于将从所述比对结果差值获取模块12获取的所述比对结果差值T与从所述阈值设定模块10获取的所述阈值Tth进行比较,若T小于或者等于Tth,则证明修复满足精度要求并显示修复后文本文档;若T大于Tth,则提示用户是否保留显示修复后文本文档。
所述阈值设定模块10中的阈值Tth可以事先由厂家设定好,也可以提供设置界面供用户自行设定,比如用户对修复的精度要求比较高,则所述阈值Tth取值就会较小,通过这种方式,能够尽可能的满足用户的需求,提升用户体验。
所述字典库7可以根据不同的终端设备选择是否集成在终端设 备上还是通过网络实现与终端设备的信号传输。
作为一种可选的实施方式,可以取得各个不同领域较有代表性的文档,来用两两分词的方式对其进行分词,比如“获取一些文档”,可以切分为:获取/取一/一些/些文/文档,之后统计词频,最后选择词频出现率高的词来建立所述字典库7。所述分词模块9也可采用两两分词的方式对解码后的所述文本文档中乱码区间所对应的字符以及解码后的所述文本文档中非乱码区间所对应的字符进行分词,之后与所述字典库中的常用词语进行比对,确定比对成功的词语个数。
本实施例通过比对结果获取模块11获取乱码区间词语比对结果和非乱码区间词语比对结果,并通过比对结果差值获取模块12获取比对结果差值T,之后通过第三比较判断模块13对T和Tth进行比较,看是否满足了用户对修复精度的要求,提升了用户的体验。即使修复未满足用户设定的精度要求,也给用户以提示,是否还需要保留显示修复后文本文档,能够尽可能的满足用户的需求,提升了用户体验。而且即使没有满足用户设定的精度要求,但还是对遭到破坏的文本文档进行了有效修复,提升了用户的阅读体验。
实施例6
在实施例4或实施例5的基础上,本实施例所述的文本文档乱码检测及修复系统,如图7所示,所述乱码修复模块6包括:
逐字节删减单元61,用于逐一删减所述乱码区间中导致乱码产生的字节,形成新的乱码区间。
第二比较判断单元62,用于判断所述新的乱码区间中的编码是否均在所述编码区间内,若是则修复完成,否则将所述新的乱码区间返回所述逐字节删减单元61进行相应处理直至修复完成。
所述逐字节删减单元61删减的字节总数小于字符的编码对应的 字节数。
综上所述,本实施例中,逐字节删减单元61每删减一个字符,第二比较判断单元都会判断是否修复完成,还是需要再删减字符对文本文档进行修复,因此本实施例对文本文档乱码的修复结果接近于原始的文本文档,误差比较小。另外,乱码出现的主要原因是文本文档受到破坏,导致文本文档中的字符所对应的编码中的部分字节丢失而无法正常显示,因此,乱码区间的起始位置的乱码所对应的字节数肯定小于字符的编码所对应的字节数,本实施例中逐字节删减单元61删减的字节总数小于字符的编码对应的字节数,比较符合实际情况。将遭到破坏的编码中的剩余字节删除,则剩余的文本文档中的字符所对应的编码基本都会落在编码范围内,从而在使文本文档得到很好的修复的同时,也不会误删除未遭到破坏的编码。
上述实施方式即适用于文本文档编码格式下字符的编码对应的字节数为固定值的文本文档的修复,也适用于文本文档编码格式下字符的编码对应的字节数不固定的文本文档的修复,适用范围非常广。
作为另一种可选的实施方式,如图8所示,所述乱码修复模块6包括:
字节总数获取单元63,用于获取所述乱码区间包括的字节总数Z。
删减字节数确定单元64,用于从所述字节总数获取单元63获取所述字节总数Z,并据此确定删减字节数S=MOD(Z/M)。
字节删减单元65,用于从所述删减字节数确定单元64获取所述删减字节数S,并删减所述乱码区间中导致乱码产生的S个连续的字节,对所述文本文档进行修复。
此种处理方式仅适用于所述文本文档编码格式下字符的编码对应的字节数为固定值M,其中M为大于或等于2的整数,在所述字节 数为固定值M时,如果文本文档没有遭到破坏,则文本文档的总字节数是能够被M整除的,如果不能被M整除,则肯定文本文档被破坏,出现了字节的丢失,由此可以判断出所述乱码区间中遭到破坏的编码的字节数即为所述乱码区间包括的总字节数Z与M相除后的余数S,因此,本实施例通过字节总数获取单元63获取所述总字节数Z,之后通过删减字节数确定单元64确定删减字节数S,并通过字节删减单元65一次性删除S个连续的字节对文本文档进行修复,能够达到很好的修复效果,修复效率也比较高,提升了用户体验。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框 中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。