【讨论】一种提升英文阅读体验的可能性

因为有阅读英文的需求,但是英文水平又很一般。面对比较长的句子的时候,阅读节奏磕磕碰碰,虽然使用 Emacs 可以比较方便的使用各种翻译工具来翻译单词或是长句。但仍旧希望能有一种方式,协助进行英文断句,来辅助阅读。

网络上有一个工具:叫 enpuz, 能够分析句子语法,如图所示:

但它只能分析一些十几二十个单词的句子,可以用来进行单独句子的学习,但不适合辅助阅读。

论坛里有一个小哥实现了一个:中文词性增强的工具。新人报到,写了个中文词性高亮的小功能,请各位前辈批评

因此,我也希望能有一个英文句子结构划分的工具。在调研的过程中,发现 python 有一个包,叫做 NLTK (Natural Language Toolkit), 能够进行英文语句的词性划分,根据自定义的规则进行分组。

利用 NLTK 可以把语句根据词性和既定的规则划分为树形结构。 image

就尝试写了一下 nltk 的 demo.

实现逻辑,使用了 emacs-epc, elisp 与 python 之间进行 rpc 交互。利用 python 代码进行语句的划分,把符合规则的部分内容进行 overlay。

目前就实现了两个功能:

  1. 查看当前单词的词性
  2. 根据定义的规则,增强显示段落的部分内容。

原文:

增强显示名词短语:

查看单词词性:

使用当前的增强规则试着阅读了一下,阅读体验有一点点增强,但似乎不大。

  1. 部分单词的增强,确实比全都一个颜色,阅读起来更容易集中精力。
  2. 但当前的增强规则,我猜测并不比随机增强一些文字效果好多少。(有文章说,随机增强一些单词,有利于阅读。)
  3. nltk 默认的分词功能,似乎还有一些不足,例如全大写字母的单词,会被识别为专有名词。估计要精确的使用 nltk 还是需要一些技巧的。
  4. 增强的内容不能太多。否则干扰阅读。
  5. 哪些内容做突出显示会更有助于阅读或者短句,目前我没有什么思路。纯粹的把一个名字短语认定为主语,或者宾语突出显示了。

当前的强调逻辑:

限定词语(the)或者基数词(a)或者所有格代词(his)+ 形容词 + 名词

那么它可能是个主语,或者宾语,把它增强显示。

也可以选择,把句子划分成不同的成分,例如: [image] 然后用不同的颜色展示。但我觉得颜色太多比较干扰。希望能突出重点。但不知道重点是什么。

希望大家能提供更好的想法或者建议。

代码在:GitHub - ginqi7/emacs-nltk: emacs-nltk 当前只还是一个 demo

17 个赞

关于阅读体验方面,我来提供个代码以外的思路:使用变宽字体和调整行间距。

等宽字体更适合编写代码,但是单词辨识度较差,而变宽字体外形协调,可读性更强。

合适的行间距既能引导阅读,防止串行,也能提高视觉效果(同样适用于中文)。

下面是是分别使用变宽字体、1.6 倍行距和等宽字体、默认行距的效果:

至于英语阅读能力方面,我觉得提高内功才是王道,只要语法过关,多读多看,速度自然上去了。

7 个赞

不了解自然语言处理,对于这个项目没啥好的建议。

对于英语阅读来说,一般文章的语法都不难,也就是定语状语之类的,了解了这些常用的语法,阅读的时候就可以把单个句子分为一块块的,也就容易确定句子主干和修饰成分,然后再注意下句子之间的关系就好了。

补充:我要表达的是,这种词性标注工具的作用可能有限(没有使用经验,只是主观感觉),还是要提高语言水平。对于语法学习,我推荐《英语魔法师之语法俱乐部》,我个人看过的最好的语法书。

2 个赞

好像有些道理。看起来效果是不错。

如果仅仅是为了提高阅读能力,那就别折腾这些了。拿你必须读的材料读就好了。每天保持一个阅读量,勤查字典,很快就会比较大的改善。说到底,阅读还是熟能生巧。

3 个赞

Wow,这就是 Bionic Reading 啊。

1 个赞

嗯嗯,我也估计实际效果有限。但感觉可以先写个demo试试看。然后看看有没有大佬有相关的想法。

哈哈。主要还是写代码比看书更有趣。所以先写个demo试试看。然后在论坛上抛砖,看有没有玉可以引。

我就说,我好像在哪里看到过,类似的增强显示的一种形式。

也可以尝试一下实现这种方式。

李杀写过个简单的,Emacs Lisp: Bionic Reading

1 个赞

你这个方案是基于词的,BR 是基于发音的,后者需要的计算量更少一些,但不是很智能。

lz看看这个好不好实现,也是高亮 一篇英文文章,根据一行一个单词的knownword.txt筛选出不认识的单词高亮 高亮的单词可以提取至一个新buffer配上释义,再过一遍以准确判断是否是真正不认得 如果认得,可以定义一个快捷键让它回到knownword.txt 这样剩下的就是纯生词了

2 个赞

透析阅读法……

这个想法不错啊,期待楼主实现。 :smiley:

@zbelial 这个功能看起来可行。

扫描当前buffer,提取所有的单词。如果单词不在knownword.txt,则翻译一下。通过添加overlay 来改变当前buffer 的展示:英文(中文翻译)

目前我写了个demo,当自己什么单词都不认识。会翻译所有。然后一个个添加到 knownword.txt

可以在网上找一个四六级的词库,当作自己的 knownword.txt

9 个赞

大佬, 你这个效果很不错啊

Good! 怎么能试用上这个功能谢谢

英语不好的人的无尽挣扎。

现在缺一个离线的,只有一个词义的好用的中英词典。

目前我使用了你提到的类似用:puppeteer + deepl 的形式,捞当前 buffer 的生词,翻译一下。然后存起来,下次就直接查本地文件。如果不断的阅读新的内容,就可以不断扩展自己的词库了。

目前还只是demo,还需要开发。下周看看如果能自己日常使用了,就发出来。

推荐简明英汉词典增强版

它覆盖的单词量非常大(340 万),我在欧路词典、Apple 词典都开启了这个词典,非常好用。

5 个赞