Giter VIP home page Giter VIP logo

ai-vocabulary-builder's Introduction

AI 生词本

AI 生词本(“AI Vocabulary Builder” 简称 aivoc)是一个利用了 AI 技术的智能生词本工具,它能帮你快速构建起自己的生词库,学习起来事半功倍。

核心功能:

  • 提供高质量的整句翻译能力
  • 由 AI 自动提取生词及释义
  • 独创的故事模式助记生词
  • 支持 CSV 等格式导出生词本

工具截图:

image

↑ Web App “笔记本”模式

image

↑ 交互式翻译,自动提取生词

image

↑ 通过阅读故事,牢固掌握生词

快速开始

本工具基于 Python 开发,请使用 pip 来安装本工具:

# 需要 Python 版本 3.7 及以上
pip install ai-vocabulary-builder

安装完成后,请在环境变量中设置你的 OpenAI API key

# 使用你在 OpenAI 官网上申请到的 key 替换该内容
export OPENAI_API_KEY='your_api_key'

之后执行 aivoc run 启动工具,进入交互式命令行模式。或者执行 aivoc notebook,在浏览器中打开可交互式 Web App(推荐)。

除环境变量外,你也可以通过 --api-key 参数完成设置:

aivoc run --api-key "your_api_key"

使用指南

使用 Web App

执行 aivoc notebook 命令,使用可交互式 Web App。

交互式命令行

执行 aivoc run 命令,会进入交互式命令行模式,在该模式下,你可以快速完成添加生词、阅读故事等操作。

添加生词

默认情况下,命令行处于“添加生词”模式,此时你可以直接粘贴一小段英文:

Enter text> It depicted simply an enormous face, more than a metre wide

按下回车后,工具会开始翻译工作。它首先会将你所输入内容的中文翻译打印到屏幕上。然后,它会从原文中提取出一个你最有可能不认识的单词,将其加入到生词本中。

                              Translation Result
┌───────────────┬─────────────────────────────────────────────────────────────┐
│ Original Text │ It depicted simply an enormous face, more than a metre wide │
│ Translation   │ 它只是简单地描绘了一个巨大的面孔,超过一米宽。              │
└───────────────┴─────────────────────────────────────────────────────────────┘


⠴  Extracting word
> The new word AI has chosen is "depicted".

┏━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Word     ┃ Pronunciation ┃ Definition                 ┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ depicted │ /dɪˈpɪkt/     │ 描述,描绘(原词:depict) │
└──────────┴───────────────┴────────────────────────────┘
"depicted" was added to your vocabulary book (78 in total), well done!

重选生词

某些情况下,工具所挑选的生词可能并非你所想的那个。此时,通过输入 no 命令,你可以启动一次重选:

Enter text> no

上一次被添加到生词本的单词会被丢弃,工具将尝试重新返回 4 个新生词(可能包含刚被丢弃的词),如下所示:

"depicted" has been discarded from your vocabulary book.
⠋  Extracting multiple new words
? Choose the word(s) you don't know (Use arrow keys to move, <space> to select, <a> to toggle, <i> to invert)
 » ○ depicted / (原词:depict) / dɪˈpɪkt / 描绘,描述
   ○ metre / (原词:meter) / ˈmiːtə(r) / 米
   ○ simply / ˈsɪmpli / 简而言之,仅仅
   ○ enormous / ɪˈnɔːməs / 巨大的,庞大的
   ○ None of above, skip for now.

请按↑↓方向键移动游标,按空格选中你想要的词(支持多选),按下回车确认。选中的单词会被添加到你的生词本中。

? Choose the word(s) you don't know done (2 selections)
New word(s) added to your vocabulary book: "metre,enormous" (79 in total), well done!

假如你所想的单词仍然没有出现在选项中,请选择 None of above, skip for now.,跳过本次添加。

别气馁,祝你下次好运。😁

查看生词

使用 list 命令可以查看生词本中最近添加的生词,默认展示 10 条:

Enter text> list

该命令接收一个可选参数:limit,用来指定生词的数量。常见用法:

# 查看最近 5 条
Enter text> list 5
# 查看所有生词
Enter text> list all

删除生词

使用 remove 命令可以进入“删除生词”模式。

image

在该模式下,你可以输入单词(按↑↓方向键选择自动补全),再按回车键将其从生词本中删除。除手动输入外,你还用可以用鼠标选择单词。

要退出“删除生词”模式,输入 q (或不输入任何内容)按下回车,工具将退回到“翻译模式”。

阅读故事来助记生词

为了快速并牢固掌握生词本里的单词,本工具提供了一个创新的故事模式。在交互式命令行模式下,输入 story 开始故事模式:

Enter text> story

工具将从生词本里挑选出 6 个单词,请求 AI 用这些词写一个小故事。输入如下所示:

Words for generating story: prudent, extraneous, serendipitously, onus, aphorisms, cater
⠼  Querying OpenAI API to write the story...
╭─────────────────────────────────────────── Enjoy your reading ────────────────────────────────────────────╮
│ Once there was a prudent young girl named Alice who always carried a small notebook with her. She wrote   │
│ down aphorisms and wise sayings that she heard from her elders or from books. It was an extraneous task,  │
│ but Alice believed that it helped her to be wise and joyful.                                              │
│                                                                                                           │
│ One day, Alice went for a walk in the park and serendipitously met an old man. He was reading a book, and │
│ Alice noticed that he had marked some phrases with a pencil. She greeted him and asked about the book.    │
│ They started to chat about literature, and the man shared some of his favorite aphorisms.                 │
│                                                                                                           │
│ Alice was delighted, and she wrote down the new sayings in her notebook. After their conversation, the    │
│ man thanked Alice and said that he felt as if a heavy onus had been lifted from his chest. Alice smiled   │
│ and said that it was her pleasure to cater to his needs.                                                  │
│                                                                                                           │
│ From then on, Alice and the old man often met in the park to exchange knowledge and wisdom. They learned  │
│ that serendipity could bring unexpected blessings to life.                                                │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────╯

阅读结束后,按下回车键,你可以继续查看在故事中出现的所有生词的详细信息。

其他功能

导出生词本

你可以使用 export 命令来导出你的生词本。以下是一些示例:

# 直接往屏幕输出文本格式
aivoc export
# 直接往屏幕输出 CSV 格式
aivoc export --format csv
# 往 ./voc.csv 写入 CSV 格式的生词本
aivoc export --format csv --file-path ./voc.csv

删除生词

如果你觉得你已经牢牢掌握了某个生词,你可以将它从生词本里删除。执行 remove 命令来完成这个任务:

# enormous 和 depicted 为需要删除的单词,多个单词使用空格分隔
aivoc remove enormous depicted

常用配置

此处列举了本工具的所有全局配置项。目前仅支持通过环境变量来完成配置,未来将增加对配置文件的支持。

如果你想了解各子命令支持哪些个性化参数,比如“导出”支持哪些格式和参数,请使用 --help 参数,比如:aivoc export --help

OPENAI_API_KEY

工具调用 OpenAI 的 API 时所使用的 API Key,必须设置。

示例:

export OPENAI_API_KEY='your_api_key'

OPENAI_API_BASE

工具所使用的 OpenAI 的 API 地址,可选设置。仅当默认 API 地址(https://api.openai.com/v1)无法正常访问时指定。

示例:

# 将 www.example.com 替换为你的域名
export OPENAI_API_BASE="https://www.my-openai-proxy.com/v1"

💡 请关注地址配置中的 /v1 部分。是否添加它,取决于你的代理配置如何。不确定的话可以先写上,如果无法成功调用,再去掉 /v1 试试看。

AIVOC_DATA_DIR

指定生词本储存数据文件的路径, 默认路径为当前登录用户的 home 目录: ~/

示例:

export AIVOC_DATA_DIR="$HOME/Documents"

为什么开发这个工具?

学习一门语言,生词本是一个非常重要的工具。一个内容优秀的生词本,至少需要包含:生词、释义、例句、例句释义这些内容。但是,手动维护这些内容非常麻烦,因此大部分人都没有自己的生词本。阅读时碰见生词,常常查过词典,转头就忘。

“AI 生词本”尝试着使用 ChatGPT 的能力,将生词本的维护成本降到最低,让每人都可以拥有自己的生词本。

TODO

ai-vocabulary-builder's People

Contributors

mpwang avatar natecc0902 avatar piglei avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ai-vocabulary-builder's Issues

能否增加命令行工具,便于跟其他软件集成

比如

aivoc trans "sample text to be translated"

这样可能便于跟类似Popclip这样的软件连接,也方便自动化程序调用。

可以考虑提供选项直接在stdout输出结果,或者提供识别结果的日志,此外,因为整个例句也都存入了,也相当于就是例句。唯一需要处理的是,自动化识别的唯一结果可能不是目标单词,也许可以加个行号或者其他index给这行,补充运行一下这一行就好。

生詞提取存在問題,能否提供手動單詞選擇 option

情況

图片

儅生詞提取為中文時,無法添加單詞至單詞本。


  • [ ] 那能否提供直接選擇 word 的參數? 因爲有些時候 response 太慢了,切換模式還不如我先行選擇。 😢

有時請求時間有點緩慢,如果能提供這個選項,是否會改進導入效果?
難道在 #15 的 GUI 中可以實現嗎?

我之前使用過 obsidian-language-learner,它利用了 i+1 等假説理論進行大量閲讀,類似於一款應用 LingQImmersion Reading

系統

  • Windows 11
  • Python 3.10.8

增加语言选择

建议增加语言选择, 英语,德语,法语,日语之类的

在翻译时支持流式输出

当前,用户每次输入待翻译文字时,需要等待比较长的时间,等到 API 完全返回后才能看到输出。

但 OpenAI 的 API 实际上支持 stream 输出。借助该特性,工具可以实现当用户输入内容后,即刻开始打印整句翻译内容。

当一个句子中存在多个生词

如题,对于一个英语句子我有好几个生词不认识,但是它只给出了我一个可能不认识的单词,我只能选择no抛弃这个选择另一个,但是目前这个单词也是我不认识的,我不想抛弃他,我想添加多个

FileExistsError: [WinError 183] Cannot create a file when that file already exists:

謝謝你解決了 #9 問題,爲了測驗功能完整性,我嘗試手動編輯選擇單詞,但遇到了問題:

当 Enter no 之后

> Enter text: no
"humbly" was discarded, preparing other words...
Traceback (most recent call last):
  File "C:\ProgramData\miniconda3\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\ProgramData\miniconda3\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\xxx\AppData\Roaming\Python\Python310\Scripts\aivoc.exe\__main__.py", line 7, in <module>
  File "C:\Users\xxx\AppData\Roaming\Python\Python310\site-packages\click\core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "C:\Users\xxx\AppData\Roaming\Python\Python310\site-packages\click\core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "C:\Users\xxx\AppData\Roaming\Python\Python310\site-packages\click\core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Users\xxx\AppData\Roaming\Python\Python310\site-packages\click\core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "C:\Users\xxx\AppData\Roaming\Python\Python310\site-packages\voc_builder\main.py", line 39, in main
    enter_interactive_mode()
  File "C:\Users\xxx\AppData\Roaming\Python\Python310\site-packages\voc_builder\interactive.py", line 75, in enter_interactive_mode
    handle_cmd_no()
  File "C:\Users\xxx\AppData\Roaming\Python\Python310\site-packages\voc_builder\interactive.py", line 96, in handle_cmd_no
    get_csv_builder().remove_words({ret.word_sample.word})
  File "C:\Users\xxx\AppData\Roaming\Python\Python310\site-packages\voc_builder\builder.py", line 103, in remove_words
    os.rename(new_path, self.file_path)
FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'C:\\Users\\xxx\\aivoc_builder.csv.new' -> 'C:\\Users\\xxx\\aivoc_builder.csv'

系統信息

  • Windows 11 22621
  • Python 3.10.8

开发 Web 主界面:“提取生词”

低保真线框图:

image

预期技术:

  • Vue.js 实现前端
  • FastAPI 实现后端 API
  • 用户执行 aivoc notebook 启动本地服务器,自动打开浏览器进入首页

支持使用 no 命令一次选择包括原词在内的多个单词

当前:

  • 用户输入 no 命令后,上一个被添加的生词会被丢弃(加入 known words)
  • 列出 3 个可能的生词,用户可从中挑选 1 个

期望:

  • 列出 3 个可能的生词,加上被丢弃的单词,共 4 个单词,用户可从中挑选多个

下载时提示不能找到对应版本

pip install ai-vocabulary-builder 命令始终无法正确运行
我尝试过换源,如下图
image
image

我使用的python版本是 3.7:
image

希望能得到解答,谢谢

支持使用 Server 服务端模式启动

本工具如果需要和划词搜索等浏览器插件联动,必须通过 HTTP API 的方式对外提供服务。

  • 增加 aivoc server -d 命令,支持在后台启动服务器
  • 通过 HTTP API 提供翻译并添加生词接口(目前不支持重选)

支持使用 no 命令重选单词

当前,如果由 AI 返回的生词并非是用户所想的,用户只能通过不断重复提交原句来获取新的生词。

在交互模式中:

  • 增加 no 特殊指令
  • 接收到 no 指令后,撤回上一次添加的生词(追加到“已掌握单词”中)
  • 重新发送句子,并让 AI 只返回除原词外的另外三个可能得生词
  • 用户通过 Prompt 选择后,将词加入生词本

支持 Quiz(测试) 模式

  • 支持使用 aivoc quiz 命令进入测试模式
  • 用户选择本次测试的单词数量
  • 通过展示例句,隐藏原单词的方式,测试对单词的掌握程度
  • 最好做的有趣一点

建议增加英文释义

一点小小的建议:考虑到中文英文并非完全能一一对应释义,尤其是通过中文释义很难辨析两个英文单词的区别。所以建议在生词释义中,增加英文释义(比如google dictionary? 不太确定google的这个服务是不是需要收费)。谢谢!

增加新命令 story:支持故事模式学习单词

当用户输入 story 指令后,AI 会翻译一段包含 6 个生词的小故事供用户阅读。

  • 故事中的生词应该以下划线标注
  • 阅读完成后,键入 enter 打印出所有生词的释义和原例句

建议支持直接输入单词,然后就可以添加到生词本

希望可以支持输入单个单词或者多个单词,直接添加到生词本。
很多时候只想将不熟悉的单词保存到单词本,方便后续复习和查阅。
当前要求输入整个句子,有时提取的单词并不是想要添加的,而且整句翻译需要一定的时间。如果支持直接添加生词的话,感觉会更加贴合生词本的核心含义。

【功能建议】建议增加符合“英语学习阶段”的功能

首先感谢开发者!

我觉可以实现一个强大的功能,可以期待一下。首先设定用户学习哪个阶段的单词,然后根据该阶段,比如高考、考研、四六级、雅思等等,来针对性给出真题例句。这样学习英语可能会高效一点。

考虑增加 GUI 模式

综合权衡,感觉未来需要做一个 GUI 模式。优点:

  • 上手门槛更低,许多操作用 REPL 模式并不算直观
  • 和划词插件整合后,有一个 GUI 可以方便用户更便捷的操作最近添加的生词

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.