После просмотра многочисленных методов ввода в виде *.cin таблиц от чего-то под Unix мне пришла в голову интересная мысль. Возьмем начинающего пользователя, делающего первые шаги в освоении азов китайской иероглифической письменности. В большинстве методов прямого начертания иероглифа необходимо помнить порядок начертания черт, еще правила – что считать вообще за одну черту. Но это классический подход, для этого пользователю необходимо изучать основы иероглифики. А что, если мы возьмем подход основанный на простом принципе – чертой считаем участки до резких изгибов. Кто занимался простейшими алгоритмами OCR для HanZi, помнит, что простыми суммами в столбцах и рядах растра можно построить две кривые (вертикальная и горизонтальная суммы) и подсчитать на основании обрезки максимумов этих кривых количество черт в горизонтальном и вертикальном направлении. И вот мгновенно родилась такая идея кодирования:
Черты делим на четыре типа:
- горизонтальные (-)
- вертикальные (|)
- косые (/)
- черта – изолированная точка «дянь»(.)
- Помимо черт считаем еще и отдельно нарисованные квадратные элементы «рот» не связанные никакими горизонтальными или вертикальными чертами по своим сторонам с соседними элементами. Горизонтальные и вертикальные черты таких элементов не считаются.
Теперь имеем 5 жестко фиксированных знакомест, как в методе 4Corner. В порядке возрастания значимости просто записываем:
1) Количество горизонтальных черт
2) Количество вертикальных черт
3) Количество любых косых, наклонных, с плавным изгибом черт (кроме точки «дянь»)
4) Количество изолированных точек «дянь»
5) Количество отдельно изолированных обрамлений в форме квадратных элементов «рот»
Количество черт записывается в шестнадцатиричном виде 0,1,2..F. если число черт данного типа более, чем F (15), то число ограничивается до F.
ПРИМЕРЫ КОДИРОВАНИЯ
(внимание! Использовано начертание PMingLiU шрифта)
一 00001
二 00002
三 00003
中 10010
呂 20100
沐 02311
虍 00412
焦 04224
叵 10012
晶 30003
意 15113
龍 0215B
竂 10823
竊 02С75
龘 063FF
齉 50769
先 00312
計 10114
贏 20A15
命 10222
寶 10658
乑 00510
Очевидно, что необходимо выработать ряд однозначных правил, что считать косой, что считать «дянь». Метод очень близок к принципам OCR. Т.е. данный код может быть частично использован в методиках распознавания. Еще одной уникальной особенностью такого метода кодирования являются очень близкие значения кодов при разных вариантных начертаниях («дянь» вместо «хэн» и т.п) . Особенно часто эта разница замечена в шрифтах «сун» и «мин». Если задать погрешность при поиске +/- 1, то это сильно сводит на нет подобную разницу в начертаниях. За основу при кодировании необходимо брать стандартное начертание «мин».
Информационная емкость такого кодирования легко считается 2^20=1 048 576. Оценка вероятности появления неоднозначности при равномерном заполнении информационной емкости кода для числа Ханьцзы Юникода, равного 70 000 знаков будет равна примерно 0,066.
Я просматривал множество патентов США по кодированию иероглифических знаков китайского письма и ничего подобного не находил. Буду благодарен за помощь и советы.
P.S.
Кстати, вручную очень тяжело считать типы черт, сам убедился на этих примерах тяжелых иероглифов "нан" и пр. драконов. Так что заполнение такого кода потребует адских усилий. Намного проще закодировать кодом CangJie все Ханьцзы Юникода.