بسم الله والصلاة والسلام على رسول الله. اللهم إنا نسألك العفو والعافية في الدنيا والآخرة.


مقدمة

منذ حوالي عام، مَنَّ الله عَليّ بالتطوع في مشروع ’’الرصائف‘‘ مبرمجاً للموقع.


ما الرصائف؟

الرصائف الصحاح للتراجم الفصاح هو موقع يُظهر لك الكلمة في سياقها ومقابلها في اللغة الإنجليزية. يتميز هذا المشروع الرائع بانتقاء الكتب الفصيحة للمتقدمين. القائم عليه هو الأخ السعودي الترجمان أحمد الغامدي، مؤلف كتاب العرنجية، بالتعاون مع بعض المتطوعين الكرام، تقبل الله منهم جميعاً. يمكنك مشاهدة الفيديو للتعرف على المبادرة.


التحديات


  • إمكانية إستمرار عمل المتطوعين في رصف الكتب على برنامج الـ Word.
  • إمكانية إظهار نتائج البحث في سياقها مع إظهار مقابلها في اللغة الأخرى.
  • خاصية بحث سريعة في كل الكتب على غرار موقع المكتبة الشاملة.
  • إمكانية رفع الكتاب المرصوف في خطوة واحدة … حيث كانت الطريقة الأولى هي رفع فقرة بفقرة. أي رصيفة برصيفة.
  • إمكانية تنقيح/تحديد كل من الآتي عند البحث: (الكتاب - المصنف - المؤلف - اللغة)
  • إمكانية تصفح السابق واللاحق لكل نتيجة بحث من نفس الكتاب.
  • معرفة كلمات البحث التي استخدمها زائري الموقع. وعدد مرات البحث عنها. سواءً كانت موجودة أو غير موجودة في الكتب المرفوعة.

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


  • أداة Pandoc لتحويل ملفات الـWord إلى HTML
  • أداة Jupyter Notebook لإدراج ملفات الـHTML ومن ثَمّ معالجة النصوص وتنقيحها باستخدام Pandas. ثُم تحويل الناتج إلى JSON-ND تجهيزاً لرفعه على الأثير على Elasticsearch.
  • أداة Elasticsearch للبحث في النصوص

الخطوات:

١- تحويل الملف باستخدام Pandoc

pandoc akhlaq.docx -t html -o akhlaq.html

٢- إدراج المكتبات اللازمة في Jupyter Notebook

import os
import sys
import pandas as pd
from bs4 import BeautifulSoup
from pathlib import Path
import io

٣- تعيين المتغيرات (Variables) المستخدمة

book_name = 'كتاب الزهد الكبير'
book_language = 'الفرنسية'
book_author = 'أبو بكر البيهقي'
file_no = "1"
book = "zohd"

٤- تحويل الـ HTML إلى CSV ثم إدراجه في Dataframe باستخدام Pandas

path = rf'organized/books/{book}/{file_no}.html'

# empty list
data = []

# for getting the header from
# the HTML file
list_header = []
soup = BeautifulSoup(open(path),'html.parser')
header = soup.find_all("table")[0].find("tr")

for items in header:
    try:
        list_header.append(items.get_text())
    except:
        continue

# for getting the data
HTML_data = soup.find_all("table")[0].find_all("tr")[1:]

for element in HTML_data:
    sub_data = []
    for sub_element in element:
        try:
            sub_data.append(sub_element.get_text())
        except:
            continue
    data.append(sub_data)

# Storing the data into Pandas
# DataFrame
dataFrame = pd.DataFrame(data = data)

٥- عمليات التنقيح والتعديل:

df = dataFrame.drop(columns=[0,2, 4])
df.rename(columns = {3:'Original', 1: 'Translation'}, inplace = True)
df_final['Original']= df_final['Original'].str.replace('\"', '\\\"', regex=True)
df_final['Original']= df_final['Original'].str.replace('“', '\\\"', regex=True)
df_final['Original']= df_final['Original'].str.replace('”', '\\\"', regex=True)
df_final['Original']= df_final['Original'].str.replace(':', '\\\"', regex=True)
df_final['Original']= df_final['Original'].str.replace('\]', '\\\"', regex=True)
df_final['Original']= df_final['Original'].str.replace('\[', '\\\"', regex=True)
df_final['Original']= df_final['Original'].str.replace('\n', ' ', regex=True)
df_final['Translation'] = df_final['Translation'].str.replace('\"', '\\\"', regex=True)
df_final['Translation'] = df_final['Translation'].str.replace('“', '\\\"', regex=True)
df_final['Translation'] = df_final['Translation'].str.replace('”', '\\\"', regex=True)
df_final['Translation'] = df_final['Translation'].str.replace(':', '\\\"', regex=True)
df_final['Translation'] = df_final['Translation'].str.replace('\]', '\\\"', regex=True)
df_final['Translation'] = df_final['Translation'].str.replace('\[', '\\\"', regex=True)
df_final['Translation'] = df_final['Translation'].str.replace('\n', ' ', regex=True)