在示例编程中从输入模式中进行学习的制作方法

文档序号:15104465发布日期:2018-08-04 16:32阅读:269来源:国知局

目前,数十亿用户可以访问计算设备。然而,这些用户中的大量用户没有专业编程知识并且因此可能无法编写能够在很多程序中自动执行重复任务的小脚本。示例编程(PBE)有可能帮助这样的用户生成小脚本。PBE涉及基于由用户输入的、指定用户意图的结果的示例来生成小脚本的技术。PBE可以用于很多领域特定的语言。

本文中要求保护的主题不限于解决任何缺点的实施例或仅在诸如上述环境中操作的实施例。相反,提供本背景仅用于说明其中可实施本文中描述的一些实施例的一个示例性技术领域。



技术实现要素:

提供本发明内容部分是为了以简化的形式介绍将在以下具体实施方式部分中进一步描述的一些概念。本发明内容部分无意确定所要求保护的主题的关键特征或基本特征,也无意用作确定所要求保护的主题的范围的辅助手段。

本文中公开的实施例涉及用于由基础示例编程(PBE)系统使用输入逻辑模式以基于用户输入示例来生成一个或多个程序的系统和方法。在一个实施例中,一种系统包括处理器和系统存储器。该系统访问一组输入数据。该系统接收针对该组输入数据的一个或多个用户输入示例。用户输入示例指示应当被实现以符合用户确定的结果的输出。该系统分析该组输入数据以标识该组输入数据共有的一个或多个逻辑模式。该系统基于与一个或多个用户输入示例相一致的一组一个或多个逻辑模式,生成将输出用户确定的结果的一个或多个程序。

在另一实施例中,在PBE计算系统的处理器处接收用户输入数据。用户输入数据至少包括第一输入数据串和第二输入数据串。接收用户输入数据的一个或多个用户输入示例。用户输入示例指示应当被实现以符合用户确定的结果的输出。确定针对第一输入数据串的第一组逻辑模式,并且确定针对第二输入数据串的第二组逻辑模式。将第一输入数据串的第一组逻辑模式组织成第一图,第一图具有第一节点和连接第一图的第一节点的第一边。将第二输入数据串的第二组逻辑模式组织成第二图,第二图具有第二节点和连接第二图的第二节点的第二边。将第一图和第二图相交以生成相交的第三图,相交的第三图具有第三节点和连接第三图的第三节点的第三边。基于一个或多个用户输入示例来对第三节点和第三边进行排序。基于排序来生成将输出用户确定的结果的一个或多个程序。

附加的特征和优点将在下面的描述中阐述,并且部分将从描述中变得清楚,或者可以通过实施本文中的教导来了解。可以通过在所附权利要求中特别指出的手段和组合来实现和获得本发明的特征和优点。本发明的特征从以下描述和所附权利要求书中将变得更加明显,或者可以通过如下文中阐述的本发明的实践来了解。

附图说明

为了描述可以获取本发明的上述和其他优点和特征的方式,上面简要描述的本发明的更具体描述将通过参考附图中示出的其特定实施例来呈现。应当理解,这些附图仅描绘了本发明的典型实施例,并且因此不被认为是对其范围的限制,本发明将通过使用附图以更多的特征和细节来描述和解释,在附图中:

图1示出了其中可以采用本文中描述的一些实施例的计算系统;

图2示出了通过示例编程(PBE)计算系统的实施例;

图3示出了图2的PBE计算系统的图生成器;

图4示出了由PBE计算系统生成的图的实施例;

图5示出了由PBE计算系统生成的图的另一实施例;

图6示出了图4和图5的图的相交的图的实施例;

图7A至图7D示出了基于本文中公开的实施例的使用逻辑模式来生成程序的示例;

图8示出了用于基于输入数据的共有逻辑模式来生成程序的示例方法的流程图,该程序基于用户输入示例来输出用户预期结果;以及

图9示出了用于基于输入数据的共有逻辑模式来生成程序的替代示例方法的流程图,该程序基于用户输入示例来输出用户预期结果。

具体实施方式

示例编程(PBE)涉及基于由用户输入的、指定用户意图的结果的示例来生成小程序及其相关联的子表达式的技术。可以理解,由PBE生成的小程序的数目可能非常大。因此,基础PBE系统可能最终生成与用户输入的示例相一致但实际上并不提供用户期望的结果的程序。这是因为可以存在与所提供的示例相一致但是在一些其他输入上的动作不同的程序。

为了解决这个问题,PBE计算系统通常将对所生成的程序进行排序以确定哪个程序对于用户预期的结果是最佳的并且将该程序提供给用户。然而,这种排序往往涉及需要大量计算资源来执行的复杂算法,这会使用户的进程减速。

所公开的实施例的各方面涉及创建和使用可以用于提供用于基于用户示例来生成程序的更有效的方式的PBE计算系统。在本公开中,PBE计算系统使用输入数据共有的逻辑模式,这些输入数据受所生成的程序支配,该程序产生由用户输入示例指定的用户预期结果。

通过实施所公开的实施例的各方面可以实现各种技术效果和益处。作为示例,所公开的实施例中的逻辑模式的使用显著减少了可能由PBE计算系统生成的潜在程序的数目,因此减少了生成程序所需要的计算机资源。另外,与所公开的实施例相关的技术效果还可以包括通过减少使用PBE计算系统所花费的时间而提高用户便利性和效率增益,这可以带来PBE计算系统的更广泛使用。

将参考图1描述计算系统的一些介绍性讨论。然后,将参考图2至图6描述用于使用输入逻辑模式以基于用户输入示例来生成一个或多个程序的PBE计算系统的性能。

计算系统现在越来越多地采用各种各样的形式。例如,计算系统可以是手持设备、家用电器、膝上型计算机、台式计算机、大型机、分布式计算系统、数据中心、或甚至照惯例不会被认为是计算系统的设备,诸如可穿戴设备(例如,眼镜)。在本说明书和权利要求书中,术语“计算系统”被广义地定义为包括具有至少一个物理和有形处理器以及能够在其上具有计算机可执行指令的物理和有形存储器的任何设备或系统(或它们的组合),这些计算机可执行指令可以由处理器执行,从而将计算系统提供用于特殊目的。存储器可以采取任何形式,并且可以取决于计算系统的性质和形式。计算系统可以被分布在网络环境中,并且可以包括多个组成计算系统。

如图1所示,在其最基本的配置中,计算系统100包括至少一个处理单元102和存储器104。存储器104可以是物理系统存储器,其可以是易失性的、非易失性的或两者的某种组合。术语“存储器”在本文中也可以用于指代非易失性大容量存储器,诸如物理存储介质。如果计算系统是分布式的,则处理、存储器和/或存储能力也可以是分布式的。

如本文中使用的,术语“可执行模块”或“可执行组件”可以指代可以在计算系统上执行的软件对象、路由或方法。本文中描述的不同组件、模块、引擎和服务可以被实现为在计算系统上执行的对象或进程(例如,作为单独的线程)。

在下面的描述中,参考由一个或多个计算系统执行的动作来描述实施例。如果这样的动作以软件实现,则执行动作的相关联的计算系统的一个或多个处理器响应于已经执行计算机可执行指令来指导计算系统的操作。例如,这样的计算机可执行指令可以在形成计算机程序产品的一个或多个计算机可读介质上实现。这样的操作的示例涉及数据的操纵。计算机可执行指令(和所操纵的数据)可以被存储在计算系统100的存储器104中。

计算机可执行指令可以用于实现和/或实例化所公开的所有功能、具体如参考图9至11的流程图中所示的方法所公开的所有功能。计算机可执行指令还将实现和/或实例化本文中公开的所有接口,包括分析视图窗口和图。

计算系统100还可以包含允许计算系统100通过例如网络110与其他消息处理器通信的通信信道108。

本文中描述的实施例可以包括或利用具有计算机硬件的专用或通用计算机系统组件,诸如例如一个或多个处理器和系统存储器。系统存储器可以被包括在整个存储器104内。系统存储器也可以被称为“主存储器”,并且包括可以由至少一个处理单元102通过存储器总线来寻址的存储器位置,在这种情况下,地址位置在存储器总线本身上被断言。系统存储器传统上是不稳定的,但是本文中描述的原理也适用于其中系统存储器部分或者甚至完全是非易失性的情况。

在本公开范围内的实施例还包括用于携带或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这样的计算机可读介质可以是可以被通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令和/或数据结构的计算机可读介质是计算机存储介质。携带计算机可执行指令和/或数据结构的计算机可读介质是传输介质。因此,作为示例而非限制,本发明的实施例可以包括至少两种截然不同种类的计算机可读介质:计算机存储介质和传输介质。

计算机存储介质是存储计算机可执行指令和/或数据结构的物理硬件存储设备。物理硬件存储设备包括计算机硬件,诸如RAM、ROM、EEPROM、固态驱动器(“SSD”)、闪存、相变存储器(“PCM”)、光盘存储器、磁盘存储器或其他磁存储设备、或者可以用于以计算机可执行指令或数据结构的形式存储程序代码并且可以由通用或专用计算机系统访问和执行以实现本发明的所公开的功能的任何其他硬件存储设备。

传输介质可以包括可以用于以计算机可执行指令或数据结构形式携带程序代码并且可以由通用或专用计算机系统访问的网络和/或数据链路。“网络”被定义为使得能够在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当通过网络或另一通信连接(硬连线、无线连接或硬连线或无线连接的组合)将信息传输或提供给计算机系统时,计算机系统可以将这些连接视为传输介质。上述的组合也应当被包括在计算机可读介质的范围内。

计算机可执行指令或数据结构形式的程序代码可以从传输介质自动被传送到计算机存储介质(反之亦然)。例如,通过网络或数据链路接收的计算机可执行指令或数据结构可以被缓存在网络接口模块(例如,“NIC”)内的RAM中,并且然后最终被传送到计算机系统处的计算机系统RAM和/或较不易失性计算机存储介质。因此,应当理解,计算机存储介质可以被包括在还利用(甚至主要利用)传输介质的计算机系统组件中。

计算机可执行指令包括例如当在一个或多个处理器处执行时使通用计算机系统、专用计算机系统或专用处理设备执行特定功能或一组功能的指令和数据。计算机可执行指令可以是例如二进制文件、诸如汇编语言等中间格式指令、或者甚至源代码。

本领域技术人员将认识到,本文中描述的原理可以在具有很多类型的计算机系统配置的网络计算环境中实践,包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持设备、多处理器系统、基于微处理器或可编程消费电子产品、网络PC、小型计算机、大型计算机、移动电话、PDA、平板电脑、寻呼机、路由器、交换机等。

本发明还可以在分布式系统环境中实施,在分布式系统环境中,通过网络链接(通过硬连线数据链路、无线数据链路或通过硬连线和无线数据链路的组合)的本地和远程计算机系统都执行任务。这样,在分布式系统环境中,计算机系统可以包括多个组成计算机系统。在分布式系统环境中,程序模块可能位于本地和远程存储器存储设备两者中。

本领域技术人员还将认识到,本发明可以在云计算环境中实践。云计算环境可以是分布式的,但这不是必需的。在分布式的情况下,云计算环境可以在组织内在全球分布和/或具有跨多个组织的组件。在本说明书和以下权利要求中,“云计算”被定义为用于实现对可配置计算资源(例如,网络、服务器、存储器、应用和服务)的共享池的按需网络访问的模型。“云计算”的定义并不局限于在适当部署时可以从这样的模型中获得的多个其他优点中的任何一个。

替代地或另外地,本文中描述的功能可以至少部分由一个或多个硬件逻辑组件来执行。例如而非限制,可以使用的说明性类型的硬件逻辑组件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑器件(CPLD)等。

当所公开的方法的参考动作以软件实现时,计算系统100的一个或多个处理器102响应于已经执行由软件定义的所存储的计算机可执行指令来执行动作并且引导计算系统100的操作。计算系统可以使用未示出的各种输入和输出设备来接收用户输入并且根据计算机可执行指令显示输出。

现在关注图2,图2示出了可以与先前描述的计算系统100相对应的示例编程(PBE)计算系统200的实施例。PBE计算系统200包括可以用于基于输入数据的逻辑模式来生成一个或多个程序的各种模块或功能块,这在下文将解释。PBE计算系统200的各种模块或功能块可以在本地计算系统上实现,或者可以在包括驻留在云中的元件或实现云计算的各方面的分布式计算系统上实现。PBE计算系统200的各种模块或功能块可以被实现为软件、硬件或者软件和硬件的组合。PBE计算系统200可以包括与图2所示的相比更多或更少的模块,并且一些模块可以在情况允许时被组合。尽管未示出,但是PBE计算系统200的各种模块可以根据需要访问和/或利用处理器和存储器(诸如处理器102和存储器104)来执行它们的各种功能。

如图2所示,PBE计算系统200包括数据输入模块210。在操作中,数据输入模块210接收要受一个或多个程序支配的输入数据215(在本文中也简称为“数据215”),这些程序是由计算系统200基于用户输入示例而生成的,如将在下面更详细解释的。数据215可以是能够受所生成的程序支配的任何类型的数据。在一个实施例中,数据215可以是半结构化数据,诸如半结构化文本数据或日志文件。在其他实施例中,数据215不需要是文本的。数据215还可以包括电子表格或网页。在情况允许时,数据215可以从任何合理来源接收到。

PBE计算系统200还包括用户输入示例模块220。在操作中,用户输入示例模块220从用户205接收各种用户输入示例221、222以及可能任何数目的附加用户输入示例,如椭圆223所示。用户输入示例221、222和223是如下的示例,这些示例指定或标识用户205希望所生成的程序在被实施时能够实现的预期或确定的结果。

例如,在一个实施例中,用户输入示例221、222或223可以指定用户205希望所生成的程序从文件的参考文献部分中提取一组个体作者。在另一实施例中,输入示例221、222或223可以指定用户205希望所生成的程序从一系列城市和国家中提取国家名称。在一些实施例中,用户输入示例221、222或223可以通过以下方式来被输入:使用户205在用户界面中突出显示或以其他方式标识要从半结构化数据中提取的期望信息(诸如要提取的作者列表或国家名称)。在其他实施例中,用户输入示例221、222或223可以以其他合理的方式来输入。因此,本文中公开的实施例不受用户输入示例221、222或223的类型或输入示例输入到用户示例输入模块220中方式的限制。应当理解,尽管用户205通常是人类用户,但是用户205也可以包括非人类计算系统、人工智能等。

PBE计算系统200还包括逻辑模式模块230。如图所示,逻辑模式模块230接收用户输入示例221、222和223中的一个或多个,并且还接收数据215。在接收到数据215时,逻辑模式分析器234可以确定数据215的每个条目中存在的所有逻辑模式。例如,假定数据215是具有n个输入行或条目i1、i2……至in的电子表格。逻辑模式分析器234可以分析和确定在输入i1中找到的所有逻辑模式、在输入i2中找到的所有逻辑模式,以此类推,直到输入in。这样,每个输入条目的所有可能的逻辑模式可以被标识。逻辑模式可以包括在数据215的每个条目中找到的共有模式,诸如数据串之间的共有间隔、数据串的共有位置、在数据串中具有的共有空格、在数据串的开始或结束处具有的共有数据串、或可以存在于输入数据中的任何其他类型的图。因此,本文中公开的实施例不受任何特定类型的逻辑模式的限制。

在一些实施例中,所标识的逻辑模式表示在PBE计算系统200正在使用的域特定语言(DSL)中常见的一组子串表达式标记。这些常用的DSL子串表达式标记可以被预编程到系统中,使得逻辑模式分析器234可以快速标识子串表达式标记而不需要大量的计算资源。例如,在一些实施例中,逻辑模式分析器234可以访问能够用于快速标识逻辑模式的共有子串表达式标记表。

然而,在其他实施例中,逻辑模式分析器234不限于该组共有子串表达式标记。在这样的实施例中,逻辑模式分析器234能够基于逻辑模式本身来确定子串表达式。例如,如果多个输入包括未被包括在该组预编程共有子串表达式标记中、但是具有跨所有输入的共有逻辑模式的字符串数据,逻辑模式分析器234将能够跨所有输入基于逻辑模式来确定或学习所需要的子串表达式。因此,这有利地允许逻辑模式分析器234分析逻辑模式,而不管它们是否表示共有的子串表达式标记。

一旦确定或标识了所有可能的逻辑模式,逻辑模式组织器235可以以能够用于生成期望程序的方式来组织所标识的逻辑模式。例如,逻辑模式组织器235可以组织这些逻辑模式,以使得只有那些在所有输入行或条目i1、i2至in中共同存在的逻辑模式在生成程序时被使用。

在一个实施例中,逻辑模式组织器235可以包括图生成器236。在操作中,图生成器236可以为输入行或条目i1、i2……至in中的每一个的所有可能逻辑模式生成一个图,以作为组织逻辑模式的一种方式。图生成器236然后可以针对每个输入将每个单独的图相交,从而生成包括每个输入共有的逻辑模式的新的相交的图。下面将进一步详细解释图生成器236的具体示例。

在一些实施例中,逻辑模式模块230可以包括映射模块237。在操作中,映射模块237可以将由逻辑模式组织器组织的逻辑模式与数据215的数据串和表示逻辑模式的子串表达式相映射。然后,该映射可以用来生成将产生用户预期结果的一个或多个程序,如将在下面更详细解释的。

PBE计算系统200还可以包括程序生成模块240。程序生成模块240可以接收已经由逻辑模式组织器235组织并且已经由映射模块237映射的经组织的逻辑模式。程序生成模块还可以接收用户输入示例221、222和可能的223。

程序生成模块240可以包括排序模块245,排序模块245基于用户输入示例来对各种逻辑模式进行排序以寻找最有可能输出用户预期或期望的输出的逻辑模式。在利用图生成器236的实施例中,排序模块245可以寻找相交的图中的最长路径,以确定哪个逻辑模式最有可能产生期望的输出。这个过程将在下面更详细地解释。

程序生成模块240还包括或能够访问子串表达式库246。子串表达式库包括域特定语言(DSL)子串表达式246a、246b以及可以在所生成的程序中使用以实现期望的结果的、由椭圆246c示出的任何数目的附加子串。

程序生成模块240使用由排序模块确定的、最有可能输出用户预期结果的逻辑模式来生成输出程序250。在一些实施例中,程序生成器在生成程序时使用由映射模块237提供的映射来从子串表达式库246中选择适当的子串表达式。然后,所生成的输出程序250可以应用于输入数据215以产生由用户输入示例221、222或223指示的用户期望或预期的结果,上述结果被输出到用户205。在一些实施例中,由265指示的期望的或预期的结果可以在用户界面(UI)260上示出给用户205。

例如,如果用户希望所生成的程序从文件的参考文献部分中提取一组个体作者,则所生成的程序250将向用户输出作者列表。以这种方式,即使用户250不知道如何创建程序,PBE计算系统200也能够基于在输入数据中找到共有逻辑模式来生成所需要的程序。

图3示出了图生成器300,其可以对应于上述图生成器236。图生成器300包括在操作中为数据215的每个条目的所有逻辑模式构建图的图构建模块310。现在将解释图构建模块215的操作的示例。

参考图3,图构建模块310接收或以其他方式访问可以与输入数据215相对应的输入数据305。如图所示,输入数据305包括具有被表示为306的字符串“1lb”的第一条目和具有被表示为307的字符串“23g”的第二条目。

图构建模块310然后可以为条目306和条目307创建图。参考图4,示出了字符串“1lb”306的图400。如图4所示,图400包括表示字符串“1lb”的索引的各个节点。例如,如410所表示,字符串“1lb”包括第一索引410A、第二索引410B、第三索引410C、第四索引410D和第五索引410E。因此,节点420表示索引410A,节点430表示索引410B,节点440表示索引410C,节点450表示索引410D,并且节点460表示节点410E。另外,图400包括分别表示开始和结束索引的节点470和节点480。

图400还包括连接节点420至460的边490。例如,边490A连接节点420和430,边490B连接节点420和440,边490C连接节点420和450,边490D连接节点420和460,边490E连接节点430和440,边490F连接节点430和450,边490G连接节点430和460,边490H连接节点440和450,边490I连接节点440和460,并且边490J连接节点450和460。另外,边491连接节点470和节点420,并且边492连接节点460和节点480。

连接各个节点的图的边表示或被映射到由节点表示的字符串的不同逻辑模式的子串表达式。因此,边490、491和492表示字符串“1lb”的逻辑模式的子串表达式。

图400还包括边490、491和492中的每条边的映射指示符或标签,这些映射指示符或标签将边映射到可以由映射模块237生成的边所表示的子串表达式。例如,边490A包括映射指示符a12,边490B包括映射指示符a13,边490C包括映射指示符a14,边490D包括映射指示符a15,边490E包括映射指示符a23,边490F包括映射指示符a24,边490G包括映射指示符a25,边490H包括映射指示符a34,边490I包括映射指示符a35,边490J包括映射指示符a45。

如图4所示,映射指示符指向针对边490中每一条边的相关DSL的子串表达式。如上所述,子串表达式可以存储在子串表达式库246中。例如,映射指示符a12映射到表示字符串“1lb”中的索引410A和410B之间的所有逻辑模式的子串表达式401。类似地,如图4所示,剩余的映射指示符分别映射到子串表达式402、403、404、405、406、407、408、409和490A。与子串表达式401一样,子串表达式402、403、404、405、406、407、408、409和490A表示它们各自的索引之间的所有逻辑模式,也如图4所示。

边491和492还分别包括映射到子串表达式的映射指示符493和494。然而,由这些边表示的子串表达式指示字符串“1lb”的开始(边491)和结束(边492)。

图构建模块310还可以为条目307创建图。参考图5,示出了字符串“23g”307的图500。如图5所示,图500包括表示字符串“23g”的索引的各个节点。例如,如510所示,字符串“23g”包括第一索引510A、第二索引510B、第三索引510C、第四索引510D和第五索引510E。因此,节点520表示索引510A,节点530表示索引510B,节点540表示索引510C,节点550表示索引510D,并且节点560表示节点510E。另外,图500包括分别表示开始和结束索引的节点570和节点580。

图500还包括连接节点520至560的边590。例如,边590A连接节点520和530,边590B连接节点520和540,边590C连接节点520和550,边590D连接节点520和560,边590E连接节点530和540,边590F连接节点530和550,边590G连接节点530和560,边590H连接节点540和550,边590I连接节点540和560,并且边590J连接节点550和560。另外,边591连接节点570和节点520,并且边592连接节点560和节点580。

该图中连接各个节点的边表示或被映射到由这些节点表示的字符串的不同逻辑模式的子串表达式。因此,边590、591和592表示字符串“23g”的逻辑模式的子串表达式。

图500还包括边590、591和592中的每条边的映射指示符或标签,这些映射指示符或标签将边映射到可以由映射模块237生成的边所表示的子串表达式。例如,边590A包括映射指示符b12,边590B包括映射指示符b13,边590C包括映射指示符b14,边590D包括映射指示符b15,边590E包括映射指示符b23,边590F包括映射指示符b24,边590G包括映射指示符b25,边590H包括映射指示符b34,边590I包括映射指示符b35,边590J包括映射指示符b45。

如图5所示,映射指示符指向边590中每一条边的相关DSL的子串表达式。如上所述,子串表达式可以存储在子串表达式库246中。例如,映射指示符a12映射到表示字符串“23g”中的索引510A和510B之间的所有逻辑模式的子串表达式501。类似地,如图5所示,剩余的映射指示符分别映射到子串表达式502、503、504、505、506、507、508、509和590A。与子串表达式501一样,子串表达式502、503、504、505、506、507、508、509和590A表示它们各自的索引之间的所有逻辑模式,也如图5所示。

边591和592还分别包括映射到子串表达式的映射指示符593和594。然而,由这些边表示的子串表达式指示字符串“23g”的开始(边591)和结束(边592)。

返回图3,示出了图模块300300还可以包括交叉模块320。在操作中,交叉模块320将由图构建模块310生成的每个输入条目的图相交并且产生包括与每个输入相一致的所有逻辑模式的相交的图。换言之,相交的图包括在每个输入条目中常见的那些逻辑模式,并且去除仅在一些(但不是全部)输入条目中找到的任何逻辑模式。

图6示出了相交的图600,其是相交模块320与字符串“1lb”306的图400和字符串“23g”307的图500相交的结果。如图6所示,相交的图600包括节点610至660。然而,在相交的图中,节点表示如下一组索引,这组索引映射回被相交的图的一个或多个索引。

例如,节点610表示图400和图500的第一索引420和第一索引510,节点620表示图400和图500的第二索引430和第三索引540,节点630表示图400和图500的第三节点440和第四节点550,并且节点640表示图400和图500的第五索引460和第五索引440。类似地,节点660表示图400和图500的开始节点470和开始节点570,并且节点650表示图500和图600的结束节点470和结束节点570。

图600包括连接节点的边。在这种情况下,上述边表示每个输入条目共有的逻辑模式的子串表达式。在图600中,边670A连接节点610和620,边670B连接节点620和630,边670C连接节点630和640。另外,边671连接节点660和节点610,并且边672连接节点640和节点650。

边670A包括指向子串表达式681的映射指示符c1。子串表达式681表示节点610的索引共有逻辑模式。同样,边670B包括指向子串表达式682的映射指示符c2。子串表达式682表示节点620的索引的共有逻辑模式。类似地,边670B包括指向子串表达式683的映射指示符c3。子串表达式683表示节点630的索引的共有逻辑模式。边660和650具有映射到开始和结束子串表达式的映射指示符。

一旦已经生成相交的图600,则可以使用表示共有逻辑模式的相关DSL的子串表达式来生成将输出用户指示或期望结果的程序。例如,程序生成模块可以确定由相交的图600的各个边表示的子串表达式中的哪个将输出由用户输入示例221、222或223中的一个或多个指示的用户预期结果。在接下来将更详细地解释的一个实施例中,排序模块245可以寻找相交的图600中的节点之间的、包括可以生成用户期望输出的子串表达式的最长路径。换言之,最长路径表示最有可能生成将输出用户预期结果的程序的子串表达式集合。

现在将解释用于PBE计算系统200基于输入逻辑模式来生成将输出用户预期结果的程序的具体示例。图7A所示的电子表格710包括六个输入条目711至716,其在列中列出了城市和城市所在的国家。例如,输入条目711列出了Mumbai,India,输入条目712列出了Los Angles,United States of America,输入条目713列出了Newark,United States,输入条目714列出了New York,United States of America,输入条目715列出了Wellington,New Zealand,并且输入条目716列出了New Delhi,India。

假定用户205提供了指示用户期望从城市和国家的列表中提取每个国家的用户输入示例221。这在图7中指示为717,其中India单被独列出。用户205可以通过向输入行中输入India(或另一国家的名称)而在诸如UI 260等UI中高亮显示印度(或另一国家的名称)来向输入示例模块220提供用户输入示例,或者可以通过其他合理的方式来提供用户输入示例。

给定用户输入示例“Mumbai,India”→“India”,存在大量可能的基于正则表达式的逻辑来提取子串“India”。例如,为了标识子串的左边索引,一些可能的逻辑是:i)第二字母表标记的开始,ii)第二字母数字的开始,iii)第一空格的结束,iv)第一逗号的结束、后面跟着空格,等等。在典型的DSL中可能存在超过103种不同的逻辑可以标识这个位置。类似地,对于子串的正确索引,也可能存在超过103种不同的逻辑。因此,需要如所解释的那样使用输入逻辑模式来减少可能的逻辑的数目,使得可以以有效的方式来达到期望的程序。

如图7B所示,先前描述的逻辑模式模块230及其各种模块(诸如图构建模块310)然后可以为输入条目“India”生成图720。图720包括表示722所示的“India”的索引的节点721A、721B、721C、721D、721E和721F。图720还包括连接各种节点并且表示如前所述的每个索引的逻辑模式的子串表达式的边725A至725O。如图所示,图720的边还包括映射函数W01至W45。在图7B中,边映射函数W01至W45现在对应于由左和右位置表达式组成的子串表达式,其中每个位置表达式由来自相交图的一组节点表示,如将在下面进一步详细解释的。

虽然没有示出,但是逻辑模式模块230可以为类似于“Mumbai,India”的每个其他输入条目生成图。例如,可以为“Los Angeles,United States of America”712、“Newark,United States”713、“New York,United States of America”714、“Wellington,New Zealand”715和“New Delhi,India”716生成图。

先前描述的逻辑模式模块230及其各种模块(诸如相交模块320)然后可以生成图720的相交的图730和其他输入712至716的未示出的图。图7C示出了相交的图730。如前所述,图的相交可以基于跨所有输入条目共有的逻辑模式。

如图7C所示,相交的图730包括节点和边。应当理解,为了简洁起见,图7C中并未示出所有的边。另外,为了便于解释,仅解释一些节点和边,并且映射指示符没有被包括在内。

图730包括节点731至738。节点731至738中的每个表示要在输入数据710中提取的期望字符串的索引位置。例如,节点734表示来自输入数据条目711至716的字符串索引{9,14,9,11,13,12}。9表示字符串“Mumbai,India”711中的第9个索引,其是“India”中的“I”的位置。14表示字符串“Los Angeles,United States of America”712中的第14个索引,其是“United”中的“U”的位置。类似地,其余索引9、11、13、12分别表示字符串条目713至716中的字符串“U”、“U”、“N”和“I”的位置。可以理解,由节点734表示的每个字符串是要从数据中提取的国家名称的第一字母。这是跨所有输入条目共有的输入数据710中的逻辑模式的示例。

作为节点的另一示例,节点736表示来自输入数据条目711至716的串索引{14,38,22,35,22,17}。14表示字符串“Mumbai,India”711中的第14个索引,其是“India”中的“a”的位置。38表示字符串“Los Angeles,United States of America”712中的第38个索引,其是“America”中的“a”的位置。类似地,其余索引22、35、22、17分别表示字符串条目713至716中的字符串“s”、“a”、“d”和“a”的位置。可以理解,由节点736表示的每个字符串是要从数据中提取的国家名称的最后的字母。这是跨所有输入条目共有的输入数据710中的逻辑模式的另一示例。

如上所述,先前描述的程序生成模块240及其各个模块(诸如排序模块245)然后可以对图730进行排序以确定从开始节点到完成节点的将生成用户期望输出的最长路径。在用户输入示例是“Mumbai,India”→“India”的这个示例中,排序模块245可以确定将从“Mumbai”中提取“India”的最长路径。换言之,由最长路径边表示的子串表达式在被组合时会包括如下的程序,该程序可能从“Mumbai,India”中提取“India”并且提取输入数据的其他国家。如果用户205提供第二用户输入示例222,例如“Los Angeles,United States of America”→“United States of America”,则排序模块245将寻找将提取India和United States of America两者的最长路径。

如先前关于图7B所讨论的,在一些实施例中,子串表达式可以包括表示最左边的字符串的索引或位置的位置表达式pl和表示最右边的字符串的索引或位置的位置表达式pr。换言之,位置表达式pl和pr分别表示左侧索引和右侧索引的可能表达式的集合。每个位置表达式对应于相交的图730中的一组节点。例如,在数据条目711中,针对“India”的pl和pr分别是9和14并且对应于相交的图730的那些节点,诸如节点731至738,这些节点示出了9和14。在这样的实施例中,排序模块245在生成程序250时确定针对索引pl和索引pr的最长路径长度。

图7D中找到这种排序的一个示例。如图7D所示,排序模块245通过确定图730中的每个节点的输入得分740和输出得分750来确定给定节点的路径长度。图7D所示的节点对应于以上讨论的节点731至738。

如图所示,输入得分740对应于存在到给定节点731至738的路径的节点的数目,而输出得分750捕获从给定节点731至738可达到的节点的数目。排序模块245还使用节点距离函数来向更远(按照字符串索引)的节点指派更高的得分,以偏好更长的字符串匹配。最后,排序模块245通过添加其输入得分740和其输出得分750来计算给定节点731至738的总得分760,并且确定具有最高得分的节点。

如图7D所示,对于左侧索引位置表达式,排序模块245将最高得分指派给与子串表达式集合(”,”,1,End)相对应的节点734(第一逗号的结束,后面跟着空格,(ps,2,Start)(具有空格的第二适当情况标记的开始)等。另一方面,排序模块245将低得分指派给与子串表达式集合(C,2,Start)相对应的节点732(第二大写字母标记的开始),因为虽然这些子串表达式可以提取“India”,但是它们对于从诸如“Los Angeles,United States of America”等输入字符串中提取国家是不正确。

类似地,对于这组右侧索引位置表达式,排序模块245将高得分指派给与子串表达式(^,1,End)相对应的节点736和与子串表达式(ps,2,End)相对应的节点737,因为这些子表达式可能会提取国家名称。排序模块245向与子串表达式("a",-1,End)相对应的节点738分配低得分(常量字符串标记"a"的最后匹配),因为这些子串表达式不可能正确地提取国家名称。

一旦如上所述确定了从起始节点到结束节点的最长路径,则逻辑模式生成模块240可以使用由路径的边表示的子串表达式来生成程序250。以这种方式,程序250可以通过主要使用输入数据的逻辑模式来生成,而不需要对输出程序进行排序以寻找最有可能生成用户预期结果的程序。

现在下面的讨论涉及可以执行的很多方法和方法动作。尽管方法动作可以按照某种顺序进行讨论或者在流程图中以特定顺序进行说明,但是除非特别声明或者因为一个动作取决于另一动作在该动作执行之前被完成而要求,否则不需要特定顺序。

图8示出了用于由基础PBE计算系统基于输入数据共有逻辑模式来生成程序的示例方法800的流程图,该程序基于用户输入示例来输出用户期望结果。方法800将参考上述图2至图7中的一个或多个来描述。

方法800包括访问一组输入数据(动作810)。例如,如前所述,数据输入模块从用户205接收一组输入数据215。输入数据215可以是诸如电子表格710等结构化数据,或者它可以是非结构化数据。

方法800包括接收针对该组输入数据的一个或多个用户输入示例,用户输入示例指示应当被实现以符合用户确定的结果的输出(动作820)。例如,输入示例模块220可以接收一个或多个用户输入示例221、222和223。如前所述,用户输入示例221、222和223指示或指定应当由PBE计算系统200生成的程序250实现的用户预期结果。

方法800包括分析该组输入数据以标识该组输入数据共有的一个或多个逻辑模式(动作830)。例如,如前所述,逻辑模式模块230可以分析输入数据215以确定或标识输入数据215的每个条目中的逻辑模式。在一个实施例中,分析数据包括将输入数据组织成每个条目的图,该图具有表示输入数据串的索引的节点和表示如前所述的在输入数据串中找到的逻辑模式的子串表达式的边。然后可以将这些图相交以生成相交的图,如前所述。

方法800还包括基于与一个或多个用户输入示例相一致的一组一个或多个逻辑模式来生成将输出用户确定的结果的一个或多个程序(动作840)。例如,如前所述,程序生成模块基于与用户输入示例221、222和223相一致的逻辑模式来生成将输出用户确定的结果的程序250。在一个实施例中,排序模块245可以基于用户输入示例来确定相交的图的最长路径长度,或者确定与用户输入示例相一致的相交的图的最长路径长度。也就是说,排序模块245基于最长路径长度来确定由相交的图的边表示的子串表达式,该最长路径长度将产生由用户输入示例指定的结果。

图9示出了用于由基础PBE计算系统基于输入数据共有逻辑模式来生成程序的示例方法900的流程图,该程序基于用户输入示例来输出用户期望的结果。方法900将关于上述图2至图7中的一个或多个进行描述。

方法900包括在PBE计算系统的处理器处接收至少包括第一输入数据串和第二输入数据串的用户输入数据(动作910)。例如,如前所述,图分析器模块230可以接收输入数据215。输入数据215可以包括诸如输入数据串306或711等的第一输入数据串元件诸如输入数据串307或712等的第二输入数据串。在一些实施例中,输入数据215可以包括附加的输入数据串,诸如输入数据串713至716。方法900包括接收针对用户输入数据的一个或多个用户输入示例,用户输入示例指示应当被实现以符合用户确定的结果的输出(动作920)。例如,输入示例模块220可以接收一个或多个用户输入示例221、222和223。用户输入示例221、222和223指示或指定应当由PBE计算系统200生成的程序250实现的用户预期结果,如前所述。

方法900包括确定针对第一输入数据串的第一组逻辑模式(动作930)并且确定针对第二输入数据串的第二组逻辑模式(动作940)。例如,图分析器234可以分析输入数据以确定第一和第二组逻辑模式,如前所述。第一和第二组逻辑模式可以包括在第一和第二输入串两者中找到的共有模式,诸如数据串之间共有间隔、数据串的共有位置、在数据串中具有共有空格、或者在数据串的开始或结束处具有共有数据串。

方法900包括将针对第一输入数据串的第一组逻辑模式组织成第一图,第一图具有第一节点和连接第一图的第一节点的第一边(动作950),并且将针对第二输入数据串的第二组逻辑模式组织成第二图,第二图具有第二节点和连接第二图的第二节点的第二边(动作960)。例如,图组织器235(具体地是图生成器236)可以将这些组的逻辑模式组织成具有节点和边的图,诸如图4、图5和图7B中所示的图。在一些实施例中,可以针对输入数据215的每个条目做出图。

方法900包括将第一图和第二图相交以生成相交的第三图,相交的第三图具有第三节点和连接第三图的第三节点的第三边(动作970)。例如,相交模块320可以将在动作950和960中生成的图相交成相交的图,如图6和图7C所示。

方法900包括基于一个或多个用户输入示例来对第三节点和第三边进行排序(动作980)。例如,如先前所解释的,排序模块245可以通过寻找从开始节点到最终节点的最长路径来对相交的图进行排序,由边表示或映射的子串表达式将产生由用户输入示例221、222和223指定的结果。

方法900最后包括基于排序来生成将输出用户确定的结果的一个或多个程序(动作990)。例如,程序生成模块240可以以先前描述的方式来生成将输出用户预期或确定的结果的程序250。

对于本文中公开的过程和方法,可以以不同的顺序实施在过程和方法中执行的操作。此外,概述的操作仅作为示例提供,并且在不偏离所公开的实施例的本质的情况下,一些操作可以是可选的,可以被组合成更少的步骤和操作,可以用另外的操作来补充,或者可以扩展到附加操作。

示例条款

示例A,一种计算系统,包括:至少一个处理器;以及存储有计算机可执行指令的至少一个存储设备,所述计算机可执行指令在由所述至少一个处理器执行时使所述计算系统执行以下操作:访问一组输入数据;接收针对所述一组输入数据的一个或多个用户输入示例,所述一个或多个用户输入示例指示应当被实现以符合用户确定的结果的输出;分析所述一组输入数据以标识所述一组输入数据共有的一个或多个逻辑模式;以及基于与所述一个或多个用户输入示例相一致的一组所述一个或多个逻辑模式来生成将输出所述用户确定的结果的一个或多个程序。

示例B,如示例A所述的系统,其中分析所述数据以标识所述一个或多个逻辑模式包括将所述一组输入数据中的每个条目组织成数据图,所述数据图具有一个或多个节点和连接所述一个或多个节点的边。

示例C,如示例B所述的系统,其中所述一个或多个节点表示所述一组输入数据的数据串的索引。

示例D,如示例B所述的系统,其中所述边表示能够用于生成将产生所述用户确定的结果的所述一个或多个程序的子串表达式。

示例E,如示例B所述的系统,其中基于所述一个或多个逻辑模式来生成所述一个或多个程序包括确定所述图的最长路径,所述最长路径包括最大数目的节点和连接所述节点的边。

示例F,如示例A所述的系统,其中基于所述一组一个或多个逻辑模式来生成所述一个或多个程序包括对所述一个或多个逻辑模式进行排序,以确定与排序最高的一个或多个逻辑模式相对应的子串表达式,所述子串表达式是将产生所述用户确定的结果的所述一个或多个程序的子串表达式。

示例G,如示例A所述的系统,其中所述输入数据是半结构化文本数据。

示例H,如示例A所述的系统,其中所述一组一个或多个逻辑模式表示能够用于生成将产生所述用户确定的结果的所述一个或多个程序的子串表达式。

示例I,一种计算机实现的方法,用于由基础示例程序(PBE)计算系统基于输入数据的共有逻辑模式来生成程序,所述程序基于用户输入示例来输出用户预期结果,所述方法包括:在所述PBE计算系统的处理器处接收用户输入数据的动作,所述用户输入数据至少包括第一输入数据串和第二输入数据串;接收所述用户输入数据的一个或多个用户输入示例的动作,所述一个或多个用户输入示例指示应当被实现以符合用户确定的结果的输出;确定针对所述第一输入数据串的第一组逻辑模式的动作;确定针对所述第二输入数据串的第二组逻辑模式的动作;将针对所述第一输入数据串的所述第一组逻辑模式组织成第一图的动作,所述第一图具有第一节点和连接所述第一图的所述第一节点的第一边;将针对所述第二输入数据串的所述第二组逻辑模式组织成第二图的动作,所述第二图具有第二节点和连接所述第二图的所述第二节点的第二边;将所述第一图和所述第二图相交以生成相交的第三图的动作,所述相交的第三图具有第三节点和连接所述第三图的所述第三节点的第三边;基于所述一个或多个用户输入示例来对所述第三节点和所述第三边进行排序的动作;以及基于所述排序来生成将输出所述用户确定的结果的一个或多个程序的动作。

示例J,如示例I所述的方法,其中所述第一节点和所述第二节点分别表示所述第一输入数据串的索引和所述第二输入数据串的索引。

示例K,如示例I所述的方法,其中所述第一边和所述第二边表示能够用于生成将产生所述用户确定的结果的所述一个或多个程序的子串表达式。

示例L,如示例I所述的方法,其中基于所述一个或多个用户输入示例来对所述第三节点和所述第三边进行排序的动作包括:确定所述相交的第三图的最长路径的动作,所述最长路径包括最大数目的第三节点和连接所述节点的第三边。

示例M,如示例I所述的方法,其中确定针对所述第一输入数据串的所述第一组逻辑模式的动作或者确定针对所述第二组逻辑模式的动作包括:访问表示所述第一组逻辑模式或所述第二组逻辑模式的一组经预编程的子串表达式的动作;以及使用所述一组经预编程的子串表达式来标识所述第一组逻辑模式或所述第二组逻辑模式的动作。

示例N,如示例I所述的方法,其中确定针对所述第一输入数据串的所述第一组逻辑模式的动作或者确定针对所述第二组逻辑模式的动作包括:基于在所述第一输入数据串或所述第二输入数据串中找到的一个或多个共有模式来标识所述第一组逻辑模式或所述第二组逻辑模式的动作。

示例O,如示例I所述的方法,其中所述用户输入数据包括第三数据输入串,所述方法还包括:确定针对所述第三输入数据串的第三组逻辑模式的动作;将针对所述第三输入数据串的所述第三组逻辑模式组织成第四图的动作,所述第四图具有第四节点和连接所述第四图的所述第四节点的第四边;以及将所述第四图与所述第一图和所述第二图相交以生成所述相交的第三图的动作。

示例P,如示例O所述的方法,其中所述第四节点表示所述第三输入数据串的索引,并且所述第四边表示能够用于生成将产生所述用户确定的结果的所述一个或多个程序的子串表达式。

示例Q,一种包括一个或多个计算机可读介质的计算机程序产品,所述一个或多个计算机可读介质上具有计算机可执行指令,所述计算机可执行指令被构造为使得在由计算系统的一个或多个处理器执行时配置所述计算系统以执行用于基于输入数据的共有逻辑模式来生成程序的方法,所述程序基于用户输入示例来输出用户预期结果,所述方法包括:访问一组输入数据;接收针对所述一组输入数据的一个或多个用户输入示例,所述一个或多个用户输入示例指示应当被实现以符合用户确定的结果的输出;分析所述一组输入数据以标识所述一组输入数据共有的一个或多个逻辑模式;以及基于与所述一个或多个用户输入示例相一致的一组所述一个或多个逻辑模式,来生成将输出所述用户确定的结果的一个或多个程序。

示例R,如示例Q所述的计算机程序产品,其中分析所述数据以标识所述一个或多个逻辑模式包括将所述一组输入数据中的每个条目组织成数据图,所述数据图具有一个或多个节点和连接所述一个或多个节点的边。

示例S,如示例R所述的计算机程序产品,其中所述一个或多个节点表示所述一组输入数据的数据串的索引,并且其中所述边表示能够用于生成将产生所述用户确定的结果的所述一个或多个程序的子串表达式。

示例T,如示例R所述的计算机程序产品,其中基于所述一个或多个逻辑模式来生成所述一个或多个程序包括确定所述图的最长路径,所述最长路径包括最大数目的节点和连接所述节点的边的。

在不脱离其精神或基本特征的情况下,可以以其他具体形式来实施本发明。所描述的实施例在所有方面仅被认为是说明性的而非限制性的。因此,本发明的范围由所附权利要求而不是由前面的描述来指示。在权利要求的等同物的含义和范围内的所有变化都将被包含在其范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1