这本是学习型德日词典,词汇数64000多,接近朗氏的体量,带发音,从logovista转换的。
下载:
通过网盘分享的文件:三省堂 クラウン独和辞典 第5版
链接: https://pan.baidu.com/s/1RbBesNYFHBobU4-QyquHTg 提取码: 1234
或
三省堂 クラウン独和辞典 第5版 - FreeMdict Cloud
Thanks for your great effort @wynick27 
@Wankata Here is a very nice new dictionary ! 
Added to the cloud; thanks to both of you!
yx_wh
5
非常感謝!
不過我發現了一個小小的瑕疵——這個辭典的索引沒有索引大部分的變元音條目——比如說查詢“öffnen”必須用"offnen"去查。德語中絕大多數有üöä的詞匯都得換成uoa才能查詢。
yx_wh
7
用pyglossary将.mdx转换成.txt,用下述python脚本修改txt,用pangloss将.txt转换回.mdx。
import re
import sys
from bs4 import BeautifulSoup
def extract_display_headword(html_content):
"""
从 <span class="hw_midasigo"> 中提取纯文本显示词头
去除所有 HTML 标签、图片、分隔符标记
"""
soup = BeautifulSoup(html_content, 'html.parser')
# 查找第一个 class 包含 'hw_midasigo' 的 span
hw_tag = soup.find('span', class_=re.compile(r'^hw_midasigo'))
if not hw_tag:
return None
# 获取纯文本(自动递归处理嵌套标签)
text = hw_tag.get_text(strip=True)
# 移除所有方括号及其内容(半角和全角)
text = re.sub(r'[\[[][^\]]*?[\]]]', '', text)
# 移除结尾的空白和数字(可能单独存在的序号)
text = re.sub(r'\d+$', '', text)
text = re.sub(r'\s+$', '', text)
# 移除常见的分隔符(点、竖线、中黑点等)
text = re.sub(r'[|・·•*=()]', '', text)
# 去除多余空白
text = ' '.join(text.split())
return text if text else None
def process_line(line):
"""
处理一行 TSV,返回修正后的行
如果无法处理,返回原行
"""
line = line.rstrip('\n')
if '\t' not in line:
return line
headword_part, content = line.split('\t', 1)
# 分割词头列表
headwords = headword_part.split('|')
# 提取显示词头
display = extract_display_headword(content)
if not display:
return line
# 如果显示词头已经在词头列表中(完全匹配),则无需添加
if display in headwords:
return line
# 否则,将显示词头添加到最前面
new_headwords = [display] + headwords
new_headword_part = '|'.join(new_headwords)
return new_headword_part + '\t' + content
def main(input_file, output_file):
with open(input_file, 'r', encoding='utf-8') as fin:
lines = fin.readlines()
processed_lines = []
total = len(lines)
modified = 0
for i, line in enumerate(lines, 1):
new_line = process_line(line)
if new_line != line.rstrip('\n'):
modified += 1
print(f'已修正第 {i} 行')
processed_lines.append(new_line)
with open(output_file, 'w', encoding='utf-8') as fout:
fout.write('\n'.join(processed_lines))
print(f'\n处理完成!共处理 {total} 行,修正 {modified} 个词条。')
print(f'输出文件:{output_file}')
if __name__ == '__main__':
if len(sys.argv) != 3:
print('用法: python fix_headwords.py 输入文件.txt 输出文件.txt')
sys.exit(1)
main(sys.argv[1], sys.argv[2])
CROWNDJ5.mdx (13.2 MB)
yx_wh
9
我这里GoldenDict-ng和GoldenDict Mobile(转换成stardict本体+.dsl.files.zip资源包)都没问题啊。
我又试了下,除了GoldenDict,《词悦》《德语助手》也可以。
Mdict安卓版和DictTango似乎根本不识别pangloss生成的.mdx。不光带Umlaut的查不到,该辞典的所有词都查不到。
hahaya
10
PC版DictTango也查不到。GD-ng不是因为有优化吗
yx_wh
12
Windows版DictTango我没用过,我是W10LTSC1809+Debian13的双启动,根本装不了Windows版DictTango,也就没有尝试了。但是我试了Android版不行,猜测Windows版也不行,现在看来果然如此。
另外,《词悦》也是可以的。
amob
13
mdict和dicttango都是二分查询mdx索引,因为效率最高。而mdx内置索引排序算法是黑盒,各个构建mdx工具(甚至官方的rust库和mdxbuilder都不一样)只要与查询软件推定的排序实现不一样,二分查询就失效了。
论坛已经讨论好多次了,居然还有这么多人不知道。这些特殊字母的排序很容易出现分歧,stripkey也会影响排序。
mdict-utils作者在issues里也回应过,没有打算调整排序算法,因为没有意义。软件不重新提取排序,使用mdx内部索引的话,这个问题不可能解决。goldendict是会重建索引的,随词典导入产生巨大的缓存索引文件,所以不会遇到问题。
mdx3.0有了内置ICU排序说明部分,理论上可以解决这个问题,但是根本没人用这格式。
yx_wh
14
而且带变音符号的字母还存在两种写法吧?mdx2.0可能根本没考虑这个问题。
“ö”的两种 Unicode 形式
字母 ö 在 Unicode 标准中确实有两种等价的表示方式,它们在渲染时看起来完全一样,但底层编码不同:
- 预组合形式(Precomposed)
- 编码:
U+00F6
- 说明:这是一个独立的字符,名为“拉丁小写字母 O 带分音符”(LATIN SMALL LETTER O WITH DIAERESIS)。它把字母
o 和分音符 ¨ 预先组合成了一个码点。
- 组合形式(Decomposed / Combining)
- 编码:
o + U+0308
- 说明:先写一个普通的字母
o(U+006F),再紧跟一个“组合分音符”(COMBINING DIAERESIS,U+0308)。渲染时,U+0308 会自动叠加上去,视觉上形成 ö。
《词悦》能查询也是因为它不使用MDX内部索引而是自建了索引吧。
hahaya
15
嗯,这个词悦在Windows上的UI效果不太美观,现在用得少,不知道词典加载多了性能如何。DictTango Windows版有简繁通查的功能,即使词条全是繁体索引也能用简体搜索到,这个有点离不开。我再用AALookup试试。
amob
16
多种写法也不该是格式考虑吧,难道要枚举完所有等价情况拖慢打包速度和复杂化格式设计?辞典制作者或者软件端实现都可以。。。
mdx格式是一键对一值,没必要也没法在你打包时额外加键(不然会造成解包后和制作方源文件不等价),格式设计没有多键对一值。真需要就是制作者加@@@LINK重定向。
yx_wh
17
繁简通查这个现在好办。因为我跟《词悦》的作者建议之后,词悦现在和GoldenDict-ng一样支持hunspell了。
hunspell就能用来实现中文的简体繁体通查。
zh_CN.aff 不需要任何实质内容,指定编码为 UTF‑8 就行:
SET UTF-8
LANG zh
FLAG long
# 空壳
zh_CN.dic 的内容类似这样,第一行是词条数目,然后每行都是st:(本来是hunspell用来标记不规则动词原形的doge):
12
簡體 st:简体
简体 st:簡體
繁體 st:繁体
繁体 st:繁體
发 st:髮
发 st:發
髮 st:发
發 st:发
復制 st:复制
複製 st:复制
复制 st:復制
复制 st:複製
把你的所有中文辞典的词头导出然后用python+opencc跑一遍,再把一简对多繁手动修一修。
gen_zh_dic.py (2.7 KB)
这比直接调用opencc没准还好,因为opencc一个输入只能对应一个输出,而hunspell是可以一个输入对应多个输出的。輸入「复制」,GoldenDict能同时查到「復制」和「複製」。
yx_wh
18
嗯,用pyglossary转换成的txt中看不出,但mdx内部肯定是这样的
我跟词悦的作者之前报了好几个@@@LINK 相关bug……
原来还有这个坑,实测不是stripkey的问题,而是排序问题,我用拉鲁斯对比的:
amob
20
我本来就说是排序问题啊。。。干嘛急着反驳我。stripkey是影响因素之一,顺嘴提一句不行吗。软件端发现stripkey标记后,大小写通搜无视ascii符号,排序会更加混乱,更难定位到词条。