الرَّصَائِفُ (لِمَاذَا وَكَيْفَ؟) | اللُّــغَــوِيّــــ
اللَّهُمَّ ارْفَعِ البَلَاءَ عَنْ غَزَّةَ 🇵🇸 🤲🏻

اللُّــغَــوِيّــــ X Account




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

المقدمة

قبل حوالي عام، منَّ الله عليّ بفرصة التطوع كمطور لمشروع “رصائف”.


ما هو مشروع رصائف؟

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


التحديات

  1. استدامة جهود المتطوعين
    ضمان استمرار المتطوعين في تنسيق الكتب باستخدام برنامج وورد.

  2. عرض نتائج البحث في سياقها
    القدرة على إظهار نتائج البحث ضمن سياقها، مع النص المكافئ باللغة الأخرى.

  3. ميزة بحث شاملة وسريعة
    توفير خاصية البحث الفوري التي تشمل جميع الكتب، على غرار المكتبة الشاملة.

  4. تحميل الكتب بسهولة
    تمكين رفع كتاب منسق بالكامل في خطوة واحدة، بدلاً من رفعه فقرة بفقرة كما كان في السابق.

  5. خيارات بحث مخصصة
    إمكانية تخصيص البحث حسب:

    • الكتاب
    • التصنيف
    • المؤلف
    • اللغة
  6. التنقل بين النتائج المتتالية
    السماح للمستخدمين بالتنقل بين النتائج السابقة والتالية داخل نفس الكتاب.

  7. تحليل بيانات البحث
    تتبع الكلمات التي بحث عنها الزوار، وعدد مرات البحث عنها، وما إذا كانت موجودة في الكتب أم لا.


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

  1. Pandoc
    لتحويل ملفات وورد إلى تنسيق HTML.

  2. Jupyter Notebook
    لمعالجة ملفات HTML، وتنقية النصوص باستخدام مكتبة Pandas، ثم تحويل المخرجات إلى JSON-ND لاستخدامها في Elasticsearch.

  3. Elasticsearch
    لتوفير إمكانيات البحث النصي المتقدم.


الخطوات

1- استخدام Pandoc لتحويل الملفات:

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

2- إدراج المكتبات الأساسية في Jupyter Notebook:

1
2
3
4
5
6
import os
import sys
import pandas as pd
from bs4 import BeautifulSoup
from pathlib import Path
import io

3- تعريف المتغيرات:

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

4- تحويل HTML إلى CSV ثم تحميله في DataFrame باستخدام Pandas:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# تحديد مسار الملف
path = rf'organized/books/{book}/{file_no}.html'

# تحليل ملف HTML باستخدام BeautifulSoup
with open(path, 'r', encoding='utf-8') as file:
    soup = BeautifulSoup(file, 'html.parser')

# استخراج رؤوس الجداول
try:
    table = soup.find("table")
    header = [th.get_text(strip=True) for th in table.find("tr").find_all("th")]
except AttributeError:
    raise ValueError("لم يتم العثور على الجدول أو العناوين في ملف HTML.")

# استخراج بيانات الصفوف
data = []
for row in table.find_all("tr")[1:]:  # تخطي صف العناوين
    row_data = [td.get_text(strip=True) for td in row.find_all("td")]
    data.append(row_data)

# تحويل البيانات إلى DataFrame في Pandas
dataFrame = pd.DataFrame(data=data, columns=header)

5- عمليات تنظيف البيانات والتعديلات:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# حذف الأعمدة غير الضرورية
df = dataFrame.drop(columns=[0, 2, 4])

# إعادة تسمية الأعمدة
df.rename(columns={3: 'Original', 1: 'Translation'}, inplace=True)

# تعريف الأنماط المطلوب استبدالها
patterns = [
    ('"', '\\"'),  # هروب علامات التنصيص
    ('“', '\\"'),   # هروب علامات الاقتباس اليسارية
    ('”', '\\"'),   # هروب علامات الاقتباس اليمنى
    (':', '\\"'),   # هروب النقطتين
    (r'\]', '\\"'), # هروب القوس المربع الأيمن
    (r'\[', '\\"'), # هروب القوس المربع الأيسر
    (r'\n', ' ')     # استبدال الأسطر الجديدة بمسافة
]

# تنظيف العمودين 'Original' و 'Translation'
for column in ['Original', 'Translation']:
    for pattern, replacement in patterns:
        df[column] = df[column].str.replace(pattern, replacement, regex=True)