Imaginez que vous donnez à quelqu'un une carte avec le code "5SBDO0" dessus.
Dans certaines polices, la lettre "S" est difficile à distinguer visuellement du chiffre cinq (comme pour le chiffre zéro et la lettre "O").
En lisant le code à haute voix, il peut être difficile de distinguer «B» de «D», ce qui nécessite de dire «B comme chez le garçon», «D comme chez le chien» ou d'utiliser un « alphabet phonétique » à la place.
Quel est le plus grand sous-ensemble de lettres et de chiffres qui, dans la plupart des cas, auront à la fois un aspect visuel sans ambiguïté et un son sans ambiguïté lorsqu'ils seront lus à haute voix?
Contexte:
Nous voulons générer une chaîne courte qui peut encoder autant de valeurs que possible tout en étant facile à communiquer.
Imaginez que vous ayez une chaîne de 6 caractères, "123456". Dans la base 10, cela peut coder 10 ^ 6 valeurs.
Dans l'hex "1B23DF", vous pouvez encoder 16 ^ 6 valeurs dans le même nombre de caractères, mais cela peut sembler ambigu lors de la lecture à haute voix. ("B" contre "D")
De même pour toute chaîne de N caractères, vous obtenez (taille de l'alphabet) ^ N valeurs.
La chaîne est limitée à une longueur d'environ six caractères, en raison de vouloir s'adapter facilement à la capacité de la mémoire de travail humaine .
Ainsi, pour trouver le nombre maximum de valeurs que nous pouvons encoder, nous devons trouver le plus grand ensemble non ambigu de lettres / chiffres. Il n'y a aucune raison pour laquelle nous ne pouvons pas considérer les lettres GZ et une ponctuation courante, mais je ne veux pas avoir à comparer manuellement par paires "est-ce que G sonne comme A?", "Est-ce que G sonne comme B?", "Ne G sonne comme C "moi-même. Comme nous le savons, ce serait un travail linguistique O (n ^ 2) à faire =) ...
Réponses:
Vous devez partitionner l'ensemble des caractères alphanumériques en groupes par similitude visuelle et choisir un représentant «le plus emblématique» de chaque groupe. Ceci est quelque peu subjectif, bien que vous puissiez y exécuter des tests utilisateur. Les choix que vous faites varient également selon que les chiffres seront imprimés ou manuscrits. Par exemple:
{ O , 0 , Q , D }
{ I , L , 1 }
{ B , 8 }
{ Z , 2 }
{ S , 5 }
{ 7 , T }
{ U , V , Y }
De même, partitionnez les caractères par la similitude phonétique des prononciations de leurs noms:
{ A [ʔeɪ], 8 [ʔeɪ (ʔ / t)]}
= commence par [ʔeɪ]
{ P [pi:], B [bi:], V [vi:], D [di:], T [ti:], E [ʔi:]}
= stop / fricative + [i:]
{ G [ʤi:], C [si:], Z [zi:], 3 [θɹi:]}
= fricative / affricate (cluster) + [i:]
{ M [ɛm], N [ɛn]}
= [ɛ] + nasal
{ S [ɛs], F [ɛf], X [ɛks]}
= [ɛ] + fricative / affricate
{ I [ʔaɪ], Y [waɪ], 5 [faɪv], 9 [naɪn]}
= consonne + [aɪ] + (consonne)
{ Q [kjʉ:], U [jʉ:], 2 [t (j) ʉ:]}
= consonne + [(j) ʉ:]
Ce ne sont bien sûr pas les seules partitions possibles, juste ce qui me vient à l'esprit en ce moment. Quoi qu'il en soit, ils devraient être suffisants pour vous permettre de commencer les tests. De plus, ceux-ci ne sont appuyés par aucune source professionnelle - je ne cite que mes antécédents d'amateur en typographie et phonétique.
la source
Vous pouvez utiliser Mechanical Turk pour que les personnes réelles évaluent les 26 ^ 2 paires de lettres pour la similitude sonore et visuelle. L'avantage est que vous pouvez même obtenir des données pour différentes langues natives de cette façon.
la source
Pour l'anglais, les algorithmes soundex et Metaphone codent les sons ambigus. Soundex est probablement trop simple, mais Metaphone intègre quelques bons points. Voulez-vous la séquence "OU"? Cela pourrait être prononcé de plusieurs façons, comme le montre cette phrase;)
la source
La réponse de Jon Purdy ci-dessus semble la plus correcte. Pour des raisons pratiques, j'essaie
z-base-32
, un codage base32 non standard conçu avec la communicabilité à l'esprit. Il semble fonctionnel, mais pas idéal - par exemple, ils ne se sont pas explicitement concentrés sur la désambiguïsation parlée.http://philzimmermann.com/docs/human-oriented-base-32-encoding.txt
http://pypi.python.org/pypi/zbase32/
la source