مجلة المعلوماتية مجلة المعلوماتية
المعرفة • البحث • التقنيةأعداد متاحة للقراءة الإلكترونية

ChronoNLP: استكشاف المدونات النصية وتحليل تغيرها عبر الزمن

العددالعدد 84
تاريخ النشر
عدد القراءات1
اقتباس

الملخص:

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

الكلمات المفتاحية: ChronoNLP، معالجة اللغة الطبيعية، المدونات النصية، التحليل الزمني، نمذجة الموضوعات

مقدمة:

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

خلفية

ChronoNLP تطبيق تفاعلي مكتوب ببايثون، أنشأه الكاتب لتمكين المستخدم من ترشيح المواد النصية الزمنية والبحث فيها واستكشافها وتصويرها. ونشأ من اهتمامه بـ«القراءة البعيدة»، أي التعامل مع النص بوصفه بيانات، واستخدام الحوسبة وأدوات التحليل لكشف أنماط واتجاهات وخصائص قد لا تظهر بسهولة في القراءة الأدبية التقليدية. ورغم وجود أدوات مفتوحة جيدة لمعالجة اللغة [2]، يقدم ChronoNLP بديلًا لاستكشاف النصوص التي يضيف الزمن إلى فهمها. ويتيح واجهة رسومية لاستكشاف جوانب النص باستخدام مكتبات تحليل قوية وشائعة، دون معرفة بالبرمجة أو سطر الأوامر.

يُنشر الموقع بواسطة Streamlit ، وهي مكتبة بايثون مفتوحة المصدر تبسط إنشاء تطبيقات الويب التفاعلية لعلم البيانات والتعلم الآلي [3]. وتتكامل مع أي مكتبة مبنية على بايثون، ومنها مكتبات معالجة اللغة المستخدمة هنا. ويسمح كل من المعالجة والعرض الآنيين باستكشاف البيانات وتصويرها تفاعليًا في واجهة رسومية سهلة. كما تتيح Streamlit Community Cloud نشر تطبيقات الويب من GitHub مجانًا، وانعكاس تحديثات الشيفرة تلقائيًا على الواجهة.

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

البيانات: مجموعات تجريبية

صُمم التطبيق ليتمكن المستخدم من رفع مدونته الخاصة، لكنه يتضمن مجموعات نموذجية لتجريب خصائصه: الأولى مقالات عن كوفيد-19 نشرتها ست صحف إلكترونية في مقاطعة دوغلاس بكانساس بين يناير 2020 ويناير 2022 [4]، والثانية 757 تدوينة من مشروع «تاريخ كتابة السود» في جامعة كانساس بين 2011 و 2021 [5].

رفع بيانات المستخدم

إلى جانب النص، لا يطلب ChronoNLP إلا قدرًا محدودًا من البيانات الوصفية [6]. والعنصر الإلزامي الوحيد هو التاريخ، ويفضل وفق ISO 8601 بصيغة YYYY-MM-DD أو صيغة مشابهة. ويمكن إضافة ثلاثة حقول اختيارية: معرّف فريد لكل مادة، مثل اسم الملف أو URI ؛ وتسمية، مثل العنوان؛ وعمود تجميع يسمى source يختلف بحسب البيانات، مثل المؤلف أو النوع أو الناشر. ويسمح حقل المصدر بالترشيح والتصوير على هذا الأساس، كمقارنة استعمال الكلمات بين المؤلفين، أو تواتر النشر النسبي بحسب المصدر.

يمكن إضافة البيانات في ملف CSV منظم، أو ملف ZIP يضم ملفات نصية منفردة مع CSV للبيانات الوصفية. وعند الرفع يراجع المستخدم البيانات ويطابق أعمدة CSV مع القيم المطلوبة، وتُهمل الأعمدة الزائدة.

المعالجة المسبقة

بعد الاستيعاب والتحقق، يخضع النص الكامل لكل مقال لخطوات تمهد للتحليل. ويُحتفظ أولًا بالنص كما جُمع كاملًا؛ وهو مفيد للبحث عن عبارات قد تختفي في المعالجة، مثل “the CDC”.

يستخدم التطبيق spaCy 3 [7] و TextBlob [8] لإنشاء نسخة منقحة، بحذف علامات الترقيم وكلمات الوقف [9]، وتحويل الوحدات النصية، أي الكلمات المفردة هنا، إلى أحرف صغيرة. ويحلل أقسام الكلام ويتعرف إلى الكيانات المسماة ويستخرج مقاييس وصفية إضافية. وقد تستغرق المعالجة دقائق بحسب الحجم. ويمكن تنزيل البيانات المعالجة لتجاوز هذه الخطوة في الزيارات اللاحقة.

ترشيح البيانات

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

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

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

الوظائف: نظرة عامة على البيانات

تبدأ صفحة Data Overview برسم أعمدة مكدسة يعرض عدد المواد أو الكلمات لكل مصدر عبر الزمن. ويصور الشكل 1 في الأصل عدد مقالات المجموعة الأولى موزعًا بحسب المصدر.

ويظهر ملخص جدولي يتضمن عدد المواد ومتوسط عدد الكلمات وأقصر النصوص وأطولها والنطاق الزمني لكل مصدر، كما في الشكل 2. وتستخدم مكتبة TextDescriptives [10] داخل spaCy لتقييم المقروئية باختبارات معروفة. وفي المثال يُعرض متوسط مقياس Flesch Reading Ease ، الذي يستخدم متوسط طول الجملة بالكلمات ومتوسط طول الكلمة بالمقاطع. وتكون النتيجة بين 0 و 100 ؛ والقيمة الأعلى تعني نصًا أسهل قراءة، والأقل نصًا أصعب.

أقسام الكلام والكيانات المسماة

وسم أقسام الكلام مهمة تصنف الكلمات نحويًا، مثل الاسم والفعل والظرف. والتعرف إلى الكيانات المسماة يستخدم التنبؤ الإحصائي لتحديد كيانات اسمية ورقمية متنوعة ووسمها. ويستخدم ChronoNLP النموذج الافتراضي ومسار المعالجة في spaCy 3 [11]؛ فيقيّم الكلمة ضمن سياقها وموقعها في الجملة ويمنحها الوسوم اللغوية. ويعرض الشكلان 3 و 4 مثالين من المجموعة الثانية، محصورين في التدوينات التي تحتوي كلمة “novel”، لأقسام الكلام والكيانات على التوالي.

تواتر المصطلحات والبحث بالكلمات المفتاحية

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

البحث بالكلمات المفتاحية

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

الجدول 1 ، أمثلة البحث: test يعيد التطابقات التامة للكلمة؛ و test case يعيد العبارة كاملة؛ و test* يجمع في عدّ واحد الكلمات التي تبدأ بـ test ، مثل test و testing ؛ و^*test يعرض عدًّا منفصلًا لكل كلمة تنتهي بـ test ، مثل test و detest. ويمكن الجمع بين test* و^*virus* للحصول على عدّ مجمع للأول وعدّ منفصل لكل كلمة تتضمن virus للثاني.

يعرض التطبيق عدد جميع مصطلحات البحث، وهو مفيد خاصة مع المحارف البديلة. ويعرض الشكل 5 مثالًا للبحث عن test دون محرف بديل و mask* بمحرف بديل في المجموعة الأولى.

ثم يصور النتائج بوسائل عدة: رسم خطي للتكرار الخام عبر الزمن، أو عدّ مطبّع موزون بنسبة المواد في الفترة داخل المجموعة لإظهار التواتر النسبي. وتظهر البيانات لكل مصدر منفردًا وللمجموع مجتمعة، وتُتاح كذلك في جدول قابل للتنزيل بصيغة CSV. ويجمع الشكل 6 العدّ الخام والمطبّع والتوزيع بحسب المصدر للبحث السابق.

وتُعرض الكلمات أيضًا في جدول «الكلمة المفتاحية في سياقها»، مع عدد n من الكلمات يسار النتيجة ويمينها لفهم السياق، كما في الشكل 7. وتحسب جداول أخرى أكثر 20 كلمة تكرارًا مباشرة على اليسار واليمين، وتعرض سحب كلمات لأكثر 200 كلمة تكرارًا، كما في الشكل 8.

وعند البحث عن أكثر من كلمة، يمكن اختيار النتائج المجمعة أو المنفصلة لكل مصطلح. ويوضح الشكل 9 خيارات test و^mask*؛ مع ملاحظة استخدام علامة ^ والنجمة في التعبير الثاني.

الكلمات المفتاحية الآلية

إلى جانب البحث اليدوي، تتيح الواجهة استكشاف كلمات مستخرجة حاسوبيًا. يحدد المستخدم فترة زمنية ومصدرًا أو أكثر، وطول المتتاليات اللفظية n-grams [12] من كلمة إلى ثلاث، وطريقة التحليل. ولتقليل ضجيج الكلمات العامة أو غير الملائمة، يمكن إدخال قائمة استبعاد مخصصة.

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

الأولى تواتر المصطلح، وهي الأبسط، وتستخدم FreqDist من NLTK لتحديد أكثر المتتاليات اللفظية شيوعًا في المقالات المحددة.

والثانية TF-IDF ، أي تواتر المصطلح مضروبًا في معكوس تواتر الوثيقة، وهي طريقة خوارزمية تبرز مصطلحات محتملة الأهمية تقع بوتيرة أقل نسبةً إلى مجموعة النصوص. ويطبقها التطبيق بمكتبة Scikit-Learn على المواد المختارة [13].

والثالثة TopicRank ، ويصفها الأصل بأنها تحليل قائم على الأبعاد يُنفذ داخل spaCy بمكتبة pytextrank ، فيجمع المصطلحات المتشابهة ويقدم عددًا لكل موضوع. ويعرض الجدول 2 في الأصل أمثلة من المجموعة الثانية: أكثر المصطلحات تواترًا بطولي كلمة وكلمتين، ومصطلحات TF-IDF بالطولين، وموضوعات TopicRank وبعض المصطلحات المتصلة بكل منها.

نمذجة الموضوعات

تقيّم نمذجة الموضوعات مجموعة وثائق لاستخراج أنماط وبنى من البيانات النصية وتحديد الموضوعات المتضمنة فيها. ويحلل النموذج الإحصائي الكلمات ويجمعها وفق علاقاتها، ثم يولد لكل موضوع مجموعة كلمات مفتاحية واحتمال ظهور كل كلمة فيه. وتُسند إلى كل وثيقة نسب من الموضوعات مجموعها 100%، فتُمثل الوثائق بحسب موضوعاتها الكامنة.

وتوزيع ديريشليه الكامن LDA طريقة شائعة قُدمت عام 2003 [14]. وهو تعلم غير خاضع للإشراف، فلا يحتاج إلى مجموعة تدريب موسومة يدويًا. ويحلل كلمات الوثائق ضمن إطار احتمالي لعلاقات الكلمات والموضوعات، ويجمعها في عدد محدد من الموضوعات، ثم يمنح كل وثيقة واحدًا أو أكثر بحسب محتواها لكشف بنيتها الموضوعية. ويستخدم ChronoNLP مكتبة Gensim [15] المفتوحة المصدر لتنفيذ LDA على مجموعة فرعية مختارة، مع تحديد عدد الموضوعات.

لاختيار العدد الأنسب، يمكن مراجعة مقياسين: الحيرة Perplexity والاتساق Coherence. تقيس الحيرة قدرة النموذج اللغوي على توقع بيانات لم يرها، وانخفاضها أفضل. لكنها، رغم فائدتها في التعلم الآلي، قد لا تكون الأنسب لنموذج قابل للتفسير البشري. أما الاتساق فيقيس معقولية الموضوعات دلاليًا؛ وارتفاعه يعني موضوعات أوضح وأسهل تفسيرًا، فيناسب أكثر النماذج التي يفحصها الإنسان بصريًا. وبالمقارنة يستطيع المستخدم اختيار عدد من 5 إلى 15 موضوعًا يناسب بياناته. ويعرض الشكل 10 مثالًا لنصوص المجموعة الأولى التي تتضمن community ؛ وتقترح درجات الاتساق أن خمسة أو ستة أو سبعة موضوعات قد تكون مناسبة في ذلك المثال.

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

ويمكن مراجعة تفاصيل كل موضوع. فـ LDA يجمع الكلمات في موضوعات، ويسند إلى الوثيقة أوزانًا بين 0 و 1 مجموعها 1 ، تمثل توزيع موضوعاتها. وتعرض الواجهة أهم عشر كلمات، وسحابة لأهم 200 كلمة لموضوع معين، وعدد النصوص في مجموعته. ويقدم الشكل 12 أمثلة من نموذج الموضوعات السبعة نفسه.

الحدود والعمل المستقبلي

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

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

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

خاتمة:

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

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

إتاحة البيانات

جميع الشيفرات والبيانات الأساسية الموصوفة في المقال متاحة في حساب الكاتب العام على GitHub: https://github.com/ewolfe1/chronoNLP

الحواشي والمراجع كما وردت في الأصل

[1] Wolfe, E. (2023). ChronoNLP. https://chrononlp.streamlit.app/

[2] Some examples of other open NLP tools include: Sinclair, S., & Rockwell, G. (2016). Voyant Tools. http://libvoyant.unm.edu/docs/#!/guide/about; Morgan, E., & Abeysinghe, E., et al. (2019). The Distant Reader – Tool for Reading. PEARC ’19, July 28-August 1, 2019, Chicago, IL, USA. https://doi.org/10.1145/3332186.3333260; Anthony, L. (2013). Developing AntConc for a new generation of corpus linguists. Proceedings of the Corpus Linguistics Conference (CL 2013), July 22-26, 2013. Lancaster University, UK, pp. 14-16. https://www.laurenceanthony.net/research/20130722_26_cl_2013/cl_2013_paper_final.pdf

[3] Streamlit Inc. (2023). Streamlit documentation. [accessed June 15, 2023] https://docs.streamlit.io/

[4] A collection of 3,753 news articles from six online publications in Douglas County, Kansas published between January 28, 2020 and January 31, 2022. Articles were collected from the public web sites of three city publications (The Lawrence Journal-World, The Lawrence Times, and The Eudora Times) and three student university publications (The University Daily Kansan, The Baker Orange, and The Indian Leader). Articles were identified as part of a University of Kansas Libraries web archiving project identifying online content relating to COVID-19.

[5] A collection of 757 posts from the blog of the History of Black Writing (HBW) project at the University of Kansas, published between 2011 and 2021. Learn more about the HBW at https://hbw.ku.edu/.

[6] Documentation for the user on data preparation is included on the site: https://chrononlp.streamlit.app/Upload_dataset

[7] Honnibal, M., Montani, I., Van Landeghem, S., & Boyd, A. (2020). spaCy: Industrial-strength Natural Language Processing in Python. http://doi.org/10.5281/zenodo.1212303

[8] Loriah, S. (2023). TextBlob: Simplified Text Processing. https://textblob.readthedocs.io/en/dev/

[9] Stopwords are very common words that generally do not contribute to the understanding of the text, such as “a”, “the”, “would”, etc. It is a common practice in NLP tasks to remove stopwords and punctuation as part of the pre-processing of the texts to help reduce noise in the results.

[10] Hansen, L., & Enevoldsen, K. (2023). TextDescriptives: A Python package for calculating a large variety of statistics from text. arXiv preprint arXiv:2301.02057.

[11] spaCy provides four English language pre-trained pipelines (simply, a sequence of processing steps or algorithms that can be applied to text data) for performing basic NLP tasks. Each of these varies in size, processing speed, required computational resources, and suitability for a given NLP action. ChronoNLP uses the smallest of these four, “en_core_web_sm”, as it is the fastest model and well-suited for the available Streamlit resources, and it performs as well as the other larger models for the basic tasks of ChronoNLP, such as POS and NER identification. More information about the models and their functionality is available in spaCy’s documentation: https://spacy.io/models and https://spacy.io/models/en/.

[12] N-grams are simply a sequence of n words. The use of n-grams is very common in many NLP tasks. C.f. https://machinelearningknowledge.ai/generating-unigram-bigram-trigram-and-ngrams-in-nltk/

[13] Pedregosa, F., Varoquaux, G., Gramfort, A., et al. (2011). Scikit-learn: Machine Learning in Python. Journal of Machine Learning Research, 12, 2825-2830..

[14] C.f. Kapadia, S. (2019). Evaluate Topic Models: Latent Dirichlet Allocation (LDA). Towards Data Science. https://towardsdatascience.com/evaluate-topic-model-in-python-latent-dirichlet-allocation-lda-7d57484bb5d0

[15] Rehurek, R., & Sojka, P. (2010, May 22). Software Framework for Topic Modelling with Large Corpora. In Proceedings of the LREC 2010 Workshop on New Challenges for NLP Frameworks (pp. 45-50). Valletta, Malta: ELRA. http://doi.org/10.13140/2.1.2393.1847. See also https://radimrehurek.com/gensim/

المراجع:

https://github.com/ewolfe1/chronoNLP

https://chrononlp.streamlit.app/

http://libvoyant.unm.edu/docs/%23!/guide/about

https://doi.org/10.1145/3332186.3333260

https://www.laurenceanthony.net/research/20130722_26_cl_2013/cl_2013_paper_final.pdf

https://docs.streamlit.io/

https://hbw.ku.edu/

https://chrononlp.streamlit.app/Upload_dataset

http://doi.org/10.5281/zenodo.1212303

https://textblob.readthedocs.io/en/dev/

https://spacy.io/models

https://spacy.io/models/en/

https://machinelearningknowledge.ai/generating-unigram-bigram-trigram-and-ngrams-in-nltk/

https://towardsdatascience.com/evaluate-topic-model-in-python-latent-dirichlet-allocation-lda-7d57484bb5d0

http://doi.org/10.13140/2.1.2393.1847

https://radimrehurek.com/gensim/

اقتبس هذا المقال

إيرين وولف (2023). «ChronoNLP: استكشاف المدونات النصية وتحليل تغيرها عبر الزمن». مجلة المعلوماتية، العدد 84. https://informaticsjournal.net/?p=50596

مشاركة:

مقالات ذات صلة