具体实施方式
本发明的各方面涉及识别和处理电子墨水的替换表示。各方面包括将替换分析结果表示为树的一部分。
本说明书被分成几个部分以帮助读者。这些部分包括:综述、墨水的特征、术语、通用计算环境、替换的表示、对象和对象关系、应用程序编程接口、网格创建、以及例子。
注意的是以下描述中的多个连接是在元素之间被说明的。注意的是这些连接除非被指定,否则一般可以是直接的或间接的,并且该指定不是要限制于这方面。
综述
根据本发明的多个例子,文档的内容可被排列成树结构。树结构可包括电子墨水和墨水的文本表示。树也可包括非墨水内容,包括但不局限于天然文本、从墨水中识别的文本、从语音中识别的文本、图画、照片、图表、演示、电子数据表、数学公式、音符、音频和/或视频剪辑、以及其他信息。由于文本表示可基于上下文和人们的笔迹的清晰度而变化,文本的替换表示也可被包括在树结构中。本发明的各方面包括通过使用具有替换识别结果的一个或多个网格的树结构的表示。
通过使用这种树结构,软件操作系统或应用程序可容易地遍历树结构并且当需要时可获得替换。树结构可定义文档内的各种元素。例如,数据结构内的节点可对应一墨水笔画,并可进一步把该墨水笔划分类成文本墨水笔画或图画墨水笔画。
此类数据结构也可把文档元素关联到诸如单词、行以及图形的有意义的组。如此,如果一个软件应用维护着一个描述手写电子墨水的段落的树结构,那么叶节点可把电子墨水的单个笔画与对应于段落内单词的单词节点关联。然后,树结构可把单词节点与对应于段落内的行的行节点关联。然后,每个行节点可被关联到对应于段落的节点。此外,软件操作系统或应用程序可维护把对应于电子墨水笔画的节点与识别结果关联的树或其他数据结构。如此,这些数据结构可被用以定义关联的电子墨水笔画之间的关系以及改进墨水的替换识别结果的处理。
如以下描述的,这些数据结构可根据本发明的多个例子与墨水分析工具一起被用以分析文档中的电子墨水。根据本发明的多个例子,软件操作系统或应用程序可通过首先创建用于文档的数据结构来获取文档内电子墨水的分析。数据结构描述已经被分析的文档元素中间的关系,并且如此提供上下文,新的电子墨水将在该上下文中被分析。该数据结构或“墨水分析器对象”也包括没有被分析的新的电子墨水。也就是说,墨水分析器对象也包括这样的电子墨水,用于该墨水与其他文档元素之间的关系还没有被建立。
在接收到的墨水上至少可执行两个操作。第一个操作是解析接收到的墨水以及创建树结构的解析过程。第二个操作是识别电子墨水以及创建来自树结构的网格的识别过程,并且该网格包括电子墨水的替换识别。其他操作也可在接收到的墨水上执行并且不局限于在此描述的解析和识别过程。例如,解析确定笔画的本地分组。识别确定笔画表示的是语言(或形状或其他类型的数据)内的哪些单词。
识别替换也可与网格关联并与父文档或其他文件一起转发。或者,网格和替换的识别结果可在每个计算系统上被重新创建。允许网格和识别结果在机器之间交换的一个优点是墨水与先前获取的信息从一机器到另一机器的持久性。在此,由于替换识别结果已经被关联到网格,第二机器不需要请求来自识别器的新的结果。因此,网格和替换一旦存在,那么它们可结合识别器或不结合识别器而被用在机器上。该能力可进一步支持识别结果对于所有机器的扩展性,而与后续机器是否具有识别墨水或其他输入的能力无关。
网格元素可以是在存储(或至少引用)数据的网格内的实体。网格元素内的数据不被限制于文本。网格元素可包括或引用许多可识别的实体,包括但不局限于识别的墨水、未识别的墨水、打字输入的文本、数学公式、音符等。例如,如果一个人在使用数学识别器,那么元素中的每一个可具有数学XML(等)作为每个元素的值。不同的元素仍可保留特定的笔画以及下一栏,但是数据不局限于纯文本。
墨水特性
如使用墨水笔的用户所知的,物理墨水(那种使用具有墨水储藏器的钢笔写在纸上的类型)可传达比由线段连结的一连串坐标更多的信息。例如,物理墨水可反映钢笔压力(通过墨水的厚度)、钢笔角度(通过线的形状或曲线段以及离散点周围的墨水的行为)、以及钢笔笔尖的速率(通过直度、线宽、以及随着线或曲线的路线的线宽变化)。进一步的例子包括墨水被吸入纸或其他沉淀墨水的表面的纤维的方式。这些细小的特性也帮助传达以上列出的特征。因为比起使用点之间同一的线宽,这些额外的特征、情绪、个性、强调等更可被立即地传达。
电子墨水(或墨水)涉及当用户使用基于触针的输入设备时捕获的电子信息的捕获和显示。电子墨水涉及一系列或任意多组笔画,其中每个笔画由一系列点所组成。笔画可在同一时间被绘制或被收集或在不同的时间和地点为了不同的原因而被绘制或收集。点可通过使用多种包括笛卡尔坐标(X,Y)、极坐标(r,Θ)以及其他本领域已知的已知的技术所表示。电子墨水可包括实际墨水的特性的表示,包括压力、角度、速率、颜色、触针大小、以及墨水不透明度。电子墨水还可包括其他特性,该其他特性包括墨水如何被沉淀到页面上的顺序(对于西方的大多数语言,从左至右然后往下的扫描模式)、时间标记(表明墨水何时被沉淀)、墨水的作者的指示、以及发起设备(墨水被绘制至其上的机器的标识或被用以沉淀墨水的钢笔的标识中的至少一个)以及其他信息。
在以上描述的特性中,主要使用笔画暂时的顺序以及作为一连串坐标的笔画。所有这些特性也可被使用。
术语
术语 |
定义 |
墨水 |
一系列或一组具有属性的笔画。一系列笔画可包括排序的形式的笔画。顺序可由捕获的时间或由笔画出现在页面上的位置或在合作的情况下由墨水的作者所排序。其他次序也是可能的。一组笔画可包括顺序的笔画或未排序的笔画或它们的任何组合。此外,某些属性对于每个笔画或笔画内的点而言是唯一的(例 |
术语 |
定义 |
|
如,压力、速率、角度等)。这些属性可被存储在笔画或点级上,而不在墨水级上。 |
墨水对象 |
一存储具有特性的或不具有属性的墨水的数据结构。 |
笔画 |
一系列或一组捕获的点。例如,当被呈现时,点的顺序可与线连接。或者,笔画可被表示成在下一个点的方向上的点和向量。简而言之,笔画是要包括有关墨水的点或线段的任何表示,而与点的底层表示和/或点与什么连接无关。 |
文档 |
任何具有可视表示和内容的电子文件。文档可包括网页、文字处理文档、笔记页面或板、电子数据表格、视觉表现、数据库记录、图像文件、以及它们的组合。 |
上下文节点树 |
描述已经被分析的文档元素与要被分析的文档元素之间关系的数据结构。数据结构还可选择性地包括非墨水信息(例如,打字输入的文本、图像、图表等)。这些非墨水信息可被用以帮助墨水内容的识别解析。此外,当使用注解引擎时,非墨水内容可由墨水注解。由于新的内容有利于现有的内容,所以现有的内容提供用于新的信息的上下文。 |
呈现或已呈现或呈现中 |
确定信息(包括文本、图片、和/或电子墨水)如何被显示,是在屏幕上、打印还是以某些其他方式输出的过程。 |
计算机可读介质 |
任何可由计算机系统上的用户访 |
术语 |
定义 |
|
问的可用介质。举例来说,而非限制,“计算机可读介质”可包括计算机存储介质和通信介质。“计算机存储介质”包括能以任何方法或技术实现的易失性的和非易失性的、可移动的和不可移动的介质,用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息。“计算机存储介质”包括,但不局限于,RAM、ROM、EEPROM、闪存或其他存储技术;CD-ROM、数字化多功能光盘(DVD)或其他光存储设备;盒式磁带、磁带、磁盘存储器或其他磁存储设备;或任何其他可用以存储想要的信息并可由计算机访问的介质。“通信介质”通常体现为计算机可读指令、数据结构、程序模块或其他已调制数据信号内的数据,诸如载波或其他传送机制,并包括任何信息发送介质。术语“已调制数据信号”是指在该信号中以编码信息的方式来设置或改变其一个或多个特征的信号。举例来说,而非限制,通信介质包括诸如有线网或直线连接的有线介质,和诸如声音、射频、红外线和其他无线介质的无线介质。任何以上所述的组合也可以包括在“计算机可读介质”的范围之内。 |
通用计算环境
图1A示出了一合适的计算系统环境100的示例,在该环境中可实现本发明。计算系统环境100只是一合适的计算环境的一例,而不是要提出对本发明使用或功能的范围进行限制。计算系统环境100也不应解释成对于在示例计算系统环境100中所示出的任一组件或其组合有任何依赖或需求。
本发明可用多个其他通用或专用计算系统环境或配置操作。可以适用于本发明使用的公知的计算系统、环境,和/或配置的实例包括,但不局限于,个人计算机、服务器计算机、手持或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费者电器、网络PC、小型机、大型计算机,及包括任何诸如以上系统或设备的分布式计算环境等。
本发明可以在诸如由计算机执行的程序模块的可实现计算机指令的一般上下文中被描述。一般地,程序模块包括完成特殊任务或实现特殊抽象数据类型的例行程序、程序、对象、组件、数据结构等。本发明也可以在分布式计算环境中实践,其中通过连接到一计算网络的远程处理设备来执行任务。在分布式计算环境中,程序模块可以定位于包括存储器存储设备的本地和远程计算机存储介质。
参见图1A,用于实现本发明的示例的系统包括一以计算机110形式出现的通用计算设备。计算机110的组件包括,但不局限于,处理单元120、系统存储器130,以及将包括系统存储器在内的各种系统元件耦合至处理单元120的系统总线121。系统总线121可以是多种总线体系结构类型中的任何一种,包括存储器总线或存储器控制器、外围总线和使用各种总线体系结构的任一种的局部总线。举例来说,而非限制,此类体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型工业标准体系结构(EISA)总线、视频电子标准技术协会(VESA)局部总线,和也被称为Mezzanine总线的外围部件互连(PCI)总线。
计算机110通常包括各种计算机可读介质。计算机可读介质可以是任何计算机110能够访问的可用介质,包括易失性的和非易失性的介质、可移动的和不可移动的介质。举例来说,而非限制,计算机可读介质可以包含计算机存储介质和通信介质。计算机存储介质包括能以任何方法或技术实现的易失性的和非易失性的、可移动的和不可移动的介质,用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息。计算机存储介质包括,但不局限于,RAM、ROM、EEPROM、闪存或其他存储技术,CD-ROM、数字化多功能光盘(DVD)或其他光学存储、盒式磁带、磁带、磁盘存储或其他磁存储设备,或任何其他可以被用来存储所需信息并且可以被计算机110访问的介质。通信介质通常体现为诸如载波或其他传送机制的已调数据信号中的计算机可读指令、数据结构、程序模块或其他数据,也包括任何信息传递介质。术语“已调制数据信号”是指在该信号中以编码信息的方式来设置或改变其一个或多个特征的信号。举例来说,而非限制,通信介质包括诸如有线网或直线连接的有线介质,和诸如声音、射频、红外线和其他无线介质的无线介质。任何以上所述的组合也可以包括在计算机可读介质的范围之内。
系统存储器130包括以诸如只读存储器(ROM)131和随机存取存储器(RAM)150的易失性和/或非易失性存储器的形式的计算机存储介质。包含如在启动期间帮助在计算机110内各元素之间传送信息的基本例行程序的基本输入输出系统(BIOS)133,通常存储在ROM 131中。RAM 132通常包含可以被处理单元120立即访问和/或当前操作的数据和/或程序模块。举例来说,而非限制,图1A示出了操作系统134、应用程序135、其他程序模块136和程序数据137。
计算机110还可以包括其他可移动/不可移动、易失性/非易失性的计算机存储介质。仅作为示例,图1A示出了读或写不可移动、非易失性磁性介质的硬盘驱动器141、读或写可移动、非易失性磁性磁盘152的磁盘驱动器151,以及读或写可移动、非易失性光盘156如CD-ROM或其他光学介质的光盘驱动器155。其他可以使用在示例的操作环境中的可移动/不可移动、易失性/非易失性计算机存储介质包括,但不局限于,盒式磁带、闪存卡、数字多功能光盘、数字视频带、固态RAM、固态ROM等。硬盘驱动器141通常通过诸如接口140的不可移动存储接口连接到系统总线121,磁盘驱动器151和光盘驱动器155通常通过诸如接口150的可移动存储器接口连接到系统总线121。
以上讨论并且在图1A中示出的驱动器及它们相关的计算存储介质为计算机110提供了计算机可读指令、数据结构、程序模块和其他数据的存储。在图1A中,例如,示出硬盘驱动器141存储操作系统144、应用程序145、其他程序模块146,和程序数据147。需要注意的是这些组件可以和操作系统134、应用程序135、其他程序模块136和程序数据137相同,也可以和它们不同。在此对操作系统144、应用程序145、其他程序模块146和程序数据147给出了不同的标号来说明至少它们是不同的拷贝。用户可以通过诸如键盘162和定位设备161这样的输入设备把命令和信息输入到计算机110中,定位设备161通常指鼠标、轨迹球或触摸板。其他输入设备(图1A中未示)可以包括麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等等。这些和其他输入设备通常由和系统总线121相耦合的用户输入接口160连接到处理单元120,但是也可以由其他接口和总线结构连接到处理单元120,诸如,并行端口、游戏端口或通用串行总线(USB)。监视器191或其他类型显示设备也可以通过诸如视频接口190的接口连接到系统总线121。除监视器外,计算机110也包括其他外围输出设备,诸如可以通过输出外围设备接口195连接的扬声器197和打印机196。
计算机110可以在网络化的环境中运行,使用逻辑连接连接到一个或多个诸如远程计算机180的远程计算机。远程计算机180可以是个人计算机、服务器、路由器、网络个人计算机、对等设备或其他普通网络节点,通常包括以上描述的和计算机110相关的多个或全部组件,尽管在图1A中只示出了存储器储存设备181。在图1A中描绘的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但是也可以包括其他网络。这样的网络环境在办公室、企业范围的计算机网络、内联网和因特网中是普遍的。
当在LAN网络环境中使用时,计算机110通过网络接口或适配器170连接到LAN 171。当在WAN网络环境中使用时,计算机110通常包括调制解调器172或通过诸如因特网的WAN 173建立通信的其他装置。调制解调器172可以是内置的或外置的,可以通过用户输入接口160或其他适当的机制连接到系统总线121。在一网络连接的环境中,所述的和计算机110相关的程序模块或其中的一部分可以存储在远程存储器储存设备内。举例说明,但非限制,图1A示出了驻留在存储器设备181上的远程应用程序185。可以理解的是所示的网络连接是示例的,也可以使用在计算机间建立通信链路的其他装置。
在某些方面,笔数字转换器165以及附属的钢笔或触针166被提供以数字化地捕获手写的输入。虽然显示了笔数字转换器165以及用户输入接口160之间的直接连接,实际上,笔数字转换器165可通过任何包括无线的技术直接地耦合到处理单元110、耦合到并行端口或其他接口以及系统总线121。并且,钢笔166可具有与之关联的摄像机以及用于无线地发送由摄像机捕获的图像信息至与总线130交互的接口的收发器。此外,钢笔具有除了摄像机之外或代替摄像机用于确定电子墨水笔画的其他诸如加速计、磁力计、以及陀螺仪的感应系统。
可以理解的是所示的网络连接是示例性的,其他在计算机之间建立通信链接的方式也可被使用。假定多种公知的诸如TCP/IP、以太网、FTP、HTTP等协议中的任何一种的存在,并且系统可在客户机-服务器配置中使用以允许用户从基于万维网的服务器中检索网页。多种传统的网络浏览器中的任何一种可被用以显示和处理网页上的数据。
编程接口(或更简单地,接口)可被视为使代码的一个或多个段能与一个或多个代码的其他段通信或访问一个或多个代码的其他段提供的功能的机制、过程、协议。或者,编程接口可被视为能在通信上耦合到一个或多个其他组件的机制、方法、函数调用、模块的系统的组件的一个或多个机制、方法、函数调用、模块、对象等。先前句子中的术语“代码段”要包括一个或多个指令或代码行,并包括例如,代码模块、对象、子程序、函数等,而不管应用的术语或代码段是否被独立地编译、或代码段是否被提供为源代码、中间代码、或目标代码、或代码段是否被使用在运行期系统或过程中、或它们是否位于相同的或不同的机器或分布在多个机器中、或由代码段表示的功能是否整个在软件中、整个在硬件中、或硬件和软件的组合中被实现。
从概念上,编程接口可一般地被视为如图1B或图1C中展示的。图1B示出了接口1作为管道,可通过该管道第一和第二代码段通信。图1C示出了包括接口对象I1和I2(可以是或不是第一和第二代码段的一部分)的接口,该接口使系统的第一和第二代码段通过介质M通信。在图1C的视图中,可认为接口对象I1和I2为相同系统的独立的接口并且也可认为对象I1和I2以及介质M组成接口。虽然图1B和1C显示了双向流动以及流动每一边上的接口,某些实现可仅仅包括一方的信息流(或如以上描述的没有信息流)或仅仅包括在一边上的接口对象。通过例子,而非限制,诸如应用编程接口(API)、入口点、方法、函数、子程序、远程过程调用、以及组件对象模型(COM)接口的术语被包含在编程接口的定义内。
这样的编程接口的各方面可包括方法,第一代码段通过该方法发送信息(这里的“信息”被用在它的广义上并且包括数据、命令、请求等)至第二代码段;第二代码段通过该方法接收信息;以及信息的结构、顺序、语法、组织、架构、定时和内容。在这点上,只要信息以接口定义的方式被传送,底层的传送介质本身对于接口的操作是不重要的,无论该介质是无线的还是有线的,或两者的组合。在某些情况下,信息可不被按传统的认识那样单向的或双向的发送,因为信息传送可以是通过另一机制(例如,独立于代码段之间的信息流的放置在缓冲器的信息、文件等)或不存在,如当一代码段仅仅访问由第二代码段执行的函数时。任何或所有这些方面在给定的情况下可以是重要的,例如,根据代码段在松散地耦合的或紧密地耦合的配置中是否是系统的一部分,并且如此该列表应该被考虑成说明性的以及非限制的。
编程接口的概念对于本领域的技术人员而言是已知的并且从先前本发明的详细的描述中是清楚的。然而,存在其他的方式来实现编程接口,并且,除非明确排除,这些也被包括在本说明书最后的权利要求书的描述中。这样的其他方式看上去可比图1B和1C的简单视图更为高级和复杂,但是它们仍然执行类似的函数以实现相同的全部结果。我们现在将简要地描述编程接口的说明性的可供选择的实现。
A分解
从一代码段到另一代码段的通信可由把通信分解成多个离散的通信来间接地实现。这在图1D和1E中被示意性地描述。如所示的,某些接口可根据可划分的功能集合所描述。因此,图1B和1C的接口函数可被分解以实现相同的结果,正如可数学地提供24,或2乘2乘3乘2。相应地,如图1D示出的,由接口1提供的功能可被再分以把接口的通信转换至多个接口1A、接口1B、接口1C等中,同时实现相同的结果。如图1E示出的,由接口I1提供的功能可被再分至多个接口I1a、I1b、I1c等,同时实现相同的结果。类似地,接收来自第一代码段的信息的第二代码段的接口I2可被分解到多个接口I2a、I2b、I2c等中。当分解时,包括于第一代码段接口的数目不需要与包括于第二代码段接口的数目匹配。在图1D或1E的情况下,接口1和I1的功能核心分别与图1B和1C中的保持相同。接口的分解也根据可结合的、可交换的、以及其他数学属性以使分解识别起来困难。例如,操作的顺序可以是不重要的,并且所以,由接口实现的函数也可在达到接口之前由另一端代码或接口良好地实现,或通过系统的一独立的组件而执行。此外,编程领域的普通技术人员可理解存在做出不同的实现相同结果的函数调用多种方式。
B.重定义
在某些情况下,可能忽略、添加或重定义编程接口的某些方面而依然实现想要的结果。这在图1F和1G中示出。例如,假定图1B的接口1包括函数调用Square(输入、精确度、输出),一包括三个参数,输入、精确度和输出的调用,并且它从第一代码段发出至第二代码段。如果中间参数精确度在给定的情况下没有被考虑,如图1F示出的,那么它也被忽略或甚至被无意义(在这个情况中)参数所替代。也可添加不考虑的其他参数。在任一的事件中,只要输出在输入被第二代码段平方后返回,那么可实现平方的功能。对于某些计算系统的下游程序的或其他部分而言,精确度可以是非常有意义的参数;然而,一旦被认为精确度对于计算平方的有限的目的而言不是必要的,它可被替代或忽略。例如,诸如出生日期的无意义值可在不影响结果的情况下被发送而不是发送有效的精确值。类似地,如图1G所示的,接口I1被接口I1’所替代,被重定义以忽略或添加对于接口的参数。接口I2也可类似地被重定义为接口I2’,被重定义以忽略不必要的参数或可在别处处理的参数。这里的重点是在某些情况下,编程接口可包括诸如参数的不被某些目的需要的方面,并且所以他们可被忽略或重定义,或在别处用于其他目的而被处理。
C内联编码
把两个独立的代码模块的某些或所有功能合并以使它们之间的“接口”更改形式是可行的。例如,图1B和1C的功能可分别地转换到图1H和1I的功能。在图1H中,先前图1B的第一和第二代码段被合并到包括它们两者的模块中。在这种情况下,代码段依然可互相通信但是接口被适应于更适合单个模块的形式。因此,例如,不再需要先前的调用和返回语句,但是类似的按照接口1的处理或响应依然是有效的。类似地,图1I示出的,来自图1C的接口I2的一部分(或所有)可被内联写入至接口I1以形成接口I1”。如所示的,接口I2被分解成I2a和I2b,并且接口部分I2a已经被编码与接口I1内联以形成接口I1”。用于具体的例子,考虑到来自图1C的接口I1执行由接口I2接收到的函数调用square(输入,输出),在处理具有输入(以计算输入的平方)的由第二代码段发送的值之后,发送回具有输出的平方结果。在这种情况下,由第二代码段执行的处理(平方输入)可在没有对于接口调用的情况下由第一代码段执行。
D分离
从一代码段至另一代码段的通信可通过把该通信分解成多个离散的通信来间接地实现。这个在图1J和1K中被示意性地描述。如图1J示出的,一个或多个代码段(分离接口,由于他们分离功能和/或来自原始接口的接口函数)被提供以转换第一接口,接口1上的通信以与不同的接口(在这个情况下是接口2A、接口2B和接口2C)一致。这个可被完成,例如,当应用程序的安装的基础被设计成根据接口1协议与操作系统通信,但是然后操作系统被更改以使用不同的接口,在这个情况中为接口2A、接口2B和接口2C。重点是由第二代码段使用的原始接口被更改以使其不再与由第一代码段使用的接口兼容,所以使用中介以使旧的和新的接口兼容。类似地,如图1K所示的,一第三代码段可结合分离接口DI1被引入以接收来自接口I1的通信并且与分离接口DI2一起发送接口功能至例如接口I2a和I2b,接口I2a和I2b被重新设计以与DI2一起工作,但是提供相同的功能结果。类似地,当提供相同的或相似地函数结果时,DI1与DI2可一起工作以转换图1C的接口I1和I2的功能至新的操作系统。
E重写
还有另一个可能的变化是动态地重写代码以把接口函数替换成能实现相同的全部结果的其他内容。例如,存在一个系统,其中以中介语言(例如,Microsoft IL、Java ByteCode等)表现的代码段被提供至执行环境(诸如由.NET框架提供的环境、JAVA运行时环境、或其他类似的运行时类型环境)中的Just-In-Time(JIT)编译器或解释器。JIT编译器可被写以动态地把来自第一代码段的通信转换至第二代码段,也就是说,使它们一致到一不同的可由第二代码段(原始的或不同的第二代码段)要求的接口。这在图1L和1M中被描述。如可从图1L中看出的,这种方式与以上描述的分离情况相类似。这可被完成,例如,当应用程序的安装的基础被设计成根据接口1协议与操作系统通信,但是然后操作系统被更改至不同的接口。JIT编译器可被用以使来自安装的基础的应用程序的即时(on the fly)通信与操作系统信的新接口相适应。如图1M描述的,这种动态地重写接口的方式可被应用到动态地分解,或也可改变接口。
也要注意的是以上描述的用于通过可选实施例实现相同的或类似的结果作为接口情况也可以多种方式组合,串行的和/或并行的、或与其他插入的代码结合。如此,以上表现的可选实施例不是互斥的并且是可混合、匹配以及组合以产生对于图1B和1C中表现的一般情况相同的或相等的情况。也要注意的是,如大部分编程构造那样,存在其他完成接口的相同或类似的函数的类似的方法,在此这些方法不被描述,但是依然由本发明的精神和范围所表示,也就是说,要注意的是至少部分的功能由以接口值为基础的接口所表示,以及通过以接口值为基础的接口产生有利的结果。
图2示出了可被根据本发明的多个方面使用的说明性平板PC 201。图1A的系统中的特性、子系统、以及功能中的任何或全部可被包括在图2的计算机中。平板PC 201包括在其上可显示多个窗口203的大的显示表面202,例如,数字平板显示器,较佳地,液晶(LCD)显示器。用户可在数字显示表面202上使用触针204选择、高亮度突出、和/或写。合适的数字显示表面202的例子包括电磁笔数字转换器,诸如Mutoh或Wacom笔数字转换器。也可使用笔数字转换器的其他类型,诸如光学数字转换器。平板PC 201解释使用触针204做出的表示以处理数据、输入文本、创建图画、和/或执行诸如电子数据表、文字处理程序等的常规计算机应用程序任务。
触针204可配置一个或多个按钮或其他特性以增加它的选择能力。在一实施例中,触针204可被实现为“铅笔”或“钢笔”,其中一端组成书写部分而另一端组成“橡皮”端,并且当“橡皮”端在显示器上移动时,指示显示器的一部分被擦除。也可使用其他类型的输入设备,诸如鼠标、轨迹球等。此外,用户自己的手指也可以是触针204并且被用于在触控式或邻近式感应显示器上选择或指示显示的图像的部分。所以,如在此使用的术语“用户输入设备”是要具有广义的定义并包括许多诸如触针204的公知的输入设备的变化。区域205展示了反馈区域或接触区域,该区域允许用户确定触针204接触显示表面202的位置。
在多个实施例中,系统提供墨水平台作为一组应用程序可用以捕获、处理、以及存储墨水的COM(组件对象模型)服务。一服务使应用程序能使用所揭示的墨水的表示读和写墨水。墨水平台也包括包含像可扩展标记语言(XML)的语言的标记语言。此外,系统可使用DCOM作为另一实现。还有可使用包括来自微软公司的Win32编程模型以及.NET编程模型的实现。
替换表示
图3示出了被解析和表示成图4内的树的电子墨水。图3的电子墨水是短语“hello,this is a test”,其中短语的五个单词被标记A-E所表示。单词“hello”A包括两个笔画301和311。单词“this”B包括三个笔画302-304。单词“is”C包括两个笔画305-306。单词“a”D包括一个笔画307。单词“test”E包括笔画308-310。短语占用两行F(“hello,this is”)以及G(“a test”)。这些行一起形成段落H。
图4表示来自图3的电子墨水的解析(parse)结果。根节点401具有从其得出的段落节点H。段落节点H包括行节点F和G。行节点F包括单词节点A-C。行节点G包括单词节点D和E。每个单词节点包括图3描述的笔画。每个节点A-H可被认为是上下文节点。每个上下文节点提供其他节点的上下文用以分析、识别、或其他目的。例如,当笔画被单独地分析或关于节点B的所有笔画被分析时,节点B内的笔画的识别可具有一组结果。然而,当节点B内的笔画的分析包括来自节点A和C的笔画的分析(或先前分析结果)时,识别结果或结果的排序是不同的。同样地,识别结果可随着被包括在节点B的分析内的上下文节点D-H更多的数量而改进。
可以理解的是还可使用多个节点(补充或替代以上那些),包括句节点(包括整个句子)、列表节点(包括列表)、以及列表项节点(包括列表的元素)。
图5示出了具有从图4的树中得出的替换的网格(lattice)。网格是从一个节点级作出的的树的表示。例如,网格可从行节点级、从单词节点级、从段落节点级等来描述树。在图5中,网格对于每个行节点存在。每个网格包括栏(在此称为网格栏)。栏表示与每个行节点关联的单词(而每个替换称为网格栏内的网格元素)。并且,占位栏(也称为间隔栏或空栏)被放置在单词之间以帮助定义单词之间的关系。
F上的网格包括5栏。每个栏包括表示来自识别引擎的替换识别结果的替换。栏F0表示如出现在图3的单词“hello”。这里,“hello”可称为顶部替换。网格栏包括对组成单词的笔画(这里为笔画S301和S311)的引用。网格栏F0还可包括其他替换(在此为“hello2”和“hello.”)。网格栏F2引用笔画S302-S306并包括用于“this”和替换“thesis”以及“This”的条目。网格F4引用笔画S305和S306并包括“is”和替换“i5”的条目。网格栏F1和F3是分隔符(或间隔)栏。在G上的网格包括3个栏。网格栏G0引用笔画S307-S310并包括“a”以及替换{an,or,aw,An,attest,detest}。网格栏G2引用笔画S308-S310并包括识别结果“test”而没有包括替换。网格栏G1是分隔符栏。
树结构可包括一个或多个网格。参考图5,F上的网格和G上的网格可被组合在一起以形成更大的网格。作为F上的网格和G上的网格的组合的网格可一共包括9栏,其中第九栏是网格F和网格G之间的分隔符栏。尤其,该新的分隔符栏可被添加作为分隔符栏F5。同样的,可把网格分隔成更小的网格。分隔的网格可被单独地或一组地发送给识别器或被询问信息。如果分隔符栏开始或结束一较小的网格,那么分隔符栏可被移除以使具有内容的栏保留。当然,分隔符栏可被保留作为一可供选择的方法。
存储在每个网格栏里的识别结果和替换可被称为网格元素。每个网格元素可包括多少笔画被用以产生识别结果的指示。例如,网格栏F0内的第二个条目“hellos”包括指示(在此,“2”),表示多少笔画备用以形成识别结果。对于栏F2,识别结果“this”使用三个笔画形成该结果。然而,识别结果“thesis”使用5个笔画以形成该结果。接下来,每个网格栏包括指向下一栏的指针。在此,栏F0的网格元素指向栏F1。类似地,栏F2的“this”网格元素指向具有下一栏的栏F3。然而,栏F2的“thesis”网格元素指向不存在的栏(在此,表示为栏5)。当然,每个网格元素对于不存在的栏的指针被替换指向表示网格结束的预定的栏。
栏之间网格元素的指示可被称为网格路径。网格路径表明具体的替换识别值(例如,存储墨水的具体解释)。
网格排列支持在跨多个单词的选择上的操作的表示。图6展示了用户已经选择在行F内的单词的例子。作为结果的选择可被表示为选择网格(也就是说,网格内被选择的节点的集合)。在此,选择网格包括栏F0-F4。图7展示了来自两行的单词的替换选择。在此,选择包括{this is test}并且得到的选择网格可包括栏F2、F3、F4、G1、以及G2。分隔符栏G1可被或不被自动地添加,以适当地互相分隔的空格栏F4和G2。
图5的网格基于图4的行级节点所创建。网格可形成于图4的任何级上。图8展示了对应于段落节点H的网格。在此,一共显示了九栏。网格栏表示图4的单词节点以及它们的替换。图9的网格显示了对应于单词节点A的网格。
图8可以包括或不包括分隔两行的分隔符栏。这是由于在某些语言中,分隔符字符串不在行之间所使用。例如,在基于字符的语言中(例如,中文),可不使用空格。在这些情况下,可在分隔符栏的位置使用空字符。识别器可按需提供分隔符栏或空字符。例如,在一墨水句子中,英语单词后跟着日语字符,后面跟着更多的英语单词,可解析并指示各个部分到适当的识别器(例如,通过使用语言或识别器来识别墨水)。英语识别器可返回由分隔符空格所界定的替换。日语识别器可返回由空字符所界定的替换。输出可被合并以从不同的识别器中分离出来的具有分隔符栏和空字符的组合产生单个网格。当然,使用产生相同类型的分隔空格/空字符的识别器(例如,英语和法语识别器)可导致在使用相同类型的语言模式时,仅仅存储一个,而不是两个,分隔空格/空字符。
此外,分隔空格/空字符不被需要在方向上为在左以及右。而是,它们的位置通过使用的语言的方向而被指示(水平扫描、垂直扫描、以及其他方向)。
对象和对象关系
该部分以及以下的部分(应用编程接口)描述对象、它们之间的关系、以及与各种模型交互的接口。
在以上描述的网格对象之间存在多种关系。图10展示了这些关系的说明性例子。某些、全部、或其他信息可被包括在以上描述的各个对象中。
网格1001是可由解析器或识别器创建的对象。网格可被串行化以容易地从单个节点中访问。可通过请求来自给定的节点的网格来访问所有网格。可通过请求来自网格对象的信息来获取网格内不同级上的识别数据。可通过合并或分离现有的网格来在任何节点上创建网格。对一个节点返回的网格只可参考在该节点下找到的笔画。为了看见单网格内树内的所有识别数据,可请求与树的根节点关联的网格。
网格1001可包括:
分隔符是否出现以及选择性地它们的标识符的指示(当合并一网格与另一网格时,可使用分隔符)。合并网格与分隔符可根据语言-例如,在英语中,单词由空格所分隔而在日语中,不需要使用空格);
●一列网格栏(或指向第一栏的指针);
●上下文节点(表明存在于文档网格1001内的位置);
●属性集合;
●网格路径顶部替换;
●包括在网格内的笔画,通过它的标识值(或笔画的索引值)、或两者来识别笔画;
●以及网格的大小。
分隔符(左和右,上和下,以及其他)可被存储作为栏的一部分或作为网格内未连接的栏。这些左和右分隔符一般只有具有用于分隔符的字符串数据的单个元素。这些左和右分隔符被标记作为用于这些栏的顶部替换。然而,当从网格请求替换时,它们不被作为替换返回。这个使得网格内替换的合并更加容易。或者,这些分隔符栏可按需被返回或移除。
在网格上可执行多个方法。这些方法包括:
●请求与网格关联的笔画;
●请求树的分段基于与网格的交互被更新(例如,组合单词);
●请求网格被串行化至可持续的格式;
●请求左或右分隔符;以及
●请求与特定笔画关联的栏。
网格栏1004是网格内的栏。网格栏一般对应于网格内的分段。替换通过对每个栏内的各个网格元素的指针来引用。如果网格元素是顶部替换,那么栏将引用作为顶部元素的网格元素。
网格栏可包括:
●网格栏内笔画的标识;
●包括在每个栏内的网格元素;
●每个栏内替换的顶部替换元素;
●属性集合;以及
●对于父网格的引用。
以下的方法可在网格栏上被执行:
●请求与网格栏关联的笔画;
●请求与网格栏关联的网格;
●请求与网格栏关联的元素;以及
●请求或指定网格栏的顶部替换元素。
网格元素1005可驻留在每个栏中。网格元素是网格路径的一部分。网格元素存储与笔画或单词关联的字符串数据。与网格元素关联的笔画一般从与网格栏关联的笔画列表的开头处所取得。这个允许另一个网格栏包括笔画的子集并且具有与该子集关联的独立的网格元素。网格元素可通过网格栏指定作为栏的顶部替换。
网格元素可包括:
●笔画数;
●与网格元素关联的数据或字符串;
●对于包括网格元素的网格栏的引用;
●对于先前网格栏的引用;
●对于下一网格栏的引用;
●属性集合;以及
●指示来自识别引擎的识别结果有多确信的识别确信级。
可在网格元素上操作的方法包括:
●请求与网格元素关联的笔画;
●请求当前网格栏的父网格栏;
●请求与网格元素关联的识别确信分数(也就是说,识别器有多少确信墨水被正确识别)
●请求下一网格栏;
●请求先前的网格栏;以及
●请求来自网格元素的被识别的字符串数据。
网格路径1002是通过网格栏的路径并且包括多个网格中的网格元素的集合。该网格路径可包括:
●组成网格路径的网格元素集合;
●路径是否遍布一单网格的指示;
●与网格路径关联的笔画;
●与网格路径关联的识别数据或字符串;以及
●指示来自识别引擎的识别结果有多确信的识别确信级。
以下的方法可使用网格路径所执行:
●确定网格路径是否遍布单网格;
●请求网格元素的集合;
●请求与网格路径关联的笔画;
●基于笔画集合请求文本;
●请求被推到指定的字符串的信息;
●请求对应于文本范围的笔画;
●请求对应于节点的笔画;
●请求对应于笔画的文本范围;以及
●指示来自识别引擎的识别结果有多确信的识别确信级。
选择网格1003是作用像网格但是不需要对应于单个节点的逻辑实体。如果网格对象被存储在行级上,那么可创建用于单行上的某些单词、一行或多行上的某些笔画、单行上的所有单词、或来自多行的某些单词等的选择网格对象。选择网格存储一列网格栏,这些网格栏不必须来自相同的网格对象。笔画的选择可被扩展以包括墨水单词或引用选择的墨水的段。当两个网格对象被一起合并至选择网格对象时,左和右分隔符栏可被合适地插入该栏列表中。选择网格对象可包括:
●组成选择网格的一个网格栏或多个栏;
●由选择网格覆盖的一个网格或多个网格;以及
●选择网格内每个栏的顶部替换。
选择网格对象可支持以下的方法:
●基于网格路径请求顶部替换;以及
●请求与选择网格关联的网格栏。
替换集合1006是一个引用选择网格的对象。该替换集合可包括:
●选择网格。
以下提供可结合替换集合使用的方法的例子。其他的方法在以下部分被描述。
●请求来自一个网格路径的替换;以及
●请求一个上下文节点的替换。
各个对象也可具有与它们关联的方法。这些方法可由应用编程接(API)调用。以下的类可被用以更好地处理树内的信息。
首先,一方法可被用以获取来自墨水分析引擎的替换。墨水分析对象上的第一方法包括“获得替换”的方法,该方法返回整个树、指定的节点、或指定的笔画的可替换的对象的集合。在此,该方法请求引用提供的节点的上下文节点。所以,例如,可请求来自给定的行节点的替换。系统将用给定的节点的替换的集合,或至少一顶级替换来响应。
一类新的对象(分析替换类(class))可被提供。在分析替换类上可操作的方法可返回文本识别确信级。在此,可确定网格元素确信数据的级别。并且,在分析替换类上可操作的另一方法包括“获得识别的字符串”方法。在此,该方法获取在这个替换的网格路径内与网格元素关联的识别结果。
其次,可使用对象的分析替换集合类。该类包括多个方法,包括“获得该分析替换”方法,该方法可以是在以上的墨水分析器上的“获得替换”方法内的返回值的结果。
以下的方法可结合分析上下文树所使用。首先,“获得替换”方法可被应用到分析替换集合上。该方法包括替换寻找的上下文节点的详细说明。其次,另一个“获得替换”方法可被应用到分析替换集合上,但是这里替换的最大数量也可被指定。例如,通过引用图5的网格栏G0,可请求少量(和与网格栏相关的全体替换集合相比)替换。
第三“获得替换”方法可请求指定的笔画要成为的替换以及用于指定的笔画返回的替换。
另一方法可包括“修改顶部替换”方法,其中可修改哪个替换应该被指定为顶部替换。例如,如果用户选择一个替换而不是另一个,那么选择的替换可在将来选择时被考虑成顶部替换。还有另一个方法可包括“修改顶部替换”方法,该方法自动地确认替换选择以使当在它周围发生其他墨水分析时,它保持作为顶部替换。例如,用户可选择新的顶部替换。这个新的顶部替换可具有树的不同分段。该新的分段可基于该替换选择被视为树的较佳分段取得。该较佳分段通过修改笔画和/或单词的分组来修改树的形状。在这点上,新的替换的每个选择可扩散其影响以至得到全新的树。
替换可通过发送节点或笔画到分析上下文而获取。这些笔画不需要来自上下文树的邻近部分(参见,例如,以上的图7)。墨水分析器对象可返回叶子上下文节点的阵列,其中节点内的笔画与通过GetAlternates()方法发送的笔画或节点匹配。从这些叶子节点,客户可移动它的焦点当它获取父或子节点或笔画以浏览完整的树结构,好像这些节点在顶部替换中一样。
网格替换是用于单词的字符串数据的集合以及对应于那些单词的笔画和属性(识别确信等)。每个单词可创建一个叶子节点。为了创建父节点,可考虑来自或不来自相同笔画集合的多个叶子节点。非叶子节点可进一步被用为替换。
应用编程接口
各种应用编程接口可结合本发明的方法所被使用。以下列出应用编程接口以及它们的函数。
分析上下文可以是树的根节点。一组用于分析在分析上下文中的墨水的方法可被公开。分析上下文是在此描述的上下文树的根节点。涉及分析上下文的墨水分析器对象可公开至少两组方法。
首先,“获得替换”方法集可被公开。在此,“获得替换”组可包括多个定义,在此描述其中的四个。GetAlternates(Context Node[]nodes)请求来自一个或多个上下文节点(例如,行、单词、段落、或其他节点)的替换并指定从其处获取替换的节点。例如,如应用到图5的,应用到节点A的GetAlternates返回“hello”、“hellos”、以及“hello.”的集合。GetAlternates也可基于一个或多个笔画的说明而被应用。例如,应用到笔画S302-S304的GetAlternates可返回“this”、“thesis”、以及“This”的集合。返回的文本包括或不包括额外的笔画。在“thesis”的例子中,也可使用额外的笔画S305-S306。
GetAlternates方法可包括或不包括要被返回的替换的最大数量的指示。所以,如果替换的最大数量被设置成2,那么GetAlternates(节点A)将返回“hello,”以及“hellos”,而不包括“hello.”。
此外,如果没有上下文节点或笔画被指定,那么GetAlternates可返回用于整个分析上下文的替换。
其次,另一方法可包括修改顶部替换。在此,修改顶部替换表示如果选择的替换被应用,那么分析上下文将是什么情况。在图5的例子中,如果替换“thesis”被选择,那么来自修改顶部替换的结果可包括“hello,thesis is a test”。对于以上GetAlternates内每个返回的替换,可察看不同但完整的分析上下文树。获得替换和修改顶部替换是以上描述的网格里的视图。此外,修改顶部替换也可修改树结构以匹配新的选择的替换的段。
替换修改可包括一种能力,其指定替换选择是否要防止未来的分析将当前替换选择取代。该说明可以是,例如,对于“修改顶部替换”方法的调用内的指定的Boolean参数作为顶部替换应该被替换的确认。
从获得替换中返回的每个替换对象可引用用于被发送到获得替换方法内的笔画或节点组的叶子上下文节点的阵列。通过使用获得替换方法和其他用于获取笔画和节点的方法,用户可获取父和子节点以及笔画并且评估如果替换被应用,树看上去将如何。
替换树可被提早创建或一旦由获得替换方法请求,被自动创建。等待直到请求替换后的一个优点是该方法最小化不需要的树的不必要的创建。在后面一种方法中,一旦替换对象被创建,它仅可引用相关的叶子ContextNodes。如果树被进一步被用户浏览,(通过请求叶节点的父节点),那么每个父节点可被自动地按请求所创建。
以下方法可结合墨水分析器对象所使用。这些方法帮助寻找节点以及在上下文节点和笔画之间转换。StrokeToContextNodes取笔画集合并且返回引用所述笔画的上下文节点的数组。通过第一种方式,每个笔画仅可由一个节点引用(而父或祖父节点可轮流引用一个节点)。在此,只有顶部替换引用笔画。通过可选择的方式,替换的组合引用单个笔画。尤其,多于一个的上下文节点可引用一个笔画(例如,笔画S305和S306可由对应于节点B和C的网格栏F2和F4所引用)。在这些情况下,StrokeToContextNodes可返回引用该笔画的上下文节点。响应于StrokeToContextNodes方法,返回的上下文节点集合可包括或不包括包含发送的笔画之外的笔画的节点。
可供选择地以及选择性地,在某些情况下,多个节点可包括较高的节点(包括段落节点)。该选择的方式可被执行以提供引用提供的笔画的上下文节点的完整的图像。
例如,在图5,可请求与笔画关联的节点,然后请求与返回的节点关联的所有笔画。如果开始于笔画S301,那么结果可包括笔画S301和S311。同样地,如果开始于笔画S301和S306,那么结果可产生笔画S301、S311、S305和S306。
下一个方法,ContextNodesToStrokes发送上下文节点以及返回包括在引用的上下文节点内的笔画的集合。单词、行、以及段落、和根节点可通过该方法发送。节点的其他类型也被包括,其他类型包括音符节点、数学节点、图画节点、图像节点、图表节点、以及定义书写区域的节点、调整级等。
对于分析替换类,三种方法可与该类关联。首先,RecognitionConfidence允许结合结果检索识别器的确信。其次,RecognizedString指定替换的字符串值。通过使用RecognizedString,在不必须如以上描述地增加遍历上下文节点的情况下,可请求与节点关联的替换值。第三,GetProperty允许通过在分析替换类内的对象的识别器获取设置在网格对象上的任何属性(例如,识别确信)。在此,可指定GUID或其他识别信息并获取属性值。
两种方法可被用以获取有关文本范围的信息。首先,GetNodesFromTextRange允许基于文本范围获取特定的上下文节点。文本范围可以是开始和结束位置、开始和长度信息、或其他文本范围的表示。通过使用图3的墨水和图4内F上的网格,可在文本范围(7,4)之间映射以获取笔画302、303、304。在此7表示跳过前6个字符“hello,”,而4表示获取接下来的4个字符。(716)将产生302-306。系统可防止来自识别器的单词的分裂,所以(0,1)、(0,2)、(0,3)、(0,4)、(0,5)、以及(0,6)都可产生s301、s311。
第二方法GetTextRangeFromNodes允许从提供的上下文节点中获取指定的文本范围。从提供的上下文节点中,可接收开始和结束位置、开始和长度信息、或文本范围的其他信息。该方位可扩展一组笔画以确保只有完整的单词被包括。
上下文节点对象可以是相同的。或者,它们可基于它们所引用的节点而不同。例如,单词和指定行的上下文节点可具有额外的属性,这些属性包括与笔画关联的值(例如,有关墨水的上行字母、下行字母、中线、以及基线特性)。这些属性的返回值可包括多个点。例如,第一个点可描述行的开始的x,y坐标。第二个点可描述终点的x,y坐标。值可在行级上通过使用被包括的墨水单词的开始和终止值被计算或是被包括的墨水单词的平均值。其中,这可应用到行节点、段节点、列表节点、以及列表项节点。
系统可支持涉及墨水分析的状态的额外的类。例如,系统可包括分析状态类。在此,应用程序可要知道分析运行是否是成功的,没有错误。分析操作的结果可返回概括运行状态的分析状态对象。该对象可包括关于分析成功的信息。例如,对象可包括一个简单的表示分析的成功的布尔值(例如,如果分析运行没有任何警告或错误,则是“真”)。如果运行不是成功的,那么对象可包括一列警告以及警告的影响。对象可包括由分析更改的一列区域。
网格创建
图11展示了用于网格的创建的各个过程。在步骤1101,系统接收墨水。墨水可从存储器(本地的或远程的)中被接收或用户在数字转换器上输入信息。接下来,在步骤1102,系统可解析墨水。来自墨水的解析的结果是树1103。选择地,如由对于网格1104断开的路径所示,系统可基于来自解析的墨水的信息创建网格。在树1103被创建之后,系统在步骤1105可通过使用手写识别引擎识别墨水。如果网格1104先前已经被创建,那么系统可结合来自识别步骤1105的替换更新网格。或者,如果以上没有被创建,那么网格可在墨水识别步骤1105之后被创建。
例子
以下涉及提供用于墨水信息的替换的例子。图12A-19展示了替换如何被应用到分析上下文树的多个例子。图12A展示了具有替换的分析上下文树。在分析上下文树中找到的墨水信息是短语“Today is Monday”。该分析上下文树具有顶部节点分析上下文A、段落节点B、行节点C、以及对应于三个墨水单词的三个墨水单词节点D-F。
在此,用户选择了单词“Monday”。通过调用以上描述的“获得替换”方法中的一个,系统返回几个替换。第一个替换由F’所表示为“Monolog”。第二个替换由F”所表示为“Monolay”。如果用户请求寻找与墨水单词“Monolog”关联的行节点,那么系统生成行节点C’以与图12B中的“Monolog”F’关联。如果接着用户请求行节点C’的子节点,那么系统进一步扩展替换1的树以包括如图12C中示出的墨水单词D’和E’以及替换行节点C’(相同的值,但是不同树的部分)。此外,如果用户对行节点C’请求它的父节点,那么段落节点B’可被自动地包括。如果用户继续并请求段落节点B’的父节点,那么根节点A’可被包括,如图12D所示。
如参考图12A-12D所描述的,仅当被用户请求时,基于替换的树的生成才可被完成。或者,系统可尝试生成所有的替换树并把它们存储在网格内。延迟替换的生成直到实际上被用户请求的好处包括最小化用于非相关树的创建所消耗的处理时间。
图13A和13B展示了分成两行的短语“the quick brown fox”。在此,图13A包括分析上下文A、段落B、具有单词E和F的行C、以及具有单词G和H的行D。选择包括单词“quick”F和“fox”H。图13B展示了用于选择的单词的替换1和2。在此,替换1包括用于F的替换“brick”F’以及用于H的“box”H’。替换2包括替换“brick”F”和“lox”H”。
图14展示了替换段修改。使用具有分析上下文A、段落B、行C、以及墨水单词“the”D、“quick”E、“brown”F、以及“fox”G的分析上下文树。选择的单词是“brown”F和“fox”G。替换1展示了用于墨水单词F和G的新的分段。在此,新的墨水单词“Boonton”被表示为F’。替换2展示了具有替换“browne”F”以及“for”G”的原始段。
图15展示了段和替换的另一个例子。在此,分析上下文树包括分析上下文节点A、段落节点B、行节点C、以及墨水单词“together”。替换1展示了墨水单词“together”D为被分隔成两个单词“Tog”D’和“ether”E’。替换2展示了墨水单词“To”D”、“get”E”、以及“her”F”。由于新的替换,替换1内的行与段节点被分别表示为C’和B’,并且替换2被分别表示为C”和B”。
图16展示了包括替换的分析上下文树,该替换包括图画和墨水单词。通过解析短语“O Canada”,图16的分析上下文树包括分析上下文A、段落B、行C、墨水单词“O”D以及“Canada”E。替换1包括段落B’、行C’、以及墨水单词“OCanada”D’。替换2包括墨水单词“O”D的不同分析。不把它考虑成墨水单词,由识别器创建的替换中的一个“O”可能是图画(尤其在此被识别为圆)D”。在此,替换2包括段落B”、行C”、以及墨水单词“Canada”E”。它也包括具有圆“O”D”的图画组F”。
在本发明的某些方面中,用户可修改网格以精确地表明单词应该识别为什么。图17展示了包括短语“Hi,How are you?”的手写墨水。图18展示了分析上下文树的结果组,其中墨水单词“are”已经被用户正确地识别为单词“are”。分析上下文树的结果组可被分成它自己的上下文树被其他分析上下文树包围的精确识别的单词(在此,“are”)。
图18展示了三个分析上下文树。在第一个分析上下文树中,显示的5个节点包括分析上下文A、段落B、行C、墨水单词“Hi.”、以及墨水单词“How”E。作为替换1显示的替换具有段落节点B’、行C’、以及所有被用以形成墨水单词D和E为“Hello”D’的笔画的替换识别。
接下来,图18包括第二分析上下文树,该树具有分析上下文F、段落G、行H、以及墨水单词“are”I。在此,用户已经精确地识别(或“钉住”)墨水单词“are”I。
最后,图18包括第三分析上下文树,该树包括上下文J、段落K、行L、以及墨水单词“you?”M。该分析上下文树的脱离的替换1包括段例K’、行L’以及墨水单词“you”M’。
或者,图18展示的三个树可被组合或保持为单个树。例如,如果用户选择一替换,该替换可以是固定的,而其他节点的其他替换可依旧基于替换的顺序选择而被修改。在此,与把节点分解成分隔的树相比,节点可保持为单个树。
本发明已经按照其中较佳的和可选实施例的方式所描述。本领域的普通技术人员而言该阅读本申请后可知,可出现多个在附加的权利要求书的范围和精神内的大量其他的实施例、修改以及变化。