أدوات المستخدم

أدوات الموقع


thawab-pri:shamela-importing


تحسين الاستيراد من الشاملة

حوار مع نافع

(02:19:15 PM) نافع: هل المطلوب على أي أساس يتم تلوين العنوان

‪(02:19:45 PM)‬‏‬ ‫مؤيد السعدي‬‎‬: ‫نعم وأظن أنه يتم البحث عن العناوين وتلوينها لكن لدي بعض الحالات الخاصة أريد أن أسأل عنها

(02:19:56 PM) نافع: تفضل

‏‪(02:20:21 PM)‬‏‬ ‫مؤيد السعدي‬‎‬: ‫أولها ما هي طريقة تسوية الحركات وغيرها مثلا هل تسوى المسافات وال tabs و ال LF

‏‪(02:20:39 PM)‬‏‬ ‫مؤيد السعدي‬‎‬: ‫هل تحذف ال التطويلات ؟

(02:20:44 PM) نافع: نعم يتم البحث والتلوين ، ولا ترمز العناوين أو توسم داخل النص لأنه أحيانا تكون العناوين ليست في النص أصلا

(02:21:01 PM) نافع: نعم الأمر فيه تفصيل

‏‪(02:21:45 PM)‬‏‬ ‫مؤيد السعدي‬‎‬: ‫طيب هل تتم المطابقة في غير بداية السطر

‏‪(02:22:36 PM)‬‏‬ ‫مؤيد السعدي‬‎‬: ‫مثلا لو كان العنوان “البسملة” وكانت هناك فقرة هكذا <box> “وفي الفصل التالي سنتحدث عن البسملة …. سطر جديد”

‫“البسملة” سطر جديد

‫كلام كلام كلام </box>

(02:22:53 PM) نافع: أولا أبحث عن النص كما هو لأنه أسرع وغالبا أجده

(02:22:53 PM) نافع: فإن لم أجده أتجاهل كل شيئ عدا (الحروف العربية والإنجليزية والأرقام)

(02:22:53 PM) نافع: فإن لم أجده أتجاهل الأرقام أيضا

(02:23:03 PM) نافع: فإن لم أجده أتجاهل المسافات (عبد الله = عبدالله/ الدرالمنثور=الدر المنثور)

‏‪(02:23:41 PM)‬‏‬ ‫مؤيد السعدي‬‎‬: ‫‏‫إن وجد شيئا هل يتم البحث مرة أخرى ؟

(02:23:43 PM) نافع: طيب ثواني

(02:23:43 PM) نافع: البحث يتم في السابق على مراحل كما علمت إن لم يجد ينتقل للتالي

‏‪(02:25:07 PM)‬‏‬ ‫مؤيد السعدي‬‎‬: ‫فهمت! جزاك الله خيرا

(02:25:08 PM) نافع: لا

(02:25:08 PM) نافع: ثم

(02:25:08 PM) نافع: أولا يبحث عن الكلمة في سطر مستقل

(02:25:08 PM) نافع: فإن وجدها فهي المفضلة ولا يبحث عن غيرها

(02:25:08 PM) نافع: وإلا يبحث عنها في أول السطر

(02:25:08 PM) نافع: فإن لم يجدها فحينئذ يبحث عنها ولو في وسط الكلام

(02:25:08 PM) نافع: وهذه الدرجات تتم في كل مرحلة من المراحل السابقة

‏‪(02:25:45 PM)‬‏‬ ‫مؤيد السعدي‬‎‬: ‫حلقتان متداخلتان!!

(02:25:46 PM) نافع: وجزاكم

(02:25:46 PM) نافع: طبعا كل ال tabs وغيرها من الفواصل تسوى بالمسافة

‏‪(02:26:36 PM)‬‏‬ ‫مؤيد السعدي‬‎‬: ‫حسنا سأسجل ذلك في الويكي الخاص في صفحة خاصة بالاستيراد من الشاملة

(02:26:38 PM) نافع: كأنهما هكذا

(02:26:38 PM) نافع: الواقع هي function أستدعيها أكثر من مرة ب parameters مختلفة في كل مرة حسب نتيجة السابق

الخوارزمية في ثواب

  1. تحويل كل الملف إلى sqlite ثم استخدام sqlite في المراحل اللاحقة
  2. استيراد الميتا
  3. استيراد كل كتاب وحده في حالة الكتب المشروحة
    • ويتم البدء بالمتن المشروح ثم الشروحات
    • الاحتفاظ بالمعرفات المولدة للمتن المشروح المقابلة ل MatnId
    • إدراج روابط لها في الشرح

تحديد عناوين الأبواب

الفكرة الأولى: ملغاة <box>

  • عمل مصفوفة تحتوي العناوين التي يفترض أن تقع قبل الباب التالي
  • إزالة العنوان منها عندما نجده
  • إن تم الانتهاء من كل صفوف قاعدة البيانات قبل صف الباب التالي وبقي عناوين فإنها تجمع في سجل الاخطاء المتوقعة.

</box>

الفكرة الثانية:

  • عمل قائمة list اسمها toc_ls بالمعلومات التالية معرف الصفحة page_id العنوان المطلوب البحث عنه وتظليله title ومستوى العمق depth level
  • تجميع العنواين حسب رقم الصفحة عبر groupby ثم توليد قاموس hash dictionary اسمه toc_hash مفتاحه رقم الصفحه ويشير إلى قائمة عناصرها الإزاحة عن بداية toc_ls للعناوين المقابلة
  • السير على كل الصفحات واحدة واحدة والبحث عن العناوين المقابلة للصفحة الحالية في toc_hash
  • التأكد من أن العنوان المرشح لا يتداخل overlaps عبر عملية bisect سريعة
  • عمل pop للعناوين التي وجدت حتى لا يتم البحث عنها مرة أخرى

طريقة البحث

ترتيب الخطوة كما بينها نافع

مكان النص / تعديل عليه النص كما هو حذف كل ما عدا الحروف والأرقام كل ما عدا الحروف بما في ذلك الأرقام
سطر بأكمله 1 2 3
بداية السطر 4 5 6
حتى إن كان في وسط السطر 7 8 9

هذه الطريقة قد تصلح عند عرض الصفحة لكن عند الاستيراد فإن البحث عن عدد كبير من العناوين وتكراره 9 مرات لكل الكتاب غير بطيء جدا. (انظر قياس الأداء أدناه)

طريقة بديلة:

  • تصنيف RE باسم no_WD_re يطابق كل ما عدا الحروف العربية والإنجليزية الصغيرة والأرقام [^a-bابتثجحخدذرزسشصضطظعغفقكلمنهوي0-9]
  • تصنيف RE يبحث عن الكلمة متجاهلا المسافات فقط عبر حشر “ *” بين كل حرفين من حروف عنوان التبويب.
  • تطبيق دالة واحد لواحد تحول transformation بعض الأشياء في النص دون تغيير مكانه مثل تحول TAB إلى مسافة أو تحويل الحروف الكبيرة إلى صغيرة …
  • في كل صفحة نعمل على تحويل مايطابق no_WD_re في النص إلى مسافات مما يجعل العنواين تطابق ..

وعبر تحويل ما لا نريد مطابقته إلى مسافة نحافظ على مكان المحرف.

تساؤل؟

أنه أحيانا تكون العناوين ليست في النص أصلا

طيب في هذه الحالة ماذا نلون ؟ وأين يبدأ النص التابع للعنوان ؟ هل نضيف العنوان في رأس الصفحة التي يشير لها أم أنه قد يكون في وسطها ؟

علينا الآن دراسة عدد العناوين المفقودة هل هي وحيدة في الصفحة أم هناك عناوين غيرها لأنها إن كانت وحيدة تضاف في رأس الصفحة وتنتهي القصة.

قياس الأداء

لمعرفة سبب بطئ الاستيراد حيث هناك 3 احتمالات.

  1. نموذج البيانات في ثواب - بما أن الاستيراد من الويكي سريع فهذا غير وارد
  2. عمليات البحث المتتابعة عن التبويبات/العناوين
  3. أن يكون السبب هو عملية كشف التداخل overlap عند البحث عن مواقع الترويسات هبر الدالة _foundShHeadingMatchItem.overlaps_with - تم عمل تجربة تبين أن عملية البحث عن التداخل سريعة جدا ولا تؤثر على الأداء.

وبعد تجربة تقليل عدد طرق البحث عن عناوين الأبواب في السطر 375

for fz in range(10):

زادت السرعة 10 أضعافها.

عند استعمال أول وثاني عملية فقط كان هنا 1866 عنوان لم يجده البرنامج. وعند استعمال ال 10 طرق كان هناك 436 عنوانا ناقصا فقط!

الطريقة البديلة الجديدة انتهت في 13 ثانية (وليس دقيقة) ومع تطبيق كل طرق البحث لم تجد 940 عنوانا.

خربشات

قد يكون السطر 383 بحاجة لمعالجة النص الذي يكون قبل أول عنوان وذلك بوضع عنوان الكتاب.

التراجم

عند النظر إلى بعض الكتب الخاصة بتراجم الرجال

[alsadi@localhost bok-samples]$ mdb-export -I سير\ أعلام\ النبلاء.bok men_b | sort | head
INSERT INTO men_b (Name, Bk, Id, ManId) VALUES ("أبان بن تغلب الربعي
الكوفي",10906,3493,136)
 
[alsadi@localhost bok-samples]$ mdb-export -I سير\ أعلام\ النبلاء.bok men_u | sort | head
INSERT INTO men_u (Name, Bk, Id) VALUES ("أبان بن سعيد الأموي",10906,594)

في حين لم أجد مثل هذا في أهم كتابين هما كتابي التهذيب

<box> وبالنسبة للتراجم فالفكرة أن هناك جدول للتراجم الرئيسية men_h وهذا المفترض ألا تتكرر فيه التراجم ففيه اسم الرجل مرة واحدة ومعرفه وهذا لا علاقة له بكتب معينة بل هو عام للموسوعة كلها وبالنسبة لتراجم كل كتاب فإن كان الرجل موجودا في الجدول الرئيسي السابق فإنه يكون men_b = bound أي مرتبط بالجدول الرئيسي وهنا سيذكر اسم الراوي - كما ورد في الكتاب ومعرفه في الجدول الرئيسي

أما إن لم يكن موجودا في الجدول الرئيسي فساعتها يكون men_u =unbound

والغرض أصلا أن كل تضاف كل التراجم للجدول الرئيسd men_h بحيث يكون اسم الرجل في هذا الجدول هو أشمل اسم له ويتم البحث في هذا الجدول فقط - منعا للتكرار ولتسريع البحث و . . . - ثم بعد أن نجد الرجل نأخذ معرفه ثم تعرض مواضع تراجم هذا الرجل في الكتب المختلفة اعتمادا على هذا المعرف من جدول men_b أي أن الأسماء في جدول men_b لا يتم البحث فيها بل تفيد فقط في تلوين العبارة في نتائج البحث أما البحث فإنه يكون في الجدول الرئيسي فقط men_h

ولما كان هذا أمرا يتطلب عملا، وضعت جدول men_u يتم البحث في نصوصه وتعرض النتائج مباشرة كحل مؤقت حتى ننقل تراجمه للجدول الرئيسي ونربطها (لأن الجدول الرئيسي عليه قيود عدم التكرار)

</box>

جدول الرواة في التهذيبين

من الشاملة المفرغة هناك ملف اسمه special.mdb

mdb-export -I special.mdb auth
INSERT INTO rowa (id, CODE, name, TABAQA, WHO, AQUAL, ROTBA, R_ZAHBI, sheok, telmez, birth, death, IsoName) VALUES 
(1,"1","أحمد بن إبراهيم بن خالد الموصلى ، أبو على ( نزيل بغداد )"
," O ",
" د فق "
,"و مئتين . زاد موسى : ليلة السبت لثمان مضين من ربيع الأول .
# و روى له ابن ماجة فى التفسير . اهـ . #
 ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ # E1 / 9 : # ذكره ابن حبان فى الثقات . # و قال إبراهيم بن الجنيد ، عن ابن معين : ثقة صدوق . اهـ . # ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ ْ "
 ," صدوق "
 ," وثق ",
 " A # # إبراهيم بن سعد بن إبراهيم بن عبد الرحمن بن عوف الزهرى المدنى # إبراهيم بن سليمان أبى إسماعيل المؤدب # إسماعيل بن إبراهيم بن مقسم الأسدى المعروف بابن علية # جعفر بن سليمان الضبعى # حبيب بن حبيب الكوفى أخى حمزة بن حبيب الزيات القارىء # الحكم بن سنان الباهلى القربى # الحكم بن ظهير الفزارى # حماد بن زيد # خلف بن خليفة # سعيد بن عبد الرحمن الجمحى # أبى الأحوص سلام بن سليم الحنفى # أبى المنذر سلام بن سليمان القارىء # سيف بن هارون البرجمى # شريك بن عبد الله النخعى القاضى # صالح بن عمر الواسطى # الصبى بن الأشعث بن سالم السلولى # أبى زبيد عبثر بن القاسم الزبيدى الكوفى # عبد الله بن جعفر بن نجيح المدينى والد على ابن المدينى # عبد الله بن المبارك # عمر بن عبيد الطنافسى # فرج بن فضالة الشامى ( فق ) # محمد بن ثابت العبدى ( د ) # معاوية بن عبد الكريم الثقفى المعروف بالضال # أبى العلاء ناصح بن العلاء # نوح بن قيس الحدانى # أبى عوانة الوضاح بن عبد الله اليشكرى الواسطى # يزيد بن زريع # يوسف بن عطية الصفار البصرى . ",
 " B # # أبو داود ( حديثا واحدا ) # إبراهيم بن عبد الله بن الجنيد الختلى # أحمد بن الحسن بن عبد الجبار الصوفى الكبير # أبو يعلى أحمد بن على بن المثنى الموصلى # أبو العباس أحمد بن محمد بن خالد البراثى # أحمد بن محمد بن عبد العزيز بن الجعد الوشاء # أحمد بن محمد بن المستلم # جعفر بن محمد بن قتيبة الأنصارى الكوفى # الحسن بن على بن شبيب المعمرى # حماد بن المؤمل الضرير # عبد الله بن أحمد بن محمد بن حنبل # أبو القاسم عبد الله بن محمد بن عبد العزيز البغوى # أبو بكر عبد الله بن محمد بن عبيد بن سفيان القرشى المعروف بابن أبى الدنيا # صاحب المصنفات المشهورة ( فق ) # أبو زرعة عبيد الله بن عبد الكريم الرازى الحافظ # عمر بن شبة بن عبيدة النميرى # الفضل بن هارون البغدادى صاحب أبى ثور الكلبى # أبو جعفر محمد بن عبد الله بن سليمان الحضرمى الكوفى الحافظ المعروف بمطين # أبو أحمد محمد بن عبدوس بن كامل السراج # محمد بن غالب بن حرب الضبى تمتام # محمد بن واصل المقرىء # موسى بن إسحاق بن موسى الأنصارى القاضى # موسى بن هارون بن عبد الله الحمال # ( و كتب عنه : ) # أحمد بن حنبل # يحيى بن معين . ",
 NULL,
 " 236 هـ "," احمد بن ابراهيم بن خالد الموصلي ابو علي نزيل بغداد  ")

معلومات المؤلفين

من الشاملة المفرغة هناك ملف اسمه special.mdb

mdb-export -I special.mdb auth
 
INSERT INTO auth (authid, auth, inf, Lng, HigriD, AD, oVer, oNum, seal) VALUES (3,"ابن كثير","ابن كثير القرشي (700 - 774هـ).
 
عماد الدين أبو الفداء إسماعيل بن عمرو البصري ثم الدمشقي صاحب التفسير المشهور والمعروف بتفسير ابن كثير. ولد بالبصرة، ثم رحل إلى دمشق مع أخيه سنة 706هـ بعد وفاة أبيه. سمع من علماء دمشق وأخذ عنهم مثل الآمدي وابن تيمية الذي كانت تربطه به علاقة خاصة تعرض ابن كثير للأذى بسببها.
كان ابن كثير من بيت علم وأدب، وتتلمذ على كبار علماء عصره، فنشأ عالمًا محققًا ثقة متقنًا، وكان غزير العلم واسع الاطلاع إمامًا في التفسير والحديث والتاريخ، ترك مؤلفات كثيرة قيمة أبرزها البداية والنهاية في التاريخ وكتاب تفسير القرآن العظيم، وهو من أفضل كتب التفسير لما امتاز به من عناية بالمأثور وتجنب للأقوال الباطلة والروايات المنكرة.
توفي ابن كثير بعد أن كُفَّ بصره، ودفن في دمشق.
نقلا عن
الموسوعة العربية العالمية Global Arabic Encyclopedia
http://www.mawsoah.net","أبو الفداء إسماعيل بن عمر بن كثير القرشي الدمشقي","774",774,NULL,NULL,NULL)

نقاش

أدخل تعليقك:
241 +12 = ?
 
thawab-pri/shamela-importing.txt · آخر تعديل: 2015/04/23 00:21 (تحرير خارجي)