專利名稱:用于文檔重構的方法和系統的制作方法
技術領域:
本發明涉及文檔重構。特別地,本發明涉及用于從未結構化文檔定義結構化文檔的方法、用于提高這種處理的效率的方法以及用于改善對結構化文檔的顯示和與結構化文檔的交互的方法。
背景技術:
文檔通常被定義為僅僅是在頁面上的規定位置處繪出的本原元素(primitive element)的集合。例如,PDF(便攜式文檔格式)文件可能不具有對結構的定義,而只有在各個位置處繪制圖示符(glyph)、形狀和位圖的指令。用戶可以在標準監視器上瀏覽這種文檔,并且推導出結構。然而,由于這種文件僅僅是本原元素的集合,所以文檔瀏覽應用不會了解文檔的預期結構。例如,表格顯示為一系列線條和/或矩形,其中線條之間具有文本,人類瀏覽者可以將其識別為表格。然而,顯示文檔的應用沒有指示文本分組基于行和列彼此具有關系,這是因為文檔不包括這種信息。 類似地,應用沒有關于整個頁面的文本流(例如,從一列到下一列的流,或者在嵌入圖像周圍的流)的指示,或者關于可以由人類用戶即時確定的各種其他重要特征的指示。當用戶僅僅是在標準監視器上瀏覽文檔時,缺少對文檔結構的了解不總是個問題。然而,對于使得閱讀者能夠訪問文件并對其進行編輯,就像該文件是由字處理器、圖像編輯應用等生成的且具有元素之間的關系和結構的文檔一樣,這通常是頗為重要的。因此,需要能夠重構未結構化的文檔的方法。類似地,需要利用這種重構文檔結構來使對文檔的顯示理想化(例如,對于小屏幕設備,其中無法實現在屏幕上一起顯示整個文檔)或者使得能夠智能地選擇文檔的元素的方法。在現代社會中,越來越多的計算應用轉向手持式設備(例如,蜂窩式電話、媒體播放器,等等)。因此,文檔重構技術必須在這種設備上可行,這種設備通常具有比標準個人計算機小的計算能力。然而,文檔重構通常采用相當多的計算和存儲器密集過程(例如,集群分析),并且使用大塊的存儲器。因此,還需要允許總的來說在文檔重構中且具體而言在集群分析中的更高效率的技術。
發明內容
本發明的不同實施例采用不同的技術來分析未結構化文檔以定義結構化文檔。在一些實施例中,未結構化文檔包括眾多本原元素,但是不包括結構性元素,該結構性元素規定本原元素之間的結構性關系和/或基于這些本原元素的文檔的結構性屬性。因此,為了定義結構化文檔,一些實施例采用未結構化文檔的本原元素來識別未結構化文檔的各種幾何屬性,然后采用所識別出的幾何屬性和本原元素的其他屬性來定義結構性元素,例如相關聯的本原元素(例如,字、段落、連結圖,等等)、表格、導引(guide)、裝訂線(gutter)等等,以及定義閱讀本原元素和結構性元素的流(flow)。如所提到的,一些實施例采用本原元素來識別各種幾何屬性。例如,一些實施例提供識別多組本原元素之間的邊界和由所述邊界界定的區域的方法。該方法采用識別出的區域來定義用于該文檔的結構性元素,并且基于本原元素和結構性元素定義結構化文檔。在一些實施例中,定義結構性元素包括單獨地分析每個區域,以生成特定區域中的多組本原元素之間的關聯。在一些實施例中,定義結構化文檔包括識別所識別出的區域之間的分級關系。一些實施例提供用于分析包括眾多字的未結構化文檔的方法,其中每個字是相關聯的圖示符集,并且每個圖示符具有定位坐標。該方法識別定位值的集群,其中每個定位值與一個字相關聯、是用于字對準的基礎、并且是從該字的圖示符的定位坐標導出的。基于所識別出的定位值的集群,該方法定義用于字的邊界元素集,所述邊界元素識別用于字的對準導引集。該方法基于圖示符和定義的邊界元素定義結構化文檔。一些實施例還定義一對邊界元素之間的空白空間的至少一個區域,并且還基于空白空間的區域來定義結構化文檔。一些實施例通過采用密度集群來識別定位值的集群。一些實施例采用本原元素的識別出的幾何屬性和其他屬性,來定義結構性元素, 以及定義閱讀本原元素和結構性元素的流。例如,一些實施例提供了一種用于分析包括眾多圖示符的未結構化文檔的方法,其中每個圖示符在未結構化文檔中具有一個位置。基于圖示符的位置,該方法生成不同圖示符集之間的關聯,以將不同圖示符集識別為不同的字。 該方法生成不同字集之間的關聯,以將不同字集識別為不同的段落。該方法定義不鄰接的段落之間的關聯,以定義閱讀段落的順序。為了生成不同字集之間的關聯以將不同字集識別為不同的段落,一些實施例生成不同字集之間的關聯作為不同的文本行,并且生成不同文本行集之間的關聯作為不同的段落。一些實施例提供了一種方法,該方法識別圖示符集之間的邊界,并識別出幾個所述邊界形成表格。該方法基于所述表格定義包括布置在若干行和列中的若干單元的表格結構性元素,其中每個單元包括相關聯的圖示符集。一些實施例通過識別形成更大矩形形狀和包含在更大矩形形狀內的若干矩形形狀的邊界集,來識別出邊界形成表格。在一些實施例中,基于形成單元的所述相關聯的圖示符集的位置來推斷至少一些識別出的邊界。一些實施例提供了一種用于分析包括眾多本原圖形元素的未結構化文檔的方法, 其中每個本原圖形元素被定義為單個對象。所述文檔具有繪制順序,該繪制順序指示繪制本原圖形元素的順序。該方法按照繪制順序識別接連的本原圖形元素之間的位置關系。基于所述位置關系,該方法從若干本原圖形元素定義單個結構性圖形元素。一些實施例通過計算包括按照繪制順序相繼的第一和第二本原圖形元素的結構性圖形元素的尺寸,來識別所述第一與第二本原圖形元素之間的位置關系。一些實施例提供了用于更高效地進行幾何分析和文檔重構的方法。例如,一些實施例提供了一種方法,該方法提供用于定義包括多個本原元素的結構化文檔的一組缺省文檔重構操作。該方法提供了分級的簡檔(profile)集合,其中每個簡檔包括(i) 一組文檔重構結果和(ii)當中間文檔重構結果與所述簡檔的潛在文檔重構結果相匹配時用于修改文檔重構操作的結果。來自所述分級中的較低級別的簡檔的指令撤銷(override)來自較高級別的簡檔的指令。在一些實施例中,用于特定簡檔的指令包括所述分級的簡檔集合中位于較低級別的簡檔子集,該簡檔子集應在中間文檔重構結果與用于簡檔的潛在文檔重構結構匹配時被測試。
一旦定義了結構化文檔,一些實施例提供各種用于使與結構化文檔的用戶交互理想化的技術。例如,一些實施例提供用于顯示結構化文檔的方法,所述結構化文檔包括通過分析未結構化文檔而構建的結構性元素的分級。該方法在設備(例如,小屏幕設備)上顯示結構化文檔。該方法接收文檔中感興趣的位置,并基于所述感興趣的位置將分級中的結構性元素識別為感興趣的區域。該方法修改對文檔的顯示,以突出顯示識別出的感興趣的區域。一些實施例通過以下操作來識別結構性元素識別包括所述感興趣位置的分級的最低級別處的結構性元素,以及識別包括在最低級別處識別出 的結構性元素的分級的較高級別處的結構性元素,直到達到適合作為感興趣區域的結構性元素。一些實施例還接收用以從感興趣區域移動的輸入,并修改對文檔的顯示以突出顯示結構性相關的感興趣區域。一些實施例提供了一種用于定義對包括眾多圖示符的未結構化文檔中的文本的選擇的方法。該方法識別相關聯的圖示符集以及規定閱讀這些圖示符的流的閱讀順序。該方法顯示文檔,并接收用于選擇所顯示文檔內的文本的起始點和終止點。該方法通過采用所識別出的圖示符集和預期的閱讀流來定義從所述起始點到所述終止點對文本的選擇。在一些實施例中,所述相關聯的圖示符集是段落,閱讀順序規定從不鄰接的第一段落到第二段落的閱讀流。一些實施例提供了提高幾何分析和文檔重構處理的效率的方法。一些實施例采用集群分析用于幾何分析和/或文檔重構,其可以是計算密集處理。因此,一些實施例提供了一種定義未結構化文檔的結構的方法,該未結構化文檔包括眾多本原元素,這些本原元素是按照它們在文檔中的位置來定義的。該方法識別出一個成對的最接近本原元素的分組, 并按照從最近對到最遠對的順序對所述成對的本原元素進行排序。該方法存儲識別哪些成對的本原元素足夠遠離以形成分隔(partition)的單個值。該方法采用存儲的值來識別和分析所述分隔,以定義文檔的結構性元素。一些實施例還提供了利用高效的數據結構的方法。例如,一些實施例提供幾種不同的用于分析和操縱包括眾多本原元素的未結構化文檔的處理。一些實施例還提供了對與本原元素相關聯的數據的存儲。至少一些所述數據存儲在與所述處理分開的存儲器空間中,并由至少兩個不同的處理共享。所述處理通過利用對所述數據的引用來訪問所述數據。 所述數據不會被處理復制。
本發明的新穎特征在所附權利要求中闡述。然而,為了解釋,在附圖中闡述了本發明的若干實施例。圖1例示了一些實施例的整體重構流。圖2例示了文檔的頁面和來自對所述頁面執行的一些實施例的幾何分析和文檔重構的各種結果。圖3概念性地例示了一些實施例的用于識別文檔的頁面的區并產生用于頁面的區樹的處理。圖4例示了在一些實施例中的頁面和用于識別所述頁面的區并產生用于所述頁面的區樹的序列。圖5例示了包括若干區的文檔的頁面。
圖6例示了包括區邊界圖形和多個區的頁面,其包括旋轉分組。圖7例示了用于圖5的頁面的一些實施例的區樹。圖8概念性地例示了一些實施例的用于定義頁面上的旋轉分組的處理。圖9概念性地例示了一些實施例的用于識別區邊界和相交部的處理。圖10例示了包括各種圖形和文本的頁面。圖11例示了用于圖10的頁面的區邊界區間(interval)和相交部。圖12概念性地例示了一些實施例的用于識別區的處理。圖13和14例示了應用圖12的處理以識別圖10的頁面的區。圖15概念性地例示了一些實施例的用于生成區樹的處理。圖16例示了來自圖10的頁面的區按照尺寸被排序并放置在節點圖中。圖17概念性地例示了一些實施例的區分析應用的軟件構架。圖18例示了一些實施例的用于識別文檔中的導引和裝訂線的整體處理。圖19例示了具有兩列文本的頁面以及針對頁面識別出的導引和裝訂線。圖20概念性地例示了一些實施例的用于執行密度集群的處理。圖21概念性地例示了一些實施例的用于確定左對準導引的處理。圖22至M例示了對頁面上的左對準導弓I的識別。圖25概念性地例示了一些實施例的用于確定右對準導引的處理。圖沈概念性地例示了一些實施例的用于確定文檔的區域的裝訂線的處理。圖27至四例示了對頁面上的裝訂線的識別。圖30概念性地例示了一些實施例的導引和裝訂線分析應用的軟件架構。圖31概念性地例示了一些實施例的用于確定文檔的布局和流的處理。圖32例示了一些實施例的對文檔的頁面的布局和流信息的確定的序列。圖33概念性地例示了一些實施例的用于識別和合并文本行的處理。圖34例示了具有六個交疊文本行分組的頁面。圖35例示了對來自圖34的文本行分組的合并。圖36概念性地例示了一些實施例的用于執行差值集群的處理。圖37例示了差值集群的示例。圖38概念性地例示了一些實施例的用于拆分文本行的處理。圖39例示了示出對哪里拆分頁面上的文本行的識別的序列。圖40概念性地例示了一些實施例的用于將文本行分組成段落的處理。圖41例示了對頁面上的段落的識別。圖42概念性地例示了一些實施例的用于識別文檔的一部分中的列和布局的處理。圖43和44例示了兩個不同頁面上的段落。圖45和46例示了針對圖43和44的頁面產生流圖。圖47概念性地例示了一些實施例的布局和流分析應用的軟件架構。圖48概念性地例示了一些實施例的用于識別文檔的一部分中的表格的處理。圖49例示了具有完整邊界的表格的示例。圖50例示了具有連接的但不完整的邊界的表格的示例。
圖51例示了沒有邊界的表格的示例。圖52例示了具有中斷的邊界的表格的示例。圖53概念性地例示了一些實施例的用于識別具有完整邊界集合的表格并定義所識別出的表格中的單元、行和列的處理。圖M例示了包括具有完整邊界的表格的頁面。圖55概念性地例示了一些實施例的用于識別和重構具有連接邊界集合的表格的處理。圖56例示了示出對具有連接邊界集合的表格的識別和重構的序列。圖57概念性地例示了一些實施例的用于識別和重構沒有邊界或者具有中斷的邊界的表格的處理。圖58至60例示了對頁面應用圖57的處理以識別具有中斷的邊界的表格。圖61概念性地例示了一些實施例的表格識別應用的軟件架構。圖62概念性地例示了一些實施例的用于將單獨的圖連結成連結圖的處理。圖63例示了對頁面上的圖的連結。圖64概念性地例示了一些實施例的用于執行界線(bound)集群以識別應被連結的圖以及連結這些圖的處理。圖65例示了兩個頁面,其中每個頁面具有兩個圖形對象,針對這兩個圖形對象計算展度(spread)。圖66例示了一些實施例的用于將集群處理成子序列的處理。圖67概念性地例示了一些實施例的用于識別應被連結的圖并將這些圖關聯為一個圖形的圖連結應用。圖68概念性地例示了一些實施例的采用簡檔來調整內容處理以適應內容類型的處理。圖69例示了適合#10封皮(envelope)的簡檔的文檔。圖70例示了一些實施例的分級簡檔集合。圖71概念性地例示了一些實施例的用于根據分級簡檔處理內容的處理。圖72概念性地例示了一些實施例的用于采用分級簡檔化來執行文檔重構的處理。圖73例示了一些實施例如何識別實現特定方法的最低級別的活動(active)簡檔。圖74至77例示了一些實施例的用于四個不同頁面的示例頁面簡檔匹配處理。圖78概念性地例示了在一些實施例中用于基于對感興趣的位置的識別來顯示文檔的處理。圖79例示了根據本發明一些實施例的在其中選擇了感興趣的位置且修改了顯示的小屏幕設備上的序列。圖80例示了一些實施例的用于識別感興趣的區域并應用轉換以在顯示設備上繪制感興趣的區域的第一具體處理。圖81例示了一些實施例的用于識別感興趣的區域并應用轉換以在顯示設備上繪制感興趣的區域的第二具體處理。
圖82概念性地例示了一些實施例的用于顯示語義地重構的文檔的處理。圖83例示了一些實施例的對圖82的處理的應用。圖84概念性地例示了一些實施例的用于在語義地重構的文檔中的區域之間進行導航的處理。圖85概念性地例示了一些實施例的用于針對小屏幕設備修改語義地重構的文檔的布局的處理。圖86例示了根據本發明一些實施例的文檔的頁面,如同它將在大屏幕上顯示的那樣,以及該頁面的一部分在小屏幕設備上的顯示。圖87概念性地例示了一些實施例的用于確定對語義地重構的文檔中的文本的選擇的處理。圖88例示了根據一些實施例的對語義地重構的文檔的頁面上的文本的選擇的序列。圖89例示了一些實施例的用于定義對語義地重構的文檔中的文本的選擇的第一具體處理。圖90例示了用于在語義地重構的文檔的頁面上進行選擇的第一起始點和第一終止點。圖91例示了根據圖89的處理由圖90中的起始點和終止點定義的選擇。圖92例示了用于在語義地重構的文檔的頁面上進行選擇的第二起始點和第二終止點。圖93例示了根據圖89的處理由圖92的起始點和終止點定義的選擇。圖94例示了一些實施例的用于定義對語義地重構的文檔中的文本的選擇的第二具體處理。圖95例示了根據圖94的處理由圖90的起始點和終止點定義的選擇。圖96例示了根據圖94的處理由圖92的起始點和終止點定義的選擇。圖97概念性地例示了一些實施例的用于采用集群分析在資源受限的設備上語義地重構文檔的處理。圖98例示了一些實施例的語義地重構文檔的序列。圖99概念性地例示了一些實施例的用于通過采用間接排序的陣列分隔數據集的處理。圖100例示了對具有9個數據項的數據集的分隔。圖101概念性地例示了一些實施例的用于在多個距離尺度(distance scale)下同時執行集群分析的處理。圖102概念性地例示了一些實施例的用于執行集群分析的集群分析應用的軟件構架。圖103概念性地例示了一些實施例的用于高效地重構文檔的處理。圖104例示了根據圖103的處理解析和分析文檔的序列。圖105例示了根據本發明一些實施例的排序數據的方式。圖106概念性地例示了 API,其在采用高效的存儲器管理技術的同時執行文檔重構處理。
圖107概念性地例示了一些實施例的用于重構文檔、顯示文檔和與文檔交互的應用的軟件架構。圖108概 念性地例示了一些實施例的用于制造存儲諸如圖107中描述的應用的計算機程序的計算機可讀介質的處理。圖109概念性地例示了實現本發明一些實施例的計算機系統。
具體實施例方式在以下描述中,出于解釋的目的給出了眾多細節。然而,本領域普通技術人員應當認識到,本發明可以在不采用這些具體細節的情況下應用。例如,在一些情況下,下面描述的技術被描述為按照特定順序發生。然而,在一些實施例中,按照與所描述的順序不同的順序執行所述技術。此外,盡管這些技術是針對從左向右讀的語言(例如,英語)描述的,但是本領域普通技術人員將認識到這些技術很容易改造為適合從右向左讀的語言。I.概覽本發明的一些實施例提供了用于從未結構化文檔定義結構化文檔的新穎方法。在一些實施例中,未結構化文檔是被定義為僅包括諸如形狀(例如,矢量圖)、圖像(例如,位圖)和圖示符的本原元素的文檔。在一些實施例中,圖示符是對文本字符(例如,字母、數字、標點符號或者其他內嵌(inline)字符)、字符集或者字符的一部分的可視表示。在一些實施例中,圖示符可以是可縮放矢量圖的預定集合,包括用于圖示符的輪廓(outline)的路徑定義。在一些實施例中,圖示符可以是針對各種尺寸優化的預定的柵格圖像(raster image)或者柵格圖像集合。作為示例,字符“i”可以由單個圖示符表示,該圖示符是具有兩個子路徑的路徑,其中一個子路徑用于點的輪廓,而另一子路徑用于更低部分的輪廓。作為另一示例,三個字符“ffi”的組合在成序列出現時有時由稱為連字符(ligature)的單個圖示符表示,該圖示符是按照與字符單獨地出現的方式略微不同的方式繪制的。作為第三個示例,諸如1”的重讀字符有時由多于一個的圖示符表示(例如,一個用于字符,一個用于重讀)并且有時由單個圖示符表示(將重讀與字符相結合)。一些實施例的未結構化文檔沒有規定本原元素之間的任何關系或關聯,而在其他實施例中,它規定最小量的這種關系和關聯。在一些實施例中,未結構化文檔可以具有一定量的結構,但是該結構是不可識別的或者不可依賴的。在一些實施例中,未結構化文檔具有未知的結構或者被假定為未結構化的。一些實施例從未結構化文檔生成結構化文檔,該結構化文檔包括本原元素之間的關聯和關系、本原元素的分組和排序以及本原元素的分組的性質。例如,一些實施例采用未結構化文檔的本原元素,來識別未結構化文檔的各種幾何屬性,并采用這些識別出的幾何屬性(以及本原元素的其他屬性)來定義結構性元素。一些實施例的結構性元素包括相關聯的本原元素(例如,字、段落、連結圖,等等)、導引、裝訂線、文本流、表格,等等。在一些實施例中,這些結構性元素按照分級的方式相關(例如,段落包括文本行、文本行包括字, 而字包括本原圖示符)。在一些實施例中,結構化文檔有兩個用途——它識別相關聯的元素 (例如,構成表格的元素),并且它識別本原元素的流順序(即,預計人將閱讀文檔中的本原元素的順序)。在接收到未結構化文檔時,一些實施例首先將文檔解析為其構成元素(例如,本原元素及其相關聯的信息,例如坐標定位、繪制順序,等等)。例如,在未結構化文檔中大塊文本可以被定義為多個字符圖示符,其中每一個具有其錨點將放置在特定頁面上的X坐標和y坐標,以及定義每個圖示符的尺寸的縮放因子(以及任何其他將要被應用的線性轉換),每個圖示符按照特定順序(相對于當一個圖示符覆蓋另一個圖示符時執行的混合操作)被繪制在頁面上。一些實施例然后對本原元素執行幾何分析,以定義文檔的幾何屬性。 例如,一些實施例分析本原元素,以識別本原元素之間的邊界以及由所述邊界界定的區域。圖1例示了一些實施例的整體流程。如圖所示,初始(在一些實施例中,在解析以識別本原元素之后)由幾何分析模塊110來分析文檔100。幾何分析模塊110分析文檔,以識別諸如邊界和由邊界界定的區域的幾何屬性。在一些實施例中,區域包括由諸如直線和窄矩形(即,特定本原形狀和圖像)的本原元素來界定的區。圖2例示了進入的文檔的頁面200以及來自幾何分析和文檔重構的各種結果。進入的文檔是未結構化文檔,該文檔具有人在瀏覽該文檔時將識別為文本、邊界、表格和圖形對象的本原元素集合。分析結果205例示了幾何分析模塊110具有識別出的由文檔200中的邊界250隔開的兩個區Z1 240和Z2 245。在一些實施例中,由幾何分析模塊110識別出的邊界還包括對準導引。在一些實施例中,對準導引是由字的開始或結尾形成的垂直邊緣(例如,在左對準文本列的左邊緣)。類似地,在一些實施例中,由幾何分析識別出的區域包括多組圖示符之間(即,導引之間)的未填充空白空間的間隔。在一些實施例中這些間隔被稱為裝訂線。分析結果210例示了位于第一列文本的左邊緣處的左對準導引212以及跨兩列文本之間的空白空間的裝訂線214(為了簡便起見,未示出其他導引和文本列)。如圖1所例示的,一些實施例的語義分析模塊110的輸出是區105、導引115和裝訂線125。從幾何分析模塊110輸出的數據被發送到文檔重構模塊120。文檔重構模塊120 繼續分析未結構化文檔以定義結構化文檔的處理。在一些實施例中,文檔重構模塊120生成本原元素之間的關聯,以定義諸如文本、表格和形狀的鄰接結構性元素。一些實施例還定義結構性元素的分級以及結構性元素之間的關系。例如,在一些實施例中,文檔重構模塊120生成多個圖示符、多個圖示符集、多組圖示符集等之間的關聯。一些實施例將單獨的圖示符關聯成字,將字關聯成文本行,將文本行關聯成段落,等等。分析結果215例示了在第一列文本內識別出單獨的行217和段落 219。文檔重構模塊120還識別圖示符的布局,以定義圖示符的文本流。具體而言,為了定義文本流,一些實施例識別圖示符(或者圖示符集)的閱讀順序,該順序表示預計人將閱讀頁面上的圖示符的順序(例如,從第一列的底部到第二列的頂部,然后跳過中央的單獨的文本框,等等)。分析結果220例示了在文檔200內識別出兩列,并且閱讀流222是從第一列的底部到第二列的頂部。在一些實施例中,對布局和流的識別和定義采用區結果205、 導引和裝訂線結果210以及圖示符關聯結果215。文檔重構模塊120還定義文檔中的其他結構性元素,它們是除圖示符之外的本原元素之間或者結構性元素之間的關聯。例如,在一些實施例中,文檔重構模塊120將文檔中的表格識別為由幾何分析模塊110識別出的區域以及區域中的圖示符和圖示符集之間的關聯。例如,一些實施例將區域關聯為表格的單元,以及將每個區域內的圖示符關聯為表格信息。分析結果225例示了文檔重構模塊120對文檔200中的具有9個單元229的表格 227的識別。一些實施例通過定義表格結構性元素來關聯形成表格的本原元素。然而,在初始文檔中,被瀏覽為表格的內容被定義為本原元素(線條和圖示符)的非關聯集合,在重構之后,單元在表格結構性元素中被識別為表格單元,并且是單獨地或一體地可編輯的。如進一步例示的,在一些實施例中,表格識別和重構采用區結果205、圖示符關聯結果215以及布局和流結果220。一些實施例還識別何時文檔中的兩個或更多個本原圖形元素或者圖形對象(例如,形狀、圖像、照片、位圖,等等)應被分組為一個結構性圖形元素。例如,大部分交疊的兩個對象可能是被定義為未結構化文檔中的兩個形狀或圖像的一個元素。文檔重構模塊120 將這兩個對象連結起來作為一個對象。分析結果230例示了來自初始文檔200的兩個本原形狀(星形和六角形)已經被文檔重構模塊120連結成一個圖形232。如圖1所例示的,文檔重構模塊120的輸出的示例包括語義分級數據135(即,圖示符的關聯)、布局和流數據145、表格數據155以及連結圖數據165。此外,在一些實施例中,一些這種信息還在若干文檔重構模塊120之間傳遞。圖2例示了采用所有這種信息來定義結構化文檔235。結構化文檔235具有與未結構化文檔200相同的外觀,但是結構化文檔235包括關于結構性元素以及元素的關聯、關系和分級的信息,由此使得能夠進行編輯、 更直觀地顯示,等等。文檔顯示和交互模塊130采用來自文檔重構模塊120的數據(以及,在一些實施例中,來自幾何分析模塊110的數據)。文檔顯示和交互模塊130使得用戶能夠對文檔進行瀏覽、編輯、滾動等。例如,序列140例示了在豎直保持的手持式設備上顯示為兩列文本的文檔。當手持式設備側邊轉動時,這兩列中的文本被重新布置為三列。這種重新布置是不能針對未結構化文檔進行的,因為這依賴于元素之間的關聯,尤其是不作為未結構化文檔的一部分的通過圖示符的文本流。在一些實施例中,文檔顯示和交互模塊130還可以識別已被用戶選擇的結構性元素(例如,段落、圖形對象,等等),并智能地縮放以顯示所選的元素。在一些實施例中,用戶選擇感興趣的位置(即,顯示文檔中的特定定位),并且顯示和交互模塊130識別結構性元素的分級中的合格結構性元素。一些實施例將特定類型的結構性元素定義為合格的結構性元素。在一些實施例中,合格的結構性元素用于定義在顯示器中突出顯示的感興趣區域。序列150例示了對段落170的選擇(例如,通過選擇段落內的感興趣位置)以及對該段落和附近文本的隨后智能顯示。文檔顯示和交互模塊130還提供其他特征,例如對文本和圖形對象的智能選擇、智能滾動文檔,等等。一些實施例采用分級簡檔化來利用中間分析和重構結果運行中地(on the fly) 修改如何執行幾何分析和文檔重構。一些實施例將中間結果與指示文檔包括何種類型的內容的簡檔進行核對,并相應地改變重構處理。在一些實施例中,分級簡檔可以指示分析和重構模塊執行更多或更少的處理、不同地執行處理或者重新執行處理。例如,如果中間分析結果指示文檔是一頁長、具有一列文本以及沒有形狀或圖像,則一些實施例將僅執行處理以將圖示符關聯成字、行和段落。例如將不執行表格識別。一些實施例采用各種新穎的效率技術以進行更高效的存儲和處理利用。例如,一些實施例通過采用集群分析來執行一些上述處理,集群分析是用來識別相對于其他元素按照某種方式緊密間隔開的元素分組。一些實施例采用集群分析來基于眾多字識別導引,所述字在相同或者近似相同的X坐標處開始、結尾、居中或者以其他方式對準。一些實施例采用集群分析來 識別圖示符之間的不同尺寸間隔,以識別字之間的間隔以及大于字之間的間隔的間隔。一些實施例還采用集群分析來識別應當被連結成單個圖形的本原圖形(例如, 形狀、圖像)。一些實施例通過采用引用未排序數據的有序數據(例如,本原元素位置數據)以及通過利用單個值來排序對數據的分隔,以高效地執行集群分析。在本發明中采用的術語分隔將序列或者線性有序集合分成多個子序列,所述子序列是具有相同順序關系的序列的子集。此外,分隔具有以下性質(i)原始序列中的每個成員恰包含在分隔的子序列中的一個中,以及(ii)給定兩個分隔的子序列S和T,根據順序關系,S中的所有成員都小于T中的所有成員,或者T中的所有成員都小于S中的所有成員。在一些實施例中,將分隔排序為單個值使得能夠更高效地執行各種集群分析功能,例如檢查多個分隔。一些實施例還通過利用應用編程接口(API)來提高文檔重構處理中的效率,其中應用編程接口最小化在呈現給API的用戶(例如,采用API的程序員或者軟件應用)時的數據復制量,就像數據可以被自由地修改一樣。一些實施例將數據存儲在隨機排序的陣列中,然后定義對數據的引用的經排序陣列,以及在眾多集合對象(例如,字符序列對象,其是字符數據的集合)中共享該經排序陣列,以優化對存儲器和處理的使用。在一些實施例中,采用這兩種效率改進以及其他技術來使得能夠在資源受限設備(例如,蜂窩式電話、媒體播放器,等等(例如,iPhone ))上執行文檔重構。盡管通過參照圖1和圖2中例示的示例提供了對一些實施例的上述概覽,但是本領域普通技術人員將認識到,這些示例僅僅意味著引入本發明一些實施例的特征和操作的示例性實施例。本領域普通技術人員將認識到,很多實施例具有不同于圖1和2中所例示的特征和操作。例如,盡管已經將幾何分析描述為一個模塊集110,但是本領域普通技術人員將認識到,一些實施例不必一起識別出所有幾何屬性。例如,一些實施例首先進行幾何分析的子集(例如,區域分析以識別出文檔中的一個或多個區),然后逐區地識別出導引和裝訂線。下面將描述一些實施例的更多具體示例。第II章描述基于邊界本原元素識別文檔的區域(即,區),以及定義形成結構化文檔的框架的分級結構(例如,文檔對象模型)。 第III章然后描述對圖示符的邊界元素(例如,對準導引)以及對準點之間的特定空白空間(裝訂線)的識別。接下來,第IV章詳細描述了生成圖示符和圖示符集之間的關聯,以定義諸如字、文本行、段落、列等的結構性元素,以及定義這些結構性元素(以及其他元素, 例如圖形、表格,等等)的流順序。第V章描述了根據本原元素識別表格,以及生成本原元素之間的關聯以形成表格結構性元素,而第VI章描述了識別應被分組到一起的本原圖形元素,以及生成這種本原元素之間的關聯以定義復合的圖形元素。接下來,第VII章描述了基于將中間處理結果與預定簡檔集合匹配來修改內容處理(采用如第II至VI章中詳細描述的文檔重構的示例),這可以提高內容處理的效率和精度。接下來,第VIII章詳述了采用結構化文檔(例如,由文檔對象模型定義的文檔) 來在小屏幕設備(例如,手持式電話或媒體播放器)上顯示文檔的各個方面。討論了文檔顯示對小屏幕的調整以及對識別出的感興趣區域的顯示。第IX章描述了采用結構化文檔來響應于用戶輸入定義對文本(或者文檔的其他元素)的選擇。然后第X章描述了用于提高集群分析技術的效率的各種方法,其(除了別的以外) 用于在文檔重構處理中識別對準導引、字和圖示符間距以及復合圖形。接下來,第XI章詳述了使得能夠更高效地解析和分析文檔的方法和數據結構。這些數據結構例示了在文檔重構處理中可以采用的生成圖示符之間的關聯(例如,形成字、文本行、段落,等等)的一種方式。然而,本領域普通技術人員將認識到,可以有很多在本領域內廣為公知的其他方式, 來生成本原元素(例如,圖示符、圖形元素,等等)之間的關聯以定義結構性元素(例如,段落、表格、復合圖形,等等)。接下來,第XII章描述了一些實施例的文檔重構應用的軟件架構,而第XIII章描述了實現本發明一些實施例的計算機系統。II.區分析當在頁面上有多個文章、章節或目錄信息時,它們通常由線條、圖像或者形狀來描繪。盡管人能夠容易地識別圖形線索意在指示頁面如何被斷成區的方式,但是對于計算機來說這可不是個容易的問題(尤其是在有圖形本原元素的情況下,圖形本原元素中的一些旨在作為頁面內容,而其他的旨在描繪內容區)。本發明的一些實施例提供了用于基于未結構化文檔的本原元素(例如,形狀和圖像)來識別邊界和由這些邊界界定的區域(例如,區)的方法。在一些實施例中,區域用在對文檔的后續重構中,以及用于進一步重構處理的劃區(compartmentalization)。一些實施例生成填充有內容的區域圖(即,諸如樹的分級結構),并且使得能夠將內容與該內容所處的區域相關聯。一些實施例逐頁面地執行區域識別。圖3概念性地例示了在一些實施例中用于識別文檔的頁面的區并生成頁面的區樹的處理300。將結合圖4來描述處理300。圖4例示了根據一些實施例的用于識別文檔的頁面400的區并生成該頁面的區樹430的序列。如圖3所示,處理300通過接收(在305 處)文檔的頁面開始。在一些情況下,文檔包括眾多頁面(例如,電子書),而在其他情況下,文檔將僅僅是一個頁面(例如,廣告傳單)。接下來,該處理識別(在310處)頁面上的區。在一些實施例中,對區的識別包括 識別區邊界和相交部,然后遍歷區邊界以識別出區。參照圖4的示例,處理300識別出頁面 400包括五個區,S卩,區A 405、區B 410、區C 415、區D 420以及區E 425。在識別出區之后,處理300生成(在315處)頁面的區圖(即,諸如樹的分級結構)。區圖例示了區的分級。例如,區圖430例示了頁面(節點P)的區包括四個區A、B、C 和D。此外,因為區E完全在區D內,所以區D包括區E。在一些實施例中,當第二區完全處于第一區中時,第一區是第二區的父輩。在一些實施例中,父輩和子輩可以共享一個或多個邊界。在生成區圖之后,處理300將頁面的內容插入(在320處)區圖中。然后處理結束。在一些實施例中,頁面包括文本、圖形或者其他內容。每個特定內容分組(例如,圖像、 段落、列,等等)被放置為完全包含該特定內容分組的最小區的子輩。在一個實施例中,一旦已經進一步分析了內容(例如,將文本分組為段落、識別表格,等等),則在文檔重構處理中隨后執行內容對象到區圖的插入。此外,當執行文檔重構時,一些實施例利用每個區的內容子樹來更新區圖。A.術語
圖5例示了文檔的包括若干區的頁面500。頁面500包括眾多區邊界,包括區邊界 505至509。在一些實施例中,區邊界是水平或垂直(即,直線的)條,其厚度由貢獻于區邊界的區邊界圖形定義。在一些實施例中,區邊界的厚度是貢獻于區邊界的區邊界圖形的豎直界定框在其窄方向上的寬度。在一些實施例中,特定元素或元素集的豎直界定框是完全圍住該元素或元素集的最小豎直矩形(在分析的坐標系統中)。區邊界圖形是頁面上的作為窄矩形或者具有作為窄矩形的豎直界定框的圖形對象(例如,形狀、圖像、線條)。例如,區邊界505至509全部是具有特定(相對窄)厚度的線條。在一些實施例中,區邊界圖形包括相對窄的對象,對其的全部或部分呈現填充全部或部分區邊界。在一些實施例中,區邊界圖形還包括其邊界貢獻于區邊界的對象(例如,填充多邊形的一個側邊可以指示區邊界的全部或部分,即使多邊形本身不窄并且沒有適合在區邊界中)。然而,區邊界圖形不需要是完全筆直的線或者完全直線。例如,圖6例示了包括區邊界圖形605的頁面600。區邊界圖形605不是完全垂直的條相反,它們是非常接近垂直對準的細枝圖像。一些實施例將圖形識別為區邊界圖形,而一些實施例沒有這樣。圖5的頁面500還包括眾多區邊界相交部,例如相交部510和511。在一些實施例中,區邊界相交部是水平區邊界與垂直區邊界的矩形相交部。如相交部511所例示的,區邊界相交部不必位于區邊界的端部。在一些實施例中,區邊界中間的區邊界相交部將區邊界斷開成一個或多個區邊界區間(interval)。例如,頁面500的底部區邊界被斷開成區邊界區間 515、516、517 和 518。因此,在一些實施例中,區是由形成豎直直線形狀的區邊界區間集界定的閉合區域。豎直直線形狀是可由水平和垂直線段形成的任何多邊形,其包括但不限于作為由水平和垂直線段形成的矩形的豎直矩形。每個區具有豎直直線外界線,其是由界定矩形的區邊界的外側形成的形狀。每個區還具有豎直直線內界線,其是由界定矩形的區邊界的內側形成的形狀。頁面500包括區P 526(頁面界線),區A 520 (包括左側和右側上的細條以及區C 和D上面的區域的拱形區),區B 521、區C 522(與區E共享邊界的左側區)、區D 523 (作為區C的鏡像圖像的右側區)、區E 5 和區G 525。在一些實施例中,區具有由區邊界的外側和內側定義的外界線和內界線。圖7例示了頁面500的區樹700,其中區P(頁面邊界)是區A、C、E和D的父輩; 區B是區A的子輩;以及區G是區D的子輩。區B、E和G是島(island)的示例。島是不與其父區共享邊界區間的區。盡管區E與區C和D共享其邊界區間,但是因為區C和D中的任一個實際上都沒有圍住區E,所以它們中的任一個都不是區E的父輩。區樹還例示了節點已經填充有節點所包括的內容。在一些實施例中,每個頁面的文檔對象模型(DOM)的一部分構建在頁面的區樹的節點上。文檔對象模型是將文檔表示為其節點為對象的圖。在一些實施例中,該圖是樹,其葉節點表示本原元素,而其非葉節點是結構對象,該結構對象表示它們的子節點之間的關系以及它們的子節點作為一個分組具有的性質。在一些實施例中, 節點的子輩的順序表示這些子輩的閱讀順序。在一些實施例中,根節點是文檔節點,其子輩是頁面節點,區樹從每個頁面節點向下延伸,流樹(包括表示結構的節點,所述結構例如有表格、文本框、布局、列、段落、列表和文本行)從一些區節點向下延伸,而表示本原元素(例如,圖示符、形狀和圖像)的節點是該流樹中的一些節點的子輩。在一些實施例中,結構節點包括表示節點之間的關系以及由樹的父子關系(其定向圖邊緣)表示的關系的性質。例如,開始一個新列的段落可以是結束前一列的段落的繼續,而兩者之間沒有段落中斷。在這種情況下,在樹中將有兩個段落節點,每一個具有一個不同的列父節點,但是它們將具有指向彼此以指示它們是表示單個共同段落的部分的兩個節點的性質。在一些實施例中,DOM是文檔的分級表示,其包括文檔的所有結構性元素。當內容完全地位于特定區的外界線內并且沒有完全地位于特定區的任何子輩的外界線內時,一些實施例將該內容定義為特定區的子輩。因此,區B包括頁眉文本,區C和D包括標準文本,而區E和G包括圖像。B.旋轉分組一些實施例定義頁面上的若干旋轉分組,并單獨地分析每個旋轉分組的區和內容。在一些實施例中,旋轉分組類似于區,只是旋轉分組不具有任何區邊界。相反,旋轉分組被定義為包括以相同角度(或者在小到人類瀏覽者難以區分的特定閾值內近似相同的角度)旋轉的所有內容。圖8概念性地例示了一些實施例的用于定義頁面上的旋轉分組的處理800。如圖所示,處理800接收(在805處)文檔的頁面。在一些情況下,該頁面是文檔的唯一頁面,而在其他情況下,該頁面是多個頁面之一。一些實施例一起而非逐頁地執行對多頁面文檔(或者,多頁面章節)的旋轉分組分析。然后該處理確定(在810處)頁面上的每個對象的旋轉角度。在一些實施例中, 假設不規則構形圖像的旋轉角度為零。例如,頁面500的區E中的圖像是不規則構形的,其將不會被給定非零旋轉角度。水平對準的文本也具有零度的旋轉角度,而偏離χ軸對準的文本被給定以一旋轉角度。例如,頁面500的區域F 530中的文本將具有大約-45度的旋轉角度。類似地,頁面600中的文本610( “Organic”和“Pure”)將具有其自己的旋轉角度。在也將圖像對象放置到旋轉分組中的實施例中,文本610上面的矩形圖像615將與文本610具有相同的旋轉角度。接下來,處理800按照旋轉角度來排序(在815處)對象。然后處理將對象分組 (在820處)成具有低于特定閾值的旋轉角度的展度的集群。在一些實施例中,與特定閾值相比的展度是從分組的最大旋轉角度中減去該分組中的最小旋轉角度。采用非零閾值允許分組考慮初始接收到的文檔中的內容定義中的小誤差(例如,非常略微地偏離水平的文本行)。然后處理800單獨地分析(在825處)每個旋轉分組。然后該處理結束。對于大多數頁面,大多數分析將涉及豎直(零度)分組。一些實施例針對除豎直分組之外的分組不執行區分析,相反只簡單地將旋轉分組的內容作為一個整體分類為頁面的子輩。在一些實施例中,每個旋轉分組具有其中內容呈現為豎直的坐標系統。在這種實施例中,每個旋轉分組具有其自己的區樹,其內容適合文檔的D0M。一些實施例針對頁面上內容旋轉的每個區別角度定義一個旋轉分組。下面將詳細地描述對每個分組的分析。C.識別區邊界和相交部圖9概念性地例示了一些實施例的用于識別區邊界和相交部的處理900。將結合圖10來描述處理900。圖10例示了包括各種圖形和文本的頁面1000。如圖9所示,該處理接收(在900處)旋轉分組,并將該分組標準化到豎直坐標系統。在一些實施例中,將分組標準化到豎直坐標系統包括,定義分組的坐標系統,使得分組中的所有對象是垂直的或水平的(例如,在坐標系統中,文本行是水平的)。下面的討論假設旋轉分組是豎直(零度)分組。本領域普通技術人員將能夠把相同的技術應用到在其內容呈現為豎直的坐標系統中具有非零角度的旋轉分組。一些實施例在針對特定旋轉分組執行區識別之前從其他旋轉分組中移除內容。例如,一些實施例在豎直直線坐標系統中執行區識別和分析之前將從圖6的頁面600中移除文本610和圖像615。然后該處 理識別(在910處)潛在區邊界。在一些實施例中,潛在區邊界包括足夠窄的任何水平或垂直圖形對象。在一些實施例中,對特定圖形對象是否足夠窄的確定采用絕對量度(例如,當圖形對象的豎直界定矩形的較小尺寸小于1/24英寸時)。在其他實施例中,該確定采用相對量度(例如,豎直界定矩形的較大尺寸是較小尺寸大小的八倍), 或者絕對量度和相對量度的組合(例如,可以允許窄尺寸達到1/12英寸,但是應用8 1 的相對量度)。一些實施例與頁面的尺寸相關地調整閾值。例如,以上示例可以應用于標準的8. 5X 11英寸頁面,而大得多的頁面可以具有更大的潛在區邊界。參照圖10,頁面1000包括將被分類為潛在區邊界的若干線條水平邊界1005至 1010和垂直邊界(1011至1016)。然而,圖形對象1020通常將不會被考慮為水平區邊界, 因為它在χ方向上太厚。一些實施例還識別至少具有閾值尺寸的所有豎直直線形狀,并采用這些形狀的側邊作為潛在區邊界。在一些實施例中,閾值尺寸是特定面積,而在其他實施例中,必須超過閾值寬度和閾值高度。例如,對象1020可以具有大到足以使其邊緣適合為潛在區邊界的面積,但是它太窄而不能成為一個單獨的區。另一方面,星形對象1025不是豎直直線形狀,由此其邊緣將不適合作為區邊界。因此,這些對象將僅僅被分類為在一個區或另一個區中的內容(具體而言,圖形對象)。一些實施例將識別為豎直直線形狀的側邊的每個潛在區邊界的界線設置為界定側邊的豎直矩形,其在是劃出的情況下包括筆劃寬度。如果頁面邊界在旋轉分組的坐標系統中是豎直直線的,則一些實施例還包括該頁面邊界作為區邊界。在識別出潛在區邊界之后,處理900移除(在915處)與頁面中的其他對象相交的邊界或邊界部分。例如,潛在邊界1015被星形對象1025遮蓋,并由此將被斷開成兩個潛在區邊界(星形上面的區域和星形下面的區域)。一些實施例還移除與字符界定框相交的區邊界。在一些實施例中,用于特定字符的字符界定框是完全圍住字符的最小矩形。例如, 潛在區邊界1010穿過字符“Lorem Ipsum”。因此,一些實施例將移除潛在區邊界1010不予 ^慮ο接下來,處理900合并(在920處)邊界。一些實施例合并平行的以及交疊的或者接近交疊的邊界。邊界在它們的界線相交時交疊。例如,當不同寬度的兩個非常窄的矩形被繪制為使得一個完全圍住另一個時,將合并兩個潛在區邊界。一些實施例略微擴展界線 (在潛在區邊界的寬度和長度兩者上)用以測試交疊。因此,圖10中的邊界1013和1014 將被合并為一個區邊界1027,其厚度大于邊界1013和1014的厚度。然后處理900確定(在923處)是否仍有任何合并邊界未被處理。當沒有邊界被合并或者已經處理了所有合并邊界時,處理前進到下面描述的945。否則,處理選擇(在 925處)未處理的合并邊界。然后處理確定(在930處)是否合并邊界太厚或者包括太多區邊界圖形。在一些實施例中,當合并邊界在窄方向上的寬度大于特定閾值時,該合并邊界太厚。在一些實施例中,厚度的測試與圖形對象是否窄到足以初始地被分類為區邊界相同。當處理確定邊界沒有太厚時,處理前進到上面描述的923。否則,當合并邊界太厚時,處理從潛在區邊界候選中移除(在935處)該合并邊界,并將其分類為單個圖形對象,然后前進到 923。例如,這可能在圖像被繪制為一系列窄矩形或者用窄且間隔緊密的條繪制條形圖時出現。—旦檢查了所有的合并邊界,則處理識別(在945處)區邊界相交部。如上所述, 在水平邊界與垂直邊界相交的任何地方識別區邊界相交部。一些實施例還識別近似相交部,并將它們分類為相交部。為了找到近似相交部,少量擴展邊界,然后進行測試以找到相交部。一些實施例將邊界擴展固定量(例如,1/4英寸),而其他實施例將每個邊界擴展作為特定區邊界的長度的百分比的量。當加長的邊界相交時,將近似相交部分類為相交部,并將兩個邊界擴展為完全穿過彼此的厚度。作為示例,圖10的邊界1027和1008沒有完全相交。然而,它們足夠接近,使得它們將被分類為相交并擴展為使得它們相交。然后處理消除(在950處)具有少于兩個相交部的邊界。一旦移除一個邊界,則與被移除的邊界相交的任何邊界必須被重新測試,以確定是否它們將具有至少兩個相交部。 在示例頁面1000中,邊界1006和邊界1015的兩個剩余部分將被移除,因為它們不具有區邊界相交部。一旦識別出區邊界和相交部,處理剪裁(在955處)區邊界,以移除延伸超過最外相交部的任何部分。例如,邊界1027和1009延伸超出它們的相交部。它們將被剪裁以僅僅延伸到彼此的最外界線。在剪裁了邊界之后,處理存儲(在960處)區邊界和相交部信息用以日后使用(例如,在識別區時)。然后處理結束。此時,已經全部確定了區邊界區間和區邊界相交部。圖11例示了垂直區邊界區間 1105、1115、1125、1135、1145、1155、1165 和 1175,以及水平區邊界區間 1110、1120、1130、 1140、1150、1160、1170 和 1180。圖 11 還例示了區邊界相交部 1102、1112、1113、1122、1123、 1132、1133、1142、1143、1152、1162、1172、1182 和 1192。D.識別區一旦識別出區邊界和區邊界相交部,就可以識別區。圖12概念性地例示了一些實施例的用于識別區的處理1200。將結合圖13和14來描述處理1200。圖13和14例示了應用處理1200來識別頁面1000的區。每個圖被例示為序列。圖13例示了用以識別第一區邊界的序列1305至1330。圖13中的箭頭例示了方向矢量,而虛線例示了采取的通過區邊界區間以定義區的路徑。圖14例示了由處理1200識別出的區。如圖12所示,處理1200接收(在1205處)分組或頁面的區邊界和相交部。在一些實施例中,區邊界和相交部是以上描述的處理900的輸出。然后處理確定(在1207處) 是否有任何區邊界區間。當沒有時,處理結束。否則,處理將兩個方向矢量分配(在1210 處)給每個區邊界區間(即,水平區間具有指向右和左的矢量,而垂直區間具有指向上和下的矢量)。圖13例示(在1305處)了頁面1000的每個邊界區間以雙向的方向矢量開始。接下來,處理選擇(在1215處)邊界區間b、相交部i和方向d。一些實施例隨機選擇開始點,而其他實施例采用啟發法,例如沿特定方向的最上和最左相交部。圖13例示 (在1305處)了隨機選擇在相交部1182處開始沿著區間1115向上移動。然后處理1200 從相交部i沿著方向d前進(在1220處),直到到達下一個相交部。—旦達到相交部,處理確定(在1225處)該相交部是否是在1215處選擇的開始相交部。當該相交部是原始開始相交部時,處理前進到下面描述的1265。否則,處理確定(在1230處)通過區邊界區間的路徑是否能在該相交部順時針轉向。當路徑能順時針轉向時,路徑就順時針轉向(在1235處)。然后處理前進到下面描述的1255。當路徑不能順時針轉向時,處理確定(在1240處)該路徑是否能繼續徑直通過相交部。當路徑能徑直繼續時,則路徑就徑直繼續(在1245處)。然后該處理前進到下面描述的1255。當路徑不能徑直繼續時,該路徑逆時針轉向(在1250處)到下一個邊界區間。通過在步驟1230和1240 中作出的選擇,處理1200在每個邊界相交部展現對順時針轉向的優選。一些實施例相反將展現對逆時針轉向的優選,這會給出相同的結果。處理將新邊界區間設置(在1255處)為當前邊界區間b,并將新相交部設置為當前相交部i。然后該處理設置(在1260處)方向d沿著邊界b移動離開相交部i。然后該處理前進到以上描述的1220。一旦到達了原始相交部,則處理1200將區Z定義(在1265處)為自操作1215起遍歷的邊界區間的集合。如上所述,圖13例示了根據處理1200對區邊界區間集合的遍歷。 在1305處,在選擇了區間1145從相交部1182開始向上移動(在圖中由圓圈和短箭頭示出),路徑來到相交部1112。順時針轉向是一個選項,所以路徑轉向(在1310處)到區間 1120,然后在相交部1122處再次順時針轉向到達區間1155。路徑在相交部1132處又再次順時針轉向(在1315處)到達區間1150,但是然后在相交部1142處不能順時針轉向或者繼續徑直通過。相反,路徑逆時針轉向到區間1145,然后在相交部1152處再次逆時針轉向到區間1160以朝向相交部1162前進。在相交部1162處,路徑順時針轉向(在1320處) 到區間1175,然后在相交部1172處再次順時針轉向到區間1180。區間1180返回到至原始相交部1182的路徑。圖 13 例示(在 1325 處)了由對區間 1115、1120、1155、1150、1145、1160、1175 和 1180的遍歷定義的區1300,以及在遍歷中采用的方向矢量。返回到處理1200,在定義(在 1265處)區Z之后,處理移除(在1270處)用以遍歷區Z的方向矢量。圖13例示(在 1330處)了頁面1000的區邊界區間,其中移除了用以遍歷區1300的方向矢量。接下來,處理1200移除(在1275處)所有的邊界區間,沒有方向矢量留下。這將不會在識別出第一區之后發生,但是可以在識別出任何其他區之后發生。當區Z是島(即, 與其父輩不共享邊界的區)時,處理1200按其本身對該區進行分類(在1280處)。在優選順時針轉向的實施例中,通過沿逆時針方向遍歷區的中心而定義的區域將是島。然后該處理確定(在1285處)是否還有任何區邊界區間。當有更多的區邊界區間時,處理前進到以上描述的1215。否則,一旦在雙向上采用所有區邊界區間,處理就已經定義了頁面的所有區。然后處理存儲(在1290處)區信息。然后處理結束。圖14例示了應用于頁面1000的處理1200的繼續。為簡便起見,圖14沒有例示遍歷區邊界區間的每一次移動。首先,在相交部1113、1123、1133和1143中的任一個開始, 識別兩個區1435和1440。這兩個區彼此完全一樣,就像將在不具有非島子輩的島的情況中出現的一樣。一些實施例移除完全一樣的區。然而,其他實施例將區處理為兩個一個是矩形區,另一個是島。接下來,在相交部1192開始得到區1445 (頁面邊界),這是因為頁面邊界的所有可能轉向將是逆時針移動。最后,這留下區1450和1455,它們被遍歷并移除。一旦遍歷了所有的區,就沒有剩余的區邊界區間。E.生成區樹
一旦已經識別出區,就可以生成區圖(區樹)。在一些實施例中,在逐區進行的文檔重構中采用區樹。圖15概念性地例示了一些實施例的用于生成區樹的處理1500。如圖所示,該處理接收(在1505處)區和內容對象。在一些實施例中,這些區已經被諸如處理 1200的處理識別。然后該處理按面積對這些區進行排序(在1510處)。一些實施例為了對區進行排序,在島和非島的面積相等時,將島處理為大于非島。接下來,該處理選擇(在1515處)最小的區作為ζ。然后該處理確定(在1520 處)區ζ在頁面的區圖中是否還有節點。當ζ具有節點時,該處理前進到下面描述的1530。 否則,當ζ不具有節點時,該處理1500確定(在1525處)區ζ的節點。接下來,處理選擇(在1530處)下一個最小的區作為區P。然后處理確定(在 1535處)區ρ是否包含區ζ (即,區ζ的外界線是否完全在區ρ的外界線內)。當區ρ包含區ζ時,該處理確定(在1540處)區ζ是區ρ的子輩。基于此,該處理定義(在1545處) 節點圖中針對區P的一個節點。然后該處理定義(在1550處)從區ρ到區ζ的邊緣。然后該處理前進到下面描述的1565。在1535處,當處理確定區ρ不包含區ζ時,該處理確定(在1555處)是否有任何大于當前區P的區。當還有更大的區時,處理前進到1530,并選擇下一個最小的區作為區 P,以測試新的區P是否是區ζ的父輩。否則,當沒有大于區P的區時,處理確定(在1560 處)區ζ不具有父區。接下來,處理確定(在1565處)是否有任何大于區ζ的區。當有更大的區時,該處理從要從其選擇的區集合中移除(在1570處)區z,并前進到1515以選擇另一個區進行父子分析。圖 16 例示了(圖 10 中示出的)頁面 1000 的區 1435 (A)、1440 (A,),1455 (B), 1450(C)、1300 (D)和1445 (E),它們按照尺寸順序排序(A’是A的島)且放置到節點圖1600 中。利用處理1500,首先將定義區A(最小的區)的節點,然后將測試這些區直到處理確定島區A’是區A的父輩,此時區A將在節點圖中被定義,并且將定義從A’到A的邊緣。接下來,區D將被確定為島區A’的父輩,然后區B、C和D全部將被確定為是島區E的子輩,其中島區E沒有父輩。在一些實施例中,區和島區的級別在區圖中總是交替的。由此,島E和A’ 處于圖1600的第一和第三級別,而區B、C、D和A處于第二和第四級別。一旦已經分析了所有的區,處理就前進到1573,并且確定是否有任何未處理的內容對象。當沒有內容對象(即,除了區邊界,文檔是空白的)或者已經處理了所有的內容對象時,處理前進到下面描述的1597。否則,該處理前進到1575并選擇內容對象C。然后該處理定義(在1580處)對象c的節點。在一些實施例中,內容對象是本原對象(例如,圖示符、形狀或圖像)。然后該處理確定(在1585處)包含內容對象c的最小區χ。一旦確定了包含內容對象c的區X,該處理定義(在1590處)在區圖中從區χ到內容對象c的邊緣。當已經添加了所有對象時,處理存儲(在1597處)區圖。處理然后結束。在一些實施例中,進一步分析每個區中的內容(例如,將文本分組為段落,識別表格,等等)。此外,當執行文檔重構時,一些實施例利用每個區的內容子樹來更新區圖,其中這些內容子樹包括表示區的本原對象的分級分組的結構節點。通過首先執行區分析,可以確保在隨后的文檔重構步驟中不會不適當地分組來自不同區的內容。在一些實施例中,對諸如邊界和由這些邊界界定的區域(例如,區)的幾何屬性的識別設置了用于進一步的文檔重構的階段。例如,簡檔可以依賴于區幾何結構,并且諸如表格或者文本框的結構元素可以從區幾何結構中識別出來。F.軟件架構在一些實施例中 ,將以上描述的區分析處理實施為在特定機器(例如,計算機、媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式或資源受限設備)上運行(或者存儲在計算機可讀介質上)的軟件。圖17概念性地例示了一些實施例的用于對文檔執行區分析的區分析應用1700的軟件架構。在一些實施例中,應用是獨立應用或者集成到另一應用(例如,文檔重構應用)中,而在其他實施例中,應用可能是在操作系統內實現的。區分析應用1700包括邊界識別模塊1705、區間和相交部識別模塊1710、區識別模塊1715、和區圖構建器1720以及區信息存儲設備1725。圖17還例示了文檔內容1730。邊界識別模塊1705從文檔內容1730接收信息。 在一些實施例中,該信息是關于文檔中的所有圖形(例如,形狀、圖像、線條,等等)的信息。 邊界識別模塊1705識別潛在區邊界,并將該信息傳遞到區間和相交部識別模塊1710以及到區信息存儲設備1725。在一些實施例中,邊界識別模塊1705執行處理900的一些或全部。區間和相交部識別模塊1710從邊界識別模塊1705和/或區信息存儲設備1725 接收區邊界信息。區間和相交部識別模塊1710基于由模塊1705識別出的潛在區邊界來識別區邊界相交部和區邊界區間。所識別出的區邊界相交部和區邊界區間被傳遞到區識別模塊1715,并存儲在區信息存儲設備1725中。在一些實施例中,區間和相交部識別模塊1710 執行處理900的一些或全部。區識別模塊1715接收來自邊界識別模塊1705的區邊界信息、來自區間和相交部識別模塊1710的區邊界相交部和區邊界區間信息、以及/或者來自區信息存儲設備1725 的信息。區識別模塊1715基于來自模塊1705和1715的信息識別區。將識別出的區傳遞到區圖構建器,并存儲在區信息存儲設備1725中。在一些實施例中,區識別模塊1715執行存儲1200中的一些或全部。區圖構建器1720模塊接收來自區識別模塊1715和/或區信息存儲設備1725的區信息,以及來自文檔內容1730的內容信息。區圖構建器1720基于區信息定義文檔的區圖, 并用內容信息填充區圖。在一些實施例中,當由諸如下面章節描述的其他重構處理識別出內容信息時,區圖構建器1720填充區圖。在一些實施例中,區圖構建器1720執行處理1500 中的一些或全部。在一些實施例中,將以上描述的模塊或其他模塊執行的處理的結果存儲在電子存儲設備中(例如,作為文檔對象模型的一部分)。文檔對象模型然后可以用于在電子顯示設備(例如,手持式設備、計算機屏幕,等等)上顯示文檔,使得用戶能夠瀏覽文檔和/或與文檔交互(例如,通過觸摸屏、游標控制設備,等等)。III.導引和裝訂線分析本發明的一些實施例提供了用于識別文檔或文檔的一部分中的諸如邊界(例如, 對準導引)和未填充空間(例如,圖示符分組之間的未填充空白空間的間隔,稱為裝訂線) 的幾何屬性的方法。在一些實施例中,裝訂線是兩個對準點之間(例如,右對準點與左對準點之間)的空白空間。在一些實施例中,在隨后的諸如列識別和文本行拆分的重構過程中采用對導引和裝訂線的識別。一些實施例逐區地或逐頁面地識別導引和裝訂線。圖18例示了一些實施例的用于識別文檔中的導引和裝訂線的整體處理1800。下面將結合圖19來描述處理1800,圖19例示了具有兩列文本的頁面1900以及在頁面1900 上識別出的導引和裝訂線。如圖18所示,處理1800接收(在1805處)文檔的一部分。該部分可以是多個頁面、一個頁面或已經被先前的區分析識別出的一個區。文檔的一部分可以包括已經通過在本申請中其他地方描述的方法從本原圖示符重構的字。然后處理應用(在1810處)集群分析來確定接收到的文檔部分的導引。集群分析使得該處理能夠確定字的結尾或開始被分組到一起的χ坐標,使得這些χ坐標可能是對準導引。如所提及的,圖19例示了具有兩列文本的頁面1900。頁面1900包括多個導引集 1905。一些實施例將列的底部行和頂部行確定為導引,而其他實施例僅確定左對準導引和右對準導引。一些實施例還識別其他對準的導引,例如中央對準或者編號列表中十進制點的對準。下面將進一步詳細地描述集群分析和導引確定處理。接下來,處理確定(在1815處)文檔部分的裝訂線。一些實施例采用來自操作 1810的信息來確定裝訂線。圖19例示了針對頁面1900確定的在第一列的右對準導引與第二列的左對準導引之間的裝訂線1910。一些實施例將頁邊距處理為裝訂線,而其他實施例不這樣處理。一旦確定了導引和裝訂線,處理1800就采用(在1820處)導引和裝訂線用于對文檔的進一步重構。然后處理結束。A.密度集群一些實施例通過如下操作來確定右對準導引和左對準導引在頁面上搜索在相同或近似相同的X坐標處開始或結尾的文本行,以及確定是否存在足夠的證據使得X坐標實際上是對準點。一些實施例采用稱為密度集群的集群分析的形式來確定對準導引。一些實施例的密度集群利用在下面第X章中描述的存儲器和處理效率,使得它可以在資源受限的設備(例如,iPhone )上執行。密度集群通常可應用到其中有相當量的“噪音”或隨機數據混在否則清晰可見的集群中的問題。當數據是實數集時,集群被識別為最佳地滿足給定密度約束的子集。約束通常被設計為挑選比其他子集相對更密集的子集。例如,一些實施例采用集群的最小尺寸和集群的最大展度作為約束。圖20概念性地例示了一些實施例的用于執行密度集群的處理2000。如圖所示,該處理接收(在2005處)輸入數據集。在一些實施例中,輸入數據是頁面上的字符圖示符的坐標數據。例如,在采用密度集群來尋找左對準導引時,輸入數據是頁面上每個字的第一個字母的錨點的χ坐標。然后該處理對輸入數據集進行排序(在2010處)。一些實施例按照升序排序數據,而其他實施例按照降序來排序數據。例如,在采用密度集群來確定對準導引的情況下, 數據(X坐標值)是從最低X坐標值到最高X坐標值排序的,使得如果兩個X坐標值相等, 則它們在排序數據中是彼此緊鄰的(除非有具有相同X坐標值的其他字落在兩者之間)。 一些實施例針對排序數據生成新陣列,而一些實施例采用在下面第X章中描述的索引的間接排序陣列。接下來,處理2000確定(在2012處)是否該集合具有至少兩條數據。如果沒有的話,則處理結束,因為沒有內容用以集群。否則,處理前進以確定(在2015處)排序集合中的后續數據之間的差值集合。這種集合將具有比輸入數據集少一個的值。作為示例,當在頁面上有三個字時,差值集合中的兩個值是第一個字和第二個字的X坐標值之間的差值以及第二個字和第三個字的X坐標值之間的差值。接下來,該處理將變量d設置(在2020處)為差值集合中的最大未評估差值。例如,當字集的差值為0. 7英寸、0. 2英寸、0. 0英寸和0. 4英寸時,初始地可以將變量d設置為0. 7英寸。然后該處理在差值大于或等于d的任何地方分隔(在2025處)排序數據,以生成數據子集的集合。第一分隔將總是僅在等于d的差值處分隔排序數據,這是因為d將被設置為最大差值。在以上五個差值為0. 7,0. 2,0. 0和0. 4的數據值的示例中,分隔將生成兩個子集(第一個值在一個子集中,而其他四個值在另一個子集中)。然后該處理確定(在2030處)滿足針對要解決的問題的特定約束的子集的組合 S。在一些實施例中,約束的目的在于確定比其他子集相對更密集的子集。一些實施例采用兩個密度約束最小集群尺寸(即,子集中的值的最小個數)以及最大集群展度(即,子集中的最大值和最小值之間的最大允許差值)。在采用密度集群來確定對準導引的情況下,一些實施例采用最小集群尺寸,該最小集群尺寸是被評估的頁面或區中總行數的分數 (fraction),而其他實施例采用常數。一些實施例采用最大展度,該最大展度是字的第一字符(用于左對準)或最后字符(用于右對準)的中位字體大小的分數。一旦確定了滿足約束的子集的集合S,則該處理確定(在2035處)是否S為空。 當S為空時,處理進行到下面描述的2055。當S包括至少一個子集時,處理評估(在2040 處)S的優化函數。一些實施例采用的優化函數尋找具有滿足約束的最大子集的集合S。其他實施例采用優化函數嘗試(try)來最大化滿足約束的全部子集上的特定值(例如,子集的尺寸減去最小集群尺寸)的平方和。而其他實施例采用以上提及的優化函數之一,然后在同數(tie)的情況下采用另一個。其他實施例采用其他優化函數。接下來,處理基于優化函數確定(在2045處)是否集合S是目前最優的。當S不是最優的時,處理前進到下面描述的2055。否則,當S是最優的時,處理將S存儲(在2050 處)為已經發現的最佳集群集合。如果S非空,則此時第一次通過(其中d是最大差值) 將始終是最優的。在后續通過中,將當前S與所存儲的集群集合進行比較。然后處理確定(在2055處)是否有任何未評估的差值。一些實施例測試每一個可能的分隔來尋找最優集群集合。一些這種實施例采用下面在第X章中描述的效率技術來使得能夠進行更快且更高效的處理。當處理確定有未評估的差值時,該處理前進到以上描述的2020。否則,一旦已經評估了所有差值,則處理輸出(在2060處)當前存儲的最優集合 (或者,如果沒有找到滿足約束的集群,則是空集合)作為最終的集群集合。在確定對準導引的情況下,最終的集群集合將是具有非常接近的X坐標的字分組。然后處理結束。本領域普通技術人員將認識到,除了密度約束和最優量度,處理2000對集群施加一致性約束;即, 集群中接連的值之間的集群內差值將永遠不會等于或超過集群間差值,這是因為總是在等于或大于規定間隔最小值的所有差值處分隔數據的。B.確定對準導引如上所述,一些實施例通過如下操作來確定右對準導引和左對準導引搜索在頁面上的相同或近似相同的X坐標處開始或結尾的相關圖示符(例如,字、文本行)集,以及確定是否存在足夠的證據使得X坐標實際上是對準點。一些實施例采用相似但不是完全相同的處理來尋找左對準導引和右對準導引。圖21概念性地例示了一些實施例的用于確定左對準導引的處理2100。將結合圖 22至M來描述處理2100的一部分。圖22至M例示了識別頁面2200上的左對準導引的處理。如圖21所示,處理2100將用于密度集群的輸入數據設置(在2105處)為文檔的區域中的字的左邊緣的χ坐標。在一些實施例中,區域是頁面或者頁面的區。在一些實施例中,特定字的左邊緣是該特定字的第一圖示符的錨點的χ坐標,其針對該圖示符期望的左對準位置進行了調整。然后處理確定(在2110處)希望的集群性質。在一些實施例中,集群性質是用于以上描述的密度集群的約束。一些實施例采用兩個密度約束最小集群尺寸(即,子集中的值的最小個數)和最大集群展度(即,子集的最大值與最小值之間的最大允許差值)。在采用密度集群用于確定對準導引的情況下,一些實施例采用作為被評估的頁面或區中的總行數的分數的最小集群尺寸,而其他實施例采用常數。一些實施例采用作為字的第一個字符(用于左對準)或者最后字符(用于右對準)的中位字體大小的分數的最大展度。約束的一個示例是最小集群尺寸是區域中的文本行總數的5%,而最大展度是中位字體大小的 10%。接下來,該處理利用確定的集群性質對輸入數據應用(在2115處)密度集群,以確定可以是對準導引的X坐標值的集群。一些實施例采用如上所述的處理2000。然后處理2100確定(在2117處)是否有任何未評估的集群。當沒有集群或者已經評估了所有的集群時,處理結束。否則,該處理選擇(在2120處)一個集群(即,從集群分析輸出的多個集群之一)。然后處理將左對準導引設置(在2125處)為矩形,該矩形的最小和最大χ坐標為集群中的最小和最大值,并且其最小和最大y坐標為頁面的頂部和底部。在一些情況下,最小和最大χ坐標將是相同的,因為集群中的所有χ坐標將具有相同的值。在其他情況下,意外進入集群中的小的偏差或字將給予矩形非零寬度。圖22例示了一些實施例的具有潛在左對準導引2205的頁面2200。矩形2205的最小χ坐標由右列2215的左邊緣設置,而最大χ坐標由頁面的中間的字“tate”2210設置, 這是因為字2210的開頭足夠靠近形成右列的左邊緣的字的開頭,使得它被密度集群處理成與這些字分組在一起。然后處理2100基于對在矩形中開始的字和穿過該矩形的字的分析移除(在2130 處)不滿足約束的y坐標處的矩形。然后該處理前進到以上描述的2117。一些實施例移除字開始矩形的左側并穿過到矩形中的任何地方的矩形部分。還移除在其間不具有足夠數量的邊界字的兩個交叉字(crossing word)之間的任意y坐標處的矩形。邊界字是在矩形的邊緣中開始或在矩形的一個邊緣處開始的字。一些實施例采用如下要求,即在交叉字之間有至少五個邊界字,并且這些五個邊界字中的至少一個必須是在其文本行中的最左側,或者與其文本行中的前一個字隔開至少一個正常字間隔。一些實施例采用在Mansfield等人的題為‘、emantic Reconstruction”的美國專利公開No. 2007/0250497中描述的處理來確定字間隔和更大的間隔,該專利申請通過引用并入于此。一些實施例采用不同的要求(例如,在交叉字之間有小于或大于五個邊界字)來執行操作2130。圖23例示了頁面2200和矩形2205,其中矩形2205的交叉字被圈起。交叉字包括字2340(“r印rehenderit”)和2315 (“dolore”)以及其他。在交叉字2340與2315之間有兩個邊界字2210 ( "tate")和2325 ( "esse");然而,當對交叉字之間的邊界字的要求是三個或更大時,還將移除這部分的矩形。一些實施例僅僅移除從交叉字的最大冒進(ascent) 到最大縮進(descent)以及交叉字之間的不合格區域。其他實施例還移除可能超出對準導引的區域,例如從交叉字2330 ( “auteir”)到在它之上的邊界字2335 ( “r印rehenderit”) 的區域。圖24例示了用 于頁面2200的左對準導引2405和2410。由于頁面中央的調出部 (call-out)區域,特定χ坐標處的左對準導引沒有貫穿整個頁面2200的長度。如上所述,一些實施例采用類似于處理2100的處理來確定右對準導引。圖25概念性地例示了一些實施例的用于確定右對準導引的處理2500。如圖所示,該處理將用于密度集群的輸入數據設置(在2505處)為文檔的區域中的字的右邊緣的χ坐標。在一些實施例中,該區域是頁面或頁面中的區。在一些實施例中,特定字的右邊緣是特定字的最后圖示符的錨點的χ坐標加上該字的最后圖示符的前進矢量的χ坐標,其針對該圖示符期望的右對準位置進行了調整。然后該處理確定(在2510處)希望的集群性質。在一些實施例中,集群性質是用于以上描述的密度集群的約束。一些實施例采用兩個密度約束最小集群尺寸(即,子集中的值的最小個數)和最大集群展度(即,子集的最大值與最小值之間的最大允許差值)。在采用密度集群用于確定對準導引的情況下,一些實施例采用作為被評估的頁面或區中的總行數的分數的最小集群尺寸,而其他實施例采用常數。一些實施例采用作為字的第一個字符(用于左對準)或者最后字符(用于右對準)的中位字體大小的分數的最大展度。約束的一個示例是最小集群尺寸是區域中的文本行總數的5%,而最大展度是中位字體大小的 10%。接下來,該處理利用確定的集群性質對輸入數據應用(在2515處)密度集群,以確定可以是對準導引的X坐標值的集群。一些實施例采用如上所述的處理2000。然后該處理確定(在2517處)是否有任何未評估的集群。當沒有集群或者已經評估了所有的集群時,處理結束。否則,該處理選擇(在2520處)一個集群(即,從集群分析輸出的多個集群之一)。然后處理將右對準導引設置(在2525處)為矩形,該矩形的最小和最大χ坐標為集群中的最小和最大值,并且其最小和最大y坐標為頁面的頂部和底部。 在一些情況下,最小和最大χ坐標將是相同的,因為集群中的所有χ坐標將具有相同的值。 在其他情況下,意外進入集群中的小的偏差或字將給予該矩形非零寬度。然后該處理基于對在矩形中結尾的字和穿過該矩形的字的分析移除(在2530處) 不滿足約束的y坐標處的矩形。然后該處理前進到以上描述的2517。一些實施例移除字穿過矩形或者在矩形中開始并在矩形的右側結尾的任何地方的矩形部分。還移除在其間不具有足夠數量的邊界字的兩個交叉字之間的任意y坐標處的矩形。邊界字是在矩形的邊緣中結尾或在矩形的一個邊緣處結尾的字。一些實施例采用如下要求,即在交叉字之間有至少五個邊界字,并且這些五個邊界字中的至少一個必須是在其文本行中的最右側,或者與其文本行中的下一個字隔開超過一個正常字間隔。一些實施例采用在以上提及的美國專利公開No. 2007/0250497中描述的處理來確定字間隔和更大的間隔。一些實施例采用不同的要求(例如,在交叉字之間有小于或大于五個邊界字)來執行操作2530。
C.確定裝訂線在確定了導引之后,一些實施例接著確定區域(例如,區、頁面,等等)的裝訂線。 一些實施例采用來自導引確定處理(例如,處理2100和2500)的信息來確定區域的相關聯圖示符(例如,裝訂線)之間的未填充空白空間的分組。除了導引之外,一些實施例還采用其他對準點來確定區域中的裝訂線。圖沈概念性地例示了一些實施例的用于確定區域中的裝訂線的處理沈00。將結合圖27至四來描述處理沈00的部分。圖27至四例示了識別頁面2700上的裝訂線的處理。如圖沈所示,該處理接收(在沈05處)對準信息。在一些實施例中,該信息是由處理2100和2500確定的導引。一些實施例包括其他對準點以及導引。例如,在一些實施例中,左對準(非兩端對齊)文本中的文本行的末端被處理為右對準點。這使得即使在第一列的右邊緣處沒有發現導弓I,也能夠識別列間隔中的裝訂線。類似地,在一些實施例中將右對準文本的左邊緣或者居中文本的兩側邊緣看作對準點。然后處理沈00確定(在沈07處)是否有任何未處理的右對準點。當沒有右對準點或者已經處理了所有的右對準點時,該處理結束。否則,該處理選擇(在沈10處)一個右對準點。在一些實施例中,該處理首先識別最左的右對準點,而在其他實施例中,該處理選取隨機的右對準點。然后該處理確定(在沈15處)是否在選定的右對準點與區域的右邊緣之間存在左對準點。當沒有左對準點時,該處理前進到以上描述的沈07。否則,當在右對準點與區域邊緣之間存在至少一個左對準點時,該處理識別(在沈20處)從所選的右對準點起跨區域向右移動的下一個左對準點。這是兩個點之間的處理進行測試以確定是否有裝訂線的區域。一旦識別出右對準點和左對準點,該處理將裝訂線設置(在2625處)為如下矩形,即該矩形以右對準點作為最小X坐標且以左對準點作為最大X坐標。矩形的最小和最大y坐標是頁面的頂部和底部。圖27例示了頁面2700和將被測試為可能的裝訂線的矩形 2705。最小χ坐標是第一列的右邊緣處的右對準點,而最大χ坐標是第二列的左邊緣處的左對準點。接下來,該處理基于對穿過到矩形中以及與矩形交界的字的分析移除(在沈30 處)不滿足約束的y坐標處的裝訂線。一些實施例移除字穿過到矩形中或者在矩形中開始的任意地方處的矩形部分。還移除在其間不具有足夠數量的邊界字的兩個交叉字之間的任何y坐標處的矩形。裝訂線的邊界字是在矩形的左邊緣處結尾或者在矩形的右邊緣處開始的字。一些實施例采用如下要求,即在交叉字之間有至少五個邊界字,并且這些五個邊界字中的至少一個必須是在其文本行中的最左側或與其文本行中的前一個字隔開多于一個正常字間距,或者是在其文本行中的最右側或與其文本行中的下一個字隔開多于一個正常字間隔。一些實施例采用在以上提及的美國專利公開No. 2007/0250497中描述的處理來確定字間隔和更大的間隔。一些實施例采用不同的要求(例如,在交叉字之間有小于或大于五個邊界字)來執行操作沈30。然后該處理前進到以上描述的沈07。圖觀例示了頁面2700和矩形2705,其中圈出了矩形2705的交叉字。交叉字包括字2810( “ciIlum")和2815( ‘‘nulla,,)以及其他。在交叉字沘10與沘15之間有一個邊界字觀20( “eu”);然而,如果對于交叉字之間的邊界字的要求為兩個或更大,則還將移除這部分的矩形。一些實施例僅僅移除從交叉字的最大冒進到最大縮進以及交叉字之間的不合格區域。其他實施例還移除可能超出裝訂線的區域。圖四例示了頁面2700的裝訂線四05和四10。由于頁面中央的調出部區域,所以兩個主要列之間的裝訂線沒有貫穿頁面的整個長度。一些實施例在整個語義重構處理中采用導引和裝訂線。例如,采用裝訂線來拆分文本行并識別列。處理在下面的第IV章中進行描述。D.軟件架構在一些實施例中,以上描述的導引和裝訂線分析處理被實現為在特定機器(例如,計算機、媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式或資源受限設備) 上運行(或者存儲在計算機可讀介質上)的軟件。圖30概念性地例示了一些實施例的用于識別文檔中的導引和裝訂線的導引和裝訂線分析應用3000的軟件架構。在一些實施例中,應用是獨立應用或者集成到另一應用(例如,文檔重構應用)中,而在其他實施例中,應用可能是在操作系統內實現的。導引和裝訂線分析應用3000包括導引識別模塊3005、密度集群模塊3010和裝訂線識別模塊3015以及導引和裝訂線信息存儲設備3020。圖30還例示了文檔內容3025。導引識別模塊3005從文檔內容3025接收信息。 導引識別模塊3005分析文檔內容以識別文檔中的對準導引。識別出的導引被傳遞到裝訂線識別模塊3015以及到導引和裝訂線信息存儲設備3020以及文檔內容3025。在一些實施例中,導引識別模塊3005執行處理2100和2500的一些或全部。導引識別模塊3005還將信息傳遞到密度集群模塊3010,并從密度集群模塊3010 接收信息。密度集群模塊3010接收來自導引識別模塊3005和/或導引和裝訂線信息存儲設備3025的輸入數據,并對輸入數據執行密度集群以確定潛在的導引。在一些實施例中, 密度集群模塊3010執行處理2000的一些或全部。裝訂線識別模塊3015接收來自導引識別模塊3005和文檔內容3025的信息。裝訂線識別模塊分析接收到的信息以識別文檔中的裝訂線。所識別出的裝訂線被傳遞到導引和裝訂線信息存儲設備3020以及文檔內容3025。在一些實施例中,裝訂線識別模塊3015 執行處理沈00的一些或全部。在一些實施例中,由以上描述的模塊或其他模塊執行的處理的結果被存儲在電子存儲設備中(例如,作為文檔對象模型的一部分)。文檔對象模型然后可以用于在電子顯示設備(例如,手持式設備、計算機屏幕,等等)上顯示文檔,使得用戶能夠瀏覽文檔和/或與該文檔交互(例如,通過觸摸屏、游標控制設備,等等)。IV.確定布局和流文檔通常具有隱含的結構和內容流。具體而言,在一些情況下,字符(和內嵌圖形)的有序序列構成字,字的有序序列構成文本行(或者用連字符來跨接文本行),文本行的有序序列構成段落,段落的有序序列構成列(或者跨接列),列的有序序列構成布局,以及布局的有序序列構成文檔的章節。當在電子文檔的文件格式中沒有提供這種結構時,該結構先前不能被軟件訪問。盡管僅僅瀏覽文檔不必要求文檔結構,但是用于編輯文檔、導入 (import)文檔、搜索文檔、設計文檔樣式或者以其他方式重新計劃文檔的應用卻需要了解文檔結構和流,以正常地工作。本發明的一些實施例提供了用于確定文檔或文檔區域的布局和流的方法。它包括確定語義分級(例如,文檔的字、行和段落),以及布局性質,例如列和列如何放在一起用于對文檔的預期閱讀。在一些實施例中,處理的目的是識別人將從頭到尾閱讀文檔的順序。圖31概念性地例示了一些實施例的用于確定文檔的布局和流的處理3100。將結合圖32來描述處理3100。圖32例示了針對具有兩列文本的文檔的頁面3200確定的各種布局和流信息的序列。在圖32中,將認識到頁面3200的內容不是重要的,而行、段落等才是重要的。如圖31所示,處理3100接收(在3105處)文檔的一部分。在一些實施例中, 該部分是整個文檔或者章節、頁面或區。然后該處理識別(在3110處)接收到的文檔中的文本行。這包括識別共享公共基線的字符以及在必要時將預備(preliminary)行合并到一起(例如,下標和上標)。圖 32例示了對行3205和3210的識別。下面將在第A節中進一步對一些實施例的行識別處理進行詳細描述。接下來,該處理識別(在3115處)文本中的字。一些實施例采用如在以上提及的美國專利公開No. 2007/0250497中描述的差值集群來識別文本中的字。圖32例示了對頁面3200上的字的識別,包括來自行3205的字3215( “Lorem")和來自行3210的字 3220( “amet”)。下面將在第B節中進一步詳細描述字識別處理。然后該處理拆分(在3120處)文本斷開處的文本行。圖32例示了行3205被拆分為行3225和3230,而行3210被拆分為行3235和3240。下面將在第C節中進一步詳細描述一些實施例的行拆分處理。在拆分了行之后,處理將文本行放置(在3125處)成段落。圖32例示了在頁面 3200上識別出的段落3245和3250。下面將在第D節中進一步詳細描述段落識別處理。最后,處理將段落放置(在3130處)成列和布局。圖32例示了在頁面3200上識別出的列3255和3260。下面將在第E節中進一步詳細描述列和布局識別處理。一些實施例不一起執行處理3100的全部操作。相反,一些實施例在處理3100的操作之間執行其他文檔重構處理。例如,一些實施例確定文本行和文本中的字,但是然后在拆分文本行之前識別導引和裝訂線。A.初始行識別如上所述,在一些實施例中,必須識別文本行。由于特定文本行中的每個字符不必然總是共享公共基線,所以一些實施例試圖基于兩行中的字符將要被讀為同一文本行的一部分(例如,上標和下標)的事實而將多個行合并到一起。圖33概念性地例示了一些實施例的用于識別和合并文本行的處理3300。將結合圖34和35來描述處理3300。圖34例示了具有六個交疊文本行的分組3405至3430的頁面3400,而圖35例示了根據本發明一些實施例對這些文本行分組的合并。如圖33所示,處理接收(在3305處)文檔的一部分。在一些實施例中,該處理是文檔的頁面或者頁面的區,等等。然后該處理確定(在3307處)文檔部分中是否有任何字符。當沒有字符時,處理結束。否則,處理將共享公共基線的字符關聯(在3310處)為預備文本行。在一些實施例中當字符具有相同的y坐標錨點時,這些字符共享公共基線。通常,關聯共享公共基線的字符將標準文本行分組到一起。一些實施例采用小閾值,使得預備文本行中的y坐標錨點不必精確地相等,但是必須在彼此的小閾值內。接下來,處理識別(在3315處)垂直交疊的文本行分組。在一些實施例中,當第一行的界定矩形在y坐標值上與第二行的界定矩形交疊時,這兩行垂直交疊。圖35例示了頁面3400,該頁面3400具有六個垂直交疊文本行的分組行3505和3506,行3510和3511, 行 3515 和 3516,行 3520,3521 和 3522,行 3525 和 3526 以及行 3530 和 3531。行 3520 與行 3522關聯成一個分組,這是因為這兩行都與行3521交疊,盡管它們彼此并不交疊。盡管沒有水平交疊,但是由于航3530和3531垂直交疊,所以在一些實施例中它們也初始地被分組到一起。然后該處理選擇(在3320處)未評估分組,并將該分組分隔(在3325處)成多個部分,不同部分的文本行之間沒有水平交疊。在一些實施例中,當第一文本行的界定框的 X坐標與第二文本行的界定框的X坐標交疊時,這兩個文本行水平交疊。例如,此時分隔出行3530和3531,因為它們沒有水平地交疊,并由此將不會被認為不是同一行。一些實施例在文本行的開頭和結尾處擴展對水平交疊的量度達小的距離(例如,空格字符的一半),使得合并行的開頭或結尾處的偏置(offset)字符(例如,下標和上標)。例如,在行3510與 3511之間沒有水平交疊,但是它們不會被分隔開,這是因為行3510的結尾離行3511的開頭足夠緊密。在分隔了所選的分組之后,該處理從該分組中選擇(在3330處)未評估的部分, 并從頂部到底部地排序(在3335處)該部分中的行。由此,如果選擇了具有行3520至3522 的所選部分,則這些行將被排序如下,即第一個是行3520,第二個是行3521以及第三個是行3522。各種實施例按照冒進、縮進、基線或者行的垂直位置的其他量度來對行進行排序。然后該處理選擇(在3340處)該部分中的最頂部的未評估行。接下來,該處理選擇(在3345處)所選行中的第一個(對于從左向右的語言來說是從左側起閱讀)未評估字符。該處理確定(在3350處)是否可以將所選字符合并到下一行。當所選字符沒有顯著地與下一行中的任何字符水平地交疊時,一些實施例允許將字符合并到下一行。一些實施例允許字符之間的一定小量的水平交疊。對于從左向右的語言來說,一些實施例允許要向下合并的字符的左側比要向下合并的字符的右側有更小的交疊,以考慮對于偏置字符的公共間距調整。此外,一些實施例允許在交疊字符的原始插入順序相鄰時有任意量的交疊。在一些實施例中,插入順序是在頁面上繪制字符的順序。通常(盡管不總是),字符是按照它們要被閱讀的順序來繪制的,因此當兩個垂直和水平交疊的字符在插入順序上相鄰時,可能它們是要在一起閱讀的。當處理確定所選字符可以被合并到下一行時,該處理將所選字符合并(在3355) 到下一行。然后該處理前進到下面描述的3365。否則,當所選字符不能被合并時,該處理將所選字符保持(在3360處)在所選行中。接下來,處理確定(在3365處)所選行是否包括更多字符。當當前所選行中有更多字符時,該處理前進到3345以選擇該行中的下一個未評估字符。否則,當已經評估了該行中的所有字符時,處理確定(在3370處)當前部分是否包括更多行。當在當前所選部分中有更多行時,該處理前進到3340以選擇下一個未評估的行。否則,當已經評估了部分中的所有行時,處理確定(在3375處)所選分組是否包括更多部分。當在當前所選分組中有更多部分時,處理前進到3330以選擇另一個部分并合并該部分中的行。否則,當已經評估了該分組中的所有部分時,該處理確定(在3380處) 在文檔部分中是否有任何更多的分組要評估。當有更多分組時,該處理前進到3320以選擇另一個分組。否則,當已經評估了所有分組時,針對文檔部分的行合并完成,該處理結束。 圖35例示了在一些實施例中的針對頁面3500的行合并的結果。行3506可以向下合并到行3505,使得行3505現在包括來自行3506的上標“m”,而行3506為空并由此被移除。盡管在行3510與3511之間沒有水平交疊,但是行3510的結尾與行3511的開頭足夠緊密使得它們不會被分隔開,并且行3510的所有內容可以被向下合并到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中描述的差值集群,來基于字內的字母之間以及字之間的間距來識別字。在一些實施例中,差值集群還提供關于段間隔、列間隔等的信息。一些實施例采用在下面第X章中描述的存儲器和處理效率技術來執行差值集群。B.利用差值集群來識別字和間隔圖36概念性地例示了一些實施例的用于執行差值集群分析的處理3600。很多形式的集群分析要求了解分組/集群的個數,因為可能存在多個級別/分級的集群。例如,當采用集群分析來分組天體時,對集群個數的規定確定集群分析是否將在恒星、太陽系、星系或者超星系團的級別上來分組天體。然而當采用集群分析來尋找內容元素之間的結構性關系時,例如在很多情況下不了解分組個數。例如,在文本的頁面的情況下,不能假設圖示符構成字、字組合形成行以及多組行形成段落,這是因為文檔可能具有兩個或更多列文本,使得文本的給定初始行可能包括兩個或更多個段落的部分。在一些實施例中,集群分析是一組技術,它們可以被應用到數據點集合以將點分組成集群,集群中的點相比于其他集群中的點彼此更靠近。在一些實施例中,集群分析應用到表示諸如圖示符、字和文本行的對象之間的水平和垂直間距的數據點。例如,一些實施例采用下面將描述的k均值(k-means)集群分析。以表示空間間距的個數集(Pl、…、pN)以及k (集群個數)的已知值開始,采用該技術來將個數分隔成k個集群(V·· Ck,其由形式為 Cj= {Pi|aj<Pi<aj+l}的不等式來限定,其中 、…、%+1是增大的序列。在應用k均值技術之前,按照大小來排序差值Pi+1_Pi,并且取k-Ι個最大差值作為分隔點。例如,如果 Pi+1-Pi是k-Ι個最大差值之一,則pi+1處于與Pi不同的集群中,并且pi+1是連續值…之一。 然后應用k均值集群分析來重復精化(refine)集群。k均值技術包括取每個集群中的個數的平均值, 然后通過將Pi與最緊密的計算平均值相關聯來將它重新分布到集群中。重復執行該技術直到不會給集群或其平均值帶來變化為止。在一些實施例中,本文公開并稱為“差值集群”的技術用來確定包括給定源內容的內容元素之間存在的結構性關系的級別個數,以及/或者這種級別之間的一個或多個分級關系,還有可以用于確定內容元素是否與每個所確定的級別中的另一內容相關的一個或多個特性。在一些實施例中,差值集群與其他技術一起采用k均值技術。在圖36所示的示例中,采用差值集群分析來分析內容元素位置之間的差值(間距)。在一些實施例中,通過分析內容元素之間的間距,可以至少部分地利用間距的分組數據來分組內容元素。在一些實施例中,單獨地分析間距的每個方向分量。例如,采用對水平分量的差值集群分析來在字符間距、字間距和列間距之間進行區分。在一些實施例中,可以采用對垂直分量的差值集群分析來區分行間距、段落間距和文本框間距。處理3600概念性地例示了針對單個方向分量的差值集群分析。該處理可以再次用于分析一個或多個附加方向分量。在一些實施例中,沿著一個或多個維度執行差值集群分析的結果被組合到一起,以確定一個或多個級別處的內容元素之間的結構性關系。如圖36所示,處理3600接收(在3605處)文檔的一部分。然后該處理識別(在 3610處)文檔中的元素的定位。在一些實施例中,元素包括字符、圖示符、圖像、行、圖畫、 框、單元、頁邊以及/或者各種其他內容元素。在一些實施例中,元素的定位包括確定一個或多個定位坐標分量和/或將其分配到元素。在一些實施例中,按順序組織元素的定位。例如,當分析字符的水平間距時,針對每行字符按照水平坐標增大的順序組織字符。在一些實施例中,希望元素的定位坐標值與元素之間的間距相關聯,并且針對元素的寬度/長度來補償定位值。例如,當針對元素的組織順序中的第η個位置處的元素確定補償水平坐標(χ 坐標)值時,采用以下公式Xfn ^Xn-Ywi其中,V η是補償定位坐標值,Xn是原始定位坐標值,而Wi是第i個位置的元素的寬度。在一些實施例中,元素的寬度是基于它所表示的字符、字體大小以及字符的樣式, 等等。一些實施例通過采用已知的針對每個字符的錨點坐標并以每個特定字符的寬度來調整該特定字符的這些坐標,來確定補償定位坐標值。接下來,該處理確定(在3615處)相鄰元素的定位之間的一階差值。在一些實施例中,當具有至少一個相同定位坐標分量值的兩個元素在至少一個其他定位坐標分量值中彼此順序緊鄰時,一個元素與另一個元素相鄰。例如,如果兩個圖示符屬于同一文本行并且兩者之間沒有其他圖示符,則這兩個圖示符彼此相鄰。在一些實施例中,當兩個元素的對應定位坐標分量值之間的差值低于一限值或者在一個范圍值內時,這兩個元素具有至少一個相同的定位坐標分量。在各種實施例中,當兩個元素按照與所識別出的元素定位相關聯的順序和/或組織而彼此緊鄰時,一個元素與另一個元素相鄰。在一些實施例中,定位之間的一階差值是經寬度/長度補償的定位坐標值之間的差值。例如,在一些實施例中,當確定補償水平坐標的組織順序中第η個和第η+1個位置中的相鄰元素的補償水平坐標(χ坐標) 之間的差值時,采用以下公式^JTfl
在一些實施例中,一階差值與內容中的圖示符之間的間隔間距相關聯。 接下來,該處理3600對一階差值進行排序(在3620處)。在一些實施例中,組織一階差值包括按照升序對一階差值進行排序。在一些實施例中,組織一階差值包括將權重值分配給一階差值中的一個或多個,以及至少部分地通過采用權重值來組織一階差值。例如,在一些實施例中,給定所用的字體及其字體度量(包括大小、缺省字母間距和與字體文本一起存儲的字距調整(kerning)值表),針對每個特定圖示符對以期望的圖示符間距來分割實際的圖示符間距。實際間距與期望間距之比按照增大的值來排序,并且在差值集群方法的其余部分采用該比值來替代一階差值。然后該處理確定(在3625處)排序的一階差值之間的二階差值。例如,當確定一階差值的組織順序中第i個位置和第i+Ι個位置中的一階差值之間的二階差值時,采用以下公式A2Xi=AX(R1)-AXw其中,Δ 2Xi是第i個二階差值,ΔΧω是排序的一階差值的第i個位置中的一階差值,而ΔΧ( +1)是同一排序的一階差值的i+Ι位置中的一階差值。在一些實施例中,二階差值與圖示符的間距之間的差值相關聯。接下來,處理3600通過分析二階差值來確定(在3630處)集群級別的個數。在一些實施例中,分析二階差值包括組織所確定的二階差值。在一些實施例中,組織二階差值包括按照升序排序二階差值和/或按照增大的二階差值的順序繪制二階差值。在一些實施例中,組織二階差值包括將權重值分配給一個或多個二階差值。在一些實施例中,組織二階差值包括將二階差值分成一個或多個分組。在一些實施例中,二階差值各自被分類為分組間差值或分組內差值。分組內差值與相對較小的二階差值相關聯,并且可以表示同一集群分組內的一階差值的二階差值。分組內差值的一個示例是將期望在同一字中的字母之間的字符寬度補償間距中發現的相對小變化。分組間差值與相對較大的差值相關聯,并且可以表示不同集群分組之間的一階差值的二階差值。分組間差值的一個示例是一方面兩個字之間的間距與另一方面同一個字中的兩個字母之間的間距之間的相對大的差值。在一些實施例中,通過對有序二階差值應用2均值集群分析來實現將二階差值分類成分組內值和分組間值;具體而言,按升序取(P1,…,PN)作為M2X1,…,Δ2ΧΝ}。類似地, 可以針對有序二階差值應用足以區分兩個集群的數據值的任何其他集群分析技術。然后分組內差值在第一集群C1= {pja^p^aj中,而分組間差值在第二集群C2= {Pi | a2 ^ Pi < a3}中,其中< a2 < a3。在一些實施例中,內容元素基于如上所述分析的它們的空間關系而被確定要組織到的級別的個數比在差值集群分析中找到的分組間差值的個數多一個。 例如,當存在兩個分組間差值時,結構性級別的個數為三個。舉一個簡單的例子,考慮形成包括單行文本的字的字符。x-x方向上的字符之間的間距中的一階差值將產生字符間距與字間距之間的二階差值(一個分組間差值),指示結構的兩個級別(字和行)。當文本在兩列中時,將針對總共兩個分組間差值檢測(字間距與列間距之間)進一步的二階差值,指示 X方向上的三個結構性級別(字、行和列)。在一些實施例中,重復y方向上的分析并組合結果在可應用于特定內容時將識別在字符與字符分組之間的間距中出現的任何進一步結構性級別(例如,段落,等等)。
然后該處理確定(在3635處)每個集群級別的特性。然后處理結束。在一些實施例中,確定特性包括確定哪個一階差值(和/或什么范圍的一階差值)與哪個集群級別相關聯。在一些實施例中,確定特性包括計算與和集群級別相關聯的一階差值相關聯的統計值。例如,通過確定與集群級別相關聯的一階差值的部分的平均值、最小值和最大值,可以確定內容中的圖示符之間的平均、最小和最大間距。令L為集群級別的個數。在一些實施例中,通過計數二階差值的第二集群中的點的個數并加1來計算L。接著,可以識別與每個級別相對應的一階差值的分組,并且例如可以按照以下兩種方式之一來識別每個級別處的補償V值的集群。一種可能是對一階差值執行L均值集群分析。所得的L個集群是與每個級別相對應的一階差值的分組。接著,通過將一階差值的第(m+1)個、第(m+幻個…和第L個集群的點的個數加1來計算級別m處的Xn'的集群的個數Km。最后,對補償Xn'值執行Km均值分析,以生成級別m處的Km個集群。第二種可能是在初始計算每個一階差值Δ Xn = Xn+1' -Xn'以將其值與索引η存儲在一起的時候,其中η可以用于識別相減以生成差值的連續X值對中的任一個。將該值和索引引用存儲在單個“一階差值”數據結構中。類似地,當初始計算每個二階差值時,將其值與索引引用存儲在一起,索引引用可以用于識別其值被相減以生成差值的連續“一階差值”數據對中的任一個。現在,針對位于第二集群中的每個二階差值(即,針對每個分組間差值),采用其索引引用來識別一階差值中的分隔點。這意味著索引識別被分隔成單獨的集群的一階差值對。按照這種方式進行分隔得到與原始數據中的集群的L個級別相對應的一階差值的L個集群。現在,級別η處的Xn值集群被識別如下針對一階差值的第(m+1)個、 第(m+幻個…和第L個集群中的每個一階差值數據,采用其索引引用作為Xn'值中的分隔點ο圖37例示了差值集群的示例。在一些實施例中,圖37的示例與圖36的處理3600 相關聯。一階差值3705、3710和3715的分組按照從最低值到最高值的順序在與一階差值相關聯的行上繪制。每個點與一個差值(例如,從文本字符或其他圖示符到相鄰的文本字符或其他圖示符的距離)相關聯,并且在圖37中,點沒有在彼此之上疊置以清楚地例示該示例。在所示示例中,數據與圖示符之間的水平間距相關聯。通過排序一階差值,該示例例示了一階差值3705、3710和3715的三個分組。一階差值分組3705與構成字的圖示符之間的間距相關聯。一階差值分組3710與字之間的間距相關聯。一階差值分組3715與列之間的間距相關聯。對于每對相鄰一階差值,二階差值(即,一個一階差值與相鄰一階差值之間的差值)被確定并按照升序在與二階差值相關聯的行上繪制。二階差值分組3720、3725 和3730各自包括與二階差值相關聯的一個或多個點。在一些實施例中,點3725是包括二階差值分組的相關聯的二階差值點的分組的成員。在一些實施例中,點3730是包括二階差值分組的相關聯二階差值點的分組的成員。在一些實施例中,3720被識別為一個集群,而3725與3730 —起被識別為第二個集群。 同一單個一階差值分組內的一階差值之間的二階差值(分組內差值)被包括在二階差值分組3720中。例如,在文本文檔中,通常字內或者在不同對字之間的間距中的字符之間的字符寬度補償間距僅略微變化。分組3705和3710中的分組間相鄰點之間的二階差值被包括在點3725中。分組3710和3715中的分組間相鄰點之間的二階差值被包括在點3730中。 由于在該示例中存在兩個分組間二階差值,所以有2加1個(3個)分組級別(在本例中為,字、列中的文本行的句子或其部分、以及列)。通過確定分組3705中的一階差值的最小值和最大值,可以確定構成字的圖示符之間的最小間距和最大間距,并且類似地可以采用分組3710和3715來分別確定字間距和列間距。在一些實施例中,采用與每個分組級別相關聯的最小和最大間距來例如通過識別包括字的字符分組相應地分組內容元素(例如,圖示符),將字分組成列中的文本行,等等。 通過采用從集群分析確定的數據,將圖示符分組成確定的分組級別。可以相對于任意內容快速地且自動地執行分析,這部分是由于不必事先了解在分析的內容或其他元素集合的結構中有多少分組級別。無論分組級別的個數如何,僅在兩個處理步驟中確定級別個數。通過確定分組3705中的一階差值的平均值,可以確定構成字的圖示符之間的平均間距。類似地,可以針對構成字的圖示符確定其他統計量。類似地,可以采用對分組3710和3715中的一階差值的分析來確定與字間距和列間距相關的統計量。C.拆分行一些實施例在生成字和段中斷信息之后拆分文本行。例如,在文本行跨多于一個列的情況下拆分文本行,因為兩個(或更多個)部分中的文本可能不打算在一起閱讀。一些實施例采用從如上在第III節中所述的處理得出的導引和裝訂線信息以及來自差值集群的信息(例如,段間隔,等等),來拆分文本行。圖38概念性地例示了一些實施例的用于拆分文本行的處理3800。將結合圖39來描述處理3800的部分。圖39例示了如下序列,該序列示出了識別應在哪里拆分頁面3900 中的行。如圖38所示,處理3800接收(在3805處)文檔部分的文本行、導引和裝訂線信息以及段中斷信息。在一些實施例中文本行信息是處理3300的輸出,而在一些實施例中導引和裝訂線信息是處理2100、2500和2600的輸出。段中斷(或段間隔)信息是如在以上提及的美國專利公開No. 2007/0250497中以及在以上的一些實施例中描述的差值集群的輸出之一。在一些實施例中,文本部分是整個文檔、章節、頁面或頁面的區。接下來,該處理基于接收到的文本行的基線的y坐標來對接收到的文本行進行排序(在3810處)。在頁面的底部開始,處理選擇(在3815處)最底部的未評估文本行,并識別(在3820 處)所選行中的潛在拆分。一些實施例將潛在拆分定義為行中的兩個字之間的任意間隔,其(i)是如由差值集群定義的段間隔,或者(2)具有通過其的導引或裝訂線。 其他實施例針對潛在拆分僅采用一個或另一個或者不同定義。然后該處理確定(在3822處)是否識別了任何潛在拆分。當沒有識別出拆分時, 處理前進到下面描述的3845。否則,該處理從當前選擇的文本行選擇(在3825處)潛在拆分。然后該處理確定(在3830處)是否潛在拆分的χ區間與來自前一文本行的任何潛在拆分的χ區間交疊。評估的第一個文本行將不具有前一文本行,由此將不具有交疊的潛在拆分。在當前所選的潛在拆分的χ區間不與來自前一行的潛在拆分的χ區間交疊時,處理前進到以上描述的3822。否則,該處理關聯(在3835處)交疊的潛在拆分。然后處理前進到以上描述的3822。當沒有更多的未評估潛在拆分時,該處理確定(在3845處)是否有更多的行要評估。當還有更多行時,該處理前進到3815以識別下一行中的潛在拆分并測試它們的交疊。
當已經評估了所有行時,已經識別和關聯了文檔部分中的所有潛在拆分。然后該處理執行若干操作來消除假肯定(false positive)(即,實際上不應拆分文本行的潛在拆分)。處理確定(在3847處)是否識別出任何潛在拆分分組。當沒有識別出來時,處理結束。否則,該處理選擇(在3850處)一個相關聯的潛在拆分的分組,并定義(在3855處) 完全通過所選分組的潛在拆分的矩形條。在一些實施例中,該條具有作為所選分組中的所有潛在拆分的χ區間的相交部的χ區間(即,兩個條的潛在拆分幾乎不交疊的條的χ區間將非常窄)。圖39例示了具有若干文本行的頁面3900。大多數文本行在兩列之間被拆分。然而,任一列中的基線是相同的。因此,在行拆分處理之前,來自第一列的每一行將與來自第二列的一個行處于同一行中。圖39還例示了相關聯的潛在拆分的四個矩形條3905、3910、 3915 和 3920。在定義了所選分組的矩形條之后,該處理確定(在3860處)是否該條跨少于閾值個數的文本行。跨一個或僅幾個文本行的條不可能代表閱讀中的實際拆分,但是可以是一行或其他非中斷間隔內的制表位(tab)。有時段間隔是在字之間的間隔由于兩端對齊的文本而非常大的情況下通過差值集群發現的。當條跨少于閾值個數的行時,該處理從潛在拆分列表中移除(在3865處)該分組,并將不會在這些定位處拆分文本行。然后該處理前進到下面描述的3890。在頁面3900上,移除構成條3910和3920的潛在拆分,這是因為它們沒有足夠的拆分作為可能的列中斷。更可能的是,這些潛在拆分是制表位或者大的字間隔。當條跨至少閾值個數的行時,該處理確定(在3870處)當前條是否在另一個條的閾值距離內。一些實施例僅僅查看已經被測試并且在確定另一個條是否在當前條的閾值內時還沒有被移除的先前條。在當前條處于另一個條的閾值距離內時,該處理移除(在3875 處)具有垂直更短條的分組(在一些情況下,其中行都具有相同的尺寸,這是跨更少文本行的條)。然后該處理前進到下面描述的3890。頁面3900的條3905和3915都適合跨足夠的文本行來通過操作3860。然而,在一些實施例中,條彼此太靠近以至于不能兩者都保留。因此,移除構成條3905的潛在拆分的分組,這是因為3915是兩個條中較長的一個。在一些實施例中,該處理防止列表項目符號 (bullet)或編號與它們所指代的項目拆分開,以及其他潛在有問題的拆分。在當前條沒有與另一個條太近時,該處理確定(在3880處)該條是否包括不是段間隔的在一行中的閾值個數的后續潛在拆分。在一些實施例中,可以識別字邊緣意外對準的導引和/或裝訂線。這尤其可能出現在文本按照等寬字體(例如,Courier)顯示的情況下。當條至少包括該閾值個數的后續非段間隔潛在拆分時,該處理從潛在拆分列表中移除 (在3885處)該分組,并將不在這些定位處拆分文本行。接下來,該處理確定(在3890處)是否有更多的潛在拆分分組還沒有相對于各種閾值要求進行測試。當有更多分組時,該處理前進到3850以選擇和評估下一個潛在拆分分組。否則,當已經評估了所有分組時,該處理利用還沒有被移除的任何拆分來拆分(在3895 處)文本行。然后處理結束。在針對頁面3900例示的情況下,將被采用的拆分僅是隔開兩列文本的中央處的拆分。盡管處理3800被例示為采用三個具體測試(操作3860、3870和3880)來移除潛在拆分分組,但是一些實施例僅采用它們中的子集,而其他實施例采用未示出的其他測試來清除不予考慮的潛在拆分。D.段落識別在一些實施例中,一旦已經合并和拆分了文本行,則將這些行分組成段落。圖40 概念性地例示了一些實施例的用于將文本行分組成段落的處理4000。將結合圖41來描述處理4000的部分。圖41例示了對文檔的頁面4100上的段落的識別。如圖40所示,處理 4000接收(在4005處)文檔一部分的文本行。在一些實施例中,在執行處理4000之前, 已經合并(例如,通過處理3300)和拆分(例如,通過處理3800) 了文本行。在一些實施例中,文檔部分是整個文檔、文檔的章節、頁面或者區,等等。該處理確定(在4007處)文檔部分中是否有任何行。當沒有時,處理結束。否則, 從接收到的文檔部分的頂部開始,該處理選擇(在4010處)文檔部分中的第一個未評估文本行。然后該處理確定(在4015處)在所選行下面是否有多于一個文本行。在一些實施例中,為了操作4015,這些行必須在針對所選行下面的要考慮的更低行彼此的特定垂直距離內。一些實施例要求至少三個文本行來判斷文本行是否屬于同一段落。在一些實施例中, 由于為了進行比較必需兩個間距(即,第一與第二文本行之間的間距以及第二與第三文本行之間的間距),所以有該要求。當所選文本行下面有兩個或更多個行時,該處理前進到下面描述的4030。否則,當所選文本行下面有少于兩個行時,該處理將所選行自己放置(在4020處)在一個段落中。 然后該處理確定(在4025處)文檔部分中是否有更多行。當沒有更多行時(例如,當文檔部分中只有一行文本時),該處理結束。否則,當有更多行時,該處理前進到4010并選擇下一個文本行。在4015處,當在4010處選擇的行(S卩,當前段落中的第一個行)下面有兩個或更多個文本行時,該處理識別(在4030處)所選文本行下面的下兩個行。然后該處理確定 (在4035處)間距和對準是否在三個行之間一致。在一些實施例中,該確定包括檢查從第一個行到第二個行的垂直距離是否與從第二個行到第三個行的垂直距離相同。一些實施例采用文本行的基線來確定垂直間距。在一些實施例中,如果一個行開始縮進或者在其他行的左側結尾,則識別對準差值,由此通知段落可能的開始或結尾。當間距和對準不一致時,該處理應用(在4040處)啟發式規則以確定是否向具有所選第一行的段落添加任一個識別出的行。例如,在一些實施例中,當頭兩行緊密在一起而第三行向下更遠離時,頭兩行被放置在一個段落中,而第三行是下一個段落的開始。類似地,在一些實施例中,當第一行更遠離第二和第三行時,第一段落是單行段落,并且在第二行開始下一段落。在一些實施例中采用類似的規則用于行之間的對準差值。在應用了啟發式規則之后,該處理前進到4010以選擇下一個未評估文本行(即,還未被分配到一個段落的下一行),并開始一個新的段落。當三個行之間的間距和對準一致時,該處理將所有三個行放置(在4045處)在同一段落中。一些實施例還識別段落的間距和對準性質。例如,一些實施例將段落識別為左對準、右對準、兩端對齊、居中,等等。一些實施例留下開放的多個可能性(例如,具有縮進的第一行、所有三行右對準或者非常靠近且下兩行左對準的段落可能是左對準、右對準或者兩端對齊三者中的任一個)。在識別了新段落的開始的初始階段之后,處理4000試圖向段落添加行。在一些實施例中,行添加是基于從構成段落的開始的三個行確定的間距和對準性質。在其他實施例中,當添加不與段落的間距和對準性質沖突的行時,基于任何進一步事實來精化間距和對準性質。接下來,該處理確定(在4047處)文檔部分中是否有任何更多的行。當沒有更多行(例如,文檔部分恰具有三個行)時,處理結束。否則,該處理識別(在4050處)文檔部分中的下一個文本行。然后該處理確定(在4055處)在當前段落與識別出的文本行之間是否有間距或對準失配。當有失配時,處理結束該段落并前進到以上描述的4010。在這種情況下,最近失配的行將是在4010處選擇的行。否則,當間距和對準一致(line up)時,該處理將該行添加(在4060處)到當前段落中。然后處理前進到以上描述的4047。在一些實施例中,當識別出的下一個文本行與段落的一個性質(例如,兩端對齊)不適合時,發現對準失配。類似地,在一些實施例中,如果段落中的最后一行與下一行之間的間距相比于段落的間距增大,則發現間距失配。一些實施例采用其他停止條件(例如,得出識別出的行不要被添加到段落中的條件)。例如,一些實施例識別是否識別出的行中的第一個字將適合在左對準段落的上一行的結尾處的空白空間中。當是這種情況時,假設新的一行是下一段落的部分,這是因為如果該行是當前段落的部分的話,字將處于上一行的結尾處的空白空間中,而非開始一個新的行。 類似地,一些實施例將縮進識別為表示一個新的段落。一些實施例的第三個條件是是否識別出的行是統一樣式的(例如,全加粗或者具有更大字體大小)且不同于先前行中的任何字符的樣式。一旦完成了處理4000,則識別出文檔部分中的所有段落,并且將所有文本行分配給一個段落。一些實施例然后采用段落來識別列和布局。圖41例示了具有四個段落的頁面4100。對該頁面(該頁面是文檔部分)應用處理4000使得識別出段落4105、4110、4115和4120。一些實施例的處理將開始自把頭三個行分組到一起,然后添加第四和第五行,直到第六行4125具有間距和對準失配為止,從而在段落4105中留下五個行。然后該處理從第六行開始,并注意到下面兩行之間的間距和對準失配。因為與第七行和第八行彼此相比第六行更遠離它們,所以第六行就是整個段落4110, 并且下一個段落4115從第七行開始。類似地識別段落4115和4120。E.列和布局識別一些實施例在識別出段落之后將段落放置成列和布局。在一些實施例中,列是段落的垂直有序分組,其中文本連貫地從頂部到底部閱讀。一些實施例中的布局是非交疊列的集合,并且在一些實施例中的線性布局是列的水平有序分組,其中文本連貫地從最左列的頂部到最右列的底部閱讀。例如,一些實施例將具有未分段文本行且沒有頁眉或頁腳的單個頁面分類為具有一列的單個線性布局。圖42概念性地例示了在一些實施例中用于識別文檔一部分中的列和布局的處理 4200。將結合圖43至46來描述處理4200。圖43和44例示了兩個不同頁面4300和4400 上的段落,而圖45和46分別例示了針對兩個頁面4300和4400的流圖的生成。如圖42所示,處理4200接收(在4205處)文檔部分的段落的信息。在一些實施例中,該文檔部分是整個文檔、文檔的章節、頁面、區,等等。在一些實施例中,采用以上描述的處理4000來確定段落信息。然后該處理確定是否有任何段落要選擇。當沒有時,處理退出ο否則,該處理選擇(在4210處)一個段落。在一些實施例中,文檔部分中段落是在左上開始按順序選擇的,而在其他實施例中段落是按照隨機順序選擇的。接下來,該處理計算(在4215處)內順序(in-order)、外順序(out-order)、左順序和右順序,以及伴隨這些值中的一個的段落集合。在一些實施例中,通過采用集合B(p) 來計算段落P的外順序。集合B(p)初始地是文檔部分中在段落ρ下面水平地與ρ交疊 (即,與χ坐標交疊)的所有段落。例如,圖43例示了具有包括段落P 4305在內的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)為㈧}。一些實施例然后繼續到初始地在集合B (ρ)中的對ρ的下一個最靠近段落,并從 B(P)中移除在該下一個最靠近段落下面且與之水平地交疊的任何段落。其他實施例繼續到留在集合B(p)中的對ρ的下一個最靠近段落,并且從B(ρ)中移除與該段落水平地交疊的任何段落。無論哪種方式,在圖43的示例中,段落P 4305的集合B(p)是㈧}。然后ρ的外順序是集合Β(ρ)的基數(cardinality)(即,元素個數)。這針對Β(ρ)中的每個段落重復。 因此,在這種情況下,段落P 4305的外順序是1。作為具有大于1的外順序的段落的示例, 針對段落R 4315,集合B (R)是{S,X},因此段落R 4315的外順序是2。在一些實施例中,類似于外順序,通過采用集合A(p)來計算段落ρ的內順序。集合A(p)初始地是文檔部分中在段落ρ上面水平地與ρ交疊的所有段落。將最靠近ρ的段落選擇為段落q,并從A(ρ)中移除與段落q水平地交疊的段落。這然后針對A(p)中的每個段落重復。在頁面4300的示例中,用于段落P 4305的集合A(p)是空集合,而用于段落 R 4315的集合A(p)是{0,W}。段落ρ的內順序是集合A (ρ)的基數(即,元素個數)。在一些實施例中,還采用集合L (ρ)(采用相同的移除規則,在ρ左側且與ρ垂直交疊的段落)和集合R(P)(采用相同的移除規則,在P右側且與P垂直交疊的段落)類似地計算段落P的左順序和右順序。一些實施例在確定(例如,通過外部手段)語言方向為從上到下時,采用L(p)和R(P)用于流圖(見下面)。對于頁面4300,段落P 4305的集合R(P) 為IV},而段落V 4335的集合L(V)是{P}。段落R 4315的集合L(R)和R(R)都為空。一旦針對所選段落計算了內順序、外順序、左順序和右順序,處理4200確定(在 4220處)是否有更多的段落要必須針對其計算各種值。如果有更多段落的話,則處理前進到4210來選擇另一個段落。否則,一旦針對所有段落計算了值,則處理生成(在4225處)段落的流圖。一些實施例的流圖被生成為使得評估的文檔部分中的每個段落是一個節點。定向邊緣從段落P 的節點繪制到集合A(P)中的段落的每個節點。在一些實施例中,這與從集合B(P)中的段落的每個節點繪制定向邊緣到段落P的節點是相同的。圖45例示了頁面4300的初始流圖 4501。接著,處理4200識別(在4230處)調出部。在一些實施例中,從流圖移除識別出的調出部。在一些實施例中,調出部是頁面上要按照獨立于頁面上的其余文本的順序閱讀的文本元素。調出部的一些示例包括頁眉和頁腳、注腳、頁邊注(margin note)、邊條(side-bar)和放置在其他元素中的其他文本塊(例如,雜志文章中的大字體引述 )。—些實施例基于文本元素的幾何結構、其在頁面上的位置、其流性質(內順序、夕卜順序、左順序和右順序)以及其元素的樣式性質的組合來識別調出部。例如,當頂點ν包括靠近頁面頂部的單行段落,從單行段落到A(V)中的任意元素的距離大于一個行高度, L(V) ( 1,R(V) ( 1,并且L(V)和R(V)中的任何頂點共享這些條件時,一些實施例將段落分類為頁眉調出部。在一些實施例中,對頁腳調出部的要求也是類似的,只是找出到頁面底部和到B(V)中的元素的距離。一些實施例還將突出到列中(且不在它們自己的區中)的邊條、隨機定位的文本框、與其他文本沒有明顯關系的少量文本(例如,附圖標題)等等識別為調出部。一些實施例基于純文本分析來進行這種確定(以及對流性質的其他確定),而其他實施例將圖像并入到分析中(例如,作為對附圖標題的進一步證據)。例如,在一些實施例中,一些實施例將遠離A(p)和B(p)中的所有元素的單行段落識別為隔離的小段落。在一些實施例中,當具有單個文本行的段落由圖像的界線包圍且按照特定方式與圖像界線對準(例如,在底部附近居中、在頂部附近居中,等等)時識別出標題。當兩個或更多個段落的矩形界定框相交時,一些實施例將除一個段落之外的所有段落都識別為相交調出部。例如,假設兩個段落P和q交疊,并且B (ρ) = {q,r}。當r具有1的內順序或者當q是在A(r)中時,在一些實施例中q是相交調出部。一些實施例將其樣式和/或對準性質不與A(p)或B(p)中的段落一致時的任何段落ρ識別為相交調出部。 當兩個段落相交以及沒有應用以上的規則時,一些實施例將具有更小面積的段落識別為調出部。在針對文檔部分中的段落生成流圖之后,處理4200將流圖的節點合并(在4235 處)成列。如果A(p) = {q}且B(q) = {ρ},則一些實施例合并段落ρ和q的節點。在一些實施例中這表示段落P和q處于同一列中。在一些實施例中,新節點Pq將具有A(pq)= A (q),B(pq) =B(p),L(pq) = L(p)+L(q)和 R(pq) =R(p)+R(q)。例如,在圖 45 中,修改流圖4501使得在修改后的流圖4502中將節點S 4520、T 4525和U 4530合并到節點STU 4575中。類似地修改其他節點。圖46例示了在已經將節點初始地合并成列之后針對圖44的頁面4400的流圖 4601。一些實施例將段落R 4420識別為調出部,這是因為它跨兩個列,并且左側和右側都有段落。因此,一些實施例從流圖4601中移除節點R 4620。這使得能夠將節點進一步合并到列中。一旦已經識別出(以及在一些實施例中從流圖中移除)調出部,則處理4200將流圖分隔(在4240處)成布局。一些實施例將用于擴展和縮減邊緣的標記定義為分隔處理的一部分。在一些實施例中,如果段落P的外順序大于1并且集合B (ρ)中的每個段落q的內順序為1,則從P到B(p)中的每個q的邊緣是擴展邊緣。類似地,在一些實施例中,如果段落P的內順序大于1并且集合A (ρ)中的每個段落q的外順序為1,則從A (ρ)中的每個q 到P的邊緣是縮減邊緣。圖45例示了引入到節點R 4515的邊緣都是縮減邊緣,并且從節點R 4515引出的邊緣都是擴展邊緣。一些實施例的分隔檢查其邊緣全部被標記的每個頂點V。當ν的內順序大于1時, 只要針對B (ν)中的每個ρ有Α(ρ) = {ν},則一些實施例定義其元素為B (ν)的分隔。類似地,當ν的外順序大于1時,只要針對A(ν)中的每個ρ有B(p) = {ν},則一些實施例定義其元素為A(V)的分隔。當兩個分隔都可能時,將頂點ν自己定義為分隔。基于這些規則,將流圖4502分隔成三個分隔4511,4512和4513。一些實施例將任何剩余節點放置在一個或多個分隔中,使得在分隔之間沒有任何幾何交疊的情況下定義最小個數的分隔。由于復雜的頁面結構,一些實施例采用比以上所述更放松的分隔規則。例如,在一些實施例中,當能夠從節點ν生成分隔時,除了 ν的外順序大于1,清除遠離ν且相對于ν較窄的A(V)的元素。當A(V)中僅留有一個元素時,從ν 到被移除頂點的邊緣被移除,并且繼續分隔。一旦分隔完成,則處理4200結束。在一些實施例中,每個分隔對應于一個線性布局,并且最終(合并的)節點中的每一個對應于一列。一旦定義了分隔,則一些實施例計算文檔部分的性質,例如裝訂線寬度、 頁邊距、內嵌或浮置圖像,等等。此外,布局和流信息(包括字、行、段落和列數據)主要地用在對文檔的顯示中,并且使得能夠進行更魯棒的與文檔的用戶交互,如在下面第VIII章和第IX章中所描述的。 例如,在一些實施例中,用戶可能希望瀏覽復雜的文檔,該文檔包括若干列文本、圖像、調出部、標題等等,并且能夠將文檔的整個文本復制和粘貼到文本編輯器中。為實現此,向文檔中的每個元素分配一個閱讀順序,該閱讀順序試圖標識人將閱讀文檔中的元素的順序。例如,一些實施例向列分配閱讀順序,使得閱讀順序符合人將從文檔或頁面的開始到結尾閱讀列的預期順序。其他實施例向其他結構性元素(例如,段落、字等等)分配閱讀順序。在一些實施例中,當用戶將這種文檔的整個文本復制和粘貼到另一個應用中時,文本按照人將閱讀的順序出現在應用中。這與從標準PDF文件(其按照嚴格的從上到下的配置來對所有文本排序)復制和粘貼不同。一些實施例還將圖像和形狀插入到閱讀順序中。例如,一些實施例將特定圖像識別為與特定文本列相關聯,并將圖像插入到該文本列之前或之后(取決于文檔中的情況 (evidence)) 0作為示例,一些實施例識別出圖像與該圖像的標題相關聯,并將圖像插入到閱讀順序中恰在其標題之前。一些實施例還定義結構性元素之間的鏈接。例如,一些實施例采用閱讀順序來定義列結尾處的段落與下一列開始處的段落之間的鏈接,這兩個段落實際上是一個段落。在一些實施例中,為了保持每個段落分配給一個特定列的分級結構,不定義橋接列的單獨段落。相反,兩個段落之間的鏈接被定義為指示它們實際上是一個段落。一些實施例采用與將行添加到段落中的測試類似的測試,來確定來自第二列的頂部段落是否實際上是第一列的結尾處的段落的延續(即,檢查間距、對準、字體樣式,等等)。然后可以采用該鏈接,例如如果用戶執行意在選擇任一個所定義段落中的一個段落的選擇操作(例如,三擊),則將基于該鏈接選擇整個實際段落。一些實施例還定義布局(例如,跨頁面鏈接的布局)或區之間的鏈接。例如,一些實施例可以識別延續文本(例如,報紙中指示故事在另一頁面上繼續的文本),并且可以將具有延續文本的布局中的文本與其中文本延續的布局相鏈接。一些實施例僅在簡檔已經匹配從而指示應當執行鏈接時試圖進行這種鏈接。例如,如果已經將文檔識別為報紙,則一些實施例將搜索延續文本。E.軟件架構
在一些實施例中,將以上描述的布局和流分析處理實施為在特定機器(例如,計算機、媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式或資源受限設備)上運行(或者存儲在計算機可讀介質上)的軟件。圖47概念性地例示了一些實施例的用于對識別文檔的布局和流特性的布局和流分析應用4700的軟件架構。在一些實施例中,應用是獨立應用或者集成到另一應用(例如,文檔重構應用)中,而在其他實施例中,應用可能是在操作系統內實現的。布局和流分析應用4700包括行識別模塊4705、行合并模塊4710、字識別模塊 4715、差值集群模塊4720、行拆分模塊4725、段落識別模塊4730、列和布局識別模塊4735以及順序計算器4740。圖47還例示了文檔內容4745。行識別模塊4705接收來自文檔內容4730的信息。 在一些實施例中,該信息是關于文檔中的字符的位置的信息。行識別模塊4705識別頁面上具有公共基線的字符并將它們分配給一個行。行識別模塊傳遞信息到行合并模塊4710并從其接收信息。行合并模塊識別垂直交疊的行的分組并確定是否應當合并這些行。在一些實施例中,行合并模塊4710執行以上描述的處理3300中的一些或全部。行合并模塊4710 將該信息傳遞回行識別模塊4705,行識別模塊4705識別出最終的文本行。行識別模塊4705 將行信息傳遞回文檔內容4745,以及傳遞到行拆分模塊4725。字識別模塊4715也從文檔內容4745接收信息。在一些實施例中,該信息是關于文檔中字符的位置的信息。字識別模塊4715識別應被分組到一起作為字的字符。字識別模塊4715將信息傳遞到差值集群模塊4720并從其接收信息。差值集群模塊4720對文檔字符執行差值集群以返回字符之間的不同級別的間隔(例如,字間隔、段間隔,等等)。字識別模塊4715采用差值集群結果來識別字。字識別模塊4715將其結果(以及其他差值集群結果,例如段間距)傳遞到文檔內容4745以及傳遞到行拆分模塊4725。行拆分模塊4725接收來自行識別模塊的行信息和來自字識別模塊的間隔信息, 以及來自文檔內容4745的其他信息(例如,裝訂線信息)。行拆分模塊4725識別應當在哪里拆分行以及基于該拆分輸出新的行信息。該新的行信息被傳遞到文檔內容4745以及段落識別模塊4745。在一些實施例中,行拆分模塊4725執行處理3800中的一些或全部。段落識別模塊4730接收來自行拆分模塊4725的行信息以及來自文檔內容4745 的其他信息(例如,對準信息)。段落識別模塊4730識別哪些行應當被分組成段落并輸出所得信息。該段落信息被傳遞到文檔內容4745以及傳遞到列和布局識別模塊4735。在一些實施例中,段落識別模塊4730執行處理4000中的一些或全部。列和布局識別模塊4735接收來自段落識別模塊4730的段落信息以及來自文檔內容4745的其他信息(例如,區信息)。列和布局識別模塊4735將段落分組成列并將列分組成布局。列和布局信息模塊4735將信息傳遞到順序計算器4740并從其接收信息。順序計算器4740從模塊4735接收段落信息,并計算段落的內順序、外順序、左順序和右順序(以及對應的集合A、B、L和R)。然后該信息被返回到模塊4735用于生成流圖。來自列和布局識別模塊4735的結果被傳遞到文檔內容4745。在一些實施例中,列和布局識別模塊4745 執行以上描述的處理4200的一些或全部。在一些實施例中,由以上描述的模塊或其他模塊執行的處理的結果存儲在電子存儲設備中(例如,作為文檔對象模型的一部分)。文檔對象模型然后可以用于在電子顯示設備(例如,手持式設備、計算機屏幕,等等)上顯示文檔,使得用戶能夠瀏覽文檔和/或與文檔交互(例如,通過觸摸屏、游標控制設備,等等)。V.表格識別 本發明的一些實施例識別文檔中的表格。一些實施例識別表格的單元、行和列,并且使得這些表格能夠編輯、導出到電子數據表(spreadsheet),等等。在一些實施例的表格識別處理中采用來自以上在第II章中描述的處理的區信息以及來自以上在第IV章中描述的處理的布局和流信息。即使在將表格繪制成包括交疊形狀和圖像的圖形的非相關分組時,一些實施例也能夠識別和重構表格,例如這在表格包括諸如突起(extrusion)和陰影的效果時非常普遍。圖48概念性地例示了一些實施例的用于識別文檔一部分中的表格的處理4800。 如圖所示,該處理接收(在4805處)文檔部分的區和布局信息。在一些實施例中,區信息是以上在第II章中描述的處理的輸出,而布局信息是以上在第IV章中描述的處理的輸出。 在一些實施例中,文檔部分是文檔的頁面或者頁面的區,等等。然后該處理識別(在4810處)具有完整邊界的表格。圖49例示了具有完整邊界的表格4900的示例。一些實施例分類任何作為島(如以上在第II章中定義)的區,所述島由界線全是豎直矩形的兩個或更多個區完全分隔開。這些分隔矩形由此是表格的單元。 下面將在第A節中進一步詳細地描述對具有完整邊界的表格的識別。接著,處理4800識別(在4815處)具有連接的邊界的表格。圖50例示了具有連接的但不完整的邊界的表格5000的示例。在一些實施例中,當實際上繪制的表格的所有邊界彼此相交使得任何邊界都連接到整個連接集合中的任何其他邊界時,表格具有連接的邊界。表格5000具有不完整的邊界,這是因為沒有繪制表格的外邊界。下面將在第B節中進一步詳細地描述對具有連接的但不完整的邊界的表格的識別。接著處理4800識別(在4820處)不具有邊界或者具有中斷邊界的表格。圖51 例示了沒有邊界的表格5100的示例。圖52例示了具有中斷邊界的表格5200。不像表格 5100,表格5200具有一些繪制的邊界,但是這些邊界不能形成連接集合。對于其邊界不能形成連接集合的表格,一些實施例要求采用布局信息以識別這些表格。下面將在第C節中進一步詳細地描述對不具有邊界或者具有中斷邊界的表格的識別。—旦識別出文檔部分中的所有表格,處理就定義(在4825處)要通過編輯和其他軟件訪問的表格。然后該處理結束。在一些實施例中,這使得用戶能夠編輯表格的單個單元、選擇表格的行和列、將表格信息智能地復制到電子數據表中,等等。A.具有完整邊界的表格本發明的一些實施例識別其中所有邊界利用邊界圖形(例如,行、窄矩形、窄圖像、填充矩形的邊界,等等)的某種組合來繪制的表格。以上在第II章中描述了一些實施例的用于識別這些邊界圖形并采用邊界圖形來識別區的處理。圖53概念性地例示了一些實施例的用于識別具有完整邊界集合的表格并定義所識別出的表格的單元、行和列的處理5300。在一些實施例中,一旦針對具有不完整邊界或者不具有邊界的表格識別出隱含的邊界,處理5300還用于識別和定義這些表格。在第B節和第C節中更詳細地描述這些處理。將結合圖54來描述處理5300。圖54例示了包括具有完整邊界的表格的頁面5400。
如圖53所示,該處理接收(在5305處)文檔一部分的區信息。在一些實施例中, 該文檔部分是整個文檔、文檔的章節或者文檔的頁面。在一些實施例中區信息是從以上在第II章中描述的處理輸出的信息,并且包括區邊界和相交部信息以及識別出的區和區圖 fn息ο然后該處理5300識別(在5310處)完整被兩個或更多個區(它們全都是矩形的)分隔開的島。如上所述,在一些實施例中,島是不與其父區共享邊界區間的區。圖M 例示了頁面M00,該頁面MOO包括由矩形分隔開的一個島M01。如圖所示,十三個矩形完整地分隔出島5401,使得由十三個矩形區覆蓋的頁面的區域恰是島MOl的區域。因此,島 5401被識別為表格。接下來,處理確定(在5311處)在5310處識別出的島中是否有任何未處理的島。 當沒有識別出或者所有識別出的島都已經被處理為表格時,處理結束。否則,處理選擇(在 5314處)下一個識別出的島。在一些實施例中,對于識別出的島沒有特定順序,只要它們中的全部都被處理即可。然后處理5300從最高到最低來排序(在5315處)所選島中的水平邊界。一些實施例按照邊界的頂部界線來排序,使得具有最高頂部界線的邊界是第一個。在一些實施例中,水平邊界是被識別為表格的島內的水平邊界區間,并且包括島的邊界。圖M例示了十六個水平邊界區間討05至M20。在一些實施例中,由諸如以上在第II章中描述的處理 900的處理來識別水平邊界區間。在按順序對水平邊界區間進行了排序的情況下,處理選擇(在5320處)第一個未評估水平邊界,并定義(在5325處)表格的下一個水平格線(gridline)。在圖M的示例中,邊界區間M05或M06都是第一個選擇的邊界,此時定義水平格線1。然后該處理將所選邊界分配(在5330處)給當前的格線,并將格線的垂直范圍 (extent)設置為分配給格線的所有邊界的y區間的相交部。由此,在當前所選邊界是要分配給當前格線的第一個時,格線的y區間僅僅是該邊界的y區間。然而,當將多個邊界分配給格線時,格線的y區間包括所有分配的邊界的y區間。然后該處理確定(在5335處)是否有更多的水平邊界還未分配給格線。當沒有更多水平邊界時,處理前進到下面描述的5345。否則,當還有更多邊界時,處理確定(在5340 處)下一個邊界的y區間是否與當前格線的y區間交疊。當y區間不交疊時,已經定義了當前格線中的所有邊界,并且處理前進到5320以選擇下一個邊界并開始一個新的格線。然而,當y區間交疊時,處理前進到5330以將邊界分配給當前格線,更新格線的y區間以及繼續到下一個邊界。如圖M所示,在選擇了邊界討05或討06作為島MOl的第一個邊界之后,兩者中的另一個將被選擇為下一個,并添加到水平格線1。將接著定義水平格線2,其包括邊界 5407和M08,依此類推直到水平格線6 (邊界M18至5420)。一旦將所有水平邊界都分配到格線,處理5300考慮垂直邊界。處理5300從左向右來排序(在5345處)所選島中的垂直邊界。一些實施例按照邊界的左界線來排序,使得具有最左的左界線的邊界為第一個。在一些實施例中垂直邊界是被識別為表格的島內的垂直邊界區間,并包括島的邊界。圖M例示了十八個垂直邊界區間M25至M42。在一些實施例中,通過諸如以上在第II章中描述的處理900的處理來識別垂直邊界區間。
在按順序排序了垂直邊界區間的情況下,處理選擇(在5350處)第一個未評估垂直邊界,并定義(在5355處)表格的下一個垂直格線。在圖54的示例中,邊界區間5426 至5428中的一個是第一個選擇的邊界,此時定義垂直格線1。然后該處理將所選邊界分配(在5360處)給當前的格線,并將格線的水平范圍設置為分配給該格線的所有邊界的X區間的相交部。由此,如果當前所選邊界是要分配給當前格線的第一個,則格線的X區間僅僅是邊界的X區間。然而,當將多個邊界分配給格線時, 格線的X區間包括所有分配的邊界的X區間。然后該處理確定(在5365處)是否有更多的垂直邊界還未分配給格線。當沒有更多邊界時,處理前進到下面描述的5375。否則,當還有更多邊界時,處理確定(在5370處) 下一個邊界的χ區間是否與當前格線的χ區間交疊。當χ區間不交疊時,已經定義了當前格線中的所有邊界,并且處理前進到5350以選擇下一個邊界并開始一個新的格線。然而, 當χ區間交疊時,處理前進到5360以將邊界分配給當前格線,更新格線的χ區間以及繼續到下一個邊界。在選擇了邊界5425至5428中的一個作為島5401的第一個邊界之后,其他三個中的一個被選擇并添加到垂直格線1。一旦將所有四個邊界添加到垂直格線1,將接著定義垂直格線2,其包括邊界5429至5433,依此類推直到垂直格線4 (邊界5438至5442)。一旦評估了所有的垂直邊界,已經針對表格定義了所有的格線。本領域普通技術人員將認識到,盡管處理5300在垂直格線之前定義水平格線,但是一些實施例先定義垂直格線。接著該處理將行和列的個數分配(在5375處)給表格的單元。在一些實施例中, 分隔出島的每個區是一個單元。在一些實施例中,單元跨從其上邊界的格線到比其下邊界的格線小一個的格線的行。例如,圖54中的單元5450跨行1和2,這是因為其上邊界是水平格線1的一部分而其下邊界是水平格線3的一部分。類似地,在一些實施例中,單元跨從其左邊界的格線到比其右邊界的格線少一個的格線的行。例如,單元5450跨列1,這是因為其左邊界是垂直格線1的一部分,而其右邊界是垂直格線2的一部分。一旦已經重構了表格結構(即,格線、單元、行和列),該處理確定(在5380處) 表格的樣式信息。然后該處理前進到上面描述的5311,以確定是否有任何更多識別出的島要處理為表格。在一些實施例中,表格樣式信息來自構成區邊界的邊界圖形以及背景圖形。 例如,當有多個背景形狀覆蓋或穿過特定單元時,一些實施例通過合成各種背景形狀并且如果必要的話將其固定到格線界線來確定得到的形狀顏色或圖像呈現。類似地,一些實施例基于顯露出來的形狀顏色的加權平均值來確定單元邊界顏色。在一些實施例中,加權平均值中的權重是基于顯示每個顏色的面積量。一些實施例還識別諸如陰影或突起的邊界樣式。在一些實施例中,識別表格和確定表格結構使得表格能夠被使用,就像是由典型的字處理器生成的一樣,而不是非相關圖形的集合。例如,在一些實施例中,用戶能夠單獨地編輯表格單元、將信息導出到電子數據表、排序表格數據,等等。一些實施例僅僅采用處理5300來識別表格。然而,這樣做將僅僅識別具 有完整邊界集合的表格。其他實施例采用在下面第B節和第C節中描述的處理,來識別不具有完整邊界圖形但是具有表格的結構和布局的表格。B.具有連接的邊界的表格
除了具有完整邊界集合之外,一些實施例識別具有不完整但連接的邊界集合的表格。圖50例示了這種表格5000。一些實施例采用處理來定義可能是預期表格邊界的隱含邊界,然后應用諸如以上描述的處理5300的處理來識別和重構實際表格。圖55概念性地例示了一些實施例的用于識別和重構具有連接邊界集合的表格的處理5500。將結合圖56來描述處理5500。圖56例示了識別頁面5600上的具有連接的但不完整邊界的表格的序列。如圖55所示,處理5500接收(在5505處)文檔一部分的潛在區邊界和邊界相交部的集合。在一些實施例中,潛在區邊界和相交部由以上在第II章中描述的處理900確定。 其他實施例采用其他處理來確定文檔部分的潛在區邊界。在一些實施例中,文檔部分是整個文檔、文檔的章節或者文檔的頁面。接著,處理5500定義(在5510處)包括在5505處接收到的所有潛在區邊界的集合U。然后該處理確定(在5515處)是否U為空。當該集合為空時,處理結束,因為沒有可能連接的區邊界。否則,當集合U包括至少一個區邊界時,處理從U中選擇(在5520處)一個邊界 b,并定義新的連接集合C。一些實施例從最上、最左、最靠近左上角的邊界開始,或者采用一些其他啟發法來確定要首先選擇哪個邊界。其他實施例隨機選擇邊界b。然后從集合U中移除(在5525處)所選邊界b,并將其添加到集合C。在一些實施例中,連接集合C是全部連接通過相交部集合的邊界集合。然后該處理從集合U選擇(在5530處)一個針對當前邊界b還未評估的邊界z, 并確定(在5535處)邊界ζ是否與邊界b相交。在一些實施例中,確定邊界ζ是否與邊界 b相交包括確定是否一個接收到的相交部將邊界ζ連接到邊界b。當邊界不相交時,處理前進到下面描述的陽45。否則,當邊界相交時,處理將邊界ζ添加(在5540處)到當前連接集合C,并將ζ放置到隊列中。在向前移動到下一個連接集合之前,一些實施例采用隊列來追蹤連接集合中需要被評估用于進一步的連接的邊界。接著,該處理確定(在5545處)集合U中是否有任何邊界還未被評估用以與當前邊界b相交。當有更多邊界時,處理前進到5530以選擇另一個邊界ζ并確定新的邊界ζ是否與當前邊界ζ相交。否則,當U中的所有邊界已經關于與當前邊界b相交進行了評估時,該處理5500 確定(在5550處)隊列是否為空。當隊列中有至少一個邊界時,處理將隊列中的下一個邊界設置(在5555處)為新選擇的邊界b。然后該處理前進到5525以評估U中是否還有邊界與新選擇的邊界b相交。否則,當隊列為空時,已經分配了當前連接集合C的所有元素,并且處理確定(在 5560處)集合U是否為空。當U不為空時,處理前進到5520以選擇新的邊界b,并定義新的連接集合C。當U為空時,已經處理了所有的邊界,并將它們放置到相應的連接集合中。圖56 例示了具有七個邊界5605至5635的頁面5600。應用處理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。當有至少一個集合時,處理前進到5565,以選擇另一個集合C。當已經評估了所有集合時,處理利用來自所有連接集合的所有邊界來識別(在5580處)區。一些實施例應用處理1200 (以上在第II章中描述的)或者類似的處理來識別區。一旦識別了區,處理5500根據區來識別(在5585處)表格并重構表格。然后處理結束。一旦利用從連接集合的豎直界定框的隱含邊界識別了區,一些實施例應用在如以上第A節中描述的處理5300來重構表格。圖56例示了識別出頁面5600上的一個表格5685。 該表格具有三個列以及三個行,總共有九個單元。一些實施例然后移除該表格和單元區(以及構成這些區的邊界圖形),并重新識別沒有任何隱含邊界的區,從而在不應當有區的地方不定義區。然后一些實施例重新插入表格和單元區,以如以上在第II章中描述地確定區圖。這種實施例生成包括對表格和單元區以及它們的結構的識別的完整區圖。C.沒有邊界或者具有中斷邊界的表格除了具有完整或者至少連接的邊界集合之外,一些實施例還識別沒有邊界或者具有中斷邊界的表格。圖51例示了沒有邊界的表格5100,而圖52例示了具有中斷邊界的表格5200。一些實施例采用處理來定義可能是預期表格邊界的隱含邊界,然后應用諸如處理 5300的處理來識別和重構實際表格。對于其邊界不形成連接集合的表格,一些實施例除了區信息之外還要求采用布局信息來識別表格。圖57概念性地例示了用于識別和重構沒有邊界或具有中斷邊界的表格的處理 5700。將結合圖58至60來描述處理5700。圖58至60例示了對頁面5800應用處理5700 以識別具有中斷邊界的表格。如圖57所示,該處理接收(在5705處)初級區(primary zone)的布局信息。在一些實施例中,初級區是頁面,但是初級區也可以是任何其他區。一些實施例的布局信息是從諸如以上在第IV章中描述的4000和4200的處理輸出的信息。該信息包括對初級區中的段落、列和布局的識別。然后,處理5700確定(在5707處)初級區中是否有任何未處理的布局。當初級區中沒有布局或者所有布局都已經被處理時,處理前進到下面描述的5740。否則,該處理選擇(在5710處)初級區內的一個布局。然后該處理定義(在5715處)在布局的豎直直線界線處的隱含區邊界。在一些實施例中,豎直直線界線是完全圍住布局中的所有段落的最小矩形。該處理還定義(在5720處)在列內隔開布局的列的垂直空白空間處以及隔開布局的段落的水平空白空間處的隱含區邊界。圖58例示了頁面5800。該頁面包括三個更小的區左上角處的區5805、中央灰色陰影的區5810以及朝向底部的區5815。區5810和5815在一些實施例中是島。初級區(頁面5800)包括兩個布局5820和5825。如圖59所示,在選擇布局5820的情況下,該處理定義布局5820的界定框周圍以及布局5820的三個列之間的隱含邊界5905至5925。在一些實施例中,該布局的底部界線不需要隱含邊界,因為該布局是由區5810的頂部界定的。針對布局5825定義類似的隱含邊界5985至5997。接著,處理5700確定(在5725處)布局中是否有任何水平邊界(例如,隱含邊界)若向外延伸則與另一列的段落的界定框相交。該水平一致性測試確保布局實際上具有表格結構,而不僅僅是典型的斷成列的段落集合。當布局沒有通過水平一致性測試時,該處理前進到以上描述的5707。否則,當布局通過水平一致性測試時,處理將布局添加(在5730 處)到追蹤可能是表格或表格的一部分的潛在布局的集合S。然后該處理前進到5707。在處理確定(在5707處)初級區沒有包括更多布局時,該處理確定(在5740處) 在初級區內是否有任何未處理的區。當初級區沒有包括其他區或者已經處理了所有的區時,該處理結束定義隱含邊界,并前進到下面描述的5775。否則,當初級區中有至少一個未處理區時,該處理選擇(在5745處)一個較小的區。然后該處理確定(在5750處)是否該更小的區是僅具有一個布局的島。在頁面5800 上,區5810和5815是僅具有一個布局的島,而區5805包括僅一個布局但不是島,因為其邊界包括頁面邊界。當所選區不是僅具有一個布局的島時,處理5700前進到以上描述的5740。否則, 當所選區是具有僅一個布局的島時,該處理定義(在5755處)在列內隔開布局的列的垂直空白空間處以及隔開布局的段落的水平空白空間處的隱含區邊界。圖59例示了在區5810 的列之間定義的隱含區邊界5971和5972。然后該處理確定(在5760處)布局中是否有任何水平邊界(例如,隱含邊界)若向外延伸則與另一列的段落的界定框相交。該水平一致性測試確保布局實際上具有表格結構,而不僅僅是典型的斷成列的段落集合。當布局沒有通過水平一致性測試時,該處理前進到以上描述的5740。否則,當布局通過水平一致性測試時,處理將布局添加(在5765處) 到追蹤可能是表格或表格的一部分的潛在布局的集合S,然后該處理前進到5740。頁面5800包括區5815,在一些實施例中,區5815是僅具有一個布局的島。圖59 例示了針對區5815定義的隱含邊界5930至5980。然而,該布局沒有通過水平一致性測試, 因為水平邊界5945至5980如果向外延伸的話將全部與布局中的其他段落的界定框相交。 因此,區5815的布局沒有添加到頁面5800的集合S,并且不保留隱含框5930至5980。一旦已經評估了所有的區,處理利用來自集合S的布局的隱含區邊界以及與這些隱含區邊界相交的任何區邊界圖形應用(在5775處)區分析。一些實施例采用以上在第 II章中描述的處理,來識別區邊界區間、相交部以及區邊界。然后處理5700識別(在5780處)集合S中的布局中的潛在表格。一些實施例采用以上在第A節中描述的處理5300來識別潛在表格(并且重構其結構)。接著,該處理取消(disqualify)(在5785處)不能滿足特定表格條件的潛在表格。然后該處理結束。一些實施例向潛在表格施加附件條件,來確保當邊界圖形自己不足夠時存在強的用于識別表格的證據。例如,一些實施例要求所有單元精確地跨一行和一列,或者單元高度和寬度與頁面尺寸相比較小,或者每個邊界的厚度與表格的尺寸相比較小。一些實施例要求這些條件中的一個、一些或全部,以及其他要求。圖60例示了區5810以及布局5820和5825被組合成表格6000,而區5805和5815的內容保持不變。一旦識別了文檔部分中的所有表格,在一些實施例中,用戶能夠編輯表格的單個單元、選擇表格的行和列、將表格信息智能地復制到電子數據表,等等。此外,在一些實施例中,可以通過如此識別表格并重構它們來改善文本流、閱讀順序和顯示。D.軟件架構在一些實施例中,將以上描述的表格識別實施為在特定機器(例如,計算機、媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式或資源受限設備)上運行(或者存儲在計算機可讀介質上)的軟件。圖61概念性地例示了一些實施例的用于識別文檔中的表格的表格識別應用6100的軟件架構。在一些實施例中,應用是獨立應用或者集成到另一應用(例如,文檔重構應用)中,而在其他實施例中,應用可能是在操作系統內實現的。表格識別應用6100包括區分析模塊6105、表格識別模塊6110、區邊界連接模塊 6115、隱含邊界定義模塊6120以及布局分析模塊6125。圖61還例示了文檔內容6130。區分析模塊6105接收來自文檔內容6130的信息 (例如,關于圖形的信息)。在一些實施例中,區分析模塊6105與圖17中的區分析模塊1700 相同。區分析模塊將區信息輸出到區邊界連接模塊6115和表格識別模塊6110。表格識別模塊6110接收來自區分析模塊6105的區信息。在一些情況下,有文檔的最終區,而在其他情況下,區信息是包括專用于表格識別的隱含邊界的區。表格識別模塊 6110基于接收到的區信息識別表格,并將該信息傳遞到文檔內容6145。在一些實施例中, 表格識別模塊6110執行處理5300的一些或全部。區邊界連接模塊6115接收來自區分析模塊6105的區邊界信息,并基于該信息定義區邊界的連接集合。該連接集合被傳遞到隱含邊界定義模塊6120。在一些實施例中,區邊界連接模塊6115執行處理5500中的一些或全部。布局分析模塊6125接收來自文檔內容6130的信息(例如,布局信息)。布局分析模塊6125確定布局是否可能潛在地是表格的一部分,并且將適合的布局傳遞到隱含邊界定義模塊6120。在一些實施例中,布局分析模塊6125執行處理5700的一些或全部。
隱含邊界定義模塊6120接收來自布局分析模塊6125的布局信息和來自區邊界連接模塊6115的區邊界連接集合。隱含邊界定義模塊6120基于它所接收到的信息來定義文檔的頁面的隱含邊界,并將該信息傳遞到區分析模塊6105。在一些實施例中,由以上描述的模塊或其他模塊執行的處理的結果存儲在電子存儲設備中(例如,作為文檔對象模型的一部分)。文檔對象模型然后可以用于在電子顯示設備(例如,手持式設備、計算機屏幕,等等)上顯示文檔,使得用戶能夠瀏覽文檔和/或與文檔交互(例如,通過觸摸屏、游標控制設備,等等)。VI.連結圖在一些實施例中,未結構化文檔將包括文檔中預期被處理為單個元素但沒有被定義如此的本原元素(例如,形狀和圖像)。當這種本原元素占據文檔的緊湊且獨立的區域時,它們可以利用被稱為界線集群的新穎的集群分析技術來關聯。在一些實施例中,界線集群的目的是最小化集群的展度(其中,展度是根據集群中的本原元素(例如,形狀)的集合的界線來計算的),同時最大化集群中本原元素的個數。在一些實施例中,界線是基于形狀或形狀集合的界定框。
本發明的一些實施例提供了用于識別區域中應被連結的圖形(S卩,圖形對象)的方法。然后可以將這些連結圖處理為一個對象,用于進一步的重構。此外,它們在被瀏覽、 選擇、縮放、復制、移動、編輯等時可以被處理為一個對象。一些實施例將連結圖處理為一個對象,用于下面在第VIII章和第IX章中描述的選擇、顯示和導航處理。圖62概念性地例示了一些實施例的用于將單獨的圖連結成連結圖的處理6200。 將結合圖63來描述處理6200。圖63例示了對頁面6300上的若干圖形中的一些但不是全部的連結。如圖62所示,處理6200接收(在6205處)文檔的一部分。在一些實施例中, 該文檔部分是整個文檔、文檔的章節、頁面或者區。一些實施例一起對整個文檔執行圖連結處理,而一些實施例逐區或逐頁面地執行處理。該處理識別(在6210處)文檔部分中的圖形。圖63例示了包括如下六個圖形的頁面6300 七角星6305、五邊形6310、八邊形6315、十字形6320、三角形6325和五角星 6330。然后該處理采用集群分析來連結(在6215處)一些識別出的圖形。然后處理結束。一些實施例采用一種形式的集群分析,其稱為界線集群并將在下面參照處理6400詳細地加以描述。一些實施例應用在下面第X章中描述的效率技術來執行集群分析。一些實施例僅僅在圖形緊密在一起且沒有占據頁面或區的太大部分時將它們相連結。圖63例示了七角星6305和五邊形6310連結成單個圖形6335,而三角形6325和五角星6330連結成單個圖形6340。由于八邊形6315和十字形6320在頁面6300上是獨立的,所以它們沒有被彼此連結或者連結到任何其他圖形。A.界線集群圖64概念性地例示了一些實施例的用于執行界線集群以識別應被連結的圖形并連結這些圖形的處理6400。在一些實施例中,處理6400采用下面在第X章中描述的存儲器和處理效率(例如,間接排序的陣列、快速分隔,等等)。如圖所示,該處理接收(在6405 處)文檔部分的圖形。在一些實施例中,該文檔部分是整個文檔、文檔的章節、頁面或區。然后,該處理確定(在6407處)文檔部分中是否有至少兩個圖形。當有一個或沒有圖形時,沒有理由執行集群來試圖連結圖形,由此處理結束。否則,該處理按照繪制順序對圖形進行排序(在6410處)。在一些實施例中,繪制順序是對象被繪制到頁面上的順序。 經常,當預期將多個對象處理為單個對象時,它們將按序列繪制。然而,一些實施例基于其他啟發法(例如,對象在頁面上的定位)進行排序。接著,該處理將繪制順序中的第一個圖形設置(在6415處)為當前圖形g。然后該處理確定(在6420處)g是否為文檔部分中的最后一個圖形。當g是最后一個圖形時, 可以計算出圖形g與下一個圖形之間沒有展度,因此處理前進到下面描述的6440。否則,當圖形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) / (Χρ+Χγ)。一些實施例相反將展度計算為對象集合的界定框的面積除以頁面的面積。一些實施例采用與頁面尺寸無關的度量(例如,對象集合的界定框相比于對象本身的單獨界定框的尺寸)。接下來,該處理將下一個圖形設置(在6435處)為當前圖形g。然后該處理前進到以上描述的6420。一旦已經計算了所有的展度,該處理采用(在6440處)展度作為差值集群的一階差值,來定義圖形的集群。一些實施例執行如在以上提及的美國公開 No. 2007/0250497中描述的差值集群。因為一些實施例的差值集群僅僅要求輸入值之間的差值并且不要求輸入的實際值,所以展度可以用作一階差值,盡管不是提出作為實際差值。 在一些實施例中,得自差值集群的集群在同一集群中的連續圖形之間的展度將相對小于不同集群中的圖形之間的展度。本領域普通技術人員將認識到,展度并由此界線集群的概念不限于頁面上的圖形對象。例如,可以在三維對象中計算展度(通過利用體積而非面積,或者通過在三個維度而非兩個維度中在界定框上進行求和),并由此用于集群三維對象(例如,在三維媒體編輯應用中,例如視頻合成應用)。在采用差值集群之后,利用展度作為一階差值,定義圖形的集群。處理6400從未評估集群中選擇(在6445處)一個集群C。然后該處理將C處理(在6450處)成滿足特定約束的圖形子序列集合。不同的實施例采用不同的約束來定義連結圖。一些實施例應用子序列中的對象按照繪制順序必須是連續的要求。一些實施例要求序列中的對象相互交疊,使得不能將集群分隔成兩個非空的子序列,其中每個子序列按照繪制順序是連續的,從而第一分隔中的對象分組的豎直界線與第二分隔中的對象分組的豎直界線不連結。一些實施例應用的第三個要求是每個子序列滿足密度約束,這確保每個子序列包括具有足夠小的總展度的足夠個數(例如,兩個)的圖形。一些實施例采用以上條件的修改版本。例如,代替豎直矩形界線,一些實施例采用更緊的界線,例如圖像的非透明像素周圍的路徑。在一些實施例中,每個這些子序列中的對象集合都被連結成單個圖形。接著,處理6400確定(在6455處)是否有更多集群要評估。當有更多集群時,該處理前進到6445以選擇另一個集群,并將該集群處理成子序列。否則,當已經處理了全部集群時,處理結束。既然連結了圖形,就可以在瀏覽、選擇、縮放、復制、移動、編輯等時將它們處理為一個對象。一些實施例將連結圖處理為一個對象,用于下面在第VIII章中描述的選擇、顯示和導航處理。B.將集群處理成子序列如上所述,在已經識別出圖形的集群之后,一些實施例將每個集群處理成子序列, 以識別最終的連結圖(并然后關聯構成每個連結圖的本原元素)。圖66例示了一些實施例的用于將集群處理成子序列的處理6600。在一些實施例中,處理6600針對每個集群在處理 6400的操作6450處執行。如圖所示,處理6600接收(在6605處)圖形集群。正如所述,在一些實施例中,該集群是針對按照繪制順序排序的圖形采用展度作為一階差值的界線集群的輸出。然后該處理確定(在6607處)該集群是否為空(即,不包括任何圖形)。當該集群為空時,該處理結束。否則,該處理選擇(在6610處)集群中還不在子序列中的第一個圖形。在一些實施例中,該集群是按照繪制順序排序的,使得第一次通過操作6610時,所選的圖形是集群中被繪制在包括圖形的文檔中的第一個圖形。 然后該處理定義(在6615處)包括所選圖形(此時,所選圖形為子序列中的唯一圖形)的新的子序列。該新子序列具有所選圖形的界線。在一些實施例中,所選圖形的界線是包括該圖形的最小豎直界定框。其他實施例不同地定義圖形的界線,例如,采用完全圍住圖形的所有非透明像素的最小面積的路徑。接著,該處理6600確定(在6620處)集群中是否有更多的圖形。當集群中沒有更多圖形時,該處理前進到下面描述的6645。否則,該處理選擇(在6625處)集群中的下一個圖形。在一些實施例中,集群中的下一個圖形是集群中按照繪制順序的下一個圖形。該處理確定(在6630處)新圖形(即,在6625處選擇的圖形)的界線是否與當前子序列的界線相交。如上所述,不同的實施例不同地定義圖形的界線。下面描述包括多個圖形的子序列的界線。當新圖形的界線不與當前子序列的界線相交時,處理存儲(在6640 處)當前子序列(例如,在子序列列表中),并前進到以上描述的6610,以開始下一個子序列。下一個子序列從6630處最近測試的圖形開始,因為這是集群中還不在子序列中的第一個圖形。當新圖形(其是在6625處選擇的)的界線與當前子序列的界線相交時,該處理向子序列添加(在6635處)新圖形,并將子序列的界線修改為先前子序列界線與新添加圖形的界線的相交部。然后該處理前進到以上描述的6620,以繼續試圖向子序列添加圖形。在一些實施例中,包括多個圖形的子序列的界線是包括所有圖形的最小豎直界定框。在其他實施例中,界線是子序列中所有圖形的所有豎直界定框的并集(在這種實施例中,子序列的界線將不必是矩形的)。在一些實施例中,其中將圖形的界線定義為包括圖形的所有非透明像素的最小面積路徑,界線可以是子序列中的所有圖形周圍的路徑,或者可以是子序列中每個圖形的這種路徑的并集。一旦已經將集群中的所有圖形放置到初始子序列中,則處理選擇(在6645處)第一個子序列Si。在一些實施例中,每個子序列包括按照繪制順序是鄰接的圖形,并且基于繪制順序來布置子序列,使得第一子序列具有按照繪制順序的第一個圖形。然后該處理確定(在6650處)是否有更多子序列(即,第一次通過該處理時確定是否僅有一個子序列)。當沒有更多子序列時,處理結束。否則,該處理選擇(在6655處) 下一個子序列S2。接著,處理6600確定(在6660處)Sl和S2的界線是否相交。如上所述,在不同的實施例中不同地定義子序列的界線(即,在一些實施例中,它們是基于豎直界定框,而在其他實施例中它們是基于非透明像素周圍的路徑,等等)。當Sl和S2的界線不相交時,處理定義(在6665處)S2為Si,并且前進到6650以將下一個子序列相對于原始S2進行測
試ο當界線相交時,處理合并(在6670處)兩個子序列,并前進到6645以將第一個子序列選擇為Si。一些實施例返回到第一個子序列,并且不結束處理,直到從開始經過了以任意方式不能被合并的子序列集合。然而,其他實施例在返回到6645時將在最近合并的子序列之前的子序列選擇為Si,并從該點前進而非在第一個子序列處開始,從而節省處理時間。一旦已經將集群處理為子序列,就可以相對于諸如以上描述的密度約束的約束來測試子序列。一些實施例針對要在連結圖中關聯的圖形要求子序列中特定最小個數的圖形 (例如,兩個、五個,等等)。一些實施例要求展度(如上所述地計算)小于特定個數(例如, 0. 4,0. 5 等等)。 C.軟件架構在一些實施例中,將以上描述的圖形連結處理實施為在特定機器(例如,計算機、 媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式或資源受限設備)上運行(或者存儲在計算機可讀介質上)的軟件。圖67概念性地例示了一些實施例的用于識別應被連結的圖形并將這些圖形關聯為一個圖形的圖形連結應用6700。在一些實施例中,應用是獨立應用或者集成到另一應用(例如,文檔重構應用)中,而在其他實施例中,應用可能是在操作系統內實現的。圖67例示了圖形連結器6705、界線集群模塊6710和展度計算器6715以及文檔內容6725。圖形連結器模塊接收來自文檔內容6725的信息。在一些實施例中,該信息是關于每個圖形的定位以及圖形的繪制順序的信息。圖形連結器6705將信息(例如,圖形的定位和圖形在繪制順序中的位置)傳遞到展度計算器6715。一些實施例的展度計算器6715計算每對連續圖形的展度,并將該信息傳遞到界線集群模塊6710。界線集群模塊6710接收來自圖形連結器6705和展度計算器6715的信息(例如, 要被處理為一階差值的展度陣列),并對所接收到的信息執行界線集群。該界線集群的結果被傳遞回到圖形連結器。在一些實施例中,圖形連結器6705對從界線集群模塊接收到的集群執行進一步的處理,以識別特定圖形集群是否應被關聯為單個圖形,并將該關聯返回到文檔內容6725。在一些實施例中,由以上描述的模塊或其他模塊執行的處理的結果存儲在電子存儲設備中(例如,作為文檔對象模型的一部分)。文檔對象模型然后可以用于在電子顯示設備(例如,手持式設備、計算機屏幕,等等)上顯示文檔,使得用戶能夠瀏覽文檔和/或與文檔交互(例如,通過觸摸屏、游標控制設備,等等)。VII.用于控制處理的簡檔對作為文檔中的結構性元素的可視信息的解釋可以取決于在處理的文檔中的內容的類型。語義重構(以及其他內容處理技術)因此可以通過調整分析以適應內容的類型來改善。一些實施例提供用于識別要處理的內容的類型并調整對內容的處理以適應內容的識別出的類型的方法。一些實施例基于對內容類型的識別向如以上在第II至VI章中描述的文檔重構應用對內容處理的調整。一些實施例采用簡檔來識別要處理的內容的類型。簡檔包括形式為(P1-P2-P3"-"PN)的邏輯命題,使得當且僅當所有的邏輯判定(predicate)Pn針對特定內容都為真時簡檔與特定內容匹配。在一些實施例中,簡檔集合是分級的。簡檔的分級集合具有針對在處理的不同階段處達到的不同分級級別的簡檔。在一些實施例中,來自更低級別的簡檔的指令可以撤銷來自更高級別簡檔的指令。
圖68概念性地例示了一些實施例的采用簡檔來調整內容處理以適應內容類型的處理6800。如圖所示,該處理接收(在6805處)內容。該內容在一些實施例中是要重構的文檔。在其他實施例中,該內容是文檔,但是要對文檔執行的處理是除重構之外的其他分析。在一些實施例中,該內容還可以是其他類型的內容(例如,音頻和/或視頻內容)。例如,一些實施例可以分析視頻內容,以將視頻內容斷開成場景、動作等的分級,并且基于更早階段的結果修改后面階段的分析。接下來,該處理基于不同內容類型的簡檔識別(在6810處)接收到的內容的類型。在一些實施例中,簡檔包括邏輯命題,該邏輯命題由一個或多個邏輯判定構成,并且針對該內容當且僅當所有邏輯判定都為真時該邏輯命題與內容匹配。在一些實施例中,簡檔還規定如果簡檔與內容匹配則如何執行內容處理。在文檔處理的情況下,在一些實施例中, 簡檔包括應用于可視元素集合的屬性集合。例如,用于預期要印制在#10尺寸的封皮上的文檔的簡化簡檔可能是(頁面# = Γ段落# < = 2~寬度=9. 5” ~高度=4. 125”)。圖69例示了文檔6900。在識別文檔類型時,一些實施例將測試多個簡檔,直到達到其所有邏輯判定為真的簡檔。在文檔6900的情況下,如果寬度χ為9. 5”且高度y為 4. 125”,則文檔6900將被識別為#10封皮,因為它僅具有一個帶有兩個段落6905和6910 的頁面。一旦識別出內容的類型,則處理6800執行(在6815處)適于所識別出的內容類型的內容處理。然后該處理結束。在一些實施例中,調整處理以適應識別出的內容類型包括添加和移除處理、修改如何執行處理、以及修改執行處理的順序。例如,在文檔重構的情況下, 當確定文檔是沒有列、頁眉或頁腳的單頁文本行時,文檔重構處理可以被適當地調整。一些實施例將識別文本行、識別文本行中的字以及將文本行分組成段落,但是將不會執行其他處理(例如,用于識別列和布局的處理4200或者表格識別處理),因為它基于文檔類型識別出不要求這些。A.分級簡檔化一些實施例采用分級的簡檔集合來調整內容處理以適應內容類型。圖70例示了一些實施例的用于文檔重構的分級簡檔集合7000。該分級簡檔集合7000包括兩個文檔簡檔7001和7002、三個章節簡檔7005至7007、八個頁面簡檔7010至7017以及四個區簡檔 7020 至 7023。如圖所示,每個文檔簡檔具有其自己的簡檔樹。在一些實施例中,一旦識別出文檔簡檔,則將僅測試其分級樹中的章節簡檔。例如,當將文檔識別為文檔簡檔A 7001時,將僅測試章節簡檔A 7005和章節簡檔B 7006。類似地,一旦識別出章節簡檔(或者任何其他更低級別的簡檔),則將僅測試該特定簡檔的樹中的簡檔。在一些實施例中,在分級的更高級別的多個簡檔之間共享一些簡檔。例如,頁面簡檔C 7012在所有三個章節簡檔7005至7007之間共享。由此,無論將文檔的章節識別為章節簡檔A 7005、章節簡檔B 7006或章節簡檔C 7007,都將測試頁面簡檔C 7012作為該章節中的每個頁面的一個可能頁面簡檔。圖71概念性地例示了一些實施例的用于將簡檔與內容匹配并根據匹配的簡檔動態地配置內容處理的處理7100。如圖所示,該處理接收(在7105處)要被處理的內容。在一些實施例中,該內容是要根據以上在第II至VI章中描述的處理被重構的文檔。在其他實施例中,該內容是音頻和/或視頻內容,或者其他類型的要分析的內容。接下來,該處理選擇(在7110處)分級中的頂部級別的簡檔。在一些實施例中, 選擇特定簡檔包括評估該內容的特定簡檔的邏輯命題,并識別該簡檔與內容匹配。在一些實施例中,首先必須執行一定量的處理,來從分級的頂部級別中選擇一個簡檔。在一些實施例中,可以一次在分級的頂部級別處選擇僅一個簡檔,盡管在找到匹配簡檔之前可以測試多個簡檔。例如,關于圖70中的簡檔分級集合7000,文檔可以與文檔簡檔A 7001或者文檔簡檔B 7002匹配,但是一旦一個匹配,則選擇匹配的簡檔。在從分級選擇了簡檔之后,該處理針對所選的簡檔應用(在7115處)應用處理。 例如,關于文檔重構,當內容是僅單頁文檔時,應用一組重構方法。另一方面,當文檔是具有插圖的多頁書籍時,應用一組不同的重構方法。一些實施例不是一起應用所有方法,而是相反在確定是否可以選擇更低級別處的一個新簡檔之前按照簡檔指定的順序一次應用一種方法。接著,該處理確定(在7120處)處理是否足夠遠伸以處理到分級的下一個級別。 在一些實施例中,這涉及確定是否已經完成了足夠的處理方法,并且關于分級的下一個級別可獲得足夠的信息,使得可以針對匹配測試下一個級別處的簡檔。當處理不夠遠伸時,該處理前進到7115以繼續應用如上所述的處理。一旦處理針對分級的下一個級別足夠遠伸,該處理選擇(在7125處)分級的下一個級別處的簡檔。在一些實施例中,針對特定分級級別處的每個內容實體(例如,章節、頁面、區,等等),可以一次針對特定級別選擇僅一個簡檔。例如,關于圖70中的簡檔分級集合 7000,文檔中與文檔簡檔A 7001匹配的章節可以與章節簡檔A 7005或者章節簡檔B 7006 匹配,但是不會與兩者都匹配。此外,在一些實施例中,基于對以上的內容實體的簡檔的選擇來限制對一個內容實體的一個簡檔的選擇。例如,在以上示例中,由于文檔與文檔簡檔A 7001匹配,所以將不會把特定章節與章節簡檔C 7007測試,并由此不會與章節簡檔C 7007 匹配。接著,該處理基于新選擇的簡檔修改(在7130處)分級的先前級別的處理方法。 在一些實施例中,任何更低級別的簡檔可以撤銷更高級別簡檔的任何已經定義的處理方法。修改可以包括移除處理方法、修改執行特定方法的方式、添加方法、改變執行方法的順序,等等。例如,當已經采用處理(例如,以上在第IV章中描述的處理3800)來拆分文檔中的行時,關于是否針對列有足夠的證據的確定可以確定頁面是否被分類為復雜的或簡單的。當頁面是簡單的(即,列的最少證據)時,在一些實施例中將修改行拆分方法,來將制表位插入在行的間隔中,而不是實際地拆分行。類似地,當頁面是沒有區邊界圖形的簡單頁面時,在一些實施例中移除區分析方法。作為添加方法的示例,在一些實施例中,將特定文檔識別為報紙的簡檔可以添加用以搜索布局的結尾處的文本的方法,其指定文章在具有特定題目的特定頁面上繼續。這種方法然后將搜索指定的頁面以尋找題目,從而定義文檔中的兩個布局(或區)之間的鏈接,來指示兩個布局(或區)形成一個文章。接著,在修改了處理方法的情況下,處理7100針對所選簡檔應用(在7135處)處理方法。在一些實施例中,這包括用于在分級的比最近選擇的簡檔更高的級別處的簡檔的方法。例如,當在文檔簡檔中指定特定方法并且所選的章節簡檔沒有修改特定方法或者是否執行特定方法時,將根據文檔簡檔執行特定方法(如果它還沒有已經執行的話)。一些實施例沒有一起應用所有方法,而是相反在確定可以選擇更低級別處的新簡檔之前按照簡檔規定的順序一次應用一個方法。接著,該處理確定(在7140處)在簡檔分級中是否有任何更低級別要測試。當分級中沒有更多更低級別時,該處理前進到以下描述的7150。否則,該處理確定(在7145處) 是否處理足夠遠伸以前進到分級的下一個級別。在一些實施例中,這涉及確定是否已經完成足夠的處理方法,并且關于分級的下一個級別可獲得足夠的信息,使得可以針對匹配測試下一個級別處的簡檔。當處理不夠遠伸時,該處理前進到7135以繼續應用如上所述的處理。如上所述,一旦處理針對分級的下一個級別足夠遠伸,該處理就前進到7125以針對分級的下一個級別選擇一個或多個簡檔。當處理確定(在7140處)沒有更多更低的分級級別時,該處理確定(在7150處) 內容處理是否完成。在一些實施例中,當已經針對最低級別的簡檔應用了所有的處理方法時,內容處理完成。當處理完成時,該處理結束。否則,該處理前進到以上描述的7135來繼續處理內容。B.采用分級簡檔化來實施語義重構方法一些實施例采用分級簡檔來更高效且準確地實施以上在第II至VI章中描述的語義重構方法。在一些實施例中,分級簡檔用于添加、移除、修改或重新執行方法。一些實施例包括缺省簡檔,在缺少任何簡檔匹配的情況下,該缺省簡檔實施所有可能的重構方法。然而,當選擇了分級更低的簡檔時,關于是否執行特定方法和/或如何實施特定方法,所選簡檔能夠撤銷缺省簡檔。在一些實施例中,簡檔匹配發生在處理中的不同階段。因此,在任何給定時間處激活的簡檔集合可以在整個處理中改變,并且在激活了每個新的簡檔之后不得不重新評估對方法的繼承(inheritance)。由于新激活的簡檔能夠重新排序、添加或者移除處理方法,所以一些實施例也在內容處理期間改變繼承的效果。圖72概念性地例示了一些實施例的用于采用分級簡檔來執行文檔重構的處理 7200。如圖所示,處理接收(在7205處)文檔。在一些實施例中,該文檔是要利用語義重構技術重構的矢量圖形文檔(例如,PDF文檔)。接著,處理7200識別(在7210處)文檔的簡檔。在一些實施例中,初始地分配實施所有可能重構方法的缺省簡檔。然而,一些實施例可以在不應用任何重構方法的情況下基于文檔的內在性質(例如,頁數、頁面尺寸,等等)來識別文檔簡檔。—旦識別出初始簡檔,該處理識別(在7215處)與所識別的簡檔相關聯的重構方法。當初始簡檔僅是缺省簡檔時,將識別出所有可能方法。然而,當簡檔是識別出的文檔簡檔或者分級中更低級別處的簡檔時,在一些情況下,將僅識別一些重構方法。例如,一些簡檔不明確地定義用于執行特定處理的實施,但是也不規定不執行該處理。然后該處理選擇(在7220處)一個識別出的方法。在一些實施例中,所選的方法是基于用于執行重構方法的規定順序。例如,一些實施例的缺省簡檔規定用于實施重構方法的缺省順序。缺省順序例如可以規定先執行區分析方法,然后識別文本行,然后執行導引和裝訂線分析,等等。在一些實施例中,識別方法包括識別由當前簡檔排除的方法。例如,重構處理可能已經識別出頁面的潛在區邊界。在一些實施例中,當至少有特定密度的區邊界并且文本圖案適當地匹配時,頁面被識別為街區圖。因此,將不再執行剩余的區分析(例如,識別區), 因為這會將頁面斷開成不合理個數的小區,這些小區不會被文檔的作者預期為頁面的單獨區域。類似地,在一些實施例中,指定文檔是字處理文檔的文檔簡檔包括用于列識別的方法。然而,當文檔中的特定頁面具有嵌入的內容時,用于特定頁面的簡檔可能以不執行該方法的指令撤銷列識別步驟。一旦選擇了一個方法,處理7200選擇用于該方法的實施。在一些實施例中,活動 (即,選擇的)簡檔可以實施方法,或者可以從分級中更高的活動簡檔繼承對該方法的實施。該處理確定(在7225處)所選方法是否是針對當前(即,最低活動級別)簡檔明確地定義的。當所選方法是明確地定義的時,該處理選擇(在7230處)針對當前簡檔的方法的實施。然后該處理前進到下面描述的7250。否則,該處理確定(在7235處)所選方法是否是針對更高分級級別處的活動簡檔定義的。當該處理是針對更高分級的活動簡檔定義的時,該處理從更高級別的活動簡檔選擇(在7240處)對方法的實施。然后該處理前進到下面描述的7250。否則,該方法選擇 (在7245處)對方法的缺省實施。圖73例示了一些實施例如何繼承實施特定方法的最低級別的活動簡檔。該圖示出了文檔重構簡檔的分級7300。該分級包括針對所有方法的缺省實施的集合7305、針對各種文檔簡檔的實施的集合7310、針對各種章節簡檔的實施的集合7315、針對各種頁面簡檔的實施的集合7320以及針對各種區簡檔的實施的集合7325。如虛線所示,區簡檔1 7330 是當前(最低級別)的活動簡檔,而頁面簡檔1 7335、章節簡檔X 7340和文檔簡檔2 7345 也是活動的。因為區簡檔1 7330是當前活動簡檔,所以對實施特定方法(例如,導引識別)的嘗試查看對區簡檔1 7330的實施的集合,來確定是否它明確地定義了針對該特定方法的實施。當區簡檔1 7330明確地定義了實施時,選擇該實施。否則,檢查活動的頁面簡檔1 7335。沿分級提升地檢查活動簡檔,直到定義了特定方法的實施,或者達到了針對所有方法的缺省實施的集合7305。當識別出實施方法的最低級別的活動簡檔時,該實施由當前活動簡檔繼承。在沒有活動簡檔實施方法時,當前活動簡檔從缺省簡檔繼承該實施。在處理7200選擇方法的實施之后,該處理利用所選實施執行(在7250處)重構。 在一些實施例中,所執行的重構包括以上在第II至VI章中描述的一個或多個處理。接著,該處理確定(在7255處)是否識別出新的簡檔。一些實施例在執行了每個方法之后發送簡檔匹配引擎可用的所有重構數據。一些實施例的簡檔匹配引擎基于接收到的信息確定是否有足夠的信息來測試特定簡檔(例如,在當前活動簡檔下面的下一個分級級別處的簡檔)。如果有足夠的信息,則簡檔匹配引擎相對于簡檔中的各種邏輯判定測試信息。一些實施例對簡檔進行排序使得它們最可能匹配,或者要求將先測試最少量的工作。 下面將在第C節中進一步詳細地描述簡檔匹配。當沒有識別出新的簡檔時,處理確定(在7265處)對文檔的重構是否完成。在一些實施例中,當完成了由活動簡檔集合規定的(并且沒有被更低級別的活動簡檔移除的) 所有方法時,重構完成。當重構完成時,處理結束。否則,該處理前進到7220以如上所述地選擇下一個識別出的方法。當識別出新的簡檔時,處理7200移除(在7260處)由新簡檔規定的任何重構結果。具體地,除了規定應當被執行或不執行的特定方法之外,一些實施例中的簡檔規定應當撤銷特定方法的結果。例如,即使在已經執行了區分析方法之后,簡檔可以規定區信息(邊界、相交部、區,等等)應當從結果中被移除,并且應當在執行了若干其他方法之后再次執行區分析。然后該處理前進到以上描述的7215,并前進直到重構完成。C.簡檔匹配如上所述,在一些實施例中,簡檔是針對該簡檔必須全部為真的邏輯判定的集合。 一些實施例采用簡檔匹配引擎,該簡檔匹配引擎接收內容處理結果、確定是否有足夠的信息來針對當前活動簡檔測試下一個級別的簡檔、然后相對于簡檔測試內容處理結果。一些實施例基于結果可能到達的順序以及基于哪個簡檔最可能匹配來規定用于測試簡檔的特定順序。圖74至77例示了一些實施例的針對四個不同頁面的示例頁面簡檔匹配處理。 圖74例示了四個頁面簡檔簡單頁面7401、標準頁面7402、豐富頁面7403以及布局頁面 7404。每個簡檔包括至少一個邏輯判定具體地,簡檔7401包括三個判定7411至7413,簡檔7402包括四個判定7421至7似4,簡檔7403包括兩個判定7431和7432,并且簡檔7404 包括僅一個判定。圖74還例示了相對于按照所示順序的頁面簡檔進行測試的頁面7400。頁面7400 僅包括圖形對象7450和文本行7460。頁面7400的主體僅具有一個子輩(頁面邊界,其本身沒有子輩),并且用于該區的簡檔是簡單的,因為一個布局中僅有一列文本。在一些實施例中,一旦匹配了一個簡檔,就不測試其他的簡檔了。圖74中的虛線例示了通過由簡檔匹配引擎采用的判定的路徑,以確定頁面7400的頁面簡檔。首先,引擎確定頁面的主體是否有僅一個子輩(判定7411)。因為該判定被評估為真,所以引擎確定該子輩是否沒有區子輩(判定7412,其也為真)。最后,引擎確定是否區簡檔為簡單的(即,在一個布局中僅有一列文本)(判定7413,其也為真)。因為所有三個判定針對頁面7400都為真,所以簡檔匹配引擎確定該頁面7400為簡單頁面。因此,可以針對頁面7400移除一定的方法(例如,列識別)。圖75例示了相對于頁面簡檔7401至7404測試的第二頁面7500。頁面7500包括圖形對象7540、標題行7545和兩列文本行7550。頁面7500的主體僅具有一個子輩(頁面邊界,其本身沒有子輩),并且區中的文本是標題,然后是兩列文本。圖75中的虛線例示了通過由簡檔匹配引擎采用的判定的路徑,來確定頁面7500的頁面簡檔。首先,該引擎確定頁面主體是否僅具有一個子輩(判定7411)。因為該判定被評估為真,所以該引擎確定子輩是否不具有區子輩(判定7412,其也為真)。然后該引擎確定區簡檔是否為簡單的(判定 7413為假)。由于存在標題和兩個列,所以區簡檔不是簡單的,并由此判定7413為假,且匹配引擎檢查下一個簡檔。判定7421至74 針對頁面7500全部為真,因此簡檔匹配引擎確定頁面7500為標準頁面。盡管這些針對圖74中的頁面7400也全都為真,但是由于簡單頁面簡檔7401首先被評估(并且匹配),所以再不會針對頁面7400檢查標準頁面簡檔7402。圖76例示了相對于頁面簡檔7401至7404測試的第三個頁面7600。頁面7600 包括具有若干子輩的主要區,所述子輩包括具有文本的標題區、邊條、居中調出部周圍的主布局以及具有文本的底部區。圖76中的虛線例示了通過由簡檔匹配引擎采用的判定的路徑,以確定頁面7600的頁面簡檔。首先,該引擎確定頁面的主體是否僅具有一個子輩(判定7411)。因為該判定被評估為真,所以引擎確定該子輩是否不具有區子輩(判定7412為假)。因為初級區具有眾多子輩,所以判定7412為假,并且匹配引擎檢查下一個簡檔。基于相同的理由判定7422也為假,所以匹配引擎移動到第三個簡檔,并且因為布局的數量很小且頁面具有主流布局(圍繞同心方形的布局),所以判定7431和7432被評估為真。因此, 頁面7500被分類為豐富頁面。圖77例示了相對于頁面簡檔7401至7404測試的第四個頁面7700。頁面7700包括具有圖形的大區和具有文本的島,以及具有文本的較小區。圖77中的虛線例示了通過由簡檔匹配引擎采用的判定的路徑,以確定頁面7400的頁面簡檔。首先,該引擎確定頁面的主體是否僅具有一個子輩(判定7411)。因為該判定被評估為假,所以匹配引擎檢查下一個簡檔(其因相同的理由為假)。在第三個簡檔處,判定7432為假,這是因為頁面7700沒有主流布局。判定7441總是為真,并由此將頁面7700分類為布局頁面。判定7441總是為真,因為一旦頁面不能與任何先前簡檔匹配,則它自動地被分類為布局頁面。一旦匹配了簡檔,則可以根據簡檔中的指令對重構方法進行執行、移除等。VIII.對感興趣區域的識別和選擇,以及對文檔的導航和顯示諸如電子圖書閱讀器的文檔瀏覽應用通常將需要了解如何最好地顯示文檔和在文檔內導航。這在不能一起易讀地顯示文檔的整個頁面的小屏幕設備上尤為重要。例如,在一些情況下,文檔瀏覽器應當能夠識別出內容表格中的一個條目鏈接到文檔的特定章節, 或者文檔的兩個章節相關(例如,調出部是特定文章的一部分,或者一列流入下一個中)。本發明一些實施例采用從文檔重構獲得的信息(例如,段落和列信息、表格信息, 等等),用于顯示和導航文檔。具體而言,一些實施例調整對語義地重構的文檔的顯示和導航,用以在小屏幕設備(例如,媒體播放器、蜂窩式電話,等等)上的顯示和導航。A.對感興趣區域的識別和選擇一些實施例提供了用于識別和選擇語義地重構的文檔中的感興趣區域,然后基于對感興趣區域的選擇來修改對文檔的顯示的方法。圖78概念性地例示了在一些實施例中用于基于對感興趣的位置的識別來顯示文檔的處理7800。將結合圖79來描述處理7800。 圖79例示了根據本發明一些實施例的在小屏幕設備上的序列7900(7905至7920),其中選擇了感興趣的位置并修改了顯示。如圖78所示,處理7800接收(在7805處)對語義地重構的文檔中感興趣的位置的指示。在一些實施例中,該語義地重構的文檔包括文檔對象模型,該文檔對象模型是如以上在第II至VI章中描述的文檔重構的結果。在一些實施例中,文檔對象模型包括如以上在第II章中描述的區圖,其中該區圖已經被整個文檔重構處理中的內容信息填充。一些實施例的文檔對象模型還指示內容(例如,列、段落、圖像等等)的閱讀順序。一些實施例接收對感興趣的位置的指示作為對顯示器上的點的選擇。例如,選擇可以利用游標控制設備(例如,鼠標、觸摸板,等等)來進行。在觸摸屏顯示器上,也可以通過用戶輕敲屏幕(例如,單敲、雙敲、收聚運動,等等)來指示感興趣的位置。參照圖79,序列7900示出(在7905處)用戶7925選擇顯示器7930上的點,顯示器7930正在顯示文檔的一部分。感興趣的位置7935例示(在7910)在顯示器7930中的用戶觸摸屏幕以進行選
76擇的點處。接著,處理7800識別(在7810處)在語義地重構的文檔中的感興趣區域。序列 7900示出(在7915處)了已經基于對感興趣位置7935的選擇將段落7940識別為感興趣的區域。一些實施例在感興趣位置處于段落的界定框內時將段落識別為感興趣區域,就像針對感興趣位置7935的情況一樣。在識別出感興趣區域之后,處理7800應用(在7815處)所要求的轉換以將感興趣區域放置在顯示設備的瀏覽區中。在一些實施例中,轉換包括旋轉、縮放和平移的組合, 如下面關于處理8000和8100所描述的。接著,該處理基于所應用的轉換來繪制(在7820 處)文檔。然后該處理結束。序列7900示出(在7920處)了根據規定的轉換,段落7940 已經被放大并且垂直地且水平地置中。在一些實施例中,該處理顯示原始(即,未結構化) 的文檔,但是采用對結構性元素的位置的了解(例如,來自結構化文檔)來搖動(pan)和縮放文檔。圖80概念性地例示了一些實施例的用于識別感興趣區域并應用轉換以在顯示設備上繪制感興趣區域的具體處理8000。如圖所示,處理8000接收(在8005處)感興趣位置。在一些實施例中,基于用戶的選擇(例如,利用游標控制設備或者通過觸摸屏來選擇) 來采用感興趣的位置。基于感興趣的位置,然后該處理基于接收到的感興趣位置確定(在8010處)語義地重構的文檔中的所選對象。在一些實施例中,所選對象可以是字符、字、文本行、圖像,等等。在一些實施例中,語義地重構的文檔包括文檔對象模型,其是如以上在第II至VI章中描述的文檔重構的結果。在一些實施例中,文檔對象模型包括如以上在第II章中描述的區圖,其中該區圖已經被整個文檔重構處理中的內容信息填充。接著該處理沿文檔分級提升(在8015處),直到達到段落或圖形對象。在一些實施例中,文檔分級是填充有內容信息的區圖(即,D0M)。當所選對象是字時,在一些實施例中,處理沿分級從字提升到包括該字的文本行,到包括該文本行的段落。然后該處理確定(在8020處)識別出的對象是否是段落。當識別出的對象不是段落時,它是圖形對象。在一些實施例中,該圖形對象可以是形狀、圖像或者連結圖(即,復合圖形對象)中的任一個。當所識別出的對象是圖形對象時,該處理將感興趣矩形(ROI) 定義(在8025處)為所識別出對象的豎直界定框。然后該處理進行縮放(在8030處),使得ROI的寬度和高度不大于顯示區的寬度和高度。然后該處理前進到下面描述的8060。當所識別出的對象是段落時,該處理定義(在8035處)具有段落的父列的寬度和該段落的高度的矩形。然后該處理針對所述矩形應用(在8040處)段落的任何旋轉,并將 ROI定義為經旋轉矩形的豎直界定框。在一些實施例中,如果段落處在文檔對象模型的旋轉分組中,則旋轉該段落。一些實施例如以上在第II章中描述地定義旋轉分組。然后該處理確定(在8045處)段落基線(在旋轉之前)是否比顯示區的對角線更陡。例如,當顯示區是方形時,該確定是基線是比45度更陡還是更不陡。當段落基線比顯示區的對角線更陡時,該處理進行縮放(在8050處),使得ROI不大于顯示區的高度。然后該處理前進到下面描述的8060。另一方面,當段落基線不比顯示區的對角線更陡時,該處理進行縮放(在8055處),使得ROI不大于顯示區的寬度。接著,處理8000確定(在8060處)ROI (如在以上操作中定義的)是否水平地適合在顯示區中。當ROI水平地適合時,該處理水平地置中(在8065處)R0I。然后該處理前進到下面描述的8075。否則,該處理水平地置中(在8070處)感興趣位置。然后該處理確定(在8075處)ROI是否垂直地適合在顯示區中。當ROI垂直地適合時,該處理垂直地置中(在8080處)R0I。然后該處理前進到下面描述的8087。否則,該處理垂直地置中(在 8085處)感興趣位置。接著,該處理確定(在8087處)包括感興趣位置的頁面的底部邊緣或頂部邊緣是否是在顯示區中。如果是的話,該處理將可視頁面邊緣移動(在8090處)到顯示區的對應 (即,頂部或底部)邊緣,使得僅顯示一個頁面,并且垂直地占據整個顯示區。然后該處理確定(在8092處)包括感興趣位置的頁面的右邊緣或左邊緣是否是在顯示區中。如果是的話,該處理將可視頁面邊緣移動(在8095處)到顯示區的對應(即,右或左)邊緣,使得僅顯示一個頁面,并且垂直地占據整個顯示區。最后,該處理利用所應用的以上所有轉換來重新繪制(在8197處)顯示區。然后該處理結束。一些實施例利用其他轉換(例如,縮放、平移、旋轉,等等)的組合來顯示所選的感興趣區域。例如,盡管處理8000確定與作為圖形對象的感興趣區域相比如何不同地縮放作為段落的感興趣區域,但是其他實施例定義感興趣區域,使得縮放針對所有感興趣區域是相同的。例如,下面描述的處理8100按照這種方式在感興趣區域上進行縮放。圖81概念性地例示了一些實施例的用于識別感興趣區域和應用轉換以在顯示設備上繪制感興趣區域的具體處理8100。處理8100類似于以上描述的處理8000。在一些實施例中,用戶可以選擇他們優選處理8000中的縮放轉換還是處理8100中的縮放轉換。其他實施例實施兩個處理之一。如圖所示,處理8100接收(在8105處)感興趣位置。在一些實施例中,基于用戶的選擇(例如,利用游標控制設備或者通過觸摸屏進行選擇)來采用感興趣位置。然后基于感興趣位置,該處理基于接收到的感興趣位置確定(在8110處)語義地重構的文檔中的所選對象。在一些實施例中,所選對象可以是字符、字、文本行、圖像,等等。 在一些實施例中,語義地重構的文檔包括文檔對象模型,其是如以上在第II至VI章中描述的文檔重構的結果。在一些實施例中,文檔對象模型包括如以上在第II章中描述的區圖, 其中該區圖已經被整個文檔重構處理中的內容信息填充。接著處理8115沿文檔分級提升(在8115處),直到達到段落或圖形對象。在一些實施例中,文檔分級是填充有內容信息的區圖。如果所選對象是字,則在一些實施例中,處理沿分級從字提升到包括該字的文本行,到包括該文本行的段落。然后該處理確定(在8120處)識別出的對象是否是段落。如果識別出的對象不是段落,則它是圖形對象。在一些實施例中,該圖形對象可以是形狀、圖像或者連結圖(即, 復合圖形對象)中的任一個。當所識別出的對象是圖形對象時,該處理將感興趣矩形(ROI) 定義(在8125處)為所識別出對象的豎直界定框,然后該處理前進到下面描述的8150。當所識別出的對象是段落時,該處理定義(在8135處)具有段落的父列的寬度和該段落的高度的矩形。然后該處理針對所述矩形應用(在8140處)段落的任何旋轉。在一些實施例中,如果段落處在文檔對象模型的旋轉分組中,則旋轉該段落。一些實施例如以上在第II章中描述地定義旋轉分組。然后該處理將ROI定義(在814 為豎直界定框,該豎直界定框包括在感興趣位置上面的第一特定個數的行以及在該感興趣位置下面的第二特定個數的行。該定義是基于用戶對感興趣位置感興趣并將希望查看感興趣位置下面和上面的一定個數的文本行的假設。在定義了 ROI之后,處理8100然后進行縮放(在8150處),使得ROI的寬度和高度不大于瀏覽區的寬度和高度。接著,處理8100確定(在8160處)ROI (如在以上操作中定義的)是否水平地適合在顯示區中。當ROI水平地適合時,該處理水平地置中(在8165處)ROI。否則,該處理水平地置中(在8170處)感興趣位置。然后該處理確定(在8175處)ROI是否垂直地適合在顯示區中。當ROI垂直地適合時,該處理垂直地置中(在8180處)ROI。否則,該處理垂直地置中(在8185處)感興趣位置。在置中了感興趣位置和/或區域之后,該處理確定(在8187處)包括感興趣位置的頁面的底部邊緣或頂部邊緣是否是在顯示區中。如果是的話,該處理將可視頁面邊緣移動(在8190處)到顯示區的對應(即,頂部或底部)邊緣,使得僅顯示一個頁面,并且垂直地占據整個顯示區。然后該處理確定(在8192處)包括感興趣位置的頁面的右邊緣或左邊緣是否是在顯示區中。如果是的話,該處理將可視頁面邊緣移動(在8195處)到顯示區的對應(即,右或左)邊緣,使得僅顯示一個頁面,并且垂直地占據整個顯示區。最后,該處理利用所應用的以上所有轉換來重新繪制(在8197處)顯示區,然后該處理結束。B.對語義地重構的文檔的顯示和導航一些實施例提供了各種用于優化對語義重構文檔的顯示和導航的方法。在一些實施例中,針對小屏幕設備(例如,媒體播放器、蜂窩式電話,等等)優化顯示和導航。圖82概念性地例示了一些實施例的用于顯示語義重構文檔的處理8200。如圖所示,該處理接收(在8205處)語義重構文檔。在一些實施例中,該語義重構文檔包括文檔對象模型,該文檔對象模型是如以上在第II至VI章中描述的文檔重構的結果。在一些實施例中的文檔對象模型包括如以上在第II章中描述的區圖,其中該區圖已經被在整個文檔重構處理中的內容信息所填充。然后該處理將語義重構文檔分割(在8205處)成多個章節。在一些實施例中,該分割是基于針對文檔的文檔對象模型中的信息。在一些實施例中,每個章節是字、相關聯的圖形對象和其他嵌套章節的有序序列。例如,嵌套可以表現為加框示例或注釋或者作為表格的單元。接著處理8215調整重構文檔的瀏覽以適應通過章節的自然流。然后該處理結束。 在一些實施例中,該調整可以按照多種方式展現自己。圖83例示了一些實施例的一個這種調整。圖83例示了設備8305,其正初始地按照兩列8310和8315來顯示語義重構文檔的一部分。在一些實施例中,該文檔初始地具有兩列,而在其他情況下該文檔已經針對在設備 8305上瀏覽而進行了調整。圖83例示了設備8305側邊轉動。該設備包括加速計或其他這種設備來識別出它側邊轉動。因此,視圖旋轉90度,使得文本水平地走向。然而,不能顯示同樣的兩列8310 和8315。相反,這些列的文本被斷開成三列8320至8330,使得所有文本仍都顯示在相同的尺寸下,并且保持可讀性。這是可以的,因為通過語義重構處理放在一起的文檔對象模型指示文本的閱讀順序是從第一列的頂部到底部,然后再返回到第一列的頂部。
圖84概念性地例示了一些實施例的用于在語義重構文檔的區域之間進行導航的處理8400。如圖所示,處理8400顯示(在8405處)語義重構文檔中的區域。在一些實施例中,語義重構文檔包括文檔對象模型,該文檔對象模型是如以上在第II至VI章中描述的文檔重構的結果。在一些實施例中的文檔對象模型包括如以上在第II章中描述的區圖,其中該區圖已經被在整個文檔重構處理中的內容信息所填充。在一些實施例中,語義重構文檔的區域由文檔對象模型定義,并且可以包括文本區域、圖形,等等。處理8400接收(在8410處)滾動經過顯示區域的端部的輸入。在一些實施例中,該端部可以是區域的底部(向下滾動)或頂部(向上滾動)。例如,當顯示文本列的一部分時,該處理接收向上滾動到列的頂部或者向下滾動到列的末端的輸入。然后該處理采用文檔的語義重構分級模型(即,文檔對象模型)將文檔的流中的下一個區域自動地移動(在8415處)到顯示中。如上所述,采用文檔對象模型,該處理可以識別出通過文本的流以及文檔中的相關聯圖形。為了繼續列示例,當用戶向下滾動經過列的端部時,一些實施例跳到下一列的頂部。一些實施例相反將第二列的頂部的文本附于第一列的底部,并且繼續滾動,就像文本全都是一列似的。圖85概念性地例示了一些實施例的用于針對小屏幕設備修改語義重構文檔的布局的處理8500。如圖所示,該處理接收(在8505處)具有特定布局的語義重構文檔。在一些實施例中,該語義重構文檔包括文檔對象模型,該文檔對象模型是如以上在第II至VI章中描述的文檔重構的結果。在一些實施例中的文檔對象模型包括如以上在第II章中描述的區圖,其中該區圖已經被在整個文檔重構處理中的內容信息所填充。圖86例示了文檔的頁面8600,就像它在大屏幕上或者沒有語義重構地那樣顯示, 其具有特定兩列布局,其中每列包括若干文本行。頁面8600上的第一列包括跨六個完整文本行和部分第七行的字集合8605。處理8500通過采用文檔的分級模型(即,文檔對象模型)修改(在8510處)在保持文檔的流的同時在小屏幕設備上瀏覽的布局。該處理在小屏幕設備上顯示(在8515 處)修改布局的一部分。然后該處理結束。圖86例示了顯示來自頁面8600的第一列的文本8605的小屏幕設備8610。然而,文本已經針對在小屏幕設備上的理想瀏覽進行了調整。 不是將文本顯示得非常小以致于用戶不得不瞇眼看,而是增大文本尺寸并且減少每行的字數。在一些實施例中,向下滾動將使得用戶能夠繼續按順序閱讀文本。在一些實施例中,文檔的文檔對象模型包括關于如何針對各種情況適應性地顯示布局、顯示區域尺寸以及顯示區域縱橫比的建議。在一些實施例中,這些建議可以在文檔重構處理期間基于重構的結果生成,可以根據用戶偏好設置,或者可以由文檔的初始作者設置。一些實施例將重構文檔信息(例如,文檔對象模型)與文檔一起存儲,以及可以將這種用戶偏好與重構文檔一起存儲。一些實施例將文檔信息存儲為XML格式,或者作為PDF (或者類似格式)文檔的元數據。IX.跨布局對文本的選擇除了顯示和導航文檔之外,能夠選擇文本可能對于用戶來說也是非常重要的。具有多個不同文本流(例如,多個文章)的復雜頁面可能會對試圖智能地按順序選擇文本的應用制造困難,其中多個不同文本流繼而又斷開成多個布局。當選擇文本(例如,用于復制和粘貼)時,保留字符、字、文本行等的順序是關鍵的。這包括不僅僅在列內進行選擇,而且
80包括跨多個列、布局、區或頁面進行選擇。—些實施例提供了用于在語義重構文檔中選擇文本的方法。在一些實施例中,語義重構文檔包括文檔對象模型,該文檔對象模型是如以上在第II至VI章中描述的文檔重構的結果。在一些實施例中的文檔對象模型包括如以上在第II章中描述的區圖,其中該區圖已經被在整個文檔重構處理中的內容信息所填充。一些實施例的文檔對象模型包括布局和流信息,例如對布局內的列的閱讀順序以及從一個布局到下一個布局的流。圖87概念性地例示了一些實施例的用于確定對語義重構文檔中的文本的選擇的處理8700。如圖所示,處理8700接收(在8705處)文檔的區和布局信息。在一些實施例中,區信息包括填充有文檔的內容的區圖,如以上在第II章中所描述的。在一些實施例中, 布局信息包括如以上在第IV章中描述的列和布局,以及通過布局以及在布局之間閱讀的流。然后該處理顯示(在8710處)文檔的一部分。在一些實施例中,該文檔在標準屏幕上按照其初始瀏覽尺寸顯示。然而,一些實施例利用以上在第VIII章中描述的處理之一按照適應性方式顯示文檔(例如,如果在小屏幕設備上顯示文檔的話)。處理8700接收(在8715處)選擇的起始點。該處理還接收(在8720處)選擇的終止點。一些實施例通過游標控制設備(例如,鼠標)、鍵盤或者其組合接收起始點和終止點。例如,可以通過用戶利用鼠標點擊文本中的起始點、保持鼠標按鈕向下、拖拽到文本中的終止點并釋放鼠標按鈕來定義選擇。類似的處理可以利用其他游標控制設備執行。一些實施例還允許利用游標控制設備進行其他類型的選擇——例如,雙擊以選擇一個字,或者三擊以選擇一個文本行。在一些實施例中,用戶還可以采用鍵盤上的選擇鍵(例如,切換鍵和箭頭鍵)來選擇語義重構文檔中的文本。在拖拽選擇的情況下,一些實施例將起始點定義為鼠標首先點擊的點,并在鼠標按鈕保持向下時將終止點定義為游標的當前點,或者在鼠標按鈕被釋放時將終止點定義為鼠標按鈕的釋放點。對于雙擊和三擊或者選擇結構性元素(例如,段落、列等)的其他這種選擇機制,一些實施例將起始點定義為結構性元素的界定框的左側底部并且將終止點定義為其右側頂部。在一些實施例中,結構性元素的界定框是該印刷界線并集的界定框。在一些實施例中,字符的印刷界線從其左側的錨點延伸到該錨點加右側的寬度(可能通過與后面的字符緊排而調整),并且從錨點上的冒進延伸到錨點下面的縮進。然后該處理利用文檔的起始點、終止點以及布局和流性質確定(在8725處)文本的所選章節。然后該處理結束。各種實施例提供了用于在給定語義重構文檔的起始點和終止點的情況下精確地確定從該文檔的哪個布局選擇哪個文本的不同具體處理,下面將描述這些處理中的一些。圖88例示了對語義重構文檔的頁面8801上的文本的選擇的序列8800。頁面8801 包括兩個主要的列8805和8810以及頁面中央的小調出部8815 (其為不同的布局)。序列 8800也示出了用于選擇的起始點8820和終止點8825。對從起始點到終止點所得的文本的選擇8830是從起始點到第一列的底部,然后從第二列的頂部直到終止點。在所示實施例中沒有選擇中央調出部8815中的文本。本領域普通技術人員將認識到,可以改變選擇處理, 使得將中央調出部8815包括到選擇8830中。圖89概念性地例示了一些實施例的用于定義對語義重構文檔中的文本的選擇的具體處理8900。如圖所示,處理8900接收(在8905處)文檔的區和布局信息。在一些實施例中,區信息包括填充有文檔的內容的區圖,如以上在第II章中所描述的。在一些實施例中,布局信息包括如以上在第IV章中描述的列和布局,以及通過布局以及在布局之間閱讀的流。接著,該處理向文檔中的每個列分配(在8910處)一個閱讀順序。一些實施例在每個頁面的閱讀順序為零處開始(即,將閱讀的第一列被分配以零閱讀順序)。一些實施例應用如下要求,即在特定布局內,分配給每個列的閱讀順序必須與布局內的列的順序一致, 并且沒有特定布局之外的列可以具有在特定布局的起始列和終止列的閱讀順序之間的閱讀順序。在一些實施例中,關于在閱讀順序上哪個布局是在前的,判定可以是任意的。其他實施例基于頁面的設計來逐布局地辨識閱讀順序。然后該處理顯示(在8915處)文檔的一部分。在一些實施例中,該文檔按照其在標準屏幕上的原始瀏覽尺寸顯示。然而,一些實施例利用以上在第VIII章中描述的處理之一按照適應性方式顯示文檔(例如,當在小屏幕設備上顯示文檔的時候)。然后處理接收(在8920處)文本選擇的起始點和終止點。一些實施例通過游標控制設備(例如,鼠標)、鍵盤或者其組合接收起始點和終止點。例如,可以通過用戶利用鼠標點擊文本中的起始點、保持鼠標按鈕向下、拖拽到文本中的終止點并釋放鼠標按鈕來定義選擇。可以利用其他游標控制設備執行類似的處理。一些實施例還允許利用游標控制設備進行其他類型的選擇——例如,雙擊以選擇一個字,或者三擊以選擇一個文本行。在一些實施例中,用戶還可以采用鍵盤上的選擇鍵(例如,切換鍵和箭頭鍵)來選擇語義重構文檔中的文本。接著,該處理確定(在8925處)起始點和終止點是否在同一布局內。當起始點和終止點不在同一布局內時,該處理將同一布局中的新終止點確定(在8930處)為起始點。 基于用戶可能意外地將選擇設備移到第二布局中的假設,并且由于與跨布局相比在單個布局內可以更可靠地確定選擇,所以一些實施例將終止點移動到與起始點相同的布局。一些實施例定義從起始點到終止點的線,并且將該線離開起始點的布局的定位定義為新終止點。其他實施例將終止點水平地或垂直地平移到起始點的布局中。然后該處理確定(在8935處)起始點在閱讀順序中是否是在終止點之前。在一些實施例中,當起始點和終止點處于同一列中時,將閱讀順序確定為使得兩個點中更高的一個(并且相同的話,則為最左邊的一個)是閱讀順序中的較早點。當起始點在閱讀順序中是在終止點之后時,該處理切換(在8940處)選擇的起始點和終止點,使得在閱讀順序中起始點始終早于終止點。接著,處理8900確定(在8945處)起始點和終止點是否在同一列中。當兩個點處于同一列時,該處理選擇(在8950處)該列中從起始點到終止點的文本。然后該處理結束。否則,當兩個點不在同一列中時,處理選擇(在8955處)從起始點到包括該起始點的列的底部、從包括終止點的列的頂部到終止點以及所有中間列的文本。然后該處理結束。在一些實施例中,第一個選擇的字符是在起始點處或起始點右側的字符,而最后選擇的字符是在終止點處或者終止點左側的字符。在一些實施例中,如果終止點在兩行之間,則選擇以上的所有行并且不選擇下面的行。一旦選擇了文本,該處理結束。圖90例示了語義重構文檔的頁面9000。頁面9000包括兩個主要的列9005和9010以及居中的文本框9015。如圖所示,它們每一個都被分配以一個閱讀順序(列9005具有閱讀順序1,列9010具有閱讀順序2,而文本框9015具有閱讀順序3)。圖90還例示了選擇的起始點9020和終止點9025,以及由起始點和終止點定義的線9030。圖91例示了根據處理8900由起始點9020和終止點9025定義的選擇9100。即使線9030包括文本框9015的一部分,但是由于它是不同的布局,所以根據處理8900不選擇該文本。相反,選擇9100從起始點直到終止點,選擇列9005中起始點下面的所有行,以及列9015中起始點以上的所有行。圖92還例示了頁面9000,以及不同選擇的起始點9220和終止點9225,和由起始點和終止點定義的線9230。圖93例示了根據處理8900的一些實施例由起始點9220和終止點9225定義的選擇9300。由于終止點9225與起始點9220不在同一布局中,所以終止點移動到與起始點9220相同的布局中的點。圖93中所示的實施例繪制了起始點與終止點之間的線,并將終止點移動到該線離開起始點布局的定位處。選擇9300是終止點9225被移動到點9305后的結果。圖94例示了一些實施例的用于定義對語義重構文檔中的文本的選擇的另一具體處理9400。一些實施例實施處理8900或處理9400。其他實施例允許用戶選擇(例如,通過菜單選項)采用處理8900 (其將選擇限制到僅一個布局)還是處理9400 (其允許跨多個布局進行選擇)進行文本選擇。如圖所示,處理9400接收(在9405處)文檔的區和布局信息。在一些實施例中, 區信息包括包括填充有文檔的內容的區圖,如以上在第II章中所描述的。在一些實施例中,布局信息包括如以上在第IV章中描述的列和布局,以及通過布局以及在布局之間閱讀的流。接著,該處理向文檔中的每個列分配(在9410處)一個閱讀順序。一些實施例在每個頁面上的零處開始。一些實施例應用如下要求,即在特定布局內,分配給每個列的閱讀順序必須與布局內的列的順序一致,并且沒有特定布局之外的列可以具有在特定布局的起始列和終止列的閱讀順序之間的閱讀順序。在一些實施例中,關于在閱讀順序上哪個布局是在前的,判定可以是任意的。其他實施例試圖基于頁面的設計來逐布局地辨識閱讀順序。然后處理9400顯示(在9415處)文檔的一部分。在一些實施例中,該文檔按照其在標準屏幕上的原始瀏覽尺寸顯示。然而,一些實施例利用以上在第VIII章中描述的處理之一按照適應性方式顯示文檔(例如,如果在小屏幕設備上顯示文檔的話)。然后處理接收(在9420處)文本選擇的起始點和終止點。一些實施例通過游標控制設備(例如,鼠標)、鍵盤或者其組合接收起始點和終止點。例如,可以通過用戶利用鼠標點擊文本中的起始點、保持鼠標按鈕向下、拖拽到文本中的終止點并釋放鼠標按鈕來定義選擇。可以利用其他游標控制設備執行類似的處理。一些實施例還允許利用游標控制設備進行其他類型的選擇——例如,雙擊以選擇一個字,或者三擊以選擇一個文本行。在一些實施例中,用戶還可以采用鍵盤上的選擇鍵(例如,切換鍵和箭頭鍵)來選擇語義重構文檔中的文本。然后處理9400定義(在9425處)起始點與終止點之間的線。如果起始點或終止點(或兩者)不在一列中(即,在空白空間、圖形等等中),則處理將新起始點或終止點(或兩者)定義(在9430處)在該線通過的最后一列的邊緣處。一些實施例將該點定義在該線通過邊緣處的列的邊緣處。其他實施例將起始點或終止點水平地平移到列中以定義新起始點或終止點。然后該處理確定(在9435處)起始點在閱讀順序中是否是在終止點之前。在一些實施例中,當起始點和終止點處在同一列中時,閱讀順序被確定為使得兩個點中更高的一個(并且相同的話,則為最左邊的一個)是閱讀順序中的較早點。當起始點是在終止點之前時,該處理前進到下面描述的9445。當起始點在閱讀順序中是在終止點之后時,該處理切換(在9440處)選擇的起始點和終止點,使得在閱讀順序中起始點始終早于終止點。接著,該處理選擇(在9445處)從起始點到包括該起始點的列的末端、從包括終止點的列的開頭到終止點以及閱讀順序中在起始列與終止列之間的所有列的文本。然后該處理結束。在一些實施例中,第一個選擇的字符是在起始點處或起始點右側的字符,而最后選擇的字符是在終止點處或者終止點左側的字符。在一些實施例中,如果終止點在兩行之間,則選擇以上的所有行并且不選擇下面的行。圖95例示了根據處理9400由起始點9020和終止點9025 (在圖90的頁面9000 上)定義的選擇9500。因為起始點9020與終止點9025(圖90中所示)處在同一布局中, 所以由于居中文本框9015在閱讀順序中處在終止點的列之后,故而不選擇該居中文本框 9015。用戶沿著線9015拖拽時將通過框9015,并且此時將選擇所有列9010和部分文本框 9015 (參照以下圖96)。然而,在光標離開框9015時,將僅選擇列9010的一部分直到游標的位置(終止點)。類似地,圖96例示了根據處理9400由起始點9220和終止點9225 (在圖92的頁面9000上)定義的選擇9600。由于終止點9225處于與起始點9220不同的布局中,所以選擇起始點的整個布局,包括列9005的大部分以及列9010的全部。另外,選擇框9015中的文本直到終止點9225。圖91和93以及圖95和96例示了通過利用處理8900或處理9400可獲得的不同選擇選項。本領域普通技術人員將認識到,可以采用其他選擇處理,以利用文檔的布局和流來達到其他可能的有益結果。X.高效集群分析如以上在各章節中所述,本發明一些實施例采用集群分析來執行文檔重構。例如, 利用密度集群識別對準導引,利用界線集群識別連結圖,以及利用字符之間的間隔來采用差值集群以識別字和段間隔。然而,集群分析可能是非常存儲密集的,使得資源受限的設備 (例如,蜂窩式電話或媒體播放器)可能難以執行集群分析。因此,本發明的一些實施例提供了用于執行高效集群分析的方法。在一些實施例中,高效集群分析使得能夠在資源受限設備(例如,手持式設備)上執行集群分析。資源受限設備可能在可用存儲器、處理能力以及兩者或者其他計算資源方面受限。在一些實施例中,集群分析采用存儲未排序陣列的索引的間接排序陣列。一些實施例采用間接排序陣列來同時以多個不同的距離尺度分隔數據,以更快速地找到數據的最優分隔,而不是在每個不同的距離尺度處重復集群分析并比較結果。圖97概念性地例示了一些實施例的用于采用集群分析來語義地重構文檔的處理 9700。如圖所示,處理9700在資源受限設備上接收(在9705處)文檔。在一些實施例中, 該設備是媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式設備。在一些實施例中,該文檔是不包括結構性信息的矢量圖形文檔。然后該處理在資源受限設備上對文檔數據執行(在9710處)高效集群分析。例如,一些實施例執行差值集群來識別字和段間隔,執行密度集群來識別對準導引,以及執行界線集群來識別復合圖形。最后,該處理基于集群分析的結果在資源受限設備上語義地重構(在9715處)文檔。然后該處理結束。圖98例示了一些實施例的在資源受限設備9810上語義地重構文檔 9805的序列9800。文檔9805初始地被解析(在9801處)成具有坐標的字符集合9815。 例如,字符9820( “r”)具有坐標(X25Y2)0 一些實施例還解析圖形對象(例如,圖像、形狀,等等。接著,對文檔數據應用(在9802處)高效集群分析。在一些實施例中,這包括采用差值集群來識別字、采用密度集群來識別導引以及采用界線集群來識別要連結的圖。也執行其他重構處理(在9803處)。例如,在一些實施例中,識別段落和列。本領域普通技術人員將認識到,在一些實施例中集群分析處理和其他重構處理不必按它們執行的順序分開。高效集群分析和其他重構處理的結果是可以顯示、導航等的語義重構文檔9825。A.作為運算符集的集群分析一些實施例基于應用于實數序列Ov r2,…,rN)的若干運算符來執行集群分析 (無論是差值集群、密度集群還是界線集群)。一些實施例包括如下運算符 求差值運算符 D((ri,r2,-,rN)) = ^2TijT3T2,…,I^-Iv1)。在一些實施例中,求差值運算符D定義了元素ι·Ν的成對分組(即,定義對值{r2,ri},{r3,r2},等等)。 排序運算符 S((r1; r2,-,rN)) = (si; s2,…,,其中(s1; &,...,sN)是(r1; r2,…,rN)的排列,使得S1 ( s2 sNO參分隔運算符P(g,(ri;r2, -,rN)) = ((r1 ...,rK1),(rK1+1,-,rK2), ...,(rKp+1,..., rH), (rH+1,…,ι·Ν),其中當且僅當J是在集合IK1,…Km)中時有巧+1-巧彡g。在一些實施例中,變量g被稱為間隔最小值,而運算符P將序列Ovr2,…,ι·Ν)分隔成非交疊子序列, 其中任何地方兩個子序列值之間的差值超過間隔最小值。 聯合(coalesce)運算符C,其任意次數遞歸地對分隔的序列(例如,運算符P的輸出)進行運算,以將相鄰對子序列連結成單個子序列。在一些實施例中,確定何時連結相鄰對的測試是域獨立的。 過濾運算符F,其基于域獨立的測試在分隔的序列上運算以移除一些集群。以上在第III章中討論的密度約束是采用F的例示。一些實施例的差值集群是關于以上運算符執行的。類似地,因為界線集群采用展度值替代一階差值來采用差值集群,所以一些實施例的界線集群是關于以上運算符執行的。例如,一些實施例將排序運算符S應用于輸入數據,隨后應用差值運算符D以生成一階差值。S和D然后被應用于結果數據以生成二階差值(差值之間的差值)。利用S對二階差值排序,然后將二階差值拆分成兩個不連結子序列(級別內差值和更大的級別間差值)。在一些實施例中,拆分包括對二階差值進一步應用D,以獲得三階差值,隨后應用 S以排序三階差值。對二階差值的拆分通常發生在有一個三階差值顯著大于其他三階差值
85的情況下。一些實施例還評估域特定因子。一旦建立了拆分,一些實施例采用等于最小級別間第二差值的間隔最小值來應用 P,以分隔有序一階差值,使得每個分隔表示一級集群。一些實施例對該分隔應用C,而一些實施例不這樣做。為了將數據分隔成特定級別的集群,一些實施例采用等于特定級別處的最小差值的間隔最小值來對(排序的)輸入數據應用P。一些實施例此時還應用C,但是通常采用與級別分隔不同的準則來聯合集群分隔。最后,一些實施例應用F來取消一些集群。還關于以上運算符來執行一些實施例的密度集群。例如,一些實施例對輸入數據應用S,隨后應用D,以生成一階差值,并且應用S以排序差值。對于每個差值d,一些實施例采用間隔最小值d利用運算符P來分隔有序輸入數據,然后利用密度約束來過濾分隔。通過優化度量來測量每個過濾后的分隔,并且將最優分隔選擇為最終集群。一些實施例環繞通過一階差值(作為間隔最小值),其從排序序列中最大的值開始并移動到依次較小的值。在一些實施例中,如果有足夠的信息,則為了效率可以早點結束該環繞。具體而言,一些實施例識別到每個連續分隔將是一個集群被拆分成兩個集群的先前分隔。一些實施例還識別出,不滿足最小尺寸密度約束的集群未來將始終不滿足這種約束,因此這些集群可以被丟棄。在一些實施例中,一旦分隔中的所有集群都落到最小尺寸之下,則較早地結束該環繞。B.用于集群分析的高效數據結構一些實施例通過采用高效數據結構來執行高效集群分析,所述數據結構允許節省存儲器和處理。例如,當排序數據(例如,對輸入數據應用運算符幻時,不是生成數據的新陣列,一些實施例而是將索引陣列定義到未排序數據的陣列中,其中索引按照它們引用的值的順序排序。在一些實施例中,這被稱作間接排序陣列。本領域普通技術人員將理解,盡管示例采用陣列,但是也可以采用任何其他適合的數據結構。圖99概念性地例示了一些實施例的用于通過采用間接排序陣列分隔數據集的處理9900。將結合圖100來描述處理9900。圖100例示了對具有九個數據項(0. 00,7. 43, 17. 14,25. 46,26. 60,30. 35,34. 25,39 和 46. 97)的數據集的分隔。如圖 99 所示,處理 9900 接收(在9905處)具有要集群的數據值的排序陣列A。在一些實施例中,該數據是用于識別文檔中的字或識別對準導引的字符定位數據。參照圖100,利用索引A
-A[8],將數據集存儲在排序陣列A 10010中。接著,處理9900接著通過比較陣列A的后續值對來定義和存儲(在9910處)陣列 A的一階差值的陣列D(A)。在一些實施例中,通過采用以上在第A節中描述的運算符D來生成陣列D(A)。圖100例示了存儲數據之間的一階差值的陣列D 10015。例如,索引D[3] 中的值是從陣列A 10010的索引A[4]中的值中減去索引A[3]中的值。接著,該處理通過對陣列D(A)應用排序函數來定義并存儲(在9915處)D (A)的索引的間接排序陣列S(D(A))。在一些實施例中,排序函數是以上在第A節中描述的運算符S。圖100例示了對陣列D 10015的值排序的間接排序陣列S(D) 10020。陣列10020中的第一個值(“3”)引用陣列D 10015中的索引3,這是最小的一階差值(“1. 14”)。陣列 10020中的第二個值引用陣列D 10015中的索引4,這是第二小的一階差值,依此類推。然后該處理確定(在9920處)要用在分隔數據中的集群之間的間隔的最小尺寸。 在一些實施例中,這是與以上在第A節中描述的分隔運算符P—起使用的間隔最小值g。最小間隔尺寸在一些實施例中是由用戶規定的,或者在其他實施例中是要求解的問題固有的值。一些實施例采用多個分隔(例如,在密度集群的情況下),使得采用基于數據的不同間隔最小值。接著,處理9900利用存儲在陣列S (D(A))中的連續索引將數據分隔(在9925處) 成集群。然后該處理存儲(在9930處)該分隔。然后該處理結束。一些實施例采用存儲在間接排序陣列中的索引來分隔數據。在一些實施例中,存儲在S (D(A))中與大于間隔最小值(即,有效間隔最小值)的最小一階差值相對應的索引將與排序數據陣列中的如下索引相對應,在該索引之后數據應被拆分。存儲在陣列S(D(A))中的在有效間隔最小值之后的所有索引還將指示在哪里拆分排序數據,這是因為它們代表大于間隔最小值的間隔。圖100例示了本例中的有效間隔最小值為7. 97,這是在陣列D 10015中的索引7 中。因此,數據的分隔10025具有四個集群,因為它在三個地方被拆分(在索引7、2和1之后)。一些實施例將分隔存儲為陣列S (D(A))的單個索引。分隔10025被存儲為索引10030, 該索引10030具有為5的值。這指示與有效間隔最小值相對應的索引被存儲在陣列10020 的索引5處,并由此將分隔數據的索引存儲在陣列10020的索引5及以上處。以上處理9900使得能夠針對集群分析有多個處理和存儲器效率。首先,存儲索引 (其為整數)而非差值排序陣列中實際數據的十進制值節省了存儲器空間。其次,代替實際地將分隔存儲為多個分立陣列,它被存儲為引用間接索引陣列的索引的單個整數值,這在針對大的數據陣列要評估眾多分隔時可以帶來顯著的存儲器節省。第三,可以從間接排序陣列快速地讀出用以分隔數據的索引,這顯著地節省了處理時間。可以按照多種方式來平衡這些效率從而執行集群分析。圖101概念性地例示了一些實施例的用于同時以多個距離尺度執行集群分析的處理10100。在一些實施例中,處理 10100利用處理9900提供的效率。如圖所示,處理10100定義(在10105處)要集群的數據值的差值的間接排序陣列。這是諸如圖100的陣列10020的陣列,并且在一些實施例中通過排序輸入數據值、取一階差值然后對它們進行排序來獲得。然后處理10100同時以若干不同距離尺度分隔(在10110處)數據值。在一些實施例中,這意味著采用不同的間隔最小值針對數據生成多個分隔。例如,在密度集群的情況下,在一些實施例中生成每個可能的分隔。在一些實施例中,由于利用間接排序陣列來排序一階差值,所以數據的分隔定位可以被快速地讀出為存儲在間接排序陣列中的索引。接著,該處理將每個分隔存儲(在10115處)為引用間接排序陣列的索引的整數值。圖100的整數值10030是將分隔存儲為單個整數值的示例。然后該處理確定(在10120 處)最優距離尺度(以及由此確定最優分隔)。例如,一些實施例采用優化量度,例如以上在第III章中針對密度集群所描述的。此外,一些實施例通過在相對于優化量度測試分隔之前采用約束來消除分隔中的一些集群。最后,一旦確定了最優距離尺度,該處理將從最優距離尺度得到的數據的分隔存儲(在10125處)為要求解的問題的集群集合。然后該處理結束。在一些實施例中,一旦確定了該集群集合為最優集合,則將該集群集合存儲為新的陣列。盡管以上描述指示針對重復采用分隔運算符而得到的效率,但是針對其他方面的集群分析也可應用來自間接排序陣列和將分隔存儲為單個值的存儲器和處理效率。例如, 在一些實施例中,聯合運算符可以利用相同的效率。
如上所述,一些實施例的聯合運算符C可能重復地連結分隔中的相鄰集群。對相鄰集群的連結可以被表示為移除分隔中的拆分。因為每個這些拆分對應于間接排序陣列中連續索引之一,所以聯合集群可以被定義為從序列中取消特定索引。因此,對分隔應用聯合運算符的結果可以是適合索引(即,拆分新分隔的索引)的序列(例如,陣列)。在一些實施例中,排序這種子序列要比在要聯合的集群中直接在數據周圍移動快得多。此外,差值的聯合集群(其有效地是多級別差值的組合)沒有不利地影響針對特定選擇的級別可以快速地讀出數據集群(與差值集群不同)的效率。即使在聯合差值集群之后,第L個間接排序差值集群及以上的索引是針對級別L處的數據集群的拆分點。由于聯合造成的變化是將有更少的間接排序二階差值,該二階差值確定每個間接排序一階差值集群從哪里開始。由于僅針對數據集群(而非針對差值集群)應用過濾運算符(其基于約束消除了數據的集群),所以當應用過濾運算符時已經確定數據集群,由此這不會干擾在以上實施分隔和聯合運算符的過程實現的效率。還可以在于如以上在第IV章中描述的差值集群中執行的將二階差值拆分為級別內和級別間二階差值中實現效率。在一些實施例中,用于確定拆分點的條件可以取決于對將得到的一階差值和數據的集群。由此,對這些條件的評估將直接受益于確定對差值的分隔(并由此對數據的分隔)中的效率。例如,在差值集群應用到文檔重構的情況下,采用對二階差值的拆分來確定文本行中的字中斷和段中斷(例如,列、制表位等間隔),其對應于一階差值并分別大于一階差值。在一些實施例中,目的在于拆分二階差值,使得一階差值的第二集群的最小值沒有比可應用字體的期望間距字符寬度小很多。此外,次要目的將是,數據集群(其中每一個是一個字)具有針對可應用語言中的字來說典型的平均尺寸。潛在的拆分點可以取決于一階差值的所得集群和數據集群與它們的期望值相距有多遠而被評估為相對較低。在一些實施例中,在確定最優拆分點的原則下,這種評估可以與直接應用于二階差值的其他量度(例如, 拆分的相對尺寸、拆分位置的百分數以及在拆分處的百分比增大量)相結合。可以通過以上描述的處理顯著更高效地重復測試二階差值中的不同拆分。本領域普通技術人員將認識到,盡管已經主要關于在文檔重構中的使用描述了以上所述的集群分析和特定效率技術,但是它們也可以應用于如下任何問題,即其中有集合、 集合的元素對上的距離函數以及對識別由相對于集合較小的距離分開的元素的子集的需要。例如,可以應用集群分析,以通過集群由測量眼睛移動、鼠標移動或者觸摸屏交互所獲得的位置數據,來分析與應用、網頁或視頻的用戶交互。作為另一示例,可以通過減小用于解碼柵格圖像(即,位圖)的顏色個數來壓縮該柵格圖像。集群分析還可以用于原始的顏色集合,以選擇減小的顏色集合,使得利用單個顏色(通常等于其成員的平均值)替代每個顏色集群。另一個示例是一些圖像識別技術(例如,生物測量學、光學字符識別、貨幣驗證, 等等)以及柵格圖像的矢量化取決于對由空間和顏色坐標軸定義的度量空間中的像素的集群。作為最后的示例,通常通過在軸為感興趣參數的空間中繪制數據點來找到實驗數據 (例如,科學數據或商業數據)中的模式。集群分析可以應用于該數據,注意給定集群中的所有點具有所有感興趣參數的大致相同的值。C.軟件架構
在一些實施例中,將以上描述的集群分析實施為在特定機器(例如,計算機、媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式或資源受限設備)上運行(或者存儲在計算機可讀介質上)的軟件。圖102概念性地例示了一些實施例的用于執行集群分析的集群分析應用10200的軟件架構。在一些實施例中,應用是獨立應用或者集成到另一應用(例如,文檔重構應用)中,而在其他實施例中,應用可能是在操作系統內實現的。集群分析應用10200包括密度集群模塊10205、差值集群模塊10210以及界線集群模塊10215。該應用還包括排序模塊10220、求差值模塊10225、分隔模塊10230、聯合模塊 10235以及過濾模塊10240還有集群分析存儲設備10M5。圖102還例示了文檔內容10250。本領域普通技術人員將認識到,集群分析應用 10200還可以用于采用集群分析的其他處理,其與文檔重構無關。密度集群模塊10205、求差值集群模塊10210以及界線集群模塊10215都接收來自文檔內容10250的信息(例如,本原元素位置數據)。密度集群模塊10205部分地通過利用模塊10220至10240執行如以上在第III章中描述的密度集群。差值集群模塊10210部分地通過利用模塊10220至10240來執行如以上在第IV章中描述的差值集群。界線集群模塊10215部分地通過利用模塊10220 至10240來執行如以上在第VI章中描述的界線集群。模塊10205至10215的輸出被返回到文檔內容10250。在一些實施例中,五個模塊10220至10240執行與以上在第A節中描述的五個運算符相關聯的操作。一些實施例的排序模塊10220從模塊10205至10215之一接收數據, 并對該數據進行排序(例如,從最低值到最高值)。一些實施例的求差值模塊10225從模塊10205至10215之一接收數據,并確定相鄰條數據之間的差值。一些實施例的分隔模塊 10235從模塊10205至10215之一接收數據,并將該數據分隔成多個子集。一些實施例的聯合模塊10235從模塊10205至10215之一接收數據作為多個子集,并根據各種條件連結相鄰子集。一些實施例的過濾模塊10240在一些實施例中接收數據的分隔序列,并基于各種約束來濾除分隔。模塊10220至10240將數據存儲在集群分析存儲設備10M5中,以及將數據傳遞回到模塊10205至10215。在一些實施例中,排序模塊10220將其結果存儲在集群分析存儲設備10M5中作為索引的排序陣列(即,間接排序陣列)。在一些實施例中,分隔模塊將分隔存儲在集群分析存儲設備10M5中作為引用間接排序陣列中的索引的單個整數值。XI.用于解析和分析文檔的高效數據結構本發明的一些實施例提供了使得能夠更高效地解析和分析文檔的新穎方法和數據結構。一些實施例提供了應用編程接口(API),該API在操縱數據時最小化對數據的冗余復制。在一些實施例中,API是操作系統、庫、服務或者框架提供用以支持計算機軟件作出的請求的函數、過程、方法、類或協議的集合。在一些實施例中API是靜態鏈接的,而在其他實施例中API是動態鏈接的。通常,API返回對內部數據的復制,或者給出對內部數據的只讀訪問,該內部數據在按照任何方式被操縱之前必須被復制。這生成了很多層冗余數據,從而減慢了處理并消耗多余存儲器。一些實施例通過如下方式來解決這一問題,即,將對象與它們的數據去耦合,使得在關于性能和存儲器消耗作出最優數據結構的同時針對程序員作出最優對象API。 一些實施例采用這種API來如以上在第II至X章中描述地重構文檔。然而,本領域普通技術人員將認識到,這種API可以用于對解析輸入數據的任何類型的分析。一些實施例提供了如下的API,該API呈現給用戶(例如,采用API的程序員或軟件應用),就像該用戶具有其自己的API的類成員的獨立、可修改副本,且沒有明確限制。換言之,它呈現給用戶,就像用戶可以完全修改通過API返回的任何對象。然而,在一些實施例中,對象在絕對必要時將實際上僅僅復制它們自己,并且在大部分情況下將按照最小化實際上所使用的存儲器量的方式來管理存儲器。一些實施例的存儲器管理是通過采用具有共享存儲器對象(其追蹤其他對象對指示符的使用)的指示符的排序陣列來實現的。在一些實施例中,眾多對象能夠全部應用通過共享存儲器對象的同一指示符陣列,從而使得與在每個分析階段復制數據相比能夠顯著地節省存儲器。本領域普通技術人員將認識到,盡管采用指示符來描述下面的特定特征,但是也可以采用任何類型的引用數據結構。A.具有共享指示符的文檔重構一些實施例采用諸如以上描述的API來重構文檔。圖103概念性地例示了一些實施例的用于高效地重構文檔的處理10300。將結合圖104來描述處理10300。圖104例示了文檔10400根據處理10300被解析和分析的序列。如圖103所示,處理10300接收(在10305處)文檔的一部分。在一些實施例中, 文檔部分是頁面,并且該處理逐頁面地操作。在其他實施例中,該文檔部分是整個文檔、文檔的章節或頁面上的區。然后該處理解析(在10310處)文檔,以確定文檔部分中的字符, 并且存儲(在10315處)解析數據的字符陣列。圖104例示了文檔10400被解析為字符的隨機排序陣列10405。盡管這些示例采用陣列,但是本領域普通技術人員將理解,可以采用任何其他適合的數據結構。在一些實施例中,解析文檔包括讀取表示文檔的字節流,并且將該字節流轉換成對流中的信息的可用表示(例如,字符陣列)。在一些實施例中,按照隨機順序讀取流中的字符,這是陣列10405 的順序是隨機的原因。一些實施例的字符具有坐標和/或頁面號。在一些實施例中,每個字符被存儲為包括相關聯的坐標或頁面號值的對象。處理10300定義(在10320處)用以排序文檔部分的字符的排序指示符陣列。在一些實施例中,頁面的字符以從上到下的初級排序以及從左到右的次級排序來排序。一些實施例首先按頁面將多個頁面存儲在字符陣列排序中。圖104例示了針對排序字符定義的指示符陣列10410。第一個指示符10411指向陣列10405中的字母“L”,第二個指示符10412 指向字母“0”,依此類推。在一些實施例中,定義對初始字符陣列的指示符陣列而不是定義和存儲單獨的新陣列會節省存儲器。接著,該處理接收(在10325處)操縱串對象的指令。一些實施例將串對象定義為對指示符有序陣列中的定位的指示符和串中有多少字符的計數。例如,整個頁面的串對象將指向有序指示符陣列(最左上的字符)中的第一個指示符,并給出頁面上的字符個數的計數。 在一些實施例中,指令包括拆分串、連結串、添加字符、移除字符和重新排序字符。 在一些實施例中,這些操作被調用為如以上在第II至X章中描述的重構文檔和采用重構文檔的處理的一部分。例如,在一些情況下,當合并行時,必須修改字符的順序。當定義區時, 一些實施例定義每個區的串,這在很多情況下包括拆分串、連結串或者兩者都有。
在接收了指令之后,該處理確定(在10330處)是否可以僅采用已經分配的指示符(例如,在10320處定義的排序的指示符陣列)來執行指令。在一些實施例中,拆分串包括僅采用已經分配的指示符。在文檔重構的情況下,一些處理僅僅包括拆分串(例如,行識別、行拆分,等等)。此外,在一些實施例中,連結在排序的指示符陣列中彼此緊鄰的串將包括僅采用已經分配的指示符。圖104例示了識別文檔10400中的兩個行如何得到引用陣列10410中的已經分配的指示符的兩個串對象10415和10420。第一行由串對象10415定義,該串對象10415指向到L的指示符10411并且計數為15 (第一行的字符個數)。第二行由串對象10420定義,該串對象10420指向到s的指示符10413并且計數為7 (第二行的字符個數)。為了定義這些行,不需要分配新的指示符。通過重構文檔中可能包括的成百上千的操作,這可能導致大的存儲器和處理時間(因為不需要搜索陣列)效率。然后在識別出字時可以采用相同的指示符10410。例如,串對象10425和10430定義文檔10400中的兩個字。這些字指向與串對象10415和10420相同的起始指示符,但是具有不同的計數,這是因為字比行短。然而,不需要分配新的指示符來定義這些字,只有新的串對象。對于整個文檔,成百上千的不同串對象可以全部引用同一指示符陣列(例如,指示符10410),從而與針對新的指示符陣列重復地分配存儲器相比帶來大的存儲器節省。當可以僅采用已經分配的指示符來執行接收到的指令時,處理10300利用在存儲器中已經分配的共享指示符來執行(在10335處)指令。然后該處理前進到下面描述的 10355。否則,該處理確定(在10340處)是否可以利用新的指示符集合來執行指令。一些實施例在不能僅利用已經分配的指示符執行指令時分配新的指示符,但是指令不要求對字符陣列的直接數據操縱。在一些實施例中,連結在指示符的共享陣列中彼此不緊鄰的串要求新的指示符分配,這是因為連結串的串對象不能通過指向排序陣列中的一個指示符并在陣列中向前移動來表示。例如,參照圖104,如果操作要求將第一行附接到第二行的末尾,則被附接行的串對象不能指向陣列10410。相反,新的指示符陣列將不得不按要求的順序分配。當可以利用新的指示符分配執行接收到的指令時,該處理通過利用對字符陣列的新指示符分配來執行(在10345處)指令。然后該處理前進到下面描述的10355。否則,該處理通過采用對部分或整個字符陣列的新副本來執行(在10350處)指令。在一些實施例中,直接編輯文檔數據(即,用戶向文檔添加字)是不能在不操縱實際字符陣列的情況下執行的指令的示例。然而,用戶向文檔添加字將不要求完全新的副本,而是能夠通過向陣列添加字符并然后定義對字符的新指示符陣列來處理。類似地,合并文本行通常要求新的指示符陣列,因為來自一個文本行的字符可以被插入到下一個文本行中,由此改變字符相對于彼此的順序。接著,該處理確定(在10355處)是否已經接收到更多的要操縱串對象的指令。當已經接收到更多指令時,該處理前進到以上描述的10330,以確定執行指令的最高效方式。 否則,該處理結束。該處理例示了通過采用共享數據引入的存儲器和處理節省的分級。原始數據在多個指示符陣列間共享,并且每個指示符陣列在很多串對象間共享。對于接收到的每個指令集(例如,每個產生(call into) 一個API),采用最高效的執行指令的方式。理想地,該指令將不要求生成任何新的指示符,并且僅需要生成新的串對象。如果這是不可能的,則與生成新的字符陣列相比,仍將通過生成共享原始數據的新指示符來獲得存儲器節省。盡管已經關于串對象并尤其是用于文檔重構的串對象描述了處理10300,但是本領域普通技術人員將認識到,相對于復制數據而言,通過展示采用已經分配的指示符的偏好以及然后分配新指示符獲得的效率可應用于其中存儲器和處理時間非常寶貴的廣范圍的問題。B.共享存儲器對象在一些實施例中,每個指示符陣列具有管理陣列中指示符的使用的共享存儲器對象。在一些實施例中,用于特定指示符陣列的共享存儲器對象追蹤引用特定陣列的數據對象(例如,串對象)。在一些實施例中,共享存儲器對象還追蹤指示符陣列從存儲器中的哪里開始。圖105例示了根據本發明一些實施例的存儲數據的方式。圖105例示了數據陣列 10505、排序指示符陣列10510、共享存儲器對象10515以及數據對象10520。在一些實施例中,數據陣列10505是隨機排序的解析數據(例如,來自解析文檔的字符數據)。排序指示符陣列10510是對數據陣列10505的指示符陣列。在一些實施例中,每個指示符指向陣列10505中的數據項。指示符是基于數據類型按順序布置的。例如,在文檔的情況下,在一些實施例中,指示符按照指示符指向的字符的閱讀順序布置的。每個數據對象10520包括對指示符陣列10510中的定位的引用和計數。指示符陣列10510中對于特定數據對象的定位是指向數據對象引用的第一條數據的指示符。例如, 當數據對象是用于字“Array”的串對象時,數據對象將規定指示符陣列中找到指向“Α”的指示符的定位。數據對象還將包括為5的計數。圖105還例示了共享存儲器對象10515。在一些實施例中,共享存儲器對象管理數據對象10520對排序陣列10510的使用。共享存儲器對象10515保持引用陣列10510的數據對象10520的個數的計數。當定義了第一個數據對象(即指向陣列的開始且具有整個陣列的計數)時,一些實施例不定義共享存儲器對象10515。然而,一旦第二個數據對象指向陣列,則該陣列現在被共享,并且共享存儲器對象10515被定義為追蹤有多少數據對象共享該陣列以及陣列在哪里開始,因為每單個對象不具有該信息。因此,在一些實施例中,數據對象10520可以調用如下函數,該函數用以如果在數據對象被設置為指向指示符陣列時不存在共享存儲器對象的話則針對指示符陣列實例化共享存儲器對象。當對象10520的個數降到零時,共享存儲器對象10515去分配指示符10510,然后從存儲器中移除自己。在一些實施例中,共享指示符陣列10510的每個數據對象10520不了解其他對象 10520也正在使用陣列10510中的指示符。此外,對象10520不了解陣列10510的開始或結尾,僅僅引用陣列10510中的某個點。然而,一些實施例的共享存儲器對象10520 了解陣列的開始是在存儲器中的什么地方。C.軟件架構在一些實施例中,將以上描述的API實施為在特定機器(例如,計算機、媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式或資源受限設備)上運行(或者存儲在計算機可讀介質上)的軟件。圖106概念性地例示了在采用以上在第A節和第B節中描述的效率技術的同時執行文檔重構處理的API 10600。
API 10600包括幾何分析模塊10610、文檔重構模塊10615以及顯示和交互模塊 10620。在一些實施例中,API 10600是提供用以由外部應用10605采用的函數、過程、方法、 類和/或協議的集合。API 10600接收由外部應用10605對公共方法的請求(例如,函數調用)。在一些實施例中,有眾多外部應用。例如,在API提供在手持式設備(例如,iWione )上的情況下,外部應用可以是PDF瀏覽器(例如,電子圖書閱讀器)、字處理器(例如,Microsoft Word、Apple Pages,等等)、網絡瀏覽器(例如,Microsoft Internet Explorer、Apple Safari、Mozilla Firefox 等等),等等。由API 10600提供的各種公共方法調用各種私有方法,其執行幾何分析和文檔重構、訪問文檔對象模型等等。數據(例如,初始地由解析器識別出的本原元素)存儲在文檔重構數據10625中。盡管可能呈現給外部應用的是它們能夠訪問數據(例如,同時操縱字符來識別字、文本行,等等),但實際上如以上在第A節和第B節中所描述的,通過將由外部應用通過API操縱的類成員定義為僅存儲對數據的引用而將類成員與實際數據分離。XII.整體軟件架構在一些實施例中,將以上描述的處理實施為在特定機器(例如,計算機、媒體播放器、蜂窩式電話(例如,iPhone )或者其他手持式或資源受限設備)上運行(或者存儲在計算機可讀介質上)的軟件。圖107概念性地例示了一些實施例的用于重構文檔、顯示文檔以及與文檔交互的應用10700的軟件架構。在一些實施例中,應用是獨立應用或者集成到另一應用中,而在其他實施例中,應用可能是在操作系統內實現的。在還有其他實施例中,圖107中例示的模塊在多個應用間被拆分。例如,在一些實施例中,一個應用生成文檔對象模型,而另一個應用顯示文檔并與文檔對象模型交互(參見以下全面描述)。應用10700包括解析器10710、簡檔化模塊10720、語義重構模塊10730、集群分析模塊10740、用戶交互模塊10750以及顯示調整模塊10760。應用10700還包括文檔數據存儲設備10715、簡檔存儲設備10725、集群分析存儲設備10735以及文檔對象模塊存儲設備 10745。圖107還例示了操作系統10770,該操作系統10770包括游標控制器驅動器10775、 鍵盤驅動器10780以及顯示模塊10785。在一些實施例中,如所例示的,即使在混合應用是與操作系統分開的獨立應用時,游標控制器驅動器10775、鍵盤驅動器10780和/或顯示模塊10785也是操作系統10770的一部分。如圖所示,解析器10710接收文檔10705。在一些實施例中,文檔是包括矢量圖形的未格式化文檔(例如,PDF)。解析器10710解析文檔信息,并將解析的數據存儲在文檔數據存儲設備10715中。在一些實施例中,解析的文本數據被存儲為如以上在第XI章中描述的字符陣列。語義重構模塊10730重構文檔以從文檔數據10715生成文檔對象模型10745。語義重構模塊10730執行諸如區分析、導引和裝訂線識別、布局和流識別、表格識別以及連結圖識別的處理。語義重構模塊的輸出還被發送到簡檔化模塊10720。簡檔化模塊10720包括簡檔匹配引擎,該簡檔匹配引擎匹配分級簡檔,并通知語義重構模塊關于執行重構如何進行,如以上在第VII章中所描述的。語義重構模塊10710還將信息傳遞到集群分析模塊10740。在一些實施例中,集群分析模塊10740執行密度集群用于導引識別、執行差值集群用于字和段間隔信息以及執行界線集群用于識別應被連結的圖形。集群分析模塊采用集群分析存儲設備10735來存儲如在第X章中描述的陣列和索引。然后將集群分析的結果傳遞回到語義重構模塊10730。一旦語義重構模塊10730已經重構了文檔,它們就存儲文檔對象模型10745。文檔對象模型10745存儲所有關于語義重構文檔的信息,例如以上在第II章中描述的填充有內容的區圖。顯示調整模塊10760采用文檔對象模型10745來確定如何顯示文檔。例如,一些實施例的顯示調整模塊執行以上在第VIII章中描述的處理,來在小屏幕設備上顯示文檔。 顯示調整模塊10760將顯示信息傳遞到顯示模塊10785,顯示模塊10785控制在屏幕上的實
際顯不。用戶交互模塊10750接收來自游標控制器驅動器10775和鍵盤驅動器10780的輸入信息。該輸入信息指示用戶交互模塊10750對文檔執行操作,例如以上在第IX章中描述的選擇,以及對文檔的編輯。如果編輯文檔,則文檔對象模型10745必須被修改以反映該編輯。在一些實施例中,由以上描述的模塊中的一些或其他模塊執行的處理的結果存儲在電子存儲設備中(例如,作為文檔對象模型的一部分)。文檔對象模型然后可以用于在電子顯示設備(例如,手持式設備、計算機屏幕,等等)上顯示文檔,使得用戶能夠瀏覽文檔和 /或與文檔交互(例如,通過觸摸屏、游標控制設備,等等)。圖108概念性地例示了一些實施例的用于制造存儲諸如以上描述的應用10700的計算機程序的計算機可讀介質的處理10800。在一些實施例中,計算機可讀介質是可分布的非易失性電子存儲介質(例如,CD-ROM、硬盤、設備固件,等等)。如圖所示,處理10800從定義(在10805處)諸如圖1的模塊110的幾何分析模塊開始。這種模塊的更具體示例包括圖17中的邊界識別模塊1705、區間和相交部識別模塊 1710、區識別模塊1715以及區圖構建器1720。在一些實施例中,這些模塊識別本原元素集之間的邊界并識別由這些邊界界定的區域。在一些實施例中,模塊將圖形本原元素識別為潛在邊界,將潛在邊界的一部分識別為實際邊界,遍歷實際邊界以識別區,并利用識別出的區定義分級文檔模塊。然后該處理定義(在10810處)諸如圖1的模塊120的文檔重構模塊。在一些實施例中,圖107的語義重構模塊10730包括幾何分析模塊和文檔重構模塊兩者,但是其他實施例僅包括一個或另一個。然后處理10800定義(在10815處)諸如簡檔10725的分級簡檔集合。接著,該處理定義(在10820)用于執行集群分析的模塊集。集群分析模塊10740是這種模塊的示例。 然后該處理定義(在10825處)用于適應性地顯示文檔的模塊,例如顯示調整模塊10760。 接著,處理10800定義(在10830處)用于接收與文檔的用戶交互的模塊,例如模塊10750。該處理還定義(在10835處)其他模塊。例如,一些實施例包括用于解析進入的文檔(例如,由應用接收到的文檔)或者在執行各種文檔重構操作時高效地利用存儲器和處理時間的模塊。然后處理10800將應用存儲(在10840處)在計算機可讀存儲介質上。如上所示, 在一些實施例中,計算機可讀存儲介質是可分布的CD-ROM。在一些實施例中,介質是固態設備、硬盤、CD-ROM或其他非易失性計算機可讀存儲介質中的一種或多種。在一些實施例中, 介質可以是手持式設備(例如,iPhone )的固件。本領域普通技術人員將認識到,由處理10800定義的各種元素不是對能夠定義且存儲在計算機可讀存儲介質上用于并有本發明一些實施例的應用的模塊、規則以及處理的窮舉。此外,一些實施例將僅包括由處理10800定義的元素的子集而非它們全部也是同樣可以的。另外,處理10800是概念性處理,并且實際實施可以改變。例如,不同的實施例可以按照不同的順序定義各種元素,可以定義一個操作中的若干元素,可以將單個元素的定義分解為多個操作,等等。此外,處理10800可以實施為若干子處理,或者在宏處理中與其他操作組合。XIII.計算機系統很多上述特征和應用被實施為軟件處理,所述軟件處理被規定為記錄在計算機可讀存儲介質(也稱作計算機可讀介質)上的指令集。當由一個或多個計算元件(例如,處理器或其他計算元件,象ASIC和FPGA)執行這些指令時,它們使得計算元件執行指令中表示的動作。計算機意指其最廣義含義,并且可以包括具有處理器的任何電子設備。計算機可讀介質的示例包括但不限于CD-ROM、閃存驅動器、RAM芯片、硬盤驅動器、EPR0M,等等。計算機可讀介質不包括無線地或者通過有線連接傳遞的載波和電子信號。本說明書中的術語“軟件”是指包括駐留在只讀存儲器上的固件或者存儲在磁存儲設備上的應用,其可以被讀入到存儲器中用以由處理器進行處理。而且,在一些實施例中,多個軟件發明可以被實施為更大程序的子部分,同時保留不同的軟件發明。在一些實施例中,多個軟件發明還可以被實施為單獨的程序。最后,一起實施本文描述的軟件發明的單獨程序的任何組合都在本發明的范圍內。在一些實施例中,軟件程序在被安裝以在一個或多個計算機系統上運行時定義運行和執行軟件程序的操作的一個或多個具體機器實施。圖109例示了實現本發明的一些實施例的計算機系統。這種計算機系統包括各種類型的計算機可讀介質和用于各種其他類型的計算機可讀介質的接口。計算機系統10900 包括總線10905、處理器10910、圖形處理單元(GPU) 10920、系統存儲器10925、只讀存儲器 10930、永久存儲設備10935、輸入設備10940以及輸出設備10945。總線10905總體地代表通信地連接計算機系統10900的眾多內部設備的所有系統、外圍和芯片集總線。例如,總線10905將處理器10910與只讀存儲器10930、GPU 10920、 系統存儲器10925以及永久存儲設備10935通信地連接。從這些各種存儲器單元,處理器10910檢索要執行的指令和要處理的數據以執行本發明的處理。在一些實施例中,處理器包括現場可編程門陣列(FPGA)、ASIC或者用于執行指令的各種其他電子部件。一些指令被傳遞到GPU 10920并由其執行。GPU 10920可以卸載各種計算或補充處理器10910提供的圖像處理。在一些實施例中,這種功能性可以利用CoreImage的內核遮蔽語言來提供。只讀存儲器(ROM) 10930存儲處理器10910以及計算機系統的其他模塊需要的靜態數據和指令。另一方面,永久存儲設備10935是讀寫存儲器設備。該設備是即使在計算機系統10900關閉時也存儲指令和數據的非易失性存儲器。本發明的一些實施例采用大容量存儲設備(例如,磁盤或光盤及其對應的盤驅動器)作為永久存儲設備10935。
其他實施例采用可移除存儲設備(例如,軟盤、閃存驅動器或者ZIP 盤,及其對應的盤驅動器)作為永久存儲設備。象永久存儲設備10935 —樣,系統存儲器10925是讀寫存儲器設備。然而,不象存儲設備10935,系統存儲器是易失性讀寫存儲器,例如隨機存取存儲器。該系統存儲器存儲處理器在運行時需要的一些指令和數據。在一些實施例中, 本發明的處理存儲在系統存儲器10925、永久存儲設備10935和/或只讀存儲器10930中。 例如,各種存儲器單元包括用于根據一些實施例處理多媒體項的指令。從這些各種存儲器單元,處理器10910檢索要執行的指令和要處理的數據,以執行一些實施例的處理。總線10905還連接到輸入設備10940和輸出設備10945。輸入設備還使得用戶能夠向計算機系統傳送信息并選擇命令。輸入設備10940包括字母數字鍵盤和指向設備(也稱作“游標控制設備”)。輸出設備10945顯示計算機系統生成的圖像。輸出設備包括打印機和顯示設備,例如陰極射線管(CRT)或者液晶顯示器(IXD)。最后,如圖109所示,總線10905還將計算機10900通過網絡適配器(未示出)耦接到網絡10965。按照這種方式,計算機可以是計算機網絡(例如,局域網(“LAN”)、廣域網(“WAN”)或者內聯網)或者網絡的網絡(例如,互聯網)的一部分。可以結合本發明采用計算機系統10900的任意或全部部件。一些實施例包括電子部件,例如微處理器、將計算機程序指令存儲在機器可讀或計算機可讀介質(另選地也稱為計算機可讀存儲介質、機器可讀介質或者機器可讀存儲介質)中的存儲設備和存儲器。這種計算機可讀介質的一些示例包括RAM、ROM、只讀緊湊盤(CD-ROM)、可記錄緊湊盤(CD-R)、可重寫緊湊盤(CD-RW)、只讀數字多功能盤(例如, DVD-ROM、雙層 DVD-ROM)、各種可記錄 / 可重寫 DVD (例如,DVD-RAM、DVD-RW、DVD+RW,等等)、 閃速存儲器(例如,SD卡、小型SD卡、微型SD卡,等等),磁性和/或固態硬驅動器、只讀和可記錄藍光盤、超密度光盤、任何其他光學或磁性介質以及軟盤。計算機可讀介質可以存儲可由至少一個處理器執行的計算機程序,并且包括用于執行各種操作的指令集。配置為存儲和執行指令集的硬件設備的示例包括但不限于專用集成電路(ASIC)、現場可編程門陣列 (FPGA)、可編程邏輯器件(PLD)、ROM以及RAM器件。計算機程序或計算機代碼的示例包括機器碼,例如由編譯器生成的碼,以及包括由計算機、電子部件或微處理器利用解釋器執行的更高級別代碼的文件。本說明書以及本申請的任何權利要求中采用的術語“計算機”、“服務器”、“處理器”和“存儲器”全部是指電子或其他技術性設備。這些術語排除人或人的組。出于本說明書的目的,術語顯示是指在電子設備上顯示。本說明書以及本申請的任何權利要求中采用的術語“計算機可讀介質”完全限于有形的物體對象,其存儲可由計算機讀取的形式的信息。這些術語排除了任何無線信號、有線下載信號以及任何其他瞬息信號。盡管參照眾多具體細節描述了本發明,但是本領域普通技術人員將認識到,在不脫離本發明精神的情況下,本發明可以按照其他具體形式實現。例如,一些實施例接收文檔,在文檔中每個頁面被定義為單個圖像。然而,一些實施例可以對文檔執行光學字符識別以識別圖示符,而在一些情況中識別形狀(例如,線條、矩形,等等),之后可以重構文檔。 而且,以上已經關于在特定本原元素上執行特定幾何分析和文檔重構操作描述了一些實施例。然而,本領域普通技術人員將認識到,可以將操作應用到其他類型的本原元素。例如,導引識別被描述為包括采用密度集群來識別形成垂直邊界的圖示符的關聯(例如,進行關聯或者定義其關聯)。然而,可以應用類似的操作來尋找形成邊界的本原形狀(例如,虛線) 的集群。此外,多個附圖(包括圖 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)概念性地例示了處理。這些處理的具體操作可能不會按照所示和所描述的具體順序執行。具體操作可能不會在一個連續的操作系列中執行,并且不同的具體操作可能是在不同的實施例中執行的。此外,可以利用若干子處理實施處理,或者將處理實施為更大宏處理的一部分。因此,本領域普通技術人員將理解,本發明不受限于以上例示的細節,而是由所附權利要求來限定。
權利要求
1.一種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時分析包括多個本原元素的文檔,所述計算機程序包括用于執行以下操作的指令集識別本原元素的集合之間的邊界; 識別由所述邊界界定的區域;以及基于所述區域和本原元素定義結構化文檔。
2.根據權利要求1所述的計算機可讀介質,其中,所述用于定義結構化文檔的指令集包括用于識別至少兩個識別出的區域之間的分級關系的指令集。
3.根據權利要求2所述的計算機可讀介質,其中,完全處于第二區域內的第一區域是所述第二區域的子輩。
4.根據權利要求2所述的計算機可讀介質,其中,所述用于識別兩個識別出的區域之間的分級關系的指令集包括用于定義分級文檔對象模型的指令集,其中每個識別出的區域是所述文檔對象模型的一個節點。
5.根據權利要求4所述的計算機可讀介質,其中,所述用于定義結構化文檔的指令集還包括用于利用從本原元素定義的至少一個結構性元素填充所述文檔對象模型的指令集。
6.根據權利要求1所述的計算機可讀介質,其中,基于特定本原元素在所述文檔中的定位來識別邊界。
7.根據權利要求6所述的計算機可讀介質,其中,所述特定本原元素是直線或近似直線的形狀。
8.根據權利要求1所述的計算機可讀介質,其中,所述用于識別區域的指令集包括用于執行以下操作的指令集基于實際地界定區域的邊界是否與其他邊界相交來選擇所述邊界的集合;和遍歷所述邊界的子集來識別區域。
9.根據權利要求1所述的計算機可讀介質,其中,所述用于識別本原元素的集合之間的邊界的指令集包括用于執行以下操作的指令集將作為直線或者近似直線的形狀的本原元素和本原元素分組識別為潛在邊界; 識別所述潛在邊界之間的相交部;以及移除不與至少兩個其他潛在邊界相交的潛在邊界。
10.根據權利要求1所述的計算機可讀介質,其中,所述用于識別由所述邊界界定的區域的指令集包括用于遍歷所識別出的邊界以識別邊界的閉環的指令集,其中,每個閉環是一個區域。
11.根據權利要求1所述的計算機可讀介質,其中,所述計算機程序還包括用于采用識別出的區域來定義所述文檔的結構性元素的指令集,其中,所述結構化文檔還基于所述結構性元素。
12.根據權利要求11所述的計算機可讀介質,其中,所述用于采用識別出的區域來定義結構性元素的指令集包括用于單獨地分析每個特定區域以生成所述特定區域中的本原元素集合之間的關聯的指令集。
13.一種定義程序的方法,所述程序用于(i)分析包括多個本原元素的文檔,以及(ii) 基于所述分析生成定義所述文檔中的結構的結構性元素,所述方法包括定義用于識別本原元素的集合之間的邊界的模塊;定義用于識別由所述邊界界定的區域的模塊;定義用于采用識別出的邊界和區域來規定所述結構性元素的模塊。
14.根據權利要求13所述的方法,還包括定義用于基于所述區域、本原元素和結構性元素來定義結構化文檔的模塊。
15.根據權利要求13所述的方法,其中,所述文檔是未結構化文檔。
16.一種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時分析包括多個本原元素的文檔,所述本原元素包括多個圖示符和多個圖形元素,所述計算機程序包括用于執行以下操作的指令集將多個所述圖形元素識別為潛在邊界; 將一部分所述潛在邊界識別為實際邊界; 遍歷所述實際邊界以識別一個或多個區;以及利用識別出的區來定義分級文檔模型。
17.根據權利要求16所述的計算機可讀介質,其中,將多個所述圖形元素識別為潛在邊界包括用于執行以下操作的指令集識別作為至多具有特定厚度的垂直直線和水平直線的圖形元素; 識別與至多具有特定厚度的垂直直線和水平直線近似的圖形元素;以及識別豎直矩形圖形元素的外邊緣。
18.根據權利要求16所述的計算機可讀介質,其中,所述用于將一部分所述潛在邊界識別為實際邊界的指令集包括用于以下操作的指令集識別所述潛在邊界之間的相交部;和迭代地移除沒有與至少兩個其他潛在邊界相交的潛在邊界,直到所有剩余潛在邊界都與至少兩個其他潛在邊界相交;以及將所述剩余潛在邊界識別為實際邊界。
19.根據權利要求16所述的計算機可讀介質,其中,所述用于遍歷所述實際邊界以識別一個或多個區的指令集包括用于執行以下操作的指令集針對每個所述實際邊界,定義包括沿相反方向對準的兩個區間的定向對準區間的集合;選擇相交部和遠離所述相交部的方向;沿著所選方向從所選相交部開始遍歷所述區間的集合中的區間,直到返回到所選相交部;將由所遍歷的區間包圍的區域定義為區;以及從所述區間的集合中移除所遍歷的區間。
20.根據權利要求19所述的計算機可讀介質,其中,所述定向對準區間是矢量。
21.根據權利要求19所述的計算機可讀介質,其中,所述用于遍歷所述實際邊界以識別一個或多個區的指令集包括用于重復地執行以下操作直到所述定向對準區間的集合為空的指令集選擇相交部和從所述相交部起的方向;沿著所選方向從所選相交部開始遍歷所述區間的集合中的區間,直到返回到所選相交部;將由所遍歷的區間包圍的區域定義為區;以及從所述區間的集合中移除所遍歷的區間。
22.根據權利要求16所述的計算機可讀介質,還包括當特定區沿特定方向被遍歷時將該特定區定義為島。
23.根據權利要求16所述的計算機可讀介質,其中,當第二區被第一區完全包圍時,所述第一區為所述第二區的父輩。
24.根據權利要求23所述的計算機可讀介質,其中,當所述第一區和第二區不共享邊界時,該第二區為島。
25.根據權利要求16所述的計算機可讀介質,其中,所述計算機程序還包括用于基于圖示符和不是實際邊界的圖形元素來定義結構性元素的指令集。
26.根據權利要求25所述的計算機可讀介質,其中,所述計算機程序還包括用于利用至少一個結構性元素填充所述分級文檔模型的區的指令集。
27.根據權利要求25所述的計算機可讀介質,其中,所述計算機程序還包括用于識別旋轉區的指令集。
28.根據權利要求27所述的計算機可讀介質,其中,旋轉區是沒有與包括該旋轉區的頁面對準的區。
29.根據權利要求28所述的計算機可讀介質,其中,當區偏離頁面的邊緣至少達特定角度時,該區沒有與所述頁面對準。
30.一種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時分析包括多個字的文檔,每個字包括相關聯的圖示符的集合,每個圖示符具有定位坐標,所述計算機程序包括用于執行以下操作的指令集基于所述圖示符的定位坐標來識別字分組;基于所識別出的字分組,定義所述圖示符的邊界元素集合;基于所述圖示符和所定義的邊界元素集合,定義結構化文檔。
31.根據權利要求30所述的計算機可讀介質,其中,所述計算機程序還包括用于定義一對邊界元素之間的空白空間的至少一個區域的指令集,其中,所述結構化文檔還基于所述空白空間的區域來定義。
32.根據權利要求30所述的計算機可讀介質,其中,所述用于識別字分組的指令集包括用于沿一個軸對從所述字的坐標得出的數據執行集群分析的指令集。
33.根據權利要求32所述的計算機可讀介質,其中,所述集群分析包括密度集群,以識別大的具有類似值的數據的分組。
34.根據權利要求30所述的計算機可讀介質,其中,所述邊界元素是圖示符的右對準導引和左對準導引。
35.根據權利要求30所述的計算機可讀介質,其中,所述用于定義邊界元素集合的指令集包括用于執行以下操作的指令集針對每個集群,基于集群中的字定義沿第一軸具有寬度的條;以及消除沿所述第一軸在如下坐標處的條,即在所述坐標處字沿第二軸從特定方向穿入到所述條中
36.根據權利要求30所述的計算機可讀介質,其中,所述用于定義結構化文檔的指令集包括用于利用所述圖示符和所定義的邊界元素來識別文本列的指令集。
37.一種定義程序的方法,所述程序用于(i)分析包括多個字的文檔,每個字包括相關聯的圖示符的集合,每個圖示符具有定位坐標,以及(ii)基于所述分析生成定義所述文檔中的結構的結構性元素,所述方法包括定義用于基于所述圖示符的定位坐標來識別字分組的模塊;定義用于基于所識別出的字分組來定義所述圖示符的邊界元素集合的模塊,所述邊界元素識別所述圖示符的邊界集合;以及定義用于采用識別出的邊界元素來規定所述結構性元素的模塊。
38.根據權利要求37所述的方法,還包括定義用于基于所述圖示符、所定義的邊界元素以及結構性元素來定義結構化文檔的模塊。
39.一種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時分析包括多個字的文檔,每個字包括多個圖示符,每個字具有特定定位值,所述計算機程序包括用于執行以下操作的指令集對所述字的定位值進行排序;將所述定位值的多個不同分組識別成子集;針對每個不同的分組,識別滿足特定約束集合的定位值的子集的集合;確定所述定位值的子集集合中優化特定量度的特定的子集集合;以及基于優化所述特定量度的特定的子集集合來定義所述圖示符的邊界元素。
40.根據權利要求39所述的計算機可讀介質,其中,所述約束集合包括定位值的子集至少具有特定數量的值的要求。
41.根據權利要求39所述的計算機可讀介質,其中,所述約束集合包括所述子集中的最大值與最小值之間的差值不大于特定閾值的要求。
42.根據權利要求39所述的計算機可讀介質,其中,所述特定定位值表示字的右邊緣, 其中采用優化所述特定量度的子集集合來識別右對準導引。
43.根據權利要求39所述的計算機可讀介質,其中,所述特定定位值表示字的左邊緣, 其中采用優化所述特定量度的子集集合來識別左對準導引。
44.一種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時識別數據的集群,所述計算機程序包括用于執行以下操作的指令集接收要被集群的數據值的集合;識別對所述數據值的多個分隔,每個不同分隔將所述數據值的不同分組規定成子集;針對數據值的子集的每個分組,識別滿足特定約束集合的子集的集合;以及確定優化特定量度的子集集合。
45.根據權利要求44所述的計算機可讀介質,其中,所述數據值是圖示符在文檔中的位置,其中所述優化特定量度的子集集合識別所述文檔的對準導引。
46.一種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時分析包括多個字的文檔,每個字具有相關聯的圖示符的集合,所述計算機程序包括用于執行以下操作的指令集識別所述文檔中的左對準點集合和右對準點集合;識別所述文檔中在左對準點與右對準點之間滿足特定準則的空白空間;以及采用識別出的空白空間定義結構化文檔。
47.根據權利要求46所述的計算機可讀介質,其中,所述左對準點集合和右對準點集合包括由對字的密度集群確定的對準導引。
48.根據權利要求46所述的計算機可讀介質,其中,所述用于識別所述文檔中的空白空間的指令集包括用于執行以下操作的指令集從所述右對準點集合中選擇一個右對準點;識別所述左對準點集合中的一個左對準點,該左對準點是在所選右對準點右側的最靠近所選右對準點的左對準點;定義所選右對準點與所識別出的左對準點之間的垂直條;以及消除在字穿入到所述垂直條中的坐標處的垂直條。
49.根據權利要求44所述的計算機可讀介質,其中,所述用于采用識別出的空白空間定義結構化文檔的指令集包括用于拆分字的行的指令集。
50.一種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時分析包括多個圖示符的文檔,每個圖示符在所述文檔中具有一個位置,所述計算機程序包括用于執行以下操作的指令集基于圖示符在所述文檔中的位置,生成圖示符之間的關聯以將不同的圖示符集合識別為不同的字;生成字之間的關聯以將不同的字集合識別為不同的段落;以及定義不鄰接的至少兩個段落之間的關聯以定義段落的閱讀順序。
51.根據權利要求50所述的計算機可讀介質,其中,所述用于生成字之間的關聯的指令集包括用于基于(i)形成字的圖示符的垂直間距性質和(ii)形成字的圖示符的水平對準性質來識別要關聯的字集合的指令集。
52.根據權利要求50所述的計算機可讀介質,其中,所述用于生成字之間的關聯以將不同的字集合識別為不同的段落的指令集包括用于執行以下操作的指令集生成字之間的關聯以將字集合識別為文本行;以及生成文本行之間的關聯以將文本行集合識別為段落。
53.根據權利要求52所述的計算機可讀介質,其中,所述用于生成字之間的關聯以將字集合識別為文本行的指令集包括用于執行以下操作的指令集識別水平對準字的集合,其中,該集合中的所有字具有在彼此的特定閾值內的基線;以及基于至少一個水平間隔的存在,拆分所述水平對準字的集合;以及生成每個剩余集合中的字之間的關聯。
54.根據權利要求53所述的計算機可讀介質,其中,所述用于拆分所述水平對準字的集合的指令集包括用于執行以下操作的指令集將水平間隔識別為水平對準字之間至少具有閾值寬度的間隔;識別垂直對準的水平間隔集合;移除不滿足特定準則集合的水平間隔集合;以及在未移除的間隔處拆分水平對準字的集合。
55.根據權利要求52所述的計算機可讀介質,其中,所述用于生成文本行之間的關聯以將文本行集合識別為段落的指令集包括用于比較相鄰文本行的垂直間距性質的指令集。
56.根據權利要求52所述的計算機可讀介質,其中,所述用于生成文本行之間的關聯以將文本行集合識別為段落的指令集包括用于比較相鄰文本行的水平對準性質的指令集。
57.根據權利要求50所述的計算機可讀介質,其中,所述計算機程序還包括用于生成段落之間的關聯以將段落集合識別為列的指令集。
58.一種定義程序的方法,所述程序用于分析包括多個圖示符的文檔,每個圖示符在所述文檔中具有一個位置,所述方法包括定義用于基于圖示符在所述文檔中的位置,生成圖示符之間的關聯以將不同的圖示符集合識別為不同的字的模塊;定義用于生成字之間的關聯以將不同的字集合識別為不同的段落的模塊;以及定義用于定義不鄰接的至少兩個段落之間的關聯以定義段落的閱讀順序的模塊。
59.根據權利要求58所述的方法,其中,定義用于生成圖示符之間的關聯的模塊包括定義用于對所述圖示符的位置執行集群分析以識別圖示符之間的水平間距的模塊。
60.根據權利要求59所述的方法,其中,所述集群分析識別水平間距尺寸的集群,以識別字之間的間距和字內的間距。
61.一種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時分析包括多個圖示符的文檔,每個圖示符在所述文檔中具有一個位置,所述計算機程序包括用于執行以下操作的指令集基于圖示符的位置,將不同的圖示符集合識別為不同的字;將不同的字集合識別為不同的段落;定義通過段落的閱讀順序,所述閱讀順序規定通過所述文檔中不鄰接的至少兩個段落的流;以及基于所述字、段落和定義的閱讀順序來定義結構化文檔。
62.根據權利要求61所述的計算機可讀介質,其中,將特定的圖示符集合識別為字包括關聯所述圖示符。
63.根據權利要求61所述的計算機可讀介質,其中,將特定的圖示符集合識別為字包括生成圖示符之間的關聯。
64.根據權利要求61所述的計算機可讀介質,其中,不鄰接的兩個段落包括位于第一列底部的第一段落和位于第二列頂部的第二段落,其中,所述閱讀順序規定從所述第一段落直接到所述第二段落的流。
65.根據權利要求61所述的計算機可讀介質,其中,不鄰接的兩個段落包括位于第一頁面末端的第一段落和位于第二頁面開頭的第二段落,其中,所述閱讀順序規定從所述第一段落直接到所述第二段落的流。
66.根據權利要求65所述的計算機可讀介質,其中,所述第一頁面和所述第二頁面在所述文檔中不鄰接。
67.一種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時分析包括多個本原元素的文檔,每個本原元素具有多個性質,所述計算機程序包括用于執行以下操作的指令集基于本原元素的性質,將本原元素的集合關聯為結構性元素;定義所述結構性元素之間的關系;基于關聯和關系規定通過所有所述本原元素的流;以及通過采用所述通過本原元素的規定流來優化與所述文檔的用戶交互。
68.根據權利要求67所述的計算機可讀介質,其中,所述用戶交互包括選擇操作。
69.根據權利要求67所述的計算機可讀介質,其中,所述用戶交互包括顯示操作。
70.根據權利要求67所述的計算機可讀介質,其中,所述用戶交互包括導航操作。
71.一種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時分析包括多個本原元素的文檔,所述計算機程序包括用于執行以下操作的指令集識別本原元素的集合之間的邊界;識別出多個所述邊界形成表格;以及定義針對所述表格的表格結構性元素,所述表格結構性元素包括按照多個行和列布置的多個單元,每個單元包括相關聯的本原元素集合。
72.根據權利要求71所述的計算機可讀介質,還包括用于基于所述表格結構性元素定義結構化文檔的指令集。
73.根據權利要求72所述的計算機可讀介質,其中,所述用于定義結構化文檔的指令集包括用于定義未結構化文檔的分級模型的指令集。
74.根據權利要求73所述的計算機可讀介質,其中,所述表格結構性元素的單元包括在所述分級模型中的節點。
75.根據權利要求73所述的計算機可讀介質,其中,所述表格結構性元素包括在所述分級模型中的節點。
76.根據權利要求71所述的計算機可讀介質,其中,所述用于識別出多個所述邊界形成表格的指令集包括用于識別出(i)形成更大矩形形狀的邊界集合和(ii)包含在所述更大矩形形狀內的多個矩形形狀的指令集。
77.根據權利要求71所述的計算機可讀介質,其中,所述文檔包括多個圖形本原元素, 其中所述用于識別本原元素集合之間的邊界的指令集包括識別作為垂直線或水平線的圖形本原元素和與垂直線或水平線近似的圖形本原元素。
78.根據權利要求77所述的計算機可讀介質,其中,所述計算機程序還包括用于基于所述識別出的圖形本原元素來識別多個分級區域的指令集。
79.根據權利要求78所述的計算機可讀介質,其中,所述用于識別出多個所述邊界形成表格的指令集包括用于識別滿足特定特性集合的分級區域集合的指令集。
80.根據權利要求79所述的計算機可讀介質,其中,所述用于識別出多個所述邊界形成表格的指令集包括用于識別(i)不與父區域共享任何邊界的矩形的第一區域和(ii)所述第一區域的至少兩個子區域的集合的指令集,其中,所述子區域的集合完全分隔所述第一區域,其中所述集合中的每個子區域是矩形的。
81.根據權利要求80所述的計算機可讀介質,其中,所述第一區域是表格的外界線,所述第一區域的子區域是表格的單元。
82.根據權利要求71所述的計算機可讀介質,其中,基于形成單元的相關聯的圖示符集合的位置來推斷多個識別出的邊界。
83.根據權利要求82所述的計算機可讀介質,其中,所述計算機程序還包括用于將圖示符集合關聯為段落的指令集,其中基于段落的位置來推斷所述邊界。
84.根據權利要求82所述的計算機可讀介質,其中,所述用于識別圖示符集合之間的邊界的指令集包括用于識別垂直地或水平地對準的至少兩個圖示符集合的指令集。
85.根據權利要求71所述的計算機可讀介質,其中,所述用于定義表格結構性元素的指令集包括用于識別形成鄰接矩形的識別出的邊界的集合的指令集。
86.根據權利要求85所述的計算機可讀介質,其中,所述鄰接矩形是所述表格結構性元素的單元。
87.一種定義程序的方法,所述程序用于(i)分析包括多個本原元素的文檔,并且(ii) 基于所述分析生成定義所述文檔的結構的結構性元素,所述方法包括定義用于識別本原元素集合之間的邊界的模塊; 定義用于識別出多個所述邊界形成表格的模塊;以及定義用于基于所述表格定義表格結構性元素的模塊,所述表格結構性元素包括按照多個行和列布置的多個單元,每個單元包括相關聯的本原元素集合。
88.一種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時分析包括多個本原元素的文檔,所述計算機程序包括用于執行以下操作的指令集識別包括表格的本原元素的第一集合;針對所述本原元素的第一集合定義表格結構性元素;識別不包括表格的本原元素的第二集合;針對所述本原元素的第二集合定義非表格結構性元素的集合;定義包括所述表格結構性元素和所述非表格結構性元素的集合的結構化文檔。
89.根據權利要求88所述的計算機可讀介質,其中,所述用于定義結構化文檔的指令集包括用于定義通過所述結構性元素的閱讀順序的指令集,其中,所述閱讀順序是從來自結構性元素集合的第一結構性元素到所述表格結構性元素、再到來自所述結構性元素集合的第二結構性元素。
90.根據權利要求88所述的計算機可讀介質,其中,所述計算機程序包括用于執行以下操作的指令集識別不同的本原元素集合,其中該不同的集合中的每一個包括不同的表格;以及針對所述不同的集合中的每一個定義不同的表格結構性元素。
91.根據權利要求90所述的計算機可讀介質,其中,所述不同的集合中的第一個包括圖形本原元素和圖示符兩者,而所述不同的集合中的第二個僅包括圖示符。
92.一種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時分析文檔,所述計算機程序包括用于執行以下操作的指令集接收包括多個本原圖形元素的文檔,每個本原圖形元素被定義為所述文檔中的單個對象,所述文檔具有繪制順序,該繪制順序指示當顯示所述文檔時繪制本原圖形元素的順序;識別在所述繪制順序中接連的本原圖形元素之間的位置關系;以及基于所述位置關系,從至少兩個所述本原圖形元素定義單個結構性圖形元素。
93.根據權利要求92所述的計算機可讀介質,其中,所述文檔還包括多個圖示符,其中所述繪制順序不指示所述圖示符繪制在頁面上的順序。
94.根據權利要求92所述的計算機可讀介質,其中,所述文檔是矢量圖形文檔,其中所述本原圖形元素是矢量圖形。
95.根據權利要求92所述的計算機可讀介質,其中,所述用于識別接連的本原圖形元素之間的位置關系的指令集包括用于針對在所述閱讀順序中相繼的第一本原圖形元素和第二本原圖形元素,計算包括所述第一本原圖形元素和第二本原圖形元素的結構性圖形元素的尺寸的指令集。
96.根據權利要求95所述的計算機可讀介質,其中,所述尺寸與包圍所述第一本原圖形元素和第二本原圖形元素的豎直界定框的面積成比例。
97.根據權利要求95所述的計算機可讀介質,其中,所述尺寸與包圍所述第一本原圖形元素和第二本原圖形元素的豎直界定框的長度和高度之和成比例。
98.根據權利要求95所述的計算機可讀介質,其中,所述用于識別接連的本原圖形元素之間的位置關系的指令集還包括用于執行以下操作的指令集針對所述第二本原圖形元素和在所述閱讀順序中與所述第二本原圖形元素相繼的第三本原圖形元素,計算包括所述第二本原圖形元素和第三本原圖形元素的結構性圖形元素的尺寸;將包括所述第一和第二本原圖形元素的結構性圖形元素的尺寸與包括所述第二和第三本原圖形元素的結構性圖形元素的尺寸進行比較。
99.根據權利要求92所述的計算機可讀介質,其中,所述用于識別接連的本原圖形元素之間的位置關系的指令集包括用于執行以下操作的指令集識別在所述繪制順序中接連的每對本原圖形元素;和對于識別出的每對本原圖形元素,計算該對的展度值。
100.根據權利要求99所述的計算機可讀介質,其中,對的展度值描述該對中的兩個本原圖形元素的尺寸和相鄰度。
101.根據權利要求99所述的計算機可讀介質,其中,所述用于從本原圖形元素集合定義單個結構性圖形元素的指令集包括用于執行以下操作的指令集基于所計算的展度值識別彼此相鄰的本原圖形元素的集群,其中在所述集群內所有的本原圖形元素在所述繪制順序中是連續的;識別所述集群中滿足特定約束集合的連續本原圖形元素的子分組;以及針對每個子分組,定義包括該子分組中的所有本原圖形元素的結構性圖形元素。
102.根據權利要求101所述的計算機可讀介質,其中,所述用于識別本原圖形元素的集群的指令集包括用于以所計算的展度值作為一階差值對本原圖形元素執行差值集群的指令集。
103.根據權利要求101所述的計算機可讀介質,其中,所述特定約束集合包括如下要求所述子分組中的每個特定本原元素的界線與該子分組中按照繪制順序在所述特定本原元素之前的所有本原元素的集體界線相交。
104.根據權利要求103所述的計算機可讀介質,其中,每個本原元素的界線是包括該本原元素的最小豎直界定框。
105.根據權利要求103所述的計算機可讀介質,其中,每個本原元素的界線是完全包圍該本原元素的最小面積路徑。
106.根據權利要求92所述的計算機可讀介質,其中,所述用于從所述多個本原圖形元素定義單個結構性圖形元素的指令集包括用于生成用以定義結構性圖形元素的本原圖形元素集合之間的至少一個關聯的指令集。
107.根據權利要求92所述的計算機可讀介質,其中,所述計算機程序還包括用于基于所述結構性圖形元素定義結構化文檔的指令集。
108.根據權利要求107所述的計算機可讀介質,其中,所述結構化文檔包括文檔的分級模型,該分級模型包括多個節點,其中一個節點由所述結構性圖形元素填充。
109.一種用于定義程序的方法,該程序用于分析文檔并基于所述分析生成定義文檔中的結構的結構性元素,該方法包括定義用于接收包括多個本原圖形元素的文檔的模塊,每個本原圖形元素被定義為所述文檔中的單個對象,所述文檔具有繪制順序,該繪制順序指示當顯示所述文檔時繪制本原圖形元素的順序;定義用于識別在所述繪制順序中接連的本原圖形元素之間的位置關系的模塊;以及定義用于基于所述位置關系,從至少兩個所述本原圖形元素定義單個結構性圖形元素的模塊。
110.根據權利要求109所述的方法,還包括定義用于定義包括結構性圖形元素的結構化文檔的模塊。
111.根據權利要求110所述的方法,其中,所述結構化文檔包括文檔的分級模型,該分級模型包括多個節點,其中一個節點被所述結構性圖形元素填充。
112.—種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時分析文檔,所述計算機程序包括用于執行以下操作的指令集接收包括多個本原圖形元素的文檔,每個本原圖形元素被定義為所述文檔中的單個對象,所述文檔具有繪制順序,該繪制順序指示當顯示所述文檔時繪制本原圖形元素的順序;計算每對在所述繪制順序中接連的本原圖形元素的值,其中,所計算的值與該對中的本原圖形元素的尺寸相關;基于所計算的值,定義接連的本原圖形元素的集群;以及識別所述集群中滿足特定約束的本原圖形元素的子集群的集合;以及將每個特定子集群定義為包括所述特定子集群中的本原圖形元素的單個結構性圖形元素。
113.根據權利要求112所述的計算機可讀介質,其中,所計算的值還與所述對中的本原圖形元素彼此的相鄰度相關。
114.一種用于定義用以重構文檔的程序的方法,該方法包括定義文檔重構操作的缺省集合,所述文檔重構操作用以從包括多個本原元素的文檔定義結構化文檔;定義簡檔分級集合,每個簡檔包括(i)潛在文檔重構結果集合,以及(ii)用于在中間文檔重構結果與簡檔的潛在文檔重構結果匹配時修改文檔重構操作的指令,其中來自分級中較低級別處的簡檔的指令撤銷來自較高級別處的簡檔的指令;以及定義用于將中間文檔重構結果與簡檔匹配的模塊。
115.根據權利要求114所述的方法,其中,所述結構化文檔包括文檔的分級模型。
116.根據權利要求114所述的方法,其中,所述簡檔分級集合包括針對文檔、章節、頁面和區中的至少兩個的簡檔。
117.根據權利要求116所述的方法,其中,每個文檔簡檔規定可能頁面簡檔的特定集合,并且每個頁面簡檔規定可能區簡檔的特定集合。
118.根據權利要求117所述的方法,其中,第一文檔簡檔的頁面簡檔集合包括特定頁面簡檔,并且第二文檔簡檔的頁面簡檔集合也包括所述特定頁面簡檔。
119.根據權利要求114所述的方法,特定簡檔的指令包括當中間文檔重構結果與針對所述特定簡檔的潛在文檔重構結果匹配時應當被測試的所述簡檔分級集合中的較低級別處的簡檔的子集。
120.根據權利要求114所述的方法,其中,特定簡檔的指令包括不執行特定文檔重構操作的指令。
121.根據權利要求120所述的方法,其中,所述特定簡檔是頁面的簡檔,并且所述特定簡檔的潛在文檔重構結果的集合包括頁面僅具有一列文本的結果,其中所述特定簡檔的指令包括不執行拆分文本行的操作的指令。
122.根據權利要求114所述的方法,其中,特定簡檔的指令包括關于如何執行特定文檔重構操作的指令。
123.根據權利要求114所述的方法,其中,特定簡檔的指令包括規定特定重構處理的指令,該特定重構處理的結果應從中間重構結果中移除。
124.—種存儲計算機程序的計算機可讀介質,所述計算機程序由至少一個處理器執行,所述計算機程序包括用于執行以下操作的指令集接收包括多個本原元素的文檔;識別文檔重構操作的缺省集合,所述文檔重構操作用于重構所述文檔以定義結構化文檔;執行來自所述缺省集合的一個或多個文檔重構操作;基于所執行的文檔重構操作的結果,識別所述文檔的簡檔;以及根據所識別的簡檔修改用于重構文檔的文檔重構操作的集合。
125.根據權利要求IM所述的計算機可讀介質,其中,所述計算機程序還包括用于在修改所述集合之后執行來自修改后的集合的至少一個文檔重構操作的指令集。
126.根據權利要求IM所述的計算機可讀介質,其中,所述用于修改文檔重構操作集合的指令集包括用于從要執行的重構操作的集合中移除特定重構操作的指令集。
127.根據權利要求IM所述的計算機可讀介質,其中,所述用于修改文檔重構操作集合的指令集包括用于向要執行的重構操作的集合添加特定重構操作的指令集。
128.根據權利要求IM所述的計算機可讀介質,其中,重構操作的缺省集合規定要執行重構操作的順序。
129.根據權利要求1 所述的計算機可讀介質,其中,所述用于修改文檔重構操作集合的指令集包括用于修改要執行重構操作的順序的指令集。
130.根據權利要求IM所述的計算機可讀介質,其中,所述簡檔是基于執行的文檔重構操作的結果識別文檔的文檔類型的文檔簡檔。
131.根據權利要求130所述的計算機可讀介質,其中,所述計算機程序還包括用于執行以下操作的指令集在修改所述集合之后執行來自所修改的集合的至少一個文檔重構操作;基于所執行的文檔重構操作的結果,識別針對文檔的特定章節的章節簡檔;以及根據識別出的章節簡檔修改用于重構文檔的特定章節的文檔重構操作的集合。
132.根據權利要求131所述的計算機可讀介質,其中,所述特定章節是特定頁面。
133.根據權利要求131所述的計算機可讀介質,其中,所述章節簡檔中的指令撤銷所述文檔簡檔中用于重構所述特定章節的沖突指令。
134.根據權利要求131所述的計算機可讀介質,其中,在識別所述章節簡檔之后,所述文檔簡檔中沒有與所述章節簡檔中的指令抵觸的指令仍然在運行。
135.一種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時顯示文檔,所述計算機程序包括用于執行以下操作的指令集定義包括結構性元素的分級的結構化文檔,所述分級是通過分析未結構化文檔而構建的;在設備上顯示所述文檔;接收對所述文檔中感興趣位置的選擇;基于所述感興趣位置,將所述分級中的結構性元素識別為感興趣區域;以及修改對所述文檔的顯示,以突出顯示所識別出的感興趣區域。
136.根據權利要求135所述的計算機可讀介質,其中,所述設備是小屏幕設備。
137.根據權利要求136所述的計算機可讀介質,其中,所述設備是手持式設備。
138.根據權利要求136所述的計算機可讀介質,其中,所述未結構化文檔包括多個未關聯的本原元素,其中,所述用于定義結構化文檔的指令集包括用于執行以下操作的指令集生成所述本原元素之間的關聯以定義結構性元素;以及定義結構性元素的分級。
139.根據權利要求135所述的計算機可讀介質,其中,所述用于識別結構性元素的指令集包括用于執行以下操作的指令集識別包括所述感興趣位置的所述分級中最低級別處的結構性元素;以及識別包括在所述分級的最低級別處識別出的結構性元素的所述分級中較高級別處的結構性元素,直到到達適合作為感興趣區域的結構性元素。
140.根據權利要求139所述的計算機可讀介質,其中,所述分級的最低級別處的結構性元素是關聯為字的圖示符集,并且適合作為感興趣區域的結構性元素是包括該字的段落。
141.根據權利要求139所述的計算機可讀介質,其中,所述感興趣位置在圖形元素內, 并且所述感興趣區域是所述圖形元素。
142.根據權利要求135所述的計算機可讀介質,其中,所述用于接收對感興趣位置的選擇的指令集包括用于接收在觸摸屏設備上的特定位置處的雙敲的指令集。
143.根據權利要求135所述的計算機可讀介質,其中,所述用于修改對文檔的顯示的指令集包括用于組合對文檔的縮放、旋轉和平移以置中所述感興趣區域的指令集。
144.根據權利要求135所述的計算機可讀介質,其中,所述用于修改對文檔的顯示的指令集包括用于執行以下操作的指令集基于作為感興趣區域的結構性元素定義感興趣矩形;以及縮放所述顯示以在顯示整個所述感興趣矩形的同時最大化所述感興趣矩形的尺寸。
145.根據權利要求144所述的計算機可讀介質,其中,所述感興趣矩形被縮放,使得該矩形在第一方向上的長度等于在所述設備上的顯示在所述第一方向上的長度,其中所述用于修改對文檔的顯示的指令集還包括用于在第二方向上將所述感興趣矩形置中在所述顯示中的指令集。
146.根據權利要求145所述的計算機可讀介質,其中,所述第一方向是水平的,而所述第二方向是垂直的。
147.根據權利要求145所述的計算機可讀介質,其中,所述第一方向是垂直的,而所述第二方向是水平的。
148.根據權利要求135所述的計算機可讀介質,其中,所述計算機程序還包括用于執行以下操作的指令集接收用以從所述感興趣區域移動的輸入;以及修改對所述文檔的顯示,以突出顯示感興趣的結構性相關區域。
149.根據權利要求148所述的計算機可讀介質,其中,所述感興趣的結構性相關區域是按照閱讀順序在所識別出的結構性元素之前的結構性元素。
150.根據權利要求148所述的計算機可讀介質,其中,所述感興趣的結構性相關區域是按照閱讀順序在所識別出的結構性元素之后的結構性元素。
151.根據權利要求148所述的計算機可讀介質,其中,所述感興趣的結構性相關區域是所述文檔中與初始感興趣區域不同的頁面上的結構性元素,其中,所述結構化文檔包括所述感興趣區域與所述感興趣的結構性相關區域之間的鏈接。
152.一種存儲用于手持式顯示設備的計算機程序的計算機可讀介質,所述計算機程序由至少一個處理器執行,所述計算機程序包括用于執行以下操作的指令集分析包括多個未關聯的本原元素的未結構化文檔,以定義包括結構性元素的分級的結構化文檔,所述結構性元素是通過關聯本原元素集合來定義的;當所述手持式顯示設備處于第一朝向時,在所述手持式顯示設備上在第一布局中顯示所述結構化文檔的特定部分;當所述手持式顯示設備處于第二朝向時,在所述手持式顯示設備上在與所述第一布局不同的第二布局中顯示所述結構化文檔的所述特定部分。
153.根據權利要求152所述的計算機可讀介質,其中,所述第一朝向是水平朝向,而所述第二朝向是垂直朝向。
154.根據權利要求153所述的計算機可讀介質,其中,所述結構化文檔的部分包括布置在一列中的文本,其中所述第一布局在三列中顯示所述文本,而所述第二布局在兩列中顯示所述文本。
155.根據權利要求152所述的計算機可讀介質,其中,所述手持式顯示設備包括用于確定該顯示設備的朝向的加速計。
156.根據權利要求152所述的計算機可讀介質,其中,所述手持式顯示設備是 iPhone 0
157.一種定義用于顯示文檔的程序的方法,該方法包括定義用于定義包括結構性元素的分級的結構化文檔的模塊,所述分級是通過分析未結構化文檔而構建的;定義用于在設備上顯示所述文檔的模塊;定義用于接收對所述文檔中感興趣位置的選擇的模塊;定義用于基于所述感興趣位置,將所述分級中的結構性元素識別為感興趣區域的模塊;以及定義用于修改對所述文檔的顯示,以突出顯示所識別出的感興趣區域的模塊。
158.根據權利要求157所述的方法,其中,所述程序是針對手持式設備的固件定義的。
159.—種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時定義對文檔中的文本的選擇,所述計算機程序包括用于執行以下操作的指令集接收包括多個未關聯的圖示符的未結構化文檔;關聯圖示符集;識別規定通過所述圖示符的閱讀流的閱讀順序;顯示所述文檔;接收用于對所顯示的文檔內的文本的選擇的起始點和終止點;以及通過采用識別出的圖示符集和預期的閱讀流來定義從所述起始點到所述終止點對文本的選擇。
160.根據權利要求159所述的計算機可讀介質,其中,所關聯的圖示符集包括多個段落,所述閱讀順序規定從第一段落到不鄰接的第二段落的閱讀流。
161.根據權利要求159所述的計算機可讀介質,其中,所關聯的圖示符集包括多個列, 所述起始點和終止點在不同的列中。
162.根據權利要求161所述的計算機可讀介質,其中,所述閱讀順序針對每個列規定一個順序值,其中,對文本的選擇包括順序值在包括所述起始點的列的順序值與包括所述終止點的列的順序值之間的所有列。
163.根據權利要求159所述的計算機可讀介質,其中,所述計算機程序還包括用于執行以下操作的指令集確定在所述閱讀順序中所述起始點是否是在所述終止點之后;當所述起始點在所述終止點之后時,切換用于選擇的起始點和終止點,使得在所述閱讀順序中起始點在終止點之前。
164.根據權利要求159所述的計算機可讀介質,其中,通過利用游標控制器的點擊和拖拽選擇來接收用于文本選擇的起始點和終止點。
165.根據權利要求159所述的計算機可讀介質,其中,當按壓游標控制器按鈕時所述起始點是游標的定位,并且在游標從所述起始點移動之后所述終止點是游標的定位。
166.根據權利要求159所述的計算機可讀介質,其中,通過觸摸屏姿態來接收用于文本選擇的起始點和終止點。
167.根據權利要求166所述的計算機可讀介質,其中,所述起始點是用戶用物體初始地觸摸觸摸屏的定位,所述終止點是用戶將所述物體拖拽到的定位。
168.根據權利要求167所述的計算機可讀介質,其中,所述物體是用戶的手指。
169.根據權利要求159所述的計算機可讀介質,其中,所述用于識別關聯的圖示符集和閱讀順序的指令集包括用于從所述未結構化文檔定義結構化文檔的指令集,其中所述關聯的圖示符集是所述結構化文檔中的結構性元素。
170.根據權利要求169所述的計算機可讀介質,其中,所述結構化文檔包括多個布局, 每個布局包括一個或多個關聯的圖示符集。
171.根據權利要求170所述的計算機可讀介質,其中,所述計算機程序還包括用于執行以下操作的指令集確定所述起始點和終止點是否是在同一布局內;以及當所述起始點和終止點不在同一布局內時,定義與所述起始點在同一布局內的新終止點ο
172.根據權利要求171所述的計算機可讀介質,其中,所述用于定義新終止點的指令集包括識別從所述起始點到所述終止點的直線;以及將所述直線離開所述起始點的布局的點定義為所述新終止點。
173.根據權利要求170所述的計算機可讀介質,其中,所述用于定義對文本的選擇的指令集包括用于執行以下操作的指令集確定所述起始點和所述終止點是否處于同一布局中;以及當所述起始點和所述終止點處在不同的布局中時,定義所述選擇以包括在所述起始點的布局中位于該布局中的所述起始點之后的所有文本。
174.根據權利要求173所述的計算機可讀介質,其中,所述用于定義對文本的選擇的指令集還包括用于定義所述選擇以包括所述起始點的布局與所述終止點的布局之間的任何布局內的所有文本。
175.根據權利要求159所述的計算機可讀介質,其中,所述對文本的選擇是進行復制并粘貼到第二文檔,其中,所述文本在保持所述閱讀順序的情況下被粘貼到所述第二文檔。
176.—種存儲計算機程序的計算機可讀介質,所述計算機程序由至少一個處理器執行,所述計算機程序包括用于執行以下操作的指令集分析包括多個本原元素的未結構化文檔,以將結構化文檔定義為所述未結構化文檔的分級模型,所述結構化文檔包括多個結構性元素和通過所述結構性元素的閱讀順序;顯示所述文檔;接收用于對所述文檔中的文本的選擇的起始點和終止點;以及通過采用所述結構性元素和通過所述結構性元素的閱讀順序來選擇所述文檔中從所述起始點到所述終止點的文本。
177.根據權利要求176所述的計算機可讀介質,其中,所述文檔被顯示在手持式顯示設備上。
178.根據權利要求176所述的計算機可讀介質,其中,所述起始點在文章內的文本列中,所述終止點在所述文章的調出部內。
179.根據權利要求178所述的計算機可讀介質,其中,所述計算機程序還包括用于將所述終止點移動到所述文章中的文本列的指令集。
180.根據權利要求178所述的計算機可讀介質,其中,所述用于選擇文本的指令集包括用于選擇所述文章的列中的所有文本的指令集。
181.一種定義用于定義對文檔中的文本的選擇的程序的方法,該方法包括 定義用于接收包括多個未關聯的圖示符的未結構化文檔的模塊;定義用于關聯圖示符集的模塊;定義用于識別規定通過所述圖示符的閱讀流的閱讀順序的模塊; 定義用于顯示所述文檔的模塊;定義用于接收用于對所顯示的文檔內的文本的選擇的起始點和終止點的模塊;以及定義用于通過采用識別出的圖示符集和預期的閱讀流來定義從所述起始點到所述終止點對文本的選擇的模塊。
182.—種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時定義用于文檔的結構,所述文檔包括多個本原元素,所述多個本原元素是按照它們在所述文檔中的位置而定義的,所述計算機程序包括用于執行以下操作的指令集針對本原元素的特定集合,識別多對最近本原元素之間的距離; 對識別出的距離進行排序;存儲識別出哪些所述識別出的距離大于分隔的給定閾值的單個值;以及采用存儲的單個值來識別和分析所述分隔,從而定義所述文檔的結構性元素。
183.根據權利要求182所述的計算機可讀介質,其中,所述用于分隔的給定閾值識別一對本原元素之間的最小距離。
184.根據權利要求183所述的計算機可讀介質,其中,更靠近所述最小距離的多對本原元素在同一個本原元素集群中。
185.—種存儲計算機程序的計算機可讀介質,所述計算機程序在由至少一個處理器執行時定義用于文檔的結構,所述文檔包括多個本原元素,所述多個本原元素是按照它們在所述文檔中的位置而定義的,所述計算機程序包括用于執行以下操作的指令集針對本原元素的特定集合,識別該集合中的最近本原元素的成對分組; 基于從最近對到最遠對的順序來排序所述本原元素的成對分組; 存儲識別出哪些本原元素的成對分組足夠遠離以形成分隔的單個值;以及采用存儲的單個值來識別和分析所述分隔,從而定義所述文檔的結構性元素。
186.根據權利要求185所述的計算機可讀介質,其中,所述計算機可讀介質是手持式設備的固件。
187.根據權利要求186所述的計算機可讀介質,其中,所述設備是蜂窩式電話。
188.根據權利要求186所述的計算機可讀介質,其中,所述設備是媒體播放器。
189.根據權利要求185所述的計算機可讀介質,其中,所述計算機程序還包括用于定義結構化文檔的指令集,所述結構化文檔包括所述結構性元素和本原元素。
190.根據權利要求185所述的計算機可讀介質,其中 所述文檔包括多個圖示符;所述計算機程序還包括用于將圖示符集關聯為字的指令集; 所述本原元素的特定集合是字的最左圖示符;以及所述用于采用存儲的單個值來識別和分析所述分隔以定義結構性元素的指令集包括用于定義對準字集合的左對準導引的指令集。
191.根據權利要求185所述的計算機可讀介質,其中 所述文檔包括多個圖示符;所述計算機程序還包括用于將圖示符集關聯為字的指令集; 所述本原元素的特定集合是字的最右圖示符;以及所述用于采用存儲的單個值來識別和分析所述分隔以定義結構性元素的指令集包括用于定義對準字集合的右對準導引的指令集。
192.根據權利要求185所述的計算機可讀介質,其中,所述本原元素的特定集合是本原圖形元素,并且所述用于采用存儲的單個值來識別和分析所述分隔以定義結構性元素的指令集包括用于將周圍的本原圖形元素關聯為結構性圖形元素的指令集。
193.根據權利要求185所述的計算機可讀介質,其中,所述本原元素是圖示符,并且所述用于定義結構性元素的指令集包括用于將周圍圖示符集關聯為字的指令集。
194.根據權利要求193所述的計算機可讀介質,其中,所述用于識別最近本原元素的成對分組的指令集包括用于執行以下操作的指令集識別具有公共基線的圖示符集;基于圖示符在第一方向上的坐標來排序所述圖示符集;針對所排序集合中的每對連續圖示符,計算該對中的圖示符之間的坐標值的差值;以及在第一陣列中排序所計算的差值。
195.根據權利要求194所述的計算機可讀介質,其中,所述用于基于從最近對到最遠對的順序來排序所述成對本原元素的指令集包括用于執行以下操作的指令集排序所計算的差值;以及在第二陣列中排序與所排序的差值對應的第一陣列中的索引。
196.根據權利要求195所述的計算機可讀介質,其中,將存儲最小差值的第一陣列的索引存儲為第二陣列的第一索引處的值。
197.根據權利要求195所述的計算機可讀介質,其中,所述計算機程序還包括用于確定圖示符之間的最小差值的指令集,其中,所存儲的單個值是所述第二陣列中的索引,在該索引處存儲所述第一陣列的用于存儲所述最小差值的索引。
198.根據權利要求197所述的計算機可讀介質,其中,所述最小差值代表字之間的間隔。
199.根據權利要求197所述的計算機可讀介質,其中,所述用于采用存儲的值來識別和分析所述分隔的指令集包括用于拆分第三陣列的指令集,所述第三陣列在其索引處存儲排序的χ坐標值,其被存儲為在被存儲為所述單個值的索引處以及之后的第二陣列的所有索引處的第二陣列中的值。
200.根據權利要求185所述的計算機可讀介質,其中,所述用于存儲單個值的指令集包括用于存儲多個各自識別本原元素的不同分隔的單個值的指令集。
201.根據權利要求200所述的計算機可讀介質,其中,所述計算機程序還包括分析所述本原元素的不同分隔,以識別表示最優距離尺度的理想最優分隔。
202.一種定義用于定義文檔的結構的程序的方法,該方法包括定義用于識別文檔中最近本原元素的成對分組的模塊,所述文檔包括多個本原元素, 所述多個本原元素按照它們在所述文檔中的位置來定義;定義用于基于從最近對到最遠對的順序來排序所述本原元素的成對分組的模塊;定義用于存儲識別出哪些成對分組的本原元素足夠遠離以形成分隔的單個值的模塊;以及定義用于采用存儲的值來識別和分析所述分隔以定義所述文檔的結構性元素的模塊。
203.根據權利要求202所述的方法,還包括定義用于基于所述結構性元素和本原元素來定義結構化文檔的模塊。
204.根據權利要求203所述的方法,其中,所述結構化文檔是其中所述結構性元素是節點的分級結構。
205.—種方法,包括定義用于分析和操縱文檔的多個不同處理,所述文檔包括多個本原元素;以及定義用于與所述本原元素相關聯的數據的存儲設備,其中,至少一些所述數據存儲在與所述處理分開的存儲器空間中,并且由至少兩個不同的處理共享,其中所述處理通過利用對數據的引用來訪問所述數據,其中所述數據不被所述處理復制。
206.根據權利要求205所述的方法,其中,用于與所述本原元素相關聯的數據的存儲設備是第一存儲設備,該方法還包括定義解析器,該解析器用于(i)解析所述文檔以識別出所述本原元素,以及(ii)將所述本原元素存儲在第二存儲設備中。
207.根據權利要求206所述的方法,其中,與所述本原元素相關聯的數據包括對所述第二存儲設備中的本原元素的引用。
208.根據權利要求206所述的方法,其中,所述解析器用于(i)解析所述文檔以識別按照隨機順序的本原元素,以及(ii)將按照所述隨機順序的本原元素存儲在所述第二存儲設備中。
209.根據權利要求206所述的方法,其中,所述隨機順序是其中本原元素在所述文檔的位流表示中定義的順序。
210.根據權利要求206所述的方法,還包括定義如下模塊,該模塊用于(i)根據特定準則來排序所述本原元素,以及(ii)按照排序順序在所述第一存儲設備中存儲與本原元素相關聯的數據。
211.根據權利要求210所述的方法,其中,所述本原元素包括關于它們在所述文檔中的定位的信息,其中所述特定準則是基于所述本原元素的定位。
212.根據權利要求210所述的方法,其中,在所述文檔的特定頁面內,所述特定準則以從上到下作為初級準則并以從左到右作為次級準則來排序所述本原元素。
213.根據權利要求205所述的方法,其中,所述本原元素包括多個圖示符。
214.根據權利要求213所述的方法,其中,所述多個不同的處理包括用于將圖示符集關聯為文本行的處理;以及用于將圖示符集關聯為字的處理。
215.根據權利要求214所述的方法,其中所述用于將圖示符集關聯為文本行的處理將特定文本行存儲為引用與所述本原元素相關聯的數據的第一串;以及所述用于將圖示符集關聯為字的處理將特定字存儲為引用與所述本原元素相關聯的同一數據的第二串。
216.根據權利要求215所述的方法,其中,同一數據在不被復制的情況下由兩個處理使用。
217.根據權利要求215所述的方法,其中,所述第一串和第二串中的每一個通過僅存儲兩個值來引用所述數據。
218.根據權利要求217所述的方法,其中,所述兩個值是對第一條數據的引用和串中的數據的條數的計數。
219.根據權利要求217所述的方法,其中,所述第一串和第二串引用相同的第一條數據并存儲不同的計數。
220.根據權利要求205所述的方法,還包括定義共享存儲器數據結構,該共享存儲器數據結構用于管理對與本原元素相關聯的數據的存儲設備。
221.根據權利要求220所述的方法,其中,所述共享存儲器數據結構用于在單獨的存儲器空間中存儲與本原元素相關聯的數據被存儲的定位。
222.根據權利要求220所述的方法,其中,所述共享存儲器數據結構在至少兩個其他數據結構引用與本原元素相關聯的數據時使用。
223.根據權利要求222所述的方法,其中,所述至少兩個其他數據結構共享與本原元素相關聯的數據的所有。
224.根據權利要求220所述的方法,其中,所述共享存儲器數據結構用于存儲引用與本原元素相關聯的數據的其他數據結構的個數。
225.—種存儲計算機程序的計算機可讀介質,所述計算機程序由至少一個處理器執行,所述計算機程序包括用于執行以下操作的指令集解析包括多個本原元素的文檔; 將按照隨機順序的本原元素存儲在第一存儲設備中;按照基于本原元素在文檔中的定位的順序將對本原元素的引用存儲在第二存儲設備中;接收用于執行文檔重構操作的指令;以及在不存儲任何新的對本原元素的引用的情況下,執行接收到的指令。
226.根據權利要求225所述的計算機可讀介質,其中,所述計算機程序還包括用于執行以下操作的指令集接收第二指令集來執行第二文檔重構操作; 確定執行所述第二文檔重構操作要求對本原元素的新引用;以及按照與所述第二存儲設備的順序不同的順序在第三存儲設備中存儲對本原元素的新引用。
227.根據權利要求2 所述的計算機可讀介質,其中,所述第二存儲設備和第三存儲設備在同一物理存儲設備中。
228.—種方法,包括定義第一模塊,該第一模塊用于(i)解析包括多個本原元素的文檔,以及(ii)將按照隨機順序的本原元素存儲在第一存儲設備中;定義第二模塊,該第二模塊用于(i)分配第二存儲設備中用于存儲對隨機排序的本原元素的引用的存儲器,以及(ii)在所分配的存儲器中按照特定順序存儲所述引用;定義第三模塊,該第三模塊用于存儲引用所排序引用的一部分的數據結構,該數據結構僅包括對排序引用中第一個的引用以及計數值;以及定義第四模塊,該第四模塊用于(i)接收用以執行文檔重構操作的指令,以及(ii)識別出需要所述第一模塊、第二模塊和第三模塊中的哪個來執行文檔重構操作,同時最小化存儲器和計算使用。
229.根據權利要求228所述的方法,其中,當僅需要所述第三模塊來執行特定文檔重構操作時,對于本原元素的副本或者對本原元素的新引用不分配新存儲器。
230.根據權利要求1、22、30、39、44、46、50、61、67、71、88、92、112、124、182、185 和 225 之一所述的計算機可讀介質,其中,所述文檔是未結構化文檔。
231.根據權利要求1、22、30、39、44、46、50、61、67、71、88、92、112、124、182、185 和 225 之一所述的計算機可讀介質,其中,所述文檔是矢量圖形文檔。
232.根據權利要求1、22、30、39、44、46、50、61、67、71、88、92、112、124、182、185 和 225 之一所述的計算機可讀介質,其中,所述文檔是便攜式文檔格式(PDF)文檔。
233.根據權利要求1、22、30、39、44、46、50、61、67、71、88、92、112、124、135、152、159、 176、182、185和225之一所述的計算機可讀介質,其中,所述計算機程序是用于手持式設備的應用。
234.根據權利要求1、22、30、39、44、46、50、61、67、71、88、92、112、124、135、152、159、 176、182、185和225之一所述的計算機可讀介質,其中,所述計算機程序是操作系統的一部分。
235.根據權利要求1、22、30、39、44、46、50、61、67、71、88、92、112、124、135、152、159、 176、182、185和225之一所述的計算機可讀介質,其中,所述計算機程序是在操作系統之上運行的應用。
236.根據權利要求135、152、159和176之一所述的計算機可讀介質,其中,所述未結構化文檔是矢量圖形文檔。
237.根據權利要求135、152、159和176之一所述的計算機可讀介質,其中,所述未結構化文檔是便攜式文檔格式(PDF)文檔。
全文摘要
本發明不同的實施例采用不同的分析未結構化文檔以定義結構化文檔的技術。所述未結構化文檔包括眾多本原元素,但是不包括結構性元素,該結構性元素規定本原元素之間的結構性關系和/或基于這些本原元素的文檔的結構性屬性。為了定義結構化文檔,采用未結構化文檔的本原元素來識別未結構化文檔的各種幾何屬性。采用識別出的幾何屬性和本原元素的其他屬性來定義結構性元素,例如相關聯的本原元素(例如,字、段落、連結圖,等等)、表格、導引、裝訂線等,以及定義通過本原元素和結構性元素的閱讀流。提供了各種提高幾何分析和文檔重構處理的效率的方法(例如,分級簡檔化、高效集群分析技術、高效數據結構)。
文檔編號G06F17/27GK102317933SQ200980156784
公開日2012年1月11日 申請日期2009年12月31日 優先權日2009年1月2日
發明者D·B·科勒格, M·R·勒維, P·A·曼斯菲爾德 申請人:蘋果公司