守望的麦子

Anki 教程:为 COCA 词库导入韦氏发音

2016-04-20    曼谷   

为了便于交流和分享,我们圈了个群组,叫「骇客邦」,点击这里查看介绍。
点击这里加入「骇客邦」海外电报群组
点击这里加入「骇客邦」国内知识星球
海外「电报群组」和国内「知识星球」互为备份,有价值的信息会尽力保持同步。

本文最近更新于 2018 年 1 月 20 日,大连

COCA 是 Corpus of Contemporary American English 的 缩写,是由美国杨百翰大学 Mark Davies 教授所开发的一个免费的语言资料搜寻引擎。从 1999 年创立至今依然持续更新,每年都要更新大约 2000 万词汇,截至 2015 年年底已经拥有 5 亿 2000 万的庞大词汇库。(via link

本文介绍了一个为 Anki 的 COCA 记忆词库导入韦氏发音的方法。

Anki 介绍:链接[20160702#更新@大连]

搜索下载韦氏词典 142000 单词语音库高清版本。

解压后其目录结构为 voice142000tree.txt

提取其中的单词列表:

find ./ -printf "%f\n" > 142000_list.txt

整理 142000_list.txt,例如使用 Vim 编辑器:

:v/.wav$/d

这样只保留含有 .wav 后缀的行,然后保存 wav 音频列表:

:w 142000_wav.txt

去除 .wav 后缀:

:%s/.wav$//g

排序:

:sort

保存 142000 语音库单词列表:

:w 142000_words.txt

将恶喵的奶爸的 COCA 低频 10000 词表(下载链接见本文末尾)排序去重:

:sort u

保存:

:w 10000_sort.txt

比较 142000_words.txt 和 10000_sort.txt 提取相同行。可以使用 Excel 将 10000_sort.txt 粘贴到 A 列(9839 行),将 142000_words.txt 粘贴到 C 列(142000 行),在 B1 里使用公式:

=IF(ISERROR(MATCH(A1,$C$1:$C$142000,0)),"",A1)

这里的公式意思是:
MATCH(A1,$C$1:$C$142000,0) 将 A1 中的值与 C1:C142000 的相比较是否相等(0),如果相等,则返回 A1 的相对位置,否则返回 #N/A 错误;IF(ISERROR(MATCH(A1,$C$1:$C$142000,0)),”“,A1) 如果 MATCH(A1,$C$1:$C$142000,0) 结果为 False,返回空值;如果结果为 True,返回 A1 的值。注意其中 A1 使用相对位置,C1:C142000 使用绝对位置。

选择 B1:B9839。如果使用的是 Excel 2003 或之前的版本,点击 Edit 下的 Fill,然后点击 Down;如果使用的是 Excel 2007,点击 Editing group 中的 Fill,然后点击 Down。

因为前面的 A1 使用相对位置,C1:C142000 使用绝对位置。这样我们在下拉公式时,才可以在逻辑上实现从 A 列中逐个拿出每个单词与 C 列的 142000 个单词相比较。即此时 B2 的公式是 =IF(ISERROR(MATCH(A2,$C$1:$C$142000,0)),”“,A2),B3 的公式是 =IF(ISERROR(MATCH(A3,$C$1:$C$142000,0)),”“,A3)……以此类推。

相同的值会生成在 B 列里面。全选 B 列,复制粘贴到 txt 文档,排序:

:sort

删除空格,保存:

:w common_words.txt

打开 common_words.txt 在每一行首添加 ./<单词首字母>/,行尾添加 .wav,以便在 voice 路径下可以定位到每一个单词的语音,可以通过 Vim的宏 或者 UltraEdit的列模式 进行此项操作。以 Vim 的宏为例先录制宏,并命名为 a:

qa0vypi/<esc>I./<esc>A.wav<esc>jq

将鼠标移至第 2 行,输入 <n-1>@a 等待结束即可(其中 n 为 common_words.txt 的总行数)。如果在 Windows 平台,需要输入下面的命令将文件格式改为 unix,修正每个 wav 文件的 path 行尾 \n 字符问题,以便可以使用接下来的 Linux Shell 指令进行拷贝,命令如下:

:set ff=unix

保存文件:

:w common_wav_path.txt

在 voice 的上一级目录创建文件夹 anki,使用下面的命令将 common_wav_path.txt 里面的文件复制到刚创建的 anki 目录下(耗时会久一些):

cat common_wav_path.txt | xargs -i cp {} ../anki/

到这里我们已经得到了 恶喵的奶爸的 COCA 低频 10000 词表 的韦氏发音。

然后我们开始导入 Anki,先将 10000_sort.txt 导入,选择单词要 import 的 field,例如 words。

再将 anki 文件夹里所有的 wav 文件拷贝到 Anki 程序的 collection.media 路径下。

接下来需要根据 common_wav_path.txt 制作 word; wav 格式的 txt,用于 update 导入的 10000_sort.txt 内容,例如使用 Vim 的制作方法如下:

打开 common_wav_path.txt,列模式替换行首的 ./<单词首字母>/[sound:,所有行尾添加 ],行尾添加 ] 的方法可以通过 Vim 宏操作。保存:

:w anki_sound.txt

打开 Excel,将 common_words.txt 内容粘贴到 A 列,将 anki_sound.txt 内容粘贴到 C 列,B 列使用 ; 填充。全选,复制粘贴到 txt,将内容保存为 anki.txt 用于导入 Anki 程序。

执行导入之前注意配置分隔符为 ;,选择 update existing notes… 而不是 ignore… 和 import…,将 field 1 mapped 到与刚才导入 10000_sort.txt 时相同的 field。

完成。

附上我在操作过程中生成的相关文件:

142000_list.txt
142000_wav.txt
142000_words.txt
恶喵的奶爸的 COCA 低频 10000 原始词表 10000.txt
10000_sort.txt
提取相同行的 Excel common.xlsx
common_words.txt
common_wav.txt
common_wav_path.txt
anki_sound.txt
anki.xlsx
anki.txt

关于作者
麦子,80 后,现从事通信行业。安卓玩家一个人的书房朗读者。
MRJENGLISH
jsntn
jasonwtien
jasonwtien
更多…… /about.html

最近更新: