英语阅读这门课要考单词,为了方便整理生词折腾了一套比较自动化的workflow。

  1. 整理生词

为了省去一个一个查单词的麻烦,用 Python 写了一个小脚本,调用别人做好的必应词典API,然后把查字典查到的结果写到csv里。

之后就可以把csv导入到表格处理软件里了。我这里用的是Numbers,直接把csv文件拖进去就好了。用Microsoft Excel的话,在Windows上应该可以直接打开,在macOS下需要从”数据”->”从文件”并选择UTF-8编码手动导入。

效果如图:

  1. 背单词

这里使用了Numbers叫做“条件高亮显示”的功能,在Microsoft Excel里也有相应的功能。在设置好下面两条规则之后就可以做到高亮没写的单词、标红没拼对的单词了。

只要隐藏相应的列就可以自己考自己单词了!

  1. Future work

这里立个flag,等考完试有空了把这个东西写成Web App让大家都能用。

期末加油!

附源码

#!/usr/bin/env python3
import csv
import re
import requests
import argparse

def main(args):
    with open(args.input, 'r') as in_list, open(args.output, 'w') as out:
        writer = csv.writer(out)
        words_lines = [x.strip() for x in in_list.readlines()]
        words = []
        for line in words_lines:
            for w in line.split(' '):
                words.append(w.strip())
        for w in words:
            request_data = {
                'Action': 'search',
                'Word': w,
                'Format': 'jsonwv'
            }
            try:
                r = requests.post('http://xtk.azurewebsites.net/BingService.aspx', data=request_data).json()
                meaning = []
                for k in r.keys():
                    if k.startswith('mn'):
                        idx = re.match('mn(\d+)', k).group(1)
                        meaning.append("{} {}".format(r['pos'+idx], r[k]))
                if len(meaning) > 0:
                    amep = r.get('amep', '').replace("æ", "æ")
                    brep = r.get('brep', '').replace("æ", "æ")
                    writer.writerow([w, amep, brep, '  '.join(meaning)])
            except:
                pass

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='take word list, output dictionary')
    parser.add_argument('--input')
    parser.add_argument('--output')

    args = parser.parse_args()
    if args.input is None or args.output is None:
        print('You must provide input and output.')
        exit()
    main(args)