Отправляет email-рассылки с помощью сервиса Sendsay

[TC] Нечитаемые знаки Unicode

Всем привет!

Стал замечать, что в текстах встречаются знаки (например, некоторые виды
знаков ударения) на которые невозможно поставить курсор в NVDA, да и,
подозреваю, вообще нигде. Я вижу с брайлевского дисплея, что есть
какой-то неизвестный символ, при этом курсор при перемещении по символам
его игнорирует. Так зачастую расставлены знаки ударения и какие-то
другие специальный знаки в тексте. При этом, при копировании текста они
переносятся.

Вопрос, как я могу работать с такими символами? Может, есть какая-то
настройка, которая может хотя бы сообщить о них речью? Я понимаю, что
далеко не все будут прочитаны синтезатором речи без внесения в словарь,
но я хотя бы должен знать об их наличие и мочь их выделять, копировать,
удалять и тд.

Спасибо.

Андрей

Ответить   Fri, 25 Dec 2020 17:47:42 +0300 (#3662866)

 

Ответы:

Добрый день уважаемые участники рассылки.
Андрей, не могли бы вы прислать фрагмент подобного текста и указать где именно вы встречаете подобный символ, поскольку я пользуюсь другой брайлевской таблицей отличной от вашей и у меня на дисплее информация может отображаться поиному. А еще, проверьте пожалуйста, имеются ли отличия в отображении подобных знаков при использовании таблицы литературного брайля от отображения того же текста компьютерным брайлем, и если таковые отличия имеются, то в чем они выражаются.
С уважением, Павел Каплан.

-----Original MessageFrom: Андрей Якубой <andrewia20***@y*****.ru>
Sent: Friday, December 25, 2020 3:48 PM
To: "industry.comp.tiflocomp" (6761649) <pavel***@g*****.com>

Всем привет!

Стал замечать, что в текстах встречаются знаки (например, некоторые виды знаков ударения) на которые невозможно поставить курсор в NVDA, да и, подозреваю, вообще нигде. Я вижу с брайлевского дисплея, что есть какой-то неизвестный символ, при этом курсор при перемещении по символам его игнорирует. Так зачастую расставлены знаки ударения и какие-то другие специальный знаки в тексте. При этом, при копировании текста они переносятся.

Вопрос, как я могу работать с такими символами? Может, есть какая-то настройка, которая может хотя бы сообщить о них речью? Я понимаю, что далеко не все будут прочитаны синтезатором речи без внесения в словарь, но я хотя бы должен знать об их наличие и мочь их выделять, копировать, удалять и тд.

Спасибо.

Андрей

--
Золотой дискуссионный лист: "Информационные технологии для незрячих и слабовидящих"
Мод.группа: Владимир Довыденков, Евгений Шеховцов, Игорь Лялин, Александр Зеленов.
Сайт листа: http://www.tiflocomp.ru
Правила листа: https://subscribe.ru/catalog/industry.comp.tiflocomp/rules
Заказать правила по почте: industry.comp.tiflocomp-rules@subscribe.ru
Написать в лист: industry.comp.tiflocomp-list@subscribe.ru
Общий модераторский адрес: TC-Mode***@g*****.io Количество подписчиков: 1603 Всего писем: 200424 Адрес этого сообщения в архиве: https://subscribe.ru/archive/industry.comp.tiflocomp/msg/3662866
Подписаться: industry.comp.tiflocomp-sub@subscribe.ru
Отписаться: industry.comp.tiflocomp-unsub@subscribe.ru

https://subscribe.ru/ https://subscribe.ru/feedback

Ответить   Fri, 25 Dec 2020 16:15:30 +0100 (#3662869)

 

Здравствуйте, Павел!

25.12.2020 18:15, "Kaplan Pavel" пишет:

Например, знак лёгкого ударения (маши?на, газе?та, докуме?нт). Примеры
придумал сам на ходу, поэтому как-то так. :) К подобным знакам относится
и "титло", если вы читаете древнерусские тексты.

Вопрос, главным образом, не про брайлевские дисплеи, а про то, почему
курсор не обнаруживает такие символы при перемещении по тексту стрелками
и синтезатор их присутствие игнорирует. Добавить символы в таблицу
брайля - не проблема, и на нём они отображаются, но во многих текстовых
редакторах я просто не могу контролировать их присутствие.

Андрей

Ответить   Fri, 25 Dec 2020 18:28:11 +0300 (#3662870)

 

25.12.2020 18:28, Андрей Якубой пишет:

Так, отлично. Почтовый клиент заменяет это на знаки вопроса. Хорошо,
пойдём сложным путём: в пример я пытался привести символы с кодами
u+0300, u+0301 и другие. Найдите их и вставьте после какой-нибудь буквы,
скажем, блокнот, а потом поперемещайте курсор.

Андрей

Ответить   Fri, 25 Dec 2020 18:34:19 +0300 (#3662871)

 

Здравствуйте, Kaplan Pavel <pavel***@g*****.com>.

Коллеги, будьте внимательнее, пожалуйста. Удаляйте лишнее из
цитат.

Ответить   Fri, 25 Dec 2020 20:16:46 +0300 (#3662873)

 

Здравствуйте, Андрей Якубой.

Это так называемые комбинируемые символы. Они предназначены не для обозначения какого-то самостоятельного знака, а для модификации предшествующего обычного некомбинируемого символа.
Если написан обычный символ, а затем несколько комбинируемых, то все они как бы напрыгивают на первый некомбинируемый символ слева от них и вместе формируют один знак с точки зрения типографики и навигации по символам.
Предшествие всегда подразумевается слева в байтовом представлении строки. То есть даже для арабских букв комбинируемые символы будут писаться справа по порядку байтов. По крайней мере, пока речь о современном Unicode.
Комбинируемые символы, действительно, обычно представляют собой различные диакритические знаки, но есть и просто всякие штучки, типа изображения колпачка клавиши, чтобы как бы изобразить кнопку и на ней предшествующий некомбинируемый символ.

С удалением всё просто: надо встать курсором после символа с набором комбинируемых символов, после чего нажимать BackSpace. Так последовательно будут удаляться все комбинируемые символы, а в конце удалиться и сам базовый символ, когда комбинируемых уже не останется.
С остальным основная проблема, действительно, в том, что синтезаторы речи, как правило, просто не умеют называть эти символы, поэтому даже в ситуациях, когда мы обеспечиваем их потенциальную читабельность, синтезатор просто молчит.
В проекте синтезатора Капитан был ряд мероприятий для обеспечения продвинутой обработки этих символов, но пока оно осталось на уровне предварительных исследований и экспериментов. Однако раз даже появился один неаффилированный с Капитаном пользователь, которому это реально надо, то возможно стоит снять этот процесс с паузы, хотя завтра это в любом случае не появится.
В общем пока я могу предложить вам несколько лайфхаков:

Во-первых, можно взять синтезатор речи eSpeak, который многие из комбинируемых символов даже умеет называть их английскими именами, а другие, как минимум, произносить в виде кода символа.

Во-вторых, можно прочитать слово по буквам при помощи соответствующей функции программы экранного доступа, и тогда среди прочего будут произнесены и комбинируемые символы. Вернее, они будут переданы отдельно на синтезатор, а чтение уже будет зависеть от того, насколько он умеет с этим справляться. Не готов сказать, все ли программы экранного доступа обеспечат такой эффект, но JAWS и NVDA точно обеспечат. С NVDA ещё на символе, с которым что-то скомбинировано, можно выполнить команду чтения фонетического описания, и там тоже будет произнесён как базовый символ, так и все символы, которые с ним скомбинированы. Точнее опять же они будут отдельно переданы на синтезатор, а там уж как повезёт.

В-третьих, комбинируемый символ станет фокусируемым и начнёт занимать отдельное место в навигации по символам тогда, когда ему будет не с кем комбинироваться. Добиться этого можно путём постановки комбинируемого символа в начале строки. Если слева от комбинируемого символа будет конец строки, то вы сможете его сфокусировать.

В-четвёртых, JAWS, по сравнению с NVDA, немного более неуклюжий в отношении обработки комбинируемых символов в гипертексте, и этим можно цинично воспользоваться. Если отобразить строку текста с комбинируемыми символами в виртуальном курсоре JAWS, то там все они отобразятся именно как отдельные символы, которые можно будет фокусировать. Как минимум, можно открыть историю речевых сообщений после произнесения текста, и там как раз они отображаются в виртуальном курсоре, так что все комбинируемые символы будут показываться отдельно. Да и можно написать простенький скрипт:

Script ViewSelectedTextInUserBuffer ()
If UserBufferIsActive () Then
UserBufferDeactivate ()
EndIf
SayFormattedMessage (OT_USER_BUFFER, GetSelectedText ())
EndScript

Этот скрипт JAWS хватает выделенный текст и отображает его в окне виртуального просмотра, где все комбинируемые символы будут отдельными фокусируемыми знаками.

Однако в целом вам надо иметь ввиду, что в Unicode есть:
1. Простые буквы. Например, кириллическая буква "и".
2. Комбинируемые символы, которые в сочетании с простыми буквами образуют новые буквы. Например, символ breve, который выглядит как маленькая подковка рогами вверх, впрыгивающая сверху на предшествующий некомбинируемый символ. Если написать букву "и", а затем breve, то получится буква "й".
3. Так называемые предварительно составленные символы. Например, отдельный символ для буквы "й".
Разумеется, предварительно составленные символы в Unicode есть далеко не для всех вариантов сочетания обычного символа с комбинируемым, а только для самых ходовых.
Однако идея в том, что "и" с последующим breve и просто отдельная "й" - это одно и тоже с точки зрения типографики.
Более того, по-хорошему даже при поиске в текстовом редакторе по запросу "й" должны находиться в том числе и варианты этой буквы, написанные через "и" с breve. Процесс приравнивания двух вариантов написания одной и той же буквы друг к другу называется нормализацией Unicode. Все системы работы с текстом в принципе должны поддерживать нормализацию Unicode. В том числе и синтезаторы речи "и" с breve вообще-то должны читать как "й", а не неуклюже спотыкаться, как сейчас происходит практически у всех.
Ну а с точки зрения трансляционных таблиц литературного брайля возникает пространство для дискуссии: надо ли отображать "и" с breve как два знака или же надо отображать как "й".
С одной стороны для редактирования текста возможно удобнее отображать как два знака, чтобы редактор понимал разницу, с другой, именно типографский смысл в том, что в этом месте написана буква "й".
Успехов. Никита.

Ответить   Fri, 25 Dec 2020 20:56:55 +0300 (#3662877)

 

Здравствуйте, Никита! Большое спасибо за исчерпывающий ответ.

25.12.2020 20:56, "Nikita" пишет:

Оно, конечно, всё хорошо, если бы я мог знать, что там вообще есть
комбинированный символ. Особенно это актуально для знаков ударения. При
простом чтении текста никакой синтезатор речи, даже ESpeak, не объявит
этот знак. Иначе говоря, все операции, описанные вами, я могу проделать,
если точно знаю, что подобный знак в тексте есть, однако чаще всего я
даже не подозреваю о существовании подобного знака, если, конечно, не
знаю заранее - не буду же я каждое слово читать по буквам. Поэтому
вопрос как раз больше не в чтении знака синтезатором, а в его
позиционном обнаружении.

Андрей

Ответить   Sat, 26 Dec 2020 11:22:19 +0300 (#3662904)

 

Здравствуйте, Андрей Якубой.

А какую проблему вы в принципе хотите решить?
Я так понял, что вам попалось несколько комбинируемых символов, которые вы
заметили на брайлевском дисплее, ну и вы просто хотели их схватить и куда-то
как-то прописать.
Если же у вас какие-то глобальные планы по системной работе с комбинируемыми
символами, то сформулируйте конкретнее, что именно вы хотите сделать.

Проблема с комбинируемыми символами в том, что они ведь действительно не
должны в большинстве случаев читаться в потоке речи чисто своими названиями.
Не должен знак ударения, поставленный внутри слова "звонить", приводить к
произнесению этого слова как "звони ударение ть". Тут уж либо игнорировать,
либо менять соответствующим образом ударение, если синтезатор в принципе это
умеет.
С другой стороны, символ breve после "и" в принципе должен превращать в
потоке речи "и" в "й". То есть синтезатор должен уметь нормализовывать
Unicode, чтобы букву с комбинируемым символом сразу превращать в
предварительно составленный символ соответствующей буквы.
Ну а графические комбинируемые символы, типа охватывающего треугольника,
может и стоит читать в потоке речи. Это, например, когда мы пишем букву "у",
а затем комбинируемый знак треугольника, после чего у нас получается "у" в
треугольнике, подобно автомобильному знаку "ученик за рулём".
Вместе с этим, если на синтезатор приходит один единственный обычный символ
с кучкой комбинируемых, то тут наверное он должен прочитать символ и все
комбинируемые прибавления. Типа это, скорей всего, посимвольное чтение, где
пользователь вычитывает текст.
Есть и вовсе комбинируемые символы в виде отдельной буквы.

В общем всё упирается в необходимость довольно серьёзных доработок на
стороне синтезатора речи, но и с довольно гибкими возможностями
конфигурирования со стороны пользователя, чтобы он мог управлять всем этим
хозяйством с добавлением и переопределением разных комбинируемых символов и
способов их прочтения.
К тому же программы, через которые текст приходит на синтезатор, могут
вносить свою специфику, которую надо отдельно исследовать и брать во
внимание.
К сожалению, я не слышал, чтобы кого-то из разработчиков синтезаторов речи
этот вопрос сильно интересовал, и чтобы кто-то занимался исследованиями и
экспериментами в этой области. Так-то было бы интересно вместе обсудить и
обменяться идеями.
Мне только известен мой личный опыт вместе с Анатолием Камыниным в рамках
Капитана, но и там из готового сейчас есть только обработка "и" с краткой и
"е" с умляутом, которые в потоке превращаются в "й" и "ё" соответственно, а
при посимвольном чтении произносятся как базовая буква с комбинируемым
символом. То есть пока нет универсальной инфраструктуры для разных типов
комбинируемых символов, а есть только жёстко вбитая обработка двух случаев,
актуальных для современного русского языка.
Ну а так я предварительно отобрал и описал 5 блоков Unicode, где собраны
универсальные комбинируемые символы, ну и комбинируемые символы из блоков
кириллицы. Если вы хотите всё это прописать в какой-то словарь, то могу
поискать свои записи, чтобы вам не повторять всю эту работу. Однако, как
описано выше, там есть символы разного типа, которые в общем-то надо читать
тоже по-разному, поэтому просто словарём проблему хорошо не решить.

Если говорить об опознавании комбинируемых символов на слух при текущем
уровне развития вспомогательных технологий, то я бы советовал использовать
JAWS.
Во-первых, JAWS спотыкается на комбинируемом символе при чтении слова, как
будто там пробел. Так можно понять, что внутри слова что-то есть. Именно для
вычитки комбинируемых символов на слух это оказывается полезно.
Во-вторых, если в JAWS добавить комбинируемый символ через sbl-файл описания
пунктуации, то в некоторых редакторах он сможет читать эти символы при
посимвольной навигации. В частности, если комбинируемый символ ударения
прописан в sbl, и мы будем читать по символам текст в Word, то JAWS на букве
с ударением произнесёт "о ударение".
С NVDA ничего из этого не будет.

Кстати, тот же Word слова с комбинируемыми символами внутри, например, с
ударением или "и" с breve, обычно начинает помечать как ошибки, что также
может служить дополнительным признаком наличия такого символа.
Это показывает, что, к сожалению, даже продвинутые системы проверки
орфографии далеко не всегда умеют нормализовывать Unicode и обрабатывать
разные варианты комбинируемых символов. То есть вся эта тема как-то не очень
проработана во всей IT-индустрии, а не только в отрасли вспомогательных
технологий.

Что же касается брайля, то там из-за линейности записи вряд ли что-то можно
сделать для комбинируемых символов. Они в любом случае будут просто идти
после базового символа. По сути, для большинства из них даже никакого
обозначения в брайле не существует.
Разве что можно только попытаться реализовать приведение обычных букв с
некоторыми комбинируемыми символами к соответствующей букве, типа как "и" с
breve к "й", то есть чтобы в литературных таблицах это отображалось сразу
как подразумевающаяся буква.
Успехов. Никита.

Ответить   Sat, 26 Dec 2020 17:42:17 +0300 (#3662914)