بسم الله والصلاة والسلام على رسول الله.
اللهم إنا نسألك العفو والعافية في الدنيا والآخرة.
مقدمة
منذ حوالي عام، مَنَّ الله عَليّ بالتطوع في مشروع ’’الرصائف‘‘ مبرمجاً للموقع.
ما الرصائف؟
الرصائف الصحاح للتراجم الفصاح هو موقع يُظهر لك الكلمة في سياقها ومقابلها في اللغة الإنجليزية. يتميز هذا المشروع الرائع بانتقاء الكتب الفصيحة للمتقدمين. القائم عليه هو الأخ السعودي الترجمان أحمد الغامدي، مؤلف كتاب العرنجية، بالتعاون مع بعض المتطوعين الكرام، تقبل الله منهم جميعاً. يمكنك مشاهدة الفيديو للتعرف على المبادرة.
التحديات
-
استمرارية عمل المتطوعين
ضمان استمرارية عمل المتطوعين في تنسيق الكتب باستخدام برنامج الـ Word.
-
إظهار نتائج البحث في السياق
القدرة على عرض نتائج البحث ضمن سياقها مع توفير النص المقابل في اللغة الأخرى.
-
خاصية بحث سريعة وشاملة
تقديم خاصية بحث فورية تشمل جميع الكتب، على غرار موقع المكتبة الشاملة.
-
رفع الكتب بسهولة
تمكين رفع الكتاب المرصوف بالكامل في خطوة واحدة، بدلاً من رفعه فقرة بفقرة كما في الطريقة السابقة.
-
تحديد خيارات البحث
إمكانية تخصيص البحث حسب:
- الكتاب
- المصنف
- المؤلف
- اللغة
-
التصفح المتسلسل للنتائج
السماح بتصفح النتائج السابقة واللاحقة ضمن نفس الكتاب.
-
تحليل عمليات البحث
معرفة الكلمات التي بحث عنها زوار الموقع، وعدد مرات البحث عنها، سواءً كانت متوفرة أم غير موجودة في الكتب.
الأدوات المستخدمة
-
Pandoc
لتحويل ملفات الـ Word إلى تنسيق HTML.
-
Jupyter Notebook
لإدراج ملفات HTML، معالجة النصوص وتنقيحها باستخدام مكتبة Pandas، ومن ثم تحويل الناتج إلى تنسيق JSON-ND لرفعه على Elasticsearch.
-
Elasticsearch
للبحث المتقدم في النصوص.
الخطوات:
١- تحويل الملف باستخدام Pandoc
1
|
pandoc akhlaq.docx -t html -o akhlaq.html
|
٢- إدراج المكتبات اللازمة في 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
|
٣- تعيين المتغيرات (Variables) المستخدمة
1
2
3
4
5
|
book_name = 'كتاب الزهد الكبير'
book_language = 'الفرنسية'
book_author = 'أبو بكر البيهقي'
file_no = "1"
book = "zohd"
|
٤- تحويل الـ 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
|
# Define the file path
path = rf'organized/books/{book}/{file_no}.html'
# Parse the HTML file with 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 table rows
data = []
for row in table.find_all("tr")[1:]: # Skip the header row
row_data = [td.get_text(strip=True) for td in row.find_all("td")]
data.append(row_data)
# Convert to a Pandas DataFrame
dataFrame = pd.DataFrame(data=data, columns=header)
|
٥- عمليات التنقيح والتعديل:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# Drop unnecessary columns
df = dataFrame.drop(columns=[0, 2, 4])
# Rename columns
df.rename(columns={3: 'Original', 1: 'Translation'}, inplace=True)
# Define patterns to replace
patterns = [
('\"', '\\\"'), # Escape double quotes
('“', '\\\"'), # Escape left double quotation mark
('”', '\\\"'), # Escape right double quotation mark
(':', '\\\"'), # Escape colon
(r'\]', '\\\"'), # Escape closing square bracket
(r'\[', '\\\"'), # Escape opening square bracket
(r'\n', ' ') # Replace newline with space
]
# Clean both 'Original' and 'Translation' columns
for column in ['Original', 'Translation']:
for pattern, replacement in patterns:
df[column] = df[column].str.replace(pattern, replacement, regex=True)
|