CN102317933B - 用于文档重构的方法和系统 - Google Patents

用于文档重构的方法和系统 Download PDF

Info

Publication number
CN102317933B
CN102317933B CN200980156784.4A CN200980156784A CN102317933B CN 102317933 B CN102317933 B CN 102317933B CN 200980156784 A CN200980156784 A CN 200980156784A CN 102317933 B CN102317933 B CN 102317933B
Authority
CN
China
Prior art keywords
paragraph
word
document
row
district
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN200980156784.4A
Other languages
English (en)
Other versions
CN102317933A (zh
Inventor
P·A·曼斯菲尔德
M·R·勒维
D·B·科勒格
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Apple Inc
Original Assignee
Apple Computer Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US12/479,849 external-priority patent/US9460063B2/en
Application filed by Apple Computer Inc filed Critical Apple Computer Inc
Publication of CN102317933A publication Critical patent/CN102317933A/zh
Application granted granted Critical
Publication of CN102317933B publication Critical patent/CN102317933B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明不同的实施例采用不同的分析未结构化文档以定义结构化文档的技术。所述未结构化文档包括众多本原元素,但是不包括结构性元素,该结构性元素规定本原元素之间的结构性关系和/或基于这些本原元素的文档的结构性属性。为了定义结构化文档,采用未结构化文档的本原元素来识别未结构化文档的各种几何属性。采用识别出的几何属性和本原元素的其他属性来定义结构性元素,例如相关联的本原元素(例如,字、段落、连结图,等等)、表格、导引、装订线等,以及定义通过本原元素和结构性元素的阅读流。提供了各种提高几何分析和文档重构处理的效率的方法(例如,分级简档化、高效集群分析技术、高效数据结构)。

Description

用于文档重构的方法和系统
技术领域
本发明涉及文档重构。特别地,本发明涉及用于从未结构化文档定义结构化文档的方法、用于提高这种处理的效率的方法以及用于改善对结构化文档的显示和与结构化文档的交互的方法。
背景技术
文档通常被定义为仅仅是在页面上的规定位置处绘出的本原元素(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至24例示了对页面上的左对准导引的识别。
图25概念性地例示了一些实施例的用于确定右对准导引的处理。
图26概念性地例示了一些实施例的用于确定文档的区域的装订线的处理。
图27至29例示了对页面上的装订线的识别。
图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概念性地例示了一些实施例的用于识别具有完整边界集合的表格并定义所识别出的表格中的单元、行和列的处理。
图54例示了包括具有完整边界的表格的页面。
图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)的单个图示符表示,该图示符是按照与字符单独地出现的方式略微不同的方式绘制的。作为第三个示例,诸如“ê”的重读字符有时由多于一个的图示符表示(例如,一个用于字符,一个用于重读)并且有时由单个图示符表示(将重读与字符相结合)。
一些实施例的未结构化文档没有规定本原元素之间的任何关系或关联,而在其他实施例中,它规定最小量的这种关系和关联。在一些实施例中,未结构化文档可以具有一定量的结构,但是该结构是不可识别的或者不可依赖的。在一些实施例中,未结构化文档具有未知的结构或者被假定为未结构化的。
一些实施例从未结构化文档生成结构化文档,该结构化文档包括本原元素之间的关联和关系、本原元素的分组和排序以及本原元素的分组的性质。例如,一些实施例采用未结构化文档的本原元素,来识别未结构化文档的各种几何属性,并采用这些识别出的几何属性(以及本原元素的其他属性)来定义结构性元素。一些实施例的结构性元素包括相关联的本原元素(例如,字、段落、连结图,等等)、导引、装订线、文本流、表格,等等。在一些实施例中,这些结构性元素按照分级的方式相关(例如,段落包括文本行、文本行包括字,而字包括本原图示符)。在一些实施例中,结构化文档有两个用途——它识别相关联的元素(例如,构成表格的元素),并且它识别本原元素的流顺序(即,预计人将阅读文档中的本原元素的顺序)。
在接收到未结构化文档时,一些实施例首先将文档解析为其构成元素(例如,本原元素及其相关联的信息,例如坐标定位、绘制顺序,等等)。例如,在未结构化文档中大块文本可以被定义为多个字符图示符,其中每一个具有其锚点将放置在特定页面上的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包括五个区,即,区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 524和区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中的图像是不规则构形的,其将不会被给定非零旋转角度。水平对准的文本也具有零度的旋转角度,而偏离x轴对准的文本被给定以一旋转角度。例如,页面500的区域F 530中的文本将具有大约-45度的旋转角度。类似地,页面600中的文本610(“Organic”和“Pure”)将具有其自己的旋转角度。在也将图像对象放置到旋转分组中的实施例中,文本610上面的矩形图像615将与文本610具有相同的旋转角度。
接下来,处理800按照旋转角度来排序(在815处)对象。然后处理将对象分组(在820处)成具有低于特定阈值的旋转角度的展度的集群。在一些实施例中,与特定阈值相比的展度是从分组的最大旋转角度中减去该分组中的最小旋转角度。采用非零阈值允许分组考虑初始接收到的文档中的内容定义中的小误差(例如,非常略微地偏离水平的文本行)。
然后处理800单独地分析(在825处)每个旋转分组。然后该处理结束。对于大多数页面,大多数分析将涉及竖直(零度)分组。一些实施例针对除竖直分组之外的分组不执行区分析,相反只简单地将旋转分组的内容作为一个整体分类为页面的子辈。在一些实施例中,每个旋转分组具有其中内容呈现为竖直的坐标系统。在这种实施例中,每个旋转分组具有其自己的区树,其内容适合文档的DOM。一些实施例针对页面上内容旋转的每个区别角度定义一个旋转分组。下面将详细地描述对每个分组的分析。
C.识别区边界和相交部
图9概念性地例示了一些实施例的用于识别区边界和相交部的处理900。将结合图10来描述处理900。图10例示了包括各种图形和文本的页面1000。
如图9所示,该处理接收(在900处)旋转分组,并将该分组标准化到竖直坐标系统。在一些实施例中,将分组标准化到竖直坐标系统包括,定义分组的坐标系统,使得分组中的所有对象是垂直的或水平的(例如,在坐标系统中,文本行是水平的)。下面的讨论假设旋转分组是竖直(零度)分组。本领域普通技术人员将能够把相同的技术应用到在其内容呈现为竖直的坐标系统中具有非零角度的旋转分组。一些实施例在针对特定旋转分组执行区识别之前从其他旋转分组中移除内容。例如,一些实施例在竖直直线坐标系统中执行区识别和分析之前将从图6的页面600中移除文本610和图像615。
然后该处理识别(在910处)潜在区边界。在一些实施例中,潜在区边界包括足够窄的任何水平或垂直图形对象。在一些实施例中,对特定图形对象是否足够窄的确定采用绝对量度(例如,当图形对象的竖直界定矩形的较小尺寸小于1/24英寸时)。在其他实施例中,该确定采用相对量度(例如,竖直界定矩形的较大尺寸是较小尺寸大小的八倍),或者绝对量度和相对量度的组合(例如,可以允许窄尺寸达到1/12英寸,但是应用8∶1的相对量度)。一些实施例与页面的尺寸相关地调整阈值。例如,以上示例可以应用于标准的8.5×11英寸页面,而大得多的页面可以具有更大的潜在区边界。
参照图10,页面1000包括将被分类为潜在区边界的若干线条:水平边界1005至1010和垂直边界(1011至1016)。然而,图形对象1020通常将不会被考虑为水平区边界,因为它在x方向上太厚。
一些实施例还识别至少具有阈值尺寸的所有竖直直线形状,并采用这些形状的侧边作为潜在区边界。在一些实施例中,阈值尺寸是特定面积,而在其他实施例中,必须超过阈值宽度和阈值高度。例如,对象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处)最小的区作为z。然后该处理确定(在1520处)区z在页面的区图中是否还有节点。当z具有节点时,该处理前进到下面描述的1530。否则,当z不具有节点时,该处理1500确定(在1525处)区z的节点。
接下来,处理选择(在1530处)下一个最小的区作为区p。然后处理确定(在1535处)区p是否包含区z(即,区z的外界线是否完全在区p的外界线内)。当区p包含区z时,该处理确定(在1540处)区z是区p的子辈。基于此,该处理定义(在1545处)节点图中针对区p的一个节点。然后该处理定义(在1550处)从区p到区z的边缘。然后该处理前进到下面描述的1565。
在1535处,当处理确定区p不包含区z时,该处理确定(在1555处)是否有任何大于当前区p的区。当还有更大的区时,处理前进到1530,并选择下一个最小的区作为区p,以测试新的区p是否是区z的父辈。否则,当没有大于区p的区时,处理确定(在1560处)区z不具有父区。
接下来,处理确定(在1565处)是否有任何大于区z的区。当有更大的区时,该处理从要从其选择的区集合中移除(在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的最小区x。一旦确定了包含内容对象c的区x,该处理定义(在1590处)在区图中从区x到内容对象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处)集群分析来确定接收到的文档部分的导引。集群分析使得该处理能够确定字的结尾或开始被分组到一起的x坐标,使得这些x坐标可能是对准导引。如所提及的,图19例示了具有两列文本的页面1900。页面1900包括多个导引集1905。一些实施例将列的底部行和顶部行确定为导引,而其他实施例仅确定左对准导引和右对准导引。一些实施例还识别其他对准的导引,例如中央对准或者编号列表中十进制点的对准。下面将进一步详细地描述集群分析和导引确定处理。
接下来,处理确定(在1815处)文档部分的装订线。一些实施例采用来自操作1810的信息来确定装订线。图19例示了针对页面1900确定的在第一列的右对准导引与第二列的左对准导引之间的装订线1910。一些实施例将页边距处理为装订线,而其他实施例不这样处理。一旦确定了导引和装订线,处理1800就采用(在1820处)导引和装订线用于对文档的进一步重构。然后处理结束。
A.密度集群
一些实施例通过如下操作来确定右对准导引和左对准导引:在页面上搜索在相同或近似相同的x坐标处开始或结尾的文本行,以及确定是否存在足够的证据使得x坐标实际上是对准点。一些实施例采用称为密度集群的集群分析的形式来确定对准导引。一些实施例的密度集群利用在下面第X章中描述的存储器和处理效率,使得它可以在资源受限的设备(例如,iPhone )上执行。
密度集群通常可应用到其中有相当量的“噪音”或随机数据混在否则清晰可见的集群中的问题。当数据是实数集时,集群被识别为最佳地满足给定密度约束的子集。约束通常被设计为挑选比其他子集相对更密集的子集。例如,一些实施例采用集群的最小尺寸和集群的最大展度作为约束。
图20概念性地例示了一些实施例的用于执行密度集群的处理2000。如图所示,该处理接收(在2005处)输入数据集。在一些实施例中,输入数据是页面上的字符图示符的坐标数据。例如,在采用密度集群来寻找左对准导引时,输入数据是页面上每个字的第一个字母的锚点的x坐标。
然后该处理对输入数据集进行排序(在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至24来描述处理2100的一部分。图22至24例示了识别页面2200上的左对准导引的处理。如图21所示,处理2100将用于密度集群的输入数据设置(在2105处)为文档的区域中的字的左边缘的x坐标。在一些实施例中,区域是页面或者页面的区。在一些实施例中,特定字的左边缘是该特定字的第一图示符的锚点的x坐标,其针对该图示符期望的左对准位置进行了调整。
然后处理确定(在2110处)希望的集群性质。在一些实施例中,集群性质是用于以上描述的密度集群的约束。一些实施例采用两个密度约束:最小集群尺寸(即,子集中的值的最小个数)和最大集群展度(即,子集的最大值与最小值之间的最大允许差值)。在采用密度集群用于确定对准导引的情况下,一些实施例采用作为被评估的页面或区中的总行数的分数的最小集群尺寸,而其他实施例采用常数。一些实施例采用作为字的第一个字符(用于左对准)或者最后字符(用于右对准)的中位字体大小的分数的最大展度。约束的一个示例是最小集群尺寸是区域中的文本行总数的5%,而最大展度是中位字体大小的10%。
接下来,该处理利用确定的集群性质对输入数据应用(在2115处)密度集群,以确定可以是对准导引的x坐标值的集群。一些实施例采用如上所述的处理2000。
然后处理2100确定(在2117处)是否有任何未评估的集群。当没有集群或者已经评估了所有的集群时,处理结束。否则,该处理选择(在2120处)一个集群(即,从集群分析输出的多个集群之一)。然后处理将左对准导引设置(在2125处)为矩形,该矩形的最小和最大x坐标为集群中的最小和最大值,并且其最小和最大y坐标为页面的顶部和底部。在一些情况下,最小和最大x坐标将是相同的,因为集群中的所有x坐标将具有相同的值。在其他情况下,意外进入集群中的小的偏差或字将给予矩形非零宽度。
图22例示了一些实施例的具有潜在左对准导引2205的页面2200。矩形2205的最小x坐标由右列2215的左边缘设置,而最大x坐标由页面的中间的字“tate”2210设置,这是因为字2210的开头足够靠近形成右列的左边缘的字的开头,使得它被密度集群处理成与这些字分组在一起。
然后处理2100基于对在矩形中开始的字和穿过该矩形的字的分析移除(在2130处)不满足约束的y坐标处的矩形。然后该处理前进到以上描述的2117。一些实施例移除字开始矩形的左侧并穿过到矩形中的任何地方的矩形部分。还移除在其间不具有足够数量的边界字的两个交叉字(crossing word)之间的任意y坐标处的矩形。边界字是在矩形的边缘中开始或在矩形的一个边缘处开始的字。一些实施例采用如下要求,即在交叉字之间有至少五个边界字,并且这些五个边界字中的至少一个必须是在其文本行中的最左侧,或者与其文本行中的前一个字隔开至少一个正常字间隔。一些实施例采用在Mansfield等人的题为“Semantic Reconstruction”的美国专利公开No.2007/0250497中描述的处理来确定字间隔和更大的间隔,该专利申请通过引用并入于此。一些实施例采用不同的要求(例如,在交叉字之间有小于或大于五个边界字)来执行操作2130。
图23例示了页面2200和矩形2205,其中矩形2205的交叉字被圈起。交叉字包括字2340(“reprehenderit”)和2315(“dolore”)以及其他。在交叉字2340与2315之间有两个边界字2210(“tate”)和2325(“esse”);然而,当对交叉字之间的边界字的要求是三个或更大时,还将移除这部分的矩形。一些实施例仅仅移除从交叉字的最大冒进(ascent)到最大缩进(descent)以及交叉字之间的不合格区域。其他实施例还移除可能超出对准导引的区域,例如从交叉字2330(“auteir”)到在它之上的边界字2335(“reprehenderit”)的区域。
图24例示了用于页面2200的左对准导引2405和2410。由于页面中央的调出部(call-out)区域,特定x坐标处的左对准导引没有贯穿整个页面2200的长度。
如上所述,一些实施例采用类似于处理2100的处理来确定右对准导引。图25概念性地例示了一些实施例的用于确定右对准导引的处理2500。如图所示,该处理将用于密度集群的输入数据设置(在2505处)为文档的区域中的字的右边缘的x坐标。在一些实施例中,该区域是页面或页面中的区。在一些实施例中,特定字的右边缘是特定字的最后图示符的锚点的x坐标加上该字的最后图示符的前进矢量的x坐标,其针对该图示符期望的右对准位置进行了调整。
然后该处理确定(在2510处)希望的集群性质。在一些实施例中,集群性质是用于以上描述的密度集群的约束。一些实施例采用两个密度约束:最小集群尺寸(即,子集中的值的最小个数)和最大集群展度(即,子集的最大值与最小值之间的最大允许差值)。在采用密度集群用于确定对准导引的情况下,一些实施例采用作为被评估的页面或区中的总行数的分数的最小集群尺寸,而其他实施例采用常数。一些实施例采用作为字的第一个字符(用于左对准)或者最后字符(用于右对准)的中位字体大小的分数的最大展度。约束的一个示例是最小集群尺寸是区域中的文本行总数的5%,而最大展度是中位字体大小的10%。
接下来,该处理利用确定的集群性质对输入数据应用(在2515处)密度集群,以确定可以是对准导引的x坐标值的集群。一些实施例采用如上所述的处理2000。
然后该处理确定(在2517处)是否有任何未评估的集群。当没有集群或者已经评估了所有的集群时,处理结束。否则,该处理选择(在2520处)一个集群(即,从集群分析输出的多个集群之一)。然后处理将右对准导引设置(在2525处)为矩形,该矩形的最小和最大x坐标为集群中的最小和最大值,并且其最小和最大y坐标为页面的顶部和底部。在一些情况下,最小和最大x坐标将是相同的,因为集群中的所有x坐标将具有相同的值。在其他情况下,意外进入集群中的小的偏差或字将给予该矩形非零宽度。
然后该处理基于对在矩形中结尾的字和穿过该矩形的字的分析移除(在2530处)不满足约束的y坐标处的矩形。然后该处理前进到以上描述的2517。一些实施例移除字穿过矩形或者在矩形中开始并在矩形的右侧结尾的任何地方的矩形部分。还移除在其间不具有足够数量的边界字的两个交叉字之间的任意y坐标处的矩形。边界字是在矩形的边缘中结尾或在矩形的一个边缘处结尾的字。一些实施例采用如下要求,即在交叉字之间有至少五个边界字,并且这些五个边界字中的至少一个必须是在其文本行中的最右侧,或者与其文本行中的下一个字隔开超过一个正常字间隔。一些实施例采用在以上提及的美国专利公开No.2007/0250497中描述的处理来确定字间隔和更大的间隔。一些实施例采用不同的要求(例如,在交叉字之间有小于或大于五个边界字)来执行操作2530。
C.确定装订线
在确定了导引之后,一些实施例接着确定区域(例如,区、页面,等等)的装订线。一些实施例采用来自导引确定处理(例如,处理2100和2500)的信息来确定区域的相关联图示符(例如,装订线)之间的未填充空白空间的分组。除了导引之外,一些实施例还采用其他对准点来确定区域中的装订线。
图26概念性地例示了一些实施例的用于确定区域中的装订线的处理2600。将结合图27至29来描述处理2600的部分。图27至29例示了识别页面2700上的装订线的处理。
如图26所示,该处理接收(在2605处)对准信息。在一些实施例中,该信息是由处理2100和2500确定的导引。一些实施例包括其他对准点以及导引。例如,在一些实施例中,左对准(非两端对齐)文本中的文本行的末端被处理为右对准点。这使得即使在第一列的右边缘处没有发现导引,也能够识别列间隔中的装订线。类似地,在一些实施例中将右对准文本的左边缘或者居中文本的两侧边缘看作对准点。
然后处理2600确定(在2607处)是否有任何未处理的右对准点。当没有右对准点或者已经处理了所有的右对准点时,该处理结束。否则,该处理选择(在2610处)一个右对准点。在一些实施例中,该处理首先识别最左的右对准点,而在其他实施例中,该处理选取随机的右对准点。
然后该处理确定(在2615处)是否在选定的右对准点与区域的右边缘之间存在左对准点。当没有左对准点时,该处理前进到以上描述的2607。否则,当在右对准点与区域边缘之间存在至少一个左对准点时,该处理识别(在2620处)从所选的右对准点起跨区域向右移动的下一个左对准点。这是两个点之间的处理进行测试以确定是否有装订线的区域。
一旦识别出右对准点和左对准点,该处理将装订线设置(在2625处)为如下矩形,即该矩形以右对准点作为最小x坐标且以左对准点作为最大x坐标。矩形的最小和最大y坐标是页面的顶部和底部。图27例示了页面2700和将被测试为可能的装订线的矩形2705。最小x坐标是第一列的右边缘处的右对准点,而最大x坐标是第二列的左边缘处的左对准点。
接下来,该处理基于对穿过到矩形中以及与矩形交界的字的分析移除(在2630处)不满足约束的y坐标处的装订线。一些实施例移除字穿过到矩形中或者在矩形中开始的任意地方处的矩形部分。还移除在其间不具有足够数量的边界字的两个交叉字之间的任何y坐标处的矩形。装订线的边界字是在矩形的左边缘处结尾或者在矩形的右边缘处开始的字。一些实施例采用如下要求,即在交叉字之间有至少五个边界字,并且这些五个边界字中的至少一个必须是在其文本行中的最左侧或与其文本行中的前一个字隔开多于一个正常字间距,或者是在其文本行中的最右侧或与其文本行中的下一个字隔开多于一个正常字间隔。一些实施例采用在以上提及的美国专利公开No.2007/0250497中描述的处理来确定字间隔和更大的间隔。一些实施例采用不同的要求(例如,在交叉字之间有小于或大于五个边界字)来执行操作2630。然后该处理前进到以上描述的2607。
图28例示了页面2700和矩形2705,其中圈出了矩形2705的交叉字。交叉字包括字2810(“cillum”)和2815(“nulla”)以及其他。在交叉字2810与2815之间有一个边界字2820(“eu”);然而,如果对于交叉字之间的边界字的要求为两个或更大,则还将移除这部分的矩形。一些实施例仅仅移除从交叉字的最大冒进到最大缩进以及交叉字之间的不合格区域。其他实施例还移除可能超出装订线的区域。
图29例示了页面2700的装订线2905和2910。由于页面中央的调出部区域,所以两个主要列之间的装订线没有贯穿页面的整个长度。
一些实施例在整个语义重构处理中采用导引和装订线。例如,采用装订线来拆分文本行并识别列。处理在下面的第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执行处理2600的一些或全部。
在一些实施例中,由以上描述的模块或其他模块执行的处理的结果被存储在电子存储设备中(例如,作为文档对象模型的一部分)。文档对象模型然后可以用于在电子显示设备(例如,手持式设备、计算机屏幕,等等)上显示文档,使得用户能够浏览文档和/或与该文档交互(例如,通过触摸屏、游标控制设备,等等)。
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”与“n”之间。最后,行3530和3531没有被合并,这是因为这两行之间没有水平交叠,由此它们在操作3325处被分隔开。
在识别和合并了行之后,在一些实施例中识别字。一些实施例采用如在美国专利公开No.2007/0250497中描述的差值集群,来基于字内的字母之间以及字之间的间距来识别字。在一些实施例中,差值集群还提供关于段间隔、列间隔等的信息。一些实施例采用在下面第X章中描述的存储器和处理效率技术来执行差值集群。
B.利用差值集群来识别字和间隔
图36概念性地例示了一些实施例的用于执行差值集群分析的处理3600。很多形式的集群分析要求了解分组/集群的个数,因为可能存在多个级别/分级的集群。例如,当采用集群分析来分组天体时,对集群个数的规定确定集群分析是否将在恒星、太阳系、星系或者超星系团的级别上来分组天体。然而当采用集群分析来寻找内容元素之间的结构性关系时,例如在很多情况下不了解分组个数。例如,在文本的页面的情况下,不能假设图示符构成字、字组合形成行以及多组行形成段落,这是因为文档可能具有两个或更多列文本,使得文本的给定初始行可能包括两个或更多个段落的部分。
在一些实施例中,集群分析是一组技术,它们可以被应用到数据点集合以将点分组成集群,集群中的点相比于其他集群中的点彼此更靠近。在一些实施例中,集群分析应用到表示诸如图示符、字和文本行的对象之间的水平和垂直间距的数据点。例如,一些实施例采用下面将描述的k均值(k-means)集群分析。以表示空间间距的个数集(p1、…、pN)以及k(集群个数)的已知值开始,采用该技术来将个数分隔成k个集群C1…Ck,其由形式为Cj={pi|aj≤pi<aj+1}的不等式来限定,其中a1、…、ak+1是增大的序列。在应用k均值技术之前,按照大小来排序差值pi+1-pi,并且取k-1个最大差值作为分隔点。例如,如果pi+1-pi是k-1个最大差值之一,则pi+1处于与pi不同的集群中,并且pi+1是连续值aj之一。然后应用k均值集群分析来重复精化(refine)集群。k均值技术包括取每个集群中的个数的平均值,然后通过将pi与最紧密的计算平均值相关联来将它重新分布到集群中。重复执行该技术直到不会给集群或其平均值带来变化为止。
在一些实施例中,本文公开并称为“差值集群”的技术用来确定包括给定源内容的内容元素之间存在的结构性关系的级别个数,以及/或者这种级别之间的一个或多个分级关系,还有可以用于确定内容元素是否与每个所确定的级别中的另一内容相关的一个或多个特性。在一些实施例中,差值集群与其他技术一起采用k均值技术。在图36所示的示例中,采用差值集群分析来分析内容元素位置之间的差值(间距)。在一些实施例中,通过分析内容元素之间的间距,可以至少部分地利用间距的分组数据来分组内容元素。在一些实施例中,单独地分析间距的每个方向分量。例如,采用对水平分量的差值集群分析来在字符间距、字间距和列间距之间进行区分。在一些实施例中,可以采用对垂直分量的差值集群分析来区分行间距、段落间距和文本框间距。处理3600概念性地例示了针对单个方向分量的差值集群分析。该处理可以再次用于分析一个或多个附加方向分量。在一些实施例中,沿着一个或多个维度执行差值集群分析的结果被组合到一起,以确定一个或多个级别处的内容元素之间的结构性关系。
如图36所示,处理3600接收(在3605处)文档的一部分。然后该处理识别(在3610处)文档中的元素的定位。在一些实施例中,元素包括字符、图示符、图像、行、图画、框、单元、页边以及/或者各种其他内容元素。在一些实施例中,元素的定位包括确定一个或多个定位坐标分量和/或将其分配到元素。在一些实施例中,按顺序组织元素的定位。例如,当分析字符的水平间距时,针对每行字符按照水平坐标增大的顺序组织字符。在一些实施例中,希望元素的定位坐标值与元素之间的间距相关联,并且针对元素的宽度/长度来补偿定位值。例如,当针对元素的组织顺序中的第n个位置处的元素确定补偿水平坐标(x坐标)值时,采用以下公式:
X n ′ = X n - Σ i = 1 n - 1 W i
其中,X′n是补偿定位坐标值,Xn是原始定位坐标值,而Wi是第i个位置的元素的宽度。在一些实施例中,元素的宽度是基于它所表示的字符、字体大小以及字符的样式,等等。一些实施例通过采用已知的针对每个字符的锚点坐标并以每个特定字符的宽度来调整该特定字符的这些坐标,来确定补偿定位坐标值。
接下来,该处理确定(在3615处)相邻元素的定位之间的一阶差值。在一些实施例中,当具有至少一个相同定位坐标分量值的两个元素在至少一个其他定位坐标分量值中彼此顺序紧邻时,一个元素与另一个元素相邻。例如,如果两个图示符属于同一文本行并且两者之间没有其他图示符,则这两个图示符彼此相邻。在一些实施例中,当两个元素的对应定位坐标分量值之间的差值低于一限值或者在一个范围值内时,这两个元素具有至少一个相同的定位坐标分量。在各种实施例中,当两个元素按照与所识别出的元素定位相关联的顺序和/或组织而彼此紧邻时,一个元素与另一个元素相邻。在一些实施例中,定位之间的一阶差值是经宽度/长度补偿的定位坐标值之间的差值。例如,在一些实施例中,当确定补偿水平坐标的组织顺序中第n个和第n+1个位置中的相邻元素的补偿水平坐标(x坐标)之间的差值时,采用以下公式:
ΔX n = X n + 1 ′ - X n ′
在一些实施例中,一阶差值与内容中的图示符之间的间隔间距相关联。
接下来,该处理3600对一阶差值进行排序(在3620处)。在一些实施例中,组织一阶差值包括按照升序对一阶差值进行排序。在一些实施例中,组织一阶差值包括将权重值分配给一阶差值中的一个或多个,以及至少部分地通过采用权重值来组织一阶差值。例如,在一些实施例中,给定所用的字体及其字体度量(包括大小、缺省字母间距和与字体文本一起存储的字距调整(kerning)值表),针对每个特定图示符对以期望的图示符间距来分割实际的图示符间距。实际间距与期望间距之比按照增大的值来排序,并且在差值集群方法的其余部分采用该比值来替代一阶差值。
然后该处理确定(在3625处)排序的一阶差值之间的二阶差值。例如,当确定一阶差值的组织顺序中第i个位置和第i+1个位置中的一阶差值之间的二阶差值时,采用以下公式:
Δ2Xi=ΔX(i+1)-ΔX(i)
其中,Δ2Xi是第i个二阶差值,ΔX(i)是排序的一阶差值的第i个位置中的一阶差值,而ΔX(i+1)是同一排序的一阶差值的i+1位置中的一阶差值。在一些实施例中,二阶差值与图示符的间距之间的差值相关联。
接下来,处理3600通过分析二阶差值来确定(在3630处)集群级别的个数。在一些实施例中,分析二阶差值包括组织所确定的二阶差值。在一些实施例中,组织二阶差值包括按照升序排序二阶差值和/或按照增大的二阶差值的顺序绘制二阶差值。在一些实施例中,组织二阶差值包括将权重值分配给一个或多个二阶差值。在一些实施例中,组织二阶差值包括将二阶差值分成一个或多个分组。在一些实施例中,二阶差值各自被分类为分组间差值或分组内差值。
分组内差值与相对较小的二阶差值相关联,并且可以表示同一集群分组内的一阶差值的二阶差值。分组内差值的一个示例是将期望在同一字中的字母之间的字符宽度补偿间距中发现的相对小变化。分组间差值与相对较大的差值相关联,并且可以表示不同集群分组之间的一阶差值的二阶差值。分组间差值的一个示例是一方面两个字之间的间距与另一方面同一个字中的两个字母之间的间距之间的相对大的差值。
在一些实施例中,通过对有序二阶差值应用2均值集群分析来实现将二阶差值分类成分组内值和分组间值;具体而言,按升序取(p1,…,pN)作为{Δ2X1,…,Δ2XN}。类似地,可以针对有序二阶差值应用足以区分两个集群的数据值的任何其他集群分析技术。然后分组内差值在第一集群C1={pi|a1≤pi<a2}中,而分组间差值在第二集群C2={pi|a2≤pi<a3}中,其中a1<a2<a3。在一些实施例中,内容元素基于如上所述分析的它们的空间关系而被确定要组织到的级别的个数比在差值集群分析中找到的分组间差值的个数多一个。例如,当存在两个分组间差值时,结构性级别的个数为三个。举一个简单的例子,考虑形成包括单行文本的字的字符。x-x方向上的字符之间的间距中的一阶差值将产生字符间距与字间距之间的二阶差值(一个分组间差值),指示结构的两个级别(字和行)。当文本在两列中时,将针对总共两个分组间差值检测(字间距与列间距之间)进一步的二阶差值,指示x方向上的三个结构性级别(字、行和列)。在一些实施例中,重复y方向上的分析并组合结果在可应用于特定内容时将识别在字符与字符分组之间的间距中出现的任何进一步结构性级别(例如,段落,等等)。
然后该处理确定(在3635处)每个集群级别的特性。然后处理结束。在一些实施例中,确定特性包括确定哪个一阶差值(和/或什么范围的一阶差值)与哪个集群级别相关联。在一些实施例中,确定特性包括计算与和集群级别相关联的一阶差值相关联的统计值。例如,通过确定与集群级别相关联的一阶差值的部分的平均值、最小值和最大值,可以确定内容中的图示符之间的平均、最小和最大间距。
令L为集群级别的个数。在一些实施例中,通过计数二阶差值的第二集群中的点的个数并加1来计算L。接着,可以识别与每个级别相对应的一阶差值的分组,并且例如可以按照以下两种方式之一来识别每个级别处的补偿Xn′值的集群。
一种可能是对一阶差值执行L均值集群分析。所得的L个集群是与每个级别相对应的一阶差值的分组。接着,通过将一阶差值的第(m+1)个、第(m+2)个…和第L个集群的点的个数加1来计算级别m处的Xn′的集群的个数Km。最后,对补偿Xn′值执行Km均值分析,以生成级别m处的Km个集群。
第二种可能是在初始计算每个一阶差值ΔXn=Xn+1′-Xn′以将其值与索引n存储在一起的时候,其中n可以用于识别相减以生成差值的连续X值对中的任一个。将该值和索引引用存储在单个“一阶差值”数据结构中。类似地,当初始计算每个二阶差值时,将其值与索引引用存储在一起,索引引用可以用于识别其值被相减以生成差值的连续“一阶差值”数据对中的任一个。现在,针对位于第二集群中的每个二阶差值(即,针对每个分组间差值),采用其索引引用来识别一阶差值中的分隔点。这意味着索引识别被分隔成单独的集群的一阶差值对。按照这种方式进行分隔得到与原始数据中的集群的L个级别相对应的一阶差值的L个集群。现在,级别n处的Xn值集群被识别如下:针对一阶差值的第(m+1)个、第(m+2)个…和第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处)是否潜在拆分的x区间与来自前一文本行的任何潜在拆分的x区间交叠。评估的第一个文本行将不具有前一文本行,由此将不具有交叠的潜在拆分。在当前所选的潜在拆分的x区间不与来自前一行的潜在拆分的x区间交叠时,处理前进到以上描述的3822。否则,该处理关联(在3835处)交叠的潜在拆分。然后处理前进到以上描述的3822。
当没有更多的未评估潜在拆分时,该处理确定(在3845处)是否有更多的行要评估。当还有更多行时,该处理前进到3815以识别下一行中的潜在拆分并测试它们的交叠。
当已经评估了所有行时,已经识别和关联了文档部分中的所有潜在拆分。然后该处理执行若干操作来消除假肯定(false positive)(即,实际上不应拆分文本行的潜在拆分)。处理确定(在3847处)是否识别出任何潜在拆分分组。当没有识别出来时,处理结束。否则,该处理选择(在3850处)一个相关联的潜在拆分的分组,并定义(在3855处)完全通过所选分组的潜在拆分的矩形条。在一些实施例中,该条具有作为所选分组中的所有潜在拆分的x区间的相交部的x区间(即,两个条的潜在拆分几乎不交叠的条的x区间将非常窄)。
图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处选择的行(即,当前段落中的第一个行)下面有两个或更多个文本行时,该处理识别(在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)初始地是文档部分中在段落p下面水平地与p交叠(即,与x坐标交叠)的所有段落。例如,图43例示了具有包括段落P 4305在内的11个段落的页面4300。集合B(p)初始是{Q,R,S,T,U}。接着,最靠近p的段落被识别为q,从集合B(p)中移除与段落q水平地交叠的所有段落。在段落P 4305的情况下,段落Q 4310最靠近段落P,并且从集合B(p)中移除段落R 4315、S 4320、T 4325和U 4330。此时,集合B(p)为{Q}。
一些实施例然后继续到初始地在集合B(p)中的对p的下一个最靠近段落,并从B(p)中移除在该下一个最靠近段落下面且与之水平地交叠的任何段落。其他实施例继续到留在集合B(p)中的对p的下一个最靠近段落,并且从B(p)中移除与该段落水平地交叠的任何段落。无论哪种方式,在图43的示例中,段落P 4305的集合B(p)是{Q}。然后p的外顺序是集合B(p)的基数(cardinality)(即,元素个数)。这针对B(p)中的每个段落重复。因此,在这种情况下,段落P 4305的外顺序是1。作为具有大于1的外顺序的段落的示例,针对段落R 4315,集合B(R)是{S,X},因此段落R 4315的外顺序是2。
在一些实施例中,类似于外顺序,通过采用集合A(p)来计算段落p的内顺序。集合A(p)初始地是文档部分中在段落p上面水平地与p交叠的所有段落。将最靠近p的段落选择为段落q,并从A(p)中移除与段落q水平地交叠的段落。这然后针对A(p)中的每个段落重复。在页面4300的示例中,用于段落P 4305的集合A(p)是空集合,而用于段落R 4315的集合A(p)是{Q,W}。段落p的内顺序是集合A(p)的基数(即,元素个数)。
在一些实施例中,还采用集合L(p)(采用相同的移除规则,在p左侧且与p垂直交叠的段落)和集合R(p)(采用相同的移除规则,在p右侧且与p垂直交叠的段落)类似地计算段落p的左顺序和右顺序。一些实施例在确定(例如,通过外部手段)语言方向为从上到下时,采用L(p)和R(p)用于流图(见下面)。对于页面4300,段落P 4305的集合R(P)为{V},而段落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)和放置在其他元素中的其他文本块(例如,杂志文章中的大字体引述)。
一些实施例基于文本元素的几何结构、其在页面上的位置、其流性质(内顺序、外顺序、左顺序和右顺序)以及其元素的样式性质的组合来识别调出部。例如,当顶点v包括靠近页面顶部的单行段落,从单行段落到A(v)中的任意元素的距离大于一个行高度,L(v)≤1,R(v)≤1,并且L(v)和R(v)中的任何顶点共享这些条件时,一些实施例将段落分类为页眉调出部。在一些实施例中,对页脚调出部的要求也是类似的,只是找出到页面底部和到B(v)中的元素的距离。
一些实施例还将突出到列中(且不在它们自己的区中)的边条、随机定位的文本框、与其他文本没有明显关系的少量文本(例如,附图标题)等等识别为调出部。一些实施例基于纯文本分析来进行这种确定(以及对流性质的其他确定),而其他实施例将图像并入到分析中(例如,作为对附图标题的进一步证据)。例如,在一些实施例中,一些实施例将远离A(p)和B(p)中的所有元素的单行段落识别为隔离的小段落。在一些实施例中,当具有单个文本行的段落由图像的界线包围且按照特定方式与图像界线对准(例如,在底部附近居中、在顶部附近居中,等等)时识别出标题。
当两个或更多个段落的矩形界定框相交时,一些实施例将除一个段落之外的所有段落都识别为相交调出部。例如,假设两个段落p和q交叠,并且B(p)={q,r}。当r具有1的内顺序或者当q是在A(r)中时,在一些实施例中q是相交调出部。一些实施例将其样式和/或对准性质不与A(p)或B(p)中的段落一致时的任何段落p识别为相交调出部。当两个段落相交以及没有应用以上的规则时,一些实施例将具有更小面积的段落识别为调出部。
在针对文档部分中的段落生成流图之后,处理4200将流图的节点合并(在4235处)成列。如果A(p)={q}且B(q)={p},则一些实施例合并段落p和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(p)中的每个段落q的内顺序为1,则从p到B(p)中的每个q的边缘是扩展边缘。类似地,在一些实施例中,如果段落p的内顺序大于1并且集合A(p)中的每个段落q的外顺序为1,则从A(p)中的每个q到p的边缘是缩减边缘。图45例示了引入到节点R 4515的边缘都是缩减边缘,并且从节点R 4515引出的边缘都是扩展边缘。
一些实施例的分隔检查其边缘全部被标记的每个顶点v。当v的内顺序大于1时,只要针对B(v)中的每个p有A(p)={v},则一些实施例定义其元素为B(v)的分隔。类似地,当v的外顺序大于1时,只要针对A(v)中的每个p有B(p)={v},则一些实施例定义其元素为A(v)的分隔。当两个分隔都可能时,将顶点v自己定义为分隔。基于这些规则,将流图4502分隔成三个分隔4511、4512和4513。
一些实施例将任何剩余节点放置在一个或多个分隔中,使得在分隔之间没有任何几何交叠的情况下定义最小个数的分隔。由于复杂的页面结构,一些实施例采用比以上所述更放松的分隔规则。例如,在一些实施例中,当能够从节点v生成分隔时,除了v的外顺序大于1,清除远离v且相对于v较窄的A(v)的元素。当A(v)中仅留有一个元素时,从v到被移除顶点的边缘被移除,并且继续分隔。一旦分隔完成,则处理4200结束。
在一些实施例中,每个分隔对应于一个线性布局,并且最终(合并的)节点中的每一个对应于一列。一旦定义了分隔,则一些实施例计算文档部分的性质,例如装订线宽度、页边距、内嵌或浮置图像,等等。
此外,布局和流信息(包括字、行、段落和列数据)主要地用在对文档的显示中,并且使得能够进行更鲁棒的与文档的用户交互,如在下面第VIII章和第IX章中所描述的。例如,在一些实施例中,用户可能希望浏览复杂的文档,该文档包括若干列文本、图像、调出部、标题等等,并且能够将文档的整个文本复制和粘贴到文本编辑器中。为实现此,向文档中的每个元素分配一个阅读顺序,该阅读顺序试图标识人将阅读文档中的元素的顺序。
例如,一些实施例向列分配阅读顺序,使得阅读顺序符合人将从文档或页面的开始到结尾阅读列的预期顺序。其他实施例向其他结构性元素(例如,段落、字等等)分配阅读顺序。在一些实施例中,当用户将这种文档的整个文本复制和粘贴到另一个应用中时,文本按照人将阅读的顺序出现在应用中。这与从标准PDF文件(其按照严格的从上到下的配置来对所有文本排序)复制和粘贴不同。
一些实施例还将图像和形状插入到阅读顺序中。例如,一些实施例将特定图像识别为与特定文本列相关联,并将图像插入到该文本列之前或之后(取决于文档中的情况(evidence))。作为示例,一些实施例识别出图像与该图像的标题相关联,并将图像插入到阅读顺序中恰在其标题之前。
一些实施例还定义结构性元素之间的链接。例如,一些实施例采用阅读顺序来定义列结尾处的段落与下一列开始处的段落之间的链接,这两个段落实际上是一个段落。在一些实施例中,为了保持每个段落分配给一个特定列的分级结构,不定义桥接列的单独段落。相反,两个段落之间的链接被定义为指示它们实际上是一个段落。一些实施例采用与将行添加到段落中的测试类似的测试,来确定来自第二列的顶部段落是否实际上是第一列的结尾处的段落的延续(即,检查间距、对准、字体样式,等等)。然后可以采用该链接,例如如果用户执行意在选择任一个所定义段落中的一个段落的选择操作(例如,三击),则将基于该链接选择整个实际段落。
一些实施例还定义布局(例如,跨页面链接的布局)或区之间的链接。例如,一些实施例可以识别延续文本(例如,报纸中指示故事在另一页面上继续的文本),并且可以将具有延续文本的布局中的文本与其中文本延续的布局相链接。一些实施例仅在简档已经匹配从而指示应当执行链接时试图进行这种链接。例如,如果已经将文档识别为报纸,则一些实施例将搜索延续文本。
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章中描述的处理输出的信息,并且包括区边界和相交部信息以及识别出的区和区图信息。
然后该处理5300识别(在5310处)完整被两个或更多个区(它们全都是矩形的)分隔开的岛。如上所述,在一些实施例中,岛是不与其父区共享边界区间的区。图54例示了页面5400,该页面5400包括由矩形分隔开的一个岛5401。如图所示,十三个矩形完整地分隔出岛5401,使得由十三个矩形区覆盖的页面的区域恰是岛5401的区域。因此,岛5401被识别为表格。
接下来,处理确定(在5311处)在5310处识别出的岛中是否有任何未处理的岛。当没有识别出或者所有识别出的岛都已经被处理为表格时,处理结束。否则,处理选择(在5314处)下一个识别出的岛。在一些实施例中,对于识别出的岛没有特定顺序,只要它们中的全部都被处理即可。
然后处理5300从最高到最低来排序(在5315处)所选岛中的水平边界。一些实施例按照边界的顶部界线来排序,使得具有最高顶部界线的边界是第一个。在一些实施例中,水平边界是被识别为表格的岛内的水平边界区间,并且包括岛的边界。图54例示了十六个水平边界区间5405至5420。在一些实施例中,由诸如以上在第II章中描述的处理900的处理来识别水平边界区间。
在按顺序对水平边界区间进行了排序的情况下,处理选择(在5320处)第一个未评估水平边界,并定义(在5325处)表格的下一个水平格线(gridline)。在图54的示例中,边界区间5405或5406都是第一个选择的边界,此时定义水平格线1。
然后该处理将所选边界分配(在5330处)给当前的格线,并将格线的垂直范围(extent)设置为分配给格线的所有边界的y区间的相交部。由此,在当前所选边界是要分配给当前格线的第一个时,格线的y区间仅仅是该边界的y区间。然而,当将多个边界分配给格线时,格线的y区间包括所有分配的边界的y区间。
然后该处理确定(在5335处)是否有更多的水平边界还未分配给格线。当没有更多水平边界时,处理前进到下面描述的5345。否则,当还有更多边界时,处理确定(在5340处)下一个边界的y区间是否与当前格线的y区间交叠。当y区间不交叠时,已经定义了当前格线中的所有边界,并且处理前进到5320以选择下一个边界并开始一个新的格线。然而,当y区间交叠时,处理前进到5330以将边界分配给当前格线,更新格线的y区间以及继续到下一个边界。
如图54所示,在选择了边界5405或5406作为岛5401的第一个边界之后,两者中的另一个将被选择为下一个,并添加到水平格线1。将接着定义水平格线2,其包括边界5407和5408,依此类推直到水平格线6(边界5418至5420)。
一旦将所有水平边界都分配到格线,处理5300考虑垂直边界。处理5300从左向右来排序(在5345处)所选岛中的垂直边界。一些实施例按照边界的左界线来排序,使得具有最左的左界线的边界为第一个。在一些实施例中垂直边界是被识别为表格的岛内的垂直边界区间,并包括岛的边界。图54例示了十八个垂直边界区间5425至5442。在一些实施例中,通过诸如以上在第II章中描述的处理900的处理来识别垂直边界区间。
在按顺序排序了垂直边界区间的情况下,处理选择(在5350处)第一个未评估垂直边界,并定义(在5355处)表格的下一个垂直格线。在图54的示例中,边界区间5426至5428中的一个是第一个选择的边界,此时定义垂直格线1。
然后该处理将所选边界分配(在5360处)给当前的格线,并将格线的水平范围设置为分配给该格线的所有边界的x区间的相交部。由此,如果当前所选边界是要分配给当前格线的第一个,则格线的x区间仅仅是边界的x区间。然而,当将多个边界分配给格线时,格线的x区间包括所有分配的边界的x区间。
然后该处理确定(在5365处)是否有更多的垂直边界还未分配给格线。当没有更多边界时,处理前进到下面描述的5375。否则,当还有更多边界时,处理确定(在5370处)下一个边界的x区间是否与当前格线的x区间交叠。当x区间不交叠时,已经定义了当前格线中的所有边界,并且处理前进到5350以选择下一个边界并开始一个新的格线。然而,当x区间交叠时,处理前进到5360以将边界分配给当前格线,更新格线的x区间以及继续到下一个边界。在选择了边界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处)边界z是否与边界b相交。在一些实施例中,确定边界z是否与边界b相交包括确定是否一个接收到的相交部将边界z连接到边界b。当边界不相交时,处理前进到下面描述的5545。否则,当边界相交时,处理将边界z添加(在5540处)到当前连接集合C,并将z放置到队列中。在向前移动到下一个连接集合之前,一些实施例采用队列来追踪连接集合中需要被评估用于进一步的连接的边界。
接着,该处理确定(在5545处)集合U中是否有任何边界还未被评估用以与当前边界b相交。当有更多边界时,处理前进到5530以选择另一个边界z并确定新的边界z是否与当前边界z相交。
否则,当U中的所有边界已经关于与当前边界b相交进行了评估时,该处理5500确定(在5550处)队列是否为空。当队列中有至少一个边界时,处理将队列中的下一个边界设置(在5555处)为新选择的边界b。然后该处理前进到5525以评估U中是否还有边界与新选择的边界b相交。
否则,当队列为空时,已经分配了当前连接集合C的所有元素,并且处理确定(在5560处)集合U是否为空。当U不为空时,处理前进到5520以选择新的边界b,并定义新的连接集合C。
当U为空时,已经处理了所有的边界,并将它们放置到相应的连接集合中。图56例示了具有七个边界5605至5635的页面5600。应用处理5500,将这七个边界分配给三个连接集合5640(包括边界5605)、5645(包括边界5610和5615)以及5650(包括边界5620至5635)。这些连接集合中的每一个包括与连接集合中的至少一个其他边界相交且不与连接集合之外的任何边界相交的边界。
一旦因为集合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.连结图
在一些实施例中,未结构化文档将包括文档中预期被处理为单个元素但没有被定义如此的本原元素(例如,形状和图像)。当这种本原元素占据文档的紧凑且独立的区域时,它们可以利用被称为界线集群的新颖的集群分析技术来关联。在一些实施例中,界线集群的目的是最小化集群的展度(其中,展度是根据集群中的本原元素(例如,形状)的集合的界线来计算的),同时最大化集群中本原元素的个数。在一些实施例中,界线是基于形状或形状集合的界定框。
本发明的一些实施例提供了用于识别区域中应被连结的图形(即,图形对象)的方法。然后可以将这些连结图处理为一个对象,用于进一步的重构。此外,它们在被浏览、选择、缩放、复制、移动、编辑等时可以被处理为一个对象。一些实施例将连结图处理为一个对象,用于下面在第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的展度是(XS1+YS1)/(Xp+XY),而对象6515和6520的展度是(XS2+YS2)/(Xp+XY)。一些实施例相反将展度计算为对象集合的界定框的面积除以页面的面积。一些实施例采用与页面尺寸无关的度量(例如,对象集合的界定框相比于对象本身的单独界定框的尺寸)。
接下来,该处理将下一个图形设置(在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处)第一个子序列S1。在一些实施例中,每个子序列包括按照绘制顺序是邻接的图形,并且基于绘制顺序来布置子序列,使得第一子序列具有按照绘制顺序的第一个图形。
然后该处理确定(在6650处)是否有更多子序列(即,第一次通过该处理时确定是否仅有一个子序列)。当没有更多子序列时,处理结束。否则,该处理选择(在6655处)下一个子序列S2。
接着,处理6600确定(在6660处)S1和S2的界线是否相交。如上所述,在不同的实施例中不同地定义子序列的界线(即,在一些实施例中,它们是基于竖直界定框,而在其他实施例中它们是基于非透明像素周围的路径,等等)。当S1和S2的界线不相交时,处理定义(在6665处)S2为S1,并且前进到6650以将下一个子序列相对于原始S2进行测试。
当界线相交时,处理合并(在6670处)两个子序列,并前进到6645以将第一个子序列选择为S1。一些实施例返回到第一个子序列,并且不结束处理,直到从开始经过了以任意方式不能被合并的子序列集合。然而,其他实施例在返回到6645时将在最近合并的子序列之前的子序列选择为S1,并从该点前进而非在第一个子序列处开始,从而节省处理时间。
一旦已经将集群处理为子序列,就可以相对于诸如以上描述的密度约束的约束来测试子序列。一些实施例针对要在连结图中关联的图形要求子序列中特定最小个数的图形(例如,两个、五个,等等)。一些实施例要求展度(如上所述地计算)小于特定个数(例如,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尺寸的封皮上的文档的简化简档可能是(页面#=1^段落#<=2^宽度=9.5”^高度=4.125”)。
图69例示了文档6900。在识别文档类型时,一些实施例将测试多个简档,直到达到其所有逻辑判定为真的简档。在文档6900的情况下,如果宽度x为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至7424,简档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至7424针对页面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中的用户触摸屏幕以进行选择的点处。
接着,处理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处),直到达到段落或图形对象。在一些实施例中,文档分级是填充有内容信息的区图(即,DOM)。当所选对象是字时,在一些实施例中,处理沿分级从字提升到包括该字的文本行,到包括该文本行的段落。
然后该处理确定(在8020处)识别出的对象是否是段落。当识别出的对象不是段落时,它是图形对象。在一些实施例中,该图形对象可以是形状、图像或者连结图(即,复合图形对象)中的任一个。当所识别出的对象是图形对象时,该处理将感兴趣矩形(ROI)定义(在8025处)为所识别出对象的竖直界定框。然后该处理进行缩放(在8030处),使得ROI的宽度和高度不大于显示区的宽度和高度。然后该处理前进到下面描述的8060。
当所识别出的对象是段落时,该处理定义(在8035处)具有段落的父列的宽度和该段落的高度的矩形。然后该处理针对所述矩形应用(在8040处)段落的任何旋转,并将ROI定义为经旋转矩形的竖直界定框。在一些实施例中,如果段落处在文档对象模型的旋转分组中,则旋转该段落。一些实施例如以上在第II章中描述地定义旋转分组。
然后该处理确定(在8045处)段落基线(在旋转之前)是否比显示区的对角线更陡。例如,当显示区是方形时,该确定是基线是比45度更陡还是更不陡。当段落基线比显示区的对角线更陡时,该处理进行缩放(在8050处),使得ROI不大于显示区的高度。然后该处理前进到下面描述的8060。另一方面,当段落基线不比显示区的对角线更陡时,该处理进行缩放(在8055处),使得ROI不大于显示区的宽度。
接着,处理8000确定(在8060处)ROI(如在以上操作中定义的)是否水平地适合在显示区中。当ROI水平地适合时,该处理水平地置中(在8065处)ROI。然后该处理前进到下面描述的8075。否则,该处理水平地置中(在8070处)感兴趣位置。然后该处理确定(在8075处)ROI是否垂直地适合在显示区中。当ROI垂直地适合时,该处理垂直地置中(在8080处)ROI。然后该处理前进到下面描述的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定义(在8145)为竖直界定框,该竖直界定框包括在感兴趣位置上面的第一特定个数的行以及在该感兴趣位置下面的第二特定个数的行。该定义是基于用户对感兴趣位置感兴趣并将希望查看感兴趣位置下面和上面的一定个数的文本行的假设。
在定义了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.跨布局对文本的选择
除了显示和导航文档之外,能够选择文本可能对于用户来说也是非常重要的。具有多个不同文本流(例如,多个文章)的复杂页面可能会对试图智能地按顺序选择文本的应用制造困难,其中多个不同文本流继而又断开成多个布局。当选择文本(例如,用于复制和粘贴)时,保留字符、字、文本行等的顺序是关键的。这包括不仅仅在列内进行选择,而且包括跨多个列、布局、区或页面进行选择。
一些实施例提供了用于在语义重构文档中选择文本的方法。在一些实施例中,语义重构文档包括文档对象模型,该文档对象模型是如以上在第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”)具有坐标{X2,Y2)。一些实施例还解析图形对象(例如,图像、形状,等等)。
接着,对文档数据应用(在9802处)高效集群分析。在一些实施例中,这包括采用差值集群来识别字、采用密度集群来识别导引以及采用界线集群来识别要连结的图。也执行其他重构处理(在9803处)。例如,在一些实施例中,识别段落和列。本领域普通技术人员将认识到,在一些实施例中集群分析处理和其他重构处理不必按它们执行的顺序分开。高效集群分析和其他重构处理的结果是可以显示、导航等的语义重构文档9825。
A.作为运算符集的集群分析
一些实施例基于应用于实数序列(r1,r2,…,rN)的若干运算符来执行集群分析(无论是差值集群、密度集群还是界线集群)。一些实施例包括如下运算符:
●求差值运算符D((r1,r2,…,rN))=(r2-r1,r3-r2,…,rN-rN-1)。在一些实施例中,求差值运算符D定义了元素rN的成对分组(即,定义对值{r2,r1},{r3,r2},等等)。
●排序运算符S((r1,r2,…,rN))=(s1,s2,…,sN),其中(s1,s2,…,sN)是(r1,r2,…,rN)的排列,使得s1≤s2≤…≤sN
●分隔运算符P(g,(r1,r2,…,rN))=((r1,…,rK1),(rK1+1,…,rK2),…,(rKp+1,…,rKM),(rKM+1,…,rN),其中当且仅当J是在集合{K1,…KM)中时有rJ+1-rJ≥g。在一些实施例中,变量g被称为间隔最小值,而运算符P将序列(r1,r2,…,rN)分隔成非交叠子序列,其中任何地方两个子序列值之间的差值超过间隔最小值。
●联合(coalesce)运算符C,其任意次数递归地对分隔的序列(例如,运算符P的输出)进行运算,以将相邻对子序列连结成单个子序列。在一些实施例中,确定何时连结相邻对的测试是域独立的。
●过滤运算符F,其基于域独立的测试在分隔的序列上运算以移除一些集群。以上在第III章中讨论的密度约束是采用F的例示。
一些实施例的差值集群是关于以上运算符执行的。类似地,因为界线集群采用展度值替代一阶差值来采用差值集群,所以一些实施例的界线集群是关于以上运算符执行的。
例如,一些实施例将排序运算符S应用于输入数据,随后应用差值运算符D以生成一阶差值。S和D然后被应用于结果数据以生成二阶差值(差值之间的差值)。利用S对二阶差值排序,然后将二阶差值拆分成两个不连结子序列(级别内差值和更大的级别间差值)。
在一些实施例中,拆分包括对二阶差值进一步应用D,以获得三阶差值,随后应用S以排序三阶差值。对二阶差值的拆分通常发生在有一个三阶差值显著大于其他三阶差值的情况下。一些实施例还评估域特定因子。
一旦建立了拆分,一些实施例采用等于最小级别间第二差值的间隔最小值来应用P,以分隔有序一阶差值,使得每个分隔表示一级集群。一些实施例对该分隔应用C,而一些实施例不这样做。为了将数据分隔成特定级别的集群,一些实施例采用等于特定级别处的最小差值的间隔最小值来对(排序的)输入数据应用P。一些实施例此时还应用C,但是通常采用与级别分隔不同的准则来联合集群分隔。最后,一些实施例应用F来取消一些集群。
还关于以上运算符来执行一些实施例的密度集群。例如,一些实施例对输入数据应用S,随后应用D,以生成一阶差值,并且应用S以排序差值。对于每个差值d,一些实施例采用间隔最小值d利用运算符P来分隔有序输入数据,然后利用密度约束来过滤分隔。通过优化度量来测量每个过滤后的分隔,并且将最优分隔选择为最终集群。一些实施例环绕通过一阶差值(作为间隔最小值),其从排序序列中最大的值开始并移动到依次较小的值。
在一些实施例中,如果有足够的信息,则为了效率可以早点结束该环绕。具体而言,一些实施例识别到每个连续分隔将是一个集群被拆分成两个集群的先前分隔。一些实施例还识别出,不满足最小尺寸密度约束的集群未来将始终不满足这种约束,因此这些集群可以被丢弃。在一些实施例中,一旦分隔中的所有集群都落到最小尺寸之下,则较早地结束该环绕。
B.用于集群分析的高效数据结构
一些实施例通过采用高效数据结构来执行高效集群分析,所述数据结构允许节省存储器和处理。例如,当排序数据(例如,对输入数据应用运算符S)时,不是生成数据的新阵列,一些实施例而是将索引阵列定义到未排序数据的阵列中,其中索引按照它们引用的值的顺序排序。在一些实施例中,这被称作间接排序阵列。本领域普通技术人员将理解,尽管示例采用阵列,但是也可以采用任何其他适合的数据结构。
图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[0]-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,这是在阵列D10015中的索引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还有集群分析存储设备10245。
图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将数据存储在集群分析存储设备10245中,以及将数据传递回到模块10205至10215。在一些实施例中,排序模块10220将其结果存储在集群分析存储设备10245中作为索引的排序阵列(即,间接排序阵列)。在一些实施例中,分隔模块将分隔存储在集群分析存储设备10245中作为引用间接排序阵列中的索引的单个整数值。
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指向字母“o”,依此类推。在一些实施例中,定义对初始字符阵列的指示符阵列而不是定义和存储单独的新阵列会节省存储器。
接着,该处理接收(在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”的串对象时,数据对象将规定指示符阵列中找到指向“A”的指示符的定位。数据对象还将包括为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提供在手持式设备(例如,iPhone )上的情况下,外部应用可以是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芯片、硬盘驱动器、EPROM,等等。计算机可读介质不包括无线地或者通过有线连接传递的载波和电子信号。
本说明书中的术语“软件”是指包括驻留在只读存储器上的固件或者存储在磁存储设备上的应用,其可以被读入到存储器中用以由处理器进行处理。而且,在一些实施例中,多个软件发明可以被实施为更大程序的子部分,同时保留不同的软件发明。在一些实施例中,多个软件发明还可以被实施为单独的程序。最后,一起实施本文描述的软件发明的单独程序的任何组合都在本发明的范围内。在一些实施例中,软件程序在被安装以在一个或多个计算机系统上运行时定义运行和执行软件程序的操作的一个或多个具体机器实施。
图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)或者液晶显示器(LCD)。
最后,如图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)概念性地例示了处理。这些处理的具体操作可能不会按照所示和所描述的具体顺序执行。具体操作可能不会在一个连续的操作系列中执行,并且不同的具体操作可能是在不同的实施例中执行的。此外,可以利用若干子处理实施处理,或者将处理实施为更大宏处理的一部分。因此,本领域普通技术人员将理解,本发明不受限于以上例示的细节,而是由所附权利要求来限定。

Claims (45)

1.一种分析包括多个图示符的文档的方法,每个图示符在所述文档中具有一个位置,所述方法包括:
基于图示符在所述文档中的位置,生成图示符之间的关联以将不同的图示符集合识别为不同的字;
生成字之间的关联以将不同的字集合识别为不同的段落;
针对所述文档的页,生成考虑不同段落彼此的相对位置的段落图,所述段落图包括对于每个段落的节点和多个所述节点之间的连接;
将至少两个连接的节点的集合合并成表示所述文档的列的单个节点;以及
使用具有合并的节点的所述段落图,(i)将所述列分配给所述页上的不同布局以用于在显示区域上显示,以及(ii)在接收到对所显示的页的一部分的选择时,突出显示至少一个列以对所述列执行操作。
2.根据权利要求1所述的方法,其中,生成字之间的关联包括:基于(i)形成字的图示符的垂直间距性质和(ii)形成字的图示符的水平对准性质,来识别要关联的字集合。
3.根据权利要求1所述的方法,其中,生成字之间的关联以将不同的字集合识别为不同的段落包括:
生成字之间的关联以将字集合识别为文本行;以及
生成文本行之间的关联以将文本行集合识别为段落。
4.根据权利要求3所述的方法,其中,生成字之间的关联以将字集合识别为文本行包括:
识别水平对准字的集合,其中,所述水平对准字的集合中的所有字具有在彼此的特定阈值内的基线;
基于至少一个水平间隔的存在,拆分所述水平对准字的集合;以及
生成水平对准字的每个剩余集合中的字之间的关联。
5.根据权利要求4所述的方法,其中,拆分所述水平对准字的集合包括:
将水平间隔识别为水平对准字之间至少具有阈值宽度的间隔;
识别垂直对准的水平间隔集合;
移除不满足特定准则集合的水平间隔集合;以及
在未移除的间隔处拆分水平对准字的集合。
6.根据权利要求3所述的方法,其中,生成文本行之间的关联以将文本行集合识别为段落包括比较相邻文本行的垂直间距性质。
7.根据权利要求3所述的方法,其中,生成文本行之间的关联以将文本行集合识别为段落包括比较相邻文本行的水平对准性质。
8.根据权利要求1所述的方法,还包括基于对连接的节点的集合的合并而生成段落之间的关联以将段落集合识别为列。
9.根据权利要求1所述的方法,其中,生成图示符之间的关联包括:对图示符的位置执行集群分析,以识别图示符之间的水平间距。
10.根据权利要求9所述的方法,其中,所述集群分析识别水平间距尺寸集群以识别字之间的间距和字内的间距。
11.根据权利要求1所述的方法,还包括基于所识别出的字、段落、列以及布局来定义结构化文档。
12.根据权利要求1所述的方法,还包括基于所述段落图定义段落的阅读顺序,所述阅读顺序规定所述文档中不邻接的至少两个段落的流,其中,所述不邻接的两个段落包括在第一列的底部的第一段落和在第二列的顶部的第二段落,其中所述阅读顺序规定从所述第一段落直接到所述第二段落的流。
13.根据权利要求1所述的方法,还包括基于所述段落图定义段落的阅读顺序,所述阅读顺序规定所述文档中不邻接的至少两个段落的流,其中,所述不邻接的两个段落包括在第一页面的末端的第一段落和在第二页面的开头的第二段落,其中所述阅读顺序规定从所述第一段落直接到所述第二段落的流。
14.根据权利要求13所述的方法,其中,所述第一页面和第二页面在所述文档中不邻接。
15.一种分析包括多个图示符的文档的系统,每个图示符在所述文档中具有一个位置,所述系统包括:
用于基于图示符在所述文档中的位置,生成图示符之间的关联以将不同的图示符集合识别为不同的字的装置;
用于生成字之间的关联以将不同的字集合识别为不同的段落的装置;
用于针对所述文档的页,生成考虑不同段落彼此的相对位置的段落图的装置,所述段落图包括对于每个段落的节点和多个所述节点之间的连接;
用于将至少两个连接的节点的集合合并成表示所述文档的列的单个节点的装置;以及
用于使用具有合并的节点的所述段落图,(i)将所述列分配给所述页上的不同布局,以及(ii)在接收到对所显示的页的一部分的选择时,突出显示至少一个列以对所述列执行操作的装置。
16.根据权利要求15所述的系统,其中,所述用于生成字之间的关联的装置包括:用于基于(i)形成字的图示符的垂直间距性质和(ii)形成字的图示符的水平对准性质来识别要关联的字集合的装置。
17.根据权利要求15所述的系统,其中,所述用于生成字之间的关联以将不同的字集合识别为不同的段落的装置包括:
用于生成字之间的关联以将字集合识别为文本行的装置;以及
用于生成文本行之间的关联以将文本行集合识别为段落的装置。
18.根据权利要求17所述的系统,其中,所述用于生成字之间的关联以将字集合识别为文本行的装置包括:
用于识别水平对准字的集合的装置,其中,所述水平对准字的集合中的所有字具有在彼此的特定阈值内的基线;
用于基于至少一个水平间隔的存在,拆分所述水平对准字的集合的装置;以及
用于生成水平对准字的每个剩余集合中的字之间的关联的装置。
19.根据权利要求18所述的系统,其中,所述用于拆分所述水平对准字的集合的装置包括:
用于将水平间隔识别为水平对准字之间至少具有阈值宽度的间隔的装置;
用于识别垂直对准的水平间隔集合的装置;
用于移除不满足特定准则集合的水平间隔集合的装置;以及
用于在未移除的间隔处拆分水平对准字的集合的装置。
20.根据权利要求17所述的系统,其中,所述用于生成文本行之间的关联以将文本行集合识别为段落的装置包括用于比较相邻文本行的垂直间距性质的装置。
21.根据权利要求17所述的系统,其中,所述用于生成文本行之间的关联以将文本行集合识别为段落的装置包括用于比较相邻文本行的水平对准性质的装置。
22.根据权利要求15所述的系统,还包括用于基于对连接的节点的集合的合并而生成段落之间的关联以将段落集合识别为列的装置。
23.根据权利要求15所述的系统,其中,所述用于生成图示符之间的关联的装置包括:用于对图示符的位置执行集群分析,以识别图示符之间的水平间距的装置。
24.根据权利要求23所述的系统,其中,所述集群分析识别水平间距尺寸集群以识别字之间的间距和字内的间距。
25.根据权利要求15所述的系统,还包括用于基于所识别出的字、段落、列以及布局来定义结构化文档的装置。
26.根据权利要求15所述的系统,还包括用于基于所述段落图定义段落的阅读顺序的装置,所述阅读顺序规定所述文档中不邻接的至少两个段落的流,其中,所述不邻接的两个段落包括在第一列的底部的第一段落和在第二列的顶部的第二段落,其中所述阅读顺序规定从所述第一段落直接到所述第二段落的流。
27.根据权利要求15所述的系统,还包括用于基于所述段落图定义段落的阅读顺序的装置,所述阅读顺序规定所述文档中不邻接的至少两个段落的流,其中,所述不邻接的两个段落包括在第一页面的末端的第一段落和在第二页面的开头的第二段落,其中所述阅读顺序规定从所述第一段落直接到所述第二段落的流。
28.根据权利要求27所述的系统,其中,所述第一页面和第二页面在所述文档中不邻接。
29.根据权利要求27所述的系统,还包括用于将所述第二段落直接显示在所述第一段落之后以使得用户按照所述阅读顺序来阅读段落的装置。
30.根据权利要求27所述的系统,还包括用于邻接地选择所述第一段落和所述第二段落的装置。
31.根据权利要求15所述的系统,其中,所述文档是未结构化矢量图形文档。
32.根据权利要求31所述的系统,还包括用于基于字与段落之间的关联来针对所述未结构化文档定义结构化文档的装置。
33.一种电子设备,包括:
字识别模块,配置为基于文档中包括的图示符在所述文档中的位置,生成图示符之间的关联以将不同的图示符集合识别为不同的字,其中每个图示符在所述文档中具有一个位置;
段落识别模块,配置为生成字之间的关联以将不同的字集合识别为不同的段落;
列和布局识别模块,配置为(i)针对所述文档的页,生成考虑不同段落彼此的相对位置的段落图,所述段落图包括对于每个段落的节点和多个所述节点之间的连接;(ii)将至少两个连接的节点的集合合并成表示所述文档的列的单个节点;以及(iii)使用具有合并的节点的所述段落图,将所述列分配给所述页上的不同布局并且对所述不同布局中的列执行操作;以及
显示设备,配置为(i)显示所述文档的所述页,以及(ii)接收对所显示的页的一部分的选择,以突出显示至少一个列从而对所述列执行操作。
34.根据权利要求33所述的电子设备,其中,所述字识别模块还配置为,基于(i)形成字的图示符的垂直间距性质和(ii)形成字的图示符的水平对准性质,来识别要关联的字集合。
35.根据权利要求33所述的电子设备,还包括行识别模块,该行识别模块配置为生成字之间的关联以将字集合识别为文本行,其中所述段落识别模块还配置为通过生成文本行之间的关联以将文本行集合识别为段落来生成字之间的关联以将不同的字集合识别为不同的段落。
36.根据权利要求35所述的电子设备,还包括行拆分模块,该行拆分模块配置为:
识别水平对准字的集合,其中,所述水平对准字的集合中的所有字具有在彼此的特定阈值内的基线;
基于至少一个水平间隔的存在,拆分所述水平对准字的集合;以及
生成水平对准字的每个剩余集合中的字之间的关联。
37.根据权利要求36所述的电子设备,其中,所述行拆分模块还配置为通过以下操作来拆分所述水平对准字的集合:
将水平间隔识别为水平对准字之间至少具有阈值宽度的间隔;
识别垂直对准的水平间隔集合;
移除不满足特定准则集合的水平间隔集合;以及
在未移除的间隔处拆分水平对准字的集合。
38.根据权利要求35所述的电子设备,其中,所述段落识别模块还配置为,通过比较相邻文本行的垂直间距性质,来生成文本行之间的关联以将文本行集合识别为段落。
39.根据权利要求35所述的电子设备,其中,所述段落识别模块还配置为,通过比较相邻文本行的水平对准性质,来生成文本行之间的关联以将文本行集合识别为段落。
40.根据权利要求33所述的电子设备,其中所述列和布局识别模块还配置为基于对连接的节点的集合的合并而生成段落之间的关联以将段落集合识别为列。
41.根据权利要求33所述的电子设备,还包括差值集群模块,其配置为对图示符的位置执行集群分析,以识别图示符之间的水平间距。
42.根据权利要求41所述的电子设备,其中,所述集群分析识别水平间距尺寸集群以识别字之间的间距和字内的间距。
43.根据权利要求33所述的电子设备,还包括顺序计算器,配置为基于所述段落图定义段落的阅读顺序,所述阅读顺序规定所述文档中不邻接的至少两个段落的流,其中,所述不邻接的两个段落包括在第一列的底部的第一段落和在第二列的顶部的第二段落,其中所述阅读顺序规定从所述第一段落直接到所述第二段落的流。
44.根据权利要求33所述的电子设备,还包括顺序计算器,配置为基于所述段落图定义段落的阅读顺序,所述阅读顺序规定所述文档中不邻接的至少两个段落的流,其中,所述不邻接的两个段落包括在第一页面的末端的第一段落和在第二页面的开头的第二段落,其中所述阅读顺序规定从所述第一段落直接到所述第二段落的流。
45.根据权利要求44所述的电子设备,其中,所述第一页面和第二页面在所述文档中不邻接。
CN200980156784.4A 2009-01-02 2009-12-31 用于文档重构的方法和系统 Active CN102317933B (zh)

Applications Claiming Priority (22)

Application Number Priority Date Filing Date Title
US14232909P 2009-01-02 2009-01-02
US61/142,329 2009-01-02
US12/479,849 US9460063B2 (en) 2009-01-02 2009-06-07 Identification, selection, and display of a region of interest in a document
US12/479,845 US8352855B2 (en) 2009-01-02 2009-06-07 Selection of text in an unstructured document
US12/455,866 2009-06-07
US12/479,848 US8443278B2 (en) 2009-01-02 2009-06-07 Identification of tables in an unstructured document
US12/479,844 US8365072B2 (en) 2009-01-02 2009-06-07 Identification of compound graphic elements in an unstructured document
US12/479,852 2009-06-07
US12/479,843 US8261186B2 (en) 2009-01-02 2009-06-07 Methods for efficient cluster analysis
US12/479,850 US8832549B2 (en) 2009-01-02 2009-06-07 Identification of regions of a document
US12/455,866 US9063911B2 (en) 2009-01-02 2009-06-07 Identification of layout and content flow of an unstructured document
US12/479,845 2009-06-07
US12/479,847 2009-06-07
US12/479,849 2009-06-07
US12/479,842 US8438472B2 (en) 2009-01-02 2009-06-07 Efficient data structures for parsing and analyzing a document
US12/479,852 US8473467B2 (en) 2009-01-02 2009-06-07 Content profiling to dynamically configure content processing
US12/479,850 2009-06-07
US12/479,844 2009-06-07
US12/479,843 2009-06-07
US12/479,848 2009-06-07
US12/479,842 2009-06-07
PCT/US2009/069885 WO2010078475A2 (en) 2009-01-02 2009-12-31 Methods and system for document reconstruction

Publications (2)

Publication Number Publication Date
CN102317933A CN102317933A (zh) 2012-01-11
CN102317933B true CN102317933B (zh) 2016-11-30

Family

ID=

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1467682A (zh) * 2002-06-28 2004-01-14 富士通株式会社 分析文件版面布局的设备和方法及计算机产品

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1467682A (zh) * 2002-06-28 2004-01-14 富士通株式会社 分析文件版面布局的设备和方法及计算机产品

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Intelligent Wrapping from PDF Documents;TAMIR HASSAN ET AL;《RAWS 2005》;20051231;33-40 *

Similar Documents

Publication Publication Date Title
US8438472B2 (en) Efficient data structures for parsing and analyzing a document
US20230367841A1 (en) System and method for implementing containers which extract and apply semantic page knowledge
Huron et al. Visual sedimentation
US20060225000A1 (en) Graphical application interface using browser
US20080134060A1 (en) System for creating a graphical visualization of data with a browser
US20060224999A1 (en) Graphical visualization of data product using browser
US20060224983A1 (en) Graphical visualization of data using browser
CN103329122A (zh) 使用多个表示的文档存储
US20060224972A1 (en) Graphical application interface with a browser
US20060224984A1 (en) Apparatus for creating graphical visualization of data with a browser
US20060224982A1 (en) Graphical application interface product using a browser
CN102163213B (zh) 一种语音浏览方法及浏览器
Dewar Getting started with D3: Creating data-driven documents
Latif et al. A Deeper Understanding of Visualization‐Text Interplay in Geographic Data‐driven Stories
Agarwal et al. Set Streams: Visual exploration of dynamic overlapping sets
US20060224980A1 (en) Method of creating graphical visualizations of data with a browser
Lin et al. Dashboard design mining and recommendation
CN102317933B (zh) 用于文档重构的方法和系统
Chang et al. A spreadsheet model for using web service data
Asokarajan et al. TexTile: A Pixel-Based Focus+ Context Tool For Analyzing Variants Across Multiple Text Scales.
Baumann et al. AnnoXplorer: A Scalable, Integrated Approach for the Visual Analysis of Text Annotations
Zehady et al. Integrated species–phenon trees: visualizing infraspecific diversity within lineages
Georgelis Multiperspective visualization of genealogy data
Zamora Saiz et al. Visualization
CN115688693A (zh) 文档处理方法、装置、设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
SE01 Entry into force of request for substantive examination
GR01 Patent grant