Giter Site home page Giter Site logo

crissium / silverdict Goto Github PK

View Code? Open in Web Editor NEW
143.0 143.0 18.0 6.98 MB

Web-Based Alternative to GoldenDict

Home Page: https://silverdict.lecoteauverdoyant.co.uk

License: GNU General Public License v3.0

JavaScript 35.86% HTML 0.62% Python 61.11% Shell 0.42% XSLT 1.28% Dockerfile 0.72%
dictionary dsl goldendict lingvo lingvodsl mdict stardict

silverdict's People

Contributors

crissium avatar simonmysun 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

silverdict's Issues

Failure to set up on Android and Termux

System is Android 13 on Google Pixel 6 Pro. Attempted step
on Termux:
pip3 install flask
pip3 install fask-cors
pip3 install waitress
pip3 install requests
apt install yarn

scp the zip file downloaded from github to termux, unzip it and enter the directory
cd client
yarn install
yarn build
mv dict ../http_server
cd ../
python 3.11 http_server/http_server.py
python 3.11 server/server.py

open web browser, nothing happens
on the server/server.py terminal no output
on http_server terminal

Exception occurred during processing of request from ('127.0.0.1', 44442)
Traceback (most recent call last):
File "/data/data/com.termux/files/usr/lib/python3.11/socketserver.py", line 317, in _handle_request_noblock
self.process_request(request, client_address)
File "/data/data/com.termux/files/usr/lib/python3.11/socketserver.py", line 348, in process_request
self.finish_request(request, client_address)
File "/data/data/com.termux/files/usr/lib/python3.11/socketserver.py", line 361, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/data/data/com.termux/files/usr/lib/python3.11/socketserver.py", line 755, in init
self.handle()
File "/data/data/com.termux/files/usr/lib/python3.11/http/server.py", line 436, in handle
self.handle_one_request()
File "/data/data/com.termux/files/usr/lib/python3.11/http/server.py", line 424, in handle_one_request
method()
File "/data/data/com.termux/files/home/SilverDict-main/http_server/http_server.py", line 26, in do_GET
with open('dist' + path, 'rb') as f:
^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'dist/index.html'

127.0.0.1 - - [28/Aug/2023 03:55:15] "GET /favicon.ico HTTP/1.1" 200 -

Exception occurred during processing of request from ('127.0.0.1', 44450)
Traceback (most recent call last):
File "/data/data/com.termux/files/usr/lib/python3.11/socketserver.py", line 317, in _handle_request_noblock
self.process_request(request, client_address)
File "/data/data/com.termux/files/usr/lib/python3.11/socketserver.py", line 348, in process_request
self.finish_request(request, client_address)
File "/data/data/com.termux/files/usr/lib/python3.11/socketserver.py", line 361, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/data/data/com.termux/files/usr/lib/python3.11/socketserver.py", line 755, in init
self.handle()
File "/data/data/com.termux/files/usr/lib/python3.11/http/server.py", line 436, in handle
self.handle_one_request()
File "/data/data/com.termux/files/usr/lib/python3.11/http/server.py", line 424, in handle_one_request
method()
File "/data/data/com.termux/files/home/SilverDict-main/http_server/http_server.py", line 26, in do_GET
with open('dist' + path, 'rb') as f:
^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'dist/favicon.ico'

Any help in getting it to work would be most appreciated!

Failure to deploy Docker container on Synology NAS

Hi! I stumbled with this project by chance, and this is exactly what I had been hoping existed! I had been wanting to be able to self-host my GoldenDict collection. Thanks for putting this together; the demo looks very good.

However, I'm having trouble installing this in a Synology NAS using Docker. I'm using the ready-built image from Docker Hub, so I put together the following compose file:

version: '3.9'
services:
  silverdict:
    image: mathdodger/silverdict:latest
    container_name: SilverDict
    restart: unless-stopped
    user: 1029:100 # "docker" user:"users" usergroup
    ports:
      - 2628:2628
    volumes:
      - /volume1/Docker/SilverDict/data/:/home/silverdict/.silverdict/ # Default folder
      - /volume1/Docker/SilverDict/cache/:/home/silverdict/.cache/SilverDict/ # Optional mounting of cache
      - /volume1/Dictionaries/_New dictionary library/:/dictionaries/ # Dictionary library; to be configured later

But I'm getting a few errors on the log, most notably about permission on certain folders. But I'm sure the user I defined has read and write permissions on the mounted folders.

The folowing is the logfile:

建议

大佬您好,我是论坛过来的,老占楼回复不太方便,在这里记录一下我的小建议

功能上:

  1. 增加对compact html紧凑格式的支持
  2. 简繁通搜如果能实现不依赖标记组的语言为 zh ,直接在默认组就能实现就好了

界面上:

pic_1706884716.png

  1. 三栏宽度可调整
  2. 词典名称字体大小可以稍微小一些

Collaboration on this project?

Hi there, I found this project when searching for an alternative of Goldendict, since it no longer works on newer version of Android.

I have always wanted to have a commandline dictionary look up tool for stardict and ABBYY DSL dictionary format, with a web based front end, so that it would be extremely portable and easy to maintain. For example, I envision using this on Android on Termux, running a local browser and accessing the dictionary interface on a local browser. This way none of those scope storage troubles or any future API changes would destroy the function of the the app.

I myself is not a real programmer (I only code for my scientific work, in C and Fortran, mostly numerical works run on large clusters). But I have started collaborating with two experienced programmers and we made some progress in achieving this goal.

One result is this project https://github.com/proteusx/lectus But it has since stalled because the programmer in question prefer perl, and is not very well versed in the web interface side. Nonetheless, that project achieved much success in producing a commandline parser for DSL format and converting all its tags (e.g. colors) into html and can be displayed in a rudimentary web interface. The DSL dictionary is also indexed in sqlite database, with excellent search performance.

I also kept a decade-long correspondence with the developer of this project
https://www.lesbonscomptes.com/recoll/pages/index-recoll.html
And he has kindly coded, in python, two very modular searching and indexing code, which can index the dictionaries, in both stardict and DSL format, in a sqlite database, and can search and retrieve the raw entries with excellent performance. (in a few tenths of seconds on Android phone via termux even for lexicon with million entries, and scaling well with number of entries).

Given your expertise in web development, I see a possible synergy in putting what my two friends already achieved into your project and reaching our shared goal a lot more quickly.

If you're interested in collaborating, perhaps we could get in touch by email. My email address is just like my github username, but instead of the dash in between my first and last name there is a dot, and the email domain name is gmail. Please reach out to me and I can send you my second friend's python modules to index the DSL and stardict format into an sqlite databse and we can see what's the best way to proceed.

trying to install silverdict on a debian lxc

hi there,
i did yarnpkg build , but there is no "http_server" to move

i got this :


(sd) root@lxcSilDict:/home/SilverDict/client# yarnpkg build
yarn run v1.22.19
$ react-scripts build
Creating an optimized production build...
One of your dependencies, babel-preset-react-app, is importing the
"@babel/plugin-proposal-private-property-in-object" package without
declaring it in its dependencies. This is currently working because
"@babel/plugin-proposal-private-property-in-object" is already in your
node_modules folder for unrelated reasons, but it may break at any time.

babel-preset-react-app is part of the create-react-app project, which
is not maintianed anymore. It is thus unlikely that this bug will
ever be fixed. Add "@babel/plugin-proposal-private-property-in-object" to
your devDependencies to work around this error. This will make this message
go away.

Compiled with warnings.

[eslint]
src/DesktopApp.js
  Line 96:5:   React Hook useEffect has missing dependencies: 'query' and 'search'. Either include them or remove the dependency array                                             react-hooks/exhaustive-deps
  Line 128:5:  React Hook useEffect has missing dependencies: 'latestSuggestionsTimestamp' and 'resetDictionariesHavingQuery'. Either include them or remove the dependency array  react-hooks/exhaustive-deps

src/MobileApp.js
  Line 102:5:  React Hook useEffect has missing dependencies: 'query' and 'search'. Either include them or remove the dependency array                                             react-hooks/exhaustive-deps
  Line 128:5:  React Hook useEffect has missing dependencies: 'latestSuggestionsTimestamp' and 'resetDictionariesHavingQuery'. Either include them or remove the dependency array  react-hooks/exhaustive-deps

src/components/Article.js
  Line 50:5:  React Hook useEffect has missing dependencies: 'isMobile' and 'setQuery'. Either include them or remove the dependency array  react-hooks/exhaustive-deps

Search for the keywords to learn more about each warning.
To ignore, add // eslint-disable-next-line to the line before.

File sizes after gzip:

  60.89 kB  build/static/js/main.88278f2a.js
  744 B     build/static/css/main.76883690.css
  658 B     build/static/css/319.e3dc2fa1.chunk.css
  533 B     build/static/css/607.7065f111.chunk.css
  164 B     build/static/js/607.1b6d42e2.chunk.js
  163 B     build/static/js/319.f9ef5ac5.chunk.js

The project was built assuming it is hosted at /.
You can control this with the homepage field in your package.json.

The build folder is ready to be deployed.
You may serve it with a static server:

  yarn global add serve
  serve -s build

Find out more about deployment here:

  https://cra.link/deployment

Done in 15.22s.
(sd) root@lxcSilDict:/home/SilverDict/client# ll
total 512
drwxr-xr-x   6 root root   4096 Oct 11 18:27 ./
drwxr-xr-x   7 root root   4096 Oct 11 18:26 ../
-rw-r--r--   1 root root   3352 Oct 11 18:26 README.md
drwxr-xr-x   3 root root   4096 Oct 11 18:27 build/
drwxr-xr-x 844 root root  36864 Oct 11 18:27 node_modules/
-rw-r--r--   1 root root    840 Oct 11 18:26 package.json
drwxr-xr-x   2 root root   4096 Oct 11 18:26 public/
drwxr-xr-x   3 root root   4096 Oct 11 18:26 src/
-rw-r--r--   1 root root 450978 Oct 11 18:26 yarn.lock
(sd) root@lxcSilDict:/home/SilverDict/client#

nginx won't proxy certain API requests?

It's not a problem with SilverDict, I guess, but my nginx configs instead. If I try to run

curl https://www.eplscz1rvblma3qpwsxvrpo930wah.xyz/api/cache/GrandRobert/GrandRobert.css

on my local machine, I get a 404 error. But if I curl the CSS directly using the backend API on the server, it is all right:

curl localhost:2628/api/cache/GrandRobert/GrandRobert.css -o-
��.m1 {text-align: justify}
.m2 {text-align: justify;padding-left: 4%}
.m3 {text-align: justify;padding-left: 8%}
.m4 {text-align: justify;padding-left: 12%}
.m6 {color: gray}
.m8 {text-align: center;padding-right: 20%}

Additionally, if I look up some words on my local machine using the remote API, it also works well:

curl -I https://www.eplscz1rvblma3qpwsxvrpo930wah.xyz/api/lookup/GrandRobert/polonais
HTTP/2 200 
date: Thu, 18 May 2023 11:46:07 GMT
content-type: text/html; charset=utf-8
access-control-allow-origin: *
x-frame-options: DENY
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
strict-transport-security: max-age=31536000
cf-cache-status: DYNAMIC
report-to: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=56dTOUG9%2FBS2Xh1OdRwi9lDgmgWxEwncSb41GC9KIWjNlEy0TiRPummyfqDitR0Zd1APn3r%2FN7eRZYqGYNpbqf%2BgCoisDGIb%2BQ%2FeJA8axju90SKIn9iWuzfahkj5ZmHYwP88969BQ3PnYN%2FrilkMPneU6iLJEde%2FD48tErzjnry%2Fdnmj"}],"group":"cf-nel","max_age":604800}
nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
server: cloudflare
cf-ray: 7c93db9aad6804f7-HKG
alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400

So, it seems that nginx just won't proxy requests under /api/cache/. What could be the problem?


Moreover, my local nginx (on my laptop) does proxy such requests:

curl localhost:80/api/cache/GrandRobert/GrandRobert.css -o-
��.m1 {text-align: justify}
.m2 {text-align: justify;padding-left: 4%}
.m3 {text-align: justify;padding-left: 8%}
.m4 {text-align: justify;padding-left: 12%}
.m6 {color: gray}
.m8 {text-align: center;padding-right: 20%}

Failure to set up on Debian 12

I tried to set up a local server on Debian 12. Steps I took:
as root
apt-get install python3-flask-cors python3-waitress python3-flask
apt-get install yarnpkg
then as user, download the zip file from github go into the unzipped directory.
cd client
yarnpkg install
yarnpkg build
mv dict ../http_server
python3.11 http_server/http_server.py
python3.11 server/server.py

then open http://localhost:8081 on web browser
Nothing shows up. On the terminal with server/server.py, nothing shows. on the http_server.py one:
127.0.0.1 - - [28/Aug/2023 03:35:28] "GET / HTTP/1.1" 200 -

Exception occurred during processing of request from ('127.0.0.1', 39100)
Traceback (most recent call last):
File "/usr/lib/python3.11/socketserver.py", line 317, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python3.11/socketserver.py", line 348, in process_request
self.finish_request(request, client_address)
File "/usr/lib/python3.11/socketserver.py", line 361, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python3.11/socketserver.py", line 755, in init
self.handle()
File "/usr/lib/python3.11/http/server.py", line 432, in handle
self.handle_one_request()
File "/usr/lib/python3.11/http/server.py", line 420, in handle_one_request
method()
File "/tmp/tmp/SilverDict-main/http_server/http_server.py", line 26, in do_GET
with open('dist' + path, 'rb') as f:
^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'dist/index.html'

127.0.0.1 - - [28/Aug/2023 03:35:28] "GET /favicon.ico HTTP/1.1" 200 -

Exception occurred during processing of request from ('127.0.0.1', 39108)
Traceback (most recent call last):
File "/usr/lib/python3.11/socketserver.py", line 317, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python3.11/socketserver.py", line 348, in process_request
self.finish_request(request, client_address)
File "/usr/lib/python3.11/socketserver.py", line 361, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python3.11/socketserver.py", line 755, in init
self.handle()
File "/usr/lib/python3.11/http/server.py", line 432, in handle
self.handle_one_request()
File "/usr/lib/python3.11/http/server.py", line 420, in handle_one_request
method()
File "/tmp/tmp/SilverDict-main/http_server/http_server.py", line 26, in do_GET
with open('dist' + path, 'rb') as f:
^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'dist/favicon.ico'

Where did I get wrong in terms of following instructions? How to get it to work?

将 suggestions_mode 从 right-side 改为 both-sides 时出现 sqlite3.OperationalError

背景

我使用 GoldenDict-ng 软件查询 nuisance 时 从 SIO双向双解词典v3.3.mdx 获得的 suggestions 比 SiverDict 本地来的全。

➜ curl http://127.0.0.1:2628/api/suggestions/Default%20Group/%nuisance%
{"suggestions":["nuisance","nuisance analysis","nuisance area","nuisance call","nuisanceless","nuisanceless technology","nuisance order","nuisance organism","nuisance or pyblic nuisance","nuisance parameters","nuisance raid","nuisances","nuisance tax","nuisance taxs","nuisancethreshold","nuisance value","nuisancevalue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"timestamp":1699155984046.5842}

获取的结果只有十七条。(我已经设置 num_suggestions: 100

image

而使用 GoldenDict-ng 软件获取的结果如图,明显是比 SilverDict 多。

复现

我尝试将 preferences.yaml 中的 suggestions_mode: right-side # instantaneous 改为 both-side
再次运行 curl http://127.0.0.1:2628/api/suggestions/Default%20Group/%nuisance%
结果出现错误:

INFO:app.dictionaries:Dictionaries loaded.
INFO:waitress:Serving on http://127.0.0.1:2628
ERROR:app:Exception on /api/suggestions/Default Group/%nuisance% [GET]
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1455, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 869, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.10/site-packages/flask_cors/extension.py", line 176, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 867, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 852, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/Users/c/Downloads/SilverDict/server/app/api/lookup.py", line 14, in suggestions
    suggestions = dicts.suggestions(group_name, key)
  File "/Users/c/Downloads/SilverDict/server/app/dictionaries.py", line 130, in suggestions
    keys_expanded.extend(db_manager.expand_key(key_simplified))
  File "/Users/c/Downloads/SilverDict/server/app/db_manager.py", line 178, in expand_key
    rows = cursor.execute(statement, ngrams)
sqlite3.OperationalError: no such table: ngrams

特定词典,可以获取到 suggestions 但是将具体 suggetion 传入 query API 时没有结果

通过 suggestions API 查询 满足时,获取到 30 个结果:

{'suggestions': ['满足', '满足不了的', '满足不了需求', '满足于', '满足于既得成就', '满足于既得荣誉', '满足于既有成就', '满足人们吃饱', '满足地', '满足大家的需要', '满足对的欲望', '满足感', '满足感官', '满足感官的', '满足或欢乐的', '满足法庭', '满足特定目的', '满足用户', '满足的', '满足的事由', '满足的心情', '满足的状态', '满足的需求', '满足的需要', '满足肉欲的', '满足肉欲的场所', '满足自我', '满足要求', '满足需求', '满足需要', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''], 'timestamp': 1699265280538.1938}

和 GoldenDict 软件的查询结果一致。

然后将 满足肉欲的场所 这个具体的 suggestion 传入 query API,结果显示 not found:

➜ curl http://127.0.0.1:2628/api/query/Default%20Group/%E6%BB%A1%E8%B6%B3%E8%82%89%E6%AC%B2%E7%9A%84%E5%9C%BA%E6%89%80

<p>Entry 满足肉欲的场所 not found. Suggestions:</p>
<ul>

</ul>%

但是在 GoldenDict 软件点击 满足肉欲的场所 是有结果的,如图:

image

后来我发现,SilverDict 对于 query TIOv5_单词反查 这个词典中的 suggestion 都是 not found,但是 GoldenDict 软件都正常。

这种状况如何排查?

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.