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

不清楚你的使用方式。

  1. knownwords.text是机器产生的,包含了正常词汇和snowstemmer认为的“词干”,比如 keynot marriag vulner caus advertis reliev quirk tangl,不是用来学习的列表。所以关注knownwords.txt本身就是不太对 :rofl: 我不用unknownwords.txt,不清楚长什么样

  2. 人名和地名是无穷尽的,比如冰岛男子姓是爸爸的名加-son,所以父亲名叫jack,儿子的姓就叫jackson,于是会有ason bson cson dson eson fson gson alphason betason … (可能有误)

  3. Dictionary overlay目前在我看来是个对buffer里所有单词进行粗标记的包,告诉你这个词形我库里有或没有,然后根据需要决定要不要查词。这个库要你自己喂它。喂的越多,它懂的越多。

  4. 我每次打开一个elfeed/eww订阅文章,渲染完光标都会自动跳到下一个生词,只要光标在生词里,就可以使用使用那些快捷键。我是右手流,所以你可以看到我多数按键都重绑到键盘右侧流,一只手干完多数处理词汇的操作。

记得猫大 @manateelazycat 有个小功能是既标记unknown同时查词的,可以去翻翻他词典部分的配置。

关于“ran out of input"的补充信息:

/Users/z/Library/Python/3.10/bin/trans "test"
Traceback (most recent call last):
  File "/Users/z/Library/Python/3.10/bin/trans", line 8, in <module>
    sys.exit(main())
  File "/Users/z/Library/Python/3.10/lib/python/site-packages/google_translate/cli/__init__.py", line 107, in main
    trans(args)
  File "/Users/z/Library/Python/3.10/lib/python/site-packages/google_translate/cli/__init__.py", line 50, in trans
    translation = translate(
  File "/Users/z/Library/Python/3.10/lib/python/site-packages/google_translate/__init__.py", line 34, in translate
    data = request.request_trans(
  File "/Users/z/Library/Python/3.10/lib/python/site-packages/google_translate/request.py", line 71, in procedure
    cache_data = pickle.load(cache)
EOFError: Ran out of input

感觉你这真的可能是被 google 限流了。阅读太勤奋。

我也不知道会被限多久,也不想和quota limit作斗争,我还要学习呢。于是找到了这个: GitHub - ssut/py-googletrans: (unofficial) Googletrans: Free and Unlimited Google translate API for Python. Translates totally free of charge. (这位大佬不更新了,一年半没活动了)

有两个fork更新得比较勤奋,不知道能不能用:

  1. GitHub - Lolimipsu/googletrans-mxloli: A modified version of a fork of googletrans
  2. GitHub - Leg3ndary/aiogtrans: Updated googletrans because there's more stuff I want

折腾了半天没折腾明白,哎,为了不折腾而变得折腾的生活呀哈哈

更新:搞定了,无Quota限制方案(高亮部分),不保证稳定有效,自己先在分支里测试一下子:

        from googletrans import Translator
        translator = Translator()
        translated = translator.translate(text=word, dest='zh-CN')
        return translated.text

再次更新:返回的都是单字,不知道为啥,继续排查。

高亮以上是google_translate的,以下是googletrans的:

继续更新:返回的是正常的翻译,但是渲染的时候只保留了首字母。

最后更新:因为这个词典返回的是string,不是list, 加个split()变列表, 解决了。

from googletrans import Translator
translator = Translator()
translated = translator.translate(text=word, dest='zh-CN')
return translated.text.split()
2 个赞

我理解 D-O 是按这两个 txt 来决定标注渲染的,那个 json 应该是保留的当前机器查词结果;因为我要在不同机器上用,所以是会把最新的合并到另一台机器上的这两个 txt 上;

3我没太理解 :rofl: 有个突出感受是Super作者需要Super用户,你是配得上 qinqi7 的 :grin:

你俩谁出个视频来展示下使用效果就好啦

只会elisp, 但被迫学习python的感觉你懂么 :摊手:

Dropbox大法好,谁用谁知道。

大佬强无敌。坐等你明天接着刷文章,但没有被限流的好消息。

@ginqi7 有新的问题出现了,现在d-o不认我的原来的 dictionary.json, knownwords.txt 了,强行替换进去就被删掉清零。这还怎么好好学习

@ginqi7 我一直没有明白 dictionary-overlay 为什么一定要定期从内存 snapshot 到文件呢?

插件和人都可以写文件就好了, 只是程序每次执行的时候重新读一下文件 (这个在本地其实都很快), 这样设计对用户来说, 体验会更好一点。

先 exits d-o ,然后再手动修改 dictionary.json, knownwords.txt 文件。

当初不想每次单词更新,就写入、读取文件。所以用定时更新的方式,当时想不要在dictionary-overlay 运行时手动更改文件。

不过确实不太友好。可以做一个小改动。每次更新文件时,先读一下文件,然后再和内存里的数据合并再写入。

你可以用 lsp-bridge/mergedeep.py at f118a40d7213b764e42950a87daba6bbad7f6854 · manateelazycat/lsp-bridge · GitHub 自带这个库。

每次读文件和内存的两个 json 格式可以直接按照 key 的方式去重合并的。

1 个赞

knownwords.txt 成功灌进去了,但dictionary.json没能成功。

猫大总有不同的好思路,期待一下新的合并机制 @gingi7

今天在 edx.org 试了下, eww 抽取不出来主要内容,有解决办法么

其实就是不要提前做过于精巧的设计, 架构设计前期抓大放小, 然后根据需求的展开自动去扩展框架。

这样开发效率最高, 复杂度和灵活度也很强。

4 个赞

新增了一个提交,在保存dictionary.json 文件时,会先合并文件json和内存中的json,然后再保存。

不过,knownwords.txt 和 unknownwords.txt 没有使用相同的机制,因为json文件是增量的,这两个txt文件,可能会再内存中删除。使用合并的方式不合适。所以没有根本上解决这个问题。

所以在 README 里加上了。

1 个赞

高效!马上试用

@ginqi7 目前的情况是,如果emacs崩溃,unknownwords.txt和dictionary.json 有可能会被清空。(Dropbox保命

:rofl: 这么神奇的吗。。那看来还是要找个时间,改掉这个定时同步的逻辑。