Stellen Sie sich vor, Sie geben jemandem eine Karte mit dem Code "5SBDO0".
In einigen Schriftarten ist der Buchstabe "S" visuell schwer von der Zahl fünf zu unterscheiden (wie bei der Zahl Null und dem Buchstaben "O").
Wenn Sie den Code laut vorlesen, ist es möglicherweise schwierig, "B" von "D" zu unterscheiden. Dazu müssen Sie "B" wie bei einem Jungen, "D wie bei einem Hund" oder stattdessen ein " phonetisches Alphabet " verwenden.
Was ist die größte Untergruppe von Buchstaben und Zahlen, die in den meisten Fällen visuell eindeutig aussehen und beim Vorlesen eindeutig klingen?
Hintergrund:
Wir möchten eine kurze Zeichenfolge generieren, die so viele Werte wie möglich codieren kann und dennoch einfach zu kommunizieren ist.
Stellen Sie sich vor, Sie haben eine 6-stellige Zeichenfolge "123456". In der Basis 10 kann dies 10 ^ 6 Werte codieren .
In hex "1B23DF" können Sie 16 ^ 6-Werte in der gleichen Anzahl von Zeichen codieren , dies kann jedoch beim Vorlesen mehrdeutig klingen. ("B" gegen "D")
Ebenso erhalten Sie für eine beliebige Folge von N Zeichen (Alphabetgröße) ^ N Werte.
Die Zeichenfolge ist auf eine Länge von ungefähr sechs Zeichen begrenzt, da sie leicht in die Kapazität des menschlichen Arbeitsgedächtnisses passen soll .
Um die maximale Anzahl von Werten zu finden, die wir codieren können, müssen wir den größten eindeutigen Satz von Buchstaben / Zahlen finden. Es gibt keinen Grund, warum wir die Buchstaben GZ und einige gebräuchliche Interpunktionszeichen nicht berücksichtigen können, aber ich möchte nicht manuell paarweise vergleichen müssen: "Klingt G wie A?", "Klingt G wie B?", "Tut G klingt wie C "ich. Wie wir wissen, wäre dies O (n ^ 2) Spracharbeit zu tun =) ...
Antworten:
Sie sollten den Satz alphanumerischer Zeichen nach visueller Ähnlichkeit in Gruppen unterteilen und aus jeder Gruppe einen "kultigsten" Vertreter auswählen. Dies ist etwas subjektiv, obwohl Sie Benutzertests durchführen könnten. Die Auswahl, die Sie treffen, hängt auch davon ab, ob die Zahlen gedruckt oder handgeschrieben werden. Beispielsweise:
{ O , 0 , Q , D }
{ I , L , 1 }
{ B , 8 }
{ Z , 2 }
{ S , 5 }
{ 7 , T }
{ U , V , Y }
In ähnlicher Weise werden Zeichen durch die phonetische Ähnlichkeit der Aussprachen ihrer Namen unterteilt:
{ A [ʔeɪ], 8 [ʔeɪ (ʔ / t)]}
= beginnt mit [ʔeʔ]
{ P [pi:], B [bi:], V [vi:], D [di:], T [ti:], E [ʔi:]}
= Stopp / Reibung + [i:]
{ G [ʤi:], C [si:], Z [zi:], 3 [θɹi:]}
= Reibung / Affrikat (Cluster) + [i:]
{ M [ɛm], N [ɛn]}
= [ɛ] + nasal
{ S [ɛs], F [ɛf], X [ɛks]}
= [ɛ] + Frikativ / Affrikat
{ I [ʔaʔ], Y [waɪ], 5 [faɪv], 9 [naɪn]}
= Konsonant + [aɪ] + (Konsonant)
{ Q [kjʉ:], U [jʉ:], 2 [t (j) ʉ:]}
= Konsonant + [(j) ʉ:]
Dies sind natürlich nicht die einzigen möglichen Partitionen, die im Moment in den Sinn kommen. Unabhängig davon sollten sie ausreichen, um Sie für weitere Tests zu gewinnen. Auch werden diese nicht von professionellen Quellen belegt - ich zitiere nur meine hobbyistischen Hintergründe in Typografie und Phonetik.
quelle
Sie können Mechanical Turk verwenden , um echte Personen zu veranlassen, alle 26 ^ 2 Buchstabenpaare auf klangliche und visuelle Ähnlichkeit zu bewerten. Der Vorteil ist, dass Sie auf diese Weise sogar Daten für verschiedene Muttersprachen abrufen können.
quelle
Für Englisch codieren die Algorithmen soundex und metaphone , welche Sounds mehrdeutig sind. Soundex ist wahrscheinlich zu einfach, aber Metaphone enthält einige gute Punkte. Möchten Sie die Sequenz "OU"? Das könnte auf viele Arten ausgesprochen werden, da dieser Satz demontriert;)
quelle
Die obige Antwort von Jon Purdy scheint am richtigsten zu sein. Aus praktischen Gründen versuche ich
z-base-32
, eine nicht standardmäßige Base32-Codierung zu entwickeln, bei der die Kommunikationsfähigkeit im Vordergrund steht. Es sieht funktional aus, obwohl es nicht ideal ist - z. B. haben sie sich ausdrücklich nicht auf die gesprochene Disambiguierung konzentriert.http://philzimmermann.com/docs/human-oriented-base-32-encoding.txt
http://pypi.python.org/pypi/zbase32/
quelle