CN113424177A - 使用上下文针对负例的正则表达式生成 - Google Patents

使用上下文针对负例的正则表达式生成 Download PDF

Info

Publication number
CN113424177A
CN113424177A CN202080014445.9A CN202080014445A CN113424177A CN 113424177 A CN113424177 A CN 113424177A CN 202080014445 A CN202080014445 A CN 202080014445A CN 113424177 A CN113424177 A CN 113424177A
Authority
CN
China
Prior art keywords
regular expression
data
negative
character sequences
user
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.)
Pending
Application number
CN202080014445.9A
Other languages
English (en)
Inventor
M·马拉克
L·E·李瓦斯
M·L·克莱德尔
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.)
Oracle International Corp
Original Assignee
Oracle International Corp
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 US16/904,298 external-priority patent/US11941018B2/en
Application filed by Oracle International Corp filed Critical Oracle International Corp
Publication of CN113424177A publication Critical patent/CN113424177A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • User Interface Of Digital Computer (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

公开了用于生成的正则表达式的技术。在一些实施例中,正则表达式生成器可以接收包括一个或多个字符序列的输入数据。正则表达式生成器可以将字符序列转换成正则表达式代码和/或跨度数据结构的集合。正则表达式生成器可以识别由正则表达式代码和/或跨度的集合共享的最长公共子序列,并且可以基于最长公共子序列生成正则表达式。可以使用负例来生成正则表达式。可以确定来自负例的上下文以生成正则表达式。

Description

使用上下文针对负例的正则表达式生成
相关申请的交叉引用
本申请是2019年6月11日提交的标题为“USER INTERFACE FOR REGULAREXPRESSION GENERATION”的美国专利申请No.16/438,327的部分继续申请,该申请依据35U.S.C.§119(e)要求2018年6月13日提交的标题为“AUTOMATED GENERATION OF REGULAREXPRESSIONS”的美国临时专利申请No.62/684,498的优先权,并且依据35 U.S.C.§119(e)要求2018年10月22日提交的标题为“AUTOMATED GENERATION OF REGULAR EXPRESSIONS”的美国临时专利申请No.62/749,001的优先权。本申请还依据35 U.S.C.§119(e)要求2019年6月24日提交的标题为“AUTOMATED GENERATION OF REGULAR EXPRESSIONS”的美国临时专利申请No.62/865,797的优先权。其全部内容通过引用并入本文用于所有目的。
背景技术
大数据分析系统可以用于预测分析、用户行为分析和其它高级数据分析。但是,在可以有效地执行任何数据分析以提供有用的结果之前,可能需要将初始数据集格式化为干净和整理(curated)的数据集。这种数据载入通常给基于云的数据储存库和其它大数据系统带来挑战,在这些系统中,来自各种不同数据源和/或数据流的数据可能被编译到单个数据储存库中。此类数据可以包括多种不同格式的结构化数据、根据不同数据模型的半结构化数据,甚至非结构化数据。此类数据的储存库通常包括各种不同格式和结构的数据表示,并且也可能包括重复数据和错误数据。当针对报告、预测建模和其它分析任务分析这些数据储存库时,初始数据集的较差信噪比可能会导致不准确或无用的结果。
数据格式化和预处理问题的许多当前解决方案包括手动和自组织(ad hoc)处理来清理和整理数据,以便在执行数据分析之前将数据操纵成通用格式。虽然这些手动处理对于某些较小的数据集可能是有效的,但在尝试预处理和格式化大型数据集时,此类处理可能是低效且不切实际的。
发明内容
本文描述的方面提供用于生成正则表达式的各种技术。如本文所使用的,“正则表达式”可以指定义模式的字符序列,其可以用于搜索较长的输入文本串内的匹配。在一些实施例中,可以使用符号通配符匹配语言来组成正则表达式,并且可以使用正则表达式定义的模式来匹配字符串和/或从作为输入提供的字符串中提取信息。在本文描述的各种实施例中,实现为数据处理系统的正则表达式生成器可以用于接收和显示输入文本数据、经由客户端用户界面接收对输入文本的特定字符子集的选择,并且然后基于所选择的字符子集生成一个或多个正则表达式。在生成一个或多个正则表达式之后,可以使用正则表达式引擎将正则表达式的模式与一个或多个数据集进行匹配。在各种实施例中,匹配正则表达式的数据可以被提取、重新格式化或修改等。在一些情况下,可以基于匹配正则表达式的数据创建附加的列、表或其它数据集。
根据本文描述的某些方面,经由数据处理系统实现的正则表达式生成器可以基于由一个或多个正则表达式代码的不同集合共享的所确定的最长公共子序列(LCS)来生成正则表达式。正则表达式代码(也可以被称为类别代码)可以包括,例如,用于英文字母表的字母的L、用于数字的N、用于空格的Z、用于标点符号的P,以及用于其它符号的S。每组一个或多个正则表达式代码可以从通过用户界面作为输入数据接收的一个或多个字符的不同序列转换。LCS中不包括的正则表达式代码可以被表示为可选和/或替代。在一些实施例中,正则表达式代码可以与该正则表达式代码的最少出现次数相关联。附加地或替代地,正则表达式代码可以与正则表达式代码的最大出现次数相关联。例如,一组类别代码可以包括L<0,1>,以指示LCS的特定部分如果有的话至多一次包括某个字母。如下文更详细讨论的,将输入数据概括为中间正则表达式代码(IREC)可以提供各种技术优势,包括使用非常少的输入数据、使得能够近乎即时地生成不会经历尚未被看到的数据中的假阳性匹配或假阴性匹配的正则表达式。
根据本文描述的附加方面,可以基于包括三个或更多个字符序列的输入数据来生成正则表达式。当三个或更多个字符序列被识别为输入数据时,识别字符序列的LCS的正则表达式生成器可能导致运行时间呈指数增长。为了以高效的方式识别所有字符序列的LCS,正则表达式生成器可以对两个字符序列的每个不同组合执行LCS算法。基于LCS算法的结果可以生成全连接图,其中每个图节点表示不同的字符序列,并且每个图边的长度对应于定义图边的节点的LCS。然后可以通过针对全连接图执行最小生成树的深度优先遍历来确定选择字符序列的顺序。
本文描述的其它方面涉及基于包括正字符序列示例和负字符序列示例两者的输入生成正则表达式。正例可以指与要生成的正则表达式匹配的字符序列,而负例可以指不与要生成的正则表达式匹配的字符序列。在一些实施例中,当正例和负例都被接收时,正则表达式生成器可以识别鉴别器,或者将(一个或多个)正例与(一个或多个)负例区分开的一个或多个字符的最短子序列。所选择的鉴别器可以是最短的序列(例如,用类别代码表达),并且可以是正或者负,使得正例将匹配而负例将不匹配。然后可以将鉴别器硬编码到由正则表达式生成器生成的正则表达式中。在一些情况下,最短子序列可以被包含在(一个或多个)负例的前缀或后缀部分中。
本文描述的附加方面涉及一个或多个用户界面,通过该用户界面可以提供输入数据以生成正则表达式。在一些实施例中,可以在通信地耦合到正则表达式生成器服务器的客户端设备处显示用户界面。用户界面可以由服务器、由客户端设备或由在服务器和客户端处执行的软件组件的组合以编程方式生成。经由用户界面接收的输入数据可以对应于一个或多个字符序列的用户选择,其可以表示正例或负例。在一些情况下,用户界面可以支持包括对第二字符序列内的第一字符序列的选择的输入数据。例如,用户可以在较大的先前突出显示的字符序列中突出显示一个或多个字符,并且第二用户选择可以为较大的第一用户选择提供上下文。这使得输入数据能够以更大的特异性提供给正则表达式生成器,并为正则表达式生成器提供“上下文”,使得它可以生成避免假阳性的正则表达式。响应于用户经由用户界面对字符序列的选择,正则表达式生成器可以生成并显示正则表达式。例如,当用户突出显示第一字符序列时,正则表达式生成器可以生成并显示与第一字符序列匹配的正则表达式,以及其它类似的字符序列(例如,与用户对匹配序列的意图保持一致)。当用户突出显示第二字符序列时,正则表达式生成器可以生成更新后的正则表达式,该正则表达式包含第一和第二字符序列。然后,当用户突出显示第三字符序列(例如,在第一序列或第二序列内)时,正则表达式生成器可以再次更新正则表达式,依此类推。
根据本文描述的附加方面,正则表达式可以基于一个或多个输入序列示例中的最长公共子序列生成,但也可以处理仅出现在一些示例中的字符。为了处理仅出现在一些输入示例中的字符,可以定义跨度(span),其中跟踪正则表达式代码的最小和最大出现次数。如果在所有给定的输入示例中都不存在跨度,那么可以将最小出现次数设置为零。然后可以将这些最小和最大数字映射到正则表达式多重性语法。最长公共子序列(LCS)算法可以在从输入示例导出的字符跨度上运行,包括不会在每个输入示例中出现的“可选”跨度(例如,最小长度为零)。如以下所讨论的,在LCS算法的执行期间可以合并连续的跨度。在这种情况下,当携带的额外可选跨度最终连续出现时,LCS算法也可以在这些可选跨度上递归运行。
本文描述的其它方面涉及组合搜索,其中由正则表达式生成器执行的LCS算法可以运行多次以生成“正确”的正则表达式(例如,正确匹配所有给定正例并正确排除所有给定负例的正则表达式),和/或生成从中可以选择最理想或最佳正则表达式的多个正确的正则表达式。在一些实施例中,通常可以对输入示例从右到左执行LCS算法以生成正则表达式。但是,为了比较和找到替代的正则表达式,LCS算法可以在输入示例上向后单独执行(例如,在从左到右的方向)。例如,作为用户输入接收的示例字符序列可以在它们运行通过LCS算法之前被反转,然后来自LCS算法的结果可以被反转回来(包括原始文本片段)。此外,在一些实施例中,LCS算法可以由正则表达式生成器以通常的字符序列顺序和相反的顺序运行多次,其中可以锚定在行的开头、锚定在行的末尾,以及在行的开头或末尾都没有锚定。因此,在一些情况下,LCS算法可以被至少执行这六次,并且可以从这些执行中选择最短的成功正则表达式。
附图说明
图1是图示其中可以实现各种实施例的、用于生成正则表达式的示例性分布式系统的组件的框图。
图2是图示根据本文描述的一个或多个实施例的用于基于经由用户界面接收的输入来生成正则表达式的处理的流程图。
图3是图示根据本文描述的一个或多个实施例的用于在正则表达式代码集上使用最长公共子序列(LCS)算法生成正则表达式的处理的流程图。
图4是根据本文描述的一个或多个实施例的用于基于两个字符序列示例在正则表达式代码集上使用最长公共子序列(LCS)算法生成正则表达式的示例图。
图5是图示根据本文描述的一个或多个实施例的用于在较大的正则表达式代码集上使用最长公共子序列(LCS)算法生成正则表达式的处理的流程图。
图6是根据本文描述的一个或多个实施例的用于基于五个字符序列示例在正则表达式代码集上使用最长公共子序列(LCS)算法生成正则表达式的示例图。
图7是图示了根据本文描述的一个或多个实施例的用于在较大的正则表达式代码集上确定最长公共子序列(LCS)算法的执行顺序的处理的流程图。
图8A和图8B示出了根据本文描述的一个或多个实施例的全连接图和全连接图的最小生成树表示,其用于在较大的正则表达式代码集上确定最长公共子序列(LCS)算法的执行顺序。
图9是图示根据本文描述的一个或多个实施例的用于基于正和负字符序列示例生成正则表达式的处理的流程图。
图10A和图10B是根据本文描述的一个或多个实施例的示例用户界面屏幕,其示出了基于正和负字符序列示例的正则表达式的生成。
图11是图示根据本文描述的一个或多个实施例的用于基于在用户界面内接收的用户数据选择来生成正则表达式的处理的流程图。
图12是图示根据本文描述的一个或多个实施例的用于经由在用户界面内接收的用户数据选择基于捕获组来生成正则表达式和提取数据的处理的流程图。
图13是根据本文描述的一个或多个实施例的示出表格数据显示的示例用户界面屏幕。
图14和图15是根据本文描述的一个或多个实施例的示例用户界面屏幕,其图示了基于对表格显示中的数据的选择来生成正则表达式和捕获组。
图16A和图16B是根据本文描述的一个或多个实施例的示例用户界面屏幕,其图示了基于从表格显示中选择正例和负例来生成正则表达式。
图17是根据本文描述的一个或多个实施例的另一个示例用户界面屏幕,其图示了基于对表格显示中的数据的选择来生成正则表达式和捕获组。
图18是图示根据本文描述的一个或多个实施例的用于使用最长公共子序列(LCS)算法生成包括可选跨度的正则表达式的处理的流程图。
图19是根据本文描述的一个或多个实施例的用于使用最长公共子序列(LCS)算法生成包括可选跨度的正则表达式的示例图。
图20是图示根据本文描述的一个或多个实施例的基于最长公共子序列(LCS)算法的组合执行来生成正则表达式的处理的流程图。
图21是图示其中可以实现本发明的各种实施例的示例性分布式系统的组件的框图。
图22是图示系统环境的组件的框图,通过该系统环境,由本发明的实施例提供的服务可以作为云服务提供。
图23是图示可以在其中实现本发明的实施例的示例性计算机系统的框图。
图24图示了根据一些示例实施例的正则表达式生成器。
图25A和图25B图示了根据一些示例实施例的用于实现拆分(split)命令的用户界面。
图26图示了根据一些示例实施例的显示对数据集的拆分命令的结果的用户界面。
图27图示了根据一些示例实施例的用于执行拆分命令的方法的流程图。
图28图示了根据一些示例实施例的用于实现删除命令的用户界面。
图29图示了根据一些示例实施例的显示对数据集的删除命令的结果的用户界面。
图30图示了根据一些示例实施例的用于执行删除命令的方法的流程图。
图31图示了根据一些示例实施例的用于实现混淆(obfuscate)命令的用户界面。
图32图示了根据一些示例实施例的显示对数据集的混淆命令的结果的用户界面。
图33图示了根据一些示例实施例的用于执行混淆命令的方法的流程图。
图34和35图示了根据一些示例实施例的用于实现替换命令的用户界面。
图36图示了根据一些示例实施例的显示对数据集的替换命令的结果的用户界面。
图37图示了根据一些示例实施例的用于执行替换命令的方法的流程图。
图38和图39图示了根据一些示例实施例的用于实现过滤器行命令的用户界面。
图40图示了根据一些示例实施例的显示对数据集的过滤行命令的结果的用户界面。
图41图示了根据一些示例实施例的用于执行过滤行命令的方法的流程图。
图42图示了根据一些示例实施例的以单级模式显示数据集的视图的用户界面。
图43图示了根据一些示例实施例的以嵌套完全控制模式显示突出显示的数据的用户界面。
图44图示了根据一些示例实施例的以嵌套完全控制模式显示突出显示的数据的用户界面。
图45图示了根据一些示例实施例的用于提供示例的用户界面。
图46图示了根据一些示例实施例的显示更新后的生成的regex的用户界面。
图47图示了根据一些示例实施例的显示替代数据突出显示的用户界面。
图48图示了根据一些示例实施例的显示更新后的生成的regex的用户界面。
图49是根据一些示例实施例的用于执行多突出显示的方法的流程图。
图50图示了根据一些示例实施例的用于提供负例的方法的流程图。
图51图示了根据一些示例实施例的用于根据负例确定上下文的方法的流程图。
图52图示了根据一些示例实施例的用于基于跨度突出显示对齐生成正则表达式的图。
图53图示了根据一些示例实施例的用于执行跨度突出显示对齐的方法的流程图。
图54图示了根据一些示例实施例的跟踪跨度的方法的流程图。
图55图示了根据一些示例实施例的显示标点跨度和符号跨度的用户界面。
具体实施方式
在以下描述中,为了解释的目的,阐述了许多具体细节以提供对本发明的各种实施例的透彻理解。但是,对于本领域技术人员显而易见的是,可以在没有这些具体细节中的一些的情况下实践本发明的实施例。在其它情况下,众所周知的结构和设备以框图形式显示。
随后的描述仅提供示例性实施例,并不旨在限制本公开的范围、适用性或配置。相反,示例性实施例的随后描述将为本领域技术人员提供用于实现示例性实施例的使能描述。应该理解的是,在不脱离如所附权利要求中阐述的本发明的精神和范围的情况下,可以对元件的功能和布置进行各种改变。
在以下描述中给出了具体细节以提供对实施例的透彻理解。但是,本领域普通技术人员将理解,可以在没有这些具体细节的情况下实践实施例。例如,电路、系统、网络、处理和其它组件可以以框图形式显示为组件,以免在不必要的细节中模糊实施例。在其它情况下,可能在没有不必要的细节的情况下示出了众所周知的电路、处理、算法、结构和技术以避免模糊实施例。
此外,应该注意的是,各个实施例可以被描述为处理,该处理被描绘为流程图(flowchart)、流图(flow diagram)、数据流图、结构图或框图。虽然流程图可以将操作描述为顺序处理,但许多操作可以并行或并发执行。此外,可以重新布置操作的顺序。处理在其操作完成时终止,但可能具有图中未包含的附加步骤。处理可以对应于方法、函数、过程、子例程、子程序等。当处理对应于函数时,它的终止可以对应于函数返回到调用函数或主函数。
术语“计算机可读介质”包括但不限于非暂态介质,诸如便携式或固定存储设备、光存储设备以及能够存储、包含或携带(一个或多个)指令和/或数据的各种其它介质。代码段或计算机可执行指令可以表示过程、函数、子程序、程序、例程、子例程、模块、软件包、类或指令、数据结构或程序语句的任意组合。代码段可以通过传递和/或接收信息、数据、自变量、参数或存储器内容而耦合到另一个代码段或硬件电路。信息、自变量、参数、数据等可以经由任何合适的方式传递、转发或传输,包括存储器共享、消息传递、令牌传递、网络传输等。
此外,实施例可以通过硬件、软件、固件、中间件、微代码、硬件描述语言或其任何组合来实现。当以软件、固件、中间件或微代码实现时,执行必要任务的程序代码或代码段可以存储在机器可读介质中。(一个或多个)处理器可以执行必要的任务。
本文描述了用于生成与在一个或多个输入数据示例中识别出的模式对应的正则表达式的各种技术(例如,方法、系统、存储可由一个或多个处理器执行的多个指令的非暂态计算机可读存储器等)。在某些实施例中,响应于接收对输入数据的选择,输入数据中的一个或多个模式被自动识别并且正则表达式(或简称为“regex”)可以被自动且高效地生成以表示识别出的模式。这样的模式可以基于字符序列(例如,字母、数字、空格、标点、符号等的序列)。本文描述了各种实施例,包括方法、系统、存储程序、代码或可由一个或多个处理器执行的指令的非暂态计算机可读存储介质等。
在一些实施例中,可以使用符号通配符匹配语言来组成正则表达式,以便匹配字符串和/或从作为输入提供的字符串中提取信息。例如,第一个示例正则表达式[A-Za-z]{3}\d?\d,\d\d\d\d可以匹配某些日期(例如,2018年4月3日),并且第二个示例正则表达式[A-Za-z]{3}\d?\d,(\d\d\d\d)可以用于从匹配的日期中提取年份。正则表达式生成器系统接收的输入数据可以包括例如一个或多个“正”数据示例和/或一个或多个“负”数据示例。如本文所使用的,正例可以指作为输入接收的将通过基于该输入生成的正则表达式被匹配的字符序列。作为对照,负例可以指将不通过基于输入生成的正则表达式被匹配的输入字符序列。
可以在本文描述的各种实施例和示例内实现许多技术优点。例如,本公开中描述的某些技术可以提高正则表达式生成处理的速度和效率(例如,可以在不到一秒的时间内生成regex解(regex solution),并且用户界面可以适合交互式实时使用)。本文描述的各种技术也可以是确定性的、可以不需要训练数据、可以在不需要任何初始正则表达式输入的情况下产生解、并且可以是完全自动化的(例如,在不需要任何人工干预的情况下生成正则表达式)。此外,关于可以被有效处理的数据输入的类型,本文描述的各种技术不需要受到限制,并且这样的技术可以提高结果产生的正则表达式的人类可读性。
本文描述的某些实施例包括最长公共子序列(LCS)算法的一次或多次执行。LCS算法可以在一些上下文中用作差异引擎(例如,Unix“diff”实用程序背后的引擎),它们被配置为确定和显示两个文本文件之间的差异。在一些实施例中,输入数据(例如,串和其它字符序列)可以被转换成抽象令牌,这些抽象令牌然后可以作为输入被提供给LCS算法。这样的抽象令牌可以是例如基于表示正则表达式字符类的正则表达式代码(例如,Loogle代码或其它字符类代码)的令牌。这样的代码的各种不同示例是可能的,并且在本文中可以被称为“正则表达式代码”或“中间正则表达式代码”(IREC)。例如,可以将输入字符序列“May 3”转换成IREC代码“LLLZN”,之后可以将令牌化的串与其它令牌化的串一起提供给LCS算法。在一些实施例中,输入字符序列不共同具有的IREC(例如,正则表达式代码)可以作为可选的(例如,可选的跨度)出现在最终生成的正则表达式中。在某些实施例中,正则表达式代码可以是基于在https://www.regular-expressions.info/unicode.html#category处显示的Unicode类别代码的类别代码,或在http://unicode.org/reports/tr18/#General_Category_Property处的通用类别属性代码。例如,代码L可以表示字母,代码N可以表示数字,代码Z可以表示空格,代码S可以表示符号,代码P可以表示标点符号,等等。例如,代码L可以对应于Unicode\p{L},并且代码N可以对应于Unicode\p{N}。这允许从LCS输出到正则表达式的一对一映射(例如,\pN\pN\pZ\pL\pL可以匹配“10am”),这可能提供人类可读性的优势。此外,这些不同的类别可以是不相交的、或者是相互排斥的。即,在这个示例中,类别L、N、Z、P和S可以不相交,使得类别的成员之间可以没有重叠。
在各种实施例中可以实现附加的技术优势,包括基于正则表达式代码(例如,类别代码)、跨度等的使用更高效地生成正则表达式。通过使用这样的代码,不必在LCS算法成功地将输入串中的所有或基本上所有字符识别为不同时浪费计算资源。本文的各种实施例提供的进一步技术优势包括提高了生成的正则表达式的可读性,以及支持正例和负例作为输入数据,并且提供各种有利的用户界面特征(例如,允许用户突出显示较大字符序列或数据单元格(data cell)内的文本片段以进行提取)。
I.总体概述
本文公开的各种实施例涉及正则表达式的生成。在一些实施例中,被配置为正则表达式生成器的数据处理系统可以通过识别由不同的正则表达式代码集(例如,类别代码)共享的最长公共子序列(LCS)来生成正则表达式。每个正则表达式代码集可以从作为输入数据通过用户界面接收的字符序列转换。本文描述的技术优势中,将输入数据抽象为中间代码(例如,正则表达式代码、跨度等)可以使得能够使用非常少的输入数据高效地生成正则表达式。
图1是图示其中可以实现各种实施例的、用于生成正则表达式的示例性分布式系统的组件的框图。如该示例中所示,客户端设备120可以与正则表达式生成器服务器110(或正则表达式生成器)通信并与用户界面交互以检索和显示表格数据,并基于经由用户界面对输入数据(例如,示例)的选择生成正则表达式。在一些实施例中,客户端设备120可以经由客户端web浏览器121和/或客户端侧正则表达式应用122(例如,接收/使用由服务器110生成的正则表达式的客户端侧应用)与正则表达式生成器110通信。在正则表达式生成器110内,来自客户端设备120的请求可以在网络接口处通过各种通信网络接收并且由应用编程接口(API)处理,诸如REST API 112。具有正则表达式生成器110的用户界面数据模型生成器114组件可以提供服务器侧编程组件和逻辑以生成和渲染本文描述的各种用户界面特征。这样的特征可以包括允许用户从数据储存库130检索和显示表格数据、选择输入数据示例以发起正则表达式的生成以及基于所生成的正则表达式修改和/或提取数据的功能。在这个示例中,可以实现正则表达式生成器组件116以生成正则表达式,包括将输入字符序列转换成正则表达式代码和/或跨度、对输入数据执行算法(例如,LCS算法)以及生成/简化正则表达式。由正则表达式生成器116生成的正则表达式可以由REST服务112发送到客户端设备120,其中客户端浏览器121(或对应的客户端侧应用组件122)上的Javascript代码然后可以针对在浏览器中渲染的电子表格列中的每个单元格应用正则表达式。在其它情况下,可以在服务器侧实现单独的正则表达式引擎组件以将生成的正则表达式与显示在用户界面上和/或存储在数据储存库130中的其它数据内的表格数据进行比较,以便识别服务器侧的匹配数据/非匹配数据。在各种实施例中,匹配/非匹配数据可以在用户界面内被自动选择(例如,突出显示),并且可以被选择用于提取、修改、删除等。经由用户界面基于正则表达式的生成提取或修改的任何数据可以被存储在一个或多个数据储存库130中。此外,在一些实施例中,生成的正则表达式(和/或LCS算法的对应输入)可以被存储在正则表达式库135中以供将来检索和使用。在一些实施例中,生成的正则表达式实际上不需要被存储在“库”中,而是可以被并入到“变换脚本”中。例如,如美国专利No.10,210,246(其出于所有目的通过引用并入本文)中更详细描述的,此类变换脚本可以包括可以由一个或多个处理单元执行以变换接收到的数据的程序、代码或指令。变换脚本动作的其它可能示例可以包括“重命名列”、“大写列数据”或“从名字推断性别并用性别创建新列”等。
图2是图示根据本文描述的一个或多个实施例的用于基于经由用户界面接收的输入来生成正则表达式的处理200的流程图。在步骤201中,正则表达式生成器110可以从客户端设备120接收访问正则表达式生成器用户界面并经由用户界面查看特定数据的请求。步骤201中的请求可以经由REST API 112和/或web服务器、认证服务器等接收,并且用户的请求可以被解析和认证。例如,企业或组织内的用户可以访问正则表达式生成器110以分析和/或修改交易数据、客户数据、性能数据、预测数据和/或可以被存储在组织的数据储存库130中的任何其它类别的数据。在步骤202中,正则表达式生成器110可以经由支持基于所选择的输入数据生成正则表达式的用户界面来检索和显示所请求的数据。下面详细描述这种用户界面的各种实施例和示例。
在步骤203中,用户可以从正则表达式生成器110提供的用户界面中显示的数据中选择一个或多个输入字符序列。在一些实施例中,可以在用户界面内以表格形式显示数据,包括具有特定数据类型和/或数据类别的标记列。在这种情况下,步骤203中输入数据的选择可以对应于用户选择数据单元格,或者选择(例如,突出显示)数据单元格内的单个文本片段。但是,在其它实施例中,正则表达式生成器110可以经由用户界面支持半结构化和非结构化数据的检索和显示,并且用户可以通过从半结构化或非结构化数据中选择字符序列来选择用于正则表达式生成的输入数据。如下面示例中所描述的,用户从显示的表格数据中选择输入字符序列只是一个示例用例。在其它示例中,用户(例如,可能试图为Linux命令行工具grep、sed或awk等编写正则表达式的软件开发人员或高级用户)可以在示例中从头开始键入而不是从电子表格中挑选它们。
在步骤204中,正则表达式生成器110可以基于用户在步骤203中选择的输入数据生成一个或多个正则表达式。在步骤205中,正则表达式生成器110可以更新用户界面,例如,以显示生成的正则表达式和/或突出显示所显示数据内的匹配/不匹配数据。在一些实施例中可以是可选的步骤206中,用户界面可以支持允许用户基于生成的正则表达式修改底层数据的功能。例如,用户界面可以支持允许用户基于特定数据字段与正则表达式匹配还是不匹配来从表格数据中过滤、修改、删除或提取特定数据字段的特征。过滤或修改数据可以包括修改存储在储存库130中的底层数据,并且在一些情况下,提取的数据可以作为新列和/或新表被存储在储存库130中。
虽然这些步骤图示了示例用户与正则表达式生成器110的用户界面的交互的一般和高级概述,但是在其它实施例中可以支持各种附加特征和功能。例如,在一些实施例中,正则表达式代码(或类别代码)可以与代码出现的最少次数相关联。附加地或替代地,正则表达式代码可以与代码的最大出现次数相关联。作为示例,正则表达式代码集可以包括代码L<0,1>,以指示LCS的特定部分包括至少零次并且至多一次的字母。
此外,在一些实施例中,输入数据可以包括三个或更多个字符序列。在这样的实施例中,可以使用技术来确定在三个或更多个字符序列上执行LCS算法的顺序,使得可以以高效的方式生成结果产生的正则表达式以避免由三个或更多个输入字符序列引起的运行时间的指数增加。正则表达式生成器110可以替代地一次对两个字符序列执行LCS算法,并且可以基于图来确定选择该对字符序列的顺序。例如,全连接图可以指示应该为Sequence1和Sequence3执行LCS算法的第一次执行(例如,LCS1),然后应该为LCS1和Sequence2执行LCS算法的第二次执行(例如,LCS2),依此类推。图可以是全连接图,其中节点表示字符序列,并且连接节点的边表示由连接节点共享的LCS的长度。图中的每个节点可以与图中的每个其它节点相连,并且选择字符序列的顺序可以通过对图执行最小生成树的深度优先遍历来确定。
在还有的实施例中,可以以多种不同的方式经由用户界面提供输入数据。例如,输入数据可以指示字符集合的第二用户选择内的一个或多个字符的第一用户选择。例如,用户可以突出显示先前突出显示的字符集合内的字符。因此,第二用户选择可以为第一用户选择提供上下文,这可以使输入数据能够以更大的特异性提供给正则表达式生成器110。在一些实施例中,正则表达式生成器110可以响应于每个用户选择而近实时地生成和显示正则表达式。例如,当用户突出显示第一范围的字符时,正则表达式生成器110可以显示表示第一范围的字符的正则表达式。然后,当用户突出显示第一字符范围内的第二字符范围时,正则表达式生成器110可以更新所显示的正则表达式。
此外,在一些实施例中,正则表达式生成器110可以基于包括正例和负例两者的输入来生成正则表达式。如上所述,正例可以指正则表达式要包含的字符序列,并且负例可以指正则表达式不包含的字符序列。在这种情况下,正则表达式生成器110可以在特定位置处识别区分(一个或多个)正例和(一个或多个)负例的一个或多个字符的最短子序列。最短子序列然后可以被硬编码在由正则表达式生成器110生成的正则表达式内。在各种示例中,最短子序列可以被包括在前缀/后缀部分中,或者在(一个或多个)负例内的中间跨度中。
下面描述根据某些实施例自动生成正则表达式的其它示例。这些示例可以对应于图2中的通用技术的各种具体可能的实现方式,并以由相应系统、硬件或其组合的一个或多个处理单元(例如,处理器、核心)执行的软件(例如,代码、指令、程序等)来实现。软件可以被存储在非暂态存储介质上(例如,存储器设备上)。下面描述的其它示例旨在是说明性的和非限制性的。虽然这些示例描绘了以特定序列或顺序发生的各种处理步骤,但这并非旨在进行限制。在某些替代实施例中,这些步骤可以以一些不同的顺序执行,或者一些步骤也可以并行执行。
在一些示例中,经由用户界面接收的用户输入(例如,步骤203)可以包括一个或多个要通过正则表达式输出匹配的“正例”,以及不通过正则表达式输出匹配的零个或更多个“负例”。可选地,可以突出显示一个或多个正例以选择字符的特定范围(或子序列)。在一些情况下,在步骤204中,可以将经由用户界面接收到的正例转换成正则表达式代码的跨度(例如,字符类别代码,诸如Unicode类别代码)。对于每个正例,可以生成跨度序列。在一些实施例中可以创建图,其中每个顶点对应于跨度序列之一,并且边权重等于在对应于边的端点的那两个跨度序列上执行的LCS算法的输出的长度。可以为图确定最小生成树。例如,在一些实施例中可以使用Prim算法来获得最小生成树。可以对最小生成树执行深度优先遍历以确定遍历顺序,之后可以对遍历的前两个元素执行LCS算法。然后,通过对先前的LCS迭代和下一个当前遍历元素的输出再次执行LCS算法,可以将遍历的每个附加元素按顺序逐个合并到当前的LCS输出中。可以是跨度序列的LCS算法的最终输出然后可以被转换成正则表达式。在一些实施例中,转换可以是一对一的转换,而本文描述的某些可选的修饰(embellishment)可能不对应于一对一的转换。最后,在步骤203中,可以针对经由用户界面接收到的所有正例和负例来测试结果得到的正则表达式。如果任何测试失败,那么可以使用所有正例和任何失败的负例重复上述处理。
II.在正则表达式代码上使用最长公共子序列算法的正则表达式生成
如上所述,本文描述的某些方面涉及基于由与输入数据对应的不同正则表达式代码集共享的最长公共子序列(LCS)的计算来生成正则表达式。
图3是图示根据本文描述的一个或多个实施例的用于在正则表达式代码集上使用LCS算法生成正则表达式的处理300的流程图。在步骤301中,正则表达式生成器110可以接收一个或多个字符序列作为输入数据。如上所述,在一些示例中,输入数据可以对应于从用户界面中显示的表格数据中选择的正例数据,但是应该理解的是,在一些实施例中用户界面是可选的,并且输入数据可以在各种示例中对应于经由任何其它通信通道(例如,非用户界面)接收到的任何字符序列。
在步骤302中,可以将步骤301中接收到的每个字符序列转换成对应的正则表达式代码。在各种实施例中,正则表达式代码可以是Loogle代码、Unicode类别代码或表示正则表达式字符类的任何其它字符类代码。例如,输入字符序列“May 3”可以被转换成Loogle代码“LLLZN”。在一些实施例中,正则表达式代码可以是基于在https://www.regular-expressions.info/unicode.html#category处显示的Unicode类别代码的类别代码。例如,代码L可以表示字母,代码N可以表示数字,代码Z可以表示空格,代码S可以表示符号,代码P可以表示标点符号,等等。例如,代码L可以对应于Unicode\p{L},并且代码N可以对应于Unicode\p{N}。
在步骤303中,可以从在步骤302中生成的正则表达式代码集中确定最长公共子序列。在一些实施例中,可以使用两个正则表达式代码集作为输入来执行LCS算法。LCS算法的执行的各种不同特性(例如,处理方向、锚定、推动空格、合并低基数跨度、在公共令牌上对齐等)可以用于不同实施例中。在步骤304中,可以基于LCS算法的输出生成正则表达式。在一些情况下,步骤304可以包括在正则表达式代码中捕获LCS算法的输出,并将正则表达式代码转换成正则表达式。在步骤305中,正则表达式可以被简化并且例如通过经由用户界面为用户显示正则表达式而输出。
图4是用于基于两个字符序列示例在正则表达式代码集上使用最长公共子序列(LCS)算法生成正则表达式的示例图。因此,图4示出了应用上述图3中讨论的处理的示例。如图4所示,这个示例中的正则表达式是基于“iPhone 5”和“iPhone X”这两个输入串生成的。这个示例中的每个序列都可以被转换成相应的正则表达式代码集。因此,iPhone 5可以被转换成“LLLLLLZN”,并且iPhone X可以被转换成“LLLLLLZL”。如图4所示,然后将这些类别代码作为输入提供给LCS算法,该算法确定两个IREC(或类别代码)集都包含六个L和一个Z。从LCS中排除的类别代码可以被表示为可选的和/或替代的。因此,包含两个字符序列的正则表达式可以被表示如下:\pL{6}\pZ\pN?\pL?。在这个示例中,正则表达式包括Unicode类别代码(例如,用于字母的\pL,用于空格的\pZ和用于数字的\pN)。包含数字6的大括号指示字母的六个实例,问号指示末尾处的数字/字母是可选的。最后,正则表达式生成器可以执行简化处理,在此期间,通过将公共文本片段“iPhone”插入回最终正则表达式中从而替换正则表达式的更广泛的“\pL{6}\”部分来简化该正则表达式。
如该示例所示,正则表达式生成器110接收到的输入串可以被转换成表示正则表达式广泛类别的“正则表达式代码”(其也可以被称为“类别代码”),并且LCS算法可以在那些正则表达式代码上运行。在一些实施例中,Unicode类别代码可以用于正则表达式代码。例如,输入文本串可以被转换成表示regex Unicode广泛类别的代码(例如,用于字母的\pL,用于标点符号的\pP,等等)。图3和图4所示的这种途径可以被称为间接途径。但是,在其它实施例中,可以使用直接途径,其中直接在作为输入接收到的字符序列上运行LCS算法。
在一些实施例中,间接途径可以提供附加的技术优势,因为它不需要大量的训练数据,并且可以用相对较少数量的输入示例生成有效的正则表达式。这是因为间接途径采用启发式方法来减少正则表达式生成中的不确定性,并消除潜在的假阳性和假阴性。例如,在基于输入串“May 3”和“Apr 11”生成正则表达式时,直接途径可能需要每个月至少一个示例来生成匹配日期模式的有效正则表达式。仅依赖于这两个示例,直接途径可能生成“[AM][ap][yr][13]1?”的regex。作为对照,基于Unicode广泛类别的间接途径可以生成更有效的正则表达式“\pL{3}\d{1,2}”。此外,如上所述,本文描述的技术优势之一包括使用非常少的输入数据(甚至潜在地来自单个示例)高效生成正则表达式。例如,关于从单个示例“am”生成正则表达式,启发式方法可以确定是为正则表达式生成“am”还是“\pL\pL”。两者都可以说是正确的,但因此编程的启发式方法可以实现用户偏好和/或标准来确定如何生成最佳正则表达式(例如,它是否也应该匹配“pm”)。
此外,间接途径还可以将生成的正则表达式“\pL{3}\d{1,2}”简化为“[A-Za-z]{3}\d{1,2}”以使其更具人类可读性。这在一些实施例中可能是有益的,诸如当向可能不熟悉用于正则表达式的Unicode表达式的非熟练的正则表达式用户输出时。
此外,在一些实施例中,代替在执行LCS算法时独立对待每个字符,顺序和相等的正则表达式代码可以被转换成跨度数据结构(其也可以被称为跨度)。在一些情况下,跨度可以包括单个正则表达式代码(例如,Unicode广泛类别代码)的表示,以及重复计数范围(例如,最小数量和/或最大数量)。从正则表达式代码到跨度的转换可以促进下面描述的一些各种附加特征,诸如识别交替(例如,析取),并且还可以促进相邻可选跨度的合并以进一步简化生成的正则表达式。
如上所述,LCS算法可以被配置为存储和保留输入字符序列内可能被插入回最终正则表达式中的底层文本片段,诸如图4中的串“iPhone”。通过跟踪最初产生分配给该跨度的类别代码的文本片段,这样的实施例可以允许将文字文本(例如,am和pm)直接包括在生成的正则表达式中,这可以减少假阳性并使正则表达式输出更具人类可读性。
在一些实施例中,与广泛匹配的正则表达式代码不同,可以使用启发式方法来确定何时将串文字输出到生成的正则表达式中。如上所述,在一些情况下,正则表达式可能需要与串片段确切匹配。因此,在一些实施例中可以使用启发式方法来确定是否将确切的串片段输出到正则表达式。例如,启发式方法可以确定,对于特定的跨度,是否只遇到过一个特定的串片段(例如,“pm”),并且如果对于该跨度存在两个或更多个示例,那么该确切的串片段将被输出到正则表达式。在标点跨度的情况下,启发式方法可以将阈值降低到跨度仅出现一次(例如,基于标点不太可能改变的假设)。例如,对于符号\pS和标点\pP,阈值可以被降低到仅出现一次,以便在正则表达式内输出文字串。基于将确切的串片段输出到正则表达式所需的示例的阈值数量,可以修改和/或调整启发式方法以增加或减少限制性。注意的是,如果启发式方法由于过于限制(通过将文字串片段太容易地输出到正则表达式中)而出错,那么用户可以通过引入附加的正例来进行补偿。类似地,如果启发式方法由于过于宽松(通过过于频繁地输出广泛的正则表达式代码)而出错,那么用户可以通过引入附加的负例进行补偿。启发式方法可以基于先前的用户交互和实验以适当量的限制进行初始编程(并随后调整)。
如上面参考图4所示,可以由正则表达式生成器110执行简化处理,在此期间,可以使用各种技术来简化正则表达式。在一些情况下,简化可以包括用正则表达式简写代码(例如,*、+和?)替换长格式的正则表达式重复代码(例如,使用大括号)。例如,如果跨度来自表示例如介于0和3(最小值和最大值)之间的重复的示例串片段,那么正则表达式生成器110可以通过将*输出到正则表达式中而不是{0,3}来简化表达式,以防止假阴性并提高可读性。此外,当a>2或b>4时,正则表达式生成器110可以替代地使用+语法而不是频繁地使用{a,b}语法。这可能会使生成的正则表达式更具可读性,并且更有可能避免假阴性。
在一些情况下,可以使用一组预定义的字符范围。例如,用于字母的正则表达式Unicode字符类别是\pL,与较旧的字符范围代码(诸如[A-Z])相比,它可能不太为用户所熟知或易于阅读。因此,在英语语言输入的情况下,如果给定的示例可以与[AZ]、[az]和[A-Za-z]之一成功匹配,那么正则表达式生成器110可以尝试用它们替换\pL。
此外,在一些实施例中,正则表达式生成器110可以被配置为默认为关于正则表达式中的空格的最大许可。如本文所描述的,正则表达式生成器110可以被配置为生成更具体的正则表达式,例如,通过有时比广泛匹配代码更偏向文字串片段,并且对大括号中的重复输出应用最小和最大界限。但是,关于空格,在一些实施例中,正则表达式生成器110可以被配置为默认为最大许可。即,对于任何空格(例如,甚至单词之间出现的单个空格),正则表达式生成器110可以被配置为将其保留为正则表达式类别代码\s,并且还可以指定重复为+,这意味着一个或多个。这样的实施例因此可以预期并匹配能够正确匹配的额外空格,甚至制表符和回车符(例如,诸如在完全非结构化文本中)。
在一些情况下,生成的正则表达式内的重复可以展开成文字上重复的正则表达式代码。例如,对于年份,代替\d{4},正则表达式生成器110可以被配置为将\d{4}展开为\d\d\d\d,以便于阅读,并且因为某些用户可能不熟悉正则表达式重复语法。例如,如果Unicode类别代码的长度为两个字符(例如,\d)并且重复计数为四或更少,或者如果Unicode类别代码的长度为三个字符(例如,\pP)并且重复计数为三个或更少,或者如果Unicode类别的长度超过三个字符并且重复计数为两个或更少,那么正则表达式生成器110可以展开重复。此外,在一些实施例中,如果需要输出文字字符(例如,正则表达式“特殊字符”),那么正则表达式生成器110可以被配置为对其进行转义(escape)。
在各种附加实施例中,正则表达式生成器110可以被配置为检测各种类型的成对括号(例如,{和}),并且生成具有否定字符类的正则表达式(例如,[^}]*)。例如,在用户突出显示(或以其它方式选择)的文本内,或在其它输入到系统中的正/负例内,可以检测左括号或右括号并将其与对应括号进行匹配/配对。在一些示例中,可以在输入文本内检测到多种不同类型的括号,包括“(“->”)”,“[“->”]”,“{“->”}”,“<“->”>”,““->””,““\”->“\””,“\u0060”->“\u00b4”,“\u2018”->“\u2019”,“\u201c”->“\u201d”,“\u00ab"->“\u00bb”,“\u3008”->“\u3009”中的一些或全部。因此,作为示例,对于HTML标签,可以生成<[^>]*>而不是像<[a-z]+(?:[a-z]+=[a-z]+>之类的内容。当检测和配对各种类型的括号时,正则表达式生成器110可以被配置为正确地检测和配对嵌套在括号内的括号,并且还可以被配置为忽略与输入的突出显示的(或以其它方式用户选择的)部分重叠的括号。此外,在一些情况下,如果内容是唯一的,那么正则表达式生成器110可能不会在括号之间使用新的否定字符类。即,如果内容总是相同的(例如,继续HTML示例,如果所有被识别出的标签都是<h1>),那么该文字可以被输出到生成的正则表达式而不是否定的方括号字符类中(例如,仅<h1>而不是<[^>]*>的输出)。
在示例实施例中,当突出显示被括号确切地包含时,可以允许在括号内折叠。这允许提取括号注释。例如,要从(Windows NT)中提取Windows NT,生成的regex现在是\(([^)]*)\)而不是\(([A-Za-z]+[A-Z][A-Z])\),这更通用并且将导致更少的假阴性。
III.在正则表达式代码的组合上使用最长公共子序列算法的正则表达式生成
本文描述的附加方面涉及基于包括三个或更多个串(例如,三个或更多个单独的字符序列)的输入数据生成正则表达式。当三个或更多个串被识别为输入数据时,正则表达式生成器110可以使用性能优化特征,其中为LCS算法执行的序列确定最佳顺序。如下面所讨论的,多于两个串的性能优化特征可能涉及构建具有与每个串对应的顶点和边长度/权重的图,该边长度/权重可以基于每个串和每隔一个串之间的LCS输出的大小。然后可以使用这些边权重导出最小生成树,并且可以执行深度优先遍历以确定输入串的顺序。最后,可以使用确定的输入串顺序来完成LCS算法系列。
图5是图示用于在正则表达式代码的更大集合(例如,三个或更多个字符序列)上使用最长公共子序列(LCS)算法生成正则表达式的处理500的流程图。因此,这个示例中的步骤502-505可以对应于上面图3中讨论的步骤303。但是,由于这个示例涉及基于三个或更多个输入字符序列生成正则表达式,因此可以多次执行LCS算法。例如,为了避免三个或更多个输入串的运行时间呈指数增长,可以多次执行LCS算法,其中每次执行仅对两个输入串执行。例如,正则表达式生成器110可以对两个串(例如,两个输入字符序列或两个转换后的正则表达式代码)执行LCS算法的初始执行,然后可以对第一次LCS算法的输出和第三串执行LCS算法的第二次执行,然后可以对第二次LCS算法的输出和第四串执行LCS算法的第三次执行,以此类推。
为了改进和/或优化这些实施例的性能,可能期望确定输入串(例如,输入字符序列或正则表达式代码)的最佳顺序以执行LCS算法的序列。例如,用于取输入串的良好顺序可以诸如通过最小化可选跨度的数量影响生成的正则表达式的可读性。为了保持生成的regex简洁,被LCS到当前regex中的附加串优选地应该已经与当前regex有些相似(LCS已经看到的串的中间结果)。
因此,在步骤501中,将多个(例如,3个或更多个)输入字符序列转换成正则表达式代码。在步骤502中,确定使用LCS算法处理正则表达式代码的顺序。下面参考图7更多地讨论步骤502中顺序的确定。在步骤503中,或者选择所确定的顺序中前两个正则表达式代码(对于步骤503的第一次迭代),或者选择所确定的顺序中下一个正则表达式代码(对于步骤503的后续迭代)。在步骤504中,对与正则表达式代码格式对应的两个输入串执行LCS算法。对于步骤504的第一次迭代,以确定的顺序对前两个正则表达式代码执行LCS算法,并且对于步骤504的后续迭代,以确定的顺序对下一个正则表达式代码和先前LCS算法的输出(其也可以是与正则表达式代码相同的格式)执行LCS算法。在步骤505中,正则表达式生成器110确定在确定的顺序中是否存在尚未作为输入提供给LCS算法的附加正则表达式代码。如果是,那么该处理返回到步骤503以再次执行LCS算法。如果不是,那么在步骤506中,基于LCS算法的最后一次执行的输出生成正则表达式。
图6是基于五个输入字符序列示例生成正则表达式的示例图。在这个示例中,将每个输入字符序列转换成正则表达式代码,然后基于确定的正则表达式代码顺序重复执行LCS算法。因此,图6示出了应用上述图5中讨论的处理的一个示例。在这个示例中,所确定的5个正则表达式代码顺序为Code#1至Code#5,并且每个代码按照确定的顺序输入到LCS算法,以生成正则表达式输出。最终的正则表达式输出(Reg Ex#4)对应于基于所有五个输入字符序列生成的最终正则表达式。
图7是图示用于在较大(例如,三个或更多个)的正则表达式代码集上确定最长公共子序列(LCS)算法的执行顺序的处理的流程图。因此,如这个示例中所示,步骤701-704可以对应于上面讨论的步骤502中的顺序确定。在步骤701中,可以在对应于输入数据的每对唯一的正则表达式代码上运行LCS算法,并且可以为每次执行存储结果产生的输出LCS。因此,对于k个输入数据,这可以表示要通过LCS算法运行的所有(k(k-1))/2个可能的串配对,或在一些实施例中为k(k-1)个可能的串配对。例如,如果接收到k=3个输入字符序列,那么在步骤701中LCS算法可以运行3次;如果接收到k=4个输入字符序列,那么在步骤701中LCS算法可以运行6次;如果接收到k=5个输入字符序列,那么在步骤701中LCS算法可以运行10次,以此类推。在步骤702中,全连接图可以由表示串的k个节点构成,其中(k(k-1))/2条边的边权重是两个节点之间的原始LCS输出的长度。在步骤703中,可以从步骤702中的全连接图导出最小生成树。在步骤704中,可以对最小生成树执行深度优先遍历。该遍历的输出可以对应于其中将正则表达式代码输入到LCS算法执行序列中的顺序。
简要参考图8A和图8B,图5中示出了基于接收到的k=5个输入字符序列生成的全连接图的示例,并且在图8B中示出了该全连接图的最小生成树表示。
在一些实施例中,图5-8B中描述的途径可以提供关于性能的附加技术优势。例如,LCS算法的某些常规实现方式可能表现出O(n2)的运行时性能,其中n是串的长度。将这样的实现方式扩展到k个串而不是仅2个可能会导致指数运行时性能O(nk),因为可能需要LCS算法来搜索k-维空间。LCS算法的这种常规实现方式可能不是高效的或不足以适合实时在线用户体验。
如上所述,LCS算法可以被执行(k(k-1))/2次,其中有时重复与之前看到的非常相同,因为LCS算法可能当来自用户的原始输入示例已被转换成regex类别代码。因此,在一些情况下可以实现记忆,其中可以使用高速缓存将先前看到的LCS问题映射到先前工作的LCS解。
示例实施例还提供了当高速缓存表太大时控制高速缓存大小的有效方法。高速缓存的一部分可以被删除。例如,可以使用可以被截断的散列映射表。散列映射表可以被任意截断。
IV.基于正负模式匹配示例的正则表达式生成
本文描述的附加方面涉及基于对应于正例和负例两者的输入数据生成正则表达式。如上所述,正例可以指被指定为应该匹配正则表达式生成器将生成的正则表达式的示例串的输入数据字符序列。作为对照,负例可以指被指定为不应该与正则表达式生成器将生成的正则表达式匹配的示例串的输入数据字符序列。如下面所讨论的,在一些实施例中,正则表达式生成器110可以被配置为识别位置和在该位置处区分正例和负例的最短字符子序列。然后可以将最短子序列硬编码到生成的正则表达式中,使得正例将匹配该正则表达式,并且负例将被该正则表达式排除(例如,将不匹配该正则表达式)。
图9是图示用于基于正和负字符序列示例生成正则表达式的处理900的流程图。在步骤901中,正则表达式生成器110可以接收与正例对应的一个或多个输入数据字符序列。在步骤902中,正则表达式生成器110可以基于接收到的正例生成正则表达式。因此,步骤901-902可以包括上面讨论的图3或图5中执行的一些或全部步骤,以基于输入数据字符序列生成正则表达式。
在步骤903中,正则表达式生成器110可以接收与负例对应的一个附加的输入数据字符序列。因此,负例被具体指定为不匹配在步骤902中生成的正则表达式。在一些实施例中,可以针对在步骤902中生成的正则表达式初始地测试在步骤903中接收到的负例,并且如果确定负例与正则表达式不匹配,那么不采取进一步的动作。但是,在这个示例中,可以假设在步骤903中接收到的至少一个负例与在步骤902中生成的正则表达式匹配。因此,在步骤904中,可以在步骤902中生成的正则表达式内确定消歧位置。在一些实施例中,消歧位置可以被选择为前缀位置(例如,在正则表达式的开头)或后缀位置(例如,在正则表达式的末尾)。例如,正则表达式生成器110可以确定在前缀处将需要的用于区分正例和负例的字符的第一数目,以及在后缀处将需要的用于区分正例和负例的字符的第二数目。正则表达式生成器110然后可以基于所需的替换字符的最短数量来选择后缀或前缀。在一些情况下,出于可读性目的,使用前缀作为消歧位置可能是首选的(例如,被加权)。在还有的其它示例中,消歧位置可以是不与正则表达式的前缀或后缀对应的中间跨度位置。
在步骤905中,正则表达式生成器110可以确定自定义字符类的替换序列(或更具体而言,自定义'方括号'正则表达式字符类的序列),其在所确定的位置插入到正则表达式中时,可以区分正例和负例。在一些实施例中,正则表达式生成器110在步骤905中可以从正例和负例中的每一个中检索与消歧位置(或替换位置)对应的文本片段,然后使用该文本片段来确定要用作区分正例和负例的替换序列的鉴别器。此外,在步骤905中确定的鉴别器替换序列可以包括自定义字符类的多个不同替换序列,它们可以在正则表达式内的相同位置或不同位置被替换。
如上所述,在一些情况下,可以结合步骤904中的消歧位置(或替换位置)的确定来执行步骤905中替换序列的确定。例如,正则表达式生成器110可以确定一个或多个替换序列,这些替换序列在第一个可能的替换位置可以区分正例和负例。正则表达式生成器110还可以确定一个或多个其它替换序列,这些替换序列在第二不同的可能替换位置可以区分正例和负例。在这个示例中,当在不同的可能替换位置和对应的替换序列之间进行选择时,正则表达式生成器110可以应用启发式公式来基于替换位置的字符尺寸以及对应替换序列的数量和/或尺寸中的一个或多个来执行选择。最后,在步骤906中,可以通过将一个或多个确定的替换序列插入到确定的位置中以替换正则表达式的先前部分来修改正则表达式。在一些情况下,在步骤906中正则表达式的修改之后,正例和/或负例可以针对修改后的正则表达式进行测试以确认正例匹配该正则表达式并且负例不匹配该正则表达式。
图10A和图10B是示例用户界面屏幕,其示出了基于正和负字符序列示例的正则表达式的生成。因此,图10A和图10B中所示的示例可以对应于在上面讨论的图9的处理的执行期间显示的用户界面。在图10A中,用户提供数据输入字符序列1001的三个正例,并且正则表达式生成器110生成与每个正例匹配的正则表达式1002。然后,在图10B中,用户提供一个负例1004,并且正则表达式生成器110生成修改后的正则表达式1005,其基于当前的正例1003和负例1004的集合。
如上所述,在一些实施例中,当正例和负例都被接收时,正则表达式生成器110可以识别鉴别器,或者区分(一个或多个)正例和(一个或多个)负例的一个或多个字符的最短子序列。所选择的鉴别器可以是最短的序列(例如,用类别代码表达),并且可以为正或负,使得正例将匹配并且负例将不匹配。在一些情况下,鉴别器可以对应于替换子序列,该替换子序列然后可以在步骤905中被硬编码到正则表达式中。作为示例,在“[AL][az]+”中,[AL]是正鉴别器,假设它被应用于街道后缀,那么它将与“Alley”、“Avenue”和“Lane”匹配(或允许其),但不会与其它所有内容匹配(或不允许其)。作为另一个示例,在“[BC][o][a-z]+”中,[BC][o]是正鉴别器,其由将与“Boulevard”和“Court”匹配的两个字符类的序列组成。作为还有的另一个示例,在“[^A][a-z]+”中,[^A]可以是负鉴别器,它将不允许“Alley”和“Avenue”。在一些情况下,该算法可以使得生成负后视(negative-look-behind)以正确区分。例如,(?<!Av)[A-Za-z]+将排除“Avenue”但将允许“Alley”。
作为另一个示例,如果用户提供正例“202-456-7800”和“313-678-8900”以及负例“404-765-9876”和“515-987-6570”,那么在在某些实施例中,正则表达式生成器110可以生成正则表达式“\d\d\d-\d\d\d-\d\d00”。即,可以基于确定以00结尾的电话号码区分正例和负例为正则表达式的后缀识别替换字符子序列(例如,假设目标是匹配商业电话号码的正则表达式)。这是按后缀的负例的示例(或更具体而言,通过使用正后缀来适应负例的示例),但是各种其它实施例可以支持在前缀、后缀或中间跨度位置处的替换。在中间跨度位置处替换的示例中,可以跟踪偏移到跨度中的字符,并且可以在中间跨度点处将其拆分。
为了决定是使用前缀还是后缀,在一些实施例中,采用启发式方法,其中在ka和前缀/后缀的所有组合上选择最小分数:
Figure BDA0003210294110000291
其中:
ka=被考虑用来消除词缀(前缀或后缀)歧义的字符数
|Fp|=消除词缀歧义所需的正例中唯一文本片段的数量
|Fn|=消除词缀歧义所需的负例中唯一文本片段的数量
|Ep|=用户提供的(完整)正例的数量
|En|=用户提供的(完整)负例的数量
在上面的示例中,启发式方法被设计为相对于较长的文本片段有利于较短的消歧文本片段(例如,因此乘以ka)。启发式方法还被设计为相对于后缀有利于前缀(例如,因此对于后缀,惩罚为0.1),以提高可读性。最后,启发式方法被设计为相对于通过使用大量串片段来消歧而有利于消歧(例如,替换)较长的前缀或后缀(例如,因此要替换的串片段的数量的平方)。
如上所述,一些实施例还可以支持负中间跨度示例以及负后视例(negativelook-behind examples)和负前视例(negative look-ahead examples)。
一旦已确定前缀/后缀和k(要消歧的字符数量),正则表达式生成器110就仍然可以确定如何表示生成的正则表达式中的该消歧。生成的正则表达式可以或者允许看起来像正例的词缀(例如,前缀或后缀),或者可以排除看起来像负例的词缀。
Figure BDA0003210294110000301
如果usePermissive大于零,那么通过生成允许从正例中对于(每个字符位置)一个接一个地取得的字符的正则表达式,允许看起来像正例的内容通过。在其它情况下,正则表达式生成器110可以通过采取生成不允许从负例中(对于每个字符位置)一个接一个地取得的字符的正则表达式来不允许看起来像负例的内容的途径。
作为另一个示例,正例8am和负例9pm的生成的正则表达式可能是\d[^p]m。这使用脱字符号语法。在一些情况下,正则表达式生成器110可以被配置为有利于较短的正则表达式,其不仅对用户更易读,而且更可能是正确的。理由是频繁出现的字符在未来更有可能再次出现,因此应重点关注频繁出现的字符。如果存在较少的独特字符|Fp|(较少的独特性是因为确实出现的那些更频繁地出现)那么在启发式方法中通过将其包含在分母中而得到奖励。
再次参考上面的usePermissive示例启发式方法,如果只有一个来自用户的正例,那么确定一个独特的正词缀并不是大事。因此,在这个启发式方法中,低|Ep|通过将它包含在分子中而受到惩罚(即,在这个启发式方法中,高|Ep|得到奖励)。
此外,在一些实施例中,负例可以基于后视和/或前视。例如,用户可以提供“323-1234”的正例和“202-754-9876”的负例,然后其涉及使用regex后视语法(?<!)来排除具有区域代码的电话号码。
在一些情况下,负例也可以基于可选的跨度。例如,用户可以提供“ab”和“a2b”的正例以及“a3b”的负例。在这种情况下,示例实现方式可能失败,因为它可能试图仅基于所需的跨度进行区分,而“2”数字位于可选的跨度中。在这个示例中,失败可以指生成的正则表达式(正确地)匹配所有正例并且也(错误地)匹配负例中的一个或多个的情况。在这种情况下,用户可以警告失败并且可以经由用户界面被提供选项以手动修复生成的正则表达式和/或去除一些负例。
V.用于正则表达式生成的用户界面
本文描述的附加方面包括图形用户界面内与正则表达式的生成相关的若干不同特征和功能。如下面所讨论的,这些特征中的某些特征可以包括用于正例和负例的用户选择和突出显示、正例和负例的颜色编码以及数据单元格内的多个重叠/嵌套突出显示的各种选项。
图11是图示用于基于在用户界面内接收到的用户数据选择来生成正则表达式的处理1100的流程图。图11中的示例处理可以对应于先前讨论的基于输入数据字符序列生成正则表达式的任何示例。但是,图11描述了关于可以在客户端设备120上生成和显示的用户界面的处理。在步骤1101中,响应于经由用户界面来自用户的请求,正则表达式生成器110可以检索数据(例如,从数据储存库130中)并且在图形用户界面内以表格形式渲染/显示数据。虽然在这个示例中使用了表格数据,但是应该理解的是,在其它示例中不需要使用或显示表格数据。例如,在一些情况下,用户可以直接键入原始数据(而不是从用户界面选择数据)。此外,当数据经由用户界面呈现时,数据不必是表格形式,而可以是非结构化数据(例如,文档)或半结构化数据(例如,无格式/非结构化数据项的电子表格,诸如推文或帖子)。在各种示例中,表格数据可以对应于交易数据、客户数据、性能数据、预测数据和/或可以被存储在企业或其它组织的数据储存库130中的任何其它类别的数据。在步骤1102中,可以经由用户界面接收用户对输入数据的选择。所选择的输入数据可以例如对应于用户选择的整个数据单元格,或者数据单元格内的字符子序列。在步骤1103中,正则表达式生成器110可以基于在步骤1102中接收到的输入数据(例如,数据单元格或其部分)来生成正则表达式。在步骤1104中,可以响应于正则表达式的生成来更新用户界面。在一些情况下,可以简单地更新用户界面以向用户显示生成的正则表达式,而在其它情况下,可以以如下文讨论的各种其它方式来更新用户界面。如这个示例中所示,用户可以经由用户界面选择多个不同的输入数据字符序列,并且响应于接收到的每个新输入数据,正则表达式生成器110可以生成更新后的正则表达式,该正则表达式包括第一和第二字符序列的(正)示例。然后,当用户突出显示第三字符序列(例如,在两个字符序列之外,或者在第一或第二字符序列内)时,正则表达式生成器110可以再次更新正则表达式,依此类推。在一些实施例中,正则表达式生成器110可以实时(或近实时)执行算法,使得可以响应于用户做出的每个新键击或每个新突出显示的区段来生成全新的正则表达式。此外,如果用户在先前的突出显示上部分突出显示(或以其它方式选择),那么可以删除旧突出显示并且可以添加新突出显示。
因此,如图11所示,响应于用户经由用户界面对字符序列的选择,正则表达式生成器110可以生成并显示该正则表达式。例如,当用户突出显示第一字符序列时,正则表达式生成器可以生成并显示表示第一字符序列的正则表达式。当用户突出显示第二字符序列时,正则表达式生成器可以生成更新后的正则表达式,该正则表达式包含第一和第二字符序列两者。然后,当用户突出显示第三字符序列(例如,在第一或第二序列内)时,正则表达式生成器可以再次更新正则表达式,依此类推。
图12是图示用于经由在用户界面内接收到的用户数据选择基于捕获组生成正则表达式和提取数据的处理1200的另一个流程图。在步骤1201中,如上面在步骤1101中所讨论的,正则表达式生成器110可以检索数据(例如,从数据储存库130中)并且在图形用户界面内以表格形式渲染/显示数据。在步骤1202中,正则表达式生成器110可以接收用户对特定数据单元格内的文本片段的突出显示的选择。在步骤1203中,正则表达式生成器110可以基于所选择的数据单元格的正例生成正则表达式,并且在步骤1204中,可以基于单元格内突出显示的文本片段创建正则表达式捕获组。在步骤1205中,正则表达式生成器110可以确定所显示的表格数据内与生成的正则表达式匹配的一个或多个附加单元格,并且在步骤1206中,可以提取附加单元格内与生成的正则表达式匹配的对应文本片段。
因此,除了提供正例之外,用户还可以(例如,经由鼠标文本突出显示)选择任何所选择的正例内的文本片段。作为响应,正则表达式生成器110可以创建正则表达式捕获组以从示例中提取该文本片段以及从应用了该正则表达式的文本中的所有其它匹配中提取对应片段。从匹配的数据单元格中提取文本片段还可以包括删除和修改,并且在一些情况下可以用于从现有的半结构化或非结构化文本列中创建新的数据列。
使用用户选择正数据例的示例,并且如果用户突出显示年份,那么正则表达式生成器110可以生成正则表达式(?:[A-Z]{3}\s+\d\d,\s+|\d\d/\d\d)(\d\d\d\d)。如该示例中所示,正则表达式生成器110已在年份周围放置了括号,并且还通过使用?:regex语法将月和日周围的旧括号(用于交替)转换成“非捕获”组。在一些实施例中,可能需要提取/捕获组落在跨度边界上,并且在这样的实施例中,正则表达式生成器110可以将突出显示的字符范围作为输入并将其扩展以包含最近的锚跨度边界。但是,在其它示例中,用户界面可以支持中间跨度提取/捕获。
在一些实施例中,用户界面可以支持来自用户的包括对第二字符序列内的第一字符序列的选择的输入数据。例如,用户可以在较大的先前突出显示的字符序列内突出显示一个或多个字符,并且第二用户选择可以为较大的第一用户选择提供上下文。这样的实施例可以使输入数据能够以更大的特异性被提供给正则表达式生成器110。
此外,在一些示例中,响应于用户在用户界面内的选择(例如,突出显示文本),可以发起操作并且可以打开对话框。在一些情况下,对话框可以是非模态对话框,诸如不会阻止用户与主屏幕交互的浮动工具箱窗口。取决于用户正在执行的主要操作,对话框的外观和/或功能也可以变化。因此,在这种情况下,用户无需在突出显示所选择的文本之后为了发起对捕获组文本片段的修改、提取等搜索进一步的菜单项。
此外,在某些实施例中,提供用于生成正则表达式的用户界面可以包括三种突出显示模式:嵌套自动、嵌套手动和单级。嵌套自动也可以被称为嵌套(自动外部(auto-outer))。嵌套手动也可以被称为嵌套(完全控制)。在这些示例中,单级可以指一个级别的突出显示(或其它形式的文本选择),这可能会导致生成没有捕获组的正则表达式。嵌套手动突出显示模式允许识别两级突出显示(或其它形式的文本选择)。这导致生成带有捕获组的正则表达式。嵌套自动突出显示可以与嵌套手动突出显示模式相同,不同之处在于外部突出显示(或其它形式的文本选择)可以被自动设置为整个文本的内容(例如,整个电子表格单元格)。
在某些情况下,默认操作模式可以是将整个单元格识别为突出显示区域,并且用户可以进一步突出显示突出显示的单元格内的一个或多个附加子序列。在其它模式中,可以允许用户手动指定表格数据显示的数据单元格内的两个突出显示。在还有的其它模式中,可以允许用户手动指定没有内部突出显示的外部突出显示。这些其它模式可能更适合“半结构化”数据,例如,由推文或其它长串(诸如,浏览器“用户代理(user agent)”串)组成的数据列。“半结构化”数据是指可以在用户界面内以表格形式显示的数据,但其中表格内的列由非结构化文本组成。
在一些这样的实施例中,用户经由用户界面的内部和外部选择(例如,突出显示)可以通过颜色编码来区分。例如,正例的外部突出显示可以以第一文本/背景颜色组合显示,并且正例的内部突出显示可以以不同的对比文本/背景颜色组合显示。
如以上所指示的,用户可以经由选择字符子序列来指定捕获组的选择。GUI可以用于经由突出显示(或其它指示)来促进用户选择。图13中示出了示例,其中示出了带有表格数据显示的示例用户界面屏幕。在这个示例中,图13描绘了列值内例如由用户将鼠标拖过该列值的一个或多个期望元素而导致的突出显示。注意的是,执行用户突出显示的“单元格”可以表现出指示列值的选择的颜色变化。这种颜色变化可以被解释为响应于用户突出显示的自动突出显示。
图14和图15是示例用户界面屏幕,其图示了基于对表格显示中的数据的选择来生成正则表达式和捕获组。在这些示例中,图14和图15示出了附加的用户界面窗口,其自动被显示为检测表格数据显示内的用户突出显示1401。该窗口包括用于显示正例的字段1402、用于显示负例的字段,以及用于显示响应于从表格数据显示中选择正例而动态地(并且接近瞬时地)生成的正则表达式的字段。在这些示例中,列值1401内的用户突出显示可以等同于自动突出显示内的用户突出显示。因此,区域代码的用户突出显示不仅导致用户突出显示的区域代码1401,而且导致电话号码的其余部分被填充在正例字段1402中。
但是,应该认识到的是,用户突出显示不限于自动突出显示内的执行。例如,用户突出显示可以替代地在其它用户突出显示内执行。作为另一个示例,用户突出显示可以替代地在没有任何内部突出显示的情况下执行(例如,在突出显示的文本内进一步突出显示)。这些替代示例特别适合于半结构化数据,诸如包含“推文”或其它长串(例如,浏览器“用户代理”串)的数据列。
此外,在生成对应的正则表达式时,可以基于附加的自动突出显示来识别匹配正则表达式的其它列值1402。在图14和15中所示的示例中,附加的自动突出显示指示与生成的正则表达式的捕获组匹配的这些其它列值的元素。可以使用与用于用户突出显示的颜色不同的颜色来执行附加的自动突出显示。
如图15所示,附加的用户突出显示被示出以指示用户对其它示例的选择。可以以与上述类似的方式来执行附加的用户突出显示。因此,图15中的用户界面在用于显示正例的字段1502中示出了其它示例的总体。这可以响应于附加用户突出显示的检测而发生。此外,生成的正则表达式1503可以动态地和近乎瞬时地更新,使得它匹配所有正例1502。响应于更新后的正则表达式的生成,也可以更新匹配更新后的正则表达式的其它列值1504的自动突出显示。在一些实现方式中,还可以使用动态颜色编码。例如,匹配可以使用第一种颜色(例如,蓝色)进行颜色编码,而正例使用第二种颜色(例如,绿色)进行颜色编码,并且负例可以使用第三种颜色(例如,红色)进行颜色编码。在表格数据视图(例如,电子表格)或其它无限滚动数据视图(例如,用于半结构化或非结构化数据)内,当视图向下滚动到真实的附加数据时,新可见的数据可以进行颜色编码。
图16A和图16B是示例用户界面屏幕,其图示了基于从表格显示中选择正例和负例来生成正则表达式。在图16A-16B中,来自正例字段1602的个别示例可以从正例字段1603中移除,和/或移动到负例字段1603。在用户界面内,这可以例如通过用户在示例之一上点击(例如,右键点击)以选择它来执行。该选择可以使用户界面显示包括删除选项和更改选项的菜单1602。此后,在选项上点击可以导致对应功能的执行。
在图16A和图16B中所示的示例中,用户选择更改选项的结果是将所选择的示例移动到负例字段1603,从而使正则表达式1601更新为正则表达式1604,它可以动态地和近乎瞬时地生成(例如,在某些实施例中,在30毫秒和9000毫秒之间,或100毫秒中值)。响应于更新后的正则表达式1604的生成,匹配更新后的正则表达式的其它列值的自动突出显示也可以在表格数据显示内更新。此外,可以对一些或所有负例执行自动突出显示,包括与负例对应的任何列值,其可以使用与上面使用的任何颜色不同的颜色来突出显示,或者以其它方式使用其它视觉技术在用户界面内区分。
在一些实施例中,经由用户界面指定负例不需要首先将示例指定为正例,然后将其转换成负例,如图16A和图16B中所示。相反,可以以多种方式指定负例。例如,用户可以经由用户界面选择(例如,右键点击)列值(例如,对其执行自动突出显示以指示其与生成的正则表达式匹配的其它列值之一),这可以从而导致显示包括将所选择的列值指定为负例的选项(例如,“制作新反例”)的菜单。
因此,使用图16A和图16B中所示的示例,响应于更新后的正则表达式1604的生成,也可以更新匹配更新后的正则表达式的其它列值的自动突出显示。在这些示例中,更新后的正则表达式指定以“9”结尾的电话号码。
简单返回到图14和图15,当“提取”按钮被用户点击或以其它方式选择时,可以发起操作以提取与当前正则表达式1403或1503匹配的所有单元格内的突出显示的文本片段。虽然未在图14和15中示出,但在一些实施例中,用户界面可以提供除“提取”按钮之外或代替“提取”按钮的其它可选择按钮。例如,可以将“替换”按钮呈现为用用户指定的元素替换用户突出显示的元素的选项。附加地或替代地,一个或多个“删除”按钮可以被呈现为实际上用空替换用户突出显示的元素的选项。例如,可以实现“删除片段”操作和/或“删除行”操作之一或两者,这将分别删除用户突出显示的文本片段或整行。可以在各种实施例中实现的附加操作可以包括“保留行”操作、“拆分”操作(例如,突出显示逗号,然后将逗号分隔的组成部分提取到单独的多个新列中)和“混淆”操作(例如,用“#”或其它符号序列替换突出显示的文本/捕获组)。
在这个示例中,响应于对“提取”按钮的选择,提取操作可以被添加到将由下游操作执行的变换脚本的列表。在一些实施例中,变换脚本列表可以显示在用户界面的一部分中以供用户查看/修改。替代地,可以原位(in situ)执行提取操作以生成包括regex捕获组的内容(例如,与正例的用户突出显示部分对应的元素)的新列。在图14和图15中所示的示例中,可以响应于对“提取”按钮的选择而生成新列和/或新区域代码表。
图17是根据本文描述的一个或多个实施例的另一个示例用户界面屏幕,其图示了基于对表格显示中的数据的选择来生成正则表达式和捕获组。
A.多个突出显示
在一些实施例中,用户界面还可以支持每个示例的多个突出显示。图42、43、44、45、46、47和48图示了根据一些示例实施例的用于实现多突出显示的用户界面4200、4300、4400、4500、4600、4700和4800。下面描述了不同的突出显示方法。在示例实施例中,可以通过使用不同的颜色代码来区分内部突出显示和外部突出显示。
图42图示了根据一些示例实施例的以单级模式显示数据集的视图的用户界面4200。图42图示了在单级突出显示模式中突出显示将如何出现在用户界面上。在图42中,用户突出显示了应用4236(例如,Mozilla)的版本号4235(例如,“5.0”)。响应于用户突出显示版本号4235,用户界面数据模型生成器突出显示版本号4237(“6.1”)、4238(“1.9”)、4239(“2.2”)和4240(“3.6”)。
基于突出显示,可以出现Regex-by-Example对话框4230。Regex-by-Example对话框4230包括由用户指定的指定示例4233。在这个示例中,版本号“5.0”由用户指定。此外,Regex-by-Example对话框4230指示突出显示模式4250处于单级4251。
图43图示了根据一些示例实施例的以嵌套完全控制模式显示突出显示的数据的用户界面4300。在图43中所示的示例中,“嵌套(完全控制)”4351已从对话框4330中的突出显示模式面板4350中选择。此外,如图43所示,用户将外部突出显示指示为软件名称4236(例如,“Mozilla”)和版本号4235(例如,“5.0”)。Regex-by-Example对话框4330指示突出显示模式4350处于嵌套(完全控制)4351。此外,数据集当前处于多突出显示模式4360。在图43中执行的突出显示中,外部突出显示在嵌套完全控制模式下执行。
在示例实施例中,正在进行的外部突出显示,即当前正在执行的外部突出显示可以以其自身的紧迫性颜色,诸如金色,以第一类方式进行处理。在示例实施例中,突出显示可以以不同颜色出现,这可以用于指示突出显示的紧迫性、优先级和/或重要性。
图44图示了根据一些示例实施例的以嵌套完全控制模式显示突出显示的数据的用户界面4400。如图44所示,选择了多突出显示模式4460。用户已将外部突出显示指示为软件名称4236和版本号4235。被选择为外部突出显示的软件名称4236(例如,Mozilla)和版本号4235(例如,5.0)可以用第一种颜色突出显示。在用户已选择外部突出显示之后,用户可以识别内部突出显示。例如,用户可以只选择版本号4235(例如,“5.0”)作为内部突出显示。内部突出显示可以用与第一种颜色不同的第二种颜色突出显示。由于内部突出显示和外部突出显示以不同的颜色出现,因此外部突出显示和内部突出显示很容易被识别。图44中示出的示例处于嵌套完全控制模式突出显示。因此,突出显示模式面板4450指示数据集处于嵌套完全控制模式4451。
在示例实施例中,可以通过使用不同的颜色或颜色代码来区分内部和外部突出显示。例如,正例的外部突出显示可以在浅绿色背景上以黑色文字显示,正例的内部突出显示可以在深绿色背景上以浅绿色文字显示。
在图44中,用户已选择被识别为元素4235的版本号“5.0”。当用户选择版本号“5.0”(元素4235)时,用户界面数据模型生成器可以自动选择版本号“3.6”(元素4240)和“5.1”(元素4241)。由于除了用户选择的版本号之外,用户界面数据模型生成器还突出显示了多个版本号,因此如果用户不期望由用户界面数据模型生成器识别出的附加版本号,那么用户可以提供附加示例。替代地,如果用户同意由用户界面数据模型生成器执行的附加突出显示,那么用户可以继续将命令应用到突出显示的数据。
Regex-by-Example对话框4430显示指定示例4433。此外,Regex-by-Example对话框4430指示突出显示模式4450是嵌套(完全控制)4451。此外,Regex-by-Example对话框4430指示数据集处于多突出显示模式4460。生成的正则表达式4432也在Regex-by-Example对话框4430中被识别。
如图45、图46和图47所示,用户可以提供附加的示例。图45图示了根据一些示例实施例的其中提供了两个正例的用户界面4500。图46图示了根据一些示例实施例的其中提供了两个正例的用户界面4600。图47图示了根据一些示例实施例的其中提供了三个正例的用户界面4500。
如图45所示,为了提供正例,用户可以将外部突出显示指示为软件名称4536和版本号4535。可以用第一种颜色突出显示被选择为外部突出显示的软件名称4536(例如,WindowsNT)和版本号4535(例如,6.1)。在用户已选择外部突出显示之后,用户可以识别内部突出显示。例如,用户可以选择版本号4535(例如,“6.1”)作为内部突出显示。内部突出显示可以用与第一种颜色不同的第二种颜色突出显示。可以基于突出显示生成正则表达式4532。
在Regex-by-Example对话框4530中的指定示例4533中识别用户提供的突出显示示例。
图46图示了根据一些示例实施例的显示更新后的生成的regex的用户界面4600。如图46所示,生成的regex 4632基于两个指定示例4633(例如,“Mozilla 5.0”和“WindowsNT 6.1”)进行更新。由于用户在指定示例4633中提供了附加的外部和内部突出显示,因此生成的regex 4632也将相应改变。生成的regex 4632出现在regex-by-example对话框4630中。
图47图示了根据一些示例实施例的显示替代数据突出显示的用户界面4700。如图47所示,可以提供带下划线的版本号作为生成regex的示例。
如图47所示,为了提供另一个正例,用户可以将外部突出显示指示为软件名称4735和版本号4735。被选择为外部突出显示的软件名称4735(例如,MacOS X)和版本号4736(例如,10_6_8)可以用第一种颜色突出显示。在用户已选择外部突出显示之后,用户可以识别内部突出显示。例如,用户可以选择版本号4736(“例如,10_6_8”)作为内部突出显示。内部突出显示可以用与第一种颜色不同的第二种颜色突出显示。
用户提供的突出显示示例在Regex-by-Example对话框4730中的指定示例4733中被识别。如图47所示,生成的regex 4732基于三个指定示例4733(例如,“Mozilla 5.0”、“WindowsNT 6.1”和“MacOS X 10_6_8”)进行更新。由于用户在指定示例4733中提供了附加的外部和内部突出显示,因此生成的regex 4732也将相应改变。
图48图示了根据一些示例实施例的显示更新后的生成的regex的用户界面4800。如图48所示,响应于用户选择带下划线的版本号,生成的regex 4832被更新以包括下划线信息。
基于三个指定示例4833(例如,“Mozilla 5.0”、“WindowsNT 6.1”和“MacOS X 10_6_8”)更新生成的regex 4832。由于用户在指定示例4833中提供了附加的外部和内部突出显示,因此生成的regex 4832也将相应改变。生成的regex 4832出现在regex-by-example对话框4830中。
图49是根据一些示例实施例的用于执行多突出显示的方法4900的流程图。
在步骤4910处,用户可以选择数据集中的数据(例如,数据片段)。即,用户可以选择外部突出显示(例如,“Mozilla 5.0”)和内部突出显示(例如,“5.0”)。用户可以在第一个数据记录4320中执行外部和内部突出显示。
在步骤4920处,在用户已执行初始突出显示之后,用户界面数据模型生成器可以自动突出显示相同记录内的数据(例如,数据片段)和/或数据集中与由用户在步骤4910处执行的突出显示对应的其它记录。
在步骤4930处,可以生成正则表达式。基于用户在步骤4910处提供的突出显示以及基于用户界面数据模型生成器在步骤4920处执行的附加突出显示来生成正则表达式。
如果用户对突出显示结果不满意,那么用户可以突出显示附加数据以提供附加示例。因此,可以重复步骤4910、4920和4930,直到用户对数据集上的最终突出显示满意为止。替代地,用户可以修改生成的正则表达式(例如,4832)以生成期望的突出显示。
在示例实施例中,对于嵌套(自动外部)模式中的多个突出显示,执行搜索以寻找所需的最小数量的周围跨度。如果用户界面处于具有多个突出显示的嵌套(自动外部)模式,那么后端算法可以进入特殊模式。特殊模式的原因是每个示例的多个突出显示往往意味着示例串比平时更长。由于LCS算法具有指数运行时间,因此在外部突出显示的整个长度下执行这将花费太长时间。在特殊模式下,算法从内部突出显示开始,逐渐在它们周围增加外部突出显示,直到生成令人满意的regex。
用于执行特殊模式的示例代码可以包括以下代码中的一些或全部:
Figure BDA0003210294110000421
Figure BDA0003210294110000431
Figure BDA0003210294110000441
多突出显示允许用户容易地选择可以对其应用任何命令(例如,提取、拆分、删除、混淆、替换和过滤行)的数据(例如,数据片段)。
对于每个示例多个突出显示的能力,各个突出显示可以是可点击的,而不是整行。在一些情况下,可以使用复选框(或用户界面内的其它技术)在每个示例一个突出显示和每个示例多个突出显示的模式之间切换。在支持每个示例多个突出显示的模式中,用户可以在单个数据示例(例如,电子表格单元格)内选择多个不同的突出显示部分,以提供从中可以生成正则表达式的多个不同的示例。在每个示例多个突出显示中,正和负“例”都可以被识别,并且可以被示出为一个示例列表中的颜色代码。例如,在多突出显示模式中,点击突出显示现在只会使该一个子示例为负。在图42-49中演示了每个示例功能多个突出显示。
如这个示例序列中所示,用户依次选择外部突出显示区域,然后是内部突出显示区域,以生成/更新对应的正则表达式。此外,如这些图中所示,用户可以在单个数据单元格内指定多个不同的内部/外部突出显示示例,并且可以经由用户界面使用每个突出显示(或由用户以其它方式选择)的新示例更新生成的正则表达式。
在一些实施例中,特殊的多突出显示嵌套自动外部搜索模式可以限于预定数量的跨度(例如,10个跨度)的直径。在这种情况下,最后一个do-while循环的条件可以是:
while(!result.isSuccess&&!reachedMaximal&&numLookAheadAndBehindSpans<10)
当实现某些命令时可以使用多突出显示。
B.命令
如上所述,在各种实施例中,用户界面除了提取命令之外还可以支持附加类型的命令。用户界面数据模型生成器的元素可以被配置为实现命令。
图24图示了根据一些示例实施例的正则表达式生成服务器2400。正则表达式生成服务器2400可以对应于图1中所示的正则表达式生成服务器111。正则表达式生成服务器2400可以包括多个处理器和存储器。正则表达式生成服务器2400可以包括正则表达式生成器2410和用户界面数据模型生成器2420。正则表达式生成器2410也可以被称为regex生成器。正则表达式生成器2410可以对应于图1的正则表达式生成器116。用户界面数据模型生成器2420可以对应于图1的用户界面数据模型生成器114。
正则表达式生成器2420可以执行若干不同的命令,包括提取、拆分、删除、混淆、替换和过滤行。因此,正则表达式生成器2420可以包括提取数据生成器2411、拆分数据生成器2412、删除数据生成器2413、混淆数据生成器2414、替换数据生成器2415和过滤行数据生成器2416。下面将更详细地解释正则表达式生成服务器2400的组件。
虽然描述了提取、拆分、删除、混淆、替换和过滤行命令,但是示例实施例可以被配置为执行附加命令。此外,正则表达式生成器2410可以包括除图24中所示的那些以外的命令生成器。
1.提取
如上所述,在提取命令中,可以识别正则表达式的模式匹配并且可以将匹配数据提取出到新创建的列中。上面关于图14和图15描述了提取函数。
2.拆分
图25A、图25B和图26示出了经由用户界面实现的拆分命令的示例。图25A图示了用户界面2500并且图25B图示了根据一些示例实施例的用于实现拆分命令的用户界面2501。图26图示了根据一些示例实施例的对数据集的拆分命令的结果。
基于用作分隔符的特定正则表达式的存在,拆分命令可导致创建多个不同的列。例如,如果提供逗号(“,”)作为要匹配的模式,那么在提取操作期间将使用逗号作为分隔符。每个包含单个逗号的要提取的数据将在逗号处拆分并且被提取出到两个不同的列中(即,逗号前的数据和逗号后的数据)。如果要拆分的数据项包含两个逗号,那么数据将基于逗号被拆分成三个部分并且将被提取出到三个新列中。因此,拆分命令可以执行基于分隔符的提取(提取到一个或多个新列中)而不是基于模式匹配的提取(其中匹配将被放入到单个列中)。
在其它示例中,可以在要匹配的模式处使用括号或方括号(或分隔符)、星号、“<”或“>”或用于某些类型的内容的连字符和短划线等来执行拆分命令。附加符号可以用作分隔符。
如图25A所示,数据集显示在用户界面2500上。数据集可以是电子表格。数据集可以包括包含电话号码的列2510。电话号码可以包括第一连字符2511和第二连字符2512。如果在电话号码列2510上执行拆分命令,那么可以根据用户的期望拆分电话号码。
图27图示了根据一些示例实施例的用于执行拆分命令的方法2700的流程图。在图27中使用的示例中,将使用连字符“-”作为拆分数据的分隔符。
在步骤2710处,用户可以为“电话号码”列2510内的第一记录2520选择连字符(“-”)。如果用户在交互式用户界面上,那么用户可以通过使用例如鼠标或手势在设备的显示器上突出显示连字符来选择连字符。在图25A所示的示例中,用户已突出显示第一记录2520中的第一连字符2511。
在步骤2720处,在用户突出显示第一记录2520中的第一个连字符之后,用户界面数据模型生成器可以针对每个数据记录(例如,如图25A所示的记录2-25)自动突出显示与用户所做的选择对应的电话号码列中的所有第一个连字符。即,用户界面数据模型生成器可以基于用户对第一记录2520执行的突出显示来确定应该对电话号码列中的其余记录(例如,2-25)执行什么突出显示。虽然附图中示出了25个记录,但是示例实施例可以将拆分命令应用于多于或少于25个记录。此外,数据集可以包括大量记录,诸如数千个或几千个记录。正则表达式可以基于用户执行的初始突出显示来确定应该在同一记录内或在附加记录中执行什么附加突出显示。
在步骤2730处,在已经执行突出显示之后,可以基于突出显示生成正则表达式。图25A图示了生成的regex 2532,其基于用户执行的突出显示和基于正则表达式生成器执行的自动突出显示而生成。生成的正则表达式将基于用户执行的突出显示中的变化进行更新。
在步骤2740处,“Regex-by-Example”对话框2530可以自动出现在屏幕上。虽然在图25A所示的示例中,“Regex-by-Example”对话框2530在已针对电话号码列2510的所有记录(例如,记录1-25)执行突出显示之后出现,但是“Regex-by-Example”对话框2530也可以在初始输入(例如,用户突出显示第一记录)之后出现。
在图25A中,示出了指定示例2533,其允许用户容易地突出显示或修改对所选择的数据执行的突出显示。用户可以通过改变“电话号码”列2510数据中的突出显示、通过改变指定示例2533中的突出显示、或者通过修改生成的regex 2532来修改突出显示。对“电话号码”列2510所做的改变将反映在生成的正则表达式2532中。
在示例实施例中,最小生成树可以用在示例而不是突出显示上。因此,如果提供的每个示例都有多个突出显示并且突出显示重叠,那么该示例只需要运行最长公共子序列算法的单个副本。如果提供的示例的突出显示不重叠,那么可以为每个突出显示运行最长公共子序列算法。
在示例实施例中,最长跨度列表被选择用于最小生成树(MST)顶点并且首先被馈送到LCS队列中。LCS队列包括应用最长公共子序列算法的跨度。每个示例有多个突出显示,其中表示多个突出显示的一个示例被包含在传递给graphLcs()的数组中,最长的这样的示例被选择为图中最小生成树的顶点,用于确定跨度的顺序列表被传递到LCS队列中。
在步骤2750处,接收对“拆分”命令的选择。例如,用户可以选择Regex-by-Example对话框2530上的“拆分”按钮2531。如Regex-By-Example对话框2530所示,在选择拆分时,禁用多突出显示复选框2534和突出显示模式下拉列表。
在示例实施例中,复选框可以被动画化以在UI基于用户进行第二突出显示而自动选中该方框时唤起用户的注意。示例实施例提供基于由用户在UI中的其它地方的交互所触发的状态变化来动画化复选框。当服务器系统基于屏幕上其它地方的用户交互自动使复选框改变其状态时,复选框被动画化。
在接收到对“拆分”命令的选择之后,在步骤2760处,正则表达式生成器2410的拆分数据生成器2412可以基于突出显示的分隔符自动拆分电话号码。图25B中所示的示例发生在用户已选择图25A中的“拆分”命令2531之后。
如图25B所示,拆分命令将把突出显示设置改变为多突出显示。在图25A中,在选择拆分命令之前,未选择多突出显示模式2534。在图25B中,在选择拆分命令之后,现在选择了多突出显示模式2534。在一些实施例中,当选择“拆分”命令时,用户界面可以启用多突出显示复选框并突出显示模式下拉列表。例如,参考图25B,当用户点击“拆分”命令时,突出显示模式可以自动改变为单级,然后可以启用多突出显示文本框。
在步骤2770处,可以显示拆分命令结果。如图26中显示的用户界面2600所示,电话号码列2510中的电话号码现在已被拆分成三列2610、2620和2630。列2610包括出现在第一个连字符之前的电话号码部分,列2620包括出现在第一个和第二个连字符之间的电话号码部分,列2630包括出现在第二个连字符之后的电话号码部分。由于有两个充当分隔符的连字符,因此电话号码被拆分成三列。对于一些数字,一列可以包含区域代码以及前缀,因为区域代码出现在第一个连字符之前。将基于电话号码中的信息为电话号码填充字段。如果电话号码只有一个连字符,那么该号码只会出现两列信息。
在电子表格视图内生成三个附加列,如图26所示。由于电话号码已被拆分,因此用户可以更容易地识别期望的信息。例如,用户可以更容易地识别数据记录中的区域代码。此外,用户可以针对列2610、2620和2630中的每一个执行附加处理。因此,用户可以更容易地使用数据。例如,用户可以识别他们客户的主要区域代码。
在执行拆分命令之后,可以将执行的拆分命令(例如,split_column_phone)添加到数据集的变换脚本中。变换脚本指示应用于数据列的命令。变换脚本可以用于将相同的命令应用于另一个数据集。
因此,示例实施例提供了用于拆分数据集中的数据的快速且高效的用户界面。此外,正则表达式生成器可以被配置为识别更有可能产生用户期望的结果的设置。
虽然用具体步骤描述了流程图,但是可以修改步骤的顺序。例如,可以基于用户执行的初始突出显示生成正则表达式。
3.删除
图28图示了根据一些示例实施例的用于实现删除命令的用户界面2800。图29图示了根据一些示例实施例的显示对数据集的删除命令的结果的用户界面2900。在删除命令中,用户可以突出显示(或以其它方式选择)文本示例以生成与模式对应的正则表达式,然后从电子表格或其它数据视图中删除与模式匹配的数据。删除函数用空串(例如,“”)替换数据。删除命令可以通过将生成的regex转换成三个捕获组来实现。
如图28所示,数据集显示在用户界面2800上。数据集可以包括包含街道地址的列2810。在图28所示的示例中,用户期望从地址中删除街道号码2811。如果在记录2820的“street_address”的列2810上执行删除命令,那么可以根据用户期望删除街道地址信息。在图28中,用户已选择多个正例来识别电子表格的“street_address”列中的街道编号。示例显示为指定示例2833。用户然后点击“删除”按钮来发起删除操作。图29显示了删除街道号码的结果电子表格。因此,删除命令本质上是用“”(空串)替换。这可以通过将生成的regex转换成三个捕获组来实现,如下面的“替换”命令所讨论的。
图30图示了根据一些示例实施例的用于执行删除命令的方法3000的流程图。
在步骤3010处,用户可以选择要删除的地址信息的一部分。在图28所示的示例中,针对第一记录2820选择地址信息的街道号码部分2811。如果用户在交互式用户界面上,那么可以由用户通过使用例如鼠标或手势在设备显示器上突出显示街道号码部分来选择地址信息的街道号码部分2811。
在步骤3020处,在用户突出显示第一记录2820中的街道号码部分2811之后,用户界面数据模型生成器可以针对每个数据记录(例如,如图28中所示的记录2-25)自动突出显示“street_address”列2810中的所有街道号码部分。即,用户界面数据模型生成器可以基于针对第一记录2820执行的突出显示来确定应该针对“street_address”列2810中的剩余记录(例如,2-25)执行什么突出显示。虽然附图中示出了25个记录,但是示例实施例可以将删除命令应用于多于或少于25个记录。正则表达式可以基于用户执行的初始突出显示来确定应该执行什么附加突出显示。
在步骤3030处,生成正则表达式。在图28中,示出了生成的正则表达式2832。生成的正则表达式允许用户容易地突出显示应该选择哪些数据。在删除命令的情况下,生成的正则表达式允许用户容易地突出显示应该删除哪些数据。生成的正则表达式对应于由用户和正则表达式生成器执行的突出显示。用户可以通过改变“street_address”列2810中数据的突出显示或者通过改变正则表达式2832中的突出显示来修改突出显示。对“street_address”列2810所做的改变将反映在生成的正则表达式2832中。生成的正则表达式将基于用户执行的突出显示中的变化而更新。
在步骤3040处,在已针对“street_address”列2810中的所有街道号码执行突出显示之后,“Regex-by-Example”对话框2830可以自动出现在屏幕上。虽然在图28中所示的示例中,在已针对“street_address”列2810的所有记录(例如,记录1-25)执行突出显示之后出现“Regex-by-Example”对话框2830,但是“Regex-by-Example”对话框2830也可以在初始输入(例如,突出显示第一记录)之后出现。指定示例2833识别用户提供的示例。
在步骤3050处,可以接收对删除命令的选择。例如,用户可以选择“Regex-by-Example”对话框2830上的“删除”按钮2831。
在接收到对删除命令的选择之后,在步骤3060处,正则表达式生成器2410的删除数据生成器2413可以基于突出显示自动删除街道号码。在图28中所示的示例中,所有“street_address”记录都包括突出显示,因此,删除命令将应用于图28中所示的每个记录。
在步骤3070处,可以显示删除结果。如图29中显示的用户界面2900所示,“street_address”列2810中的街道地址中的街道号码已被移除。街道号码被就地删除。
在执行删除命令之后,可以将执行的删除命令(例如,delete_column_street_address)添加到数据集的变换脚本中。变换脚本指示应用于数据列的命令。变换脚本可以用于将相同的命令应用于另一个数据集。
因此,示例实施例提供了用于删除数据集中的数据的快速且高效的用户界面。
4.混淆
图31图示了根据一些示例实施例的用于实现混淆命令的用户界面3100。图32图示了根据一些示例实施例的对数据集的混淆命令的结果的用户界面3200。
在混淆命令中,用户可以突出显示(或以其它方式选择)文本示例以生成与模式对应的正则表达式,然后混淆(例如,模糊而不是删除)匹配来自电子表格或其它数据视图的模式的数据。可以混淆数据以防止记录中的所有数据可见。例如,用户可能出于安全或隐私原因想要混淆信息。
在图31中,用户已选择电子表格的“ssn”列3110内的中间两位数字3112。用户然后点击“混淆”按钮以发起混淆操作。图32显示了结果产生的电子表格,其中整个“ssn”列中的中间两位数字替换为两个井号。
如图31所示,数据集显示在用户界面3100上。数据集包括指向例如社会安全号的列3110。虽然使用社会安全号来图示混淆命令,但可以根据用户的期望混淆数据列中的任何数据。例如,用户可能想要混淆任何类型的敏感信息,诸如,信用卡信息或银行账户信息。
社会安全号可以被划分为第一字段3111、第二字段3112和第三字段3113。第一字段3111可以出现在第一个短划线之前,第二字段3112可以在短划线之间,而第三字段3113可以在社会号码的第二个短划线之后。在图31所示的示例中,用户想要混淆社会安全号的第二个字段3112(例如,第一个和第二个短划线之间的数字),以便不是所有的社会安全号都是可见的。虽然第二个字段被混淆,但用户可以选择混淆社会安全号中的任何或所有字段。
图33图示了根据一些示例实施例的用于执行混淆命令的方法3300的流程图。
在步骤3310处,接收对社会安全号列3110内的第二字段3112的选择。所选择的字段3112针对第一记录3120被选择。如果用户在交互式用户界面上,那么可以通过使用例如鼠标或手势在设备的显示器上选择第二字段3112。用户选择的第二个字段可以以第一种颜色突出显示。用户所做的选择在对话框3130中作为指定示例3133提供。
在步骤3320处,可以突出显示社会安全号列中的所有社会安全号以对应于在步骤3320处执行的突出显示。即,列3110中社会安全号中的所有第二字段将以第一种颜色突出显示,并且列3110中社会安全号中的所有第一字段3111和第三字段3113将以第二种颜色突出显示。字段以不同颜色突出显示,以便用户可以容易地区分将要修改的字段和将不修改的字段。
用户界面数据模型生成器可以突出显示所有记录(例如,2-25)以对应于用户为第一记录3120执行的突出显示。即,用户界面数据模型生成器可以基于针对第一记录3120执行的突出显示来确定应该针对社会安全号列中的剩余记录(例如,2-25)执行什么突出显示。虽然附图中示出了25个记录,但是示例实施例可以将混淆命令应用于多于或少于25个记录。
在步骤3030处,可以生成正则表达式。在图31中,生成的正则表达式3132在regex-by-example对话框3130中示出。生成的正则表达式允许用户容易地突出显示哪些数据应该被混淆。用户可以通过改变“ssn”列3110中数据的突出显示或通过改变生成的正则表达式3132中的突出显示来修改突出显示。对“ssn”列3110所做的更改将反映在生成的正则表达式3132中。即,生成的正则表达式将基于用户对数据集执行突出显示中的变化而更新。
在步骤3340处,在已针对社会安全号执行突出显示之后,“Regex-by-Example”对话框3130可以自动出现在屏幕上。虽然在图31所示的示例中,“Regex-by-Example”对话框3130在已针对社会安全号列3110的所有记录(例如,记录1-25)执行突出显示之后出现,但是“Regex-by-Example”对话框3130也可以在初始输入(例如,突出显示第一记录)之后出现。“Regex-by-Example”对话框3130包括由用户输入的指定示例3133。此外,“Regex-by-Example”对话框3130包括生成的正则表达式3132。
在步骤3350处,接收对“混淆”命令的选择。例如,用户可以选择“Regex-by-Example”对话框3130上的“混淆”按钮3131。如图31所示,用户可以选择混淆按钮3131。
在步骤3360处,在接收到混淆命令之后,正则表达式生成服务器2400的混淆生成器2414可以自动混淆“ssn”列3110中社会安全号的所有第二字段。
在步骤3370处,可以显示混淆结果。图32图示了根据一些示例实施例的显示对数据集的混淆命令的结果的用户界面3200。如图32所示,由用户选择的第二字段3112被替换为“##”以代替要混淆的突出显示的字段。因此,社会安全列3110中社会安全号的所有第二字段3112已被替换为“##”。即,所有社会安全号的第二字段3112已被混淆。
在执行混淆命令之后,可以将执行的混淆命令(例如,obfuscate_column_ssn)添加到数据集的变换脚本3230。变换脚本指示应用于数据列的命令。变换脚本可以用于将相同的命令应用于另一个数据集。
因此,示例实施例提供了用于混淆数据集中的数据的快速且高效的用户界面并且可以维护用户信息的隐私。
5.替换
根据一些示例实施例,图34图示了用于实现替换命令的用户界面3400并且图35图示了用于实现替换命令的用户界面3500。在替换命令中,用户可以突出显示(或以其它方式选择)文本示例以生成与模式对应的正则表达式,然后用其它选择的文本替换与模式匹配的文本。
替换命令涉及在示例之前和之后显示的对话框内动态地显示两列表格。为了在替换表达式中利用捕获组的内容,用户可以使用$1,它是Java和Javascript regex API中的标准regex替换语法。
图37图示了根据一些示例实施例的用于执行替换命令的方法3700的流程图。
在步骤3710处,用户可以在“street_address”列2810内选择用户想要用其它数据替换的字段。在图34所示的示例中,用户想要将街道地址中的“Drive”替换为“Dr.”。如图34所示,用户可以从数据集的第五记录3420中选择“Drive”。如果用户在交互式用户界面上,那么用户可以通过使用例如鼠标或手势在设备的显示器上突出显示要替换的数据来选择要替换的数据。
在步骤3720处,在用户突出显示第五记录中要替换的数据(例如,“Drive”)之后,用户界面数据模型生成器可以自动突出显示剩余记录中与第五记录3420中执行的突出显示对应的所有字段。用户界面数据模型生成器可以自动突出显示包含“Drive”的街道地址。如图34所示,记录7、13、16、18和20包含“Drive”,因此用户界面数据模型生成器在记录7、13、16、18和20中自动突出显示“Drive”。“Drive”可以在记录5、7、13、16、18和20中以第一种颜色突出显示。包含“Drive”的街道地址的其余部分可以用与第一种颜色不同的第二种颜色突出显示。因此,可以容易地识别要替换的部分。
在步骤3730处,可以生成正则表达式3432。如图35所示,示出了三部分生成的正则表达式3532。该三部分生成的正则表达式允许用户容易地替换数据的“Drive”部分、“Drive”之前的部分,或“Drive”之后的部分。在这个示例中,用户将数据的“Drive”部分替换为“Dr.”,并且用户可以立即在弹出的“Regex-by-Example”对话框3530的预览电子表格中看到结果。
在图34中,用户已从电子表格的“street_address”列中选择足够数量的示例3433(正和负)以生成与以“Drive”结尾的地址对应的正则表达式。地址3434是正例,并且地址3435是负例。
在步骤3740处,在针对所有记录执行突出显示之后,“Regex-by-Example”对话框3430可以自动出现在屏幕上。虽然在图34所示的示例中,“Regex-by-Example”对话框3430在已针对包含要替换的数据的所有记录执行突出显示之后出现,但是“Regex-by-Example”对话框3430也可以在初始输入(例如,突出显示第五记录中的“Drive”)之后出现。“Regex-by-Example”对话框3430可以包括指定示例3433和生成的正则表达式3432。地址3434是正例,并且地址3435是负例。
在步骤3750处,接收对“替换”命令的选择。例如,用户可以选择“Regex-by-Example”对话框3430上的“替换”按钮3431以发起替换命令。
在步骤3760处,可以显示面板3538和“替换为”字段3537以帮助用户确定哪些信息正在被替换。如图35所示,在面板3538内,用户可以看到初始地址以及地址被替换时将如何出现。例如,地址中的单词“Drive”现在在如元素3539所示的地址中出现为“Dr.”。面板3538可以帮助用户提供关于如果应用替换命令,那么数据将如何出现的预览。
如图35所示,regex 3532被转换成三重捕获组。生成的RegEx是“^(.*?)(D[a-z]+)()$”。因此,用户可以容易地看到什么数据出现在突出显示前(^(.*?))、在突出显示上((D[a-z]+))和在突出显示后(())。在图35所示的示例中,突出显示(())之后没有出现数据。突出显示上的数据是用户选择的数据。在这个示例中,突出显示上的数据是“Drive”,这是用户针对替换所选择的数据。
用户还可以识别所选择的词语将被替换为什么。“替换为”字段3537识别所选择的词语(例如,“Drive”)要被替换为的词语(例如,“Dr.”)。用户可以在“替换为”字段3537中修改替换词语。用户在“替换为”字段3537中选择的替换词语将被应用于突出显示的记录。如果用户同意替换,那么用户可以选择创建按钮3536并且替换数据生成器2415可以执行替换。
如上所示,替换命令还可以涉及在示例之前和示例之后显示的对话框内动态地显示两列表格(例如,弹出的“Regex-by-Example”对话框的预览电子表格)。为了在替换表达式中利用捕获组的内容,用户可以使用$1,它是Java和Javascript regex API中的标准regex替换语法。此外,如果用户选择了替换命令,并且如果用户处于生成捕获组的模式(即,嵌套自动外部),那么对话框中显示的生成的regex获得两个附加的捕获组,总共三个:突出显示前面、突出显示上和突出显示后面。然后,用户可以在替换表达式内将这些引用为$1、$2和$3。此外,如果没有捕获组,那么系统可以将整个生成的regex包装成捕获组,使得用户可以使用$1引用原始文本。
如示例实施例中所公开的,突出显示模式可以包括嵌套自动、嵌套手动和单级。嵌套自动也可以被称为嵌套(自动外部)。嵌套手动也可以被称为嵌套(完全控制)。
在步骤3770处,可以执行替换。在点击“创建”按钮3536确认更改之后,数据被替换。
在步骤3780处,可以显示替换结果。图36图示了根据一些示例实施例的用户界面3600,其显示了对数据集的替换命令的结果。如图36中显示的用户界面3600所示,包含“Drive”的记录现在被替换为“Dr.”。因此,“street_address”列2810中包含“Drive”的记录被替换为“Dr.”。
在执行替换命令之后,可以将执行的替换命令(例如,replace_column_street_address)添加到数据集的变换脚本中。变换脚本指示应用于数据列的命令。变换脚本可以用于将相同的命令应用于另一个数据集。
因此,示例实施例提供了用于替换数据集中的数据的快速且高效的用户界面。
6.过滤行
图38和39图示了根据一些示例实施例的用于实现过滤行命令的用户界面3800和3900。图40图示了根据一些示例实施例的用户界面4000,其显示了对数据集的过滤行命令的结果。
在过滤操作中,用户可以突出显示(或以其它方式选择)文本示例以生成与模式对应的正则表达式,然后过滤数据以包括(或排除)与模式匹配的数据。“过滤行”操作的示例如图38、39、40和41所示。
图41图示了根据一些示例实施例的用于执行过滤行命令的方法4100的流程图。在图41所示的示例中,用户想要过滤数据集中的记录,以便识别街道地址中包含“Avenue”的记录。
在步骤4110处,用户可以选择将用于过滤记录的数据。在图38所示的示例中,用户已从“street_address”列2810中选择“Avenue”。用户可以通过突出显示将用于过滤的数据来选择数据。例如,如果用户在交互式用户界面上,那么可以使用鼠标或经由手势在设备的显示器上选择数据。
在步骤4120处,在用户突出显示要用于过滤的数据之后,用户界面数据模型生成器可以自动突出显示其它记录中的对应数据。例如,用户界面数据模型生成器可以突出显示记录8、13和19中的词语“Avenue”。即,用户界面数据模型生成器可以基于针对第一记录3820执行的突出显示来确定应该针对“street_address”列2810的剩余记录(例如,2-25)执行什么突出显示。
在步骤4130处,可以基于用户选择的突出显示来生成正则表达式。图39图示了包括生成的正则表达式的对话框3930。
在图39中,示出了生成的正则表达式3932,允许用户容易地识别要用作过滤基础的数据。在图39中,三个示例被用户突出显示,并且被显示在指定示例3933中。因此,三个地址出现在指定示例3933中。用户已从电子表格的“street_address”列中选择足够数量的示例3933(正例3934和负例3935),以生成与以“Avenue”结尾的地址对应的正则表达式。虽然示出了三个示例,但是用户可以基于用户期望的结果使用一个或多个示例。
正例和负例可以以不同的颜色或以正例和负例在对话框3930中和在用户界面上显示的数据集中不同地显示的任何方式来显示。在图39所示的指定示例3933中,用户从“street_address”列2810中选择包含“street”的两个地址作为负例。即,它们是用户不希望出现在记录中的数据示例。但是,如果用户提供了附加示例,那么可以生成将应用于过滤的更准确的regex表达式。
用户可以通过改变“street_address列”2810中的数据中的突出显示或者通过改变正则表达式3932中的突出显示来修改突出显示。对“street_address列”2810所做的更改将反映在生成的正则表达式3932中。在其它示例中,用户可以使用类似的技术来定义与应该过滤掉(而不是保留)的模式对应的正则表达式。
在步骤4140处,在已执行突出显示之后,“Regex-by-Example”对话框3930可以自动出现在屏幕上。虽然在图39所示的示例中,在已针对“street_address”列2810的所有记录(例如,记录1-25)执行突出显示之后出现“Regex-by-Example”对话框3930,但是“Regex-by-Example”对话框3930也可以在初始输入(例如,突出显示第一记录)之后出现。
在步骤4150处,接收对“过滤行”命令的选择。例如,用户可以选择“Regex-by-Example”对话框3930上的“过滤行”按钮3931。用户可以点击用户界面内的“过滤行”3931按钮以发起过滤选项,该过滤选项过滤掉所有其它类型的地址,只留下“Avenue”地址,如图38中所示。
在步骤4160处,接收关于过滤行命令的确认。具体而言,接收是保留(保留按钮3937)由示例3933识别的记录还是删除(删除按钮3938)由示例3933识别的记录的选择。在选择“保留”按钮3934或“删除”按钮3935之后,用户然后可以选择创建按钮3936以发起过滤。
在步骤4170处,正则表达式生成器2410的过滤行数据生成器2416可以根据用户输入的过滤标准自动过滤记录。
在步骤4180处,可以显示过滤行结果。如图40中显示的用户界面4000所示,记录已被过滤,使得仅显示地址中具有“Avenue”的记录。在示例中,电子表格包含超过25个记录。出于图示的目的,示出了“street_address”中具有“Avenue”的前25个记录。
在执行过滤行命令之后,可以将执行的过滤行命令(例如,filterrow_column_street_address)添加到数据集的变换脚本。变换脚本指示应用于数据列的命令。变换脚本可以用于将相同的命令应用于另一个数据集。
因此,示例实施例提供了用于过滤数据集中的数据行的快速且高效的用户界面。
VI.负例的上下文
在示例实施例中,对于嵌套手动中的负例,可以针对与正例对应的上下文执行搜索。
如果用户界面处于嵌套手动模式,那么可以接收具有“Windows NT 6.1”的外部突出显示和“6.1”的内部突出显示的示例。响应于例如由用户提供的初始示例,UI可能突出显示“Windows NT 6.0”。UI经由正则表达式生成器可以突出显示“Windows NT 6.0”,因为它已确定“Windows NT 6.0”与最初作为示例提供的“Windows NT 6.1”匹配。用户然后可以选择“Windows NT 6.0”以指示“Windows NT 6.0”不是与“Windows NT 6.1”的期望匹配。即,用户可以选择“Windows NT 6.0”来提供负例。如果用户在“Windows NT 6.0”上点击来创建负例,那么UI可能只发送包含“6.0”作为负例。因此,根据示例实施例,UI可以在运行LCS之前搜索匹配的“Windows NT”上下文。示例实施例将基于所提供的负例来搜索上下文。
图50图示了根据一些示例实施例的用于提供负例的方法5000的流程图。
在步骤5010处,可以接收初始选择。基于初始选择生成正则表达式。
例如,用户可以选择“Windows NT 6.1”的外部突出显示和“Windows NT 6.1”的“6.1”的内部突出显示。外部突出显示和内部突出显示可以通过突出显示数据来进行。对于外部突出显示,用户可以突出显示“Windows NT 6.1”,对于内部突出显示,用户可以突出显示已经突出显示的“Windows NT 6.1”中的“6.1”。外部突出显示对应于应用的名称,并且内部突出显示对应于版本号。外部突出显示可以以与内部突出显示不同的颜色出现。如果用户在交互式用户界面上,那么可以通过使用例如鼠标或手势在设备的显示器上执行突出显示。
在步骤5020处,在用户突出显示期望的数据片段(例如,内部和外部突出显示)之后,用户界面数据模型生成器可以自动突出显示相同记录或剩余记录内的对应数据。例如,用户界面数据模型生成器可以突出显示记录中“6.1”的所有实例。但是,正则表达式生成器也可以从数据集中的记录中突出显示“Windows NT 6.0”的所有实例。因此,为了确保结果更准确,用户可以提供负例。
在步骤5030处,用户可以提供负例。用户可以提供负例,因为用户不想要由UI自动突出显示的应用和版本号中的全部。例如,用户可以选择“Windows NT 6.0”来提供负例。然后UI可以识别包含“6.0”版本号的所有记录。但是,这可能导致识别包含“6.0”版本号的“Windows NT”以外的应用。
在步骤5040处,UI将根据负例确定上下文。UI将根据用户提供的示例确定上下文,而不是突出显示包含“6.0”版本号的所有版本号。即,UI将不仅会从数据记录中识别版本号“6.0”,而且在识别包含负例的记录时,还会从记录中识别应用名称“Windows NT”。因此,UI在识别包含负例的记录时将搜索“Windows NT 6.0”,而不是在识别包含负例的记录时仅搜索包含“6.0”的记录。
下面关于图51更详细地解释从负例确定上下文。
在步骤5050处,根据识别出的上下文更新数据集上的突出显示。UI将突出显示包括“Windows NT 6.0”而不仅仅是“6.0”的词语,从而使负例更加准确。
生成的正则表达式可以基于从负例识别出的上下文来更新。
因此,示例实施例提供了更精确的提供负例的方法。在运行LCS算法之前确定上下文,以确定由一个或多个不同的正则表达式代码集共享的最长公共子序列。通过从提供的示例确定上下文,可以生成更准确的正则表达式。
图51图示了根据一些示例实施例的用于从负例确定上下文的方法5100的流程图。图51更详细地解释了图50的步骤5040。
在步骤5110处,在已提供负例之后,将确定是否存在多个突出显示以及这些多个突出显示是否嵌套(内部加外部突出显示)。如图51所示,除非提供了负例(例如,图50的步骤5030),否则不会确定负例的上下文。
在步骤5120处,从负例左侧的数据获得上下文。具体而言,上下文是从嵌入负突出显示位置左侧的数据中获得的。可以在获得上下文之前确定负突出显示的嵌入位置。执行此步骤的代码可以包括val eLookBehindStart=r.s.slice(0,r.highlightSpans.min).foldRight(es.slice(0,highlightSpanRange.start).reverse)((sElem,esLookBehind)=>esLookBehind.dropWhile(_.cc==sElem.cc)).length。
在示例实施例中,使用最左边的跨度。eLookBehindStart将获得从向左走(从负突出显示的左边缘)最左边的跨度的跨度编号。
步骤5120可以是迭代处理。例如,可以针对嵌入负突出显示的位置左侧的每个跨度执行过滤。对于与负例的跨度不匹配的片段的每个跨度,可以移除数据集片段的突出显示。在每次迭代中,所考虑的跨度列表将被缩短。
在步骤5130处,从负例右侧的数据获得上下文。具体而言,上下文是从嵌入负突出显示位置右侧的数据中获得的。这一步的代码可以包括val eLookAheadEnd=r.s.slice(r.highlightSpans.max+1,r.s.length).foldLeft(es.slice(highlightSpanRange.end,es.length))((esLookAhead,sElem)=>esLookAhead.dropWhile(_.cc==sElem.cc)).length。
在示例实施例中,使用最远的右侧跨度。eLookAheadEnd将获得从向右走(从负突出显示的右边缘)最右边的跨度的跨度编号。
步骤5130可以是迭代处理。例如,可以针对嵌入负突出显示位置右侧的片段的每个跨度执行过滤。对于与负例的跨度不匹配的每个片段,可以移除数据集的片段的突出显示。在每次迭代中,所考虑的跨度列表将被缩短。
在步骤5140处,执行片段过滤。不与负例左侧和右侧的上下文(例如,在步骤5120和5130处识别出的上下文)对应的突出显示片段被移除。
虽然使用了负例的左侧和右侧的上下文,但是可以使用仅左侧或右侧上下文来识别负例的上下文,例如,如果仅存在左上下文数据或仅存在右上下文数据。此外,虽然在图51中描述的示例中左上下文在右上下文之前被识别,但是右上下文可以在左上下文之前被识别。此外,虽然以上示例是针对确定负例的上下文进行描述的,但是也可以针对正例确定上下文。
用于在嵌套手动模式中搜索与负例对应的上下文的示例代码可以包括以下代码中的一些或全部:
Figure BDA0003210294110000631
Figure BDA0003210294110000641
VII.在跨度上使用最长公共子序列算法的正则表达式生成
本文描述的附加方面涉及基于LCS算法从一个或多个数据输入字符序列生成正则表达式,但其中正则表达式生成器110也可以处理仅在一些示例中存在的字符。为了处理仅在一些输入示例中存在的字符,可以定义其中跟踪正则表达式代码的最小和最大出现次数的跨度。例如,对于“9pm”和“9pm”的字符序列输入,在数字和“pm”文本之间存在可选的空格。在这种情况下,当某个跨度(例如,“9”和“pm”之间的单个空格)可能不存在于所有给定的输入示例中时,最小出现次数可以被设置为零。然后可以将这些最小和最大数字映射到正则表达式多重性语法。最长公共子序列(LCS)算法可以在从输入示例导出的字符跨度上运行,包括不出现在每个输入示例中的“可选”跨度(例如,最小长度为零)。如下面所讨论的,在LCS算法的执行期间可以合并连续的跨度。在这种情况下,当携带的额外可选跨度最终连续出现时,LCS算法也可以在这些可选跨度上递归运行。即,虽然LCS算法的运行本质上是递归的,但在这些情况下,整个LCS算法可以递归运行(例如,递归运行递归LCS算法)。除其它技术优势外,这还可以允许更短、更清晰、更可读的正则表达式生成。例如,(am|am)(即,在am之前有可选的空格)可能在不递归运行LCS算法的情况下生成,而递归运行LCS算法可能导致生成的正则表达式为(?am),它更短且整洁。
图18是图示根据本文描述的一个或多个实施例的用于使用最长公共子序列(LCS)算法生成包括可选跨度的正则表达式的处理1800的流程图。在步骤1801中,正则表达式生成器110可以接收一个或多个字符序列作为输入数据,对应于正正则表达式示例。在步骤1802中,正则表达式生成器110可以将字符序列转换成正则表达式代码。因此,步骤1801和1802可以与上面讨论的先前对应示例相似或相同。然后,在步骤1802中,还可以将正则表达式代码转换成跨度数据结构(或跨度)。如上所述,每个跨度可以包括存储字符类代码(例如,regex代码)和重复计数范围(例如,最小计数和/或最大计数)的数据结构。在步骤1804中,正则表达式生成器110可以执行LCS算法,从而提供跨度集合作为算法的输入。这个示例中LCS算法的输出可以包括跨度的输出集合,包括至少一个具有等于0的最小重复计数范围的跨度,其对应于LCS算法的输出内的可选跨度。最后,在步骤1805中,正则表达式生成器110可以基于LCS算法的输出的输出(包括可选的跨度)来生成正则表达式。
在一些实施例中,为了提高可读性并实现适当级别的限制,正则表达式生成器110可以使用单跨度交替。为了图示,在步骤1804中执行LCS算法之后,输出(即,最终转换成正则表达式之前的中间输出)可以是一系列跨度,每个跨度具有最小和最大重复计数。从跨度列表到正则表达式的简单直接转换可能导致被标记为可选的多个正则表达式代码(例如,使用问号“?”修饰符代码)。作为对照,在一些情况下,可能期望生成涉及交替的正则表达式,其可以被表达为括在括号内的垂直条分隔的替代项(参见https://www.regular-expressions.info/alternation.html)。例如,将跨度直接转换成时间的正则表达式可以是\d\d:\d\d(am)?(pm)?。但是,在这个示例中,正则表达式生成器110可以被配置为将该正则表达式转换成更可读的\d\d:\d\d(am|pm)。为了执行转换,正则表达式生成器110可以跟踪跨度下面的原始串片段,并且如果每个原始串片段出现在至少两个给定的正例中,那么可以确定应该输出那些原始串片段的列表作为垂直条分隔的替代项(例如,而不是多个可选的正则表达式代码)。
图19是图示使用最长公共子序列(LCS)算法生成正则表达式的示例图,其中生成的正则表达式包括可选的跨度。在这个示例中,两个输入数据字符序列是“8am”和“9pm”。如以上所讨论的,输入数据字符序列首先被转换成正则表达式代码(步骤1802),然后被转换成跨度(步骤1803)。可以提供跨度作为LCS算法的输入(步骤1804),并且LCS输出包括可选的跨度Z<0,1>,指示可选的单个空格可以是数字和两个字母的文本序列。即,这个示例中的上标符号可以包括应用于前面的代码(例如,Z=空格)的最小重复计数范围(例如,0)和最大重复计数范围(例如,1)这两个数字。最后,可以基于LCS算法的输出跨度生成正则表达式,并且可以将可选的跨度转换成对应的正则表达式代码“pZ*”。
在一些实施例中,在LCS算法的执行期间,由正则表达式生成器110对可选空格的再现和使用可以提供关于性能和可读性的附加技术优势。例如,在生成正则表达式时,在一些情况下期望能够处理所有给定示例中共有的字符以及仅存在于一些示例中的字符。
在某些实施例中,对于每个跨度数据结构,可以跟踪类别代码的最小出现次数和类别代码的最大出现次数两者。在一个或多个给定示例中根本不存在跨度的情况下,最小值被设置为零。作为另一个示例,为了生成正则表达式来处理拼出的年份中的月份,然后可以将最小和最大数字映射到包括大括号的正则表达式多重性语法(例如,[A-Za-z]{3,9})。
在一些实施例中,正则表达式生成器110可以跟踪每个跨度的最小和最大出现次数,但也可以处理附加的实现细节。例如,作为处理可选跨度和在字符跨度上运行LCS的组合的结果,正则表达式生成器110可以被配置为在LCS算法的整个执行过程中检测和合并连续的跨度。此外,携带的任何额外的可选跨度有时连续出现,并且可能期望LCS算法也递归地在这些跨度上运行。例如,在一些情况下,正则表达式生成器110修改和/或扩展LCS算法以有利于(或加权)可选和所需序列元素(例如,跨度)之间的较少转换。例如,将可选跨度分组在一起可以最小化必须在正则表达式内使用的分组括号的数量,这可以因此提高生成的正则表达式的人类可读性。在一些情况下,如果即使在考虑可选跨度之后所得长度也相等,那么正则表达式生成器110可以表现出对在可选跨度和所需跨度之间具有较少转换的替代项的偏好。例如,在一些情况下,可以实现标准LCS算法以在其决策点偏好选择更长的序列。但是,在选项长度相等的决策点,配置偏好可以被编程到正则表达式生成器110中。例如,一种这样的配置偏好可能是更偏好较短的序列(一旦考虑了可选的跨度)。因此,这个配置中的定制LCS可以同时优化(所需跨度的)较长序列和(总所需跨度和可选跨度的)较短序列。
在一些实施例中,正则表达式生成器110对LCS算法的实现可以被配置为选择较短的输出。如以上所讨论的,LCS算法通常可以用于找到最长公共子序列。对于使用跨度生成正则表达式,可以使用LCS算法来识别所需序列元素的最长序列(在我们的示例中,所需的跨度)。但是,对于包括可选跨度的实施例,LCS算法可以被配置为保留最大化公共序列元素(例如,跨度)的数量的原始目标,同时还最小化可选跨度的数量。即,在原始LCS算法中,关于是从第一个示例串中还是从第二个示例串中使用序列元素(例如,跨度),可以做出任意选择(在最大化公共序列元素的数量方面)。在这种情况下,正则表达式生成器110可以实现LCS算法的修改版本,一旦还考虑了可选跨度,该算法的修改版本就可以选择导致更短的整体正则表达式长度的算法。最终结果中更短的正则表达式可以提高可读性。
此外,在一些实施例中,正则表达式生成器110对LCS算法的实现可以被配置为偏好更多数量的所需跨度。即,给定选择,正则表达式生成器110可以选择具有较少可选跨度的LCS输出以提高人类可读性。
在一些实施例中,如果生成的正则表达式以所需的跨度开始(这也可以用作人类读者的心理锚点),而不是以可选的跨度开始正则表达式,那么它们可能更具可读性。因此,在一些情况下,如果结果选项具有相同数量的转换,那么可以选择具有较早非可选跨度的选项。此外,在一些实施例中,由正则表达式生成器110执行的LCS算法可以被配置为将所有空格(包括与空格对应的可选跨度)推动到正则表达式内的右侧。通过将所有空格推动到右侧,可以增加空格的跨度可以被合并在一起的机会,这可以简化结果生成的正则表达式并提高可读性。因此,在LCS算法的执行期间,当确定两个子串集合具有相同的LCS时,可以选择有利于提高可读性的集合,而不是任意选择两个集合中的一个。此外,在一些实施例中,LCS算法可以被配置为有利于更多数量的所需跨度和/或更少的可选跨度,以便提高可读性。
如上所述,在一些情况下,负例也可以基于可选的跨度。例如,用户可以提供“ab”和“a2b”的正例以及“a3b”的负例。在这种情况下,示例实现方式可能失败,因为它可能试图仅基于所需的跨度进行区分,并且“2”数字位于可选跨度中。在这种情况下,用户可以警告失败并且可以经由用户界面被提供选项以手动修复生成的正则表达式和/或移除一些负例。
在一些实施例中,可能存在作为从REST服务返回的JSON的一部分返回的isSuccess。在一些实施例中,当isSuccess=false时,生成的regex可以变成不同的颜色(例如,红色)。
如上所述,正则表达式生成器110在一些情况下可以使用单跨度交替。此外,在一些实施例中,正则表达式生成器110可以被配置为执行多跨度交替。即,有时行中的几个跨度可以形成交替,诸如表达为([A-Z]{3}\s+\d\d,\s+|\d\d/\d\d/)\d\d\d\d的日期。为了检测这些,正则表达式生成器110可以首先找到来自LCS算法的输出的哪些跨度实际上用于所有给定的输入正例。这些公共跨度与第一跨度之前的虚拟跨度和最后一个跨度之后的虚拟跨度一起可以构成锚点。在每对连续的锚点之间(它们之间也至少有一个非锚跨度)是必须跨越的“桥”。然后,对于每个桥,正则表达式生成器110可以(a)为每个输入正例确定桥跨度覆盖的串片段,(b)使用本文描述的技术将每个串片段转换成正则表达式,然后(c)从上面消除重复并将它们放入到正则表达式交替语法中。
代替以任意顺序出现的替换内的替换,它们也可以按字母顺序排序。通过具有更具确定性的输出,生成的正则表达式可能不会因输入示例中的微小变化—诸如在实时键入期间,当regex利用用户键入的每个字符实时生成时—而发生太大变化。此外,一些高级regex解释器在遇到交替时,可能会取决于是否存在贪婪量词而明确采用贪婪与非贪婪策略。但是,其它regex解释器,诸如在标准Java和Javascript API中找到的那些,可能只是按照它们出现的顺序尝试交替内的替代。为了弥补这个常见的弱点,regex生成可以首先输出交替内更长的替代。并且为了打破任何联系,它可以使用字母顺序作为第二排序标准。
在一些实施例中,正则表达式生成器可以被配置为将出现在少数正例中的跨度折叠到非贪婪通配符.*?。即,有时输入示例可能会变得有点啰嗦。正则表达式生成器可以在它检测到跨度的数量和原始片段内容中存在显著差异时使用通配符.*?,而不是尝试匹配每一个单词及其特定的单词长度。在一些实施例中,对于要考虑参与这种折叠到通配符.*?的跨度,它必须满足以下三个条件之一。(1)跨度可以(严格地)参与少于输入示例总数的三分之一,(2)跨度是SPACE(空格)跨度,以及(3)跨度的所有原始文本片段不频繁出现,并且在解中存在“唯一标点符号”。“不频繁”可以意味着(严格地)少于示例数量的三分之二。“唯一标点符号”可以意味着在解中的某处存在SYMBOL或PUNCTUATION,或者解以^锚定到文本的开头或以$锚定到文本的末尾。
在一些情况下,可以防止eol通配符邻接突出显示内部的折叠通配符。即,回想一下,如果使用了^或$,那么通配符出现在相对端。例如,^([A-Z]+).*?匹配第一个单词。不加区分地折叠通配符可能会导致类似^(.*?).*?的内容,这将使regex解释器没有任何具体内容可以用作匹配的参考点。为了解决这个问题,如果检测到,如果使用了^并且捕获组内的最后一个跨度是折叠到通配符.*?的一部分,那么捕获组之后的一个附加跨度被用于在发出行尾通配符之前的输出,如用于与通配符相邻的负字符类。类似地,如果使用了$并且捕获组内的第一个跨度是折叠到通配符的一部分,那么在捕获组之前的一个附加跨度被明确用于输出。
在一些实施例中,符号和标点符号可能不再是可跨越的,例如,以允许突出显示端点出现在两个标点符号之间。在这样的示例中,每个标点符号和每个符号都可以占据其自己的PUNCTUATION或SYMBOL跨度。在其它情况下,“A.,S”可能会产生三个跨度LETTER(带有原始片段A)、带有原始片段的PUNCTUATION(.,)和LETTER(带有原始片段S)。但是,在这些实施例中,可能有四个跨度。在这个示例中,如果逗号用作逗号分隔列表中的分隔符可能会有所帮助,尤其是如果每个示例有多个用户突出显示时。在这个示例中,点(句点)可能是多余的,并且它不应该与逗号在同一跨度中。
此外,对于ALPHANUMERIC类型的跨度,正则表达式生成器可以跟踪有多少字母和数字跨度被替换。因为算法的许多方面,诸如确定整体解中内部突出显示的开始和结尾,通过跨度索引跟踪位置,用单个ALPHANUMERIC跨度替换多个LETTER和NUMBER跨度会丢弃这些索引和位置。因此,可能需要维护从替换前索引到替换后索引的映射。此外,这些需要在每个示例的基础上进行跟踪,因为一般来说,每个示例不包含来自全部解(其包含那些未在100%示例中表示的跨度的可选跨度)的所有索引。类成员numPreSubstitutedSpans已被添加到Span类,其类型和默认值如下:numPreSubstitutedSpans:Map[ID,Int]=orig.flatMap(_.fromExamples).distinct.map((_,1)).toMap。
在一些实施例中,通常可用的regex API可以用于找到捕获组的结尾偏移。例如,如关于可以在一些用户界面中实现的替换命令所描述的,在嵌套自动外部模式下使用替换命令时,可以在常规捕获组之后生成附加捕获组(以及在常规捕获组之前生成一个附加捕获组,一共三个)。用户界面可以执行这种替换,并且与上面类似,为了避免必须在用户界面中实现完整的解析器,可以采用技术来找到捕获组的右括号。这可能比找到捕获组的左括号更复杂,因为没有简单的方法来区分捕获组的右括号(<stufff>)和非捕获组的右括号(?:<stuff>)。在一些情况下,通过使用前视来查找?:来区分左括号是可能的。在一些实施例中,可以采用技术来要求在搜索中有已知匹配正则表达式的事物的示例。通过将级联在一起的捕获组与原始示例文本进行比较,可以确认正则表达式完全被捕获组覆盖,没有间隙。这种技术的代码如下所示:
Figure BDA0003210294110000711
Figure BDA0003210294110000721
VIII.使用组合最长公共子序列算法的正则表达式生成
本文描述的其它方面涉及组合搜索,其中由正则表达式生成器110执行的LCS算法可以运行多次以生成“正确的”正则表达式(例如,正确匹配所有给定的正例并且正确地排除所有给定的负例的的正则表达式),和/或生成多个正确的正则表达式,从中可以选择最理想或最佳的正则表达式。例如,在组合搜索期间,完整的LCS算法和正则表达式生成处理可以运行多次,包括文本处理方向的不同组合/排列、不同的锚定,以及LCS算法的其它不同特性。
图20是图示用于基于最长公共子序列(LCS)算法的组合执行来生成正则表达式的处理2000的流程图。在步骤2001中,正则表达式生成器110可以接收与正例对应的输入数据字符序列。在步骤2002中,正则表达式生成器110可以迭代LCS算法的执行技术的各种不同组合。如这个示例中所示,在步骤2002的每次迭代期间,正则表达式生成器110可以选择以下LCS算法执行参数(或特性)的不同组合:锚定(即,无锚定、锚定到行的开头、锚定到行的末尾)、处理方向(即,从右到左的顺序、从左到右的顺序)、推动空格(即,进行或不进行推动空格)和折叠跨度(即,进行或不进行折叠跨度)。在步骤2003中,在输入数据字符序列上(或者如果输入字符序列首先被转换,那么在正则表达式代码上)运行LCS算法,其中基于步骤2002中选择的参数/特性来配置LCS算法。在步骤2004中,正则表达式生成器110可以存储LCS算法的输出,包括诸如算法是否成功识别LCS,以及对应的正则表达式的长度等数据。在步骤2005中,该处理可以迭代直到已经使用组合搜索的参数/特性的所有可能组合运行了LCS算法。最后,在步骤2006中,选择LCS之一的特定输出作为最佳输出(例如,基于成功和正则表达式长度),并且可以基于所选择的LCS算法输出生成正则表达式。
在各种实施例中,可以针对参数/特性的各种不同组合执行诸如上文参考图20描述的组合搜索。例如,在一些实施例中,LCS算法可以使用插入符号^将正则表达式锚定到文本的开头,和/或美元符号$将正则表达式锚定到文本的结尾。在一些情况下,这种锚定可能会导致生成更短的正则表达式。当用户希望在串的开头和/或结尾找到特定模式时,锚定可能特别有用。例如,用户可能想要开头处的产品名称。为了避免LCS算法与描述产品名称的不同数量的单词混淆,可以使用插入符号将regex锚定到串的开头,如下图中所绘出的。
此外,在一些实施例中,LCS算法可以用正向或反向的输入数据执行(或者类似地,LCS算法可以被配置为以正常的顺序接收输入数据,然后在执行算法之前反转顺序)。因此,在一些实施例中,可以在一对输入字符序列或代码上执行的LCS算法的组合搜索可以是:
1.正常(从右到左)顺序,没有锚定到开始或结尾
2.正常(从右到左)顺序,使用插入符号^锚定到行的开头
3.正常(从右到左)顺序,使用美元符号$锚定到行的末尾
4.反向(从左到右)顺序,没有锚定到开始或结尾
5.反向(从左到右)顺序,使用插入符号^锚定到行的开头
6.反向(从左到右)顺序,使用美元符号$锚定到行的末尾
在这个示例中,在LCS的六次执行中,可以选择最短的结果产生的正则表达式(步骤2006)。
在一些实施例中,LCS算法的组合搜索还可以迭代贪婪量词“?”和非贪婪量词“??”。例如,在默认情况下,如果有可选的跨度,那么发出一个问号,例如,[A-Z]+(?:[A-Z]\.)?[A-Z]+用于具有可选的中间首字母的名字和姓氏。如果在使用贪婪量词时没有找到令人满意的正则表达式,那么组合搜索可以尝试将所有问号量词替换为双问号量词(例如,[A-Z]+(?:[A-Z]\.)??[A-Z]+)。双问号对应于非贪婪量词,它可以指示下游正则表达式匹配器进入回溯模式以找到匹配。
此外,在一些实施例中,LCS算法的组合搜索还可以迭代是否偏好右侧的空格。例如,如上所述,在一些实施例中可以使用将空格右推的策略,例如,当LCS算法面临其它相等选项的任意选择时,希望空格跨度可以被合并在一起,从而导致整体跨度的数量较少。这种特征为组合搜索添加了另一个选项,即,或者将空格右推或者根据传统的LCS方法执行任意决策。
此外,在一些实施例中,LCS算法的组合搜索还可以通过在原始串上运行LCS来迭代扫描/不扫描所有示例中公共的文字。在这样的实施例中,LCS算法可以被配置为识别和对齐公共单词。如本文所使用的,“公共单词”可以指在每个正例中出现的单词。一旦识别了公共单词,它的跨度类型就可以从LETTER转换成WORD,然后通过LCS算法的后续运行可以自然地在它上面对齐。
因此,在下面的示例中,组合搜索可以迭代几个参数/特性以达到要执行完整LCS算法的96次。在这个示例中要迭代的各种参数/特性是:
·锚定(3)(值=^,$或两者都不是)
·推动空格(2)(值=是或否)
·将低基数跨度合并为通配符(2)(值=是或否)
·贪婪量词?(2)(值=是或否)
·在公共令牌上对齐LCS算法(2)(值=是或否)
·使用“\w”表示字母数字,以及保留字母“\pL”和数字
“\pN”作为单独的跨度处理(2)(值=是或否)
如上所述,在这个示例中,完整的LCS算法将执行96次(例如,3*2*2*2*2*2=96)。
但是,在其它实施例中,正则表达式生成器110可以提供性能增强,通过该性能增强,以上列表中仅前三个特性(锚定、推动空格和将低基数跨度合并为通配符)可以参与组合搜索。这可能导致要执行的完整LCS算法的次数要少得多(例如,3*2*2=12次)。在这样的实施例中,虽然上述列表中的最后三个特性(贪婪量词、在公共令牌上对齐LCS算法和使用“\w”表示字母数字,以及保留字母“\pL”和数字“\pN”作为单独的跨度处理)不参与组合搜索,这些特性可以在最后单独和连续地进行测试。在这样的实施例中可以实现技术优势,因为以这种方式划分搜索空间仍然可以导致找到令人满意的正则表达式,但是性能提升大约8倍。
为了图示,组合搜索的以下示例可以提供优于先前示例的性能优势。在这个示例中,组合搜索可以基于以下要迭代的参数/特性来执行:
·锚定(3):BEGINNING_OF_LINE_MODE,END_OF_LINE_MODE,NO_EOL_MODE
·顺序/方向(2):从右到左(正常)LCS与从左到右(反向)LCS
·推动(2):是否尝试在LCS算法内将空格右推
·压缩到通配符(2):是否尝试将仅有时出现的跨度的长序列压缩到通配符.*?
这个示例中的组合可以导致运行完整算法3*2*2*2=24次)。正则表达式生成器110然后可以采用LCS算法的24个结果中最好的结果,其中“最好”可以意味着(a)LCS算法成功,以及(b)生成了最短的正则表达式。正则表达式生成器110然后可以执行以下三个附加任务:
1.尝试将未被空格、标点符号或符号分隔的字母和数字序列压缩为称为ALPHANUMERIC,对应于生成的\w的regex的新跨度类型。这对于如在点击流日志中的IPv6地址中找到的十六进制数可能是有用的。
2.尝试使用非贪婪量词??而不是贪婪量词?
3.尝试在文字上对齐
A.跨度突出显示对齐
正例或负例可以包括多个突出显示。提供的每个示例可以包括多个突出显示(例如,外部和内部突出显示)。因此,示例实施例提供了当多个示例各自具有其自己的突出显示时高效且准确处理的方法。
每个示例被分成突出显示前面、突出显示上和突出显示后面。完整的算法在每个集合上运行,每个集合包括突出显示前面、突出显示上和突出显示后面。即使提供的示例之间存在很大差异,也支持多个示例上的用户突出显示,并且将避免突出显示失败。
图52图示了根据一些示例实施例的用于基于跨度突出显示对齐生成正则表达式的图5200。
图52图示了针对两个数据示例“Jane Doe”5210和“David Williams Jr.”5220执行突出显示对齐。如图52所示,突出显示了每个条目的姓氏(例如,Doe和Williams)。例如,用户可能已在第一记录中选择“Doe”作为示例,并且用户可能已在另一数据记录中选择“Williams”作为示例。为了便于说明,示出了两个示例。但是,可以针对多个数据示例执行突出显示对齐。
在图52所示的示例中,regex是分部分(例如,三部分)生成的。取决于数据记录的数据单元格中的信息,可以有更多或更少的部分。可以针对所有“突出显示前面”的片段、“突出显示上”的片段和“突出显示后面”的片段生成regex。针对“突出显示前面”的片段生成第一regex 5231,针对“突出显示上”的片段生成第二regex 5232,并且针对“突出显示后面”的片段生成第三regex 5233。
生成的regex的跨度(即,最终regex生成之前的中间结果)被级联在一起。为各部分生成的regex的跨度(例如,突出显示前面的片段、突出显示上的片段和突出显示后面的片段)被级联在一起。
图53图示了根据一些示例实施例的用于执行跨度突出显示对齐的方法5300的流程图。图53的步骤可以由诸如图1和图24中所示的正则表达式生成器执行。
在步骤5310处,可以接收初始突出显示选择。例如,用户可以从数据列中的第一个记录中选择文本片段。在图52所示的示例中,用户在姓名列中已突出显示姓氏5210“Doe”。被选择的片段可以被识别为“突出显示上”的片段。所选择的片段之前的片段可以被识别为“突出显示前面”的片段。所选择的片段之后的片段可以被识别为“突出显示后面”的片段。
在步骤5320处,可以接收第二突出显示选择。例如,用户可以从与初始突出显示选择相同的数据列(例如,名称列)中的第二个记录中选择文本片段。在图52所示的示例中,用户在姓名列中已突出显示姓氏5220“Williams”。在图52所示的第二个示例中,用户也已突出显示姓氏。被选择的片段可以被识别为“突出显示上”的片段。所选择的片段之前的片段可以被识别为“突出显示前面”的片段。所选择的片段之后的片段可以被识别为“突出显示后面”的片段。用户可能想要提供多个示例,因此用户可以提供附加的突出显示选择。但是,所提供的示例可以不清楚地对齐。
在步骤5330处,执行片段的对齐。出现在突出显示前面的片段被一起对齐,出现在突出显示后面的片段被一起对齐,并且突出显示后面的片段被一起对齐。因此,在图52所示的示例中,包含“Jane”的片段5211和包含“David”的片段5221对齐,因为它们出现在突出显示的片段前面。片段5210“Doe”和片段5220“Williams”被一起对齐,因为它们在突出显示上出现。不包含任何字符的片段5215和片段5222对齐,因为它们出现在突出显示后面。
在步骤5340处,为“突出显示前面”片段生成正则表达式。例如,可以生成第一regex 5231。第一regex 5231可以由regex生成器基于突出显示的片段前面的数据生成。
在步骤5350处,为“突出显示上”片段生成regex。例如,可以生成第二regex 5231。第二regex 5232可以由正则表达式生成器基于突出显示的片段中的数据生成。
在步骤5360处,为“突出显示片段后面”生成regex。例如,可以生成第三regex5231。第三regex 5233可以由正则表达式生成器基于突出显示的片段后面的数据生成。
如图53所示,在三个部分5231、5232和5233中生成regex。为“突出显示前面”片段生成第一regex 5231,然后为“突出显示上”片段生成第二regex 5232,然后为“突出显示片段后面”生成第三regex 4233。虽然描述了生成第一、第二和第三regex的顺序,但是生成regex的顺序可以不同。此外,虽然描述了三个部分,但是可以针对数据示例的多于三个部分执行突出显示。
在步骤5370处,级联三个regex的跨度。即,不是将三个结果产生的regex级联在一起,而是将跨度(即,最终regex生成之前的中间结果)级联在一起。
在步骤5380处,针对被级联的三个跨度确定最长公共子序列。然后可以针对在突出显示前面跨度、突出显示上跨度和突出显示后面跨度上运行LCS算法的输出确定LCS。
因此,示例实施例提供了更准确地确定最长公共子序列的方法,因为最长公共子序列是基于类似定位的数据确定的。
示例实施例还提供了字母数字跨度。确定内部突出显示的开始和结尾、通过跨度索引跟踪位置,以及用单个字母数字跨度替换多个字母跨度和数字跨度可以丢弃索引和位置。因此,示例实施例提供了从替换前索引到替换后索引的映射。生成将字母数字跨度的索引与一个或多个数字和一个或多个字母的索引相关联的映射。
此外,在每个示例的基础上跟踪映射,因为每个示例可能不包含来自全部解的所有索引。可以识别多个预先替换的跨度。
图54图示了根据一些示例实施例的跟踪跨度的方法5400的流程图。具体而言,示例实施例提供了用于确定字母数字跨度的多少个字母跨度和多少个数字跨度被替换的方法。
在步骤5410处,一个或多个字母跨度和一个或多个数字跨度被替换为单个字母数字跨度。例如,HTML十六进制颜色代码可以被替换为单个字母数字跨度,而不是三个不同的跨度,诸如一个字母跨度和一个数字跨度。在HTML十六进制颜色代码(诸如<span style="color:#FF030A">BUY NOW!</span>)中,使用了单个字母数字跨度FF030A而不是三个不同的跨度(例如,一个字母跨度,一个数字跨度和另一个字母跨度)。
一些数据片段示例可以包括十六进制“数字”A-F。十六进制数字可以出现在十六进制代码内的任何地方。因此,可以使用字母数字跨度容易地识别此类数据片段示例的匹配。
在步骤5420处,识别包括替换一个或多个字母跨度和一个或多个数字跨度的字母数字跨度的数据片段示例。
在步骤5430处,生成识别数据片段示例的替换前索引和替换后索引的映射。为每个数据片段示例生成映射。
在步骤5440处,可以识别多个替换前的跨度。
图55图示了根据一些示例实施例的显示标点跨度和符号跨度的用户界面5500。如图55所示,用户已提供指定实例5533。用户指定示例包括示例5534和5535。Regex 5532是基于指定示例5533生成的。
如图55所示,符号和标点符号不再是可跨越的,使得突出显示端点可以出现在两个标点符号之间。
每个标点符号和每个符号可以具有其自己的标点跨度或符号跨度。例如,包含“A.,S”的示例将包含四个跨度“A”、“.”、“,”和“S”。
示例实施例提供了改善的regex生成美学。具体而言,片段可以与产生它们的示例相关联。片段反过来与产生这些片段的示例相关联。在示例实施例中,产生片段的示例可以被添加到示例编号列表中。
此外,示例实施例提供了将片段与产生它的示例相关联的甚至更详细的方法。这些示例可以与特定的文本片段绑定,而不仅仅是作为整体的跨度对象。这样,用户可以更容易地确定哪个示例绑定到片段,因为用户可以看到示例本身,而不是只看到示例编号列表中的示例编号。
例如,关于以下两个输入示例:示例1:“a#s#”和示例2:“a#”,解跨度可以包括[(LETTER,[("a",[1,2])]),(SYMBOL,[("#",[1,2])]),(LETTER,["s",[1]]),(SYMBOL,["#",[1]])]。通过为每个单独的片段提供示例编号,当处理特定示例时,算法可以在搜索突出显示开始和/或结尾(或超出突出显示以建立上下文)时来回(向左或向右)走动。每个示例都可以被分解成跨度,并且执行将跨度合并到其自己的跨度集中的LCS。
关于另外两个输入示例,示例1:“8pm”和示例2:“9am”,解跨度可以包括[(NUMBER,[("8",[1]),("9",[2])]),(LETTER,[("pm",[1]),("am",[2])]),(PUNCTUATION,[(".",[1,2])])]。因此,片段与产生它的特定示例相关联。
在另一个示例中,regex生成美学可以包括防止跨度被合并,除非它们来自同一示例集合。为了便于匹配,在示例实施例中,除非跨度来自同一示例集合,否则它们不可以被合并。
因此,示例实施例提供了用于生成准确的正则表达式的各种机制。可以将正则表达式应用于数据,以获得用户期望的数据结果。用户无需大量搜索或数据操纵就可以更容易和更高效地获得期望的信息。
IX.硬件概述
图21描绘了用于实现实施例的分布式系统2100的简化图。在所示的实施例中,分布式系统2100包括经由一个或多个通信网络2110耦合到服务器2112的一个或多个客户端计算设备2102、2104、2106和2108。客户端计算设备2102、2104、2106和2108可以被配置为执行一个或多个应用。
在各种实施例中,服务器2112可以适于运行一个或多个服务或软件应用,这些服务或软件应用使得能够自动生成正则表达式,如本公开中所描述的。例如,在某些实施例中,服务器2112可以接收从客户端设备传输的用户输入数据,其中用户输入数据是由客户端设备通过在客户端设备处显示的用户界面接收的。服务器2112然后可以将用户输入数据转换成正则表达式,该正则表达式被传输到客户端设备以通过用户界面显示。
在某些实施例中,服务器2112还可以提供可以包括非虚拟和虚拟环境的其它服务或软件应用。在一些实施例中,这些服务可以作为基于web或云的服务,诸如在软件即服务(SaaS)模型下,提供给客户端计算设备2102、2104、2106和/或2108的用户。操作客户端计算设备2102、2104、2106和/或2108的用户又可以利用一个或多个客户端应用与服务器2112交互以利用由这些组件提供的服务。
在图21所描绘的配置中,服务器2112可以包括实现由服务器2112执行的功能的一个或多个组件2118、2120和2122。这些组件可以包括可以由一个或多个处理器执行的软件组件、硬件组件或其组合。应当认识到的是,各种不同的系统配置是可能的,其可以与分布式系统2100不同。因此,图21中所示的实施例是用于实现实施例系统的分布式系统的一个示例,并且不旨在进行限制。
用户可以使用客户端计算设备2102、2104、2106和/或2108来执行一个或多个应用,这些应用可以根据本公开的教导生成正则表达式。客户端设备可以提供使客户端设备的用户能够与客户端设备交互的接口。客户端设备还可以经由该接口向用户输出信息。虽然图21仅描绘了四个客户端计算设备,但可以支持任何数量的客户端计算设备。
客户端设备可以包括各种类型的计算系统,诸如便携式手持式设备、通用计算机,诸如个人计算机和膝上型计算机、工作站计算机、可穿戴设备、游戏系统、瘦客户端、各种消息传送设备、传感器和其它感测设备等。这些计算设备可以运行各种类型和版本的软件应用和操作系统(例如,Microsoft
Figure BDA0003210294110000821
Apple
Figure BDA0003210294110000822
或类UNIX操作系统、Linux或类Linux操作系统,诸如Google ChromeTMTMOS),包括各种移动操作系统(例如,Microsoft Windows
Figure BDA0003210294110000823
Windows
Figure BDA0003210294110000824
AndroidTM
Figure BDA0003210294110000825
Palm
Figure BDA0003210294110000826
)。便携式手持式设备可以包括蜂窝电话、智能电话(例如,
Figure BDA0003210294110000827
)、平板电脑(例如,
Figure BDA0003210294110000828
)、个人数字助理(PDA)等。可穿戴设备可以包括Google
Figure BDA0003210294110000829
头戴式显示器和其它设备。游戏系统可以包括各种手持式游戏设备、具有互联网功能的游戏设备(例如,具有或不具有
Figure BDA00032102941100008210
手势输入设备的Microsoft
Figure BDA00032102941100008211
游戏机、Sony
Figure BDA00032102941100008212
系统、由
Figure BDA00032102941100008213
提供的各种游戏系统以及其它)等。客户端设备可以能够执行各种不同的应用,诸如各种与互联网相关的应用、通信应用(例如,电子邮件应用、短消息服务(SMS)应用),并且可以使用各种通信协议。
(一个或多个)网络2110可以是本领域技术人员熟悉的任何类型的网络,其可以使用多种可用协议中的任何一种来支持数据通信,包括但不限于TCP/IP(传输控制协议/互联网协议)、SNA(系统网络体系架构)、IPX(互联网分组交换)、
Figure BDA00032102941100008214
等。仅仅作为示例,(一个或多个)网络2110可以是局域网(LAN)、基于以太网的网络、令牌环、广域网(WAN)、互联网、虚拟网络、虚拟专用网(VPN)、内联网、外联网、公共电话交换网(PSTN)、红外网络、无线网络(例如,在任何电气和电子协会(IEEE)1002.11协议套件、
Figure BDA00032102941100008215
和/或任何其它无线协议下操作的网络)和/或这些和/或其它网络的任意组合。
服务器2112可以由一个或多个通用计算机、专用服务器计算机(作为示例,包括PC(个人计算机)服务器、
Figure BDA00032102941100008216
服务器、中档服务器、大型计算机、机架安装的服务器等)、服务器场、服务器集群或任何其它适当的布置和/或组合组成。服务器2112可以包括运行虚拟操作系统的一个或多个虚拟机,或者涉及虚拟化的其它计算体系架构,诸如可以被虚拟化以维护服务器的虚拟存储设备的逻辑存储设备的一个或多个灵活的池。在各种实施例中,服务器2112可以适于运行提供前述公开中描述的功能的一个或多个服务或软件应用。
服务器2112中的计算系统可以运行一个或多个操作系统,包括以上讨论的任何操作系统以及任何商用的服务器操作系统。服务器2112还可以运行各种附加服务器应用和/或中间层应用中的任何一种,包括HTTP(超文本传输协议)服务器、FTP(文件传输协议)服务器、CGI(通用网关接口)服务器、
Figure BDA0003210294110000831
服务器、数据库服务器等。示例性数据库服务器包括但不限于可从
Figure BDA0003210294110000832
Figure BDA0003210294110000833
(国际商业机器)等商购获得的数据库服务器。
在一些实施方式中,服务器2112可以包括一个或多个应用以分析和整合从客户端计算设备2102、2104、2106和2108的用户接收到的数据馈送和/或事件更新。作为示例,数据馈送和/或事件更新可以包括但不限于从一个或多个第三方信息源和连续数据流接收到的
Figure BDA0003210294110000834
馈送、
Figure BDA0003210294110000835
更新或实时更新,其可以包括与传感器数据应用、金融报价机、网络性能测量工具(例如,网络监视和流量管理应用)、点击流分析工具、汽车流量监视等相关的实时事件。服务器2112还可以包括经由客户端计算设备2102、2104、2106和2108的一个或多个显示设备显示数据馈送和/或实时事件的一个或多个应用。
分布式系统2100还可以包括一个或多个数据储存库2114、2116。在某些实施例中,这些数据储存库可以用于存储数据和其它信息。例如,数据储存库2114、2116中的一个或多个可以用于存储诸如与系统生成的正则表达式匹配的新数据列之类的信息。数据储存库2114、2116可以驻留在各种位置。例如,由服务器2112使用的数据储存库可以在服务器2112本地,或者可以远离服务器2112并经由基于网络或专用的连接与服务器2112通信。数据储存库2114、2116可以是不同的类型。在某些实施例中,由服务器2112使用的数据储存库可以是数据库,例如关系数据库,诸如由
Figure BDA0003210294110000836
公司和其它供应商提供的数据库。这些数据库中的一个或多个可以适于响应于SQL格式的命令来实现数据库中数据的存储、更新和检索。
在某些实施例中,应用还可以使用数据储存库2114、2116中的一个或多个来存储应用数据。由应用使用的数据储存库可以具有不同的类型,诸如,例如,键-值储存库、对象储存库或由文件系统支持的通用储存库。
在某些实施例中,本公开中描述的功能可以经由云环境作为服务来提供。图22是根据某些示例的基于云的系统环境的简化框图,其中各种服务可以作为云服务提供。在图22中描绘的示例中,云基础设施系统2202可以提供一种或多种云服务,这些服务可以由使用一个或多个客户端计算设备2204、2206和2208的用户请求。云基础设施系统2202可以包括一个或多个计算机和/或服务器,这些计算机和/或服务器可以包括上面针对服务器2112描述的那些。云基础设施系统2202中的计算机可以被组织为通用计算机、专用服务器计算机、服务器群、服务器集群或任何其它适当的布置和/或组合。
(一个或多个)网络2210可以促进客户端设备2204、2206和2208与云基础设施系统2202之间的通信和数据交换。(一个或多个)网络2210可以包括一个或多个网络。网络可以是相同或不同的类型。(一个或多个)网络2210可以支持一种或多种通信协议,包括有线和/或无线协议,以促进通信。
图22中描绘的示例仅仅是云基础设施系统的一个示例,并且不旨在进行限制。应该认识到的是,在一些其它示例中,云基础设施系统2202可以具有比图22所示的组件更多或更少的组件、可以组合两个或更多个组件,或者可以具有不同的组件配置或布置。例如,虽然图22描绘了三个客户端计算设备,但是在替代示例中可以支持任何数量的客户端计算设备。
术语“云服务”通常用于指由服务提供商的系统(例如,云基础设施系统2202)根据需要并且经由诸如互联网之类的通信网络使用户可使用的服务。典型地,在公共云环境中,组成云服务提供商系统的服务器和系统与客户自己的内部服务器和系统不同。云服务提供商的系统由云服务提供商管理。客户因此可以利用由云服务提供商提供的云服务,而不必为服务购买单独的许可证、支持或硬件和软件资源。例如,云服务提供商的系统可以托管应用,并且用户可以经由互联网按需订购和使用应用,而用户不必购买用于执行应用的基础设施资源。云服务旨在提供对应用、资源和服务的轻松、可扩展的访问。几个提供商提供云服务。例如,由加利福尼亚州Redwood Shores的
Figure BDA0003210294110000851
公司提供了几种云服务,诸如中间件服务、数据库服务、Java云服务等。
在某些实施例中,云基础设施系统2202可以使用诸如软件即服务(SaaS)模型、平台即服务(PaaS)模型、基础设施即服务(IaaS)模型以及包括混合服务模型的其它模型之类的不同模型提供一个或多个云服务。云基础设施系统2202可以包括一套应用、中间件、数据库以及使得能够供给各种云服务的其它资源。
SaaS模型使得应用或软件能够作为服务通过如互联网的通信网络交付给客户,而客户不必为底层应用购买硬件或软件。例如,SaaS模型可以用于为客户提供对由云基础设施系统2202托管的按需应用的访问。由
Figure BDA0003210294110000852
公司提供的SaaS服务的示例包括但不限于用于人力资源/资本管理、客户关系管理(CRM)、企业资源计划(ERP)、供应链管理(SCM)、企业绩效管理(EPM)、分析服务、社交应用及其它的各种服务。
IaaS模型通常用于向客户提供基础设施资源(例如,服务器、存储装置、硬件和联网资源)作为云服务,以提供弹性计算和存储能力。
Figure BDA0003210294110000853
公司提供了各种IaaS服务。
PaaS模型通常用于提供平台和环境资源作为服务,其使得客户能够开发、运行和管理应用和服务,而客户不必采购、构建或维护此类资源。由
Figure BDA0003210294110000854
公司提供的PaaS服务的示例包括但不限于Oracle Java云服务(JCS)、Oracle数据库云服务(DBCS)、数据管理云服务、各种应用开发解决方案服务,以及其它服务。
云服务通常基于按需自助服务、基于订阅、弹性可缩放、可靠、高度可用和安全的方式提供。例如,客户可以经由订阅订单订购由云基础设施系统2202提供的一个或多个服务。云基础设施系统2202然后执行处理以提供客户的订购订单中所请求的服务。云基础设施系统2202可以被配置为提供一个或多个云服务。
云基础设施系统2202可以经由不同的部署模型来提供云服务。在公共云模型中,云基础设施系统2202可以由第三方云服务提供商拥有,并且云服务被提供给任何普通公众客户,其中客户可以是个人或企业。在私有云模型下,可以在组织内(例如,在企业组织内)操作云基础设施系统2202,并向组织内的客户提供服务。例如,客户可以是企业的各个部门,诸如人力资源部门、工资部门等,甚至是企业内的个人。在社区云模型下,云基础设施系统2202和所提供的服务可以由相关社区中的几个组织共享。也可以使用各种其它模型,诸如上面提到的模型的混合。
客户端设备2204、2206和2208可以是不同类型的(诸如图21中描绘的客户端设备2102、2104、2106和2108),并且可以能够操作一个或多个客户端应用。用户可以使用客户端设备与云基础设施系统2202交互,诸如请求由云基础设施系统2202提供的服务。
在一些实施例中,由云基础设施系统2202执行的用于提供与管理相关的服务的处理可以涉及大数据分析。这种分析可能涉及使用、分析和操纵大型数据集,以检测和可视化数据内的各种趋势、行为、关系等。这种分析可以由一个或多个处理器执行、可能并行处理数据、使用数据执行仿真等。例如,大数据分析可以由云基础设施系统2202执行,用于以自动化方式确定正则表达式。用于这种分析的数据可以包括结构化数据(例如,存储在数据库中或根据结构化模型结构化的数据)和/或非结构化数据(例如,数据Blob(二进制大对象))。
如图22的示例中所描绘的,云基础设施系统2202可以包括基础设施资源2230,其用于促进由云基础设施系统2202提供的各种云服务的供给。基础设施资源2230可以包括例如处理资源、存储或存储器资源、联网资源等。
在某些实施例中,为了促进这些资源的高效供给以支持由云基础设施系统2202为不同客户提供的各种云服务,可以将资源捆绑成资源或资源模块的集合(也称为“群聚(pod)”)。每个资源模块或群聚可以包括一种或多种类型的资源的预先集成和优化的组合。在某些实施例中,可以为不同类型的云服务预先供给不同的群聚。例如,可以为数据库服务供给第一组群聚,可以为Java服务供给第二组群聚,其中第二组群聚可以包括与第一组群聚中的群聚不同的资源组合。对于一些服务,可以在服务之间共享为供给服务而分配的资源。
云基础设施系统2202本身可以内部使用服务2232,服务2232由云基础设施系统2202的不同组件共享并且促进云基础设施系统2202的服务供给。这些内部共享的服务可以包括但不限于安全和身份服务、集成服务、企业储存库服务、企业管理器服务、病毒扫描和白名单服务、高可用性、备份和恢复服务、用于启用云支持的服务、电子邮件服务、通知服务、文件传输服务等。
云基础设施系统2202可以包括多个子系统。这些子系统可以用软件或硬件或其组合来实现。如图22所示,子系统可以包括用户界面子系统2212,该用户界面子系统2212使得云基础设施系统2202的用户或客户能够与云基础设施系统2202交互。用户界面子系统2212可以包括各种不同的界面,诸如web界面2214、在线商店界面2216(其中由云基础设施系统2202提供的云服务被广告并且可由消费者购买)和其它界面2218。例如,客户可以使用客户端设备使用接口2214、2216和2218中的一个或多个来请求(服务请求2234)由云基础设施系统2202提供的一个或多个服务。例如,客户可以访问在线商店、浏览由云基础设施系统2202提供的云服务,以及对由客户希望订阅的由云基础设施系统2202提供的一项或多项服务下订单。服务请求可以包括识别客户的信息以及客户期望订阅的一项或多项服务。例如,客户可以订购由云基础设施系统2202提供的正则表达式相关服务的自动化生成的订阅订单。
在某些实施例中,诸如图22所示的示例,云基础设施系统2202可以包括被配置为处理新订单的订单管理子系统(OMS)2220。作为这个处理的一部分,OMS 2220可以被配置为:为客户创建账户(如果尚未创建);接收来自客户的账单和/或会计信息,该账单和/或账单信息将用于针对向客户提供所请求的服务向客户计费;验证客户信息;在验证后,为客户预订订单;已经编排各种工作流程以准备用于供给的订单。
一旦被正确地验证,OMS 2220就可以调用订单供给子系统(OPS)2224,其被配置为为订单供给资源,包括处理资源、存储器资源和联网资源。供给可以包括为订单分配资源,以及配置资源以促进由客户订单所请求的服务。为订单供给资源的方式和供给资源的类型可以取决于客户已订购的云服务的类型。例如,根据一个工作流程,OPS 2224可以被配置为确定所请求的特定云服务,并且识别可能已经针对该特定云服务而被预先配置的多个群聚。为订单分配的群聚的数量可以取决于所请求的服务的大小/数量/级别/范围。例如,可以基于服务所支持的用户的数量、正在请求的服务的持续时间等来确定要分配的群聚的数量。然后,可以针对特定的请求客户定制所分配的群聚,以提供所请求的服务。
云基础设施系统2202可以向请求客户发送响应或通知2244,以指示所请求的服务何时准备就绪。在一些情况下,可以将信息(例如,链接)发送给客户,使得客户能够开始使用和利用所请求的服务的益处。在某些实施例中,对于请求正则表达式相关服务的自动化生成的客户,响应可以包括在被执行时使得显示用户界面的指令。
云基础设施系统2202可以向多个客户提供服务。对于每个客户,云基础设施系统2202负责管理与从客户接收到的一个或多个订阅订单相关的信息、维护与订单相关的客户数据,以及向客户提供所请求的服务。云基础设施系统2202还可以收集关于客户对已订阅的服务的使用的使用统计信息。例如,可以针对使用的存储量、传输的数据量、用户的数量以及系统正常运行时间和系统停机时间量等收集统计信息。该使用信息可以用于向客户计费。计费可以例如按月周期进行。
云基础设施系统2202可以并行地向多个客户提供服务。云基础设施系统2202可以存储这些客户的信息,包括可能的专有信息。在某些实施例中,云基础设施系统2202包括身份管理子系统(IMS)2228,其被配置为管理客户的信息并提供所管理的信息的分离,使得与一个客户相关的信息不可被另一个客户访问。IMS 2228可以被配置为提供各种与安全相关的服务,诸如身份服务;信息访问管理、认证和授权服务;用于管理客户身份和角色及相关能力的服务,等等。
图23图示了计算机系统2300的示例。在一些实施例中,计算机系统2300可以用于实现上述任何系统。如图23所示,计算机系统2300包括各种子系统,包括经由总线子系统2302与多个其它子系统通信的处理子系统2304。这些其它子系统可以包括处理加速单元2306、I/O子系统2308、存储子系统2318和通信子系统2324。存储子系统2318可以包括非暂态计算机可读存储介质,其包括存储介质2322和系统存储器2310。
总线子系统2302提供用于使计算机系统2300的各种组件和子系统按照期望彼此通信的机制。虽然总线子系统2302被示意性地示为单条总线,但是总线子系统的替代示例可以利用多条总线。总线子系统2302可以是几种类型的总线结构中的任何一种,包括存储器总线或存储器控制器、外围总线、使用任何各种总线体系架构的局部总线等。例如,此类体系架构可以包括工业标准体系架构(ISA)总线、微通道体系架构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)局部总线和外围组件互连(PCI)总线,其可以实现为根据IEEE P1386.1标准制造的夹层(Mezzanine)总线,等等。
处理子系统2304控制计算机系统2300的操作,并且可以包括一个或多个处理器、专用集成电路(ASIC)或现场可编程门阵列(FPGA)。处理器可以包括单核或多核处理器。可以将计算机系统2300的处理资源组织成一个或多个处理单元2332、2334等。处理单元可以包括一个或多个处理器、来自相同或不同处理器的一个或多个核心、核心和处理器的组合、或核心和处理器的其它组合。在一些实施例中,处理子系统2304可以包括一个或多个专用协处理器,诸如图形处理器、数字信号处理器(DSP)等。在一些实施例中,处理子系统2304的一些或全部可以使用定制电路来实现,诸如专用集成电路(ASIC)或现场可编程门阵列(FPGA)。
在一些实施例中,处理子系统2304中的处理单元可以执行存储在系统存储器2310中或计算机可读存储介质2322上的指令。在各个示例中,处理单元可以执行各种程序或代码指令,并且可以维护多个并发执行的程序或进程。在任何给定的时间,要执行的程序代码中的一些或全部可以驻留在系统存储器2310中和/或计算机可读存储介质2322上,包括可能在一个或多个存储设备上。通过适当的编程,处理子系统2304可以提供上述各种功能。在计算机系统2300正在执行一个或多个虚拟机的情况下,可以将一个或多个处理单元分配给每个虚拟机。
在某些实施例中,可以可选地提供处理加速单元2306,以用于执行定制的处理或用于卸载由处理子系统2304执行的一些处理,从而加速由计算机系统2300执行的整体处理。
I/O子系统2308可以包括用于向计算机系统2300输入信息和/或用于从或经由计算机系统2300输出信息的设备和机制。一般而言,术语“输入设备”的使用旨在包括用于向计算机系统2300输入信息的所有可能类型的设备和机制。用户界面输入设备可以包括,例如,键盘、诸如鼠标或轨迹球之类的指向设备、并入到显示器中的触摸板或触摸屏、滚轮、点击轮、拨盘、按钮、开关、小键盘、带有语音命令识别系统的音频输入设备、麦克风以及其它类型的输入设备。用户界面输入设备还可以包括使用户能够控制输入设备并与之交互的诸如Microsoft
Figure BDA0003210294110000901
运动传感器的运动感测和/或姿势识别设备、Microsoft
Figure BDA0003210294110000902
360游戏控制器、提供用于接收使用姿势和口语命令的输入的界面的设备。用户界面输入设备还可以包括眼睛姿势识别设备,诸如从用户检测眼睛活动(例如,当拍摄图片和/或进行菜单选择时的“眨眼”)并将眼睛姿势转换为到输入设备(例如,Google
Figure BDA0003210294110000911
)的输入的Google
Figure BDA0003210294110000912
眨眼检测器。此外,用户界面输入设备可以包括使用户能够通过语音命令与语音识别系统(例如,
Figure BDA0003210294110000913
导航器)交互的语音识别感测设备。
用户界面输入设备的其它示例包括但不限于,三维(3D)鼠标、操纵杆或指示杆、游戏板和图形平板、以及音频/视频设备,诸如扬声器、数字相机、数字摄像机、便携式媒体播放器、网络摄像机、图像扫描仪、指纹扫描仪、条形码读取器3D扫描仪、3D打印机、激光测距仪、以及眼睛注视跟踪设备。此外,用户界面输入设备可以包括,例如,医疗成像输入设备,诸如计算机断层摄影、磁共振成像、位置发射断层摄影、以及医疗超声检查设备。用户界面输入设备也可以包括,例如,音频输入设备,诸如MIDI键盘、数字乐器等。
一般而言,术语“输出设备”的使用旨在包括所有可能类型的设备和用于从计算机系统2300向用户或其它计算机输出信息的机制。用户界面输出设备可以包括显示子系统、指示器灯或诸如音频输出设备的非可视显示器等。显示子系统可以是阴极射线管(CRT)、诸如利用液晶显示器(LCD)或等离子体显示器的平板设备、投影设备、触摸屏等。例如,用户界面输出设备可以包括但不限于,可视地传达文本、图形和音频/视频信息的各种显示设备,诸如监视器、打印机、扬声器、耳机、汽车导航系统、绘图仪、语音输出设备和调制解调器。
存储子系统2318提供用于存储由计算机系统2300使用的信息和数据的储存库或数据存储库。存储子系统2318提供了用于存储提供某些示例的功能的基本编程和数据构造的有形非暂态计算机可读存储介质。存储子系统2318可以存储软件(例如,程序、代码模块、指令),该软件在由处理子系统2304执行时提供上述功能。软件可以由处理子系统2304的一个或多个处理单元执行。存储子系统2318还可以提供用于存储根据本公开的教导使用的数据的储存库。
存储子系统2318可以包括一个或多个非暂态存储器设备,包括易失性和非易失性存储器设备。如图23所示,存储子系统2318包括系统存储器2310和计算机可读存储介质2322。系统存储器2310可以包括多个存储器,包括用于在程序执行期间存储指令和数据的易失性主随机存取存储器(RAM)以及其中存储有固定指令的非易失性只读存储器(ROM)或闪存。在一些实施方式中,基本输入/输出系统(BIOS)可以典型地存储在ROM中,该基本输入/输出系统(BIOS)包含有助于例如在启动期间在计算机系统2300内的元件之间传递信息的基本例程。RAM通常包含当前由处理子系统2304操作和执行的数据和/或程序模块。在一些实施方式中,系统存储器2310可以包括多种不同类型的存储器,诸如静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)等。
作为示例而非限制,如图23所示,系统存储器2310可以加载正在被执行的可以包括各种应用(诸如Web浏览器、中间层应用、关系型数据库管理系统(RDBMS)等)的应用程序2312、程序数据2314和操作系统2316。作为示例,操作系统2316可以包括各种版本的Microsoft
Figure BDA0003210294110000921
Apple
Figure BDA0003210294110000922
和/或Linux操作系统、各种商用
Figure BDA0003210294110000923
或类UNIX操作系统(包括但不限于各种GNU/Linux操作系统、Google
Figure BDA0003210294110000924
OS等)和/或移动操作系统,诸如iOS、
Figure BDA0003210294110000925
Phone、
Figure BDA0003210294110000926
OS、
Figure BDA0003210294110000927
OS、
Figure BDA0003210294110000928
OS操作系统,以及其它操作系统。
计算机可读存储介质2322可以存储提供一些示例的功能的编程和数据构造。计算机可读存储介质2322可以为计算机系统2300提供计算机可读指令、数据结构、程序模块和其它数据的存储。当由处理子系统2304执行时,提供上述功能的软件(程序、代码模块、指令)可以存储在存储子系统2318中。作为示例,计算机可读存储介质2322可以包括非易失性存储器,诸如硬盘驱动器、磁盘驱动器、诸如CD ROM、DVD、
Figure BDA0003210294110000929
(蓝光)盘或其它光学介质的光盘驱动器。计算机可读存储介质2322可以包括但不限于,
Figure BDA00032102941100009210
驱动器、闪存存储器卡、通用串行总线(USB)闪存驱动器、安全数字(SD)卡、DVD盘、数字视频带等。计算机可读存储介质2322也可以包括基于非易失性存储器的固态驱动器(SSD)(诸如基于闪存存储器的SSD、企业闪存驱动器、固态ROM等)、基于易失性存储器的SSD(诸如基于固态RAM、动态RAM、静态RAM、DRAM的SSD、磁阻RAM(MRAM)SSD),以及使用基于DRAM和基于闪存存储器的SSD的组合的混合SSD。
在某些实施例中,存储子系统2318还可以包括计算机可读存储介质读取器2320,该计算机可读存储介质读取器2320还可以连接到计算机可读存储介质2322。读取器2320可以接收并被配置为从诸如盘、闪存驱动器等存储器设备中读取数据。
在某些实施例中,计算机系统2300可以支持虚拟化技术,包括但不限于处理和存储器资源的虚拟化。例如,计算机系统2300可以提供用于执行一个或多个虚拟机的支持。在某些实施例中,计算机系统2300可以执行诸如促进虚拟机的配置和管理的管理程序之类的程序。可以为每个虚拟机分配存储器、计算(例如,处理器、核心)、I/O和联网资源。每个虚拟机通常独立于其它虚拟机运行。虚拟机通常运行其自己的操作系统,该操作系统可以与由计算机系统2300执行的其它虚拟机执行的操作系统相同或不同。因此,计算机系统2300可以潜在地同时运行多个操作系统。
通信子系统2324提供到其它计算机系统和网络的接口。通信子系统2324用作用于从计算机系统2300接收数据以及向其它系统传输数据的接口。例如,通信子系统2324可以使得计算机系统2300能够经由互联网建立到一个或多个客户端设备的通信信道,以用于从客户端设备接收信息以及向客户端设备发送信息。
通信子系统2324可以支持有线和/或无线通信协议两者。在某些实施例中,通信子系统2324可以包括用于(例如,使用蜂窝电话技术、高级数据网络技术(诸如3G、4G或EDGE(全球演进的增强数据速率)、WiFi(IEEE 802.XX族标准)、或其它移动通信技术、或其任意组合)接入无线语音和/或数据网络的射频(RF)收发器组件、全球定位系统(GPS)接收器组件和/或其它组件。在一些实施例中,作为无线接口的附加或替代,通信子系统2324可以提供有线网络连接(例如,以太网)。
通信子系统2324可以以各种形式接收和传输数据。在一些实施例中,除了其它形式之外,通信子系统2324还可以以结构化和/或非结构化的数据馈送2326、事件流2328、事件更新2330等形式接收输入通信。例如,通信子系统2324可以被配置为实时地从社交媒体网络的用户和/或诸如
Figure BDA0003210294110000944
馈送、
Figure BDA0003210294110000945
更新、诸如丰富站点摘要(RSS)馈送的web馈送的其它通信服务接收(或发送)数据馈送2326,和/或来自一个或多个第三方信息源的实时更新。
在某些实施例中,通信子系统2324可以被配置为以连续数据流的形式接收本质上可能是连续的或无界的没有明确结束的数据,其中连续数据流可以包括实时事件的事件流2328和/或事件更新2330。生成连续数据的应用的示例可以包括例如传感器数据应用、金融报价机、网络性能测量工具(例如网络监视和流量管理应用)、点击流分析工具、汽车流量监视等。
通信子系统2324也可以被配置为将数据从计算机系统2300传送到其它计算机系统或网络。数据可以以各种不同的形式传送给一个或多个数据库,诸如结构化和/或非结构化数据馈送2326、事件流2328、事件更新2330等,该一个或多个数据库可以与耦合到计算机系统2300的一个或多个流传输数据源进行通信。
计算机系统2300可以是各种类型中的一种,包括手持便携式设备(例如,
Figure BDA0003210294110000941
蜂窝电话、
Figure BDA0003210294110000942
计算平板、PDA)、可穿戴设备(例如,Google
Figure BDA0003210294110000943
头戴式显示器)、个人计算机、工作站、大型机、信息站、服务器机架或任何其它数据处理系统。由于计算机和网络不断变化的性质,对图23中绘出的计算机系统2300的描述旨在仅仅作为具体示例。具有比图23中所绘出的系统更多或更少组件的许多其它配置是可能的。基于本文所提供的公开内容和教导,本领域普通技术人员将理解实现各种示例的其它方式和/或方法。
虽然已经描述了特定的示例,但是各种修改、变更、替代构造以及等同物都是可能的。示例不限于在某些特定数据处理环境内的操作,而是可以在多个数据处理环境内自由操作。此外,虽然已经使用一系列特定的事务和步骤描述了某些示例,但是对于本领域技术人员来说显而易见的是,这并不旨在进行限制。虽然一些流程图将操作描述为顺序处理,但是许多操作可以并行或同时执行。此外,操作的次序可以被重新布置。处理可能具有图中未包括的其它步骤。上述示例的各种特征和方面可以被单独使用或联合使用。
另外,虽然已经使用硬件和软件的特定组合描述了某些示例,但是应该认识到的是,硬件和软件的其它组合也是可能的。某些示例可以仅用硬件或仅用软件或其组合来实现。本文描述的各种处理可以以任何组合在相同的处理器或不同的处理器上实现。
在将设备、系统、组件或模块描述为被配置为执行某些操作或功能的情况下,这样的配置可以通过以下方式来实现,例如,通过设计电子电路来执行操作、通过对可编程电子电路(诸如微处理器)进行编程来执行操作,诸如通过执行计算机指令或代码,或处理器或核心被编程为执行存储在非暂态存储介质上的代码或指令,或其任意组合来执行操作。进程可以使用各种技术进行通信,包括但不限于用于进程间通信的常规技术,并且不同对的进程可以使用不同的技术,或者同一对进程可以在不同时间使用不同的技术。
在本公开中给出了具体细节以提供对示例的透彻理解。但是,可以在没有这些具体细节的情况下实践示例。例如,已经示出了众所周知的电路、处理、算法、结构和技术,而没有不必要的细节,以避免使示例模糊。本描述仅提供示例示例,并且不旨在限制其它示例的范围、适用性或配置。相反,示例的先前描述将为本领域技术人员提供用于实现各种示例的使能描述。可以对元件的功能和布置进行各种改变。
因此,说明书和附图应被认为是说明性的而不是限制性的。但是,将显而易见的是,在不脱离权利要求书所阐述的更广泛的精神和范围的情况下,可以对其进行添加、减少、删除以及其它修改和改变。因此,虽然已经描述了具体的示例,但是这些示例并不旨在进行限制。各种修改和等同形式均在所附权利要求的范围内。
在前述说明书中,参考其具体示例描述了本公开的方面,但是本领域技术人员将认识到本公开不限于此。上述公开的各种特征和方面可以单独或联合使用。此外,在不脱离本说明书的更广泛的精神和范围的情况下,可以在超出本文描述的环境和应用的任何数量的环境和应用中利用示例。因此,说明书和附图被认为是说明性的而不是限制性的。
在前面的描述中,为了说明的目的,以特定顺序描述了方法。应该认识到的是在替代示例中,可以以与所描述的顺序不同的顺序来执行这些方法。还应该认识到的是,上述方法可以由硬件组件来执行,或者可以在机器可执行指令的序列中实施,这些指令可以用于使机器(诸如通用或专用处理器或用指令编程的逻辑电路)执行方法。这些机器可执行指令可以存储在一种或多种机器可读介质上,诸如CD-ROM或其它类型的光盘、软盘、ROM、RAM、EPROM、EEPROM、磁卡或光卡、闪存、或适用于存储电子指令的其它类型的机器可读介质。替代地,这些方法可以由硬件和软件的组合来执行。
在组件被描述为被配置为执行某些操作的情况下,这种配置可以通过例如设计电子电路或其它硬件来执行操作、通过对可编程电子电路(例如,微处理器或其它合适的电子电路)进行编程来执行操作,或其任何组合来完成。
虽然本文已经详细描述了本申请的说明性示例,但应该理解的是,本发明构思可以以其它方式被不同地实施和采用,并且所附权利要求旨在被解释为包括这样的变化,除了受现有技术的限制。
在组件被描述为“被配置为”执行某些操作的情况下,这种配置可以例如通过设计电子电路或其它硬件来执行操作、通过对可编程电子电路(例如,微处理器,或其它合适的电子电路)进行编程来执行操作,或其任何组合来完成。

Claims (20)

1.一种生成正则表达式的方法,包括:
由包括一个或多个处理器的正则表达式生成器接收包括一个或多个正字符序列的第一选择,所述一个或多个正字符序列中的每一个对应于与由正则表达式生成器生成的正则表达式匹配的正例;
由正则表达式生成器生成第一正则表达式,其中第一正则表达式匹配所述正例;
由正则表达式生成器接收包括一个或多个负字符序列的第二选择,所述一个或多个负字符序列中的每一个对应于不与由正则表达式生成器生成的正则表达式匹配的负例;
响应于接收到第二选择,确定与所述负例对应的所述一个或多个负字符序列的上下文;以及
基于所确定的一个或多个负字符序列的上下文更新第一正则表达式。
2.根据权利要求1所述的方法,其中接收第一选择包括经由用户界面接收数据集的第一数据单元格中的所述一个或多个正字符序列的选择。
3.根据权利要求2所述的方法,还包括由正则表达式生成器自动选择数据集中与包括一个或多个正字符序列的第一选择对应的多个数据单元格中的字符序列。
4.根据权利要求3所述的方法,其中接收第二选择包括经由用户界面接收数据集的第二数据单元格中的所述一个或多个负字符序列的选择。
5.根据权利要求4所述的方法,还包括由正则表达式生成器自动选择数据集中与包括一个或多个负字符序列的第二选择对应的所述多个数据单元格中的字符序列。
6.根据权利要求3的方法,其中第一选择以第一突出显示格式突出显示,并且第二选择以与第一突出显示格式不同的第二突出显示格式突出显示。
7.根据权利要求6所述的方法,其中确定与所述负例对应的所述一个或多个负字符序列的上下文包括:
识别第二选择的嵌入突出显示位置;
根据第二选择的嵌入突出显示位置左侧的数据确定上下文;以及
根据突出显示的第二选择的嵌入突出显示位置右侧的数据确定上下文。
8.根据权利要求7所述的方法,其中确定与所述负例对应的所述一个或多个负字符序列的上下文还包括:
过滤数据集中与包括所述一个或多个负字符序列的第一选择对应的所述多个数据单元格中的字符序列,所述字符序列是基于根据嵌入突出显示位置左侧的数据所确定的上下文并基于根据嵌入突出显示位置右侧的数据所确定的上下文自动选择的;以及
从数据集中与所选择的一个或多个负字符序列对应的所述多个数据单元格中的所选择的字符序列中移除过滤的字符序列。
9.根据权利要求8所述的方法,其中根据嵌入突出显示位置左侧的数据确定上下文包括识别嵌入突出显示位置左侧的第一跨度;以及
其中过滤数据集中与所选择的一个或多个负字符序列对应的所述多个数据单元格中的字符序列还包括识别与所选择的一个或多个负字符序列对应的所述多个数据单元格中的字符序列中不匹配嵌入突出显示位置左侧的第一跨度的跨度。
10.根据权利要求9所述的方法,其中根据嵌入突出显示位置左侧的数据确定上下文还包括识别嵌入突出显示左侧的第二跨度;以及
其中过滤数据集中与所选择的一个或多个负字符序列对应的所述多个数据单元格中的字符序列还包括识别与所选择的一个或多个负字符序列对应的所述多个数据单元格中的字符序列中不匹配嵌入突出显示位置左侧的第二跨度的跨度。
11.根据权利要求7所述的方法,其中根据嵌入突出显示位置右侧的数据确定上下文包括识别嵌入突出显示位置右侧的第一跨度;以及
其中过滤数据集中与包括一个或多个负字符序列的第二选择对应的所述多个数据单元格中的字符序列还包括识别与包括一个或多个负字符序列的第二选择对应的所述多个数据单元格中的字符序列中不匹配嵌入突出显示位置右侧的第一跨度的跨度。
12.一种正则表达式生成器服务器计算机,包括:
处理器;
存储器;
耦合到所述处理器的计算机可读介质,所述计算机可读介质存储可由所述处理器执行的用于实现方法的指令,所述方法包括:
由包括一个或多个处理器的正则表达式生成器接收包括一个或多个正字符序列的第一选择,所述一个或多个正字符序列中的每一个对应于与由正则表达式生成器生成的正则表达式匹配的正例;
由正则表达式生成器生成第一正则表达式,其中第一正则表达式匹配所述正例;
由正则表达式生成器接收包括一个或多个负字符序列的第二选择,所述一个或多个负字符序列中的每一个对应于不与由正则表达式生成器生成的正则表达式匹配的负例;
响应于接收到第二选择,确定与所述负例对应的所述一个或多个负字符序列的上下文;以及
基于所确定的一个或多个负字符序列的上下文更新第一正则表达式。
13.根据权利要求12所述的服务器计算机,其中接收第一选择包括经由用户界面接收数据集的第一数据单元格中的所述一个或多个正字符序列的选择。
14.根据权利要求13所述的方法,其中第一选择以第一突出显示格式突出显示,并且第二选择以与第一突出显示格式不同的第二突出显示格式突出显示。
15.如权利要求13所述的方法,其中确定与所述负例对应的所述一个或多个负字符序列的上下文包括:
识别第二选择的嵌入突出显示位置;
根据第二选择的嵌入突出显示位置左侧的数据确定上下文;以及
根据突出显示的第二选择的嵌入突出显示位置右侧的数据确定上下文。
16.根据权利要求15所述的方法,其中确定与所述负例对应的所述一个或多个负字符序列的上下文还包括:
过滤数据集中与包括所述一个或多个负字符序列的第二选择对应的多个数据单元格中的字符序列,所述字符序列是基于根据嵌入突出显示位置左侧的数据所确定的上下文和基于根据嵌入突出显示位置右侧的数据所确定的上下文自动选择的;以及
从数据集中与包括所述一个或多个负字符序列的第二选择对应的所述多个数据单元格中的所选择的字符序列中移除过滤的字符序列。
17.一种非暂态计算机可读介质,包括被配置为使一个或多个处理器执行操作的指令,所述操作包括:
由包括一个或多个处理器的正则表达式生成器接收包括一个或多个正字符序列的第一选择,所述一个或多个正字符序列中的每一个对应于与由正则表达式生成器生成的正则表达式匹配的正例;
由正则表达式生成器生成第一正则表达式,其中第一正则表达式匹配所述正例;
由正则表达式生成器接收包括一个或多个负字符序列的第二选择,所述一个或多个负字符序列中的每一个对应于不与由正则表达式生成器生成的正则表达式匹配的负例;
响应于接收到第二选择,确定与所述负例对应的所述一个或多个负字符序列的上下文;以及
基于所确定的一个或多个负字符序列的上下文更新第一正则表达式。
18.根据权利要求17所述的计算机可读介质,其中接收第一选择包括经由用户界面接收数据集的第一数据单元格中的所述一个或多个正字符序列的选择。
19.根据权利要求18所述的计算机可读介质,其中确定与所述负例对应的所述一个或多个负字符序列的上下文包括:
识别第二选择的嵌入突出显示位置;
根据第二选择的嵌入突出显示位置左侧的数据确定上下文;以及
根据突出显示的第二选择的嵌入突出显示位置右侧的数据确定上下文。
20.根据权利要求19所述的计算机可读介质,其中确定与所述负例对应的所述一个或多个负字符序列的上下文还包括:
过滤数据集中与包括所述一个或多个负字符序列的第二选择对应的多个数据单元格中的字符序列,所述字符序列是基于根据嵌入突出显示位置左侧的数据所确定的上下文和基于根据嵌入突出显示位置右侧的数据所确定的上下文自动选择的;以及
从数据集中与包括所述一个或多个负字符序列的第二选择对应的所述多个数据单元格中的所选择的字符序列中移除过滤的字符序列。
CN202080014445.9A 2019-06-24 2020-06-18 使用上下文针对负例的正则表达式生成 Pending CN113424177A (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201962865797P 2019-06-24 2019-06-24
US62/865,797 2019-06-24
US16/904,298 2020-06-17
US16/904,298 US11941018B2 (en) 2018-06-13 2020-06-17 Regular expression generation for negative example using context
PCT/US2020/038431 WO2020263675A1 (en) 2019-06-24 2020-06-18 Regular expression generation for negative example using context

Publications (1)

Publication Number Publication Date
CN113424177A true CN113424177A (zh) 2021-09-21

Family

ID=71575795

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080014445.9A Pending CN113424177A (zh) 2019-06-24 2020-06-18 使用上下文针对负例的正则表达式生成

Country Status (4)

Country Link
EP (1) EP3987407A1 (zh)
JP (1) JP2022538705A (zh)
CN (1) CN113424177A (zh)
WO (1) WO2020263675A1 (zh)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10210246B2 (en) 2014-09-26 2019-02-19 Oracle International Corporation Techniques for similarity analysis and data enrichment using knowledge sources
US9817875B2 (en) * 2014-10-28 2017-11-14 Conduent Business Services, Llc Methods and systems for automated data characterization and extraction

Also Published As

Publication number Publication date
EP3987407A1 (en) 2022-04-27
JP2022538705A (ja) 2022-09-06
WO2020263675A1 (en) 2020-12-30

Similar Documents

Publication Publication Date Title
US11755630B2 (en) Regular expression generation using longest common subsequence algorithm on combinations of regular expression codes
US11580166B2 (en) Regular expression generation using span highlighting alignment
US11354305B2 (en) User interface commands for regular expression generation
US11941018B2 (en) Regular expression generation for negative example using context
CN113424172A (zh) 使用跨度突出显示对齐的正则表达式生成
CN113424178A (zh) 用于正则表达式生成的用户界面命令
CN113424177A (zh) 使用上下文针对负例的正则表达式生成

Legal Events

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