專利名稱:用于文檔重構(gòu)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及文檔重構(gòu)。特別地,本發(fā)明涉及用于從未結(jié)構(gòu)化文檔定義結(jié)構(gòu)化文檔的方法、用于提高這種處理的效率的方法以及用于改善對結(jié)構(gòu)化文檔的顯示和與結(jié)構(gòu)化文檔的交互的方法。
背景技術(shù):
文檔通常被定義為僅僅是在頁面上的規(guī)定位置處繪出的本原元素(primitive element)的集合。例如,PDF(便攜式文檔格式)文件可能不具有對結(jié)構(gòu)的定義,而只有在各個位置處繪制圖示符(glyph)、形狀和位圖的指令。用戶可以在標(biāo)準(zhǔn)監(jiān)視器上瀏覽這種文檔,并且推導(dǎo)出結(jié)構(gòu)。然而,由于這種文件僅僅是本原元素的集合,所以文檔瀏覽應(yīng)用不會了解文檔的預(yù)期結(jié)構(gòu)。例如,表格顯示為一系列線條和/或矩形,其中線條之間具有文本,人類瀏覽者可以將其識別為表格。然而,顯示文檔的應(yīng)用沒有指示文本分組基于行和列彼此具有關(guān)系,這是因為文檔不包括這種信息。 類似地,應(yīng)用沒有關(guān)于整個頁面的文本流(例如,從一列到下一列的流,或者在嵌入圖像周圍的流)的指示,或者關(guān)于可以由人類用戶即時確定的各種其他重要特征的指示。當(dāng)用戶僅僅是在標(biāo)準(zhǔn)監(jiān)視器上瀏覽文檔時,缺少對文檔結(jié)構(gòu)的了解不總是個問題。然而,對于使得閱讀者能夠訪問文件并對其進(jìn)行編輯,就像該文件是由字處理器、圖像編輯應(yīng)用等生成的且具有元素之間的關(guān)系和結(jié)構(gòu)的文檔一樣,這通常是頗為重要的。因此,需要能夠重構(gòu)未結(jié)構(gòu)化的文檔的方法。類似地,需要利用這種重構(gòu)文檔結(jié)構(gòu)來使對文檔的顯示理想化(例如,對于小屏幕設(shè)備,其中無法實現(xiàn)在屏幕上一起顯示整個文檔)或者使得能夠智能地選擇文檔的元素的方法。在現(xiàn)代社會中,越來越多的計算應(yīng)用轉(zhuǎn)向手持式設(shè)備(例如,蜂窩式電話、媒體播放器,等等)。因此,文檔重構(gòu)技術(shù)必須在這種設(shè)備上可行,這種設(shè)備通常具有比標(biāo)準(zhǔn)個人計算機(jī)小的計算能力。然而,文檔重構(gòu)通常采用相當(dāng)多的計算和存儲器密集過程(例如,集群分析),并且使用大塊的存儲器。因此,還需要允許總的來說在文檔重構(gòu)中且具體而言在集群分析中的更高效率的技術(shù)。
發(fā)明內(nèi)容
本發(fā)明的不同實施例采用不同的技術(shù)來分析未結(jié)構(gòu)化文檔以定義結(jié)構(gòu)化文檔。在一些實施例中,未結(jié)構(gòu)化文檔包括眾多本原元素,但是不包括結(jié)構(gòu)性元素,該結(jié)構(gòu)性元素規(guī)定本原元素之間的結(jié)構(gòu)性關(guān)系和/或基于這些本原元素的文檔的結(jié)構(gòu)性屬性。因此,為了定義結(jié)構(gòu)化文檔,一些實施例采用未結(jié)構(gòu)化文檔的本原元素來識別未結(jié)構(gòu)化文檔的各種幾何屬性,然后采用所識別出的幾何屬性和本原元素的其他屬性來定義結(jié)構(gòu)性元素,例如相關(guān)聯(lián)的本原元素(例如,字、段落、連結(jié)圖,等等)、表格、導(dǎo)引(guide)、裝訂線(gutter)等等,以及定義閱讀本原元素和結(jié)構(gòu)性元素的流(flow)。如所提到的,一些實施例采用本原元素來識別各種幾何屬性。例如,一些實施例提供識別多組本原元素之間的邊界和由所述邊界界定的區(qū)域的方法。該方法采用識別出的區(qū)域來定義用于該文檔的結(jié)構(gòu)性元素,并且基于本原元素和結(jié)構(gòu)性元素定義結(jié)構(gòu)化文檔。在一些實施例中,定義結(jié)構(gòu)性元素包括單獨(dú)地分析每個區(qū)域,以生成特定區(qū)域中的多組本原元素之間的關(guān)聯(lián)。在一些實施例中,定義結(jié)構(gòu)化文檔包括識別所識別出的區(qū)域之間的分級關(guān)系。一些實施例提供用于分析包括眾多字的未結(jié)構(gòu)化文檔的方法,其中每個字是相關(guān)聯(lián)的圖示符集,并且每個圖示符具有定位坐標(biāo)。該方法識別定位值的集群,其中每個定位值與一個字相關(guān)聯(lián)、是用于字對準(zhǔn)的基礎(chǔ)、并且是從該字的圖示符的定位坐標(biāo)導(dǎo)出的?;谒R別出的定位值的集群,該方法定義用于字的邊界元素集,所述邊界元素識別用于字的對準(zhǔn)導(dǎo)引集。該方法基于圖示符和定義的邊界元素定義結(jié)構(gòu)化文檔。一些實施例還定義一對邊界元素之間的空白空間的至少一個區(qū)域,并且還基于空白空間的區(qū)域來定義結(jié)構(gòu)化文檔。一些實施例通過采用密度集群來識別定位值的集群。一些實施例采用本原元素的識別出的幾何屬性和其他屬性,來定義結(jié)構(gòu)性元素, 以及定義閱讀本原元素和結(jié)構(gòu)性元素的流。例如,一些實施例提供了一種用于分析包括眾多圖示符的未結(jié)構(gòu)化文檔的方法,其中每個圖示符在未結(jié)構(gòu)化文檔中具有一個位置?;趫D示符的位置,該方法生成不同圖示符集之間的關(guān)聯(lián),以將不同圖示符集識別為不同的字。 該方法生成不同字集之間的關(guān)聯(lián),以將不同字集識別為不同的段落。該方法定義不鄰接的段落之間的關(guān)聯(lián),以定義閱讀段落的順序。為了生成不同字集之間的關(guān)聯(lián)以將不同字集識別為不同的段落,一些實施例生成不同字集之間的關(guān)聯(lián)作為不同的文本行,并且生成不同文本行集之間的關(guān)聯(lián)作為不同的段落。一些實施例提供了一種方法,該方法識別圖示符集之間的邊界,并識別出幾個所述邊界形成表格。該方法基于所述表格定義包括布置在若干行和列中的若干單元的表格結(jié)構(gòu)性元素,其中每個單元包括相關(guān)聯(lián)的圖示符集。一些實施例通過識別形成更大矩形形狀和包含在更大矩形形狀內(nèi)的若干矩形形狀的邊界集,來識別出邊界形成表格。在一些實施例中,基于形成單元的所述相關(guān)聯(lián)的圖示符集的位置來推斷至少一些識別出的邊界。一些實施例提供了一種用于分析包括眾多本原圖形元素的未結(jié)構(gòu)化文檔的方法, 其中每個本原圖形元素被定義為單個對象。所述文檔具有繪制順序,該繪制順序指示繪制本原圖形元素的順序。該方法按照繪制順序識別接連的本原圖形元素之間的位置關(guān)系。基于所述位置關(guān)系,該方法從若干本原圖形元素定義單個結(jié)構(gòu)性圖形元素。一些實施例通過計算包括按照繪制順序相繼的第一和第二本原圖形元素的結(jié)構(gòu)性圖形元素的尺寸,來識別所述第一與第二本原圖形元素之間的位置關(guān)系。一些實施例提供了用于更高效地進(jìn)行幾何分析和文檔重構(gòu)的方法。例如,一些實施例提供了一種方法,該方法提供用于定義包括多個本原元素的結(jié)構(gòu)化文檔的一組缺省文檔重構(gòu)操作。該方法提供了分級的簡檔(profile)集合,其中每個簡檔包括(i) 一組文檔重構(gòu)結(jié)果和(ii)當(dāng)中間文檔重構(gòu)結(jié)果與所述簡檔的潛在文檔重構(gòu)結(jié)果相匹配時用于修改文檔重構(gòu)操作的結(jié)果。來自所述分級中的較低級別的簡檔的指令撤銷(override)來自較高級別的簡檔的指令。在一些實施例中,用于特定簡檔的指令包括所述分級的簡檔集合中位于較低級別的簡檔子集,該簡檔子集應(yīng)在中間文檔重構(gòu)結(jié)果與用于簡檔的潛在文檔重構(gòu)結(jié)構(gòu)匹配時被測試。
一旦定義了結(jié)構(gòu)化文檔,一些實施例提供各種用于使與結(jié)構(gòu)化文檔的用戶交互理想化的技術(shù)。例如,一些實施例提供用于顯示結(jié)構(gòu)化文檔的方法,所述結(jié)構(gòu)化文檔包括通過分析未結(jié)構(gòu)化文檔而構(gòu)建的結(jié)構(gòu)性元素的分級。該方法在設(shè)備(例如,小屏幕設(shè)備)上顯示結(jié)構(gòu)化文檔。該方法接收文檔中感興趣的位置,并基于所述感興趣的位置將分級中的結(jié)構(gòu)性元素識別為感興趣的區(qū)域。該方法修改對文檔的顯示,以突出顯示識別出的感興趣的區(qū)域。一些實施例通過以下操作來識別結(jié)構(gòu)性元素識別包括所述感興趣位置的分級的最低級別處的結(jié)構(gòu)性元素,以及識別包括在最低級別處識別出 的結(jié)構(gòu)性元素的分級的較高級別處的結(jié)構(gòu)性元素,直到達(dá)到適合作為感興趣區(qū)域的結(jié)構(gòu)性元素。一些實施例還接收用以從感興趣區(qū)域移動的輸入,并修改對文檔的顯示以突出顯示結(jié)構(gòu)性相關(guān)的感興趣區(qū)域。一些實施例提供了一種用于定義對包括眾多圖示符的未結(jié)構(gòu)化文檔中的文本的選擇的方法。該方法識別相關(guān)聯(lián)的圖示符集以及規(guī)定閱讀這些圖示符的流的閱讀順序。該方法顯示文檔,并接收用于選擇所顯示文檔內(nèi)的文本的起始點和終止點。該方法通過采用所識別出的圖示符集和預(yù)期的閱讀流來定義從所述起始點到所述終止點對文本的選擇。在一些實施例中,所述相關(guān)聯(lián)的圖示符集是段落,閱讀順序規(guī)定從不鄰接的第一段落到第二段落的閱讀流。一些實施例提供了提高幾何分析和文檔重構(gòu)處理的效率的方法。一些實施例采用集群分析用于幾何分析和/或文檔重構(gòu),其可以是計算密集處理。因此,一些實施例提供了一種定義未結(jié)構(gòu)化文檔的結(jié)構(gòu)的方法,該未結(jié)構(gòu)化文檔包括眾多本原元素,這些本原元素是按照它們在文檔中的位置來定義的。該方法識別出一個成對的最接近本原元素的分組, 并按照從最近對到最遠(yuǎn)對的順序?qū)λ龀蓪Φ谋驹剡M(jìn)行排序。該方法存儲識別哪些成對的本原元素足夠遠(yuǎn)離以形成分隔(partition)的單個值。該方法采用存儲的值來識別和分析所述分隔,以定義文檔的結(jié)構(gòu)性元素。一些實施例還提供了利用高效的數(shù)據(jù)結(jié)構(gòu)的方法。例如,一些實施例提供幾種不同的用于分析和操縱包括眾多本原元素的未結(jié)構(gòu)化文檔的處理。一些實施例還提供了對與本原元素相關(guān)聯(lián)的數(shù)據(jù)的存儲。至少一些所述數(shù)據(jù)存儲在與所述處理分開的存儲器空間中,并由至少兩個不同的處理共享。所述處理通過利用對所述數(shù)據(jù)的引用來訪問所述數(shù)據(jù)。 所述數(shù)據(jù)不會被處理復(fù)制。
本發(fā)明的新穎特征在所附權(quán)利要求中闡述。然而,為了解釋,在附圖中闡述了本發(fā)明的若干實施例。圖1例示了一些實施例的整體重構(gòu)流。圖2例示了文檔的頁面和來自對所述頁面執(zhí)行的一些實施例的幾何分析和文檔重構(gòu)的各種結(jié)果。圖3概念性地例示了一些實施例的用于識別文檔的頁面的區(qū)并產(chǎn)生用于頁面的區(qū)樹的處理。圖4例示了在一些實施例中的頁面和用于識別所述頁面的區(qū)并產(chǎn)生用于所述頁面的區(qū)樹的序列。圖5例示了包括若干區(qū)的文檔的頁面。
圖6例示了包括區(qū)邊界圖形和多個區(qū)的頁面,其包括旋轉(zhuǎn)分組。圖7例示了用于圖5的頁面的一些實施例的區(qū)樹。圖8概念性地例示了一些實施例的用于定義頁面上的旋轉(zhuǎn)分組的處理。圖9概念性地例示了一些實施例的用于識別區(qū)邊界和相交部的處理。圖10例示了包括各種圖形和文本的頁面。圖11例示了用于圖10的頁面的區(qū)邊界區(qū)間(interval)和相交部。圖12概念性地例示了一些實施例的用于識別區(qū)的處理。圖13和14例示了應(yīng)用圖12的處理以識別圖10的頁面的區(qū)。圖15概念性地例示了一些實施例的用于生成區(qū)樹的處理。圖16例示了來自圖10的頁面的區(qū)按照尺寸被排序并放置在節(jié)點圖中。圖17概念性地例示了一些實施例的區(qū)分析應(yīng)用的軟件構(gòu)架。圖18例示了一些實施例的用于識別文檔中的導(dǎo)引和裝訂線的整體處理。圖19例示了具有兩列文本的頁面以及針對頁面識別出的導(dǎo)引和裝訂線。圖20概念性地例示了一些實施例的用于執(zhí)行密度集群的處理。圖21概念性地例示了一些實施例的用于確定左對準(zhǔn)導(dǎo)引的處理。圖22至M例示了對頁面上的左對準(zhǔn)導(dǎo)弓I的識別。圖25概念性地例示了一些實施例的用于確定右對準(zhǔn)導(dǎo)引的處理。圖沈概念性地例示了一些實施例的用于確定文檔的區(qū)域的裝訂線的處理。圖27至四例示了對頁面上的裝訂線的識別。圖30概念性地例示了一些實施例的導(dǎo)引和裝訂線分析應(yīng)用的軟件架構(gòu)。圖31概念性地例示了一些實施例的用于確定文檔的布局和流的處理。圖32例示了一些實施例的對文檔的頁面的布局和流信息的確定的序列。圖33概念性地例示了一些實施例的用于識別和合并文本行的處理。圖34例示了具有六個交疊文本行分組的頁面。圖35例示了對來自圖34的文本行分組的合并。圖36概念性地例示了一些實施例的用于執(zhí)行差值集群的處理。圖37例示了差值集群的示例。圖38概念性地例示了一些實施例的用于拆分文本行的處理。圖39例示了示出對哪里拆分頁面上的文本行的識別的序列。圖40概念性地例示了一些實施例的用于將文本行分組成段落的處理。圖41例示了對頁面上的段落的識別。圖42概念性地例示了一些實施例的用于識別文檔的一部分中的列和布局的處理。圖43和44例示了兩個不同頁面上的段落。圖45和46例示了針對圖43和44的頁面產(chǎn)生流圖。圖47概念性地例示了一些實施例的布局和流分析應(yīng)用的軟件架構(gòu)。圖48概念性地例示了一些實施例的用于識別文檔的一部分中的表格的處理。圖49例示了具有完整邊界的表格的示例。圖50例示了具有連接的但不完整的邊界的表格的示例。
圖51例示了沒有邊界的表格的示例。圖52例示了具有中斷的邊界的表格的示例。圖53概念性地例示了一些實施例的用于識別具有完整邊界集合的表格并定義所識別出的表格中的單元、行和列的處理。圖M例示了包括具有完整邊界的表格的頁面。圖55概念性地例示了一些實施例的用于識別和重構(gòu)具有連接邊界集合的表格的處理。圖56例示了示出對具有連接邊界集合的表格的識別和重構(gòu)的序列。圖57概念性地例示了一些實施例的用于識別和重構(gòu)沒有邊界或者具有中斷的邊界的表格的處理。圖58至60例示了對頁面應(yīng)用圖57的處理以識別具有中斷的邊界的表格。圖61概念性地例示了一些實施例的表格識別應(yīng)用的軟件架構(gòu)。圖62概念性地例示了一些實施例的用于將單獨(dú)的圖連結(jié)成連結(jié)圖的處理。圖63例示了對頁面上的圖的連結(jié)。圖64概念性地例示了一些實施例的用于執(zhí)行界線(bound)集群以識別應(yīng)被連結(jié)的圖以及連結(jié)這些圖的處理。圖65例示了兩個頁面,其中每個頁面具有兩個圖形對象,針對這兩個圖形對象計算展度(spread)。圖66例示了一些實施例的用于將集群處理成子序列的處理。圖67概念性地例示了一些實施例的用于識別應(yīng)被連結(jié)的圖并將這些圖關(guān)聯(lián)為一個圖形的圖連結(jié)應(yīng)用。圖68概念性地例示了一些實施例的采用簡檔來調(diào)整內(nèi)容處理以適應(yīng)內(nèi)容類型的處理。圖69例示了適合#10封皮(envelope)的簡檔的文檔。圖70例示了一些實施例的分級簡檔集合。圖71概念性地例示了一些實施例的用于根據(jù)分級簡檔處理內(nèi)容的處理。圖72概念性地例示了一些實施例的用于采用分級簡檔化來執(zhí)行文檔重構(gòu)的處理。圖73例示了一些實施例如何識別實現(xiàn)特定方法的最低級別的活動(active)簡檔。圖74至77例示了一些實施例的用于四個不同頁面的示例頁面簡檔匹配處理。圖78概念性地例示了在一些實施例中用于基于對感興趣的位置的識別來顯示文檔的處理。圖79例示了根據(jù)本發(fā)明一些實施例的在其中選擇了感興趣的位置且修改了顯示的小屏幕設(shè)備上的序列。圖80例示了一些實施例的用于識別感興趣的區(qū)域并應(yīng)用轉(zhuǎn)換以在顯示設(shè)備上繪制感興趣的區(qū)域的第一具體處理。圖81例示了一些實施例的用于識別感興趣的區(qū)域并應(yīng)用轉(zhuǎn)換以在顯示設(shè)備上繪制感興趣的區(qū)域的第二具體處理。
圖82概念性地例示了一些實施例的用于顯示語義地重構(gòu)的文檔的處理。圖83例示了一些實施例的對圖82的處理的應(yīng)用。圖84概念性地例示了一些實施例的用于在語義地重構(gòu)的文檔中的區(qū)域之間進(jìn)行導(dǎo)航的處理。圖85概念性地例示了一些實施例的用于針對小屏幕設(shè)備修改語義地重構(gòu)的文檔的布局的處理。圖86例示了根據(jù)本發(fā)明一些實施例的文檔的頁面,如同它將在大屏幕上顯示的那樣,以及該頁面的一部分在小屏幕設(shè)備上的顯示。圖87概念性地例示了一些實施例的用于確定對語義地重構(gòu)的文檔中的文本的選擇的處理。圖88例示了根據(jù)一些實施例的對語義地重構(gòu)的文檔的頁面上的文本的選擇的序列。圖89例示了一些實施例的用于定義對語義地重構(gòu)的文檔中的文本的選擇的第一具體處理。圖90例示了用于在語義地重構(gòu)的文檔的頁面上進(jìn)行選擇的第一起始點和第一終止點。圖91例示了根據(jù)圖89的處理由圖90中的起始點和終止點定義的選擇。圖92例示了用于在語義地重構(gòu)的文檔的頁面上進(jìn)行選擇的第二起始點和第二終止點。圖93例示了根據(jù)圖89的處理由圖92的起始點和終止點定義的選擇。圖94例示了一些實施例的用于定義對語義地重構(gòu)的文檔中的文本的選擇的第二具體處理。圖95例示了根據(jù)圖94的處理由圖90的起始點和終止點定義的選擇。圖96例示了根據(jù)圖94的處理由圖92的起始點和終止點定義的選擇。圖97概念性地例示了一些實施例的用于采用集群分析在資源受限的設(shè)備上語義地重構(gòu)文檔的處理。圖98例示了一些實施例的語義地重構(gòu)文檔的序列。圖99概念性地例示了一些實施例的用于通過采用間接排序的陣列分隔數(shù)據(jù)集的處理。圖100例示了對具有9個數(shù)據(jù)項的數(shù)據(jù)集的分隔。圖101概念性地例示了一些實施例的用于在多個距離尺度(distance scale)下同時執(zhí)行集群分析的處理。圖102概念性地例示了一些實施例的用于執(zhí)行集群分析的集群分析應(yīng)用的軟件構(gòu)架。圖103概念性地例示了一些實施例的用于高效地重構(gòu)文檔的處理。圖104例示了根據(jù)圖103的處理解析和分析文檔的序列。圖105例示了根據(jù)本發(fā)明一些實施例的排序數(shù)據(jù)的方式。圖106概念性地例示了 API,其在采用高效的存儲器管理技術(shù)的同時執(zhí)行文檔重構(gòu)處理。
圖107概念性地例示了一些實施例的用于重構(gòu)文檔、顯示文檔和與文檔交互的應(yīng)用的軟件架構(gòu)。圖108概 念性地例示了一些實施例的用于制造存儲諸如圖107中描述的應(yīng)用的計算機(jī)程序的計算機(jī)可讀介質(zhì)的處理。圖109概念性地例示了實現(xiàn)本發(fā)明一些實施例的計算機(jī)系統(tǒng)。
具體實施例方式在以下描述中,出于解釋的目的給出了眾多細(xì)節(jié)。然而,本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)認(rèn)識到,本發(fā)明可以在不采用這些具體細(xì)節(jié)的情況下應(yīng)用。例如,在一些情況下,下面描述的技術(shù)被描述為按照特定順序發(fā)生。然而,在一些實施例中,按照與所描述的順序不同的順序執(zhí)行所述技術(shù)。此外,盡管這些技術(shù)是針對從左向右讀的語言(例如,英語)描述的,但是本領(lǐng)域普通技術(shù)人員將認(rèn)識到這些技術(shù)很容易改造為適合從右向左讀的語言。I.概覽本發(fā)明的一些實施例提供了用于從未結(jié)構(gòu)化文檔定義結(jié)構(gòu)化文檔的新穎方法。在一些實施例中,未結(jié)構(gòu)化文檔是被定義為僅包括諸如形狀(例如,矢量圖)、圖像(例如,位圖)和圖示符的本原元素的文檔。在一些實施例中,圖示符是對文本字符(例如,字母、數(shù)字、標(biāo)點符號或者其他內(nèi)嵌(inline)字符)、字符集或者字符的一部分的可視表示。在一些實施例中,圖示符可以是可縮放矢量圖的預(yù)定集合,包括用于圖示符的輪廓(outline)的路徑定義。在一些實施例中,圖示符可以是針對各種尺寸優(yōu)化的預(yù)定的柵格圖像(raster image)或者柵格圖像集合。作為示例,字符“i”可以由單個圖示符表示,該圖示符是具有兩個子路徑的路徑,其中一個子路徑用于點的輪廓,而另一子路徑用于更低部分的輪廓。作為另一示例,三個字符“ffi”的組合在成序列出現(xiàn)時有時由稱為連字符(ligature)的單個圖示符表示,該圖示符是按照與字符單獨(dú)地出現(xiàn)的方式略微不同的方式繪制的。作為第三個示例,諸如1”的重讀字符有時由多于一個的圖示符表示(例如,一個用于字符,一個用于重讀)并且有時由單個圖示符表示(將重讀與字符相結(jié)合)。一些實施例的未結(jié)構(gòu)化文檔沒有規(guī)定本原元素之間的任何關(guān)系或關(guān)聯(lián),而在其他實施例中,它規(guī)定最小量的這種關(guān)系和關(guān)聯(lián)。在一些實施例中,未結(jié)構(gòu)化文檔可以具有一定量的結(jié)構(gòu),但是該結(jié)構(gòu)是不可識別的或者不可依賴的。在一些實施例中,未結(jié)構(gòu)化文檔具有未知的結(jié)構(gòu)或者被假定為未結(jié)構(gòu)化的。一些實施例從未結(jié)構(gòu)化文檔生成結(jié)構(gòu)化文檔,該結(jié)構(gòu)化文檔包括本原元素之間的關(guān)聯(lián)和關(guān)系、本原元素的分組和排序以及本原元素的分組的性質(zhì)。例如,一些實施例采用未結(jié)構(gòu)化文檔的本原元素,來識別未結(jié)構(gòu)化文檔的各種幾何屬性,并采用這些識別出的幾何屬性(以及本原元素的其他屬性)來定義結(jié)構(gòu)性元素。一些實施例的結(jié)構(gòu)性元素包括相關(guān)聯(lián)的本原元素(例如,字、段落、連結(jié)圖,等等)、導(dǎo)引、裝訂線、文本流、表格,等等。在一些實施例中,這些結(jié)構(gòu)性元素按照分級的方式相關(guān)(例如,段落包括文本行、文本行包括字, 而字包括本原圖示符)。在一些實施例中,結(jié)構(gòu)化文檔有兩個用途——它識別相關(guān)聯(lián)的元素 (例如,構(gòu)成表格的元素),并且它識別本原元素的流順序(即,預(yù)計人將閱讀文檔中的本原元素的順序)。在接收到未結(jié)構(gòu)化文檔時,一些實施例首先將文檔解析為其構(gòu)成元素(例如,本原元素及其相關(guān)聯(lián)的信息,例如坐標(biāo)定位、繪制順序,等等)。例如,在未結(jié)構(gòu)化文檔中大塊文本可以被定義為多個字符圖示符,其中每一個具有其錨點將放置在特定頁面上的X坐標(biāo)和y坐標(biāo),以及定義每個圖示符的尺寸的縮放因子(以及任何其他將要被應(yīng)用的線性轉(zhuǎn)換),每個圖示符按照特定順序(相對于當(dāng)一個圖示符覆蓋另一個圖示符時執(zhí)行的混合操作)被繪制在頁面上。一些實施例然后對本原元素執(zhí)行幾何分析,以定義文檔的幾何屬性。 例如,一些實施例分析本原元素,以識別本原元素之間的邊界以及由所述邊界界定的區(qū)域。圖1例示了一些實施例的整體流程。如圖所示,初始(在一些實施例中,在解析以識別本原元素之后)由幾何分析模塊110來分析文檔100。幾何分析模塊110分析文檔,以識別諸如邊界和由邊界界定的區(qū)域的幾何屬性。在一些實施例中,區(qū)域包括由諸如直線和窄矩形(即,特定本原形狀和圖像)的本原元素來界定的區(qū)。圖2例示了進(jìn)入的文檔的頁面200以及來自幾何分析和文檔重構(gòu)的各種結(jié)果。進(jìn)入的文檔是未結(jié)構(gòu)化文檔,該文檔具有人在瀏覽該文檔時將識別為文本、邊界、表格和圖形對象的本原元素集合。分析結(jié)果205例示了幾何分析模塊110具有識別出的由文檔200中的邊界250隔開的兩個區(qū)Z1 240和Z2 245。在一些實施例中,由幾何分析模塊110識別出的邊界還包括對準(zhǔn)導(dǎo)引。在一些實施例中,對準(zhǔn)導(dǎo)引是由字的開始或結(jié)尾形成的垂直邊緣(例如,在左對準(zhǔn)文本列的左邊緣)。類似地,在一些實施例中,由幾何分析識別出的區(qū)域包括多組圖示符之間(即,導(dǎo)引之間)的未填充空白空間的間隔。在一些實施例中這些間隔被稱為裝訂線。分析結(jié)果210例示了位于第一列文本的左邊緣處的左對準(zhǔn)導(dǎo)引212以及跨兩列文本之間的空白空間的裝訂線214(為了簡便起見,未示出其他導(dǎo)引和文本列)。如圖1所例示的,一些實施例的語義分析模塊110的輸出是區(qū)105、導(dǎo)引115和裝訂線125。從幾何分析模塊110輸出的數(shù)據(jù)被發(fā)送到文檔重構(gòu)模塊120。文檔重構(gòu)模塊120 繼續(xù)分析未結(jié)構(gòu)化文檔以定義結(jié)構(gòu)化文檔的處理。在一些實施例中,文檔重構(gòu)模塊120生成本原元素之間的關(guān)聯(lián),以定義諸如文本、表格和形狀的鄰接結(jié)構(gòu)性元素。一些實施例還定義結(jié)構(gòu)性元素的分級以及結(jié)構(gòu)性元素之間的關(guān)系。例如,在一些實施例中,文檔重構(gòu)模塊120生成多個圖示符、多個圖示符集、多組圖示符集等之間的關(guān)聯(lián)。一些實施例將單獨(dú)的圖示符關(guān)聯(lián)成字,將字關(guān)聯(lián)成文本行,將文本行關(guān)聯(lián)成段落,等等。分析結(jié)果215例示了在第一列文本內(nèi)識別出單獨(dú)的行217和段落 219。文檔重構(gòu)模塊120還識別圖示符的布局,以定義圖示符的文本流。具體而言,為了定義文本流,一些實施例識別圖示符(或者圖示符集)的閱讀順序,該順序表示預(yù)計人將閱讀頁面上的圖示符的順序(例如,從第一列的底部到第二列的頂部,然后跳過中央的單獨(dú)的文本框,等等)。分析結(jié)果220例示了在文檔200內(nèi)識別出兩列,并且閱讀流222是從第一列的底部到第二列的頂部。在一些實施例中,對布局和流的識別和定義采用區(qū)結(jié)果205、 導(dǎo)引和裝訂線結(jié)果210以及圖示符關(guān)聯(lián)結(jié)果215。文檔重構(gòu)模塊120還定義文檔中的其他結(jié)構(gòu)性元素,它們是除圖示符之外的本原元素之間或者結(jié)構(gòu)性元素之間的關(guān)聯(lián)。例如,在一些實施例中,文檔重構(gòu)模塊120將文檔中的表格識別為由幾何分析模塊110識別出的區(qū)域以及區(qū)域中的圖示符和圖示符集之間的關(guān)聯(lián)。例如,一些實施例將區(qū)域關(guān)聯(lián)為表格的單元,以及將每個區(qū)域內(nèi)的圖示符關(guān)聯(lián)為表格信息。分析結(jié)果225例示了文檔重構(gòu)模塊120對文檔200中的具有9個單元229的表格 227的識別。一些實施例通過定義表格結(jié)構(gòu)性元素來關(guān)聯(lián)形成表格的本原元素。然而,在初始文檔中,被瀏覽為表格的內(nèi)容被定義為本原元素(線條和圖示符)的非關(guān)聯(lián)集合,在重構(gòu)之后,單元在表格結(jié)構(gòu)性元素中被識別為表格單元,并且是單獨(dú)地或一體地可編輯的。如進(jìn)一步例示的,在一些實施例中,表格識別和重構(gòu)采用區(qū)結(jié)果205、圖示符關(guān)聯(lián)結(jié)果215以及布局和流結(jié)果220。一些實施例還識別何時文檔中的兩個或更多個本原圖形元素或者圖形對象(例如,形狀、圖像、照片、位圖,等等)應(yīng)被分組為一個結(jié)構(gòu)性圖形元素。例如,大部分交疊的兩個對象可能是被定義為未結(jié)構(gòu)化文檔中的兩個形狀或圖像的一個元素。文檔重構(gòu)模塊120 將這兩個對象連結(jié)起來作為一個對象。分析結(jié)果230例示了來自初始文檔200的兩個本原形狀(星形和六角形)已經(jīng)被文檔重構(gòu)模塊120連結(jié)成一個圖形232。如圖1所例示的,文檔重構(gòu)模塊120的輸出的示例包括語義分級數(shù)據(jù)135(即,圖示符的關(guān)聯(lián))、布局和流數(shù)據(jù)145、表格數(shù)據(jù)155以及連結(jié)圖數(shù)據(jù)165。此外,在一些實施例中,一些這種信息還在若干文檔重構(gòu)模塊120之間傳遞。圖2例示了采用所有這種信息來定義結(jié)構(gòu)化文檔235。結(jié)構(gòu)化文檔235具有與未結(jié)構(gòu)化文檔200相同的外觀,但是結(jié)構(gòu)化文檔235包括關(guān)于結(jié)構(gòu)性元素以及元素的關(guān)聯(lián)、關(guān)系和分級的信息,由此使得能夠進(jìn)行編輯、 更直觀地顯示,等等。文檔顯示和交互模塊130采用來自文檔重構(gòu)模塊120的數(shù)據(jù)(以及,在一些實施例中,來自幾何分析模塊110的數(shù)據(jù))。文檔顯示和交互模塊130使得用戶能夠?qū)ξ臋n進(jìn)行瀏覽、編輯、滾動等。例如,序列140例示了在豎直保持的手持式設(shè)備上顯示為兩列文本的文檔。當(dāng)手持式設(shè)備側(cè)邊轉(zhuǎn)動時,這兩列中的文本被重新布置為三列。這種重新布置是不能針對未結(jié)構(gòu)化文檔進(jìn)行的,因為這依賴于元素之間的關(guān)聯(lián),尤其是不作為未結(jié)構(gòu)化文檔的一部分的通過圖示符的文本流。在一些實施例中,文檔顯示和交互模塊130還可以識別已被用戶選擇的結(jié)構(gòu)性元素(例如,段落、圖形對象,等等),并智能地縮放以顯示所選的元素。在一些實施例中,用戶選擇感興趣的位置(即,顯示文檔中的特定定位),并且顯示和交互模塊130識別結(jié)構(gòu)性元素的分級中的合格結(jié)構(gòu)性元素。一些實施例將特定類型的結(jié)構(gòu)性元素定義為合格的結(jié)構(gòu)性元素。在一些實施例中,合格的結(jié)構(gòu)性元素用于定義在顯示器中突出顯示的感興趣區(qū)域。序列150例示了對段落170的選擇(例如,通過選擇段落內(nèi)的感興趣位置)以及對該段落和附近文本的隨后智能顯示。文檔顯示和交互模塊130還提供其他特征,例如對文本和圖形對象的智能選擇、智能滾動文檔,等等。一些實施例采用分級簡檔化來利用中間分析和重構(gòu)結(jié)果運(yùn)行中地(on the fly) 修改如何執(zhí)行幾何分析和文檔重構(gòu)。一些實施例將中間結(jié)果與指示文檔包括何種類型的內(nèi)容的簡檔進(jìn)行核對,并相應(yīng)地改變重構(gòu)處理。在一些實施例中,分級簡檔可以指示分析和重構(gòu)模塊執(zhí)行更多或更少的處理、不同地執(zhí)行處理或者重新執(zhí)行處理。例如,如果中間分析結(jié)果指示文檔是一頁長、具有一列文本以及沒有形狀或圖像,則一些實施例將僅執(zhí)行處理以將圖示符關(guān)聯(lián)成字、行和段落。例如將不執(zhí)行表格識別。一些實施例采用各種新穎的效率技術(shù)以進(jìn)行更高效的存儲和處理利用。例如,一些實施例通過采用集群分析來執(zhí)行一些上述處理,集群分析是用來識別相對于其他元素按照某種方式緊密間隔開的元素分組。一些實施例采用集群分析來基于眾多字識別導(dǎo)引,所述字在相同或者近似相同的X坐標(biāo)處開始、結(jié)尾、居中或者以其他方式對準(zhǔn)。一些實施例采用集群分析來 識別圖示符之間的不同尺寸間隔,以識別字之間的間隔以及大于字之間的間隔的間隔。一些實施例還采用集群分析來識別應(yīng)當(dāng)被連結(jié)成單個圖形的本原圖形(例如, 形狀、圖像)。一些實施例通過采用引用未排序數(shù)據(jù)的有序數(shù)據(jù)(例如,本原元素位置數(shù)據(jù))以及通過利用單個值來排序?qū)?shù)據(jù)的分隔,以高效地執(zhí)行集群分析。在本發(fā)明中采用的術(shù)語分隔將序列或者線性有序集合分成多個子序列,所述子序列是具有相同順序關(guān)系的序列的子集。此外,分隔具有以下性質(zhì)(i)原始序列中的每個成員恰包含在分隔的子序列中的一個中,以及(ii)給定兩個分隔的子序列S和T,根據(jù)順序關(guān)系,S中的所有成員都小于T中的所有成員,或者T中的所有成員都小于S中的所有成員。在一些實施例中,將分隔排序為單個值使得能夠更高效地執(zhí)行各種集群分析功能,例如檢查多個分隔。一些實施例還通過利用應(yīng)用編程接口(API)來提高文檔重構(gòu)處理中的效率,其中應(yīng)用編程接口最小化在呈現(xiàn)給API的用戶(例如,采用API的程序員或者軟件應(yīng)用)時的數(shù)據(jù)復(fù)制量,就像數(shù)據(jù)可以被自由地修改一樣。一些實施例將數(shù)據(jù)存儲在隨機(jī)排序的陣列中,然后定義對數(shù)據(jù)的引用的經(jīng)排序陣列,以及在眾多集合對象(例如,字符序列對象,其是字符數(shù)據(jù)的集合)中共享該經(jīng)排序陣列,以優(yōu)化對存儲器和處理的使用。在一些實施例中,采用這兩種效率改進(jìn)以及其他技術(shù)來使得能夠在資源受限設(shè)備(例如,蜂窩式電話、媒體播放器,等等(例如,iPhone ))上執(zhí)行文檔重構(gòu)。盡管通過參照圖1和圖2中例示的示例提供了對一些實施例的上述概覽,但是本領(lǐng)域普通技術(shù)人員將認(rèn)識到,這些示例僅僅意味著引入本發(fā)明一些實施例的特征和操作的示例性實施例。本領(lǐng)域普通技術(shù)人員將認(rèn)識到,很多實施例具有不同于圖1和2中所例示的特征和操作。例如,盡管已經(jīng)將幾何分析描述為一個模塊集110,但是本領(lǐng)域普通技術(shù)人員將認(rèn)識到,一些實施例不必一起識別出所有幾何屬性。例如,一些實施例首先進(jìn)行幾何分析的子集(例如,區(qū)域分析以識別出文檔中的一個或多個區(qū)),然后逐區(qū)地識別出導(dǎo)引和裝訂線。下面將描述一些實施例的更多具體示例。第II章描述基于邊界本原元素識別文檔的區(qū)域(即,區(qū)),以及定義形成結(jié)構(gòu)化文檔的框架的分級結(jié)構(gòu)(例如,文檔對象模型)。 第III章然后描述對圖示符的邊界元素(例如,對準(zhǔn)導(dǎo)引)以及對準(zhǔn)點之間的特定空白空間(裝訂線)的識別。接下來,第IV章詳細(xì)描述了生成圖示符和圖示符集之間的關(guān)聯(lián),以定義諸如字、文本行、段落、列等的結(jié)構(gòu)性元素,以及定義這些結(jié)構(gòu)性元素(以及其他元素, 例如圖形、表格,等等)的流順序。第V章描述了根據(jù)本原元素識別表格,以及生成本原元素之間的關(guān)聯(lián)以形成表格結(jié)構(gòu)性元素,而第VI章描述了識別應(yīng)被分組到一起的本原圖形元素,以及生成這種本原元素之間的關(guān)聯(lián)以定義復(fù)合的圖形元素。接下來,第VII章描述了基于將中間處理結(jié)果與預(yù)定簡檔集合匹配來修改內(nèi)容處理(采用如第II至VI章中詳細(xì)描述的文檔重構(gòu)的示例),這可以提高內(nèi)容處理的效率和精度。接下來,第VIII章詳述了采用結(jié)構(gòu)化文檔(例如,由文檔對象模型定義的文檔) 來在小屏幕設(shè)備(例如,手持式電話或媒體播放器)上顯示文檔的各個方面。討論了文檔顯示對小屏幕的調(diào)整以及對識別出的感興趣區(qū)域的顯示。第IX章描述了采用結(jié)構(gòu)化文檔來響應(yīng)于用戶輸入定義對文本(或者文檔的其他元素)的選擇。然后第X章描述了用于提高集群分析技術(shù)的效率的各種方法,其(除了別的以外) 用于在文檔重構(gòu)處理中識別對準(zhǔn)導(dǎo)引、字和圖示符間距以及復(fù)合圖形。接下來,第XI章詳述了使得能夠更高效地解析和分析文檔的方法和數(shù)據(jù)結(jié)構(gòu)。這些數(shù)據(jù)結(jié)構(gòu)例示了在文檔重構(gòu)處理中可以采用的生成圖示符之間的關(guān)聯(lián)(例如,形成字、文本行、段落,等等)的一種方式。然而,本領(lǐng)域普通技術(shù)人員將認(rèn)識到,可以有很多在本領(lǐng)域內(nèi)廣為公知的其他方式, 來生成本原元素(例如,圖示符、圖形元素,等等)之間的關(guān)聯(lián)以定義結(jié)構(gòu)性元素(例如,段落、表格、復(fù)合圖形,等等)。接下來,第XII章描述了一些實施例的文檔重構(gòu)應(yīng)用的軟件架構(gòu),而第XIII章描述了實現(xiàn)本發(fā)明一些實施例的計算機(jī)系統(tǒng)。II.區(qū)分析當(dāng)在頁面上有多個文章、章節(jié)或目錄信息時,它們通常由線條、圖像或者形狀來描繪。盡管人能夠容易地識別圖形線索意在指示頁面如何被斷成區(qū)的方式,但是對于計算機(jī)來說這可不是個容易的問題(尤其是在有圖形本原元素的情況下,圖形本原元素中的一些旨在作為頁面內(nèi)容,而其他的旨在描繪內(nèi)容區(qū))。本發(fā)明的一些實施例提供了用于基于未結(jié)構(gòu)化文檔的本原元素(例如,形狀和圖像)來識別邊界和由這些邊界界定的區(qū)域(例如,區(qū))的方法。在一些實施例中,區(qū)域用在對文檔的后續(xù)重構(gòu)中,以及用于進(jìn)一步重構(gòu)處理的劃區(qū)(compartmentalization)。一些實施例生成填充有內(nèi)容的區(qū)域圖(即,諸如樹的分級結(jié)構(gòu)),并且使得能夠?qū)?nèi)容與該內(nèi)容所處的區(qū)域相關(guān)聯(lián)。一些實施例逐頁面地執(zhí)行區(qū)域識別。圖3概念性地例示了在一些實施例中用于識別文檔的頁面的區(qū)并生成頁面的區(qū)樹的處理300。將結(jié)合圖4來描述處理300。圖4例示了根據(jù)一些實施例的用于識別文檔的頁面400的區(qū)并生成該頁面的區(qū)樹430的序列。如圖3所示,處理300通過接收(在305 處)文檔的頁面開始。在一些情況下,文檔包括眾多頁面(例如,電子書),而在其他情況下,文檔將僅僅是一個頁面(例如,廣告?zhèn)鲉?。接下來,該處理識別(在310處)頁面上的區(qū)。在一些實施例中,對區(qū)的識別包括 識別區(qū)邊界和相交部,然后遍歷區(qū)邊界以識別出區(qū)。參照圖4的示例,處理300識別出頁面 400包括五個區(qū),S卩,區(qū)A 405、區(qū)B 410、區(qū)C 415、區(qū)D 420以及區(qū)E 425。在識別出區(qū)之后,處理300生成(在315處)頁面的區(qū)圖(即,諸如樹的分級結(jié)構(gòu))。區(qū)圖例示了區(qū)的分級。例如,區(qū)圖430例示了頁面(節(jié)點P)的區(qū)包括四個區(qū)A、B、C 和D。此外,因為區(qū)E完全在區(qū)D內(nèi),所以區(qū)D包括區(qū)E。在一些實施例中,當(dāng)?shù)诙^(qū)完全處于第一區(qū)中時,第一區(qū)是第二區(qū)的父輩。在一些實施例中,父輩和子輩可以共享一個或多個邊界。在生成區(qū)圖之后,處理300將頁面的內(nèi)容插入(在320處)區(qū)圖中。然后處理結(jié)束。在一些實施例中,頁面包括文本、圖形或者其他內(nèi)容。每個特定內(nèi)容分組(例如,圖像、 段落、列,等等)被放置為完全包含該特定內(nèi)容分組的最小區(qū)的子輩。在一個實施例中,一旦已經(jīng)進(jìn)一步分析了內(nèi)容(例如,將文本分組為段落、識別表格,等等),則在文檔重構(gòu)處理中隨后執(zhí)行內(nèi)容對象到區(qū)圖的插入。此外,當(dāng)執(zhí)行文檔重構(gòu)時,一些實施例利用每個區(qū)的內(nèi)容子樹來更新區(qū)圖。A.術(shù)語
圖5例示了文檔的包括若干區(qū)的頁面500。頁面500包括眾多區(qū)邊界,包括區(qū)邊界 505至509。在一些實施例中,區(qū)邊界是水平或垂直(即,直線的)條,其厚度由貢獻(xiàn)于區(qū)邊界的區(qū)邊界圖形定義。在一些實施例中,區(qū)邊界的厚度是貢獻(xiàn)于區(qū)邊界的區(qū)邊界圖形的豎直界定框在其窄方向上的寬度。在一些實施例中,特定元素或元素集的豎直界定框是完全圍住該元素或元素集的最小豎直矩形(在分析的坐標(biāo)系統(tǒng)中)。區(qū)邊界圖形是頁面上的作為窄矩形或者具有作為窄矩形的豎直界定框的圖形對象(例如,形狀、圖像、線條)。例如,區(qū)邊界505至509全部是具有特定(相對窄)厚度的線條。在一些實施例中,區(qū)邊界圖形包括相對窄的對象,對其的全部或部分呈現(xiàn)填充全部或部分區(qū)邊界。在一些實施例中,區(qū)邊界圖形還包括其邊界貢獻(xiàn)于區(qū)邊界的對象(例如,填充多邊形的一個側(cè)邊可以指示區(qū)邊界的全部或部分,即使多邊形本身不窄并且沒有適合在區(qū)邊界中)。然而,區(qū)邊界圖形不需要是完全筆直的線或者完全直線。例如,圖6例示了包括區(qū)邊界圖形605的頁面600。區(qū)邊界圖形605不是完全垂直的條相反,它們是非常接近垂直對準(zhǔn)的細(xì)枝圖像。一些實施例將圖形識別為區(qū)邊界圖形,而一些實施例沒有這樣。圖5的頁面500還包括眾多區(qū)邊界相交部,例如相交部510和511。在一些實施例中,區(qū)邊界相交部是水平區(qū)邊界與垂直區(qū)邊界的矩形相交部。如相交部511所例示的,區(qū)邊界相交部不必位于區(qū)邊界的端部。在一些實施例中,區(qū)邊界中間的區(qū)邊界相交部將區(qū)邊界斷開成一個或多個區(qū)邊界區(qū)間(interval)。例如,頁面500的底部區(qū)邊界被斷開成區(qū)邊界區(qū)間 515、516、517 和 518。因此,在一些實施例中,區(qū)是由形成豎直直線形狀的區(qū)邊界區(qū)間集界定的閉合區(qū)域。豎直直線形狀是可由水平和垂直線段形成的任何多邊形,其包括但不限于作為由水平和垂直線段形成的矩形的豎直矩形。每個區(qū)具有豎直直線外界線,其是由界定矩形的區(qū)邊界的外側(cè)形成的形狀。每個區(qū)還具有豎直直線內(nèi)界線,其是由界定矩形的區(qū)邊界的內(nèi)側(cè)形成的形狀。頁面500包括區(qū)P 526(頁面界線),區(qū)A 520 (包括左側(cè)和右側(cè)上的細(xì)條以及區(qū)C 和D上面的區(qū)域的拱形區(qū)),區(qū)B 521、區(qū)C 522(與區(qū)E共享邊界的左側(cè)區(qū))、區(qū)D 523 (作為區(qū)C的鏡像圖像的右側(cè)區(qū))、區(qū)E 5 和區(qū)G 525。在一些實施例中,區(qū)具有由區(qū)邊界的外側(cè)和內(nèi)側(cè)定義的外界線和內(nèi)界線。圖7例示了頁面500的區(qū)樹700,其中區(qū)P(頁面邊界)是區(qū)A、C、E和D的父輩; 區(qū)B是區(qū)A的子輩;以及區(qū)G是區(qū)D的子輩。區(qū)B、E和G是島(island)的示例。島是不與其父區(qū)共享邊界區(qū)間的區(qū)。盡管區(qū)E與區(qū)C和D共享其邊界區(qū)間,但是因為區(qū)C和D中的任一個實際上都沒有圍住區(qū)E,所以它們中的任一個都不是區(qū)E的父輩。區(qū)樹還例示了節(jié)點已經(jīng)填充有節(jié)點所包括的內(nèi)容。在一些實施例中,每個頁面的文檔對象模型(DOM)的一部分構(gòu)建在頁面的區(qū)樹的節(jié)點上。文檔對象模型是將文檔表示為其節(jié)點為對象的圖。在一些實施例中,該圖是樹,其葉節(jié)點表示本原元素,而其非葉節(jié)點是結(jié)構(gòu)對象,該結(jié)構(gòu)對象表示它們的子節(jié)點之間的關(guān)系以及它們的子節(jié)點作為一個分組具有的性質(zhì)。在一些實施例中, 節(jié)點的子輩的順序表示這些子輩的閱讀順序。在一些實施例中,根節(jié)點是文檔節(jié)點,其子輩是頁面節(jié)點,區(qū)樹從每個頁面節(jié)點向下延伸,流樹(包括表示結(jié)構(gòu)的節(jié)點,所述結(jié)構(gòu)例如有表格、文本框、布局、列、段落、列表和文本行)從一些區(qū)節(jié)點向下延伸,而表示本原元素(例如,圖示符、形狀和圖像)的節(jié)點是該流樹中的一些節(jié)點的子輩。在一些實施例中,結(jié)構(gòu)節(jié)點包括表示節(jié)點之間的關(guān)系以及由樹的父子關(guān)系(其定向圖邊緣)表示的關(guān)系的性質(zhì)。例如,開始一個新列的段落可以是結(jié)束前一列的段落的繼續(xù),而兩者之間沒有段落中斷。在這種情況下,在樹中將有兩個段落節(jié)點,每一個具有一個不同的列父節(jié)點,但是它們將具有指向彼此以指示它們是表示單個共同段落的部分的兩個節(jié)點的性質(zhì)。在一些實施例中,DOM是文檔的分級表示,其包括文檔的所有結(jié)構(gòu)性元素。當(dāng)內(nèi)容完全地位于特定區(qū)的外界線內(nèi)并且沒有完全地位于特定區(qū)的任何子輩的外界線內(nèi)時,一些實施例將該內(nèi)容定義為特定區(qū)的子輩。因此,區(qū)B包括頁眉文本,區(qū)C和D包括標(biāo)準(zhǔn)文本,而區(qū)E和G包括圖像。B.旋轉(zhuǎn)分組一些實施例定義頁面上的若干旋轉(zhuǎn)分組,并單獨(dú)地分析每個旋轉(zhuǎn)分組的區(qū)和內(nèi)容。在一些實施例中,旋轉(zhuǎn)分組類似于區(qū),只是旋轉(zhuǎn)分組不具有任何區(qū)邊界。相反,旋轉(zhuǎn)分組被定義為包括以相同角度(或者在小到人類瀏覽者難以區(qū)分的特定閾值內(nèi)近似相同的角度)旋轉(zhuǎn)的所有內(nèi)容。圖8概念性地例示了一些實施例的用于定義頁面上的旋轉(zhuǎn)分組的處理800。如圖所示,處理800接收(在805處)文檔的頁面。在一些情況下,該頁面是文檔的唯一頁面,而在其他情況下,該頁面是多個頁面之一。一些實施例一起而非逐頁地執(zhí)行對多頁面文檔(或者,多頁面章節(jié))的旋轉(zhuǎn)分組分析。然后該處理確定(在810處)頁面上的每個對象的旋轉(zhuǎn)角度。在一些實施例中, 假設(shè)不規(guī)則構(gòu)形圖像的旋轉(zhuǎn)角度為零。例如,頁面500的區(qū)E中的圖像是不規(guī)則構(gòu)形的,其將不會被給定非零旋轉(zhuǎn)角度。水平對準(zhǔn)的文本也具有零度的旋轉(zhuǎn)角度,而偏離χ軸對準(zhǔn)的文本被給定以一旋轉(zhuǎn)角度。例如,頁面500的區(qū)域F 530中的文本將具有大約-45度的旋轉(zhuǎn)角度。類似地,頁面600中的文本610( “Organic”和“Pure”)將具有其自己的旋轉(zhuǎn)角度。在也將圖像對象放置到旋轉(zhuǎn)分組中的實施例中,文本610上面的矩形圖像615將與文本610具有相同的旋轉(zhuǎn)角度。接下來,處理800按照旋轉(zhuǎn)角度來排序(在815處)對象。然后處理將對象分組 (在820處)成具有低于特定閾值的旋轉(zhuǎn)角度的展度的集群。在一些實施例中,與特定閾值相比的展度是從分組的最大旋轉(zhuǎn)角度中減去該分組中的最小旋轉(zhuǎn)角度。采用非零閾值允許分組考慮初始接收到的文檔中的內(nèi)容定義中的小誤差(例如,非常略微地偏離水平的文本行)。然后處理800單獨(dú)地分析(在825處)每個旋轉(zhuǎn)分組。然后該處理結(jié)束。對于大多數(shù)頁面,大多數(shù)分析將涉及豎直(零度)分組。一些實施例針對除豎直分組之外的分組不執(zhí)行區(qū)分析,相反只簡單地將旋轉(zhuǎn)分組的內(nèi)容作為一個整體分類為頁面的子輩。在一些實施例中,每個旋轉(zhuǎn)分組具有其中內(nèi)容呈現(xiàn)為豎直的坐標(biāo)系統(tǒng)。在這種實施例中,每個旋轉(zhuǎn)分組具有其自己的區(qū)樹,其內(nèi)容適合文檔的D0M。一些實施例針對頁面上內(nèi)容旋轉(zhuǎn)的每個區(qū)別角度定義一個旋轉(zhuǎn)分組。下面將詳細(xì)地描述對每個分組的分析。C.識別區(qū)邊界和相交部圖9概念性地例示了一些實施例的用于識別區(qū)邊界和相交部的處理900。將結(jié)合圖10來描述處理900。圖10例示了包括各種圖形和文本的頁面1000。如圖9所示,該處理接收(在900處)旋轉(zhuǎn)分組,并將該分組標(biāo)準(zhǔn)化到豎直坐標(biāo)系統(tǒng)。在一些實施例中,將分組標(biāo)準(zhǔn)化到豎直坐標(biāo)系統(tǒng)包括,定義分組的坐標(biāo)系統(tǒng),使得分組中的所有對象是垂直的或水平的(例如,在坐標(biāo)系統(tǒng)中,文本行是水平的)。下面的討論假設(shè)旋轉(zhuǎn)分組是豎直(零度)分組。本領(lǐng)域普通技術(shù)人員將能夠把相同的技術(shù)應(yīng)用到在其內(nèi)容呈現(xiàn)為豎直的坐標(biāo)系統(tǒng)中具有非零角度的旋轉(zhuǎn)分組。一些實施例在針對特定旋轉(zhuǎn)分組執(zhí)行區(qū)識別之前從其他旋轉(zhuǎn)分組中移除內(nèi)容。例如,一些實施例在豎直直線坐標(biāo)系統(tǒng)中執(zhí)行區(qū)識別和分析之前將從圖6的頁面600中移除文本610和圖像615。然后該處 理識別(在910處)潛在區(qū)邊界。在一些實施例中,潛在區(qū)邊界包括足夠窄的任何水平或垂直圖形對象。在一些實施例中,對特定圖形對象是否足夠窄的確定采用絕對量度(例如,當(dāng)圖形對象的豎直界定矩形的較小尺寸小于1/24英寸時)。在其他實施例中,該確定采用相對量度(例如,豎直界定矩形的較大尺寸是較小尺寸大小的八倍), 或者絕對量度和相對量度的組合(例如,可以允許窄尺寸達(dá)到1/12英寸,但是應(yīng)用8 1 的相對量度)。一些實施例與頁面的尺寸相關(guān)地調(diào)整閾值。例如,以上示例可以應(yīng)用于標(biāo)準(zhǔn)的8. 5X 11英寸頁面,而大得多的頁面可以具有更大的潛在區(qū)邊界。參照圖10,頁面1000包括將被分類為潛在區(qū)邊界的若干線條水平邊界1005至 1010和垂直邊界(1011至1016)。然而,圖形對象1020通常將不會被考慮為水平區(qū)邊界, 因為它在χ方向上太厚。一些實施例還識別至少具有閾值尺寸的所有豎直直線形狀,并采用這些形狀的側(cè)邊作為潛在區(qū)邊界。在一些實施例中,閾值尺寸是特定面積,而在其他實施例中,必須超過閾值寬度和閾值高度。例如,對象1020可以具有大到足以使其邊緣適合為潛在區(qū)邊界的面積,但是它太窄而不能成為一個單獨(dú)的區(qū)。另一方面,星形對象1025不是豎直直線形狀,由此其邊緣將不適合作為區(qū)邊界。因此,這些對象將僅僅被分類為在一個區(qū)或另一個區(qū)中的內(nèi)容(具體而言,圖形對象)。一些實施例將識別為豎直直線形狀的側(cè)邊的每個潛在區(qū)邊界的界線設(shè)置為界定側(cè)邊的豎直矩形,其在是劃出的情況下包括筆劃寬度。如果頁面邊界在旋轉(zhuǎn)分組的坐標(biāo)系統(tǒng)中是豎直直線的,則一些實施例還包括該頁面邊界作為區(qū)邊界。在識別出潛在區(qū)邊界之后,處理900移除(在915處)與頁面中的其他對象相交的邊界或邊界部分。例如,潛在邊界1015被星形對象1025遮蓋,并由此將被斷開成兩個潛在區(qū)邊界(星形上面的區(qū)域和星形下面的區(qū)域)。一些實施例還移除與字符界定框相交的區(qū)邊界。在一些實施例中,用于特定字符的字符界定框是完全圍住字符的最小矩形。例如, 潛在區(qū)邊界1010穿過字符“Lorem Ipsum”。因此,一些實施例將移除潛在區(qū)邊界1010不予 ^慮ο接下來,處理900合并(在920處)邊界。一些實施例合并平行的以及交疊的或者接近交疊的邊界。邊界在它們的界線相交時交疊。例如,當(dāng)不同寬度的兩個非常窄的矩形被繪制為使得一個完全圍住另一個時,將合并兩個潛在區(qū)邊界。一些實施例略微擴(kuò)展界線 (在潛在區(qū)邊界的寬度和長度兩者上)用以測試交疊。因此,圖10中的邊界1013和1014 將被合并為一個區(qū)邊界1027,其厚度大于邊界1013和1014的厚度。然后處理900確定(在923處)是否仍有任何合并邊界未被處理。當(dāng)沒有邊界被合并或者已經(jīng)處理了所有合并邊界時,處理前進(jìn)到下面描述的945。否則,處理選擇(在 925處)未處理的合并邊界。然后處理確定(在930處)是否合并邊界太厚或者包括太多區(qū)邊界圖形。在一些實施例中,當(dāng)合并邊界在窄方向上的寬度大于特定閾值時,該合并邊界太厚。在一些實施例中,厚度的測試與圖形對象是否窄到足以初始地被分類為區(qū)邊界相同。當(dāng)處理確定邊界沒有太厚時,處理前進(jìn)到上面描述的923。否則,當(dāng)合并邊界太厚時,處理從潛在區(qū)邊界候選中移除(在935處)該合并邊界,并將其分類為單個圖形對象,然后前進(jìn)到 923。例如,這可能在圖像被繪制為一系列窄矩形或者用窄且間隔緊密的條繪制條形圖時出現(xiàn)?!z查了所有的合并邊界,則處理識別(在945處)區(qū)邊界相交部。如上所述, 在水平邊界與垂直邊界相交的任何地方識別區(qū)邊界相交部。一些實施例還識別近似相交部,并將它們分類為相交部。為了找到近似相交部,少量擴(kuò)展邊界,然后進(jìn)行測試以找到相交部。一些實施例將邊界擴(kuò)展固定量(例如,1/4英寸),而其他實施例將每個邊界擴(kuò)展作為特定區(qū)邊界的長度的百分比的量。當(dāng)加長的邊界相交時,將近似相交部分類為相交部,并將兩個邊界擴(kuò)展為完全穿過彼此的厚度。作為示例,圖10的邊界1027和1008沒有完全相交。然而,它們足夠接近,使得它們將被分類為相交并擴(kuò)展為使得它們相交。然后處理消除(在950處)具有少于兩個相交部的邊界。一旦移除一個邊界,則與被移除的邊界相交的任何邊界必須被重新測試,以確定是否它們將具有至少兩個相交部。 在示例頁面1000中,邊界1006和邊界1015的兩個剩余部分將被移除,因為它們不具有區(qū)邊界相交部。一旦識別出區(qū)邊界和相交部,處理剪裁(在955處)區(qū)邊界,以移除延伸超過最外相交部的任何部分。例如,邊界1027和1009延伸超出它們的相交部。它們將被剪裁以僅僅延伸到彼此的最外界線。在剪裁了邊界之后,處理存儲(在960處)區(qū)邊界和相交部信息用以日后使用(例如,在識別區(qū)時)。然后處理結(jié)束。此時,已經(jīng)全部確定了區(qū)邊界區(qū)間和區(qū)邊界相交部。圖11例示了垂直區(qū)邊界區(qū)間 1105、1115、1125、1135、1145、1155、1165 和 1175,以及水平區(qū)邊界區(qū)間 1110、1120、1130、 1140、1150、1160、1170 和 1180。圖 11 還例示了區(qū)邊界相交部 1102、1112、1113、1122、1123、 1132、1133、1142、1143、1152、1162、1172、1182 和 1192。D.識別區(qū)一旦識別出區(qū)邊界和區(qū)邊界相交部,就可以識別區(qū)。圖12概念性地例示了一些實施例的用于識別區(qū)的處理1200。將結(jié)合圖13和14來描述處理1200。圖13和14例示了應(yīng)用處理1200來識別頁面1000的區(qū)。每個圖被例示為序列。圖13例示了用以識別第一區(qū)邊界的序列1305至1330。圖13中的箭頭例示了方向矢量,而虛線例示了采取的通過區(qū)邊界區(qū)間以定義區(qū)的路徑。圖14例示了由處理1200識別出的區(qū)。如圖12所示,處理1200接收(在1205處)分組或頁面的區(qū)邊界和相交部。在一些實施例中,區(qū)邊界和相交部是以上描述的處理900的輸出。然后處理確定(在1207處) 是否有任何區(qū)邊界區(qū)間。當(dāng)沒有時,處理結(jié)束。否則,處理將兩個方向矢量分配(在1210 處)給每個區(qū)邊界區(qū)間(即,水平區(qū)間具有指向右和左的矢量,而垂直區(qū)間具有指向上和下的矢量)。圖13例示(在1305處)了頁面1000的每個邊界區(qū)間以雙向的方向矢量開始。接下來,處理選擇(在1215處)邊界區(qū)間b、相交部i和方向d。一些實施例隨機(jī)選擇開始點,而其他實施例采用啟發(fā)法,例如沿特定方向的最上和最左相交部。圖13例示 (在1305處)了隨機(jī)選擇在相交部1182處開始沿著區(qū)間1115向上移動。然后處理1200 從相交部i沿著方向d前進(jìn)(在1220處),直到到達(dá)下一個相交部?!┻_(dá)到相交部,處理確定(在1225處)該相交部是否是在1215處選擇的開始相交部。當(dāng)該相交部是原始開始相交部時,處理前進(jìn)到下面描述的1265。否則,處理確定(在1230處)通過區(qū)邊界區(qū)間的路徑是否能在該相交部順時針轉(zhuǎn)向。當(dāng)路徑能順時針轉(zhuǎn)向時,路徑就順時針轉(zhuǎn)向(在1235處)。然后處理前進(jìn)到下面描述的1255。當(dāng)路徑不能順時針轉(zhuǎn)向時,處理確定(在1240處)該路徑是否能繼續(xù)徑直通過相交部。當(dāng)路徑能徑直繼續(xù)時,則路徑就徑直繼續(xù)(在1245處)。然后該處理前進(jìn)到下面描述的1255。當(dāng)路徑不能徑直繼續(xù)時,該路徑逆時針轉(zhuǎn)向(在1250處)到下一個邊界區(qū)間。通過在步驟1230和1240 中作出的選擇,處理1200在每個邊界相交部展現(xiàn)對順時針轉(zhuǎn)向的優(yōu)選。一些實施例相反將展現(xiàn)對逆時針轉(zhuǎn)向的優(yōu)選,這會給出相同的結(jié)果。處理將新邊界區(qū)間設(shè)置(在1255處)為當(dāng)前邊界區(qū)間b,并將新相交部設(shè)置為當(dāng)前相交部i。然后該處理設(shè)置(在1260處)方向d沿著邊界b移動離開相交部i。然后該處理前進(jìn)到以上描述的1220。一旦到達(dá)了原始相交部,則處理1200將區(qū)Z定義(在1265處)為自操作1215起遍歷的邊界區(qū)間的集合。如上所述,圖13例示了根據(jù)處理1200對區(qū)邊界區(qū)間集合的遍歷。 在1305處,在選擇了區(qū)間1145從相交部1182開始向上移動(在圖中由圓圈和短箭頭示出),路徑來到相交部1112。順時針轉(zhuǎn)向是一個選項,所以路徑轉(zhuǎn)向(在1310處)到區(qū)間 1120,然后在相交部1122處再次順時針轉(zhuǎn)向到達(dá)區(qū)間1155。路徑在相交部1132處又再次順時針轉(zhuǎn)向(在1315處)到達(dá)區(qū)間1150,但是然后在相交部1142處不能順時針轉(zhuǎn)向或者繼續(xù)徑直通過。相反,路徑逆時針轉(zhuǎn)向到區(qū)間1145,然后在相交部1152處再次逆時針轉(zhuǎn)向到區(qū)間1160以朝向相交部1162前進(jìn)。在相交部1162處,路徑順時針轉(zhuǎn)向(在1320處) 到區(qū)間1175,然后在相交部1172處再次順時針轉(zhuǎn)向到區(qū)間1180。區(qū)間1180返回到至原始相交部1182的路徑。圖 13 例示(在 1325 處)了由對區(qū)間 1115、1120、1155、1150、1145、1160、1175 和 1180的遍歷定義的區(qū)1300,以及在遍歷中采用的方向矢量。返回到處理1200,在定義(在 1265處)區(qū)Z之后,處理移除(在1270處)用以遍歷區(qū)Z的方向矢量。圖13例示(在 1330處)了頁面1000的區(qū)邊界區(qū)間,其中移除了用以遍歷區(qū)1300的方向矢量。接下來,處理1200移除(在1275處)所有的邊界區(qū)間,沒有方向矢量留下。這將不會在識別出第一區(qū)之后發(fā)生,但是可以在識別出任何其他區(qū)之后發(fā)生。當(dāng)區(qū)Z是島(即, 與其父輩不共享邊界的區(qū))時,處理1200按其本身對該區(qū)進(jìn)行分類(在1280處)。在優(yōu)選順時針轉(zhuǎn)向的實施例中,通過沿逆時針方向遍歷區(qū)的中心而定義的區(qū)域?qū)⑹菎u。然后該處理確定(在1285處)是否還有任何區(qū)邊界區(qū)間。當(dāng)有更多的區(qū)邊界區(qū)間時,處理前進(jìn)到以上描述的1215。否則,一旦在雙向上采用所有區(qū)邊界區(qū)間,處理就已經(jīng)定義了頁面的所有區(qū)。然后處理存儲(在1290處)區(qū)信息。然后處理結(jié)束。圖14例示了應(yīng)用于頁面1000的處理1200的繼續(xù)。為簡便起見,圖14沒有例示遍歷區(qū)邊界區(qū)間的每一次移動。首先,在相交部1113、1123、1133和1143中的任一個開始, 識別兩個區(qū)1435和1440。這兩個區(qū)彼此完全一樣,就像將在不具有非島子輩的島的情況中出現(xiàn)的一樣。一些實施例移除完全一樣的區(qū)。然而,其他實施例將區(qū)處理為兩個一個是矩形區(qū),另一個是島。接下來,在相交部1192開始得到區(qū)1445 (頁面邊界),這是因為頁面邊界的所有可能轉(zhuǎn)向?qū)⑹悄鏁r針移動。最后,這留下區(qū)1450和1455,它們被遍歷并移除。一旦遍歷了所有的區(qū),就沒有剩余的區(qū)邊界區(qū)間。E.生成區(qū)樹
一旦已經(jīng)識別出區(qū),就可以生成區(qū)圖(區(qū)樹)。在一些實施例中,在逐區(qū)進(jìn)行的文檔重構(gòu)中采用區(qū)樹。圖15概念性地例示了一些實施例的用于生成區(qū)樹的處理1500。如圖所示,該處理接收(在1505處)區(qū)和內(nèi)容對象。在一些實施例中,這些區(qū)已經(jīng)被諸如處理 1200的處理識別。然后該處理按面積對這些區(qū)進(jìn)行排序(在1510處)。一些實施例為了對區(qū)進(jìn)行排序,在島和非島的面積相等時,將島處理為大于非島。接下來,該處理選擇(在1515處)最小的區(qū)作為ζ。然后該處理確定(在1520 處)區(qū)ζ在頁面的區(qū)圖中是否還有節(jié)點。當(dāng)ζ具有節(jié)點時,該處理前進(jìn)到下面描述的1530。 否則,當(dāng)ζ不具有節(jié)點時,該處理1500確定(在1525處)區(qū)ζ的節(jié)點。接下來,處理選擇(在1530處)下一個最小的區(qū)作為區(qū)P。然后處理確定(在 1535處)區(qū)ρ是否包含區(qū)ζ (即,區(qū)ζ的外界線是否完全在區(qū)ρ的外界線內(nèi))。當(dāng)區(qū)ρ包含區(qū)ζ時,該處理確定(在1540處)區(qū)ζ是區(qū)ρ的子輩。基于此,該處理定義(在1545處) 節(jié)點圖中針對區(qū)P的一個節(jié)點。然后該處理定義(在1550處)從區(qū)ρ到區(qū)ζ的邊緣。然后該處理前進(jìn)到下面描述的1565。在1535處,當(dāng)處理確定區(qū)ρ不包含區(qū)ζ時,該處理確定(在1555處)是否有任何大于當(dāng)前區(qū)P的區(qū)。當(dāng)還有更大的區(qū)時,處理前進(jìn)到1530,并選擇下一個最小的區(qū)作為區(qū) P,以測試新的區(qū)P是否是區(qū)ζ的父輩。否則,當(dāng)沒有大于區(qū)P的區(qū)時,處理確定(在1560 處)區(qū)ζ不具有父區(qū)。接下來,處理確定(在1565處)是否有任何大于區(qū)ζ的區(qū)。當(dāng)有更大的區(qū)時,該處理從要從其選擇的區(qū)集合中移除(在1570處)區(qū)z,并前進(jìn)到1515以選擇另一個區(qū)進(jìn)行父子分析。圖 16 例示了(圖 10 中示出的)頁面 1000 的區(qū) 1435 (A)、1440 (A,),1455 (B), 1450(C)、1300 (D)和1445 (E),它們按照尺寸順序排序(A’是A的島)且放置到節(jié)點圖1600 中。利用處理1500,首先將定義區(qū)A(最小的區(qū))的節(jié)點,然后將測試這些區(qū)直到處理確定島區(qū)A’是區(qū)A的父輩,此時區(qū)A將在節(jié)點圖中被定義,并且將定義從A’到A的邊緣。接下來,區(qū)D將被確定為島區(qū)A’的父輩,然后區(qū)B、C和D全部將被確定為是島區(qū)E的子輩,其中島區(qū)E沒有父輩。在一些實施例中,區(qū)和島區(qū)的級別在區(qū)圖中總是交替的。由此,島E和A’ 處于圖1600的第一和第三級別,而區(qū)B、C、D和A處于第二和第四級別。一旦已經(jīng)分析了所有的區(qū),處理就前進(jìn)到1573,并且確定是否有任何未處理的內(nèi)容對象。當(dāng)沒有內(nèi)容對象(即,除了區(qū)邊界,文檔是空白的)或者已經(jīng)處理了所有的內(nèi)容對象時,處理前進(jìn)到下面描述的1597。否則,該處理前進(jìn)到1575并選擇內(nèi)容對象C。然后該處理定義(在1580處)對象c的節(jié)點。在一些實施例中,內(nèi)容對象是本原對象(例如,圖示符、形狀或圖像)。然后該處理確定(在1585處)包含內(nèi)容對象c的最小區(qū)χ。一旦確定了包含內(nèi)容對象c的區(qū)X,該處理定義(在1590處)在區(qū)圖中從區(qū)χ到內(nèi)容對象c的邊緣。當(dāng)已經(jīng)添加了所有對象時,處理存儲(在1597處)區(qū)圖。處理然后結(jié)束。在一些實施例中,進(jìn)一步分析每個區(qū)中的內(nèi)容(例如,將文本分組為段落,識別表格,等等)。此外,當(dāng)執(zhí)行文檔重構(gòu)時,一些實施例利用每個區(qū)的內(nèi)容子樹來更新區(qū)圖,其中這些內(nèi)容子樹包括表示區(qū)的本原對象的分級分組的結(jié)構(gòu)節(jié)點。通過首先執(zhí)行區(qū)分析,可以確保在隨后的文檔重構(gòu)步驟中不會不適當(dāng)?shù)胤纸M來自不同區(qū)的內(nèi)容。在一些實施例中,對諸如邊界和由這些邊界界定的區(qū)域(例如,區(qū))的幾何屬性的識別設(shè)置了用于進(jìn)一步的文檔重構(gòu)的階段。例如,簡檔可以依賴于區(qū)幾何結(jié)構(gòu),并且諸如表格或者文本框的結(jié)構(gòu)元素可以從區(qū)幾何結(jié)構(gòu)中識別出來。F.軟件架構(gòu)在一些實施例中 ,將以上描述的區(qū)分析處理實施為在特定機(jī)器(例如,計算機(jī)、媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式或資源受限設(shè)備)上運(yùn)行(或者存儲在計算機(jī)可讀介質(zhì)上)的軟件。圖17概念性地例示了一些實施例的用于對文檔執(zhí)行區(qū)分析的區(qū)分析應(yīng)用1700的軟件架構(gòu)。在一些實施例中,應(yīng)用是獨(dú)立應(yīng)用或者集成到另一應(yīng)用(例如,文檔重構(gòu)應(yīng)用)中,而在其他實施例中,應(yīng)用可能是在操作系統(tǒng)內(nèi)實現(xiàn)的。區(qū)分析應(yīng)用1700包括邊界識別模塊1705、區(qū)間和相交部識別模塊1710、區(qū)識別模塊1715、和區(qū)圖構(gòu)建器1720以及區(qū)信息存儲設(shè)備1725。圖17還例示了文檔內(nèi)容1730。邊界識別模塊1705從文檔內(nèi)容1730接收信息。 在一些實施例中,該信息是關(guān)于文檔中的所有圖形(例如,形狀、圖像、線條,等等)的信息。 邊界識別模塊1705識別潛在區(qū)邊界,并將該信息傳遞到區(qū)間和相交部識別模塊1710以及到區(qū)信息存儲設(shè)備1725。在一些實施例中,邊界識別模塊1705執(zhí)行處理900的一些或全部。區(qū)間和相交部識別模塊1710從邊界識別模塊1705和/或區(qū)信息存儲設(shè)備1725 接收區(qū)邊界信息。區(qū)間和相交部識別模塊1710基于由模塊1705識別出的潛在區(qū)邊界來識別區(qū)邊界相交部和區(qū)邊界區(qū)間。所識別出的區(qū)邊界相交部和區(qū)邊界區(qū)間被傳遞到區(qū)識別模塊1715,并存儲在區(qū)信息存儲設(shè)備1725中。在一些實施例中,區(qū)間和相交部識別模塊1710 執(zhí)行處理900的一些或全部。區(qū)識別模塊1715接收來自邊界識別模塊1705的區(qū)邊界信息、來自區(qū)間和相交部識別模塊1710的區(qū)邊界相交部和區(qū)邊界區(qū)間信息、以及/或者來自區(qū)信息存儲設(shè)備1725 的信息。區(qū)識別模塊1715基于來自模塊1705和1715的信息識別區(qū)。將識別出的區(qū)傳遞到區(qū)圖構(gòu)建器,并存儲在區(qū)信息存儲設(shè)備1725中。在一些實施例中,區(qū)識別模塊1715執(zhí)行存儲1200中的一些或全部。區(qū)圖構(gòu)建器1720模塊接收來自區(qū)識別模塊1715和/或區(qū)信息存儲設(shè)備1725的區(qū)信息,以及來自文檔內(nèi)容1730的內(nèi)容信息。區(qū)圖構(gòu)建器1720基于區(qū)信息定義文檔的區(qū)圖, 并用內(nèi)容信息填充區(qū)圖。在一些實施例中,當(dāng)由諸如下面章節(jié)描述的其他重構(gòu)處理識別出內(nèi)容信息時,區(qū)圖構(gòu)建器1720填充區(qū)圖。在一些實施例中,區(qū)圖構(gòu)建器1720執(zhí)行處理1500 中的一些或全部。在一些實施例中,將以上描述的模塊或其他模塊執(zhí)行的處理的結(jié)果存儲在電子存儲設(shè)備中(例如,作為文檔對象模型的一部分)。文檔對象模型然后可以用于在電子顯示設(shè)備(例如,手持式設(shè)備、計算機(jī)屏幕,等等)上顯示文檔,使得用戶能夠瀏覽文檔和/或與文檔交互(例如,通過觸摸屏、游標(biāo)控制設(shè)備,等等)。III.導(dǎo)引和裝訂線分析本發(fā)明的一些實施例提供了用于識別文檔或文檔的一部分中的諸如邊界(例如, 對準(zhǔn)導(dǎo)引)和未填充空間(例如,圖示符分組之間的未填充空白空間的間隔,稱為裝訂線) 的幾何屬性的方法。在一些實施例中,裝訂線是兩個對準(zhǔn)點之間(例如,右對準(zhǔn)點與左對準(zhǔn)點之間)的空白空間。在一些實施例中,在隨后的諸如列識別和文本行拆分的重構(gòu)過程中采用對導(dǎo)引和裝訂線的識別。一些實施例逐區(qū)地或逐頁面地識別導(dǎo)引和裝訂線。圖18例示了一些實施例的用于識別文檔中的導(dǎo)引和裝訂線的整體處理1800。下面將結(jié)合圖19來描述處理1800,圖19例示了具有兩列文本的頁面1900以及在頁面1900 上識別出的導(dǎo)引和裝訂線。如圖18所示,處理1800接收(在1805處)文檔的一部分。該部分可以是多個頁面、一個頁面或已經(jīng)被先前的區(qū)分析識別出的一個區(qū)。文檔的一部分可以包括已經(jīng)通過在本申請中其他地方描述的方法從本原圖示符重構(gòu)的字。然后處理應(yīng)用(在1810處)集群分析來確定接收到的文檔部分的導(dǎo)引。集群分析使得該處理能夠確定字的結(jié)尾或開始被分組到一起的χ坐標(biāo),使得這些χ坐標(biāo)可能是對準(zhǔn)導(dǎo)引。如所提及的,圖19例示了具有兩列文本的頁面1900。頁面1900包括多個導(dǎo)引集 1905。一些實施例將列的底部行和頂部行確定為導(dǎo)引,而其他實施例僅確定左對準(zhǔn)導(dǎo)引和右對準(zhǔn)導(dǎo)引。一些實施例還識別其他對準(zhǔn)的導(dǎo)引,例如中央對準(zhǔn)或者編號列表中十進(jìn)制點的對準(zhǔn)。下面將進(jìn)一步詳細(xì)地描述集群分析和導(dǎo)引確定處理。接下來,處理確定(在1815處)文檔部分的裝訂線。一些實施例采用來自操作 1810的信息來確定裝訂線。圖19例示了針對頁面1900確定的在第一列的右對準(zhǔn)導(dǎo)引與第二列的左對準(zhǔn)導(dǎo)引之間的裝訂線1910。一些實施例將頁邊距處理為裝訂線,而其他實施例不這樣處理。一旦確定了導(dǎo)引和裝訂線,處理1800就采用(在1820處)導(dǎo)引和裝訂線用于對文檔的進(jìn)一步重構(gòu)。然后處理結(jié)束。A.密度集群一些實施例通過如下操作來確定右對準(zhǔn)導(dǎo)引和左對準(zhǔn)導(dǎo)引在頁面上搜索在相同或近似相同的X坐標(biāo)處開始或結(jié)尾的文本行,以及確定是否存在足夠的證據(jù)使得X坐標(biāo)實際上是對準(zhǔn)點。一些實施例采用稱為密度集群的集群分析的形式來確定對準(zhǔn)導(dǎo)引。一些實施例的密度集群利用在下面第X章中描述的存儲器和處理效率,使得它可以在資源受限的設(shè)備(例如,iPhone )上執(zhí)行。密度集群通??蓱?yīng)用到其中有相當(dāng)量的“噪音”或隨機(jī)數(shù)據(jù)混在否則清晰可見的集群中的問題。當(dāng)數(shù)據(jù)是實數(shù)集時,集群被識別為最佳地滿足給定密度約束的子集。約束通常被設(shè)計為挑選比其他子集相對更密集的子集。例如,一些實施例采用集群的最小尺寸和集群的最大展度作為約束。圖20概念性地例示了一些實施例的用于執(zhí)行密度集群的處理2000。如圖所示,該處理接收(在2005處)輸入數(shù)據(jù)集。在一些實施例中,輸入數(shù)據(jù)是頁面上的字符圖示符的坐標(biāo)數(shù)據(jù)。例如,在采用密度集群來尋找左對準(zhǔn)導(dǎo)引時,輸入數(shù)據(jù)是頁面上每個字的第一個字母的錨點的χ坐標(biāo)。然后該處理對輸入數(shù)據(jù)集進(jìn)行排序(在2010處)。一些實施例按照升序排序數(shù)據(jù),而其他實施例按照降序來排序數(shù)據(jù)。例如,在采用密度集群來確定對準(zhǔn)導(dǎo)引的情況下, 數(shù)據(jù)(X坐標(biāo)值)是從最低X坐標(biāo)值到最高X坐標(biāo)值排序的,使得如果兩個X坐標(biāo)值相等, 則它們在排序數(shù)據(jù)中是彼此緊鄰的(除非有具有相同X坐標(biāo)值的其他字落在兩者之間)。 一些實施例針對排序數(shù)據(jù)生成新陣列,而一些實施例采用在下面第X章中描述的索引的間接排序陣列。接下來,處理2000確定(在2012處)是否該集合具有至少兩條數(shù)據(jù)。如果沒有的話,則處理結(jié)束,因為沒有內(nèi)容用以集群。否則,處理前進(jìn)以確定(在2015處)排序集合中的后續(xù)數(shù)據(jù)之間的差值集合。這種集合將具有比輸入數(shù)據(jù)集少一個的值。作為示例,當(dāng)在頁面上有三個字時,差值集合中的兩個值是第一個字和第二個字的X坐標(biāo)值之間的差值以及第二個字和第三個字的X坐標(biāo)值之間的差值。接下來,該處理將變量d設(shè)置(在2020處)為差值集合中的最大未評估差值。例如,當(dāng)字集的差值為0. 7英寸、0. 2英寸、0. 0英寸和0. 4英寸時,初始地可以將變量d設(shè)置為0. 7英寸。然后該處理在差值大于或等于d的任何地方分隔(在2025處)排序數(shù)據(jù),以生成數(shù)據(jù)子集的集合。第一分隔將總是僅在等于d的差值處分隔排序數(shù)據(jù),這是因為d將被設(shè)置為最大差值。在以上五個差值為0. 7,0. 2,0. 0和0. 4的數(shù)據(jù)值的示例中,分隔將生成兩個子集(第一個值在一個子集中,而其他四個值在另一個子集中)。然后該處理確定(在2030處)滿足針對要解決的問題的特定約束的子集的組合 S。在一些實施例中,約束的目的在于確定比其他子集相對更密集的子集。一些實施例采用兩個密度約束最小集群尺寸(即,子集中的值的最小個數(shù))以及最大集群展度(即,子集中的最大值和最小值之間的最大允許差值)。在采用密度集群來確定對準(zhǔn)導(dǎo)引的情況下,一些實施例采用最小集群尺寸,該最小集群尺寸是被評估的頁面或區(qū)中總行數(shù)的分?jǐn)?shù) (fraction),而其他實施例采用常數(shù)。一些實施例采用最大展度,該最大展度是字的第一字符(用于左對準(zhǔn))或最后字符(用于右對準(zhǔn))的中位字體大小的分?jǐn)?shù)。一旦確定了滿足約束的子集的集合S,則該處理確定(在2035處)是否S為空。 當(dāng)S為空時,處理進(jìn)行到下面描述的2055。當(dāng)S包括至少一個子集時,處理評估(在2040 處)S的優(yōu)化函數(shù)。一些實施例采用的優(yōu)化函數(shù)尋找具有滿足約束的最大子集的集合S。其他實施例采用優(yōu)化函數(shù)嘗試(try)來最大化滿足約束的全部子集上的特定值(例如,子集的尺寸減去最小集群尺寸)的平方和。而其他實施例采用以上提及的優(yōu)化函數(shù)之一,然后在同數(shù)(tie)的情況下采用另一個。其他實施例采用其他優(yōu)化函數(shù)。接下來,處理基于優(yōu)化函數(shù)確定(在2045處)是否集合S是目前最優(yōu)的。當(dāng)S不是最優(yōu)的時,處理前進(jìn)到下面描述的2055。否則,當(dāng)S是最優(yōu)的時,處理將S存儲(在2050 處)為已經(jīng)發(fā)現(xiàn)的最佳集群集合。如果S非空,則此時第一次通過(其中d是最大差值) 將始終是最優(yōu)的。在后續(xù)通過中,將當(dāng)前S與所存儲的集群集合進(jìn)行比較。然后處理確定(在2055處)是否有任何未評估的差值。一些實施例測試每一個可能的分隔來尋找最優(yōu)集群集合。一些這種實施例采用下面在第X章中描述的效率技術(shù)來使得能夠進(jìn)行更快且更高效的處理。當(dāng)處理確定有未評估的差值時,該處理前進(jìn)到以上描述的2020。否則,一旦已經(jīng)評估了所有差值,則處理輸出(在2060處)當(dāng)前存儲的最優(yōu)集合 (或者,如果沒有找到滿足約束的集群,則是空集合)作為最終的集群集合。在確定對準(zhǔn)導(dǎo)引的情況下,最終的集群集合將是具有非常接近的X坐標(biāo)的字分組。然后處理結(jié)束。本領(lǐng)域普通技術(shù)人員將認(rèn)識到,除了密度約束和最優(yōu)量度,處理2000對集群施加一致性約束;即, 集群中接連的值之間的集群內(nèi)差值將永遠(yuǎn)不會等于或超過集群間差值,這是因為總是在等于或大于規(guī)定間隔最小值的所有差值處分隔數(shù)據(jù)的。B.確定對準(zhǔn)導(dǎo)引如上所述,一些實施例通過如下操作來確定右對準(zhǔn)導(dǎo)引和左對準(zhǔn)導(dǎo)引搜索在頁面上的相同或近似相同的X坐標(biāo)處開始或結(jié)尾的相關(guān)圖示符(例如,字、文本行)集,以及確定是否存在足夠的證據(jù)使得X坐標(biāo)實際上是對準(zhǔn)點。一些實施例采用相似但不是完全相同的處理來尋找左對準(zhǔn)導(dǎo)引和右對準(zhǔn)導(dǎo)引。圖21概念性地例示了一些實施例的用于確定左對準(zhǔn)導(dǎo)引的處理2100。將結(jié)合圖 22至M來描述處理2100的一部分。圖22至M例示了識別頁面2200上的左對準(zhǔn)導(dǎo)引的處理。如圖21所示,處理2100將用于密度集群的輸入數(shù)據(jù)設(shè)置(在2105處)為文檔的區(qū)域中的字的左邊緣的χ坐標(biāo)。在一些實施例中,區(qū)域是頁面或者頁面的區(qū)。在一些實施例中,特定字的左邊緣是該特定字的第一圖示符的錨點的χ坐標(biāo),其針對該圖示符期望的左對準(zhǔn)位置進(jìn)行了調(diào)整。然后處理確定(在2110處)希望的集群性質(zhì)。在一些實施例中,集群性質(zhì)是用于以上描述的密度集群的約束。一些實施例采用兩個密度約束最小集群尺寸(即,子集中的值的最小個數(shù))和最大集群展度(即,子集的最大值與最小值之間的最大允許差值)。在采用密度集群用于確定對準(zhǔn)導(dǎo)引的情況下,一些實施例采用作為被評估的頁面或區(qū)中的總行數(shù)的分?jǐn)?shù)的最小集群尺寸,而其他實施例采用常數(shù)。一些實施例采用作為字的第一個字符(用于左對準(zhǔn))或者最后字符(用于右對準(zhǔn))的中位字體大小的分?jǐn)?shù)的最大展度。約束的一個示例是最小集群尺寸是區(qū)域中的文本行總數(shù)的5%,而最大展度是中位字體大小的 10%。接下來,該處理利用確定的集群性質(zhì)對輸入數(shù)據(jù)應(yīng)用(在2115處)密度集群,以確定可以是對準(zhǔn)導(dǎo)引的X坐標(biāo)值的集群。一些實施例采用如上所述的處理2000。然后處理2100確定(在2117處)是否有任何未評估的集群。當(dāng)沒有集群或者已經(jīng)評估了所有的集群時,處理結(jié)束。否則,該處理選擇(在2120處)一個集群(即,從集群分析輸出的多個集群之一)。然后處理將左對準(zhǔn)導(dǎo)引設(shè)置(在2125處)為矩形,該矩形的最小和最大χ坐標(biāo)為集群中的最小和最大值,并且其最小和最大y坐標(biāo)為頁面的頂部和底部。在一些情況下,最小和最大χ坐標(biāo)將是相同的,因為集群中的所有χ坐標(biāo)將具有相同的值。在其他情況下,意外進(jìn)入集群中的小的偏差或字將給予矩形非零寬度。圖22例示了一些實施例的具有潛在左對準(zhǔn)導(dǎo)引2205的頁面2200。矩形2205的最小χ坐標(biāo)由右列2215的左邊緣設(shè)置,而最大χ坐標(biāo)由頁面的中間的字“tate”2210設(shè)置, 這是因為字2210的開頭足夠靠近形成右列的左邊緣的字的開頭,使得它被密度集群處理成與這些字分組在一起。然后處理2100基于對在矩形中開始的字和穿過該矩形的字的分析移除(在2130 處)不滿足約束的y坐標(biāo)處的矩形。然后該處理前進(jìn)到以上描述的2117。一些實施例移除字開始矩形的左側(cè)并穿過到矩形中的任何地方的矩形部分。還移除在其間不具有足夠數(shù)量的邊界字的兩個交叉字(crossing word)之間的任意y坐標(biāo)處的矩形。邊界字是在矩形的邊緣中開始或在矩形的一個邊緣處開始的字。一些實施例采用如下要求,即在交叉字之間有至少五個邊界字,并且這些五個邊界字中的至少一個必須是在其文本行中的最左側(cè),或者與其文本行中的前一個字隔開至少一個正常字間隔。一些實施例采用在Mansfield等人的題為‘、emantic Reconstruction”的美國專利公開No. 2007/0250497中描述的處理來確定字間隔和更大的間隔,該專利申請通過引用并入于此。一些實施例采用不同的要求(例如,在交叉字之間有小于或大于五個邊界字)來執(zhí)行操作2130。圖23例示了頁面2200和矩形2205,其中矩形2205的交叉字被圈起。交叉字包括字2340(“r印rehenderit”)和2315 (“dolore”)以及其他。在交叉字2340與2315之間有兩個邊界字2210 ( "tate")和2325 ( "esse");然而,當(dāng)對交叉字之間的邊界字的要求是三個或更大時,還將移除這部分的矩形。一些實施例僅僅移除從交叉字的最大冒進(jìn)(ascent) 到最大縮進(jìn)(descent)以及交叉字之間的不合格區(qū)域。其他實施例還移除可能超出對準(zhǔn)導(dǎo)引的區(qū)域,例如從交叉字2330 ( “auteir”)到在它之上的邊界字2335 ( “r印rehenderit”) 的區(qū)域。圖24例示了用 于頁面2200的左對準(zhǔn)導(dǎo)引2405和2410。由于頁面中央的調(diào)出部 (call-out)區(qū)域,特定χ坐標(biāo)處的左對準(zhǔn)導(dǎo)引沒有貫穿整個頁面2200的長度。如上所述,一些實施例采用類似于處理2100的處理來確定右對準(zhǔn)導(dǎo)引。圖25概念性地例示了一些實施例的用于確定右對準(zhǔn)導(dǎo)引的處理2500。如圖所示,該處理將用于密度集群的輸入數(shù)據(jù)設(shè)置(在2505處)為文檔的區(qū)域中的字的右邊緣的χ坐標(biāo)。在一些實施例中,該區(qū)域是頁面或頁面中的區(qū)。在一些實施例中,特定字的右邊緣是特定字的最后圖示符的錨點的χ坐標(biāo)加上該字的最后圖示符的前進(jìn)矢量的χ坐標(biāo),其針對該圖示符期望的右對準(zhǔn)位置進(jìn)行了調(diào)整。然后該處理確定(在2510處)希望的集群性質(zhì)。在一些實施例中,集群性質(zhì)是用于以上描述的密度集群的約束。一些實施例采用兩個密度約束最小集群尺寸(即,子集中的值的最小個數(shù))和最大集群展度(即,子集的最大值與最小值之間的最大允許差值)。在采用密度集群用于確定對準(zhǔn)導(dǎo)引的情況下,一些實施例采用作為被評估的頁面或區(qū)中的總行數(shù)的分?jǐn)?shù)的最小集群尺寸,而其他實施例采用常數(shù)。一些實施例采用作為字的第一個字符(用于左對準(zhǔn))或者最后字符(用于右對準(zhǔn))的中位字體大小的分?jǐn)?shù)的最大展度。約束的一個示例是最小集群尺寸是區(qū)域中的文本行總數(shù)的5%,而最大展度是中位字體大小的 10%。接下來,該處理利用確定的集群性質(zhì)對輸入數(shù)據(jù)應(yīng)用(在2515處)密度集群,以確定可以是對準(zhǔn)導(dǎo)引的X坐標(biāo)值的集群。一些實施例采用如上所述的處理2000。然后該處理確定(在2517處)是否有任何未評估的集群。當(dāng)沒有集群或者已經(jīng)評估了所有的集群時,處理結(jié)束。否則,該處理選擇(在2520處)一個集群(即,從集群分析輸出的多個集群之一)。然后處理將右對準(zhǔn)導(dǎo)引設(shè)置(在2525處)為矩形,該矩形的最小和最大χ坐標(biāo)為集群中的最小和最大值,并且其最小和最大y坐標(biāo)為頁面的頂部和底部。 在一些情況下,最小和最大χ坐標(biāo)將是相同的,因為集群中的所有χ坐標(biāo)將具有相同的值。 在其他情況下,意外進(jìn)入集群中的小的偏差或字將給予該矩形非零寬度。然后該處理基于對在矩形中結(jié)尾的字和穿過該矩形的字的分析移除(在2530處) 不滿足約束的y坐標(biāo)處的矩形。然后該處理前進(jìn)到以上描述的2517。一些實施例移除字穿過矩形或者在矩形中開始并在矩形的右側(cè)結(jié)尾的任何地方的矩形部分。還移除在其間不具有足夠數(shù)量的邊界字的兩個交叉字之間的任意y坐標(biāo)處的矩形。邊界字是在矩形的邊緣中結(jié)尾或在矩形的一個邊緣處結(jié)尾的字。一些實施例采用如下要求,即在交叉字之間有至少五個邊界字,并且這些五個邊界字中的至少一個必須是在其文本行中的最右側(cè),或者與其文本行中的下一個字隔開超過一個正常字間隔。一些實施例采用在以上提及的美國專利公開No. 2007/0250497中描述的處理來確定字間隔和更大的間隔。一些實施例采用不同的要求(例如,在交叉字之間有小于或大于五個邊界字)來執(zhí)行操作2530。
C.確定裝訂線在確定了導(dǎo)引之后,一些實施例接著確定區(qū)域(例如,區(qū)、頁面,等等)的裝訂線。 一些實施例采用來自導(dǎo)引確定處理(例如,處理2100和2500)的信息來確定區(qū)域的相關(guān)聯(lián)圖示符(例如,裝訂線)之間的未填充空白空間的分組。除了導(dǎo)引之外,一些實施例還采用其他對準(zhǔn)點來確定區(qū)域中的裝訂線。圖沈概念性地例示了一些實施例的用于確定區(qū)域中的裝訂線的處理沈00。將結(jié)合圖27至四來描述處理沈00的部分。圖27至四例示了識別頁面2700上的裝訂線的處理。如圖沈所示,該處理接收(在沈05處)對準(zhǔn)信息。在一些實施例中,該信息是由處理2100和2500確定的導(dǎo)引。一些實施例包括其他對準(zhǔn)點以及導(dǎo)引。例如,在一些實施例中,左對準(zhǔn)(非兩端對齊)文本中的文本行的末端被處理為右對準(zhǔn)點。這使得即使在第一列的右邊緣處沒有發(fā)現(xiàn)導(dǎo)弓I,也能夠識別列間隔中的裝訂線。類似地,在一些實施例中將右對準(zhǔn)文本的左邊緣或者居中文本的兩側(cè)邊緣看作對準(zhǔn)點。然后處理沈00確定(在沈07處)是否有任何未處理的右對準(zhǔn)點。當(dāng)沒有右對準(zhǔn)點或者已經(jīng)處理了所有的右對準(zhǔn)點時,該處理結(jié)束。否則,該處理選擇(在沈10處)一個右對準(zhǔn)點。在一些實施例中,該處理首先識別最左的右對準(zhǔn)點,而在其他實施例中,該處理選取隨機(jī)的右對準(zhǔn)點。然后該處理確定(在沈15處)是否在選定的右對準(zhǔn)點與區(qū)域的右邊緣之間存在左對準(zhǔn)點。當(dāng)沒有左對準(zhǔn)點時,該處理前進(jìn)到以上描述的沈07。否則,當(dāng)在右對準(zhǔn)點與區(qū)域邊緣之間存在至少一個左對準(zhǔn)點時,該處理識別(在沈20處)從所選的右對準(zhǔn)點起跨區(qū)域向右移動的下一個左對準(zhǔn)點。這是兩個點之間的處理進(jìn)行測試以確定是否有裝訂線的區(qū)域。一旦識別出右對準(zhǔn)點和左對準(zhǔn)點,該處理將裝訂線設(shè)置(在2625處)為如下矩形,即該矩形以右對準(zhǔn)點作為最小X坐標(biāo)且以左對準(zhǔn)點作為最大X坐標(biāo)。矩形的最小和最大y坐標(biāo)是頁面的頂部和底部。圖27例示了頁面2700和將被測試為可能的裝訂線的矩形 2705。最小χ坐標(biāo)是第一列的右邊緣處的右對準(zhǔn)點,而最大χ坐標(biāo)是第二列的左邊緣處的左對準(zhǔn)點。接下來,該處理基于對穿過到矩形中以及與矩形交界的字的分析移除(在沈30 處)不滿足約束的y坐標(biāo)處的裝訂線。一些實施例移除字穿過到矩形中或者在矩形中開始的任意地方處的矩形部分。還移除在其間不具有足夠數(shù)量的邊界字的兩個交叉字之間的任何y坐標(biāo)處的矩形。裝訂線的邊界字是在矩形的左邊緣處結(jié)尾或者在矩形的右邊緣處開始的字。一些實施例采用如下要求,即在交叉字之間有至少五個邊界字,并且這些五個邊界字中的至少一個必須是在其文本行中的最左側(cè)或與其文本行中的前一個字隔開多于一個正常字間距,或者是在其文本行中的最右側(cè)或與其文本行中的下一個字隔開多于一個正常字間隔。一些實施例采用在以上提及的美國專利公開No. 2007/0250497中描述的處理來確定字間隔和更大的間隔。一些實施例采用不同的要求(例如,在交叉字之間有小于或大于五個邊界字)來執(zhí)行操作沈30。然后該處理前進(jìn)到以上描述的沈07。圖觀例示了頁面2700和矩形2705,其中圈出了矩形2705的交叉字。交叉字包括字2810( “ciIlum")和2815( ‘‘nulla,,)以及其他。在交叉字沘10與沘15之間有一個邊界字觀20( “eu”);然而,如果對于交叉字之間的邊界字的要求為兩個或更大,則還將移除這部分的矩形。一些實施例僅僅移除從交叉字的最大冒進(jìn)到最大縮進(jìn)以及交叉字之間的不合格區(qū)域。其他實施例還移除可能超出裝訂線的區(qū)域。圖四例示了頁面2700的裝訂線四05和四10。由于頁面中央的調(diào)出部區(qū)域,所以兩個主要列之間的裝訂線沒有貫穿頁面的整個長度。一些實施例在整個語義重構(gòu)處理中采用導(dǎo)引和裝訂線。例如,采用裝訂線來拆分文本行并識別列。處理在下面的第IV章中進(jìn)行描述。D.軟件架構(gòu)在一些實施例中,以上描述的導(dǎo)引和裝訂線分析處理被實現(xiàn)為在特定機(jī)器(例如,計算機(jī)、媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式或資源受限設(shè)備) 上運(yùn)行(或者存儲在計算機(jī)可讀介質(zhì)上)的軟件。圖30概念性地例示了一些實施例的用于識別文檔中的導(dǎo)引和裝訂線的導(dǎo)引和裝訂線分析應(yīng)用3000的軟件架構(gòu)。在一些實施例中,應(yīng)用是獨(dú)立應(yīng)用或者集成到另一應(yīng)用(例如,文檔重構(gòu)應(yīng)用)中,而在其他實施例中,應(yīng)用可能是在操作系統(tǒng)內(nèi)實現(xiàn)的。導(dǎo)引和裝訂線分析應(yīng)用3000包括導(dǎo)引識別模塊3005、密度集群模塊3010和裝訂線識別模塊3015以及導(dǎo)引和裝訂線信息存儲設(shè)備3020。圖30還例示了文檔內(nèi)容3025。導(dǎo)引識別模塊3005從文檔內(nèi)容3025接收信息。 導(dǎo)引識別模塊3005分析文檔內(nèi)容以識別文檔中的對準(zhǔn)導(dǎo)引。識別出的導(dǎo)引被傳遞到裝訂線識別模塊3015以及到導(dǎo)引和裝訂線信息存儲設(shè)備3020以及文檔內(nèi)容3025。在一些實施例中,導(dǎo)引識別模塊3005執(zhí)行處理2100和2500的一些或全部。導(dǎo)引識別模塊3005還將信息傳遞到密度集群模塊3010,并從密度集群模塊3010 接收信息。密度集群模塊3010接收來自導(dǎo)引識別模塊3005和/或?qū)б脱b訂線信息存儲設(shè)備3025的輸入數(shù)據(jù),并對輸入數(shù)據(jù)執(zhí)行密度集群以確定潛在的導(dǎo)引。在一些實施例中, 密度集群模塊3010執(zhí)行處理2000的一些或全部。裝訂線識別模塊3015接收來自導(dǎo)引識別模塊3005和文檔內(nèi)容3025的信息。裝訂線識別模塊分析接收到的信息以識別文檔中的裝訂線。所識別出的裝訂線被傳遞到導(dǎo)引和裝訂線信息存儲設(shè)備3020以及文檔內(nèi)容3025。在一些實施例中,裝訂線識別模塊3015 執(zhí)行處理沈00的一些或全部。在一些實施例中,由以上描述的模塊或其他模塊執(zhí)行的處理的結(jié)果被存儲在電子存儲設(shè)備中(例如,作為文檔對象模型的一部分)。文檔對象模型然后可以用于在電子顯示設(shè)備(例如,手持式設(shè)備、計算機(jī)屏幕,等等)上顯示文檔,使得用戶能夠瀏覽文檔和/或與該文檔交互(例如,通過觸摸屏、游標(biāo)控制設(shè)備,等等)。IV.確定布局和流文檔通常具有隱含的結(jié)構(gòu)和內(nèi)容流。具體而言,在一些情況下,字符(和內(nèi)嵌圖形)的有序序列構(gòu)成字,字的有序序列構(gòu)成文本行(或者用連字符來跨接文本行),文本行的有序序列構(gòu)成段落,段落的有序序列構(gòu)成列(或者跨接列),列的有序序列構(gòu)成布局,以及布局的有序序列構(gòu)成文檔的章節(jié)。當(dāng)在電子文檔的文件格式中沒有提供這種結(jié)構(gòu)時,該結(jié)構(gòu)先前不能被軟件訪問。盡管僅僅瀏覽文檔不必要求文檔結(jié)構(gòu),但是用于編輯文檔、導(dǎo)入 (import)文檔、搜索文檔、設(shè)計文檔樣式或者以其他方式重新計劃文檔的應(yīng)用卻需要了解文檔結(jié)構(gòu)和流,以正常地工作。本發(fā)明的一些實施例提供了用于確定文檔或文檔區(qū)域的布局和流的方法。它包括確定語義分級(例如,文檔的字、行和段落),以及布局性質(zhì),例如列和列如何放在一起用于對文檔的預(yù)期閱讀。在一些實施例中,處理的目的是識別人將從頭到尾閱讀文檔的順序。圖31概念性地例示了一些實施例的用于確定文檔的布局和流的處理3100。將結(jié)合圖32來描述處理3100。圖32例示了針對具有兩列文本的文檔的頁面3200確定的各種布局和流信息的序列。在圖32中,將認(rèn)識到頁面3200的內(nèi)容不是重要的,而行、段落等才是重要的。如圖31所示,處理3100接收(在3105處)文檔的一部分。在一些實施例中, 該部分是整個文檔或者章節(jié)、頁面或區(qū)。然后該處理識別(在3110處)接收到的文檔中的文本行。這包括識別共享公共基線的字符以及在必要時將預(yù)備(preliminary)行合并到一起(例如,下標(biāo)和上標(biāo))。圖 32例示了對行3205和3210的識別。下面將在第A節(jié)中進(jìn)一步對一些實施例的行識別處理進(jìn)行詳細(xì)描述。接下來,該處理識別(在3115處)文本中的字。一些實施例采用如在以上提及的美國專利公開No. 2007/0250497中描述的差值集群來識別文本中的字。圖32例示了對頁面3200上的字的識別,包括來自行3205的字3215( “Lorem")和來自行3210的字 3220( “amet”)。下面將在第B節(jié)中進(jìn)一步詳細(xì)描述字識別處理。然后該處理拆分(在3120處)文本斷開處的文本行。圖32例示了行3205被拆分為行3225和3230,而行3210被拆分為行3235和3240。下面將在第C節(jié)中進(jìn)一步詳細(xì)描述一些實施例的行拆分處理。在拆分了行之后,處理將文本行放置(在3125處)成段落。圖32例示了在頁面 3200上識別出的段落3245和3250。下面將在第D節(jié)中進(jìn)一步詳細(xì)描述段落識別處理。最后,處理將段落放置(在3130處)成列和布局。圖32例示了在頁面3200上識別出的列3255和3260。下面將在第E節(jié)中進(jìn)一步詳細(xì)描述列和布局識別處理。一些實施例不一起執(zhí)行處理3100的全部操作。相反,一些實施例在處理3100的操作之間執(zhí)行其他文檔重構(gòu)處理。例如,一些實施例確定文本行和文本中的字,但是然后在拆分文本行之前識別導(dǎo)引和裝訂線。A.初始行識別如上所述,在一些實施例中,必須識別文本行。由于特定文本行中的每個字符不必然總是共享公共基線,所以一些實施例試圖基于兩行中的字符將要被讀為同一文本行的一部分(例如,上標(biāo)和下標(biāo))的事實而將多個行合并到一起。圖33概念性地例示了一些實施例的用于識別和合并文本行的處理3300。將結(jié)合圖34和35來描述處理3300。圖34例示了具有六個交疊文本行的分組3405至3430的頁面3400,而圖35例示了根據(jù)本發(fā)明一些實施例對這些文本行分組的合并。如圖33所示,處理接收(在3305處)文檔的一部分。在一些實施例中,該處理是文檔的頁面或者頁面的區(qū),等等。然后該處理確定(在3307處)文檔部分中是否有任何字符。當(dāng)沒有字符時,處理結(jié)束。否則,處理將共享公共基線的字符關(guān)聯(lián)(在3310處)為預(yù)備文本行。在一些實施例中當(dāng)字符具有相同的y坐標(biāo)錨點時,這些字符共享公共基線。通常,關(guān)聯(lián)共享公共基線的字符將標(biāo)準(zhǔn)文本行分組到一起。一些實施例采用小閾值,使得預(yù)備文本行中的y坐標(biāo)錨點不必精確地相等,但是必須在彼此的小閾值內(nèi)。接下來,處理識別(在3315處)垂直交疊的文本行分組。在一些實施例中,當(dāng)?shù)谝恍械慕缍ň匦卧趛坐標(biāo)值上與第二行的界定矩形交疊時,這兩行垂直交疊。圖35例示了頁面3400,該頁面3400具有六個垂直交疊文本行的分組行3505和3506,行3510和3511, 行 3515 和 3516,行 3520,3521 和 3522,行 3525 和 3526 以及行 3530 和 3531。行 3520 與行 3522關(guān)聯(lián)成一個分組,這是因為這兩行都與行3521交疊,盡管它們彼此并不交疊。盡管沒有水平交疊,但是由于航3530和3531垂直交疊,所以在一些實施例中它們也初始地被分組到一起。然后該處理選擇(在3320處)未評估分組,并將該分組分隔(在3325處)成多個部分,不同部分的文本行之間沒有水平交疊。在一些實施例中,當(dāng)?shù)谝晃谋拘械慕缍虻?X坐標(biāo)與第二文本行的界定框的X坐標(biāo)交疊時,這兩個文本行水平交疊。例如,此時分隔出行3530和3531,因為它們沒有水平地交疊,并由此將不會被認(rèn)為不是同一行。一些實施例在文本行的開頭和結(jié)尾處擴(kuò)展對水平交疊的量度達(dá)小的距離(例如,空格字符的一半),使得合并行的開頭或結(jié)尾處的偏置(offset)字符(例如,下標(biāo)和上標(biāo))。例如,在行3510與 3511之間沒有水平交疊,但是它們不會被分隔開,這是因為行3510的結(jié)尾離行3511的開頭足夠緊密。在分隔了所選的分組之后,該處理從該分組中選擇(在3330處)未評估的部分, 并從頂部到底部地排序(在3335處)該部分中的行。由此,如果選擇了具有行3520至3522 的所選部分,則這些行將被排序如下,即第一個是行3520,第二個是行3521以及第三個是行3522。各種實施例按照冒進(jìn)、縮進(jìn)、基線或者行的垂直位置的其他量度來對行進(jìn)行排序。然后該處理選擇(在3340處)該部分中的最頂部的未評估行。接下來,該處理選擇(在3345處)所選行中的第一個(對于從左向右的語言來說是從左側(cè)起閱讀)未評估字符。該處理確定(在3350處)是否可以將所選字符合并到下一行。當(dāng)所選字符沒有顯著地與下一行中的任何字符水平地交疊時,一些實施例允許將字符合并到下一行。一些實施例允許字符之間的一定小量的水平交疊。對于從左向右的語言來說,一些實施例允許要向下合并的字符的左側(cè)比要向下合并的字符的右側(cè)有更小的交疊,以考慮對于偏置字符的公共間距調(diào)整。此外,一些實施例允許在交疊字符的原始插入順序相鄰時有任意量的交疊。在一些實施例中,插入順序是在頁面上繪制字符的順序。通常(盡管不總是),字符是按照它們要被閱讀的順序來繪制的,因此當(dāng)兩個垂直和水平交疊的字符在插入順序上相鄰時,可能它們是要在一起閱讀的。當(dāng)處理確定所選字符可以被合并到下一行時,該處理將所選字符合并(在3355) 到下一行。然后該處理前進(jìn)到下面描述的3365。否則,當(dāng)所選字符不能被合并時,該處理將所選字符保持(在3360處)在所選行中。接下來,處理確定(在3365處)所選行是否包括更多字符。當(dāng)當(dāng)前所選行中有更多字符時,該處理前進(jìn)到3345以選擇該行中的下一個未評估字符。否則,當(dāng)已經(jīng)評估了該行中的所有字符時,處理確定(在3370處)當(dāng)前部分是否包括更多行。當(dāng)在當(dāng)前所選部分中有更多行時,該處理前進(jìn)到3340以選擇下一個未評估的行。否則,當(dāng)已經(jīng)評估了部分中的所有行時,處理確定(在3375處)所選分組是否包括更多部分。當(dāng)在當(dāng)前所選分組中有更多部分時,處理前進(jìn)到3330以選擇另一個部分并合并該部分中的行。否則,當(dāng)已經(jīng)評估了該分組中的所有部分時,該處理確定(在3380處) 在文檔部分中是否有任何更多的分組要評估。當(dāng)有更多分組時,該處理前進(jìn)到3320以選擇另一個分組。否則,當(dāng)已經(jīng)評估了所有分組時,針對文檔部分的行合并完成,該處理結(jié)束。 圖35例示了在一些實施例中的針對頁面3500的行合并的結(jié)果。行3506可以向下合并到行3505,使得行3505現(xiàn)在包括來自行3506的上標(biāo)“m”,而行3506為空并由此被移除。盡管在行3510與3511之間沒有水平交疊,但是行3510的結(jié)尾與行3511的開頭足夠緊密使得它們不會被分隔開,并且行3510的所有內(nèi)容可以被向下合并到3511中。行3516 中的兩個字符被向下合并到行3515。行3520至3522不能完全合并。行3520中的字符“b”初始向下合并到行3521。 接著,行3521中的字符“A”向下合并到行3522,因為它不與字符“C”交疊。然而,字符“b” 不向下合并到行3522,這是因為它與字符“C”完全交疊。由此,行3521僅包括“b”,行3522 包括“A”和“C”,而行3520為空。如上所述,如果“b”和“C”按照插入順序是相鄰的,則一些實施例將“b”合并到行3522中。類似地,行3525和3526不被合并。行3526中的所有字符與行3525中的一個或多個字符有較大程度的交疊,并由此不被向下合并到行3525。按照頁面3500的插入順序, 行3526中的“T”不可能在行3525的“h”與“η”之間。最后,行3530和3531沒有被合并, 這是因為這兩行之間沒有水平交疊,由此它們在操作3325處被分隔開。在識別和合并了行之后,在一些實施例中識別字。一些實施例采用如在美國專利公開No. 2007/0250497中描述的差值集群,來基于字內(nèi)的字母之間以及字之間的間距來識別字。在一些實施例中,差值集群還提供關(guān)于段間隔、列間隔等的信息。一些實施例采用在下面第X章中描述的存儲器和處理效率技術(shù)來執(zhí)行差值集群。B.利用差值集群來識別字和間隔圖36概念性地例示了一些實施例的用于執(zhí)行差值集群分析的處理3600。很多形式的集群分析要求了解分組/集群的個數(shù),因為可能存在多個級別/分級的集群。例如,當(dāng)采用集群分析來分組天體時,對集群個數(shù)的規(guī)定確定集群分析是否將在恒星、太陽系、星系或者超星系團(tuán)的級別上來分組天體。然而當(dāng)采用集群分析來尋找內(nèi)容元素之間的結(jié)構(gòu)性關(guān)系時,例如在很多情況下不了解分組個數(shù)。例如,在文本的頁面的情況下,不能假設(shè)圖示符構(gòu)成字、字組合形成行以及多組行形成段落,這是因為文檔可能具有兩個或更多列文本,使得文本的給定初始行可能包括兩個或更多個段落的部分。在一些實施例中,集群分析是一組技術(shù),它們可以被應(yīng)用到數(shù)據(jù)點集合以將點分組成集群,集群中的點相比于其他集群中的點彼此更靠近。在一些實施例中,集群分析應(yīng)用到表示諸如圖示符、字和文本行的對象之間的水平和垂直間距的數(shù)據(jù)點。例如,一些實施例采用下面將描述的k均值(k-means)集群分析。以表示空間間距的個數(shù)集(Pl、…、pN)以及k (集群個數(shù))的已知值開始,采用該技術(shù)來將個數(shù)分隔成k個集群(V·· Ck,其由形式為 Cj= {Pi|aj<Pi<aj+l}的不等式來限定,其中 、…、%+1是增大的序列。在應(yīng)用k均值技術(shù)之前,按照大小來排序差值Pi+1_Pi,并且取k-Ι個最大差值作為分隔點。例如,如果 Pi+1-Pi是k-Ι個最大差值之一,則pi+1處于與Pi不同的集群中,并且pi+1是連續(xù)值…之一。 然后應(yīng)用k均值集群分析來重復(fù)精化(refine)集群。k均值技術(shù)包括取每個集群中的個數(shù)的平均值, 然后通過將Pi與最緊密的計算平均值相關(guān)聯(lián)來將它重新分布到集群中。重復(fù)執(zhí)行該技術(shù)直到不會給集群或其平均值帶來變化為止。在一些實施例中,本文公開并稱為“差值集群”的技術(shù)用來確定包括給定源內(nèi)容的內(nèi)容元素之間存在的結(jié)構(gòu)性關(guān)系的級別個數(shù),以及/或者這種級別之間的一個或多個分級關(guān)系,還有可以用于確定內(nèi)容元素是否與每個所確定的級別中的另一內(nèi)容相關(guān)的一個或多個特性。在一些實施例中,差值集群與其他技術(shù)一起采用k均值技術(shù)。在圖36所示的示例中,采用差值集群分析來分析內(nèi)容元素位置之間的差值(間距)。在一些實施例中,通過分析內(nèi)容元素之間的間距,可以至少部分地利用間距的分組數(shù)據(jù)來分組內(nèi)容元素。在一些實施例中,單獨(dú)地分析間距的每個方向分量。例如,采用對水平分量的差值集群分析來在字符間距、字間距和列間距之間進(jìn)行區(qū)分。在一些實施例中,可以采用對垂直分量的差值集群分析來區(qū)分行間距、段落間距和文本框間距。處理3600概念性地例示了針對單個方向分量的差值集群分析。該處理可以再次用于分析一個或多個附加方向分量。在一些實施例中,沿著一個或多個維度執(zhí)行差值集群分析的結(jié)果被組合到一起,以確定一個或多個級別處的內(nèi)容元素之間的結(jié)構(gòu)性關(guān)系。如圖36所示,處理3600接收(在3605處)文檔的一部分。然后該處理識別(在 3610處)文檔中的元素的定位。在一些實施例中,元素包括字符、圖示符、圖像、行、圖畫、 框、單元、頁邊以及/或者各種其他內(nèi)容元素。在一些實施例中,元素的定位包括確定一個或多個定位坐標(biāo)分量和/或?qū)⑵浞峙涞皆亍T谝恍嵤├?,按順序組織元素的定位。例如,當(dāng)分析字符的水平間距時,針對每行字符按照水平坐標(biāo)增大的順序組織字符。在一些實施例中,希望元素的定位坐標(biāo)值與元素之間的間距相關(guān)聯(lián),并且針對元素的寬度/長度來補(bǔ)償定位值。例如,當(dāng)針對元素的組織順序中的第η個位置處的元素確定補(bǔ)償水平坐標(biāo)(χ 坐標(biāo))值時,采用以下公式Xfn ^Xn-Ywi其中,V η是補(bǔ)償定位坐標(biāo)值,Xn是原始定位坐標(biāo)值,而Wi是第i個位置的元素的寬度。在一些實施例中,元素的寬度是基于它所表示的字符、字體大小以及字符的樣式, 等等。一些實施例通過采用已知的針對每個字符的錨點坐標(biāo)并以每個特定字符的寬度來調(diào)整該特定字符的這些坐標(biāo),來確定補(bǔ)償定位坐標(biāo)值。接下來,該處理確定(在3615處)相鄰元素的定位之間的一階差值。在一些實施例中,當(dāng)具有至少一個相同定位坐標(biāo)分量值的兩個元素在至少一個其他定位坐標(biāo)分量值中彼此順序緊鄰時,一個元素與另一個元素相鄰。例如,如果兩個圖示符屬于同一文本行并且兩者之間沒有其他圖示符,則這兩個圖示符彼此相鄰。在一些實施例中,當(dāng)兩個元素的對應(yīng)定位坐標(biāo)分量值之間的差值低于一限值或者在一個范圍值內(nèi)時,這兩個元素具有至少一個相同的定位坐標(biāo)分量。在各種實施例中,當(dāng)兩個元素按照與所識別出的元素定位相關(guān)聯(lián)的順序和/或組織而彼此緊鄰時,一個元素與另一個元素相鄰。在一些實施例中,定位之間的一階差值是經(jīng)寬度/長度補(bǔ)償?shù)亩ㄎ蛔鴺?biāo)值之間的差值。例如,在一些實施例中,當(dāng)確定補(bǔ)償水平坐標(biāo)的組織順序中第η個和第η+1個位置中的相鄰元素的補(bǔ)償水平坐標(biāo)(χ坐標(biāo)) 之間的差值時,采用以下公式^JTfl
在一些實施例中,一階差值與內(nèi)容中的圖示符之間的間隔間距相關(guān)聯(lián)。 接下來,該處理3600對一階差值進(jìn)行排序(在3620處)。在一些實施例中,組織一階差值包括按照升序?qū)σ浑A差值進(jìn)行排序。在一些實施例中,組織一階差值包括將權(quán)重值分配給一階差值中的一個或多個,以及至少部分地通過采用權(quán)重值來組織一階差值。例如,在一些實施例中,給定所用的字體及其字體度量(包括大小、缺省字母間距和與字體文本一起存儲的字距調(diào)整(kerning)值表),針對每個特定圖示符對以期望的圖示符間距來分割實際的圖示符間距。實際間距與期望間距之比按照增大的值來排序,并且在差值集群方法的其余部分采用該比值來替代一階差值。然后該處理確定(在3625處)排序的一階差值之間的二階差值。例如,當(dāng)確定一階差值的組織順序中第i個位置和第i+Ι個位置中的一階差值之間的二階差值時,采用以下公式A2Xi=AX(R1)-AXw其中,Δ 2Xi是第i個二階差值,ΔΧω是排序的一階差值的第i個位置中的一階差值,而ΔΧ( +1)是同一排序的一階差值的i+Ι位置中的一階差值。在一些實施例中,二階差值與圖示符的間距之間的差值相關(guān)聯(lián)。接下來,處理3600通過分析二階差值來確定(在3630處)集群級別的個數(shù)。在一些實施例中,分析二階差值包括組織所確定的二階差值。在一些實施例中,組織二階差值包括按照升序排序二階差值和/或按照增大的二階差值的順序繪制二階差值。在一些實施例中,組織二階差值包括將權(quán)重值分配給一個或多個二階差值。在一些實施例中,組織二階差值包括將二階差值分成一個或多個分組。在一些實施例中,二階差值各自被分類為分組間差值或分組內(nèi)差值。分組內(nèi)差值與相對較小的二階差值相關(guān)聯(lián),并且可以表示同一集群分組內(nèi)的一階差值的二階差值。分組內(nèi)差值的一個示例是將期望在同一字中的字母之間的字符寬度補(bǔ)償間距中發(fā)現(xiàn)的相對小變化。分組間差值與相對較大的差值相關(guān)聯(lián),并且可以表示不同集群分組之間的一階差值的二階差值。分組間差值的一個示例是一方面兩個字之間的間距與另一方面同一個字中的兩個字母之間的間距之間的相對大的差值。在一些實施例中,通過對有序二階差值應(yīng)用2均值集群分析來實現(xiàn)將二階差值分類成分組內(nèi)值和分組間值;具體而言,按升序取(P1,…,PN)作為M2X1,…,Δ2ΧΝ}。類似地, 可以針對有序二階差值應(yīng)用足以區(qū)分兩個集群的數(shù)據(jù)值的任何其他集群分析技術(shù)。然后分組內(nèi)差值在第一集群C1= {pja^p^aj中,而分組間差值在第二集群C2= {Pi | a2 ^ Pi < a3}中,其中< a2 < a3。在一些實施例中,內(nèi)容元素基于如上所述分析的它們的空間關(guān)系而被確定要組織到的級別的個數(shù)比在差值集群分析中找到的分組間差值的個數(shù)多一個。 例如,當(dāng)存在兩個分組間差值時,結(jié)構(gòu)性級別的個數(shù)為三個。舉一個簡單的例子,考慮形成包括單行文本的字的字符。x-x方向上的字符之間的間距中的一階差值將產(chǎn)生字符間距與字間距之間的二階差值(一個分組間差值),指示結(jié)構(gòu)的兩個級別(字和行)。當(dāng)文本在兩列中時,將針對總共兩個分組間差值檢測(字間距與列間距之間)進(jìn)一步的二階差值,指示 X方向上的三個結(jié)構(gòu)性級別(字、行和列)。在一些實施例中,重復(fù)y方向上的分析并組合結(jié)果在可應(yīng)用于特定內(nèi)容時將識別在字符與字符分組之間的間距中出現(xiàn)的任何進(jìn)一步結(jié)構(gòu)性級別(例如,段落,等等)。
然后該處理確定(在3635處)每個集群級別的特性。然后處理結(jié)束。在一些實施例中,確定特性包括確定哪個一階差值(和/或什么范圍的一階差值)與哪個集群級別相關(guān)聯(lián)。在一些實施例中,確定特性包括計算與和集群級別相關(guān)聯(lián)的一階差值相關(guān)聯(lián)的統(tǒng)計值。例如,通過確定與集群級別相關(guān)聯(lián)的一階差值的部分的平均值、最小值和最大值,可以確定內(nèi)容中的圖示符之間的平均、最小和最大間距。令L為集群級別的個數(shù)。在一些實施例中,通過計數(shù)二階差值的第二集群中的點的個數(shù)并加1來計算L。接著,可以識別與每個級別相對應(yīng)的一階差值的分組,并且例如可以按照以下兩種方式之一來識別每個級別處的補(bǔ)償V值的集群。一種可能是對一階差值執(zhí)行L均值集群分析。所得的L個集群是與每個級別相對應(yīng)的一階差值的分組。接著,通過將一階差值的第(m+1)個、第(m+幻個…和第L個集群的點的個數(shù)加1來計算級別m處的Xn'的集群的個數(shù)Km。最后,對補(bǔ)償Xn'值執(zhí)行Km均值分析,以生成級別m處的Km個集群。第二種可能是在初始計算每個一階差值Δ Xn = Xn+1' -Xn'以將其值與索引η存儲在一起的時候,其中η可以用于識別相減以生成差值的連續(xù)X值對中的任一個。將該值和索引引用存儲在單個“一階差值”數(shù)據(jù)結(jié)構(gòu)中。類似地,當(dāng)初始計算每個二階差值時,將其值與索引引用存儲在一起,索引引用可以用于識別其值被相減以生成差值的連續(xù)“一階差值”數(shù)據(jù)對中的任一個?,F(xiàn)在,針對位于第二集群中的每個二階差值(即,針對每個分組間差值),采用其索引引用來識別一階差值中的分隔點。這意味著索引識別被分隔成單獨(dú)的集群的一階差值對。按照這種方式進(jìn)行分隔得到與原始數(shù)據(jù)中的集群的L個級別相對應(yīng)的一階差值的L個集群?,F(xiàn)在,級別η處的Xn值集群被識別如下針對一階差值的第(m+1)個、 第(m+幻個…和第L個集群中的每個一階差值數(shù)據(jù),采用其索引引用作為Xn'值中的分隔點ο圖37例示了差值集群的示例。在一些實施例中,圖37的示例與圖36的處理3600 相關(guān)聯(lián)。一階差值3705、3710和3715的分組按照從最低值到最高值的順序在與一階差值相關(guān)聯(lián)的行上繪制。每個點與一個差值(例如,從文本字符或其他圖示符到相鄰的文本字符或其他圖示符的距離)相關(guān)聯(lián),并且在圖37中,點沒有在彼此之上疊置以清楚地例示該示例。在所示示例中,數(shù)據(jù)與圖示符之間的水平間距相關(guān)聯(lián)。通過排序一階差值,該示例例示了一階差值3705、3710和3715的三個分組。一階差值分組3705與構(gòu)成字的圖示符之間的間距相關(guān)聯(lián)。一階差值分組3710與字之間的間距相關(guān)聯(lián)。一階差值分組3715與列之間的間距相關(guān)聯(lián)。對于每對相鄰一階差值,二階差值(即,一個一階差值與相鄰一階差值之間的差值)被確定并按照升序在與二階差值相關(guān)聯(lián)的行上繪制。二階差值分組3720、3725 和3730各自包括與二階差值相關(guān)聯(lián)的一個或多個點。在一些實施例中,點3725是包括二階差值分組的相關(guān)聯(lián)的二階差值點的分組的成員。在一些實施例中,點3730是包括二階差值分組的相關(guān)聯(lián)二階差值點的分組的成員。在一些實施例中,3720被識別為一個集群,而3725與3730 —起被識別為第二個集群。 同一單個一階差值分組內(nèi)的一階差值之間的二階差值(分組內(nèi)差值)被包括在二階差值分組3720中。例如,在文本文檔中,通常字內(nèi)或者在不同對字之間的間距中的字符之間的字符寬度補(bǔ)償間距僅略微變化。分組3705和3710中的分組間相鄰點之間的二階差值被包括在點3725中。分組3710和3715中的分組間相鄰點之間的二階差值被包括在點3730中。 由于在該示例中存在兩個分組間二階差值,所以有2加1個(3個)分組級別(在本例中為,字、列中的文本行的句子或其部分、以及列)。通過確定分組3705中的一階差值的最小值和最大值,可以確定構(gòu)成字的圖示符之間的最小間距和最大間距,并且類似地可以采用分組3710和3715來分別確定字間距和列間距。在一些實施例中,采用與每個分組級別相關(guān)聯(lián)的最小和最大間距來例如通過識別包括字的字符分組相應(yīng)地分組內(nèi)容元素(例如,圖示符),將字分組成列中的文本行,等等。 通過采用從集群分析確定的數(shù)據(jù),將圖示符分組成確定的分組級別??梢韵鄬τ谌我鈨?nèi)容快速地且自動地執(zhí)行分析,這部分是由于不必事先了解在分析的內(nèi)容或其他元素集合的結(jié)構(gòu)中有多少分組級別。無論分組級別的個數(shù)如何,僅在兩個處理步驟中確定級別個數(shù)。通過確定分組3705中的一階差值的平均值,可以確定構(gòu)成字的圖示符之間的平均間距。類似地,可以針對構(gòu)成字的圖示符確定其他統(tǒng)計量。類似地,可以采用對分組3710和3715中的一階差值的分析來確定與字間距和列間距相關(guān)的統(tǒng)計量。C.拆分行一些實施例在生成字和段中斷信息之后拆分文本行。例如,在文本行跨多于一個列的情況下拆分文本行,因為兩個(或更多個)部分中的文本可能不打算在一起閱讀。一些實施例采用從如上在第III節(jié)中所述的處理得出的導(dǎo)引和裝訂線信息以及來自差值集群的信息(例如,段間隔,等等),來拆分文本行。圖38概念性地例示了一些實施例的用于拆分文本行的處理3800。將結(jié)合圖39來描述處理3800的部分。圖39例示了如下序列,該序列示出了識別應(yīng)在哪里拆分頁面3900 中的行。如圖38所示,處理3800接收(在3805處)文檔部分的文本行、導(dǎo)引和裝訂線信息以及段中斷信息。在一些實施例中文本行信息是處理3300的輸出,而在一些實施例中導(dǎo)引和裝訂線信息是處理2100、2500和2600的輸出。段中斷(或段間隔)信息是如在以上提及的美國專利公開No. 2007/0250497中以及在以上的一些實施例中描述的差值集群的輸出之一。在一些實施例中,文本部分是整個文檔、章節(jié)、頁面或頁面的區(qū)。接下來,該處理基于接收到的文本行的基線的y坐標(biāo)來對接收到的文本行進(jìn)行排序(在3810處)。在頁面的底部開始,處理選擇(在3815處)最底部的未評估文本行,并識別(在3820 處)所選行中的潛在拆分。一些實施例將潛在拆分定義為行中的兩個字之間的任意間隔,其(i)是如由差值集群定義的段間隔,或者(2)具有通過其的導(dǎo)引或裝訂線。 其他實施例針對潛在拆分僅采用一個或另一個或者不同定義。然后該處理確定(在3822處)是否識別了任何潛在拆分。當(dāng)沒有識別出拆分時, 處理前進(jìn)到下面描述的3845。否則,該處理從當(dāng)前選擇的文本行選擇(在3825處)潛在拆分。然后該處理確定(在3830處)是否潛在拆分的χ區(qū)間與來自前一文本行的任何潛在拆分的χ區(qū)間交疊。評估的第一個文本行將不具有前一文本行,由此將不具有交疊的潛在拆分。在當(dāng)前所選的潛在拆分的χ區(qū)間不與來自前一行的潛在拆分的χ區(qū)間交疊時,處理前進(jìn)到以上描述的3822。否則,該處理關(guān)聯(lián)(在3835處)交疊的潛在拆分。然后處理前進(jìn)到以上描述的3822。當(dāng)沒有更多的未評估潛在拆分時,該處理確定(在3845處)是否有更多的行要評估。當(dāng)還有更多行時,該處理前進(jìn)到3815以識別下一行中的潛在拆分并測試它們的交疊。
當(dāng)已經(jīng)評估了所有行時,已經(jīng)識別和關(guān)聯(lián)了文檔部分中的所有潛在拆分。然后該處理執(zhí)行若干操作來消除假肯定(false positive)(即,實際上不應(yīng)拆分文本行的潛在拆分)。處理確定(在3847處)是否識別出任何潛在拆分分組。當(dāng)沒有識別出來時,處理結(jié)束。否則,該處理選擇(在3850處)一個相關(guān)聯(lián)的潛在拆分的分組,并定義(在3855處) 完全通過所選分組的潛在拆分的矩形條。在一些實施例中,該條具有作為所選分組中的所有潛在拆分的χ區(qū)間的相交部的χ區(qū)間(即,兩個條的潛在拆分幾乎不交疊的條的χ區(qū)間將非常窄)。圖39例示了具有若干文本行的頁面3900。大多數(shù)文本行在兩列之間被拆分。然而,任一列中的基線是相同的。因此,在行拆分處理之前,來自第一列的每一行將與來自第二列的一個行處于同一行中。圖39還例示了相關(guān)聯(lián)的潛在拆分的四個矩形條3905、3910、 3915 和 3920。在定義了所選分組的矩形條之后,該處理確定(在3860處)是否該條跨少于閾值個數(shù)的文本行。跨一個或僅幾個文本行的條不可能代表閱讀中的實際拆分,但是可以是一行或其他非中斷間隔內(nèi)的制表位(tab)。有時段間隔是在字之間的間隔由于兩端對齊的文本而非常大的情況下通過差值集群發(fā)現(xiàn)的。當(dāng)條跨少于閾值個數(shù)的行時,該處理從潛在拆分列表中移除(在3865處)該分組,并將不會在這些定位處拆分文本行。然后該處理前進(jìn)到下面描述的3890。在頁面3900上,移除構(gòu)成條3910和3920的潛在拆分,這是因為它們沒有足夠的拆分作為可能的列中斷。更可能的是,這些潛在拆分是制表位或者大的字間隔。當(dāng)條跨至少閾值個數(shù)的行時,該處理確定(在3870處)當(dāng)前條是否在另一個條的閾值距離內(nèi)。一些實施例僅僅查看已經(jīng)被測試并且在確定另一個條是否在當(dāng)前條的閾值內(nèi)時還沒有被移除的先前條。在當(dāng)前條處于另一個條的閾值距離內(nèi)時,該處理移除(在3875 處)具有垂直更短條的分組(在一些情況下,其中行都具有相同的尺寸,這是跨更少文本行的條)。然后該處理前進(jìn)到下面描述的3890。頁面3900的條3905和3915都適合跨足夠的文本行來通過操作3860。然而,在一些實施例中,條彼此太靠近以至于不能兩者都保留。因此,移除構(gòu)成條3905的潛在拆分的分組,這是因為3915是兩個條中較長的一個。在一些實施例中,該處理防止列表項目符號 (bullet)或編號與它們所指代的項目拆分開,以及其他潛在有問題的拆分。在當(dāng)前條沒有與另一個條太近時,該處理確定(在3880處)該條是否包括不是段間隔的在一行中的閾值個數(shù)的后續(xù)潛在拆分。在一些實施例中,可以識別字邊緣意外對準(zhǔn)的導(dǎo)引和/或裝訂線。這尤其可能出現(xiàn)在文本按照等寬字體(例如,Courier)顯示的情況下。當(dāng)條至少包括該閾值個數(shù)的后續(xù)非段間隔潛在拆分時,該處理從潛在拆分列表中移除 (在3885處)該分組,并將不在這些定位處拆分文本行。接下來,該處理確定(在3890處)是否有更多的潛在拆分分組還沒有相對于各種閾值要求進(jìn)行測試。當(dāng)有更多分組時,該處理前進(jìn)到3850以選擇和評估下一個潛在拆分分組。否則,當(dāng)已經(jīng)評估了所有分組時,該處理利用還沒有被移除的任何拆分來拆分(在3895 處)文本行。然后處理結(jié)束。在針對頁面3900例示的情況下,將被采用的拆分僅是隔開兩列文本的中央處的拆分。盡管處理3800被例示為采用三個具體測試(操作3860、3870和3880)來移除潛在拆分分組,但是一些實施例僅采用它們中的子集,而其他實施例采用未示出的其他測試來清除不予考慮的潛在拆分。D.段落識別在一些實施例中,一旦已經(jīng)合并和拆分了文本行,則將這些行分組成段落。圖40 概念性地例示了一些實施例的用于將文本行分組成段落的處理4000。將結(jié)合圖41來描述處理4000的部分。圖41例示了對文檔的頁面4100上的段落的識別。如圖40所示,處理 4000接收(在4005處)文檔一部分的文本行。在一些實施例中,在執(zhí)行處理4000之前, 已經(jīng)合并(例如,通過處理3300)和拆分(例如,通過處理3800) 了文本行。在一些實施例中,文檔部分是整個文檔、文檔的章節(jié)、頁面或者區(qū),等等。該處理確定(在4007處)文檔部分中是否有任何行。當(dāng)沒有時,處理結(jié)束。否則, 從接收到的文檔部分的頂部開始,該處理選擇(在4010處)文檔部分中的第一個未評估文本行。然后該處理確定(在4015處)在所選行下面是否有多于一個文本行。在一些實施例中,為了操作4015,這些行必須在針對所選行下面的要考慮的更低行彼此的特定垂直距離內(nèi)。一些實施例要求至少三個文本行來判斷文本行是否屬于同一段落。在一些實施例中, 由于為了進(jìn)行比較必需兩個間距(即,第一與第二文本行之間的間距以及第二與第三文本行之間的間距),所以有該要求。當(dāng)所選文本行下面有兩個或更多個行時,該處理前進(jìn)到下面描述的4030。否則,當(dāng)所選文本行下面有少于兩個行時,該處理將所選行自己放置(在4020處)在一個段落中。 然后該處理確定(在4025處)文檔部分中是否有更多行。當(dāng)沒有更多行時(例如,當(dāng)文檔部分中只有一行文本時),該處理結(jié)束。否則,當(dāng)有更多行時,該處理前進(jìn)到4010并選擇下一個文本行。在4015處,當(dāng)在4010處選擇的行(S卩,當(dāng)前段落中的第一個行)下面有兩個或更多個文本行時,該處理識別(在4030處)所選文本行下面的下兩個行。然后該處理確定 (在4035處)間距和對準(zhǔn)是否在三個行之間一致。在一些實施例中,該確定包括檢查從第一個行到第二個行的垂直距離是否與從第二個行到第三個行的垂直距離相同。一些實施例采用文本行的基線來確定垂直間距。在一些實施例中,如果一個行開始縮進(jìn)或者在其他行的左側(cè)結(jié)尾,則識別對準(zhǔn)差值,由此通知段落可能的開始或結(jié)尾。當(dāng)間距和對準(zhǔn)不一致時,該處理應(yīng)用(在4040處)啟發(fā)式規(guī)則以確定是否向具有所選第一行的段落添加任一個識別出的行。例如,在一些實施例中,當(dāng)頭兩行緊密在一起而第三行向下更遠(yuǎn)離時,頭兩行被放置在一個段落中,而第三行是下一個段落的開始。類似地,在一些實施例中,當(dāng)?shù)谝恍懈h(yuǎn)離第二和第三行時,第一段落是單行段落,并且在第二行開始下一段落。在一些實施例中采用類似的規(guī)則用于行之間的對準(zhǔn)差值。在應(yīng)用了啟發(fā)式規(guī)則之后,該處理前進(jìn)到4010以選擇下一個未評估文本行(即,還未被分配到一個段落的下一行),并開始一個新的段落。當(dāng)三個行之間的間距和對準(zhǔn)一致時,該處理將所有三個行放置(在4045處)在同一段落中。一些實施例還識別段落的間距和對準(zhǔn)性質(zhì)。例如,一些實施例將段落識別為左對準(zhǔn)、右對準(zhǔn)、兩端對齊、居中,等等。一些實施例留下開放的多個可能性(例如,具有縮進(jìn)的第一行、所有三行右對準(zhǔn)或者非??拷蚁聝尚凶髮?zhǔn)的段落可能是左對準(zhǔn)、右對準(zhǔn)或者兩端對齊三者中的任一個)。在識別了新段落的開始的初始階段之后,處理4000試圖向段落添加行。在一些實施例中,行添加是基于從構(gòu)成段落的開始的三個行確定的間距和對準(zhǔn)性質(zhì)。在其他實施例中,當(dāng)添加不與段落的間距和對準(zhǔn)性質(zhì)沖突的行時,基于任何進(jìn)一步事實來精化間距和對準(zhǔn)性質(zhì)。接下來,該處理確定(在4047處)文檔部分中是否有任何更多的行。當(dāng)沒有更多行(例如,文檔部分恰具有三個行)時,處理結(jié)束。否則,該處理識別(在4050處)文檔部分中的下一個文本行。然后該處理確定(在4055處)在當(dāng)前段落與識別出的文本行之間是否有間距或?qū)?zhǔn)失配。當(dāng)有失配時,處理結(jié)束該段落并前進(jìn)到以上描述的4010。在這種情況下,最近失配的行將是在4010處選擇的行。否則,當(dāng)間距和對準(zhǔn)一致(line up)時,該處理將該行添加(在4060處)到當(dāng)前段落中。然后處理前進(jìn)到以上描述的4047。在一些實施例中,當(dāng)識別出的下一個文本行與段落的一個性質(zhì)(例如,兩端對齊)不適合時,發(fā)現(xiàn)對準(zhǔn)失配。類似地,在一些實施例中,如果段落中的最后一行與下一行之間的間距相比于段落的間距增大,則發(fā)現(xiàn)間距失配。一些實施例采用其他停止條件(例如,得出識別出的行不要被添加到段落中的條件)。例如,一些實施例識別是否識別出的行中的第一個字將適合在左對準(zhǔn)段落的上一行的結(jié)尾處的空白空間中。當(dāng)是這種情況時,假設(shè)新的一行是下一段落的部分,這是因為如果該行是當(dāng)前段落的部分的話,字將處于上一行的結(jié)尾處的空白空間中,而非開始一個新的行。 類似地,一些實施例將縮進(jìn)識別為表示一個新的段落。一些實施例的第三個條件是是否識別出的行是統(tǒng)一樣式的(例如,全加粗或者具有更大字體大小)且不同于先前行中的任何字符的樣式。一旦完成了處理4000,則識別出文檔部分中的所有段落,并且將所有文本行分配給一個段落。一些實施例然后采用段落來識別列和布局。圖41例示了具有四個段落的頁面4100。對該頁面(該頁面是文檔部分)應(yīng)用處理4000使得識別出段落4105、4110、4115和4120。一些實施例的處理將開始自把頭三個行分組到一起,然后添加第四和第五行,直到第六行4125具有間距和對準(zhǔn)失配為止,從而在段落4105中留下五個行。然后該處理從第六行開始,并注意到下面兩行之間的間距和對準(zhǔn)失配。因為與第七行和第八行彼此相比第六行更遠(yuǎn)離它們,所以第六行就是整個段落4110, 并且下一個段落4115從第七行開始。類似地識別段落4115和4120。E.列和布局識別一些實施例在識別出段落之后將段落放置成列和布局。在一些實施例中,列是段落的垂直有序分組,其中文本連貫地從頂部到底部閱讀。一些實施例中的布局是非交疊列的集合,并且在一些實施例中的線性布局是列的水平有序分組,其中文本連貫地從最左列的頂部到最右列的底部閱讀。例如,一些實施例將具有未分段文本行且沒有頁眉或頁腳的單個頁面分類為具有一列的單個線性布局。圖42概念性地例示了在一些實施例中用于識別文檔一部分中的列和布局的處理 4200。將結(jié)合圖43至46來描述處理4200。圖43和44例示了兩個不同頁面4300和4400 上的段落,而圖45和46分別例示了針對兩個頁面4300和4400的流圖的生成。如圖42所示,處理4200接收(在4205處)文檔部分的段落的信息。在一些實施例中,該文檔部分是整個文檔、文檔的章節(jié)、頁面、區(qū),等等。在一些實施例中,采用以上描述的處理4000來確定段落信息。然后該處理確定是否有任何段落要選擇。當(dāng)沒有時,處理退出ο否則,該處理選擇(在4210處)一個段落。在一些實施例中,文檔部分中段落是在左上開始按順序選擇的,而在其他實施例中段落是按照隨機(jī)順序選擇的。接下來,該處理計算(在4215處)內(nèi)順序(in-order)、外順序(out-order)、左順序和右順序,以及伴隨這些值中的一個的段落集合。在一些實施例中,通過采用集合B(p) 來計算段落P的外順序。集合B(p)初始地是文檔部分中在段落ρ下面水平地與ρ交疊 (即,與χ坐標(biāo)交疊)的所有段落。例如,圖43例示了具有包括段落P 4305在內(nèi)的11個段落的頁面4300。集合B(p)初始是{Q,R,S,T,U}。接著,最靠近ρ的段落被識別為q,從集合B(p)中移除與段落q水平地交疊的所有段落。在段落P 4305的情況下,段落Q 4310 最靠近段落P,并且從集合B (ρ)中移除段落R 4315,S 4320,T 4325和U 4330。此時,集合 B(P)為㈧}。一些實施例然后繼續(xù)到初始地在集合B (ρ)中的對ρ的下一個最靠近段落,并從 B(P)中移除在該下一個最靠近段落下面且與之水平地交疊的任何段落。其他實施例繼續(xù)到留在集合B(p)中的對ρ的下一個最靠近段落,并且從B(ρ)中移除與該段落水平地交疊的任何段落。無論哪種方式,在圖43的示例中,段落P 4305的集合B(p)是㈧}。然后ρ的外順序是集合Β(ρ)的基數(shù)(cardinality)(即,元素個數(shù))。這針對Β(ρ)中的每個段落重復(fù)。 因此,在這種情況下,段落P 4305的外順序是1。作為具有大于1的外順序的段落的示例, 針對段落R 4315,集合B (R)是{S,X},因此段落R 4315的外順序是2。在一些實施例中,類似于外順序,通過采用集合A(p)來計算段落ρ的內(nèi)順序。集合A(p)初始地是文檔部分中在段落ρ上面水平地與ρ交疊的所有段落。將最靠近ρ的段落選擇為段落q,并從A(ρ)中移除與段落q水平地交疊的段落。這然后針對A(p)中的每個段落重復(fù)。在頁面4300的示例中,用于段落P 4305的集合A(p)是空集合,而用于段落 R 4315的集合A(p)是{0,W}。段落ρ的內(nèi)順序是集合A (ρ)的基數(shù)(即,元素個數(shù))。在一些實施例中,還采用集合L (ρ)(采用相同的移除規(guī)則,在ρ左側(cè)且與ρ垂直交疊的段落)和集合R(P)(采用相同的移除規(guī)則,在P右側(cè)且與P垂直交疊的段落)類似地計算段落P的左順序和右順序。一些實施例在確定(例如,通過外部手段)語言方向為從上到下時,采用L(p)和R(P)用于流圖(見下面)。對于頁面4300,段落P 4305的集合R(P) 為IV},而段落V 4335的集合L(V)是{P}。段落R 4315的集合L(R)和R(R)都為空。一旦針對所選段落計算了內(nèi)順序、外順序、左順序和右順序,處理4200確定(在 4220處)是否有更多的段落要必須針對其計算各種值。如果有更多段落的話,則處理前進(jìn)到4210來選擇另一個段落。否則,一旦針對所有段落計算了值,則處理生成(在4225處)段落的流圖。一些實施例的流圖被生成為使得評估的文檔部分中的每個段落是一個節(jié)點。定向邊緣從段落P 的節(jié)點繪制到集合A(P)中的段落的每個節(jié)點。在一些實施例中,這與從集合B(P)中的段落的每個節(jié)點繪制定向邊緣到段落P的節(jié)點是相同的。圖45例示了頁面4300的初始流圖 4501。接著,處理4200識別(在4230處)調(diào)出部。在一些實施例中,從流圖移除識別出的調(diào)出部。在一些實施例中,調(diào)出部是頁面上要按照獨(dú)立于頁面上的其余文本的順序閱讀的文本元素。調(diào)出部的一些示例包括頁眉和頁腳、注腳、頁邊注(margin note)、邊條(side-bar)和放置在其他元素中的其他文本塊(例如,雜志文章中的大字體引述 )?!嵤├谖谋驹氐膸缀谓Y(jié)構(gòu)、其在頁面上的位置、其流性質(zhì)(內(nèi)順序、夕卜順序、左順序和右順序)以及其元素的樣式性質(zhì)的組合來識別調(diào)出部。例如,當(dāng)頂點ν包括靠近頁面頂部的單行段落,從單行段落到A(V)中的任意元素的距離大于一個行高度, L(V) ( 1,R(V) ( 1,并且L(V)和R(V)中的任何頂點共享這些條件時,一些實施例將段落分類為頁眉調(diào)出部。在一些實施例中,對頁腳調(diào)出部的要求也是類似的,只是找出到頁面底部和到B(V)中的元素的距離。一些實施例還將突出到列中(且不在它們自己的區(qū)中)的邊條、隨機(jī)定位的文本框、與其他文本沒有明顯關(guān)系的少量文本(例如,附圖標(biāo)題)等等識別為調(diào)出部。一些實施例基于純文本分析來進(jìn)行這種確定(以及對流性質(zhì)的其他確定),而其他實施例將圖像并入到分析中(例如,作為對附圖標(biāo)題的進(jìn)一步證據(jù))。例如,在一些實施例中,一些實施例將遠(yuǎn)離A(p)和B(p)中的所有元素的單行段落識別為隔離的小段落。在一些實施例中,當(dāng)具有單個文本行的段落由圖像的界線包圍且按照特定方式與圖像界線對準(zhǔn)(例如,在底部附近居中、在頂部附近居中,等等)時識別出標(biāo)題。當(dāng)兩個或更多個段落的矩形界定框相交時,一些實施例將除一個段落之外的所有段落都識別為相交調(diào)出部。例如,假設(shè)兩個段落P和q交疊,并且B (ρ) = {q,r}。當(dāng)r具有1的內(nèi)順序或者當(dāng)q是在A(r)中時,在一些實施例中q是相交調(diào)出部。一些實施例將其樣式和/或?qū)?zhǔn)性質(zhì)不與A(p)或B(p)中的段落一致時的任何段落ρ識別為相交調(diào)出部。 當(dāng)兩個段落相交以及沒有應(yīng)用以上的規(guī)則時,一些實施例將具有更小面積的段落識別為調(diào)出部。在針對文檔部分中的段落生成流圖之后,處理4200將流圖的節(jié)點合并(在4235 處)成列。如果A(p) = {q}且B(q) = {ρ},則一些實施例合并段落ρ和q的節(jié)點。在一些實施例中這表示段落P和q處于同一列中。在一些實施例中,新節(jié)點Pq將具有A(pq)= A (q),B(pq) =B(p),L(pq) = L(p)+L(q)和 R(pq) =R(p)+R(q)。例如,在圖 45 中,修改流圖4501使得在修改后的流圖4502中將節(jié)點S 4520、T 4525和U 4530合并到節(jié)點STU 4575中。類似地修改其他節(jié)點。圖46例示了在已經(jīng)將節(jié)點初始地合并成列之后針對圖44的頁面4400的流圖 4601。一些實施例將段落R 4420識別為調(diào)出部,這是因為它跨兩個列,并且左側(cè)和右側(cè)都有段落。因此,一些實施例從流圖4601中移除節(jié)點R 4620。這使得能夠?qū)⒐?jié)點進(jìn)一步合并到列中。一旦已經(jīng)識別出(以及在一些實施例中從流圖中移除)調(diào)出部,則處理4200將流圖分隔(在4240處)成布局。一些實施例將用于擴(kuò)展和縮減邊緣的標(biāo)記定義為分隔處理的一部分。在一些實施例中,如果段落P的外順序大于1并且集合B (ρ)中的每個段落q的內(nèi)順序為1,則從P到B(p)中的每個q的邊緣是擴(kuò)展邊緣。類似地,在一些實施例中,如果段落P的內(nèi)順序大于1并且集合A (ρ)中的每個段落q的外順序為1,則從A (ρ)中的每個q 到P的邊緣是縮減邊緣。圖45例示了引入到節(jié)點R 4515的邊緣都是縮減邊緣,并且從節(jié)點R 4515引出的邊緣都是擴(kuò)展邊緣。一些實施例的分隔檢查其邊緣全部被標(biāo)記的每個頂點V。當(dāng)ν的內(nèi)順序大于1時, 只要針對B (ν)中的每個ρ有Α(ρ) = {ν},則一些實施例定義其元素為B (ν)的分隔。類似地,當(dāng)ν的外順序大于1時,只要針對A(ν)中的每個ρ有B(p) = {ν},則一些實施例定義其元素為A(V)的分隔。當(dāng)兩個分隔都可能時,將頂點ν自己定義為分隔。基于這些規(guī)則,將流圖4502分隔成三個分隔4511,4512和4513。一些實施例將任何剩余節(jié)點放置在一個或多個分隔中,使得在分隔之間沒有任何幾何交疊的情況下定義最小個數(shù)的分隔。由于復(fù)雜的頁面結(jié)構(gòu),一些實施例采用比以上所述更放松的分隔規(guī)則。例如,在一些實施例中,當(dāng)能夠從節(jié)點ν生成分隔時,除了 ν的外順序大于1,清除遠(yuǎn)離ν且相對于ν較窄的A(V)的元素。當(dāng)A(V)中僅留有一個元素時,從ν 到被移除頂點的邊緣被移除,并且繼續(xù)分隔。一旦分隔完成,則處理4200結(jié)束。在一些實施例中,每個分隔對應(yīng)于一個線性布局,并且最終(合并的)節(jié)點中的每一個對應(yīng)于一列。一旦定義了分隔,則一些實施例計算文檔部分的性質(zhì),例如裝訂線寬度、 頁邊距、內(nèi)嵌或浮置圖像,等等。此外,布局和流信息(包括字、行、段落和列數(shù)據(jù))主要地用在對文檔的顯示中,并且使得能夠進(jìn)行更魯棒的與文檔的用戶交互,如在下面第VIII章和第IX章中所描述的。 例如,在一些實施例中,用戶可能希望瀏覽復(fù)雜的文檔,該文檔包括若干列文本、圖像、調(diào)出部、標(biāo)題等等,并且能夠?qū)⑽臋n的整個文本復(fù)制和粘貼到文本編輯器中。為實現(xiàn)此,向文檔中的每個元素分配一個閱讀順序,該閱讀順序試圖標(biāo)識人將閱讀文檔中的元素的順序。例如,一些實施例向列分配閱讀順序,使得閱讀順序符合人將從文檔或頁面的開始到結(jié)尾閱讀列的預(yù)期順序。其他實施例向其他結(jié)構(gòu)性元素(例如,段落、字等等)分配閱讀順序。在一些實施例中,當(dāng)用戶將這種文檔的整個文本復(fù)制和粘貼到另一個應(yīng)用中時,文本按照人將閱讀的順序出現(xiàn)在應(yīng)用中。這與從標(biāo)準(zhǔn)PDF文件(其按照嚴(yán)格的從上到下的配置來對所有文本排序)復(fù)制和粘貼不同。一些實施例還將圖像和形狀插入到閱讀順序中。例如,一些實施例將特定圖像識別為與特定文本列相關(guān)聯(lián),并將圖像插入到該文本列之前或之后(取決于文檔中的情況 (evidence)) 0作為示例,一些實施例識別出圖像與該圖像的標(biāo)題相關(guān)聯(lián),并將圖像插入到閱讀順序中恰在其標(biāo)題之前。一些實施例還定義結(jié)構(gòu)性元素之間的鏈接。例如,一些實施例采用閱讀順序來定義列結(jié)尾處的段落與下一列開始處的段落之間的鏈接,這兩個段落實際上是一個段落。在一些實施例中,為了保持每個段落分配給一個特定列的分級結(jié)構(gòu),不定義橋接列的單獨(dú)段落。相反,兩個段落之間的鏈接被定義為指示它們實際上是一個段落。一些實施例采用與將行添加到段落中的測試類似的測試,來確定來自第二列的頂部段落是否實際上是第一列的結(jié)尾處的段落的延續(xù)(即,檢查間距、對準(zhǔn)、字體樣式,等等)。然后可以采用該鏈接,例如如果用戶執(zhí)行意在選擇任一個所定義段落中的一個段落的選擇操作(例如,三擊),則將基于該鏈接選擇整個實際段落。一些實施例還定義布局(例如,跨頁面鏈接的布局)或區(qū)之間的鏈接。例如,一些實施例可以識別延續(xù)文本(例如,報紙中指示故事在另一頁面上繼續(xù)的文本),并且可以將具有延續(xù)文本的布局中的文本與其中文本延續(xù)的布局相鏈接。一些實施例僅在簡檔已經(jīng)匹配從而指示應(yīng)當(dāng)執(zhí)行鏈接時試圖進(jìn)行這種鏈接。例如,如果已經(jīng)將文檔識別為報紙,則一些實施例將搜索延續(xù)文本。E.軟件架構(gòu)
在一些實施例中,將以上描述的布局和流分析處理實施為在特定機(jī)器(例如,計算機(jī)、媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式或資源受限設(shè)備)上運(yùn)行(或者存儲在計算機(jī)可讀介質(zhì)上)的軟件。圖47概念性地例示了一些實施例的用于對識別文檔的布局和流特性的布局和流分析應(yīng)用4700的軟件架構(gòu)。在一些實施例中,應(yīng)用是獨(dú)立應(yīng)用或者集成到另一應(yīng)用(例如,文檔重構(gòu)應(yīng)用)中,而在其他實施例中,應(yīng)用可能是在操作系統(tǒng)內(nèi)實現(xiàn)的。布局和流分析應(yīng)用4700包括行識別模塊4705、行合并模塊4710、字識別模塊 4715、差值集群模塊4720、行拆分模塊4725、段落識別模塊4730、列和布局識別模塊4735以及順序計算器4740。圖47還例示了文檔內(nèi)容4745。行識別模塊4705接收來自文檔內(nèi)容4730的信息。 在一些實施例中,該信息是關(guān)于文檔中的字符的位置的信息。行識別模塊4705識別頁面上具有公共基線的字符并將它們分配給一個行。行識別模塊傳遞信息到行合并模塊4710并從其接收信息。行合并模塊識別垂直交疊的行的分組并確定是否應(yīng)當(dāng)合并這些行。在一些實施例中,行合并模塊4710執(zhí)行以上描述的處理3300中的一些或全部。行合并模塊4710 將該信息傳遞回行識別模塊4705,行識別模塊4705識別出最終的文本行。行識別模塊4705 將行信息傳遞回文檔內(nèi)容4745,以及傳遞到行拆分模塊4725。字識別模塊4715也從文檔內(nèi)容4745接收信息。在一些實施例中,該信息是關(guān)于文檔中字符的位置的信息。字識別模塊4715識別應(yīng)被分組到一起作為字的字符。字識別模塊4715將信息傳遞到差值集群模塊4720并從其接收信息。差值集群模塊4720對文檔字符執(zhí)行差值集群以返回字符之間的不同級別的間隔(例如,字間隔、段間隔,等等)。字識別模塊4715采用差值集群結(jié)果來識別字。字識別模塊4715將其結(jié)果(以及其他差值集群結(jié)果,例如段間距)傳遞到文檔內(nèi)容4745以及傳遞到行拆分模塊4725。行拆分模塊4725接收來自行識別模塊的行信息和來自字識別模塊的間隔信息, 以及來自文檔內(nèi)容4745的其他信息(例如,裝訂線信息)。行拆分模塊4725識別應(yīng)當(dāng)在哪里拆分行以及基于該拆分輸出新的行信息。該新的行信息被傳遞到文檔內(nèi)容4745以及段落識別模塊4745。在一些實施例中,行拆分模塊4725執(zhí)行處理3800中的一些或全部。段落識別模塊4730接收來自行拆分模塊4725的行信息以及來自文檔內(nèi)容4745 的其他信息(例如,對準(zhǔn)信息)。段落識別模塊4730識別哪些行應(yīng)當(dāng)被分組成段落并輸出所得信息。該段落信息被傳遞到文檔內(nèi)容4745以及傳遞到列和布局識別模塊4735。在一些實施例中,段落識別模塊4730執(zhí)行處理4000中的一些或全部。列和布局識別模塊4735接收來自段落識別模塊4730的段落信息以及來自文檔內(nèi)容4745的其他信息(例如,區(qū)信息)。列和布局識別模塊4735將段落分組成列并將列分組成布局。列和布局信息模塊4735將信息傳遞到順序計算器4740并從其接收信息。順序計算器4740從模塊4735接收段落信息,并計算段落的內(nèi)順序、外順序、左順序和右順序(以及對應(yīng)的集合A、B、L和R)。然后該信息被返回到模塊4735用于生成流圖。來自列和布局識別模塊4735的結(jié)果被傳遞到文檔內(nèi)容4745。在一些實施例中,列和布局識別模塊4745 執(zhí)行以上描述的處理4200的一些或全部。在一些實施例中,由以上描述的模塊或其他模塊執(zhí)行的處理的結(jié)果存儲在電子存儲設(shè)備中(例如,作為文檔對象模型的一部分)。文檔對象模型然后可以用于在電子顯示設(shè)備(例如,手持式設(shè)備、計算機(jī)屏幕,等等)上顯示文檔,使得用戶能夠瀏覽文檔和/或與文檔交互(例如,通過觸摸屏、游標(biāo)控制設(shè)備,等等)。V.表格識別 本發(fā)明的一些實施例識別文檔中的表格。一些實施例識別表格的單元、行和列,并且使得這些表格能夠編輯、導(dǎo)出到電子數(shù)據(jù)表(spreadsheet),等等。在一些實施例的表格識別處理中采用來自以上在第II章中描述的處理的區(qū)信息以及來自以上在第IV章中描述的處理的布局和流信息。即使在將表格繪制成包括交疊形狀和圖像的圖形的非相關(guān)分組時,一些實施例也能夠識別和重構(gòu)表格,例如這在表格包括諸如突起(extrusion)和陰影的效果時非常普遍。圖48概念性地例示了一些實施例的用于識別文檔一部分中的表格的處理4800。 如圖所示,該處理接收(在4805處)文檔部分的區(qū)和布局信息。在一些實施例中,區(qū)信息是以上在第II章中描述的處理的輸出,而布局信息是以上在第IV章中描述的處理的輸出。 在一些實施例中,文檔部分是文檔的頁面或者頁面的區(qū),等等。然后該處理識別(在4810處)具有完整邊界的表格。圖49例示了具有完整邊界的表格4900的示例。一些實施例分類任何作為島(如以上在第II章中定義)的區(qū),所述島由界線全是豎直矩形的兩個或更多個區(qū)完全分隔開。這些分隔矩形由此是表格的單元。 下面將在第A節(jié)中進(jìn)一步詳細(xì)地描述對具有完整邊界的表格的識別。接著,處理4800識別(在4815處)具有連接的邊界的表格。圖50例示了具有連接的但不完整的邊界的表格5000的示例。在一些實施例中,當(dāng)實際上繪制的表格的所有邊界彼此相交使得任何邊界都連接到整個連接集合中的任何其他邊界時,表格具有連接的邊界。表格5000具有不完整的邊界,這是因為沒有繪制表格的外邊界。下面將在第B節(jié)中進(jìn)一步詳細(xì)地描述對具有連接的但不完整的邊界的表格的識別。接著處理4800識別(在4820處)不具有邊界或者具有中斷邊界的表格。圖51 例示了沒有邊界的表格5100的示例。圖52例示了具有中斷邊界的表格5200。不像表格 5100,表格5200具有一些繪制的邊界,但是這些邊界不能形成連接集合。對于其邊界不能形成連接集合的表格,一些實施例要求采用布局信息以識別這些表格。下面將在第C節(jié)中進(jìn)一步詳細(xì)地描述對不具有邊界或者具有中斷邊界的表格的識別?!┳R別出文檔部分中的所有表格,處理就定義(在4825處)要通過編輯和其他軟件訪問的表格。然后該處理結(jié)束。在一些實施例中,這使得用戶能夠編輯表格的單個單元、選擇表格的行和列、將表格信息智能地復(fù)制到電子數(shù)據(jù)表中,等等。A.具有完整邊界的表格本發(fā)明的一些實施例識別其中所有邊界利用邊界圖形(例如,行、窄矩形、窄圖像、填充矩形的邊界,等等)的某種組合來繪制的表格。以上在第II章中描述了一些實施例的用于識別這些邊界圖形并采用邊界圖形來識別區(qū)的處理。圖53概念性地例示了一些實施例的用于識別具有完整邊界集合的表格并定義所識別出的表格的單元、行和列的處理5300。在一些實施例中,一旦針對具有不完整邊界或者不具有邊界的表格識別出隱含的邊界,處理5300還用于識別和定義這些表格。在第B節(jié)和第C節(jié)中更詳細(xì)地描述這些處理。將結(jié)合圖54來描述處理5300。圖54例示了包括具有完整邊界的表格的頁面5400。
如圖53所示,該處理接收(在5305處)文檔一部分的區(qū)信息。在一些實施例中, 該文檔部分是整個文檔、文檔的章節(jié)或者文檔的頁面。在一些實施例中區(qū)信息是從以上在第II章中描述的處理輸出的信息,并且包括區(qū)邊界和相交部信息以及識別出的區(qū)和區(qū)圖 fn息ο然后該處理5300識別(在5310處)完整被兩個或更多個區(qū)(它們?nèi)际蔷匦蔚?分隔開的島。如上所述,在一些實施例中,島是不與其父區(qū)共享邊界區(qū)間的區(qū)。圖M 例示了頁面M00,該頁面MOO包括由矩形分隔開的一個島M01。如圖所示,十三個矩形完整地分隔出島5401,使得由十三個矩形區(qū)覆蓋的頁面的區(qū)域恰是島MOl的區(qū)域。因此,島 5401被識別為表格。接下來,處理確定(在5311處)在5310處識別出的島中是否有任何未處理的島。 當(dāng)沒有識別出或者所有識別出的島都已經(jīng)被處理為表格時,處理結(jié)束。否則,處理選擇(在 5314處)下一個識別出的島。在一些實施例中,對于識別出的島沒有特定順序,只要它們中的全部都被處理即可。然后處理5300從最高到最低來排序(在5315處)所選島中的水平邊界。一些實施例按照邊界的頂部界線來排序,使得具有最高頂部界線的邊界是第一個。在一些實施例中,水平邊界是被識別為表格的島內(nèi)的水平邊界區(qū)間,并且包括島的邊界。圖M例示了十六個水平邊界區(qū)間討05至M20。在一些實施例中,由諸如以上在第II章中描述的處理 900的處理來識別水平邊界區(qū)間。在按順序?qū)λ竭吔鐓^(qū)間進(jìn)行了排序的情況下,處理選擇(在5320處)第一個未評估水平邊界,并定義(在5325處)表格的下一個水平格線(gridline)。在圖M的示例中,邊界區(qū)間M05或M06都是第一個選擇的邊界,此時定義水平格線1。然后該處理將所選邊界分配(在5330處)給當(dāng)前的格線,并將格線的垂直范圍 (extent)設(shè)置為分配給格線的所有邊界的y區(qū)間的相交部。由此,在當(dāng)前所選邊界是要分配給當(dāng)前格線的第一個時,格線的y區(qū)間僅僅是該邊界的y區(qū)間。然而,當(dāng)將多個邊界分配給格線時,格線的y區(qū)間包括所有分配的邊界的y區(qū)間。然后該處理確定(在5335處)是否有更多的水平邊界還未分配給格線。當(dāng)沒有更多水平邊界時,處理前進(jìn)到下面描述的5345。否則,當(dāng)還有更多邊界時,處理確定(在5340 處)下一個邊界的y區(qū)間是否與當(dāng)前格線的y區(qū)間交疊。當(dāng)y區(qū)間不交疊時,已經(jīng)定義了當(dāng)前格線中的所有邊界,并且處理前進(jìn)到5320以選擇下一個邊界并開始一個新的格線。然而,當(dāng)y區(qū)間交疊時,處理前進(jìn)到5330以將邊界分配給當(dāng)前格線,更新格線的y區(qū)間以及繼續(xù)到下一個邊界。如圖M所示,在選擇了邊界討05或討06作為島MOl的第一個邊界之后,兩者中的另一個將被選擇為下一個,并添加到水平格線1。將接著定義水平格線2,其包括邊界 5407和M08,依此類推直到水平格線6 (邊界M18至5420)。一旦將所有水平邊界都分配到格線,處理5300考慮垂直邊界。處理5300從左向右來排序(在5345處)所選島中的垂直邊界。一些實施例按照邊界的左界線來排序,使得具有最左的左界線的邊界為第一個。在一些實施例中垂直邊界是被識別為表格的島內(nèi)的垂直邊界區(qū)間,并包括島的邊界。圖M例示了十八個垂直邊界區(qū)間M25至M42。在一些實施例中,通過諸如以上在第II章中描述的處理900的處理來識別垂直邊界區(qū)間。
在按順序排序了垂直邊界區(qū)間的情況下,處理選擇(在5350處)第一個未評估垂直邊界,并定義(在5355處)表格的下一個垂直格線。在圖54的示例中,邊界區(qū)間5426 至5428中的一個是第一個選擇的邊界,此時定義垂直格線1。然后該處理將所選邊界分配(在5360處)給當(dāng)前的格線,并將格線的水平范圍設(shè)置為分配給該格線的所有邊界的X區(qū)間的相交部。由此,如果當(dāng)前所選邊界是要分配給當(dāng)前格線的第一個,則格線的X區(qū)間僅僅是邊界的X區(qū)間。然而,當(dāng)將多個邊界分配給格線時, 格線的X區(qū)間包括所有分配的邊界的X區(qū)間。然后該處理確定(在5365處)是否有更多的垂直邊界還未分配給格線。當(dāng)沒有更多邊界時,處理前進(jìn)到下面描述的5375。否則,當(dāng)還有更多邊界時,處理確定(在5370處) 下一個邊界的χ區(qū)間是否與當(dāng)前格線的χ區(qū)間交疊。當(dāng)χ區(qū)間不交疊時,已經(jīng)定義了當(dāng)前格線中的所有邊界,并且處理前進(jìn)到5350以選擇下一個邊界并開始一個新的格線。然而, 當(dāng)χ區(qū)間交疊時,處理前進(jìn)到5360以將邊界分配給當(dāng)前格線,更新格線的χ區(qū)間以及繼續(xù)到下一個邊界。在選擇了邊界5425至5428中的一個作為島5401的第一個邊界之后,其他三個中的一個被選擇并添加到垂直格線1。一旦將所有四個邊界添加到垂直格線1,將接著定義垂直格線2,其包括邊界5429至5433,依此類推直到垂直格線4 (邊界5438至5442)。一旦評估了所有的垂直邊界,已經(jīng)針對表格定義了所有的格線。本領(lǐng)域普通技術(shù)人員將認(rèn)識到,盡管處理5300在垂直格線之前定義水平格線,但是一些實施例先定義垂直格線。接著該處理將行和列的個數(shù)分配(在5375處)給表格的單元。在一些實施例中, 分隔出島的每個區(qū)是一個單元。在一些實施例中,單元跨從其上邊界的格線到比其下邊界的格線小一個的格線的行。例如,圖54中的單元5450跨行1和2,這是因為其上邊界是水平格線1的一部分而其下邊界是水平格線3的一部分。類似地,在一些實施例中,單元跨從其左邊界的格線到比其右邊界的格線少一個的格線的行。例如,單元5450跨列1,這是因為其左邊界是垂直格線1的一部分,而其右邊界是垂直格線2的一部分。一旦已經(jīng)重構(gòu)了表格結(jié)構(gòu)(即,格線、單元、行和列),該處理確定(在5380處) 表格的樣式信息。然后該處理前進(jìn)到上面描述的5311,以確定是否有任何更多識別出的島要處理為表格。在一些實施例中,表格樣式信息來自構(gòu)成區(qū)邊界的邊界圖形以及背景圖形。 例如,當(dāng)有多個背景形狀覆蓋或穿過特定單元時,一些實施例通過合成各種背景形狀并且如果必要的話將其固定到格線界線來確定得到的形狀顏色或圖像呈現(xiàn)。類似地,一些實施例基于顯露出來的形狀顏色的加權(quán)平均值來確定單元邊界顏色。在一些實施例中,加權(quán)平均值中的權(quán)重是基于顯示每個顏色的面積量。一些實施例還識別諸如陰影或突起的邊界樣式。在一些實施例中,識別表格和確定表格結(jié)構(gòu)使得表格能夠被使用,就像是由典型的字處理器生成的一樣,而不是非相關(guān)圖形的集合。例如,在一些實施例中,用戶能夠單獨(dú)地編輯表格單元、將信息導(dǎo)出到電子數(shù)據(jù)表、排序表格數(shù)據(jù),等等。一些實施例僅僅采用處理5300來識別表格。然而,這樣做將僅僅識別具 有完整邊界集合的表格。其他實施例采用在下面第B節(jié)和第C節(jié)中描述的處理,來識別不具有完整邊界圖形但是具有表格的結(jié)構(gòu)和布局的表格。B.具有連接的邊界的表格
除了具有完整邊界集合之外,一些實施例識別具有不完整但連接的邊界集合的表格。圖50例示了這種表格5000。一些實施例采用處理來定義可能是預(yù)期表格邊界的隱含邊界,然后應(yīng)用諸如以上描述的處理5300的處理來識別和重構(gòu)實際表格。圖55概念性地例示了一些實施例的用于識別和重構(gòu)具有連接邊界集合的表格的處理5500。將結(jié)合圖56來描述處理5500。圖56例示了識別頁面5600上的具有連接的但不完整邊界的表格的序列。如圖55所示,處理5500接收(在5505處)文檔一部分的潛在區(qū)邊界和邊界相交部的集合。在一些實施例中,潛在區(qū)邊界和相交部由以上在第II章中描述的處理900確定。 其他實施例采用其他處理來確定文檔部分的潛在區(qū)邊界。在一些實施例中,文檔部分是整個文檔、文檔的章節(jié)或者文檔的頁面。接著,處理5500定義(在5510處)包括在5505處接收到的所有潛在區(qū)邊界的集合U。然后該處理確定(在5515處)是否U為空。當(dāng)該集合為空時,處理結(jié)束,因為沒有可能連接的區(qū)邊界。否則,當(dāng)集合U包括至少一個區(qū)邊界時,處理從U中選擇(在5520處)一個邊界 b,并定義新的連接集合C。一些實施例從最上、最左、最靠近左上角的邊界開始,或者采用一些其他啟發(fā)法來確定要首先選擇哪個邊界。其他實施例隨機(jī)選擇邊界b。然后從集合U中移除(在5525處)所選邊界b,并將其添加到集合C。在一些實施例中,連接集合C是全部連接通過相交部集合的邊界集合。然后該處理從集合U選擇(在5530處)一個針對當(dāng)前邊界b還未評估的邊界z, 并確定(在5535處)邊界ζ是否與邊界b相交。在一些實施例中,確定邊界ζ是否與邊界 b相交包括確定是否一個接收到的相交部將邊界ζ連接到邊界b。當(dāng)邊界不相交時,處理前進(jìn)到下面描述的陽45。否則,當(dāng)邊界相交時,處理將邊界ζ添加(在5540處)到當(dāng)前連接集合C,并將ζ放置到隊列中。在向前移動到下一個連接集合之前,一些實施例采用隊列來追蹤連接集合中需要被評估用于進(jìn)一步的連接的邊界。接著,該處理確定(在5545處)集合U中是否有任何邊界還未被評估用以與當(dāng)前邊界b相交。當(dāng)有更多邊界時,處理前進(jìn)到5530以選擇另一個邊界ζ并確定新的邊界ζ是否與當(dāng)前邊界ζ相交。否則,當(dāng)U中的所有邊界已經(jīng)關(guān)于與當(dāng)前邊界b相交進(jìn)行了評估時,該處理5500 確定(在5550處)隊列是否為空。當(dāng)隊列中有至少一個邊界時,處理將隊列中的下一個邊界設(shè)置(在5555處)為新選擇的邊界b。然后該處理前進(jìn)到5525以評估U中是否還有邊界與新選擇的邊界b相交。否則,當(dāng)隊列為空時,已經(jīng)分配了當(dāng)前連接集合C的所有元素,并且處理確定(在 5560處)集合U是否為空。當(dāng)U不為空時,處理前進(jìn)到5520以選擇新的邊界b,并定義新的連接集合C。當(dāng)U為空時,已經(jīng)處理了所有的邊界,并將它們放置到相應(yīng)的連接集合中。圖56 例示了具有七個邊界5605至5635的頁面5600。應(yīng)用處理5500,將這七個邊界分配給三個連接集合5640 (包括邊界560 ,5645 (包括邊界5610和5615)以及5650 (包括邊界5620 至563 。這些連接集合中的每一個包括與連接集合中的至少一個其他邊界相交且不與連接集合之外的任何邊界相交的邊界。
一旦因為集合U為空故而識別了所有連接集合,處理就選擇(在5565處)集合C, 并向集合C添加(在5570處)形成C的豎直界定框的四個邊界。在一些實施例中,豎直界定框是包括連接集合中的所有邊界的最小豎直矩形。例如,圖56例示了形成連接集合5650 的豎直界定框的四個邊界5655至5670。連接集合5640是單個行,因此其豎直界定框僅是該行的外邊緣。形成連接集合5645的豎直界定框的四個邊界中的兩個是邊界5610和5615, 而在一些實施例中通過操作5570來添加附加邊界5675和5680然后該處理確定(在5575處)是否有任何連接集合C。當(dāng)有至少一個集合時,處理前進(jìn)到5565,以選擇另一個集合C。當(dāng)已經(jīng)評估了所有集合時,處理利用來自所有連接集合的所有邊界來識別(在5580處)區(qū)。一些實施例應(yīng)用處理1200 (以上在第II章中描述的)或者類似的處理來識別區(qū)。一旦識別了區(qū),處理5500根據(jù)區(qū)來識別(在5585處)表格并重構(gòu)表格。然后處理結(jié)束。一旦利用從連接集合的豎直界定框的隱含邊界識別了區(qū),一些實施例應(yīng)用在如以上第A節(jié)中描述的處理5300來重構(gòu)表格。圖56例示了識別出頁面5600上的一個表格5685。 該表格具有三個列以及三個行,總共有九個單元。一些實施例然后移除該表格和單元區(qū)(以及構(gòu)成這些區(qū)的邊界圖形),并重新識別沒有任何隱含邊界的區(qū),從而在不應(yīng)當(dāng)有區(qū)的地方不定義區(qū)。然后一些實施例重新插入表格和單元區(qū),以如以上在第II章中描述地確定區(qū)圖。這種實施例生成包括對表格和單元區(qū)以及它們的結(jié)構(gòu)的識別的完整區(qū)圖。C.沒有邊界或者具有中斷邊界的表格除了具有完整或者至少連接的邊界集合之外,一些實施例還識別沒有邊界或者具有中斷邊界的表格。圖51例示了沒有邊界的表格5100,而圖52例示了具有中斷邊界的表格5200。一些實施例采用處理來定義可能是預(yù)期表格邊界的隱含邊界,然后應(yīng)用諸如處理 5300的處理來識別和重構(gòu)實際表格。對于其邊界不形成連接集合的表格,一些實施例除了區(qū)信息之外還要求采用布局信息來識別表格。圖57概念性地例示了用于識別和重構(gòu)沒有邊界或具有中斷邊界的表格的處理 5700。將結(jié)合圖58至60來描述處理5700。圖58至60例示了對頁面5800應(yīng)用處理5700 以識別具有中斷邊界的表格。如圖57所示,該處理接收(在5705處)初級區(qū)(primary zone)的布局信息。在一些實施例中,初級區(qū)是頁面,但是初級區(qū)也可以是任何其他區(qū)。一些實施例的布局信息是從諸如以上在第IV章中描述的4000和4200的處理輸出的信息。該信息包括對初級區(qū)中的段落、列和布局的識別。然后,處理5700確定(在5707處)初級區(qū)中是否有任何未處理的布局。當(dāng)初級區(qū)中沒有布局或者所有布局都已經(jīng)被處理時,處理前進(jìn)到下面描述的5740。否則,該處理選擇(在5710處)初級區(qū)內(nèi)的一個布局。然后該處理定義(在5715處)在布局的豎直直線界線處的隱含區(qū)邊界。在一些實施例中,豎直直線界線是完全圍住布局中的所有段落的最小矩形。該處理還定義(在5720處)在列內(nèi)隔開布局的列的垂直空白空間處以及隔開布局的段落的水平空白空間處的隱含區(qū)邊界。圖58例示了頁面5800。該頁面包括三個更小的區(qū)左上角處的區(qū)5805、中央灰色陰影的區(qū)5810以及朝向底部的區(qū)5815。區(qū)5810和5815在一些實施例中是島。初級區(qū)(頁面5800)包括兩個布局5820和5825。如圖59所示,在選擇布局5820的情況下,該處理定義布局5820的界定框周圍以及布局5820的三個列之間的隱含邊界5905至5925。在一些實施例中,該布局的底部界線不需要隱含邊界,因為該布局是由區(qū)5810的頂部界定的。針對布局5825定義類似的隱含邊界5985至5997。接著,處理5700確定(在5725處)布局中是否有任何水平邊界(例如,隱含邊界)若向外延伸則與另一列的段落的界定框相交。該水平一致性測試確保布局實際上具有表格結(jié)構(gòu),而不僅僅是典型的斷成列的段落集合。當(dāng)布局沒有通過水平一致性測試時,該處理前進(jìn)到以上描述的5707。否則,當(dāng)布局通過水平一致性測試時,處理將布局添加(在5730 處)到追蹤可能是表格或表格的一部分的潛在布局的集合S。然后該處理前進(jìn)到5707。在處理確定(在5707處)初級區(qū)沒有包括更多布局時,該處理確定(在5740處) 在初級區(qū)內(nèi)是否有任何未處理的區(qū)。當(dāng)初級區(qū)沒有包括其他區(qū)或者已經(jīng)處理了所有的區(qū)時,該處理結(jié)束定義隱含邊界,并前進(jìn)到下面描述的5775。否則,當(dāng)初級區(qū)中有至少一個未處理區(qū)時,該處理選擇(在5745處)一個較小的區(qū)。然后該處理確定(在5750處)是否該更小的區(qū)是僅具有一個布局的島。在頁面5800 上,區(qū)5810和5815是僅具有一個布局的島,而區(qū)5805包括僅一個布局但不是島,因為其邊界包括頁面邊界。當(dāng)所選區(qū)不是僅具有一個布局的島時,處理5700前進(jìn)到以上描述的5740。否則, 當(dāng)所選區(qū)是具有僅一個布局的島時,該處理定義(在5755處)在列內(nèi)隔開布局的列的垂直空白空間處以及隔開布局的段落的水平空白空間處的隱含區(qū)邊界。圖59例示了在區(qū)5810 的列之間定義的隱含區(qū)邊界5971和5972。然后該處理確定(在5760處)布局中是否有任何水平邊界(例如,隱含邊界)若向外延伸則與另一列的段落的界定框相交。該水平一致性測試確保布局實際上具有表格結(jié)構(gòu),而不僅僅是典型的斷成列的段落集合。當(dāng)布局沒有通過水平一致性測試時,該處理前進(jìn)到以上描述的5740。否則,當(dāng)布局通過水平一致性測試時,處理將布局添加(在5765處) 到追蹤可能是表格或表格的一部分的潛在布局的集合S,然后該處理前進(jìn)到5740。頁面5800包括區(qū)5815,在一些實施例中,區(qū)5815是僅具有一個布局的島。圖59 例示了針對區(qū)5815定義的隱含邊界5930至5980。然而,該布局沒有通過水平一致性測試, 因為水平邊界5945至5980如果向外延伸的話將全部與布局中的其他段落的界定框相交。 因此,區(qū)5815的布局沒有添加到頁面5800的集合S,并且不保留隱含框5930至5980。一旦已經(jīng)評估了所有的區(qū),處理利用來自集合S的布局的隱含區(qū)邊界以及與這些隱含區(qū)邊界相交的任何區(qū)邊界圖形應(yīng)用(在5775處)區(qū)分析。一些實施例采用以上在第 II章中描述的處理,來識別區(qū)邊界區(qū)間、相交部以及區(qū)邊界。然后處理5700識別(在5780處)集合S中的布局中的潛在表格。一些實施例采用以上在第A節(jié)中描述的處理5300來識別潛在表格(并且重構(gòu)其結(jié)構(gòu))。接著,該處理取消(disqualify)(在5785處)不能滿足特定表格條件的潛在表格。然后該處理結(jié)束。一些實施例向潛在表格施加附件條件,來確保當(dāng)邊界圖形自己不足夠時存在強(qiáng)的用于識別表格的證據(jù)。例如,一些實施例要求所有單元精確地跨一行和一列,或者單元高度和寬度與頁面尺寸相比較小,或者每個邊界的厚度與表格的尺寸相比較小。一些實施例要求這些條件中的一個、一些或全部,以及其他要求。圖60例示了區(qū)5810以及布局5820和5825被組合成表格6000,而區(qū)5805和5815的內(nèi)容保持不變。一旦識別了文檔部分中的所有表格,在一些實施例中,用戶能夠編輯表格的單個單元、選擇表格的行和列、將表格信息智能地復(fù)制到電子數(shù)據(jù)表,等等。此外,在一些實施例中,可以通過如此識別表格并重構(gòu)它們來改善文本流、閱讀順序和顯示。D.軟件架構(gòu)在一些實施例中,將以上描述的表格識別實施為在特定機(jī)器(例如,計算機(jī)、媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式或資源受限設(shè)備)上運(yùn)行(或者存儲在計算機(jī)可讀介質(zhì)上)的軟件。圖61概念性地例示了一些實施例的用于識別文檔中的表格的表格識別應(yīng)用6100的軟件架構(gòu)。在一些實施例中,應(yīng)用是獨(dú)立應(yīng)用或者集成到另一應(yīng)用(例如,文檔重構(gòu)應(yīng)用)中,而在其他實施例中,應(yīng)用可能是在操作系統(tǒng)內(nèi)實現(xiàn)的。表格識別應(yīng)用6100包括區(qū)分析模塊6105、表格識別模塊6110、區(qū)邊界連接模塊 6115、隱含邊界定義模塊6120以及布局分析模塊6125。圖61還例示了文檔內(nèi)容6130。區(qū)分析模塊6105接收來自文檔內(nèi)容6130的信息 (例如,關(guān)于圖形的信息)。在一些實施例中,區(qū)分析模塊6105與圖17中的區(qū)分析模塊1700 相同。區(qū)分析模塊將區(qū)信息輸出到區(qū)邊界連接模塊6115和表格識別模塊6110。表格識別模塊6110接收來自區(qū)分析模塊6105的區(qū)信息。在一些情況下,有文檔的最終區(qū),而在其他情況下,區(qū)信息是包括專用于表格識別的隱含邊界的區(qū)。表格識別模塊 6110基于接收到的區(qū)信息識別表格,并將該信息傳遞到文檔內(nèi)容6145。在一些實施例中, 表格識別模塊6110執(zhí)行處理5300的一些或全部。區(qū)邊界連接模塊6115接收來自區(qū)分析模塊6105的區(qū)邊界信息,并基于該信息定義區(qū)邊界的連接集合。該連接集合被傳遞到隱含邊界定義模塊6120。在一些實施例中,區(qū)邊界連接模塊6115執(zhí)行處理5500中的一些或全部。布局分析模塊6125接收來自文檔內(nèi)容6130的信息(例如,布局信息)。布局分析模塊6125確定布局是否可能潛在地是表格的一部分,并且將適合的布局傳遞到隱含邊界定義模塊6120。在一些實施例中,布局分析模塊6125執(zhí)行處理5700的一些或全部。
隱含邊界定義模塊6120接收來自布局分析模塊6125的布局信息和來自區(qū)邊界連接模塊6115的區(qū)邊界連接集合。隱含邊界定義模塊6120基于它所接收到的信息來定義文檔的頁面的隱含邊界,并將該信息傳遞到區(qū)分析模塊6105。在一些實施例中,由以上描述的模塊或其他模塊執(zhí)行的處理的結(jié)果存儲在電子存儲設(shè)備中(例如,作為文檔對象模型的一部分)。文檔對象模型然后可以用于在電子顯示設(shè)備(例如,手持式設(shè)備、計算機(jī)屏幕,等等)上顯示文檔,使得用戶能夠瀏覽文檔和/或與文檔交互(例如,通過觸摸屏、游標(biāo)控制設(shè)備,等等)。VI.連結(jié)圖在一些實施例中,未結(jié)構(gòu)化文檔將包括文檔中預(yù)期被處理為單個元素但沒有被定義如此的本原元素(例如,形狀和圖像)。當(dāng)這種本原元素占據(jù)文檔的緊湊且獨(dú)立的區(qū)域時,它們可以利用被稱為界線集群的新穎的集群分析技術(shù)來關(guān)聯(lián)。在一些實施例中,界線集群的目的是最小化集群的展度(其中,展度是根據(jù)集群中的本原元素(例如,形狀)的集合的界線來計算的),同時最大化集群中本原元素的個數(shù)。在一些實施例中,界線是基于形狀或形狀集合的界定框。
本發(fā)明的一些實施例提供了用于識別區(qū)域中應(yīng)被連結(jié)的圖形(S卩,圖形對象)的方法。然后可以將這些連結(jié)圖處理為一個對象,用于進(jìn)一步的重構(gòu)。此外,它們在被瀏覽、 選擇、縮放、復(fù)制、移動、編輯等時可以被處理為一個對象。一些實施例將連結(jié)圖處理為一個對象,用于下面在第VIII章和第IX章中描述的選擇、顯示和導(dǎo)航處理。圖62概念性地例示了一些實施例的用于將單獨(dú)的圖連結(jié)成連結(jié)圖的處理6200。 將結(jié)合圖63來描述處理6200。圖63例示了對頁面6300上的若干圖形中的一些但不是全部的連結(jié)。如圖62所示,處理6200接收(在6205處)文檔的一部分。在一些實施例中, 該文檔部分是整個文檔、文檔的章節(jié)、頁面或者區(qū)。一些實施例一起對整個文檔執(zhí)行圖連結(jié)處理,而一些實施例逐區(qū)或逐頁面地執(zhí)行處理。該處理識別(在6210處)文檔部分中的圖形。圖63例示了包括如下六個圖形的頁面6300 七角星6305、五邊形6310、八邊形6315、十字形6320、三角形6325和五角星 6330。然后該處理采用集群分析來連結(jié)(在6215處)一些識別出的圖形。然后處理結(jié)束。一些實施例采用一種形式的集群分析,其稱為界線集群并將在下面參照處理6400詳細(xì)地加以描述。一些實施例應(yīng)用在下面第X章中描述的效率技術(shù)來執(zhí)行集群分析。一些實施例僅僅在圖形緊密在一起且沒有占據(jù)頁面或區(qū)的太大部分時將它們相連結(jié)。圖63例示了七角星6305和五邊形6310連結(jié)成單個圖形6335,而三角形6325和五角星6330連結(jié)成單個圖形6340。由于八邊形6315和十字形6320在頁面6300上是獨(dú)立的,所以它們沒有被彼此連結(jié)或者連結(jié)到任何其他圖形。A.界線集群圖64概念性地例示了一些實施例的用于執(zhí)行界線集群以識別應(yīng)被連結(jié)的圖形并連結(jié)這些圖形的處理6400。在一些實施例中,處理6400采用下面在第X章中描述的存儲器和處理效率(例如,間接排序的陣列、快速分隔,等等)。如圖所示,該處理接收(在6405 處)文檔部分的圖形。在一些實施例中,該文檔部分是整個文檔、文檔的章節(jié)、頁面或區(qū)。然后,該處理確定(在6407處)文檔部分中是否有至少兩個圖形。當(dāng)有一個或沒有圖形時,沒有理由執(zhí)行集群來試圖連結(jié)圖形,由此處理結(jié)束。否則,該處理按照繪制順序?qū)D形進(jìn)行排序(在6410處)。在一些實施例中,繪制順序是對象被繪制到頁面上的順序。 經(jīng)常,當(dāng)預(yù)期將多個對象處理為單個對象時,它們將按序列繪制。然而,一些實施例基于其他啟發(fā)法(例如,對象在頁面上的定位)進(jìn)行排序。接著,該處理將繪制順序中的第一個圖形設(shè)置(在6415處)為當(dāng)前圖形g。然后該處理確定(在6420處)g是否為文檔部分中的最后一個圖形。當(dāng)g是最后一個圖形時, 可以計算出圖形g與下一個圖形之間沒有展度,因此處理前進(jìn)到下面描述的6440。否則,當(dāng)圖形g不是最后一個圖形時,該處理計算(在6425處)在圖形g與按照繪制順序的下一個圖形之間的展度,并將計算得到的展度存儲(在6430處)在陣列中。在一些實施例中,展度是兩個對象彼此如何緊密在一起的量度。一些實施例采用兩個對象的界定框來計算展度。例如,一些實施例將圖形對象集合的展度計算為該對象集合適合的最小豎直界定框的寬度和高度之和除以頁面的寬度和高度之和。圖65例示了兩個頁面6501和6502,其中每一個具有要針對其計算展度的兩個圖形對象。頁面6501包括兩個圖形對象6505和6510,而頁面6502也包括兩個圖形對象6515和6520,圖形對象6515和6520與對象6505和6510具有相同的形狀和尺寸,但是位于頁面上的不同位置處。圖65還例示了對象6505和6510的最小界定框6525以及對象6515 和6520的最小界定框6530。利用以上描述的計算展度的度量,對象6505和6510的展度是(Xsi+Ysi) / (Χρ+Χγ),而對象6515和6520的展度是(XS2+YS2) / (Χρ+Χγ)。一些實施例相反將展度計算為對象集合的界定框的面積除以頁面的面積。一些實施例采用與頁面尺寸無關(guān)的度量(例如,對象集合的界定框相比于對象本身的單獨(dú)界定框的尺寸)。接下來,該處理將下一個圖形設(shè)置(在6435處)為當(dāng)前圖形g。然后該處理前進(jìn)到以上描述的6420。一旦已經(jīng)計算了所有的展度,該處理采用(在6440處)展度作為差值集群的一階差值,來定義圖形的集群。一些實施例執(zhí)行如在以上提及的美國公開 No. 2007/0250497中描述的差值集群。因為一些實施例的差值集群僅僅要求輸入值之間的差值并且不要求輸入的實際值,所以展度可以用作一階差值,盡管不是提出作為實際差值。 在一些實施例中,得自差值集群的集群在同一集群中的連續(xù)圖形之間的展度將相對小于不同集群中的圖形之間的展度。本領(lǐng)域普通技術(shù)人員將認(rèn)識到,展度并由此界線集群的概念不限于頁面上的圖形對象。例如,可以在三維對象中計算展度(通過利用體積而非面積,或者通過在三個維度而非兩個維度中在界定框上進(jìn)行求和),并由此用于集群三維對象(例如,在三維媒體編輯應(yīng)用中,例如視頻合成應(yīng)用)。在采用差值集群之后,利用展度作為一階差值,定義圖形的集群。處理6400從未評估集群中選擇(在6445處)一個集群C。然后該處理將C處理(在6450處)成滿足特定約束的圖形子序列集合。不同的實施例采用不同的約束來定義連結(jié)圖。一些實施例應(yīng)用子序列中的對象按照繪制順序必須是連續(xù)的要求。一些實施例要求序列中的對象相互交疊,使得不能將集群分隔成兩個非空的子序列,其中每個子序列按照繪制順序是連續(xù)的,從而第一分隔中的對象分組的豎直界線與第二分隔中的對象分組的豎直界線不連結(jié)。一些實施例應(yīng)用的第三個要求是每個子序列滿足密度約束,這確保每個子序列包括具有足夠小的總展度的足夠個數(shù)(例如,兩個)的圖形。一些實施例采用以上條件的修改版本。例如,代替豎直矩形界線,一些實施例采用更緊的界線,例如圖像的非透明像素周圍的路徑。在一些實施例中,每個這些子序列中的對象集合都被連結(jié)成單個圖形。接著,處理6400確定(在6455處)是否有更多集群要評估。當(dāng)有更多集群時,該處理前進(jìn)到6445以選擇另一個集群,并將該集群處理成子序列。否則,當(dāng)已經(jīng)處理了全部集群時,處理結(jié)束。既然連結(jié)了圖形,就可以在瀏覽、選擇、縮放、復(fù)制、移動、編輯等時將它們處理為一個對象。一些實施例將連結(jié)圖處理為一個對象,用于下面在第VIII章中描述的選擇、顯示和導(dǎo)航處理。B.將集群處理成子序列如上所述,在已經(jīng)識別出圖形的集群之后,一些實施例將每個集群處理成子序列, 以識別最終的連結(jié)圖(并然后關(guān)聯(lián)構(gòu)成每個連結(jié)圖的本原元素)。圖66例示了一些實施例的用于將集群處理成子序列的處理6600。在一些實施例中,處理6600針對每個集群在處理 6400的操作6450處執(zhí)行。如圖所示,處理6600接收(在6605處)圖形集群。正如所述,在一些實施例中,該集群是針對按照繪制順序排序的圖形采用展度作為一階差值的界線集群的輸出。然后該處理確定(在6607處)該集群是否為空(即,不包括任何圖形)。當(dāng)該集群為空時,該處理結(jié)束。否則,該處理選擇(在6610處)集群中還不在子序列中的第一個圖形。在一些實施例中,該集群是按照繪制順序排序的,使得第一次通過操作6610時,所選的圖形是集群中被繪制在包括圖形的文檔中的第一個圖形。 然后該處理定義(在6615處)包括所選圖形(此時,所選圖形為子序列中的唯一圖形)的新的子序列。該新子序列具有所選圖形的界線。在一些實施例中,所選圖形的界線是包括該圖形的最小豎直界定框。其他實施例不同地定義圖形的界線,例如,采用完全圍住圖形的所有非透明像素的最小面積的路徑。接著,該處理6600確定(在6620處)集群中是否有更多的圖形。當(dāng)集群中沒有更多圖形時,該處理前進(jìn)到下面描述的6645。否則,該處理選擇(在6625處)集群中的下一個圖形。在一些實施例中,集群中的下一個圖形是集群中按照繪制順序的下一個圖形。該處理確定(在6630處)新圖形(即,在6625處選擇的圖形)的界線是否與當(dāng)前子序列的界線相交。如上所述,不同的實施例不同地定義圖形的界線。下面描述包括多個圖形的子序列的界線。當(dāng)新圖形的界線不與當(dāng)前子序列的界線相交時,處理存儲(在6640 處)當(dāng)前子序列(例如,在子序列列表中),并前進(jìn)到以上描述的6610,以開始下一個子序列。下一個子序列從6630處最近測試的圖形開始,因為這是集群中還不在子序列中的第一個圖形。當(dāng)新圖形(其是在6625處選擇的)的界線與當(dāng)前子序列的界線相交時,該處理向子序列添加(在6635處)新圖形,并將子序列的界線修改為先前子序列界線與新添加圖形的界線的相交部。然后該處理前進(jìn)到以上描述的6620,以繼續(xù)試圖向子序列添加圖形。在一些實施例中,包括多個圖形的子序列的界線是包括所有圖形的最小豎直界定框。在其他實施例中,界線是子序列中所有圖形的所有豎直界定框的并集(在這種實施例中,子序列的界線將不必是矩形的)。在一些實施例中,其中將圖形的界線定義為包括圖形的所有非透明像素的最小面積路徑,界線可以是子序列中的所有圖形周圍的路徑,或者可以是子序列中每個圖形的這種路徑的并集。一旦已經(jīng)將集群中的所有圖形放置到初始子序列中,則處理選擇(在6645處)第一個子序列Si。在一些實施例中,每個子序列包括按照繪制順序是鄰接的圖形,并且基于繪制順序來布置子序列,使得第一子序列具有按照繪制順序的第一個圖形。然后該處理確定(在6650處)是否有更多子序列(即,第一次通過該處理時確定是否僅有一個子序列)。當(dāng)沒有更多子序列時,處理結(jié)束。否則,該處理選擇(在6655處) 下一個子序列S2。接著,處理6600確定(在6660處)Sl和S2的界線是否相交。如上所述,在不同的實施例中不同地定義子序列的界線(即,在一些實施例中,它們是基于豎直界定框,而在其他實施例中它們是基于非透明像素周圍的路徑,等等)。當(dāng)Sl和S2的界線不相交時,處理定義(在6665處)S2為Si,并且前進(jìn)到6650以將下一個子序列相對于原始S2進(jìn)行測
試ο當(dāng)界線相交時,處理合并(在6670處)兩個子序列,并前進(jìn)到6645以將第一個子序列選擇為Si。一些實施例返回到第一個子序列,并且不結(jié)束處理,直到從開始經(jīng)過了以任意方式不能被合并的子序列集合。然而,其他實施例在返回到6645時將在最近合并的子序列之前的子序列選擇為Si,并從該點前進(jìn)而非在第一個子序列處開始,從而節(jié)省處理時間。一旦已經(jīng)將集群處理為子序列,就可以相對于諸如以上描述的密度約束的約束來測試子序列。一些實施例針對要在連結(jié)圖中關(guān)聯(lián)的圖形要求子序列中特定最小個數(shù)的圖形 (例如,兩個、五個,等等)。一些實施例要求展度(如上所述地計算)小于特定個數(shù)(例如, 0. 4,0. 5 等等)。 C.軟件架構(gòu)在一些實施例中,將以上描述的圖形連結(jié)處理實施為在特定機(jī)器(例如,計算機(jī)、 媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式或資源受限設(shè)備)上運(yùn)行(或者存儲在計算機(jī)可讀介質(zhì)上)的軟件。圖67概念性地例示了一些實施例的用于識別應(yīng)被連結(jié)的圖形并將這些圖形關(guān)聯(lián)為一個圖形的圖形連結(jié)應(yīng)用6700。在一些實施例中,應(yīng)用是獨(dú)立應(yīng)用或者集成到另一應(yīng)用(例如,文檔重構(gòu)應(yīng)用)中,而在其他實施例中,應(yīng)用可能是在操作系統(tǒng)內(nèi)實現(xiàn)的。圖67例示了圖形連結(jié)器6705、界線集群模塊6710和展度計算器6715以及文檔內(nèi)容6725。圖形連結(jié)器模塊接收來自文檔內(nèi)容6725的信息。在一些實施例中,該信息是關(guān)于每個圖形的定位以及圖形的繪制順序的信息。圖形連結(jié)器6705將信息(例如,圖形的定位和圖形在繪制順序中的位置)傳遞到展度計算器6715。一些實施例的展度計算器6715計算每對連續(xù)圖形的展度,并將該信息傳遞到界線集群模塊6710。界線集群模塊6710接收來自圖形連結(jié)器6705和展度計算器6715的信息(例如, 要被處理為一階差值的展度陣列),并對所接收到的信息執(zhí)行界線集群。該界線集群的結(jié)果被傳遞回到圖形連結(jié)器。在一些實施例中,圖形連結(jié)器6705對從界線集群模塊接收到的集群執(zhí)行進(jìn)一步的處理,以識別特定圖形集群是否應(yīng)被關(guān)聯(lián)為單個圖形,并將該關(guān)聯(lián)返回到文檔內(nèi)容6725。在一些實施例中,由以上描述的模塊或其他模塊執(zhí)行的處理的結(jié)果存儲在電子存儲設(shè)備中(例如,作為文檔對象模型的一部分)。文檔對象模型然后可以用于在電子顯示設(shè)備(例如,手持式設(shè)備、計算機(jī)屏幕,等等)上顯示文檔,使得用戶能夠瀏覽文檔和/或與文檔交互(例如,通過觸摸屏、游標(biāo)控制設(shè)備,等等)。VII.用于控制處理的簡檔對作為文檔中的結(jié)構(gòu)性元素的可視信息的解釋可以取決于在處理的文檔中的內(nèi)容的類型。語義重構(gòu)(以及其他內(nèi)容處理技術(shù))因此可以通過調(diào)整分析以適應(yīng)內(nèi)容的類型來改善。一些實施例提供用于識別要處理的內(nèi)容的類型并調(diào)整對內(nèi)容的處理以適應(yīng)內(nèi)容的識別出的類型的方法。一些實施例基于對內(nèi)容類型的識別向如以上在第II至VI章中描述的文檔重構(gòu)應(yīng)用對內(nèi)容處理的調(diào)整。一些實施例采用簡檔來識別要處理的內(nèi)容的類型。簡檔包括形式為(P1-P2-P3"-"PN)的邏輯命題,使得當(dāng)且僅當(dāng)所有的邏輯判定(predicate)Pn針對特定內(nèi)容都為真時簡檔與特定內(nèi)容匹配。在一些實施例中,簡檔集合是分級的。簡檔的分級集合具有針對在處理的不同階段處達(dá)到的不同分級級別的簡檔。在一些實施例中,來自更低級別的簡檔的指令可以撤銷來自更高級別簡檔的指令。
圖68概念性地例示了一些實施例的采用簡檔來調(diào)整內(nèi)容處理以適應(yīng)內(nèi)容類型的處理6800。如圖所示,該處理接收(在6805處)內(nèi)容。該內(nèi)容在一些實施例中是要重構(gòu)的文檔。在其他實施例中,該內(nèi)容是文檔,但是要對文檔執(zhí)行的處理是除重構(gòu)之外的其他分析。在一些實施例中,該內(nèi)容還可以是其他類型的內(nèi)容(例如,音頻和/或視頻內(nèi)容)。例如,一些實施例可以分析視頻內(nèi)容,以將視頻內(nèi)容斷開成場景、動作等的分級,并且基于更早階段的結(jié)果修改后面階段的分析。接下來,該處理基于不同內(nèi)容類型的簡檔識別(在6810處)接收到的內(nèi)容的類型。在一些實施例中,簡檔包括邏輯命題,該邏輯命題由一個或多個邏輯判定構(gòu)成,并且針對該內(nèi)容當(dāng)且僅當(dāng)所有邏輯判定都為真時該邏輯命題與內(nèi)容匹配。在一些實施例中,簡檔還規(guī)定如果簡檔與內(nèi)容匹配則如何執(zhí)行內(nèi)容處理。在文檔處理的情況下,在一些實施例中, 簡檔包括應(yīng)用于可視元素集合的屬性集合。例如,用于預(yù)期要印制在#10尺寸的封皮上的文檔的簡化簡檔可能是(頁面# = Γ段落# < = 2~寬度=9. 5” ~高度=4. 125”)。圖69例示了文檔6900。在識別文檔類型時,一些實施例將測試多個簡檔,直到達(dá)到其所有邏輯判定為真的簡檔。在文檔6900的情況下,如果寬度χ為9. 5”且高度y為 4. 125”,則文檔6900將被識別為#10封皮,因為它僅具有一個帶有兩個段落6905和6910 的頁面。一旦識別出內(nèi)容的類型,則處理6800執(zhí)行(在6815處)適于所識別出的內(nèi)容類型的內(nèi)容處理。然后該處理結(jié)束。在一些實施例中,調(diào)整處理以適應(yīng)識別出的內(nèi)容類型包括添加和移除處理、修改如何執(zhí)行處理、以及修改執(zhí)行處理的順序。例如,在文檔重構(gòu)的情況下, 當(dāng)確定文檔是沒有列、頁眉或頁腳的單頁文本行時,文檔重構(gòu)處理可以被適當(dāng)?shù)卣{(diào)整。一些實施例將識別文本行、識別文本行中的字以及將文本行分組成段落,但是將不會執(zhí)行其他處理(例如,用于識別列和布局的處理4200或者表格識別處理),因為它基于文檔類型識別出不要求這些。A.分級簡檔化一些實施例采用分級的簡檔集合來調(diào)整內(nèi)容處理以適應(yīng)內(nèi)容類型。圖70例示了一些實施例的用于文檔重構(gòu)的分級簡檔集合7000。該分級簡檔集合7000包括兩個文檔簡檔7001和7002、三個章節(jié)簡檔7005至7007、八個頁面簡檔7010至7017以及四個區(qū)簡檔 7020 至 7023。如圖所示,每個文檔簡檔具有其自己的簡檔樹。在一些實施例中,一旦識別出文檔簡檔,則將僅測試其分級樹中的章節(jié)簡檔。例如,當(dāng)將文檔識別為文檔簡檔A 7001時,將僅測試章節(jié)簡檔A 7005和章節(jié)簡檔B 7006。類似地,一旦識別出章節(jié)簡檔(或者任何其他更低級別的簡檔),則將僅測試該特定簡檔的樹中的簡檔。在一些實施例中,在分級的更高級別的多個簡檔之間共享一些簡檔。例如,頁面簡檔C 7012在所有三個章節(jié)簡檔7005至7007之間共享。由此,無論將文檔的章節(jié)識別為章節(jié)簡檔A 7005、章節(jié)簡檔B 7006或章節(jié)簡檔C 7007,都將測試頁面簡檔C 7012作為該章節(jié)中的每個頁面的一個可能頁面簡檔。圖71概念性地例示了一些實施例的用于將簡檔與內(nèi)容匹配并根據(jù)匹配的簡檔動態(tài)地配置內(nèi)容處理的處理7100。如圖所示,該處理接收(在7105處)要被處理的內(nèi)容。在一些實施例中,該內(nèi)容是要根據(jù)以上在第II至VI章中描述的處理被重構(gòu)的文檔。在其他實施例中,該內(nèi)容是音頻和/或視頻內(nèi)容,或者其他類型的要分析的內(nèi)容。接下來,該處理選擇(在7110處)分級中的頂部級別的簡檔。在一些實施例中, 選擇特定簡檔包括評估該內(nèi)容的特定簡檔的邏輯命題,并識別該簡檔與內(nèi)容匹配。在一些實施例中,首先必須執(zhí)行一定量的處理,來從分級的頂部級別中選擇一個簡檔。在一些實施例中,可以一次在分級的頂部級別處選擇僅一個簡檔,盡管在找到匹配簡檔之前可以測試多個簡檔。例如,關(guān)于圖70中的簡檔分級集合7000,文檔可以與文檔簡檔A 7001或者文檔簡檔B 7002匹配,但是一旦一個匹配,則選擇匹配的簡檔。在從分級選擇了簡檔之后,該處理針對所選的簡檔應(yīng)用(在7115處)應(yīng)用處理。 例如,關(guān)于文檔重構(gòu),當(dāng)內(nèi)容是僅單頁文檔時,應(yīng)用一組重構(gòu)方法。另一方面,當(dāng)文檔是具有插圖的多頁書籍時,應(yīng)用一組不同的重構(gòu)方法。一些實施例不是一起應(yīng)用所有方法,而是相反在確定是否可以選擇更低級別處的一個新簡檔之前按照簡檔指定的順序一次應(yīng)用一種方法。接著,該處理確定(在7120處)處理是否足夠遠(yuǎn)伸以處理到分級的下一個級別。 在一些實施例中,這涉及確定是否已經(jīng)完成了足夠的處理方法,并且關(guān)于分級的下一個級別可獲得足夠的信息,使得可以針對匹配測試下一個級別處的簡檔。當(dāng)處理不夠遠(yuǎn)伸時,該處理前進(jìn)到7115以繼續(xù)應(yīng)用如上所述的處理。一旦處理針對分級的下一個級別足夠遠(yuǎn)伸,該處理選擇(在7125處)分級的下一個級別處的簡檔。在一些實施例中,針對特定分級級別處的每個內(nèi)容實體(例如,章節(jié)、頁面、區(qū),等等),可以一次針對特定級別選擇僅一個簡檔。例如,關(guān)于圖70中的簡檔分級集合 7000,文檔中與文檔簡檔A 7001匹配的章節(jié)可以與章節(jié)簡檔A 7005或者章節(jié)簡檔B 7006 匹配,但是不會與兩者都匹配。此外,在一些實施例中,基于對以上的內(nèi)容實體的簡檔的選擇來限制對一個內(nèi)容實體的一個簡檔的選擇。例如,在以上示例中,由于文檔與文檔簡檔A 7001匹配,所以將不會把特定章節(jié)與章節(jié)簡檔C 7007測試,并由此不會與章節(jié)簡檔C 7007 匹配。接著,該處理基于新選擇的簡檔修改(在7130處)分級的先前級別的處理方法。 在一些實施例中,任何更低級別的簡檔可以撤銷更高級別簡檔的任何已經(jīng)定義的處理方法。修改可以包括移除處理方法、修改執(zhí)行特定方法的方式、添加方法、改變執(zhí)行方法的順序,等等。例如,當(dāng)已經(jīng)采用處理(例如,以上在第IV章中描述的處理3800)來拆分文檔中的行時,關(guān)于是否針對列有足夠的證據(jù)的確定可以確定頁面是否被分類為復(fù)雜的或簡單的。當(dāng)頁面是簡單的(即,列的最少證據(jù))時,在一些實施例中將修改行拆分方法,來將制表位插入在行的間隔中,而不是實際地拆分行。類似地,當(dāng)頁面是沒有區(qū)邊界圖形的簡單頁面時,在一些實施例中移除區(qū)分析方法。作為添加方法的示例,在一些實施例中,將特定文檔識別為報紙的簡檔可以添加用以搜索布局的結(jié)尾處的文本的方法,其指定文章在具有特定題目的特定頁面上繼續(xù)。這種方法然后將搜索指定的頁面以尋找題目,從而定義文檔中的兩個布局(或區(qū))之間的鏈接,來指示兩個布局(或區(qū))形成一個文章。接著,在修改了處理方法的情況下,處理7100針對所選簡檔應(yīng)用(在7135處)處理方法。在一些實施例中,這包括用于在分級的比最近選擇的簡檔更高的級別處的簡檔的方法。例如,當(dāng)在文檔簡檔中指定特定方法并且所選的章節(jié)簡檔沒有修改特定方法或者是否執(zhí)行特定方法時,將根據(jù)文檔簡檔執(zhí)行特定方法(如果它還沒有已經(jīng)執(zhí)行的話)。一些實施例沒有一起應(yīng)用所有方法,而是相反在確定可以選擇更低級別處的新簡檔之前按照簡檔規(guī)定的順序一次應(yīng)用一個方法。接著,該處理確定(在7140處)在簡檔分級中是否有任何更低級別要測試。當(dāng)分級中沒有更多更低級別時,該處理前進(jìn)到以下描述的7150。否則,該處理確定(在7145處) 是否處理足夠遠(yuǎn)伸以前進(jìn)到分級的下一個級別。在一些實施例中,這涉及確定是否已經(jīng)完成足夠的處理方法,并且關(guān)于分級的下一個級別可獲得足夠的信息,使得可以針對匹配測試下一個級別處的簡檔。當(dāng)處理不夠遠(yuǎn)伸時,該處理前進(jìn)到7135以繼續(xù)應(yīng)用如上所述的處理。如上所述,一旦處理針對分級的下一個級別足夠遠(yuǎn)伸,該處理就前進(jìn)到7125以針對分級的下一個級別選擇一個或多個簡檔。當(dāng)處理確定(在7140處)沒有更多更低的分級級別時,該處理確定(在7150處) 內(nèi)容處理是否完成。在一些實施例中,當(dāng)已經(jīng)針對最低級別的簡檔應(yīng)用了所有的處理方法時,內(nèi)容處理完成。當(dāng)處理完成時,該處理結(jié)束。否則,該處理前進(jìn)到以上描述的7135來繼續(xù)處理內(nèi)容。B.采用分級簡檔化來實施語義重構(gòu)方法一些實施例采用分級簡檔來更高效且準(zhǔn)確地實施以上在第II至VI章中描述的語義重構(gòu)方法。在一些實施例中,分級簡檔用于添加、移除、修改或重新執(zhí)行方法。一些實施例包括缺省簡檔,在缺少任何簡檔匹配的情況下,該缺省簡檔實施所有可能的重構(gòu)方法。然而,當(dāng)選擇了分級更低的簡檔時,關(guān)于是否執(zhí)行特定方法和/或如何實施特定方法,所選簡檔能夠撤銷缺省簡檔。在一些實施例中,簡檔匹配發(fā)生在處理中的不同階段。因此,在任何給定時間處激活的簡檔集合可以在整個處理中改變,并且在激活了每個新的簡檔之后不得不重新評估對方法的繼承(inheritance)。由于新激活的簡檔能夠重新排序、添加或者移除處理方法,所以一些實施例也在內(nèi)容處理期間改變繼承的效果。圖72概念性地例示了一些實施例的用于采用分級簡檔來執(zhí)行文檔重構(gòu)的處理 7200。如圖所示,處理接收(在7205處)文檔。在一些實施例中,該文檔是要利用語義重構(gòu)技術(shù)重構(gòu)的矢量圖形文檔(例如,PDF文檔)。接著,處理7200識別(在7210處)文檔的簡檔。在一些實施例中,初始地分配實施所有可能重構(gòu)方法的缺省簡檔。然而,一些實施例可以在不應(yīng)用任何重構(gòu)方法的情況下基于文檔的內(nèi)在性質(zhì)(例如,頁數(shù)、頁面尺寸,等等)來識別文檔簡檔。—旦識別出初始簡檔,該處理識別(在7215處)與所識別的簡檔相關(guān)聯(lián)的重構(gòu)方法。當(dāng)初始簡檔僅是缺省簡檔時,將識別出所有可能方法。然而,當(dāng)簡檔是識別出的文檔簡檔或者分級中更低級別處的簡檔時,在一些情況下,將僅識別一些重構(gòu)方法。例如,一些簡檔不明確地定義用于執(zhí)行特定處理的實施,但是也不規(guī)定不執(zhí)行該處理。然后該處理選擇(在7220處)一個識別出的方法。在一些實施例中,所選的方法是基于用于執(zhí)行重構(gòu)方法的規(guī)定順序。例如,一些實施例的缺省簡檔規(guī)定用于實施重構(gòu)方法的缺省順序。缺省順序例如可以規(guī)定先執(zhí)行區(qū)分析方法,然后識別文本行,然后執(zhí)行導(dǎo)引和裝訂線分析,等等。在一些實施例中,識別方法包括識別由當(dāng)前簡檔排除的方法。例如,重構(gòu)處理可能已經(jīng)識別出頁面的潛在區(qū)邊界。在一些實施例中,當(dāng)至少有特定密度的區(qū)邊界并且文本圖案適當(dāng)?shù)仄ヅ鋾r,頁面被識別為街區(qū)圖。因此,將不再執(zhí)行剩余的區(qū)分析(例如,識別區(qū)), 因為這會將頁面斷開成不合理個數(shù)的小區(qū),這些小區(qū)不會被文檔的作者預(yù)期為頁面的單獨(dú)區(qū)域。類似地,在一些實施例中,指定文檔是字處理文檔的文檔簡檔包括用于列識別的方法。然而,當(dāng)文檔中的特定頁面具有嵌入的內(nèi)容時,用于特定頁面的簡檔可能以不執(zhí)行該方法的指令撤銷列識別步驟。一旦選擇了一個方法,處理7200選擇用于該方法的實施。在一些實施例中,活動 (即,選擇的)簡檔可以實施方法,或者可以從分級中更高的活動簡檔繼承對該方法的實施。該處理確定(在7225處)所選方法是否是針對當(dāng)前(即,最低活動級別)簡檔明確地定義的。當(dāng)所選方法是明確地定義的時,該處理選擇(在7230處)針對當(dāng)前簡檔的方法的實施。然后該處理前進(jìn)到下面描述的7250。否則,該處理確定(在7235處)所選方法是否是針對更高分級級別處的活動簡檔定義的。當(dāng)該處理是針對更高分級的活動簡檔定義的時,該處理從更高級別的活動簡檔選擇(在7240處)對方法的實施。然后該處理前進(jìn)到下面描述的7250。否則,該方法選擇 (在7245處)對方法的缺省實施。圖73例示了一些實施例如何繼承實施特定方法的最低級別的活動簡檔。該圖示出了文檔重構(gòu)簡檔的分級7300。該分級包括針對所有方法的缺省實施的集合7305、針對各種文檔簡檔的實施的集合7310、針對各種章節(jié)簡檔的實施的集合7315、針對各種頁面簡檔的實施的集合7320以及針對各種區(qū)簡檔的實施的集合7325。如虛線所示,區(qū)簡檔1 7330 是當(dāng)前(最低級別)的活動簡檔,而頁面簡檔1 7335、章節(jié)簡檔X 7340和文檔簡檔2 7345 也是活動的。因為區(qū)簡檔1 7330是當(dāng)前活動簡檔,所以對實施特定方法(例如,導(dǎo)引識別)的嘗試查看對區(qū)簡檔1 7330的實施的集合,來確定是否它明確地定義了針對該特定方法的實施。當(dāng)區(qū)簡檔1 7330明確地定義了實施時,選擇該實施。否則,檢查活動的頁面簡檔1 7335。沿分級提升地檢查活動簡檔,直到定義了特定方法的實施,或者達(dá)到了針對所有方法的缺省實施的集合7305。當(dāng)識別出實施方法的最低級別的活動簡檔時,該實施由當(dāng)前活動簡檔繼承。在沒有活動簡檔實施方法時,當(dāng)前活動簡檔從缺省簡檔繼承該實施。在處理7200選擇方法的實施之后,該處理利用所選實施執(zhí)行(在7250處)重構(gòu)。 在一些實施例中,所執(zhí)行的重構(gòu)包括以上在第II至VI章中描述的一個或多個處理。接著,該處理確定(在7255處)是否識別出新的簡檔。一些實施例在執(zhí)行了每個方法之后發(fā)送簡檔匹配引擎可用的所有重構(gòu)數(shù)據(jù)。一些實施例的簡檔匹配引擎基于接收到的信息確定是否有足夠的信息來測試特定簡檔(例如,在當(dāng)前活動簡檔下面的下一個分級級別處的簡檔)。如果有足夠的信息,則簡檔匹配引擎相對于簡檔中的各種邏輯判定測試信息。一些實施例對簡檔進(jìn)行排序使得它們最可能匹配,或者要求將先測試最少量的工作。 下面將在第C節(jié)中進(jìn)一步詳細(xì)地描述簡檔匹配。當(dāng)沒有識別出新的簡檔時,處理確定(在7265處)對文檔的重構(gòu)是否完成。在一些實施例中,當(dāng)完成了由活動簡檔集合規(guī)定的(并且沒有被更低級別的活動簡檔移除的) 所有方法時,重構(gòu)完成。當(dāng)重構(gòu)完成時,處理結(jié)束。否則,該處理前進(jìn)到7220以如上所述地選擇下一個識別出的方法。當(dāng)識別出新的簡檔時,處理7200移除(在7260處)由新簡檔規(guī)定的任何重構(gòu)結(jié)果。具體地,除了規(guī)定應(yīng)當(dāng)被執(zhí)行或不執(zhí)行的特定方法之外,一些實施例中的簡檔規(guī)定應(yīng)當(dāng)撤銷特定方法的結(jié)果。例如,即使在已經(jīng)執(zhí)行了區(qū)分析方法之后,簡檔可以規(guī)定區(qū)信息(邊界、相交部、區(qū),等等)應(yīng)當(dāng)從結(jié)果中被移除,并且應(yīng)當(dāng)在執(zhí)行了若干其他方法之后再次執(zhí)行區(qū)分析。然后該處理前進(jìn)到以上描述的7215,并前進(jìn)直到重構(gòu)完成。C.簡檔匹配如上所述,在一些實施例中,簡檔是針對該簡檔必須全部為真的邏輯判定的集合。 一些實施例采用簡檔匹配引擎,該簡檔匹配引擎接收內(nèi)容處理結(jié)果、確定是否有足夠的信息來針對當(dāng)前活動簡檔測試下一個級別的簡檔、然后相對于簡檔測試內(nèi)容處理結(jié)果。一些實施例基于結(jié)果可能到達(dá)的順序以及基于哪個簡檔最可能匹配來規(guī)定用于測試簡檔的特定順序。圖74至77例示了一些實施例的針對四個不同頁面的示例頁面簡檔匹配處理。 圖74例示了四個頁面簡檔簡單頁面7401、標(biāo)準(zhǔn)頁面7402、豐富頁面7403以及布局頁面 7404。每個簡檔包括至少一個邏輯判定具體地,簡檔7401包括三個判定7411至7413,簡檔7402包括四個判定7421至7似4,簡檔7403包括兩個判定7431和7432,并且簡檔7404 包括僅一個判定。圖74還例示了相對于按照所示順序的頁面簡檔進(jìn)行測試的頁面7400。頁面7400 僅包括圖形對象7450和文本行7460。頁面7400的主體僅具有一個子輩(頁面邊界,其本身沒有子輩),并且用于該區(qū)的簡檔是簡單的,因為一個布局中僅有一列文本。在一些實施例中,一旦匹配了一個簡檔,就不測試其他的簡檔了。圖74中的虛線例示了通過由簡檔匹配引擎采用的判定的路徑,以確定頁面7400的頁面簡檔。首先,引擎確定頁面的主體是否有僅一個子輩(判定7411)。因為該判定被評估為真,所以引擎確定該子輩是否沒有區(qū)子輩(判定7412,其也為真)。最后,引擎確定是否區(qū)簡檔為簡單的(即,在一個布局中僅有一列文本)(判定7413,其也為真)。因為所有三個判定針對頁面7400都為真,所以簡檔匹配引擎確定該頁面7400為簡單頁面。因此,可以針對頁面7400移除一定的方法(例如,列識別)。圖75例示了相對于頁面簡檔7401至7404測試的第二頁面7500。頁面7500包括圖形對象7540、標(biāo)題行7545和兩列文本行7550。頁面7500的主體僅具有一個子輩(頁面邊界,其本身沒有子輩),并且區(qū)中的文本是標(biāo)題,然后是兩列文本。圖75中的虛線例示了通過由簡檔匹配引擎采用的判定的路徑,來確定頁面7500的頁面簡檔。首先,該引擎確定頁面主體是否僅具有一個子輩(判定7411)。因為該判定被評估為真,所以該引擎確定子輩是否不具有區(qū)子輩(判定7412,其也為真)。然后該引擎確定區(qū)簡檔是否為簡單的(判定 7413為假)。由于存在標(biāo)題和兩個列,所以區(qū)簡檔不是簡單的,并由此判定7413為假,且匹配引擎檢查下一個簡檔。判定7421至74 針對頁面7500全部為真,因此簡檔匹配引擎確定頁面7500為標(biāo)準(zhǔn)頁面。盡管這些針對圖74中的頁面7400也全都為真,但是由于簡單頁面簡檔7401首先被評估(并且匹配),所以再不會針對頁面7400檢查標(biāo)準(zhǔn)頁面簡檔7402。圖76例示了相對于頁面簡檔7401至7404測試的第三個頁面7600。頁面7600 包括具有若干子輩的主要區(qū),所述子輩包括具有文本的標(biāo)題區(qū)、邊條、居中調(diào)出部周圍的主布局以及具有文本的底部區(qū)。圖76中的虛線例示了通過由簡檔匹配引擎采用的判定的路徑,以確定頁面7600的頁面簡檔。首先,該引擎確定頁面的主體是否僅具有一個子輩(判定7411)。因為該判定被評估為真,所以引擎確定該子輩是否不具有區(qū)子輩(判定7412為假)。因為初級區(qū)具有眾多子輩,所以判定7412為假,并且匹配引擎檢查下一個簡檔。基于相同的理由判定7422也為假,所以匹配引擎移動到第三個簡檔,并且因為布局的數(shù)量很小且頁面具有主流布局(圍繞同心方形的布局),所以判定7431和7432被評估為真。因此, 頁面7500被分類為豐富頁面。圖77例示了相對于頁面簡檔7401至7404測試的第四個頁面7700。頁面7700包括具有圖形的大區(qū)和具有文本的島,以及具有文本的較小區(qū)。圖77中的虛線例示了通過由簡檔匹配引擎采用的判定的路徑,以確定頁面7400的頁面簡檔。首先,該引擎確定頁面的主體是否僅具有一個子輩(判定7411)。因為該判定被評估為假,所以匹配引擎檢查下一個簡檔(其因相同的理由為假)。在第三個簡檔處,判定7432為假,這是因為頁面7700沒有主流布局。判定7441總是為真,并由此將頁面7700分類為布局頁面。判定7441總是為真,因為一旦頁面不能與任何先前簡檔匹配,則它自動地被分類為布局頁面。一旦匹配了簡檔,則可以根據(jù)簡檔中的指令對重構(gòu)方法進(jìn)行執(zhí)行、移除等。VIII.對感興趣區(qū)域的識別和選擇,以及對文檔的導(dǎo)航和顯示諸如電子圖書閱讀器的文檔瀏覽應(yīng)用通常將需要了解如何最好地顯示文檔和在文檔內(nèi)導(dǎo)航。這在不能一起易讀地顯示文檔的整個頁面的小屏幕設(shè)備上尤為重要。例如,在一些情況下,文檔瀏覽器應(yīng)當(dāng)能夠識別出內(nèi)容表格中的一個條目鏈接到文檔的特定章節(jié), 或者文檔的兩個章節(jié)相關(guān)(例如,調(diào)出部是特定文章的一部分,或者一列流入下一個中)。本發(fā)明一些實施例采用從文檔重構(gòu)獲得的信息(例如,段落和列信息、表格信息, 等等),用于顯示和導(dǎo)航文檔。具體而言,一些實施例調(diào)整對語義地重構(gòu)的文檔的顯示和導(dǎo)航,用以在小屏幕設(shè)備(例如,媒體播放器、蜂窩式電話,等等)上的顯示和導(dǎo)航。A.對感興趣區(qū)域的識別和選擇一些實施例提供了用于識別和選擇語義地重構(gòu)的文檔中的感興趣區(qū)域,然后基于對感興趣區(qū)域的選擇來修改對文檔的顯示的方法。圖78概念性地例示了在一些實施例中用于基于對感興趣的位置的識別來顯示文檔的處理7800。將結(jié)合圖79來描述處理7800。 圖79例示了根據(jù)本發(fā)明一些實施例的在小屏幕設(shè)備上的序列7900(7905至7920),其中選擇了感興趣的位置并修改了顯示。如圖78所示,處理7800接收(在7805處)對語義地重構(gòu)的文檔中感興趣的位置的指示。在一些實施例中,該語義地重構(gòu)的文檔包括文檔對象模型,該文檔對象模型是如以上在第II至VI章中描述的文檔重構(gòu)的結(jié)果。在一些實施例中,文檔對象模型包括如以上在第II章中描述的區(qū)圖,其中該區(qū)圖已經(jīng)被整個文檔重構(gòu)處理中的內(nèi)容信息填充。一些實施例的文檔對象模型還指示內(nèi)容(例如,列、段落、圖像等等)的閱讀順序。一些實施例接收對感興趣的位置的指示作為對顯示器上的點的選擇。例如,選擇可以利用游標(biāo)控制設(shè)備(例如,鼠標(biāo)、觸摸板,等等)來進(jìn)行。在觸摸屏顯示器上,也可以通過用戶輕敲屏幕(例如,單敲、雙敲、收聚運(yùn)動,等等)來指示感興趣的位置。參照圖79,序列7900示出(在7905處)用戶7925選擇顯示器7930上的點,顯示器7930正在顯示文檔的一部分。感興趣的位置7935例示(在7910)在顯示器7930中的用戶觸摸屏幕以進(jìn)行選
76擇的點處。接著,處理7800識別(在7810處)在語義地重構(gòu)的文檔中的感興趣區(qū)域。序列 7900示出(在7915處)了已經(jīng)基于對感興趣位置7935的選擇將段落7940識別為感興趣的區(qū)域。一些實施例在感興趣位置處于段落的界定框內(nèi)時將段落識別為感興趣區(qū)域,就像針對感興趣位置7935的情況一樣。在識別出感興趣區(qū)域之后,處理7800應(yīng)用(在7815處)所要求的轉(zhuǎn)換以將感興趣區(qū)域放置在顯示設(shè)備的瀏覽區(qū)中。在一些實施例中,轉(zhuǎn)換包括旋轉(zhuǎn)、縮放和平移的組合, 如下面關(guān)于處理8000和8100所描述的。接著,該處理基于所應(yīng)用的轉(zhuǎn)換來繪制(在7820 處)文檔。然后該處理結(jié)束。序列7900示出(在7920處)了根據(jù)規(guī)定的轉(zhuǎn)換,段落7940 已經(jīng)被放大并且垂直地且水平地置中。在一些實施例中,該處理顯示原始(即,未結(jié)構(gòu)化) 的文檔,但是采用對結(jié)構(gòu)性元素的位置的了解(例如,來自結(jié)構(gòu)化文檔)來搖動(pan)和縮放文檔。圖80概念性地例示了一些實施例的用于識別感興趣區(qū)域并應(yīng)用轉(zhuǎn)換以在顯示設(shè)備上繪制感興趣區(qū)域的具體處理8000。如圖所示,處理8000接收(在8005處)感興趣位置。在一些實施例中,基于用戶的選擇(例如,利用游標(biāo)控制設(shè)備或者通過觸摸屏來選擇) 來采用感興趣的位置?;诟信d趣的位置,然后該處理基于接收到的感興趣位置確定(在8010處)語義地重構(gòu)的文檔中的所選對象。在一些實施例中,所選對象可以是字符、字、文本行、圖像,等等。在一些實施例中,語義地重構(gòu)的文檔包括文檔對象模型,其是如以上在第II至VI章中描述的文檔重構(gòu)的結(jié)果。在一些實施例中,文檔對象模型包括如以上在第II章中描述的區(qū)圖,其中該區(qū)圖已經(jīng)被整個文檔重構(gòu)處理中的內(nèi)容信息填充。接著該處理沿文檔分級提升(在8015處),直到達(dá)到段落或圖形對象。在一些實施例中,文檔分級是填充有內(nèi)容信息的區(qū)圖(即,D0M)。當(dāng)所選對象是字時,在一些實施例中,處理沿分級從字提升到包括該字的文本行,到包括該文本行的段落。然后該處理確定(在8020處)識別出的對象是否是段落。當(dāng)識別出的對象不是段落時,它是圖形對象。在一些實施例中,該圖形對象可以是形狀、圖像或者連結(jié)圖(即,復(fù)合圖形對象)中的任一個。當(dāng)所識別出的對象是圖形對象時,該處理將感興趣矩形(ROI) 定義(在8025處)為所識別出對象的豎直界定框。然后該處理進(jìn)行縮放(在8030處),使得ROI的寬度和高度不大于顯示區(qū)的寬度和高度。然后該處理前進(jìn)到下面描述的8060。當(dāng)所識別出的對象是段落時,該處理定義(在8035處)具有段落的父列的寬度和該段落的高度的矩形。然后該處理針對所述矩形應(yīng)用(在8040處)段落的任何旋轉(zhuǎn),并將 ROI定義為經(jīng)旋轉(zhuǎn)矩形的豎直界定框。在一些實施例中,如果段落處在文檔對象模型的旋轉(zhuǎn)分組中,則旋轉(zhuǎn)該段落。一些實施例如以上在第II章中描述地定義旋轉(zhuǎn)分組。然后該處理確定(在8045處)段落基線(在旋轉(zhuǎn)之前)是否比顯示區(qū)的對角線更陡。例如,當(dāng)顯示區(qū)是方形時,該確定是基線是比45度更陡還是更不陡。當(dāng)段落基線比顯示區(qū)的對角線更陡時,該處理進(jìn)行縮放(在8050處),使得ROI不大于顯示區(qū)的高度。然后該處理前進(jìn)到下面描述的8060。另一方面,當(dāng)段落基線不比顯示區(qū)的對角線更陡時,該處理進(jìn)行縮放(在8055處),使得ROI不大于顯示區(qū)的寬度。接著,處理8000確定(在8060處)ROI (如在以上操作中定義的)是否水平地適合在顯示區(qū)中。當(dāng)ROI水平地適合時,該處理水平地置中(在8065處)R0I。然后該處理前進(jìn)到下面描述的8075。否則,該處理水平地置中(在8070處)感興趣位置。然后該處理確定(在8075處)ROI是否垂直地適合在顯示區(qū)中。當(dāng)ROI垂直地適合時,該處理垂直地置中(在8080處)R0I。然后該處理前進(jìn)到下面描述的8087。否則,該處理垂直地置中(在 8085處)感興趣位置。接著,該處理確定(在8087處)包括感興趣位置的頁面的底部邊緣或頂部邊緣是否是在顯示區(qū)中。如果是的話,該處理將可視頁面邊緣移動(在8090處)到顯示區(qū)的對應(yīng) (即,頂部或底部)邊緣,使得僅顯示一個頁面,并且垂直地占據(jù)整個顯示區(qū)。然后該處理確定(在8092處)包括感興趣位置的頁面的右邊緣或左邊緣是否是在顯示區(qū)中。如果是的話,該處理將可視頁面邊緣移動(在8095處)到顯示區(qū)的對應(yīng)(即,右或左)邊緣,使得僅顯示一個頁面,并且垂直地占據(jù)整個顯示區(qū)。最后,該處理利用所應(yīng)用的以上所有轉(zhuǎn)換來重新繪制(在8197處)顯示區(qū)。然后該處理結(jié)束。一些實施例利用其他轉(zhuǎn)換(例如,縮放、平移、旋轉(zhuǎn),等等)的組合來顯示所選的感興趣區(qū)域。例如,盡管處理8000確定與作為圖形對象的感興趣區(qū)域相比如何不同地縮放作為段落的感興趣區(qū)域,但是其他實施例定義感興趣區(qū)域,使得縮放針對所有感興趣區(qū)域是相同的。例如,下面描述的處理8100按照這種方式在感興趣區(qū)域上進(jìn)行縮放。圖81概念性地例示了一些實施例的用于識別感興趣區(qū)域和應(yīng)用轉(zhuǎn)換以在顯示設(shè)備上繪制感興趣區(qū)域的具體處理8100。處理8100類似于以上描述的處理8000。在一些實施例中,用戶可以選擇他們優(yōu)選處理8000中的縮放轉(zhuǎn)換還是處理8100中的縮放轉(zhuǎn)換。其他實施例實施兩個處理之一。如圖所示,處理8100接收(在8105處)感興趣位置。在一些實施例中,基于用戶的選擇(例如,利用游標(biāo)控制設(shè)備或者通過觸摸屏進(jìn)行選擇)來采用感興趣位置。然后基于感興趣位置,該處理基于接收到的感興趣位置確定(在8110處)語義地重構(gòu)的文檔中的所選對象。在一些實施例中,所選對象可以是字符、字、文本行、圖像,等等。 在一些實施例中,語義地重構(gòu)的文檔包括文檔對象模型,其是如以上在第II至VI章中描述的文檔重構(gòu)的結(jié)果。在一些實施例中,文檔對象模型包括如以上在第II章中描述的區(qū)圖, 其中該區(qū)圖已經(jīng)被整個文檔重構(gòu)處理中的內(nèi)容信息填充。接著處理8115沿文檔分級提升(在8115處),直到達(dá)到段落或圖形對象。在一些實施例中,文檔分級是填充有內(nèi)容信息的區(qū)圖。如果所選對象是字,則在一些實施例中,處理沿分級從字提升到包括該字的文本行,到包括該文本行的段落。然后該處理確定(在8120處)識別出的對象是否是段落。如果識別出的對象不是段落,則它是圖形對象。在一些實施例中,該圖形對象可以是形狀、圖像或者連結(jié)圖(即, 復(fù)合圖形對象)中的任一個。當(dāng)所識別出的對象是圖形對象時,該處理將感興趣矩形(ROI) 定義(在8125處)為所識別出對象的豎直界定框,然后該處理前進(jìn)到下面描述的8150。當(dāng)所識別出的對象是段落時,該處理定義(在8135處)具有段落的父列的寬度和該段落的高度的矩形。然后該處理針對所述矩形應(yīng)用(在8140處)段落的任何旋轉(zhuǎn)。在一些實施例中,如果段落處在文檔對象模型的旋轉(zhuǎn)分組中,則旋轉(zhuǎn)該段落。一些實施例如以上在第II章中描述地定義旋轉(zhuǎn)分組。然后該處理將ROI定義(在814 為豎直界定框,該豎直界定框包括在感興趣位置上面的第一特定個數(shù)的行以及在該感興趣位置下面的第二特定個數(shù)的行。該定義是基于用戶對感興趣位置感興趣并將希望查看感興趣位置下面和上面的一定個數(shù)的文本行的假設(shè)。在定義了 ROI之后,處理8100然后進(jìn)行縮放(在8150處),使得ROI的寬度和高度不大于瀏覽區(qū)的寬度和高度。接著,處理8100確定(在8160處)ROI (如在以上操作中定義的)是否水平地適合在顯示區(qū)中。當(dāng)ROI水平地適合時,該處理水平地置中(在8165處)ROI。否則,該處理水平地置中(在8170處)感興趣位置。然后該處理確定(在8175處)ROI是否垂直地適合在顯示區(qū)中。當(dāng)ROI垂直地適合時,該處理垂直地置中(在8180處)ROI。否則,該處理垂直地置中(在8185處)感興趣位置。在置中了感興趣位置和/或區(qū)域之后,該處理確定(在8187處)包括感興趣位置的頁面的底部邊緣或頂部邊緣是否是在顯示區(qū)中。如果是的話,該處理將可視頁面邊緣移動(在8190處)到顯示區(qū)的對應(yīng)(即,頂部或底部)邊緣,使得僅顯示一個頁面,并且垂直地占據(jù)整個顯示區(qū)。然后該處理確定(在8192處)包括感興趣位置的頁面的右邊緣或左邊緣是否是在顯示區(qū)中。如果是的話,該處理將可視頁面邊緣移動(在8195處)到顯示區(qū)的對應(yīng)(即,右或左)邊緣,使得僅顯示一個頁面,并且垂直地占據(jù)整個顯示區(qū)。最后,該處理利用所應(yīng)用的以上所有轉(zhuǎn)換來重新繪制(在8197處)顯示區(qū),然后該處理結(jié)束。B.對語義地重構(gòu)的文檔的顯示和導(dǎo)航一些實施例提供了各種用于優(yōu)化對語義重構(gòu)文檔的顯示和導(dǎo)航的方法。在一些實施例中,針對小屏幕設(shè)備(例如,媒體播放器、蜂窩式電話,等等)優(yōu)化顯示和導(dǎo)航。圖82概念性地例示了一些實施例的用于顯示語義重構(gòu)文檔的處理8200。如圖所示,該處理接收(在8205處)語義重構(gòu)文檔。在一些實施例中,該語義重構(gòu)文檔包括文檔對象模型,該文檔對象模型是如以上在第II至VI章中描述的文檔重構(gòu)的結(jié)果。在一些實施例中的文檔對象模型包括如以上在第II章中描述的區(qū)圖,其中該區(qū)圖已經(jīng)被在整個文檔重構(gòu)處理中的內(nèi)容信息所填充。然后該處理將語義重構(gòu)文檔分割(在8205處)成多個章節(jié)。在一些實施例中,該分割是基于針對文檔的文檔對象模型中的信息。在一些實施例中,每個章節(jié)是字、相關(guān)聯(lián)的圖形對象和其他嵌套章節(jié)的有序序列。例如,嵌套可以表現(xiàn)為加框示例或注釋或者作為表格的單元。接著處理8215調(diào)整重構(gòu)文檔的瀏覽以適應(yīng)通過章節(jié)的自然流。然后該處理結(jié)束。 在一些實施例中,該調(diào)整可以按照多種方式展現(xiàn)自己。圖83例示了一些實施例的一個這種調(diào)整。圖83例示了設(shè)備8305,其正初始地按照兩列8310和8315來顯示語義重構(gòu)文檔的一部分。在一些實施例中,該文檔初始地具有兩列,而在其他情況下該文檔已經(jīng)針對在設(shè)備 8305上瀏覽而進(jìn)行了調(diào)整。圖83例示了設(shè)備8305側(cè)邊轉(zhuǎn)動。該設(shè)備包括加速計或其他這種設(shè)備來識別出它側(cè)邊轉(zhuǎn)動。因此,視圖旋轉(zhuǎn)90度,使得文本水平地走向。然而,不能顯示同樣的兩列8310 和8315。相反,這些列的文本被斷開成三列8320至8330,使得所有文本仍都顯示在相同的尺寸下,并且保持可讀性。這是可以的,因為通過語義重構(gòu)處理放在一起的文檔對象模型指示文本的閱讀順序是從第一列的頂部到底部,然后再返回到第一列的頂部。
圖84概念性地例示了一些實施例的用于在語義重構(gòu)文檔的區(qū)域之間進(jìn)行導(dǎo)航的處理8400。如圖所示,處理8400顯示(在8405處)語義重構(gòu)文檔中的區(qū)域。在一些實施例中,語義重構(gòu)文檔包括文檔對象模型,該文檔對象模型是如以上在第II至VI章中描述的文檔重構(gòu)的結(jié)果。在一些實施例中的文檔對象模型包括如以上在第II章中描述的區(qū)圖,其中該區(qū)圖已經(jīng)被在整個文檔重構(gòu)處理中的內(nèi)容信息所填充。在一些實施例中,語義重構(gòu)文檔的區(qū)域由文檔對象模型定義,并且可以包括文本區(qū)域、圖形,等等。處理8400接收(在8410處)滾動經(jīng)過顯示區(qū)域的端部的輸入。在一些實施例中,該端部可以是區(qū)域的底部(向下滾動)或頂部(向上滾動)。例如,當(dāng)顯示文本列的一部分時,該處理接收向上滾動到列的頂部或者向下滾動到列的末端的輸入。然后該處理采用文檔的語義重構(gòu)分級模型(即,文檔對象模型)將文檔的流中的下一個區(qū)域自動地移動(在8415處)到顯示中。如上所述,采用文檔對象模型,該處理可以識別出通過文本的流以及文檔中的相關(guān)聯(lián)圖形。為了繼續(xù)列示例,當(dāng)用戶向下滾動經(jīng)過列的端部時,一些實施例跳到下一列的頂部。一些實施例相反將第二列的頂部的文本附于第一列的底部,并且繼續(xù)滾動,就像文本全都是一列似的。圖85概念性地例示了一些實施例的用于針對小屏幕設(shè)備修改語義重構(gòu)文檔的布局的處理8500。如圖所示,該處理接收(在8505處)具有特定布局的語義重構(gòu)文檔。在一些實施例中,該語義重構(gòu)文檔包括文檔對象模型,該文檔對象模型是如以上在第II至VI章中描述的文檔重構(gòu)的結(jié)果。在一些實施例中的文檔對象模型包括如以上在第II章中描述的區(qū)圖,其中該區(qū)圖已經(jīng)被在整個文檔重構(gòu)處理中的內(nèi)容信息所填充。圖86例示了文檔的頁面8600,就像它在大屏幕上或者沒有語義重構(gòu)地那樣顯示, 其具有特定兩列布局,其中每列包括若干文本行。頁面8600上的第一列包括跨六個完整文本行和部分第七行的字集合8605。處理8500通過采用文檔的分級模型(即,文檔對象模型)修改(在8510處)在保持文檔的流的同時在小屏幕設(shè)備上瀏覽的布局。該處理在小屏幕設(shè)備上顯示(在8515 處)修改布局的一部分。然后該處理結(jié)束。圖86例示了顯示來自頁面8600的第一列的文本8605的小屏幕設(shè)備8610。然而,文本已經(jīng)針對在小屏幕設(shè)備上的理想瀏覽進(jìn)行了調(diào)整。 不是將文本顯示得非常小以致于用戶不得不瞇眼看,而是增大文本尺寸并且減少每行的字?jǐn)?shù)。在一些實施例中,向下滾動將使得用戶能夠繼續(xù)按順序閱讀文本。在一些實施例中,文檔的文檔對象模型包括關(guān)于如何針對各種情況適應(yīng)性地顯示布局、顯示區(qū)域尺寸以及顯示區(qū)域縱橫比的建議。在一些實施例中,這些建議可以在文檔重構(gòu)處理期間基于重構(gòu)的結(jié)果生成,可以根據(jù)用戶偏好設(shè)置,或者可以由文檔的初始作者設(shè)置。一些實施例將重構(gòu)文檔信息(例如,文檔對象模型)與文檔一起存儲,以及可以將這種用戶偏好與重構(gòu)文檔一起存儲。一些實施例將文檔信息存儲為XML格式,或者作為PDF (或者類似格式)文檔的元數(shù)據(jù)。IX.跨布局對文本的選擇除了顯示和導(dǎo)航文檔之外,能夠選擇文本可能對于用戶來說也是非常重要的。具有多個不同文本流(例如,多個文章)的復(fù)雜頁面可能會對試圖智能地按順序選擇文本的應(yīng)用制造困難,其中多個不同文本流繼而又?jǐn)嚅_成多個布局。當(dāng)選擇文本(例如,用于復(fù)制和粘貼)時,保留字符、字、文本行等的順序是關(guān)鍵的。這包括不僅僅在列內(nèi)進(jìn)行選擇,而且
80包括跨多個列、布局、區(qū)或頁面進(jìn)行選擇?!嵤├峁┝擞糜谠谡Z義重構(gòu)文檔中選擇文本的方法。在一些實施例中,語義重構(gòu)文檔包括文檔對象模型,該文檔對象模型是如以上在第II至VI章中描述的文檔重構(gòu)的結(jié)果。在一些實施例中的文檔對象模型包括如以上在第II章中描述的區(qū)圖,其中該區(qū)圖已經(jīng)被在整個文檔重構(gòu)處理中的內(nèi)容信息所填充。一些實施例的文檔對象模型包括布局和流信息,例如對布局內(nèi)的列的閱讀順序以及從一個布局到下一個布局的流。圖87概念性地例示了一些實施例的用于確定對語義重構(gòu)文檔中的文本的選擇的處理8700。如圖所示,處理8700接收(在8705處)文檔的區(qū)和布局信息。在一些實施例中,區(qū)信息包括填充有文檔的內(nèi)容的區(qū)圖,如以上在第II章中所描述的。在一些實施例中, 布局信息包括如以上在第IV章中描述的列和布局,以及通過布局以及在布局之間閱讀的流。然后該處理顯示(在8710處)文檔的一部分。在一些實施例中,該文檔在標(biāo)準(zhǔn)屏幕上按照其初始瀏覽尺寸顯示。然而,一些實施例利用以上在第VIII章中描述的處理之一按照適應(yīng)性方式顯示文檔(例如,如果在小屏幕設(shè)備上顯示文檔的話)。處理8700接收(在8715處)選擇的起始點。該處理還接收(在8720處)選擇的終止點。一些實施例通過游標(biāo)控制設(shè)備(例如,鼠標(biāo))、鍵盤或者其組合接收起始點和終止點。例如,可以通過用戶利用鼠標(biāo)點擊文本中的起始點、保持鼠標(biāo)按鈕向下、拖拽到文本中的終止點并釋放鼠標(biāo)按鈕來定義選擇。類似的處理可以利用其他游標(biāo)控制設(shè)備執(zhí)行。一些實施例還允許利用游標(biāo)控制設(shè)備進(jìn)行其他類型的選擇——例如,雙擊以選擇一個字,或者三擊以選擇一個文本行。在一些實施例中,用戶還可以采用鍵盤上的選擇鍵(例如,切換鍵和箭頭鍵)來選擇語義重構(gòu)文檔中的文本。在拖拽選擇的情況下,一些實施例將起始點定義為鼠標(biāo)首先點擊的點,并在鼠標(biāo)按鈕保持向下時將終止點定義為游標(biāo)的當(dāng)前點,或者在鼠標(biāo)按鈕被釋放時將終止點定義為鼠標(biāo)按鈕的釋放點。對于雙擊和三擊或者選擇結(jié)構(gòu)性元素(例如,段落、列等)的其他這種選擇機(jī)制,一些實施例將起始點定義為結(jié)構(gòu)性元素的界定框的左側(cè)底部并且將終止點定義為其右側(cè)頂部。在一些實施例中,結(jié)構(gòu)性元素的界定框是該印刷界線并集的界定框。在一些實施例中,字符的印刷界線從其左側(cè)的錨點延伸到該錨點加右側(cè)的寬度(可能通過與后面的字符緊排而調(diào)整),并且從錨點上的冒進(jìn)延伸到錨點下面的縮進(jìn)。然后該處理利用文檔的起始點、終止點以及布局和流性質(zhì)確定(在8725處)文本的所選章節(jié)。然后該處理結(jié)束。各種實施例提供了用于在給定語義重構(gòu)文檔的起始點和終止點的情況下精確地確定從該文檔的哪個布局選擇哪個文本的不同具體處理,下面將描述這些處理中的一些。圖88例示了對語義重構(gòu)文檔的頁面8801上的文本的選擇的序列8800。頁面8801 包括兩個主要的列8805和8810以及頁面中央的小調(diào)出部8815 (其為不同的布局)。序列 8800也示出了用于選擇的起始點8820和終止點8825。對從起始點到終止點所得的文本的選擇8830是從起始點到第一列的底部,然后從第二列的頂部直到終止點。在所示實施例中沒有選擇中央調(diào)出部8815中的文本。本領(lǐng)域普通技術(shù)人員將認(rèn)識到,可以改變選擇處理, 使得將中央調(diào)出部8815包括到選擇8830中。圖89概念性地例示了一些實施例的用于定義對語義重構(gòu)文檔中的文本的選擇的具體處理8900。如圖所示,處理8900接收(在8905處)文檔的區(qū)和布局信息。在一些實施例中,區(qū)信息包括填充有文檔的內(nèi)容的區(qū)圖,如以上在第II章中所描述的。在一些實施例中,布局信息包括如以上在第IV章中描述的列和布局,以及通過布局以及在布局之間閱讀的流。接著,該處理向文檔中的每個列分配(在8910處)一個閱讀順序。一些實施例在每個頁面的閱讀順序為零處開始(即,將閱讀的第一列被分配以零閱讀順序)。一些實施例應(yīng)用如下要求,即在特定布局內(nèi),分配給每個列的閱讀順序必須與布局內(nèi)的列的順序一致, 并且沒有特定布局之外的列可以具有在特定布局的起始列和終止列的閱讀順序之間的閱讀順序。在一些實施例中,關(guān)于在閱讀順序上哪個布局是在前的,判定可以是任意的。其他實施例基于頁面的設(shè)計來逐布局地辨識閱讀順序。然后該處理顯示(在8915處)文檔的一部分。在一些實施例中,該文檔按照其在標(biāo)準(zhǔn)屏幕上的原始瀏覽尺寸顯示。然而,一些實施例利用以上在第VIII章中描述的處理之一按照適應(yīng)性方式顯示文檔(例如,當(dāng)在小屏幕設(shè)備上顯示文檔的時候)。然后處理接收(在8920處)文本選擇的起始點和終止點。一些實施例通過游標(biāo)控制設(shè)備(例如,鼠標(biāo))、鍵盤或者其組合接收起始點和終止點。例如,可以通過用戶利用鼠標(biāo)點擊文本中的起始點、保持鼠標(biāo)按鈕向下、拖拽到文本中的終止點并釋放鼠標(biāo)按鈕來定義選擇??梢岳闷渌螛?biāo)控制設(shè)備執(zhí)行類似的處理。一些實施例還允許利用游標(biāo)控制設(shè)備進(jìn)行其他類型的選擇——例如,雙擊以選擇一個字,或者三擊以選擇一個文本行。在一些實施例中,用戶還可以采用鍵盤上的選擇鍵(例如,切換鍵和箭頭鍵)來選擇語義重構(gòu)文檔中的文本。接著,該處理確定(在8925處)起始點和終止點是否在同一布局內(nèi)。當(dāng)起始點和終止點不在同一布局內(nèi)時,該處理將同一布局中的新終止點確定(在8930處)為起始點。 基于用戶可能意外地將選擇設(shè)備移到第二布局中的假設(shè),并且由于與跨布局相比在單個布局內(nèi)可以更可靠地確定選擇,所以一些實施例將終止點移動到與起始點相同的布局。一些實施例定義從起始點到終止點的線,并且將該線離開起始點的布局的定位定義為新終止點。其他實施例將終止點水平地或垂直地平移到起始點的布局中。然后該處理確定(在8935處)起始點在閱讀順序中是否是在終止點之前。在一些實施例中,當(dāng)起始點和終止點處于同一列中時,將閱讀順序確定為使得兩個點中更高的一個(并且相同的話,則為最左邊的一個)是閱讀順序中的較早點。當(dāng)起始點在閱讀順序中是在終止點之后時,該處理切換(在8940處)選擇的起始點和終止點,使得在閱讀順序中起始點始終早于終止點。接著,處理8900確定(在8945處)起始點和終止點是否在同一列中。當(dāng)兩個點處于同一列時,該處理選擇(在8950處)該列中從起始點到終止點的文本。然后該處理結(jié)束。否則,當(dāng)兩個點不在同一列中時,處理選擇(在8955處)從起始點到包括該起始點的列的底部、從包括終止點的列的頂部到終止點以及所有中間列的文本。然后該處理結(jié)束。在一些實施例中,第一個選擇的字符是在起始點處或起始點右側(cè)的字符,而最后選擇的字符是在終止點處或者終止點左側(cè)的字符。在一些實施例中,如果終止點在兩行之間,則選擇以上的所有行并且不選擇下面的行。一旦選擇了文本,該處理結(jié)束。圖90例示了語義重構(gòu)文檔的頁面9000。頁面9000包括兩個主要的列9005和9010以及居中的文本框9015。如圖所示,它們每一個都被分配以一個閱讀順序(列9005具有閱讀順序1,列9010具有閱讀順序2,而文本框9015具有閱讀順序3)。圖90還例示了選擇的起始點9020和終止點9025,以及由起始點和終止點定義的線9030。圖91例示了根據(jù)處理8900由起始點9020和終止點9025定義的選擇9100。即使線9030包括文本框9015的一部分,但是由于它是不同的布局,所以根據(jù)處理8900不選擇該文本。相反,選擇9100從起始點直到終止點,選擇列9005中起始點下面的所有行,以及列9015中起始點以上的所有行。圖92還例示了頁面9000,以及不同選擇的起始點9220和終止點9225,和由起始點和終止點定義的線9230。圖93例示了根據(jù)處理8900的一些實施例由起始點9220和終止點9225定義的選擇9300。由于終止點9225與起始點9220不在同一布局中,所以終止點移動到與起始點9220相同的布局中的點。圖93中所示的實施例繪制了起始點與終止點之間的線,并將終止點移動到該線離開起始點布局的定位處。選擇9300是終止點9225被移動到點9305后的結(jié)果。圖94例示了一些實施例的用于定義對語義重構(gòu)文檔中的文本的選擇的另一具體處理9400。一些實施例實施處理8900或處理9400。其他實施例允許用戶選擇(例如,通過菜單選項)采用處理8900 (其將選擇限制到僅一個布局)還是處理9400 (其允許跨多個布局進(jìn)行選擇)進(jìn)行文本選擇。如圖所示,處理9400接收(在9405處)文檔的區(qū)和布局信息。在一些實施例中, 區(qū)信息包括包括填充有文檔的內(nèi)容的區(qū)圖,如以上在第II章中所描述的。在一些實施例中,布局信息包括如以上在第IV章中描述的列和布局,以及通過布局以及在布局之間閱讀的流。接著,該處理向文檔中的每個列分配(在9410處)一個閱讀順序。一些實施例在每個頁面上的零處開始。一些實施例應(yīng)用如下要求,即在特定布局內(nèi),分配給每個列的閱讀順序必須與布局內(nèi)的列的順序一致,并且沒有特定布局之外的列可以具有在特定布局的起始列和終止列的閱讀順序之間的閱讀順序。在一些實施例中,關(guān)于在閱讀順序上哪個布局是在前的,判定可以是任意的。其他實施例試圖基于頁面的設(shè)計來逐布局地辨識閱讀順序。然后處理9400顯示(在9415處)文檔的一部分。在一些實施例中,該文檔按照其在標(biāo)準(zhǔn)屏幕上的原始瀏覽尺寸顯示。然而,一些實施例利用以上在第VIII章中描述的處理之一按照適應(yīng)性方式顯示文檔(例如,如果在小屏幕設(shè)備上顯示文檔的話)。然后處理接收(在9420處)文本選擇的起始點和終止點。一些實施例通過游標(biāo)控制設(shè)備(例如,鼠標(biāo))、鍵盤或者其組合接收起始點和終止點。例如,可以通過用戶利用鼠標(biāo)點擊文本中的起始點、保持鼠標(biāo)按鈕向下、拖拽到文本中的終止點并釋放鼠標(biāo)按鈕來定義選擇??梢岳闷渌螛?biāo)控制設(shè)備執(zhí)行類似的處理。一些實施例還允許利用游標(biāo)控制設(shè)備進(jìn)行其他類型的選擇——例如,雙擊以選擇一個字,或者三擊以選擇一個文本行。在一些實施例中,用戶還可以采用鍵盤上的選擇鍵(例如,切換鍵和箭頭鍵)來選擇語義重構(gòu)文檔中的文本。然后處理9400定義(在9425處)起始點與終止點之間的線。如果起始點或終止點(或兩者)不在一列中(即,在空白空間、圖形等等中),則處理將新起始點或終止點(或兩者)定義(在9430處)在該線通過的最后一列的邊緣處。一些實施例將該點定義在該線通過邊緣處的列的邊緣處。其他實施例將起始點或終止點水平地平移到列中以定義新起始點或終止點。然后該處理確定(在9435處)起始點在閱讀順序中是否是在終止點之前。在一些實施例中,當(dāng)起始點和終止點處在同一列中時,閱讀順序被確定為使得兩個點中更高的一個(并且相同的話,則為最左邊的一個)是閱讀順序中的較早點。當(dāng)起始點是在終止點之前時,該處理前進(jìn)到下面描述的9445。當(dāng)起始點在閱讀順序中是在終止點之后時,該處理切換(在9440處)選擇的起始點和終止點,使得在閱讀順序中起始點始終早于終止點。接著,該處理選擇(在9445處)從起始點到包括該起始點的列的末端、從包括終止點的列的開頭到終止點以及閱讀順序中在起始列與終止列之間的所有列的文本。然后該處理結(jié)束。在一些實施例中,第一個選擇的字符是在起始點處或起始點右側(cè)的字符,而最后選擇的字符是在終止點處或者終止點左側(cè)的字符。在一些實施例中,如果終止點在兩行之間,則選擇以上的所有行并且不選擇下面的行。圖95例示了根據(jù)處理9400由起始點9020和終止點9025 (在圖90的頁面9000 上)定義的選擇9500。因為起始點9020與終止點9025(圖90中所示)處在同一布局中, 所以由于居中文本框9015在閱讀順序中處在終止點的列之后,故而不選擇該居中文本框 9015。用戶沿著線9015拖拽時將通過框9015,并且此時將選擇所有列9010和部分文本框 9015 (參照以下圖96)。然而,在光標(biāo)離開框9015時,將僅選擇列9010的一部分直到游標(biāo)的位置(終止點)。類似地,圖96例示了根據(jù)處理9400由起始點9220和終止點9225 (在圖92的頁面9000上)定義的選擇9600。由于終止點9225處于與起始點9220不同的布局中,所以選擇起始點的整個布局,包括列9005的大部分以及列9010的全部。另外,選擇框9015中的文本直到終止點9225。圖91和93以及圖95和96例示了通過利用處理8900或處理9400可獲得的不同選擇選項。本領(lǐng)域普通技術(shù)人員將認(rèn)識到,可以采用其他選擇處理,以利用文檔的布局和流來達(dá)到其他可能的有益結(jié)果。X.高效集群分析如以上在各章節(jié)中所述,本發(fā)明一些實施例采用集群分析來執(zhí)行文檔重構(gòu)。例如, 利用密度集群識別對準(zhǔn)導(dǎo)引,利用界線集群識別連結(jié)圖,以及利用字符之間的間隔來采用差值集群以識別字和段間隔。然而,集群分析可能是非常存儲密集的,使得資源受限的設(shè)備 (例如,蜂窩式電話或媒體播放器)可能難以執(zhí)行集群分析。因此,本發(fā)明的一些實施例提供了用于執(zhí)行高效集群分析的方法。在一些實施例中,高效集群分析使得能夠在資源受限設(shè)備(例如,手持式設(shè)備)上執(zhí)行集群分析。資源受限設(shè)備可能在可用存儲器、處理能力以及兩者或者其他計算資源方面受限。在一些實施例中,集群分析采用存儲未排序陣列的索引的間接排序陣列。一些實施例采用間接排序陣列來同時以多個不同的距離尺度分隔數(shù)據(jù),以更快速地找到數(shù)據(jù)的最優(yōu)分隔,而不是在每個不同的距離尺度處重復(fù)集群分析并比較結(jié)果。圖97概念性地例示了一些實施例的用于采用集群分析來語義地重構(gòu)文檔的處理 9700。如圖所示,處理9700在資源受限設(shè)備上接收(在9705處)文檔。在一些實施例中, 該設(shè)備是媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式設(shè)備。在一些實施例中,該文檔是不包括結(jié)構(gòu)性信息的矢量圖形文檔。然后該處理在資源受限設(shè)備上對文檔數(shù)據(jù)執(zhí)行(在9710處)高效集群分析。例如,一些實施例執(zhí)行差值集群來識別字和段間隔,執(zhí)行密度集群來識別對準(zhǔn)導(dǎo)引,以及執(zhí)行界線集群來識別復(fù)合圖形。最后,該處理基于集群分析的結(jié)果在資源受限設(shè)備上語義地重構(gòu)(在9715處)文檔。然后該處理結(jié)束。圖98例示了一些實施例的在資源受限設(shè)備9810上語義地重構(gòu)文檔 9805的序列9800。文檔9805初始地被解析(在9801處)成具有坐標(biāo)的字符集合9815。 例如,字符9820( “r”)具有坐標(biāo)(X25Y2)0 一些實施例還解析圖形對象(例如,圖像、形狀,等等。接著,對文檔數(shù)據(jù)應(yīng)用(在9802處)高效集群分析。在一些實施例中,這包括采用差值集群來識別字、采用密度集群來識別導(dǎo)引以及采用界線集群來識別要連結(jié)的圖。也執(zhí)行其他重構(gòu)處理(在9803處)。例如,在一些實施例中,識別段落和列。本領(lǐng)域普通技術(shù)人員將認(rèn)識到,在一些實施例中集群分析處理和其他重構(gòu)處理不必按它們執(zhí)行的順序分開。高效集群分析和其他重構(gòu)處理的結(jié)果是可以顯示、導(dǎo)航等的語義重構(gòu)文檔9825。A.作為運(yùn)算符集的集群分析一些實施例基于應(yīng)用于實數(shù)序列Ov r2,…,rN)的若干運(yùn)算符來執(zhí)行集群分析 (無論是差值集群、密度集群還是界線集群)。一些實施例包括如下運(yùn)算符 求差值運(yùn)算符 D((ri,r2,-,rN)) = ^2TijT3T2,…,I^-Iv1)。在一些實施例中,求差值運(yùn)算符D定義了元素ι·Ν的成對分組(即,定義對值{r2,ri},{r3,r2},等等)。 排序運(yùn)算符 S((r1; r2,-,rN)) = (si; s2,…,,其中(s1; &,...,sN)是(r1; r2,…,rN)的排列,使得S1 ( s2 sNO參分隔運(yùn)算符P(g,(ri;r2, -,rN)) = ((r1 ...,rK1),(rK1+1,-,rK2), ...,(rKp+1,..., rH), (rH+1,…,ι·Ν),其中當(dāng)且僅當(dāng)J是在集合IK1,…Km)中時有巧+1-巧彡g。在一些實施例中,變量g被稱為間隔最小值,而運(yùn)算符P將序列Ovr2,…,ι·Ν)分隔成非交疊子序列, 其中任何地方兩個子序列值之間的差值超過間隔最小值。 聯(lián)合(coalesce)運(yùn)算符C,其任意次數(shù)遞歸地對分隔的序列(例如,運(yùn)算符P的輸出)進(jìn)行運(yùn)算,以將相鄰對子序列連結(jié)成單個子序列。在一些實施例中,確定何時連結(jié)相鄰對的測試是域獨(dú)立的。 過濾運(yùn)算符F,其基于域獨(dú)立的測試在分隔的序列上運(yùn)算以移除一些集群。以上在第III章中討論的密度約束是采用F的例示。一些實施例的差值集群是關(guān)于以上運(yùn)算符執(zhí)行的。類似地,因為界線集群采用展度值替代一階差值來采用差值集群,所以一些實施例的界線集群是關(guān)于以上運(yùn)算符執(zhí)行的。例如,一些實施例將排序運(yùn)算符S應(yīng)用于輸入數(shù)據(jù),隨后應(yīng)用差值運(yùn)算符D以生成一階差值。S和D然后被應(yīng)用于結(jié)果數(shù)據(jù)以生成二階差值(差值之間的差值)。利用S對二階差值排序,然后將二階差值拆分成兩個不連結(jié)子序列(級別內(nèi)差值和更大的級別間差值)。在一些實施例中,拆分包括對二階差值進(jìn)一步應(yīng)用D,以獲得三階差值,隨后應(yīng)用 S以排序三階差值。對二階差值的拆分通常發(fā)生在有一個三階差值顯著大于其他三階差值
85的情況下。一些實施例還評估域特定因子。一旦建立了拆分,一些實施例采用等于最小級別間第二差值的間隔最小值來應(yīng)用 P,以分隔有序一階差值,使得每個分隔表示一級集群。一些實施例對該分隔應(yīng)用C,而一些實施例不這樣做。為了將數(shù)據(jù)分隔成特定級別的集群,一些實施例采用等于特定級別處的最小差值的間隔最小值來對(排序的)輸入數(shù)據(jù)應(yīng)用P。一些實施例此時還應(yīng)用C,但是通常采用與級別分隔不同的準(zhǔn)則來聯(lián)合集群分隔。最后,一些實施例應(yīng)用F來取消一些集群。還關(guān)于以上運(yùn)算符來執(zhí)行一些實施例的密度集群。例如,一些實施例對輸入數(shù)據(jù)應(yīng)用S,隨后應(yīng)用D,以生成一階差值,并且應(yīng)用S以排序差值。對于每個差值d,一些實施例采用間隔最小值d利用運(yùn)算符P來分隔有序輸入數(shù)據(jù),然后利用密度約束來過濾分隔。通過優(yōu)化度量來測量每個過濾后的分隔,并且將最優(yōu)分隔選擇為最終集群。一些實施例環(huán)繞通過一階差值(作為間隔最小值),其從排序序列中最大的值開始并移動到依次較小的值。在一些實施例中,如果有足夠的信息,則為了效率可以早點結(jié)束該環(huán)繞。具體而言,一些實施例識別到每個連續(xù)分隔將是一個集群被拆分成兩個集群的先前分隔。一些實施例還識別出,不滿足最小尺寸密度約束的集群未來將始終不滿足這種約束,因此這些集群可以被丟棄。在一些實施例中,一旦分隔中的所有集群都落到最小尺寸之下,則較早地結(jié)束該環(huán)繞。B.用于集群分析的高效數(shù)據(jù)結(jié)構(gòu)一些實施例通過采用高效數(shù)據(jù)結(jié)構(gòu)來執(zhí)行高效集群分析,所述數(shù)據(jù)結(jié)構(gòu)允許節(jié)省存儲器和處理。例如,當(dāng)排序數(shù)據(jù)(例如,對輸入數(shù)據(jù)應(yīng)用運(yùn)算符幻時,不是生成數(shù)據(jù)的新陣列,一些實施例而是將索引陣列定義到未排序數(shù)據(jù)的陣列中,其中索引按照它們引用的值的順序排序。在一些實施例中,這被稱作間接排序陣列。本領(lǐng)域普通技術(shù)人員將理解,盡管示例采用陣列,但是也可以采用任何其他適合的數(shù)據(jù)結(jié)構(gòu)。圖99概念性地例示了一些實施例的用于通過采用間接排序陣列分隔數(shù)據(jù)集的處理9900。將結(jié)合圖100來描述處理9900。圖100例示了對具有九個數(shù)據(jù)項(0. 00,7. 43, 17. 14,25. 46,26. 60,30. 35,34. 25,39 和 46. 97)的數(shù)據(jù)集的分隔。如圖 99 所示,處理 9900 接收(在9905處)具有要集群的數(shù)據(jù)值的排序陣列A。在一些實施例中,該數(shù)據(jù)是用于識別文檔中的字或識別對準(zhǔn)導(dǎo)引的字符定位數(shù)據(jù)。參照圖100,利用索引A
-A[8],將數(shù)據(jù)集存儲在排序陣列A 10010中。接著,處理9900接著通過比較陣列A的后續(xù)值對來定義和存儲(在9910處)陣列 A的一階差值的陣列D(A)。在一些實施例中,通過采用以上在第A節(jié)中描述的運(yùn)算符D來生成陣列D(A)。圖100例示了存儲數(shù)據(jù)之間的一階差值的陣列D 10015。例如,索引D[3] 中的值是從陣列A 10010的索引A[4]中的值中減去索引A[3]中的值。接著,該處理通過對陣列D(A)應(yīng)用排序函數(shù)來定義并存儲(在9915處)D (A)的索引的間接排序陣列S(D(A))。在一些實施例中,排序函數(shù)是以上在第A節(jié)中描述的運(yùn)算符S。圖100例示了對陣列D 10015的值排序的間接排序陣列S(D) 10020。陣列10020中的第一個值(“3”)引用陣列D 10015中的索引3,這是最小的一階差值(“1. 14”)。陣列 10020中的第二個值引用陣列D 10015中的索引4,這是第二小的一階差值,依此類推。然后該處理確定(在9920處)要用在分隔數(shù)據(jù)中的集群之間的間隔的最小尺寸。 在一些實施例中,這是與以上在第A節(jié)中描述的分隔運(yùn)算符P—起使用的間隔最小值g。最小間隔尺寸在一些實施例中是由用戶規(guī)定的,或者在其他實施例中是要求解的問題固有的值。一些實施例采用多個分隔(例如,在密度集群的情況下),使得采用基于數(shù)據(jù)的不同間隔最小值。接著,處理9900利用存儲在陣列S (D(A))中的連續(xù)索引將數(shù)據(jù)分隔(在9925處) 成集群。然后該處理存儲(在9930處)該分隔。然后該處理結(jié)束。一些實施例采用存儲在間接排序陣列中的索引來分隔數(shù)據(jù)。在一些實施例中,存儲在S (D(A))中與大于間隔最小值(即,有效間隔最小值)的最小一階差值相對應(yīng)的索引將與排序數(shù)據(jù)陣列中的如下索引相對應(yīng),在該索引之后數(shù)據(jù)應(yīng)被拆分。存儲在陣列S(D(A))中的在有效間隔最小值之后的所有索引還將指示在哪里拆分排序數(shù)據(jù),這是因為它們代表大于間隔最小值的間隔。圖100例示了本例中的有效間隔最小值為7. 97,這是在陣列D 10015中的索引7 中。因此,數(shù)據(jù)的分隔10025具有四個集群,因為它在三個地方被拆分(在索引7、2和1之后)。一些實施例將分隔存儲為陣列S (D(A))的單個索引。分隔10025被存儲為索引10030, 該索引10030具有為5的值。這指示與有效間隔最小值相對應(yīng)的索引被存儲在陣列10020 的索引5處,并由此將分隔數(shù)據(jù)的索引存儲在陣列10020的索引5及以上處。以上處理9900使得能夠針對集群分析有多個處理和存儲器效率。首先,存儲索引 (其為整數(shù))而非差值排序陣列中實際數(shù)據(jù)的十進(jìn)制值節(jié)省了存儲器空間。其次,代替實際地將分隔存儲為多個分立陣列,它被存儲為引用間接索引陣列的索引的單個整數(shù)值,這在針對大的數(shù)據(jù)陣列要評估眾多分隔時可以帶來顯著的存儲器節(jié)省。第三,可以從間接排序陣列快速地讀出用以分隔數(shù)據(jù)的索引,這顯著地節(jié)省了處理時間??梢园凑斩喾N方式來平衡這些效率從而執(zhí)行集群分析。圖101概念性地例示了一些實施例的用于同時以多個距離尺度執(zhí)行集群分析的處理10100。在一些實施例中,處理 10100利用處理9900提供的效率。如圖所示,處理10100定義(在10105處)要集群的數(shù)據(jù)值的差值的間接排序陣列。這是諸如圖100的陣列10020的陣列,并且在一些實施例中通過排序輸入數(shù)據(jù)值、取一階差值然后對它們進(jìn)行排序來獲得。然后處理10100同時以若干不同距離尺度分隔(在10110處)數(shù)據(jù)值。在一些實施例中,這意味著采用不同的間隔最小值針對數(shù)據(jù)生成多個分隔。例如,在密度集群的情況下,在一些實施例中生成每個可能的分隔。在一些實施例中,由于利用間接排序陣列來排序一階差值,所以數(shù)據(jù)的分隔定位可以被快速地讀出為存儲在間接排序陣列中的索引。接著,該處理將每個分隔存儲(在10115處)為引用間接排序陣列的索引的整數(shù)值。圖100的整數(shù)值10030是將分隔存儲為單個整數(shù)值的示例。然后該處理確定(在10120 處)最優(yōu)距離尺度(以及由此確定最優(yōu)分隔)。例如,一些實施例采用優(yōu)化量度,例如以上在第III章中針對密度集群所描述的。此外,一些實施例通過在相對于優(yōu)化量度測試分隔之前采用約束來消除分隔中的一些集群。最后,一旦確定了最優(yōu)距離尺度,該處理將從最優(yōu)距離尺度得到的數(shù)據(jù)的分隔存儲(在10125處)為要求解的問題的集群集合。然后該處理結(jié)束。在一些實施例中,一旦確定了該集群集合為最優(yōu)集合,則將該集群集合存儲為新的陣列。盡管以上描述指示針對重復(fù)采用分隔運(yùn)算符而得到的效率,但是針對其他方面的集群分析也可應(yīng)用來自間接排序陣列和將分隔存儲為單個值的存儲器和處理效率。例如, 在一些實施例中,聯(lián)合運(yùn)算符可以利用相同的效率。
如上所述,一些實施例的聯(lián)合運(yùn)算符C可能重復(fù)地連結(jié)分隔中的相鄰集群。對相鄰集群的連結(jié)可以被表示為移除分隔中的拆分。因為每個這些拆分對應(yīng)于間接排序陣列中連續(xù)索引之一,所以聯(lián)合集群可以被定義為從序列中取消特定索引。因此,對分隔應(yīng)用聯(lián)合運(yùn)算符的結(jié)果可以是適合索引(即,拆分新分隔的索引)的序列(例如,陣列)。在一些實施例中,排序這種子序列要比在要聯(lián)合的集群中直接在數(shù)據(jù)周圍移動快得多。此外,差值的聯(lián)合集群(其有效地是多級別差值的組合)沒有不利地影響針對特定選擇的級別可以快速地讀出數(shù)據(jù)集群(與差值集群不同)的效率。即使在聯(lián)合差值集群之后,第L個間接排序差值集群及以上的索引是針對級別L處的數(shù)據(jù)集群的拆分點。由于聯(lián)合造成的變化是將有更少的間接排序二階差值,該二階差值確定每個間接排序一階差值集群從哪里開始。由于僅針對數(shù)據(jù)集群(而非針對差值集群)應(yīng)用過濾運(yùn)算符(其基于約束消除了數(shù)據(jù)的集群),所以當(dāng)應(yīng)用過濾運(yùn)算符時已經(jīng)確定數(shù)據(jù)集群,由此這不會干擾在以上實施分隔和聯(lián)合運(yùn)算符的過程實現(xiàn)的效率。還可以在于如以上在第IV章中描述的差值集群中執(zhí)行的將二階差值拆分為級別內(nèi)和級別間二階差值中實現(xiàn)效率。在一些實施例中,用于確定拆分點的條件可以取決于對將得到的一階差值和數(shù)據(jù)的集群。由此,對這些條件的評估將直接受益于確定對差值的分隔(并由此對數(shù)據(jù)的分隔)中的效率。例如,在差值集群應(yīng)用到文檔重構(gòu)的情況下,采用對二階差值的拆分來確定文本行中的字中斷和段中斷(例如,列、制表位等間隔),其對應(yīng)于一階差值并分別大于一階差值。在一些實施例中,目的在于拆分二階差值,使得一階差值的第二集群的最小值沒有比可應(yīng)用字體的期望間距字符寬度小很多。此外,次要目的將是,數(shù)據(jù)集群(其中每一個是一個字)具有針對可應(yīng)用語言中的字來說典型的平均尺寸。潛在的拆分點可以取決于一階差值的所得集群和數(shù)據(jù)集群與它們的期望值相距有多遠(yuǎn)而被評估為相對較低。在一些實施例中,在確定最優(yōu)拆分點的原則下,這種評估可以與直接應(yīng)用于二階差值的其他量度(例如, 拆分的相對尺寸、拆分位置的百分?jǐn)?shù)以及在拆分處的百分比增大量)相結(jié)合??梢酝ㄟ^以上描述的處理顯著更高效地重復(fù)測試二階差值中的不同拆分。本領(lǐng)域普通技術(shù)人員將認(rèn)識到,盡管已經(jīng)主要關(guān)于在文檔重構(gòu)中的使用描述了以上所述的集群分析和特定效率技術(shù),但是它們也可以應(yīng)用于如下任何問題,即其中有集合、 集合的元素對上的距離函數(shù)以及對識別由相對于集合較小的距離分開的元素的子集的需要。例如,可以應(yīng)用集群分析,以通過集群由測量眼睛移動、鼠標(biāo)移動或者觸摸屏交互所獲得的位置數(shù)據(jù),來分析與應(yīng)用、網(wǎng)頁或視頻的用戶交互。作為另一示例,可以通過減小用于解碼柵格圖像(即,位圖)的顏色個數(shù)來壓縮該柵格圖像。集群分析還可以用于原始的顏色集合,以選擇減小的顏色集合,使得利用單個顏色(通常等于其成員的平均值)替代每個顏色集群。另一個示例是一些圖像識別技術(shù)(例如,生物測量學(xué)、光學(xué)字符識別、貨幣驗證, 等等)以及柵格圖像的矢量化取決于對由空間和顏色坐標(biāo)軸定義的度量空間中的像素的集群。作為最后的示例,通常通過在軸為感興趣參數(shù)的空間中繪制數(shù)據(jù)點來找到實驗數(shù)據(jù) (例如,科學(xué)數(shù)據(jù)或商業(yè)數(shù)據(jù))中的模式。集群分析可以應(yīng)用于該數(shù)據(jù),注意給定集群中的所有點具有所有感興趣參數(shù)的大致相同的值。C.軟件架構(gòu)
在一些實施例中,將以上描述的集群分析實施為在特定機(jī)器(例如,計算機(jī)、媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式或資源受限設(shè)備)上運(yùn)行(或者存儲在計算機(jī)可讀介質(zhì)上)的軟件。圖102概念性地例示了一些實施例的用于執(zhí)行集群分析的集群分析應(yīng)用10200的軟件架構(gòu)。在一些實施例中,應(yīng)用是獨(dú)立應(yīng)用或者集成到另一應(yīng)用(例如,文檔重構(gòu)應(yīng)用)中,而在其他實施例中,應(yīng)用可能是在操作系統(tǒng)內(nèi)實現(xiàn)的。集群分析應(yīng)用10200包括密度集群模塊10205、差值集群模塊10210以及界線集群模塊10215。該應(yīng)用還包括排序模塊10220、求差值模塊10225、分隔模塊10230、聯(lián)合模塊 10235以及過濾模塊10240還有集群分析存儲設(shè)備10M5。圖102還例示了文檔內(nèi)容10250。本領(lǐng)域普通技術(shù)人員將認(rèn)識到,集群分析應(yīng)用 10200還可以用于采用集群分析的其他處理,其與文檔重構(gòu)無關(guān)。密度集群模塊10205、求差值集群模塊10210以及界線集群模塊10215都接收來自文檔內(nèi)容10250的信息(例如,本原元素位置數(shù)據(jù))。密度集群模塊10205部分地通過利用模塊10220至10240執(zhí)行如以上在第III章中描述的密度集群。差值集群模塊10210部分地通過利用模塊10220至10240來執(zhí)行如以上在第IV章中描述的差值集群。界線集群模塊10215部分地通過利用模塊10220 至10240來執(zhí)行如以上在第VI章中描述的界線集群。模塊10205至10215的輸出被返回到文檔內(nèi)容10250。在一些實施例中,五個模塊10220至10240執(zhí)行與以上在第A節(jié)中描述的五個運(yùn)算符相關(guān)聯(lián)的操作。一些實施例的排序模塊10220從模塊10205至10215之一接收數(shù)據(jù), 并對該數(shù)據(jù)進(jìn)行排序(例如,從最低值到最高值)。一些實施例的求差值模塊10225從模塊10205至10215之一接收數(shù)據(jù),并確定相鄰條數(shù)據(jù)之間的差值。一些實施例的分隔模塊 10235從模塊10205至10215之一接收數(shù)據(jù),并將該數(shù)據(jù)分隔成多個子集。一些實施例的聯(lián)合模塊10235從模塊10205至10215之一接收數(shù)據(jù)作為多個子集,并根據(jù)各種條件連結(jié)相鄰子集。一些實施例的過濾模塊10240在一些實施例中接收數(shù)據(jù)的分隔序列,并基于各種約束來濾除分隔。模塊10220至10240將數(shù)據(jù)存儲在集群分析存儲設(shè)備10M5中,以及將數(shù)據(jù)傳遞回到模塊10205至10215。在一些實施例中,排序模塊10220將其結(jié)果存儲在集群分析存儲設(shè)備10M5中作為索引的排序陣列(即,間接排序陣列)。在一些實施例中,分隔模塊將分隔存儲在集群分析存儲設(shè)備10M5中作為引用間接排序陣列中的索引的單個整數(shù)值。XI.用于解析和分析文檔的高效數(shù)據(jù)結(jié)構(gòu)本發(fā)明的一些實施例提供了使得能夠更高效地解析和分析文檔的新穎方法和數(shù)據(jù)結(jié)構(gòu)。一些實施例提供了應(yīng)用編程接口(API),該API在操縱數(shù)據(jù)時最小化對數(shù)據(jù)的冗余復(fù)制。在一些實施例中,API是操作系統(tǒng)、庫、服務(wù)或者框架提供用以支持計算機(jī)軟件作出的請求的函數(shù)、過程、方法、類或協(xié)議的集合。在一些實施例中API是靜態(tài)鏈接的,而在其他實施例中API是動態(tài)鏈接的。通常,API返回對內(nèi)部數(shù)據(jù)的復(fù)制,或者給出對內(nèi)部數(shù)據(jù)的只讀訪問,該內(nèi)部數(shù)據(jù)在按照任何方式被操縱之前必須被復(fù)制。這生成了很多層冗余數(shù)據(jù),從而減慢了處理并消耗多余存儲器。一些實施例通過如下方式來解決這一問題,即,將對象與它們的數(shù)據(jù)去耦合,使得在關(guān)于性能和存儲器消耗作出最優(yōu)數(shù)據(jù)結(jié)構(gòu)的同時針對程序員作出最優(yōu)對象API。 一些實施例采用這種API來如以上在第II至X章中描述地重構(gòu)文檔。然而,本領(lǐng)域普通技術(shù)人員將認(rèn)識到,這種API可以用于對解析輸入數(shù)據(jù)的任何類型的分析。一些實施例提供了如下的API,該API呈現(xiàn)給用戶(例如,采用API的程序員或軟件應(yīng)用),就像該用戶具有其自己的API的類成員的獨(dú)立、可修改副本,且沒有明確限制。換言之,它呈現(xiàn)給用戶,就像用戶可以完全修改通過API返回的任何對象。然而,在一些實施例中,對象在絕對必要時將實際上僅僅復(fù)制它們自己,并且在大部分情況下將按照最小化實際上所使用的存儲器量的方式來管理存儲器。一些實施例的存儲器管理是通過采用具有共享存儲器對象(其追蹤其他對象對指示符的使用)的指示符的排序陣列來實現(xiàn)的。在一些實施例中,眾多對象能夠全部應(yīng)用通過共享存儲器對象的同一指示符陣列,從而使得與在每個分析階段復(fù)制數(shù)據(jù)相比能夠顯著地節(jié)省存儲器。本領(lǐng)域普通技術(shù)人員將認(rèn)識到,盡管采用指示符來描述下面的特定特征,但是也可以采用任何類型的引用數(shù)據(jù)結(jié)構(gòu)。A.具有共享指示符的文檔重構(gòu)一些實施例采用諸如以上描述的API來重構(gòu)文檔。圖103概念性地例示了一些實施例的用于高效地重構(gòu)文檔的處理10300。將結(jié)合圖104來描述處理10300。圖104例示了文檔10400根據(jù)處理10300被解析和分析的序列。如圖103所示,處理10300接收(在10305處)文檔的一部分。在一些實施例中, 文檔部分是頁面,并且該處理逐頁面地操作。在其他實施例中,該文檔部分是整個文檔、文檔的章節(jié)或頁面上的區(qū)。然后該處理解析(在10310處)文檔,以確定文檔部分中的字符, 并且存儲(在10315處)解析數(shù)據(jù)的字符陣列。圖104例示了文檔10400被解析為字符的隨機(jī)排序陣列10405。盡管這些示例采用陣列,但是本領(lǐng)域普通技術(shù)人員將理解,可以采用任何其他適合的數(shù)據(jù)結(jié)構(gòu)。在一些實施例中,解析文檔包括讀取表示文檔的字節(jié)流,并且將該字節(jié)流轉(zhuǎn)換成對流中的信息的可用表示(例如,字符陣列)。在一些實施例中,按照隨機(jī)順序讀取流中的字符,這是陣列10405 的順序是隨機(jī)的原因。一些實施例的字符具有坐標(biāo)和/或頁面號。在一些實施例中,每個字符被存儲為包括相關(guān)聯(lián)的坐標(biāo)或頁面號值的對象。處理10300定義(在10320處)用以排序文檔部分的字符的排序指示符陣列。在一些實施例中,頁面的字符以從上到下的初級排序以及從左到右的次級排序來排序。一些實施例首先按頁面將多個頁面存儲在字符陣列排序中。圖104例示了針對排序字符定義的指示符陣列10410。第一個指示符10411指向陣列10405中的字母“L”,第二個指示符10412 指向字母“0”,依此類推。在一些實施例中,定義對初始字符陣列的指示符陣列而不是定義和存儲單獨(dú)的新陣列會節(jié)省存儲器。接著,該處理接收(在10325處)操縱串對象的指令。一些實施例將串對象定義為對指示符有序陣列中的定位的指示符和串中有多少字符的計數(shù)。例如,整個頁面的串對象將指向有序指示符陣列(最左上的字符)中的第一個指示符,并給出頁面上的字符個數(shù)的計數(shù)。 在一些實施例中,指令包括拆分串、連結(jié)串、添加字符、移除字符和重新排序字符。 在一些實施例中,這些操作被調(diào)用為如以上在第II至X章中描述的重構(gòu)文檔和采用重構(gòu)文檔的處理的一部分。例如,在一些情況下,當(dāng)合并行時,必須修改字符的順序。當(dāng)定義區(qū)時, 一些實施例定義每個區(qū)的串,這在很多情況下包括拆分串、連結(jié)串或者兩者都有。
在接收了指令之后,該處理確定(在10330處)是否可以僅采用已經(jīng)分配的指示符(例如,在10320處定義的排序的指示符陣列)來執(zhí)行指令。在一些實施例中,拆分串包括僅采用已經(jīng)分配的指示符。在文檔重構(gòu)的情況下,一些處理僅僅包括拆分串(例如,行識別、行拆分,等等)。此外,在一些實施例中,連結(jié)在排序的指示符陣列中彼此緊鄰的串將包括僅采用已經(jīng)分配的指示符。圖104例示了識別文檔10400中的兩個行如何得到引用陣列10410中的已經(jīng)分配的指示符的兩個串對象10415和10420。第一行由串對象10415定義,該串對象10415指向到L的指示符10411并且計數(shù)為15 (第一行的字符個數(shù))。第二行由串對象10420定義,該串對象10420指向到s的指示符10413并且計數(shù)為7 (第二行的字符個數(shù))。為了定義這些行,不需要分配新的指示符。通過重構(gòu)文檔中可能包括的成百上千的操作,這可能導(dǎo)致大的存儲器和處理時間(因為不需要搜索陣列)效率。然后在識別出字時可以采用相同的指示符10410。例如,串對象10425和10430定義文檔10400中的兩個字。這些字指向與串對象10415和10420相同的起始指示符,但是具有不同的計數(shù),這是因為字比行短。然而,不需要分配新的指示符來定義這些字,只有新的串對象。對于整個文檔,成百上千的不同串對象可以全部引用同一指示符陣列(例如,指示符10410),從而與針對新的指示符陣列重復(fù)地分配存儲器相比帶來大的存儲器節(jié)省。當(dāng)可以僅采用已經(jīng)分配的指示符來執(zhí)行接收到的指令時,處理10300利用在存儲器中已經(jīng)分配的共享指示符來執(zhí)行(在10335處)指令。然后該處理前進(jìn)到下面描述的 10355。否則,該處理確定(在10340處)是否可以利用新的指示符集合來執(zhí)行指令。一些實施例在不能僅利用已經(jīng)分配的指示符執(zhí)行指令時分配新的指示符,但是指令不要求對字符陣列的直接數(shù)據(jù)操縱。在一些實施例中,連結(jié)在指示符的共享陣列中彼此不緊鄰的串要求新的指示符分配,這是因為連結(jié)串的串對象不能通過指向排序陣列中的一個指示符并在陣列中向前移動來表示。例如,參照圖104,如果操作要求將第一行附接到第二行的末尾,則被附接行的串對象不能指向陣列10410。相反,新的指示符陣列將不得不按要求的順序分配。當(dāng)可以利用新的指示符分配執(zhí)行接收到的指令時,該處理通過利用對字符陣列的新指示符分配來執(zhí)行(在10345處)指令。然后該處理前進(jìn)到下面描述的10355。否則,該處理通過采用對部分或整個字符陣列的新副本來執(zhí)行(在10350處)指令。在一些實施例中,直接編輯文檔數(shù)據(jù)(即,用戶向文檔添加字)是不能在不操縱實際字符陣列的情況下執(zhí)行的指令的示例。然而,用戶向文檔添加字將不要求完全新的副本,而是能夠通過向陣列添加字符并然后定義對字符的新指示符陣列來處理。類似地,合并文本行通常要求新的指示符陣列,因為來自一個文本行的字符可以被插入到下一個文本行中,由此改變字符相對于彼此的順序。接著,該處理確定(在10355處)是否已經(jīng)接收到更多的要操縱串對象的指令。當(dāng)已經(jīng)接收到更多指令時,該處理前進(jìn)到以上描述的10330,以確定執(zhí)行指令的最高效方式。 否則,該處理結(jié)束。該處理例示了通過采用共享數(shù)據(jù)引入的存儲器和處理節(jié)省的分級。原始數(shù)據(jù)在多個指示符陣列間共享,并且每個指示符陣列在很多串對象間共享。對于接收到的每個指令集(例如,每個產(chǎn)生(call into) 一個API),采用最高效的執(zhí)行指令的方式。理想地,該指令將不要求生成任何新的指示符,并且僅需要生成新的串對象。如果這是不可能的,則與生成新的字符陣列相比,仍將通過生成共享原始數(shù)據(jù)的新指示符來獲得存儲器節(jié)省。盡管已經(jīng)關(guān)于串對象并尤其是用于文檔重構(gòu)的串對象描述了處理10300,但是本領(lǐng)域普通技術(shù)人員將認(rèn)識到,相對于復(fù)制數(shù)據(jù)而言,通過展示采用已經(jīng)分配的指示符的偏好以及然后分配新指示符獲得的效率可應(yīng)用于其中存儲器和處理時間非常寶貴的廣范圍的問題。B.共享存儲器對象在一些實施例中,每個指示符陣列具有管理陣列中指示符的使用的共享存儲器對象。在一些實施例中,用于特定指示符陣列的共享存儲器對象追蹤引用特定陣列的數(shù)據(jù)對象(例如,串對象)。在一些實施例中,共享存儲器對象還追蹤指示符陣列從存儲器中的哪里開始。圖105例示了根據(jù)本發(fā)明一些實施例的存儲數(shù)據(jù)的方式。圖105例示了數(shù)據(jù)陣列 10505、排序指示符陣列10510、共享存儲器對象10515以及數(shù)據(jù)對象10520。在一些實施例中,數(shù)據(jù)陣列10505是隨機(jī)排序的解析數(shù)據(jù)(例如,來自解析文檔的字符數(shù)據(jù))。排序指示符陣列10510是對數(shù)據(jù)陣列10505的指示符陣列。在一些實施例中,每個指示符指向陣列10505中的數(shù)據(jù)項。指示符是基于數(shù)據(jù)類型按順序布置的。例如,在文檔的情況下,在一些實施例中,指示符按照指示符指向的字符的閱讀順序布置的。每個數(shù)據(jù)對象10520包括對指示符陣列10510中的定位的引用和計數(shù)。指示符陣列10510中對于特定數(shù)據(jù)對象的定位是指向數(shù)據(jù)對象引用的第一條數(shù)據(jù)的指示符。例如, 當(dāng)數(shù)據(jù)對象是用于字“Array”的串對象時,數(shù)據(jù)對象將規(guī)定指示符陣列中找到指向“Α”的指示符的定位。數(shù)據(jù)對象還將包括為5的計數(shù)。圖105還例示了共享存儲器對象10515。在一些實施例中,共享存儲器對象管理數(shù)據(jù)對象10520對排序陣列10510的使用。共享存儲器對象10515保持引用陣列10510的數(shù)據(jù)對象10520的個數(shù)的計數(shù)。當(dāng)定義了第一個數(shù)據(jù)對象(即指向陣列的開始且具有整個陣列的計數(shù))時,一些實施例不定義共享存儲器對象10515。然而,一旦第二個數(shù)據(jù)對象指向陣列,則該陣列現(xiàn)在被共享,并且共享存儲器對象10515被定義為追蹤有多少數(shù)據(jù)對象共享該陣列以及陣列在哪里開始,因為每單個對象不具有該信息。因此,在一些實施例中,數(shù)據(jù)對象10520可以調(diào)用如下函數(shù),該函數(shù)用以如果在數(shù)據(jù)對象被設(shè)置為指向指示符陣列時不存在共享存儲器對象的話則針對指示符陣列實例化共享存儲器對象。當(dāng)對象10520的個數(shù)降到零時,共享存儲器對象10515去分配指示符10510,然后從存儲器中移除自己。在一些實施例中,共享指示符陣列10510的每個數(shù)據(jù)對象10520不了解其他對象 10520也正在使用陣列10510中的指示符。此外,對象10520不了解陣列10510的開始或結(jié)尾,僅僅引用陣列10510中的某個點。然而,一些實施例的共享存儲器對象10520 了解陣列的開始是在存儲器中的什么地方。C.軟件架構(gòu)在一些實施例中,將以上描述的API實施為在特定機(jī)器(例如,計算機(jī)、媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式或資源受限設(shè)備)上運(yùn)行(或者存儲在計算機(jī)可讀介質(zhì)上)的軟件。圖106概念性地例示了在采用以上在第A節(jié)和第B節(jié)中描述的效率技術(shù)的同時執(zhí)行文檔重構(gòu)處理的API 10600。
API 10600包括幾何分析模塊10610、文檔重構(gòu)模塊10615以及顯示和交互模塊 10620。在一些實施例中,API 10600是提供用以由外部應(yīng)用10605采用的函數(shù)、過程、方法、 類和/或協(xié)議的集合。API 10600接收由外部應(yīng)用10605對公共方法的請求(例如,函數(shù)調(diào)用)。在一些實施例中,有眾多外部應(yīng)用。例如,在API提供在手持式設(shè)備(例如,iWione )上的情況下,外部應(yīng)用可以是PDF瀏覽器(例如,電子圖書閱讀器)、字處理器(例如,Microsoft Word、Apple Pages,等等)、網(wǎng)絡(luò)瀏覽器(例如,Microsoft Internet Explorer、Apple Safari、Mozilla Firefox 等等),等等。由API 10600提供的各種公共方法調(diào)用各種私有方法,其執(zhí)行幾何分析和文檔重構(gòu)、訪問文檔對象模型等等。數(shù)據(jù)(例如,初始地由解析器識別出的本原元素)存儲在文檔重構(gòu)數(shù)據(jù)10625中。盡管可能呈現(xiàn)給外部應(yīng)用的是它們能夠訪問數(shù)據(jù)(例如,同時操縱字符來識別字、文本行,等等),但實際上如以上在第A節(jié)和第B節(jié)中所描述的,通過將由外部應(yīng)用通過API操縱的類成員定義為僅存儲對數(shù)據(jù)的引用而將類成員與實際數(shù)據(jù)分離。XII.整體軟件架構(gòu)在一些實施例中,將以上描述的處理實施為在特定機(jī)器(例如,計算機(jī)、媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式或資源受限設(shè)備)上運(yùn)行(或者存儲在計算機(jī)可讀介質(zhì)上)的軟件。圖107概念性地例示了一些實施例的用于重構(gòu)文檔、顯示文檔以及與文檔交互的應(yīng)用10700的軟件架構(gòu)。在一些實施例中,應(yīng)用是獨(dú)立應(yīng)用或者集成到另一應(yīng)用中,而在其他實施例中,應(yīng)用可能是在操作系統(tǒng)內(nèi)實現(xiàn)的。在還有其他實施例中,圖107中例示的模塊在多個應(yīng)用間被拆分。例如,在一些實施例中,一個應(yīng)用生成文檔對象模型,而另一個應(yīng)用顯示文檔并與文檔對象模型交互(參見以下全面描述)。應(yīng)用10700包括解析器10710、簡檔化模塊10720、語義重構(gòu)模塊10730、集群分析模塊10740、用戶交互模塊10750以及顯示調(diào)整模塊10760。應(yīng)用10700還包括文檔數(shù)據(jù)存儲設(shè)備10715、簡檔存儲設(shè)備10725、集群分析存儲設(shè)備10735以及文檔對象模塊存儲設(shè)備 10745。圖107還例示了操作系統(tǒng)10770,該操作系統(tǒng)10770包括游標(biāo)控制器驅(qū)動器10775、 鍵盤驅(qū)動器10780以及顯示模塊10785。在一些實施例中,如所例示的,即使在混合應(yīng)用是與操作系統(tǒng)分開的獨(dú)立應(yīng)用時,游標(biāo)控制器驅(qū)動器10775、鍵盤驅(qū)動器10780和/或顯示模塊10785也是操作系統(tǒng)10770的一部分。如圖所示,解析器10710接收文檔10705。在一些實施例中,文檔是包括矢量圖形的未格式化文檔(例如,PDF)。解析器10710解析文檔信息,并將解析的數(shù)據(jù)存儲在文檔數(shù)據(jù)存儲設(shè)備10715中。在一些實施例中,解析的文本數(shù)據(jù)被存儲為如以上在第XI章中描述的字符陣列。語義重構(gòu)模塊10730重構(gòu)文檔以從文檔數(shù)據(jù)10715生成文檔對象模型10745。語義重構(gòu)模塊10730執(zhí)行諸如區(qū)分析、導(dǎo)引和裝訂線識別、布局和流識別、表格識別以及連結(jié)圖識別的處理。語義重構(gòu)模塊的輸出還被發(fā)送到簡檔化模塊10720。簡檔化模塊10720包括簡檔匹配引擎,該簡檔匹配引擎匹配分級簡檔,并通知語義重構(gòu)模塊關(guān)于執(zhí)行重構(gòu)如何進(jìn)行,如以上在第VII章中所描述的。語義重構(gòu)模塊10710還將信息傳遞到集群分析模塊10740。在一些實施例中,集群分析模塊10740執(zhí)行密度集群用于導(dǎo)引識別、執(zhí)行差值集群用于字和段間隔信息以及執(zhí)行界線集群用于識別應(yīng)被連結(jié)的圖形。集群分析模塊采用集群分析存儲設(shè)備10735來存儲如在第X章中描述的陣列和索引。然后將集群分析的結(jié)果傳遞回到語義重構(gòu)模塊10730。一旦語義重構(gòu)模塊10730已經(jīng)重構(gòu)了文檔,它們就存儲文檔對象模型10745。文檔對象模型10745存儲所有關(guān)于語義重構(gòu)文檔的信息,例如以上在第II章中描述的填充有內(nèi)容的區(qū)圖。顯示調(diào)整模塊10760采用文檔對象模型10745來確定如何顯示文檔。例如,一些實施例的顯示調(diào)整模塊執(zhí)行以上在第VIII章中描述的處理,來在小屏幕設(shè)備上顯示文檔。 顯示調(diào)整模塊10760將顯示信息傳遞到顯示模塊10785,顯示模塊10785控制在屏幕上的實
際顯不。用戶交互模塊10750接收來自游標(biāo)控制器驅(qū)動器10775和鍵盤驅(qū)動器10780的輸入信息。該輸入信息指示用戶交互模塊10750對文檔執(zhí)行操作,例如以上在第IX章中描述的選擇,以及對文檔的編輯。如果編輯文檔,則文檔對象模型10745必須被修改以反映該編輯。在一些實施例中,由以上描述的模塊中的一些或其他模塊執(zhí)行的處理的結(jié)果存儲在電子存儲設(shè)備中(例如,作為文檔對象模型的一部分)。文檔對象模型然后可以用于在電子顯示設(shè)備(例如,手持式設(shè)備、計算機(jī)屏幕,等等)上顯示文檔,使得用戶能夠瀏覽文檔和 /或與文檔交互(例如,通過觸摸屏、游標(biāo)控制設(shè)備,等等)。圖108概念性地例示了一些實施例的用于制造存儲諸如以上描述的應(yīng)用10700的計算機(jī)程序的計算機(jī)可讀介質(zhì)的處理10800。在一些實施例中,計算機(jī)可讀介質(zhì)是可分布的非易失性電子存儲介質(zhì)(例如,CD-ROM、硬盤、設(shè)備固件,等等)。如圖所示,處理10800從定義(在10805處)諸如圖1的模塊110的幾何分析模塊開始。這種模塊的更具體示例包括圖17中的邊界識別模塊1705、區(qū)間和相交部識別模塊 1710、區(qū)識別模塊1715以及區(qū)圖構(gòu)建器1720。在一些實施例中,這些模塊識別本原元素集之間的邊界并識別由這些邊界界定的區(qū)域。在一些實施例中,模塊將圖形本原元素識別為潛在邊界,將潛在邊界的一部分識別為實際邊界,遍歷實際邊界以識別區(qū),并利用識別出的區(qū)定義分級文檔模塊。然后該處理定義(在10810處)諸如圖1的模塊120的文檔重構(gòu)模塊。在一些實施例中,圖107的語義重構(gòu)模塊10730包括幾何分析模塊和文檔重構(gòu)模塊兩者,但是其他實施例僅包括一個或另一個。然后處理10800定義(在10815處)諸如簡檔10725的分級簡檔集合。接著,該處理定義(在10820)用于執(zhí)行集群分析的模塊集。集群分析模塊10740是這種模塊的示例。 然后該處理定義(在10825處)用于適應(yīng)性地顯示文檔的模塊,例如顯示調(diào)整模塊10760。 接著,處理10800定義(在10830處)用于接收與文檔的用戶交互的模塊,例如模塊10750。該處理還定義(在10835處)其他模塊。例如,一些實施例包括用于解析進(jìn)入的文檔(例如,由應(yīng)用接收到的文檔)或者在執(zhí)行各種文檔重構(gòu)操作時高效地利用存儲器和處理時間的模塊。然后處理10800將應(yīng)用存儲(在10840處)在計算機(jī)可讀存儲介質(zhì)上。如上所示, 在一些實施例中,計算機(jī)可讀存儲介質(zhì)是可分布的CD-ROM。在一些實施例中,介質(zhì)是固態(tài)設(shè)備、硬盤、CD-ROM或其他非易失性計算機(jī)可讀存儲介質(zhì)中的一種或多種。在一些實施例中, 介質(zhì)可以是手持式設(shè)備(例如,iPhone )的固件。本領(lǐng)域普通技術(shù)人員將認(rèn)識到,由處理10800定義的各種元素不是對能夠定義且存儲在計算機(jī)可讀存儲介質(zhì)上用于并有本發(fā)明一些實施例的應(yīng)用的模塊、規(guī)則以及處理的窮舉。此外,一些實施例將僅包括由處理10800定義的元素的子集而非它們?nèi)恳彩峭瑯涌梢缘?。另外,處?0800是概念性處理,并且實際實施可以改變。例如,不同的實施例可以按照不同的順序定義各種元素,可以定義一個操作中的若干元素,可以將單個元素的定義分解為多個操作,等等。此外,處理10800可以實施為若干子處理,或者在宏處理中與其他操作組合。XIII.計算機(jī)系統(tǒng)很多上述特征和應(yīng)用被實施為軟件處理,所述軟件處理被規(guī)定為記錄在計算機(jī)可讀存儲介質(zhì)(也稱作計算機(jī)可讀介質(zhì))上的指令集。當(dāng)由一個或多個計算元件(例如,處理器或其他計算元件,象ASIC和FPGA)執(zhí)行這些指令時,它們使得計算元件執(zhí)行指令中表示的動作。計算機(jī)意指其最廣義含義,并且可以包括具有處理器的任何電子設(shè)備。計算機(jī)可讀介質(zhì)的示例包括但不限于CD-ROM、閃存驅(qū)動器、RAM芯片、硬盤驅(qū)動器、EPR0M,等等。計算機(jī)可讀介質(zhì)不包括無線地或者通過有線連接傳遞的載波和電子信號。本說明書中的術(shù)語“軟件”是指包括駐留在只讀存儲器上的固件或者存儲在磁存儲設(shè)備上的應(yīng)用,其可以被讀入到存儲器中用以由處理器進(jìn)行處理。而且,在一些實施例中,多個軟件發(fā)明可以被實施為更大程序的子部分,同時保留不同的軟件發(fā)明。在一些實施例中,多個軟件發(fā)明還可以被實施為單獨(dú)的程序。最后,一起實施本文描述的軟件發(fā)明的單獨(dú)程序的任何組合都在本發(fā)明的范圍內(nèi)。在一些實施例中,軟件程序在被安裝以在一個或多個計算機(jī)系統(tǒng)上運(yùn)行時定義運(yùn)行和執(zhí)行軟件程序的操作的一個或多個具體機(jī)器實施。圖109例示了實現(xiàn)本發(fā)明的一些實施例的計算機(jī)系統(tǒng)。這種計算機(jī)系統(tǒng)包括各種類型的計算機(jī)可讀介質(zhì)和用于各種其他類型的計算機(jī)可讀介質(zhì)的接口。計算機(jī)系統(tǒng)10900 包括總線10905、處理器10910、圖形處理單元(GPU) 10920、系統(tǒng)存儲器10925、只讀存儲器 10930、永久存儲設(shè)備10935、輸入設(shè)備10940以及輸出設(shè)備10945??偩€10905總體地代表通信地連接計算機(jī)系統(tǒng)10900的眾多內(nèi)部設(shè)備的所有系統(tǒng)、外圍和芯片集總線。例如,總線10905將處理器10910與只讀存儲器10930、GPU 10920、 系統(tǒng)存儲器10925以及永久存儲設(shè)備10935通信地連接。從這些各種存儲器單元,處理器10910檢索要執(zhí)行的指令和要處理的數(shù)據(jù)以執(zhí)行本發(fā)明的處理。在一些實施例中,處理器包括現(xiàn)場可編程門陣列(FPGA)、ASIC或者用于執(zhí)行指令的各種其他電子部件。一些指令被傳遞到GPU 10920并由其執(zhí)行。GPU 10920可以卸載各種計算或補(bǔ)充處理器10910提供的圖像處理。在一些實施例中,這種功能性可以利用CoreImage的內(nèi)核遮蔽語言來提供。只讀存儲器(ROM) 10930存儲處理器10910以及計算機(jī)系統(tǒng)的其他模塊需要的靜態(tài)數(shù)據(jù)和指令。另一方面,永久存儲設(shè)備10935是讀寫存儲器設(shè)備。該設(shè)備是即使在計算機(jī)系統(tǒng)10900關(guān)閉時也存儲指令和數(shù)據(jù)的非易失性存儲器。本發(fā)明的一些實施例采用大容量存儲設(shè)備(例如,磁盤或光盤及其對應(yīng)的盤驅(qū)動器)作為永久存儲設(shè)備10935。
其他實施例采用可移除存儲設(shè)備(例如,軟盤、閃存驅(qū)動器或者ZIP 盤,及其對應(yīng)的盤驅(qū)動器)作為永久存儲設(shè)備。象永久存儲設(shè)備10935 —樣,系統(tǒng)存儲器10925是讀寫存儲器設(shè)備。然而,不象存儲設(shè)備10935,系統(tǒng)存儲器是易失性讀寫存儲器,例如隨機(jī)存取存儲器。該系統(tǒng)存儲器存儲處理器在運(yùn)行時需要的一些指令和數(shù)據(jù)。在一些實施例中, 本發(fā)明的處理存儲在系統(tǒng)存儲器10925、永久存儲設(shè)備10935和/或只讀存儲器10930中。 例如,各種存儲器單元包括用于根據(jù)一些實施例處理多媒體項的指令。從這些各種存儲器單元,處理器10910檢索要執(zhí)行的指令和要處理的數(shù)據(jù),以執(zhí)行一些實施例的處理??偩€10905還連接到輸入設(shè)備10940和輸出設(shè)備10945。輸入設(shè)備還使得用戶能夠向計算機(jī)系統(tǒng)傳送信息并選擇命令。輸入設(shè)備10940包括字母數(shù)字鍵盤和指向設(shè)備(也稱作“游標(biāo)控制設(shè)備”)。輸出設(shè)備10945顯示計算機(jī)系統(tǒng)生成的圖像。輸出設(shè)備包括打印機(jī)和顯示設(shè)備,例如陰極射線管(CRT)或者液晶顯示器(IXD)。最后,如圖109所示,總線10905還將計算機(jī)10900通過網(wǎng)絡(luò)適配器(未示出)耦接到網(wǎng)絡(luò)10965。按照這種方式,計算機(jī)可以是計算機(jī)網(wǎng)絡(luò)(例如,局域網(wǎng)(“LAN”)、廣域網(wǎng)(“WAN”)或者內(nèi)聯(lián)網(wǎng))或者網(wǎng)絡(luò)的網(wǎng)絡(luò)(例如,互聯(lián)網(wǎng))的一部分??梢越Y(jié)合本發(fā)明采用計算機(jī)系統(tǒng)10900的任意或全部部件。一些實施例包括電子部件,例如微處理器、將計算機(jī)程序指令存儲在機(jī)器可讀或計算機(jī)可讀介質(zhì)(另選地也稱為計算機(jī)可讀存儲介質(zhì)、機(jī)器可讀介質(zhì)或者機(jī)器可讀存儲介質(zhì))中的存儲設(shè)備和存儲器。這種計算機(jī)可讀介質(zhì)的一些示例包括RAM、ROM、只讀緊湊盤(CD-ROM)、可記錄緊湊盤(CD-R)、可重寫緊湊盤(CD-RW)、只讀數(shù)字多功能盤(例如, DVD-ROM、雙層 DVD-ROM)、各種可記錄 / 可重寫 DVD (例如,DVD-RAM、DVD-RW、DVD+RW,等等)、 閃速存儲器(例如,SD卡、小型SD卡、微型SD卡,等等),磁性和/或固態(tài)硬驅(qū)動器、只讀和可記錄藍(lán)光盤、超密度光盤、任何其他光學(xué)或磁性介質(zhì)以及軟盤。計算機(jī)可讀介質(zhì)可以存儲可由至少一個處理器執(zhí)行的計算機(jī)程序,并且包括用于執(zhí)行各種操作的指令集。配置為存儲和執(zhí)行指令集的硬件設(shè)備的示例包括但不限于專用集成電路(ASIC)、現(xiàn)場可編程門陣列 (FPGA)、可編程邏輯器件(PLD)、ROM以及RAM器件。計算機(jī)程序或計算機(jī)代碼的示例包括機(jī)器碼,例如由編譯器生成的碼,以及包括由計算機(jī)、電子部件或微處理器利用解釋器執(zhí)行的更高級別代碼的文件。本說明書以及本申請的任何權(quán)利要求中采用的術(shù)語“計算機(jī)”、“服務(wù)器”、“處理器”和“存儲器”全部是指電子或其他技術(shù)性設(shè)備。這些術(shù)語排除人或人的組。出于本說明書的目的,術(shù)語顯示是指在電子設(shè)備上顯示。本說明書以及本申請的任何權(quán)利要求中采用的術(shù)語“計算機(jī)可讀介質(zhì)”完全限于有形的物體對象,其存儲可由計算機(jī)讀取的形式的信息。這些術(shù)語排除了任何無線信號、有線下載信號以及任何其他瞬息信號。盡管參照眾多具體細(xì)節(jié)描述了本發(fā)明,但是本領(lǐng)域普通技術(shù)人員將認(rèn)識到,在不脫離本發(fā)明精神的情況下,本發(fā)明可以按照其他具體形式實現(xiàn)。例如,一些實施例接收文檔,在文檔中每個頁面被定義為單個圖像。然而,一些實施例可以對文檔執(zhí)行光學(xué)字符識別以識別圖示符,而在一些情況中識別形狀(例如,線條、矩形,等等),之后可以重構(gòu)文檔。 而且,以上已經(jīng)關(guān)于在特定本原元素上執(zhí)行特定幾何分析和文檔重構(gòu)操作描述了一些實施例。然而,本領(lǐng)域普通技術(shù)人員將認(rèn)識到,可以將操作應(yīng)用到其他類型的本原元素。例如,導(dǎo)引識別被描述為包括采用密度集群來識別形成垂直邊界的圖示符的關(guān)聯(lián)(例如,進(jìn)行關(guān)聯(lián)或者定義其關(guān)聯(lián))。然而,可以應(yīng)用類似的操作來尋找形成邊界的本原形狀(例如,虛線) 的集群。此外,多個附圖(包括圖 3、8、9、12、15、18、20、21、25、26、31、33、36、38、40、42、48、 53、55、57、62、64、66、68、71、72、78、80-82、84、85、87、89、94、97、99、101、103 和 108)概念性地例示了處理。這些處理的具體操作可能不會按照所示和所描述的具體順序執(zhí)行。具體操作可能不會在一個連續(xù)的操作系列中執(zhí)行,并且不同的具體操作可能是在不同的實施例中執(zhí)行的。此外,可以利用若干子處理實施處理,或者將處理實施為更大宏處理的一部分。因此,本領(lǐng)域普通技術(shù)人員將理解,本發(fā)明不受限于以上例示的細(xì)節(jié),而是由所附權(quán)利要求來限定。
權(quán)利要求
1.一種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時分析包括多個本原元素的文檔,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集識別本原元素的集合之間的邊界; 識別由所述邊界界定的區(qū)域;以及基于所述區(qū)域和本原元素定義結(jié)構(gòu)化文檔。
2.根據(jù)權(quán)利要求1所述的計算機(jī)可讀介質(zhì),其中,所述用于定義結(jié)構(gòu)化文檔的指令集包括用于識別至少兩個識別出的區(qū)域之間的分級關(guān)系的指令集。
3.根據(jù)權(quán)利要求2所述的計算機(jī)可讀介質(zhì),其中,完全處于第二區(qū)域內(nèi)的第一區(qū)域是所述第二區(qū)域的子輩。
4.根據(jù)權(quán)利要求2所述的計算機(jī)可讀介質(zhì),其中,所述用于識別兩個識別出的區(qū)域之間的分級關(guān)系的指令集包括用于定義分級文檔對象模型的指令集,其中每個識別出的區(qū)域是所述文檔對象模型的一個節(jié)點。
5.根據(jù)權(quán)利要求4所述的計算機(jī)可讀介質(zhì),其中,所述用于定義結(jié)構(gòu)化文檔的指令集還包括用于利用從本原元素定義的至少一個結(jié)構(gòu)性元素填充所述文檔對象模型的指令集。
6.根據(jù)權(quán)利要求1所述的計算機(jī)可讀介質(zhì),其中,基于特定本原元素在所述文檔中的定位來識別邊界。
7.根據(jù)權(quán)利要求6所述的計算機(jī)可讀介質(zhì),其中,所述特定本原元素是直線或近似直線的形狀。
8.根據(jù)權(quán)利要求1所述的計算機(jī)可讀介質(zhì),其中,所述用于識別區(qū)域的指令集包括用于執(zhí)行以下操作的指令集基于實際地界定區(qū)域的邊界是否與其他邊界相交來選擇所述邊界的集合;和遍歷所述邊界的子集來識別區(qū)域。
9.根據(jù)權(quán)利要求1所述的計算機(jī)可讀介質(zhì),其中,所述用于識別本原元素的集合之間的邊界的指令集包括用于執(zhí)行以下操作的指令集將作為直線或者近似直線的形狀的本原元素和本原元素分組識別為潛在邊界; 識別所述潛在邊界之間的相交部;以及移除不與至少兩個其他潛在邊界相交的潛在邊界。
10.根據(jù)權(quán)利要求1所述的計算機(jī)可讀介質(zhì),其中,所述用于識別由所述邊界界定的區(qū)域的指令集包括用于遍歷所識別出的邊界以識別邊界的閉環(huán)的指令集,其中,每個閉環(huán)是一個區(qū)域。
11.根據(jù)權(quán)利要求1所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于采用識別出的區(qū)域來定義所述文檔的結(jié)構(gòu)性元素的指令集,其中,所述結(jié)構(gòu)化文檔還基于所述結(jié)構(gòu)性元素。
12.根據(jù)權(quán)利要求11所述的計算機(jī)可讀介質(zhì),其中,所述用于采用識別出的區(qū)域來定義結(jié)構(gòu)性元素的指令集包括用于單獨(dú)地分析每個特定區(qū)域以生成所述特定區(qū)域中的本原元素集合之間的關(guān)聯(lián)的指令集。
13.一種定義程序的方法,所述程序用于(i)分析包括多個本原元素的文檔,以及(ii) 基于所述分析生成定義所述文檔中的結(jié)構(gòu)的結(jié)構(gòu)性元素,所述方法包括定義用于識別本原元素的集合之間的邊界的模塊;定義用于識別由所述邊界界定的區(qū)域的模塊;定義用于采用識別出的邊界和區(qū)域來規(guī)定所述結(jié)構(gòu)性元素的模塊。
14.根據(jù)權(quán)利要求13所述的方法,還包括定義用于基于所述區(qū)域、本原元素和結(jié)構(gòu)性元素來定義結(jié)構(gòu)化文檔的模塊。
15.根據(jù)權(quán)利要求13所述的方法,其中,所述文檔是未結(jié)構(gòu)化文檔。
16.一種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時分析包括多個本原元素的文檔,所述本原元素包括多個圖示符和多個圖形元素,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集將多個所述圖形元素識別為潛在邊界; 將一部分所述潛在邊界識別為實際邊界; 遍歷所述實際邊界以識別一個或多個區(qū);以及利用識別出的區(qū)來定義分級文檔模型。
17.根據(jù)權(quán)利要求16所述的計算機(jī)可讀介質(zhì),其中,將多個所述圖形元素識別為潛在邊界包括用于執(zhí)行以下操作的指令集識別作為至多具有特定厚度的垂直直線和水平直線的圖形元素; 識別與至多具有特定厚度的垂直直線和水平直線近似的圖形元素;以及識別豎直矩形圖形元素的外邊緣。
18.根據(jù)權(quán)利要求16所述的計算機(jī)可讀介質(zhì),其中,所述用于將一部分所述潛在邊界識別為實際邊界的指令集包括用于以下操作的指令集識別所述潛在邊界之間的相交部;和迭代地移除沒有與至少兩個其他潛在邊界相交的潛在邊界,直到所有剩余潛在邊界都與至少兩個其他潛在邊界相交;以及將所述剩余潛在邊界識別為實際邊界。
19.根據(jù)權(quán)利要求16所述的計算機(jī)可讀介質(zhì),其中,所述用于遍歷所述實際邊界以識別一個或多個區(qū)的指令集包括用于執(zhí)行以下操作的指令集針對每個所述實際邊界,定義包括沿相反方向?qū)?zhǔn)的兩個區(qū)間的定向?qū)?zhǔn)區(qū)間的集合;選擇相交部和遠(yuǎn)離所述相交部的方向;沿著所選方向從所選相交部開始遍歷所述區(qū)間的集合中的區(qū)間,直到返回到所選相交部;將由所遍歷的區(qū)間包圍的區(qū)域定義為區(qū);以及從所述區(qū)間的集合中移除所遍歷的區(qū)間。
20.根據(jù)權(quán)利要求19所述的計算機(jī)可讀介質(zhì),其中,所述定向?qū)?zhǔn)區(qū)間是矢量。
21.根據(jù)權(quán)利要求19所述的計算機(jī)可讀介質(zhì),其中,所述用于遍歷所述實際邊界以識別一個或多個區(qū)的指令集包括用于重復(fù)地執(zhí)行以下操作直到所述定向?qū)?zhǔn)區(qū)間的集合為空的指令集選擇相交部和從所述相交部起的方向;沿著所選方向從所選相交部開始遍歷所述區(qū)間的集合中的區(qū)間,直到返回到所選相交部;將由所遍歷的區(qū)間包圍的區(qū)域定義為區(qū);以及從所述區(qū)間的集合中移除所遍歷的區(qū)間。
22.根據(jù)權(quán)利要求16所述的計算機(jī)可讀介質(zhì),還包括當(dāng)特定區(qū)沿特定方向被遍歷時將該特定區(qū)定義為島。
23.根據(jù)權(quán)利要求16所述的計算機(jī)可讀介質(zhì),其中,當(dāng)?shù)诙^(qū)被第一區(qū)完全包圍時,所述第一區(qū)為所述第二區(qū)的父輩。
24.根據(jù)權(quán)利要求23所述的計算機(jī)可讀介質(zhì),其中,當(dāng)所述第一區(qū)和第二區(qū)不共享邊界時,該第二區(qū)為島。
25.根據(jù)權(quán)利要求16所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于基于圖示符和不是實際邊界的圖形元素來定義結(jié)構(gòu)性元素的指令集。
26.根據(jù)權(quán)利要求25所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于利用至少一個結(jié)構(gòu)性元素填充所述分級文檔模型的區(qū)的指令集。
27.根據(jù)權(quán)利要求25所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于識別旋轉(zhuǎn)區(qū)的指令集。
28.根據(jù)權(quán)利要求27所述的計算機(jī)可讀介質(zhì),其中,旋轉(zhuǎn)區(qū)是沒有與包括該旋轉(zhuǎn)區(qū)的頁面對準(zhǔn)的區(qū)。
29.根據(jù)權(quán)利要求28所述的計算機(jī)可讀介質(zhì),其中,當(dāng)區(qū)偏離頁面的邊緣至少達(dá)特定角度時,該區(qū)沒有與所述頁面對準(zhǔn)。
30.一種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時分析包括多個字的文檔,每個字包括相關(guān)聯(lián)的圖示符的集合,每個圖示符具有定位坐標(biāo),所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集基于所述圖示符的定位坐標(biāo)來識別字分組;基于所識別出的字分組,定義所述圖示符的邊界元素集合;基于所述圖示符和所定義的邊界元素集合,定義結(jié)構(gòu)化文檔。
31.根據(jù)權(quán)利要求30所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于定義一對邊界元素之間的空白空間的至少一個區(qū)域的指令集,其中,所述結(jié)構(gòu)化文檔還基于所述空白空間的區(qū)域來定義。
32.根據(jù)權(quán)利要求30所述的計算機(jī)可讀介質(zhì),其中,所述用于識別字分組的指令集包括用于沿一個軸對從所述字的坐標(biāo)得出的數(shù)據(jù)執(zhí)行集群分析的指令集。
33.根據(jù)權(quán)利要求32所述的計算機(jī)可讀介質(zhì),其中,所述集群分析包括密度集群,以識別大的具有類似值的數(shù)據(jù)的分組。
34.根據(jù)權(quán)利要求30所述的計算機(jī)可讀介質(zhì),其中,所述邊界元素是圖示符的右對準(zhǔn)導(dǎo)引和左對準(zhǔn)導(dǎo)引。
35.根據(jù)權(quán)利要求30所述的計算機(jī)可讀介質(zhì),其中,所述用于定義邊界元素集合的指令集包括用于執(zhí)行以下操作的指令集針對每個集群,基于集群中的字定義沿第一軸具有寬度的條;以及消除沿所述第一軸在如下坐標(biāo)處的條,即在所述坐標(biāo)處字沿第二軸從特定方向穿入到所述條中
36.根據(jù)權(quán)利要求30所述的計算機(jī)可讀介質(zhì),其中,所述用于定義結(jié)構(gòu)化文檔的指令集包括用于利用所述圖示符和所定義的邊界元素來識別文本列的指令集。
37.一種定義程序的方法,所述程序用于(i)分析包括多個字的文檔,每個字包括相關(guān)聯(lián)的圖示符的集合,每個圖示符具有定位坐標(biāo),以及(ii)基于所述分析生成定義所述文檔中的結(jié)構(gòu)的結(jié)構(gòu)性元素,所述方法包括定義用于基于所述圖示符的定位坐標(biāo)來識別字分組的模塊;定義用于基于所識別出的字分組來定義所述圖示符的邊界元素集合的模塊,所述邊界元素識別所述圖示符的邊界集合;以及定義用于采用識別出的邊界元素來規(guī)定所述結(jié)構(gòu)性元素的模塊。
38.根據(jù)權(quán)利要求37所述的方法,還包括定義用于基于所述圖示符、所定義的邊界元素以及結(jié)構(gòu)性元素來定義結(jié)構(gòu)化文檔的模塊。
39.一種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時分析包括多個字的文檔,每個字包括多個圖示符,每個字具有特定定位值,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集對所述字的定位值進(jìn)行排序;將所述定位值的多個不同分組識別成子集;針對每個不同的分組,識別滿足特定約束集合的定位值的子集的集合;確定所述定位值的子集集合中優(yōu)化特定量度的特定的子集集合;以及基于優(yōu)化所述特定量度的特定的子集集合來定義所述圖示符的邊界元素。
40.根據(jù)權(quán)利要求39所述的計算機(jī)可讀介質(zhì),其中,所述約束集合包括定位值的子集至少具有特定數(shù)量的值的要求。
41.根據(jù)權(quán)利要求39所述的計算機(jī)可讀介質(zhì),其中,所述約束集合包括所述子集中的最大值與最小值之間的差值不大于特定閾值的要求。
42.根據(jù)權(quán)利要求39所述的計算機(jī)可讀介質(zhì),其中,所述特定定位值表示字的右邊緣, 其中采用優(yōu)化所述特定量度的子集集合來識別右對準(zhǔn)導(dǎo)引。
43.根據(jù)權(quán)利要求39所述的計算機(jī)可讀介質(zhì),其中,所述特定定位值表示字的左邊緣, 其中采用優(yōu)化所述特定量度的子集集合來識別左對準(zhǔn)導(dǎo)引。
44.一種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時識別數(shù)據(jù)的集群,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集接收要被集群的數(shù)據(jù)值的集合;識別對所述數(shù)據(jù)值的多個分隔,每個不同分隔將所述數(shù)據(jù)值的不同分組規(guī)定成子集;針對數(shù)據(jù)值的子集的每個分組,識別滿足特定約束集合的子集的集合;以及確定優(yōu)化特定量度的子集集合。
45.根據(jù)權(quán)利要求44所述的計算機(jī)可讀介質(zhì),其中,所述數(shù)據(jù)值是圖示符在文檔中的位置,其中所述優(yōu)化特定量度的子集集合識別所述文檔的對準(zhǔn)導(dǎo)引。
46.一種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時分析包括多個字的文檔,每個字具有相關(guān)聯(lián)的圖示符的集合,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集識別所述文檔中的左對準(zhǔn)點集合和右對準(zhǔn)點集合;識別所述文檔中在左對準(zhǔn)點與右對準(zhǔn)點之間滿足特定準(zhǔn)則的空白空間;以及采用識別出的空白空間定義結(jié)構(gòu)化文檔。
47.根據(jù)權(quán)利要求46所述的計算機(jī)可讀介質(zhì),其中,所述左對準(zhǔn)點集合和右對準(zhǔn)點集合包括由對字的密度集群確定的對準(zhǔn)導(dǎo)引。
48.根據(jù)權(quán)利要求46所述的計算機(jī)可讀介質(zhì),其中,所述用于識別所述文檔中的空白空間的指令集包括用于執(zhí)行以下操作的指令集從所述右對準(zhǔn)點集合中選擇一個右對準(zhǔn)點;識別所述左對準(zhǔn)點集合中的一個左對準(zhǔn)點,該左對準(zhǔn)點是在所選右對準(zhǔn)點右側(cè)的最靠近所選右對準(zhǔn)點的左對準(zhǔn)點;定義所選右對準(zhǔn)點與所識別出的左對準(zhǔn)點之間的垂直條;以及消除在字穿入到所述垂直條中的坐標(biāo)處的垂直條。
49.根據(jù)權(quán)利要求44所述的計算機(jī)可讀介質(zhì),其中,所述用于采用識別出的空白空間定義結(jié)構(gòu)化文檔的指令集包括用于拆分字的行的指令集。
50.一種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時分析包括多個圖示符的文檔,每個圖示符在所述文檔中具有一個位置,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集基于圖示符在所述文檔中的位置,生成圖示符之間的關(guān)聯(lián)以將不同的圖示符集合識別為不同的字;生成字之間的關(guān)聯(lián)以將不同的字集合識別為不同的段落;以及定義不鄰接的至少兩個段落之間的關(guān)聯(lián)以定義段落的閱讀順序。
51.根據(jù)權(quán)利要求50所述的計算機(jī)可讀介質(zhì),其中,所述用于生成字之間的關(guān)聯(lián)的指令集包括用于基于(i)形成字的圖示符的垂直間距性質(zhì)和(ii)形成字的圖示符的水平對準(zhǔn)性質(zhì)來識別要關(guān)聯(lián)的字集合的指令集。
52.根據(jù)權(quán)利要求50所述的計算機(jī)可讀介質(zhì),其中,所述用于生成字之間的關(guān)聯(lián)以將不同的字集合識別為不同的段落的指令集包括用于執(zhí)行以下操作的指令集生成字之間的關(guān)聯(lián)以將字集合識別為文本行;以及生成文本行之間的關(guān)聯(lián)以將文本行集合識別為段落。
53.根據(jù)權(quán)利要求52所述的計算機(jī)可讀介質(zhì),其中,所述用于生成字之間的關(guān)聯(lián)以將字集合識別為文本行的指令集包括用于執(zhí)行以下操作的指令集識別水平對準(zhǔn)字的集合,其中,該集合中的所有字具有在彼此的特定閾值內(nèi)的基線;以及基于至少一個水平間隔的存在,拆分所述水平對準(zhǔn)字的集合;以及生成每個剩余集合中的字之間的關(guān)聯(lián)。
54.根據(jù)權(quán)利要求53所述的計算機(jī)可讀介質(zhì),其中,所述用于拆分所述水平對準(zhǔn)字的集合的指令集包括用于執(zhí)行以下操作的指令集將水平間隔識別為水平對準(zhǔn)字之間至少具有閾值寬度的間隔;識別垂直對準(zhǔn)的水平間隔集合;移除不滿足特定準(zhǔn)則集合的水平間隔集合;以及在未移除的間隔處拆分水平對準(zhǔn)字的集合。
55.根據(jù)權(quán)利要求52所述的計算機(jī)可讀介質(zhì),其中,所述用于生成文本行之間的關(guān)聯(lián)以將文本行集合識別為段落的指令集包括用于比較相鄰文本行的垂直間距性質(zhì)的指令集。
56.根據(jù)權(quán)利要求52所述的計算機(jī)可讀介質(zhì),其中,所述用于生成文本行之間的關(guān)聯(lián)以將文本行集合識別為段落的指令集包括用于比較相鄰文本行的水平對準(zhǔn)性質(zhì)的指令集。
57.根據(jù)權(quán)利要求50所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于生成段落之間的關(guān)聯(lián)以將段落集合識別為列的指令集。
58.一種定義程序的方法,所述程序用于分析包括多個圖示符的文檔,每個圖示符在所述文檔中具有一個位置,所述方法包括定義用于基于圖示符在所述文檔中的位置,生成圖示符之間的關(guān)聯(lián)以將不同的圖示符集合識別為不同的字的模塊;定義用于生成字之間的關(guān)聯(lián)以將不同的字集合識別為不同的段落的模塊;以及定義用于定義不鄰接的至少兩個段落之間的關(guān)聯(lián)以定義段落的閱讀順序的模塊。
59.根據(jù)權(quán)利要求58所述的方法,其中,定義用于生成圖示符之間的關(guān)聯(lián)的模塊包括定義用于對所述圖示符的位置執(zhí)行集群分析以識別圖示符之間的水平間距的模塊。
60.根據(jù)權(quán)利要求59所述的方法,其中,所述集群分析識別水平間距尺寸的集群,以識別字之間的間距和字內(nèi)的間距。
61.一種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時分析包括多個圖示符的文檔,每個圖示符在所述文檔中具有一個位置,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集基于圖示符的位置,將不同的圖示符集合識別為不同的字;將不同的字集合識別為不同的段落;定義通過段落的閱讀順序,所述閱讀順序規(guī)定通過所述文檔中不鄰接的至少兩個段落的流;以及基于所述字、段落和定義的閱讀順序來定義結(jié)構(gòu)化文檔。
62.根據(jù)權(quán)利要求61所述的計算機(jī)可讀介質(zhì),其中,將特定的圖示符集合識別為字包括關(guān)聯(lián)所述圖示符。
63.根據(jù)權(quán)利要求61所述的計算機(jī)可讀介質(zhì),其中,將特定的圖示符集合識別為字包括生成圖示符之間的關(guān)聯(lián)。
64.根據(jù)權(quán)利要求61所述的計算機(jī)可讀介質(zhì),其中,不鄰接的兩個段落包括位于第一列底部的第一段落和位于第二列頂部的第二段落,其中,所述閱讀順序規(guī)定從所述第一段落直接到所述第二段落的流。
65.根據(jù)權(quán)利要求61所述的計算機(jī)可讀介質(zhì),其中,不鄰接的兩個段落包括位于第一頁面末端的第一段落和位于第二頁面開頭的第二段落,其中,所述閱讀順序規(guī)定從所述第一段落直接到所述第二段落的流。
66.根據(jù)權(quán)利要求65所述的計算機(jī)可讀介質(zhì),其中,所述第一頁面和所述第二頁面在所述文檔中不鄰接。
67.一種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時分析包括多個本原元素的文檔,每個本原元素具有多個性質(zhì),所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集基于本原元素的性質(zhì),將本原元素的集合關(guān)聯(lián)為結(jié)構(gòu)性元素;定義所述結(jié)構(gòu)性元素之間的關(guān)系;基于關(guān)聯(lián)和關(guān)系規(guī)定通過所有所述本原元素的流;以及通過采用所述通過本原元素的規(guī)定流來優(yōu)化與所述文檔的用戶交互。
68.根據(jù)權(quán)利要求67所述的計算機(jī)可讀介質(zhì),其中,所述用戶交互包括選擇操作。
69.根據(jù)權(quán)利要求67所述的計算機(jī)可讀介質(zhì),其中,所述用戶交互包括顯示操作。
70.根據(jù)權(quán)利要求67所述的計算機(jī)可讀介質(zhì),其中,所述用戶交互包括導(dǎo)航操作。
71.一種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時分析包括多個本原元素的文檔,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集識別本原元素的集合之間的邊界;識別出多個所述邊界形成表格;以及定義針對所述表格的表格結(jié)構(gòu)性元素,所述表格結(jié)構(gòu)性元素包括按照多個行和列布置的多個單元,每個單元包括相關(guān)聯(lián)的本原元素集合。
72.根據(jù)權(quán)利要求71所述的計算機(jī)可讀介質(zhì),還包括用于基于所述表格結(jié)構(gòu)性元素定義結(jié)構(gòu)化文檔的指令集。
73.根據(jù)權(quán)利要求72所述的計算機(jī)可讀介質(zhì),其中,所述用于定義結(jié)構(gòu)化文檔的指令集包括用于定義未結(jié)構(gòu)化文檔的分級模型的指令集。
74.根據(jù)權(quán)利要求73所述的計算機(jī)可讀介質(zhì),其中,所述表格結(jié)構(gòu)性元素的單元包括在所述分級模型中的節(jié)點。
75.根據(jù)權(quán)利要求73所述的計算機(jī)可讀介質(zhì),其中,所述表格結(jié)構(gòu)性元素包括在所述分級模型中的節(jié)點。
76.根據(jù)權(quán)利要求71所述的計算機(jī)可讀介質(zhì),其中,所述用于識別出多個所述邊界形成表格的指令集包括用于識別出(i)形成更大矩形形狀的邊界集合和(ii)包含在所述更大矩形形狀內(nèi)的多個矩形形狀的指令集。
77.根據(jù)權(quán)利要求71所述的計算機(jī)可讀介質(zhì),其中,所述文檔包括多個圖形本原元素, 其中所述用于識別本原元素集合之間的邊界的指令集包括識別作為垂直線或水平線的圖形本原元素和與垂直線或水平線近似的圖形本原元素。
78.根據(jù)權(quán)利要求77所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于基于所述識別出的圖形本原元素來識別多個分級區(qū)域的指令集。
79.根據(jù)權(quán)利要求78所述的計算機(jī)可讀介質(zhì),其中,所述用于識別出多個所述邊界形成表格的指令集包括用于識別滿足特定特性集合的分級區(qū)域集合的指令集。
80.根據(jù)權(quán)利要求79所述的計算機(jī)可讀介質(zhì),其中,所述用于識別出多個所述邊界形成表格的指令集包括用于識別(i)不與父區(qū)域共享任何邊界的矩形的第一區(qū)域和(ii)所述第一區(qū)域的至少兩個子區(qū)域的集合的指令集,其中,所述子區(qū)域的集合完全分隔所述第一區(qū)域,其中所述集合中的每個子區(qū)域是矩形的。
81.根據(jù)權(quán)利要求80所述的計算機(jī)可讀介質(zhì),其中,所述第一區(qū)域是表格的外界線,所述第一區(qū)域的子區(qū)域是表格的單元。
82.根據(jù)權(quán)利要求71所述的計算機(jī)可讀介質(zhì),其中,基于形成單元的相關(guān)聯(lián)的圖示符集合的位置來推斷多個識別出的邊界。
83.根據(jù)權(quán)利要求82所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于將圖示符集合關(guān)聯(lián)為段落的指令集,其中基于段落的位置來推斷所述邊界。
84.根據(jù)權(quán)利要求82所述的計算機(jī)可讀介質(zhì),其中,所述用于識別圖示符集合之間的邊界的指令集包括用于識別垂直地或水平地對準(zhǔn)的至少兩個圖示符集合的指令集。
85.根據(jù)權(quán)利要求71所述的計算機(jī)可讀介質(zhì),其中,所述用于定義表格結(jié)構(gòu)性元素的指令集包括用于識別形成鄰接矩形的識別出的邊界的集合的指令集。
86.根據(jù)權(quán)利要求85所述的計算機(jī)可讀介質(zhì),其中,所述鄰接矩形是所述表格結(jié)構(gòu)性元素的單元。
87.一種定義程序的方法,所述程序用于(i)分析包括多個本原元素的文檔,并且(ii) 基于所述分析生成定義所述文檔的結(jié)構(gòu)的結(jié)構(gòu)性元素,所述方法包括定義用于識別本原元素集合之間的邊界的模塊; 定義用于識別出多個所述邊界形成表格的模塊;以及定義用于基于所述表格定義表格結(jié)構(gòu)性元素的模塊,所述表格結(jié)構(gòu)性元素包括按照多個行和列布置的多個單元,每個單元包括相關(guān)聯(lián)的本原元素集合。
88.一種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時分析包括多個本原元素的文檔,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集識別包括表格的本原元素的第一集合;針對所述本原元素的第一集合定義表格結(jié)構(gòu)性元素;識別不包括表格的本原元素的第二集合;針對所述本原元素的第二集合定義非表格結(jié)構(gòu)性元素的集合;定義包括所述表格結(jié)構(gòu)性元素和所述非表格結(jié)構(gòu)性元素的集合的結(jié)構(gòu)化文檔。
89.根據(jù)權(quán)利要求88所述的計算機(jī)可讀介質(zhì),其中,所述用于定義結(jié)構(gòu)化文檔的指令集包括用于定義通過所述結(jié)構(gòu)性元素的閱讀順序的指令集,其中,所述閱讀順序是從來自結(jié)構(gòu)性元素集合的第一結(jié)構(gòu)性元素到所述表格結(jié)構(gòu)性元素、再到來自所述結(jié)構(gòu)性元素集合的第二結(jié)構(gòu)性元素。
90.根據(jù)權(quán)利要求88所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集識別不同的本原元素集合,其中該不同的集合中的每一個包括不同的表格;以及針對所述不同的集合中的每一個定義不同的表格結(jié)構(gòu)性元素。
91.根據(jù)權(quán)利要求90所述的計算機(jī)可讀介質(zhì),其中,所述不同的集合中的第一個包括圖形本原元素和圖示符兩者,而所述不同的集合中的第二個僅包括圖示符。
92.一種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時分析文檔,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集接收包括多個本原圖形元素的文檔,每個本原圖形元素被定義為所述文檔中的單個對象,所述文檔具有繪制順序,該繪制順序指示當(dāng)顯示所述文檔時繪制本原圖形元素的順序;識別在所述繪制順序中接連的本原圖形元素之間的位置關(guān)系;以及基于所述位置關(guān)系,從至少兩個所述本原圖形元素定義單個結(jié)構(gòu)性圖形元素。
93.根據(jù)權(quán)利要求92所述的計算機(jī)可讀介質(zhì),其中,所述文檔還包括多個圖示符,其中所述繪制順序不指示所述圖示符繪制在頁面上的順序。
94.根據(jù)權(quán)利要求92所述的計算機(jī)可讀介質(zhì),其中,所述文檔是矢量圖形文檔,其中所述本原圖形元素是矢量圖形。
95.根據(jù)權(quán)利要求92所述的計算機(jī)可讀介質(zhì),其中,所述用于識別接連的本原圖形元素之間的位置關(guān)系的指令集包括用于針對在所述閱讀順序中相繼的第一本原圖形元素和第二本原圖形元素,計算包括所述第一本原圖形元素和第二本原圖形元素的結(jié)構(gòu)性圖形元素的尺寸的指令集。
96.根據(jù)權(quán)利要求95所述的計算機(jī)可讀介質(zhì),其中,所述尺寸與包圍所述第一本原圖形元素和第二本原圖形元素的豎直界定框的面積成比例。
97.根據(jù)權(quán)利要求95所述的計算機(jī)可讀介質(zhì),其中,所述尺寸與包圍所述第一本原圖形元素和第二本原圖形元素的豎直界定框的長度和高度之和成比例。
98.根據(jù)權(quán)利要求95所述的計算機(jī)可讀介質(zhì),其中,所述用于識別接連的本原圖形元素之間的位置關(guān)系的指令集還包括用于執(zhí)行以下操作的指令集針對所述第二本原圖形元素和在所述閱讀順序中與所述第二本原圖形元素相繼的第三本原圖形元素,計算包括所述第二本原圖形元素和第三本原圖形元素的結(jié)構(gòu)性圖形元素的尺寸;將包括所述第一和第二本原圖形元素的結(jié)構(gòu)性圖形元素的尺寸與包括所述第二和第三本原圖形元素的結(jié)構(gòu)性圖形元素的尺寸進(jìn)行比較。
99.根據(jù)權(quán)利要求92所述的計算機(jī)可讀介質(zhì),其中,所述用于識別接連的本原圖形元素之間的位置關(guān)系的指令集包括用于執(zhí)行以下操作的指令集識別在所述繪制順序中接連的每對本原圖形元素;和對于識別出的每對本原圖形元素,計算該對的展度值。
100.根據(jù)權(quán)利要求99所述的計算機(jī)可讀介質(zhì),其中,對的展度值描述該對中的兩個本原圖形元素的尺寸和相鄰度。
101.根據(jù)權(quán)利要求99所述的計算機(jī)可讀介質(zhì),其中,所述用于從本原圖形元素集合定義單個結(jié)構(gòu)性圖形元素的指令集包括用于執(zhí)行以下操作的指令集基于所計算的展度值識別彼此相鄰的本原圖形元素的集群,其中在所述集群內(nèi)所有的本原圖形元素在所述繪制順序中是連續(xù)的;識別所述集群中滿足特定約束集合的連續(xù)本原圖形元素的子分組;以及針對每個子分組,定義包括該子分組中的所有本原圖形元素的結(jié)構(gòu)性圖形元素。
102.根據(jù)權(quán)利要求101所述的計算機(jī)可讀介質(zhì),其中,所述用于識別本原圖形元素的集群的指令集包括用于以所計算的展度值作為一階差值對本原圖形元素執(zhí)行差值集群的指令集。
103.根據(jù)權(quán)利要求101所述的計算機(jī)可讀介質(zhì),其中,所述特定約束集合包括如下要求所述子分組中的每個特定本原元素的界線與該子分組中按照繪制順序在所述特定本原元素之前的所有本原元素的集體界線相交。
104.根據(jù)權(quán)利要求103所述的計算機(jī)可讀介質(zhì),其中,每個本原元素的界線是包括該本原元素的最小豎直界定框。
105.根據(jù)權(quán)利要求103所述的計算機(jī)可讀介質(zhì),其中,每個本原元素的界線是完全包圍該本原元素的最小面積路徑。
106.根據(jù)權(quán)利要求92所述的計算機(jī)可讀介質(zhì),其中,所述用于從所述多個本原圖形元素定義單個結(jié)構(gòu)性圖形元素的指令集包括用于生成用以定義結(jié)構(gòu)性圖形元素的本原圖形元素集合之間的至少一個關(guān)聯(lián)的指令集。
107.根據(jù)權(quán)利要求92所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于基于所述結(jié)構(gòu)性圖形元素定義結(jié)構(gòu)化文檔的指令集。
108.根據(jù)權(quán)利要求107所述的計算機(jī)可讀介質(zhì),其中,所述結(jié)構(gòu)化文檔包括文檔的分級模型,該分級模型包括多個節(jié)點,其中一個節(jié)點由所述結(jié)構(gòu)性圖形元素填充。
109.一種用于定義程序的方法,該程序用于分析文檔并基于所述分析生成定義文檔中的結(jié)構(gòu)的結(jié)構(gòu)性元素,該方法包括定義用于接收包括多個本原圖形元素的文檔的模塊,每個本原圖形元素被定義為所述文檔中的單個對象,所述文檔具有繪制順序,該繪制順序指示當(dāng)顯示所述文檔時繪制本原圖形元素的順序;定義用于識別在所述繪制順序中接連的本原圖形元素之間的位置關(guān)系的模塊;以及定義用于基于所述位置關(guān)系,從至少兩個所述本原圖形元素定義單個結(jié)構(gòu)性圖形元素的模塊。
110.根據(jù)權(quán)利要求109所述的方法,還包括定義用于定義包括結(jié)構(gòu)性圖形元素的結(jié)構(gòu)化文檔的模塊。
111.根據(jù)權(quán)利要求110所述的方法,其中,所述結(jié)構(gòu)化文檔包括文檔的分級模型,該分級模型包括多個節(jié)點,其中一個節(jié)點被所述結(jié)構(gòu)性圖形元素填充。
112.—種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時分析文檔,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集接收包括多個本原圖形元素的文檔,每個本原圖形元素被定義為所述文檔中的單個對象,所述文檔具有繪制順序,該繪制順序指示當(dāng)顯示所述文檔時繪制本原圖形元素的順序;計算每對在所述繪制順序中接連的本原圖形元素的值,其中,所計算的值與該對中的本原圖形元素的尺寸相關(guān);基于所計算的值,定義接連的本原圖形元素的集群;以及識別所述集群中滿足特定約束的本原圖形元素的子集群的集合;以及將每個特定子集群定義為包括所述特定子集群中的本原圖形元素的單個結(jié)構(gòu)性圖形元素。
113.根據(jù)權(quán)利要求112所述的計算機(jī)可讀介質(zhì),其中,所計算的值還與所述對中的本原圖形元素彼此的相鄰度相關(guān)。
114.一種用于定義用以重構(gòu)文檔的程序的方法,該方法包括定義文檔重構(gòu)操作的缺省集合,所述文檔重構(gòu)操作用以從包括多個本原元素的文檔定義結(jié)構(gòu)化文檔;定義簡檔分級集合,每個簡檔包括(i)潛在文檔重構(gòu)結(jié)果集合,以及(ii)用于在中間文檔重構(gòu)結(jié)果與簡檔的潛在文檔重構(gòu)結(jié)果匹配時修改文檔重構(gòu)操作的指令,其中來自分級中較低級別處的簡檔的指令撤銷來自較高級別處的簡檔的指令;以及定義用于將中間文檔重構(gòu)結(jié)果與簡檔匹配的模塊。
115.根據(jù)權(quán)利要求114所述的方法,其中,所述結(jié)構(gòu)化文檔包括文檔的分級模型。
116.根據(jù)權(quán)利要求114所述的方法,其中,所述簡檔分級集合包括針對文檔、章節(jié)、頁面和區(qū)中的至少兩個的簡檔。
117.根據(jù)權(quán)利要求116所述的方法,其中,每個文檔簡檔規(guī)定可能頁面簡檔的特定集合,并且每個頁面簡檔規(guī)定可能區(qū)簡檔的特定集合。
118.根據(jù)權(quán)利要求117所述的方法,其中,第一文檔簡檔的頁面簡檔集合包括特定頁面簡檔,并且第二文檔簡檔的頁面簡檔集合也包括所述特定頁面簡檔。
119.根據(jù)權(quán)利要求114所述的方法,特定簡檔的指令包括當(dāng)中間文檔重構(gòu)結(jié)果與針對所述特定簡檔的潛在文檔重構(gòu)結(jié)果匹配時應(yīng)當(dāng)被測試的所述簡檔分級集合中的較低級別處的簡檔的子集。
120.根據(jù)權(quán)利要求114所述的方法,其中,特定簡檔的指令包括不執(zhí)行特定文檔重構(gòu)操作的指令。
121.根據(jù)權(quán)利要求120所述的方法,其中,所述特定簡檔是頁面的簡檔,并且所述特定簡檔的潛在文檔重構(gòu)結(jié)果的集合包括頁面僅具有一列文本的結(jié)果,其中所述特定簡檔的指令包括不執(zhí)行拆分文本行的操作的指令。
122.根據(jù)權(quán)利要求114所述的方法,其中,特定簡檔的指令包括關(guān)于如何執(zhí)行特定文檔重構(gòu)操作的指令。
123.根據(jù)權(quán)利要求114所述的方法,其中,特定簡檔的指令包括規(guī)定特定重構(gòu)處理的指令,該特定重構(gòu)處理的結(jié)果應(yīng)從中間重構(gòu)結(jié)果中移除。
124.—種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序由至少一個處理器執(zhí)行,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集接收包括多個本原元素的文檔;識別文檔重構(gòu)操作的缺省集合,所述文檔重構(gòu)操作用于重構(gòu)所述文檔以定義結(jié)構(gòu)化文檔;執(zhí)行來自所述缺省集合的一個或多個文檔重構(gòu)操作;基于所執(zhí)行的文檔重構(gòu)操作的結(jié)果,識別所述文檔的簡檔;以及根據(jù)所識別的簡檔修改用于重構(gòu)文檔的文檔重構(gòu)操作的集合。
125.根據(jù)權(quán)利要求IM所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于在修改所述集合之后執(zhí)行來自修改后的集合的至少一個文檔重構(gòu)操作的指令集。
126.根據(jù)權(quán)利要求IM所述的計算機(jī)可讀介質(zhì),其中,所述用于修改文檔重構(gòu)操作集合的指令集包括用于從要執(zhí)行的重構(gòu)操作的集合中移除特定重構(gòu)操作的指令集。
127.根據(jù)權(quán)利要求IM所述的計算機(jī)可讀介質(zhì),其中,所述用于修改文檔重構(gòu)操作集合的指令集包括用于向要執(zhí)行的重構(gòu)操作的集合添加特定重構(gòu)操作的指令集。
128.根據(jù)權(quán)利要求IM所述的計算機(jī)可讀介質(zhì),其中,重構(gòu)操作的缺省集合規(guī)定要執(zhí)行重構(gòu)操作的順序。
129.根據(jù)權(quán)利要求1 所述的計算機(jī)可讀介質(zhì),其中,所述用于修改文檔重構(gòu)操作集合的指令集包括用于修改要執(zhí)行重構(gòu)操作的順序的指令集。
130.根據(jù)權(quán)利要求IM所述的計算機(jī)可讀介質(zhì),其中,所述簡檔是基于執(zhí)行的文檔重構(gòu)操作的結(jié)果識別文檔的文檔類型的文檔簡檔。
131.根據(jù)權(quán)利要求130所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于執(zhí)行以下操作的指令集在修改所述集合之后執(zhí)行來自所修改的集合的至少一個文檔重構(gòu)操作;基于所執(zhí)行的文檔重構(gòu)操作的結(jié)果,識別針對文檔的特定章節(jié)的章節(jié)簡檔;以及根據(jù)識別出的章節(jié)簡檔修改用于重構(gòu)文檔的特定章節(jié)的文檔重構(gòu)操作的集合。
132.根據(jù)權(quán)利要求131所述的計算機(jī)可讀介質(zhì),其中,所述特定章節(jié)是特定頁面。
133.根據(jù)權(quán)利要求131所述的計算機(jī)可讀介質(zhì),其中,所述章節(jié)簡檔中的指令撤銷所述文檔簡檔中用于重構(gòu)所述特定章節(jié)的沖突指令。
134.根據(jù)權(quán)利要求131所述的計算機(jī)可讀介質(zhì),其中,在識別所述章節(jié)簡檔之后,所述文檔簡檔中沒有與所述章節(jié)簡檔中的指令抵觸的指令仍然在運(yùn)行。
135.一種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時顯示文檔,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集定義包括結(jié)構(gòu)性元素的分級的結(jié)構(gòu)化文檔,所述分級是通過分析未結(jié)構(gòu)化文檔而構(gòu)建的;在設(shè)備上顯示所述文檔;接收對所述文檔中感興趣位置的選擇;基于所述感興趣位置,將所述分級中的結(jié)構(gòu)性元素識別為感興趣區(qū)域;以及修改對所述文檔的顯示,以突出顯示所識別出的感興趣區(qū)域。
136.根據(jù)權(quán)利要求135所述的計算機(jī)可讀介質(zhì),其中,所述設(shè)備是小屏幕設(shè)備。
137.根據(jù)權(quán)利要求136所述的計算機(jī)可讀介質(zhì),其中,所述設(shè)備是手持式設(shè)備。
138.根據(jù)權(quán)利要求136所述的計算機(jī)可讀介質(zhì),其中,所述未結(jié)構(gòu)化文檔包括多個未關(guān)聯(lián)的本原元素,其中,所述用于定義結(jié)構(gòu)化文檔的指令集包括用于執(zhí)行以下操作的指令集生成所述本原元素之間的關(guān)聯(lián)以定義結(jié)構(gòu)性元素;以及定義結(jié)構(gòu)性元素的分級。
139.根據(jù)權(quán)利要求135所述的計算機(jī)可讀介質(zhì),其中,所述用于識別結(jié)構(gòu)性元素的指令集包括用于執(zhí)行以下操作的指令集識別包括所述感興趣位置的所述分級中最低級別處的結(jié)構(gòu)性元素;以及識別包括在所述分級的最低級別處識別出的結(jié)構(gòu)性元素的所述分級中較高級別處的結(jié)構(gòu)性元素,直到到達(dá)適合作為感興趣區(qū)域的結(jié)構(gòu)性元素。
140.根據(jù)權(quán)利要求139所述的計算機(jī)可讀介質(zhì),其中,所述分級的最低級別處的結(jié)構(gòu)性元素是關(guān)聯(lián)為字的圖示符集,并且適合作為感興趣區(qū)域的結(jié)構(gòu)性元素是包括該字的段落。
141.根據(jù)權(quán)利要求139所述的計算機(jī)可讀介質(zhì),其中,所述感興趣位置在圖形元素內(nèi), 并且所述感興趣區(qū)域是所述圖形元素。
142.根據(jù)權(quán)利要求135所述的計算機(jī)可讀介質(zhì),其中,所述用于接收對感興趣位置的選擇的指令集包括用于接收在觸摸屏設(shè)備上的特定位置處的雙敲的指令集。
143.根據(jù)權(quán)利要求135所述的計算機(jī)可讀介質(zhì),其中,所述用于修改對文檔的顯示的指令集包括用于組合對文檔的縮放、旋轉(zhuǎn)和平移以置中所述感興趣區(qū)域的指令集。
144.根據(jù)權(quán)利要求135所述的計算機(jī)可讀介質(zhì),其中,所述用于修改對文檔的顯示的指令集包括用于執(zhí)行以下操作的指令集基于作為感興趣區(qū)域的結(jié)構(gòu)性元素定義感興趣矩形;以及縮放所述顯示以在顯示整個所述感興趣矩形的同時最大化所述感興趣矩形的尺寸。
145.根據(jù)權(quán)利要求144所述的計算機(jī)可讀介質(zhì),其中,所述感興趣矩形被縮放,使得該矩形在第一方向上的長度等于在所述設(shè)備上的顯示在所述第一方向上的長度,其中所述用于修改對文檔的顯示的指令集還包括用于在第二方向上將所述感興趣矩形置中在所述顯示中的指令集。
146.根據(jù)權(quán)利要求145所述的計算機(jī)可讀介質(zhì),其中,所述第一方向是水平的,而所述第二方向是垂直的。
147.根據(jù)權(quán)利要求145所述的計算機(jī)可讀介質(zhì),其中,所述第一方向是垂直的,而所述第二方向是水平的。
148.根據(jù)權(quán)利要求135所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于執(zhí)行以下操作的指令集接收用以從所述感興趣區(qū)域移動的輸入;以及修改對所述文檔的顯示,以突出顯示感興趣的結(jié)構(gòu)性相關(guān)區(qū)域。
149.根據(jù)權(quán)利要求148所述的計算機(jī)可讀介質(zhì),其中,所述感興趣的結(jié)構(gòu)性相關(guān)區(qū)域是按照閱讀順序在所識別出的結(jié)構(gòu)性元素之前的結(jié)構(gòu)性元素。
150.根據(jù)權(quán)利要求148所述的計算機(jī)可讀介質(zhì),其中,所述感興趣的結(jié)構(gòu)性相關(guān)區(qū)域是按照閱讀順序在所識別出的結(jié)構(gòu)性元素之后的結(jié)構(gòu)性元素。
151.根據(jù)權(quán)利要求148所述的計算機(jī)可讀介質(zhì),其中,所述感興趣的結(jié)構(gòu)性相關(guān)區(qū)域是所述文檔中與初始感興趣區(qū)域不同的頁面上的結(jié)構(gòu)性元素,其中,所述結(jié)構(gòu)化文檔包括所述感興趣區(qū)域與所述感興趣的結(jié)構(gòu)性相關(guān)區(qū)域之間的鏈接。
152.一種存儲用于手持式顯示設(shè)備的計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序由至少一個處理器執(zhí)行,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集分析包括多個未關(guān)聯(lián)的本原元素的未結(jié)構(gòu)化文檔,以定義包括結(jié)構(gòu)性元素的分級的結(jié)構(gòu)化文檔,所述結(jié)構(gòu)性元素是通過關(guān)聯(lián)本原元素集合來定義的;當(dāng)所述手持式顯示設(shè)備處于第一朝向時,在所述手持式顯示設(shè)備上在第一布局中顯示所述結(jié)構(gòu)化文檔的特定部分;當(dāng)所述手持式顯示設(shè)備處于第二朝向時,在所述手持式顯示設(shè)備上在與所述第一布局不同的第二布局中顯示所述結(jié)構(gòu)化文檔的所述特定部分。
153.根據(jù)權(quán)利要求152所述的計算機(jī)可讀介質(zhì),其中,所述第一朝向是水平朝向,而所述第二朝向是垂直朝向。
154.根據(jù)權(quán)利要求153所述的計算機(jī)可讀介質(zhì),其中,所述結(jié)構(gòu)化文檔的部分包括布置在一列中的文本,其中所述第一布局在三列中顯示所述文本,而所述第二布局在兩列中顯示所述文本。
155.根據(jù)權(quán)利要求152所述的計算機(jī)可讀介質(zhì),其中,所述手持式顯示設(shè)備包括用于確定該顯示設(shè)備的朝向的加速計。
156.根據(jù)權(quán)利要求152所述的計算機(jī)可讀介質(zhì),其中,所述手持式顯示設(shè)備是 iPhone 0
157.一種定義用于顯示文檔的程序的方法,該方法包括定義用于定義包括結(jié)構(gòu)性元素的分級的結(jié)構(gòu)化文檔的模塊,所述分級是通過分析未結(jié)構(gòu)化文檔而構(gòu)建的;定義用于在設(shè)備上顯示所述文檔的模塊;定義用于接收對所述文檔中感興趣位置的選擇的模塊;定義用于基于所述感興趣位置,將所述分級中的結(jié)構(gòu)性元素識別為感興趣區(qū)域的模塊;以及定義用于修改對所述文檔的顯示,以突出顯示所識別出的感興趣區(qū)域的模塊。
158.根據(jù)權(quán)利要求157所述的方法,其中,所述程序是針對手持式設(shè)備的固件定義的。
159.—種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時定義對文檔中的文本的選擇,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集接收包括多個未關(guān)聯(lián)的圖示符的未結(jié)構(gòu)化文檔;關(guān)聯(lián)圖示符集;識別規(guī)定通過所述圖示符的閱讀流的閱讀順序;顯示所述文檔;接收用于對所顯示的文檔內(nèi)的文本的選擇的起始點和終止點;以及通過采用識別出的圖示符集和預(yù)期的閱讀流來定義從所述起始點到所述終止點對文本的選擇。
160.根據(jù)權(quán)利要求159所述的計算機(jī)可讀介質(zhì),其中,所關(guān)聯(lián)的圖示符集包括多個段落,所述閱讀順序規(guī)定從第一段落到不鄰接的第二段落的閱讀流。
161.根據(jù)權(quán)利要求159所述的計算機(jī)可讀介質(zhì),其中,所關(guān)聯(lián)的圖示符集包括多個列, 所述起始點和終止點在不同的列中。
162.根據(jù)權(quán)利要求161所述的計算機(jī)可讀介質(zhì),其中,所述閱讀順序針對每個列規(guī)定一個順序值,其中,對文本的選擇包括順序值在包括所述起始點的列的順序值與包括所述終止點的列的順序值之間的所有列。
163.根據(jù)權(quán)利要求159所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于執(zhí)行以下操作的指令集確定在所述閱讀順序中所述起始點是否是在所述終止點之后;當(dāng)所述起始點在所述終止點之后時,切換用于選擇的起始點和終止點,使得在所述閱讀順序中起始點在終止點之前。
164.根據(jù)權(quán)利要求159所述的計算機(jī)可讀介質(zhì),其中,通過利用游標(biāo)控制器的點擊和拖拽選擇來接收用于文本選擇的起始點和終止點。
165.根據(jù)權(quán)利要求159所述的計算機(jī)可讀介質(zhì),其中,當(dāng)按壓游標(biāo)控制器按鈕時所述起始點是游標(biāo)的定位,并且在游標(biāo)從所述起始點移動之后所述終止點是游標(biāo)的定位。
166.根據(jù)權(quán)利要求159所述的計算機(jī)可讀介質(zhì),其中,通過觸摸屏姿態(tài)來接收用于文本選擇的起始點和終止點。
167.根據(jù)權(quán)利要求166所述的計算機(jī)可讀介質(zhì),其中,所述起始點是用戶用物體初始地觸摸觸摸屏的定位,所述終止點是用戶將所述物體拖拽到的定位。
168.根據(jù)權(quán)利要求167所述的計算機(jī)可讀介質(zhì),其中,所述物體是用戶的手指。
169.根據(jù)權(quán)利要求159所述的計算機(jī)可讀介質(zhì),其中,所述用于識別關(guān)聯(lián)的圖示符集和閱讀順序的指令集包括用于從所述未結(jié)構(gòu)化文檔定義結(jié)構(gòu)化文檔的指令集,其中所述關(guān)聯(lián)的圖示符集是所述結(jié)構(gòu)化文檔中的結(jié)構(gòu)性元素。
170.根據(jù)權(quán)利要求169所述的計算機(jī)可讀介質(zhì),其中,所述結(jié)構(gòu)化文檔包括多個布局, 每個布局包括一個或多個關(guān)聯(lián)的圖示符集。
171.根據(jù)權(quán)利要求170所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于執(zhí)行以下操作的指令集確定所述起始點和終止點是否是在同一布局內(nèi);以及當(dāng)所述起始點和終止點不在同一布局內(nèi)時,定義與所述起始點在同一布局內(nèi)的新終止點ο
172.根據(jù)權(quán)利要求171所述的計算機(jī)可讀介質(zhì),其中,所述用于定義新終止點的指令集包括識別從所述起始點到所述終止點的直線;以及將所述直線離開所述起始點的布局的點定義為所述新終止點。
173.根據(jù)權(quán)利要求170所述的計算機(jī)可讀介質(zhì),其中,所述用于定義對文本的選擇的指令集包括用于執(zhí)行以下操作的指令集確定所述起始點和所述終止點是否處于同一布局中;以及當(dāng)所述起始點和所述終止點處在不同的布局中時,定義所述選擇以包括在所述起始點的布局中位于該布局中的所述起始點之后的所有文本。
174.根據(jù)權(quán)利要求173所述的計算機(jī)可讀介質(zhì),其中,所述用于定義對文本的選擇的指令集還包括用于定義所述選擇以包括所述起始點的布局與所述終止點的布局之間的任何布局內(nèi)的所有文本。
175.根據(jù)權(quán)利要求159所述的計算機(jī)可讀介質(zhì),其中,所述對文本的選擇是進(jìn)行復(fù)制并粘貼到第二文檔,其中,所述文本在保持所述閱讀順序的情況下被粘貼到所述第二文檔。
176.—種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序由至少一個處理器執(zhí)行,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集分析包括多個本原元素的未結(jié)構(gòu)化文檔,以將結(jié)構(gòu)化文檔定義為所述未結(jié)構(gòu)化文檔的分級模型,所述結(jié)構(gòu)化文檔包括多個結(jié)構(gòu)性元素和通過所述結(jié)構(gòu)性元素的閱讀順序;顯示所述文檔;接收用于對所述文檔中的文本的選擇的起始點和終止點;以及通過采用所述結(jié)構(gòu)性元素和通過所述結(jié)構(gòu)性元素的閱讀順序來選擇所述文檔中從所述起始點到所述終止點的文本。
177.根據(jù)權(quán)利要求176所述的計算機(jī)可讀介質(zhì),其中,所述文檔被顯示在手持式顯示設(shè)備上。
178.根據(jù)權(quán)利要求176所述的計算機(jī)可讀介質(zhì),其中,所述起始點在文章內(nèi)的文本列中,所述終止點在所述文章的調(diào)出部內(nèi)。
179.根據(jù)權(quán)利要求178所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于將所述終止點移動到所述文章中的文本列的指令集。
180.根據(jù)權(quán)利要求178所述的計算機(jī)可讀介質(zhì),其中,所述用于選擇文本的指令集包括用于選擇所述文章的列中的所有文本的指令集。
181.一種定義用于定義對文檔中的文本的選擇的程序的方法,該方法包括 定義用于接收包括多個未關(guān)聯(lián)的圖示符的未結(jié)構(gòu)化文檔的模塊;定義用于關(guān)聯(lián)圖示符集的模塊;定義用于識別規(guī)定通過所述圖示符的閱讀流的閱讀順序的模塊; 定義用于顯示所述文檔的模塊;定義用于接收用于對所顯示的文檔內(nèi)的文本的選擇的起始點和終止點的模塊;以及定義用于通過采用識別出的圖示符集和預(yù)期的閱讀流來定義從所述起始點到所述終止點對文本的選擇的模塊。
182.—種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時定義用于文檔的結(jié)構(gòu),所述文檔包括多個本原元素,所述多個本原元素是按照它們在所述文檔中的位置而定義的,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集針對本原元素的特定集合,識別多對最近本原元素之間的距離; 對識別出的距離進(jìn)行排序;存儲識別出哪些所述識別出的距離大于分隔的給定閾值的單個值;以及采用存儲的單個值來識別和分析所述分隔,從而定義所述文檔的結(jié)構(gòu)性元素。
183.根據(jù)權(quán)利要求182所述的計算機(jī)可讀介質(zhì),其中,所述用于分隔的給定閾值識別一對本原元素之間的最小距離。
184.根據(jù)權(quán)利要求183所述的計算機(jī)可讀介質(zhì),其中,更靠近所述最小距離的多對本原元素在同一個本原元素集群中。
185.—種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序在由至少一個處理器執(zhí)行時定義用于文檔的結(jié)構(gòu),所述文檔包括多個本原元素,所述多個本原元素是按照它們在所述文檔中的位置而定義的,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集針對本原元素的特定集合,識別該集合中的最近本原元素的成對分組; 基于從最近對到最遠(yuǎn)對的順序來排序所述本原元素的成對分組; 存儲識別出哪些本原元素的成對分組足夠遠(yuǎn)離以形成分隔的單個值;以及采用存儲的單個值來識別和分析所述分隔,從而定義所述文檔的結(jié)構(gòu)性元素。
186.根據(jù)權(quán)利要求185所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)可讀介質(zhì)是手持式設(shè)備的固件。
187.根據(jù)權(quán)利要求186所述的計算機(jī)可讀介質(zhì),其中,所述設(shè)備是蜂窩式電話。
188.根據(jù)權(quán)利要求186所述的計算機(jī)可讀介質(zhì),其中,所述設(shè)備是媒體播放器。
189.根據(jù)權(quán)利要求185所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于定義結(jié)構(gòu)化文檔的指令集,所述結(jié)構(gòu)化文檔包括所述結(jié)構(gòu)性元素和本原元素。
190.根據(jù)權(quán)利要求185所述的計算機(jī)可讀介質(zhì),其中 所述文檔包括多個圖示符;所述計算機(jī)程序還包括用于將圖示符集關(guān)聯(lián)為字的指令集; 所述本原元素的特定集合是字的最左圖示符;以及所述用于采用存儲的單個值來識別和分析所述分隔以定義結(jié)構(gòu)性元素的指令集包括用于定義對準(zhǔn)字集合的左對準(zhǔn)導(dǎo)引的指令集。
191.根據(jù)權(quán)利要求185所述的計算機(jī)可讀介質(zhì),其中 所述文檔包括多個圖示符;所述計算機(jī)程序還包括用于將圖示符集關(guān)聯(lián)為字的指令集; 所述本原元素的特定集合是字的最右圖示符;以及所述用于采用存儲的單個值來識別和分析所述分隔以定義結(jié)構(gòu)性元素的指令集包括用于定義對準(zhǔn)字集合的右對準(zhǔn)導(dǎo)引的指令集。
192.根據(jù)權(quán)利要求185所述的計算機(jī)可讀介質(zhì),其中,所述本原元素的特定集合是本原圖形元素,并且所述用于采用存儲的單個值來識別和分析所述分隔以定義結(jié)構(gòu)性元素的指令集包括用于將周圍的本原圖形元素關(guān)聯(lián)為結(jié)構(gòu)性圖形元素的指令集。
193.根據(jù)權(quán)利要求185所述的計算機(jī)可讀介質(zhì),其中,所述本原元素是圖示符,并且所述用于定義結(jié)構(gòu)性元素的指令集包括用于將周圍圖示符集關(guān)聯(lián)為字的指令集。
194.根據(jù)權(quán)利要求193所述的計算機(jī)可讀介質(zhì),其中,所述用于識別最近本原元素的成對分組的指令集包括用于執(zhí)行以下操作的指令集識別具有公共基線的圖示符集;基于圖示符在第一方向上的坐標(biāo)來排序所述圖示符集;針對所排序集合中的每對連續(xù)圖示符,計算該對中的圖示符之間的坐標(biāo)值的差值;以及在第一陣列中排序所計算的差值。
195.根據(jù)權(quán)利要求194所述的計算機(jī)可讀介質(zhì),其中,所述用于基于從最近對到最遠(yuǎn)對的順序來排序所述成對本原元素的指令集包括用于執(zhí)行以下操作的指令集排序所計算的差值;以及在第二陣列中排序與所排序的差值對應(yīng)的第一陣列中的索引。
196.根據(jù)權(quán)利要求195所述的計算機(jī)可讀介質(zhì),其中,將存儲最小差值的第一陣列的索引存儲為第二陣列的第一索引處的值。
197.根據(jù)權(quán)利要求195所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于確定圖示符之間的最小差值的指令集,其中,所存儲的單個值是所述第二陣列中的索引,在該索引處存儲所述第一陣列的用于存儲所述最小差值的索引。
198.根據(jù)權(quán)利要求197所述的計算機(jī)可讀介質(zhì),其中,所述最小差值代表字之間的間隔。
199.根據(jù)權(quán)利要求197所述的計算機(jī)可讀介質(zhì),其中,所述用于采用存儲的值來識別和分析所述分隔的指令集包括用于拆分第三陣列的指令集,所述第三陣列在其索引處存儲排序的χ坐標(biāo)值,其被存儲為在被存儲為所述單個值的索引處以及之后的第二陣列的所有索引處的第二陣列中的值。
200.根據(jù)權(quán)利要求185所述的計算機(jī)可讀介質(zhì),其中,所述用于存儲單個值的指令集包括用于存儲多個各自識別本原元素的不同分隔的單個值的指令集。
201.根據(jù)權(quán)利要求200所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括分析所述本原元素的不同分隔,以識別表示最優(yōu)距離尺度的理想最優(yōu)分隔。
202.一種定義用于定義文檔的結(jié)構(gòu)的程序的方法,該方法包括定義用于識別文檔中最近本原元素的成對分組的模塊,所述文檔包括多個本原元素, 所述多個本原元素按照它們在所述文檔中的位置來定義;定義用于基于從最近對到最遠(yuǎn)對的順序來排序所述本原元素的成對分組的模塊;定義用于存儲識別出哪些成對分組的本原元素足夠遠(yuǎn)離以形成分隔的單個值的模塊;以及定義用于采用存儲的值來識別和分析所述分隔以定義所述文檔的結(jié)構(gòu)性元素的模塊。
203.根據(jù)權(quán)利要求202所述的方法,還包括定義用于基于所述結(jié)構(gòu)性元素和本原元素來定義結(jié)構(gòu)化文檔的模塊。
204.根據(jù)權(quán)利要求203所述的方法,其中,所述結(jié)構(gòu)化文檔是其中所述結(jié)構(gòu)性元素是節(jié)點的分級結(jié)構(gòu)。
205.—種方法,包括定義用于分析和操縱文檔的多個不同處理,所述文檔包括多個本原元素;以及定義用于與所述本原元素相關(guān)聯(lián)的數(shù)據(jù)的存儲設(shè)備,其中,至少一些所述數(shù)據(jù)存儲在與所述處理分開的存儲器空間中,并且由至少兩個不同的處理共享,其中所述處理通過利用對數(shù)據(jù)的引用來訪問所述數(shù)據(jù),其中所述數(shù)據(jù)不被所述處理復(fù)制。
206.根據(jù)權(quán)利要求205所述的方法,其中,用于與所述本原元素相關(guān)聯(lián)的數(shù)據(jù)的存儲設(shè)備是第一存儲設(shè)備,該方法還包括定義解析器,該解析器用于(i)解析所述文檔以識別出所述本原元素,以及(ii)將所述本原元素存儲在第二存儲設(shè)備中。
207.根據(jù)權(quán)利要求206所述的方法,其中,與所述本原元素相關(guān)聯(lián)的數(shù)據(jù)包括對所述第二存儲設(shè)備中的本原元素的引用。
208.根據(jù)權(quán)利要求206所述的方法,其中,所述解析器用于(i)解析所述文檔以識別按照隨機(jī)順序的本原元素,以及(ii)將按照所述隨機(jī)順序的本原元素存儲在所述第二存儲設(shè)備中。
209.根據(jù)權(quán)利要求206所述的方法,其中,所述隨機(jī)順序是其中本原元素在所述文檔的位流表示中定義的順序。
210.根據(jù)權(quán)利要求206所述的方法,還包括定義如下模塊,該模塊用于(i)根據(jù)特定準(zhǔn)則來排序所述本原元素,以及(ii)按照排序順序在所述第一存儲設(shè)備中存儲與本原元素相關(guān)聯(lián)的數(shù)據(jù)。
211.根據(jù)權(quán)利要求210所述的方法,其中,所述本原元素包括關(guān)于它們在所述文檔中的定位的信息,其中所述特定準(zhǔn)則是基于所述本原元素的定位。
212.根據(jù)權(quán)利要求210所述的方法,其中,在所述文檔的特定頁面內(nèi),所述特定準(zhǔn)則以從上到下作為初級準(zhǔn)則并以從左到右作為次級準(zhǔn)則來排序所述本原元素。
213.根據(jù)權(quán)利要求205所述的方法,其中,所述本原元素包括多個圖示符。
214.根據(jù)權(quán)利要求213所述的方法,其中,所述多個不同的處理包括用于將圖示符集關(guān)聯(lián)為文本行的處理;以及用于將圖示符集關(guān)聯(lián)為字的處理。
215.根據(jù)權(quán)利要求214所述的方法,其中所述用于將圖示符集關(guān)聯(lián)為文本行的處理將特定文本行存儲為引用與所述本原元素相關(guān)聯(lián)的數(shù)據(jù)的第一串;以及所述用于將圖示符集關(guān)聯(lián)為字的處理將特定字存儲為引用與所述本原元素相關(guān)聯(lián)的同一數(shù)據(jù)的第二串。
216.根據(jù)權(quán)利要求215所述的方法,其中,同一數(shù)據(jù)在不被復(fù)制的情況下由兩個處理使用。
217.根據(jù)權(quán)利要求215所述的方法,其中,所述第一串和第二串中的每一個通過僅存儲兩個值來引用所述數(shù)據(jù)。
218.根據(jù)權(quán)利要求217所述的方法,其中,所述兩個值是對第一條數(shù)據(jù)的引用和串中的數(shù)據(jù)的條數(shù)的計數(shù)。
219.根據(jù)權(quán)利要求217所述的方法,其中,所述第一串和第二串引用相同的第一條數(shù)據(jù)并存儲不同的計數(shù)。
220.根據(jù)權(quán)利要求205所述的方法,還包括定義共享存儲器數(shù)據(jù)結(jié)構(gòu),該共享存儲器數(shù)據(jù)結(jié)構(gòu)用于管理對與本原元素相關(guān)聯(lián)的數(shù)據(jù)的存儲設(shè)備。
221.根據(jù)權(quán)利要求220所述的方法,其中,所述共享存儲器數(shù)據(jù)結(jié)構(gòu)用于在單獨(dú)的存儲器空間中存儲與本原元素相關(guān)聯(lián)的數(shù)據(jù)被存儲的定位。
222.根據(jù)權(quán)利要求220所述的方法,其中,所述共享存儲器數(shù)據(jù)結(jié)構(gòu)在至少兩個其他數(shù)據(jù)結(jié)構(gòu)引用與本原元素相關(guān)聯(lián)的數(shù)據(jù)時使用。
223.根據(jù)權(quán)利要求222所述的方法,其中,所述至少兩個其他數(shù)據(jù)結(jié)構(gòu)共享與本原元素相關(guān)聯(lián)的數(shù)據(jù)的所有。
224.根據(jù)權(quán)利要求220所述的方法,其中,所述共享存儲器數(shù)據(jù)結(jié)構(gòu)用于存儲引用與本原元素相關(guān)聯(lián)的數(shù)據(jù)的其他數(shù)據(jù)結(jié)構(gòu)的個數(shù)。
225.—種存儲計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序由至少一個處理器執(zhí)行,所述計算機(jī)程序包括用于執(zhí)行以下操作的指令集解析包括多個本原元素的文檔; 將按照隨機(jī)順序的本原元素存儲在第一存儲設(shè)備中;按照基于本原元素在文檔中的定位的順序?qū)Ρ驹氐囊么鎯υ诘诙鎯υO(shè)備中;接收用于執(zhí)行文檔重構(gòu)操作的指令;以及在不存儲任何新的對本原元素的引用的情況下,執(zhí)行接收到的指令。
226.根據(jù)權(quán)利要求225所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序還包括用于執(zhí)行以下操作的指令集接收第二指令集來執(zhí)行第二文檔重構(gòu)操作; 確定執(zhí)行所述第二文檔重構(gòu)操作要求對本原元素的新引用;以及按照與所述第二存儲設(shè)備的順序不同的順序在第三存儲設(shè)備中存儲對本原元素的新引用。
227.根據(jù)權(quán)利要求2 所述的計算機(jī)可讀介質(zhì),其中,所述第二存儲設(shè)備和第三存儲設(shè)備在同一物理存儲設(shè)備中。
228.—種方法,包括定義第一模塊,該第一模塊用于(i)解析包括多個本原元素的文檔,以及(ii)將按照隨機(jī)順序的本原元素存儲在第一存儲設(shè)備中;定義第二模塊,該第二模塊用于(i)分配第二存儲設(shè)備中用于存儲對隨機(jī)排序的本原元素的引用的存儲器,以及(ii)在所分配的存儲器中按照特定順序存儲所述引用;定義第三模塊,該第三模塊用于存儲引用所排序引用的一部分的數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)僅包括對排序引用中第一個的引用以及計數(shù)值;以及定義第四模塊,該第四模塊用于(i)接收用以執(zhí)行文檔重構(gòu)操作的指令,以及(ii)識別出需要所述第一模塊、第二模塊和第三模塊中的哪個來執(zhí)行文檔重構(gòu)操作,同時最小化存儲器和計算使用。
229.根據(jù)權(quán)利要求228所述的方法,其中,當(dāng)僅需要所述第三模塊來執(zhí)行特定文檔重構(gòu)操作時,對于本原元素的副本或者對本原元素的新引用不分配新存儲器。
230.根據(jù)權(quán)利要求1、22、30、39、44、46、50、61、67、71、88、92、112、124、182、185 和 225 之一所述的計算機(jī)可讀介質(zhì),其中,所述文檔是未結(jié)構(gòu)化文檔。
231.根據(jù)權(quán)利要求1、22、30、39、44、46、50、61、67、71、88、92、112、124、182、185 和 225 之一所述的計算機(jī)可讀介質(zhì),其中,所述文檔是矢量圖形文檔。
232.根據(jù)權(quán)利要求1、22、30、39、44、46、50、61、67、71、88、92、112、124、182、185 和 225 之一所述的計算機(jī)可讀介質(zhì),其中,所述文檔是便攜式文檔格式(PDF)文檔。
233.根據(jù)權(quán)利要求1、22、30、39、44、46、50、61、67、71、88、92、112、124、135、152、159、 176、182、185和225之一所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序是用于手持式設(shè)備的應(yīng)用。
234.根據(jù)權(quán)利要求1、22、30、39、44、46、50、61、67、71、88、92、112、124、135、152、159、 176、182、185和225之一所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序是操作系統(tǒng)的一部分。
235.根據(jù)權(quán)利要求1、22、30、39、44、46、50、61、67、71、88、92、112、124、135、152、159、 176、182、185和225之一所述的計算機(jī)可讀介質(zhì),其中,所述計算機(jī)程序是在操作系統(tǒng)之上運(yùn)行的應(yīng)用。
236.根據(jù)權(quán)利要求135、152、159和176之一所述的計算機(jī)可讀介質(zhì),其中,所述未結(jié)構(gòu)化文檔是矢量圖形文檔。
237.根據(jù)權(quán)利要求135、152、159和176之一所述的計算機(jī)可讀介質(zhì),其中,所述未結(jié)構(gòu)化文檔是便攜式文檔格式(PDF)文檔。
全文摘要
本發(fā)明不同的實施例采用不同的分析未結(jié)構(gòu)化文檔以定義結(jié)構(gòu)化文檔的技術(shù)。所述未結(jié)構(gòu)化文檔包括眾多本原元素,但是不包括結(jié)構(gòu)性元素,該結(jié)構(gòu)性元素規(guī)定本原元素之間的結(jié)構(gòu)性關(guān)系和/或基于這些本原元素的文檔的結(jié)構(gòu)性屬性。為了定義結(jié)構(gòu)化文檔,采用未結(jié)構(gòu)化文檔的本原元素來識別未結(jié)構(gòu)化文檔的各種幾何屬性。采用識別出的幾何屬性和本原元素的其他屬性來定義結(jié)構(gòu)性元素,例如相關(guān)聯(lián)的本原元素(例如,字、段落、連結(jié)圖,等等)、表格、導(dǎo)引、裝訂線等,以及定義通過本原元素和結(jié)構(gòu)性元素的閱讀流。提供了各種提高幾何分析和文檔重構(gòu)處理的效率的方法(例如,分級簡檔化、高效集群分析技術(shù)、高效數(shù)據(jù)結(jié)構(gòu))。
文檔編號G06F17/27GK102317933SQ200980156784
公開日2012年1月11日 申請日期2009年12月31日 優(yōu)先權(quán)日2009年1月2日
發(fā)明者D·B·科勒格, M·R·勒維, P·A·曼斯菲爾德 申請人:蘋果公司