我正在编写用于语音识别的emacs扩展,并且正在寻求有关特定功能的帮助。语音识别器(Dragon)的某些单词识别能力始终很差-训练了几次并不重要,这只会使您无法识别某些单词。通常,在同一时间写主题或编码时,一遍又一遍地使用很多相同的单词。
因此,我编写了一种使用覆盖层来更改单词在缓冲区中的呈现方式的模式。它在单词中使用随机字母,在其下方用随机颜色加下划线,并在其顶部放置随机变音标记(重音符号,变音符号等)。这是屏幕截图(您可能需要缩放以查看标记/下划线):
然后您可以说“紫色p头发”,它将在单词“ a”下寻找带有紫色下划线的单词,并带有一个变音符,看起来像头发,然后为您键入该单词。因此,在上面的屏幕截图中,这将导致emacs为您键入“ regexp-quote”。
这个想法是让您使用识别器一贯擅长识别的有限词组来引用屏幕上已经使用过的任何词组。
它工作得很好,只是偶尔会发生碰撞。为了做到这一点,我可以学习一致地引用单词,就像我使用单词的md5哈希中的字节一样,而不是(random)
让算法分配更改以免发生冲突。我只发现了6种易于区分的颜色(当下划线只有一个字符宽且只有一个像素厚时很难做到)和3种易于区分的变音符号(易于区分彼此,并且与上面的下划线也不能混淆线或与下划线重叠的位置),请参见上方来源上方。
我需要更多方法来更改渲染,以减少碰撞频率。理想情况下,渲染修改将:
- 不要被其余的文本所震撼。例如,这导致我忽略了反视频属性。
- 不容易与其他更改混淆。上划线很容易被误认为前一行的下划线。除非字体大小不切实际,否则许多变音符看起来都差不多。
- 在空间上靠近其他变化所在。现在,一旦我的眼睛找到了目标角色,所有的信息,标记,下划线和字母就在那里。
- 可以正确显示变音标记的固定宽度字体(编码所需)很好地工作(我必须从Consolas切换到DejaVu Sans Mono,以使标记正确呈现)
- 在拉丁字母上工作。例如,有阿拉伯文的组合标记,但它们不与拉丁字母字符组合。
- 不要更改字母的颜色,因为它已经用于语法突出显示。
- 实际上可以在emacs中使用emacs lisp;)
也许有特殊的unicode字符控制渲染,可能会被滥用以开辟新的可能性?还是一种加粗下划线的方式,以便我可以轻松区分更多颜色?还是其他一些晦涩的emacs功能,可让您在unicode之外的字符顶部显示标记?
(char-to-string ?\uFEFF)
,另一个是目标字符,在大小,所以它们都适合。另一个想法是使用垂直删除线(某些字体提供,但不是全部提供),类似于库vline.el
emacswiki.org/emacs/VlineMode中