專利名稱:用于處理注釋的策略的制作方法
專利說明用于處理注釋的策略 背景 數(shù)字化圖形輸入板包括圖形輸入板以及書寫機(jī)制(通常稱為筆或指示筆)。用戶可使用數(shù)字化圖形輸入板來以手繪方式輸入任何信息。例如,用戶可使用數(shù)字化圖形輸入板來輸入書寫信息(例如,字母數(shù)字信息)或制作繪圖。一般而言,用戶以一個或多個“墨水筆畫”來輸入任何這樣的信息。
在一個特殊情況中,用戶可使用數(shù)字化圖形輸入板來將補(bǔ)充信息輸入到諸如文字處理文檔、電子郵件、PDF文檔、標(biāo)記語言文檔等基礎(chǔ)文檔“上”。即,用戶可輸入補(bǔ)充信息以用各種方式來標(biāo)記基礎(chǔ)文檔的某些部分。例如,用戶可選擇對基礎(chǔ)文檔中的一所選文本段加下劃線?;蛘?,用戶可選擇在基礎(chǔ)文檔中的一所選文本段周圍畫圈,等等。一般而言,用戶可應(yīng)用這些補(bǔ)充信息以模擬用戶在審閱基礎(chǔ)文檔的硬拷貝版本時可能作出的標(biāo)記,例如用于對基礎(chǔ)文檔的某些部分畫出強(qiáng)調(diào)、作出某些糾正等等。
所有這些補(bǔ)充標(biāo)記此處都被稱為“注釋”。數(shù)字化圖形輸入板可將這些注釋連同基礎(chǔ)文檔一起儲存。當(dāng)再現(xiàn)基礎(chǔ)文檔時,數(shù)字化圖形輸入板可在基礎(chǔ)文檔內(nèi)的適當(dāng)位置處重新顯示這些注釋。數(shù)字化圖形輸入板還可用各種方式,例如響應(yīng)于編輯基礎(chǔ)文檔,來改變基礎(chǔ)文檔的布局。為在經(jīng)修改的基礎(chǔ)文檔中正確地顯示注釋,數(shù)字化圖形輸入板應(yīng)當(dāng)調(diào)整注釋的位置,使得注釋繼續(xù)標(biāo)記基礎(chǔ)文檔中的適當(dāng)內(nèi)容。
對注釋的正確處理是一項具挑戰(zhàn)性的任務(wù),尤其是在必須在經(jīng)修改的基礎(chǔ)文檔上重新繪制注釋的時候。例如,不同種類的注釋可具有不同的相應(yīng)特性。這意味著當(dāng)在經(jīng)修改的基礎(chǔ)文檔上重新顯示不同類型的注釋時必須有不同的考慮事項。常規(guī)的系統(tǒng)沒有采用用于解決處理注釋時的這種復(fù)雜性的機(jī)制。
出于至少上述原因,本領(lǐng)域中需要用于處理注釋的更合適的機(jī)制。
概述 描述了一種用于處理添加到基礎(chǔ)文檔的注釋的注釋處理系統(tǒng)。在一個事先中,該注釋處理系統(tǒng)首先解析添加到基礎(chǔ)文檔的筆畫以形成一解析樹。該解析樹具有與以下的一個或多個相關(guān)聯(lián)的節(jié)點繪圖對象;段落;行;字;以及筆畫。在該解析分析的基礎(chǔ)上,該注釋處理系統(tǒng)然后執(zhí)行注釋分析以自動對添加到基礎(chǔ)文檔的注釋進(jìn)行分類。注釋分析具體地可以包括確定輸入筆畫是否形成以下非限制性注釋列表中的一個或多個高亮注釋;泡注釋(包括封入型注釋);下劃線注釋;垂直括號注釋;調(diào)出注釋;以及自由筆記注釋。該注釋分析可用注釋解析樹的形式來輸出其結(jié)論。一回流引擎可使用該注釋分析的輸出在布局被修改的基礎(chǔ)文檔中正確地定位注釋。
以下描述另外的示例性實現(xiàn)。本概述中所述的主題參考了本發(fā)明的示例性表現(xiàn),并且因此不限制所附權(quán)利要求書中所述的本發(fā)明的范圍。
附圖簡述
圖1示出了用于處理添加到基礎(chǔ)文檔的注釋的示例性環(huán)境。
圖2示出了在圖1的環(huán)境中使用的示例性注釋處理系統(tǒng),包括分組和繪圖分離引擎(此處也稱為核心解析器引擎)、文檔布局分析引擎、注釋引擎模塊(進(jìn)而包括多個注釋引擎)、回流引擎、以及一個或多個基于注釋的應(yīng)用程序。
圖3-8示出了可由圖2的注釋處理系統(tǒng)處理的不同的示例性類型的注釋。
圖9示出了圖2的核心解析器引擎的示例性操作。
圖10示出了圖2的核心解析器引擎的示例性輸出。
圖11示出了圖2的文檔布局分析引擎的示例性輸出。
圖12示出了圖2的注釋引擎模塊的示例性操作。
圖13示出了圖2的注釋引擎模塊的示例性輸出。
圖14-18示出了說明圖2的注釋引擎模塊的操作的各種示例。
在全部的公開內(nèi)容和附圖中使用相同的標(biāo)號來引用相同的組件和特征。100系列標(biāo)號指的是最初在圖1中所找到的特征,200系列的標(biāo)號指的是最初在圖2中找到的特征,300系列的標(biāo)號指的是最初在圖3中找到的特征,依此類推。
詳細(xì)描述 本發(fā)明闡明了用于處理添加到基礎(chǔ)文檔的注釋的功能。處理包括對注釋類型進(jìn)行分類以及確定將注釋鏈接到基礎(chǔ)文檔的錨定信息。根據(jù)一種應(yīng)用,一回流引擎可使用分類的注釋和相關(guān)聯(lián)的錨定信息來幫助在基礎(chǔ)文檔布局改變時在基礎(chǔ)文檔中定位注釋。
關(guān)于術(shù)語,術(shù)語“基礎(chǔ)文檔”可以包含可接收用戶的注釋的任何種類的非手寫文檔。在一種情況下,基礎(chǔ)文檔包括計算機(jī)生成的文本、圖像和/或其它信息的文檔,諸如文字處理文檔、電子郵件、電子表格文檔、PDF文檔、任何種類的圖像等等。
術(shù)語“墨水筆畫”(或更簡單地稱為“筆畫”)指的是用戶使用數(shù)字化圖形輸入板或類似的機(jī)制創(chuàng)建的個別標(biāo)記。即,單個筆畫包括由筆在用戶將筆施加到圖形輸入板的時間點與用戶將筆從圖形輸入板移開的時間點之間跟蹤的跡線。
術(shù)語“元素”指的是文檔內(nèi)(或添加到文檔)的任何對象。如上所述,一元素可對應(yīng)于一筆畫。其它元素由筆畫的分組組成。這些合成元素可包括,但不限于,繪圖對象、段落、行以及字(以下將更詳細(xì)討論)。
術(shù)語“錨定信息”指的是文檔中在基礎(chǔ)文檔的布局改變之后幫助重定位注釋的位置或?qū)⒆⑨屪冃蔚淖只驁D像。通過使用錨定信息,注釋可保持“附連”到基礎(chǔ)文檔中的正確內(nèi)容。
該詳細(xì)描述包括以下各節(jié)。節(jié)A提供了用于處理注釋的示例性環(huán)境的綜述。節(jié)B提供了在節(jié)A的環(huán)境中使用的注釋處理系統(tǒng)的綜述。而節(jié)C更詳細(xì)地描述了節(jié)B的注釋處理系統(tǒng)所使用的注釋引擎的操作。
A.用于處理注釋的示例性環(huán)境 一般而言,參考附圖描述的任何功能都可使用軟件、硬件(例如,固定邏輯電路)、手動處理或這些實現(xiàn)的組合來實現(xiàn)。此處所使用的術(shù)語“邏輯”、“模塊”或“功能”一般表示軟件、硬件或軟件和硬件的組合。例如,在軟件實現(xiàn)的情況下,術(shù)語“邏輯”、“模塊”或“功能”表示當(dāng)在一個或多個處理設(shè)備(例如,一個或多個CPU)上執(zhí)行時執(zhí)行指定任務(wù)的程序代碼(或聲明性內(nèi)容)。程序代碼可被儲存在一個或多個計算機(jī)可讀介質(zhì)中。
更一般而言,所示的將邏輯、模塊和功能分割成不同單元可以反映這些軟件和/或硬件的實際物理分組和分配,或者可對應(yīng)于由單個軟件程序和/或硬件單元執(zhí)行的不同任務(wù)的概念性分配。所示的邏輯、模塊和功能可位于單個位置處(例如,由處理設(shè)備來實現(xiàn)),或者可分布在多個位置上。
術(shù)語“機(jī)器可讀介質(zhì)”等指的是用于以任何形式保留信息的任何種類的介質(zhì),包括各種存儲設(shè)備(磁、光、固態(tài)等等)。術(shù)語機(jī)器可讀介質(zhì)還包含了表示信息的短暫形式,包括用于將信息從一點發(fā)送到另一點的各種硬線和/或無線鏈路。
圖1示出了可用于實現(xiàn)此處所描述的注釋處理技術(shù)的一個環(huán)境100的示例。在一個實現(xiàn)中,該技術(shù)可由計算設(shè)備102來實現(xiàn)。計算設(shè)備102包括常規(guī)硬件組件,諸如處理單元104(或多個處理單元),以及各種易失性和/或非易失性存儲器106。存儲器106可包括執(zhí)行基本操作任務(wù)的操作系統(tǒng)108。存儲器106還可包括在操作系統(tǒng)108“之上”運(yùn)行并利用其資源的功能。這些功能可包括注釋處理系統(tǒng)110。注釋處理系統(tǒng)110實現(xiàn)以下詳細(xì)描述的注釋相關(guān)任務(wù)。在該所示的實現(xiàn)中,注釋處理系統(tǒng)100被實現(xiàn)為機(jī)器可讀指令,這些指令在被處理單元104執(zhí)行時執(zhí)行規(guī)定的操作。
注釋處理模塊110可以例如通過創(chuàng)建補(bǔ)充基礎(chǔ)文檔的注釋并對其進(jìn)行分類來對一個或多個基礎(chǔ)文檔操作。如上所述,基礎(chǔ)文檔可包括具有文本、圖像、和/或其它信息的任何計算機(jī)生成的文檔,諸如文字處理文檔、電子表格文檔、電子郵件文檔、PDF文檔、任何種類的標(biāo)記文檔(諸如可進(jìn)行web訪問的HTML文檔等)、圖像等等(或這些文檔的任何組合)。圖1概括地示出存儲器106可儲存文檔112,該文檔可表示沒有注釋的原始基礎(chǔ)文檔、包括注釋的基礎(chǔ)文檔等等。
用戶可以通過一個或多個輸入設(shè)備114和顯示設(shè)備116(或其它形式的輸出設(shè)備)來與計算機(jī)102交互。輸入設(shè)備可包括鍵盤118、鼠標(biāo)設(shè)備120、筆和圖形輸入板裝置122或任何其它種類的輸入設(shè)備124。具體地,筆和圖形輸入板裝置122可用于將手繪筆畫輸入到計算設(shè)備102中。筆和圖形輸入板技術(shù)在本領(lǐng)域中是公知的。在一種情況中,筆和圖形輸入板裝置122可以與計算設(shè)備102集成以形成單個計算單元,在本領(lǐng)域中通常稱之為圖形輸入板PC。
顯示設(shè)備116可以包括用于向用戶呈現(xiàn)信息的任何種類的設(shè)備。在一種情況中,顯示設(shè)備116可以與筆和圖形輸入板裝置122相結(jié)合。例如,由筆和圖形輸入板裝置122限定的顯示表面可以同時用作輸入設(shè)備和顯示設(shè)備兩者。在任何情況下,顯示設(shè)備166提供用戶界面呈現(xiàn)126。用戶界面呈現(xiàn)126可以顯示由計算設(shè)備102處理的基礎(chǔ)文檔(例如,文檔128)。基礎(chǔ)文檔128包括基礎(chǔ)內(nèi)容(包括文本、圖像和/或其它信息)以及一個或多個注釋130。注釋130是經(jīng)由筆和圖形輸入板裝置122或通過某一其它機(jī)制以手繪的方式輸入的。注釋130通過強(qiáng)調(diào)基礎(chǔ)文檔128的某些部分、編輯基礎(chǔ)文檔128的某些部分等等,來補(bǔ)充基礎(chǔ)文檔128的內(nèi)容。換言之,用戶通常以用戶在傳統(tǒng)的實踐中手動“標(biāo)記”基礎(chǔ)文檔128的硬拷貝相同的環(huán)境來注釋基礎(chǔ)文檔128。
上述實現(xiàn)僅是一個示例性實現(xiàn)。在另一情況下,計算設(shè)備102可表示可被一個或多個遠(yuǎn)程設(shè)備132經(jīng)由網(wǎng)絡(luò)耦合134來訪問的服務(wù)器計算機(jī)。網(wǎng)絡(luò)耦合134可包括WAN型耦合(例如,因特網(wǎng))、LAN型耦合或其組合。在此實現(xiàn)中,用戶可能使用遠(yuǎn)程設(shè)備132來創(chuàng)建墨水筆畫,并且可進(jìn)行web訪問的計算設(shè)備102可以執(zhí)行以下所述的墨水筆畫分析。
在又一實現(xiàn)中,注釋處理系統(tǒng)110可以用硬件(而非機(jī)器可讀代碼)、或由機(jī)器可讀代碼和硬件的組合來實現(xiàn)。在再一實現(xiàn)中,注釋處理系統(tǒng)110可以使用某種其它處理設(shè)備來實現(xiàn),諸如游戲控制臺、移動電話、機(jī)頂盒、個人數(shù)字助理(PDA)設(shè)備等等(即,使用任何替代設(shè)備而非常規(guī)的圖形輸入板PC框架)。
本發(fā)明的其余部分描述了注釋處理系統(tǒng)110的示例性組成和操作。為便于討論,某些操作被描述為以特定次序執(zhí)行的不同的組成步驟。這些實現(xiàn)是示例性而非限制性的。此處描述的某些步驟可被分組在一起并且在單個操作中執(zhí)行,而某些步驟可用不同于在本發(fā)明中所述的示例中所采用的次序的次序來執(zhí)行。
B.注釋處理系統(tǒng)的綜述 B.1.注釋處理系統(tǒng)的示例性組成 圖2示出了圖1所介紹的注釋處理系統(tǒng)110的更詳細(xì)描述。系統(tǒng)110包括以垂直的棧來排列的一系列模塊。以常規(guī)的方式,如果一模塊在另一模塊“之下”,則這意味著“較低的”模塊執(zhí)行基本操作以產(chǎn)生可被一個或多個“較高的”模塊使用的輸出結(jié)果。
注釋處理系統(tǒng)110的最低層包括分組和繪圖分離引擎202,以下為簡明起見稱之為“核心解析器引擎”202。核心解析器引擎202可包括幾個較小的引擎(將在稍后的小節(jié)中討論)。引擎202的目的是將墨水筆畫分組成字,將字分組成行,并將行分組成段落。核心解析器引擎202然后從書寫筆畫中區(qū)分出繪圖筆畫。核心解析器引擎202然后將繪圖筆畫分組成繪圖對象。核心解析器模塊202產(chǎn)生節(jié)點(包括繪圖對象節(jié)點、段落節(jié)點、行節(jié)點、字節(jié)點、筆畫節(jié)點等)的分層解析樹形式的輸出。注釋處理系統(tǒng)110的最低層還包括文檔布局分析引擎204。該引擎204的目的是分析基礎(chǔ)文檔的布局。
注釋處理系統(tǒng)110的下一層包括注釋引擎模塊206。如將在以下更詳細(xì)討論的,注釋引擎模塊206從核心解析器引擎202接收上述分層解析樹形式的輸入。注釋引擎模塊206還從文檔布局分析引擎206接收輸入。此模塊206的目的是對補(bǔ)充基礎(chǔ)文檔的注釋的類型進(jìn)行分類。該模塊206還確定將注釋鏈接到基礎(chǔ)文檔中的特定內(nèi)容的錨定信息。注意,注釋引擎模塊206基于核心解析器引擎202已經(jīng)執(zhí)行的初步分析,而非原始的、未解釋的筆畫信息來執(zhí)行其分析?;诤诵慕馕銎饕?02產(chǎn)生的高層對象執(zhí)行解釋是有利的,因為它提高了注釋分類的可靠性和效率。
注釋引擎模塊206可包括用于處理相應(yīng)的特定類型的注釋的一個或多個引擎。更具體地,圖2示出了注釋引擎模塊206包括示例性的六種類型的注釋引擎來處理六種不同類型的注釋。然而,該實現(xiàn)是代表性且非限制性的。在其它實現(xiàn)中,可使用另外的注釋引擎。在其它實現(xiàn)中,可省略圖2中所示的一個或多個注釋引擎。
六個代表性注釋引擎包括 ·高亮注釋引擎208對高亮型注釋進(jìn)行分類。圖3示出了一個示例性高亮注釋302。高亮注釋由具有特殊顏色和寬度的一個或多個筆畫組成。高亮以常規(guī)方式,諸如通過穿過文本行中的一個或多個字來標(biāo)記文檔元素(諸如文本)。該注釋的上下文是由通過該注釋以某種方式標(biāo)記的字來定義的。
·“泡”注釋引擎210對泡型注釋進(jìn)行分類。圖4示出了一個示例性泡注釋402。泡注釋由封入(或基本封入)一個或多個文檔元素的筆畫(或一系列接連的筆畫)組成。該注釋的上下文是由該注釋所圍繞的字來定義的。
·下劃線注釋引擎212對下劃線型注釋進(jìn)行分類。圖5示出了包括單個筆畫的第一下劃線注釋502,以及包括一系列筆畫的第二下劃線注釋504。一般而言,下劃線注釋是由在文檔行的下部繪出的一個或一系列筆畫組成的。該注釋的上下文是由該注釋上方的字來定義的。
·垂直括號注釋引擎214對垂直括號型注釋進(jìn)行分類。圖6示出了一個示例性垂直括號注釋602。一般而言,垂直括號是由垂直地指定基礎(chǔ)文檔的一部分的一行或多行組成的。垂直括號注釋的上下文是由與該注釋的垂直跨距相關(guān)聯(lián)的行定義的。
·調(diào)出注釋引擎216對調(diào)出型注釋進(jìn)行分類。圖7示出了一個示例性調(diào)出注釋702。一般而言,調(diào)出注釋將基礎(chǔ)文檔中的一個或多個元素連接到某些墨水字(或其它對象)。在圖7的情況中,例如,調(diào)出注釋702將文本元素“l(fā)ogic”連接到形成短語“ask tony”的筆畫。調(diào)出注釋可以任選地?fù)碛屑^(或圖形上指定其端點的其它特征)。調(diào)出注釋的上下文是由通過此注釋連接的文檔元素和墨水字來定義的。
·自由筆記注釋引擎218對自由筆記型注釋進(jìn)行分類。圖8示出了一個示例性自由筆記注釋802。如其名稱所表明的,此注釋包括添加到某一文檔元素附近的、與該文檔元素相關(guān)聯(lián)的筆記。例如,在圖8中,自由筆記文本“good”被放置在包括單詞“combination”的文本元素的附近。自由筆記注釋可以包括文本書寫和/或繪圖。自由筆記注釋的上下文是由最接近該注釋的一個或多個文本元素來定義的。
再一次,上述六種注釋引擎(208-218)的列表應(yīng)被解釋為示例性、非窮盡性且非限制性的。其它各節(jié)更詳細(xì)地描述了這六個注釋引擎(208-218)中的每一個的操作。一般而言,如將在以下更詳細(xì)討論的,注釋引擎模塊206的輸出定義了具有與所檢測到的不同類型的注釋相關(guān)聯(lián)的節(jié)點的分層樹。
前進(jìn)到注釋處理系統(tǒng)110中的下一較高層,注釋回流引擎220使用注釋引擎模塊206的輸出以便在文檔布局出于任何原因而改變時在基礎(chǔ)文檔中正確地顯示注釋。例如,文檔可能以任何方式被編輯以改變其布局,或者文檔可能僅僅以不同的方式來查看以改變其布局。由于布局的這些改變,由注釋標(biāo)記的內(nèi)容可改變在基礎(chǔ)文檔中的位置。注釋回流引擎220的目的是跟蹤基礎(chǔ)文檔中被注釋的內(nèi)容的位置,并調(diào)整注釋的位置以使注釋繼續(xù)被顯示在內(nèi)容附近適當(dāng)?shù)奈恢蒙?。注釋回流引?20部分地基于由注釋引擎模塊206定義的錨定信息來執(zhí)行該任務(wù)。注釋回流引擎220也基于對重新定位的注釋的類型的考慮來執(zhí)行該任務(wù)。這是因為當(dāng)文檔布局改變時,不同類型的注釋將展示出不同的行為。換言之,不同規(guī)則適用于在文檔布局改變時重新定位不同種類的注釋的方式。
最后,一個或多個基于注釋的應(yīng)用程序222可使用由注釋引擎模塊206和注釋回流引擎220產(chǎn)生的分析。這些應(yīng)用程序222可包括任何種類的最終使用應(yīng)用程序,諸如文字處理程序、電子表格程序、圖像編輯程序等等。如果文檔上下文是靜態(tài)的(且因此文檔的布局不應(yīng)改變),則這些應(yīng)用程序222可無需依賴于注釋回流引擎220。
B.2.核心解析器引擎的綜述 如上所述,核心解析器引擎202的功能是對墨水筆畫執(zhí)行初步分析。分析的結(jié)果是將由墨水筆畫形成的元素分類到不同的類別中,這些類別包括繪圖對象、段落、行、字以及筆畫。注釋引擎模塊206對由核心解析器引擎202產(chǎn)生的高層分析結(jié)果而非原始筆畫數(shù)據(jù)本身進(jìn)行操作。
圖9示出了核心解析器引擎202中的各種模塊的綜覽。圖9還示出了核心解析器引擎202中的操作流程。如此處所示的,核心解析器引擎202包括串行操作的三個模塊(902、904、906)。即,書寫解析器902首先操作。繪圖/書寫區(qū)分器904接受書寫解析器902的輸出并第二個操作。繪圖分組器906接受繪圖/書寫區(qū)分器904的輸出并第三個操作。注釋引擎模塊206接受繪圖分組器906的輸出并基于該輸出執(zhí)行注釋分類。
圖9所示的每一模塊接受解析樹形式的輸入,并生成同樣為解析樹形式的輸出。解析樹定義了描述由用戶使用筆和圖形輸入板裝置202以手繪方式輸入的信息的組成的分層數(shù)據(jù)結(jié)構(gòu)。圖9的右手側(cè)部分示出了在核心解析器引擎202執(zhí)行的分析中的不同階段處解析樹中的示例性節(jié)點。如圖所示,該解析樹隨著分析的進(jìn)行,即通過合并額外類型的節(jié)點而變得逐漸豐富。
以下將進(jìn)而描述核心解析器引擎202中的每一模塊。
以書寫解析器902開始,該模塊接受根節(jié)點和多個墨水筆畫形式的輸入。墨水筆畫定義了用戶作出的初步標(biāo)記。例如,用戶將筆施加到圖形輸入板、跟蹤任意形狀的路徑的跡線、然后將筆從圖形輸入板提起,來創(chuàng)建單個墨水筆畫。書寫解析器902將這些筆畫組合成字、行和段落(也稱為塊)的分層結(jié)構(gòu)。字是預(yù)期為一書寫字的一組筆畫。字可以或者是書寫的或者是繪圖的。行是預(yù)期為一書寫行的一組字。行可以或者是書寫的或者是繪圖的。段落是預(yù)期為一書寫段落的一組行。段落可以或者是書寫的或者是繪圖的。(在此階段,字、行和段落不必對應(yīng)于真實語義的字、行和段落。) 可使用各種分析來檢測字、行和段落的出現(xiàn),包括特征提取、動態(tài)編程、群集分組和后處理的組合。
·特征提取將其分析基于距離、幾何相異性以及線性度的特征。距離特征指的是元素之間的空間距離。該特征防止遠(yuǎn)處的筆畫組被分組在一起。相異性特征指的是元素彼此不同的程度。該特征可幫助例如降低繪圖筆畫與書寫筆畫分類在一起的概率(因為這兩種類型的筆畫都有相異特性)。線性度特征指的是字或行中的線性回歸誤差。該特征可防止兩行中的兩個字被分組在一起,因為如果兩個字被分組為一個字,則回歸誤差將加倍。在特征提取之后,使用模糊功能來組合這些特征以產(chǎn)生得分。得分表示筆畫集是正確的組的概率。
·動態(tài)編程根據(jù)時間信息來對筆畫分組。即,用戶按某一時間順序輸入筆畫,并且計算設(shè)備202可在用戶輸入筆畫時記錄該時間順序。動態(tài)編程可部分地基于所記錄的時間順序來對筆畫分組(基于用戶輸入筆畫的次序與筆畫應(yīng)如何被分組在一起有關(guān)系的假設(shè))。
·群集處理根據(jù)與諸如位置、形狀和大小等繪圖元素相關(guān)聯(lián)的空間信息來對筆畫分組。
·后處理通過解決各種例外情況,諸如用戶輸入了“晚”筆畫(這在用戶決定修改早先創(chuàng)建的書寫或繪圖元素時發(fā)生),來用作對上述分析的糾正。
書寫解析器904的輸出是具有根節(jié)點以及段落節(jié)點、行節(jié)點、字節(jié)點和筆畫節(jié)點中的一個或多個的解析樹。在分析中的這一接合點處,該解析樹并沒有區(qū)分出各種節(jié)點是對應(yīng)于書寫節(jié)點還是繪圖節(jié)點。
下一模塊,即書寫/繪圖區(qū)分器904接收書寫解析器902的輸出。書寫/繪圖區(qū)分器904對所接收的數(shù)據(jù)進(jìn)行操作以作出關(guān)于書寫解析器902所標(biāo)識的字是對應(yīng)于書寫元素還是繪圖元素的判定。區(qū)分器904基于各種特征將書寫元素與繪圖元素區(qū)分。示例性特征包括諸如曲線、密度和手寫模型特征等單個字特征;以及諸如時間和空間上下文特征等上下文特征。更具體而言,區(qū)分器904采用模糊決策體系結(jié)構(gòu),其中每一特征被映射到一模糊功能。區(qū)分器904基于這些功能的組合來提供最終的分類結(jié)果。
繪圖/書寫區(qū)分器904的輸出是具有根節(jié)點以及段落節(jié)點、行節(jié)點、字節(jié)點和筆畫節(jié)點中的一個或多個的解析樹。在分析中的這一接合點處,該解析樹現(xiàn)在區(qū)分出各節(jié)點是對應(yīng)于書寫節(jié)點還是繪圖節(jié)點。然而,繪圖元素尚未被分組到較高層對象中。
下一模塊,即書寫分組器906接收繪圖/書寫區(qū)分器904的輸出。書寫分組器906對該接收的數(shù)據(jù)進(jìn)行操作以便根據(jù)這些元素之間的空間關(guān)系將繪圖筆畫和附連的書寫筆畫分組到獨立對象中??墒褂没诰W(wǎng)格的方法來執(zhí)行該任務(wù),該方法可涉及將墨水筆畫擬合到具有適當(dāng)大小的圖像網(wǎng)格;標(biāo)記該圖像網(wǎng)格以找出連接的分量(其中每一連接的分量對應(yīng)于一繪圖對象);以及應(yīng)用試探規(guī)則以調(diào)整繪圖對象。
繪圖分組器906的輸出是具有根節(jié)點以及繪圖對象節(jié)點、段落節(jié)點、行節(jié)點、字節(jié)點和筆畫節(jié)點中的一個或多個的解析樹。圖10示出了繪圖分組器906的輸出的一個示例。繪圖分組器906的輸出也是注釋引擎模塊206的輸入。
B.3.文檔布局分析引擎的綜述 文檔布局分析引擎204分析電子基礎(chǔ)文檔的布局。圖11示出了文檔布局分析引擎204的示例性輸出。如圖所示,文檔布局分析引擎204確定電子文檔的組成,包括圖像內(nèi)容、行內(nèi)容和字內(nèi)容。文檔布局分析引擎204的輸出也是注釋引擎模塊206的輸入。
C.關(guān)于各引擎的操作的附加細(xì)節(jié) C.1.操作綜述 圖12提供了注釋引擎模塊206的操作的綜覽。即,圖12中的虛線1202上方的操作對應(yīng)于由核心解析器引擎202和文檔布局分析引擎204執(zhí)行的任務(wù),而虛線1202下方的操作對應(yīng)于由注釋引擎模塊206執(zhí)行的任務(wù)。
一開始,步驟1204需要接收一電子文檔。該文檔可包括表示被添加到基礎(chǔ)文檔的注釋的筆畫。該基礎(chǔ)文檔可包括文本、圖像或其它信息(或其某一組合)。該文檔可包括文字處理文檔、電子郵件文檔、標(biāo)記語言文檔、PDF文檔、任何種類的圖像等等。
步驟1206需要執(zhí)行分組和繪圖分離分析(使用核心解析器引擎202)。這些操作在先前各節(jié)中已描述。這些操作可包括標(biāo)識電子文檔中的段落、行、字和筆畫;將書寫字與繪圖字區(qū)分;然后將繪圖元素分組成繪圖對象。圖9表示步驟1206的輸出。
步驟1208需要執(zhí)行文檔布局分析。圖11表示步驟1208的輸出。
接下來的一系列步驟對應(yīng)于由圖2的相應(yīng)的六個注釋引擎(208-218)執(zhí)行的操作。這些引擎(208-218)是以順序方式逐個執(zhí)行的。每一引擎接收基于在初步步驟1206和1208中生成的結(jié)果的輸入。此外,一個或多個引擎可以獲益于其它引擎的分析結(jié)果。每一引擎產(chǎn)生將注釋分類到一規(guī)定類型的注釋結(jié)果。每一引擎還產(chǎn)生幫助將注釋與電子文檔中的內(nèi)容相關(guān)聯(lián)的錨定信息。
每一引擎由以下所述的各種操作特性來表征。以下小節(jié)提供了包括實現(xiàn)這些引擎的一個示例性且非限制性方式的偽代碼。
高亮引擎 以在步驟1210中執(zhí)行的高亮操作開始,高亮引擎208可依賴于以下特征來檢測高亮注釋的存在 ·該注釋具有諸如顏色和寬度等特殊墨水特性。應(yīng)用程序222可以通知高亮引擎208哪一筆畫具有高亮特性。
·該注釋被分類為繪圖筆畫。
·該注釋與電子文檔中的文本字重疊。
·該注釋具有大的寬高比。高度指的是筆畫中的點的垂直范圍。寬度指的是筆畫中的點的水平范圍。
另外,可執(zhí)行處理以改進(jìn)對高亮注釋的分析和分類。例如,高亮引擎208可執(zhí)行動態(tài)編程來確定多筆畫高亮注釋的存在。此外,可使用合并過程來吸收(例如,組合)短高亮。
用于高亮注釋的錨定信息包括與高亮注釋重疊的字。
泡引擎 在步驟1212中,泡引擎210可依賴于以下特征來檢測高亮注釋的存在 ·該注釋是由基本封閉的筆畫或一系列順序筆畫形成的。
·該注釋封入了文本字或圖像。
另外,可執(zhí)行處理以改進(jìn)對泡注釋的分析和分類。例如,泡引擎210可執(zhí)行合并過程以解決多筆畫泡。此外,泡引擎可執(zhí)行基于圖像的方法來幫助確認(rèn)泡的封入特性。
用于泡注釋的錨定信息包括位于由泡注釋所注釋的封閉區(qū)域中的字和圖像。
下劃線引擎 在步驟1214中,下劃線引擎212可依賴于以下特征來檢測下劃線注釋的存在 ·該注釋被分類為繪圖筆畫。
·該注釋形成于一個或多個書寫行的下部且與其相鄰。
·該注釋具有大的寬高比。
·該注釋與水平方向上的字重疊。
可執(zhí)行另外的處理以改進(jìn)對下劃線注釋的分析和分類。例如,下劃線引擎212可執(zhí)行動態(tài)編程來確定多筆畫下劃線注釋的存在。此外,可使用合并過程來吸收(例如,組合)短下劃線。
用于下劃線注釋的錨定信息包括與下劃線注釋重疊的字。
垂直括號引擎 在步驟1216中,下劃線引擎214可依賴于以下特征來檢測下劃線注釋的存在 ·該注釋被分類為繪圖筆畫。
·該注釋位于電子文檔的頁邊距區(qū)域中。
·該注釋具有大的寬高比。
·該注釋與垂直方向上的文本字重疊。
可執(zhí)行另外的處理和考慮事項以改進(jìn)對垂直括號注釋的分析和分類。例如,可執(zhí)行動態(tài)編程來支持多筆畫垂直括號。此外,垂直括號引擎214可在將兩個垂直括號合并為一整合括號時檢查方向有效性。例如,考慮圖14所示的示例。如圖所示,筆畫A和B可被認(rèn)為是完整的垂直括號。然而,筆畫B和C也可被認(rèn)為是面向左邊的完整的垂直括號。然而,面向左側(cè)的括號在此上下文中是沒有意義的,因為這些括號筆畫位于文檔內(nèi)容的左邊部分。垂直括號引擎216可應(yīng)用該方向相關(guān)規(guī)則來消除候選垂直括號合并。
用于垂直括號的錨定信息包括該垂直括號垂直地跨越的連續(xù)的行。垂直括號引擎216可在執(zhí)行該錨定任務(wù)時考慮該括號的方向。
調(diào)出引擎 在步驟1218中,調(diào)出引擎216可依賴于以下特征來檢測調(diào)出注釋的存在 ·調(diào)出的連接器元素被分類為繪圖元素。
·該注釋包括具有規(guī)定特性的連接器種子元素。即,連接器種子包括穿過文檔內(nèi)容的邊框的繪圖筆畫。連接器種子的一端指向文檔中的一個字或圖像,而另一端指向墨水筆畫(或多個筆畫)或書寫段落。該連接器種子是確定調(diào)出注釋的上下文的起始點。為了說明連接器種子的概念,注意圖15。在該示例中,筆畫B包括連接器種子(因為它滿足上述特性),而筆畫A和筆畫C不是連接器種子。
·連接器將文本字或圖像連接到另一墨水對象(例如,書寫段落或繪圖筆畫)。
·連接器可以包括或不包括箭頭或其它終端特征。
可執(zhí)行另外的處理和考慮事項以改進(jìn)對調(diào)出注釋的分析和分類。例如,調(diào)出引擎216可執(zhí)行處理以確定是否有被不正確地分類為下劃線的任何連接器。如果有,則調(diào)出引擎216可執(zhí)行解除分組過程以將解析樹中的下劃線節(jié)點重新定義為調(diào)出注釋節(jié)點。根據(jù)另一處理特征,調(diào)出引擎216可執(zhí)行處理以確定是否有已被不正確地分類為垂直括號的任何連接器。如果有,則調(diào)出引擎216可執(zhí)行解除分組過程以將解析樹中的垂直括號節(jié)點重新定義為調(diào)出注釋節(jié)點。最后,調(diào)出引擎216可使用一過程來處理多筆畫連接器。
用于調(diào)出引擎216的錨定信息包括由連接器連接的文本字或圖像。
自由筆記引擎 在步驟1220中,調(diào)出引擎218可依賴于以下特征來檢測自由筆記注釋的存在 ·該注釋具有在附近的上下文(文本字或圖像),其中書寫段落定義一基本單元。
·用于自由筆記引擎218的錨定信息包括其中心最靠近自由筆記的中心的文本字或圖像。
作為一個一般的節(jié)點,注釋引擎可以在各種情況下對繪圖筆畫重新分組。例如,注意圖16。如圖所示,筆畫A、筆畫B和筆畫C最初組成了一整合繪圖對象。然而,假定高亮注釋引擎208隨后將筆畫B分類為下劃線,且因此從由筆畫A、B和C形成的繪圖對象中提取該筆畫。由于現(xiàn)在在筆畫A和C之間有較大的間隙,因此這意味著筆畫A和C不再能被認(rèn)為是整合的繪圖對象。為補(bǔ)救這一情況,可執(zhí)行繪圖重新分組以將筆畫A和C重新分類為兩個單獨的繪圖對象。
圖13示出了注釋引擎模塊206的示例性解析樹輸出。如圖所示,下劃線注釋、高亮注釋、垂直括號注釋以及泡注釋各自包括標(biāo)識相應(yīng)的注釋類型的節(jié)點、表示注釋的上下文的節(jié)點、以及表示構(gòu)成該注釋的筆畫的至少一個節(jié)點。調(diào)出注釋包括連接器節(jié)點和墨水堆節(jié)點。連接器節(jié)點表示與調(diào)出注釋相關(guān)聯(lián)的連接器筆畫,而注釋墨水堆由一系列筆畫、書寫字、書寫行或書寫段落組成。自由筆記注釋包括墨水堆節(jié)點。注釋墨水堆由一系列筆畫、書寫字、書寫行或書寫段落組成。
C.2.用于引擎的示例性偽代碼 以下示例性偽代碼呈現(xiàn)了用于實現(xiàn)圖2中介紹的六個引擎(208-218)的一種非限制性技術(shù)。偽代碼中的注解以及該偽代碼本身的描述性特性解釋了該算法的操作。
高亮引擎 FOR EACH繪圖對象 //收集候選高亮筆畫 將所有繪圖筆畫放入HilightCandiStrokeArray中 FOR EACH HilightCandiStroke Array中的筆畫S IF NOT((S具有高淺度筆畫特性)并且(存在與S相交的某些字或圖像)) 則將S從HilightCandiStrokeArray中移除 END IF END FOR 按照時間對HilightCandiStrokeArray排序 N=HilightCandiStrokeArray的長度. //設(shè)D定義了一N*N矩陣.D的每一條目包含諸如得分、墨水筆畫、上下文、 墨水筆畫的邊界框、上下文的邊界框等信息 //初始化D FOR EACH D中的cell cell.score=-1.0 清除cell.ink 清除cell.context END FOR FOR(I=0;I<N;I++) cell=D[I][I] S=HilightCandiStrokeArray[I] cell.context=(這些文本字與S重疊) cell.ink=S cell.inkrect=cell.ink cell.contextrect=cell.context的邊界框 cell.score=cell.inkrect.width/(cell.inkrect.width+cell.inkrect.height) END FOR //計算得分的動態(tài)編程 FOR step=1;step<N;step++ FOR row=0;row<N-step;row++ col=row+step cell=D[row][col] //兩個單元的總得分使用以下規(guī)則來計算: //設(shè)cell1和cell2是兩個單元 設(shè)S表示總得分,且rect=cell1.inkrect+cell2.inkrect
//設(shè)(cell1,cell2)是其總得分在//(D[row+1][col], D[row][row]),(D[row][col-1],D[col][col]),//(D[row+ 1][col-1],D[row+1][col-1])中最高的對 cell.score=total score of cell1 and cell2 cell.ink=cell1.ink+cell2.inkcell.context=cell1.context+cell2.contextcell.inkrect=cell.ink的邊界框cell.contextrect=cell.context的邊界框 END FOR END FOR //合并高亮 //如果一單元滿足以下條件,則該單元被認(rèn)為是高亮注釋: //1.得分高于給定閾值//2.在水平方向上,inkrect和contextrect彼此重疊//3.上下文字屬于水平方向上的單個文本行FOR EACH D中兩者都被認(rèn)為是高亮注釋的單元對(cell1 and cell2) IF cell1.inkrect與cell2.inkrect相交 THEN 合并cell1和cell2IF 結(jié)果在高亮注釋中 THEN 將cell2合并到cell1中 Cell2.score=-1.0 END IF END IF END FOR //合并類似高亮的單元 FOR EACH D中被認(rèn)為是高亮注釋的cell FOR EACH D中的celltemp IF celltemp.score>另一給定閾值A(chǔ)ND celltemp.inkrect在 cell.inkrect附近 THEN 合并celltemp和cell. IF 結(jié)果在高亮注釋中 THEN 將celltemp合并到cell中 celltemp.score=-1.0 END IF END IF END FOR END FOR //將高亮注釋放到解析樹中 FOR EACH D中被認(rèn)為是高亮注釋的cell 將cell輸出到解析樹 END FOR END FOR 塊引擎 //收集泡的候選筆畫 //令BlobStrokeCandiArray儲存候選筆畫 FOREACH 書寫塊 IF 該書寫塊與文檔中的某些字或圖像相交THEN 將該書寫塊中的所有筆畫添加到BlobStrokeCandiArray中 END IF END FOR FOR EACH繪圖對象 IF 該繪圖對象與文檔中的某些字或圖像相交THEN 將繪圖對象中的所有繪圖筆畫添加到BlobStrokeCandiArray中 END IF END FOR 按照筆畫之間的距離將BlobStrokeCandiArray分割成幾個筆畫群集 FOR EACH筆畫群集 令StrokeArray表示該筆畫群集中的所有筆畫 按照時間對StrokeArray排序 N=筆畫群集中的筆畫數(shù) //令D定義N*N的矩陣,其每一單元儲存諸如得分、墨水、上下文等信息 //用得分和墨水筆畫填充D FOR row=0;row<N;row++ FOR col=0;col<N;col++ cell=D[row][col] cell.score=-1.0 Clear cell.ink Clear cell.context IF row>col THEN Continue END IF cell=D[row][col] cell.ink=StrokeArray[row..col] cell.score=CalculateBlobScore(cell); //CalculateBlobScore在以下部分中定義 IF cell.score>=給定閾值 THENcell.context=cell.ink的凸殼中的字和圖像 END IFEND FOR END FOR //合并泡 //如果D中的單元滿足以下條件,則該單元被認(rèn)為是泡 //1.cell.score>=給定閾值 //2.cell.context不為空 FOR EACH D中兩者都被認(rèn)為是泡的單元對(cell1和cell2)IF cell1.ink與cell2.ink共享任何筆畫 THENIF cell1.score>=cell2.score THEN cell2.score=-1.0ELSE cell1.score=-1.0END IF END IF END FOR //合并類似泡的筆畫 收集屬于BlobStrokeCandiArray但不屬于D中的任何泡的筆畫,并將其儲存在 BlobLikeStrokeCandiArray中 FOR EACH被認(rèn)為是D中的泡的cellFOR EACH BlobLikeStrokeCandiArray中的stroke M=筆畫中接近屬于cell.ink或cell.ink的凸殼的筆畫的點數(shù) SN=stroke中的點數(shù) IF M>SN*0.75THEN cell.ink+=stroke 從BlobLikeStrokeCandiArray中移除stroke END IFEND FOR END FOR //輸出泡 FOR EACH被認(rèn)為是D中的泡的cell 將cell輸出到解析樹 END FOR END FOR //CalculateBlobScore的定義 CalculateBlobScore(cell) BEGIN 設(shè)grid表示一矩陣 在grid中繪出cell.ink中的所有筆畫 在grid中繪出cell.ink的凸殼 使用grid來計算以下值 SCCR=接近凸殼的筆畫點數(shù)/凸殼中的點數(shù) SSR=接近凸殼的筆畫點數(shù)/筆畫點數(shù) ScoreXCircuit=筆畫向X軸的投影密度 ScoreYCircuit=筆畫向Y軸的投影密度 ScoreClosed=筆畫向其圓心是grid的中心的圓的投影密度 Score=SCCR+SSR IF SCCR,SSR,ScoreXCircuit,ScoreYCircuit或ScoreClosed小于給定閾值 THEN Score-=-1.0 END IF IF score<0.0 THEN Score=0.5 END IF END 下劃線引擎 FOR EACH繪圖對象 //收集下劃線的候選筆畫收集繪圖筆畫并將其儲存在UnderlineCandiArray中FOR EACH UnderlineCandiArray中的stroke rectangle=stroke的邊界框 rectangle.top-=一閾值 IFrectangle不與任何字或圖像相交THEN從UnderlineCandiArray中移除stroke END IF FOR 按照時間對UnderlineCandiArray排序 N=UnderlineCandiArray的長度 //令D為一N*N的矩陣.D的每一單元包含諸如得分、墨水筆畫、上下文、墨 水筆畫的 //邊界框、上下文的邊界框等信息 //初始化D FOR EACH D中的cell cell.score=-1.0 清除cell.ink 清除cell.context END FOR FOR(I=0;I<N;I++) cell=D[I][I] S=UnderlineCandiArray[I] cell.context=(在筆畫S上方且與其相鄰的字) cell.ink=S cell.inkrect=cell.ink的邊界框 cell.contextrect=cell.context的邊界框cell.score=cell.inkrect.width/(cell.inkrect.width+cell.inkrect.height) END FOR //計算得分的動態(tài)編程 FOR step=1;step<N;step++ FOR row=0;row<N-step;row++ col=row+step cell=D[row][col] //兩個單元的總得分使用以下規(guī)則來計算 //設(shè)cell1和cell2是兩個單元設(shè)S表示總得分,而rect=cell1.inkrect+cell2.inkrect
//設(shè)(cell1,cell2)是其總得分在(D[row+1][col], //D[row][row])、(D[row][col-1],D[col][col])、(D[row+ //1][col-1],D[row+1][col-1])中最高的對 cell.score=cell1和cell2的總得分 cell.ink=cell1.ink+cell2.ink cell.context=cell1.context+cell2.context cell.inkrect=cell.ink的邊界框 cell.contextrect=cell.context的邊界框 END FOR END FOR //合并下劃線 //如果一單元滿足以下條件,則該單元被認(rèn)為是下劃線注釋 //1.得分高于一給定閾值//2.在水平方向上,inkrect和contextrect彼此重疊//3.上下文字在水平方向上屬于單個文本FOR EACH D中兩者都被認(rèn)為是下劃線注釋的單元對(cell1和cell2) IF cell1.inkrect與cell2.inkrect相交THEN合并cell1和cell2 IF 得到下劃線注釋THEN 將cell2合并到cell1中 cell2.score=-1.0 END IF END IF END FOR //合并類似下劃線的單元 FOR EACH D中被認(rèn)為是下劃線注釋的cell FOR EACH D中的celltemp IF celltemp.score>0.0AND celltemp.inkrect在cell.inkrect附近 THEN 合并celltemp和cell IF得到下劃線注釋THEN 將celltemp合并到cell中 celltemp.score=-1.0 END IF END IF END FOR END FOR //將下劃線注釋放入解析樹中 FOR EACH D中被認(rèn)為是下劃線注釋的cell 將cell輸出到解析樹 END FOR END FOR 垂直括號引擎 FOR EACH繪圖對象 //收集VB的候選筆畫 收集繪圖筆畫并將其儲存在VBCandiArray中 FOR EACH VBCandiArray中的筆畫IF 該筆畫不位于空白區(qū)域中或者看上去像封閉筆畫或問號 THEN 將該筆畫從VBCandiArray中移除 END IF FOR按照時間對VBCandiArray排序 N=VBCandiArray的長度//令D是一N*N的矩陣。D的每一單元包含諸如得分、墨水筆畫、上下文、墨//水筆畫的邊界框、上下文的邊界框等信息//令DIR是一N*N的矩陣。DIR的單元儲存D中相應(yīng)單元的方向//在D中//初始化D和DIRFOR EACH D中的cell cell.score=-1.0 清除cell.ink 清除cell.contextEND FORFOR EACH DIR中的celldir celldir=DIR_NONEEND FOR FOR(I=0;I<N;I++) cell=D[I][I] S=VBCandiArray[I] cell.ink=S cell.inkrect=cell.ink的邊界框 cell.score=cell.inkrect.height/(cell.inkrect.width+cell.inkrect.height) DIR[I][I]=CalculateDirection(cell) //該過程在以下部分中定義 END FOR //計算D中的其它單元的得分的動態(tài)編程 FOR step=1;step<N;step++ FOR row=0;row<N-step;row++ col=row+step cell=D[row][col]//(cell1,cell2)是其總得分在(D[row+1][col],D[row][row])、//(D[row][col-1],D[col][col])、(D[row+1][col-1],D[row+//1][col-1])中最高的單元對//令S為最高得分//以下部分中有規(guī)定如何計算兩個單元的總得分的過程cell.score=Scell.ink=cell1.ink+cell2.inkcell.context=cell1.context+cell2.contextcell.inkrect=cell.ink的邊界框cell.contextrect=cell.context的邊界框//令celldir為DIR中cell的對應(yīng)單元celldir=cell1和cell2的方向 END FOR END FOR //搜索上下文 FOR EACH D中的cell IF cell.score>一給定閾值THEN celldir=DIR中相應(yīng)單元的值 IF celldir==DIR_LEFT THENcell.context=cell.inkrect左側(cè)的字或圖像 ELSE IF celldir==DIR_RIGHT THENcell.context=cell.inkrect右側(cè)的字或圖像 END IF cell.contextrect=cell.context的邊界框 END IF END FOR //合并垂直括號 //如果一單元滿足以下條件,則該單元被認(rèn)為是垂直括號注釋 //1.得分高于一給定閾值//2.在垂直方向上,inkrect和contextrect彼此重疊//3.向Y軸的投影密度大于一給定閾值FOR EACH D中兩者都被認(rèn)為是垂直括號注釋的單元對(cell1和cell2) IF cell1.ink與cell2.ink相交并共享某些筆畫THEN 合并cell1和cell2IF 得到垂直括號注釋 THEN 將cell2合并到cell1中 cell2.score=-1.0 END IF END IF END FOR //將垂直括號注釋放在解析樹中 FOR EACH D中被認(rèn)為是垂直括號注釋的cell 將cell輸出到解析樹 END FOR END FOR //計算單元的方向 CalculateDirection(cell) BEGIN dir=DR_NONE IF dir==DIR_NONE AND cell.ink位于左頁邊距中THENdir=DIR_RIGHT END IF IF dir==DI_NONE AND cell.ink位于右頁邊距中THENdir=DIR_RIGHT END IF IF dir==DIR_NONETHEN MidX=在Y方向上位于cell.ink的中間部分中的點的X坐標(biāo)的平 均值 MidTB=位于cell.ink的頂部或底部的點的X坐標(biāo)的平均值 IF MidX<MidTB THENdir=DIR_RIGHT ELSE IF MidX>MidTB THENdir=DIR_LEFT END IF END IF IF dir==DIR_NONETHEN 在cell.inkrect的左側(cè)或右側(cè)搜索字或圖像 IF 第一個字或圖像在左側(cè)找到THEN dir=DIR_LEFT ELSE IF第一個字或圖像在右側(cè)找到THEN dir=DIR_RIGHT ELSE IF達(dá)到左頁邊界THEN dir=DIR_RIGHT ELSE dir=DIR_LEFT END IF END IF Return dir END //計算兩個單元的總得分 CalculateScore(cell1,cell2) BEGIN IF cell1的方向<>cell2的方向THEN RETURN-1.0 END IF IF cell1.score<0.0 THEN RETURN cell2.score END IF IF cell2.score<0.0 THEN RETURNcell1.score END IF Score=-1.0; IF cell1.inkrect在水平方向上與cell2.inkrect相交THEN IF cell1.inkrect在垂直方向上靠近cell2.inkrect THEN 計算圖17所示的轉(zhuǎn)角theta direction=cell1和cell2的方向 ANGLE_THRESHOLD=一給定閾值 (注意示出兩個單元的墨水之間的方向差的圖17。) IF abs(theta)<ANGLE_THRESHOLD OR(direction==DIR_LEFTANDtheta<=-ANGLE_THRESHOLD)OR (direction==DIR_RIGHT AND theta>=ANGLE_THRESHOLD) THENrect=cell1.inkrect UNION cell2.inkrectscore=rect.hight/(rect.height+rect.width) END IF END IF END IF Return得分 END 調(diào)出引擎 收集書寫塊并將書寫塊放在WritingBlockArray中 FOR EACH解析樹中的繪圖對象 收集所有繪圖筆畫并將其放在NormalDrawingStrokeArray中 //收集調(diào)出種子筆畫 FOR EACH NormalDrawingStrokeArray中的stroke IF stroke足夠大THEN IF stroke的一端位于空白區(qū)域中AND stroke的另一端指向文檔中的 一個字或圖像THEN將stroke放到CalloutSeedStrokeArray中從NormalDrawingStrokeArray中移除stroke END IF END IF END FOR //收集調(diào)出箭頭候選筆畫 FOR EACH NormalDrawingStrokeArray中的stroke IF stroke足夠小THEN IF stroke筆畫個數(shù)<=2 THEN 將stroke放到CalloutArrowStrokeCandiArray中 從中NormalDrawingStrokeArray移除stroke END IF END IF END FOR //在文檔上下文和墨水上下文中搜索調(diào)出種子 FOR EACH CalloutSeedStrokeArray中的stroke H表示stroke的一端 T表示stroke的另一端 使用NormalDrawingStrokeArray和CalloutSeedStrokeArray作為搜索空間, 遞歸地從H端搜索文檔上下文并從T端搜索墨水上下文 IF 成功 THEN 將文檔上下文、墨水上下文和所搜索的路徑合成到一調(diào)出注釋中。將 該注釋節(jié)點放到CalloutArray中。 從NormalDrawingStrokeArray或CalloutSeedStrokeArray中移除路徑 中的筆畫 ELSE 使用NormalDrawingStrokeArray和CalloutSeedStrokeArray作為搜索 空間,遞歸地從H端搜索文檔上下文并從T端搜索墨水上下文 IF 成功 THEN 將文檔上下文、墨水上下文和搜索的路徑合成到一 調(diào)出注釋中,將該注釋節(jié)點放在CalloutArray中 從NormalDrawingStrokeArray或 CalloutSeedStrokeArray中移除路徑中的筆畫 END IF END IF END FOR //處理調(diào)出的箭頭 FOR EACH CalloutArray中的callout節(jié)點 收集CalloutArrowStrokeCandiArray中靠近連接器的兩個端點的筆畫 將所收集的筆畫添加到連接器中 END FOR //輸出調(diào)出節(jié)點 FOR EACH CalloutArray中的callout節(jié)點 將callout節(jié)點輸出到解析樹 END FOR END FOR //檢查下劃線注釋 FOR EACH解析樹中的下劃線注釋節(jié)點(由U表示) IF U是由一個筆畫組成AND在水平方向上不完全被其上下文覆蓋AND該筆畫 的一端位于空白區(qū)域中THEN 將該筆畫取作調(diào)出種子 IF 找到一新的調(diào)出注釋 THEN 從解析樹中移除U 將新的調(diào)出注釋輸出到解析樹 END IF END IF END FOR //檢查垂直括號注釋 FOR EACH解析樹中的垂直括號注釋節(jié)點(由V表示) IF V是僅由一個筆畫組成的 THEN 將該筆畫取作調(diào)出種子 IF 找到一新的調(diào)出注釋 THEN 從解析樹中移除V將新的調(diào)出注釋輸出到解析樹 END IF END IF END FOR 注意示出了調(diào)出搜索過程的圖18。筆畫1802是調(diào)出種子。從該種子開始,通過兩個其它筆畫,可找到文檔上下文(即,字“software”)和墨水上下文(星形筆畫)兩者。連接器的端部的兩個小筆畫作為其箭頭被添加到連接器。該系列筆畫一般定義了多筆畫調(diào)出注釋。
自由筆記引擎 FOR EACH writing block IF 在當(dāng)前頁面中存在最靠近書寫塊的中心的字或圖像 THEN 將該書寫塊作為自由筆記注釋,并將字或圖像作為錨定信息輸出到解析樹 END IF END FOR FOR EACH繪圖對象 按照空間信息群集所有繪圖墨水筆畫 FOR EACH 筆畫群集 IF 在當(dāng)前頁面中有最靠近筆畫群集的中心的字或圖像 THEN將該筆畫群集作為自由筆記注釋,并將字或圖像作為錨定信息輸出到解析樹 END IF END FOR END FOR 總而言之,盡管以對結(jié)構(gòu)特征和/或方法動作專用的語言描述了本發(fā)明,但是可以理解,所附權(quán)利要求書中所定義的本發(fā)明不一定要限于所描述的具體特征或動作。相反,這些具體特征和動作是作為實現(xiàn)所要求保護(hù)的本發(fā)明的示例性形式來公開的。
權(quán)利要求
1.一種用于處理添加到基礎(chǔ)文檔的注釋的方法,包括
接收標(biāo)識添加到所述基礎(chǔ)文檔的元素的輸入(1204);
基于所接收到的輸入自動對添加到所述基礎(chǔ)文檔的一個或多個注釋分類(1210-1220);以及
生成(1210-1220)表示所述分類的結(jié)果的輸出。
2.如權(quán)利要求1所述的方法,其特征在于,所述基礎(chǔ)文檔包括具有機(jī)器生成的內(nèi)容的文檔。
3.如權(quán)利要求2所述的方法,其特征在于,所述機(jī)器生成的內(nèi)容包括機(jī)器生成的文本。
4.如權(quán)利要求1所述的方法,其特征在于,所接收的輸入包括將添加到所述基礎(chǔ)文檔的元素組織成不同類型的節(jié)點的分層樹。
5.如權(quán)利要求4所述的方法,其特征在于,所述類型包括以下各項中的一個或多個
繪圖對象節(jié)點;
段落節(jié)點;
行節(jié)點;
字節(jié)點;或
筆畫節(jié)點。
6.如權(quán)利要求1所述的方法,其特征在于,所述分類標(biāo)識了對應(yīng)于以下各項中的一個或多個的注釋
高亮注釋;
封入型注釋;
下劃線注釋;
垂直括號注釋;
調(diào)出注釋;或
自由筆記注釋。
7.如權(quán)利要求1所述的方法,其特征在于,所述分類采用了以下各項中的一個或多個
高亮注釋引擎;
封入型注釋引擎;
下劃線注釋引擎;
垂直括號注釋引擎;
調(diào)出注釋引擎;或
自由筆記注釋引擎。
8.如權(quán)利要求1所述的方法,其特征在于,所述分類采用了以下各項中的每一個
高亮注釋引擎;
封入型注釋引擎;
下劃線注釋引擎;
垂直括號注釋引擎;
調(diào)出注釋引擎;或
自由筆記注釋引擎。
9.如權(quán)利要求1所述的方法,其特征在于,所述分類的輸出包括使用相應(yīng)的不同類型的節(jié)點來標(biāo)識不同類型的注釋的分層樹。
10.如權(quán)利要求1所述的方法,其特征在于,還包括使用所述分類的輸出以便在改變所述基礎(chǔ)文檔的布局時修改至少一個注釋的位置。
11.一種或多種包含用于實現(xiàn)如權(quán)利要求1所述的方法的機(jī)器可讀指令的機(jī)器可讀介質(zhì)。
12.一種用于處理添加到基礎(chǔ)文檔的注釋的注釋處理系統(tǒng)(110),包括
被配置成對添加到所述基礎(chǔ)文檔的元素進(jìn)行分類以提供經(jīng)解析的輸出結(jié)果的一個或多個基礎(chǔ)引擎(202、204);以及
包括一個或多個注釋引擎(208-218)的注釋引擎模塊(206),所述注釋引擎被配置成
接收所述經(jīng)解析的輸出結(jié)果作為輸入;
基于所述經(jīng)解析的輸出結(jié)果自動對添加到所述基礎(chǔ)文檔的一個或多個注釋進(jìn)行分類;以及
生成表示所述對注釋的自動分類的結(jié)果的輸出。
13.如權(quán)利要求12所述的注釋處理系統(tǒng),其特征在于,所述經(jīng)解析的輸出結(jié)果包括將添加到所述基礎(chǔ)文檔的元素組織成不同類型的節(jié)點的分層樹。
14.如權(quán)利要求13所述的注釋處理引擎,其特征在于,所述不同類型包括以下各項的一個或多個
繪圖對象節(jié)點;
段落節(jié)點;
行節(jié)點;
字節(jié)點;或
筆畫節(jié)點。
15.如權(quán)利要求12所述的注釋處理系統(tǒng),其特征在于,所述一個或多個注釋引擎包括以下各項中的一個或多個
高亮注釋引擎;
封入型注釋引擎;
下劃線注釋引擎;
垂直括號注釋引擎;
調(diào)出注釋引擎;或
自由筆記注釋引擎。
16.如權(quán)利要求12所述的注釋處理系統(tǒng),其特征在于,所生成的輸出包括使用相應(yīng)的不同類型的節(jié)點來標(biāo)識不同類型的注釋的分層樹。
17.如權(quán)利要求12所述的注釋處理系統(tǒng),其特征在于,還包括被配置成使用所生成的輸出以便在改變所述基礎(chǔ)文檔的布局時修改至少一個注釋的位置的回流引擎。
18.一種用于處理被添加到基礎(chǔ)文檔的注釋的注釋引擎模塊(206),包括
被配置成執(zhí)行以下動作的一個或多個注釋引擎(208-218)
接收標(biāo)識添加到所述基礎(chǔ)文檔的元素的輸入;
基于所接收的輸入自動對添加到所述基礎(chǔ)文檔的一個或多個注釋進(jìn)行分類;以及
生成表示所述對注釋的自動分類的結(jié)果的輸出。
19.如權(quán)利要求18所述的注釋引擎模塊,其特征在于
所接收的輸入包括將添加到所述基礎(chǔ)文檔的元素組織成不同類型的節(jié)點的分層樹;以及
所生成的輸出包括使用相應(yīng)的不同類型的節(jié)點來標(biāo)識不同類型的注釋的分層樹。
20.如權(quán)利要求18所述的注釋引擎模塊,其特征在于,所述一個或多個注釋引擎包括以下各項的一個或多個
高亮注釋引擎;
封入型注釋引擎;
下劃線注釋引擎;
垂直括號注釋引擎;
調(diào)出注釋引擎;或
自由筆記注釋引擎。
全文摘要
描述了用于處理添加到基礎(chǔ)文檔的注釋的注釋引擎(208-218)。注釋引擎(208-218)自動對注釋的類型進(jìn)行分類,這些類型包括但不限于高亮注釋;泡注釋(包括封入型注釋);下劃線注釋;垂直括號注釋;調(diào)出注釋;以及自由筆記注釋。該注釋引擎接受文檔元素的分層樹形式的輸入,并生成注釋元素的分層樹形式的輸出。回流引擎(220)可使用注釋引擎(208-218)的輸出來正確地在布局被修改的基礎(chǔ)文檔中重新定位注釋以及其它用途。
文檔編號G06F17/27GK101375278SQ200780003737
公開日2009年2月25日 申請日期2007年1月25日 優(yōu)先權(quán)日2006年1月26日
發(fā)明者Z·林, M·徐, J·王 申請人:微軟公司