Wyobraź sobie, że dajesz komuś kartę z kodem „5SBDO0”.
W niektórych czcionkach trudno jest wizualnie odróżnić literę „S” od cyfry pięć (jak w przypadku cyfry zero i litery „O”).
Czytając kod na głos, odróżnienie „B” od „D” może być trudne, wymagając wymówienia „B jak u chłopca”, „D jak u psa” lub użycia zamiast tego „ alfabetu fonetycznego ”.
Jaki jest największy podzbiór liter i cyfr, który w większości przypadków będzie wyglądał jednoznacznie wizualnie i będzie brzmiał jednoznacznie, gdy będzie czytany na głos?
Tło:
Chcemy wygenerować krótki ciąg znaków, który może zakodować jak najwięcej wartości, jednocześnie zachowując łatwość komunikacji.
Wyobraź sobie, że masz ciąg 6 znaków, „123456”. W bazie 10 może to kodować wartości 10 ^ 6.
W zapisie szesnastkowym „1B23DF” możesz zakodować 16 ^ 6 wartości w tej samej liczbie znaków, ale może to brzmieć dwuznacznie, gdy odczytywane na głos. („B” vs. „D”)
Podobnie dla dowolnego ciągu N znaków otrzymujesz (rozmiar alfabetu) ^ N wartości.
Ciąg jest ograniczony do długości około sześciu znaków, ponieważ chce się łatwo zmieścić w pojemności pamięci roboczej człowieka .
Dlatego, aby znaleźć maksymalną liczbę wartości, które możemy zakodować, musimy znaleźć ten największy jednoznaczny zestaw liter / cyfr. Nie ma powodu, dla którego nie możemy brać pod uwagę liter GZ i niektórych typowych znaków interpunkcyjnych, ale nie chcę ręcznie porównywać parami „czy G brzmi jak A?”, „Czy G brzmi jak B?”, „Czy Sam G brzmi jak „C”. Jak wiemy, byłoby to O (n ^ 2) praca lingwistyczna do zrobienia =) ...
Odpowiedzi:
Powinieneś podzielić zestaw alfanumeryczny na grupy według wizualnego podobieństwa i wybrać „najbardziej kultowego” przedstawiciela z każdej grupy. Jest to nieco subiektywne, chociaż można na nim przeprowadzić testy użytkowników. Dokonane wybory zależą również od tego, czy dane zostaną wydrukowane, czy odręcznie. Na przykład:
{ O , 0 , Q , D }
{ I , L , 1 }
{ B , 8 }
{ Z , 2 }
{ S , 5 }
{ 7 , T }
{ U , V , Y }
Podobnie dziel znaki na podobieństwa fonetyczne wymowy ich nazw:
{ A [ʔeɪ], 8 [ʔeɪ (ʔ / t)]}
= zaczyna się od [ʔ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 (klaster) + [i:]
{ M [ɛm], N [ɛn]}
= [ɛ] + nosowy
{ S [ɛs], F [ɛf], X [ɛks]}
= [ɛ] + fricative / affricate
{ I [ʔaɪ], Y [waɪ], 5 [faɪv], 9 [naɪn]}
= spółgłoska + [aɪ] + (spółgłoska)
{ Q [kjʉ:], U [jʉ:], 2 [t (j) ʉ:]}
= spółgłoska + [(j) ʉ:]
Nie są to oczywiście jedyne możliwe przegrody, tylko to, co przychodzi mi teraz na myśl. Niezależnie od tego powinny one wystarczyć do rozpoczęcia dalszych testów. Nie są one również poparte żadnymi profesjonalnymi źródłami - cytuję tylko moje hobbystyczne doświadczenie w typografii i fonetyce.
źródło
Możesz użyć Mechanical Turk, aby prawdziwi ludzie ocenili wszystkie 26 ^ 2 par liter pod względem fonetycznym i wizualnym. Zaletą jest to, że w ten sposób można nawet uzyskać dane dla różnych języków ojczystych.
źródło
W języku angielskim algorytmy soundex i metaphone kodują, które dźwięki są niejednoznaczne. Soundex jest prawdopodobnie zbyt prosty, ale Metaphone zawiera kilka dobrych punktów. Czy chcesz sekwencję „OU”? Można to wymówić na wiele sposobów, ponieważ zdanie to się kończy;)
źródło
Powyższa odpowiedź Jona Purdy'ego wydaje się najbardziej poprawna. W celach praktycznych próbuję
z-base-32
niestandardowego kodowania base32 zaprojektowanego z myślą o komunikacji. Wygląda na funkcjonalny, choć nie idealny - np. Wyraźnie nie skupiali się na mówionej jednoznaczności.http://philzimmermann.com/docs/human-oriented-base-32-encoding.txt
http://pypi.python.org/pypi/zbase32/
źródło