paw.el外语学习,高亮笔记,单词本,等一体的新插件(Emacs的蒙哥阅读器、LingQ)

更新:深度集成eaf-browser(直接读取数据库高亮网页上存在的单词,点击即可查词,paw-view-note里面加词,paw-view-note里面删词,自动取段落作为笔记,开启paw-annotation-mode即可启动,暂时每次刷新网页都要重新开启),添加多发声源(paw-say-word-cambridge paw-say-word-oxford paw-say-word-jpod101-alternate paw-edge-tts-say-word paw-youdao-say-word paw-say-word-forvo, 添加了新的按钮),添加文本wordlists(可以当词典用)。eaf-browser需要用我的定制版:GitHub - chenyanming/eaf-browser: A modern, customizable and extensible browser in Emacs (暂时无法上到upstream,因为我做了不少定制)

还可以绑定

  (eaf-bind-key insert_or_paw_view_note_in_eaf "s" eaf-browser-keybinding)

选中单词后点击s就能查词。

output

output

划重点:

  1. 利用paw添加的单词会实时同步到eaf-browser中作为高亮,eaf-browser添加或者删除的单词也会实时同步到数据库,eaf-browser会直接读取数据库进行高亮,不占用emacs资源。名副其实的eaf-browser单词本插件。
  2. 不是简单的取词查词动作,paw会取选中的单词所在段落作为笔记,还会把网页的地址取下来作为单词的原始地址,从而做到查词的同时保存所在的所有有用的上下文信息,所以才需要定制版的eaf-browser。同时,也对网页上所有的段落(html p tag)的句子划分为单词,给每个单词添加click event和鼠标underline标示,从而做到点击就能查词的动作,只要鼠标移动到单词且看到该单词有underline就代表这个单词可以点击,从而减少误操作。
  3. 抓取知名英文日文网络词典,添加多发声源,可以调整paw-say-word-functions来调整发声源优先级。anki部分也会自动下载发声源哦:paw-anki-download-sound-functions
2 个赞

更新:现在paw-view-note-in-minibuffer支持eldoc-box了(安装eldoc-box就可以启动),使用csv格式的词典paw-ecdict-wordlist-files查单词(独创新功能,只要是csv或者txt文件都可以当词典用,支持多csv同时查询,wordlists的另一个作用就是上次更新的,用来高亮用户的单词,词组甚至是句子),如果没有就用paw-ecdict-db。

paw-view-note-show-type配置成all,就可以同时使用了弹出(使用wordlist和db)和侧边window(使用go-translate和sdcv)查看了,没有冲突。

3 个赞

开发了paw配套的浏览器插件,现在可以在浏览器配合paw一起用 paw – Get this Extension for 🦊 Firefox (en-US)

paw现在已经支持外部浏览器高亮了,同时支持在浏览器查看和删除单词(暂时支持firefox手机和电脑,chrome正在审核中):

安装

# paw-server
pip install flask
pip install flask-cors

启动 M-x paw-server

因为默认5000在mac里面已经被占用,需要在扩展的配置页面手动修改成5001,Eamcs端默认已经5001(配置paw-server-port). image

paw-server是一个独立的非常简单的python http服务器(参考源码中的paw-server.py),用来跟浏览器交换数据,python通过直接读取paw的数据库,然后把所有单词信息传送到浏览器,浏览器在每次刷新页面都会匹配页面的所有单词,然后高亮它们。

开发它是因为,我发现我还是喜欢用外部浏览器和手机firefox看英语材料(新闻什么的),在手机上用firefox配合Emacs也能实现查词和管理单词的效果,同时能将单词的上下文传送到Emacs,用AI翻译,和用gtpel问AI问题,来进一步学习。再加上,我用Emacs nov看epub电子书和阅读Read it later文章(wallabag.el),我需要将一些付费文章加到wallabag中,然后在Eamcs中进一步学习。

市面上的手机、电脑查单词软件,都只能查单词本身,并不能把单词的上下文一起查了,同时添加单词到单词本的时候,也是非常零散的,只能添加单词的本身,而无法把单词的上下文,出处(网页还是电子书),给一并添加到单词本。而学习语言,单词的上下文非常重要,所以,paw尽最大的可能,在所有的阅读场景,将单词的所有相关信息都保存下来(插件不只是查单词本身,还会通过javascript获取单词的上下文发送到Emacs,然后Emacs里面直接进行翻译等),每次阅读的时候就能在高亮的地方看到上次添加的单词所在的场景。如下图所示,paw-server突破了Emacs本身,扩展到浏览器:

发布emacs-paw命令行工具和chome extension:

同时更新了安装部分的文档,介绍所有的依赖:

例子(匹配一段日文文字,在japanese.db和蓝宝书日语文法.csv查词,返回词典里面有的单词,使用japanese.txt过滤不想被查的单词):

paw ja_search /home/damonchan/org/japanese.db MATCH 海外の大企業は「ダイバーシティ(多様性)&インクルージョン (包括的) --tag "" --wordlist /home/damonchan/org/c --known-words-files /home/damonchan/org/japanese.txt

[
    {
        "kanji": "の",
        "waller_definition": "-->蓝宝书日语文法\n-->の\n接続:『动普通形/い形普通形/な形词干+な/名+な』+の\n強[つよ]い 子[こ]どもは 泣[な]かないの。\n坚强的孩子不能哭鼻子。\n説明:表示轻微的命令。“你得……”,“你要……”。\n註意:表示命令,语气较强。\n\n\n\n強い子どもは泣かないの。\n\n-->蓝宝书日语文法\n-->の\n接続:『动普通形/い形普通形/な形词干+な/名+な』+の\n今日[きょう]は 休[やす]みなのよ。\n今天休息。\n説明:表示轻微的断定。“是……的”。\n註意:读降调,还可以使用「のよ」,「のね」的形式。\n\n\n\n今日は 休みなのよ。\n\n-->蓝宝书日语文法\n-->の\n接続:『动普通形/い形普通形/な形词干+な/名+な』+の\n顔色[かおいろ]が 悪[わる]いけど,どうしたの?\n你的脸色不好,怎么啦?\n説 明:表示疑问。“……吗”。\n註意:读升凋,语气比终助词「か」柔和。主要为女性和儿童使用。\n\n\n\n顔色が悪いけど,どうしたの?\n\n-->蓝宝书日语文法\n-->の\n\n空[そら]を 鳥[とり]が 飛[と]んでいるのが 見[み]えます。\n我看到有鸟飞过天空。\n説明:形式体言,在句中通常不翻译出来。\n註意:「〜の」可是代替宾语和主语部分,例文中的是代替主语部分。\n\n\n\n空を鳥が飛んでいるのが見えます。\n\n-->蓝宝书日语文法\n-->の\n接続:名词+の……\n田中[たなか]さんの 来[く]る 日[ひ]は 火曜日[かようび]です。\n田中周二来。\n説明:作 句子的修饰成分。\n註意:此种用法的「の」是由从句中主格助同「が」变过来的。\n\n\n\n田中さんの来る日は火曜日です。\n\n-->蓝宝书日语文法\n-->の\n接続:『い形容词辞书形/な 形容词词干』+な+の\nもうちょっと 安[やす]いのを、 見[み]せてください。\n请让我看看再便宜一些的。\n説明:在句中可以明确名词所指何物的情况下,可以用「の」代替该名词。\n\n\n\n\nもうちょっと安いのを、見せてください。\n\n-->蓝宝书日语文法\n-->の\n接続:名词+の+名词\n日本[にほん]の 古[ふる]い 映画[えいが]を 見[み]ました。\n看了日本的老电影 。\n説明:表示所属、性质、限定、同位语等。\n註意:「の」的此种用法不一定翻译成汉语的“……的”。另外在所属物品相当明确的情况下,「の」可以代替句中省略掉的所属物品。\n\n\n\n日本の古い映画を見ました。"
    },
    {
        "kanji": "は",
        "waller_definition": "-->蓝宝书日语文法\n-->は\n接続:名词(+助词に、へ、で、と、から、まで)+は\n山田[やまだ]さんはテニスはしますが、ゴルフはしません\n山田打网球,不过不打高尔夫。\n説明:「〜は〜(が)、〜は〜」句型可以用来进行两种事物的比较。\n註意「は」和「が」的区別:  ①提示主题用「は」,提示主语用「が」。  例: 象[ぞう]は 鼻[はな]が 長[なが]いです。/大象鼻子长。\n②对主题进行说明判断时用「は」,陈述眼前看到的、听到的、实际感受到的事情时用「が」。  例1:東北[とうほく] 地方[ちほう]の 雪[ゆ き]は 多[おお]いです。/东北地区雪下得多。 例2: 今[いま]、 雪[ゆき]が 降[ふ]っています。/现在正在下雪。\n③提示已知事物用「は」,未知事物用「が」。  例1: 机[つくえ]の  上[うえ]に 日本語[にほんご]の 教科書[きょうかしょ]があります。それは 王[おう]さんのです。/桌上有本日语教科书,那是小王的。 例2:どの 人[ひと]が 山下[やました]さんですか。/哪位是山下先生(小姐)?\n④「は」的指示范围涉及全句,即关联句末的谓语,可以说是句子的大主语;「が」可指示分句中主语,也可以称作是此类句子的小主语。  例: 母[はは]が 作[つく]るサシドイッチはおいしいです。。/妈妈做的三明治很好吃。\n山田さんはテニスはしますが、ゴルフはしません\n\n-->蓝宝书日语文法\n-->は\n接続:名词(+助词に、へ、で、と、から、まで)+は\n明日[あした]は 雪[ゆき]が 降[ふ]るでしょう。\n明天会下雪吧。\n説明:「〜は〜が〜」句型可以用来说明主题的某种状态。\n註意「は」和「が」的区別:  ①提示主题用「は」,提示主语用「が」。  例: 象[ぞう]は 鼻[はな]が 長[なが]いです。/大象鼻子长。\n②对主题进行说明判断时用「は」,陈述眼前看到的、听到的、实际感受到的事情时 用「が」。  例1:東北[とうほく] 地方[ちほう]の 雪[ゆき]は 多[おお]いです。/东北地区雪下得多。 例2: 今[いま]、 雪[ゆき]が 降[ふ]っています。/现在正在下雪。\n③提示已知事物用「は」,未知事物用「が」。  例1: 机[つくえ]の 上[うえ]に 日本語[にほんご]の 教科書[きょうかしょ]があります。それは 王[おう]さんのです。/桌上有本日语教科书,那是小 王的。 例2:どの 人[ひと]が 山下[やました]さんですか。/哪位是山下先生(小姐)?\n④「は」的指示范围涉及全句,即关联句末的谓语,可以说是句子的大主语;「が」可指示分句中主语,也可以称作是此类句子的小主语。  例: 母[はは]が 作[つく]るサシドイッチはおいしいです。。/妈妈做的三明治很好吃。\n明日は雪が降るでしょう。\n\n-->蓝宝书日语文法\n--> は\n接続:名词(+助词に、へ、で、と、から、まで)+は\nわたしの 部屋[へや]はあまりきれいじゃありません。\n我的房间不太整洁。\n説明:「は」用来提示主题,并对主题进行说明 和判断。\n註意「は」和「が」的区別:  ①提示主题用「は」,提示主语用「が」。  例: 象[ぞう]は 鼻[はな]が 長[なが]いです。/大象鼻子长。\n②对主题进行说明判断时用「は」,陈述眼前看到的、听到的、实际感受到的事情时用「が」。  例1:東北[とうほく] 地方[ちほう]の 雪[ゆき]は 多[おお]いです。/东北地区雪下得多。 例2: 今[いま]、 雪[ゆき]が 降[ふ]っています。/现在正在下雪。\n③提示已知事物用「は」,未知事物用「が」。  例1: 机[つくえ]の 上[うえ]に 日本語[にほんご]の 教科書[きょうかしょ]があります。それは 王[おう]さんのです。/桌上有本日语教科书,那是小王的。 例2:どの 人[ひと]が 山下[やました]さんですか。/哪位是山下先生(小姐)?\n④「は」的指示范围涉及全句,即关联句末的谓语,可 以说是句子的大主语;「が」可指示分句中主语,也可以称作是此类句子的小主语。  例: 母[はは]が 作[つく]るサシドイッチはおいしいです。。/妈妈做的三明治很好吃。\nわたしの部 屋はあまりきれいじゃありません。"
    }
]

匹配一段英文文字:

paw en_search /home/damonchan/org/stardict.db MATCH "The GNU General Public License is a free, copyleft license forsoftware and other kinds of works." --tag ""  --wordlists /home/damonchan/org/5000.csv --known-words-files /home/damonchan/org/eudic.csv,/home/damonchan/org/english.txt                                                                                                                                                                    
[
    {
        "word": "cop",
        "definition": "-->5000\n-->cop\nc1\nhttps://www.oxfordlearnersdictionaries.com/definition/english/cop_1\nhttps://www.oxfordlearnersdictionaries.com/media/english/uk_pron/c/cop/cop__/cop__gb_1.mp3\nhttps://www.oxfordlearnersdictionaries.com/media/english/us_pron/c/cop/cop__/cop__us_1.mp3"
    },
    {
        "word": "license",
        "definition": "-->5000\n-->license\nc1\nhttps://www.oxfordlearnersdictionaries.com/definition/english/license_1\nhttps://www.oxfordlearnersdictionaries.com/media/english/uk_pron/l/lic/licen/license__gb_1.mp3\nhttps://www.oxfordlearnersdictionaries.com/media/english/us_pron/l/lic/licen/license__us_1.mp3"
    }
]

1 个赞

如果将sdcv更新为sdcv-20241227.319(链接Public Git Hosting - sdcv.el.git/summary) ,打开paw-view-note会出现let*: Symbol’s value as variable is void: sdcv-env-lang? 旧版本的sdcv.el没有问题。

要用懒猫的sdcv