IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ グーグル インコーポレイテッドの特許一覧

特許7590532スプレッドシートプログラミング言語においてプログラムを合成すること
<>
  • 特許-スプレッドシートプログラミング言語においてプログラムを合成すること 図1
  • 特許-スプレッドシートプログラミング言語においてプログラムを合成すること 図2
  • 特許-スプレッドシートプログラミング言語においてプログラムを合成すること 図3
  • 特許-スプレッドシートプログラミング言語においてプログラムを合成すること 図4
  • 特許-スプレッドシートプログラミング言語においてプログラムを合成すること 図5
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-18
(45)【発行日】2024-11-26
(54)【発明の名称】スプレッドシートプログラミング言語においてプログラムを合成すること
(51)【国際特許分類】
   G06F 8/30 20180101AFI20241119BHJP
   G06F 40/18 20200101ALI20241119BHJP
   G06Q 10/10 20230101ALI20241119BHJP
【FI】
G06F8/30
G06F40/18
G06Q10/10
【請求項の数】 20
【外国語出願】
(21)【出願番号】P 2023194349
(22)【出願日】2023-11-15
(62)【分割の表示】P 2022564445の分割
【原出願日】2021-06-09
(65)【公開番号】P2024020411
(43)【公開日】2024-02-14
【審査請求日】2023-12-13
(31)【優先権主張番号】63/036,898
(32)【優先日】2020-06-09
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】17/122,290
(32)【優先日】2020-12-15
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【弁理士】
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】リシャブ・シン
(72)【発明者】
【氏名】アーロン・ゼマチ
(72)【発明者】
【氏名】チラーグ・ガライヤ
(72)【発明者】
【氏名】ディマ・ブレジネフ
(72)【発明者】
【氏名】デイヴィッド・リック
(72)【発明者】
【氏名】フランシスコ・ベラスケス
(72)【発明者】
【氏名】マックス・リン
(72)【発明者】
【氏名】ネハ・バルガヴァ
(72)【発明者】
【氏名】ペイルン・ジャン
(72)【発明者】
【氏名】ラフル・スリニヴァサン
(72)【発明者】
【氏名】サイモン・トン
(72)【発明者】
【氏名】ヴィクトリア・テイラー
(72)【発明者】
【氏名】ヴィシュヌ・シヴァジ
(72)【発明者】
【氏名】ジファン・シャオ
【審査官】多賀 実
(56)【参考文献】
【文献】米国特許出願公開第2011/302553(US,A1)
【文献】特開2000-276535(JP,A)
【文献】特開2006-172445(JP,A)
【文献】Gulwani, Sumit et al.,"Spreadsheet Data Manipulation Using Examples",COMMUNICATIONS OF THE ACM,米国,Association for Computing Machinery,2012年08月01日,Vol.55, No.8,pp.97-105,ISSN:0001-0782, DOI:10.1145/2240236.2240260
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00-8/77
G06F 40/177-40/18
G06Q 10/10-10/30
(57)【特許請求の範囲】
【請求項1】
1つまたは複数のプロセッサによって実施される方法であって、
第1のユーザ入力を含む第1の例を受信するステップと、
前記第1の例と一致する候補プログラムを自動的に合成するステップであって、前記候補プログラムが、スプレッドシートアプリケーションによって実装されるスプレッドシートプログラミング言語における少なくとも1つの関数を含み、前記候補プログラムがスプレッドシート内のセルに関連付けて記憶され、前記スプレッドシートアプリケーションによって実行されると、前記候補プログラムが、前記第1の例と一致する出力を生成する、ステップと、
前記候補プログラムを、前記スプレッドシート内の前記セルに関連付けて記憶するステップと
を含む、方法。
【請求項2】
第2のユーザ入力を含む第2の例を受信するステップをさらに含み、
前記候補プログラムが実行されると、前記候補プログラムが、前記第2の例と一致する出力を生成する、請求項1に記載の方法。
【請求項3】
前記セルに関連する前記スプレッドシート内の少なくとも1つの追加のセルを決定するステップと、
前記候補プログラムを、前記セルに関連する前記スプレッドシート内の前記少なくとも1つの追加のセルの各々に関連付けて記憶するステップと
をさらに含む、請求項1に記載の方法。
【請求項4】
前記スプレッドシート内の少なくとも1つのデータソースセルからプログラム入力データを取得するステップをさらに含み、
前記候補プログラムが、実行されると、前記スプレッドシート内の前記少なくとも1つのデータソースセルから取得された前記プログラム入力データを入力として使用する、請求項1に記載の方法。
【請求項5】
少なくとも1つの外部データソースからプログラム入力データを取得するステップをさらに含み、
前記候補プログラムが、実行されると、前記少なくとも1つの外部データソースから取得された前記プログラム入力データを入力として使用する、請求項1に記載の方法。
【請求項6】
前記少なくとも1つの外部データソースが、企業知識ベースを含む、請求項5に記載の方法。
【請求項7】
前記少なくとも1つの外部データソースが、前記スプレッドシートに関連付けられた、複数の外部データソースへの参照を含む外部データソースマッピング内に含まれる、請求項5に記載の方法。
【請求項8】
前記候補プログラムを自動的に合成する前記ステップにおいて、
前記第1の例のデータ型が決定され、
前記第1の例の前記データ型と一致しない出力データ型を有するプログラムの実行が回避される、請求項1に記載の方法。
【請求項9】
前記第1の例の前記データ型が、数値データ型または日付データ型であると決定され、
前記数値データ型または前記日付データ型と一致しない出力データ型を有するプログラムの実行が回避される、請求項8に記載の方法。
【請求項10】
前記候補プログラムを自動的に合成する前記ステップにおいて、
プログラム入力データが、前記スプレッドシート内のデータソースセルから、または外部データソースから取得され、
前記プログラム入力データのデータ型が決定され、
前記プログラム入力データの前記データ型と一致しない入力データ型を有するプログラムの実行が回避される、請求項1に記載の方法。
【請求項11】
前記候補プログラムを自動的に合成する前記ステップにおいて、
許容可能な出力データ値の範囲が決定され、
前記許容可能な出力データ値の範囲外にある出力データ値を有するプログラムの実行が回避される、請求項1に記載の方法。
【請求項12】
スプレッドシートのコーパスを取得するステップと、
各々が前記スプレッドシートプログラミング言語における複数の関数を含む、複数のプログラムイディオムを取得するために、前記スプレッドシートのコーパスを分析するステップと、
をさらに含み、
前記候補プログラムが、前記複数のプログラムイディオムのうちの少なくとも1つを含み、前記候補プログラムが実行されると、前記候補プログラムが、前記第1の例と一致する出力を生成する、請求項1に記載の方法。
【請求項13】
各々が前記スプレッドシートプログラミング言語における複数の関数を含む、複数のプログラムイディオムを取得するために、少なくとも1つのオンラインリソースを分析するステップ、
をさらに含み、
前記候補プログラムが、前記複数のプログラムイディオムのうちの少なくとも1つを含み、前記候補プログラムが実行されると、前記候補プログラムが、前記第1の例と一致する出力を生成する、請求項1に記載の方法。
【請求項14】
コンピュータプログラムであって、
第1のユーザ入力を含む第1の例を受信することと、
前記第1の例と一致する候補プログラムを自動的に合成することであって、前記候補プログラムが、スプレッドシートアプリケーションによって実装されるスプレッドシートプログラミング言語における少なくとも1つの関数を含み、前記候補プログラムが、スプレッドシート内のセルに関連付けて記憶され、前記スプレッドシートアプリケーションによって実行されると、前記候補プログラムが、前記第1の例と一致する出力を生成する、ことと、
前記候補プログラムを、前記スプレッドシート内の前記セルに関連付けて記憶することと
を行うように実行可能である、コンピュータプログラム。
【請求項15】
前記コンピュータプログラムが、第2のユーザ入力を含む第2の例を受信するようにさらに実行可能であり、
前記候補プログラムが実行されると、前記候補プログラムが、前記第2の例と一致する出力を生成する、請求項14に記載のコンピュータプログラム。
【請求項16】
前記コンピュータプログラムが、
前記セルに関連する前記スプレッドシート内の少なくとも1つの追加のセルを決定し、
前記候補プログラムを、前記セルに関連する前記スプレッドシート内の前記少なくとも1つの追加のセルの各々に関連付けて記憶する
ようにさらに実行可能である、請求項14に記載のコンピュータプログラム。
【請求項17】
前記コンピュータプログラムが、前記スプレッドシート内の少なくとも1つのデータソースセルからプログラム入力データを取得するようにさらに実行可能であり、
前記候補プログラムが、実行されると、前記スプレッドシート内の前記少なくとも1つのデータソースセルから取得された前記プログラム入力データを入力として使用する、請求項14に記載のコンピュータプログラム。
【請求項18】
プロセッサと、コンピュータ可読メモリと、1つまたは複数のコンピュータ可読記憶媒体と、前記1つまたは複数のコンピュータ可読記憶媒体上に集合的に記憶されたプログラム命令とを備えるシステムであって、前記プログラム命令が、
第1のユーザ入力を含む第1の例を受信することと、
前記第1の例と一致する候補プログラムを自動的に合成することであって、前記候補プログラムが、スプレッドシートアプリケーションによって実装されるスプレッドシートプログラミング言語における少なくとも1つの関数を含み、前記候補プログラムが、スプレッドシート内のセルに関連付けて記憶され、前記スプレッドシートアプリケーションによって実行されると、前記候補プログラムが、前記第1の例と一致する出力を生成する、ことと、
前記候補プログラムを、前記スプレッドシート内の前記セルに関連付けて記憶することと
を実行するように実行可能である、システム。
【請求項19】
前記プログラム命令が、第2のユーザ入力を含む第2の例を受信するようにさらに実行可能であり、
前記候補プログラムが実行されると、前記候補プログラムが、前記第2の例と一致する出力を生成する、請求項18に記載のシステム。
【請求項20】
前記プログラム命令が、
前記セルに関連する前記スプレッドシート内の少なくとも1つの追加のセルを決定し、
前記候補プログラムを、前記セルに関連する前記スプレッドシート内の前記少なくとも1つの追加のセルの各々に関連付けて記憶する
ようにさらに実行可能である、請求項18に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、スプレッドシートプログラミング言語においてプログラムを合成することに関する。
【背景技術】
【0002】
スプレッドシートアプリケーションは、様々な出力を生成するために、スプレッドシート内のセルもしくはセルの範囲内のデータに対して、および/または他の入力に対して演算する様々な関数を含むスプレッドシートプログラミング言語を実装し得る。スプレッドシートプログラミング言語における関数の非限定的な例は、sum関数、count関数、average関数、length関数、concatenate関数、maximum関数、minimum関数、およびlookup関数を含む。
【0003】
ユーザは、プログラムによって取得され得るスプレッドシートにデータを手動で入力し得る。例えば、ユーザは、第1のテーブル内の列に姓を手動で入力し得るが、これは、代わりに、姓名を記憶する第2のテーブル内の列から姓を抽出するためにスプレッドシートプログラミング言語における関数を使用することによって取得され得る。しかしながら、この手動の手法は、過剰なデータ入力、クライアントデバイスの使用、およびスプレッドシート内の複数の場所における同じデータの複製を結果として生じ得るので、ユーザの時間およびコンピュータの記憶リソースの非効率的な使用であり得る。それに加えて、基礎となるデータが1つの場所において変化した(例えば、ユーザの姓が変化した)場合、変化は、データが使用されているスプレッドシート内のすべての場所に手動で伝達されなければならない。
【0004】
プログラマーではないユーザ、または経験を積んだスプレッドシートアプリケーションのユーザではないユーザは、スプレッドシート内の特定のセルに入力するデータをプログラムによって取得するために使用可能なスプレッドシートプログラミング言語における関数を使用することを知らないか、または苦手である場合がある。それに加えて、ユーザは、スプレッドシート内の特定のセルに入力するデータを取得するプログラムを形成するために、スプレッドシートプログラミング言語における複数の関数を組み合わせる方法を理解していない場合がある。他のユーザは、データを取得するためにスプレッドシートプログラミング言語における複数の関数を使用する自分自身のプログラムを書くことができる場合があるが、ユーザが書いたプログラムは、同じデータを取得するためのより効率的な解決策と比較して、過剰な処理およびメモリリソースを必要とする非効率な解決策である場合がある。さらに、プログラムを手動で作成することは、しばしば、(例えば、適切な関数を識別するため、試行錯誤のため、など)長時間を要する可能性があり、結果として、プログラムを手動で作成する際に使用されるクライアントデバイスの電力リソースおよび/または他の計算リソースの過剰な利用につながる可能性がある。これは、クライアントデバイスが比較的小さいディスプレイおよび/またはソフトウェアキーボードを有する場合に悪化する可能性があり、これらの両方は、プログラムを作成するために必要な時間を長くする可能性がある。
【発明の概要】
【課題を解決するための手段】
【0005】
本明細書で開示される実装形態は、スプレッドシートプログラミング言語における少なくとも1つの関数を含み、実行されると、1つまたは複数のユーザ提供の出力例と一致する出力を生成するプログラムを自動的に合成することに関する。例えば、スプレッドシート内の第1のセルにおけるユーザ入力が、第1の例として使用され得、候補プログラムの第1のセット内の各プログラムが、実行されると、第1の例と一致する出力を生成するように、候補プログラムの第1のセットを含む基礎となるスプレッドシートプログラミング言語における複数の候補プログラムが、自動的に合成され得る。次いで、候補プログラムは、1つまたは複数の基準に基づいてランク付けされ、最も高くランク付けされたプログラムが選択され、例えば、ユーザ入力の代わりになるものとして、第1のセルに関連付けて記憶される。
【0006】
いくつかの実装形態において、スプレッドシート内の第2のセルにおけるユーザ入力が、第2の例として使用され得、自動的に合成された複数の候補プログラムは、実行されると、第2の例と一致する出力を生成する候補プログラムの第2のセットを含み得る。所定の基準に基づいて候補プログラムをランク付けする前に、候補プログラムの第1のセットと候補プログラムの第2のセットの両方に含まれない候補プログラムが、候補プログラムから除去され得る。このようにして、ユーザ提供の両方の例と一致する出力を生成しない自動生成されたプログラムは、候補プログラムから除外される。他の実装形態において、スプレッドシート内の追加のセルにおけるユーザ入力が、追加の例として使用され得、追加の例と一致する出力を生成しない自動的に合成されたプログラムも、候補プログラムから除外され得る。
【0007】
他の実装形態において、第1のセルに関連するスプレッドシート内の追加のセルが識別され得、最も高くランク付けされたプログラムは、追加のセルの各々に関連付けて記憶され得る。例えば、スプレッドシート内の特定のテーブル内の列内の追加のセルが、特定のテーブル内の列内の第1のセルに関連するものとして識別され得、最も高くランク付けされたプログラムは、列内の追加のセルの各々に関連付けて記憶され得る。
【0008】
いくつかの実装形態において、自動的に合成されたプログラムは、入力として、スプレッドシート内の1つまたは複数のテーブル内に存在する1つまたは複数の他のセル(例えば、データソースセル)からのデータを使用することができる。他の実装形態において、自動的に合成されたプログラムは、入力として、企業知識ベースなどの外部データソースからのデータを使用することができる。外部データソースは、外部データソースへの参照(例えば、ユニフォームリソースロケータまたは他のリンク)を含む、スプレッドシートに関連付けられた外部データソースマッピング内に含まれ得る。
【0009】
いくつかの実装形態において、第1の例のデータ型が決定され得、第1の例のデータ型と一致しない出力データ型を有するプログラムの実行が回避される。したがって、ユーザ提供の例と一致する出力を生成することができないプログラムの呼び出しを避けることによって、システムリソースが節約され得る。
【0010】
いくつかの実装形態において、第1の例のデータ型は、数値データ型であると決定され得、数値データ型と一致しない出力データ型を有するプログラムの実行が回避され得る。他の実装形態において、第1の例のデータ型は、日付データ型であると決定され得、日付データ型と一致しない出力データ型を有するプログラムの実行が回避され得る。
【0011】
いくつかの実装形態において、プログラム入力データが、スプレッドシート内のデータソースセルから、または外部データソースから取得され得、プログラム入力データのデータ型が決定され得る。プログラム入力データのデータ型と一致しない入力データ型を有するプログラムの実行が回避され得る。したがって、プログラム入力データ内に含まれるデータの型を入力として利用することができないプログラムの呼び出しを避けることによって、システムリソースが節約され得る。
【0012】
いくつかの実装形態において、許容可能な出力値の範囲が決定され得、許容可能な出力データ値の範囲外にある出力データ値を有するプログラムの実行が回避され得る。したがって、許容可能な値の範囲内にある出力を生成することができないプログラムの呼び出しを避けることによって、システムリソースが節約され得る。
【0013】
いくつかの実装形態において、より頻繁に使用される関数を有する候補プログラムが、あまり頻繁に使用されない関数を有する候補プログラムよりも高くランク付けされ得る。例えば、過去のスプレッドシートデータからの関数の使用頻度(例えば、手動で書かれた場合の使用頻度)に基づいて、候補プログラム内の各関数にスコアが割り当てられ得、候補プログラム内の関数の各々に割り当てられたスコアに基づいて、候補プログラムの総合スコアが決定され得る。次いで、候補プログラムは、総合スコアに基づいてランク付けされ得る。したがって、より頻繁に使用される関数を含む候補プログラムが、より高くランク付けされ得、結果として、選択され、利用され、ユーザに提示される可能性が高くなる。候補プログラムのより頻繁に使用される関数は、ユーザによって理解するのがより簡単である可能性があり、これは、結果として、それらのプログラムの計算的に効率的なレビューおよび/または編集をもたらす可能性がある。
【0014】
いくつかの実装形態において、より短い候補プログラム、例えば、より少ない総数の関数を使用する候補プログラムが、より多い総数の関数を使用する候補プログラムよりも優位にランク付けされ得る。他の実装形態において、より単純な候補プログラム、例えば、より少ないレベルの入れ子関数を使用する候補プログラムが、より多くのレベルの入れ子関数を使用する候補プログラムよりも優位にランク付けされ得る。したがって、過度に複雑なプログラムを使用することを避けることによって、システムリソースが節約され得る。
【0015】
いくつかの実装形態において、スプレッドシートのコーパス(例えば、特定の会社または組織のユーザによって作成されたスプレッドシートのコレクション)が取得され得、スプレッドシートのコーパスは、各々がスプレッドシートプログラミング言語における複数の関数を含む複数のプログラムイディオムを取得するために分析され得る。追加の候補プログラムが自動的に合成され、第1の例と一致する候補プログラムの第1のセット内に含まれ得、ここで、追加の候補プログラムの各々は、プログラムイディオムのうちの1つまたは複数を含み、実行されると、第1の例と一致する出力を生成する。他の実装形態において、追加の候補プログラムは、プログラムイディオムに加えて、スプレッドシートプログラミング言語における関数を含むことができる。それに加えて、他の実装形態において、スプレッドシートのコーパスを分解することに加えて、またはその代わりに、複数のプログラムイディオムを取得するために、オンラインリソースが分析され得る。
【0016】
いくつかの追加または代替の実装形態において、スプレッドシート内の第1のセルにおいて提供されたユーザ入力を含む第1の例と、スプレッドシート内の第2のセルにおいて提供されたユーザ入力を含む第2の例とが受信され得る。第1の例と一致するプログラムの第1のセットと、第2の例と一致するプログラムの第2のセットとが、自動的に合成され得る。プログラムの第1のセット内の各プログラムは、実行されると、第1の例と一致する出力を生成し、プログラムの第2のセット内の各プログラムは、実行されると、第2の例と一致する出力を生成する。次いで、プログラムの第1のセットとプログラムの第2のセットとの共通部分を決定することによって候補プログラムが生成され得る。次いで、候補プログラムは、ランク付けされ得、複数の候補プログラムのうちの最も高くランク付けされたプログラムが決定され得、スプレッドシート内の第1のセルにおいて提供されたユーザ入力と、スプレッドシート内の第2のセルにおいて提供されたユーザ入力とは、最も高くランク付けされたプログラムに置き換えられ得る。
【0017】
前述の概念および本明細書でより詳細に説明される追加の概念のあらゆる組合せは、本明細書で開示される主題の一部であると考えられることが理解されるべきである。例えば、本開示の終わりに現れる特許請求される主題のあらゆる組合せは、本明細書で開示される主題の一部であると考えられる。
【図面の簡単な説明】
【0018】
図1】様々な実装形態による、本開示の選択された態様が実装され得る例示的な環境を概略的に示す図である。
図2】本開示の選択された態様を実施するための例示的な方法を示すフローチャートである。
図3】本開示の選択された態様を実施するための例示的な方法を示す別のフローチャートである。
図4】様々な実装形態による、本明細書で説明する技法の例示的な適用を示す図である。
図5】コンピューティングデバイスの例示的なアーキテクチャを示す図である。
【発明を実施するための形態】
【0019】
図1は、様々な実装形態による、本開示の選択された態様が実装され得る例示的な環境100を概略的に示す。図1に示す、または図の他の場所に示す任意のコンピューティングデバイスは、メモリ内に記憶されたコンピュータ可読命令を実行する1つもしくは複数のマイクロプロセッサ(例えば、中央処理装置すなわち「CPU」、グラフィカル処理ユニットすなわち「GPU」)などのロジック、または特定用途向け集積回路(「ASIC」)、フィールドプログラマブルゲートアレイ(「FPGA」)などの他のタイプのロジックを含み得る。スプレッドシートシステム110などの図1に示すシステムのうちのいくつかは、時には「クラウドインフラストラクチャ」と呼ばれるものを形成する1つまたは複数のサーバコンピューティングデバイスを使用して実装され得るが、これは、必須ではない。
【0020】
実装形態において、環境100は、ウェブブラウザ(例えば、ウェブベースのスプレッドシートアプリケーション)などのシンクライアントインターフェース、またはプログラムインターフェースのいずれかを介して、環境100内に含まれ得るクライアント130-1、...、130-nを含む様々なクライアントからアクセス可能なスプレッドシートアプリケーションを実装するスプレッドシートシステム110を含み得る。実装形態において、スプレッドシートシステム110によって実装されるスプレッドシートアプリケーションは、ソフトウェアアズアサービス(SaaS)スプレッドシートアプリケーションであり得る。スプレッドシートシステム110およびクライアント130-1、...、130-nは、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、またはインターネットの任意の組合せを含む任意の適切なネットワークであり得るコンピュータネットワーク160を介して通信し得る。スプレッドシートシステム110は、とりわけ、クライアント130-1、...、130-nのうちの1つまたは複数を使用して作成、修正、および/または閲覧されるスプレッドシートにおいて使用するためのスプレッドシートプログラミング言語における1つまたは複数の関数を含むプログラムを自動的に合成するために、本開示の選択された態様を実行するように構成されたプログラム合成器120を含み得る。
【0021】
クライアント130-1、...、130-nの各々は、例えば、ウェブブラウザを介してスプレッドシートシステム110によって提供されるSaaSスプレッドシートアプリケーションなどのスプレッドシートアプリケーションユーザインターフェースを介してスプレッドシートアプリケーションにアクセスするためにユーザによって使用される、例えば、ユーザコンピューティングデバイスであり得る。一例において、クライアント130-1、...、130-nは、個人、または企業(例えば、金融機関、銀行など)、非営利団体、クラブ、大学、政府機関、もしくはスプレッドシートアプリケーションを使用する任意の他の組織などのエンティティもしくは組織に関連付けられたユーザコンピューティングデバイスであり得る。例えば、企業は、財務記録、ビジネス記録、顧客リストなどを管理するために、1つまたは複数のスプレッドシートを作成、修正、および/または閲覧するために、スプレッドシートアプリケーションを操作し得る。
【0022】
様々な実装形態において、環境100は、コンピュータネットワーク160または別のネットワークを介してクライアント130-1、...、130-nにアクセス可能なスプレッドシートコーパス140-1、...、140-nを含み得る。スプレッドシートコーパス140-1、...、140-nの各々は、例えば、スプレッドシートシステム110を使用して、クライアント130-1、...、130-nのうちの1つまたは複数によって作成された複数のスプレッドシートを含み得る。一例において、スプレッドシートコーパス140-1、...、140-nは、特定のエンティティまたは組織に関連付けられたクライアント130-1、...、130-nのうちの1つまたは複数のユーザによって作成、編集、または閲覧されたスプレッドシートのセットを含み得る。
【0023】
プログラム合成器120は、例として、スプレッドシートにおいて使用するためのスプレッドシートプログラミング言語における1つまたは複数の関数を含むプログラムを自動的に合成する際にクライアント130-1、...、130-nを支援するために、スプレッドシート内の1つまたは複数のセルに入力されたデータを利用するように構成され得る。例えば、プログラム合成器120は、いかなる人間の介入もなしに、スプレッドシートプログラミング言語における1つまたは複数の関数を含むプログラムの自動合成を可能にし、オプションで、スプレッドシートアプリケーションユーザインターフェースを介してクライアント130-1、...、130-nのユーザに自動的に合成されたプログラムの出力を提示するとともに、オプションで、スプレッドシートアプリケーションユーザインターフェースを介して、レビューおよび/または編集のために、クライアント130-1、...、130-nのユーザに自動的に合成されたプログラム自体を提示するように構成され得る。
【0024】
様々な実装形態において、環境100は、コンピュータネットワーク160または別のネットワークを介してクライアント130-1、...、130-nおよび/またはスプレッドシートシステム110のプログラム合成器120にアクセス可能であり得るデータを記憶する外部データソース150-1、...、150-mを含み得る。実装形態において、外部データソース150-1、...、150-m内のデータは、プログラム合成器120によって自動的に合成されるプログラムへの入力として使用され得る。
【0025】
図2は、本明細書で開示される実装形態による、スプレッドシートプログラミング言語における1つまたは複数の関数を含むプログラムを自動的に合成する例示的な方法200を示すフローチャートである。便宜上、フローチャートの動作について、動作を実行するシステムを参照して説明する。このシステムは、スプレッドシートシステム110の1つまたは複数の構成要素などの、様々なコンピュータシステムの様々な構成要素を含み得る。さらに、方法200の動作が特定の順序において示されているが、これは、限定することを意味しない。1つまたは複数の動作は、並べ替えられ、省略され、または追加され得る。
【0026】
ブロック210において、システムは、スプレッドシート内のセルにおいて提供された入力を含む例を受信し得る。実装形態において、ブロック210において、スプレッドシートシステム110のプログラム合成器120は、スプレッドシート内の第1のセルにおいて提供された入力を含む第1の例を受信し得る。一例において、スプレッドシートシステム110のプログラム合成器120は、クライアント130-1、...、130-nのうちの1つにおいて表示されたスプレッドシートアプリケーションユーザインターフェースを介してユーザがスプレッドシート内の第1のセル(例えば、B2)における入力として姓を提供することに応答して、第1の例として姓(例えば、「LastNameOne」)を受信し得る。
【0027】
ブロック210を依然として参照すると、スプレッドシートシステム110のプログラム合成器120は、スプレッドシート内の第2のセルにおいて提供された入力を含む第2の例などの、1つまたは複数の追加の例をオプションで受信し得る。実装形態において、プログラム合成器120は、任意の数の例を受信し得る。一例において、スプレッドシートシステム110のプログラム合成器120は、クライアント130-1、...、130-nのうちの1つにおいて表示されたスプレッドシートアプリケーションユーザインターフェースを介してユーザがスプレッドシート内の第2のセル(例えば、B3)における入力として姓を提供することに応答して、第2の例として別の姓(例えば、「LNTwo」)を受信し得る。
【0028】
図2を依然として参照すると、ブロック220において、システムは、例と一致する候補プログラムのセットを含む複数の候補プログラムを自動的に合成し得る。実装形態において、ブロック220において、スプレッドシートシステム110のプログラム合成器120は、ブロック210において受信した第1の例と一致する候補プログラムの第1のセットを自動的に合成するために、動的プログラミングベースの検索アルゴリズムを使用し得る。実装形態において、候補プログラムの第1のセット内の各候補プログラムは、スプレッドシートプログラミング言語における少なくとも1つの関数を含み得、候補プログラムが実行されると、候補プログラムは、第1の例と一致する出力を生成する。
【0029】
ブロック220を依然として参照すると、実装形態において、各候補プログラムは、実行されると、プログラム入力データとして、スプレッドシート内の1つもしくは複数のデータソースセル内に記憶されたデータ、および/または外部データソース150-1、...、150-mのうちの1つもしくは複数からのデータを使用し得る。例えば、候補プログラムを自動的に合成している間、プログラム合成器120は、外部データソース150-1、...、150-mのうちの1つもしくは複数からプログラム入力データを取得し、次いで、プログラム入力データを候補プログラムのうちの1つまたは複数への入力として(例えば、候補プログラムにおいて使用されるスプレッドシートプログラミング言語における1つまたは複数の関数への入力として)使用し得る。実装形態において、外部データソースは、企業知識ベース、データベース、他のスプレッドシート、および/または任意の他のデータソースを含み得る。実装形態において、外部データソース150-1、...、150-mは、スプレッドシートに関連付けられた、外部データソース外部データソース150-1、...、150-mへの参照(例えば、パス、ユニフォームリソースロケータ、リンクなど)を含む外部データソースマッピング内に含まれ得る。実装形態において、プログラム合成器120は、非常に大きいテーブルおよび知識ベースを処理するために、サンプリングベースの検索技法を使用し得る。
【0030】
実装形態において、所与のユーザについて、プログラム合成器120によって使用される外部データソース150-1、...、150-mは、ユーザのアカウントにリンクされた企業知識ベースを含むことができる(またはそれに制限され得る)。一例において、ユーザのアカウントとのリンクに基づいて、第1のユーザについては、プログラム合成器120は、組織のすべての企業知識ベースを使用することができるが、第2のユーザについては、プログラム合成器120は、組織の企業知識ベースのサブセットのみを使用することができる。実装形態において、ユーザのアカウントとのリンクは、外部データソースマッピング内に含まれ得、および/またはデータベースに対するユーザの許可/権利に基づき得る。
【0031】
実装形態において、プログラム合成器120は、最初に、プログラム入力データを識別または位置特定するために、外部データソース150-1、...、150-m内に含まれる個人データベースおよび/または企業データベースを検索し、プログラム入力データが個人データベースおよび/または企業データベース内で識別(位置特定)されなかった場合、外部データソース150-1、...、150-m内に含まれる他の一般的なデータベースのみを検索することができる。
【0032】
前の例を続けると、スプレッドシートシステム110のプログラム合成器120は、ブロック210において第1の例(「LastNameOne」)として受信した姓と一致する出力を生成する候補プログラムの第1のセットを自動的に合成し得る。候補プログラムのうちの1つまたは複数は、プログラム入力データとして、スプレッドシート内の別のセル内に記憶されたデータ、例えば、第1の例に対応する第1のセルと同じ行内の、姓名を記憶する列(例えば、列A)内のセル(例えば、セルA2)内に記憶されたデータを使用し得る。この例において、プログラム入力データ「FirstNameOne LastNameOne」は、セルA2内に記憶され得る。
【0033】
候補プログラムの第1のセット内に含まれる第1の候補プログラムは、文字列の長さを返すスプレッドシートプログラミング言語における「LEN」関数と、文字列がテキスト内で最初に見つかった位置を返すスプレッドシートプログラミング言語における「FIND」関数と、指定された文字列の最後からの部分文字列を返すスプレッドシートプログラミング言語における「RIGHT」関数とを使用するプログラムであり得る。例えば、プログラムRIGHT(A2, LEN(A2) - FIND(" ", A2))は、ブロック210において合成された候補プログラムの第1のセット内に含まれ得る。プログラム入力データとして「FirstNameOne LastNameOne」を使用して第1の候補プログラムが実行されると、「LastNameOne」が出力として返され、したがって、第1の候補プログラムは、第1の例と一致する出力を生成する。
【0034】
候補プログラムの第1のセット内に含まれる第2の候補プログラムは、スプレッドシートプログラミング言語における「RIGHT」関数を使用するプログラムであり得る。例えば、プログラムRIGHT(A2, 11)は、ブロック210において合成された候補プログラムの第1のセット内に含まれ得る。プログラム入力データとして「FirstNameOne LastNameOne」を使用して第2の候補プログラムが実行されると、「LastNameOne」が出力として返され、したがって、第2の候補プログラムは、第1の例と一致する出力を生成する。
【0035】
ブロック220を依然として参照すると、実装形態において、1つまたは複数の追加の例がブロック210においてスプレッドシートシステム110のプログラム合成器120によって受信されることに応答して、プログラム合成器120は、追加の例の各々と一致する候補プログラムの追加のセットを自動的に合成するために、動的プログラミングベースの検索アルゴリズムを使用し得る。実装形態において、プログラム合成器120は、ブロック210において受信した例の数に一致する候補プログラムのいくつかのセットを合成し得る。例えば、ブロック210において第2の例がプログラム合成器120によって受信された場合、プログラム合成器120は、ブロック210において受信した第2の例と一致する候補プログラムの第2のセットを自動的に合成するために、動的プログラミングベースの検索アルゴリズムを使用し得る。それに加えて、ブロック210において第3の例がプログラム合成器120によって受信された場合、プログラム合成器120は、ブロック210において受信した第3の例と一致する候補プログラムの第3のセットを自動的に合成するために、動的プログラミングベースの検索アルゴリズムを使用し得る、などである。
【0036】
前の例を続けると、スプレッドシートシステム110のプログラム合成器120は、ブロック210において第2の例(「LNTwo」)として受信した姓と一致する出力を生成する候補プログラムの第2のセットを自動的に合成し得る。候補プログラムのうちの1つまたは複数は、プログラム入力データとして、スプレッドシート内の別のセル内に記憶されたデータ、例えば、第2の例に対応する第2のセルと同じ行内の、姓名を記憶する列(例えば、列A)内のセル(例えば、セルA3)内に記憶されたデータを使用し得る。この例において、プログラム入力データ「FNTwo LNTwo」は、セルA3内に記憶され得る。
【0037】
候補プログラムの第2のセット内に含まれる第1の候補プログラムは、文字列の長さを返すスプレッドシートプログラミング言語における「LEN」関数と、文字列がテキスト内で最初に見つかった位置を返すスプレッドシートプログラミング言語における「FIND」関数と、指定された文字列の最後からの部分文字列を返すスプレッドシートプログラミング言語における「RIGHT」関数とを使用するプログラムであり得る。例えば、プログラムRIGHT(A3, LEN(A3) - FIND(" ", A3))は、ブロック210において合成された候補プログラムの第2のセット内に含まれ得る。プログラム入力データとして「FNTwo LNTwo」を使用して第1の候補プログラムが実行されると、「LNTwo」が出力として返され、したがって、候補プログラムの第2のセット内に含まれる第1の候補プログラムは、第2の例と一致する出力を生成する。
【0038】
候補プログラムの第2のセット内に含まれる第2の候補プログラムは、スプレッドシートプログラミング言語における「RIGHT」関数を使用するプログラムであり得る。例えば、プログラムRIGHT(A3, 5)は、ブロック210において合成された候補プログラムの第2のセット内に含まれ得る。プログラム入力データとして「FNTwo LNTwo」を使用して第2の候補プログラムが実行されると、「LNTwo」が出力として返され、したがって、候補プログラムの第2のセット内に含まれる第2の候補プログラムは、第2の例と一致する出力を生成する。
【0039】
ブロック220をさらに参照すると、実装形態において、スプレッドシートシステム110のプログラム合成器120は、ブロック210において受信した例の数が増加するにつれて、増加的により多くの関数を有する候補プログラムを合成し得る。一例において、ブロック210において受信した例が1つだけの場合、プログラム合成器120は、候補プログラムを合成する際にLEFT関数と、RIGHT関数と、MID関数のみを使用し得るが、ブロック210において受信した例が2つである場合、プログラム合成器120は、候補プログラムを合成する際にIF関数とケース変換関数とを使用し得る。
【0040】
ブロック220を依然として参照すると、実装形態において、スプレッドシートシステム110のプログラム合成器120は、例と一致する候補プログラムのセットを含む複数の候補プログラムを自動的に合成する際に、例のデータ型を決定し、例のデータ型と一致しない出力データ型を有するプログラムの実行を回避し得る。一例において、プログラム合成器120は、第1の例のデータ型が数値データ型であると決定し得、プログラム合成器120は、数値データ型と一致しない出力データ型を有するプログラムの実行を回避し得る。別の例において、プログラム合成器120は、第1の例のデータ型が日付データ型であると決定し得、プログラム合成器120は、日付データ型と一致しない出力データ型を有するプログラムの実行を回避し得る。
【0041】
ブロック220を依然として参照すると、実装形態において、スプレッドシートシステム110のプログラム合成器120は、例と一致する候補プログラムのセットを含む複数の候補プログラムを自動的に合成する際に、スプレッドシート内のデータソースセルから、または外部データソース150-1、...、150-mのうちの1つからプログラム入力データを取得し、プログラム入力データのデータ型を決定し、プログラム入力データのデータ型と一致しない入力データ型を有するプログラムの実行を回避し得る。
【0042】
ブロック220を依然として参照すると、実装形態において、スプレッドシートシステム110のプログラム合成器120は、例と一致する候補プログラムのセットを含む複数の候補プログラムを自動的に合成する際に、許容可能な出力データ値の範囲(例えば、月の日については1から31)を決定し、許容可能なデータ出力値の範囲外の出力データ値を有するプログラムの実行を回避し得る。
【0043】
ブロック220を依然として参照すると、実装形態において、スプレッドシートシステム110のプログラム合成器120は、各々がスプレッドシートプログラミング言語における複数の関数を含む複数のプログラムイディオム(例えば、事前定義されたプログラム)を取得するために、スプレッドシートコーパス140-1、...、140-nのうちの1つまたは複数を取得し、スプレッドシートコーパス140-1、...、140-nのうちの1つまたは複数を分析し得る。他の実装形態において、スプレッドシートシステム110のプログラム合成器120は、複数のプログラムイディオムを取得するために、1つまたは複数のオンラインリソース(例えば、ウェブサイト、チュートリアル、外部データソース150-1、...、150-mのうちの1つまたは複数など)を分析し得る。実装形態において、例と一致する候補プログラムのセットを含む複数の候補プログラムを自動的に合成する際に、プログラム合成器120は、候補プログラムのセットの各々において少なくとも1つのプログラムイディオムを含み、オプションでスプレッドシートプログラミング言語における1つまたは複数の追加の関数を含む追加の候補プログラムを自動的に合成し得る。一例において、プログラム合成器120は、第1の例と一致する候補プログラムの第1のセット内の追加の候補プログラムを自動的に合成し得、ここで、追加の候補プログラムの各々は、実行されると、第1の例と一致する出力を生成する。
【0044】
ブロック220を依然として参照すると、実装形態において、ブロック210において1つまたは複数の追加の例がスプレッドシートシステム110のプログラム合成器120によって受信されることに応答して、ブロック210において受信した例の各々と一致する候補プログラムのセットを合成した後、プログラム合成器120は、候補プログラムのセットのすべてに含まれない候補プログラムを除去し得る。例えば、プログラム合成器120がブロック210において2つの例を受信した場合、プログラム合成器120は、第1の例と一致する候補プログラムの第1のセットと、第2の例と一致する候補プログラムの第2のセットの両方に含まれない候補プログラムを除去し得る。同様に、プログラム合成器120がブロック210において3つの例を受信した場合、プログラム合成器120は、第1の例と一致する候補プログラムの第1のセット、第2の例と一致する候補プログラムの第2のセット、および第3の例と一致する候補プログラムの第3の第2のセットの各々に含まれない候補プログラムを除去し得る。
【0045】
ブロック220を依然として参照すると、実装形態において、特定の候補プログラムが候補プログラムのセットのすべてに含まれているかどうかを決定する目的のために、プログラム合成器120は、プログラム入力データのために使用されるセルに関してのみ異なる候補プログラムが同じ候補プログラムであると決定し得る。例えば、プログラム合成器120は、候補プログラムの第1のセット内に含まれる候補プログラムRIGHT(A2, LEN(A2) - FIND(" ", A2))が、候補プログラムの第2のセット内に含まれる候補プログラムRIGHT(A3, LEN(A3) - FIND(" ", A3))と同じであると決定し得る。
【0046】
ブロック220を依然として参照すると、他の実装形態において、プログラム合成器120は、特定の候補プログラムが候補プログラムのセットのすべてに含まれているかどうかを決定する前に、候補プログラムにおいて使用されるプログラム入力を一般名称化し得る。例えば、プログラム合成器120は、候補プログラムRIGHT(A2, LEN(A2) - FIND(" ", A2))をRIGHT(A[current row], LEN(A[current row]) - FIND(" ", A[current row]))に一般名称化し得、候補プログラムRIGHT(A3, LEN(A3) - FIND(" ", A3))をRIGHT(A[current row], LEN(A[current row]) - FIND(" ", A[current row]))に一般名称化し得、ここで、[current row]は、スプレッドシート内の現在の行のプレースホルダである。
【0047】
前の例を続けると、スプレッドシートシステム110のプログラム合成器120は、候補プログラムRIGHT(A[current row], LEN(A[current row]) - FIND(" ", A[current row]))が候補プログラムの第1のセットと候補プログラムの第2のセットの両方において存在する唯一の候補プログラムであると決定し、次いで、ブロック220において生成された候補プログラムのセットからすべての他の候補プログラムを除去し得る。他の実装形態において、、プログラム合成器120は、候補プログラムRIGHT(A[current row], 11)およびRIGHT(A[current row], 5)が候補プログラムの第1のセットと候補プログラムの第2のセットの両方において存在しないと決定し、次いで、ブロック220において生成された候補プログラムのセットからそれらの候補プログラムを除去し得る。
【0048】
図2を依然として参照すると、ブロック230において、システムは、複数の候補プログラムをランク付けし得る。実装形態において、ブロック230において、スプレッドシートシステム110のプログラム合成器120は、ブロック220において自動的に合成された複数の候補プログラムをランク付けし得る。実装形態において、プログラム合成器120は、(過去のスプレッドシートデータに基づいて)より頻繁に使用される関数を有する候補プログラムを、あまり頻繁に使用されない関数を有する候補プログラムよりも高くランク付けし得る。
【0049】
ブロック230を依然として参照すると、一例において、すべてのセット内に存在しない候補プログラムがブロック220において生成された候補プログラムのセットから除去された後に残る、ブロック220において生成された候補プログラムの各々について、プログラム合成器120は、候補プログラム内の関数の各々にスコアを割り当て得る。この例において、スプレッドシートコーパス140-1、...、140-nのうちの1つまたは複数においてより頻繁に使用される候補プログラム内の関数に比較的高いスコアが割り当てられ得、スプレッドシートコーパス140-1、...、140-nのうちの1つまたは複数においてあまり頻繁に使用されない候補プログラム内の関数に比較的低いスコアが割り当てられ得る。次いで、プログラム合成器120は、候補プログラムの各々について、候補プログラム内の関数の各々に割り当てられたスコアに基づいて、候補プログラムの総合スコアを決定し得る。例えば、プログラム合成器120は、候補プログラム内の関数の各々に割り当てられたスコアを平均化することによって総合スコアを決定し得る。代替的には、プログラム合成器120は、候補プログラム内の関数の各々に割り当てられたスコアの最低スコアに基づいて総合スコアを決定する。次いで、プログラム合成器120は、総合スコアに基づいて複数の候補プログラムをランク付けし得る。
【0050】
ブロック230を依然として参照すると、他の実装形態において、プログラム合成器120は、より少ない総数の関数を使用する候補プログラムを、より多い総数の関数を使用する候補プログラムよりも優位にランク付けし得る。他の実装形態において、プログラム合成器120は、より少ないレベルの入れ子関数を使用する候補プログラムを、より多くのレベルの入れ子関数を使用する候補プログラムよりも優位にランク付けし得る。他の実装形態において、プログラム合成器120は、特定のユーザまたは組織によって以前に使用された関数を使用する候補プログラムを、特定のユーザまたは組織によって以前に使用されていない関数を使用する候補プログラムよりも優位にランク付けし得る。他の実装形態において、プログラム合成器120は、入力文字列と出力文字列とを分解する文字クラスベースのトークン化メカニズムに基づいて候補プログラムをランク付けし得る。他の実装形態において、プログラム合成器120は、トークン化された出力を生成する候補プログラムを、トークン化された出力を生成しない候補プログラムよりも高くランク付けし得る。
【0051】
ブロック230を依然として参照すると、他の実装形態において、プログラム合成器120は、プログラム入力データのソースに基づいて候補プログラムをランク付けし得る。例えば、プログラム合成器120は、組織内のスプレッドシートまたは知識ベースからプログラム入力データを取得する候補プログラムを、一般的な知識ベースからプログラム入力データを取得する候補プログラムよりも高くランク付けし得る。別の例において、プログラム合成器120は、より頻繁にアクセスされるソースからプログラム入力データを取得する候補プログラムを、あまり頻繁にアクセスされないソースからプログラム入力データを取得する候補プログラムよりも高くランク付けし得る。他の実装形態において、プログラム合成器120は、ブロック220において生成された候補プログラムをランク付けするために、任意の他の基準または基準の組合せを使用し得る。
【0052】
図2を依然として参照すると、ブロック240において、システムは、例に関連付けられたスプレッドシート内のセルに関連付けて、複数の候補プログラムのうちの最も高くランク付けされたプログラムを記憶し得る。実装形態において、ブロック240において、スプレッドシートシステム110のプログラム合成器120は、ブロック230において複数の候補プログラムの中で最も高くランク付けされた候補プログラムを、スプレッドシート内の第1のセル(すなわち、ブロック210において受信した第1の例に関連付けられたセル)に関連付けて記憶し得る。実装形態において、ブロック240において、クライアント130-1、...、130-nにおいて表示されるユーザインターフェース上に、自動的に合成されたプログラムに関する(例えば、ブロック230において決定された最も高くランク付けされたプログラムに関する)プロンプトが表示され得、ブロック240において最も高くランク付けされたプログラムを記憶することは、例えば、プロンプト内のボタンを選択することによって、またはキーボードショートカットを入力することによって、ユーザが自動的に合成されたプログラムの受け入れを示すことに応答して実行され得る。
【0053】
ブロック240を依然として参照すると、実装形態において、プログラム合成器120は、第1のセルにおいて(例えば、ユーザによって)提供された入力(すなわち、第1の例)を、最も高くランク付けされたプログラムに置き換えるようにし得る。実装形態において、プログラム合成器120は、第1のセルにおいて提供された入力を、最も高くランク付けされたプログラムに置き換え得るが、(例えば、クライアント130-1、...、130-nにおいて表示されたユーザインターフェース上の)第1のセル内に表示された値は、最も高くランク付けされたプログラムがセルにおいて以前に(例えば、ユーザによって)提供された入力と一致するので、変更されないままである場合がある。
【0054】
前の例を続けると、プログラム合成器120は、プログラムRIGHT(A[current row], LEN(A[current row]) - FIND(" ", A[current row]))がブロック230において最も高くランク付けされたプログラムであると決定し得、プログラム合成器120は、プログラムRIGHT(A[current row], LEN(A[current row]) - FIND(" ", A[current row]))を、スプレッドシート内の第1のセル(すなわち、ブロック210において受信した第1の例に関連付けられたセルであるB2)に関連付けて記憶し得、第1のセルにおいて提供された入力(「LastNameOne」)を置き換える。第1のセル(すなわち、B2)において提供された入力「LastNameOne」は、最も高くランク付けされたプログラムRIGHT(A[current row], LEN(A[current row]) - FIND(" ", A[current row]))に置き換えられるが、この例では、このプログラムは、「LastNameOne」を出力し得、したがって、第1のセルにおいて表示された値は、変更されないままである場合がある。
【0055】
ブロック240を依然として参照すると、実装形態において、ブロック210においてスプレッドシートシステム110のプログラム合成器120によって1つまたは複数の追加の例が受信されることに応答して、スプレッドシートシステム110のプログラム合成器120は、ブロック230において複数の候補プログラムの中で最も高くランク付けされた候補プログラムを、追加の例に関連付けられたスプレッドシート内のセルに関連付けて記憶し得る。例えば、ブロック210においてプログラム合成器120によって第2の例が受信された場合、プログラム合成器120は、ブロック230において複数の候補プログラムの中で最も高くランク付けされた候補プログラムを、スプレッドシート内の第2のセル(すなわち、ブロック210において受信した第2の例に関連付けられたセル)に関連付けて記憶し得る。
【0056】
ブロック240を依然として参照すると、実装形態において、プログラム合成器120は、追加の例(例えば、第2の例など)に関連付けられたスプレッドシート内のセルにおいて(例えば、ユーザによって)提供された入力を、最も高くランク付けされたプログラムに置き換えるようにし得る。実装形態において、プログラム合成器120は、追加の例に関連付けられたスプレッドシート内のセルにおいて提供された入力を、最も高くランク付けされたプログラムに置き換え得るが、(例えば、クライアント130-1、...、130-nにおいて表示されたユーザインターフェース上の)追加の例に関連付けられたセル内に表示された値は、最も高くランク付けされたプログラムの出力がセルにおいて以前に(例えば、ユーザによって)提供された入力と一致するので、変更されないままである場合がある。
【0057】
図2を依然として参照すると、ブロック250において、システムは、例に関連付けられたセルに関連するスプレッドシート内の追加のセルを決定し得る。実装形態において、ブロック250において、スプレッドシートシステム110のプログラム合成器120は、ブロック210において受信した例に関連付けられたセルに関連するスプレッドシート内の1つまたは複数の追加のセルを決定し得る。
【0058】
ブロック250を依然として参照すると、実装形態において、プログラム合成器120は、スプレッドシート内の特定のテーブル内の、セルが例に関連付けられたセルと同じ列内に含まれていることに基づいて、1つまたは複数の追加のセルを決定し得る。他の実装形態において、プログラム合成器120は、セルが、スプレッドシート内の特定のテーブルの、例に関連付けられたセルと同じ行内に含まれていることに基づいて、1つまたは複数の追加のセルを決定し得る。他の実装形態において、プログラム合成器120は、例に関連付けられたセルに関連する1つまたは複数の追加のセルを決定するために、任意の他の基準(例えば、スプレッドシート内の列または行の見出しまたはラベル、既存のデータなど)を使用し得る。
【0059】
図2を依然として参照すると、ブロック260において、システムは、最も高くランク付けされたプログラムを、例に関連付けられたセルに関連するスプレッドシート内の追加のセルに関連付けて記憶し得る。実装形態において、ブロック260において、スプレッドシートシステム110のプログラム合成器120は、ブロック230において複数の候補プログラムの中で最も高くランク付けされた候補プログラムを、ブロック250において決定された追加のセルの各々に関連付けて記憶し得る。
【0060】
図3は、本明細書で開示される実装形態による、スプレッドシートプログラミング言語における1つまたは複数の関数を含むプログラムを自動的に合成する例示的な方法300を示すフローチャートである。便宜上、フローチャートの動作について、動作を実行するシステムを参照して説明する。このシステムは、スプレッドシートシステム110の1つまたは複数の構成要素などの、様々なコンピュータシステムの様々な構成要素を含み得る。さらに、方法300の動作が特定の順序において示されているが、これは、限定することを意味しない。1つまたは複数の動作は、並べ替えられ、省略され、または追加され得る。
【0061】
ブロック310において、システムは、スプレッドシート内の第1のセルにおいて提供されたユーザ入力を含む第1の例と、スプレッドシート内の第2のセルにおいて提供されたユーザ入力を含む第2の例とを受信し得る。実装形態において、ブロック310において、スプレッドシートシステム110のプログラム合成器120は、スプレッドシート内の第1のセルにおいて提供された使用入力を含む第1の例と、スプレッドシート内の第2のセルにおいて提供されたユーザ入力を含む第2の例とを受信し得る。
【0062】
図3を依然として参照すると、ブロック320において、システムは、第1の例と一致するプログラムの第1のセットと、第2の例と一致するプログラムの第2のセットとを自動的に合成し得る。実装形態において、ブロック320において、スプレッドシートシステム110のプログラム合成器120は、ブロック310において受信した第1の例と一致するプログラムの第1のセットを自動的に合成し、ブロック310において受信した第2の例と一致するプログラムの第2のセットを自動的に合成するために、動的プログラミングベースの検索アルゴリズムを使用し得る。実装形態において、プログラム合成器120によって自動的に合成されたプログラムの第1のセット内の各プログラムは、プログラムが実行されるとブロック310において受信した第1の例と一致する出力を生成し、プログラム合成器120によって自動的に合成されたプログラムの第2のセット内の各プログラムは、プログラムが実行されるとブロック310において受信した第2の例と一致する出力を生成する。実装形態において、プログラムの第1のセット内のプログラムおよびプログラムの第2のセット内のプログラムは、プログラム入力データとして、スプレッドシート内の1つもしくは複数のセル内に記憶されたデータ、および/または外部データソース150-1、...、150-mのうちの1つもしくは複数からのデータを使用し得る。
【0063】
図3を依然として参照すると、ブロック330において、システムは、プログラムの第1のセットとプログラムの第2のセットとの共通部分を決定することによって候補プログラムを生成し得る。実装形態において、ブロック330において、スプレッドシートシステム110のプログラム合成器120は、ブロック320において自動的に合成されたプログラムの第1のセットとプログラムの第2のセットとの共通部分を決定することによって、候補プログラムを生成し得る。実装形態において、プログラム合成器120は、プログラムの第1のセットとプログラムの第2のセットとの共通部分を決定する前に、プログラムにおいて(例えば、プログラムの第1のセットおよびプログラムの第2のセットにおいて)使用されるプログラム入力を(例えば、ブロック220に関して説明したように)一般名称化し得る。実装形態において、次いで、プログラム合成器120は、プログラムの第1のセットとプログラムの第2のセットの両方において存在するプログラムを共通部分として決定し得る。
【0064】
図3を依然として参照すると、ブロック340において、システムは、候補プログラムをランク付けし得る。実装形態において、ブロック340において、スプレッドシートシステム110のプログラム合成器120は、ブロック330において生成された候補プログラムをランク付けし得る。実装形態において、プログラム合成器120は、ブロック230に関して説明した基準のいずれかに基づいて、または任意の他の基準もしくは基準の組合せに基づいて、候補プログラムをランク付けし得る。
【0065】
図3を依然として参照すると、ブロック350において、システムは、候補プログラムのうちの最も高くランク付けされたプログラムを決定し得る。実装形態において、ブロック350において、スプレッドシートシステム110のプログラム合成器120は、ブロック340においてランク付けされた候補プログラムのうちの最も高くランク付けされたプログラムを決定し得る。
【0066】
図3を依然として参照すると、ブロック360において、システムは、スプレッドシート内の第1のセルにおいて提供されたユーザ入力と、スプレッドシート内の第2のセルにおいて提供されたユーザ入力とを、最も高くランク付けされたプログラムに置き換え得る。実装形態において、ブロック360において、スプレッドシートシステム110のプログラム合成器120は、ブロック310において受信したスプレッドシート内の第1のセルにおいて提供されたユーザ入力と、ブロック310において受信したスプレッドシート内の第2のセルにおいて提供されたユーザ入力とを、ブロック350において決定された最も高くランク付けされたプログラムに置き換え得る。
【0067】
ブロック360を依然として参照すると、プログラム合成器120は、第1のセルにおいて提供されたユーザ入力を、最も高くランク付けされたプログラムに置き換え得、(例えば、クライアント130-1、...、130-nにおいて表示されたユーザインターフェース上の)第1のセル内に表示された値は、最も高くランク付けされたプログラムの出力が第1のセルにおいて(例えば、ユーザによって)前に提供された入力と一致するので、変更されないままである場合がある。それに加えて、実装形態において、プログラム合成器120は、第2のセルにおいて提供されたユーザ入力を、最も高くランク付けされたプログラムに置き換え得るが、(例えば、クライアント130-1、...、130-nにおいて表示されたユーザインターフェース上の)第2のセルにおいて表示された値は、最も高くランク付けされたプログラムの出力が第2のセルにおいて以前に(例えば、ユーザによって)提供された入力と一致するので、変更されないままである場合がある。
【0068】
図3を依然として参照すると、ブロック370において、システムは、第1のセルおよび第2のセルに関連するスプレッドシート内の追加のセルを決定し得る。実装形態において、ブロック370において、スプレッドシートシステム110のプログラム合成器120は、ブロック310において受信した第1の例に関連付けられた第1のセルと、ブロック310において受信した第2の例に関連付けられた第2のセルとに関連するスプレッドシート内の追加のセルを決定し得る。
【0069】
図3を依然として参照すると、ブロック380において、システムは、最も高くランク付けされたプログラムを、第1のセルと第2のセルとに関連するスプレッドシート内の追加のセルに関連付けて記憶し得る。実装形態において、ブロック380において、スプレッドシートシステム110のプログラム合成器120は、最も高くランク付けされたプログラムを、ブロック370において決定された第1のセルと第2のセルとに関連するスプレッドシート内の追加のセルに関連付けて記憶し得る。
【0070】
図4は、スプレッドシートプログラミング言語における1つまたは複数の関数を含むプログラムがどのように自動的に合成され得るかの例を示す。下部において、スプレッドシート(例えば、スプレッドシート1)を閲覧、作成、または編集するためにスプレッドシートアプリケーションユーザによって使用され得るグラフィカルユーザインターフェース(「GUI」)400が示されている。この例において、スプレッドシート1は、姓名列(A)と、姓列(B)とを含む。姓名列は、様々な姓名を含み得る。
【0071】
いくつかの実装形態において、ユーザがデータ(例えば、「LastNameOne」などの姓)を第2の行420内の姓列(B)に入力することに応答して、スプレッドシートシステム110のプログラム合成器120は、第1の例として、(例えば、図2のブロック210に関して説明したように)スプレッドシート内の第1のセル(B2)においてユーザによって提供された入力を受信し得る。それに加えて、いくつかの実装形態において、ユーザがデータ(例えば、「LNTwo」などの姓)を第3の行430内の姓列(B)に入力することに応答して、スプレッドシートシステム110のプログラム合成器120は、第2の例として、(例えば、図2のブロック210に関して説明したように)スプレッドシート内の第2のセル(B3)においてユーザによって提供された入力を受信し得る。
【0072】
図4を依然として参照すると、いくつかの実装形態において、(例えば、図2のブロック220に関して説明したように)複数の候補プログラムを自動的に合成し、(例えば、図2のブロック230に関して説明したように)複数の候補プログラムをランク付けした後、スプレッドシートシステム110のプログラム合成器120は、(例えば、図2のブロック240に関して説明したように)最も高くランク付けされたプログラムを、スプレッドシート内の第1のセル(B2)および第2のセル(B3)に関連付けて記憶し得る。実装形態において、第2のセル(B3)などのセルの選択を受信することに応答して、セルに関連付けて記憶された最も高くランク付けされたプログラム(例えば、=Right(A3, LEN(A3) - FIND(" ", A3)))は、GUI400内の数式バー410内に表示され得る。
【0073】
図4を依然として参照すると、いくつかの実装形態において、スプレッドシートシステム110のプログラム合成器120は、(例えば、図2のブロック250に関して説明したように)例に関連付けられたセル(すなわち、B2およびB3)に関連するスプレッドシート内の追加のセル(すなわち、第3の行440内のB4および第4の行450内のB5)を決定し得る。いくつかの実装形態において、例に関連付けられたセルに関連するスプレッドシート内の追加のセルを決定した後、(図2のブロック260に関して説明したように)最も高くランク付けされたプログラムを、追加のセル(すなわち、第3の行440内のB4および第4の行450内のB5)に関連付けて記憶し得る。
【0074】
図4のシナリオは、例示の目的のみのためである。プログラムは、任意の数の用途のために、本明細書において説明した技法を使用して自動的に合成され得る。
【0075】
図5は、本明細書で説明した技法の1つまたは複数の態様を実行するためにオプションで利用され得る例示的なコンピューティングデバイス510のブロック図である。コンピューティングデバイス510は、典型的には、バスサブシステム512を介していくつかの周辺デバイスと通信する少なくとも1つのプロセッサ514を含む。これらの周辺デバイスは、例えば、メモリサブシステム525およびファイル記憶サブシステム526を含む記憶サブシステム524と、ユーザインターフェース出力デバイス520と、ユーザインターフェース入力デバイス522と、ネットワークインターフェースサブシステム516とを含み得る。入力デバイスおよび出力デバイスは、ユーザがコンピューティングデバイス510と対話することを可能にする。ネットワークインターフェースサブシステム516は、外部ネットワークへのインターフェースを提供し、他のコンピューティングデバイス内の対応するインターフェースデバイスに結合される。
【0076】
ユーザインターフェース入力デバイス522は、キーボード、マウス、トラックボール、タッチパッド、もしくはグラフィックスタブレットなどのポインティングデバイス、スキャナ、ディスプレイに組み込まれたタッチスクリーン、音声認識システムなどのオーディオ入力デバイス、マイクロフォン、および/または他のタイプの入力デバイスを含み得る。一般に、「入力デバイス」という用語の使用は、コンピューティングデバイス510または通信ネットワークに情報を入力するためのすべての可能なタイプのデバイスおよび方法を含むことを意図している。
【0077】
ユーザインターフェース出力デバイス520は、ディスプレイサブシステム、プリンタ、ファックス機、またはオーディオ出力デバイスなどの非視覚的ディスプレイを含み得る。ディスプレイサブシステムは、陰極線管(CRT)、液晶ディスプレイ(LCD)などのフラットパネルディスプレイ、プロジェクションデバイス、または視覚画像を作成するためのなにか他のメカニズムを含み得る。ディスプレイサブシステムは、オーディオ出力デバイスを介するなどして、非視覚的ディスプレイを提供し得る。一般に、「出力デバイス」という用語の使用は、コンピューティングデバイス510からユーザまたは別のマシンもしくはコンピューティングデバイスに情報を出力するためのすべての可能なタイプのデバイスまたは方法を含むことを意図している。
【0078】
記憶サブシステム524は、本明細書で説明したモジュールのうちのいくつかまたはすべての機能を提供するプログラミング構造およびデータ構造を記憶する。例えば、記憶サブシステム524は、図1に示す様々な構成要素を実装するとともに、図2および図3の方法の選択された態様を実行するためのロジックを含み得る。
【0079】
これらのソフトウェアモジュールは、一般に、プロセッサ514単独で、または他のプロセッサと組み合わせて実行される。記憶サブシステム524内に含まれるメモリサブシステム525は、プログラム実行中の命令およびデータの記憶のためのメインランダムアクセスメモリ(RAM)530と、固定命令が記憶される読み取り専用メモリ(ROM)532とを含むことができる。ファイル記憶サブシステム526は、プログラムおよびデータファイルのための永続的な記憶を提供することができ、ハードディスクドライブ、フロッピーディスクドライブおよび関連するリムーバブル媒体、CD-ROMドライブ、光学ドライブ、またはリムーバブル媒体カートリッジを含み得る。特定の実装形態の機能を実装するモジュールは、記憶サブシステム524内のファイル記憶サブシステム526によって記憶され得、またはプロセッサ514によってアクセス可能な他のマシン内に記憶され得る。
【0080】
バスサブシステム512は、コンピューティングデバイス510の様々な構成要素およびサブシステムを意図したとおりに互いに通信させるためのメカニズムを提供する。バスサブシステム512は、単一のバスとして概略的に示されているが、バスサブシステムの代替の実装形態は、複数のバスを使用し得る。
【0081】
コンピューティングデバイス510は、ワークステーション、サーバ、コンピューティングクラスタ、ブレードサーバ、サーバファーム、または任意の他のデータ処理システムもしくはコンピューティングデバイスを含む様々なタイプのものであり得る。コンピュータおよびネットワークの絶えず変化する性質のため、図5に示すコンピューティングデバイス510の説明は、いくつかの実装形態を示す目的のための特定の例としてのみ意図されている。図5に示すコンピューティングデバイスよりも多いまたは少ない構成要素を有するコンピューティングデバイス510の多くの他の構成が可能である。
【0082】
実装形態は、プログラムを自動的に合成する方法およびシステムを提供することによって、過剰なデータ入力、クライアントデバイスの使用、およびスプレッドシート内の複数の場所における同じデータの複製に関する問題に対処し得る。特に、いくつかの実装形態は、スプレッドシートプログラミング言語における少なくとも1つの関数を含み、実行されると、1つまたは複数のユーザ提供の出力例を生成するプログラムを自動的に合成するための方法およびシステムを提供することによって、コンピュータの機能を改善し得る。したがって、コンピュータ関連技術を改善するルールの使用によって、実装形態は、従来はコンピュータによって実行可能ではなかった機能のコンピュータでの実行を可能にする。それに加えて、実装形態は、定義上、コンピュータ技術に根ざした技法(例えば、スプレッドシートプログラミング言語、スプレッドシートユーザインターフェースなど)を使用する。
【0083】
本明細書においていくつかの実装形態について説明および図示してきたが、機能を実行するため、ならびに/あるいは本明細書で説明した結果、および/または利点のうちの1つもしくは複数を取得するための様々な他の手段および/または構造が利用され得、そのような変形および/または修正の各々は、本明細書で説明した実装形態の範囲内にあるとみなされる。より一般的には、本明細書で説明したすべてのパラメータ、寸法、材料、および構成は、例示的であることを意味し、実際のパラメータ、寸法、材料、および/または構成は、教示が使用される特定の用途に依存する。当業者は、本明細書で説明した特定の実装形態に対する多くの均等物を認識するか、または日常的な実験のみを使用して確認することができるであろう。したがって、前述の実装形態は、単なる例として提示されており、添付した特許請求の範囲およびその均等物の範囲内で、実装形態は、具体的に説明および特許請求されている以外の方法で実施され得ることが理解されるべきである。本開示の実装形態は、本明細書で説明した個々の特徴、システム、物品、材料、キット、および/または方法に向けられている。それに加えて、2つ以上のそのような特徴、システム、物品、材料、キット、および/または方法の任意の組合せは、そのような特徴、システム、物品、材料、キット、および/または方法が相互に矛盾しない場合、本開示の範囲内に含まれる。
【符号の説明】
【0084】
100 環境
110 スプレッドシートシステム
120 プログラム合成器
130-1、...、130-n クライアント
140-1、...、140-n スプレッドシートコーパス
150-1、...、150-m 外部データソース
160 コンピュータネットワーク
400 グラフィカルユーザインターフェース(「GUI」)、GUI
410 数式バー
420 第2の行
430 第3の行
440 第3の行
450 第4の行
510 コンピューティングデバイス
512 バスサブシステム
514 プロセッサ
516 ネットワークインターフェースサブシステム
520 ユーザインターフェース出力デバイス
522 ユーザインターフェース入力デバイス
524 記憶サブシステム
525 メモリサブシステム
526 ファイル記憶サブシステム
530 メインランダムアクセスメモリ(RAM)
532 読み取り専用メモリ(ROM)
図1
図2
図3
図4
図5