翻译 分享 ecdict 词典命令行工具,包含 340 万离线单词

ccmywish · 2020年10月26日 · 最后由 qinsicheng 回复于 2023年02月13日 · 2500 次阅读

致谢: 首先感谢 @skywind3000 搜集,制作并维护了ECDICT这么好的词库,非常不容易。

起源: 我尝试过许多命令行查词工具都不够满意,唯一让我惊喜的是@qhwa 写的 Command-Line-Youdao-Dictionary 我一直在使用它,但是也有一些不足,比如每次联网查询速度在 1.0s 左右,且经常音标为 nil,这是那个 api 不够稳定的问题。最近我发现了 ECDICT 这个很棒的词库,但词库庞大难下载 (在 Github 上);虽然提供了充足的 api,但是不足以让用户直接使用,于是我就想着用 Ruby 写一个易分发的版本吧 , 如果大家也可以使用就最好啦 (下方有 gif 演示)


介绍

📚 ecdict dictionary (Ruby Powered)

命令行端的离线词典 ecdict,数据源包含 340 万单词,由项目skywind3000/ECDICT提供

本项目在 Linux 上开发,支持 Windows,macOS.

提供两个命令ecreplecdict,前者用于交互式查询,后者用于单个单词查询


演示

ecdict and ecrepl

安装

仓库仅有 50MB

依赖

  • Ruby
  • SQLite3

插入数据库时间大概为 2-4 分钟


自动安装

macOS 和 Linux 用户

bash -c "$(curl -fsSL https://gitee.com/ccmywish/ecdict/raw/master/tools/install4nix.sh)"

Windows 用户 (PowerShell)

iwr -useb https://gitee.com/ccmywish/ecdict/raw/master/tools/install4win.ps1 | iex

如果出现错误,请运行

Set-ExecutionPolicy RemoteSigned -scope CurrentUser

若 bundle 安装 gem sqlite3 失败,请翻到最下方查看解决方法


使用

  • ecdict word 查询单词 word
  • ecrepl 进入交互式查询,输入 exit 或 Ctrl-C 退出


Troubleshoot

Windows 下 bundle 安装 sqlite3 失败

  • 下载安装 sqlite 源代码 sqlite-amalgamation-xxxx.zip 解压到某文件夹如 D:\sqlite-src.
  • 在 ecdict 文件夹下输入gem install sqlite3 -- --with-sqlite3-lib=D:\sqlite-src

感谢分享

赞~

陡然看到 gitee.com 的地址还有些反应不过来

但是 真的酷毙了~

使用过程中发现安装脚本跟我的环境稍微有点冲突

其实老哥你既然用 ruby 作为依赖 install.sh 也可以用 ruby 来消除各种系统的兼容性问题

我在安装的时候就遇到

 bash ./install.sh                                                                                                                                                                                          master
readlink: illegal option -- f
usage: readlink [-n] [file ...]
usage: dirname path

以及 7z 的问题,其实甚至可以用 ruby 的 gem zip 解的

jicheng1014 回复

您应该使用的是 macOS 吧,macOS 上的 gnu coreutils 版本好像都很古老,所以 readlink 会报错。我来研究一下直接用 Ruby 来写安装脚本。感谢反馈和支持~

jicheng1014 回复

😁 您的建议太棒了,现在已经用 install.rb 重写了,而且不再需要 7z 了。您可以再用上面的命令尝试一下 ~

👍 包括词库 50M 还是可以接受的

重开 shell 也一样

tinyfeng 回复

~/.bashrc 最后加上:

export PATH="~/.local/share/ecdict:$PATH"

然后:

source ~/.bashrc
cd ~/.local/share/ecdict
chmod +x ecdict.rb
chmod +x ecrepl.rb
mv ecdict.rb ecdict
mv ecrepl.rb ecrepl
Peter 回复

export PATH="~/.local/share/ecdict:$PATH"

试了一下,这里要换成具体路径,比如/Users/xxx,不能用~,我是 mac

然后这几步应该之前都执行过了,没有问题

chmod +x ecdict.rb
chmod +x ecrepl.rb
mv ecdict.rb ecdict
mv ecrepl.rb ecrepl
tinyfeng 回复

没有问题 的意思是你搞定了?

另外,换个头像吧,虽然现在很有个性,你可能也觉得有趣。因为不好区分你的回复和别人的帖子。

tinyfeng 回复

不好意思,我的疏忽。昨天改 install.rb 时忘记创建符号链接了。由于我的系统已经存在那两个命令,所以提交完后重新安装没发现这个问题。 已经修复了,你可以把那个目录手动删除,然后再重新运行一下上面的安装命令。

Peter 回复

搞定了,没什么特别喜欢的头像,就一直用的这个~

使用中遇到一个问题,使用了 rvm,在不同项目下会自动切换 ruby 版本。

当进入一个其他 ruby 版本项目的时候:

/Users/tiny/.local/share/ecdict/ecrepl:13:in `require': cannot load such file -- sqlite3 (LoadError)
        from /Users/tiny/.local/share/ecdict/ecrepl:13:in `<main>'

现在的问题要得到解决,需要我在每个 ruby 版本的 gems 都去 bundle install 一下

这种情况下,是不是可以通过 sh 脚本来做一些优化...

tinyfeng 回复

我并没有找到最佳方法来解决这个问题。

但是我找到两种也许可行的方法,

1 . 在~/.rvm/gemsets/default.gems中添加 ecdict 所需要的 gem

sqlite3
progress_bar
seven_zip_ruby -v~> 1.3

2 . 运行 rvm gemset copy 2.7.0 3.0.0-preview1

前者 (2.7.0) 是你已经安装好 ecdict 依赖的 Ruby 版本,后者是待安装 ecdict 依赖的 Ruby 版本 (3.0.0-preview1)

需要 登录 后方可回复, 如果你还没有账号请 注册新账号