Я пишу расширение emacs для использования с распознаванием речи и ищу помощь с определенной функцией. Некоторые слова распознаватель речи (Дракон) постоянно плохо распознает - не имеет значения, сколько раз вы тренируете его, он просто не справится с распознаванием определенных слов. В то же время, как правило, когда вы пишете по теме или кодируете, вы будете использовать множество одних и тех же слов снова и снова.
Итак, я написал режим, который использует наложения, чтобы изменить способ отображения слов в буфере. Он берет случайную букву в слове, подчеркивает ее случайным цветом и помещает поверх нее случайный диакритический знак (ударение, умляут и т. Д.). Вот снимок экрана (вам, вероятно, понадобится увеличить изображение, чтобы увидеть метки / подчеркивание):
Затем вы можете сказать «фиолетовые р волосы», и оно будет искать слово с фиолетовым подчеркиванием под «а» с диакритическим знаком, похожим на волосы, и наберите это слово для вас. Так что на приведенном выше скриншоте говорится, что emacs наберет для вас «regexp-quote».
Идея заключается в том, что это позволяет вам ссылаться на любое слово, которое вы уже использовали, на экране, используя конечный набор слов, которые распознаватель неизменно хорошо распознает.
Это работает довольно хорошо, за исключением случайного столкновения. Чтобы это сделать, я могу научиться последовательно ссылаться на слова так же, как я использую байты из хеша md5 слова вместо (random)
алгоритма или присваиваю изменения таким образом, чтобы избежать коллизий. Я нашел только 6 легко различимых цветов (это трудно, когда подчеркивание имеет ширину всего в один символ и толщину в один пиксель) и 3 легко различимых диакритических знака (легко отличить друг от друга, а также не путать с подчеркиванием на приведенном выше рисунке). линия или перекрытие с подчеркиванием), видно в верхней части источника выше.
Мне нужно больше способов изменить рендеринг, чтобы уменьшить частоту столкновений. В идеале модификация рендеринга должна:
- Не шуми от остального текста. Это привело меня к отклонению, например, свойства inverse-video.
- Нельзя легко спутать с другими изменениями. Наложение легко принять за подчеркивание в предыдущей строке. Множество диакритических знаков выглядят одинаково, если только размер шрифта не слишком велик.
- Будьте пространственно рядом с другими изменениями. Прямо сейчас, как только мой глаз находит целевой символ, вся информация там, маркер, подчеркивание и буква.
- Хорошо работает со шрифтом фиксированной ширины (необходим для кодирования), который правильно отображает диакритические знаки (мне пришлось переключиться на DejaVu Sans Mono из Consolas, чтобы метки отображались правильно)
- Работа над латинскими буквами алфавита. Например, есть арабские комбинирующие метки, но они не объединяются в латинских алфавитах.
- Не изменять цвет букв, так как он уже используется для подсветки синтаксиса.
- На самом деле быть выполнимым в Emacs с Emacs LISP;)
Может быть, есть специальные символы юникода, управляющие рендерингом, которые могут быть использованы для открытия новых возможностей? Или способ сгущения подчеркиваний, чтобы я мог легко различать больше цветов? Или какая-то другая неясная функция emacs, позволяющая вам отображать метки поверх символов помимо юникода?
(char-to-string ?\uFEFF)
а другой - целевой символ, который уменьшен в размер, чтобы они оба подходят. Другой идеей было бы использовать вертикальный проход (доступен в некоторых шрифтах, но не во всех), аналогичный тому, что используется в библиотекеvline.el
emacswiki.org/emacs/VlineMode