مقدمة لاستخدام NLTK مع Python

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

يبدو المنطق وراء هذه التكنولوجيا الجذابة معقدًا ولكنه ليس كذلك. وحتى الآن ، مع فهم قوي لبرمجة Python الأساسية ، يمكنك إنشاء معالج كلمات DIY جديد باستخدام مجموعة أدوات اللغة الطبيعية (NLTK).

إليك كيفية بدء استخدام لغة البرمجة اللغوية العصبية (NLTK) في Python.

ما هو NLTK وكيف يعمل؟

يتميز NLTK المكتوب باستخدام Python بمجموعة متنوعة من وظائف معالجة السلاسل. إنها مكتبة لغة طبيعية متعددة الاستخدامات مع مستودع نماذج واسع لتطبيقات اللغات الطبيعية المختلفة.

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

كيفية إعداد NLTK

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

بعد ذلك ، قم بتثبيت مجموعة أدوات اللغة الطبيعية في هذه البيئة باستخدام النقطة :

 pip install nltk

ومع ذلك ، يتميز NLTK بمجموعة متنوعة من مجموعات البيانات التي تعمل كأساس لنماذج اللغة الطبيعية الجديدة. للوصول إليها ، تحتاج إلى تشغيل أداة تنزيل البيانات المدمجة NLTK.

لذلك ، بمجرد تثبيت NLTK بنجاح ، افتح ملف Python الخاص بك باستخدام أي محرر تعليمات برمجية.

ثم قم باستيراد الوحدة النمطية nltk وقم بإنشاء مثيل لبرنامج تنزيل البيانات باستخدام الكود التالي:

 pip install nltk
nltk.download()

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

أي حزمة بيانات تقوم بتنزيلها تنتقل إلى الدليل المحدد المكتوب في حقل دليل التنزيل . يمكنك تغيير هذا إذا أردت. لكن حاول الحفاظ على الموقع الافتراضي عند هذا المستوى.

الموضوعات ذات الصلة: أفضل برامج تحرير الأكواد المجانية لكتابة تطبيقك الأول

ملاحظة: تُلحق حزم البيانات متغيرات النظام افتراضيًا. لذلك ، يمكنك الاستمرار في استخدامها للمشاريع اللاحقة بغض النظر عن بيئة Python التي تستخدمها.

كيفية استخدام الرموز المميزة لـ NLTK

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

فيما يلي مثال على كيفية استخدام NLTK word_tokenizer :

 import nltk
from nltk.tokenize import word_tokenize
word = "This is an example text"
tokenWord = word_tokenizer(word)
print(tokenWord)
Output:
['This', 'is', 'an', 'example', 'text']

يستخدم NLTK أيضًا رمزًا مميزًا للجملة مُدرَّب مسبقًا يسمى PunktSentenceTokenizer . إنه يعمل عن طريق تقسيم فقرة إلى قائمة جمل.

دعونا نرى كيف يعمل هذا مع فقرة من جملتين:

 import nltk
from nltk.tokenize import word_tokenize, PunktSentenceTokenizer
sentence = "This is an example text. This is a tutorial for NLTK"
token = PunktSentenceTokenizer()
tokenized_sentence = token.tokenize(sentence)
print(tokenized_sentence)
Output:
['This is an example text.', 'This is a tutorial for NLTK']

يمكنك إضافة رمز مميز لكل جملة في المصفوفة التي تم إنشاؤها من الكود أعلاه باستخدام word_tokenizer و Python for loop .

أمثلة على كيفية استخدام NLTK

لذلك بينما لا يمكننا إثبات جميع حالات الاستخدام الممكنة لـ NLTK ، إليك بعض الأمثلة عن كيفية البدء في استخدامها لحل مشكلات الحياة الواقعية.

احصل على تعريفات الكلمات وأجزاء الكلام الخاصة بها

يتميز NLTK بنماذج لتحديد أجزاء الكلام ، والحصول على دلالات مفصلة ، والاستخدام السياقي المحتمل للكلمات المختلفة.

يمكنك استخدام نموذج wordnet لتوليد متغيرات للنص. ثم حدد معناها وجزء من الكلام.

على سبيل المثال ، دعنا نتحقق من المتغيرات المحتملة لـ "Monkey:"

 import nltk
from nltk.corpus import wordnet as wn
print(wn.synsets('monkey'))
Output:
[Synset('monkey.n.01'), Synset('imp.n.02'), Synset('tamper.v.01'), Synset('putter.v.02')]

ينتج عن الكود أعلاه بدائل محتملة للكلمات أو صيغ وأجزاء من الكلام لـ "Monkey".

تحقق الآن من معنى "القرد" باستخدام طريقة التعريف :

 Monkey = wn.synset('monkey.n.01').definition()
Output:
any of various long-tailed primates (excluding the prosimians)

يمكنك استبدال السلسلة الموجودة في الأقواس ببدائل أخرى تم إنشاؤها لمعرفة ما هي مخرجات NLTK.

ومع ذلك ، فإن نموذج pos_tag يحدد أجزاء الكلام في الكلمة. يمكنك استخدام هذا مع word_tokenizer أو PunktSentenceTokenizer () إذا كنت تتعامل مع فقرات أطول.

إليك كيف يعمل ذلك:

 import nltk
from nltk.tokenize import word_tokenize, PunktSentenceTokenizer
word = "This is an example text. This is a tutorial on NLTK"
token = PunktSentenceTokenizer()
tokenized_sentence = token.tokenize(word)
for i in tokenized_sentence:
tokenWordArray = word_tokenize(i)
partsOfSpeech = nltk.pos_tag(tokenWordArray)
print(partsOfSpeech)
Output:
[('This', 'DT'), ('is', 'VBZ'), ('an', 'DT'), ('example', 'NN'), ('text', 'NN'), ('.', '.')]
[('This', 'DT'), ('is', 'VBZ'), ('a', 'DT'), ('tutorial', 'JJ'), ('on', 'IN'), ('NLTK', 'NNP')]

يقرن الكود أعلاه كل كلمة مرمزة بعلامة الكلام الخاصة بها في مجموعة. يمكنك التحقق من معنى هذه العلامات على Penn Treebank .

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

 for i in tokenized_sentence:
tokenWordArray = word_tokenize(i.replace('.', ''))
partsOfSpeech = nltk.pos_tag(tokenWordArray)
print(partsOfSpeech)
Cleaner output:
[('This', 'DT'), ('is', 'VBZ'), ('an', 'DT'), ('example', 'NN'), ('text', 'NN')]
[('This', 'DT'), ('is', 'VBZ'), ('a', 'DT'), ('tutorial', 'JJ'), ('on', 'IN'), ('NLTK', 'NNP')]

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

ومع ذلك ، يتزامن NLTK مع matplotlib. يمكنك الاستفادة من هذا لعرض اتجاه معين في بياناتك.

الكود أدناه ، على سبيل المثال ، يقارن مجموعة من الكلمات الإيجابية والسلبية في مخطط التوزيع باستخدام آخر أبجديتين:

 import nltk
from nltk import ConditionalFreqDist
Lists of negative and positive words:
negatives = [
'abnormal', 'abolish', 'abominable',
'abominably', 'abominate','abomination'
]
positives = [
'abound', 'abounds', 'abundance',
'abundant', 'accessable', 'accessible'
]
# Divide the items in each array into labeled tupple pairs
# and combine both arrays:
pos_negData = ([("negative", neg) for neg in negatives]+[("positive", pos) for pos in positives])
# Extract the last two alphabets from from the resulting array:
f = ((pos, i[-2:],) for (pos, i) in pos_negData)
# Create a distribution plot of these alphabets
cfd = ConditionalFreqDist(f)
cfd.plot()

يبدو مخطط التوزيع الأبجدي كما يلي:

بالنظر عن كثب إلى الرسم البياني ، فإن الكلمات التي تنتهي بالحرف ce ، و ds ، و le ، و nd ، و nt لديها احتمالية أكبر لكونها نصوصًا إيجابية. لكن الكلمات التي تنتهي بـ al و ly و on و te هي كلمات سلبية على الأرجح.

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

استمر في استكشاف مجموعة أدوات معالجة اللغة الطبيعية

مع ظهور تقنيات مثل Alexa ، واكتشاف البريد العشوائي ، وروبوتات الدردشة ، وتحليل المشاعر ، وأكثر من ذلك ، يبدو أن معالجة اللغة الطبيعية تتطور إلى مرحلتها غير البشرية. على الرغم من أننا نظرنا فقط في أمثلة قليلة لما تقدمه NLTK في هذه المقالة ، إلا أن الأداة بها تطبيقات أكثر تقدمًا أعلى من نطاق هذا البرنامج التعليمي.

بعد قراءة هذه المقالة ، يجب أن تكون لديك فكرة جيدة عن كيفية استخدام NLTK على المستوى الأساسي. كل ما تبقى لك الآن هو أن تضع هذه المعرفة موضع التنفيذ بنفسك!