أستخدم قاموس المرادفات بانتظام، أثناء كتابة نسخة للتوثيق والملفات التمهيدية (README)، وأثناء كتابة التعليمات البرمجية لتسمية المتغيرات والوظائف.
لقد اعتدت على استخدام المعجم على الإنترنت، وخاصة thesaurus.com، ولكنني كرهت هذه التجربة. على الرغم من أن النتائج مفيدة ومنظمة بشكل جيد للغاية، إلا أنها ليست مناسبة للوحة المفاتيح كما أنها بطيئة في التنقل، خاصة عندما تمتد النتائج إلى العديد من الصفحات.
لذلك قمت بإعداد المعجم الخاص بي. أستخدمه كثيرًا أكثر مما استخدمته على الإطلاق موقع thesaurus.com. يحتوي على ميزات أقل، لكن الوصول إليه أسرع بكثير وأقل تعطيلًا للعملية الإبداعية.
في النافذة الطرفية، اكتب th
متبوعة بكلمة. على سبيل المثال، للبحث عن كلمة انتباه :
![]() |
---|
استحضار th |
الإخراج عبارة عن قائمة بالكلمات والعبارات ذات الصلة، منظمة في أعمدة، مع خطوط السياق بالأعلى والأسفل، وقائمة بخيارات التنقل في الأسفل.
![]() |
---|
نتائج البحث عن الاهتمام |
يعرض السطر السفلي من شاشة النتائج قائمة بالإجراءات المتاحة. ابدأ إجراءً عن طريق كتابة الحرف الأول من الإجراء (تم تمييزه على الشاشة للتأكيد).
يتم تنظيم البيانات كمدخلات قاموسية، تحتوي كل منها على مجموعة من الكلمات والعبارات ذات الصلة. المدخل هو الجذع والكلمات والعبارات المرتبطة به هي الفروع .
العرض الافتراضي في وضع الفروع. الكلمات المعروضة هي الكلمات والعبارات المدرجة بعد الإدخال في قاموس المرادفات المصدر. سيؤدي التبديل إلى وضع جذوع إلى إظهار الإدخالات التي تحتوي على الكلمة. ويتجلى ذلك بوضوح من خلال مثال دون أي فروع:
![]() |
---|
الزناد هو كلمة بدون إدخال |
لا يوجد إدخال قاموس المرادفات للكلمة المشغل . ومع ذلك، فإن كلمة الزناد موجودة في قاموس المرادفات كفروع لمدخلات أخرى. قم بالتبديل إلى وضع جذوع لرؤية الإدخالات التي تتضمن المشغل :
![]() |
---|
قائمة الكلمات التي يكون المشغل لها كلمة ذات صلة |
هذا البرنامج غير متوفر كحزمة؛ يجب تنزيل الكود المصدري وبناء المشروع. ستنتج الخطوات التالية قاموسًا عمليًا:
git clone https://www.github.com/cjungmann/th.git
cd th
make
make thesaurus.db
العب مع البرنامج لمعرفة ما إذا كان يعجبك. إذا كنت تريد تثبيته ليكون متاحًا خارج دليل البناء، فاستدعاء الأمر التالي:
sudo make install
من السهل إزالة البرنامج إذا قررت أنك لا تحتاج إلى البرنامج.
إذا قمت بتثبيت البرنامج، فقم أولاً بإلغاء تثبيته باستخدام sudo make uninstall
سيؤدي هذا إلى إزالة البرنامج وملفات الدعم والدليل الذي تم تثبيت ملفات الدعم فيه.
إذا لم يتم تثبيت البرنامج، يمكنك حذف الدليل المستنسخ بأمان.
المواد التالية ستثير اهتمام المطورين بشكل أساسي، إن وجد.
المشروع سهل البناء ولكنه يعتمد على برامج أخرى. فيما يلي قائمة بالتبعيات، والتي قد تتطلب الأولى فقط (قاعدة بيانات بيركلي) بعض التدخل. يتم تنزيل العنصرين 3 و4 أدناه في دليل فرعي ضمن دليل البناء، ويتم ربط الكود الموجود هناك بشكل ثابت بالملف القابل للتنفيذ، لذلك لن يؤثروا على بيئتك.
يعد الإصدار db 5 (قاعدة بيانات Berkeley) ضروريًا لقواعد بيانات B-Tree في المشروع. إذا كنت تستخدم git ، فيجب أن يكون لديك هذا بالفعل، حتى على FreeBSD الذي يتضمن فقط إصدارًا أقدم من db . سينتهي Make على الفور برسالة إذا لم يتمكن من العثور على db مناسب، وفي هذه الحالة يعود الأمر إليك لاستخدام مدير الحزم الخاص بك لتثبيت db أو إنشائه من المصادر.
يتم استخدام git لتنزيل بعض التبعيات. بينما يمكن تنزيل تبعيات المشروع مباشرة بدون git ، فإن القيام بذلك يتطلب معرفة غير موثقة حول الملفات المصدر، وهي مشكلة يتم تجنبها عندما يتمكن make من استخدام git لتنزيل التبعيات.
readargs هو أحد مشاريعي التي تعالج وسيطات سطر الأوامر. بينما لا يزال هذا المشروع مستخدمًا بواسطة th ، لم يعد من الضروري تثبيت هذه المكتبة حتى تعمل. يقوم الآن ملف Makefile بتنزيل مشروع readargs في دليل فرعي، ويقوم بإنشائه واستخدام المكتبة الثابتة بدلاً من ذلك.
c_patterns هو أحد مشاريعي الأخرى، وهو تجربة في إدارة التعليمات البرمجية القابلة لإعادة الاستخدام دون الحاجة إلى مكتبة. يستخدم Makefile git لتنزيل المشروع، ثم يقوم بإنشاء روابط لبعض وحدات c_patterns في دليل src ليتم تضمينها في البناء .
هذا المشروع، رغم أنه مفيد (بالنسبة لي، على الأقل)، إلا أنه يعد أيضًا بمثابة تجربة. أحد أهدافي هنا هو تحسين مهاراتي في كتابة الملفات. قد لا تكون بعض قرارات الإنشاء والتثبيت التي اتخذتها من أفضل الممارسات، أو قد تثير استياء المطورين الأكثر خبرة. إذا كنت قلقًا بشأن ما سيحدث لنظامك إذا قمت بتثبيت th
، آمل أن يكون ما يلي بمثابة قرارك.
كما هو متوقع، سيقوم make بتجميع التطبيق . ربما يؤدي make بشكل غير تقليدي مهام أخرى قد تستغرق بعض الوقت:
يقوم بتنزيل مستودع وحدات C الخاص بي ويستخدم العديد منها عن طريق إنشاء روابط في دليل src .
بدلاً من استخدام configure
للتحقق من التبعيات، يحدد ملف makefile وينتهي فورًا برسالة مفيدة إذا اكتشف التبعيات المفقودة.
قم بتنزيل واستيراد قاموس moby للملكية العامة من مشروع Gutenberg. يؤدي هذا إلى ملء قاعدة بيانات الكلمات الخاصة بالتطبيق.
تم التخلي عن تنزيل واستيراد قاعدة بيانات عدد الكلمات. تتمثل الفكرة في تقديم أوامر فرز بديلة لتسهيل العثور على كلمة من قائمة أطول. هذا لا يعمل في الوقت الحالي. لست متأكدًا من أنني سأعود إلى هذا لأنني أجد أن فائدة قراءة قائمة أبجدية تفوق بكثير الفائدة المشكوك فيها لمحاولة وضع الكلمات الأكثر استخدامًا أولاً. والسبب هو أنه من الأسهل بكثير تتبع الكلمات في الاعتبار عندما لا تكون متناثرة بشكل عشوائي في قائمة طويلة من الكلمات.
لقد لاحظت للتو أن هناك مورد قائمة Moby Part of Speech الذي يمكن أن يساعد في تنظيم الإخراج. إنه أمر مثير للاهتمام، لكنني لست متأكدًا من أنه سيكون مفيدًا، استنادًا إلى مقدار الفرز الأبجدي الذي يساعد في استخدام المخرجات. سنرى.
كان لدي عدة أهداف عندما بدأت هذا المشروع.
كنت أرغب في المزيد من الخبرة مع قاعدة بيانات بيركلي . تدعم قاعدة بيانات مخزن المفاتيح هذه العديد من التطبيقات الأخرى، بما في ذلك git و sqlite .
كنت أرغب في التدرب على استخدام بعض وحدات مشروع c_patterns الخاصة بي. يساعدني استخدام هذه الوحدات في مشروع حقيقي على فهم عيوب التصميم والميزات المفقودة. أنا استخدم
columnize.c لتوليد الإخراج العمودي،
Promer.c لقائمة الخيارات الدنيا في الجزء السفلي من الإخراج،
get_keypress.c لضغطات المفاتيح غير المرتدة، والتي تستخدم في الغالب بواسطة Promter.c .
كنت أرغب في التدرب على تصميم عملية بناء تعمل في كل من Gnu Linux وBSD. يتضمن ذلك تحديد الوحدات المفقودة (خاصة db ، والتي يتضمن BSD مكتبة قديمة جدًا)، والمعالجة المشروطة المعاد تصميمها.
أنا لا أستهدف Windows لأنه يختلف بشكل كبير عن Linux عن BSD، ولا أتوقع أن العديد من مستخدمي Windows سيكونون مرتاحين لاستخدام تطبيق سطر الأوامر.
تبدو قاعدة بيانات بيركلي ( bdb ) بمثابة منتج قاعدة بيانات مثير للاهتمام. يبدو نهج مكتبة C منخفض المستوى مشابهًا لمحرك FairCom DB الذي استخدمته في أواخر التسعينيات.
تعتبر قاعدة بيانات بيركلي جذابة لأنها جزء من توزيعات Linux وBSD ولها مساحة صغيرة. إنه يكافئ التخطيط التفصيلي للبيانات، وهو ذريعة لاستكشاف بعض أفكاري في لغة C.
هذا المشروع هو إعادة تشغيل لمشروع كلماتي، والذي من المفترض أن يكون قاموسًا وقاموسًا لسطر الأوامر. كان هذا المشروع هو أول استخدام لي لـ bdb ، لذا فإن بعض أعمالي هناك كانت خرقاء بعض الشيء. أريد تصميم كود bdb مرة أخرى من الصفر. سأقوم بنسخ بعض كود تحليل النص من مشروع الكلمات الذي سيكون قابلاً للتطبيق هنا.
باستخدام مجموعات البيانات الكبيرة التي تمثل المرادفات والقاموس، أريد أيضًا اختبار اختلافات الأداء بين طريقتي الوصول إلى البيانات في Queue وRecno. أتوقع أن تكون قائمة الانتظار أسرع مع إمكانية حساب بداية ونهاية السجلات ذات الطول الثابت. إن الوصول عن طريق رقم السجل لسجل متغير الطول يتطلب البحث عن موقع الملف. أرغب في قياس فرق الأداء لموازنة هذه الميزة مقابل كفاءة تخزين السجلات ذات الطول المتغير.
هناك نوعان من مصادر المجال العام للمعجم:
أنا أستخدم قاموس Moby لأن تنظيمه أبسط بكثير وبالتالي أسهل في التحليل. تكمن المشكلة في أن المرادفات كثيرة، ونظرًا لافتقارها إلى التنظيم، يصعب فحصها عند البحث عن مرادف مناسب.
مع وجود مئات المرادفات للعديد من الكلمات، من الصعب جدًا فحص القائمة للعثور على الكلمة المناسبة. سأحاول فرض بعض الترتيب على القائمة لتسهيل استخدامها. بعد استخدام الأداة لبعض الوقت، توصلت إلى أن الترتيب الأبجدي هو الأفضل. من الأسهل بكثير العودة إلى كلمة في قائمة أبجدية. لقد قمت بإزالة خيار تحديد أوامر الكلمات الأخرى.
أسهل تصنيف للاستخدام هو تكرار استخدام الكلمات. أخطط لسرد الكلمات من الأكبر إلى الأقل تكرارًا للاستخدام. ومن المفترض أن الكلمات الأكثر شعبية قد تكون هي الاختيارات الأفضل، في حين أن الكلمات الأقل شعبية قد تكون قديمة.
هناك عدة مصادر لترددات الكلمات. الذي أستخدمه يعتمد على Google ngrams:
بيانات مجموعة اللغات الطبيعية: بيانات جميلة
لم أدرس مصدر Norvig حقًا، لذلك من الممكن أن يكون به الكثير من الهراء. هناك مصدر آخر قد يحتوي على قائمة أكثر دقة، hackerb9/gwordlist. إذا كانت Norvig تمثل مشكلة، فأنا أريد أن أتذكر هذه القائمة البديلة التي قد أستبدلها بها.
لم يعد يتم محاولة هذا الجزء. يعد تفسير البيانات المصدر أمرًا معقدًا بسبب الحاجة إلى التعرف على التدوين الفريد للقاموس وتحويله إلى أحرف Unicode. لقد قمت بحل العديد من هذه المشاكل، ولكن لا يزال هناك الكثير منها. لا يزال ملف Makefile يتضمن تعليمات لتنزيل هذه المعلومات ويحتفظ المستودع ببعض نصوص التحويل في حالة رغبتي في العودة إلى هذا الأمر.
تجميع المرادفات حسب جزء من الكلام (أي الاسم، الفعل، الصفة، وما إلى ذلك) يمكن أن يكون مفيدًا أيضًا. المشكلة الأولى هي في تحديد جزء الكلام الذي تمثله كل كلمة. المشكلة الثانية هي في العرض: سيكون من الأفضل، ولكن من الصعب برمجته، أن يكون له واجهة تجعل المستخدم يختار جزء الكلام قبل عرض الكلمات.
قواميس إلكترونية عامة
محاولتي الأولى هي استخدام قاموس GNU التعاوني الدولي للغة الإنجليزية (GCIDE). وهو مبني على نسخة قديمة (1914) من نسخة ويبستر، مع إضافة بعض الكلمات بواسطة محررين أكثر حداثة.