Skip to content

How to fix multi-tap

The problem

Let’s consider the classical ITU-T 12-key phone keypad:

  1 2 abc 3 def
4 ghi 5 jkl 6 mno
7pqrs
8 tuv 9 wxyz
  *
  0   #

There are two main ways to enter text using it (for example when writing an SMS): multi-tap, and predictive text input.

Predictive text has its own set of advantages and disadvantages, but I won’t discuss it here.

In multi-tap you push a button multiple times to select a letter from a given position — for example, to type ‘c’ you push the button containing the letters ‘abc’ three times. Multi-tap is popular and easy to understand, yet it’s very inefficient. The UTI-T letter layout (i.e. buttons with ‘abc’, ‘def’, and so no) is a lousy one for text input, and the explanation is historical: in the beginning, the phones had letters next to the numbers in order to allow to dial phone numbers that were presented as words (as in: Call 1-800-FLOWERS or 1-800-GOT-JUNK). So initially, the task was not to enter text, but to dial phone numbers presented as text. And it turns out that the letter layout that was chosen for that task is not at all efficient for text input.

The fix

First thing, let’s make use of the “1″ key — put letters on it to un-crowd the 4-letter keys (e.g. “7″ has “pqrs”) . We still have the three bottom keys (*, 0, #) to put space, symbols and digits switches.

Letter Frequency

We also use the fact that in a given language, the different letters are not equally important — some letters are used much more frequently than others. For example, in English, the top-9 letters (ETAOINSHR) account for 70% of letters used, while the bottom-9 letters (YPBVKJXQZ) account for less than 8%. The obvious thing to do is to place the most-frequently-used letters on the first position on the keys, so that they are easier to type.

One may observe that the letter frequency is language-specific. While this is obviously true, it also happens that there is a large amount of similarity in letter frequency among Latin-alphabet languages from as diverse families as Germanic (e.g. German, Dutch, English), Latin (e.g. French, Spanish, Romanian) and Slavic (e.g. Polish, Czech). Surprisingly, there is a great deal of overlap of the most frequent letters in all Latin-alphabet languages. This means that using letter frequency we can come up with a layout which is good not only for English, but for many languages (a similar situation exists with the Dvorak keyboard layout).

For example, doing an informal frequency-weighting between English, French, German, Spanish, and secondarily Polish and Romanian, I came up with these top-9 letters (in order): EATINSORD. What’s to note is that H, which is rather frequent in English but rare in all the other languages, has been dropped in favour of D, which is frequent in many languages, and not too bad in English either.

So, based on frequency, we categorize the 26 letters of the Latin alphabet in 3 groups: the top-9 which will be placed on the first position, the middle-9 which are placed on the second position, and the bottom-8 which are on the third position on the keys. These groups are:

Most frequent e a t i n s o r d
Middle h l u c m w g f p
Least frequent b y v k j x q z

Bigram Frequency

With multi-tap there is a problem when two successive letters (in the text) happen to be on the same key. In this situation usually the user has to makes a small pause before advancing to the next letter.

For example, to type “ba”, you push twice the “ABC” key, make a pause, and push once more the same key.

This pause is annoying and slows down typing, so it’s good to reduce the number of cases when it’s needed. This is accomplished by putting together on the same key letters that appear seldom in succession. For this we use the bigram frequency, which is the frequency (in a language) of two-letter pairs.

An additional optimization is to eliminate the ‘rotation’ when multi-tapping the same key. Once the last letter on a key is selected, and the user pushes once more the same key, the typing automatically moves to the next character instead of ‘wrapping around’ to the first letter on the key in a circular fashion. The benefit is that after the last key on a button there’s no need for the same-key pause.

Let’s consider a key with 3 letters, let’s name them A,B,C. They are on the key in this order, A-B-C. In this situation, the frequency of the same-key pause for this key is given by: f(wait)=f(AA)+f(AB)+f(AC)+f(BB)+f(BC), where f(AB) denotes the frequency of the bigram AB.

On each key we choose one letter from each of the three frequency categories (most-frequent, middle, least-frequent), as to minimize the same-key wait based of linguistic bigram frequency.

Physical placement

Once we have the groups of letters for each button, we attempt to optimize the physical placement to increase the ergonomy while typing. There are many factors involved here (e.g. how does the user type, one hand or two hands? thumb or index? etc). I attempted to minimize the amount of finger movement between successive letters (because it takes a longer time to move the finger a longer distance) — again by using bigram frequency. Also, I tried to make the layout memorable (the first letters form pronounceable words on rows), and to place the most frequent letters (EAT) on the easiest to reach keys.

The Layout

A tentative layout resulting from these considerations is below. While it may still benefit from some improvements, it’s already much better than the classical UTI-T layout.

Afq Tmk Iuy
Sl Ewj Rhx
Npb
Ogz Dcv
  *
space   #

I call this layout ATI SER NOD, from the first-letter (the most frequent one) read by rows.

{ 4 } Comments

  1. Martin | 2007-09-17 at 19:35 | Permalink

    I like the proposal, but would change “U” with “M” and “Y” with “X”. Rational: In some (south and middle) European languages, accented variants of letters exist, e.g. vocals with accent (grave, acute, circumflex, dieresis), a and o with even more variants like “ae” and “o with /”, c with cedilla, n with tilde, sharp s, y with accent grave or dieresis. To avoid “over-assigned” keys, just don’t put two vocals or one of c, n, s, y on the same key. For slavic languages things are presumably much more complicated, but at least three of the six official UNO languages (english, french, spanish) would benefit.

  2. mihai | 2007-09-20 at 13:35 | Permalink

    Ok, I think I understand. The goal of the change is to get “I” and “U” (vocals) on different keys, and to get “I” and “Y” (both ‘accentable’) on different keys? I’ll think of it, and make some bigram cost calculation to see what would be the impact on English.

    One problem is that, while I found single-letter frequency for a few languages (French, Spanish, German, Polish, Romanian), I have bigram-frequency only for English, and thus the second letter was optimized for English only.

    But one important thing is that I don’t want to put ‘accented’ characters after the normal ones on the same key (as it is now in multi-tap), because this slows down non-accented typing considerably. I would rather put ‘modifiers’ (such as: cedilla, grave, acute, etc) on the “*” key, and a special letter is typed by typing the normal letter, followed by the modifier.

  3. amras666 | 2008-11-20 at 09:12 | Permalink

    Got here by accident (via menstral link) but I really enjoy your blog. I know I should rather comment on latest posts, but I would rather ask you personally – what schema would you propose specificaly for polish keyboard?

    I am willing to modify firmware in order to speed up my text input on Nokia phone – and I find your idea extremely relevant to my interests.

  4. Neil Harding | 2010-02-01 at 18:33 | Permalink

    ASTEROID is a reasonably well know English word that uses 8 of the 9 initial letters that you’ve picked so would be a good name to call the system. The 0 key should be space, dot, comma (and # to switch between numeric / text) so you can do “call me on 123 456789″ and * could switch from abc,Abc,accented

Post a Comment

Your email is never published nor shared. Required fields are marked *