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

谢谢,很好很强大。

我目前使用下面的方法来 mark unknown word。

advice-add 'osx-dictionary-search-pointer :after 'dictionary-overlay-mark-word-unknown

考虑添加个hook 来干这件事不?

我试了下,放配置里直接启动没啥问题,加载只需要 0.7ms,可以的。

我觉得你这样就很好了呢。我自己是在外把 查词典+dictionary-overlay-mark-word-unknow 包在了同一个方法里,然后给这个方法定一个快捷键。

好像添加一个hook 也没有什么特别的优点吧?

嗯嗯,都可以接受。Emacs里hook 满天飞。

试用了两天,觉得还是要等这个大杀器出现,这个包才算完整。 :grinning: 期待。

另外不知道大佬有没有精力给 overlay 加上 face,以便区分普通文本?

参考:

wolray/symbol-overlay

nobiot/org-remark

1 个赞

GitHub - ginqi7/dictionary-overlay at feature/stemming 在这个分支当中实现这个功能。只是还在测试中。大佬有空的话,可以试用一下。帮忙试试有没有什么问题。

需要pip install snowballstemmer

1 个赞

担心加上face 可能会影响阅读。

这个 remark 挺好看的,可以考虑加个变量,让用户自定义face。

我一会儿试试看,不过我也没有经验,也是和你们一起边用边学习。

所以我是比较喜欢 org-remark 这种浅色mark的。之所以提起 symbol-overlay 是因为它可以让相同的word/symbol 显示相同的face。

基础使用的话,提供个defface就够了,以后有精力再进一步整。 :grin:

拉取了feature/stemming,安装了snowballstemmer,效果不及预期,一些knownwords里的熟词不应该出现在overlay里。

环境:

macOS Big Sur GNU Emacs 29.0.50 (build 1, x86_64-apple-darwin20.6.0, NS appkit-2022.60 Version 11.6 (Build 20G165)) of 2022-11-19

配置:

(use-package websocket-bridge
  :straight (:host github :repo "ginqi7/websocket-bridge")
  :commands (websocket-bridge-server-start))

(use-package dictionary-overlay
  :straight (:host github
             :repo "ginqi7/dictionary-overlay"
             :branch "feature/stemming"
             :files (:defaults "*"))
  :commands (dictionary-overlay-start
             dictionary-overlay-render-buffer)
  :init
  (setq dictionary-overlay-user-data-directory
        (concat path-emacs-private-dir "dictionary-overlay-data/"))
  (setq dictionary-overlay-just-unknown-words nil))

几个截图:

左边knownwords.txt, 右边elfeed-entry文章里的词(如果stemming成功,它们不应该出现)

image

image

image

stemming 的算法比较粗暴,city 会被提取为 citi, 因此它你在knownwords.txt, 中保存city 无法被识别。

你可以重新运行一下dictionary-overlay-mark-word-known ,那么它会吧 city 和citi 全部都保存到 knownwords.txt 当中。

由于stemming 算法并不准确。 感觉,stemming 比较适合运用在生词本当中。因为一个词不认识,你通常和他类似的也不认识。 但在熟词本场景,可能由于stemming 算法不准确,导致,你把一个你不认识的单词,截断太多,误以为你认识。实际效果如何还不确定。 当前我阅读使用的按照“生词本”提示。

我情感上还是比较喜欢透析法,个人比较懒,想让不懂的词自动出现在我面前。

不过我还是好好理一理生/熟词本与 stemming 算法的交互 :grin:

我现在先用“生词本”模式,阅读一些内容,读完一篇之后,整个buffer 加入到“熟词本”。

我觉得“熟词”积累到一定程度之后,再使用“透析法”或许就比较合适了。

否则一个个添加认识的单词比较麻烦。

1 个赞

把 “词干提取” 的功能合并到主干分支了。需要添加 python 包snowballstemmer, 并没使用 nltk, snowballstemmer 更加轻量,专注与词干提取。

将生词添加到生词本或者熟词本时,同时会把提取的词干也加入其中。因此下次遇到词干相同的词语也会进行翻译,例如 city 和 cities.

由于只有新增加的单词会有效果。如果发现没有效果,需要重新添加一下某个单词,才能根据词干进行匹配。

主要的功能,基本已经都完成了。接下来就是修修补补了。欢迎大家使用,提出问题与建议。

还没有合并补丁吧?

1 个赞

网络太差,居然没有合并成功。

现在合并了。

1 个赞

大家是怎么更新的,不会像我一样笨地每次删除目录重新clone回来吧

git pull

像猫大一样用 submodule 管理插件的话,就

git submodule foreach git pull
1 个赞

可以看一下 GitHub - redguardtoo/mybigword: Use Zipf frequency of each word to extract English big words 一次生词都事先查好. 词典可自己定义.

3 个赞

蹲一个org-remark同款defface。:grin: 今天尝试自己添加,轮子造了一半,发现face是在dictionary-overlay.py里定义的?我对python不熟悉。

;; TODO 2022-11-21: test
(defface dictionary-overlay-knownwords
  '((((class color) (min-colors 88) (background light))
     :underline "#aecf90" :background "#ecf7ed")
    (((class color) (min-colors 88) (background dark))
     :underline "#00422a" :background "#001904")
    (t
     :inherit highlight))
  "Face for dictionary-overlay known words.")

;; TODO 2022-11-21: test
(defface dictionary-overlay-unknownwords
  '((((class color) (min-colors 88) (background light))
     :underline "#fb8c96" :background "#fbd8db")
    (((class color) (min-colors 88) (background dark))
     :underline "#C77577" :background "#7A696B")
    (t
     :inherit highlight))
  "Face for dictionary-overlay unknown words.")