專利名稱:使用輸入-輸出示例生成文本操縱程序的制作方法
使用輸入-輸出示例生成文本操縱程序
背景技術(shù):
電子表格系統(tǒng)的用戶可能遇到其中期望將大量的數(shù)據(jù)從一種形式變換到另一種形式的情況。例如,考慮接收客戶地址的列表的用戶。用戶可能希望將地址變換成統(tǒng)一的格式。對于小的數(shù)據(jù)集,用戶可以選擇以手動方式執(zhí)行這種變換。然而,對于較大的數(shù)據(jù)集,這種手動方法是不可行的。電子表格系統(tǒng)提供各種工具來輔助用戶執(zhí)行以上所描述的類型的變換。例如,電子表格系統(tǒng)可以提供可以經(jīng)由菜單、對話框等等訪問的一組特征。這些特征可以用來執(zhí)行幫助變換數(shù)據(jù)項的各種功能。然而,典型的用戶可能僅熟悉相對少量的由電子表格系統(tǒng)提供的特征。此外,用戶可能不愿意學(xué)習(xí)新的特征,在用戶不預(yù)期重復(fù)使用這樣的特征時尤其如此。
電子表格系統(tǒng)也允許用戶編寫自定義宏程序以執(zhí)行變換任務(wù)。然而,同樣,這種解決方案不完全令人滿意。許多最后用戶很少(或不)具有創(chuàng)建程序的正式經(jīng)驗。因此,用戶可以被勸阻甚至是嘗試創(chuàng)建宏程序。如果用戶確實做出這樣的嘗試,則用戶可能發(fā)現(xiàn)該任務(wù)是令人困惑的和和麻煩的,這加劇了總體上很差的用戶體驗。此外,用戶的需要可能隨時間改變,這要求手動修改宏程序。最后,一些電子表格系統(tǒng)允許用戶記錄在將輸入項轉(zhuǎn)換成合乎需要的輸出項期間執(zhí)行的一系列操作。這產(chǎn)生映射規(guī)則。用戶可以將該映射規(guī)則應(yīng)用到新的數(shù)據(jù)項以便生成新的輸出項。這種技術(shù)被稱為宏記錄。然而,這種技術(shù)可能很受限制,造成了僅對非常密切地反映記錄模式中遇到的數(shù)據(jù)項的那些新的輸入項有用的映射規(guī)則。上面的特征和伴隨的潛在缺點是作為說明來呈現(xiàn)的?,F(xiàn)有的數(shù)據(jù)操縱功能可能還遭受其他缺點和挑戰(zhàn)。概述描述用于自動地創(chuàng)建執(zhí)行數(shù)據(jù)操縱任務(wù)的程序的程序創(chuàng)建系統(tǒng)。該程序創(chuàng)建系統(tǒng)通過接收輸入-輸出示例來操作。每一輸入-輸出示例提供輸入項和對應(yīng)的輸出項。該程序創(chuàng)建系統(tǒng)使用輸入-輸出示例來自動地生成程序。依靠這種操作方式,程序創(chuàng)建系統(tǒng)允許用戶以直觀的和用戶友好的方式創(chuàng)建數(shù)據(jù)操縱程序。舉例來說,用戶不需要掌握專門的編程技能就能利用由程序創(chuàng)建系統(tǒng)提供的服務(wù)。根據(jù)一個說明性的方面,所創(chuàng)建的程序可以包括多個子程序以及多個對應(yīng)的選擇條件。每一選擇條件選擇特定的子程序并排除其他子程序。當接收到新的輸入項時,程序執(zhí)行模塊可以使用選擇條件來確定什么子程序適用。然后,執(zhí)行模塊可以應(yīng)用該子程序以便基于新的輸入項生成輸出項。根據(jù)另一說明性的方面,程序創(chuàng)建系統(tǒng)可以與電子表格功能集成或以另外方式與電子表格功能聯(lián)合使用。根據(jù)另一說明性的方面,程序創(chuàng)建系統(tǒng)使用由三個部分組成的方法來生成程序。在第一部分中,程序創(chuàng)建系統(tǒng)生成多組候選子程序,對每一個具有輸入項和對應(yīng)的輸出項的輸入-輸出示例生成一組候選子程序。每一組中的每一候選子程被配置為將與對應(yīng)的輸入-輸出不例相關(guān)聯(lián)的輸入項變換成與該輸入_輸出不例相關(guān)聯(lián)的輸出項。在第二部分中,程序創(chuàng)建系統(tǒng)將各組子程序編組為分區(qū)并從相應(yīng)的分區(qū)選擇代表性的子程序。在第三部分中,程序創(chuàng)建系統(tǒng)確定控制將子程序應(yīng)用到新的輸入項的選擇條件。根據(jù)另一說明性的方面,程序創(chuàng)建系統(tǒng)可以將每一組子程序生成為有向無環(huán)圖。該圖簡潔地表示與該組中的子程序相關(guān)聯(lián)的操作。例如,該圖的每一邊可以表示由兩個或更多個子程序執(zhí)行的操作。根據(jù)另一說明性的方面,程序創(chuàng)建系統(tǒng)可以使用包括多個構(gòu)造器的表達式語言來生成每一子程序,這些構(gòu)造器包括(但不限于)串接構(gòu)造器、循環(huán)構(gòu)造器、子字符串提取構(gòu)造器、匹配構(gòu)造器等等。根據(jù)另一方面,表達式語言將輸入項和輸出項解析成不同類型的令牌。根據(jù)另一說明性的方面,用戶可以將新的輸入項的集合饋送到程序執(zhí)行模塊。程序執(zhí)行模塊可以使用已經(jīng)創(chuàng)建的程序來生成新的輸出項。用戶交互模塊允許用戶標識出于任何原因(例如,因為它不正確)被認為是不合乎需要的任何輸出項。然后,用戶可以基于不合乎需要的輸出項制定新的輸入-輸出示例,例如,通過提供該不合乎需要的輸出項的經(jīng)·校正的對應(yīng)物。程序創(chuàng)建系統(tǒng)可以對新的輸入-輸出示例操作,以改善程序的性能。根據(jù)另一說明性的方面,用戶交互模塊也可以標識出于任何原因(例如,因為兩者均與由用戶提供輸入-輸出示例一致的兩個程序?qū)ο嗤妮斎腠椞峁┎煌妮敵鼋Y(jié)果)而被認為是模糊的輸出項。用戶可以提供澄清輸出項的正確形式的反饋,這進而可以被用來改善程序的性能。可以在各種類型的系統(tǒng)、組件、方法、計算機可讀介質(zhì)、數(shù)據(jù)結(jié)構(gòu)、制品等等中表現(xiàn)上面的功能。提供本概述以便引入以簡化形式的概念的選集;下面在詳細描述中進一步描述這些概念。本概述不旨在標識所要求保護的本主題的關(guān)鍵特征或必要特征,也不預(yù)期被用來限制所要求保護的本主題的范圍。附圖簡述圖I示出用于創(chuàng)建基于輸入-輸出示例執(zhí)行數(shù)據(jù)操縱任務(wù)的程序的程序創(chuàng)建系統(tǒng)以及將該程序應(yīng)用到新的輸入項的程序執(zhí)行模塊。圖2示出包括圖I的程序創(chuàng)建系統(tǒng)和程序執(zhí)行模塊的數(shù)據(jù)操縱系統(tǒng)。圖3是示出圖2的程序創(chuàng)建系統(tǒng)的一種操作方式的概覽的流程圖。圖4是示出(圖2的)程序創(chuàng)建系統(tǒng)如何使用由三個部分組成的操作來生成程序的流程圖。圖5示出補充圖4的解釋的示例。圖6是示出(圖2的)程序執(zhí)行模塊如何應(yīng)用程序來將新的輸入項變換成新的輸出項的流程圖。圖7示出其中用戶已經(jīng)出于任何原因?qū)?由已創(chuàng)建的程序提供的)輸出項標識為不合乎需要的示例;用戶可以另外基于這一輸出項制定新的輸入-輸出示例以供提交給程序創(chuàng)建系統(tǒng)。圖8是補充圖7的示例的流程圖。圖9示出其中程序創(chuàng)建系統(tǒng)已經(jīng)標識了模糊的輸入項的示例;用戶可以提供澄清對應(yīng)的輸出項的正確形式的反饋,由此改善所創(chuàng)建的程序的性能。
圖10是補充圖9的示例的流程圖。圖11示出其中程序創(chuàng)建系統(tǒng)提供用來將輸入項變換成輸出項的程序邏輯的自然語言解釋的示例。圖12是補充圖11的示例的流程圖。圖13示出程序創(chuàng)建系統(tǒng)可以用來生成程序的表達式語言的說明性的構(gòu)造器。圖14示出程序創(chuàng)建系統(tǒng)如何基于對應(yīng)的輸入項的匹配部分以及常量字符串項來生成輸出項的不例。圖15示出程序創(chuàng)建系統(tǒng)如何使用循環(huán)構(gòu)造器來生成子程序的示例?!D16是補充圖14和圖15的不例的流程圖,闡述了為輸入-輸出不例生成一組子程序的一種方式。圖17是更具體地補充圖15的與循環(huán)相關(guān)的示例的流程圖。圖18示出程序創(chuàng)建系統(tǒng)如何以有向無環(huán)圖的形式表示兩個分離的子程序(和關(guān)聯(lián)的操作路徑)的示例。圖19是示出程序創(chuàng)建系統(tǒng)可以將各組輸入-輸出示例編組在一起的一種說明性方式的流程圖。圖20示出程序創(chuàng)建系統(tǒng)如何為分區(qū)生成選擇條件的示例。圖21是補充圖20的示例的流程圖。圖22示出可以用來實現(xiàn)前述各圖中所示出的特征的任何方面的說明性處理功倉泛。貫穿本公開內(nèi)容和附圖使用相同的附圖標記來引用類似的組件和特征。100系列附圖標記是指最早出現(xiàn)在圖I中的特征,200系列附圖標記是指最早出現(xiàn)在圖2中的特征,300系列附圖標記是指最早出現(xiàn)在圖3中的特征,等等。詳細描述本公開內(nèi)容是如下組織的。A節(jié)描述用于生成用來執(zhí)行數(shù)據(jù)操縱任務(wù)的程序的程序創(chuàng)建系統(tǒng)的概覽。B節(jié)描述用戶可以與程序創(chuàng)建系統(tǒng)交互以改善所創(chuàng)建的程序的性能的各種用戶交互模式。C節(jié)描述可以用來表達所創(chuàng)建的程序的說明性表達式語言。D節(jié)描述用于為各個輸入-輸出示例創(chuàng)建候選程序組的功能。E節(jié)描述用于將各組候選程序編組成各分區(qū)的功能。F節(jié)描述用于生成用來選擇由程序提供的子程序的選擇條件的功能。并且,G節(jié)描述可以用來實現(xiàn)前述各節(jié)的特征的任何方面的說明性處理功能。作為正文前的內(nèi)容,附圖中的一些描述在被不同地稱為功能、模塊、特征、元素等等的一個或多個結(jié)構(gòu)組件的上下文中描述各概念。附圖中所示出的各種組件可以以任何方式實現(xiàn)。在一種情況中,所闡釋的將附圖中各種組件分隔成不同單元可以反映在實際實現(xiàn)中使用對應(yīng)的不同組件。替代地或另外,附圖中所闡釋的任何單個組件由多個實際組件實現(xiàn)。替代地或另外,附圖中對任何兩個或更多個分離的組件的敘述可以反映由單個實際組件執(zhí)行的不同功能。依次討論的圖22提供關(guān)于附圖中所示出的功能的一種說明性實現(xiàn)的附加細節(jié)。其他附圖以流程圖形式描述各概念。在這種形式中,某些操作被描述為構(gòu)成以某種次序執(zhí)行的不同的框。這樣的實現(xiàn)是說明性的和非限制性的。在此描述的某些框可以被編組在一起并在單個操作中執(zhí)行,某些框可以分解成多個組成框,且某些框可以以與在此闡釋的次序不同的次序執(zhí)行(包括執(zhí)行各框的并行方式)。流程圖中所示出的框可以以任何方式實現(xiàn)。在術(shù)語學(xué)方面,短語“被配置為”包括可以構(gòu)建任何種類的功能以執(zhí)行所標識的操作的任何方式。術(shù)語“邏輯”或“邏輯組件”涵蓋用于執(zhí)行任務(wù)的任何功能。舉例來說,流程圖中所闡釋的每一操作對應(yīng)于用于執(zhí)行該操作的邏輯組件。當由計算系統(tǒng)實現(xiàn)時(例如,“計算功能”),邏輯組件表示不管用何種方法實現(xiàn)的作為計算系統(tǒng)的物理部分的物理組件。下列的解釋可以將一個或多個特征標識為“可選的”。這種類型的語句不應(yīng)被解釋為可以被考慮是可選的特征的詳盡指示;即是說,盡管在本文中不明確地標識,但其他特征可以被看作是可選的。類似地,該解釋可以指示一個或多個特征可以以復(fù)數(shù)實現(xiàn)(即是說,通過提供多于一個的特征)。這一表述不應(yīng)被解釋為可以復(fù)制的特征的詳盡指示。最后,術(shù)語“示例性的”或“說明性的”是指在潛在地多種實現(xiàn)當中的一種實現(xiàn)。A.概覽和說明性使用場景 圖I示出用于基于輸入-輸出示例創(chuàng)建程序的說明性程序創(chuàng)建系統(tǒng)102。每一輸入-輸出示例包括輸入項和對應(yīng)的輸出項。輸入項可以對應(yīng)于一個或多個字符串項(例如,一個或多個文本字符串)。輸出項也可以對應(yīng)于字符串項。更具體地,每一輸出項表不對對應(yīng)的輸入項執(zhí)行的某種類型的變換。在一種情況中,變換涉及從輸入項中的文本字符串提取字符的子集和/或串接這樣的子集以便產(chǎn)生輸出項等等。替代地或另外,變換可以涉及格式化類型的改變。圖I呈現(xiàn)上面陳述的概念的示例。在這種情況中,用戶提供包括各列的集合的數(shù)據(jù)集104。前兩列提供輸入項106。即,第一列提供客戶的名字的列表。第二列提供對應(yīng)的姓氏的列表。因而,每一輸入項對應(yīng)于兩個字符串項的元組。前兩列中的輸入字符串項可以被認為是變量(V1, v2)的值。第三列呈現(xiàn)輸出項108。即,第三列表示從第一列和第二列采集的姓名信息。支持將輸入項變換到輸出項的邏輯要求打印(在第一列中的)名字中的首字母、打印句點(.)和空格,并打印(在第二列中的,以其整體)姓氏。在圖I的具體場景中,用戶(或某種其他實體)已經(jīng)準備一組四個輸入-輸出示例110。即,第一輸入-輸出示例將輸入元組“Jim”和“Smith”映射為“J. Smith”。第二輸入-輸出示例將輸入元組“Sally”和“Jones”映射為“S. Jones”等等。數(shù)據(jù)集104還包括另一組未經(jīng)轉(zhuǎn)換的輸入項112,該輸入項112尚未具有對應(yīng)的輸出項。用戶可以拒絕以手動方式對這些輸入項112執(zhí)行變換,這是因為該組輸入項112可能很大;即是說,用戶以手動方式對該組進行操作可能耗費太多時間了。程序創(chuàng)建系統(tǒng)102生成輔助用戶將該組輸入項112變換成合乎需要的輸出形式的程序114。從高級視角看,程序創(chuàng)建系統(tǒng)102基于該組輸入-輸出示例110生成程序114。然后,程序執(zhí)行模塊116將程序114應(yīng)用到該組輸入項112。這產(chǎn)生一組新的輸出項。例如,程序114自動地將包括元組“Tom”和“Milano”的輸入項變換成“T. Milano”。在這種情況中,看上去程序創(chuàng)建系統(tǒng)102已經(jīng)正確地總結(jié)了支持該組輸入-輸出示例110中的變換的邏輯。即是說,程序114看上去通過提取第一輸入字符串項的首字母(“T”)、在首字母之后添加句點和空格且然后以其整體提供第二輸入字符串項“Milano”來操作。
在上面的場景中,程序114將m個輸入字符串項轉(zhuǎn)換成單個輸出項。然而,程序創(chuàng)建系統(tǒng)102可以生成第二程序以便將相同的輸入字符串項(對應(yīng)于客戶的名字和姓氏)或其子集映射成另一輸出項。例如,圖I示出,數(shù)據(jù)集104包括可選的第四列,該第四列提供輸出項的附加集合。通過選擇第二列中的姓氏、添加逗號(“,”)、后面跟著空格、后面跟著名字(如它出現(xiàn)在第一列中一樣),形成第四列中的輸出項。通過這種規(guī)定,程序創(chuàng)建系統(tǒng)102可以用來將任意組的m個字符 串項映射成任意組的P個輸出字符串項。圖2示出可以利用圖I的程序創(chuàng)建系統(tǒng)102和程序執(zhí)行模塊116的一個說明性數(shù)據(jù)操縱系統(tǒng)200。一般地,圖2區(qū)分不同的模塊以便清晰地標識由這些相應(yīng)模塊執(zhí)行的功能。在一種情況中,這些模塊可以表示不同的物理組件。在其他情況中,這些模塊中的一個或多個可以表示在一個或多個其他模塊內(nèi)的組件。從高級視角來看,程序創(chuàng)建系統(tǒng)102結(jié)合任何類型的數(shù)據(jù)操縱功能202來操作。在一種情況中,舉例來說,數(shù)據(jù)操縱功能202表示允許用戶操縱表格形式的數(shù)據(jù)項的電子表格系統(tǒng)??梢允褂玫囊环N電子表格系統(tǒng)是由華盛頓州雷蒙德市的微軟⑧公司提供的微軟Office Excel C1在另一情況中,數(shù)據(jù)操縱功能202可以表示在文檔編輯應(yīng)用內(nèi)的表操縱功倉泛。此外,數(shù)據(jù)操縱功能202可以與其他功能204交互。例如,數(shù)據(jù)操縱功能202可以表示與文檔編輯應(yīng)用交互的電子表格系統(tǒng)。在另一示例中,數(shù)據(jù)操縱功能202可以表示經(jīng)由網(wǎng)絡(luò)(未示出)與任何類型的網(wǎng)絡(luò)資源交互的電子表格系統(tǒng)。例如,數(shù)據(jù)操縱功能202可以從其他功能204接收數(shù)據(jù)。替代地或另外,數(shù)據(jù)操縱功能202可以把數(shù)據(jù)提供給其他功能 204。在操作中,數(shù)據(jù)操縱功能202提供允許用戶操縱表格形式的數(shù)據(jù)項的功能。在用戶與數(shù)據(jù)操縱功能202交互期間,給定一組輸入-輸出示例,數(shù)據(jù)操縱功能202可以調(diào)用程序創(chuàng)建系統(tǒng)102來提供自動地將輸入項映射成輸出項的程序114。然后,給定新的輸入項,程序執(zhí)行模塊116可以使用程序114來自動地填充輸出項。圖2將數(shù)據(jù)操縱功能202和程序創(chuàng)建系統(tǒng)102示出為兩個不同的相應(yīng)模塊。這表示一種實現(xiàn)可能。在另一情況中,數(shù)據(jù)操縱功能202可以將程序創(chuàng)建系統(tǒng)102合并為其組件中的一個。同樣地,圖2將程序執(zhí)行模塊116示出為在數(shù)據(jù)操縱功能202內(nèi)的組件。這表示一種實現(xiàn)可能。在另一情況中,數(shù)據(jù)操縱功能202和程序執(zhí)行模塊116可以表示兩個不同的模塊。數(shù)據(jù)操縱功能202 (如所述的,其可以包括電子表格系統(tǒng))可以以不同的模式來調(diào)用程序創(chuàng)建系統(tǒng)102。在一個模式中,用戶可以明確地調(diào)用程序創(chuàng)建系統(tǒng)102的功能,例如通過激活在由數(shù)據(jù)操縱功能202提供的用戶界面呈現(xiàn)內(nèi)的命令按鈕、菜單項等等。然后,用戶可以標識一組輸入-輸出示例以供用于生成程序114。用戶也可以明確地引導(dǎo)程序執(zhí)行模塊116將程序114應(yīng)用到一組未經(jīng)變換的輸入項。在另一模式中,數(shù)據(jù)操縱功能202可以包括檢測功能,其檢測用戶正在對輸入項的集合重復(fù)執(zhí)行相同類型的變換以提供對應(yīng)的輸出項。然后,數(shù)據(jù)操縱功能202可以基于用戶已經(jīng)供應(yīng)的輸入-輸出示例自動地調(diào)用程序創(chuàng)建系統(tǒng)102。一旦程序執(zhí)行模塊116接收到程序114,它可以將程序114應(yīng)用到其余的未經(jīng)變換的輸入項。因而,如果用戶正在操作一個表,則程序執(zhí)行模塊116將在某些時候自動地用經(jīng)變換的輸出項來填充該表。用戶可以在認為適當?shù)臅r候啟用或禁用這種特征。在另一模式中,用戶可以使用數(shù)據(jù)操縱功能202來嘗試性地將有限的一組輸入-輸出項提供給程序創(chuàng)建系統(tǒng)102 (這可能不產(chǎn)生費用,或者這產(chǎn)生減少的費用)。程序創(chuàng)建系統(tǒng)102可以向用戶提供具有對應(yīng)的受限效用的程序。舉例來說,程序可以具有受限的效用,這是因為它是使用少量的輸入-輸出示例來生成的。此外,可以阻止用戶通過提交附加的輸入-輸出示例改善程序的性能。為了獲得更完整的一套服務(wù),可以要求用戶向管理程序創(chuàng)建系統(tǒng)102的實體支付費用。在另一模式中,用戶可以從諸如另一個人等另一實體接收一組輸入-輸出項。然后,用戶可以與程序創(chuàng)建系統(tǒng)102交互以代表該另一實體創(chuàng)建程序。然后,用戶可以將程序114轉(zhuǎn)發(fā)給該另一實體,以供由該另一實體使用。這些使用模式是代表性的而非詳盡的。數(shù)據(jù)操縱功能202可以以其他操作模式與程序創(chuàng)建系統(tǒng)102交互。 用戶可以直接地或間接地調(diào)用程序創(chuàng)建系統(tǒng)102來完成不同的數(shù)據(jù)操縱目標。在第一場景中,當存在要將以第一格式表示的信息轉(zhuǎn)換成以第二格式表示的信息的某種環(huán)境專用的需求時,用戶可以調(diào)用程序創(chuàng)建系統(tǒng)102。例如,在一種情況中,用戶可以從另一個人(或多人)接收第一格式的信息?;谌魏苇h(huán)境專用的考慮,用戶可能希望將這種信息變換成對用戶來說更加可以接受的第二格式。在另一情況中,用戶本身可能已經(jīng)創(chuàng)建了第一格式的信息。用戶現(xiàn)在可能希望將該信息變換成第二格式。在另一情況中,用戶可能從源應(yīng)用、數(shù)據(jù)存儲等等接收到以第一格式表示的信息。用戶可能希望將這種信息轉(zhuǎn)換成更適用于目標應(yīng)用、數(shù)據(jù)存儲等等的第二格式。在第二場景中,出于從得自任何源的輸入項提取一個或多個數(shù)據(jù)項的主要目的,用戶可以直接地或間接地調(diào)用程序創(chuàng)建系統(tǒng)102。在這種場景中,第二格式表示以第一格式表不的信息的子集。在第三場景中,基于與第一場景和第二場景相關(guān)聯(lián)的原因的組合,用戶可以直接地或間接地調(diào)用程序創(chuàng)建系統(tǒng)102。例如,除了從輸入項提取信息之外,用戶可能希望對所提取的信息執(zhí)行任何類型的變換。用戶也可以向輸出項添加在輸入項中沒有對應(yīng)物的信
肩、O以上所描述的數(shù)據(jù)操縱場景是代表性的而非詳盡的。用戶可以調(diào)用程序創(chuàng)建系統(tǒng)102來完成其他數(shù)據(jù)操縱目標。用戶交互模塊206提供界面,用戶或其他實體可以通過該界面與數(shù)據(jù)操縱功能202和程序創(chuàng)建系統(tǒng)102交互。在一種情況中,舉例來說,用戶交互模塊206可以提供允許用戶與數(shù)據(jù)操縱功能202和程序創(chuàng)建系統(tǒng)102交互的圖形用戶界面(GUI)。更具體地,在一種情況中,用戶可以通過經(jīng)由數(shù)據(jù)操縱功能202提供的界面與程序創(chuàng)建系統(tǒng)102交互;在另一情況中,用戶可以直接地與由程序創(chuàng)建系統(tǒng)102提供的服務(wù)交互。圖2將用戶交互模塊206描繪為與數(shù)據(jù)操縱功能202和程序創(chuàng)建系統(tǒng)102不同的模塊以便便于解釋。這表示一種可能的實現(xiàn)。在另一情況中,數(shù)據(jù)操縱功能202和/或程序創(chuàng)建系統(tǒng)102可以將用戶交互模塊206合并為其組件。在任何情況中,用戶交互模塊206包括適應(yīng)與程序創(chuàng)建系統(tǒng)102交互的不同模式的功能。在這些模式中,用戶可以將各種形式的反饋提供給程序創(chuàng)建系統(tǒng)102,這允許程序創(chuàng)建系統(tǒng)102改善程序114的性能。此外,用戶交互模塊206可以包括可選的自然語言交互模塊208,該自然語言交互模塊208可以向用戶提供自然語言消息;一種這樣的類型的消息可以解釋程序114正在用來將輸入項轉(zhuǎn)換成對應(yīng)的輸出項的邏輯。B節(jié)提供關(guān)于這些不同特征的進一步細節(jié)。在物理實現(xiàn)方面,圖2中所示出的各種模塊和系統(tǒng)可以由一個或多個計算設(shè)備實現(xiàn)。這些計算設(shè)備可以位于單個位置,或者可以在分布于多個位置。例如,本地的數(shù)據(jù)操縱功能202 (例如,電子表格系統(tǒng))可以與本地的程序創(chuàng)建系統(tǒng)102交互以執(zhí)行上面概括敘述的功能。在另一情況中,本地的數(shù)據(jù)操縱功能202可以與遠程網(wǎng)絡(luò)實現(xiàn)的程序創(chuàng)建系統(tǒng)102交互以實現(xiàn)在此描述的功能。此外,圖2中所示出的各種模塊和系統(tǒng)可以由單個實體或多個實體管理。任何類型的計算設(shè)備可以用來實現(xiàn)圖I中所描述的功能,包括個人計算設(shè)備、工 作站計算設(shè)備、膝上型計算設(shè)備、個人數(shù)字助理設(shè)備、移動電話設(shè)備、游戲控制臺設(shè)備、機頂盒設(shè)備、服務(wù)器計算設(shè)備等等。程序創(chuàng)建系統(tǒng)102和數(shù)據(jù)操縱功能202還可以與一個或多個數(shù)據(jù)存儲210交互。例如,數(shù)據(jù)存儲210可以存儲輸入-輸出示例等等。借助于以上介紹,本解釋現(xiàn)在進行到程序創(chuàng)建系統(tǒng)102的說明性組成部分。程序創(chuàng)建系統(tǒng)102包括(或可以在概念上包括)一組模塊。這一節(jié)提供這些模塊的概覽。后面各節(jié)提供關(guān)于這些模塊中的每一個的附加細節(jié)。作為概覽,程序創(chuàng)建系統(tǒng)102可以按由三個部分組成的過程來將輸入-輸出示例轉(zhuǎn)換成程序114。無條件的但可能多次循環(huán)的字符串變換模塊212 (簡單起見,稱為子程序生成模塊212)執(zhí)行第一部分;分區(qū)模塊214執(zhí)行第二部分;并且條件生成模塊216執(zhí)行第三部分。更具體地,對于每一輸入-輸出示例,子程序生成模塊212生成候選子程序的子集。每一候選子程序能夠?qū)⑴c輸入-輸出不例相關(guān)聯(lián)的輸入項轉(zhuǎn)換成與輸入-輸出不例相關(guān)聯(lián)的輸出項。然而,該組候選程序使用不同的策略來執(zhí)行這種轉(zhuǎn)換。D節(jié)提供關(guān)于子程序生成模塊可以生成候選子程序的方式的附加信息。分區(qū)模塊214將輸入-輸出示例編組成各分區(qū)。每一分區(qū)提供一組一個或多個子程序。在將輸入-輸出示例編組在一起時,分區(qū)模塊214使用任何類型的兼容性考慮。根據(jù)一種閾值測試,僅當兩組子程序的交集產(chǎn)生非空集時,這意味著這兩組子程序需要具有至少一個共同的子程序,分區(qū)模塊214將它們組合在一起。分區(qū)模塊214將各分區(qū)的共同子程序標識為要用來將新的輸入項轉(zhuǎn)換成適當?shù)膶?yīng)輸出項的代表性程序。E節(jié)提供關(guān)于分區(qū)模塊214的操作的此外細節(jié)。條件生成模塊216檢查與由分區(qū)模塊214標識的分區(qū)相關(guān)聯(lián)的輸入項。條件生成模塊216為每一分區(qū)生成所謂的選擇條件(條件i)。當被應(yīng)用于具體的輸入項時,與具體的分區(qū)相關(guān)聯(lián)的選擇條件被評估為真或假。如果它評估為真,那么,程序執(zhí)行模塊116應(yīng)用已經(jīng)為該分區(qū)選擇的代表性的子程序。如果它評估為假,那么,不應(yīng)用代表性的子程序。相反,某一其他分區(qū)的選擇條件將評估為真,且將應(yīng)用該分區(qū)的代表性的程序。即是說,根據(jù)一種實現(xiàn),條件生成模塊216生成選擇條件,以使得對給定輸入項至多有一個選擇條件適用。(如果它們中沒有一個適用,則程序執(zhí)行模塊116可以應(yīng)用任何子程序)。F節(jié)提供關(guān)于條件生成模塊216的操作的附加信息。程序創(chuàng)建系統(tǒng)102基于代表性的程序(Prog1, prog2等等)和對應(yīng)的選擇條件Ccond1, Cond2等等)生成文本操縱程序114。程序114因此采用switch (切換)操作的形式。如果Cond1評估為真,那么,程序執(zhí)行模塊116應(yīng)用Prog1,如果Cond2評估為真,那么,程序執(zhí)行模塊116應(yīng)用Prog2,等等。在此所使用的術(shù)語“程序”或“已創(chuàng)建的程序”是指可以包括多個子程序部分(例如,progl,PiOg2等等)的包含性的程序。下面為簡單起見,子程序也被稱為P1' P2等等。最終,交集模塊218形成兩組子程序的交集,例如,以便確定這兩個組所共享的子程序。在一種實現(xiàn)中,交集模塊218可以通過將各組中的每一候選子程序看作是離散的實體來執(zhí)行這一任務(wù)。在另一情況中,交集模塊218可以通過形成表示兩組子程序的兩個有向無環(huán)圖的交集來形成這兩組的交集。D節(jié)提供關(guān)于將各組子程序表示 成圖的附加信息。圖3示出呈現(xiàn)圖I的數(shù)據(jù)操縱系統(tǒng)200的操作的高級描述的過程300。在框302,數(shù)據(jù)操縱系統(tǒng)200接收一組輸入-輸出示例。每一輸入-輸出示例包括數(shù)據(jù)項(包括一個或多個輸入字符串項)和輸出項。在框304,數(shù)據(jù)操縱系統(tǒng)200基于輸入-輸出示例創(chuàng)建程序114。在框304,數(shù)據(jù)操縱系統(tǒng)200使用程序114來將附加的輸入項(這些輸入項還沒有經(jīng)過變換)變換成輸出項。在框308,數(shù)據(jù)操縱系統(tǒng)200基于與用戶的交互可選地修改所創(chuàng)建的程序。圖4示出呈現(xiàn)程序創(chuàng)建系統(tǒng)102產(chǎn)生所創(chuàng)建的程序114的方式的更詳細的描述的過程400。在框402,程序創(chuàng)建系統(tǒng)102接收一組輸入-輸出示例。在框404,程序創(chuàng)建系統(tǒng)102為每一輸入-輸出不例生成一組候選程序。每一候選程序能夠?qū)⑴c輸入-輸出不例相關(guān)聯(lián)的輸入項轉(zhuǎn)換成與輸入-輸出示例相關(guān)聯(lián)的輸出項。在框406,程序創(chuàng)建系統(tǒng)102基于任何類型的兼容性考慮將各組子程序編組成各分區(qū)。在框408,程序創(chuàng)建系統(tǒng)102確定將有選擇地調(diào)用與各個分區(qū)相關(guān)聯(lián)的代表性的子程序的選擇條件。在框410,程序創(chuàng)建系統(tǒng)102輸出所創(chuàng)建的程序114,所創(chuàng)建的程序114包括該組代表性的程序(在框406中標識)和該組選擇條件(在框408標識)。圖5示出圖4的過程400的操作的示例。在框402’,程序創(chuàng)建系統(tǒng)102接收六個輸入-輸出不例。如上面所說明的,每一輸入-輸出不例i包括輸入項(Ii)和對應(yīng)的輸出項(Oi)。每一輸入項又可以包括一個或多個輸入字符串項的元組。在框404’,程序創(chuàng)建系統(tǒng)102為每一輸入-輸出不例生成一組子程序。例如,對于輸入-輸出示例1,程序創(chuàng)建系統(tǒng)102將子程序和Pltl標識為能夠?qū)⑤斎腠桰1轉(zhuǎn)換成輸出項Op但是這些程序中的每一個使用不同的策略來執(zhí)行這一變換。類似地,對于輸入-輸出示例2,程序創(chuàng)建系統(tǒng)102將子程序P3、P1(1、Pn和P12標識為能夠?qū)⑤斎腠桰2轉(zhuǎn)換成輸出項O2,等等。在框406’,程序創(chuàng)建系統(tǒng)102將輸入-輸出示例編組為各分區(qū)——在這一場景中,兩個分區(qū)被標記“分區(qū)I”和“分區(qū)2”。選擇各分區(qū),以使得它們各自的組的交集非空。例如,輸入_輸出不例1、2和3的交產(chǎn)生共同子程序Pltl,同時輸入-輸出不例4、5和6的交集產(chǎn)生共同子程序P2(l。因此,程序創(chuàng)建系統(tǒng)102可以將子程序Pltl選擇成表示分區(qū)I的子程序,并將子程序P 2(|選擇為表示分區(qū)2的子程序。這是因為,使用Pltl,第一分區(qū)中的任何輸入項都可以被轉(zhuǎn)換成其對應(yīng)的輸出項,并且,使用P2tl,第二分區(qū)中的任何輸入項都可以被轉(zhuǎn)換成其對應(yīng)的輸出項。E節(jié)將詳細說明用來創(chuàng)建分區(qū)的兼容性準則。在框408’,程序創(chuàng)建系統(tǒng)102選擇用來表不第一分區(qū)的選擇條件Cond1,并選擇用來表示第二分區(qū)的選擇條件cond2。第一選擇條件(Cond1)被選擇為使得它對于第一分區(qū)中的任何輸入項評估為真并且它對于第二分區(qū)中的任何輸入項評估為假。第二選擇條件(Cond2)被選擇為使得它對于第二分區(qū)中的任何輸入項評估為真并且它對于第一分區(qū)中的任何輸入項評估為假。圖6示出程序執(zhí)行模塊116使用程序114來操作新的輸入項的方式的概覽。新的輸入項對應(yīng)于還沒有被轉(zhuǎn)換成輸出項的一個或多個輸入數(shù)據(jù)項。在框602,程序執(zhí)行模塊116接收新的輸入項,例如圖I的示例中的姓名“FrankWillard”。在框604,程序執(zhí)行模塊116相對于選擇條件來分析輸入項,以確定哪一個選擇條件適用。假定與子程序Prog2相關(guān)聯(lián)的選擇條件Cond2適用。在框606,程序執(zhí)行模塊116使用prog2來將輸入項(“FrankWillard”)變換成適當?shù)妮敵鲰?例如,“F. Willard”)。·B.用戶交互功能這一節(jié)描述(圖2的)用戶交互模塊206的操作。用戶交互模塊206允許用戶以各種模式與數(shù)據(jù)操縱功能202和程序創(chuàng)建系統(tǒng)102交互,其中這些模式可以分離地或以任何組合來應(yīng)用。為了便于解釋,假設(shè)用戶與程序創(chuàng)建系統(tǒng)102直接交互。然而,該交互可以由數(shù)據(jù)操縱功能202以任何方式來作為中介。一般地,各種交互模式允許用戶以不同的各種方式向程序創(chuàng)建系統(tǒng)102提供反饋。該反饋允許用戶標識(并且隨后校正)出于任何原因認為是不合乎需要的輸出結(jié)果。程序創(chuàng)建系統(tǒng)102可以使用用戶的反饋來修改程序114,以使得它提供更準確的結(jié)果。依靠這種功能,程序創(chuàng)建系統(tǒng)102可以通過與用戶的一系列交互來迭代地學(xué)習(xí)程序114。圖7示出表示第一用戶交互模式的示例。此示例與參考圖I陳述的場景相關(guān)。在這里,用戶已經(jīng)創(chuàng)建四個輸入-輸出不例702。每一輸入-輸出不例包括輸入項,該輸入項包括分別對應(yīng)于客戶的名字和姓氏的兩個輸入字符串項。每一輸入-輸出不例也包括對應(yīng)于這兩個輸入字符串項的變換的輸出項。該變換提取客戶的名字的首字母,并將其與客戶的完整姓氏串接起來。假定用戶已經(jīng)向程序創(chuàng)建系統(tǒng)102提交了這四個輸入-輸出示例702,且作為響應(yīng)接收到了程序114。然后,用戶使用程序114來操作還沒有經(jīng)過變換的另一組輸入項704。這用附加的輸出項填充了圖7中所示出的表。假設(shè)程序114以合乎需要的方式對除了輸入項中的兩個之外的所有其他輸入項運作。異常的輸入項706對應(yīng)于姓名“Ms. Sue Phan”。在這一示例中,程序114 “錯誤地”將字符串“Ms.(女士)”解釋為客戶的名字。它因此輸出“M. Phan”的輸出項,而不是適當?shù)妮敵鲰棥癝. Phan”。通過將輸入項“Mr. Tony Miller”轉(zhuǎn)換成“Μ· Miller”,程序114提供類似的不合乎需要的結(jié)果。用戶可以以任何方式突出顯示各模糊的輸入項中的一個或多個。例如,假定用戶決定突出顯示輸入項706。在一個僅僅是代表性的情況中,用戶交互模塊206提供標記按鈕708(等等),其允許用戶將輸入項706登記為異常。即是說,在一種方法中,用戶可以選擇對應(yīng)于異常的輸出項的一個或多個單元格并點擊標記按鈕708。用戶交互模塊206也可以給予用戶校正異常的輸入項的機會,例如通過在適當?shù)膯卧裰杏谩癝. Phan”代替“M. Phan”。替代地,用戶交互模塊206可以提供專用的對話框(等等)(未示出)來向用戶征求正確的輸出項。用戶的動作創(chuàng)建例如對應(yīng)于輸入項“Ms. SuePhan"和正確的輸出項“S. Phan”的新的輸入-輸出示例。然后,用戶可以向程序創(chuàng)建系統(tǒng)102呈現(xiàn)這新的輸入-輸出項以及其他輸入-輸出項。程序創(chuàng)建系統(tǒng)102可以對這些輸入-輸出示例操作以生成經(jīng)更新的程序。經(jīng)更新的程序?qū)ㄗ罴训匾赃m當準確的和一般化的方式解決與異常的輸入項706相關(guān)聯(lián)的場景的邏輯。例如,如圖7的右下部所指示的,新生成的程序現(xiàn)在正確地將輸入項“Mr. Tony Miller” 變換成 “T. Miller”。圖8示出補充圖7的示例的過程800,示出以第一用戶交互模式執(zhí)行的操作。將從圖2的總體數(shù)據(jù)操縱系統(tǒng)200的“視角”解釋這一過程800。在框802,數(shù)據(jù)操縱系統(tǒng)200接收例如對應(yīng)于圖7的一組輸入-輸出示例702的第一組輸入-輸出示例。在框804,數(shù)據(jù)操縱系統(tǒng)200基于這些輸入-輸出示例提供程序114。在框806,將數(shù)據(jù)操縱系統(tǒng)200應(yīng)用到要變換的新的一組輸入項。在一種實現(xiàn)中,用戶可以明確地標識這一組???06產(chǎn)生對應(yīng) 的一組新的輸出項。在框808,數(shù)據(jù)操縱系統(tǒng)200接收用戶對出于任何原因被認為是不合乎需要的任何輸出項的標識(例如,因為它們是不正確的或以另外方式非優(yōu)選的)。在框810,數(shù)據(jù)操縱系統(tǒng)200接收一組經(jīng)更新的輸入-輸出示例,其包括在框810標識的輸出項的經(jīng)校正的版本。程序創(chuàng)建系統(tǒng)102可以對這一組經(jīng)更新的輸入-輸出項操作以生成經(jīng)更新的程序。圖9示出表示與用戶交互的第二模式的示例。在這種情況中,用戶已經(jīng)同樣向程序創(chuàng)建系統(tǒng)102提交了一組輸入-輸出示例902,這引起了程序114的生成。同樣,程序創(chuàng)建系統(tǒng)102使用程序114來分析其他輸入項。程序創(chuàng)建系統(tǒng)102可以自動地檢查這樣的輸入項集合。替代地,用戶可以明確地指示程序創(chuàng)建系統(tǒng)102檢查輸入項。圖9將輸入項示出為在一個或多個數(shù)據(jù)存儲904中提供。在這種場景中,程序創(chuàng)建系統(tǒng)102自動地標識出于任何原因被認為是異?;蚰:妮敵鲰?。例如,假定程序114遇到其中其選擇條件匹配新的輸入的分區(qū)中的兩個子程序可將該新的輸入項轉(zhuǎn)換成兩個不同的輸出項的情況。這是不合乎需要的輸出,因為程序執(zhí)行模塊116將不能夠確定哪一輸出項是正確的。在正常的狀態(tài)中,即使兩個子程序使用不同的策略來提供它們各自的輸出結(jié)果,這兩個子程序都產(chǎn)生相同的輸出結(jié)果。在一種方法中,程序創(chuàng)建系統(tǒng)102可以通過呈現(xiàn)用戶界面對話框906來解決這種情況。該對話框906可以標識產(chǎn)生模糊的輸出結(jié)果的輸入項(或多個這樣的輸入項)。例如,假設(shè)輸入項對應(yīng)于姓名“Thomas Miller III”。程序114可能“不確定”如何變換這一輸入項。第一子程序指示該輸入項適當?shù)乇晦D(zhuǎn)換成“T. Miller”。第二子程序指示該輸入項適當?shù)乇晦D(zhuǎn)換成“T. Miller III”。并且,第三子程序指示該輸入項適當?shù)乇晦D(zhuǎn)換成“T. III”。對話框906在部分908向用戶呈現(xiàn)這三個選項并要求用戶挑選優(yōu)選的輸出結(jié)果(如果有的話)。用戶做出選擇并激活提交按鈕910等等。這一動作可以創(chuàng)建新的輸入-輸出示例。程序創(chuàng)建系統(tǒng)102可以使用該新的輸入-輸出示例來自改善其對于這種類型的輸入場景的變換準確度。盡管未示出,但在對話框906未能將正確的或以另外方式優(yōu)選的輸出項列出為可選擇的選項的情況下,對話框906可以包括允許用戶指定正確的或以另外方式優(yōu)選的輸出項的功能。
圖10示出補充圖9的示例的過程1000,示出以第二用戶交互模式執(zhí)行的操作。在框1002,數(shù)據(jù)操縱系統(tǒng)200接收第一組輸入-輸出示例,例如,對應(yīng)于圖9的一組輸入-輸出示例902。在框1004,數(shù)據(jù)操縱系統(tǒng)200基于這些輸入-輸出示例提供程序114。在框1006,數(shù)據(jù)操縱系統(tǒng)200被應(yīng)用到還沒有經(jīng)過變換的一組新的輸入項,以產(chǎn)生對應(yīng)的一組輸出項。在框1008,數(shù)據(jù)操縱系統(tǒng)200標識框1006中所提供的輸出結(jié)果中的模糊的輸出項(如果有的話)。在框1010,數(shù)據(jù)操縱系統(tǒng)200從用戶接收澄清該模糊的輸出項的本質(zhì)的輸入。在框1012,數(shù)據(jù)操縱系統(tǒng)200使用在框1010提供的輸入來改善程序114的性能。圖11示出表示與用戶交互的第三模式的示例。在這種情況中,用戶已經(jīng)同樣向程序創(chuàng)建系統(tǒng)102提交了一組輸入-輸出示例1102,這引起程序114的生成。同樣,程序創(chuàng)建系統(tǒng)102可以使用程序114來分析其他輸入項以提供對應(yīng)的輸出項(未示出)。在這種場景中,輸入交互模塊206應(yīng)用自然語言交互模塊208。自然語言交互模塊208提供當前正由程序114用來將輸入項轉(zhuǎn)換成輸出項的邏輯的自然語言解釋。自然語言交互模塊208可以使用在一個或多個數(shù)據(jù)存儲1104中提供的映射規(guī)則來執(zhí)行這種操作。·映射規(guī)則標識與程序114相關(guān)聯(lián)的程序性特征如何被轉(zhuǎn)換成解釋性自然語言消息。圖11示出數(shù)據(jù)操縱系統(tǒng)200的操作中的不同時刻處可以調(diào)用的說明性對話框1106。例如,用戶可以利用這種功能來獲得關(guān)于正用來轉(zhuǎn)換數(shù)據(jù)項的邏輯的了解。這將允許用戶更有效地選擇新的輸入-輸出示例以便克服任何所標識的問題。在一種情況中,用戶交互模塊206可以提供允許用戶明確地調(diào)用解釋功能的解釋按鈕1108等等。替代地或另外,用戶交互模塊206可以在某些情形中自動地調(diào)用解釋功能,或者響應(yīng)于鼠標懸停事件(例如,當用戶鼠標光標移動到包含輸出項的單元格上時)調(diào)用解釋功能等等。對話框1106本身可以以任何方式解釋程序114的邏輯,例如,通過解釋由程序114執(zhí)行的操作的序列。另外,對話框1106可以包括任何類型的按鈕1110等等,用戶可以激活它以便接收關(guān)于正由程序114使用的邏輯的更詳盡的信息。盡管未示出,但對話框1106也可以提供允許用戶基于從對話框1106搜集的了解來校正一個或多個輸出項的選項。圖12不出補充圖12的不例的過程1200,不出與用戶交互的第三模式。在框1202,數(shù)據(jù)操縱系統(tǒng)200接收第一組輸入-輸出示例,例如,對應(yīng)于圖11中的一組輸入-輸出示例1102。在框1204,數(shù)據(jù)操縱系統(tǒng)200基于這些輸入-輸出示例提供程序114。在框1206,數(shù)據(jù)操縱系統(tǒng)200被應(yīng)用到還沒有經(jīng)過變換的一組新的輸入項,以便產(chǎn)生對應(yīng)的一組輸出項。在框1208,在任何時刻,數(shù)據(jù)操縱系統(tǒng)200向用戶提供標識正用來生成輸出項的邏輯的自然語言解釋。在框1210,數(shù)據(jù)操縱系統(tǒng)200可以接收用戶基于從自然語言解釋搜集的了解而準備的一組新的輸入-輸出示例。C.用于表達程序的說明性語言在一種實現(xiàn)中,子程序生成模塊212使用自定義表達式語言來創(chuàng)建子程序。圖13示出用于該表達式語言的說明性構(gòu)造器。然而,其他實現(xiàn)可以使用具有不同的構(gòu)造器和結(jié)構(gòu)范例的其他表達式語言。圖13中所示出的表達式語言的主要或“頂層”特征是Switch (切換)構(gòu)造器1302。Switch構(gòu)造器1302使用或結(jié)構(gòu)來表達程序114。即是說,如已經(jīng)解釋的,Switch構(gòu)造器包括多個選擇條件(Cond1, cond2,...)和多個子程序(P1, P2, · · ·)。在執(zhí)行期間,如果Cond1評估為真,則程序執(zhí)行模塊116應(yīng)用程序P1,如果Cond2評估為真則應(yīng)用程序P2,等等。
表達式語言可以通過利用一組構(gòu)造器1304來表達任何個體子程序(Pp P2等等)。串接構(gòu)造器以指定的次序?qū)蓚€或更多個字符串項組合在一起。循環(huán)構(gòu)造器將字符串項重復(fù)所標識的次數(shù)(約束變量w從被初始化為O開始并且遞增w直到字符串項評估為空),每次都將該字符串項與先前已經(jīng)由循環(huán)構(gòu)造器形成的基字符串項串接在一起。常量字符串構(gòu)造器打印常量字符串。子字符 串構(gòu)造器選擇字符串項str內(nèi)的在子字符串項,在位置Pos1開始并在Pos2-I結(jié)束,同時在位置I開始從左邊計數(shù)。如果Pos1或Pos2是指在輸入字符串項的范圍外的位置,那么,子字符串構(gòu)造器返回空值。如果任何pos是負的,則這一構(gòu)造器是被解釋為意指Length(str)+pos+Ι,其中Length(str)是指輸入字符串項(str)的長度。表達式語言又可以使用Position (位置)構(gòu)造器來定義每一 pos值。Position構(gòu)造器由Position (str, regex1; regex2, count)定義。Position構(gòu)造器是指位置c,使得存在位置ti<c ( t2,以使得StHt1Zt2)是輸入字符串項(str)中與regex2串接的Tegex1的第count (計數(shù))個匹配,且其中,StHt1 = C-I)匹配regeXi并且str (c:t2)匹配regex2。記號str(t1:t2)指示在位置h開始并在位置t2結(jié)束的子字符串,同時在位置I開始從左邊計數(shù)。項Tegex1和regex2對應(yīng)于要匹配的字符串項中的表達式,如下面更詳細地討論的。如果str不包含regeXi和regex2的至少|(zhì) count |個匹配,那么,Position返回空值。如果count〈0,則 Position (str, Tegex1, regex2, count)的含義與 Position (str, Tegex1, regex2,t+count)相同,其中t是字符串str中與regex2串接的Tegex1的匹配總數(shù)?,F(xiàn)在參見圖13的上半部分,表達式語言還可以提供用于表達諸如COnd1等每一選擇條件的句法。選擇條件Cond1代表程序執(zhí)行系統(tǒng)116將選擇子程序條件。一般地,選擇條件可以被表示為一個或多個α-型公式元素的或。每一 α-型公式元素又可以被表示為一個或多個b-型公式元素的與。每一 b-型公式元素又可以對應(yīng)于匹配表達式,Match (regex, C,Vi)(或其否定)。換句話說,每一 b_型公式元素表示在輸入項Vi上評估的原子謂詞。如果輸入項Vi包含表達式regex的至少c個匹配,則這一謂詞評估為真。F節(jié)將陳述α-型和b-型公式元素的總體意義。一般而言,條件生成模塊216檢查一組輸入-輸出示例中所有輸入項的屬性。條件生成模塊216形成用于覆蓋特定分區(qū)的輸入項同時排除所有其他分區(qū)的輸入項的公式元素的邏輯組合。通過使用Match (匹配)構(gòu)造器,這些公式元素最終映射到輸入項中的屬性。表達式語言可以采用速記符號來考慮常見表達式。例如,速記記號Substring (Vi, regex, count)表不更詳盡的表達式 Substring (Vi, Position ( e,regex, count), Position (regex, e,count)),其中 e 表示空字符串。速記記號 Match (regex, Vi)指示Match (regex, I, Vi)。Position構(gòu)造器和Match構(gòu)造器兩者都對由regex表示的正則表達式進行引用。regex表達式被定義為在字符串項內(nèi)的令牌的組合。表達式語言定義各種類型的令牌。令牌的第一集合對應(yīng)于特殊字符,例如StartTok令牌(其匹配字符串項的開始)、EndTok令牌(其匹配字符串項的結(jié)束)以及MonthNameToken令牌(其匹配月份姓名)等等。令牌的另一集合對應(yīng)于單個字符,每一個都來自各自的字符類(C)。令牌的另一集合對應(yīng)于字符的序列,每一序列同樣來自各自的字符類(且由C+表示),或者每一序列被指定為不屬于特定字符類(由C )卜表示)。
例如,令牌可以對應(yīng)于選自以下各類的一個或多個字符數(shù)字數(shù)位;字母字符;小寫字母字符;大寫字母字符;空白字符;等等。也可為特定字符定義令牌,例如連字號、點、分號、冒號、逗號、反斜杠、正斜杠、@符號等等。一般地,表達式語言可以采用傳達令牌的本質(zhì)的術(shù)語。例如,NonDigitTok是指不是數(shù)字數(shù)位的字符的序列,且HyphenToken描述連字號字符等等。記號e指示空的令牌序列。為了闡明表達式語言的含義和使用,考慮下列三個示例。示例I。假設(shè)子程序的目標是提取在輸入字符串內(nèi)的前兩個點之間的非點字符。例如,具體化這一變換的輸入-輸出示例是“alpha, brave, charlie” 一 “bravo”。另一示例是“123. 45. 6789” 一 “45”??梢杂脕肀磉_這種變換的子程序是Substring(ν1; NonDotsToken, 2)。這制定了提取 非點令牌(“NonDotsToken”)在輸入字符串項、內(nèi)的第二次發(fā)生的指令。示例2。假設(shè)程序的目標是從以兩種不同格式寫成的日期中提取月份。例如,具體化這種變換的輸入-輸出示例是“18. 04. 1980,,一“04”。另一示例是“04/18/1980”一“04”。可以用來表達這種變換的程序Switch ({(Match (DotToken, V1), Substring (V1, Numtok, 2))
,(Match (BackSlashToken, V1), Substring (V1, Numtok, I)))}。這一程序包括基于兩個相應(yīng)選擇條件來觸發(fā)的兩個子程序。第一選擇條件確定輸入項V1中是否存在點令牌。如果是,則Substring (子字符串)構(gòu)造器提供提取輸入項V1內(nèi)的第二數(shù)字令牌的指令。第二選擇條件確定輸入項V1中是否存在反斜杠令牌。如果是,則Substring構(gòu)造器提供提取輸入項V1內(nèi)的第一數(shù)字令牌的指令。示例3。假設(shè)子程序的目標是將單詞或句子中的每一字母(包括空格)拆分成不同的列。例如,具體化這種變換的輸入-輸出示例是“THIS IS”一“T|H|I|S| |I|S|”??梢杂脕肀磉_這種變換的子程序是 Loop (w, Concatenate (Substring (V1, CharTok, w), ConstantString(“ I ”)))。內(nèi)部Substring構(gòu)造器提供提取輸入項V1內(nèi)字符令牌的第w次發(fā)生的指令。Concatenate (串接)構(gòu)造器提供將所提取的字符令牌與常量字符串“ I ”組合起來的指令。最后,外部的Loop (循環(huán))構(gòu)造器提供用于多次重復(fù)這些操作的指令,從w=l開始并且遞增w直到循環(huán)體返回空,這在子字符串(substring)構(gòu)造器返回空時發(fā)生,在這一具體的情況中,是在w超過輸入字符串中的字符數(shù)量時發(fā)生。重申一下,在此描述的表達式語言是表達程序和子程序的一種可能方式??梢允褂镁哂衅渌麡?gòu)造器和結(jié)構(gòu)原理的其他表達式語言來代替圖13中所示出的表達式語言。D.生成程序集這一節(jié)描述圖I的子程序生成模塊212的操作方式。重申一下,子程序生成模塊212為每一輸入-輸出示例生成一組子程序。有效的子程序是將把輸入-示例的輸入項變換成輸入_輸出不例的輸出項的一個或多個操作的任何序列。子程序生成模塊212可以使用C節(jié)中陳述的表達式語言來表達每一子程序(根據(jù)一種具體的但非限制性的實現(xiàn))。圖14示出解釋子程序生成模塊212的操作方式的示例1400。在這一示例中,輸入項提供電話號碼“555-706-7709”。對應(yīng)的輸出項列出相同的電話號碼,但在區(qū)號“555”周圍添加了圓括號。子程序生成模塊212通過比較輸出項和輸入項開始其分析。即,子程序生成模塊212確定輸出項內(nèi)的子字符串項如何與輸入項中的子字符串項相匹配。例如,子程序生成模塊212確定輸出項中的數(shù)字令牌“555”匹配輸入項中的令牌“555” ;輸出項中的破折號令牌匹配輸入項中的兩次出現(xiàn);輸出字符串中的令牌“706”匹配輸入項中的令牌“706” ;輸出項中的令牌序列“-706”匹配輸入項中的序列“-706” ;輸出項中的令牌序列“-706-”匹配輸入項中的序列“-706-”等等。正如所明白的,存在大量這樣的匹配,圖14中僅闡釋其中的少量匹配。此外,子程序生成模塊212可以列舉引用相匹配的令牌的位置的所有方式。例如,子程序生成模塊可以確定,參考輸入項中最左邊的字符、輸入項中最右邊的字符和/或輸入項中的某種其他所標識的特征來引用輸入項中的令牌“706”是可能的。注意,子程序生成模塊212排除一些類型的匹配。例如,子程序生成模塊212被配置為尋找在字符串項內(nèi)的令牌邊界處而不是在多字符令牌內(nèi)的任意位置處發(fā)生的匹配。舉例來說,子字符串生成模塊212將不嘗試把輸出項中的字符“55”與輸入項中的對應(yīng)字符匹配起來。此外,子程序生成模塊212將不嘗試匹配非連續(xù)字符串。然而,其他實現(xiàn)可以放松或去除這些約束。子程序生成模塊212還可以從常量字符串項生成輸出項的各部分。子程序生成模塊212也可以列舉這些可能性。舉例來說,子程序生成模塊212可以從常量字符串項“(”創(chuàng)建“”令牌。類似地,子程序生成模塊212可以創(chuàng)建“ 555 ”令牌、“(555 ) ”令牌、“)”令牌、
令牌等等,所有這些都來自相應(yīng)的常量字符串項。在執(zhí)行了這種匹配后,子程序生成模塊212現(xiàn)在可以列舉可以生成輸出字符串中的令牌的不同方式,例如通過從輸入項和常量項中的匹配令牌不同地抽取。大量可能的子程序中的僅一個涉及不參考語言專用的句法來表達的以下的操作序列(1)打印常量項“(” ;(2)打印輸入字符串中的第一數(shù)字令牌;(3)打印常量項“;(4)打印輸入字符串中的第二數(shù)字令牌;(5)打印常量項“;以及(6)打印輸入字符串中的第三數(shù)字令牌。進行到圖15,該圖示出如何把輸入項映射成對應(yīng)的輸出項的另一示例。在這種情況中,輸入項和輸出項兩者表現(xiàn)出大量的重復(fù)。即,舉例來說,輸出項提供夾雜有分號的一系列數(shù)字令牌。因此,這一輸出項是使用以上所描述的Loop構(gòu)造器來表示的良好候選。一般地,子程序生成模塊212確定特定變換的特性是否有助于循環(huán)型表示。子程序生成模塊212通過確定已經(jīng)以以上(相對于圖14)所描述的方式列舉的子程序中是否 存在共性來執(zhí)行這一任務(wù)。例如,子程序生成模塊212可以確定,子程序通過提供打印從輸入項取出的數(shù)字令牌的指令然后提供打印常量字符串“;”的指令來生成輸出項中的令牌“458;”。子程序生成模塊還可以確定,子程序以相同的基本方式生成輸出項中的令牌“870; ”,例如通過提供打印從輸入項取出的數(shù)字令牌的指令然后提供打印常量字符串“;”的指令?;谶@種了解,子程序生成模塊212可以確定是否可能通過重復(fù)兩個指令的這種共同組合來構(gòu)建輸出項中的至少一些部分。在這種情況中,子程序生成模塊212確定,確實可能使用循環(huán)(Loop)構(gòu)造來表示輸出項。更正式地說,子程序生成模塊212嘗試查找是否存在三個索引(i,j,k),使得可以將從i到j(luò)的字符串內(nèi)容以與從j到k的字符串內(nèi)容相同的程序性方式來表示。如果是這樣,則子程序生成模塊212可以調(diào)查是否可能進一步將這種重復(fù)模式擴展到該字符串項,例如直到位置I。圖16示出以流程圖形式傳達以上(相對于圖14和15)所描述的原理的過程1600。在這一過程1600中,子程序生成模塊212為包括輸入項和對應(yīng)的輸出項的特定輸入-輸出示例生成一組程序。在框1602,子程序生成模塊212在輸入項內(nèi)標識輸出項中的子字符串項的出現(xiàn),以提供匹配的結(jié)果。在框1604,子程序生成模塊212列舉可以基于匹配結(jié)果(在框1602標識)并從常量字符串項構(gòu)建的一組子程序。在框1606,子程序生成模塊212確定是否還可能使用Loop構(gòu)造器來表示該輸入-輸出示例。如果是這樣,則子程序生成模塊212生成一個或多個循環(huán)型子程序并將這些子程序添加到該組候選子程序。在框1608,子程序生成模塊212輸出用于該輸入-輸出示例的最終的一組子程序。圖17示出提供關(guān)于子程序生成模塊212可以構(gòu)建循環(huán)型子程序的方式的進一步細節(jié)的過程1700。在框1702,子程序生成模塊212 (以圖16中陳述的方式)為輸入-輸出示例生成一組子程序。在框1704,子程 序生成模塊212確定該組子程序中是否存在重復(fù)的程序性內(nèi)容。為了進行這樣的確定,子程序生成模塊212可以調(diào)用交集模塊218來形成用于生成輸出項的鄰近子串的子程序的交集。交集操作的結(jié)果將標識各子程序內(nèi)的共同操作組件。在框1706,如果找到共性,則子程序生成模塊212制定包括Loop構(gòu)造器的至少一個附加子程序。圖18示出闡釋如何以圖的形式而不是作為各單獨的離散記錄來生成各組子程序的示例1800。例如,子程序生成模塊212可以使用有向無環(huán)圖來表示每一組子程序。子程序生成模塊212可以采用這種策略來簡便地表示一組內(nèi)的子程序(因為通常存在極大量的這些子程序)。更具體地,圖18的示例1800僅示出用來把圖14的輸入項轉(zhuǎn)換成該同一附圖中所示出的輸出項的大量的可能的子程序中的兩個。每一子程序包括以特定次序執(zhí)行的一系列操作。例如,子程序A包括使用不正式的句法來表示以便于解釋的下列操作(1)打印常量字符串項“(” ;(2 )打印從輸入項取出的第一號碼;(3 )打印常量字符串項“”;以及(4)打印常量字符串項“-706-7709”。子程序B包括下列操作(I)打印常量字符串項“(555)” ;以及(2)打印常量字符串項“-706-7709”。這兩個子程序可以被表示為兩個路徑。這些路徑的節(jié)點對應(yīng)于在輸出字符串內(nèi)的位置,這些位置通常是令牌邊界。即,輸出字符串中存在14個字符;這些字符位置的子集對應(yīng)于潛在的節(jié)點位置。由節(jié)點劃分的邊與由子程序執(zhí)行的相應(yīng)操作相關(guān)聯(lián)。注意,子程序A的拖尾的邊對應(yīng)于與子程序B的拖尾的邊相同的操作。因此,圖可以將這一共同部分表示為公共邊。圖18的底部示出了這一概念,例如通過示出公共邊1802。更一般地,子程序生成模塊212可以通過創(chuàng)建表示子程序可能性的有向無環(huán)圖來列舉這些可能性。即是說,在這樣的圖中的每一個可能的節(jié)點處,子程序生成模塊1212可以列舉程序可能性,并以圖格式來表示這些可能性。通過追蹤穿過有向圖的多個可能路徑中的一個,在開始節(jié)點開始并在目標節(jié)點終止,可以“讀出”由這樣的圖表示的任何特定的子程序。如由圖18的簡單示例所指示的,一些路徑包括比其他路徑更多的組成操作(和關(guān)聯(lián)的邊)。更正式地說明,在一種實現(xiàn)中,子程序生成模塊212可以將一組子程序表示為ORg(ihn\7/,lw)。這一記號表示包括包含開始節(jié)點(ns)和目標節(jié)點(Ht)的一組節(jié)點(”)的有向無環(huán)圖(Dag)。該Dag還包括一組邊(f)。W把這些邊映射到相應(yīng)的程序操作。
此外,程序創(chuàng)建系統(tǒng)102的各種組件可以通過對圖而非離散的記錄進行操作來執(zhí)行它們的分析。這適用于由分區(qū)模塊214、條件生成模塊216和交集模塊218執(zhí)行的操作。為了適應(yīng)這一點,對應(yīng)物表達式語言可以被定義為表達相對于圖13陳述的構(gòu)造器的與圖相關(guān)的對應(yīng)物。然而,為便于解釋,其余的解釋描述對離散的各組子程序執(zhí)行的操作。E.生成分區(qū)圖19示出解釋圖2的分區(qū)模塊214的操作的一種方式的過程1900。重申一下,分區(qū)模塊214把各組輸入-輸出示例編組在一起形成分區(qū)。在這一階段,子程序生成模塊212已經(jīng)為每一輸入-輸出示例生成了一組子程序(例如,正如在圖5的框404’中所闡釋的)。在框1902,分區(qū)模塊214通過把所有輸入-輸出示例看作是分離的單獨分區(qū)來開始其分析。在框1904,分區(qū)模塊214確定把各個分區(qū)對組合在一起的適當性。分區(qū)模塊214 可以基于任何類型的兼容性考慮做出這種確定。在一種實現(xiàn)中,分區(qū)模塊214在做出這種確定時檢查兩個兼容性因素。對于每一可能的分區(qū)配對,分區(qū)模塊214執(zhí)行這一分析。即是說,第一兼容性因素涉及兩個候選分區(qū)的交集是否產(chǎn)生非空集,意味著存在由這兩個候選分區(qū)共享的至少一個共同子程序。如果這一因素沒有得到滿足,那么,分區(qū)模塊214可以將這兩個候選分區(qū)標識為不可組合。第二兼容性因素涉及這兩個候選分區(qū)相對于其他分區(qū)的行為。例如,假設(shè),分區(qū)模塊214當前正在考慮把輸入-輸出示例A與輸入-輸出示例B組合起來的適當性(其中這些兩個示例對應(yīng)于各自的單獨分區(qū))。如所說明的,第一要求是輸入-輸出示例A和輸入-輸出示例B的交集非空。(在這里,這兩個輸入-輸出示例的交集是與這兩個輸入-輸出示例相關(guān)聯(lián)的兩組子程序的交集的速記引用)。另外,分區(qū)模塊214確定輸入-輸出示例A與輸入-輸出示例C的交集是否具有與輸入-輸出示例B同輸入-輸出示例C的交集相同的“行為”或特性。分區(qū)模塊214對所有其他輸入-輸出示例(例如D、E等等)重復(fù)這一分析。可以基于所共享的行為的程度來計算兼容性分數(shù)。例如,如果輸入-輸出示例A和輸入-輸出示例B兩者均與輸入-輸出示例C形成非空交集,則得到正分。如果輸入-輸出示例A和輸入-輸出示例B兩者均與輸入-輸出示例C形成空交集,則得到另一正分,等等。另一方面,當輸入-輸出示例A具有不由輸入-輸出示例B共享的與交集相關(guān)的行為時,得到負分。以此方式,分區(qū)模塊214檢查把任何兩個輸入-輸出示例組合在一起的全局暗示。分區(qū)模塊214執(zhí)行以上所描述的類型的分析,以便組合將可能是用于進一步構(gòu)造分區(qū)(在將來的迭代中)的核分區(qū)。即是說,如果輸入-輸出示例A和輸入-輸出示例B具有相對于輸入-輸出示例C的相同的行為,那么,在組合A和B之后,接下來把A+B分區(qū)與輸入-輸出示例C組合起來是可能的??傮w,分區(qū)模塊214嘗試產(chǎn)生少量的分區(qū)。上面的算法促進了這一目標。一般地,在執(zhí)行框1904時,分區(qū)模塊214可以與交集模塊218交互。通過形成與分區(qū)相關(guān)聯(lián)的兩個有向無環(huán)圖的交集,交集模塊218可以確定分區(qū)是否非空。在框1906,分區(qū)模塊214確定是否可能組合任何兩個分區(qū)。如果不是,則過程1900終止并輸出分區(qū)的最終集合(在框1908)。替代地,假設(shè)對框1906的回答為肯定,指示存在可以被組合在一起的至少兩個分區(qū)。如果是這樣,則在框1910,分區(qū)模塊214嘗試確定應(yīng)把哪兩個分區(qū)組合在一起。應(yīng)注意,如果兩個分區(qū)的交集產(chǎn)生空集,則它們是不可組合的。除此之外,分區(qū)模塊214嘗試組合具有最高的如上所述計算的兼容性分數(shù)的分區(qū)。當使用這種方法時,可以說,分區(qū)模塊214可以采用貪婪方法來把分區(qū)組合在一起。一旦把兩個分區(qū)組合在一起,經(jīng)組合的分區(qū)被看作是供在由過程1900提供的分析的下一次迭代中分析的單個分區(qū)。F.生成選擇條件圖20提供陳述條件生成模塊216的操作·的一種方式的示例2000。回想起條件生成模塊216的目的是為每一分區(qū)生成選擇條件。選擇條件將覆蓋與其自己的分區(qū)相關(guān)聯(lián)的輸入項,然而排除與其他分區(qū)相關(guān)聯(lián)的輸入項。在圖20的示例中,第一分區(qū)(“分區(qū)I”)包括兩個輸入-輸出示例,這兩個示例又與兩個相應(yīng)的輸入項相關(guān)聯(lián)。假設(shè)條件生成模塊216處于確定第一分區(qū)的選擇條件(Cond1)期間。條件生成模塊216首先檢查與所有分區(qū)中的所有輸入-輸出示例相關(guān)聯(lián)的輸入項的特性。這些特性在此被稱為屬性,屬性最終對應(yīng)于在輸入項內(nèi)的相應(yīng)的子字符串項。圖20概括地指示輸入項I具有屬性An、A12、A13、A14、……、Aln,同時輸入項2具有屬性A21、A22、A23> A24> ......、A2p。輸入項I的一些屬性也可以出現(xiàn)在輸入項2中。條件生成模塊216可以通過依次處理分區(qū)I內(nèi)的每一輸入項來構(gòu)建選擇條件Cond10 一般地,條件生成模塊216嘗試查找輸入示例中的不在其他分區(qū)中出現(xiàn)的屬性的組合。舉例來說,從輸入項I開始,條件生成模塊216可以確定屬性A12排除了其他分區(qū)中的輸入項的子集,同時屬性A14排除了其他分區(qū)中的其余輸入項。因此,條件生成模塊216可以確定,“與” a ^lj^bi2AND b14足以將第一輸入項與其他分區(qū)的輸入項區(qū)分開來。在這里,記號b12和b14表示分別對應(yīng)于屬性A12和A14的原子謂詞。即是說,原子謂詞對應(yīng)于檢查輸入字符串以便分別得到A12和A14的出現(xiàn)的Match構(gòu)造器。對與輸入項2,假設(shè)單個屬性A23(和對應(yīng)的原子謂詞b23)排除了其他分區(qū)的所有輸入項。條件生成模塊216接下來可以形成用于作為整體的分區(qū)I的邏輯公式,以便由此產(chǎn)生選擇條件Cond115即,選擇條件可以被表示為(b12AND b14) OR b23。這一公式中的邏輯“或”是適當?shù)?,這是因為,如果每一 α-型邏輯元素(與特定輸入項相關(guān)聯(lián))排除了所有其他分區(qū),則它們的“或”也排除所有其他分區(qū)。條件生成模塊216可以對所有分區(qū)重復(fù)這一操作以便為作為整體的Switch構(gòu)造器構(gòu)建選擇條件。條件生成模塊216可以應(yīng)用各種其他考慮以便產(chǎn)生更簡潔的邏輯公式,例如,通過減少公式中的“或”的數(shù)量。即,在執(zhí)行以上所描述的分析時,條件生成模塊216可以采用各種試探法來更容易地考慮選擇特定屬性的全局結(jié)果。例如,假定條件生成模塊216推斷出通過選擇某些公共屬性能將分區(qū)I中的輸入項中的多個與其他分區(qū)區(qū)分開來。出于減少總體公式中的“或”的數(shù)量的目的,條件生成模塊216因此可以選擇這些屬性而不是其他屬性候選。圖21示出總結(jié)上面相對于圖20給出的解釋的過程2100。在框2102,條件生成模塊216確定(與各自的輸入-輸出示例相關(guān)聯(lián)的)輸入項的屬性。這些屬性對應(yīng)于輸入項中相應(yīng)文本特征。在框2104,對于特定分區(qū)i,條件生成模塊216確定將覆蓋分區(qū)i的輸入項然而排除其他分區(qū)的輸入項的公式元素的組合。條件生成模塊216對其他分區(qū)重復(fù)這一操作。在框2106,條件生成模塊216輸出從以上指定的方式確定的選擇條件構(gòu)建的布爾公式。在該布爾公式將特定輸入項路由到特定分區(qū)和關(guān)聯(lián)的代表性子程序的程度上,它可以被看作是布爾分類器。G.代表性的處理功能圖22陳述可以用來實現(xiàn)以上所描述的功能的任何方面的說明性的電子數(shù)據(jù)處理功能2200。參見圖I和圖2,舉例來說,圖22中示出的處理功能2200的類型可以用來實現(xiàn)程序創(chuàng)建系統(tǒng)102的任何方面、數(shù)據(jù)操縱功能202的任何方面、用戶交互模塊206的任何方面等等。在一種情況中,處理功能2200可以對應(yīng)于任何類型的計算設(shè)備(或多個任何類型的這樣的設(shè)備),其中的每一個都包括一個或多個處理設(shè)備。處理功能2200可以包括諸如RAM 2202和ROM 2204等易失性存儲器和非易失性存儲器以及一個或多個處理設(shè)備2206。處理功能2200也可選地包括諸如硬盤模塊、光盤模塊等等各種媒體設(shè)備2208。在處理設(shè)備2206執(zhí)行由存儲器(例如,RAM 2202、ROM 2204或其他地方)維持的指令時,處理功能2200可以執(zhí)行上面標識的各種操作。更一般地,指令和其他信息可以被存儲在任何計算機可讀介質(zhì)2210上,包括但不限于靜態(tài)存儲器存儲設(shè)備、 磁存儲設(shè)備、光存儲設(shè)備等等。術(shù)語計算機可讀介質(zhì)還包括多個存儲設(shè)備。處理功能2200還包括用于(經(jīng)由輸入模塊2214)從用戶接收各種輸入且用于(經(jīng)由輸出模塊)向用戶提供各種輸出的輸入/輸出模塊2212。一種具體的輸出機制可以包括呈現(xiàn)模塊2216和關(guān)聯(lián)的圖形用戶界面(⑶1)2218。處理功能2200也可以包括用于經(jīng)由一個或多個通信管道2222與其他設(shè)備交換數(shù)據(jù)的一個或多個網(wǎng)絡(luò)接口 2220。一個或多個通信總線2224把以上所描述的組件通信上耦合在一起。盡管已經(jīng)用對結(jié)構(gòu)特征和/或方法論動作專用的語言描述了本主題,但應(yīng)理解,在所附權(quán)利要求中界定的本主題并不必定限于以上所描述的具體特征或動作。相反,以上所描述的具體特征和動作是作為實現(xiàn)權(quán)利要求的示例形式而公開的。
權(quán)利要求
1.一種使用至少一個計算設(shè)備執(zhí)行的用于生成執(zhí)行數(shù)據(jù)操縱任務(wù)的程序的方法,包括 接收輸入-輸出示例,所述輸入-輸出示例提供輸入項和對應(yīng)的輸出項; 為相應(yīng)的輸入-輸出示例生成各組子程序,每一子程序被配置為把與特定輸入-輸出示例相關(guān)聯(lián)的輸入項變換成與所述特定輸入-輸出示例相關(guān)聯(lián)的輸出項; 把所述各組子程序編組成各分區(qū),并從相應(yīng)分區(qū)中選擇代表性的子程序; 確定相應(yīng)分區(qū)的選擇條件,每一選擇條件覆蓋與特定分區(qū)相關(guān)聯(lián)的輸入項同時排除與其他分區(qū)相關(guān)聯(lián)的輸入項;以及 基于所述選擇條件以及所述代表性的子程序來提供所創(chuàng)建的程序。
2.如權(quán)利要求I所述的方法,其特征在于,所述生成包括通過以下操作為所述特定輸入-輸出示例生成一組子程序 標識所述輸入項中與所述輸出項中的相應(yīng)字符串項相匹配的字符串項的出現(xiàn),以便提供匹配的結(jié)果;以及 使用所述匹配的結(jié)果和常量字符串,提供把所述輸入項映射到所述輸出項的所述一組子程序。
3.如權(quán)利要求2所述的方法,其特征在于,所述生成還包括確定是否能使用循環(huán)構(gòu)造器生成至少一個附加的子程序,且如果是這樣,則把所述至少一個附加的子程序添加到所述一組子程序。
4.如權(quán)利要求I所述的方法,其特征在于,所述生成包括使用表達式語言來表達每一子程序,所述表達式語言包括以下的一個或多個串接構(gòu)造器;子字符串提取構(gòu)造器;循環(huán)構(gòu)造器;以及常量字符串構(gòu)造器。
5.如權(quán)利要求I所述的方法,其特征在于,所述生成包括將每一組子程序表示成有向無環(huán)圖,其中,由所述組中的兩個或更多個子程序執(zhí)行的相同的操作對應(yīng)于所述有向無環(huán)圖中的單條邊。
6.如權(quán)利要求I所述的方法,其特征在于,所述編組包括 通過把所述輸入-輸出示例看作是單獨分區(qū)來啟動迭代編組過程; 基于兼容性考慮確定把相應(yīng)的分區(qū)候選對組合在一起的適當性; 基于所述適當性確定把分區(qū)候選對組合在一起成為單個分區(qū);以及 重復(fù)所述適當性確定和組合,直到達到終止條件。
7.如權(quán)利要求6所述的方法,其特征在于,所述兼容性考慮指定,如果對應(yīng)于分區(qū)候選對的各組子程序的交集得到空集,則所述分區(qū)候選對不是用于組合的可行候選。
8.如權(quán)利要求6所述的方法,其特征在于,如果相對于其他分區(qū),分區(qū)候選對的第一分區(qū)和第二分區(qū)具有彼此相似的特性,則所述兼容性考慮支持該分區(qū)候選對的組合。
9.如權(quán)利要求I所述的方法,其特征在于,所述選擇條件確定包括,對于所述特定分區(qū) 確定與所述輸入-輸出示例相關(guān)聯(lián)的輸入項的屬性;以及 選擇具有覆蓋與所述特定分區(qū)相關(guān)聯(lián)的輸入項同時排除與其他分區(qū)相關(guān)聯(lián)的輸入項的效果的、與所述屬性相關(guān)聯(lián)的公式元素的組合。
10.如權(quán)利要求I所述的方法,其特征在于,還包括接收新的輸入項; 分析所述新的輸入項以確定適用的選擇條件,并選擇對應(yīng)的子程序;以及 使用所述對應(yīng)的子程序,把所述新的輸入項變換成新的輸出項。
11.如權(quán)利要求I所述的方法,其特征在于,還包括 從用戶接收為新的輸入項生成的輸出項不合乎需要的標識; 提供與所述新的輸入項相關(guān)聯(lián)的新的輸入-輸出示例以及為所述新的輸入項生成的所述輸出項的經(jīng)校正的對應(yīng)物;以及 部分地基于所述新的輸入-輸出示例提供經(jīng)修改的所創(chuàng)建的程序。
12.如權(quán)利要求I所述的方法,其特征在于,還包括 把新的輸入項標識為模糊; 從所述用戶接收澄清所述新的輸入項的輸出項的正確形式的輸入;以及 使用來自所述用戶的所述輸入來改善所創(chuàng)建的程序。
13.如權(quán)利要求I所述的方法,其特征在于,還包括提供自然語言解釋,所述自然語言解釋標識由所創(chuàng)建的程序用來把新的輸入項轉(zhuǎn)換成新的輸出項的邏輯。
14.一種用于存儲計算機可讀指令的計算機可讀介質(zhì),當由一個或多個處理設(shè)備執(zhí)行時,所述計算機可讀指令提供程序創(chuàng)建系統(tǒng),所述計算機可讀指令包括 被配置為接收輸入-輸出示例的邏輯,所述輸入-輸出示例提供輸入項和對應(yīng)的輸出項;以及 被配置為基于所述輸入-輸出示例提供所創(chuàng)建的程序的邏輯,所創(chuàng)建的程序包括 用于把新的輸入項變換成相應(yīng)的新的輸出項的多個子程序,每一子程序都是從表達式語言的構(gòu)造器來構(gòu)建的;以及 多個選擇條件,每一選擇條件選擇特定子程序并排除其他子程序。
15.一種數(shù)據(jù)操縱系統(tǒng),包括 用于執(zhí)行數(shù)據(jù)操縱任務(wù)的數(shù)據(jù)操縱功能; 被配置為進行以下操作的程序創(chuàng)建系統(tǒng) 接收由所述數(shù)據(jù)操縱功能提供的輸入-輸出示例,所述輸入-輸出示例提供輸入項和對應(yīng)的輸出項;以及 基于所述輸入-輸出示例提供所創(chuàng)建的程序;以及 被配置為從用戶接收輸入的用戶交互模塊,所述輸入提供對由所創(chuàng)建的程序提供的輸出結(jié)果的經(jīng)評估的合乎需要性的反饋。
全文摘要
描述了基于輸入-輸出示例生成數(shù)據(jù)操縱程序的程序創(chuàng)建系統(tǒng)。所創(chuàng)建的程序可以包括子程序的集合以及相應(yīng)選擇條件的集合。當接收到新的輸入項時,程序執(zhí)行模塊使用選擇條件來選擇子程序中的一個。然后,程序執(zhí)行模塊應(yīng)用所選擇的子程序以便生成新的輸出項。程序創(chuàng)建系統(tǒng)使用由三個部分組成的方法來生成程序,涉及為相應(yīng)的輸入-輸出示例生成各組子程序;把各組程序編組成分區(qū)并為各分區(qū)選擇代表性的子程序;以及確定選擇條件。用戶交互模塊提供允許用戶與程序創(chuàng)建系統(tǒng)交互并由此改善所創(chuàng)建的程序的性能的各種機制。
文檔編號G06F9/44GK102918500SQ201180027421
公開日2013年2月6日 申請日期2011年5月20日 優(yōu)先權(quán)日2010年6月4日
發(fā)明者S·古瓦尼 申請人:微軟公司