เหตุผลเป็นเรื่องเล็กน้อย: ฉันเป็นแฟนของโปรแกรมรักษาหน้าจอ "Word of the Day" และฉันต้องการเพิ่มพจนานุกรมสำหรับภาษาอื่นนอกเหนือจากภาษาอังกฤษและภาษาญี่ปุ่น
ฉันจะทำมันได้อย่างไร
เหตุผลเป็นเรื่องเล็กน้อย: ฉันเป็นแฟนของโปรแกรมรักษาหน้าจอ "Word of the Day" และฉันต้องการเพิ่มพจนานุกรมสำหรับภาษาอื่นนอกเหนือจากภาษาอังกฤษและภาษาญี่ปุ่น
ฉันจะทำมันได้อย่างไร
คำตอบ:
ในกระทู้ความคิดเห็นที่ค่อนข้างคลุมเครือบางคนอธิบายว่าคุณอาจพบรายการคำศัพท์ที่ 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 อ้างอิงถึงรายการในพจนานุกรมเริ่มต้นของ Apple คือ "New Oxford American Dictionary" (นั่นคือสิ่งที่ "NOAD" หมายถึงในเส้นทางรายการคำด้านบน)
จะหารหัสสำหรับคำอื่น ๆ ได้อย่างไร?
เพื่อนคนหนึ่งชื่อโจเซฟเจนเทิลในชุดบทความบล็อกแสดงวิธีรับข้อมูลจากพจนานุกรมของ Apple ในโพสต์"พจนานุกรมของ Apple ตอนที่ 2"เขาชี้ไปที่รหัสที่คลายไฟล์ไบนารีที่เกี่ยวข้อง (เก็บไว้/Library/Dictionaries
) ลงใน XML การใช้ไฟล์dedict.c
และstrip.c
พบได้ที่นี่และตามตัวอย่างของ Gentle ฉันใช้คำสั่ง bash ต่อไปนี้เพื่อรับที่ XML ของ NOAD (คำสั่งเหล่านี้เรียกใช้จากไดเรกทอรีที่คุณดาวน์โหลด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
พารามิเตอร์ ... มันเป็นตัวบ่งชี้ที่ดูเหมือนว่าหนึ่งในรายการคำสกรีนเซฟเวอร์!
ฉันเขียนสคริปต์ 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
เมื่อฉันแทนที่ไฟล์สกรีนเซฟเวอร์ดั้งเดิมด้วยไฟล์ใหม่มันใช้งานได้ ตอนนี้คุณสามารถมีสกรีนเซฟเวอร์ "คำศัพท์ประจำวัน" ที่ให้คำจำกัดความของคำที่คุณเลือก
หากคุณมี 10.8 คุณสามารถเปิดใช้งานพจนานุกรมฝรั่งเศสเยอรมันจีนประยุกต์และสเปนจากการตั้งค่าของ Dictionary.app:
ดูเหมือนว่าพวกเขาจะไม่ปรากฏเป็นตัวเลือกสำหรับสกรีนเซฟเวอร์ Word of the Day แต่:
ฉันลองรีสตาร์ทอีกครั้งหลังจากเปิดใช้งานพจนานุกรม
ในกรณีที่ใคร ๆ ก็ยังสนใจในเรื่องนี้ในปี 2018 และเจอสิ่งนี้ ..
ฉันเพียงแค่การปรับปรุงเพื่อ OS X ซ้อมและพบไฟล์ที่Word of the Day.saver
/System/Library/Screen Savers/
ในแพ็คเกจนี้ไปที่Contents/Resources/WordLists/
และคุณสามารถค้นหาไฟล์. plist 5 ไฟล์ที่ใช้ใน Mojave WotD (พวกเขาเพิ่มพจนานุกรมภาษาจีนกลาง / กวางตุ้งจีนสามไฟล์) คุณสามารถใช้วิธีของ jsomers ด้านบนได้
และอีกไม่นานหลังจากที่ Apple เพิ่มการป้องกันความสมบูรณ์ของระบบลงใน OS X ดังนั้นคุณจะต้องปิดการใช้งานก่อนที่จะเขียนลงในไฟล์. plist
ฉันมีความสุขมากที่ Apple ไม่ได้ยอมแพ้กับ WotD ตัวเก่าที่ดีและอัพเดทมันเล็กน้อยในโมฮาวี หวังว่าพวกเขาสามารถให้ทางเลือกพจนานุกรมได้มากขึ้นในอนาคต
วิธีนี้จะช่วยแก้ปัญหาของคุณ: http://www.makeuseof.com/tag/easily-expanding-apple-dictionary-–-mac-only/