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

嗯嗯,这个可以有。

增加一个配置项指定 sdcv 的目录应该就可以了。

自带的么?我以为是要单独安装的

懒猫这个安装说明里说是brew install stardict sdcv 但会报错

懒猫说是macos的问题,我以为是解决不了的就放弃了

还有个思路是架个 mdx-server,这样能利用 goldendict 的资源,会丰富和好看不少(远远强于stardict 的词库,包括一些 online 权威字典也有人做)

dictionary-overlay 中的 sdcv 是又一个python 代码,解析 sdcv 格式的词典。

猫哥那个,是一个 Emacs 接口,访问 sdcv 应用。

1 个赞

可以用工具

把其他词典转换成 sdcv 的词典。

暂时不打算支持其他的格式的词典,开发起来会比较复杂。由于 dictionary-overlay 对翻译精度要求不高。

只要有一个数据量稍大一些的词典即可。

谢谢回复,词典我推荐一个,The Little Dict 优点:释义简短但全,按释义占比大小显示(要是支持释义从这些里选择会方便很多,因为常用的在第一个,之后的根据句子选);多种发音可选

呃,直接贴的图有点大。。。

这个词典看起来很高级,mark 一下,说不定以后用得上。

TLD 太花里胡哨了,透析阅读、快速查词我更推荐 ECDICT。

340 万单词,足够用一辈子了。发音词干词性也都有。

大家好像都比较注重于翻译,我更在乎发音,于是折腾了一天的 popweb-dict-youglish.el 。 结果网页widget API 限制只能25(?)个。哭唧唧

edited: 原网页广告和其他元素我能力不够,无法全部去掉,于是转向了它的api, 主要是自定义widget,干干净净。当然似乎是有数量限制的。

哈哈哈,再次说明离线数据的重要性。

youglish的音库是离线换不来的。 具体的说,它的库是youtube,然后人工筛选各种高质量演讲/课堂,一直在更新。

还以为是纯文本的词典,原来是带视频索引的,让我想起了之前的人人词典。这跟 dictionary-overlay 不是一个路数了,哈哈。

学什么英音美音,我觉得要大力弘扬中式口音 :stuck_out_tongue_closed_eyes:

环境不允许。要不我学个特色新加坡口音和印度口音。

印度口音挺磨人的,有时候看到印度人的视频我就想搞个 AI 配音替换 :rofl:

popweb 就是直接选择网页, 然后用 css 把那些不要的元素去掉就好了, 为啥要用 API 啊?

:rofl: :rofl: :rofl: 发现了一个bug,本地的词典 dictionary.json 加载出了问题。每次重启,都会把本地的词典重置了。

如果是单用,可以说是花哨,不过dictionary-overlay会处理一层的吧 image

简明英汉也在用 可以看到它很简略,无发音也没有TLD的按释义排序功能 D-O 可以有选择词义的功能,这样的话更适合从中抽取和用户挑选 (当然除了自己处理的,没有完美的词典 D-O有修改释义功能很好)

个人能力有限,去除不干净。我最近在一个网络比较慢的地方,直接api少加载一些图片广告和视频广告会快一些,订了六个月用一下。

自己折腾的效果:上面那个白条去不掉,文字也保留得不完整, 以及,我想保留下边的nearby words,但能力实在不足。

;;; Require
(require 'popweb)
(require 'popweb-dict)

;;; Code:

(defun popweb-dict-youglish-translate (info)
  "Lookup INFO in popweb dict window."
  (let* ((position (popweb-get-cursor-coordinate))
         (window-header-height
          (- (nth 1 (window-inside-pixel-edges))
             (nth 1 (window-absolute-pixel-edges))))
         (x (car position))
         (y (- (cdr position) window-header-height))
         (x-offset (popweb-get-cursor-x-offset))
         (y-offset (popweb-get-cursor-y-offset))
         (frame-x (car (frame-position)))
         (frame-y (cdr (frame-position)))
         (frame-w (frame-outer-width))
         (frame-h (frame-outer-height))
         (width-scale 0.35)
         (height-scale 0.5)
         (word (nth 0 info))
         (url
          (concat
           "https://youglish.com/pronounce/" word
           "%20%3Ar/english/us")) ;  " :r" for random playback order
         (js-code
          (concat
           "window.scrollTo(0, 0); "
           "document.getElementsByTagName('html')[0].style.visibility = 'hidden'; " ; ✓
           "document.getElementsByTagName('header')[0].style.display = 'none'; " ; ✓
           "document.getElementsByClassName('search')[0].style.display = 'none'; " ; ✓
           "document.getElementsByClassName('keyword query')[0].style.visibility = 'visible'; " ; ✓
           "document.getElementsByClassName('result_container')[0].style.visibility = 'visible'; " ; ✓
           "document.getElementsByClassName('g_pr_ad_network')[0].style.display = 'none'; " ; ✓
           )))
    (popweb-dict-say-word word)
    (popweb-call-async
     "call_module_method"
     popweb-dict-module-path
     "pop_translate_window"
     (list
      "dict_youglish"
      x y x-offset y-offset
      frame-x frame-y frame-w frame-h
      width-scale height-scale
      url js-code))
    (popweb-dict-youglish-web-window-can-hide)))

;;;###autoload
(defun popweb-dict-youglish-input (&optional word)
  "Lookup WORD or user input."
  (interactive)
  (popweb-start
   'popweb-dict-youglish-translate
   (list (or word (popweb-dict-prompt-input "Youglish dict: "))))
  (add-hook 'post-command-hook
            #'popweb-dict-youglish-web-window-hide-after-move))

;;;###autoload
(defun popweb-dict-youglish-pointer ()
  "Lookup word at region or at point."
  (interactive)
  (popweb-dict-youglish-web-window-hide-after-move)
  (popweb-start
   'popweb-dict-youglish-translate
   (list (popweb-dict-region-or-word)))
  (add-hook 'post-command-hook
            #'popweb-dict-youglish-web-window-hide-after-move))

(defvar popweb-dict-youglish-web-window-visible-p nil)

(defun popweb-dict-youglish-web-window-hide-after-move ()
  "Hide popweb dict window after command."
  (when (and popweb-dict-youglish-web-window-visible-p
             (popweb-epc-live-p popweb-epc-process))
    (popweb-call-async "hide_web_window" "dict_youglish")
    (setq popweb-dict-youglish-web-window-visible-p nil)
    (remove-hook 'post-command-hook
                 #'popweb-dict-youglish-web-window-hide-after-move)))

(defun popweb-dict-youglish-web-window-can-hide ()
  "Hide popweb dict after timer."
  (run-with-timer
   1 nil
   (lambda ()
     (setq popweb-dict-youglish-web-window-visible-p t))))

(provide 'popweb-dict-youglish)
;;; popweb-dict-youglish.el ends here

用了官方提供的widget提供的效果:

话说,最后一个commit 可能需要 revert 到我 PR 的那个位置。去掉regex前后的 .* 就没有效果了。

我看看 zsbd