التعامل مع البيانات النصية (Text Data): استخراج الكلمات المفتاحية وتحويل النصوص لتصنيفات
التعامل مع البيانات النصية Text Data: استخراج الكلمات المفتاحية وتحويل النصوص لتصنيفات
تمثل البيانات النصية أحد أكثر أنواع البيانات انتشاراً في البيئات الرقمية الحديثة، بدءاً من تقييمات العملاء ورسائل الدعم الفني، وصولاً إلى التعليقات، الأخبار، ووثائق الأعمال. لكن القيمة الحقيقية لا تكمن في تخزين النص كما هو، بل في تحويله إلى إشارات قابلة للقياس والتحليل والتنبؤ. هنا تظهر أهمية بناء خطوط معالجة نصية تجمع بين التنظيف، الاستخراج، التمثيل العددي، ثم التصنيف الآلي.
في مشاريع البيانات الواقعية، لا يُنظر إلى النص على أنه مجرد محتوى للقراءة، بل كمدخل خام داخل Pipeline تحليلي يبدأ من جمع البيانات، ويمر بعمليات ETL، ثم ينتهي إلى نماذج تصنيف أو محركات بحث أو أنظمة توصية. وإذا كنت قد قرأت مدخل إلى علوم البيانات: كيف تحول الأرقام العشوائية إلى قرارات استراتيجية؟ فستجد أن النصوص تمثل مثالاً ممتازاً على تحويل البيانات غير المهيكلة إلى قرارات عملية.
لماذا تعد معالجة النصوص تحدياً هندسياً وتحليلياً؟
النصوص بطبيعتها غير مهيكلة، وغالباً تحتوي على ضوضاء مثل الرموز، التكرار، اختلاف الصياغة، الكلمات الشائعة، والأخطاء الإملائية. كما أن المعنى قد يتغير حسب السياق، لذلك فإن أي نموذج ضعيف الإعداد قد ينتج تمثيلاً مضللاً للبيانات.
على مستوى هندسة البيانات، يزداد التحدي عندما نتعامل مع ملايين السجلات النصية في منصات التجارة الإلكترونية، أنظمة الشكاوى، أو سجلات المحادثات. هنا لا يكفي استخدام أدوات تحليل تقليدية فقط، بل نحتاج إلى بنية تجمع بين Pandas للعينات الصغيرة وSpark للمعالجة الموزعة.
في الأنظمة واسعة النطاق، يجب فصل طبقة تخزين النصوص الخام عن طبقة السمات المستخرجة. الاحتفاظ بالنص الأصلي داخل مخزن بيانات خام، وتخزين
featuresفي جداول تحليلية منفصلة، يسهّل إعادة التدريب وتحسين النماذج دون إعادة تحميل البيانات الأساسية.
المرحلة الأولى: تنظيف النصوص وتجهيزها للتحليل
قبل استخراج الكلمات المفتاحية أو بناء نموذج تصنيف، يجب تنفيذ خطوات تنظيف دقيقة. هذه المرحلة تشبه ما تناولناه في تنظيف البيانات (Data Cleaning): اكتشاف ومعالجة القيم المفقودة (Missing Values)، لكن بصيغة مخصصة للنصوص.
أهم عمليات المعالجة الأولية
- تحويل الأحرف إلى صيغة موحدة مثل الأحرف الصغيرة.
- إزالة علامات الترقيم والروابط والرموز غير المهمة.
- حذف الكلمات الشائعة عديمة القيمة التحليلية.
- تجزئة النص إلى كلمات عبر
tokenization. - تطبيق الاختزال أو الإرجاع للجذر عبر
stemmingأوlemmatization.
وعندما تكون البيانات مستخرجة من ملفات متعددة، يفيدك الرجوع إلى مكتبة Pandas (1): قراءة واستدعاء البيانات من ملفات CSV و Excel برمجياً ومكتبة Pandas (2): استكشاف هيكل البيانات وفهم DataFrame و Series لفهم بنية الجداول قبل البدء بتنظيف الحقول النصية.
import pandas as pd
import re
data = pd.DataFrame({
"text": [
"I love this product! Fast delivery and great quality.",
"Terrible support, order arrived late and damaged.",
"Excellent service and amazing packaging."
]
})
def clean_text(text):
text = text.lower()
text = re.sub(r"http\\S+|www\\S+", "", text)
text = re.sub(r"[^a-zA-Z\\s]", "", text)
text = re.sub(r"\\s+", " ", text).strip()
return text
data["clean_text"] = data["text"].apply(clean_text)
print(data)
استخراج الكلمات المفتاحية من النصوص
استخراج الكلمات المفتاحية هو عملية تحديد المفردات أو العبارات الأكثر تعبيراً عن مضمون النص. الهدف ليس فقط معرفة الكلمات المتكررة، بل قياس الأهمية النسبية لكل كلمة داخل وثيقة مقارنة ببقية الوثائق.
الأساليب الشائعة لاستخراج الكلمات المفتاحية
- التكرار المباشر: مناسب للاستكشاف السريع، لكنه يتأثر بالكلمات الشائعة.
TF-IDF: يوازن بين تكرار الكلمة داخل الوثيقة وندرتها عبر كامل المجموعة.n-grams: مفيد لاستخراج العبارات المكونة من كلمتين أو ثلاث.- نماذج دلالية حديثة: مثل تمثيلات
embeddingsالتي تلتقط المعنى والسياق.
عملياً، يبقى TF-IDF من أكثر الأساليب كفاءة كنقطة بداية، لأنه ينتج مصفوفة عددية صالحة مباشرة للاستخدام في نماذج التصنيف. وهذا يرتبط أيضاً بمفهوم هندسة الميزات (Feature Engineering): كيف تستخرج بيانات جديدة من البيانات الحالية؟ حيث نُحوّل الكلمات إلى سمات رقمية قابلة للتعلّم.
from sklearn.feature_extraction.text import TfidfVectorizer
documents = data["clean_text"].tolist()
vectorizer = TfidfVectorizer(stop_words="english", ngram_range=(1, 2), max_features=20)
tfidf_matrix = vectorizer.fit_transform(documents)
feature_names = vectorizer.get_feature_names_out()
scores = tfidf_matrix.toarray()
for i, row in enumerate(scores):
ranked = sorted(zip(feature_names, row), key=lambda x: x[1], reverse=True)
print(f"Document {i+1}:")
print(ranked[:5])
تحويل النصوص إلى تصنيفات قابلة للتنبؤ
بعد تنظيف النص واستخراج السمات، تأتي مرحلة التصنيف. هنا نحول كل نص إلى تمثيل رقمي، ثم ندرب نموذجاً ليتنبأ بالفئة المناسبة مثل: شكوى، مديح، طلب استرجاع، أو استفسار عام. هذا النوع من النماذج يستخدم بكثرة في مراكز الاتصال، تحليلات المشاعر، وأنظمة الفرز التلقائي.
خطوات بناء نموذج تصنيف نصي
- إعداد البيانات النصية والوسوم المستهدفة
labels. - تقسيم البيانات إلى تدريب واختبار.
- تحويل النص إلى تمثيل عددي مثل
TF-IDF. - تدريب نموذج مثل
LogisticRegressionأوNaive Bayes. - تقييم الأداء باستخدام الدقة والاسترجاع و
F1-score.
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
df = pd.DataFrame({
"text": [
"great product and fast shipping",
"bad quality and terrible support",
"excellent packaging and nice service",
"order delayed and item broken",
"happy with the purchase",
"refund requested due to damage"
],
"label": ["positive", "negative", "positive", "negative", "positive", "negative"]
})
X_train, X_test, y_train, y_test = train_test_split(
df["text"], df["label"], test_size=0.3, random_state=42
)
model = Pipeline([
("tfidf", TfidfVectorizer()),
("clf", LogisticRegression(max_iter=1000))
])
model.fit(X_train, y_train)
predictions = model.predict(X_test)
print(classification_report(y_test, predictions))
المعالجة الموزعة للنصوص باستخدام PySpark
عندما يتجاوز حجم البيانات قدرة الذاكرة المحلية، يصبح من الضروري الانتقال إلى المعالجة الموزعة. هنا يظهر دور Apache Spark في تقسيم النصوص على عدة عقد، ثم تطبيق التحويلات والنماذج بطريقة متوازية.
from pyspark.sql import SparkSession
from pyspark.ml.feature import Tokenizer, StopWordsRemover, HashingTF, IDF
from pyspark.ml.classification import LogisticRegression
from pyspark.ml import Pipeline
spark = SparkSession.builder.appName("TextClassification").getOrCreate()
df = spark.createDataFrame([
(0, "great product and fast delivery", 1.0),
(1, "terrible support and broken item", 0.0),
(2, "excellent quality and nice packaging", 1.0),
(3, "late shipment and damaged order", 0.0)
], ["id", "text", "label"])
tokenizer = Tokenizer(inputCol="text", outputCol="words")
remover = StopWordsRemover(inputCol="words", outputCol="filtered")
hashing_tf = HashingTF(inputCol="filtered", outputCol="rawFeatures", numFeatures=1000)
idf = IDF(inputCol="rawFeatures", outputCol="features")
lr = LogisticRegression(featuresCol="features", labelCol="label")
pipeline = Pipeline(stages=[tokenizer, remover, hashing_tf, idf, lr])
model = pipeline.fit(df)
predictions = model.transform(df)
predictions.select("id", "text", "prediction").show()
في بيئات
Big Data، يفضل استخدام تمثيلات مثلHashingTFلتقليل كلفة بناء القاموس الكامل، خصوصاً عندما تكون المفردات ضخمة ومتغيرة باستمرار. كما أن تقسيم مراحل التنظيف والتصنيف إلى وظائف مستقلة داخلETL Pipelineيسهل المراقبة والتوسع.
دور SQL في تجهيز النصوص قبل النمذجة
رغم أن النمذجة تتم غالباً في بايثون، فإن كثيراً من مراحل التصفية والتجميع تبدأ داخل قواعد البيانات. ويمكن استخدام الاستعلامات لتجهيز عينات نظيفة، حذف السجلات الفارغة، وتجميع النصوص حسب المصدر أو التاريخ، خاصة إذا كانت الجداول ضخمة وموزعة.
query = """
SELECT customer_id,
review_text,
review_category,
created_at
FROM customer_reviews
WHERE review_text IS NOT NULL
AND LENGTH(TRIM(review_text)) > 20
AND created_at >= '2024-01-01'
"""
print(query)
كما أن مفاهيم مثل الفلترة المتقدمة (Filtering & Sorting): استخراج رؤى دقيقة من ملايين السجلات والتجميع والتلخيص (Groupby & Aggregation): إنشاء تقارير إحصائية برمجية تصبح ضرورية لتحديد أكثر المصادر إنتاجاً للنصوص، وأكثر الفئات تكراراً، قبل تدريب أي نموذج.
حالات استخدام واقعية
- تصنيف رسائل الدعم الفني إلى شكاوى، استفسارات، أو طلبات تصعيد.
- استخراج الكلمات المفتاحية من تقييمات العملاء لفهم أسباب الرضا أو الاستياء.
- تحليل المحتوى الإخباري لتوزيعه حسب الموضوعات.
- بناء أنظمة مراقبة للجودة لاكتشاف النصوص الحساسة أو المخالفة للسياسات.
هذه التطبيقات لا تمنح المؤسسات رؤية أفضل فقط، بل تختصر وقت التشغيل وتقلل التدخل اليدوي، خاصة عندما تكون النصوص متدفقة من واجهات متعددة وبأحجام كبيرة.
خاتمة
التعامل مع Text Data لم يعد مجالاً جانبياً في علم البيانات، بل أصبح محوراً أساسياً في التحليلات الحديثة وبناء الأنظمة الذكية. تبدأ الرحلة بتنظيف النصوص، ثم استخراج الكلمات المفتاحية، وبعدها تحويل المحتوى إلى تمثيل رقمي يسمح ببناء نماذج تصنيف فعالة وقابلة للتوسع.
وكلما كانت معمارية البيانات أوضح، وخطوط المعالجة أفضل تنظيماً، كانت النتائج أكثر موثوقية وأقرب للاستخدام الفعلي في الأعمال. لذلك فإن النجاح في هذا المجال لا يعتمد فقط على اختيار نموذج جيد، بل على جودة الإعداد، بنية Pipeline، وكفاءة تحويل النص الخام إلى معرفة قابلة للقرار.