作者 to3z
如果经常需要查询一些内容,我们会希望把它整理成一个词典,更方便也更美观。要让这个词典完全符合我们的要求,我们可以自行制作,虽有些耗时,但流程简单。本文的主要内容是笔者自制小词典的经历,也可以作为参考,主要用到python。
接下来以日语例句词典作为例子,最终的成果是mdx格式的词典。当我们学习外语,好的词典是必要的,一个原因是词典中的例句能帮助我们理解和使用单词。这个词典只包含单词和例句,而没有释义,故只能与其它词典配合使用。
基本流程
- 获取关键词
- 获取词条内容
- 整理文本文档
- 转化成字典文件
获取关键词
本词典的关键词来自《新世纪日汉双解大辞典》,由freemdict的hua制作。
下载词典后,我们可以看到mdx、mdd、css等文件(这里的两个文件夹和txt文件并非原有,是我后来产生的)。关于这些文件分别的含义,在这里介绍。本次我只用到了mdx文件,它包含了词条、释义等内容。
用到的工具是mdict-utils,可以用pip安装,它的使用方法可以查看这里
mdict -x dict.mdx -d ./mdx
这是解压mdx用到的命令,它会产生三个文件:包含关键词和词条的txt、分别关于标题、描述的两个html文件,其中我们需要txt中的关键词。txt文件可能非常巨大,而mdx文件很小,我们在惊叹于高效的压缩时,也要警惕打开txt时的卡顿。
观察txt文件的内容,我们可以得到规律:
- 文件以三行为一组,包含若干这样的组
- 第三行一定是</>
- 第一行是关键词
- 第二行是词条的描述,以类似html的形式给出
有了这些规律,我们就可以分解、组装词典了。通过第三条规律,可以方便地将其读入,我把它存储为了一个列表。
这个列表很长,有40多万个关键词,然而前面两万多个都是英文或者奇怪的语言,我不需要,就删除了。另外,为了适应下一步“获取词条内容”,我们需要把关键词整理成合适的格式。比如词典中的关键词形式有 “あ·う【会う·逢う】”、“ガリレイ[Galileo Galilei] ”等等格式,英文字典也是如此,例如“ex·peri·ment”等。此时我们可能需要去掉 · []【】这些符号,而需要保留哪些字符视需求而定。上面的截图展示的是已经处理过的列表。
获取词条内容
这个词典的词条内容(例句)来自https://tangorin.com ,这个网站的搜索结果包含解释、例句、汉字、词组等,我只选用了例句,一是方便,二是它的例句确实丰富,也贴近生活。关于例句,都可以在https://tangorin.com/definition/单词
下看到,唯一的遗憾是,例句的解释都是英文,略有不变,但基本不影响理解。其实它的例句来自Tatoeba Project,这个项目中可以看到各种语言的例句,如果想获取多种语言的资源,可以利用此网站。
获取例句的原理是,先下载https://tangorin.com/definition/单词
的网页,然后在其中找出两种语言的例句。经过观察,我们发现日语例句前面有<dt class="s-jp" lang="ja">
,英语翻译前面有<dd class="s-en">
,通过这两个字符串可以将例句和翻译分离出来。然后,我把它存储为字典形式,键是关键词字符串,值是例句列表,如下“酱油”的例句所示。
{'しょうゆ': [['同社は醤油その他の食品を生産する。',
'The company produces soy sauce and other food products.'],
['醤油をコップに入れておくなよ!コーヒーかと思って飲むところだったぞ。',
"Don't leave the soy sauce in a glass. I thought it was coffee or something and was about to drink it."]],
'醤油': [['同社は醤油その他の食品を生産する。',
'The company produces soy sauce and other food products.'],
['醤油をコップに入れておくなよ!コーヒーかと思って飲むところだったぞ。',
"Don't leave the soy sauce in a glass. I thought it was coffee or something and was about to drink it."],
…
}
注意到词典的关键字量非常大,应该不会有人想一次性下载所有数据。我以每一万个关键字为一组下载,下载完之后存储在硬盘上(这里用pickle很方便)。
注意事项:
- 这个网站的例句有很多重复,如“同社は醤油その他の食品を生産する。”这句例句,会同时出现在“醤油”和“食品”的词条下,这正是我们所需要的。
- 要确保做好异常处理,否则损失惨重。
- 很多单词在网站上查不到,或者没有例句,需要特殊判断,否则字典里会包含很多无效内容。
- 如果遇到
'
这类字符不用理会,因为最后制作txt时正需要html格式,会自动显示为单引号。
整理文本文档
这里要做的就是制作前文提到的txt文件,它的格式如前文所示,我们可以很容易地完成三行中的第一、第三行,需要关注的只是第二行。第二行的html描述集中在一起,我们把它展开可以看的更清楚。
<div class="wrap-switch">
<div class="ncdata-header">
<h1><span class="word">醤油</span></h1>
</div>
<div class="ncdata-body">
<div class="ncdata-sense">
<ul class="ncdata-sense-wrap">
<li>
<div class="unit example">
<p><span class="example-source" style="color:darkblue">同社は醤油その他の食品を生産する。</span></p>
</div>
<div class="unit example">
<p><span style="font-family:Arial, Helvetica, sans-serif; color:gray">The company produces soy
sauce and other food products.</span></p>
</div>
</li>
<li>
<div class="unit example">
<p><span class="example-source" style="color:darkblue">醤油をコップに入れておくなよ!コーヒーかと思って飲むところだったぞ。</span>
</p>
</div>
<div class="unit example">
<p><span style="font-family:Arial, Helvetica, sans-serif; color:gray">Don't leave the soy
sauce in a glass. I thought it was coffee or something and was about to drink it.</span>
</p>
</div>
</li>
</ul>
</div>
</div>
</div>
我把日语例句设置为蓝色,把英语翻译设置为灰色,每一对蓝色和灰色之前有一个圆点,每一句句子分别为一个段落。这里的html内容我并不熟悉,多是现学现用,如有错误欢迎指正。这里使用前面生成的字典,可以批量产生第二行内容,再简单地加上第一行和第三行,txt文件就完成了。
转化成字典文件
这一步同样要使用mdict-utils,官网上也有示例。
mdict --title title.html --description description.html -a dict.txt dict.mdx
这条命令用title.html、description.html和dict.txt合成dict.mdx。title非常简单,只需要把标题写在一行内即可。description则需要写一个去掉<html>
和<body>
的html文档,例如:
<h1>日语例句词典</h1>
<br />
<p>例句来自tangorin.com(tatoeba project)</p>
<p>单词索引来自新世纪日汉双解大辞典(https://freemdict.com/2019/10/31/新世纪日汉双解大辞典/,由freemdict的hua制作),</p>
<br />
<p>本词典由to3z制作 2022/05/09</p>
这些都完成了,只要通过词典软件导入得到的mdx文件,就可以使用词典了。
当然,本词典还有许多不足,如没有包含释义、外形不够美观等。笔者将来会试着改进,力图使它成为独立的词典,收录更广的内容。也祝愿各位坚持学习外语,让词典物尽其用。
感谢阅读,请点赞支持!