معالجة اللغة الطبيعية (NLP) — مقدمة في الذكاء الاصطناعي
معالجة اللغة الطبيعية (NLP)
NLP هو فرع من AI يُمكّن الآلات من فهم وتوليد اللغة البشرية.
تطبيقات NLP
- Chatbots - مساعدين افتراضيين
- الترجمة - Google Translate
- تحليل المشاعر - معرفة رأي العملاء
- تلخيص النصوص - تلخيص المقالات
- استخراج المعلومات - من الوثائق
- التعرف على الكلام - Siri, Alexa
خطوات معالجة النص
1. تنظيف النص (Text Cleaning)
import re
def clean_text(text):
# تحويل لأحرف صغيرة
text = text.lower()
# إزالة HTML
text = re.sub(r'<[^>]+>', '', text)
# إزالة الروابط
text = re.sub(r'http\S+', '', text)
# إزالة الأرقام
text = re.sub(r'\d+', '', text)
# إزالة الرموز الخاصة
text = re.sub(r'[^\w\s]', '', text)
# إزالة المسافات الزائدة
text = ' '.join(text.split())
return text2. Tokenization (التقسيم)
from nltk.tokenize import word_tokenize, sent_tokenize
text = "مرحباً بالعالم. هذا درس NLP."
# تقسيم لجمل
sentences = sent_tokenize(text)
# ['مرحباً بالعالم.', 'هذا درس NLP.']
# تقسيم لكلمات
words = word_tokenize(text)
# ['مرحباً', 'بالعالم', '.', 'هذا', 'درس', 'NLP', '.']3. إزالة Stop Words
from nltk.corpus import stopwords
stop_words = set(stopwords.words('arabic'))
# {'من', 'في', 'على', 'إلى', 'هذا', ...}
filtered = [w for w in words if w not in stop_words]4. Stemming و Lemmatization
from nltk.stem import PorterStemmer, WordNetLemmatizer
# Stemming - قطع اللواحق
stemmer = PorterStemmer()
print(stemmer.stem("running")) # run
print(stemmer.stem("better")) # better (خطأ!)
# Lemmatization - الجذر الصحيح (أفضل)
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize("better", pos='a')) # good
print(lemmatizer.lemmatize("running", pos='v')) # run5. تحويل النص لأرقام (Vectorization)
from sklearn.feature_extraction.text import (
CountVectorizer,
TfidfVectorizer
)
texts = ["أحب البرمجة", "البرمجة ممتعة"]
# Bag of Words
count_vec = CountVectorizer()
bow = count_vec.fit_transform(texts)
# TF-IDF (أفضل)
tfidf_vec = TfidfVectorizer()
tfidf = tfidf_vec.fit_transform(texts)مشروع: تحليل المشاعر
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report
# البيانات
data = pd.DataFrame({
'text': [
'هذا المنتج رائع جداً',
'خدمة سيئة للغاية',
'أنصح بالشراء',
'لن أشتري مرة أخرى',
'جودة عالية',
'مضيعة للمال'
],
'sentiment': [1, 0, 1, 0, 1, 0] # 1=إيجابي، 0=سلبي
})
# التقسيم
X_train, X_test, y_train, y_test = train_test_split(
data['text'], data['sentiment'], test_size=0.2
)
# TF-IDF
vectorizer = TfidfVectorizer()
X_train_vec = vectorizer.fit_transform(X_train)
X_test_vec = vectorizer.transform(X_test)
# التدريب
model = MultinomialNB()
model.fit(X_train_vec, y_train)
# التقييم
predictions = model.predict(X_test_vec)
print(classification_report(y_test, predictions))
# تجربة نص جديد
new_text = ["منتج ممتاز"]
new_vec = vectorizer.transform(new_text)
print(model.predict(new_vec)) # [1] = إيجابيWord Embeddings
Word2Vec
from gensim.models import Word2Vec
# تدريب النموذج
sentences = [["مرحباً", "بالعالم"], ["تعلم", "الآلة"]]
model = Word2Vec(sentences, vector_size=100, min_count=1)
# الحصول على vector
vector = model.wv["مرحباً"]
# الكلمات المشابهة
similar = model.wv.most_similar("تعلم")استخدام Transformers (الأحدث)
from transformers import pipeline
# تحليل المشاعر
sentiment = pipeline("sentiment-analysis")
result = sentiment("I love this product!")
# [{'label': 'POSITIVE', 'score': 0.99}]
# الإجابة على الأسئلة
qa = pipeline("question-answering")
result = qa(
question="What is AI?",
context="AI is artificial intelligence..."
)
# توليد النصوص
generator = pipeline("text-generation")
result = generator("Once upon a time")# مشروع: تصنيف الأخبار
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score
# تحميل البيانات
categories = ['sci.med', 'sci.space', 'rec.sport.hockey']
train = fetch_20newsgroups(subset='train', categories=categories)
test = fetch_20newsgroups(subset='test', categories=categories)
# بناء Pipeline
pipeline = Pipeline([
('tfidf', TfidfVectorizer(stop_words='english')),
('clf', MultinomialNB())
])
# التدريب
pipeline.fit(train.data, train.target)
# التقييم
predictions = pipeline.predict(test.data)
accuracy = accuracy_score(test.target, predictions)
print(f"الدقة: {accuracy:.2%}")
# تجربة
new_text = ["NASA launched a new rocket to Mars"]
category = pipeline.predict(new_text)
print(f"الفئة: {train.target_names[category[0]]}")اختبر فهمك