Detailed Description
FIG. 1A is a screen shot illustrating an example Input Method Editor (IME) interface displaying an input and selectable alternatives to the input. The IME interface may include a first interface element (e.g., a combo box) for providing input in a first writing system (e.g., pinyin), and a second interface element (e.g., a candidate window) for displaying selectable alternatives (e.g., candidate transliterations of hanzi-chinese) in a second, different writing system. In fig. 1A, the input is "pin yin shuru fa", and optionally five candidate transliterations of chinese-chinese, i.e., "pinyin input method" (e.g., "p ī n y ī n sh major, f { hacek over (a) } of pinyin); "Pinyin input" (e.g. Pinyin "p ī n y ī n sh er's") is input; "Pinyin" (e.g., Pinyin "p ī n y ī n"); "pinyins" (e.g., pinyin "p ǐ n"); and "pinyin" (e.g., "p ī n" for pinyin).
In general, an input may include one or more sequences of characters. As an example, the input may be a character, an item (e.g., a word or phrase) containing multiple characters, or a sentence containing multiple items. Sometimes, the input may be a complete phonetic spelling of the desired transliteration. For example, in FIG. 1A, the input "pin yin shu ru fa" may be the complete phonetic spelling of "Pinyin input method". In some cases, it may be inconvenient for a user to enter a full pinyin representation (full phonetic spelling), such as on a mobile device (e.g., mobile phone), among others. Thus, a user may sometimes enter a number of characters (e.g., abbreviations) that are less than the full pinyin representation. For example, the user may provide "pysrf" as an input, and the IME may map the input "pysrf" to the full pinyin representation "pin yin shu ru fa".
In both examples, it may be inconvenient for the user to modify the input, for example, when the input includes a typing error. In an IME or user interface like that of fig. 1A, the user would need to move the text cursor (e.g., an caret or | bar) to the location of the typographical error, for example, by pressing the LEFT/RIGHT cursor key once for each selectable object (e.g., each selectable alternative, or each delimited group of roman characters) that separates the current location of the text cursor from the location of the typographical error. The text cursor identifies the current text entry or modification location.
FIG. 1B is a screenshot illustrating an example input method editor interface displaying an input with a typographical error and selectable alternatives to the input. In FIG. 1B, the user intends to provide the input "Pin yinshuru fa shi zhe yang gong zuo de "(with increased emphasis). However, the user does not enter the character "s" in the intended character sequence "shu" (e.g., pinyin syllables). Thus, the input currently includes the character sequence "Pin yinhuru fa shi zhe yang gong zuo de "(with increased emphasis). Thus, the optional alternatives (e.g., transliteration candidates in chinese) may be different from what the user intended to obtain.
In fig. 1B, note that the text cursor is currently over the selectable alternative "pinyin incoming call method is doing so", as indicated by the highlighting of the first selectable alternative. To correct a typographical error, the user would press the LEFT cursor key nine times (e.g., to pass (1) "de", (2) "zuo", (3) "gong", (4) "yang", (5) "zhe", (6) "shi", (7) "fa", (8) "ru", and (9) "hu"), or seven times (e.g., to pass (1) "pinyin", (2) ", (3)" pinyin ", (4)", (5) "pin", (6) "yin", and (7) "hu"), to move the text cursor to "hu" and insert the missing character "s".
FIG. 2 is a screen shot illustrating the example input method editor interface of FIG. 1A, with different portions of the input tagged. The different parts correspond to different language units, such as units for characters, units for syllables, units for items (e.g., one or more words), and units for sentences. Depending on the granularity of operations, for example, the level of browsing and editing operations (e.g., highlighting, deleting, copying, pasting, replacing) can be performed on the cells as a whole, with each language cell corresponding to an operable cell.
In general, the operation granularity level includes a character level, a token level, an item level, and a sentence level. At the character level, operations may be performed on characters in the originally entered first writing system. At the token level, operations may be performed on tokens (e.g., syllables) represented by characters in the first writing system. At the token group level, operations may be performed with respect to a token group (e.g., an item or phrase). The sentence level treats the entire input as an operation unit, for example, the entire input may or may not be a sentence.
In FIG. 2, pinyin inputs are tagged according to an example level of granularity of operation for the pinyin writing system. Specifically, the character level is labeled as the "pinyin character" level, where operations are performed on a single Latin character. The token level is labeled as a "pinyin token" level, where operations are performed on pinyin tokens, such as pinyin syllables or abbreviations for pinyin syllables, corresponding to the smallest transliteration unit of a chinese character. The token group level is labeled as a "phrase/token group" level, where operations are performed on a token group, such as a pinyin item or phrase. The sentence level is labeled as the "sentence" level. Note that the level labels in fig. 2 are not actually displayed in the illustrated IME interface.
In fig. 2, the input "pin yin shu ru fa" includes five pinyin tokens: "pin", "yin", "shu", "ru", and "fa", each of which may represent a pinyin syllable of a Chinese character. As another example, the input "p y shu r fa" also represents five pinyin syllables, where "p", "y", "r" are abbreviations for pinyin syllables. Various combinations of one or more of the five pinyin tokens may be pinyin token groups, which correspond to hanzi-chinese terms.
FIG. 3 is a block diagram illustrating an observed sequence of text entries and a sequence of potential items represented by the observed sequence of text entries. The data illustrated in fig. 3 may be stored in a lattice in the language model. A language model may be used to generate candidate transliterations for an observed text sequence, such as the text sequence "pin yin shu ru fa" in fig. 3, as further described with reference to fig. 21. In the lattice of fig. 3, the most likely candidate transliteration may be selected by traversing different paths through the lattice entries. In particular, some example candidate transliterations include "pinyin input method", "pinyin-factor input method", "frequency-factor input method", and "poverty-inducing book as sent". In the example, the best path, i.e., the most likely candidate transliteration, is the "Pinyin input method". The input is segmented into a subsequence of characters representing items in the target writing system, which can be provided by a language model. The language model may be generated and used using conventional methods.
FIG. 4 is a flow diagram illustrating an example process 400 for providing browsing and editing functions in an input method editor. The process 400 includes dividing 402 a plurality of characters input by a user into one or more tokens. A token is a group of one or more characters. As an example, when a user provides an input of "pinyinshurufa," the characters in the input are divided into five generations of "pin," "yin," "shu," "ru," and "fa," as shown in fig. 2. The process 400 also includes grouping 403 the tokens into one or more token groups. In an example, five character tokens "pin", "yin", "shu", "ru", and "fa" may be grouped into two token groups (also referred to as "phrase tokens") "pinyin" and "shufa".
The process 400 also includes generating 404 one or more boundaries for the token group according to the operation granularity. In some implementations, the one or more boundaries are generated by using a language model to identify most likely transliteration candidates, e.g., transliteration candidates represented by most likely paths through a lattice of the language model. In an example, a boundary demarcated by the token groups "pinyin" and "shurtufa" may be identified. In addition, the boundaries demarcating the tokens "pin" and "yin" and the boundaries demarcating the tokens "shu", "ru", and "fa" can be identified.
The process 400 also includes visually indicating 406 a boundary for the token group in response to receiving an input indicating activation of the trigger. Visually indicating the boundary may include tagging groups of tokens demarcated by the boundary, such as displaying a number or letter next to each group of tokens. The boundaries may also be visually indicated using different colors, patterns, or other visual aspects used to distinguish the token groups.
During browsing and editing of the input, the user may quickly recognize the token group using the visual indicator and navigate directly to the particular token group, e.g., without moving the text cursor through the token group between the particular token group and the current position of the text cursor.
FIG. 5 is a screenshot illustrating an example input method editor interface displaying an input, where different portions of the input are labeled. In fig. 5, the input "pinyinshurufafafeagneng" is a sequence of roman characters used to represent pinyin. Note that the user typically does not enter delimiters (e.g., spaces, "|" characters) to demarcate the boundaries between the roman characters unambiguously.
The IME interface in fig. 5 shows the input version after the input pinyin "pinyinshurufa degongneng" is divided into eight pinyin tokens "pin", "yin", "shu", "ru", "fa", "de", "gong", and "neng". Boundaries, such as agent boundaries, that bound each of the eight pinyin agents to adjacent pinyin agents are identified. In addition, the IME may identify four agent groups, "pinyin", "shuufa", "de", and "gongneng", from the eight pinyin agents. Boundaries, such as agent group boundaries, that bound each of the four agent groups to adjacent pinyin agents are identified. The boundary may be determined from a segmentation identified using a language model.
6-18 are screen shots illustrating example input method editor interfaces and interactions for browsing and editing input. In particular, fig. 6-14 illustrate browsing operations, such as operations performed to move a text cursor directly from one operable unit to another. Fig. 15-18 illustrate editing operations, such as operations to modify an operable unit for execution as a whole.
FIG. 6 illustrates an example IME interface before a trigger event is detected. As an example, a trigger event may be the receipt of a command input from a user indicating that the user intends to activate a function of an operable unit to browse through or edit the input. As an example, the command input may be an activation of a hot key, such as by pressing a control ("CTRL") key. The command input may also be the activation of one or more physical keys, such as keys on a physical keyboard device, or virtual keys, such as visual representations of keys on a display.
When the CTRL key is pressed, a visual indicator that distinguishes the token groups "pinyin", "shurfa", "de", and "gongneng" is displayed on the IME interface. In fig. 7, the token group "pinyin" is labeled with the number "0", the token group "shuufa" is labeled with the number "1", the token group "de" is labeled with the number "2", and the token group "gongneng" is labeled with the number "3".
When the trigger event ends, the visual indicator may be removed from display. As an example, the trigger event may continue during the pressing of the CTRL key and end when the CTRL key is released. As another example, a trigger event may begin when the CTRL key is pressed once and end when the CTRL key is pressed again. In FIG. 8, the trigger event has ended and the IME interface returns to the state as in FIG. 6, for example, where the labels "0", "1", "2", and "3" disappear.
The IME interface in fig. 9 shows the same state as in fig. 6 when the tab is displayed in response to a trigger event. Note that in the user interface, for example, the text cursor of the caret is currently located to the right of the token group "gongneng". By providing a command input, a particular token group may be selected and the text cursor may be simultaneously moved to a position adjacent to the particular token group, e.g., between the particular token group and an adjacent token group occurring before or after the particular token group in the input.
In fig. 10, when the CTRL key and the number key (CTRL + number) are simultaneously pressed, the text cursor is moved to a generator group boundary labeled with a corresponding number. As illustrated in fig. 10, when the CTRL key and the number "2" key are simultaneously pressed, the text cursor is moved to a generator group boundary labeled with "2", for example, at a position immediately to the left of the generator group "de". As illustrated in fig. 10, in some implementations, the visual indicators associated with the token groups that occurred after the selected, particular token group in the input are removed from the display. In fig. 10, labels "2" and "3" have been removed from the display.
In some implementations that display an IME interface on a touch screen display, the visual indicator may be selected by touching a graphical representation of the visual indicator on the touch screen display.
In some embodiments, visual attributes (e.g., color, size) of the token groups occurring in the input after the particular token group selected are modified to indicate temporary removal of those token groups from consideration for determining the selectable alternatives. Removal is considered temporary because these token groups can be added back to consideration as part of the input when the trigger event ends. When the trigger event ends, the user is more likely to have entered portions of the completed edit that occurred before these token groups.
In FIG. 10, the font color of the token groups "de" and "gong neng" have been modified, e.g., changed to a lighter color, to indicate that "de gong neng" is not considered in the current state of the IME interface. Thus, the IME determines and provides the optional alternatives for displaying the portion of the input that does not include "gong neng". Note that in fig. 9, the first alternative "pinyin input method's public energy" (e.g., "p ī n y ī n sh r at { hacha } g ō ng n g") for the input "pin yin shu rufa gong" is not the same as the first alternative "pinyin input method" (e.g., p ī n y ī n sh r at { hacha } for the input portion considered in fig. 10, that is, "pin yin shu ru } at { hacha }) for the input.
In FIG. 11, the state of the IME user interface is the same as in FIG. 9. Again, note that in the user interface, the text cursor is located to the right of the token group "gongneng". In some embodiments, the text cursor is moved directly from one agent group boundary to another agent group boundary by providing directional input. For example, in fig. 12, when the CTRL key and the LEFT key (e.g., the "←" cursor key) are pressed simultaneously, the text cursor is moved from the position shown in fig. 11 to the position shown in fig. 12, i.e., the position of the first-generation-group boundary to the LEFT of the original position of the text cursor.
13-14 illustrate how directional input may be used to move a cursor directly from one surrogate boundary to another. In an example, CTRL + RIGHT (e.g., CTRL + ←) moves the text cursor to the position of the first set of tokens to the RIGHT of the original position of the text cursor, i.e., from a position immediately to the RIGHT of the token "de" to a position immediately to the RIGHT of the token "gong". Other browsing operations (e.g., moving the text cursor in other directions (e.g., up, down)) are possible.
In FIGS. 15-16, an editing operation, such as a backspace operation, is performed on the token. Note that in fig. 15, the text cursor is positioned to the right of the token "fa" in the user interface. In fig. 18, when the CTRL key and the BACKSPACE key are simultaneously pressed, the token, that is, "fa", located immediately to the left of the text cursor is deleted.
In fig. 17-18, an editing operation, such as a deletion operation, is performed for the token. Note that in fig. 17, the text cursor is located immediately to the left of the token "fa" in the user interface. In fig. 18, when the CTRL key and the DELETE key ("DEL" key) are simultaneously pressed, the token located immediately to the right of the text cursor, that is, "fa" is deleted. Other editing operations (e.g., copy, paste, replace) are possible.
The above description describes particular embodiments. Additional description of the general features of these and other embodiments follows.
In some implementations, an input sequence of characters in a first writing system is received. For example, the first writing system may be latin. In fig. 5, an example of a character input sequence is "pinyinshurufafeagenning".
In the character input sequence, one or more first subsequences of consecutive characters are identified. Each sub-sequence representing a syllable in a different second writing system. The second, different writing system may be chinese pinyin, where syllables correspond to hanzi characters. In fig. 5, examples of the first subsequence are "pin", "yin", "shu", "ru", "fa", "de", "gong", and "neng".
In the character input sequence, one or more second subsequences are identified. Each second subsequence includes one or more consecutive first subsequences and represents items in a different second writing system. In fig. 5, the example second sub-sequence comprises "pinyin" (comprising consecutive first sub-sequences "pin" and "yin"), "shufa" (comprising consecutive first sub-sequences "shu", "ru", and "fa"), "de", and "gongneng" (comprising consecutive first sub-sequences "gong" and "neng").
One or more boundaries delimiting the one or more second subsequences are determined. In fig. 5, an example of a boundary with respect to the second subsequence is a token group boundary between "pinyin" and "shurtufa".
One or more selectable indicators are generated for display in the user interface. Each of the one or more selectable indicators identifies a respective second subsequence bounded by one or more boundaries. In fig. 7, example optional indicators include tags "0", "1", "2", and "3" identifying the four second subsequences "pinyin", "shuufa", "de", and "gongneng".
In some implementations, one or more first input candidates in the third writing system are determined from the entire character input sequence and displayed as selectable alternatives to the character input sequence. For example, the third writing system may be a chinese character, katakana, or Hangul. In fig. 5, an exemplary first input candidate "function of pinyin input method", "pinyin input", "pinyin", and "pin" is generated and displayed on the user interface for "pinyinshurufadegongneng".
In some implementations, one or more second input candidates in the third writing system are determined from the third sub-sequence of characters when the user selection of the first selectable indicator is received. The third subsequence includes all second subsequences in the following order: the order in which all second sub-sequences up to the particular second sub-sequence identified by the first selectable indicator appear in the input sequence. As an example, in fig. 10, when the user selects the first selectable indicator "2", the second input candidate "pinyin input method" is determined from the third subsequence "pinyin shufa" including the second subsequence "pinyin" and "shuufa".
One or more second input candidates are displayed as selectable alternatives to the third sub-sequence of characters instead of the first input candidate. As an example, in fig. 10, the second input candidate "pinyin input method" is determined from "pin yin shu rufa", and is displayed as an alternative to the third character subsequence, instead of the first input candidate "pinyin input method function" of "pin yin shu rufa de gong ning", as shown in fig. 9.
In some implementations, one or more second input candidates in a third writing system are determined from a third sub-sequence of characters after receiving user input to move a text cursor to a particular first sub-sequence. The third subsequence comprises all the complete second subsequences in the following order: the order in which all complete second sub-sequences up to a particular first sub-sequence appear in the input sequence is followed by the order in which all first sub-sequences up to and including the particular first sub-sequence appear in the input sequence. In fig. 14, when the user moves the text cursor to "neng", the second input candidate "of pinyin input method" is determined from "pinyin shuufa de gong".
One or more second input candidates are displayed as selectable alternatives to the third sub-sequence of characters instead of the first input candidate. As an example, in fig. 12, the second input candidate "pinyin input method" of "pin yin shu ru fa de" instead of the first input candidate "pinyin input method function" of "pin yin shu ru fa de gongneng" is displayed as an optional candidate for the third character subsequence.
Fig. 19 is a flow diagram illustrating another example process 1900 for providing browsing and editing functions in an input method editor. Process 1900 includes receiving 1902 an input sequence of characters in a first writing system. The process 1900 also includes identifying 1903 one or more first subsequences of consecutive characters in the character input sequence. Each sub-sequence representing a syllable in a different second writing system. The process 1900 also includes identifying 1904 one or more second subsequences in the character input sequence. Each second subsequence includes one or more consecutive first subsequences and represents items in a different second writing system.
The process 1900 also includes determining 1905 one or more boundaries that bound the one or more second subsequences. The process 1900 also includes generating 1906 one or more selectable indicators for display in the user interface. Each of the one or more selectable indicators identifies a respective second subsequence bounded by one or more boundaries.
FIG. 20 is a block diagram of an example system 2000 that may be utilized to implement the systems and methods described herein. The example system 2000 may be implemented, for example, in a computer device, such as a personal computer device, or other electronic device, such as a mobile phone, mobile communication device, Personal Digital Assistant (PDA), Global Positioning System (GPS) navigation device, and so forth.
The example system 2000 includes a processing device 2002, a first data store 2004, a second data store 2006, an input device 2008, an output device 2010, and a network interface 2012. Data communications between the components 2002, 2004, 2006, 2008, 2010, and 2012 can be established and controlled using a bus system 2014 that includes, for example, a data bus and a motherboard. Other system architectures may also be used.
The processing device 2002 may, for example, include one or more microprocessors. The first data store 2004 may, for example, include a random access memory storage device, such as dynamic random access memory, or other type of computer-readable medium memory device. The second data store 2006 can include, for example, one or more hard drives, flash and/or read-only memories, or other types of computer-readable medium memory devices.
Example input devices 2008 may include a keyboard, mouse, stylus, etc., and example output devices 2010 may include a display device, audio device, etc. Network interface 2012 may include, for example, wired or wireless network devices operable to communicate data to and from network 2016. Network 2016 may include one or more Local Area Networks (LANs), Wide Area Networks (WANs), such as the internet, wireless networks, such as cellular networks, or a combination of all of the above.
In some implementations, the system 2000 can include Input Method Editor (IME) code 2001 from a data store, such as data store 2006. The input method editor code 2001 may include instructions that, when executed, cause the processing device 2002 to perform input method editing functions. The input method editor code 2001 may include, for example, interpreted instructions such as script instructions, e.g., JavaScript or ECMAScript instructions, that may be executed in a web browser environment. Other embodiments, such as a stand-alone application, applet, plug-in module, etc., may also be used for use in a user interface, such as a user interface that displays user input received using a keypad map for a mobile device or a keyboard map for a mobile device or personal computer.
Execution of the input method editor code 2001 generates or launches an Input Method Editor Instance (IMEI) 2003. The input method editor instance 2003 facilitates processing of one or more input methods at the system 2000 during which the system 2000 can receive input for characters or symbols, such as roman characters representing pinyin. For example, a user may input pinyin input to identify a hanzi item using one or more of the input devices 2008 (e.g., a keyboard such as a keyboard for roman scripts, a stylus used with a handwriting recognition engine, etc.). In some cases, a hanzi item consists of more than one pinyin input.
The first data store 2004 and/or the second data store 2006 can store the association of the inputs. Based on the user input, the input method editor instance 2003 may use information in the data store 2004 and/or the data store 2006 to identify one or more candidate selections represented by the input. In some implementations, if more than one candidate selection is identified, the candidate selections are displayed on the output device 2010. Using the input device 2008, the user may select, for example, a chinese character item that the user desires to enter from the candidate selections.
In some embodiments, the input method editor instance 2003 on the system 2000 may receive one or more pinyin inputs and convert the inputs into hanzi items. The input method editor instance 2003 may represent a hanzi item, for example, using a combination of pinyin syllables (e.g., roman characters) received from keystrokes. Each roman character may, for example, correspond to a key in a keyboard for roman letters. Using a pinyin input method editor, a user may input a hanzi item by using an input that includes one or more pinyin syllables representing the pronunciation of the hanzi item. However, input methods for other languages and writing systems may also be facilitated.
In some embodiments, logographic script may also be edited using a remote computing system 2018 having access to system 2000. For example, the system 2000 may be a server that provides logographic text editing capabilities via the network 2016. In one example, a user may edit logographic text stored in data store 2004 and/or data store 2006 using a remote computing system, such as a client computer. The system 2000 may, for example, select a character and receive input from a user through the network interface 2012. The processing device 2002 may, for example, identify one or more characters that are adjacent to the selected character, and identify one or more candidate selections based on the received input and the adjacent characters. The system 2000 may transmit the data communication including the candidate selection back to the remote computing system.
FIG. 21 includes a block diagram of example software that may be utilized to implement the input method editor (e.g., IMEI 2003) in FIG. 20. The system 2100 includes a user interface 2102 and software 2104. The user 2106 may access the system 2100 through the user interface 2102. The software 2104 includes applications 2105, an IME engine 2106, an Operating System (OS) 2107, a language model 2108, and a detection engine 2110. The operating system 2107 is specialized software that can provide a user interface 2102 between software 2104 (e.g., applications 2105 and IME engine 2106) and users 2106.
As shown in fig. 21, the language model 2108 is independent of the IME engine 2106. Specifically, language model 2108 is included within software 2104 as a separate software component. Other embodiments are possible. For example, language model 2108 may be located at a remote location (e.g., at remote system 118 of fig. 1). As another example, the language model 2108 may be included within the IME engine 2106.
The language model 2108 may define one or more language submodels, such as a Japanese submodel, a Chinese submodel, and so forth. Each language sub-model may, for example, define a particular set of rules, e.g., language-specific grammars, sets of phrases, non-predicate verbs, etc., that may be used to determine a user's likely intent when entering a set of inputs (e.g., inputs for generating candidates for translation, transliteration, or other types of phonetic representations). Each language submodel may also include a user history for a particular user, such as a dictionary of words and phrases that are frequently used by the particular user.
The detection engine 2110 includes an input module 2112 and a timing module 2114. The input module 2112 can, for example, receive input (e.g., keystrokes representing characters in a first writing system) for a particular application 2105 and send the received input to the IME engine 2106. In some implementations, the detection engine 2110 is a component of the IME engine 2106.
The detection engine 2110 may detect an input (e.g., a pinyin input including roman characters) in the first writing system and determine whether to send the input to the IME engine 2106. The IME engine 2106 can be implemented, for example, using the input method editor code 101 and associated data stores 104 and 106, and provides output candidates (e.g., vocabulary items such as kanji items) in the second writing system to an interface (e.g., the user interface 2102) when input (e.g., glyphs such as roman characters) is detected or based on a predetermined delay from the timing module 2114.
The components of system 2100 may be communicatively coupled to one or more of each other. Although the components identified above are described as separate or distinct, one or more of the components may be combined into a single process or routine. The functional descriptions provided herein, including the separation of responsibility for different functions, are by way of example. Other storage architectures may also be used. In particular, other groupings or other divisions of functional responsibility may be made as necessary or depending on design preferences. For example, IME engine 2106 can perform the functions of detection engine 2110. As another example, the input module 2112 and the timing module 2114 may be combined into a single module.
Embodiments of the subject matter and the functional operations described in this specification can be implemented in digital electronic circuitry, or in computer software, firmware, or hardware, including the structures disclosed in this specification and their structural equivalents, or in combinations of one or more of them. Embodiments of the subject matter described in this specification can be implemented as one or more computer program products, i.e., one or more modules of computer program instructions, encoded on a tangible program carrier for execution by, or to control the operation of, data processing apparatus. The tangible program carrier may be a computer readable medium. The computer readable medium can be a machine-readable storage device, a machine-readable storage substrate, a memory device, or a combination of one or more of the above.
The term "data processing apparatus" encompasses all apparatus, devices, and machines for processing data, including by way of example: a programmable processor, a computer, or multiple processors or computers. The apparatus can include, in addition to hardware, code that creates an execution environment for the computer program in question, e.g., code that constitutes processor firmware, a protocol stack, a database management system, an operating system, or a combination of one or more of the above.
A computer program, also known as a program, software application, script, or code, can be written in any form of programming language, including compiled or interpreted languages, or declarative or procedural languages, and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, or other unit suitable for use in a computing environment. A computer program does not necessarily correspond to a file in a file system. A program can be stored in a file that holds other programs or data, such as a portion of one or more scripts stored in a markup language document, a single file dedicated to the program in question, or multiple coordinated files, such as files that store one or more modules, sub programs, or portions of code. A computer program can be deployed to be executed on one computer or on multiple computers that are located at one site or distributed across multiple sites and interconnected by a communication network.
The processes and logic flows described in this specification can be performed by one or more programmable processors executing one or more computer programs to perform functions by operating on input data and generating output. The processes and logic flows can also be performed by, and apparatus can also be implemented as, special purpose logic circuitry, e.g., an FPGA (field programmable gate array) or an ASIC (application-specific integrated circuit).
Processors suitable for executing the computer program include, by way of example: both general and special purpose microprocessors, and any one or more processors of any kind of digital computer. Generally, a processor will receive instructions and data from a read-only memory or a random access memory or both. The essential elements of a computer are a processor for executing instructions and one or more memory devices for storing instructions and data. Generally, a computer will also include, or be operatively coupled to receive data from or transfer data to, or both, one or more mass storage devices for storing data, e.g., magnetic, magneto-optical disks, or optical disks. However, a computer need not have such devices. Furthermore, the computer may be embedded in another device, e.g., a mobile telephone, a Personal Digital Assistant (PDA), a mobile audio or video player, a game console, a Global Positioning System (GPS) receiver, to name just a few.
Computer-readable media suitable for storing computer program instructions and data include all forms of non-volatile memory, media and memory devices, including by way of example: semiconductor memory devices such as EPROM, EEPROM, and flash memory devices; magnetic disks, such as internal hard disks or removable disks; magneto-optical disks; and CD-ROM and DVD-ROM disks. The processor and the memory can be supplemented by, or incorporated in, special purpose logic circuitry.
To provide for interaction with a user, embodiments of the subject matter described in this specification can be implemented on a computer having: a display device for displaying information to a user, such as a CRT (cathode ray tube) or LCD (liquid crystal display) monitor; and a keyboard and a pointing device, such as a mouse or a trackball, by which a user can provide input to the computer. Other types of devices may also be used to provide for interaction with a user; for example, feedback provided to the user can be any form of sensory feedback, such as visual feedback, auditory feedback, or tactile feedback; and input from the user may be received in any form, including acoustic, speech, or tactile input.
Embodiments of the subject matter described in this specification can be implemented in a computing system that includes: a back-end component, e.g., as a data server; or a middleware component, such as an application server; or a front-end component, such as a client computer having a graphical user interface or a Web browser through which a user can interact with an embodiment of the subject matter described in this specification; or any combination of one or more such back-end, middleware, or front-end components. The components of the system can be interconnected by any form or medium of digital data communication, e.g., a communication network. Examples of communication networks include a local area network ("LAN") and a wide area network ("WAN"), such as the Internet.
The computing system may include clients and servers. A client and server are generally remote from each other and typically interact through a communication network. The relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other.
While this specification contains many specific implementation details, these should not be construed as limitations on the scope of any implementations or of what may be claimed, but rather as descriptions of features that may be specific to particular embodiments of particular implementations. Certain features that are described in this specification in the context of separate embodiments can also be implemented in combination in a single embodiment. Conversely, various features that are described in the context of a single embodiment can also be implemented in multiple embodiments separately or in any suitable subcombination. Moreover, although features may be described above as acting in certain combinations and even initially claimed as such, one or more features from a claimed combination can in some cases be excised from the combination, and the claimed combination may be directed to a subcombination or variation of a subcombination.
Similarly, while operations are depicted in the drawings in a particular order, this should not be understood as requiring that such operations be performed in the particular order shown or in sequential order, or that all illustrated operations be performed, to achieve desirable results. In some cases, multitasking and parallel processing may be advantageous. Moreover, the separation of various system components in the embodiments described above should not be understood as requiring such separation in all embodiments, but rather it should be understood that the program components and systems can generally be integrated together in a single software product or packaged into multiple software products.
Specific embodiments of the subject matter described in this specification have been described. Other embodiments are within the scope of the following claims. For example, the actions recited in the claims can be performed in a different order and still achieve desirable results. As one example, the processes depicted in the accompanying figures do not necessarily require the particular order shown, or sequential order, to achieve desirable results. In some embodiments, multitasking and parallel processing may be advantageous.