自制小词典(1)

作者 to3z

新版本:自制小词典(2)

如果经常需要查询一些内容,我们会希望把它整理成一个词典,更方便也更美观。要让这个词典完全符合我们的要求,我们可以自行制作,虽有些耗时,但流程简单。本文的主要内容是笔者自制小词典的经历,也可以作为参考,主要用到python。

接下来以日语例句词典作为例子,最终的成果是mdx格式的词典。当我们学习外语,好的词典是必要的,一个原因是词典中的例句能帮助我们理解和使用单词。这个词典只包含单词和例句,而没有释义,故只能与其它词典配合使用。


词典截图

基本流程

  1. 获取关键词
  2. 获取词条内容
  3. 整理文本文档
  4. 转化成字典文件

获取关键词

本词典的关键词来自《新世纪日汉双解大辞典》,由freemdict的hua制作。

下载词典后,我们可以看到mdx、mdd、css等文件(这里的两个文件夹和txt文件并非原有,是我后来产生的)。关于这些文件分别的含义,在这里介绍。本次我只用到了mdx文件,它包含了词条、释义等内容。

下载的内容

用到的工具是mdict-utils,可以用pip安装,它的使用方法可以查看这里

mdict -x dict.mdx -d ./mdx

这是解压mdx用到的命令,它会产生三个文件:包含关键词和词条的txt、分别关于标题、描述的两个html文件,其中我们需要txt中的关键词。txt文件可能非常巨大,而mdx文件很小,我们在惊叹于高效的压缩时,也要警惕打开txt时的卡顿。

观察txt文件的内容,我们可以得到规律:

  1. 文件以三行为一组,包含若干这样的组
  2. 第三行一定是</>
  3. 第一行是关键词
  4. 第二行是词条的描述,以类似html的形式给出
两个词典的txt

有了这些规律,我们就可以分解、组装词典了。通过第三条规律,可以方便地将其读入,我把它存储为了一个列表。

关键词列表

这个列表很长,有40多万个关键词,然而前面两万多个都是英文或者奇怪的语言,我不需要,就删除了。另外,为了适应下一步“获取词条内容”,我们需要把关键词整理成合适的格式。比如词典中的关键词形式有 “あ·う【会う·逢う】”、“ガリレイ[Galileo Galilei] ”等等格式,英文字典也是如此,例如“ex·peri·ment”等。此时我们可能需要去掉 · []【】这些符号,而需要保留哪些字符视需求而定。上面的截图展示的是已经处理过的列表。

获取词条内容

这个词典的词条内容(例句)来自https://tangorin.com ,这个网站的搜索结果包含解释、例句、汉字、词组等,我只选用了例句,一是方便,二是它的例句确实丰富,也贴近生活。关于例句,都可以在https://tangorin.com/definition/单词 下看到,唯一的遗憾是,例句的解释都是英文,略有不变,但基本不影响理解。其实它的例句来自Tatoeba Project,这个项目中可以看到各种语言的例句,如果想获取多种语言的资源,可以利用此网站。

酱油.png

获取例句的原理是,先下载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很方便)。

注意事项:

  • 这个网站的例句有很多重复,如“同社は醤油その他の食品を生産する。”这句例句,会同时出现在“醤油”和“食品”的词条下,这正是我们所需要的。
  • 要确保做好异常处理,否则损失惨重。
  • 很多单词在网站上查不到,或者没有例句,需要特殊判断,否则字典里会包含很多无效内容。
  • 如果遇到&#x27;这类字符不用理会,因为最后制作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&#x27;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文件,就可以使用词典了。

当然,本词典还有许多不足,如没有包含释义、外形不够美观等。笔者将来会试着改进,力图使它成为独立的词典,收录更广的内容。也祝愿各位坚持学习外语,让词典物尽其用。

感谢阅读,请点赞支持!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容