WO2021252651A1 - Synthesizing programs in a spreadsheet programming language - Google Patents
Synthesizing programs in a spreadsheet programming language Download PDFInfo
- Publication number
- WO2021252651A1 WO2021252651A1 PCT/US2021/036647 US2021036647W WO2021252651A1 WO 2021252651 A1 WO2021252651 A1 WO 2021252651A1 US 2021036647 W US2021036647 W US 2021036647W WO 2021252651 A1 WO2021252651 A1 WO 2021252651A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- program
- candidate
- programs
- spreadsheet
- candidate programs
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
- G06F40/177—Editing, e.g. inserting or deleting of tables; using ruled lines
- G06F40/18—Editing, e.g. inserting or deleting of tables; using ruled lines of spreadsheets
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2457—Query processing with adaptation to user needs
- G06F16/24578—Query processing with adaptation to user needs using ranking
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
Definitions
- Spreadsheet applications may implement a spreadsheet programming language that includes various functions that operate on data in a cell or range of cells in a spreadsheet and/or on other inputs in order to produce various outputs.
- functions in a spreadsheet programming language include sum, count, average, length, concatenate, maximum, minimum, and lookup functions.
- Users may manually enter data into a spreadsheet that could be obtained programmatically. For example, a user may manually enter last names into a column in a first table that could be obtained instead by using a function in a spreadsheet programming language to extract the last names from a column in a second table that stores full names.
- This manual approach may be an inefficient use of user time and computer storage resources, as it may result in excessive data entry, client device usage, and duplication of the same data in multiple places in a spreadsheet.
- the underlying data changes in one location e.g., a user's last name changes
- the change must be manually propagated to all places in the spreadsheet where the data is used.
- manually crafting the programs can often take an extended amount of time (e.g., to identify appropriate function(s), for trial and error, etc.) and, as a result, can lead to excess usage of power resources and/or other computational resource(s) of a client device used in manually crafting the programs. This can be exacerbated when the client device has a relatively small display and/or a software keyboard, both of which can prolong the amount of time needed to craft the programs.
- Implementations disclosed herein relate to automatically synthesizing programs that include at least one function in a spreadsheet programming language and that, when executed, generate output matching one or more user-provided output examples.
- a user input in a first cell in a spreadsheet can be used as a first example, and multiple candidate programs in an underlying spreadsheet programming language including a first set of candidate programs can be automatically synthesized such that each program in the first set of candidate programs, when executed, generates output that matches the first example.
- the candidate programs can then be ranked based on one or more criteria, and a highest-ranked program can be selected and stored in association with the first cell, e.g., as a replacement for the user input.
- a user input in a second cell in the spreadsheet can be used as a second example, and the multiple candidate programs that are automatically synthesized may include a second set of candidate programs that, when executed, generate output that matches the second example.
- candidate programs that are not included in both the first set of candidate programs and the second set of candidate programs Prior to ranking the candidate programs based on predetermined criteria, candidate programs that are not included in both the first set of candidate programs and the second set of candidate programs can be removed from the candidate programs. In this way, any automatically synthesized programs that do not produce output consistent with both of the user-provided examples are eliminated from the candidate programs.
- user input in additional cells in the spreadsheet can be used as additional examples, and automatically synthesized programs that do not produce output consistent with the additional examples can also be eliminated from the candidate programs.
- additional cells in the spreadsheet that are related to the first cell can be identified, and the highest-ranked program can be stored in association with each of the additional cells.
- additional cells in a column in a particular table in a spreadsheet can be identified as being related to a first cell in the column in the particular table, and the highest-ranked program can be stored in association with each of the additional cells in the column.
- the automatically synthesized programs can use, as input, data from one or more other cells present in one or more tables in the spreadsheet (e.g., data source cells).
- the automatically synthesized programs can use, as input, data from external data sources such as enterprise knowledge bases.
- the external data sources can be included in an external data source mapping associated with the spreadsheet that includes references (e.g., uniform resource locators or other links) to the external data sources.
- a data type of the first example can be determined, and execution of programs having output data types that do not match the data type of the first example is avoided. Accordingly, system resources can be conserved by avoiding calling of programs that cannot generate output matching user-provided examples.
- the data type of the first example can be determined to be a numeric data type, and execution of programs having output data types that do not match the numeric data type can be avoided. In other implementations, the data type of the first example can be determined to be a date data type, and execution of programs having output data types that do not match the date data type can be avoided.
- program input data can be obtained from a data source cell in the spreadsheet or from an external data source, and a data type of the program input data can be determined. Execution of programs having input data types that do not match the data type of the program input data can be avoided. Accordingly, system resources can be conserved by avoiding calling of programs that cannot utilize the type of data included in the program input data as input.
- a range of acceptable output values can be determined, and execution of programs having output data values falling outside of the range of acceptable output data values can be avoided. Accordingly, system resources can be conserved by avoiding calling of programs that cannot generate output falling within an acceptable range of values.
- candidate programs having more frequently used functions can be ranked higher than candidate programs having less frequently used functions. For example, a score can be assigned to each function in the candidate program based on a frequency of use of the function from historical spreadsheet data (e.g., frequency of use when manually written), and an overall score for the candidate program can be determined based on the scores assigned to each of the functions in the candidate program. The candidate programs can then be ranked based on the overall scores.
- candidate programs that include more frequently used function(s) may be ranked higher and, as a result, be more likely to be selected, utilized, and presented to users.
- the more frequently used function(s) of the candidate programs can be easier to comprehend by users, which can result in more computationally efficient review and/or editing of those programs.
- candidate programs that are shorter e.g., use a smaller total number of functions
- candidate programs that are simpler e.g., use a smaller number of levels of nested functions
- candidate programs that are simpler can be ranked ahead of candidate programs that use a larger number of levels of nested functions. Accordingly, system resources can be conserved by avoiding using overly complex programs.
- a corpus of spreadsheets can be obtained (e.g., a collection of spreadsheets created by users with a particular company or organization), and the corpus of spreadsheets can be analyzed to obtain a plurality of program idioms, each including a plurality of functions in the spreadsheet programming language.
- Additional candidate programs can be automatically synthesized and included in the first set of candidate programs consistent with the first example, where each of the additional candidate programs includes one or more of the program idioms and, when executed, generates output that matches the first example.
- the additional candidate programs can include functions in the spreadsheet programming language, in addition to the program idioms.
- online resources can be analyzed to obtain a plurality of program idioms.
- a first example including user input provided in a first cell in a spreadsheet and a second example including user input provided in a second cell in the spreadsheet can be received.
- a first set of programs consistent with the first example and a second set of programs consistent with the second example can be automatically synthesized.
- Each program in the first set of programs, when executed, generates output that matches the first example and each program in the second set of programs, when executed, generates output that matches the second example.
- Candidate programs can then be generated by determining an intersection of the first set of programs and the second set of programs.
- the candidate programs can then be ranked, a highest-ranked program of the plurality of candidate programs can be determined, and the user input provided in the first cell in the spreadsheet and the user input provided in the second cell in the spreadsheet can be replaced with the highest-ranked program.
- FIG. 1 schematically depicts an example environment in which selected aspects of the present disclosure may be implemented, in accordance with various implementations.
- FIG. 2 depicts a flowchart illustrating an example method for practicing selected aspects of the present disclosure.
- FIG. 3 depicts another flowchart illustrating an example method for practicing selected aspects of the present disclosure.
- FIG. 4 depicts an example application of techniques described herein, in accordance with various implementations.
- Fig. 5 illustrates an example architecture of a computing device.
- Fig. 1 schematically depicts an example environment 100 in which selected aspects of the present disclosure may be implemented, in accordance with various implementations.
- Any computing devices depicted in Fig. 1 or elsewhere in the figures may include logic such as one or more microprocessors (e.g., central processing units or "CPUs", graphical processing units or “GPUs”) that execute computer-readable instructions stored in memory, or other types of logic such as application-specific integrated circuits ("ASIC"), field-programmable gate arrays ("FPGA”), and so forth.
- ASIC application-specific integrated circuits
- FPGA field-programmable gate arrays
- Some of the systems depicted in Fig. 1, such as a spreadsheet system 110 may be implemented using one or more server computing devices that form what is sometimes referred to as a "cloud infrastructure,” although this is not required.
- the environment 100 may include a spreadsheet system 110 that implements a spreadsheet application that is accessible from various clients, including clients 130-1, ..., 130-n that may be included in the environment 100, through either a thin client interface, such as a web browser (e.g., a web-based spreadsheet application), or a program interface.
- the spreadsheet application that is implemented by the spreadsheet system 110 may be a software as a service (SaaS) spreadsheet application.
- SaaS software as a service
- the spreadsheet system 110 and the clients 130-1, ..., 130-n may be in communication via a computer network 160, which may be any suitable network including any combination of a local area network (LAN), wide area network (WAN), or the Internet.
- the spreadsheet system 110 may include, among other things, a program synthesizer 120 that is configured to perform selected aspects of the present disclosure in order to automatically synthesize programs that include one or more functions in a spreadsheet programming language for use in spreadsheets that are created, modified, and/or viewed using one or more of the clients 130-1, ..., 130-n.
- Each of the clients 130-1, ..., 130-n may be, for example, a user computing device that is used by a user to access a spreadsheet application via spreadsheet application user interface, such as a SaaS spreadsheet application, that is provided by the spreadsheet system 110, e.g., through a web browser.
- the clients 130-1, ..., 130-n may be user computing devices associated with an individual or an entity or organization such as a business (e.g., financial institute, bank, etc.), non-profit, club, university, government agency, or any other organization that uses a spreadsheet application.
- a business may operate a spreadsheet application to create, modify, and/or view one or more spreadsheets to manage financial records, business records, client lists, and so forth.
- the environment 100 may include spreadsheet corpuses 140-1, ..., 140-n that are accessible to the clients 130-1, ..., 130-n via the computer network 160 or another network.
- Each of the spreadsheet corpuses 140-1, 140-n may include multiple spreadsheets created by one or more of the clients 130-1, ..., 130-n, e.g., using the spreadsheet system 110.
- the spreadsheet corpuses 140-1, ..., 140-n may include a set of spreadsheets created, edited, or viewed by users of one or more of the clients 130-1, ..., 130-n associated with a particular entity or organization.
- the program synthesizer 120 may be configured to utilize, as examples, data input into one or more cells in a spreadsheet in order to aid the clients 130-1, ..., 130-n in automatically synthesizing programs that include one or more functions in a spreadsheet programming language for use in the spreadsheet.
- the program synthesizer 120 may be configured to enable automatic synthesis of programs that include one or more functions in a spreadsheet programming language, without requiring any human intervention, and to optionally present the output of the automatically synthesized programs to users of the clients 130-1, ..., 130-n via the spreadsheet application user interface as well as optionally present the automatically synthesized programs themselves to users of the clients 130-1, ..., 130-n for review and/or editing via the spreadsheet application user interface.
- the environment 100 may include external data sources 150-1, ..., 150-m that store data that may be accessible to the clients 130-1, ..., 130-n and/or the program synthesizer 120 of the spreadsheet system 110 via the computer network 160 or another network.
- data in the external data sources 150-1, ..., 150-m may be used as inputs to programs that are automatically synthesized by the program synthesizer 120.
- Fig. 2 is a flowchart illustrating an example method 200 of automatically synthesizing programs that include one or more functions in a spreadsheet programming language, in accordance with implementations disclosed herein.
- This system may include various components of various computer systems, such as one or more components of the spreadsheet system 110.
- operations of method 200 are shown in a particular order, this is not meant to be limiting. One or more operations may be reordered, omitted, or added.
- the system may receive example(s) including input provided in cell(s) in a spreadsheet.
- the program synthesizer 120 of the spreadsheet system 110 may receive a first example including input provided in a first cell in a spreadsheet.
- the program synthesizer 120 of the spreadsheet system 110 may receive a last name (e.g., "LastNameOne") as the first example in response to a user providing the last name as the input in the first cell (e.g., B2) in the spreadsheet via a spreadsheet application user interface displayed on one of the clients 130-1, ..., 130-n.
- a last name e.g., "LastNameOne”
- the program synthesizer 120 of the spreadsheet system 110 may optionally receive one or more additional examples, such as a second example including input provided in a second cell in the spreadsheet.
- the program synthesizer 120 may receive any number of examples.
- the program synthesizer 120 of the spreadsheet system 110 may receive another last name (e.g., "LNTwo") as the second example in response to the user providing the last name as the input in the second cell (e.g., B3) in the spreadsheet via the spreadsheet application user interface displayed on one of the clients 130-1, ..., 130-n.
- the system may automatically synthesize multiple candidate programs including set(s) of candidate programs consistent with the example(s).
- the program synthesizer 120 of the spreadsheet system 110 may use dynamic programming-based search algorithms to automatically synthesize a first set of candidate programs consistent with the first example received at block 210.
- each candidate program in the first set of candidate programs may include at least one function in a spreadsheet programming language and, when the candidate program is executed, the candidate program generates output that matches the first example.
- each candidate program may when executed use, as program input data, data stored in one or more data source cells in the spreadsheet and/or data from one or more of the external data sources 150-1, ..., 150-m.
- the program synthesizer 120 may obtain program input data from one or more of the external data sources 150-1, ..., 150-m and then use the program input data as input to one or more of the candidate programs (e.g., as input to one or more functions in a spreadsheet programming language used in the candidate programs).
- the external data sources may include enterprise knowledge bases, databases, other spreadsheets, and/or any other data sources.
- the external data sources 150-1, ..., 150-m may be included in an external data source mapping that is associated with the spreadsheet and that includes references (e.g., paths, uniform resource locators, links, etc.) to the external data sources 150-1, ..., 150-m.
- the program synthesizer 120 may use sampling-based search techniques to handle very large tables and knowledge bases.
- the external data sources 150-1, ..., 150-m that are used by the program synthesizer 120 can include (or be restricted to) enterprise knowledge bases that are linked with an account of the user.
- the program synthesizer 120 can use all enterprise knowledge bases of an organization, but for a second user, the program synthesizer 120 can use only a subset of the enterprise knowledge bases of the organization, based on the links with the accounts of the users.
- the links with the accounts of the users may be included in the external data source mapping and/or may be based on user permissions/rights to the databases.
- the program synthesizer 120 can first search personal and/or enterprise databases that are included in the external data sources 150-1, ..., 150-m to identify or locate program input data, and only search other general databases that are included in the external data sources 150-1, ..., 150-m if the program input data is not identified (located) in the personal and/or enterprise databases.
- the program synthesizer 120 of the spreadsheet system 110 may automatically synthesize a first set of candidate programs that generate output that matches the last name received as the first example ("LastNameOne") at block 210.
- One or more of the candidate programs may use, as program input data, data stored in another cell in the spreadsheet, e.g., data stored in a cell (e.g., cell A2) that is in a column (e.g., column A) that stores full names, in the same row as the first cell corresponding to the first example.
- the program input data, "FirstNameOne LastNameOne” may be stored in cell A2.
- a first candidate program included in the first set of candidate programs may be a program that uses a "LEN" function in a spreadsheet programming language that returns a length of a string, a "FIND” function in the spreadsheet programming language that returns a position at which a string is first found within text, and a "RIGHT” function in the spreadsheet programming language that returns a substring from the end of a specified string.
- the program RIGHT(A2, LEN(A2) - FIND(" ", A2)) may be included in the first set of candidate programs that is synthesized at block 210.
- a second candidate program included in the first set of candidate programs may be a program that uses the "RIGHT” function in the spreadsheet programming language.
- the program RIGHT(A2, 11) may be included in the first set of candidate programs that is synthesized at block 210.
- the second candidate program is executed, using "FirstNameOne LastNameOne" as the program input data, "LastNameOne" is returned as the output, and therefore the second candidate program generates output that matches the first example.
- the program synthesizer 120 may use dynamic programming-based search algorithms to automatically synthesize additional sets of candidate programs consistent with each of the additional examples.
- the program synthesizer 120 may synthesize a number of sets of candidate programs that matches the number of examples received at block 210. For example, in the case that a second example is received by the program synthesizer 120 at block 210, the program synthesizer 120 may use dynamic programming-based search algorithms to automatically synthesize a second set of candidate programs consistent with the second example received at block 210.
- the program synthesizer 120 may use dynamic programming-based search algorithms to automatically synthesize a third set of candidate programs consistent with the third example received at block 210, and so forth.
- the program synthesizer 120 of the spreadsheet system 110 may automatically synthesize a second set of candidate programs that generate output that matches the last name received as the second example ("LNTwo") at block 210.
- One or more of the candidate programs may use, as program input data, data stored in another cell in the spreadsheet, e.g., data stored in a cell (e.g., cell A3) that is in a column (e.g., column A) that stores full names, in the same row as the second cell corresponding to the second example.
- the program input data, "FNTwo LNTwo” may be stored in cell A3.
- a first candidate program included in the second set of candidate programs may be a program that uses a "LEN" function in a spreadsheet programming language that returns a length of a string, a "FIND” function in the spreadsheet programming language that returns a position at which a string is first found within text, and a "RIGHT” function in the spreadsheet programming language that returns a substring from the end of a specified string.
- the program RIGHT(A3, LEN(A3) - FIND(" ", A3)) may be included in the second set of candidate programs that is synthesized at block 210.
- a second candidate program included in the second set of candidate programs may be a program that uses the "RIGHT” function in the spreadsheet programming language.
- the program RIGHT(A3, 5) may be included in the second set of candidate programs that is synthesized at block 210.
- the second candidate program is executed, using "FNTwo LNTwo" as the program input data, "LNTwo" is returned as the output, and therefore the second candidate program included in the second set of candidate programs generates output that matches the second example.
- the program synthesizer 120 of the spreadsheet system 110 may synthesize candidate programs with incrementally larger numbers of functions as the number of examples received at block 210 is increased.
- the program synthesizer 120 may only use the LEFT, RIGHT, and MID functions in synthesizing the candidate programs, but with two examples received at block 210, the program synthesizer 120 may use IF and case transformation functions in synthesizing the candidate programs.
- the program synthesizer 120 of the spreadsheet system 110 in the automatically synthesizing multiple candidate programs including the set(s) of candidate programs consistent with the example(s), may determine a data type of the examples and avoid execution of programs having output data types that do not match the data types of the examples.
- the program synthesizer 120 may determine a data type of the first example to be a numeric data type, and the program synthesizer 120 may avoid execution of programs having output data types that do not match the numeric data type.
- the program synthesizer 120 may determine a data type of the first example to be a date data type, and the program synthesizer 120 may avoid execution of programs having output data types that do not match the date data type.
- the program synthesizer 120 of the spreadsheet system 110 in the automatically synthesizing multiple candidate programs including the set(s) of candidate programs consistent with the example(s), may obtain program input data from a data source cell in the spreadsheet or from one of the external data sources 150-1, ..., 150-/77, determine a data type of the program input data, and avoid execution of programs having input data types that do not match the data type of the program input data.
- the program synthesizer 120 of the spreadsheet system 110 in the automatically synthesizing multiple candidate programs including the set(s) of candidate programs consistent with the example(s), may determine a range of acceptable output data values (e.g., 1 to 31 for a day of the month), and avoid execution of programs having output data values falling outside of the range of acceptable data output values.
- a range of acceptable output data values e.g., 1 to 31 for a day of the month
- the program synthesizer 120 of the spreadsheet system 110 may obtain one or more of the spreadsheet corpuses 140-1, ..., 140-n and analyze one or more of the spreadsheet corpuses 140-1, ..., 140-n to obtain a plurality of program idioms (e.g., predefined programs), each including a plurality of functions in the spreadsheet programming language.
- the program synthesizer 120 of the spreadsheet system 110 may analyze one or more online resources (e.g., websites, tutorials, one or more of the external data sources 150-1, ..., 150-m, etc.) to obtain a plurality of program idioms.
- the program synthesizer 120 may automatically synthesize additional candidate programs that include at least one program idiom in each of the sets of candidate programs and that optionally include one or more additional functions in the spreadsheet programming language.
- the program synthesizer 120 may automatically synthesize additional candidate programs in the first set of candidate programs consistent with the first example, where each of the additional candidate programs, when executed, generates output that matches the first example.
- the program synthesizer 120 may remove candidate programs that are not included in all of the sets of candidate programs. For example, if the program synthesizer 120 receives two examples at block 210, then the program synthesizer 120 may remove candidate programs that are not included in both a first set of candidate programs consistent with a first example and a second set of candidate programs consistent with a second example.
- the program synthesizer 120 may remove candidate programs that are not included in each of a first set of candidate programs consistent with a first example, a second set of candidate programs consistent with a second example, and third second set of candidate programs consistent with a third example.
- the program synthesizer 120 may determine that candidate programs that differ only with respect to cells used for program input data are the same candidate program. For example, the program synthesizer 120 may determine that the candidate program RIGHT(A2, LEN(A2) - FIND(" ", A2)) included in the first set of candidate programs is the same as the candidate program RIGHT(A3, LEN(A3) - FIND(" ", A3)) included in the second set of candidate programs.
- the program synthesizer 120 may genericize the program inputs used in the candidate programs prior to determining whether or not a particular candidate program is included in all of the sets of candidate programs. For example, the program synthesizer 120 may genericize the candidate program RIGHT(A2, LEN(A2) - FIND(" “, A2)) to RIGHT(A[current row], LEN(A[current row]) - FIND(" ", A[current row])) and may genericize the candidate program RIGHT(A3, LEN(A3) - FIND(" ", A3)) to RIGHT(A[current row], LEN(A[current row]) - FIND(" ", Afcurrent row])), where [current row] is a placeholder for the current row in the spreadsheet.
- the program synthesizer 120 of the spreadsheet system 110 may determine that the candidate program RIGHT(A[current row], LEN(A[current row]) - FIND(" ", Afcurrent row])) is the only candidate program that is present in both the first set of candidate programs and the second set of candidate programs and then remove all other candidate programs from the sets of candidate programs generated at block 220.
- the program synthesizer 120 may determine that the candidate programs RIGHT(A[current row], 11) and RIGHT(A[current row], 5) are not present in both the first set of candidate programs and the second set of candidate programs and then remove those candidate programs from the sets of candidate programs generated at block 220.
- the system may rank the multiple candidate programs.
- the program synthesizer 120 of the spreadsheet system 110 may rank the multiple candidate programs that are automatically synthesized at block 220.
- the program synthesizer 120 may rank candidate programs having functions that are more frequently used higher than candidate programs having functions that are less frequently used (e.g., based on historical spreadsheet data).
- the program synthesizer 120 may assign a score to each of the function(s) in the candidate program.
- comparatively higher scores may be assigned to functions in the candidate program that are more frequently used in one or more of the spreadsheet corpuses 140-1, ..., 140-n
- comparatively lower scores may be assigned to functions in the candidate program that are less frequently used in one or more of the spreadsheet corpuses 140-1, ..., 140-n.
- the program synthesizer 120 may then, for each of the candidate programs, determine an overall score for the candidate program based on the scores assigned to each of the function(s) in the candidate program. For example, the program synthesizer 120 may determine the overall score by averaging the scores assigned to each of the function(s) in the candidate program.
- the program synthesizer 120 determine the overall score based on a lowest score of the scores assigned to each of the function(s) in the candidate program. The program synthesizer 120 may then rank the plurality of candidate programs based on the overall scores. [0053] Still referring to block 230, in other implementations, the program synthesizer 120 may rank candidate programs that use a smaller total number of functions ahead of candidate programs that use a larger total number of functions. In other implementations, the program synthesizer 120 may rank candidate programs that use a smaller number of levels of nested functions ahead of candidate programs that use a larger number of levels of nested functions.
- the program synthesizer 120 may rank candidate programs that use functions previously used by a particular user or organization ahead of candidate programs that use functions not previously used by a particular user or organization. In other implementations, the program synthesizer 120 may rank candidate programs based on a character class-based tokenization mechanism that decomposes input and output strings. In other implementations, the program synthesizer 120 may rank candidate programs that produce tokenized outputs higher than candidate programs that do not produce tokenized outputs.
- the program synthesizer 120 may rank candidate programs based on sources of program input data. For example, the program synthesizer 120 may rank candidate programs that obtain program input data from spreadsheets or knowledge bases within an organization higher than candidate programs that obtain program input data from general knowledge bases. In another example, the program synthesizer 120 may rank candidate programs that obtain program input data from more frequently accessed sources higher than candidate programs that obtain program input data from less frequently accessed sources. In other implementations, the program synthesizer 120 may use any other criteria or combination of criteria to rank the candidate programs that are generated at block 220.
- the system may store the highest-ranked program of the multiple candidate programs in association with the cell(s) in the spreadsheet associated with the example(s).
- the program synthesizer 120 of the spreadsheet system 110 may store the candidate program that is ranked highest among the multiple candidate programs at block 230 in association with the first cell in the spreadsheet (i.e., the cell associated with the first example received at block 210).
- a prompt may be displayed on the user interface displayed on the client 130-1, ..., 130-n regarding the automatically synthesized program (e.g., regarding the highest-ranked program determined at block 230), and the storing the highest-ranked program at block 240 may be performed in response to a user indicating an acceptance of the automatically synthesized program, e.g., by selecting a button in the prompt or by inputting a keyboard shortcut.
- the program synthesizer 120 may cause the input provided (e.g., by a user) in the first cell (i.e., the first example) to be replaced with the highest-ranked program.
- the program synthesizer 120 may replace the input provided in the first cell with the highest-ranked program, the value displayed in the first cell (e.g., on the user interface displayed on the client 130-1, ..., 130-n) may remain unchanged, as the output of the highest-ranked program matches the input previously provided (e.g., by a user) in the cell.
- the program synthesizer 120 may determine that the program RIGHT(A[current row], LEN(A[current row]) - FIND(" ", A[current row])) is the highest-ranked program at block 230, and the program synthesizer 120 may store the program RIGHT(A[current row], LEN(A[current row]) - FIND(" ", A[current row])) in association with the first cell in the spreadsheet (i.e., B2, which is the cell associated with the first example received at block 210), replacing the input provided in the first cell ("LastNameOne").
- the program synthesizer 120 of the spreadsheet system 110 may store the candidate program that is ranked highest among the multiple candidate programs at block 230 in association with the cells in the spreadsheet associated with the additional examples. For example, in the case that a second example is received by the program synthesizer 120 at block 210, the program synthesizer 120 may store the candidate program that is ranked highest among the multiple candidate programs at block 230 in association with the second cell in the spreadsheet (i.e., the cell associated with the second example received at block 210).
- the program synthesizer 120 may cause the input provided (e.g., by a user) in the cells in the spreadsheet associated with the additional examples (e.g., the second example, etc.) to be replaced with the highest-ranked program.
- the program synthesizer 120 may replace the input provided in the cells in the spreadsheet associated with the additional examples with the highest-ranked program, the value displayed in the cells associated with the additional examples (e.g., on the user interface displayed on the client 130-1, ..., 130-n) may remain unchanged, as the output of the highest-ranked program matches the input previously provided (e.g., by a user) in the cells.
- the system may determine additional cell(s) in the spreadsheet that are related to the cell(s) associated with the example(s).
- the program synthesizer 120 of the spreadsheet system 110 may determine one or more additional cells in the spreadsheet that are related to the cell(s) associated with the example(s) received at block 210.
- the program synthesizer 120 may determine the one or more additional cells based on the cells being included in the same column of a particular table in the spreadsheet as the cells associated with the examples. In other implementations, the program synthesizer 120 may determine the one or more additional cells based on the cells being included in the same row of a particular table in the spreadsheet as the cells associated with the examples. In other implementations, the program synthesizer 120 may use any other criteria (e.g., headings or labels for columns or rows in the spreadsheet, existing data, etc.) to determine the one or more additional cells that are related to the cells associated with the examples. [0062] Still referring to Fig.
- the system may store the highest-ranked program in association with the additional cell(s) in the spreadsheet that are related to the cell(s) associated with the example(s).
- the program synthesizer 120 of the spreadsheet system 110 may store the candidate program that is ranked highest among the multiple candidate programs at block 2S0 in association with each of the additional cell(s) determined at block 250.
- Fig. 3 is a flowchart illustrating an example method 300 of automatically synthesizing programs that include one or more functions in a spreadsheet programming language, in accordance with implementations disclosed herein.
- This system may include various components of various computer systems, such as one or more components of the spreadsheet system 110.
- operations of method 300 are shown in a particular order, this is not meant to be limiting. One or more operations may be reordered, omitted, or added.
- the system may receive a first example including user input provided in a first cell in a spreadsheet and a second example including user input provided in a second cell in the spreadsheet.
- the program synthesizer 120 of the spreadsheet system 110 may receive a first example including using input provided in a first cell in a spreadsheet and a second example including user input provided in a second cell in the spreadsheet.
- the system may automatically synthesize a first set of programs consistent with the first example and a second set of programs consistent with the second example.
- the program synthesizer 120 of the spreadsheet system 110 may use dynamic programming-based search algorithms to automatically synthesize a first set of programs consistent with the first example received at block 310 and automatically synthesize a second set of programs consistent with the second example received at block 310.
- each program in the first set of programs automatically synthesized by the program synthesizer 120 generates output that matches the first example received at block 310 when the program is executed
- each program in the second set of programs automatically synthesized by the program synthesizer 120 generates output that matches the second example received at block BIO when the program is executed.
- the programs in the first set of programs and the programs in the second set of programs may use, as program input data, data stored in one or more cells in the spreadsheet and/or data from one or more of the external data sources 150- 1, ..., 150-/77.
- the system may generate candidate programs by determining an intersection of the first set of programs and the second set of programs.
- the program synthesizer 120 of the spreadsheet system 110 may generate candidate programs by determining an intersection of the first set of programs and the second set of programs automatically synthesized at block 320.
- the program synthesizer 120 may genericize (e.g., as described with respect to block 220) the program inputs used in the programs (e.g., in the first set of programs and in the second set of programs) prior to determining the intersection of the first set of programs and the second set of programs.
- the program synthesizer 120 may then determine, as the intersection, the programs that exist in both the first set of programs and the second set of programs.
- the system may rank the candidate programs.
- the program synthesizer 120 of the spreadsheet system 110 may rank the candidate programs that are generated at block 330.
- the program synthesizer 120 may rank the candidate programs based on any of the criteria described with respect to block 230 or based on any other criteria or combination of criteria.
- the system may determine a highest-ranked program of the candidate programs.
- the program synthesizer 120 of the spreadsheet system 110 may determine a highest-ranked program of the candidate programs that are ranked at block 340.
- the system may replace the user input provided in the first cell in the spreadsheet and the user input provided in the second cell in the spreadsheet with the highest-ranked program.
- the program synthesizer 120 of the spreadsheet system 110 may replace the user input provided in the first cell in the spreadsheet that is received at block 310 and the user input provided in the second cell in the spreadsheet that is received at block BIO with the highest-ranked program determined at block 350.
- the program synthesizer 120 may replace the user input provided in the first cell with the highest-ranked program, the value displayed in the first cell (e.g., on the user interface displayed on the client 130-1, ..., 130-n) may remain unchanged, as the output of the highest-ranked program matches the input previously provided (e.g., by a user) in the first cell.
- the program synthesizer 120 may replace the user input provided in the second cell with the highest-ranked program, the value displayed in the second cell (e.g., on the user interface displayed on the client 130-1, ..., 130-n) may remain unchanged, as the output of the highest- ranked program matches the input previously provided (e.g., by a user) in the second cell.
- the system may determine additional cell(s) in the spreadsheet that are related to the first cell and the second cell.
- the program synthesizer 120 of the spreadsheet system 110 may determine additional cell(s) in the spreadsheet that are related to the first cell associated with the first example received at block 310 and the second cell associated with the second example received at block 310.
- the system may store the highest-ranked program in association with the additional cell(s) in the spreadsheet that are related to the first cell and the second cell.
- the program synthesizer 120 of the spreadsheet system 110 may store the highest-ranked program in association with the additional cell(s) in the spreadsheet that are related to the first cell and the second cell that are determined at block 370.
- Fig. 4 depicts an example of how programs that include one or more functions in a spreadsheet programming language may be automatically synthesized.
- GUI graphical user interface
- Spreadsheet 1 includes a Full Name column (A) and a Last Name column (B).
- the Full Name column may include various full names.
- the program synthesizer 120 of the spreadsheet system 110 may receive as a first example the input provided by the user in a first cell (B2) in the spreadsheet (e.g., as described with respect to block 210 of Fig. 2).
- the program synthesizer 120 of the spreadsheet system 110 may receive as a second example the input provided by the user in a second cell (B3) in the spreadsheet (e.g., as described with respect to block 210 of Fig. 2).
- the program synthesizer 120 of the spreadsheet system 110 may store the highest-ranked program in association with the first cell (B2) and the second cell (B3) in the spreadsheet (e.g., as described with respect to block 240 of Fig. 2).
- the program synthesizer 120 of the spreadsheet system 110 may determine additional cells (i.e., B4 in the third row 440 and B5 in the fourth row 450) in the spreadsheet that are related to the cells associated with the examples (i.e., B2 and B3) (e.g., as described with respect to block 250 of Fig. 2).
- the program synthesizer 120 of the spreadsheet system 110 may store the highest-ranked program in association with the additional cells (i.e., B4 in the third row 440 and B5 in the fourth row 450) (e.g., as described with respect to block 260 of Fig. 2).
- FIG. 4 The scenario of Fig. 4 is for illustrative purposes only. Programs may be automatically synthesized using techniques described herein for any number of applications.
- FIG. 5 is a block diagram of an example computing device 510 that may optionally be utilized to perform one or more aspects of techniques described herein.
- Computing device 510 typically includes at least one processor 514 which communicates with a number of peripheral devices via bus subsystem 512. These peripheral devices may include a storage subsystem 524, including, for example, a memory subsystem 525 and a file storage subsystem 526, user interface output devices 520, user interface input devices 522, and a network interface subsystem 516. The input and output devices allow user interaction with computing device 510.
- Network interface subsystem 516 provides an interface to outside networks and is coupled to corresponding interface devices in other computing devices.
- User interface input devices 522 may include a keyboard, pointing devices such as a mouse, trackball, touchpad, or graphics tablet, a scanner, a touchscreen incorporated into the display, audio input devices such as voice recognition systems, microphones, and/or other types of input devices.
- pointing devices such as a mouse, trackball, touchpad, or graphics tablet
- audio input devices such as voice recognition systems, microphones, and/or other types of input devices.
- use of the term "input device” is intended to include all possible types of devices and ways to input information into computing device 510 or onto a communication network.
- User interface output devices 520 may include a display subsystem, a printer, a fax machine, or non-visual displays such as audio output devices.
- the display subsystem may include a cathode ray tube (CRT), a flat-panel device such as a liquid crystal display (LCD), a projection device, or some other mechanism for creating a visible image.
- the display subsystem may also provide non-visual display such as via audio output devices.
- output device is intended to include all possible types of devices and ways to output information from computing device 510 to the user or to another machine or computing device.
- Storage subsystem 524 stores programming and data constructs that provide the functionality of some or all of the modules described herein.
- the storage subsystem 524 may include the logic to perform selected aspects of the methods of Figs. 2 and 3, as well as to implement various components depicted in Fig. 1.
- the memory subsystem 525 included in the storage subsystem 524 can include a number of memories including a main random access memory (RAM) 530 for storage of instructions and data during program execution and a read only memory (ROM) 532 in which fixed instructions are stored.
- a file storage subsystem 526 can provide persistent storage for program and data files, and may include a hard disk drive, a floppy disk drive along with associated removable media, a CD-ROM drive, an optical drive, or removable media cartridges.
- the modules implementing the functionality of certain implementations may be stored by file storage subsystem 526 in the storage subsystem 524, or in other machines accessible by the processor(s) 514.
- Bus subsystem 512 provides a mechanism for letting the various components and subsystems of computing device 510 communicate with each other as intended. Although bus subsystem 512 is shown schematically as a single bus, alternative implementations of the bus subsystem may use multiple busses.
- Computing device 510 can be of varying types including a workstation, server, computing cluster, blade server, server farm, or any other data processing system or computing device. Due to the ever-changing nature of computers and networks, the description of computing device 510 depicted in Fig. 5 is intended only as a specific example for purposes of illustrating some implementations. Many other configurations of computing device 510 are possible having more or fewer components than the computing device depicted in Fig. 5.
- Implementations may address problems with excessive data entry, client device usage, and duplication of the same data in multiple places in a spreadsheet by providing methods and systems for automatically synthesizing programs.
- some implementations may improve the functioning of a computer by providing methods and systems for automatically synthesizing programs that include at least one function in a spreadsheet programming language and that, when executed, generate output matching one or more user-provided output examples.
- implementations allow computer performance of functions not previously performable by a computer.
- implementations use techniques that are, by definition, rooted in computer technology (e.g., a spreadsheet programming language, a spreadsheet user interface, etc.).
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Health & Medical Sciences (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computing Systems (AREA)
- General Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Stored Programmes (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Devices For Executing Special Programs (AREA)
- Document Processing Apparatus (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
Description
Claims
Priority Applications (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020237038784A KR20230159635A (en) | 2020-06-09 | 2021-06-09 | Synthesizing programs in a spreadsheet programming language |
EP21737273.9A EP4133398A1 (en) | 2020-06-09 | 2021-06-09 | Synthesizing programs in a spreadsheet programming language |
KR1020227039102A KR102602636B1 (en) | 2020-06-09 | 2021-06-09 | Program synthesis in a spreadsheet programming language |
JP2022564445A JP7387918B2 (en) | 2020-06-09 | 2021-06-09 | Synthesizing programs in spreadsheet programming languages |
CN202180034105.7A CN115552406A (en) | 2020-06-09 | 2021-06-09 | Synthesizing programs in a spreadsheet programming language |
JP2023194349A JP7590532B2 (en) | 2020-06-09 | 2023-11-15 | Synthesizing programs in a spreadsheet programming language |
JP2024198825A JP2025026465A (en) | 2020-06-09 | 2024-11-14 | Synthesizing programs in a spreadsheet programming language |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202063036898P | 2020-06-09 | 2020-06-09 | |
US63/036,898 | 2020-06-09 | ||
US17/122,290 US11481195B2 (en) | 2020-06-09 | 2020-12-15 | Synthesizing programs in a spreadsheet programming language |
US17/122,290 | 2020-12-15 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2021252651A1 true WO2021252651A1 (en) | 2021-12-16 |
Family
ID=78817443
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/US2021/036647 WO2021252651A1 (en) | 2020-06-09 | 2021-06-09 | Synthesizing programs in a spreadsheet programming language |
Country Status (6)
Country | Link |
---|---|
US (3) | US11481195B2 (en) |
EP (1) | EP4133398A1 (en) |
JP (3) | JP7387918B2 (en) |
KR (2) | KR20230159635A (en) |
CN (1) | CN115552406A (en) |
WO (1) | WO2021252651A1 (en) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11481195B2 (en) | 2020-06-09 | 2022-10-25 | Google Llc | Synthesizing programs in a spreadsheet programming language |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140282375A1 (en) * | 2013-03-15 | 2014-09-18 | Microsoft Corporation | Generating Program Fragments Using Keywords and Context Information |
US20150019216A1 (en) * | 2013-07-15 | 2015-01-15 | Microsoft Corporation | Performing an operation relative to tabular data based upon voice input |
US20180113906A1 (en) * | 2016-10-20 | 2018-04-26 | Microsoft Technology Licensing, Llc | Join with predictive granularity modification by example |
US20180113848A1 (en) * | 2016-10-20 | 2018-04-26 | Microsoft Technology Licensing, Llc | Join with format modification by example |
US20180232351A1 (en) * | 2017-02-10 | 2018-08-16 | Microsoft Technology Licensing, Llc | Joining web data with spreadsheet data using examples |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08234975A (en) * | 1995-02-28 | 1996-09-13 | Fujitsu Ltd | Program generation apparatus and method |
US6055548A (en) | 1996-06-03 | 2000-04-25 | Microsoft Corporation | Computerized spreadsheet with auto-calculator |
JP2000276535A (en) * | 1999-03-23 | 2000-10-06 | Hitachi Information Systems Ltd | Automatic Spreadsheet Formula Generation Method and Recording Medium Recording the Processing Program |
US6766512B1 (en) * | 2000-11-22 | 2004-07-20 | Furraylogic Ltd. | Methods and systems for generating a structured language model from a spreadsheet model |
US20030226105A1 (en) * | 2002-05-29 | 2003-12-04 | Mattias Waldau | Method in connection with a spreadsheet program |
US8799234B2 (en) | 2010-07-12 | 2014-08-05 | Microsoft Corporation | Semantic entity manipulation using input-output examples |
US7451397B2 (en) * | 2004-12-15 | 2008-11-11 | Microsoft Corporation | System and method for automatically completing spreadsheet formulas |
US8539444B2 (en) * | 2008-06-30 | 2013-09-17 | International Business Machines Corporation | System and method for platform-independent, script-based application generation for spreadsheet software |
US8645911B2 (en) * | 2009-04-20 | 2014-02-04 | Exigen Properties, Inc. | Systems, methods and machine readable mediums for defining and executing new commands in a spreadsheet software application |
US8972930B2 (en) | 2010-06-04 | 2015-03-03 | Microsoft Corporation | Generating text manipulation programs using input-output examples |
US10409892B2 (en) | 2011-01-26 | 2019-09-10 | Microsoft Technology Licensing, Llc | Formatting data by example |
US10503822B1 (en) | 2012-03-02 | 2019-12-10 | Apparity, LLC | Application tracking, auditing and collaboration systems and methods |
US9934215B2 (en) | 2015-11-02 | 2018-04-03 | Microsoft Technology Licensing, Llc | Generating sound files and transcriptions for use in spreadsheet applications |
US10565222B2 (en) | 2016-09-15 | 2020-02-18 | Oracle International Corporation | Techniques for facilitating the joining of datasets |
KR102028665B1 (en) * | 2017-05-04 | 2019-10-04 | 고려대학교 산학협력단 | Method for synthesizing programs |
US10782939B2 (en) | 2017-08-07 | 2020-09-22 | Microsoft Technology Licensing, Llc | Program predictor |
US10685175B2 (en) * | 2017-10-21 | 2020-06-16 | ScienceSheet Inc. | Data analysis and prediction of a dataset through algorithm extrapolation from a spreadsheet formula |
US10831451B2 (en) * | 2017-12-01 | 2020-11-10 | Microsoft Technology Licensing, Llc | Synthesized programming-by-example programs |
US10635414B2 (en) * | 2018-04-24 | 2020-04-28 | Microsoft Technology Licensing, Llc | Output prefix specification transformers |
US11036478B2 (en) * | 2019-08-07 | 2021-06-15 | Sap Se | Automated determination of transformation objects |
US11481195B2 (en) | 2020-06-09 | 2022-10-25 | Google Llc | Synthesizing programs in a spreadsheet programming language |
-
2020
- 2020-12-15 US US17/122,290 patent/US11481195B2/en active Active
-
2021
- 2021-06-09 CN CN202180034105.7A patent/CN115552406A/en active Pending
- 2021-06-09 WO PCT/US2021/036647 patent/WO2021252651A1/en unknown
- 2021-06-09 JP JP2022564445A patent/JP7387918B2/en active Active
- 2021-06-09 KR KR1020237038784A patent/KR20230159635A/en active Pending
- 2021-06-09 EP EP21737273.9A patent/EP4133398A1/en not_active Withdrawn
- 2021-06-09 KR KR1020227039102A patent/KR102602636B1/en active Active
-
2022
- 2022-10-24 US US17/972,327 patent/US12073194B2/en active Active
-
2023
- 2023-11-15 JP JP2023194349A patent/JP7590532B2/en active Active
-
2024
- 2024-07-09 US US18/767,743 patent/US20240361991A1/en active Pending
- 2024-11-14 JP JP2024198825A patent/JP2025026465A/en active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140282375A1 (en) * | 2013-03-15 | 2014-09-18 | Microsoft Corporation | Generating Program Fragments Using Keywords and Context Information |
US20150019216A1 (en) * | 2013-07-15 | 2015-01-15 | Microsoft Corporation | Performing an operation relative to tabular data based upon voice input |
US20180113906A1 (en) * | 2016-10-20 | 2018-04-26 | Microsoft Technology Licensing, Llc | Join with predictive granularity modification by example |
US20180113848A1 (en) * | 2016-10-20 | 2018-04-26 | Microsoft Technology Licensing, Llc | Join with format modification by example |
US20180232351A1 (en) * | 2017-02-10 | 2018-08-16 | Microsoft Technology Licensing, Llc | Joining web data with spreadsheet data using examples |
Non-Patent Citations (1)
Title |
---|
SUMIT GULWANI ET AL: "Spreadsheet data manipulation using examples", COMMUNICATIONS OF THE ACM, vol. 55, no. 8, 1 August 2012 (2012-08-01), pages 97 - 105, XP055140163, ISSN: 0001-0782, DOI: 10.1145/2240236.2240260 * |
Also Published As
Publication number | Publication date |
---|---|
JP7590532B2 (en) | 2024-11-26 |
US11481195B2 (en) | 2022-10-25 |
JP2025026465A (en) | 2025-02-21 |
JP7387918B2 (en) | 2023-11-28 |
US20240361991A1 (en) | 2024-10-31 |
US20210382697A1 (en) | 2021-12-09 |
KR102602636B1 (en) | 2023-11-16 |
CN115552406A (en) | 2022-12-30 |
KR20230159635A (en) | 2023-11-21 |
EP4133398A1 (en) | 2023-02-15 |
US20230039841A1 (en) | 2023-02-09 |
KR20220154257A (en) | 2022-11-21 |
JP2024020411A (en) | 2024-02-14 |
US12073194B2 (en) | 2024-08-27 |
JP2023528166A (en) | 2023-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10037376B2 (en) | Throughput-based fan-out control in scalable distributed data stores | |
US20240361991A1 (en) | Synthesizing programs in a spreadsheet programming language | |
US12072839B2 (en) | Automatic file organization within a cloud storage system | |
US12265784B2 (en) | People suggestion in collaborative online text editors | |
US20120173519A1 (en) | Performing pre-aggregation and re-aggregation using the same query language | |
US9477768B1 (en) | Disambiguation of online social mentions | |
US20210383060A1 (en) | User interface(s) related to synthesizing programs in a spreadsheet programming language | |
WO2024119432A1 (en) | Inline structured query language queries in a spreadsheet | |
US9058345B2 (en) | System and method of generating reusable distance measures for data processing | |
US20240119224A1 (en) | Table cell splitting in an online document editor | |
US12039267B2 (en) | Automated categorization of data by generating unity and reliability metrics | |
US20180210903A1 (en) | Multi-Pass Duplicate Identification Using Sorted Neighborhoods and Aggregation Techniques | |
US20120191700A1 (en) | Book of business mechanism | |
Ahmed et al. | Learning Scholarly Network of Influential Authors | |
CN118839768A (en) | Information processing method, apparatus, device and storage medium | |
CN118860978A (en) | A keyword search method, device and medium for enterprise query function |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 21737273 Country of ref document: EP Kind code of ref document: A1 |
|
ENP | Entry into the national phase |
Ref document number: 2022564445 Country of ref document: JP Kind code of ref document: A |
|
ENP | Entry into the national phase |
Ref document number: 20227039102 Country of ref document: KR Kind code of ref document: A |
|
ENP | Entry into the national phase |
Ref document number: 2021737273 Country of ref document: EP Effective date: 20221111 |
|
NENP | Non-entry into the national phase |
Ref country code: DE |