پردازش زبان طبیعی در پایتون(بخش اول)
بدلیل گشترش و کاربرد های خیلی زیاد در زمینه پردازش زیان طبیعی اون هم در دو و سه ده اخیر خواستم این مطالب روبا هم به اشتراک بزاریم و همونجور که از عنوان این بخش مشخص هست هدف فقط بررسی پایتون در پردازش زبان طبیعی است.پس سعی نمیکنم بخوام به طور کامل به پردازش زبان و یا یادگیری پایتون بپردازم و لازم به ذکر هست که منبع این بخش کتاب Natural Language Processing with Python نوشته سه عزیز با نام های Steven Bird, Ewan Klein, and Edward Loper و چاپ O’rially هست.
در این بخش بصورت خلاصه به پردازش زبان طبیعی و قابلیت های پایتون میپردازیم و در بخش های بعدی به صورت کامل تفکیک شده به پردازش زبان در پایتون می پردازم.
پردازش زبان طبیعی
با توجه به گسترش منابع الکترونیکی در تمامی جوامع علمی پردازش زبان های طبیعی به یک امر خیلی جدی و موثر تبدیل شده است که می توانیم به برخی از کاربردها از جمله دسته بندی متون ، خلاصه نویسی ، درک مطالب اشاره کرد.
نکنیک های اصلی در پردازش زبان های طبیعی رو می توان بدین صورت در نظر گرفت
قطعه بندی و نرمال سازی متن
تحلیل ساختواژی
پرچسب زنی جزء کلام
تجزیه و یا پارس(تحلیل نحوی)
تحلیل معنایی
مدل سازی زبانی :یادگیری ماشین
و کاربرد ها را می توان به :
درک زبان طبیعی
پردازش متون
بازیابی اطلاعات
ترجمه ماشین : تولید متن
تصحیح املا و دستور
ساخت گفتار از روی متن
سیستم های مکالمه گفتاری
سیستم های پرسش و پاسخ
ترجمه گفتار به گفتار
نام برد.
چرا پایتون؟
دلیل انتخاب پایتون رومیتونیم بخاطر سادگی و قدرت بسیار زیاد این زبان که در زمینه پردازش زبان دارای یک کتابخانه عالی است دونست.که براحتی می تونیم اون رو از لینک http://www.python .org که برای تمام پلتفرم ها موجود است دانلود و نصب کرد.
به عنوان مثال در این پنج خط برنامه پایتون یک فایل را پردازش میکنیم و تمامی کلماتی که به ing خط شده هستند رو نمایش می دهیم
در این برنامه تقریبا تمامی ویژگی های اصلی پایتون را نمایش میدهد.اولین موصوع فضای خالی هست که همانگونه که می بینیم برای انکه شرط if را در بلاک for قرار دهیم آن را جلو تر از for می نویسیم.در نتیجه این شرط بدرستی برای تمام کلمات for اجرا می شود.دومین موضوع شی گرایی پایتون است .هر متغییر یک موجودیت است که شامل صفات و متدهایی می باشد.بعنوان مثال ارزش متغیر line بیشتر از یک رشته از کاراکتر هاست.که یک شی از نوع string شامل متد ها و یا عملگر ها از جمله split می باشد.که ما می توانیم با ان کلمات داخل line را جدا کنیم.برای دسترسی به یک متد شی ابتدا نام متغییر شی و سپس دات و تام متد را وارد میکنیم .(line.split()) . سوم ، ارسال پارامتر به متد که در متد word.endwith(‘ing’) کلمه را بررسی می کند که آیا به ing ختم شده است مقدار درست و در غیر این صورت نادرست را بر می گرداند و درپایان از همه مهمتر می توان به خوانا بودن زبان پایتون اشاره کرد که حتی اگر شما هرگز برنامه نویسی نکرده باشید می توانید حدس بزنید که کد بالا چه عملی را انجام میدهد.
انتخاب پایتون هم به همین دلیل یادگیری سریع و توابع string خوب ان است. پایتون یک زبان مفسر ، شی گرا و داینامکی ، ... میباشد.پایتون به همراه یک کتابخانه گسترده استاندار از جمله اجزایی برای برنامه نویسی گرافیکی ، پردازش عدد و اتصال به وب ارائه شده است.
پایتون به شدت در صنعت ، تحقیقات علمی و اموزش و پرورش در سراسر دنیا استفاده میشود.برای مشاهد برخی از این مواد می توان به این لینک مراجعه نمایید. http://www .python.org/about/success/.
NLTK یک شالوده کار برای پردازش زبان های طبیعی در پایتون نام برد.nltk یک سری کلاس ها و متد ها و نمایش داده در پردازش زبان های طبیعی محیا می کند. رابط های استاندارد برای انجام وظایف مانند برچسب زنی اجزای کلام، تجزیه نحوی و طبقه بندی متن و پیاده سازی استانداری برای حل مسائل پیچیده در nlp را داراست.
NLTK را می توان از http://www.nltk.org دانلود کرد که شامل API ها و اسناد و نمونه کارها می باشد.
چیزهای که در این بحث نیاز داریم
Python که برای برنامه نویسی و می توانیم از هر دوی نسخه های 2.* و 3.* که کتابخانه NLTK را پشتیبانی می کنند استفاده کنیم
NLTK کتابخانه پردازش زبان های طبیعی
NLTK-Data که شامل شرکتهای زبانی است (corpora)
NumPy که برای کار با ارایه های چند بعدی و جبر خطی استفاده می شود.
Matplotlib کتابخانه ای برای رسم نمودار ها 2D
NetworkX این کتابخانه برای ذخیره و دستکاری ساختار شبکه متشکل از گره ها و لبه است.
Prover9 کتابخانه ای برای استنتاج پردازش زبان های طبیعی
Natural Language Toolkit (NLTK)
NLTK در اصل در سال 2001 به عنوان بخشی از دوره زبان شناسی محاسباتی در بخش علم کامپیوتر و اطلاعات در دانشگاه پنسیلوانیا ساخته شد.از ان زمان به کمک ده ها نفر شروع به بزرگتر شدن و گسترش یافت و اکنون پایه بسیاری از تحقیقات است.
درزیر پر اهمیت ترین و کاربردی ترین ماژول های NLTK را لیست کرده ایم.
فرایند در پردازش زبان | نام ماژول | عملکرد |
دسترسی به شرکت ها (از جمله رویترز) | nltk.corpus | رابط استاندارد برای شرکتهای و واژگان |
پردازش رشته ها | nltk.tokenize, nltk.stem | ریشه یابی ، توکن سازی ، توکن سازی نحوی |
کشف رابطه - نظم (Collocation discovery) | nltk.collocations | t-test, chi-squared, point-wise mutual information |
برچسبزنی اجزای کلام | nltk.tag | n-gram, backoff, Brill, HMM, TnT |
طبقه بندی | nltk.classify, nltk.cluster | Decision tree, maximum entropy, naive Bayes, EM, k-means |
قطعه بندی | nltk.chunk | Regular expression, n-gram, named entity |
تجریه (Parsing) | nltk.parse | Chart, feature-based, unification, probabilistic, dependency |
تفسیر معنایی | nltk.sem, nltk.inference | چک کردن مدل ، منطق مرتبه اول |
معیارهای ارزیابی | nltk.metrics | Precision, recall, agreement coefficients |
پیش بینی و احتمال براورد | nltk.probability | توزیع فراوانی، توزیع احتمال هموار |
کاربردی | nltk.app, nltk.chat | Graphical concordancer, parsers, WordNet browser, chatbots |
Linguistic fieldwork | nltk.toolbox | Manipulate data in SIL Toolbox format |
در کل می توان اهداف NLTK را به چهار بخش تقسیم کرد
سادگی
استحکام
توسعه پذیر
ماژول بندی شده
دربخش بعد به پردازش زبان در پایتون میپردازیم