Typos are common experiences of BlackBerry users. After all, the keys are small, and many of us type fast and with a sense of urgency as well.
Many of these typos, then, happen because of the limitations of BlackBerry keyboards. The keys are close together- a reality that doesn't play well with fast BlackBerry typing.
This goes way beyond SureType. You'll be able to tell this by reading the Abstract:
The invention provides a system and a method of processing keystrokes being entered in an electronic device is provided. The method comprises: monitoring for activation of two or more keys on the device; determining whether a keystroke conflict occurs from the activation of the keys; and if a conflict has occurred, then executing further steps.
The further steps include: identifying a selected key from the activated keys; generating a character associated with the selected key; and ignoring activation of any keys other than the selected key. The system comprises an electronic device with a display, a keypad and modules which perform the steps of the method as noted.
The way this works is really cool. The description is a bit dense, but it will all make sense after I show you Figure 2 and its relevant text.
There are at least two criteria which are evaluated to determine whether a keystroke conflict has occurred. One criterion is whether the two keystrokes are physically adjacent to each other. In a standard QWERTY keyboard, if a user types a "d" and an "1" in quick succession, this may not represent a keystroke conflict. However, if the user types a "d" and an "s" in quick succession, this may represent a conflict. Another criterion is the length of time between keystrokes.
If the user types a "d" followed by an "s" after a certain window of time, this may not represent a conflict. However, if those two keys are activated within that period of time, a conflict is produced. It will be appreciated that the above noted window of time may be any length of time, but typically, the size of the window would be a fraction of a second, e.g. 0.9, 0.8, 0.5, 0.2, 0.1, or 0.05 seconds.
The size of the window may depend on the time resolution provided by elements in device 10, including microprocessor 18 and its associated clocking rate. It will be appreciated that an embodiment can set parameters as to what constitutes a keystroke conflict using either criterion, a combination of the criteria or additional criteria.
Details are now provided on how keystroke conflicts are detected and resolved.
First, some detail is provided on general mechanics of word processing by device 10. When alphanumeric text is being entered into device 10 by the user through keypad 24, it is entered serially, character by character, through input of a user as the user types individual characters on keypad 24.
Following grammar conventions, the text typically represents a series of "words" separated by opening and closing delimiters. Each "word" may be a collection of alphabetic characters, numeric digits, alphanumeric characters, or alphanumeric and special characters. For example, a word may be "dog", "CAT", "M5K1E6", "555-1212", "-$123.45", "PassWord12345".
The characters may be part of an ASCII character set and other specially defined characters. A delimiter may comprise a white space character, a punctuation mark character (e.g. . , ; ! - etc.), a "return" character, multiple consecutive delimiters and/or any other characters designed by the embodiment. In some contexts, a delimiter may be considered to be part of a word (e.g. in a telephone number, the word "555-1212" may represent one word, with the delimiter "-" therein).
As a word is being entered and as each character is being entered on keypad 24, each character is generated and displayed on display 14. However, keystroke arbitrator 130G tracks and builds each "word" as it is being entered.
For example, consider the text string: "Today's meeting about kits is at 12:30 PM; and use the password ERCAS34#22" which is being entered into the body of an email in application 130E.
The parsed words in the text string are: Today's meeting about kits is at 12:30 PM and use the password ERCAS34#22
The embodiment stores in a buffer, such as in memory RAM 118, new words as they are being entered. The buffer also may or may not also keep previously generated words. A parsing algorithm processes the entered characters and recognizes relevant delimiters. For example, when the embodiment recognizes that a delimiter has been entered, when the first non-delimiter character is subsequently entered, it will consider that a new word is being entered.
As such, for the word "kits", when the "space" character preceding the "k" is entered, the embodiment has a word building module that recognizes that a new word is being entered and builds the new word as each successive character is entered until a closing delimiter is entered. As such, the new word builds from "k" to "ki" to "kits". It will be appreciated that parsing and word building algorithms may be provided as a separate application or as part of another application in device 10.
When the conflicting keystrokes are detected (which may be done by arbitrator 130G), the word building module (which may be provided in arbitrator 130G) builds two (or more) alternative words using each conflicting keystroke (e.g. "kits" and "kita"), then arbitrator 130G builds a message providing text strings of all alternatives and sends it to dictionary query and maintenance module 130H (herein generally referred to as dictionary module 130H).
Alternatively, the words may be provided in separate messages. It will then wait for a response message from dictionary module 130H to determine a next step.
Dictionary module 130H is an application which preferably operates in the background in device 10. Based on requests in messages received from arbitrator 130G, it generates database queries to check the correctness of the spelling of alternative words.
The alternative words may be composed of alphabetic characters, alphanumeric characters or alphanumeric and special characters. The queries are provided to dictionary 132 for its entries. Query processing may be implemented using known query systems, such as an SQL engine.
Based on the results provided from the queries, the SQL engine provides arbitrator 130G with the results of the queries in one or more responding messages. The results indicates whether there are or are not entries in the dictionary 132 for any alternative words and selection data (including any frequency counts and rankings) associated with any matching entries.
Dictionary module 130H also selectively provides data updates and new entries to dictionary 132. These updates and new entries may be provided through appropriate query commands, such as the "add" and "modify" SQL commands. These commands may be built and asserted through a database insertion/modification module in dictionary module 130H.
Dictionary 132 is the database which is accessed by the queries generated by dictionary module 130H. It contains a list of words, alphanumeric text and associated selection data (such as frequency counts) which provides additional selection information to arbitrator 130G. Dictionary 132 may also store alphanumeric strings such as postal codes, numeric strings such as telephone numbers and other alphanumeric phrases which may be entered as words into device 10.
When arbitrator 130G receives the response message(s) from dictionary module 130H, it analyses the results to select an appropriate word from the alternative words and then processes the associated selected keystroke between the two conflicting keystrokes and ignores the keystroke not selected.
If more than two conflicting keystrokes are identified, then the arbitrator can process each keystroke or select a subset of keystrokes to process. Further, if a keystroke can have multiple possible values (e.g. a key can be either one of n different assignments depending on the current context of words or text being entered), then one or more of the possible values can be processed.
A user accessible configuration application 130 provides a GUI on device 10 displayed on display 14 which allows the user to set certain operating parameters of activation module 130F. Any configuration data provided through the GUI is provided by configuration application 130 to activation module 130F which can then update its operating parameters accordingly.
One parameter may selectively disable the keystroke conflict resolution feature entirely.
Another parameter may set the size of the time window which marks two keystrokes as being activated simultaneously or nearly simultaneously. Another parameter may set how the keystroke conflict resolution feature makes a selection. For example, arbitrator 130G may utilize data provided from dictionary module 130H, timing data, other activation data for the keystroke provided by activation module 130F or any combination such data.
For example, a keystroke may be selected by determining which keystroke was activated first, was activated the longest, had the greater activation pressure applied or a combination of these parameters. It will be appreciated that a combination of any of the parameters may be used, in parallel or in stages, to select a keystroke for activa