Pada utas komentar yang agak tidak jelas, seseorang menjelaskan di mana Anda mungkin menemukan daftar kata yang digunakan Apple untuk menyalakan screensaver. Itu di /System/Library/Graphics/Quartz\ Composer\ Plug-Ins/WOTD.plugin/Contents/Resources/NOAD_wotd_list.txt
. File terlihat seperti ini:
m_en_us1282510 quinsy
m_en_us1273791 orbicular
m_en_us1220945 alimony
m_en_us1250517 genome
Ini adalah daftar entri yang dipisahkan oleh tab. Di sebelah kanan Anda memiliki kata, dan di sebelah kiri, apa yang tampak seperti ID. Tapi untuk apa ID itu, dan bagaimana Anda bisa menemukannya untuk kata lain yang belum ada dalam daftar?
Seperti yang Anda duga, ID merujuk pada entri dalam kamus default Apple, "New Oxford American Dictionary". (Itulah yang dimaksud "NOAD" dalam jalur daftar kata di atas.)
Bagaimana menemukan ID untuk kata lain ?
Seorang pria bernama Joseph Gentle, dalam serangkaian posting blog, menunjukkan cara mendapatkan data yang mendasari kamus Apple. Dalam tulisannya "Kamus Apple, bagian 2" , dia menunjuk ke kode yang membongkar file biner yang relevan (disimpan di /Library/Dictionaries
) ke dalam XML. Menggunakan dedict.c
dan strip.c
file yang ditemukan di sini , dan mengikuti contoh Gentle, saya menggunakan perintah bash berikut untuk mendapatkan XML milik NOAD (perintah ini dijalankan dari direktori tempat Anda mengunduh dedict.c
dan strip.c
file):
clang dedict.c -Wall -lz -o dedict
clang strip.c -Wall -lz -o strip
./dedict "New Oxford American Dictionary" | ./strip > dict.xml
Ketika saya head
membuka beberapa baris pertama dict.xml
file, saya melihat sesuatu yang menjanjikan, dengan entri yang terlihat seperti ini:
<d:entry xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng" id="m_en_us1219333" d:title="abode" class="entry">
Perhatikan bahwa id
param ... ini adalah pengidentifikasi yang persis sama dengan yang ada di daftar kata screensaver!
Saya menulis skrip Ruby berikut untuk mem-parsing XML, dan kemudian, menggunakan daftar kata saya sendiri, membuat file screensaver baru yang memetakan kata-kata saya sendiri ke ID mereka di kamus:
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
Ketika saya mengganti file screensaver asli dengan yang baru ini, itu berhasil. Sekarang Anda dapat memiliki screensaver "Word of the Day" yang memberikan definisi untuk kata-kata yang Anda pilih.