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

用户体验的话,建议手动翻译过的就加生词本,有可能下次还不记得,只生词本的翻译,直到用户彻底会了,从生词本取消某个单词。

这个比默认翻译所有单词再去掉会的,少很多操作。

好的,建议采取行间显示释义的办法,这样括号会少些也不会使句子一断一断的

这个词典还挺全的,就是释意的内容太多。我这里只需要一个释意,并且希望它尽可能是最常用的。需要它简洁,不需要详情信息。我当前选择使用在线翻译而不是在线词典,就是因为翻译获取的结果是最简洁的。

可以看看我是否能写个sql 清洗一下词典,使用在线翻译,如果当前buffer 生词太多,会比较慢

为了解决一个问题是,每次阅读时,指针跳转到不认识的单词,然后运行查询词典,容易打断阅读思路。因此希望自动展示你可能不认识的单词解释。

可以使用两种模式:生词本模式和熟词本模式

  1. 生词本模式
    • 只展示生词本的单词;
    • 每次点击查单词时,把单词保存到生词本当中;
    • 可以在这个模式下进行“熟词本”学习,把所有未标记为“生词”的单词都放到熟词本当中。
  2. 熟次本模式
    • 展示所有“熟词本”没有的单词
    • 可以把四六级的单词作为熟词本的基本模板
    • 每次点击查单词时,把单词从熟词本里剔除;
    • 如果阅读够多,按照生词本模式积累一定的熟词之后,就可以不用主动查询单词。
1 个赞

熟词本模式对于英文不好的人有两个问题:

  1. 四六级单词可能很多也不认得, 把单词从熟词本剔除的次数会比把不认识的单词加到生词本更多
  2. 遇到满屏都是翻译其实思路打断更多, 因为即使很多单词不认识, 其实真实的阅读就是连蒙带猜, 只有那些真正重要的英文单词才需要翻译
2 个赞

哈哈。是的。可以先按照一个模式,完成一个可用的版本。后续再慢慢调整。

PS. 使用 python 实现中。发现自己对 python 的协程理解有问题。配合 websocket + playwright 总有一些奇怪的问题。还在学习中。

生词本和熟词本可以来回切换就好了,不过这样的话就需要分别设置添加到生词本和熟词本的功能。

Python 尽量用多线程, 除非遇到服务器后台那种, IO密集到影响性能的场景才用协程。

协程了解的不多, 总会给人感觉协程更高级, 协程一旦遇到CPU密集型的代码, 就会导致事件循环根本没有机会切换到其他协程。

Python的线程依然是在大部分场景更适用的方案。

这个估计是可行的。主动查询单词时,把这个单词添加到生词本,把它从熟词本里剔除。

其实对于英语不好的人(比如我), 更符合直觉的是:

  1. 满屏其实大部分连蒙带猜都认识, 特别生僻的词, 这次查一下下次大概率还是记不住
  2. 生词本再下次再次展示的时候显示翻译, 直到多次看到后终于学会了, 再把它从生词本中去掉

这些功能都还好, 主要的是大部分获取英文材料的场景都是浏览器, 其实楼主做好文本的功能, EAF其实有一个 switch_to_reader_mode 的模式(如下图二而所示), 可以把网页中真正重要的中间文字抽出来(过滤掉网页左右两边的导航等控件), 我再把ReaderMode的文字转换成 Emacs Text Buffer, 就可以快速学习了。

1 个赞

我个人是觉得,我的这个场景使用多线程应该就可以了。 一个线程进行 websocket 通信, 一个线程使用 playwright 打开浏览器查词语。

只是 websockets 和 playwright 库默认 example 就是使用 asyncio, 所以就按照示例来了。顺便学习学习。

这个抽取文本的功能很赞耶。

我现在阅读材料,基本都是save-everything 的形式。只要是大体上有价值的问题。我都会使用 firefox 的插件,抽取为 org mode,保存下载。然后某个时间,自己随机浏览一下以前看过的文档。用于回顾,整理。

1 个赞

其实我发现 EAF Browser 很早就有这两个功能:

  1. eaf-py-proxy-insert_or_switch_to_reader_mode 这个命令可以把网页中间部分的内容提取出来阅读, 保留内容样式
  2. eaf-py-proxy-insert_or_export_text 这个命令直接所有文本提取出来变成一个 Emacs Text Buffer

上面这两个命令都是基于 Mozilla 的 Readability.js 来实现的, 效果非常好。

只是原来做出来后, 没有想到合适的应用场景利用这个功能就没管了, 如果能够对接楼主的英文学习插件, 基本上以后就是EAF Browser查资料, 遇到不懂的网页立马进入英文学习模式去看材料, 就可以大大提高学习的速度了。

楼主的文本翻译插件出来以后, 大家可以双剑合璧一下:

  1. EAF Browser 搜索材料正常看
  2. 需要深入阅读的材料, 分屏操作, 左边是 ReaderMode (保留图片和文字布局), 右边是 EAF Browser 导出的纯文本内容
  3. 右边的纯文本内容结合楼主的翻译插件

这样基本上学习任何技术, 都可以快速弄懂英文材料在说啥。

1 个赞

楼主提出的从生词本剔除的同时将单词加入熟词本是个好主意。

更进一步,如果能像你说的第二条一样,记录查询次数(像 keyfreq 记录按键频次一样),并根据指定查询次数(比如超过 10 次)自动把单词从生词本移动到熟词本,就完成了一次简单的单词筛选。

更进一步,简明英汉词典有词频标注,可以把指定查询次数和词频关联起来,或者设置一个缺省值(default)并允许后续手动修改当前单词的移动阈值,不过这样就有点复杂了。

其实就是不认识的时候加入生词本, 下次展示翻译, 熟悉以后手动剔除最好。

像我这样英文不好的人, 其实上面是最符合用户体验直觉的方式, 由人来控制, 不用考虑查询次数和阀值这些逻辑, 这些逻辑从研发角度看很高级, 其实真实用的地方, 越符合常识越简单粗暴越好用, 而不是越精密越好用。

1 个赞

:rofl: 你说的有道理,是我想复杂了。

非母语英语学习者一辈子能认识两万单词就非常非常厉害了,最基础的单词有三千个左右(可以用作 ESL 英英词典释义的单词),中间这些单词碰不碰的上还两说,没必要考虑频率的问题。

只需要像 spellcheck 一样有一个最简单的列表就够了。

1 个赞

这个思路也太棒了!

已经初步完成了。这两天完善一下,周末发出来让大家一起看看。

经过日常使用,还是猫哥说的,手动指定“不认识“的生词,展示其意义,比较实用。

5 个赞

最终的效果就是传给你的插件任意文本, 你会根据生词本自动重新渲染一个 mode buffer? 这个 mode 里面, 不认识的单词就增加翻译显示, 已经看了很多遍懂的单词也可以取消不显示?