本發(fā)明應(yīng)用于數(shù)據(jù)倉庫集成領(lǐng)域,涉及一種字符串值域切分方法及裝置,具體涉及一種應(yīng)用在數(shù)據(jù)倉庫集成領(lǐng)域中進(jìn)行離線數(shù)據(jù)抽取時,對數(shù)字、字符串根據(jù)值域范圍進(jìn)行均等切分以實現(xiàn)多線程加速抽取的方法。
背景技術(shù):
在大數(shù)據(jù)時代下,數(shù)據(jù)需要不斷流轉(zhuǎn)、交換才能價值最大化,在企業(yè)的數(shù)據(jù)倉庫,商業(yè)智能建設(shè)中,通常會把存放于各種RDBMS(關(guān)系型數(shù)據(jù)庫,比如Mysql、Oracle,PostgreSQL等)上的在線數(shù)據(jù)同步抽取到離線的存儲、計算平臺進(jìn)行統(tǒng)一加工處理(例如開源社區(qū)的Hadoop,阿里集團(tuán)內(nèi)部的ODPS等系統(tǒng)),如圖1所示,也會把在線數(shù)據(jù)遷移到其他在線系統(tǒng)(如從Mysql遷移數(shù)據(jù)到Oracle),如圖2所示。
比如現(xiàn)在有一張mysql表t,數(shù)據(jù)行數(shù)為1億行,需要抽取其數(shù)據(jù),顯然快速同步必然需要多線程抽取。如果我們已知其主鍵為name,并且name的最小值為“aa”,最大值為”zz”,指定切分份數(shù)為3份,如圖3。為了實現(xiàn)多線程加速抽取,需要獲取“aa”和”zz”之間的兩個節(jié)點,才能夠完成切分并依據(jù)切分后的字符串段進(jìn)行多線程抽取。而現(xiàn)有的做法一般是將字符串轉(zhuǎn)化為極小的數(shù)字,組成待切分范圍,對數(shù)字范圍等差切分,得到切分節(jié)點,根據(jù)切分范圍生成多條數(shù)據(jù)抽取語句,進(jìn)而實現(xiàn)多線程加速抽取。
但是這樣的做法存在一定的缺陷。
首先,采用把字符串轉(zhuǎn)換為極小數(shù)(如BigDecimal)表示方式,但是在字符串的轉(zhuǎn)換運算中,可能拋出異常,導(dǎo)致切分失敗。
其次,為了避免在字符串的轉(zhuǎn)換運算中可能拋出異常,選擇適應(yīng)的算法時往往需要對轉(zhuǎn)換的數(shù)據(jù)進(jìn)行近似處理(比如四舍五入等操作),從而使得精 度受損而無法將字符串精確還原,此外在一些極小數(shù)被還原為字符串時必須指定還原字符的最大長度,此限制同樣導(dǎo)致精度無法還原。
再者,對字母字符串轉(zhuǎn)換為極小數(shù)的過程中需要采用65536為基數(shù),此范圍基本上容納了所有的歐美字符和絕大部分的亞洲字符,進(jìn)而對ASCII字符串在切分后的還原過程中,也可能出現(xiàn)非ASCII字符。
另外,對字符串的不同待切分類型,轉(zhuǎn)換為極小數(shù)的方式并不通用,并非適用于任何字符串,比如RDBMS中的整數(shù)類型/時間類型等就不適用。
因此,隨著對接的數(shù)據(jù)存儲日益增長以及數(shù)據(jù)源頭數(shù)據(jù)庫類型的日益豐富,對數(shù)據(jù)傳輸性能、準(zhǔn)確性、數(shù)據(jù)一致性、穩(wěn)定性等造成嚴(yán)峻考驗,如何提高數(shù)據(jù)傳輸性能的穩(wěn)定性,尤其是多線程抽取以實現(xiàn)加速,并適用于所有切分類型的字符串就成為了亟待解決的技術(shù)問題。
技術(shù)實現(xiàn)要素:
本申請所要解決的技術(shù)問題是,克服現(xiàn)有技術(shù)的不足,提供一種更準(zhǔn)確、更高效的字符串值域切分方法及裝置。
本申請的一個目的在于提出一種字符串值域切分方法,應(yīng)用于數(shù)據(jù)倉庫集成領(lǐng)域,包括:提取待抽取數(shù)據(jù)的主關(guān)鍵字中ASCII碼值最大的字符串為第一字符串、ASCII碼值最小的字符串為第二字符串;根據(jù)預(yù)置的進(jìn)制基數(shù),分別結(jié)合第一、第二字符串中相應(yīng)的單個字符所處的位置序號將所述第一、第二字符串轉(zhuǎn)化為完全不失真的第一大整數(shù)和第二大整數(shù),其中該所述位置序號是單個字符在相應(yīng)字符串中的排列次序;根據(jù)所述第一大整數(shù)和第二大整數(shù)求取范圍差,判定根據(jù)預(yù)置的切分份數(shù)對所述范圍差進(jìn)行均等切分結(jié)果為整數(shù)時,將所述整數(shù)作為切分步長;根據(jù)所述第二大整數(shù)與切分步長進(jìn)行累加求和,得到每個切分節(jié)點所對應(yīng)的大整數(shù),其中,該切分節(jié)點由所述均等切分得到;根據(jù)所述進(jìn)制基數(shù)將所述每個切分節(jié)點對應(yīng)的大整數(shù)還原成ASCII碼值,根據(jù)ASCII碼值得到相應(yīng)的每個切分節(jié)點的節(jié)點字符串,根據(jù)所述節(jié)點字符串對待抽取數(shù)據(jù)進(jìn)行切分。
本申請的另一個目的在于提出一種字符串值域切分裝置,應(yīng)用于數(shù)據(jù)倉庫集成領(lǐng)域,該裝置包含:字符串提取模塊、字符串轉(zhuǎn)化模塊、切分步長獲 取模塊、切分節(jié)點獲取模塊、字符串還原切分模塊,其中:所述字符串提取模塊,用于提取待抽取數(shù)據(jù)的主關(guān)鍵字中ASCII碼值最大的字符串為第一字符串、ASCII碼值最小的字符串為第二字符串;所述字符串轉(zhuǎn)化模塊,用于根據(jù)預(yù)置的進(jìn)制基數(shù),分別結(jié)合第一、第二字符串中相應(yīng)的單個字符所處的位置序號將所述第一、第二字符串轉(zhuǎn)化為完全不失真的第一大整數(shù)和第二大整數(shù),其中該所述位置序號是單個字符在相應(yīng)字符串中的排列次序;所述切分步長獲取模塊,用于根據(jù)所述第一大整數(shù)和第二大整數(shù)求取范圍差,判定根據(jù)預(yù)置的切分份數(shù)對所述范圍差進(jìn)行均等切分結(jié)果為整數(shù)時,將所述整數(shù)作為切分步長;所述切分節(jié)點獲取模塊,用于根據(jù)所述第二大整數(shù)與切分步長進(jìn)行累加求和,得到每個切分節(jié)點所對應(yīng)的大整數(shù),其中,該切分節(jié)點由所述均等切分得到;所述字符串還原切分模塊,用于根據(jù)所述進(jìn)制基數(shù)將所述每個切分節(jié)點對應(yīng)的大整數(shù)還原成ASCII碼值,根據(jù)ASCII碼值得到相應(yīng)的每個切分節(jié)點的節(jié)點字符串,根據(jù)所述節(jié)點字符串對待抽取數(shù)據(jù)進(jìn)行切分。
本申請的另一個目的在于提出一種字符串值域切分方法,應(yīng)用于數(shù)據(jù)倉庫集成領(lǐng)域,提取待抽取數(shù)據(jù)的主關(guān)鍵字中ASCII碼值最大的字符串為第一字符串、ASCII碼值最小的字符串為第二字符串;根據(jù)預(yù)置的進(jìn)制基數(shù),分別結(jié)合第一、第二字符串中相應(yīng)的單個字符所處的位置序號將所述第一、第二字符串轉(zhuǎn)化為完全不失真的第一大整數(shù)和第二大整數(shù),其中該所述位置序號是單個字符在相應(yīng)字符串中的排列次序;根據(jù)所述第一大整數(shù)和第二大整數(shù)求取范圍差,判定根據(jù)預(yù)置的切分份數(shù)對所述范圍差進(jìn)行均等切分結(jié)果為非整數(shù)時,根據(jù)所述范圍差對所述切分份數(shù)進(jìn)行取整及取余操作,以所述取整操作的結(jié)果為第一步長,以所述第一步長加1為第二步長,將所述第一步長、第二步長作為切分步長;根據(jù)所述第二大整數(shù)與切分步長進(jìn)行累加求和,得到每個切分節(jié)點所對應(yīng)的大整數(shù),其中,該切分節(jié)點由所述均等切分得到;根據(jù)所述進(jìn)制基數(shù)將所述每個切分節(jié)點對應(yīng)的大整數(shù)還原成ASCII碼值,根據(jù)ASCII碼值得到相應(yīng)的每個切分節(jié)點的節(jié)點字符串,根據(jù)所述節(jié)點字符串對待抽取數(shù)據(jù)進(jìn)行切分。
本申請的另一個目的在于提出一種字符串值域切分裝置,應(yīng)用于數(shù)據(jù)倉庫集成領(lǐng)域,該裝置包含:字符串提取模塊、字符串轉(zhuǎn)化模塊、切分步長獲 取模塊、切分節(jié)點獲取模塊、字符串還原切分模塊,其中:所述字符串提取模塊,用于提取待抽取數(shù)據(jù)的主關(guān)鍵字中ASCII碼值最大的字符串為第一字符串、ASCII碼值最小的字符串為第二字符串;所述字符串轉(zhuǎn)化模塊,用于根據(jù)預(yù)置的進(jìn)制基數(shù),分別結(jié)合第一、第二字符串中相應(yīng)的單個字符所處的位置序號將所述第一、第二字符串轉(zhuǎn)化為完全不失真的第一大整數(shù)和第二大整數(shù),其中該所述位置序號是單個字符在相應(yīng)字符串中的排列次序;所述切分步長獲取模塊,用于根據(jù)所述第一大整數(shù)和第二大整數(shù)求取范圍差,判定根據(jù)預(yù)置的切分份數(shù)對所述范圍差進(jìn)行均等切分結(jié)果為非整數(shù)時,根據(jù)所述范圍差對所述切分份數(shù)進(jìn)行取整及取余操作,以所述取整操作的結(jié)果為第一步長,以所述第一步長加1為第二步長,將所述第一步長、第二步長作為切分步長;所述切分節(jié)點獲取模塊,用于根據(jù)所述第二大整數(shù)與切分步長進(jìn)行累加求和,得到每個切分節(jié)點所對應(yīng)的大整數(shù),其中,該切分節(jié)點由所述均等切分得到;所述字符串還原切分模塊,用于根據(jù)所述進(jìn)制基數(shù)將所述每個切分節(jié)點對應(yīng)的大整數(shù)還原成ASCII碼值,根據(jù)ASCII碼值得到相應(yīng)的每個切分節(jié)點的節(jié)點字符串,根據(jù)所述節(jié)點字符串對待抽取數(shù)據(jù)進(jìn)行切分。
與現(xiàn)有技術(shù)相比,本申請能夠獲得以下技術(shù)效果:
1)實現(xiàn)了通用的ASCII字符串范圍切分,保證對任意給定ASCII字符串都能做到切分;切分算法中以按權(quán)相加的方法將字符串轉(zhuǎn)化為不失真的大整數(shù),通過兩個大整數(shù)的差值范圍與切分份數(shù)是否能整除來判斷切分步長,保證了切分過程是完全不失真的;由于轉(zhuǎn)化過程中的進(jìn)制基數(shù)在128以內(nèi),故切分結(jié)果仍然限制在128個ASCII字符范圍內(nèi),從而有效地避免了非ASCII字符的出現(xiàn)。
2)通過輾轉(zhuǎn)相除法將轉(zhuǎn)化結(jié)果進(jìn)行還原,利用輾轉(zhuǎn)相除法在處理大數(shù)時的高效性,本發(fā)明的還原過程不會出現(xiàn)任何失真情況,很好地解決了現(xiàn)有技術(shù)中極小數(shù)在還原過程中因精度受損而無法精確還原的問題。
3)在優(yōu)化方案中,采取了縮小進(jìn)制的方法,將轉(zhuǎn)化過程中按權(quán)相加的進(jìn)制基數(shù)進(jìn)一步縮小到待切分字符串的單個字符中綜合ASCII碼值的最大和最小之間,從而使還原結(jié)果中避免了ASCII碼值為0—31及127的不可見字符 的出現(xiàn),提高了切分節(jié)點字符串的可讀性,數(shù)據(jù)處理人員在排錯時也更加方便。
4)通過把要進(jìn)行切分的字段,都無損的轉(zhuǎn)換為大整數(shù)類型,并進(jìn)行等差切分后再逆向不失真的還原成其本來類型。
綜上,本發(fā)明在解決數(shù)據(jù)傳輸性能,尤其是多線程抽取以實現(xiàn)加速等方面有顯著進(jìn)步。
附圖說明
此處所說明的附圖用來提供對本申請的進(jìn)一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:
圖1為現(xiàn)有技術(shù)及本申請實施例的離線數(shù)據(jù)同步場景的示意圖;
圖2為現(xiàn)有技術(shù)及本申請實施例的數(shù)據(jù)遷移場景的示意圖;
圖3為現(xiàn)有技術(shù)中進(jìn)行數(shù)據(jù)多線程切分加速抽取的示意圖;
圖4為本申請實施例中的字符串值域切分的流程示意圖;
圖5為本申請實施例中圖4中步驟1003的細(xì)部流程示意圖;
圖6為本申請實施例中圖4中步驟1004的細(xì)部流程示意圖;
圖7為本申請實施例中根據(jù)第二大整數(shù)與所述切分步長求切分節(jié)點的示意圖;
圖8是本申請實施例中根據(jù)第二大整數(shù)與所述切分步長求切分節(jié)點的又一示意圖;
圖9是本申請實施例中采用128為進(jìn)制基數(shù)得到切分節(jié)點的示意圖;
圖10是本申請實施例中采用縮小的進(jìn)制基數(shù)得到切分節(jié)點的示意圖;
圖11是本申請實施例中一種字符串值域切分裝置的結(jié)構(gòu)示意圖;
圖12是本申請實施例中又一種字符串值域切分裝置的結(jié)構(gòu)示意圖;
圖13是本申請實施例中又一種字符串值域切分裝置的結(jié)構(gòu)示意圖;
圖14是本申請實施例中又一種字符串值域切分裝置的結(jié)構(gòu)示意圖;
圖15是本申請實施例中又一種字符串值域切分裝置的結(jié)構(gòu)示意圖。
具體實施方式
以下將配合附圖及實施例來詳細(xì)說明本申請的實施方式,藉此對本申請如何應(yīng)用技術(shù)手段來解決技術(shù)問題并達(dá)成技術(shù)功效的實現(xiàn)過程能充分理解并據(jù)以實施。
實施例一
如圖4所示,為本申請實施例中的字符串值域切分,包括如下步驟:
步驟1001,提取待抽取數(shù)據(jù)的主關(guān)鍵字中ASCII碼值最大的字符串為第一字符串、ASCII碼值最小的字符串為第二字符串。
抽取數(shù)據(jù)是數(shù)據(jù)同步過程中待處理的數(shù)據(jù),例如,數(shù)據(jù)表中保存有多行數(shù)據(jù),對這個數(shù)據(jù)表中進(jìn)行數(shù)據(jù)同步過程時,需要逐行地對每行數(shù)據(jù)進(jìn)行離線抽取,離線抽取并進(jìn)行處理的某一行數(shù)據(jù)就是步驟1001中提到的待抽取數(shù)據(jù)。
待抽取數(shù)據(jù)往往具有一主關(guān)鍵字,主關(guān)鍵字也稱主鍵,主鍵一般是數(shù)據(jù)表中的一個或多個字段,數(shù)據(jù)表中數(shù)據(jù)行的字段必須和主鍵有關(guān)系且數(shù)據(jù)表中數(shù)據(jù)行的字段也只和主鍵有關(guān)系。因此主鍵可以唯一確定數(shù)據(jù)表中的一行數(shù)據(jù),也就是說,主鍵能夠唯一地確定待抽取數(shù)據(jù)。
當(dāng)然,用數(shù)據(jù)表來舉例僅為說明解釋,并不限制待抽取數(shù)據(jù)的組織形式,其可以使用數(shù)據(jù)行形式以外的其他形式進(jìn)行抽取,也可以使用數(shù)據(jù)表形式以外的形式進(jìn)行保存,本申請并不限于此。
由于主鍵保證了數(shù)據(jù)的完整性,對數(shù)數(shù)據(jù)的主鍵進(jìn)行操作能夠加快數(shù)據(jù)庫的操作速度,因此只需提取待抽取數(shù)據(jù)的主關(guān)鍵字中ASCII碼值最大的字符串、ASCII碼值最小的字符串,得到主鍵的ASCII碼值范圍,將不直觀的ASCII字符轉(zhuǎn)化為直觀的數(shù)字,更有利于均等切分。得到數(shù)據(jù)主關(guān)鍵字的切分結(jié)果即可唯一地對待抽取數(shù)據(jù)進(jìn)行多線程加速抽取,這一過程不僅克服了ASCII字符直接被切分的不便性,同時也保證了數(shù)據(jù)的不丟失且不失真。
例如,假設(shè)某數(shù)據(jù)行的主鍵包含多個字符串,根據(jù)其主鍵提取到的ASCII碼值最大的字符串為8cdB,ASCII碼值最小字符串為2E4e。
步驟1002,根據(jù)預(yù)置的進(jìn)制基數(shù),分別結(jié)合第一、第二字符串中相應(yīng)的單個字符所處的位置序號將所述第一、第二字符串轉(zhuǎn)化為完全不失真的第一大整數(shù)和第二大整數(shù),其中該所述位置序號是單個字符在相應(yīng)字符串中的排列次序。
顯然,按權(quán)值和加權(quán)系數(shù)展開求和的方式會將相應(yīng)字符串轉(zhuǎn)化為大整數(shù),對大整數(shù)進(jìn)行數(shù)據(jù)操作更加方便,而且進(jìn)行中間數(shù)據(jù)操作時也不會導(dǎo)致中間處理結(jié)果的數(shù)值過于小,無法進(jìn)行后續(xù)操作步驟或者后續(xù)操作結(jié)果拋出異常從而無法還原得到字符串,因此大整數(shù)顯然可以保證最終處理結(jié)果都可以還原為ASCII字符串的。因此對于任意字符串都可以適用于本申請的大整數(shù)轉(zhuǎn)化方式。
而對于現(xiàn)有技術(shù)中,更多的使用的是將字符串轉(zhuǎn)化為極小數(shù)的方式,對于一些字符串在轉(zhuǎn)換后進(jìn)行中間處理時,中間處理結(jié)果會得到極小數(shù),對于這種極小數(shù)在某些情況下是無法進(jìn)行后續(xù)的數(shù)據(jù)操作的,這樣會導(dǎo)致這些極小數(shù)相應(yīng)的字符無法被還原,顯然這個轉(zhuǎn)化反而會導(dǎo)致字符串切分失敗。
本步驟中的轉(zhuǎn)化過程進(jìn)一步包括:以所述進(jìn)制基數(shù)為基數(shù),以所述基數(shù)的整數(shù)次冪為權(quán)值,以所述單個字符的ASCII碼值為加權(quán)系數(shù),按權(quán)值和加權(quán)系數(shù)展開求和,其中以所述單個字符在相應(yīng)字符串中所處的位置序號為所述基數(shù)整數(shù)次冪中的冪指數(shù)。待轉(zhuǎn)化的字符串的具體轉(zhuǎn)化的計算過程如公式1所示:
C0×B0+C0×B1+…+Cn-1×Bn-1 公式1
公式1中,C0~Cn-1是ASCII待轉(zhuǎn)化的字符串中每個單個字符對應(yīng)的ASCII碼值,B是預(yù)置的進(jìn)制基數(shù),0~n是單個字符在相應(yīng)字符串中所處的位置序號。
接續(xù)步驟1001中所示出的實例,所提取出來的第一字符串為8cdB,第二字符串為2E4e,如下是這兩個字符串分別轉(zhuǎn)化為大整數(shù)的過程,此處進(jìn)制基數(shù)B根據(jù)ASCII字符的數(shù)量設(shè)置為128:
字符串8cdB的轉(zhuǎn)化計算過程為:66×1280+98×1281+99×1282+56×1283=119075138。
字符串2E4e的轉(zhuǎn)化過程為:101×1280+52×1281+69×1282+50×1283=105994853。
步驟1003,根據(jù)所述第一大整數(shù)和第二大整數(shù)求取范圍差,判定根據(jù)預(yù)置的切分份數(shù)對所述范圍差進(jìn)行均等切分結(jié)果為整數(shù)時,將所述整數(shù)作為切分步長。
因為第二大整數(shù)是小于第一大整數(shù)的,因此從第二大整數(shù)到第一大整數(shù)之間是存在一個數(shù)值上的差值范圍的,這個差值范圍就是上述范圍差。而預(yù)置的切分份數(shù)在設(shè)置時并不會參考范圍差來設(shè)置,所以并不能保證上述范圍差一定能夠被預(yù)置切分份數(shù)整除。如果能夠被整除,那所述范圍差恰好被均等切分,切分得到的每份的切分步長是相同的,這個整數(shù)就是切分步長;如果不能夠被整除,那么為了保證切分的結(jié)果仍是整數(shù)且最大可能地保持切分結(jié)果的均等性,切分步長就由兩個步長來完成。
對第一大整數(shù)和第二大整數(shù)求取范圍差,計算如公式2所示:
Δ=big-small 公式2
公式2中,big表示第一大整數(shù),small表示第二大整數(shù),Δ表示第一大整數(shù)與第二大整數(shù)的范圍差。
結(jié)合圖5,為本步驟1003的細(xì)部流程,進(jìn)一步包括如下步驟:
步驟1003a,判斷所述切分份數(shù)與所述范圍差的大小。
當(dāng)所述范圍差小于所述切分份數(shù)時,執(zhí)行步驟1003b。
當(dāng)所述范圍差大于所述切分份數(shù)時,執(zhí)行步驟1003c。
步驟1003b,此時無法切分到指定的份數(shù),提示切分失敗,流程結(jié)束,或者調(diào)整所述切分份數(shù)為所述范圍差的值,根據(jù)調(diào)整后的所述切分份數(shù)對所述范圍差繼續(xù)進(jìn)行均等切分,跳轉(zhuǎn)到步驟1003c。
在步驟1003b中,可以根據(jù)第一大整數(shù)和第二大整數(shù)求范圍差后,根據(jù)預(yù)置的切分份數(shù)進(jìn)行模擬切分或是兩個數(shù)值大小的比對來判斷,此種情況若是所述范圍差小于所述切分份數(shù)時,無法切分到指定的份數(shù);也可以在預(yù)設(shè)置切分份數(shù)時根據(jù)第一大整數(shù)與第二大整數(shù)的范圍差來考慮切分份數(shù)的上限 值,此種情況若是所述范圍差小于所述切分份數(shù)時,調(diào)整所述切分份數(shù)為所述范圍差的值,本申請并不限于此。其中預(yù)置的切分份數(shù)通常大于等于1。
步驟1003c,根據(jù)預(yù)置的切分份數(shù)對所述范圍差進(jìn)行均等切分,并判斷均等切分的結(jié)果。
判定根據(jù)預(yù)置的切分份數(shù)對所述范圍差進(jìn)行均等切分結(jié)果為整數(shù)時,執(zhí)行步驟1003d。
判定根據(jù)預(yù)置的切分份數(shù)對所述范圍差進(jìn)行均等切分結(jié)果為非整數(shù)時,執(zhí)行步驟1003e。
步驟1003d,將所述整數(shù)作為切分步長。
該步驟具體實施如下:根據(jù)所述范圍差對所述切分份數(shù)進(jìn)行除法求商的操作,如公式3所示:
step=Δ/N 公式3
公式3中,除法求商的結(jié)果step為切分步長,N為預(yù)置切分份數(shù)。
步驟1003e,根據(jù)所述范圍差對所述切分份數(shù)進(jìn)行取整及取余操作,以所述取整操作的結(jié)果為第一步長,以所述第一步長加1為第二步長,將所述第一步長、第二步長作為切分步長。
切分得到的第一份數(shù)以及第二份數(shù)之和等于所述預(yù)置的切分份數(shù),所述第一份數(shù)以所述第一步長切分得到,所述第二份數(shù)以所述第二步長切分得到,并且所述第二份數(shù)等于所述取余操作的結(jié)果,切分得到的第一份數(shù)以及第二份數(shù)之和等于所述預(yù)置的切分份數(shù),其中,所述第一份數(shù)以所述第一步長切分得到,所述第二份數(shù)以所述第二步長切分得到,并且所述第二份數(shù)等于所述取余操作的結(jié)果;
具體操作步驟如公式3所示:
step=Δ/N
r=Δ%N 公式4
公式3中,取整的結(jié)果step為第一切分步長,N為預(yù)置切分份數(shù),取余的結(jié)果r為第二份數(shù),其中,step+1為第二步長,N-r為第一份數(shù)。
在上述步驟1003c中,判斷根據(jù)預(yù)置的切分份數(shù)對所述范圍差進(jìn)行均等切分結(jié)果,可以是在切分之前進(jìn)行預(yù)模擬切分,若預(yù)模擬切分的結(jié)果不是整數(shù),那么可以根據(jù)所述范圍差對所述切分份數(shù)進(jìn)行取整及取余操作,以所述取整操作的結(jié)果為第一步長,以所述第一步長加1為第二步長,將所述第一步長、第二步長作為切分步長,用兩個步長以及兩個步長各自對應(yīng)的切分份數(shù)依次進(jìn)行切分;也可以將預(yù)模擬切分結(jié)果的整數(shù)部分作為切分步長進(jìn)行切分,當(dāng)切分完預(yù)設(shè)的份數(shù)后,仍然余下一份數(shù)值長度與已切分好的數(shù)值長度明顯不均等的數(shù)值,將這最后一份按照余下的量平均分給已切分完成的其他份,每份多加1,被加1的份數(shù)等于余下的量,本申請不限于此。
其中,以第一步長加1為第二步長,因為1是最小的整數(shù),這樣做既保證了切分步長是整數(shù),同時也保證了切分結(jié)果的最大均等性。
步驟1004,根據(jù)所述第二大整數(shù)與切分步長進(jìn)行累加求和,得到每個切分節(jié)點所對應(yīng)的大整數(shù),其中,該切分節(jié)點由所述均等切分得到。
下面結(jié)合圖6,本步驟1004的細(xì)部操作,進(jìn)一步包括如下步驟:
在步驟1003c中,判斷根據(jù)預(yù)置的切分份數(shù)對所述范圍差進(jìn)行均等切分結(jié)果是否為整數(shù),得到了兩種不同的切分步長,那么就對應(yīng)兩種不同的求取切分節(jié)點的方式。
若判定為整數(shù),跳轉(zhuǎn)到步驟1003d,將所述整數(shù)作為切分步長,執(zhí)行步驟1004a;若判定為非整數(shù),跳轉(zhuǎn)到步驟1003e,根據(jù)所述范圍差對所述切分份數(shù)進(jìn)行取整及取余操作,以所述取整操作的結(jié)果為第一步長,以所述第一步長加1為第二步長,將所述第一步長、第二步長作為切分步長,執(zhí)行步驟1004b。
步驟1004a,所述整數(shù)即為切分步長,根據(jù)第二大整數(shù)與所述切分步長依次累加即可得到對應(yīng)的切分節(jié)點,如圖7所示;
根據(jù)所述第二大整數(shù)與所述切分步長相加得到第1切分節(jié)點對應(yīng)的大整數(shù),用所述第1切分節(jié)點對應(yīng)的大整數(shù)與所述切分步長相加得到第2切分節(jié)點對應(yīng)的大整數(shù),直到得到第N-1切分節(jié)點對應(yīng)的大整數(shù),所述N等于預(yù)置切分份數(shù)。具體操作如公式:
G1=small+step
G2=G1+step
……
GN-1=GN-2+step 公式5
公式5中,G1~GN-1是第一切分節(jié)點直至第N-1切分節(jié)點對應(yīng)的大整數(shù),step為范圍差對切分份數(shù)的商,即步驟1003d中得到的切分步長。
當(dāng)然,本步并驟不限于這一種方式,也可根據(jù)所述第一大整數(shù)與所述切分步長相減得到倒數(shù)第一個切分節(jié)點對應(yīng)的大整數(shù),再減切分步長得到倒數(shù)第二個切分節(jié)點對應(yīng)的大整數(shù),直至得到所有的切分節(jié)點。本申請并不限于此。
步驟1004b,所述第一步長、第二步長即為切分步長,分別根據(jù)第二大整數(shù)與第一步長、第二步長依次累加即可得到每個切分節(jié)點對應(yīng)的大整數(shù),其中以第一步長為切分步長的切分份數(shù)以及以第二步長為切分步長的切分份數(shù)由預(yù)置的切分份數(shù)對所述范圍差進(jìn)行取整及取余的結(jié)果來決定。
結(jié)合圖8,根據(jù)所述第二大整數(shù)與所述第一步長相加得到第1切分節(jié)點對應(yīng)的大整數(shù);
根據(jù)所述第1切分節(jié)點對應(yīng)的大整數(shù)與所述第一步長相加得到第2切分節(jié)點對應(yīng)的大整數(shù),直到得到第N-r切分節(jié)點對應(yīng)的大整數(shù),所述N-r等于所述第一份數(shù);
用第N-r切分節(jié)點對應(yīng)的大整數(shù)與所述第二步長相加得到第N-r+1切分節(jié)點對應(yīng)的大整數(shù);用所述第N-r+1切分節(jié)點對應(yīng)的大整數(shù)與所述第二步長相加得到第N-r+2切分節(jié)點對應(yīng)的大整數(shù),直到得到第N-1切分節(jié)點對應(yīng)的大整數(shù),所述r等于所述第二份數(shù),N為預(yù)置的切分份數(shù)。其具體操作步驟如公式6所示:
G1=small+step
G2=G1+step
…
GN-r=GN-r-1+step
GN-r+1=GN-r+step+1
GN-r+2=GN-r+1+step+1
…
GN-1=GN-2+step+1 公式6
公式6中,G1~GN-1是第一切分節(jié)點直至第N-1切分節(jié)點對應(yīng)的大整數(shù),step為第一步長,step+1為第二步長。
本步驟也可以由第二大整數(shù)先與第二步長累加得到前r個節(jié)點對應(yīng)的大整數(shù),再與第一步長累加得到剩余N-r-1個節(jié)點對應(yīng)的大整數(shù);
也可以由第一大整數(shù)先與第二步長相減得到前r個節(jié)點對應(yīng)的大整數(shù),再與第一步長相減得到剩余N-r-1個節(jié)點對應(yīng)的大整數(shù);
也可以由第一大整數(shù)先與第一步長相減得到前N-r個節(jié)點對應(yīng)的大整數(shù),再與第一步相減減得到剩余r-1個節(jié)點對應(yīng)的大整數(shù);
上述變形方式都可以實現(xiàn)本步驟,本申請不限于此。
接續(xù)步驟1001、1002中所示出的實例,將字符串8cdB和字符串2E4e切分成6份,具體實施過程如下:
N=6,step=13080285/6=2180047,r=Δ%N=3。所以,切分結(jié)果中,第一步長為step=2180047,第二步長為step+1=2180048,第一份數(shù)等于第二份數(shù),為3份。
被切分出的5個節(jié)點G數(shù)值為G1=small+step+1=108174901、G2=G1+step+1=110354949、G3=G2+step+1=112534997、G4=G3+step=114715044、G5=G4+step=116895091
步驟1005,根據(jù)所述進(jìn)制基數(shù)將所述每個切分節(jié)點對應(yīng)的大整數(shù)還原成ASCII碼值,根據(jù)ASCII碼值得到相應(yīng)的每個切分節(jié)點的節(jié)點字符串,根據(jù)所述節(jié)點字符串對待抽取數(shù)據(jù)進(jìn)行切分。
所述還原是基于輾轉(zhuǎn)相除法將大整數(shù)轉(zhuǎn)化為ASCII碼值,通過對ASCII碼表進(jìn)行查詢即可得到碼值對應(yīng)的字符串,該所述字符串就是切分節(jié)點字符串,根據(jù)節(jié)點字符串即可對待抽取數(shù)據(jù)進(jìn)行切分,從而生成多線程加速抽取的語句
接續(xù)步驟1001、1002中所示出的實例,結(jié)合圖9,將字符串8cdB和字符串2E4e切分成6份,就得到如下切分范圍:[8cdB,3J<5]、[3J<5,4OD□]、[4OD□,5TKU]、[5TKU、6YS$]、[6YS$,7∧Zs]、[7∧Zs,2E4e]。其中,□表示不可見字符。
以下再以一實施例對于進(jìn)制基數(shù)的設(shè)置進(jìn)行說明。
在上述步驟1002、1005中所使用到的進(jìn)制基數(shù)是預(yù)先設(shè)置的,設(shè)置可以是在步驟1001之前,也可以是在步驟1001之后,步驟1002之前。
在ASCII碼中,ASCII碼值在0—31以內(nèi)以及127是不可見的空字符以及控制字符,如步驟1005得到的切分節(jié)點,第二個節(jié)點字符串中ASCII碼值5對應(yīng)的字符是查詢符,不可見,導(dǎo)致分界點字符串可讀性差,排錯不方便。為了改進(jìn)此現(xiàn)象將有兩種方式實現(xiàn)進(jìn)制基數(shù)的設(shè)置:
1)所述進(jìn)制基數(shù)是根據(jù)ASCII碼所能代表的總字符數(shù)設(shè)置得到的。
一般ASCII碼所能代表的基礎(chǔ)總字符數(shù)是128。這樣確保所有的切分節(jié)點對應(yīng)的大整數(shù)在還原成字符串之后,切分節(jié)點字符串仍然在ASCII字符的范圍內(nèi),從而避免了切分過程中出現(xiàn)非ASCII字符。
2)所述進(jìn)制基數(shù)是根據(jù)所述第一、第二字符串的單個字符對應(yīng)的ASCII碼值中最小數(shù)值和最大數(shù)值設(shè)置得到的,顯然,相比上一種方式,該進(jìn)制是縮小的進(jìn)制。具體通過以下方式進(jìn)行設(shè)置:
查找所述第一字符串的單個字符對應(yīng)的ASCII碼值中最小數(shù)值為第一最小值、最大數(shù)值為第一最大值,查找所述第二字符串的單個字符對應(yīng)的ASCII碼值中最小數(shù)值為第二最小值、最大數(shù)值為第二最大值;
將所述第一最小值和第二最小值中較小的一個設(shè)置為綜合最小值,將所述第一最大值和第二最大值中較大的一個設(shè)置為綜合最大值,以綜合最大值減去綜合最小值再加1設(shè)置所述進(jìn)制基數(shù)。
其具體操作如下公式7所示:
Max=max{Max1,Max2}
Min=min{Min1,Min2} 公式7
公式7中,Max1、Min1分別是第一最大值和第二最大值,Max2、Min2分別是第二最大值和第二最小值,Max、Min分別是綜合最大值與綜合最小值。
如此,第二種進(jìn)制基數(shù)獲取的方式即如公式8所示:
Max-Min+1 公式8
公式8中,Max、Min分別是綜合最大值與綜合最小值。
無論采用以上哪種方式設(shè)置的進(jìn)制基數(shù),對于步驟1001-1004中的操作都是相同的,可參見實施例一中的步驟,在此不再贅述。
以下以一個實例,對于第二種縮小的進(jìn)制的方式設(shè)置進(jìn)制基數(shù)來進(jìn)行說明。
假設(shè)對字符串8cdB和字符串2E4e進(jìn)行進(jìn)制縮小,字符串8cdb對應(yīng)的ASCII值分別為56/99/98/66,字符串2E4e對應(yīng)的ASCII值為50/69/52/101,Max=max{56,99,98,66,50,69,52,101}=101,Min=min{56,99,98,66,50,69,52,101}=50。
以Max-Min+1,即101-50+1=52作為進(jìn)制基數(shù)。顯然,相比第一種方式以128為進(jìn)制基數(shù)的方式,第二種方式顯然是將進(jìn)制基數(shù)縮小了。
如果將上述兩個字符串按照步驟1002所述的方法轉(zhuǎn)化成大整數(shù),結(jié)果將如下:
字符串8cdb的轉(zhuǎn)化過程為:66×520+98×521+99×522+56×523=8146906,字符串2E4e的轉(zhuǎn)化過程為:101×520+52×521+69×522+50×523=7219781。
第一大整數(shù)big=8146906,第二大整數(shù)small=7219781
根據(jù)步驟1003,第一大整數(shù)與第二大整數(shù)的范圍差Δ=big-small=927125。對轉(zhuǎn)換后的兩個大整數(shù)進(jìn)行范圍均等切分,仍然假設(shè)切分份數(shù)為6,則
step=927125/6=154520,r=927125%6=5。所以,切分結(jié)果中,有5份的步長為step+1=154521,有1份的步長為step=154520。
根據(jù)步驟1004,得到切分節(jié)點分別為:被切分出的5個節(jié)點G數(shù)值為:G1=small+step=7374301、G2=G1+step+1=7528822、G3=G2+step+1=7683343、G4=G3+step+1=7837864、G5=G4+step+1=7992385。
如上所述,無論采用以上哪種方式設(shè)置的進(jìn)制基數(shù),對于步驟1001-1004中的操作都是相同的。但是采用不同的方式設(shè)置進(jìn)制基數(shù),步驟1005的操作會發(fā)生變化,即根據(jù)所述進(jìn)制基數(shù)將所述每個切分節(jié)點對應(yīng)的大整數(shù)還原成ASCII碼值,根據(jù)ASCII碼值得到相應(yīng)的每個切分節(jié)點的節(jié)點字符串,根據(jù)所述節(jié)點字符串對待抽取數(shù)據(jù)進(jìn)行切分,會有兩種不同的具體操作方式。
1)根據(jù)ASCII碼所能代表的總字符數(shù)設(shè)置得到所述進(jìn)制基數(shù)時,直接采用輾轉(zhuǎn)相除法即可進(jìn)行大整數(shù)還原到字符串:
用所述切分節(jié)點所對應(yīng)的大整數(shù)對所述進(jìn)制基數(shù)進(jìn)行第一次取整及取余操作,將所述第一次取余操作的結(jié)果作為第一個整數(shù);
根據(jù)所述第一次取整操作的結(jié)果,對所述進(jìn)制基數(shù)進(jìn)行第二次取整及取余操作,將所述第二次取余操作的結(jié)果作為第二個整數(shù);
根據(jù)所述第二次取整操作的結(jié)果再次執(zhí)行取整及取余操作直至第m次取整操作的結(jié)果為零,對所述第一個整數(shù)、第二個整數(shù)直至第m個整數(shù)進(jìn)行倒序排列,所述倒序排列的結(jié)果是所述切分節(jié)點對應(yīng)的節(jié)點字符串的ASCII碼值。其具體實施過程如公式9:
C0=G%B、A0=G/B
C1=A0%B、A1=A0/B
…
Cm=Am-1%B、Am=Am-1/B=0 公式9
公式9中,G是相應(yīng)切分節(jié)點,C0~Cm是第一至第m次取余得到的第一個整數(shù)直至第m個整數(shù),A0~Am-1是第一至第m次取整得到的第一個結(jié)果直至第m個結(jié)果,B是預(yù)置的進(jìn)制基數(shù)。
如此,該節(jié)點對應(yīng)的ASCII碼值即為CmCm-1…C0,查ASCII碼表即可得到節(jié)點字符串。下面通過一個具體的例子來進(jìn)一步闡述該步驟:
接續(xù)實施例1中步驟1004,將得到的切分節(jié)點所對應(yīng)的大整數(shù)還原為字符串:
以128為基數(shù)將得到的切分節(jié)點G利用輾轉(zhuǎn)相除法轉(zhuǎn)化為相應(yīng)的ASCII碼值。對第一個切分節(jié)點G1的處理如下,
C0=G1%128=53、A0=G1/128=845116
C1=A0%128=60、A1=A0/128=6602
C2=A1%128=74、A2=A1/128=51
C3=A2%128=51、A3=A2/128=0
則此節(jié)點對應(yīng)的ASCII碼值C3C2C1C0即為51/74/60/53,查ASCII碼表得到第一個節(jié)點字符串為3J<5。
用同樣的轉(zhuǎn)換方法,其余四個節(jié)點分別得到的ASCII碼值如下:52/79/68/5、53/84/75/85、54/89/83/36、55/94/90/115,查ASCII表即可得到第二個節(jié)點字符串為4OD□、第三個節(jié)點字符串為5TKU、第四個節(jié)點字符串為6YS$、第五個節(jié)點字符串為7∧Zs,正如步驟1005中所示的切分結(jié)果。
2)根據(jù)所述第一、第二字符串的單個字符對應(yīng)的ASCII碼值中最小數(shù)值和最大數(shù)值設(shè)置得到所述進(jìn)制基數(shù)時,需要在輾轉(zhuǎn)相除算法的基礎(chǔ)上對輾轉(zhuǎn)相除的結(jié)果進(jìn)一步進(jìn)行還原:
采用輾轉(zhuǎn)相除法,用所述切分節(jié)點所對應(yīng)的大整數(shù)對所述進(jìn)制基數(shù)進(jìn)行第一次取整及取余操作,將所述第一次取余操作的結(jié)果減1再加上所述綜合最小值作為第一個整數(shù);
根據(jù)所述第一次取整操作的結(jié)果,對所述進(jìn)制基數(shù)進(jìn)行第二次取整及取余操作,將所述第二次取余操作的結(jié)果減1再加上所述綜合最小值作為第二個整數(shù);
根據(jù)所述第二次取整操作的結(jié)果再次執(zhí)行取整及取余操作直至第N次取整操作的結(jié)果為零,對所述第一個整數(shù)、第二個整數(shù)直至第N個整數(shù)進(jìn)行倒序排列,所述倒序排列的結(jié)果是所述切分節(jié)點對應(yīng)的節(jié)點字符串的ASCII碼值。
其具體實施過程如公式10:
C0=G%B-1+Min、A0=G/B
C1=A0%B-1+Min、A1=A0/B
…
Cm=Am-1%B-1+Min、Am=Am-1/B=0 公式10
公式10中,G是相應(yīng)的切分節(jié)點,C0~Cm是第一至第m次取余得到的第一個整數(shù)直至第m個整數(shù),A0~Am-1是第一至第m次取整得到的第一個結(jié)果直至第m個結(jié)果,B是預(yù)置的進(jìn)制基數(shù),Min是綜合最小值。
如此,該節(jié)點對應(yīng)的ASCII碼值即為CmCm-1…C0,查ASCII碼表即可得到節(jié)點字符串。
結(jié)合圖10,將通過縮小進(jìn)制轉(zhuǎn)化出的大整數(shù)以同樣的進(jìn)制還原為ASCII字符串:
假設(shè)第一個切分節(jié)點G1=7374301,Min=50,B=52
C0=G1%52-1+Min=74、A0=G1/52=141813
C1=A0%52-1+Min=58、A1=A0/52=2727
C2=A1%52-1+Min=72、A2=A1/52=52
C3=A2%52-1+Min=49、A3=A2/52=1
C4=A3%52-1+Min=50、A4=A3/52=0
則此節(jié)點對應(yīng)的ASCII碼值C4C3C2C1C0即為50/49/72/58/74,查ASCII碼表得到第一個節(jié)點字符串為21H:J。
同樣的計算方法,余下四個節(jié)點對應(yīng)的ASCII字符分別為:22MB3、23RFP、24WQ9、25\XV。
與1)中的方式進(jìn)行對比,本步驟2)的切分結(jié)果中并不含有不可見字符,可讀性更優(yōu)。與此同時,若此步驟2)中不采用輾轉(zhuǎn)相除法,則可能導(dǎo)致切分的過程中出現(xiàn)除不盡的小數(shù)而進(jìn)行近似處理的情況,從而導(dǎo)致切分精度受損而無法精確還原,輾轉(zhuǎn)相除法能夠很好的避免上述情況。
采用2)進(jìn)制縮小的方法能保證還原出的ASCII字符就在ASCII碼值最小的字符及ASCII碼值最大的字符之間,若是待切分字符串中不含有不可見字符,那么還原的結(jié)果中一定也不會出現(xiàn)不可見字符。這樣便提高了切分節(jié)點的可讀性,更有利于排錯及數(shù)據(jù)的加速抽取。
實施例二
如圖11所示,為本申請實施例的另一種字符串值域切分方法,包括:
步驟2001,提取待抽取數(shù)據(jù)的主關(guān)鍵字中ASCII碼值最大的字符串為第一字符串、ASCII碼值最小的字符串為第二字符串;
步驟2002,根據(jù)預(yù)置的進(jìn)制基數(shù),分別結(jié)合第一、第二字符串中相應(yīng)的單個字符所處的位置序號將所述第一、第二字符串轉(zhuǎn)化為完全不失真的第一大整數(shù)和第二大整數(shù),其中該所述位置序號是單個字符在相應(yīng)字符串中的排列次序;
步驟2003,根據(jù)所述第一大整數(shù)和第二大整數(shù)求取范圍差,判定根據(jù)預(yù)置的切分份數(shù)對所述范圍差進(jìn)行均等切分結(jié)果為非整數(shù)時,根據(jù)所述范圍差對所述切分份數(shù)進(jìn)行取整及取余操作,以所述取整操作的結(jié)果為第一步長,以所述第一步長加1為第二步長,將所述第一步長、第二步長作為切分步長;
步驟2004,根據(jù)所述第二大整數(shù)與切分步長進(jìn)行累加求和,得到每個切分節(jié)點所對應(yīng)的大整數(shù),其中,該切分節(jié)點由所述均等切分得到;
步驟2005,根據(jù)所述進(jìn)制基數(shù)將所述每個切分節(jié)點對應(yīng)的大整數(shù)還原成ASCII碼值,根據(jù)ASCII碼值得到相應(yīng)的每個切分節(jié)點的節(jié)點字符串,根據(jù)所述節(jié)點字符串對待抽取數(shù)據(jù)進(jìn)行切分。
本實施例與上述實施例一中的特征相互對應(yīng),因此可參見實施例一中的相關(guān)描述,在此不再贅述。
實施例三
如圖12所示,為本申請實施例的一種字符串值域切分裝置,包含:字符串提取模塊10、字符串轉(zhuǎn)化模塊20、切分步長獲取模塊30、切分節(jié)點獲取模塊40、字符串還原切分模塊50,其中:
所述字符串提取模塊10,用于提取待抽取數(shù)據(jù)的主關(guān)鍵字中ASCII碼值最大的字符串為第一字符串、ASCII碼值最小的字符串為第二字符串;
所述字符串轉(zhuǎn)化模塊20,用于根據(jù)預(yù)置的進(jìn)制基數(shù),分別結(jié)合第一、第二字符串中相應(yīng)的單個字符所處的位置序號將所述第一、第二字符串轉(zhuǎn)化為完全不失真的第一大整數(shù)和第二大整數(shù),其中該所述位置序號是單個字符在相應(yīng)字符串中的排列次序;
所述切分步長獲取模塊30,用于根據(jù)所述第一大整數(shù)和第二大整數(shù)求取范圍差,判定根據(jù)預(yù)置的切分份數(shù)對所述范圍差進(jìn)行均等切分結(jié)果為整數(shù)時,將所述整數(shù)作為切分步長;
所述切分節(jié)點獲取模塊40,用于根據(jù)所述第二大整數(shù)與切分步長進(jìn)行累加求和,得到每個切分節(jié)點所對應(yīng)的大整數(shù),其中,該切分節(jié)點由所述均等切分得到;
所述字符串還原切分模塊50,用于根據(jù)所述進(jìn)制基數(shù)將所述每個切分節(jié)點對應(yīng)的大整數(shù)還原成ASCII碼值,根據(jù)ASCII碼值得到相應(yīng)的每個切分節(jié)點的節(jié)點字符串,根據(jù)所述節(jié)點字符串對待抽取數(shù)據(jù)進(jìn)行切分。
如圖13所示,所述字符串值域切分裝置,還包含:進(jìn)制基數(shù)設(shè)置模塊60,與所述字符串轉(zhuǎn)化模塊20、所述字符串還原切分模塊50相連,用于根據(jù)ASCII碼所能代表的總字符數(shù)設(shè)置得到所述進(jìn)制基數(shù);或者,根據(jù)所述第一、第二字符串的單個字符對應(yīng)的ASCII碼值中最小數(shù)值和最大數(shù)值設(shè)置得到所述進(jìn)制基數(shù)。
當(dāng)根據(jù)所述第一、第二字符串的單個字符對應(yīng)的ASCII碼值中最小數(shù)值 和最大數(shù)值設(shè)置得到所述進(jìn)制基數(shù)時,所述進(jìn)制基數(shù)設(shè)置模塊60進(jìn)一步用于查找所述第一字符串的單個字符對應(yīng)的ASCII碼值中最小數(shù)值為第一最小值、最大數(shù)值為第一最大值,查找所述第二字符串的單個字符對應(yīng)的ASCII碼值中最小數(shù)值為第二最小值、最大數(shù)值為第二最大值;將所述第一最小值和第二最小值中較小的一個設(shè)置為綜合最小值,將所述第一最大值和第二最大值中較大的一個設(shè)置為綜合最大值,以綜合最大值減去綜合最小值再加1設(shè)置所述進(jìn)制基數(shù)。
當(dāng)根據(jù)ASCII碼所能代表的總字符數(shù)設(shè)置得到所述進(jìn)制基數(shù)時,所述字符串還原切分模塊50,進(jìn)一步用于采用輾轉(zhuǎn)相除法,用所述切分節(jié)點所對應(yīng)的大整數(shù)對所述進(jìn)制基數(shù)進(jìn)行第一次取整及取余操作,將所述第一次取余操作的結(jié)果作為第一個整數(shù);根據(jù)所述第一次取整操作的結(jié)果,對所述進(jìn)制基數(shù)進(jìn)行第二次取整及取余操作,將所述第二次取余操作的結(jié)果作為第二個整數(shù);根據(jù)所述第二次取整操作的結(jié)果再次執(zhí)行取整及取余操作直至第N次取整操作的結(jié)果為零,對所述第一個整數(shù)、第二個整數(shù)直至第N個整數(shù)進(jìn)行倒序排列,所述倒序排列的結(jié)果是所述切分節(jié)點對應(yīng)的節(jié)點字符串的ASCII碼值。
當(dāng)根據(jù)所述第一、第二字符串的單個字符對應(yīng)的ASCII碼值中最小數(shù)值和最大數(shù)值設(shè)置得到所述進(jìn)制基數(shù)時,所述字符串還原切分模塊50進(jìn)一步用于采用輾轉(zhuǎn)相除法,用所述切分節(jié)點所對應(yīng)的大整數(shù)對所述進(jìn)制基數(shù)進(jìn)行第一次取整及取余操作,將所述第一次取余操作的結(jié)果減1再加上所述綜合最小值作為第一個整數(shù);根據(jù)所述第一次取整操作的結(jié)果,對所述進(jìn)制基數(shù)進(jìn)行第二次取整及取余操作,將所述第二次取余操作的結(jié)果減1再加上所述綜合最小值作為第二個整數(shù);根據(jù)所述第二次取整操作的結(jié)果再次執(zhí)行取整及取余操作直至第N次取整操作的結(jié)果為零,對所述第一個整數(shù)、第二個整數(shù)直至第N個整數(shù)進(jìn)行倒序排列,所述倒序排列的結(jié)果是所述切分節(jié)點對應(yīng)的節(jié)點字符串的ASCII碼值。
所述切分步長獲取模塊30,進(jìn)一步用于判斷所述切分份數(shù)與所述范圍差的大小,當(dāng)所述范圍差小于所述切分份數(shù)時,無法切分到指定的份數(shù),提示切分失敗或者調(diào)整所述切分份數(shù)為所述范圍差的值,根據(jù)調(diào)整后的所述切分 份數(shù)對所述范圍差繼續(xù)進(jìn)行均等切分。
所述切分步長獲取模塊30,判定根據(jù)預(yù)置的切分份數(shù)對所述范圍差進(jìn)行均等切分結(jié)果為整數(shù)時,進(jìn)一步用于根據(jù)所述第二大整數(shù)與所述切分步長相加得到第1切分節(jié)點對應(yīng)的大整數(shù);通過所述第1切分節(jié)點對應(yīng)的大整數(shù)與所述切分步長相加得到第2切分節(jié)點對應(yīng)的大整數(shù),直到得到第S-1切分節(jié)點對應(yīng)的大整數(shù),所述S等于預(yù)置切分份數(shù)。
所述切分步長獲取模塊30,判定根據(jù)預(yù)置的切分份數(shù)對所述范圍差進(jìn)行均等切分結(jié)果為非整數(shù)時,進(jìn)一步用于根據(jù)所述范圍差對所述切分份數(shù)進(jìn)行取整及取余操作,以所述取整操作的結(jié)果為第一步長,以所述第一步長加1為第二步長,將所述第一步長、第二步長作為切分步長;其中,切分得到的第一份數(shù)以及的第二份數(shù)之和等于所述預(yù)置的切分份數(shù),所述第一份數(shù)以所述第一步長切分得到,所述第二份數(shù)以所述第二步長切分得到,并且所述第二份數(shù)等于所述取余操作的結(jié)果,切分得到的第一份數(shù)以及第二份數(shù)之和等于所述預(yù)置的切分份數(shù),其中,所述第一份數(shù)以所述第一步長切分得到,所述第二份數(shù)以所述第二步長切分得到,并且所述第二份數(shù)等于所述取余操作的結(jié)果。
所述切分節(jié)點獲取模塊40,進(jìn)一步用于根據(jù)所述第二大整數(shù)與所述第一步長相加得到第1切分節(jié)點對應(yīng)的大整數(shù);根據(jù)所述第1切分節(jié)點對應(yīng)的大整數(shù)與所述第一步長相加得到第2切分節(jié)點對應(yīng)的大整數(shù),直到得到第N切分節(jié)點對應(yīng)的大整數(shù),所述N等于所述第一份數(shù);用第N切分節(jié)點對應(yīng)的大整數(shù)與所述第二步長相加得到第N+1切分節(jié)點對應(yīng)的大整數(shù);用所述第N+1切分節(jié)點對應(yīng)的大整數(shù)與所述第二步長相加得到第N+2切分節(jié)點對應(yīng)的大整數(shù),直到得到第N+M-1切分節(jié)點對應(yīng)的大整數(shù),所述M等于所述第二份數(shù)。
所述字符串轉(zhuǎn)化模塊20,進(jìn)一步用于以所述進(jìn)制基數(shù)為基數(shù),以所述基數(shù)的整數(shù)次冪為權(quán)值,以所述單個字符的ASCII碼值為加權(quán)系數(shù),按權(quán)值和加權(quán)系數(shù)展開求和,其中以所述單個字符在相應(yīng)字符串中所處的位置序號為所述基數(shù)整數(shù)次冪中的冪指數(shù)。
本裝置實施例與上述實施例一中的特征相互對應(yīng),因此可參見實施例一 中方法流程部分的相關(guān)描述,在此不再贅述。
實施例四
如圖14所示,為本申請實施例的一種字符串值域切分裝置,包含:字符串提取模塊11、字符串轉(zhuǎn)化模塊21、切分步長獲取模塊31、切分節(jié)點獲取模塊41、字符串還原切分模塊51,其中:
所述字符串提取模塊11,用于提取待抽取數(shù)據(jù)的主關(guān)鍵字中ASCII碼值最大的字符串為第一字符串、ASCII碼值最小的字符串為第二字符串;
所述字符串轉(zhuǎn)化模塊21,用于根據(jù)預(yù)置的進(jìn)制基數(shù),分別結(jié)合第一、第二字符串中相應(yīng)的單個字符所處的位置序號將所述第一、第二字符串轉(zhuǎn)化為完全不失真的第一大整數(shù)和第二大整數(shù),其中該所述位置序號是單個字符在相應(yīng)字符串中的排列次序;
所述切分步長獲取模塊31,用于根據(jù)所述第一大整數(shù)和第二大整數(shù)求取范圍差,判定根據(jù)預(yù)置的切分份數(shù)對所述范圍差進(jìn)行均等切分結(jié)果為非整數(shù)時,根據(jù)所述范圍差對所述切分份數(shù)進(jìn)行取整及取余操作,以所述取整操作的結(jié)果為第一步長,以所述第一步長加1為第二步長,將所述第一步長、第二步長作為切分步長;
所述切分節(jié)點獲取模塊41,用于根據(jù)所述第二大整數(shù)與切分步長進(jìn)行累加求和,得到每個切分節(jié)點所對應(yīng)的大整數(shù),其中,該切分節(jié)點由所述均等切分得到;
所述字符串還原切分模塊51,用于根據(jù)所述進(jìn)制基數(shù)將所述每個切分節(jié)點對應(yīng)的大整數(shù)還原成ASCII碼值,根據(jù)ASCII碼值得到相應(yīng)的每個切分節(jié)點的節(jié)點字符串,根據(jù)所述節(jié)點字符串對待抽取數(shù)據(jù)進(jìn)行切分。
如圖15所示,所述字符串值域切分裝置,還包含:進(jìn)制基數(shù)設(shè)置模塊61,與所述字符串轉(zhuǎn)化模塊21、所述字符串還原切分模塊51相連,用于根據(jù)ASCII碼所能代表的總字符數(shù)設(shè)置得到所述進(jìn)制基數(shù);或者,根據(jù)所述第一、第二字符串的單個字符對應(yīng)的ASCII碼值中最小數(shù)值和最大數(shù)值設(shè)置得到所述進(jìn)制基數(shù)。
當(dāng)根據(jù)所述第一、第二字符串的單個字符對應(yīng)的ASCII碼值中最小數(shù)值和最大數(shù)值設(shè)置得到所述進(jìn)制基數(shù)時,所述進(jìn)制基數(shù)設(shè)置模塊61進(jìn)一步用于查找所述第一字符串的單個字符對應(yīng)的ASCII碼值中最小數(shù)值為第一最小值、最大數(shù)值為第一最大值,查找所述第二字符串的單個字符對應(yīng)的ASCII碼值中最小數(shù)值為第二最小值、最大數(shù)值為第二最大值;將所述第一最小值和第二最小值中較小的一個設(shè)置為綜合最小值,將所述第一最大值和第二最大值中較大的一個設(shè)置為綜合最大值,以綜合最大值減去綜合最小值再加1設(shè)置所述進(jìn)制基數(shù)。
當(dāng)根據(jù)ASCII碼所能代表的總字符數(shù)設(shè)置得到所述進(jìn)制基數(shù)時,所述字符串還原切分模塊51,進(jìn)一步用于采用輾轉(zhuǎn)相除法,用所述切分節(jié)點所對應(yīng)的大整數(shù)對所述進(jìn)制基數(shù)進(jìn)行第一次取整及取余操作,將所述第一次取余操作的結(jié)果作為第一個整數(shù);根據(jù)所述第一次取整操作的結(jié)果,對所述進(jìn)制基數(shù)進(jìn)行第二次取整及取余操作,將所述第二次取余操作的結(jié)果作為第二個整數(shù);根據(jù)所述第二次取整操作的結(jié)果再次執(zhí)行取整及取余操作直至第N次取整操作的結(jié)果為零,對所述第一個整數(shù)、第二個整數(shù)直至第N個整數(shù)進(jìn)行倒序排列,所述倒序排列的結(jié)果是所述切分節(jié)點對應(yīng)的節(jié)點字符串的ASCII碼值。
當(dāng)根據(jù)所述第一、第二字符串的單個字符對應(yīng)的ASCII碼值中最小數(shù)值和最大數(shù)值設(shè)置得到所述進(jìn)制基數(shù)時,所述字符串還原切分模塊51進(jìn)一步用于采用輾轉(zhuǎn)相除法,用所述切分節(jié)點所對應(yīng)的大整數(shù)對所述進(jìn)制基數(shù)進(jìn)行第一次取整及取余操作,將所述第一次取余操作的結(jié)果減1再加上所述綜合最小值作為第一個整數(shù);根據(jù)所述第一次取整操作的結(jié)果,對所述進(jìn)制基數(shù)進(jìn)行第二次取整及取余操作,將所述第二次取余操作的結(jié)果減1再加上所述綜合最小值作為第二個整數(shù);根據(jù)所述第二次取整操作的結(jié)果再次執(zhí)行取整及取余操作直至第N次取整操作的結(jié)果為零,對所述第一個整數(shù)、第二個整數(shù)直至第N個整數(shù)進(jìn)行倒序排列,所述倒序排列的結(jié)果是所述切分節(jié)點對應(yīng)的節(jié)點字符串的ASCII碼值。
所述切分步長獲取模塊31,進(jìn)一步用于判斷所述切分份數(shù)與所述范圍差的大小,當(dāng)所述范圍差小于所述切分份數(shù)時,無法切分到指定的份數(shù),提示 切分失敗或者調(diào)整所述切分份數(shù)為所述范圍差的值,根據(jù)調(diào)整后的所述切分份數(shù)對所述范圍差繼續(xù)進(jìn)行均等切分。
所述切分步長獲取模塊31,判定根據(jù)預(yù)置的切分份數(shù)對所述范圍差進(jìn)行均等切分結(jié)果為非整數(shù)時,進(jìn)一步用于根據(jù)所述范圍差對所述切分份數(shù)進(jìn)行取整及取余操作,以所述取整操作的結(jié)果為第一步長,以所述第一步長加1為第二步長,將所述第一步長、第二步長作為切分步長;其中,切分得到的第一份數(shù)以及的第二份數(shù)之和等于所述預(yù)置的切分份數(shù),所述第一份數(shù)以所述第一步長切分得到,所述第二份數(shù)以所述第二步長切分得到,并且所述第二份數(shù)等于所述取余操作的結(jié)果,切分得到的第一份數(shù)以及第二份數(shù)之和等于所述預(yù)置的切分份數(shù),其中,所述第一份數(shù)以所述第一步長切分得到,所述第二份數(shù)以所述第二步長切分得到,并且所述第二份數(shù)等于所述取余操作的結(jié)果。
所述切分節(jié)點獲取模塊41,進(jìn)一步用于根據(jù)所述第二大整數(shù)與所述第一步長相加得到第1切分節(jié)點對應(yīng)的大整數(shù);根據(jù)所述第1切分節(jié)點對應(yīng)的大整數(shù)與所述第一步長相加得到第2切分節(jié)點對應(yīng)的大整數(shù),直到得到第N切分節(jié)點對應(yīng)的大整數(shù),所述N等于所述第一份數(shù);用第N切分節(jié)點對應(yīng)的大整數(shù)與所述第二步長相加得到第N+1切分節(jié)點對應(yīng)的大整數(shù);用所述第N+1切分節(jié)點對應(yīng)的大整數(shù)與所述第二步長相加得到第N+2切分節(jié)點對應(yīng)的大整數(shù),直到得到第N+M-1切分節(jié)點對應(yīng)的大整數(shù),所述M等于所述第二份數(shù)。
所述字符串轉(zhuǎn)化模塊21,進(jìn)一步用于以所述進(jìn)制基數(shù)為基數(shù),以所述基數(shù)的整數(shù)次冪為權(quán)值,以所述單個字符的ASCII碼值為加權(quán)系數(shù),按權(quán)值和加權(quán)系數(shù)展開求和,其中以所述單個字符在相應(yīng)字符串中所處的位置序號為所述基數(shù)整數(shù)次冪中的冪指數(shù)。
本裝置實施例與上述實施例一、二中的特征相互對應(yīng),因此可參見實施例一、二中方法流程部分的相關(guān)描述,在此不再贅述。
上述說明示出并描述了本發(fā)明的若干優(yōu)選實施例,但如前所述,應(yīng)當(dāng)理解本發(fā)明并非局限于本文所披露的形式,不應(yīng)看作是對其他實施例的排除, 而可用于各種其他組合、修改和環(huán)境,并能夠在本文所述發(fā)明構(gòu)想范圍內(nèi),通過上述教導(dǎo)或相關(guān)領(lǐng)域的技術(shù)或知識進(jìn)行改動。而本領(lǐng)域人員所進(jìn)行的改動和變化不脫離本發(fā)明的精神和范圍,則都應(yīng)在本發(fā)明所附權(quán)利要求的保護(hù)范圍內(nèi)。