مقدمة عن SpaCy
SpaCy هي مكتبة متطورة لمعالجة اللغة الطبيعية (NLP)، صُممت خصيصًا للاستخدام الإنتاجي. طورتها شركة Explosion AI، وأصبحت المعيار الفعلي للحلول الصناعية في مجال NLP بفضل أدائها العالي ودقتها وسهولة استخدامها.
المزايا الرئيسية لـ SpaCy
الهندسة والأداء
تم بناء SpaCy باستخدام لغة Cython، مما يمنحها سرعة استثنائية في معالجة النصوص. تستخدم المكتبة خوارزميات وهياكل بيانات محسّنة تتيح معالجة ملايين الرموز في الدقيقة على الأجهزة العادية.
دعم متعدد اللغات
تدعم المكتبة أكثر من 20 لغة، بما في ذلك العربية والإنجليزية والصينية واليابانية والروسية وغيرها. لكل لغة نماذج مدربة مسبقًا ومحسّنة لتناسب خصائصها اللغوية الفريدة.
نماذج جاهزة للاستخدام
توفر SpaCy نماذج مدربة مسبقًا بأحجام مختلفة (صغير، متوسط، كبير)، مما يتيح اختيار التوازن الأمثل بين السرعة والدقة حسب المهمة.
تثبيت وإعداد SpaCy
تثبيت المكتبة الأساسية
pip install spacy
تحميل النماذج اللغوية
للغة الإنجليزية:
python -m spacy download en_core_web_sm
python -m spacy download en_core_web_md
python -m spacy download en_core_web_lg
للغة العربية:
python -m spacy download ar_core_news_sm
python -m spacy download ar_core_news_md
python -m spacy download ar_core_news_lg
الاستيراد والتهيئة
import spacy
# تحميل النموذج
nlp = spacy.load("en_core_web_sm")
# معالجة النص
doc = nlp("Apple is looking at buying a startup in the UK.")
المكونات الأساسية لخط أنابيب SpaCy
التقسيم إلى رموز (Tokenization)
يقوم SpaCy تلقائيًا بتقسيم النص إلى رموز مع مراعاة خصائص اللغة وعلامات الترقيم:
doc = nlp("Don't worry, it's working!")
for token in doc:
print(token.text, token.is_alpha, token.is_punct, token.like_num)
التحليل الصرفي
يحتوي كل رمز على معلومات صرفية غنية:
for token in doc:
print(f"الكلمة: {token.text}")
print(f"الجذر: {token.lemma_}")
print(f"نوع الكلمة: {token.pos_}")
print(f"الوسم: {token.tag_}")
print(f"الخصائص الصرفية: {token.morph}")
التحليل النحوي
يبني SpaCy شجرة تبعية لكل جملة:
for token in doc:
print(f"{token.text} <- {token.dep_} <- {token.head.text}")
print(f"الأبناء: {[child.text for child in token.children]}")
استخراج الجذور والاشتقاق
استخراج الجذور في SpaCy
يوفر SpaCy استخراجًا عالي الجودة للجذور بشكل افتراضي:
doc = nlp("The cats are running and jumping")
for token in doc:
print(f"{token.text} -> {token.lemma_}")
بدائل للاشتقاق
على الرغم من أن SpaCy لا يتضمن الاشتقاق مباشرة، يمكن دمجه مع مكتبات أخرى:
from nltk.stem import PorterStemmer
stemmer = PorterStemmer()
def add_stemming(doc):
for token in doc:
token._.stem = stemmer.stem(token.text)
return doc
# إضافة كخاصية مخصصة
spacy.tokens.Token.set_extension("stem", default=None)
التعرف على أجزاء الكلام
وسوم POS العالمية
يستخدم SpaCy نظامًا عالميًا للوسوم