البحث بالمحارف العربية ـ وتحسينه في كوها
بسم الله الرحمن الرحيم .سأتحدث في هذه التدوينة عن واحدة من أهم الإشكاليات التي تواجه أي مستخدم جديد لكوها من عالمنا العربي ) ، وهي مشكلة البحث بالمحارف العربية ، وحاجتنا لتجاهل بعض المحارف مثل الـ ، تجاهل التنقيط عن بعض المحارف مثل ه ة أو ي ى ... أو أي نوع آخر من المحارف ، حيث أنك ستكون في نهاية هذا الدليل قادراً على تخصيص عملية البحث كما تناسبك.
أولاً تفعيل ICU ، لدعم المحارف العربية بشكل بسيط :
في الحقيقة هنالك اشكالية كبيرة حول تفعيل ICU ، خاصة إذا ما كان ذلك في إصدارات كوها ما قبل الإصدار 3.8x أو حتى لاصدار 3.8x فما فوق ، سافصل أكثر في ذلك :كوها ما قبلَ 3.8x :
في هذه الإصدارات من كوها ، لم يكن هنالك أي شيء بإمكانه أن يُخبر كوها بأنك تريد استخدام زيبرا لتبحث في المحارف غير اللاتينية ، وعليه فإن العملية كانت برمتها يدوية.
الخطوات اليدوية لتعفيل البحث بالكود الموحد Unicode :
أولاً إن لم تكن لديك حزمة yaz-icu نصبها من خلال تنفيذ الأمر التالي :
install yaz-icu package
ثانياً ادخل للمسار التالي بالصلاحيات المطلوبة للتعديل فيه :
/etc/koha/zebradb/etc/
ثمَّ حرر الملف المسمى default.idx وتأكد ان بدايته تشابه ما هو موجود في ما يلي (إن لم تكن كذلك فعدلها) :
# Traditional word index
# Used if completenss is 'incomplete field' (@attr 6=1) and
# structure is word/phrase/word-list/free-form-text/document-text
index w
completeness 0
position 1
alwaysmatches 1
firstinfield 1
icuchain words-icu.xml
# Phrase index
# Used if completeness is 'complete {sub}field' (@attr 6=2, @attr 6=1)
# and structure is word/phrase/word-list/free-form-text/document-text
index p
completeness 1
firstinfield 1
icuchain phrases-icu.xml
# Used if completenss is 'incomplete field' (@attr 6=1) and
# structure is word/phrase/word-list/free-form-text/document-text
index w
completeness 0
position 1
alwaysmatches 1
firstinfield 1
icuchain words-icu.xml
# Phrase index
# Used if completeness is 'complete {sub}field' (@attr 6=2, @attr 6=1)
# and structure is word/phrase/word-list/free-form-text/document-text
index p
completeness 1
firstinfield 1
icuchain phrases-icu.xml
لاحظ الملون بالأحمر ، هو ما عليك أن تتاكد من وجوده ، وما هو عريض ، هو اسم الملف الذي سيأخذ منه قواعد icu ليدعم المحارف العربية والسوابق واللواحق ...
ثالثاً أنشئ مستنداً نصياً (إن لم يكن موجوداً أصلاً أو حرره ) بالمسمى التالي words-icu.xml كما حُدد أعلاه بالأحمر العريض وتاكد من وجوده في نفس المسار السابق :
/etc/koha/zebradb/etc/
ثمَّ تاكد من أن محتويات الملف النصي المسمى words-icu.xml تشبه ما يلي (للدعم البسيط للمحارف العربية ) :
<icu_chain locale="ar">
<transliterate rule="\'>\ "/>
<transliterate rule="[:Number:] { '-' > '' "/>
<transform rule="[:Control:] Any-Remove"/>
<tokenize rule="l"/>
<transform rule="[[:WhiteSpace:][:Punctuation:]] Remove"/>
<transform rule="NFD"/>
<transform rule="[:Nonspacing Mark:] Remove"/>
<transform rule="NFC"/>
<display/>
<casemap rule="l"/>
</icu_chain>
<transliterate rule="\'>\ "/>
<transliterate rule="[:Number:] { '-' > '' "/>
<transform rule="[:Control:] Any-Remove"/>
<tokenize rule="l"/>
<transform rule="[[:WhiteSpace:][:Punctuation:]] Remove"/>
<transform rule="NFD"/>
<transform rule="[:Nonspacing Mark:] Remove"/>
<transform rule="NFC"/>
<display/>
<casemap rule="l"/>
</icu_chain>
احفظ الملف وأعد تشغيل زيبرا من خلال الأمر التالي :
/etc/init.d/koha-zebra-daemon restart
ثم اعد تكشيف فهرس زيبرا من خلال الأمر التالي :
/usr/share/koha/bin/migration_tools/rebuild_zebra.pl -b -r -v -w
افتح كوها ، وابحث بالعربية :) .
روابط مفيدة:
http://www.scribd.com/doc/45190333/ICU-Support-in-Zebra
روابط مفيدة:
http://www.scribd.com/doc/45190333/ICU-Support-in-Zebra
كوها 3.8x وما فوق :
بعد اصدار كوها 3.8x ، فبإمكانك اختصار الخطوات المذكورة آنفاً أثناء عملية التنصيب ، وذلك من خلال اختيار الخيار icu اثناء عملية التنصيب وبالضبط بالخطوة التي يسالك فيها عن التالي :
Zebra has two methods to perform records tokenization
and characters normalization: CHR and ICU. ICU is
recommended for catalogs containing non-Latin
characters. (chr, icu) [chr] icu
اذا هنا عليك ان تختار icu ، وبذلك يتم التكوين الذي قمنا به بشكل يدوي أعلاه ، وستحتاج بعد ذلك ( في الاصدارات بعد 3.8 ) أن تخبر كوها انك تستخدم icu وذلك من خلال الذهاب للمسار التالي :
من واجهة كوها الأساسية > المزيد > الإدارة > تفضيلات النظام العامة > البحث > UseICU > اختر استخدم (use) .
ومن نفس المسار اختر للتفضيل QueryFuzzy >اختر لا تحاول (don't try)
واختر التفضيل QueryStemming > واجعل قيمته لا تحاول (don't try)
وأعد تشغيل زيبرا من خلال الأمر التالي :
/etc/init.d/koha-zebra-daemon restart
ثم اعد تكشيف فهرس زيبرا من خلال الأمر التالي :
/usr/share/koha/bin/migration_tools/rebuild_zebra.pl -b -r -v -w
افتح كوها ، وابحث بالعربية :) .
ثانياً ـ تفعيل البحث بالمحارف العربية بشكل متقدم :
قد يبدو العنوان خطيراً ههه ولكن لا تقلق ... فالأمر بسيط . في كلتا الحالتين المذكورتين أعلاه ، سواء ﻹصدارات كوها ما قبل 3.8x أو ما بعدها فإن الخطوة هي نفسها ن المهم ان تكون فعلت البحث البسيط بالمحارف العربية كما شرحتُ أعلاه ، ثم ما عليك إلا أن تحرر الملف المسمى words-icu.xml في المسار
/etc/koha/zebradb/etc/
وجعله كالتالي لدعم تجاهل (ال) من بداية الكلمات ويمكن تطويرها لتدعم ه ة ي ى ون ين ان ... حسب الحاجة .
<icu_chain locale="ar">
<transliterate rule="\'>\ "/>
<transliterate rule="[:Number:] { '-' > '' "/>
<transform rule="[:Control:] Any-Remove"/>
<tokenize rule="l"/>
<transform rule="[[:WhiteSpace:][:Punctuation:]] Remove"/>
<transform rule="NFD"/>
<transform rule="[:Nonspacing Mark:] Remove"/>
<transform rule="NFC"/>
<transliterate rule="{ الا > ا "/>
<transliterate rule="{ الأ > أ "/>
<transliterate rule="{ الإ > إ "/>
<transliterate rule="{ الآ > آ "/>
<transliterate rule="{ الب > ب "/>
<transliterate rule="{ الت > ت "/>
<transliterate rule="{ الث > ث "/>
<transliterate rule="{ الج > ج "/>
<transliterate rule="{ الح > ح "/>
<transliterate rule="{ الخ > خ "/>
<transliterate rule="{ الد > د "/>
<transliterate rule="{ الذ > ذ "/>
<transliterate rule="{ الر > ر "/>
<transliterate rule="{ الز > ز "/>
<transliterate rule="{ الس > س "/>
<transliterate rule="{ الش > ش "/>
<transliterate rule="{ الص > ص "/>
<transliterate rule="{ الض > ض "/>
<transliterate rule="{ الط > ط "/>
<transliterate rule="{ الظ > ظ "/>
<transliterate rule="{ الع > ع "/>
<transliterate rule="{ الغ > غ "/>
<transliterate rule="{ الف > ف "/>
<transliterate rule="{ الق > ق "/>
<transliterate rule="{ الك > ك "/>
<transliterate rule="{ الل > ل "/>
<transliterate rule="{ الم > م "/>
<transliterate rule="{ الن > ن "/>
<transliterate rule="{ اله > ه "/>
<transliterate rule="{ الو > و "/>
<transliterate rule="{ الي > ي "/>
<display/>
<casemap rule="l"/>
</icu_chain>
<transliterate rule="\'>\ "/>
<transliterate rule="[:Number:] { '-' > '' "/>
<transform rule="[:Control:] Any-Remove"/>
<tokenize rule="l"/>
<transform rule="[[:WhiteSpace:][:Punctuation:]] Remove"/>
<transform rule="NFD"/>
<transform rule="[:Nonspacing Mark:] Remove"/>
<transform rule="NFC"/>
<transliterate rule="{ الا > ا "/>
<transliterate rule="{ الأ > أ "/>
<transliterate rule="{ الإ > إ "/>
<transliterate rule="{ الآ > آ "/>
<transliterate rule="{ الب > ب "/>
<transliterate rule="{ الت > ت "/>
<transliterate rule="{ الث > ث "/>
<transliterate rule="{ الج > ج "/>
<transliterate rule="{ الح > ح "/>
<transliterate rule="{ الخ > خ "/>
<transliterate rule="{ الد > د "/>
<transliterate rule="{ الذ > ذ "/>
<transliterate rule="{ الر > ر "/>
<transliterate rule="{ الز > ز "/>
<transliterate rule="{ الس > س "/>
<transliterate rule="{ الش > ش "/>
<transliterate rule="{ الص > ص "/>
<transliterate rule="{ الض > ض "/>
<transliterate rule="{ الط > ط "/>
<transliterate rule="{ الظ > ظ "/>
<transliterate rule="{ الع > ع "/>
<transliterate rule="{ الغ > غ "/>
<transliterate rule="{ الف > ف "/>
<transliterate rule="{ الق > ق "/>
<transliterate rule="{ الك > ك "/>
<transliterate rule="{ الل > ل "/>
<transliterate rule="{ الم > م "/>
<transliterate rule="{ الن > ن "/>
<transliterate rule="{ اله > ه "/>
<transliterate rule="{ الو > و "/>
<transliterate rule="{ الي > ي "/>
<display/>
<casemap rule="l"/>
</icu_chain>
للاستزادة حول اساليب صياغة هذه القواعد ارجع إلى دليل icu :
http://userguide.icu-project.org/transforms/general/rules
http://userguide.icu-project.org/transforms/general/rules
تهانينا ! كوها الآن يتكلم ويجيب بالعربية :) .
والسلام عليكم ورحمة الله
كرم قبسي .
كرم قبسي .
بارك الله بيك استاذ كرم على جهودك المضنية
ردحذفThe King Casino - Herzaman in the Aztec City
ردحذفThe gri-go.com King Casino in Aztec City is the place where herzamanindir.com/ you can find and play for real, ventureberg.com/ real money. Enjoy a septcasino.com memorable stay at this casinosites.one one-of-a-kind casino