舍得对SuperMemo UX官方课程中的新版辞典垂涎已久。这货很漂亮,而且非常实用。比起原来那种方式的辞典,拥有更强的互动性。简单地来比较这两个之间的区别就是:老辞典需要专门制作一个辞典文件,而新辞典会自动从课程中提取内容;老辞典的搜索很鸡肋,新辞典则可以给我们更强大的搜索、分类以及关联词汇的功能。
新辞典中的分类让人感觉很舒服。
新辞典的搜索速度很快,而且搜索的结果中自动带了音频、例句等信息(尤其是例句,这是老辞典中没有的)。下方还有“主题相关词汇”,对于建立你的“网状结构词库”(朗文的专家们称其为“心理词库”)相当有帮助。
昨天下班后便开始对这个问题进行了研究。研究的方法很原始:先解开官方的课程包,然后逐一分析其中的代码,这是舍得能想到的最笨的方法。
毫无疑问这个过程是相当痛苦的,而且还不小心走了些弯路:我被官方的related这个文件夹给忽悠了……幸好舍得反应还算灵敏,及时调整了方向,否则这次研究又得无疾而终。
过程就不一一叙述了,直接上研究结果:
辞典的秘密主要藏在课程列表文件(course.xml)中,要点如下:
1.<type>vocabulary</type>:这里的值是关键,必须是vocabulary,不能是regular;
2.光有上面这个值还不行,你需要在文件中作如下定义:
1)如果不要分类,则直接作如下定义:
<element id="15033" type="pres" subtype="1000" name="Word 2135" disabled="true" keywords="wipe" partOfSpeech="v" frequency="4963" subsets="6">
<element id="15034" type="exercise" subtype="1" name="Say the word" keywords="wipe" partOfSpeech="v" frequency="4963" />
</element>
简单说明一下这里的几个重要属性:
a)keywords:关键词,这是用来索引的重要依据;
b)partOfSpeech:词性;
c)frequency:词频;
从上面的结构来看,外面这层空壳(即ID为15033的这一层,这是个章节,没有实际内容)是关键,没有这一层,程序做不了索引,自然无法让你搜索;
2)如果需要分类,则应该在外边再套一层:
<element id="84" type="pres" name="Personal pronouns" disabled="true">
<element id="163" type="pres" subtype="1000" name="Word 10" disabled="true" keywords="you" partOfSpeech="pron" frequency="8" subsets="2,4">
<element id="164" type="exercise" subtype="1" name="Say the word" keywords="you" partOfSpeech="pron" frequency="8" subsets="2,4" />
</element>
</element>
ID为84的name属性的值是“personal pronouns”就是分类名,如果想在这分类上面再搞一个更大的分类,则请再套一层;
3、显示效果取决于默认模板,默认模板建议使用官方的99999号模板,在course.xml中应该作如下定义:
<default-template-id>99999</default-template-id>
以上三点,就是实现新辞典功能的要点。如果只想搜索,不用分类的话,实现起来相当简单,只要将课程列表改造一下就行,如果你的正则表达式学得足够好的话,应该能够完成这项工作;如果需要分类的话,那可能麻烦一点,不过对于转换精灵来说,相对还算简单,可以考虑在以后的版本中提供制作新辞典的功能。