Answers:
在一个晦涩的注释线程上,有人解释了您可能在哪里找到Apple用来为屏幕保护程序供电的单词列表。在/System/Library/Graphics/Quartz\ Composer\ Plug-Ins/WOTD.plugin/Contents/Resources/NOAD_wotd_list.txt
。该文件如下所示:
m_en_us1282510 quinsy
m_en_us1273791 orbicular
m_en_us1220945 alimony
m_en_us1250517 genome
它是一个制表符分隔的条目的列表。右边是单词,左边是看起来像ID的单词。但是,它的ID是什么?对于列表中尚未存在的另一个单词,您将如何找到它呢?
如您所料,该ID指向Apple默认词典“ New Oxford American Dictionary”中的一个条目。(这就是上面的单词列表路径中的“ NOAD”代表的意思。)
如何找到其他单词的ID ?
在一系列博客文章中,一个名叫约瑟夫·温特尔(Joseph Gentle)的人展示了如何获取苹果词典的基础数据。在他的“ Apple词典,第2部分”中,他指出了将相关二进制文件(存储在中/Library/Dictionaries
)解压缩为XML的代码。使用在此处找到的dedict.c
和strip.c
文件,并按照Gentle的示例,我使用以下bash命令获取NOAD的XML(这些命令从您下载和文件的目录中运行):dedict.c
strip.c
clang dedict.c -Wall -lz -o dedict
clang strip.c -Wall -lz -o strip
./dedict "New Oxford American Dictionary" | ./strip > dict.xml
当我head
-ed文件的前几行时dict.xml
,我看到了一些很有前途的东西,条目看起来像这样:
<d:entry xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng" id="m_en_us1219333" d:title="abode" class="entry">
请注意,id
param ...这是一个与屏幕保护程序单词列表中的标识符完全一样的标识符!
我编写了以下Ruby脚本来解析XML,然后使用我自己的单词列表创建一个新的屏幕保护程序文件,该文件将我自己的单词映射到字典中的ID:
raw = File.open("./dict.xml").read
my_words = File.open("./word_list.csv").readlines.map { |line| line.split(',')[1] }
word_id_map = {}
raw.scan(/<d:entry .*? id="(.*?)" d:title="(.*?)" class="entry">/).each do |entry|
word_id_map[entry[1]] = entry[0]
end
my_words.each do |word|
if id = word_id_map[word]
puts [id, word].join(' ')
end
end
当我用这个新的屏幕保护程序文件替换原来的屏幕保护程序文件时,它就起作用了。现在,您可以拥有“每日一词”屏幕保护程序,该屏幕保护程序提供了所选单词的定义。
如果有人在2018年仍然对此感兴趣,并遇到这个问题。
我刚刚更新到OS X Mojave,并在找到Word of the Day.saver
文件/System/Library/Screen Savers/
。在此软件包中,转到Contents/Resources/WordLists/
,您可以找到Mojave WotD中使用的5个.plist文件(它们添加了三个普通话/广东话汉语词典)。在那里,您可以使用上面的jsomers方法。
自苹果将系统完整性保护添加到OS X以来已经有一段时间了,因此您必须先禁用它,然后再写入.plist文件。
我很高兴苹果公司没有放弃旧的WotD,而是在Mojave中对其进行了一些更新。希望他们将来能提供更多的词典选择。