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

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

المقدمة

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


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

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


التحديات

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

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

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

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

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

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

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


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

  1. Pandoc
    لتحويل ملفات Word إلى صيغة HTML.

  2. Jupyter Notebook
    لمعالجة ملفات HTML، وتنظيف النصوص باستخدام مكتبة Pandas، وتصدير النتائج بصيغة JSON-ND لاستخدامها في Elasticsearch.

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


الخطوات

  1. استخدام Pandoc لتحويل الملف:
pandoc akhlaq.docx -t html -o akhlaq.html
  1. استيراد المكتبات اللازمة في Jupyter Notebook:
import os
import sys
import pandas as pd
from bs4 import BeautifulSoup
from pathlib import Path
import io
  1. تعريف المتغيرات:
book_name = 'Kitab al-Zuhd al-Kabir'
book_language = 'French'
book_author = 'Abu Bakr al-Bayhaqi'
file_no = "1"
book = "zohd"
  1. تحويل HTML إلى CSV وتحميله في DataFrame من Pandas:
# Define file path
path = rf'organized/books/{book}/{file_no}.html'

# Parse the HTML using BeautifulSoup
with open(path, 'r', encoding='utf-8') as file:
    soup = BeautifulSoup(file, 'html.parser')

# Extract table headers
try:
    table = soup.find("table")
    header = [th.get_text(strip=True) for th in table.find("tr").find_all("th")]
except AttributeError:
    raise ValueError("Table or headers not found in the HTML file.")

# Extract row data
data = []
for row in table.find_all("tr")[1:]:  # Skip header row
    row_data = [td.get_text(strip=True) for td in row.find_all("td")]
    data.append(row_data)

# Convert to Pandas DataFrame
dataFrame = pd.DataFrame(data=data, columns=header)
  1. تنظيف وتعديل البيانات:
# Drop unnecessary columns
df = dataFrame.drop(columns=[0, 2, 4])

# Rename columns
df.rename(columns={3: 'Original', 1: 'Translation'}, inplace=True)

# Define patterns to escape or replace
patterns = [
    ('"', '\\"'),      # Escape double quotes
    ('“', '\\"'),      # Escape left double quote
    ('”', '\\"'),      # Escape right double quote
    (':', '\\"'),      # Escape colon
    (r'\]', '\\"'),    # Escape right square bracket
    (r'\[', '\\"'),    # Escape left square bracket
    (r'\n', ' ')       # Replace newlines with spaces
]

# Apply cleaning to both columns
for column in ['Original', 'Translation']:
    for pattern, replacement in patterns:
        df[column] = df[column].str.replace(pattern, replacement, regex=True)