页面载入中...
首页 » 2012年12月

转换精灵入门基础:源文本格式

对于SuperMemo转换精灵来说,源文本就是使用了指定的分隔符的文本,最常见的就是"制表符分隔"的文本文件,当我们在EXCEL中另存文件时,会有"文本文件(制表符分隔)"的这样一种格式,如下图所示:

drex_module_3_1_image_0

这种文本,我们通常也称之为"TAB文本"(TAB就是制表符,或称TAB空格),比如我们示例文件中的"范例2 单词+音标+释义.txt",放在EXCEL中就是三列的文本,如下图:

drex_module_3_1_image_1

而当我们将其另存为"文本文件(制表符分隔)"的格式时,就成了这样:

drex_module_3_1_image_2

上图中一小块绿色区域就是一个TAB空格(这是特意标出来的).

使用这种格式的源文本,最大的好处就是让转换精灵在处理时能够有个准确的参照物,因为TAB空格的存在就相当于给文本划出了跟EXCEL的"列"一样的区域,每一列存放着同一类型的内容,比如上面这个例子中,第一列是单词,第二列是音标,第三列是释义,有了这个参照物,转换精灵在工作的时候才能做到既快速又准确.

那转换精灵最多支持多少列呢?理论上,多少列都可以.像EXCEL,最多支持256列,但实际我们用不了这么多,通常一个课程的源文本,少一点两三列,多一点的话,八到十列已能满足绝大多数使用者的要求.

除了用TAB空格作为分隔符外,转换精灵还可以使用"#"和"|"作为分隔符,以便给大家提供更多的选择.不过,舍得还是建议大家多使用"制表符分隔"的文本文件.以后舍得学苑发布源文本时,也将以这种格式为准.

在你使用转换精灵制作课程之前,请先将素材整理成上述的格式。

 

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:
舍得
首发:
舍得@学习力博客

从SuperMemo UX课程中提取源文本的基本思路

之前舍得在转换精灵中提供过将SuperMemo UX课程转换为源文本的功能,但由于SuperMemo UX中题型变化较多,常见的有拼写(填空)题、选择题、匹配题等,碰到这些题型,用之前的思路转换得到的文本将无法直接阅读,因此在新版的转换精灵中已将此功能去除。

近日在研究官方课程的时候,用到转换精灵的一个新模块来处理这些文本,发现效果不错。考虑到此模块不大可能出现在近期几个版本中,因此将处理的思路简单介绍一下,一可供有一定动手能力的童鞋研究,二来亦算是为自己的操作做一下简单的记录。

要得到源文本,首先要考虑的是两大方面的问题:

1.Item文件列表从哪来?

2.如果将Item文件转成源文本?

熟悉SuperMemo UX的童鞋想来很快能够得出第一个问题的答案:course.xml。用Python处理这个文件相对比较简单:

1.用BeatifulSoup模块提取course.xml中的elment标签;

2.取出符合条件的ID和Keywords属性,存入一个字典;

没错,用这两步就可以搞定,注意最好对这个字典进行一下排序处理。

第二个问题处理起来显然比较复杂。好在新版转换精灵的实时预览模块已经对item文件进行了一番解构,将其中的Question、Answer等元素一一分离,且对各个题型进行了分别的处理:

1.分离出Question、Answer等标签,用BeatifulSoup模块会比较简单;

2.用正则表达式对各个题型进行处理,重点是拼写题、选择题、匹配题、提示题和排序题,其它如是非题、改错题之类的相对用的较少,可以暂且放过;

处理时注意转换,比如我们要处理拼写题,item文件中的代码如下:

‘Where <spellpad correct="are">a</spellpad> the children?’ – ‘They’re outside in the garden.’

处理后的源文本最好是下面这个样子:

‘Where ____ the children?’ – ‘They’re outside in the garden.’ (TAB空格)are

当然也可以是:

‘Where are the children?’ – ‘They’re outside in the garden.’ (TAB空格)are

再比如选择题,代码如下:

‘Where <droplist>
<option correct="true">are</option>
<option>live</option>
<option>follow</option>
<option>look</option>
<option>ruin</option>
</droplist> the children?’ – ‘They’re outside in the garden.’

处理后的源文本最好是下面这样:

‘Where ____ the children?’ – ‘They’re outside in the garden.'(TAB空格)are(TAB空格)live(TAB空格)follow(TAB空格)look(TAB空格)ruin

按照这种思路得到的源文本,你就可以利用转换精灵,自由地制作成自己想要的课程。

 

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:
舍得
首发:
舍得@学习力博客

 

Python字典排序一例

舍得在处理SuperMemo的course.xml文件时,需要将每个元素的ID和keywords成对取出,存入字典。但由于Python的字典是无序的,因此,当储存工作完成后,需要对字典进行排序。

原始的字典像下面这个样子:

{(‘213’, ‘I’),  (‘262’, ‘they’), (‘206’, ‘it’), (‘220’, ‘or’)}

我们要将它排成:

{(‘206’, ‘it’), (’213′, ‘I’),(‘220’, ‘or’), (‘262’, ‘they’)}

经过试验,最简单的方法是采用OrderedDict来处理,方法如下:

itemDict = {(‘213’, ‘I’), (‘262’, ‘they’), (‘206’, ‘it’), (‘220’, ‘or’)}

from collections import OrderedDict
recordDict = OrderedDict(sorted(itemDict.items(), key=lambda t: int(t[0])))

这个recordDict 便是我们所要的结果。

 

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:
舍得
首发:
舍得@学习力博客

SuperMemo UX数据库中的日期格式转换

打开SuperMemo UX的数据库,我们会发现其中的日期并没有用常见的"年-月-日"的格式,而是用了一个int值,这个值通常是5位数左右,它表示从1970年1月1日起的天数,对UX程序来讲,这样的储存方式便于计算时间间隔,而当你要以日期格式来表现的时候,只要处理一下就可以了。

舍得以python为例,讲解一下日期的格式转换:

比如我们要转换15517这个值,这里要用到fromordinal这个函数,下面是代码

def getdate(self,  date):
    __s_date = datetime.date(1970, 1, 1).toordinal()   #取1970年1月1日的ordinal值
    d = datetime.date.fromordinal(__s_date + date)   #加上传进来的以int表示的日期
    return d.strftime("%Y-%m-%d")   #返回"年-月-日"格式的日期

这样我们只要调用getdate就可以得到日期,如:

print(self.getdate(15517))

结果为:

>>>2012-06-26

 

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:
舍得
首发:
舍得@学习力博客