Crissium / SilverDict

Web-Based Alternative to GoldenDict
https://silverdict.lecoteauverdoyant.co.uk
GNU General Public License v3.0
161 stars 18 forks source link

建议 #8

Closed czz404 closed 8 months ago

czz404 commented 9 months ago

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

功能上:

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

界面上:

pic_1706884716.png

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

欢迎建议 :)

增加对compact html紧凑格式的支持

这两天会实现。

简繁通搜如果能实现不依赖标记组的语言为 zh ,直接在默认组就能实现就好了

这个不会支持。简繁转换和希腊文阿拉伯文 ASCII 转写用的是同一套 API, 如果我默认支持 zh, 要不要默认支持 el, ar, 甚至是以后可能加上的 Farsi, Urdu, 各种 Perso-Arabic 的/用西里尔字母的语言,印地语梵语呢?即便只加上 zh 也会影响从 suggestions 到查词各种功能的性能。

加上 zh 十分容易,新建一个 group, 语言填上 zh 就行了,然后把词典加进去。直接强行修改 Default group 的 lang 字段不是不行,这么写:

- lang: !!set
    zh: null
  name: Default Group

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

我不是设计师,前端的一点东西也都是为了这个项目自学的,所以水平有限。我这几天把后端该实现的都实现之后会用一些业界成熟框架(而不是直接用 React 自己 home-grow components)重新设计前端,这些建议我都会记下来。

czz404 commented 9 months ago

好的,谢谢大佬🙏

Crissium commented 9 months ago

你觉得这次宽度如何?我不知道怎么才能拖拽调节宽度,如果需要自己改,可能只能修改代码重新 build 了。

Screenshot 2024-02-06 at 09-54-35 SilverDict

另外,compact HTML 已经支持,如果急着用,克隆最新代码即可。

Screenshot 2024-02-06 at 09-55-25 SilverDict

czz404 commented 9 months ago

感谢,很漂亮。🌹 这几天在外面,等回去了再更新。

Crissium commented 8 months ago

调整宽度需要修改的行:

https://github.com/Crissium/SilverDict/blob/796194ac67010f33748a7213b621a773af05e815/client/src/components/QueryScreen.js#L29

https://github.com/Crissium/SilverDict/blob/796194ac67010f33748a7213b621a773af05e815/client/src/components/QueryScreen.js#L33

https://github.com/Crissium/SilverDict/blob/796194ac67010f33748a7213b621a773af05e815/client/src/components/Query/DictionariesPane.js#L8

czz404 commented 8 months ago

感谢大佬的更新,新版很漂亮! 我想再请教一下形态分析sibel的安装使用。 是只需要将 Hunspell 词典放入 ~/.silverdict/hunspell,再安装 Python 包 sibel(pip install sibel)就可以实现了吗 我看说明有点没看明白,还是还需要安装有libhunspell-dev和libicu-dev吗

Crissium commented 8 months ago

*-dev 包都是编译时依赖,如果你有办法直接搞到二进制(像是在 Debian 上直接 apt install python3-hunspell),那就不需要 dev 包,只需要 libxxx 之类的,也就是库文件 shared objects (.so). 但是大多数平台不打包二进制的 PyHunspell, 更别提我刚写出来的 Sibel 了,只能用 pip 从源码安装,这时候就需要自己编译,需要 *dev 包,不然会编译失败。

也就是说,在 pip install sibel 之前,需要安装 libhunspell-dev 和 libicu-dev. 另外需要小心的是,Sibel 为了优化,定义了一个非常大的常量替换表,可能导致编译器撑爆内存(在我手机上大概 3 GiB 可用内存,炸了),解决方法:

  1. 在一个大内存机器上编译,然后挪到小内存机器上
  2. (我自己这么干的)手动注释掉不需要的语言再编译(参 https://github.com/Crissium/sibel#installation )。
czz404 commented 8 months ago

好的,感谢解答!

czz404 commented 8 months ago

大佬您好,发现有两个词典似乎不能正常查询,能麻烦大佬看下问题吗 https://czz404-my.sharepoint.com/:f:/g/personal/frank_czz404_onmicrosoft_com/EjzPpT-KRhFLlnTMLoG670sBqG7N8B6qqoXbHM-SVYpujw?e=4XVe4K

https://czz404-my.sharepoint.com/:f:/g/personal/frank_czz404_onmicrosoft_com/EttjoSM_wr5BjNZ70Zl8BvoBIfjph_F3h9zHc0SEuugBvw?e=4kIFVM

Crissium commented 8 months ago

大佬您好,发现有两个词典似乎不能正常查询,能麻烦大佬看下问题吗 https://czz404-my.sharepoint.com/:f:/g/personal/frank_czz404_onmicrosoft_com/EjzPpT-KRhFLlnTMLoG670sBqG7N8B6qqoXbHM-SVYpujw?e=4XVe4K

https://czz404-my.sharepoint.com/:f:/g/personal/frank_czz404_onmicrosoft_com/EttjoSM_wr5BjNZ70Zl8BvoBIfjph_F3h9zHc0SEuugBvw?e=4kIFVM

文件名里有“法汉汉法词典”字样的词典已经删了?

Screenshot 2024-02-16 at 19-26-16 OneDrive

拉魯斯正在看。

另外我有本正常工作的 StarDict 格式的法汉汉法词典。一般来说,StarDict 作为开源格式,不管是性能还是处理麻烦程度都要远远优于 MDict.

czz404 commented 8 months ago

感谢大佬回复!龙年快乐! 麻烦大佬看下这个链接能否下载 https://czz404-my.sharepoint.com/:u:/g/personal/frank_czz404_onmicrosoft_com/EdQZEoltaKJDmsgrGU7ZiV0B-IAzQ6RcGSm7Q4ATyDfIfg

Crissium commented 8 months ago

法汉汉法词典的问题已经修好了,在最新的 commit 里。那本拉鲁斯我没看出来问题,是指语音不能正常播放吗?这点正常,语音格式是 Ogg Speex, 至少我用的 Firefox 是没有解码器的。另外这些“语音”怎么听都是机器合成的,感觉没必要留着。我有一个有 121320 个词条的纯语音法语词典,需要吗?

附件是之前提到的 StarDict plain text 格式的法汉汉法词典,上面 mdx 格式的看起来和我的那个在内容上没有区别(最终来源应该都是古老的金山词霸内置的词典),只是把 LF 全换成了 <br> 而已。

fccf.tar.gz

czz404 commented 8 months ago

感谢分享!这个法汉汉法词典格式内容上确实差不多,但查询多个意思的词时似乎词头有问题。比如查faire搜不到,但查 faire 01 , faire 02 , faire 03 , faire 04 可以。就还用原来的好了。 拉鲁斯那个我又试了一下确实没问题。 另外还有一本显示也有些问题(有丢内容的情况),麻烦大佬看一下。 2024-02-16_224516 词典:https://czz404-my.sharepoint.com/:u:/g/personal/frank_czz404_onmicrosoft_com/ETMi1urfZkpFnv7mvztnUCIBFneFLjLPcC3iWj056PBN3A

Crissium commented 8 months ago

感谢继续反馈 MDict 问题!

这个问题已经在最新的 commit 中修改了,根源在于,这个词典看起来一开始也只是 plaintext, 被人用 <br> 换掉了所有 LF 后,又给所有 part of speech 都加上了 styling, 但是忘记这东西是 HTML, 没有 open/close 的 root tag.

czz404 commented 8 months ago

感谢大佬解答!辛苦了

czz404 commented 8 months ago

2024-02-17_235744 大佬有空再看下这个,部分内容不显示 词典:https://www.lanzoum.com/i0wRi1oksora 十分感谢!

Crissium commented 8 months ago

2024-02-17_235744 大佬有空再看下这个,部分内容不显示 词典:https://www.lanzoum.com/i0wRi1oksora 十分感谢!

已修,在最新 commit 中,等有些界面翻译的问题处理完之后大概会发新版。

感谢报错,我主要测试的是 DSL 词典,绝大多数都是商业公司 ABBYY Lingvo 制作的,格式比较统一,MDict 几乎都是 user made content, 只能靠用户反馈个别问题了 :)

另外建议每次发现新问题都 reopen 一下,不然有时候如果邮件被淹没了,我在 GitHub dashboard 也看不到。

czz404 commented 8 months ago

好的,感谢!🙏

czz404 commented 8 months ago

一本有点粗糙的“半成品”词典不知道大佬能不能看下问题

https://www.lanzoum.com/iubAB1q1galg

pic_1709379464.png 不知道是不是因为结构什么的写的不太好,和 GD-ng 呈现出来的区别很大 感谢!

(这本好像不太完善,常有标签套错之类的情况,如果大佬不好做适配我就不用这本了)

Crissium commented 8 months ago

一本有点粗糙的“半成品”词典不知道大佬能不能看下问题

https://www.lanzoum.com/iubAB1q1galg

pic_1709379464.png 不知道是不是因为结构什么的写的不太好,和 GD-ng 呈现出来的区别很大 感谢!

(这本好像不太完善,如果大佬不好做适配我就不用这本了)

image

修好了,不是词典的问题,是代码的问题。我打算再攒几个 commits 再发布新版。

直接把最新的 commit 复制粘贴过去就行。

czz404 commented 8 months ago

哇,谢谢大佬!

czz404 commented 8 months ago

大佬,我弄好后这里和你的截图呈现的有点出入,是我这里词典配置的原因吗

Crissium commented 8 months ago

大佬,我弄好后这里和你的截图呈现的有点出入,是我这里词典配置的原因吗

我觉得应该是别的 MDict 的 CSS 干扰到了,可以排查一下是哪个,然后手动改一下这些讨厌的规则。

czz404 commented 8 months ago

确实是这个原因,感谢🙏

czz404 commented 8 months ago
截图_20240302213755

https://www.lanzoum.com/iZdob1q25cgd

大佬,这本有点小问题,会多显示一些样式内容

Crissium commented 8 months ago
截图_20240302213755

https://www.lanzoum.com/iZdob1q25cgd

大佬,这本有点小问题,会多显示一些样式内容

已改,感谢报错,这个 bug 还可能会影响到 StarDict.

czz404 commented 8 months ago

大佬,此次更新后发现一些以前可以正常显示css效果的词典现在不行了 比如这个:https://www.lanzoum.com/ifhjv1q7lnwb 之前文字上有颜色的(和GD-ng显示相同),现在没有了。

Crissium commented 8 months ago

大佬,此次更新后发现一些以前可以正常显示css效果的词典现在不行了 比如这个:https://www.lanzoum.com/ifhjv1q7lnwb 之前文字上有颜色的(和GD-ng显示相同),现在没有了。

都是哪些词典,能列举一下词典文件名吗?我怀疑是名字问题。

czz404 commented 8 months ago

感谢回复,我印象比较清楚的有这几个,难道和名字里的空格有关 pic_1709523136.png

Crissium commented 8 months ago

感谢回复,我印象比较清楚的有这几个,难道和名字里的空格有关 pic_1709523136.png

对于你之前分享的词典,对 server/app/dictionaries.py:136 行的函数做以下修改后,删掉并重新添加词典,问题解决:

    def add_dictionary(self, dictionary_info: dict) -> None:
        # Remove whitespace and prepend '_' to make it a valid CSS selector
        dictionary_info['dictionary_name'] = '_' + ''.join(dictionary_info['dictionary_name'].split())

        dictionary_info['dictionary_filename'] =\
            self.settings.parse_path_with_env_variables(dictionary_info['dictionary_filename'])

(也就是加了两行。)

试一下别的行不行?

czz404 commented 8 months ago

感谢大佬回复,测试了一下只有分享给你那本恢复正常了 那两本也是来自论坛的,但体积比较大,大佬我用什么网盘分享给你方便一些呀

Crissium commented 8 months ago

从哪里下载的?可以直接把源地址发给我,我自己下。

我似乎看出问题了,稍等。

Crissium commented 8 months ago

改两个地方,上面的函数开头改成(又加了两行):

    def add_dictionary(self, dictionary_info: dict) -> None:
        dictionary_info['dictionary_name'] =\
            self._re_illegal_css_selector_chars.sub('', dictionary_info['dictionary_name'])
        # Remove whitespace and prepend '__' to make it a valid CSS selector
        dictionary_info['dictionary_name'] = '__' + ''.join(dictionary_info['dictionary_name'].split())

41 行下面加上(就是 class 下加两行)

class Dictionaries:
    _re_illegal_css_selector_chars =\
        re.compile('[\\~!@\\$%\\^\\&\\*\\(\\)\\+=,\\./\';:"\\?><\\[\\]\\\\\\{\\}\\|`\\#]')
    _re_legacy_lookup_api = re.compile(r'/api/lookup/([^/]+)/([^/]+)')
czz404 commented 8 months ago

解决了,感谢大佬!