الجمعة، 26 أكتوبر 2012

البحث بالمحارف العربية ـ وتحسينه في كوها

 البحث بالمحارف العربية ـ وتحسينه في كوها

بسم الله الرحمن الرحيم .
سأتحدث في هذه التدوينة عن واحدة من أهم الإشكاليات التي تواجه أي مستخدم جديد لكوها من عالمنا العربي ) ، وهي مشكلة البحث بالمحارف العربية ، وحاجتنا لتجاهل بعض المحارف مثل الـ ، تجاهل التنقيط عن بعض المحارف مثل ه ة أو ي ى ... أو أي نوع آخر من المحارف ، حيث أنك ستكون في نهاية هذا الدليل قادراً على تخصيص عملية البحث كما تناسبك.

أولاً تفعيل 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
 لاحظ الملون بالأحمر ، هو ما عليك أن تتاكد من وجوده ، وما هو عريض ، هو اسم الملف الذي سيأخذ منه قواعد 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>
احفظ الملف وأعد تشغيل زيبرا من خلال الأمر التالي :
/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

كوها 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>
للاستزادة حول اساليب صياغة هذه القواعد ارجع إلى دليل icu : 
http://userguide.icu-project.org/transforms/general/rules

تهانينا ! كوها الآن يتكلم ويجيب بالعربية :) .


والسلام عليكم ورحمة الله

كرم قبسي .

هناك تعليقان (2):

  1. بارك الله بيك استاذ كرم على جهودك المضنية

    ردحذف
  2. 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

    ردحذف

جميع الحقوق محفوظة © 2013 موقع كوها العربي
تصميم : كوها العرب