معالجة النصوص باستخدام بايثون Python: العمليات الأساسية

Text Analysis with Python
2- معالجة النصوص باستخدام بايثون Python: العمليات الأساسية

في العصر الإلكتروني وفي عصر الانفجار المعلوماتي، حيث يزخر الانترنت بما يزيد عن الـ 1.2 مليون تيرابايت (terabyte) من البيانات تحوي ضمنها آلاف وآلاف من النصوص، وإن كانت لا إحصاءات دقيقة تشير إلى حجم هذه النصوص ضمن هذا الكم الهائل من البيانات إلا أنه بإمكاننا التصور بأن النصوص تشكل جزءً كبيرًا منها، فمع 1.5 مليار موقع على الانترنت، ومع انتشار خدمات التواصل الاجتماعي حيث صرح تويتر على سبيل المثال عن 6000 تغريدة في الثانية كل يوم في 2019! بمعرفة هذا كله لا يسعنا سوى التساؤل عما تخفيه هذه النصوص من أسرار؟وإذ أنه لا سبيل لنا كبشر لقراءتها وتحليلها كلها فلا بد لنا أن نلجأ إلى الذكاء الاصطناعي ليساعدنا في هذه المشكلة.
في هذا المقال والمقالات التالية له سنستعرض واحدة من أحدث المفاهيم في مجال معالجة النصوص واستخلاص المعلومات منها وسنستعين بلغة البرمجة بايثون للتطبيق، ولكننا سنبدأ في هذا المقال مع مناقشة العمليات الأساسية التي بإمكاننا تطبيقها على النص والتي يتوجب علينا تطبيقها فيما يسبق معالجته بأي خوارزمية كانت، مسبوقةً بتعريف وتوضيح لما نعنيه حين نقول معالجة النصوص (text analysis).

ما هي معالجة النصوص (Text Analysis) ؟

معالجة النصوص هي فرع من فروع معالجة اللغات الطبيعية (Natural Language Processing NLP) ويُعنى هذا الفرع بمعالجة اللغة المكتوبة بالذات. يشار إليها كذلك بتنقيب النصوص (Text Mining)، حيث تتمحور عمليات هذا الفرع من معالجة اللغات الطبيعية على أخذ النص الخام وتحويله إلى شكلٍ يمكن للحاسب فهمه واستخلاص معلومات منه كبنى منطقية أو بيانات مهيكلة.

أو يمكن القول بأنها: عملية استخلاص معلومات غير معروفة مسبقًا من قبل الحاسب الآلي، من خلال استخلاص المعلومات آليًا من عدة مصادر مكتوبة.
تتشابه تقنيات معالجة النصوص (تنقيب النصوص) في الهدف النهائي مع استخلاص المعلومات إلا أن استخلاص المعلومات غير محصور فقط باستخلاصها من النص المكتوب؛ إذ يمكن استخلاص المعلومات من الصور والصوت وقواعد البيانات المهيكلة … إلخ.

تحت مسمى معالجة النصوص تقع العديد من الخوارزميات التي تتنوع في آلية عملها ما بين خوارزميات إحصائية، تعلم عميق وخوارزميات لغوية.

عمليات معالجة النصوص:

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

  1. استرجاع المعلومات (Information retrieval IR): حيث يتم استخدام تقنيات معالجة النصوص للبحث والوصول إلى بيانات مكتوبة (كلمات أو عبارات أو ما شابه معانيها)، من ديوان نصّي ما (corpus) على الانترنت أو في دواوين شخصية.
  2. التعرف على الأعلام (Named entity recognition NER): وهي عملية التعرف على الأسماء الأعلام للأشخاص والأماكن والمؤسسات … ، واستخلاصها.
  3. الإحالة المشتركة (Coreference): وهي عملية التعرف على الكلمات والضمائر التي تشير إلى نفس الكينونة.
  4. عنقدة النصوص (Document clustering): حيث يتم التعرف على النصوص المتشابهة وتجميعها معًا.
  5. تحليل الآراء (Sentiment analysis): حيث يهدف هذا التحليل لتحديد المعاني الكامنة في النص (وليس الحقائق)، كاستكشاف المشاعر والتوجه في النص (إيجابي، سلبي أو مهين).

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

تطبيقات معالجة النصوص:

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

  1. التطبيقات الطبية الحيوية (Biomedical): حيث تم الاستفادة من خوارزميات معالجة النصوص في هذه المجالات لاستخلاص أنماط الأعراض من بيانات المرضى، وكذلك من سلاسل الأحماض النووية، ومن بين هذه الخوارزميات خوارزميات نمذجة المواضيع Topic Modeling التي سنناقشها في المقالات القادمة بشيءٍ من الاستفاضة.
  2. تطبيقات تسويقية: حيث يستفاد من تقنيات معالجة النصوص في التعرف على طبيعة علاقة الشركات بعملائهم، و آرائهم وانطباعاتهم حول منتجات وخدمات الشركات.
  3. علم الاجتماع الحسابي (computational sociology): حيث يتم الاستعانة بتقنيات تجميع النصوص والترجمة الآلية والتعلم العميق لتحليل النصوص الهائلة المتوافرة على الإنترنت ومن عدة لغات من قبل علماء الاجتماع للبحث والاستكشاف.

مكتبات معالجة اللغات الطبيعية في بايثون Python:

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

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

مجموعة أدوات اللغات الطبيعية Natural Language Toolkit (NLTK):

وهي مكتبة مجانية مفتوحة المصدر، تتضمن المهام الأساسية في معالجة اللغات الطبيعية والنصوص من الحصول على الوحدات اللغوية (Tokenization) إلى التجذيع (stemming) وصولاً التنبؤ بأقسام الكلام (Part of Speech tagging) الاستنتاج الدلالي (semantic reasoning) وغيرها العديد من المهام اللغوية.

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

المكتبة كذلك تتميز بدعمها لعدة لغات تتنوع بحسب المهمة المطلوبة إذ بعض اللغات مدعومة لبعض المهام وغير مدعومة للبعض الآخر، واللغة العربية من ضمن اللغات المتواجدة في قائمة الدعم لبعض المهام التي سنستعرضها لاحقًا في هذا المقال.

التثبيت:

pip install --user -U nltk

* وتطلب المكتبة توافر المكتبة العددية لبايثون numpy، لذا في حال عدم توافرها مسبقًا على الجهاز يجب تثبيتها:

pip install --user -U numpy

يمكن الاطلاع على الموقع الرسمي للمكتبة من هنا، حيث يتوافر توثيق جيد لها.

مكتبة جينسم Gensim:

وهي مكتبة مجانية مفتوحة المصدر كذلك، تتضمن توابع تساعد على تحديد التشابه الدلالي فيما بين النصوص، وتتميز بشكل خاص بفعاليتها العالية مقارنة مع باقي المكتبات المفتوحة في هذا المجال إذ تتحمل معالجة مجمعات نصية بأحجام كبيرة مع إدارة جيدة للذاكرة.
مكتبة جينسم Gensim مبنية على أساس خوارزميات نمذجة فضاء المتجهات (vector space modeling) وخوارزميات نمذجة المواضيع (topic modeling) والتي سنناقشها بتعمق أكبر في المقالات اللاحقة، ولكن للتوضيح باختصار فإن كلا النموذجين من الخوارزميات يعتمد مبدأ التعلم بلا إشراف لتحديد التشابه الدلالي فيما بين النصوص وذلك وفق خوارزميات إحصائية.

التثبيت:

pip install -U gensim

* هذه المكتبة كذلك تتطلب توافر المكتبة العددية لبايثون numpy.

يمكن الاطلاع على الموقع الرسمي للمكتبة من هنا، حيث يتوافر توثيق جيد لها.

المعالجة الأولية النصوص

مهما كانت المهمة أو المعلومة التي تطمح لاستخلاصها في تطبيقك من الديوان النصّي (corpus) بين يديك، فإنك غالبًا ستحتاج لمعالجة هذا النص أولًا قبل أن تكون قادرًا على تطبيق أي خوارزميةً عليه؛ ذلك أن النص الخام يكون عشوائيًا بلا أي هيكلية مما لا يسمح للخوارزميات بالتعامل معه، أضف إلى هذا الحجم الهائل له؛ لذا فإن المعالجات الأولية التي تتم على النص تهدف إلى التخفيض من حجمه بالتخلص من الضجيج فيه إضافة إلى خلق هيكلية أولية تُمكن الخوارزميات من التعامل معه.

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

استخلاص الوحدات اللغويّة (Tokenization)

هذه العملية وكما يقترح الاسم، تقوم بتقطيع النص الذي يكون مخزنًا ضمن ذاكرة البرنامج كسلسلة نصية واحدة (String) إلى مصفوفة سلاسل (String Array)، بكلمات أبسط يتم تقسيم النص إلى كلمات. الفاصل بين الكلمات في معظم اللغات هو المسافة، لكنه قد يكون في بعض الأحيان أحرفًا أو علامات ترقيم -مثلًا في اللغات الصينية لا يتم الفصل بين الكلمات على الإطلاق-.
في اللغة العربية الفاصل الأساسي ما بين الكلمات هو المسافة، مما يجعل المهمة سهلة، وبالإمكان الاستعانة بصندوق أدوات اللغات لإتمام هذه المهمة:

sentence = "مرحبا من الذكاء الإصطناعي  بالعربية"
tokens = nltk.word_tokenize(sentence)

والنتيجة ستكون بالشكل التالي:

['مرحبا', 'من', 'الذكاء', 'الإصطناعي ', 'بالعربية']

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

إزالة كلمات الوقف (stop words)

كما ذكرنا فإن النص يكون كبيرًا ومليئًا بالمفردات والكلمات العديدة، ومن الطبيعي أنها ليست كلها بذات القيمة، فالكلمات التي تتكرر بشكل كبير ولا تحمل معنى بوجودها وحدها يتم اعتبارها ضجيجًا وكلمات وقفٍ يجب إزالتها، فالحروف والأدوات والضمائر في اللغة العربية، مثل: من، على، أن، هو، هذه… إلخ، تستخدم بكثرة وهي تشكل ضجيجًا في النص ولذا من الأفضل استبعادها، والضجيج غير مقتصر فقط على الحروف والأدوات ففي بعض المجالات بعض الكلمات تتردد بكثرة مما يحولها إلى كلمات وقف في المجال بحد ذاته وإن كانت في مجالٍ آخر فلم يتم اعتبارها كذلك، فإن كان ديوان النص (corpus) الذي تعمل عليه هو عن الأخبار الرياضية مثلاً فإن كلماتٍ كـ: كرة، لاعب ومباراة مثلاً، ستشكل ضجيجًا إذ أنها على الغالب ستظهر في كل خبر.

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

from nltk.corpus import stopwords
stopWords = set(stopwords.words('arabic'))
for w in sentence:
    if w not in stopWords:
        filteredSentences.append(w)

والخرج سيكون بالشكل التالي:

['مرحبا', "الذكاء", 'الإصطناعي ', 'بالعربية']

إنشاء حقيبة الكلمات (bag of words)

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

يمكن الحصول على حقيبة الكلمات بالاستعانة بصندوق أدوات اللغات الطبيعية (NLTK) وكذلك من مكتبة جنسيم (Gensim) وللمثال هذه المرة فلنستخدم الأخيرة:

from gensim.corpora import Dictionary

dictionary = corpora.Dictionary(filteredSentence)
corpus = Dictionary.doc2bow(filteredSentence)

يقوم النموذج (Dictionary) أولاً بإنشاء مصفوفة بكل الكلمات المتمايزة في الجملة، حيث تقابل كل كلمة بدليل، ثم يتم إنشاء حقيبة الكلمات إذ تكون عبارة عن مصفوفة من ثنائيات (pairs) يمثل الحد الأول فيها دليل الكلمة في القاموس (dictionary) أما الحد الثاني فيمثل عدد مرات ظهور هذه الكلمة في الجملة؛ وبالتالي فإننا لجملتنا السابقة سنحصل على الخرج التالي:

[(0, 1), (1, 1), (2,1), (3,1)]

وللاطلاع على كلمات القاموس:

print(dictionary.token2id)

والخرج سيكون بالشكل التالي:

{'مرحبا': 0, 'الذكاء': 1, ‘الإصطناعي ’: 2, ‘بالعربية’: 3}

الخاتمة

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

المراجع

  1. https://www.sciencefocus.com/future-technology/how-much-data-is-on-the-internet/
  2. https://www.internetlivestats.com/total-number-of-websites/https://www.dsayce.com/social-media/tweets-day/
  3. http://people.ischool.berkeley.edu/~hearst/text-mining.html
  4. https://web.archive.org/web/20091129171151/
  5. http://intelligent-enterprise.informationweek.com/blog/archives/2007/02/defining_text_a.html
  6. https://vb.ckfu.org/attachments/e4/333703d1525690559-%C7%E1%D1%CC%C7%C1-%C7%E1%E3%D3%C7%DA%CF%E5-%E1%DB%E6%ED%C7%CA-%E3%E44%C7%E1%EC14-%E3%E6%CA%D4%ED.pdf
  7. https://sunscrapers.com/blog/8-best-python-natural-language-processing-nlp-libraries/
  8. https://github.com/RaRe-Technologies/gensim
0 Shares:
6 تعليقات
اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

You May Also Like