一種文本文檔亂碼檢測及修復方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及一種文本文檔亂碼檢測及修復方法和系統(tǒng),通過建立包括文本文檔編碼格式下所有字符編碼構(gòu)成的編碼區(qū)間的編碼區(qū)間庫,并根據(jù)文本文檔的編碼格式確定每個字符的編碼對應(yīng)的字節(jié)數(shù),并依此獲取文本文檔中每一個字符的編碼,并比較每一個編碼是否在編碼區(qū)間內(nèi),若不在,判定其為亂碼,確定第一個亂碼和最后一個亂碼之間的編碼構(gòu)成亂碼區(qū)間,刪減所述亂碼區(qū)間導致亂碼產(chǎn)生的若干字節(jié),修復文本文檔。本發(fā)明通過刪減亂碼區(qū)間的字節(jié),使字節(jié)刪減后的所述亂碼區(qū)間的編碼均落在編碼范圍內(nèi),從而對遭到破壞的文本文檔進行有效修復。相較于只是通過轉(zhuǎn)換編碼格式來對文本文檔進行修復,而無法有效修復遭到破壞的文本文檔的現(xiàn)狀,有了很大的改進。
【專利說明】一種文本文檔亂碼檢測及修復方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種亂碼檢測及修復方法和系統(tǒng),具體是一種文本文檔亂碼檢測及修復方法和系統(tǒng),屬于文字處理相關(guān)【技術(shù)領(lǐng)域】。
【背景技術(shù)】
[0002]亂碼(比如網(wǎng)頁亂碼、文檔亂碼等)是經(jīng)常困擾終端設(shè)備用戶閱讀的一個問題,影響了用戶的閱讀體驗。造成亂碼的原因是由于終端設(shè)備系統(tǒng)缺少對某種字符的支持而產(chǎn)生不能正常閱讀的混亂字符。
[0003]目前,常用的亂碼恢復方法有兩種,一是在計算機控制面板上手動調(diào)整地區(qū)及語言選項的設(shè)置;二是下載亂碼解析器,利用該亂碼解析器對亂碼進行解析,來解決亂碼問題。但是這兩種亂碼恢復方法都存在如下問題,一是都需要用戶手動操作進行恢復,增加了重復性勞動,大大降低了工作效率;二是由于不同的操作系統(tǒng)對應(yīng)于不同的地區(qū)及語言選項,大大限制了亂碼恢復的范圍,致使有些亂碼不能恢復,因此不能滿足所有用戶的需求。
[0004]為了克服上述亂碼恢復方法的缺陷,出現(xiàn)了一種通過轉(zhuǎn)換編碼格式進行亂碼恢復的方法,該方法為通過終端設(shè)備的地區(qū)及語言選項中的文字編碼格式,生成地區(qū)與編碼格式對應(yīng)表,當讀取文本文檔時,先解析所述文本文檔的文字編碼格式并根據(jù)解析得到的編碼格式在所述地區(qū)與編碼格式對應(yīng)表中進行查詢,若查詢失敗,則說明編碼格式不匹配,產(chǎn)生亂碼,之后按照所述地區(qū)與編碼格式對應(yīng)表中的編碼格式對所述文本文檔進行編碼格式轉(zhuǎn)換,嘗試對亂碼進行修復。但是,亂碼產(chǎn)生的原因不只一種,用戶閱讀文本文檔時,經(jīng)常出現(xiàn)文本文檔編碼格式匹配,但部分文字仍然出現(xiàn)亂碼的情況。出現(xiàn)這種現(xiàn)象的主要原因就是文本文檔在傳輸或編輯的過程中受到破壞,造成文檔中的一些字節(jié)丟失,因此就會出現(xiàn)一些混亂不能正確顯示的字符,這在一定程度上破壞了文檔的完整性。因此,針對這種亂碼出現(xiàn)的情況,如果僅僅通過轉(zhuǎn)換編碼格式來進行亂碼修復,并不能達到預(yù)期的效果。
【發(fā)明內(nèi)容】
[0005]本發(fā)明所要解決的技術(shù)問題是現(xiàn)有技術(shù)中僅僅通過轉(zhuǎn)換編碼格式來進行亂碼修復,但這種方法對于文本文檔受到破壞而產(chǎn)生的亂碼無法進行有效修復,從而提供一種能夠?qū)ξ谋疚臋n受到破壞而產(chǎn)生的亂碼進行有效修復,進而提升用戶閱讀體驗的文本文檔亂碼檢測及修復方法和系統(tǒng)。
[0006]為解決上述技術(shù)問題,本發(fā)明是通過以下技術(shù)方案實現(xiàn)的:
[0007]本發(fā)明所述一種文本文檔亂碼檢測及修復方法,包括如下步驟:
[0008]建立編碼區(qū)間庫步驟,所述編碼區(qū)間庫中包括文本文檔編碼格式下所有字符編碼構(gòu)成的編碼區(qū)間;
[0009]確定字符編碼的步驟:根據(jù)文本文檔的編碼格式,獲取文本文檔中每一個字符的編碼;
[0010]亂碼確定步驟,比較每一個所述編碼是否在所述編碼區(qū)間內(nèi),將不在所述編碼區(qū)間內(nèi)的編碼判斷為亂碼,第一個亂碼和最后一個亂碼之間的編碼構(gòu)成亂碼區(qū)間;
[0011]亂碼修復步驟,刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的若干字節(jié),對文本文檔進行修復。
[0012]上述的文本文檔亂碼檢測及修復方法,所述確定字符編碼的步驟進一步包括:
[0013]確定字節(jié)數(shù)步驟,根據(jù)文本文檔的編碼格式確定每個字符的編碼對應(yīng)的字節(jié)數(shù);
[0014]獲取編碼步驟,按照與所述字節(jié)數(shù)數(shù)量相等的連續(xù)字節(jié)構(gòu)成一個字符的編碼的標準,依次獲取文本文檔中每一個字符的編碼。
[0015]上述的文本文檔亂碼檢測及修復方法,所述亂碼修復步驟進一步包括:
[0016]逐字節(jié)刪減步驟,逐一刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的字節(jié),形成新的亂碼區(qū)間;
[0017]第二比較判斷步驟,判斷所述新的亂碼區(qū)間中的編碼是否均在所述編碼區(qū)間內(nèi),若是則修復完成,否則返回至所述逐字節(jié)刪減步驟,直到修復完成。
[0018]上述的文本文檔亂碼檢測及修復方法,所述逐字節(jié)刪減步驟中,刪減的字節(jié)總數(shù)小于字符的編碼對應(yīng)的字節(jié)數(shù)。
[0019]上述的文本文檔亂碼檢測及修復方法,若所述文本文檔編碼格式下字符的編碼對應(yīng)的字節(jié)數(shù)為固定值M,其中Μ為大于或等于2的整數(shù),所述亂碼修復步驟進一步包括:
[0020]獲取所述亂碼區(qū)間包括的字節(jié)總數(shù)Ζ的步驟;
[0021]確定刪減字節(jié)數(shù)步驟,確定刪減字節(jié)數(shù)S=M0D (Z/M);
[0022]字節(jié)刪減步驟,刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的S個連續(xù)的字節(jié),對所述文本文檔進行修復。
[0023]上述的文本文檔亂碼檢測及修復方法,還包括如下步驟:
[0024]建立字典庫的步驟,所述字典庫中包含不同語言下的常用詞語;
[0025]解碼步驟,將所述亂碼修復步驟得到的文本文檔的字符編碼進行解碼,獲得字符;
[0026]分詞步驟,對解碼后的所述文本文檔進行分詞操作,得到若干亂碼區(qū)間詞語及若干非亂碼區(qū)間詞語;
[0027]設(shè)定閾值Tth的步驟;
[0028]獲取比對結(jié)果步驟,取出相同個數(shù)的所述亂碼區(qū)間詞語和所述非亂碼區(qū)間詞語,與所述字典庫中的常用詞語進行比對,分別確定所述亂碼區(qū)間詞語和所述非亂碼區(qū)間詞語在所述字典庫中比對成功的詞語個數(shù),分別獲取亂碼區(qū)間詞語比對結(jié)果和非亂碼區(qū)間詞語比對結(jié)果:比對成功的詞語個數(shù)/進行比對的詞語個數(shù);
[0029]獲取比對結(jié)果差值步驟,獲取所述非亂碼區(qū)間詞語比對結(jié)果與所述亂碼區(qū)間詞語比對結(jié)果的差值T;
[0030]第三比較判斷步驟,將所述差值T同所述閾值Tth進行比較,若T小于或者等于Tth,則修復結(jié)果滿足精度要求并顯示修復后文本文檔;若T大于Tth,則提示用戶是否保留顯示修復后文本文檔。
[0031]本發(fā)明還提供一種文本文檔亂碼檢測及修復系統(tǒng),包括:
[0032]編碼區(qū)間庫,用于存儲文本文檔編碼格式下所有字符編碼構(gòu)成的編碼區(qū)間;
[0033]字符編碼獲取模塊,用于根據(jù)文本文檔的編碼格式,獲取文本文檔中每一個字符的編碼;
[0034]亂碼確定模塊,用于將字符編碼獲取模塊獲取的每一個字符的編碼是否在所述編碼區(qū)間庫存儲的編碼區(qū)間內(nèi),將不在所述編碼區(qū)間內(nèi)的編碼判斷為亂碼,并將第一個亂碼和最后一個亂碼之間的編碼確定為亂碼區(qū)間;
[0035]亂碼修復模塊,用于刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的若干字節(jié),對文本文檔進行修復。
[0036]上述的文本文檔亂碼檢測及修復系統(tǒng),所述字符編碼獲取模塊進一步包括:
[0037]字節(jié)數(shù)獲取單元,用于根據(jù)文本文檔的編碼格式確定每個字符的編碼對應(yīng)的字節(jié)數(shù);
[0038]編碼獲取單元,按照與所述字節(jié)數(shù)獲取單元確定的所述字節(jié)數(shù)數(shù)量相等的連續(xù)字節(jié)構(gòu)成一個字符的編碼的標準,依次獲取文本文檔中每一個字符的編碼。
[0039]上述的文本文檔亂碼檢測及修復系統(tǒng),所述亂碼修復模塊進一步包括:
[0040]逐字節(jié)刪減單元,用于逐一刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的字節(jié),形成新的亂碼區(qū)間;
[0041]第二比較判斷單元,用于判斷所述新的亂碼區(qū)間中的編碼是否均在所述編碼區(qū)間內(nèi),若是則修復完成并輸出,否則將所述新的亂碼區(qū)間返回所述逐字節(jié)刪減單元。
[0042]上述的文本文檔亂碼檢測及修復系統(tǒng),所述逐字節(jié)刪減單元刪減的字節(jié)總數(shù)小于字符的編碼對應(yīng)的字節(jié)數(shù)。
[0043]上述的文本文檔亂碼檢測及修復系統(tǒng),所述亂碼修復模塊進一步包括:
[0044]字節(jié)總數(shù)獲取單元,用于獲取所述亂碼區(qū)間包括的字節(jié)總數(shù)Z ;
[0045]刪減字節(jié)數(shù)確定單元,用于從所述字節(jié)總數(shù)獲取單元獲取所述字節(jié)總數(shù)Z,并據(jù)此確定刪減字節(jié)數(shù)S=M0D(Z/M);
[0046]字節(jié)刪減單元,用于從所述刪減字節(jié)數(shù)確定單元獲取所述刪減字節(jié)數(shù)S,并刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的S個連續(xù)的字節(jié),對所述文本文檔進行修復。
[0047]上述的文本文檔亂碼檢測及修復系統(tǒng),還包括:
[0048]字典庫,用于存儲不同語言下的常用詞語;
[0049]解碼模塊,用于從所述亂碼修復模塊獲取修復后的所述文本文檔,并對所述文本文檔的字符編碼進行解碼,獲得字符;
[0050]分詞模塊,用于將經(jīng)所述解碼模塊解碼后的所述文本文檔中進行分詞操作,進而獲取若干亂碼區(qū)間詞語和若干非亂碼區(qū)間詞語;
[0051]閾值設(shè)定模塊,用于設(shè)定閾值Tth ;
[0052]比對結(jié)果獲取模塊,包括:
[0053]取詞單元,用于從所述分詞模塊中取出相同個數(shù)的所述亂碼區(qū)間詞語和所述非亂碼區(qū)間詞語;
[0054]第一比對結(jié)果獲取單元,用于將從所述取詞單元取出的所述亂碼區(qū)間詞語,與所述字典庫中的常用詞語進行比對,確定其在所述字典庫中比對成功的詞語個數(shù),獲取亂碼區(qū)間詞語比對結(jié)果:比對成功的詞語個數(shù)/進行比對的詞語個數(shù);
[0055]第二比對結(jié)果獲取單元,用于將從所述取詞單元獲取的所述非亂碼區(qū)間詞語,與所述字典庫中的常用詞語進行比對,確定其在所述字典庫中比對成功的詞語個數(shù),獲取非亂碼區(qū)間詞語比對結(jié)果:比對成功的詞語個數(shù)/進行比對的詞語個數(shù);
[0056]比對結(jié)果差值獲取模塊,用于獲得將從所述第一比對結(jié)果獲取單元獲取的所述非亂碼區(qū)間詞語比對結(jié)果與從所述第二比對結(jié)果獲取單元獲取的所述亂碼區(qū)間詞語比對結(jié)果的差值T;
[0057]第三比較判斷模塊,用于將從所述比對結(jié)果差值獲取模塊獲取的所述差值T與從所述閾值設(shè)定模塊獲取的所述閾值Tth進行比較,若T小于或者等于Tth,則修復結(jié)果滿足精度要求并顯示修復后文本文檔;若τ大于Tth,則提示用戶是否保留顯示修復后文本文檔。
[0058]本發(fā)明的上述技術(shù)方案相比現(xiàn)有技術(shù)具有以下優(yōu)點:
[0059](1)本發(fā)明所述的文本文檔亂碼檢測及修復方法和系統(tǒng),通過建立包括文本文檔編碼格式下所有字符編碼構(gòu)成的編碼區(qū)間的編碼區(qū)間庫,并根據(jù)文本文檔的編碼格式確定每個字符的編碼對應(yīng)的字節(jié)數(shù),并依此獲取文本文檔中每一個字符的編碼,并比較每一個編碼是否在編碼區(qū)間內(nèi),若不在,判定其為亂碼,第一個亂碼和最后一個亂碼之間的編碼構(gòu)成亂碼區(qū)間,刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的若干字節(jié),修復文本文檔。
[0060]現(xiàn)有技術(shù)只是通過嘗試轉(zhuǎn)換編碼格式來對文本文檔進行修復,這種方式一般適用于文本文檔的編碼格式不匹配的情況。但對于有些情況,比如文本文檔受到破壞,則無法對文本文檔進行有效修復。而本發(fā)明通過刪減亂碼區(qū)間的字節(jié),使字節(jié)刪減后的所述亂碼區(qū)間的編碼均落在編碼范圍內(nèi),從而對遭到破壞的文本文檔能夠進行有效修復。因此本發(fā)明相較于現(xiàn)有技術(shù),有了很大的改進,提升了用戶體驗。
[0061](2)本發(fā)明所述的文本文檔亂碼檢測及修復方法和系統(tǒng),在亂碼修復過程中,逐一刪減所述亂碼區(qū)間導致亂碼產(chǎn)生的字節(jié),形成新的亂碼區(qū)間,并判斷新的亂碼區(qū)間的編碼是否均在所述編碼區(qū)間內(nèi),若是,則修復完成,否則繼續(xù)刪減字節(jié),并且所述刪減的字節(jié)總數(shù)小于字符的編碼對應(yīng)的字節(jié)數(shù)。
[0062]本發(fā)明每刪減一個字符,都會判斷是否修復完成,還是需要再刪減字符對文本文檔進行修復,因此本發(fā)明對文本文檔亂碼的修復結(jié)果接近于原始的文本文檔,誤差比較小。另外,亂碼出現(xiàn)的主要原因是文本文檔受到破壞,導致文本文檔中的字符所對應(yīng)的編碼中的部分字節(jié)丟失而無法正常顯示,因此,亂碼區(qū)間的起始位置的亂碼所對應(yīng)的字節(jié)數(shù)肯定小于字符的編碼所對應(yīng)的字節(jié)數(shù),本發(fā)明通過設(shè)置刪減的字節(jié)總數(shù)小于字符的編碼對應(yīng)的字節(jié)數(shù),比較符合實際情況。將遭到破壞的編碼中的剩余字節(jié)刪除,則剩余的文本文檔中的字符所對應(yīng)的編碼基本都會落在編碼范圍內(nèi),從而在使文本文檔得到很好的修復的同時,也不會誤刪除未遭到破壞的編碼。
[0063](3)本發(fā)明所述的文本文檔亂碼檢測及修復方法和系統(tǒng),在所述文本文檔編碼格式下字符的編碼對應(yīng)的字節(jié)數(shù)為固定值Μ時,通過獲取所述亂碼區(qū)間包括的總字節(jié)數(shù)Z,進而確定刪減的字節(jié)數(shù)S=M0D(Z/M),刪減所述亂碼區(qū)間導致亂碼產(chǎn)生的S個連續(xù)的字節(jié),對文本文檔進行修復。
[0064]在所述字節(jié)數(shù)為固定值Μ時,如果文本文檔沒有遭到破壞,則文本文檔的總字節(jié)數(shù)是能夠被Μ整除的,如果不能被Μ整除,則肯定文本文檔被破壞,出現(xiàn)了字節(jié)的丟失,由此可以判斷出所述亂碼區(qū)間中遭到破壞的編碼的字節(jié)數(shù)即為所述亂碼區(qū)間包括的總字節(jié)數(shù)Ζ與Μ相除后的余數(shù)S,因此,本發(fā)明通過一次性刪除S個連續(xù)的字節(jié)對文本文檔進行修復,能夠達到很好的修復效果,修復效率也比較高,提升了用戶體驗。
[0065](4)本發(fā)明所述的文本文檔亂碼檢測及修復方法和系統(tǒng),還包括判斷所述修復完成的文本文檔是否成功的過程。首先建立包含不同語言下的常用詞語的字典庫,并將所述修復完成的文本文檔進行解碼,然后對解碼后的所述文本文檔得到的字符進行分詞,得到若干亂碼區(qū)間詞語和若干非亂碼區(qū)間詞語,并取出相同個數(shù)的亂碼區(qū)間詞語和非亂碼區(qū)間詞語與所述字典庫中的常用詞語進行比對,獲取亂碼區(qū)間詞語比對結(jié)果和非亂碼區(qū)間詞語比對結(jié)果,并將所述亂碼區(qū)間詞語比對結(jié)果和非亂碼區(qū)間詞語比對結(jié)果做差,獲取比對結(jié)果差值T,并將T與閾值Tth進行比較,若T小于或者等于Tth,則證明修復滿足精度要求并顯示修復后文本文檔;若τ大于Tth,則提示用戶是否保留顯示修復后文本文檔。所述閾值Tth可以由用戶自行設(shè)定,若用戶對修復的精度要求比較高,則所述閾值Tth取值就會較小,通過這種方式,即使修復未滿足用戶設(shè)定的精度要求,也給用戶以提示,是否還需要顯示修復后的文本文檔,能夠盡可能的滿足用戶的需求,提升了用戶體驗。而且即使沒有滿足用戶設(shè)定的精度要求,但還是對遭到破壞的文本文檔進行了有效修復,提升了用戶的閱讀體驗。
【專利附圖】
【附圖說明】
[0066]為了使本發(fā)明的內(nèi)容更容易被清楚的理解,下面結(jié)合附圖,對本發(fā)明作進一步詳細的說明,其中:
[0067]圖1是實施例1所述文本文檔亂碼檢測及修復方法的流程圖;
[0068]圖2是實施例2所述文本文檔亂碼檢測及修復方法的流程圖;
[0069]圖3是實施例3所述的一種亂碼修復步驟的流程圖;
[0070]圖4是實施例3所述字節(jié)數(shù)為固定值時的亂碼修復步驟的流程圖;
[0071]圖5是實施例4所述文本文檔亂碼檢測及修復系統(tǒng)的結(jié)構(gòu)框圖;
[0072]圖6是實施例5所述文本文檔亂碼檢測及修復系統(tǒng)的結(jié)構(gòu)框圖;
[0073]圖7是實施例6所述的一種亂碼修復模塊的結(jié)構(gòu)框圖;
[0074]圖8是實施例6所述字節(jié)數(shù)為固定值時的亂碼修復模塊的結(jié)構(gòu)框圖;
圖9是實施例3所述文本文檔亂碼示意圖;
圖10是實施例3所述文本文檔編碼區(qū)間不意圖;
圖11是實施例3所述文本文檔修復后編碼區(qū)間不意圖;
圖12是實施例3所述文本文檔修復后效果示意圖。
[0075]圖中附圖標記表示為:1-編碼區(qū)間庫,2-字節(jié)數(shù)獲取單元,3-編碼獲取單元,4-亂碼確定模塊,5-字符編碼獲取模塊,6-亂碼修復模塊,7-字典庫,8-解碼模塊,9-分詞模塊,10-閾值設(shè)定模塊,11-比對結(jié)果獲取模塊,12-比對結(jié)果差值獲取模塊,13-第三比較判斷模塊,61-逐字節(jié)刪減單元,62-第二比較判斷單元,63-字節(jié)總數(shù)獲取單元,64-刪減字節(jié)數(shù)確定單元,65-字節(jié)刪減單元,111-取詞單元,112-第一比對結(jié)果獲取單元,113-第二比對結(jié)果獲取單元。
【具體實施方式】
[0076]實施例1
[0077]本實施例所述的文本文檔亂碼檢測及修復方法,如圖1所示,包括如下步驟:
[0078]建立編碼區(qū)間庫步驟,所述編碼區(qū)間庫中包括文本文檔編碼格式下所有字符編碼構(gòu)成的編碼區(qū)間。
[0079]確定字符編碼的步驟:根據(jù)文本文檔的編碼格式,獲取文本文檔中每一個字符的編碼。
[0080]亂碼確定步驟,比較每一個所述編碼是否在所述編碼區(qū)間內(nèi),將不在所述編碼區(qū)間內(nèi)的編碼判斷為亂碼,第一個亂碼和最后一個亂碼之間的編碼構(gòu)成亂碼區(qū)間。
[0081]亂碼修復步驟,刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的若干字節(jié),對文本文檔進行修復。
[0082]亂碼出現(xiàn)的主要原因是文本文檔受到破壞,導致文本文檔中的字符所對應(yīng)的編碼中的部分字節(jié)丟失而無法正常顯示。當某一字符所對應(yīng)的編碼有字節(jié)丟失后,在進行解碼時依然按照與每一字符所對應(yīng)的字節(jié)數(shù)數(shù)量相等的連續(xù)字節(jié)構(gòu)成一個字符的編碼標準進行解碼,依次獲取文本文檔中每一個字符的編碼,因為編碼遭到破壞導致字節(jié)丟失,其必須從后續(xù)的字節(jié)中選擇相應(yīng)的字節(jié)滿足字節(jié)數(shù)的要求,即在進行解碼時,由于首個字符的字節(jié)丟失,會導致后續(xù)的一串字節(jié)均被錯誤的進行組合導致無法解碼成功。因此,一般情況下出現(xiàn)亂碼就至少會有一個以上,基本上都是成段出現(xiàn)的。所以本實施例中將第一個亂碼與最后一個亂碼之間的編碼定義為亂碼區(qū)間。
[0083]因為編碼由若干個字節(jié)構(gòu)成,并且每個字符的編碼對應(yīng)的字節(jié)數(shù)由文本文檔的編碼格式確定。因此,所述確定字符編碼的步驟進一步包括:確定字節(jié)數(shù)步驟,根據(jù)文本文檔的編碼格式確定每個字符的編碼對應(yīng)的字節(jié)數(shù)。獲取編碼步驟,按照與所述字節(jié)數(shù)數(shù)量相等的連續(xù)字節(jié)構(gòu)成一個字符的編碼的標準,依次獲取文本文檔中每一個字符的編碼。
[0084]若字符的編碼遭到破壞,則其肯定不在所述編碼區(qū)間內(nèi),因此可以通過判斷編碼是否在所述編碼范圍內(nèi),來確定編碼是否為亂碼。而且,若刪除掉被破壞的字符所對應(yīng)的編碼,剩余的沒有遭到破壞的字符的編碼一般均會落在所述編碼范圍內(nèi),會對遭到破壞的文本文檔進行很好的修復。并且,所述遭到破壞的編碼肯定位于所述亂碼區(qū)間的起始位置,因此,從所述亂碼區(qū)間的起始位置刪減導致亂碼產(chǎn)生的若干字節(jié),可以對文本文檔進行有效修復。
[0085]關(guān)于編碼格式的確定,因為每個字符的頭兩個字節(jié)都具備特殊含義,通過獲取字符的頭兩個字節(jié),即可判定文本文檔的編碼格式,進而確定該編碼格式下每個字符應(yīng)該對應(yīng)的字節(jié)數(shù)。作為一種優(yōu)選,可以從文本文檔中字符編碼的起始位置,按照與所述字節(jié)數(shù)數(shù)量相等的連續(xù)字節(jié)構(gòu)成一個字符的編碼的標準,依次獲取文本文檔中每一個字符的編碼。當然,也可以從任意位置選取與所述字節(jié)數(shù)數(shù)量相等的連續(xù)字節(jié)構(gòu)成一個字符的編碼,之后判斷所述編碼是否在所述編碼區(qū)間內(nèi),若不在,則將所述選取字節(jié)的位置向前或向后移動,直至選取的與所述字節(jié)數(shù)數(shù)量相等的連續(xù)字節(jié)構(gòu)成的字符的編碼在所述編碼區(qū)間內(nèi),然后以此位置為基準,向前以及向后按照與所述字節(jié)數(shù)數(shù)量相等的連續(xù)字節(jié)構(gòu)成一個字符的編碼的標準,依次獲取文本文檔中每一個字符的編碼。
[0086]現(xiàn)有技術(shù)一般只是通過嘗試轉(zhuǎn)換編碼格式來對出現(xiàn)亂碼的文本文檔進行修復,這種方式一般適用于文本文檔的編碼格式不匹配的情況。但對于有些情況,比如文本文檔受到破壞,則無法對文本文檔進行有效修復。而本實施例通過刪減亂碼區(qū)間的字節(jié),使字節(jié)刪減后的所述亂碼區(qū)間的編碼均落在編碼范圍內(nèi),從而對遭到破壞的文本文檔能夠進行有效修復。因此本實施例相較于現(xiàn)有技術(shù),有了很大的改進,提升了用戶體驗。
[0087]實施例2
[0088]在實施例1的基礎(chǔ)上,本實施例所述的文本文檔亂碼檢測及修復方法,如圖2所示,還包括如下步驟:
[0089]建立字典庫的步驟,所述字典庫中包含不同語言下的常用詞語。
[0090]解碼步驟,將所述亂碼修復步驟得到的文本文檔的字符編碼進行解碼,獲得字符。
[0091]分詞步驟,對解碼后的所述文本文檔進行分詞操作,得到若干亂碼區(qū)間詞語及若干非亂碼區(qū)間詞語。
[0092]設(shè)定閾值Tth的步驟。
[0093]獲取比對結(jié)果步驟,取出相同個數(shù)的所述亂碼區(qū)間詞語和所述非亂碼區(qū)間詞語,與所述字典庫中的常用詞語進行比對,分別確定所述亂碼區(qū)間詞語和所述非亂碼區(qū)間詞語在所述字典庫中比對成功的詞語個數(shù),分別獲取亂碼區(qū)間詞語比對結(jié)果和非亂碼區(qū)間詞語比對結(jié)果:比對成功的詞語個數(shù)/進行比對的詞語個數(shù)。
[0094]獲取比對結(jié)果差值步驟,獲取所述非亂碼區(qū)間詞語比對結(jié)果與所述亂碼區(qū)間詞語比對結(jié)果的差值T。
[0095]第三比較判斷步驟,將所述差值T同所述閾值Tth進行比較,若T小于或者等于Tth,則修復結(jié)果滿足精度要求并顯示修復后文本文檔;若T大于Tth,則提示用戶是否保留顯示修復后文本文檔。
[0096]所述閾值Tth可以事先由廠家設(shè)定好,也可以由用戶自行設(shè)定,比如用戶對修復的精度要求比較高,則所述閾值Tth取值就會較小,通過這種方式,能夠盡可能的滿足用戶的需求,提升用戶體驗。
[0097]所述字典庫可以根據(jù)不同的終端設(shè)備選擇是否集成在終端設(shè)備上還是通過網(wǎng)絡(luò)實現(xiàn)與終端設(shè)備的信號傳輸。
[0098]作為一種可選的實施方式,可以取得各個不同領(lǐng)域較有代表性的文檔,來用兩兩分詞的方式對其進行分詞,比如“獲取一些文檔”,可以切分為:獲取/取一/一些/些文/文檔,之后統(tǒng)計詞頻,最后選擇詞頻出現(xiàn)率高的詞來建立所述字典庫。解碼后的所述文本文檔中亂碼區(qū)間所對應(yīng)的字符以及解碼后的所述文本文檔中非亂碼區(qū)間所對應(yīng)的字符也可以采用兩兩分詞的方式進行分詞,之后與所述字典庫中的常用詞語進行比對,確定比對成功的詞語個數(shù)。
[0099]本實施例通過對修復后的文本文檔的精度進行判斷,判斷是否修復成功,提升了用戶的體驗。即使修復未滿足用戶設(shè)定的精度要求,也給用戶以提示,是否還需要保留顯示修復后文本文檔,能夠盡可能的滿足用戶的需求,提升了用戶體驗。而且即使沒有滿足用戶設(shè)定的精度要求,但還是對遭到破壞的文本文檔進行了有效修復,提升了用戶的閱讀體驗。
[0100]實施例3
[0101]在實施例1或?qū)嵤├?的基礎(chǔ)上,本實施例所述的文本文檔亂碼檢測及修復方法,如圖3所示,所述亂碼修復步驟進一步包括:
[0102]逐字節(jié)刪減步驟,逐一刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的字節(jié),形成新的亂碼區(qū)間。
[0103]第二比較判斷步驟,判斷所述新的亂碼區(qū)間中的編碼是否均在所述編碼區(qū)間內(nèi),若是則修復完成,否則返回至所述逐字節(jié)刪減步驟,直到修復完成。
[0104]所述逐字節(jié)刪減步驟中,刪減的字節(jié)總數(shù)小于字符的編碼對應(yīng)的字節(jié)數(shù)。
[0105]因為所述遭到破壞的編碼肯定位于所述亂碼區(qū)間的起始位置,因此,從所述亂碼區(qū)間的起始位置,刪減一個字節(jié),即可刪除導致亂碼產(chǎn)生的一個字節(jié),形成新的亂碼區(qū)間,并判斷所述新的亂碼區(qū)間中的編碼是否均在所述編碼區(qū)間內(nèi)。通過此種方式,即可從所述亂碼區(qū)間的起始位置,刪除所有導致亂碼產(chǎn)生的字節(jié),對文本文檔進行有效修復。
[0106]本實施例中,每刪減一個字符,都會判斷是否修復完成,還是需要再刪減字符對文本文檔進行修復,因此本實施例對文本文檔亂碼的修復結(jié)果接近于原始的文本文檔,誤差比較小。另外,亂碼出現(xiàn)的主要原因是文本文檔受到破壞,導致文本文檔中的字符所對應(yīng)的編碼中的部分字節(jié)丟失而無法正常顯示,因此,亂碼區(qū)間的起始位置的亂碼所對應(yīng)的字節(jié)數(shù)肯定小于字符的編碼所對應(yīng)的字節(jié)數(shù),本實施例通過設(shè)置刪減的字節(jié)總數(shù)小于字符的編碼對應(yīng)的字節(jié)數(shù),比較符合實際情況。將遭到破壞的編碼中的剩余字節(jié)刪除,則剩余的文本文檔中的字符所對應(yīng)的編碼基本都會落在編碼范圍內(nèi),從而在使文本文檔得到很好的修復的同時,也不會誤刪除未遭到破壞的編碼。
[0107]上述實施方式即適用于文本文檔編碼格式下字符的編碼對應(yīng)的字節(jié)數(shù)為固定值的文本文檔的修復,也適用于文本文檔編碼格式下字符的編碼對應(yīng)的字節(jié)數(shù)不固定的文本文檔的修復,適用范圍非常廣。
[0108]作為另一種可選的實施方式,若所述文本文檔編碼格式下字符的編碼對應(yīng)的字節(jié)數(shù)為固定值M,其中Μ為大于或等于2的整數(shù),如圖4所示,則所述亂碼修復步驟進一步包括:
[0109]獲取所述亂碼區(qū)間包括的字節(jié)總數(shù)Ζ的步驟。
[0110]確定刪減字節(jié)數(shù)步驟,確定刪減字節(jié)數(shù)S=M0D (Z/M)。
[0111]字節(jié)刪減步驟,刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的s個連續(xù)的字節(jié),對所述文本文檔進行修復。
[0112]在所述字節(jié)數(shù)為固定值Μ時,如果文本文檔沒有遭到破壞,則文本文檔的總字節(jié)數(shù)是能夠被Μ整除的,如果不能被Μ整除,則肯定文本文檔被破壞,出現(xiàn)了字節(jié)的丟失,由此可以判斷出所述亂碼區(qū)間中遭到破壞的編碼的字節(jié)數(shù)即為所述亂碼區(qū)間包括的總字節(jié)數(shù)Ζ與Μ相除后的余數(shù)S,且所述遭到破壞的編碼肯定位于所述亂碼區(qū)間的起始位置,因此,通過從所述亂碼區(qū)間的起始位置一次性刪除S個連續(xù)的字節(jié)對文本文檔進行修復,能夠達到很好的修復效果,修復效率也比較高,提升了用戶體驗。
[0113]本實施例還提供了一個對文本文檔進行亂碼檢測及修復的具體案例,具體方案如下:
[0114]此案例的環(huán)境為移動設(shè)備應(yīng)用的文檔閱讀,且所述字典庫已集成在所述移動設(shè)備上,并且之前用戶已設(shè)定閾值Tth=20%。
[0115]首先定位目標文檔是否有亂碼,判斷方法如下:
[0116]通過編碼檢測發(fā)現(xiàn)此文檔為UTF-16編碼,進而確定此編碼格式下每個字符的編碼對應(yīng)的字節(jié)數(shù)為2。從所述字符編碼的起始位置起,按照兩個連續(xù)字節(jié)構(gòu)成一個字符的編碼的標準,依次獲取所述文本文檔中每一個字符的編碼。之后判斷每一所述編碼是否在UTF-16編碼格式下的編碼區(qū)間內(nèi),結(jié)果發(fā)現(xiàn)部分字符的編碼并沒有在正確的編碼區(qū)間,出現(xiàn)亂碼。亂碼參見圖9。
[0117]
[0118]通過編碼的檢測發(fā)現(xiàn)不在正常的編碼區(qū)間的效果,參見圖10 (不在編碼區(qū)間的編碼見框內(nèi))。
[0119]確定亂碼“52A3” 一直到亂碼“8B0C”之間的亂碼構(gòu)成亂碼區(qū)間。
[0120]從所述亂碼區(qū)間的起始位置,即“52A3”嘗試刪減一個字節(jié),即刪減52,形成新的亂碼區(qū)間,如下圖所述,為“A390” 一直到“0CFF”,并判斷所述新的亂碼區(qū)間中的編碼是否均在所述編碼區(qū)間內(nèi)。檢測后發(fā)現(xiàn)所述新的亂碼區(qū)間中的編碼都處于正確的編碼區(qū)間,修復結(jié)果(方框中的編碼為修復后均落在編碼區(qū)間內(nèi)的編碼)參見圖11。
[0121 ] 將所述修復后的文本文檔的字符編碼進行解碼,獲得字符。并對解碼后的字符進行分詞操作,獲得若干亂碼區(qū)間詞語和非亂碼區(qū)間詞語。并取出相同個數(shù)的所述亂碼區(qū)間詞語和非亂碼區(qū)間詞語,比如都取出300個,與所述字典庫中的常用詞語進行比對。測試結(jié)果發(fā)現(xiàn)160個亂碼區(qū)間詞語在所述字典庫中比對成功,則亂碼區(qū)間詞語比對結(jié)果即為160 / 300=53%。測試結(jié)果發(fā)現(xiàn)有170個非亂碼區(qū)間詞語在所述字典庫中比對成功,則非亂碼區(qū)間詞語比對結(jié)果即為170/300=57%,將所述非亂碼區(qū)間詞語比對結(jié)果與所述亂碼區(qū)間詞語比對結(jié)果做差,獲取比對結(jié)果差值T=4%,,將Τ與Tth進行比較,4%小于20%,表明修復成功,修復結(jié)果參見圖12。
[0122]
[0123]
[0124]
[0125]實施例4
[0126]本實施例所述的一種文本文檔亂碼檢測及修復系統(tǒng),如圖5所示,包括:
[0127]編碼區(qū)間庫1,用于存儲文本文檔編碼格式下所有字符編碼構(gòu)成的編碼區(qū)間。
[0128]字符編碼獲取模塊5,用于根據(jù)文本文檔的編碼格式,獲取文本文檔中每一個字符的編碼。
[0129]亂碼確定模塊4,用于將字符編碼獲取模塊5獲取的每一個字符的編碼是否在所述編碼區(qū)間庫1存儲的編碼區(qū)間內(nèi),將不在所述編碼區(qū)間內(nèi)的編碼判斷為亂碼,并將第一個亂碼和最后一個亂碼之間的編碼確定為亂碼區(qū)間。
[0130]亂碼修復模塊6,刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的若干字節(jié),對文本文檔進行修復。
[0131 ] 所述字符編碼獲取模塊5進一步包括:
[0132]字節(jié)數(shù)獲取單元2,用于根據(jù)文本文檔的編碼格式確定每個字符的編碼對應(yīng)的字節(jié)數(shù);
[0133]編碼獲取單元3,按照與所述字節(jié)數(shù)獲取單元2確定的所述字節(jié)數(shù)數(shù)量相等的連續(xù)字節(jié)構(gòu)成一個字符的編碼的標準,依次獲取文本文檔中每一個字符的編碼。
[0134]現(xiàn)有技術(shù)一般只是通過嘗試轉(zhuǎn)換編碼格式來對出現(xiàn)亂碼的文本文檔進行修復,這種方式一般適用于文本文檔的編碼格式不匹配的情況。但對于有些情況,比如文本文檔受到破壞,則無法對文本文檔進行有效修復。而本實施例通過第一比較判斷模塊4,判斷所述編碼是否在所述編碼區(qū)間庫存儲的編碼區(qū)間內(nèi),進而判斷出遭到破壞的編碼,將其判定為亂碼,并通過亂碼區(qū)間確定模塊5確定連續(xù)的所述亂碼構(gòu)成的區(qū)間為亂碼區(qū)間,之后亂碼修復模塊6從所述亂碼區(qū)間的起始位置刪減導致亂碼產(chǎn)生的若干字節(jié),對文本文檔進行修復。使字節(jié)刪減后的所述亂碼區(qū)間的編碼均落在編碼范圍內(nèi),從而對遭到破壞的文本文檔能夠進行有效修復。因此本實施例相較于現(xiàn)有技術(shù),有了很大的改進,提升了用戶體驗。
[0135]實施例5
[0136]在實施例4的基礎(chǔ)上,本實施例所述的文本文檔亂碼檢測及修復系統(tǒng),如圖6所示,還包括:
[0137]字典庫7,用于存儲不同語言下的常用詞語。
[0138]解碼模塊8,用于從所述亂碼修復模塊6獲取修復后的所述文本文檔,并對所述文本文檔的字符編碼進行解碼,獲得字符。
[0139]分詞模塊9,用于將經(jīng)所述解碼模塊8解碼后的所述文本文檔中進行分詞操作,進而獲取若干亂碼區(qū)間詞語和若干非亂碼區(qū)間詞語。
[0140]閾值設(shè)定模塊10,用于設(shè)定閾值Tth。
[0141 ] 比對結(jié)果獲取模塊11,包括:
[0142]取詞單元111用于從所述分詞模塊9中取出相同個數(shù)的所述亂碼區(qū)間詞語和所述非亂碼區(qū)間詞語;
[0143]第一比對結(jié)果獲取單元112,用于將從所述取詞單元111獲取的所述亂碼區(qū)間詞語,與所述字典庫7中的常用詞語進行比對,確定其在所述字典庫7中比對成功的詞語個數(shù),獲取亂碼區(qū)間詞語比對結(jié)果:比對成功的詞語個數(shù)/進行比對的詞語個數(shù);
[0144]第二比對結(jié)果獲取單元113,用于將從所述取詞單元111獲取的所述非亂碼區(qū)間詞語,與所述字典庫7中的常用詞語進行比對,確定其在所述字典庫7中比對成功的詞語個數(shù),獲取非亂碼區(qū)間詞語比對結(jié)果:比對成功的詞語個數(shù)/進行比對的詞語個數(shù)。
[0145]比對結(jié)果差值獲取模塊12,用于將從所述第一比對結(jié)果獲取單元112獲取的所述非亂碼區(qū)間詞語比對結(jié)果與從所述第二比對結(jié)果獲取單元113獲取的所述亂碼區(qū)間詞語比對結(jié)果做差,獲取比對結(jié)果差值T。
[0146]第三比較判斷模塊13,用于將從所述比對結(jié)果差值獲取模塊12獲取的所述比對結(jié)果差值T與從所述閾值設(shè)定模塊10獲取的所述閾值Tth進行比較,若T小于或者等于Tth,則證明修復滿足精度要求并顯示修復后文本文檔;若τ大于Tth,則提示用戶是否保留顯示修復后文本文檔。
[0147]所述閾值設(shè)定模塊10中的閾值Tth可以事先由廠家設(shè)定好,也可以提供設(shè)置界面供用戶自行設(shè)定,比如用戶對修復的精度要求比較高,則所述閾值Tth取值就會較小,通過這種方式,能夠盡可能的滿足用戶的需求,提升用戶體驗。
[0148]所述字典庫7可以根據(jù)不同的終端設(shè)備選擇是否集成在終端設(shè)備上還是通過網(wǎng)絡(luò)實現(xiàn)與終端設(shè)備的信號傳輸。
[0149]作為一種可選的實施方式,可以取得各個不同領(lǐng)域較有代表性的文檔,來用兩兩分詞的方式對其進行分詞,比如“獲取一些文檔”,可以切分為:獲取/取一/一些/些文/文檔,之后統(tǒng)計詞頻,最后選擇詞頻出現(xiàn)率高的詞來建立所述字典庫7。所述分詞模塊9也可采用兩兩分詞的方式對解碼后的所述文本文檔中亂碼區(qū)間所對應(yīng)的字符以及解碼后的所述文本文檔中非亂碼區(qū)間所對應(yīng)的字符進行分詞,之后與所述字典庫中的常用詞語進行比對,確定比對成功的詞語個數(shù)。
[0150]本實施例通過比對結(jié)果獲取模塊11獲取亂碼區(qū)間詞語比對結(jié)果和非亂碼區(qū)間詞語比對結(jié)果,并通過比對結(jié)果差值獲取模塊12獲取比對結(jié)果差值T,之后通過第三比較判斷模塊13對T和Tth進行比較,看是否滿足了用戶對修復精度的要求,提升了用戶的體驗。即使修復未滿足用戶設(shè)定的精度要求,也給用戶以提示,是否還需要保留顯示修復后文本文檔,能夠盡可能的滿足用戶的需求,提升了用戶體驗。而且即使沒有滿足用戶設(shè)定的精度要求,但還是對遭到破壞的文本文檔進行了有效修復,提升了用戶的閱讀體驗。
[0151]實施例6
[0152]在實施例4或?qū)嵤├?的基礎(chǔ)上,本實施例所述的文本文檔亂碼檢測及修復系統(tǒng),如圖7所示,所述亂碼修復模塊6包括:
[0153]逐字節(jié)刪減單元61,用于逐一刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的字節(jié),形成新的亂碼區(qū)間。
[0154]第二比較判斷單元62,用于判斷所述新的亂碼區(qū)間中的編碼是否均在所述編碼區(qū)間內(nèi),若是則修復完成,否則將所述新的亂碼區(qū)間返回所述逐字節(jié)刪減單元61進行相應(yīng)處理直至修復完成。
[0155]所述逐字節(jié)刪減單元61刪減的字節(jié)總數(shù)小于字符的編碼對應(yīng)的字節(jié)數(shù)。
[0156]綜上所述,本實施例中,逐字節(jié)刪減單元61每刪減一個字符,第二比較判斷單元都會判斷是否修復完成,還是需要再刪減字符對文本文檔進行修復,因此本實施例對文本文檔亂碼的修復結(jié)果接近于原始的文本文檔,誤差比較小。另外,亂碼出現(xiàn)的主要原因是文本文檔受到破壞,導致文本文檔中的字符所對應(yīng)的編碼中的部分字節(jié)丟失而無法正常顯示,因此,亂碼區(qū)間的起始位置的亂碼所對應(yīng)的字節(jié)數(shù)肯定小于字符的編碼所對應(yīng)的字節(jié)數(shù),本實施例中逐字節(jié)刪減單元61刪減的字節(jié)總數(shù)小于字符的編碼對應(yīng)的字節(jié)數(shù),比較符合實際情況。將遭到破壞的編碼中的剩余字節(jié)刪除,則剩余的文本文檔中的字符所對應(yīng)的編碼基本都會落在編碼范圍內(nèi),從而在使文本文檔得到很好的修復的同時,也不會誤刪除未遭到破壞的編碼。
[0157]上述實施方式即適用于文本文檔編碼格式下字符的編碼對應(yīng)的字節(jié)數(shù)為固定值的文本文檔的修復,也適用于文本文檔編碼格式下字符的編碼對應(yīng)的字節(jié)數(shù)不固定的文本文檔的修復,適用范圍非常廣。
[0158]作為另一種可選的實施方式,如圖8所示,所述亂碼修復模塊6包括:
[0159]字節(jié)總數(shù)獲取單元63,用于獲取所述亂碼區(qū)間包括的字節(jié)總數(shù)Z。
[0160]刪減字節(jié)數(shù)確定單元64,用于從所述字節(jié)總數(shù)獲取單元63獲取所述字節(jié)總數(shù)Z,并據(jù)此確定刪減字節(jié)數(shù)S=M0D(Z/M)。
[0161]字節(jié)刪減單元65,用于從所述刪減字節(jié)數(shù)確定單元64獲取所述刪減字節(jié)數(shù)S,并刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的S個連續(xù)的字節(jié),對所述文本文檔進行修復。
[0162]此種處理方式僅適用于所述文本文檔編碼格式下字符的編碼對應(yīng)的字節(jié)數(shù)為固定值M,其中Μ為大于或等于2的整數(shù),在所述字節(jié)數(shù)為固定值Μ時,如果文本文檔沒有遭到破壞,則文本文檔的總字節(jié)數(shù)是能夠被Μ整除的,如果不能被Μ整除,則肯定文本文檔被破壞,出現(xiàn)了字節(jié)的丟失,由此可以判斷出所述亂碼區(qū)間中遭到破壞的編碼的字節(jié)數(shù)即為所述亂碼區(qū)間包括的總字節(jié)數(shù)Ζ與Μ相除后的余數(shù)S,因此,本實施例通過字節(jié)總數(shù)獲取單元63獲取所述總字節(jié)數(shù)Z,之后通過刪減字節(jié)數(shù)確定單元64確定刪減字節(jié)數(shù)S,并通過字節(jié)刪減單元65 —次性刪除S個連續(xù)的字節(jié)對文本文檔進行修復,能夠達到很好的修復效果,修復效率也比較高,提升了用戶體驗。
[0163]本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。
[0164]本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
[0165]這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
[0166]這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
[0167]盡管已描述了本發(fā)明的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。
【權(quán)利要求】
1.一種文本文檔亂碼檢測及修復方法,其特征在于,包括如下步驟: 建立編碼區(qū)間庫步驟,所述編碼區(qū)間庫中包括文本文檔編碼格式下所有字符編碼構(gòu)成的編碼區(qū)間; 確定字符編碼的步驟:根據(jù)文本文檔的編碼格式,獲取文本文檔中每一個字符的編碼; 亂碼確定步驟,比較每一個所述編碼是否在所述編碼區(qū)間內(nèi),將不在所述編碼區(qū)間內(nèi)的編碼判斷為亂碼,第一個亂碼和最后一個亂碼之間的編碼構(gòu)成亂碼區(qū)間; 亂碼修復步驟,刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的若干字節(jié),對文本文檔進行修復。
2.根據(jù)權(quán)利要求1所述的文本文檔亂碼檢測及修復方法,其特征在于: 所述確定字符編碼的步驟進一步包括: 確定字節(jié)數(shù)步驟,根據(jù)文本文檔的編碼格式確定每個字符的編碼對應(yīng)的字節(jié)數(shù);獲取編碼步驟,按照與所述字節(jié)數(shù)數(shù)量相等的連續(xù)字節(jié)構(gòu)成一個字符的編碼的標準,依次獲取文本文檔中每一個字符的編碼。
3.根據(jù)權(quán)利要求1或2所述文本文檔亂碼檢測及修復方法,其特征在于: 所述亂碼修復步驟進一步包括: 逐字節(jié)刪減步驟,逐一刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的字節(jié),形成新的亂碼區(qū)間; 第二比較判斷步驟,判斷所述新的亂碼區(qū)間中的編碼是否均在所述編碼區(qū)間內(nèi),若是則修復完成,否則返回至所述逐字節(jié)刪減步驟,直到修復完成。
4.根據(jù)權(quán)利要求3所述的文本文檔亂碼檢測及修復方法,其特征在于: 所述逐字節(jié)刪減步驟中,刪減的字節(jié)總數(shù)小于字符的編碼對應(yīng)的字節(jié)數(shù)。
5.根據(jù)權(quán)利要求1或2所述的文本文檔亂碼檢測及修復方法,其特征在于: 若所述文本文檔編碼格式下字符的編碼對應(yīng)的字節(jié)數(shù)為固定值M,其中M為大于或等于2的整數(shù),所述亂碼修復步驟進一步包括: 獲取所述亂碼區(qū)間包括的字節(jié)總數(shù)Z的步驟; 確定刪減字節(jié)數(shù)步驟,確定刪減字節(jié)數(shù)S=MOD (Z/M); 字節(jié)刪減步驟,刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的S個連續(xù)的字節(jié),對所述文本文檔進行修復。
6.根據(jù)權(quán)利要求1-5任一所述的文本文檔亂碼檢測及修復方法,其特征在于,還包括如下步驟: 建立字典庫的步驟,所述字典庫中包含不同語言下的常用詞語; 解碼步驟,將所述亂碼修復步驟得到的文本文檔的字符編碼進行解碼,獲得字符; 分詞步驟,對解碼后的所述文本文檔進行分詞操作,得到若干亂碼區(qū)間詞語及若干非亂碼區(qū)間詞語; 設(shè)定閾值Tth的步驟; 獲取比對結(jié)果步驟,取出相同個數(shù)的所述亂碼區(qū)間詞語和所述非亂碼區(qū)間詞語,與所述字典庫中的常用詞語進行比對,分別確定所述亂碼區(qū)間詞語和所述非亂碼區(qū)間詞語在所述字典庫中比對成功的詞語個數(shù),分別獲取亂碼區(qū)間詞語比對結(jié)果和非亂碼區(qū)間詞語比對結(jié)果:比對成功的詞語個數(shù)/進行比對的詞語個數(shù); 獲取比對結(jié)果差值步驟,獲取所述非亂碼區(qū)間詞語比對結(jié)果與所述亂碼區(qū)間詞語比對結(jié)果的差值T; 第三比較判斷步驟,將所述差值T同所述閾值Tth進行比較,若T小于或者等于TthJIJ修復結(jié)果滿足精度要求并顯示修復后文本文檔;若T大于Tth,則提示用戶是否保留顯示修復后文本文檔。
7.一種文本文檔亂碼檢測及修復系統(tǒng),其特征在于,包括: 編碼區(qū)間庫(1),用于存儲文本文檔編碼格式下所有字符編碼構(gòu)成的編碼區(qū)間; 字符編碼獲取模塊(5 ),用于根據(jù)文本文檔的編碼格式,獲取文本文檔中每一個字符的編碼; 亂碼確定模塊(4),用于判斷所述字符編碼獲取模塊(5)獲取的每一個字符的編碼是否在所述編碼區(qū)間庫(I)存儲的編碼區(qū)間內(nèi),將不在所述編碼區(qū)間內(nèi)的編碼判斷為亂碼,并將第一個亂碼和最后一個亂碼之間的編碼確定為亂碼區(qū)間; 亂碼修復模塊(6),用于刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的若干字節(jié),對文本文檔進行修復。
8.根據(jù)權(quán)利要求7所述的文本文檔亂碼檢測及修復系統(tǒng),其特征在于: 所述字符編碼獲取模塊(5)進一步包括: 字節(jié)數(shù)獲取單元(2),用于根據(jù)文本文檔的編碼格式確定每個字符的編碼對應(yīng)的字節(jié)數(shù); 編碼獲取單元(3),按照與所述字節(jié)數(shù)獲取單元(2)確定的所述字節(jié)數(shù)數(shù)量相等的連續(xù)字節(jié)構(gòu)成一個字符的編碼的標準,依次獲取文本文檔中每一個字符的編碼。
9.根據(jù)權(quán)利要求7或8所述的文本文檔亂碼檢測及修復系統(tǒng),其特征在于: 所述亂碼修復模塊(6)進一步包括: 逐字節(jié)刪減單元(61),用于逐一刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的字節(jié),形成新的亂碼區(qū)間; 第二比較判斷單元(62),用于判斷所述新的亂碼區(qū)間中的編碼是否均在所述編碼區(qū)間內(nèi),若是則修復完成并輸出,否則將所述新的亂碼區(qū)間返回所述逐字節(jié)刪減單元(61 )。
10.根據(jù)權(quán)利要求9所述的文本文檔亂碼檢測及修復系統(tǒng),其特征在于: 所述逐字節(jié)刪減單元(61)刪減的字節(jié)總數(shù)小于字符的編碼對應(yīng)的字節(jié)數(shù)。
11.根據(jù)權(quán)利要求7或8所述的文本文檔亂碼檢測及修復系統(tǒng),其特征在于: 所述亂碼修復模塊(6)包括: 字節(jié)總數(shù)獲取單元(63),用于獲取所述亂碼區(qū)間包括的字節(jié)總數(shù)Z ; 刪減字節(jié)數(shù)確定單元(64),用于從所述字節(jié)總數(shù)獲取單元(63)獲取所述字節(jié)總數(shù)Z,并據(jù)此確定刪減字節(jié)數(shù)S=MOD (Z/M); 字節(jié)刪減單元(65),用于從所述刪減字節(jié)數(shù)確定單元(64)獲取所述刪減字節(jié)數(shù)S,并刪減所述亂碼區(qū)間中導致亂碼產(chǎn)生的S個連續(xù)的字節(jié),對所述文本文檔進行修復。
12.根據(jù)權(quán)利要求7-11任一所述的文本文檔亂碼檢測及修復系統(tǒng),其特征在于還包括: 字典庫(7),用于存儲不同語言下的常用詞語; 解碼模塊(8),用于從所述亂碼修復模塊(6)獲取修復后的所述文本文檔,并對所述文本文檔的字符編碼進行解碼,獲得字符; 分詞模塊(9),用于將經(jīng)所述解碼模塊(8)解碼后的所述文本文檔中進行分詞操作,進而獲取若干亂碼區(qū)間詞語和若干非亂碼區(qū)間詞語; 閾值設(shè)定模塊(10),用于設(shè)定閾值Tth ; 比對結(jié)果獲取模塊(11),包括: 取詞單元(111),用于從所述分詞模塊(9)中取出相同個數(shù)的所述亂碼區(qū)間詞語和所述非亂碼區(qū)間詞語; 第一比對結(jié)果獲取單元(112),用于將從所述取詞單元(111)取出的所述亂碼區(qū)間詞語,與所述字典庫(7)中的常用詞語進行比對,確定其在所述字典庫(7)中比對成功的詞語個數(shù),獲取亂碼區(qū)間詞語比對結(jié)果:比對成功的詞語個數(shù)/進行比對的詞語個數(shù); 第二比對結(jié)果獲取單元(113),用于將從所述取詞單元(111)獲取的所述非亂碼區(qū)間詞語,與所述字典庫(7)中的常用詞語進行比對,確定其在所述字典庫(7)中比對成功的詞語個數(shù),獲取非亂碼區(qū)間詞語比對結(jié)果:比對成功的詞語個數(shù)/進行比對的詞語個數(shù); 比對結(jié)果差值獲取模塊(12),用于獲得將從所述第一比對結(jié)果獲取單元(112)獲取的所述非亂碼區(qū)間詞語比對結(jié)果與從所述第二比對結(jié)果獲取單元(113)獲取的所述亂碼區(qū)間詞語比對結(jié)果的差值T ; 第三比較判斷模塊(13),用于將從所述比對結(jié)果差值獲取模塊(12)獲取的所述差值T與從所述閾值設(shè)定模塊(10)獲取的所述閾值Tth進行比較,若T小于或者等于Tth,則修復結(jié)果滿足精度要求并顯示修復后文本文檔;若T大于Tth,則提示用戶是否保留顯示修復后文本文檔。
【文檔編號】G06F9/45GK104424010SQ201310404131
【公開日】2015年3月18日 申請日期:2013年9月6日 優(yōu)先權(quán)日:2013年9月6日
【發(fā)明者】童征宇, 丁力, 張鵬 申請人:北大方正集團有限公司, 北京方正阿帕比技術(shù)有限公司, 方正信息產(chǎn)業(yè)控股有限公司