پردازش زبان های طبیعی (NLP) [3]

منظور از Regular (عبارت قاعده مند)، عبارتی است که با آن بتوانیم به یک دسته کلی از متون ، و یا رشته ها دسترسی داشته باشیم؛ در واقع به عنوان مثال، وقتی بخواهیم به تمامی عبارات که با حرف " آ " شروع شده و با حرف " م " پایان می یابند، می بایست از Regex یا Regular Expression استفاده نماییم.ما با یک عبارت قاعده مند، می توانیم تمامی زیررشته های (Sub-string) موجود در یک رشته (String) را که در آن صدق می کنند، شناسایی کنیم.Regex چیست؟ به عنوان شروع موارد زیر را به خاطر داشته باشیم:کاراکتر “.” : یعنی هر کاراکتری بجز انتهای خطکاراکتر “*” : یعنی به تعداد 0 یا بیشتر کاراکترکاراکتر “+” : یعنی به تعداد 1 یا بیشتر کاراکترکاراکتر”؟” : یعنی مهم نیست در ادامه کاراکتری وجود داشته باشد یا نهکاراکتر “d/” : یعنی اگر عدد بودکاراکتر “w/” : یعنی اگر حروف, عدد یا کاراکتر “_” بودکاراکتر “$” : یعنی پایان رشته ی خطکاراکتر”^” : یعنی آغاز رشته ی خطعبارت [XYZ] : یعنی یک تک کاراکتر از کلاس کاراکترهاعبارت [XYZ]+ : یعنی یک یا بیشتر کاراکتر از کلاس کاراکترها یک کامند خیلی معروفه وجود دارد که قطعاً به گوش شما خورده است (Grep)، که به عنوان ابزاری برای جستجو در متنب هم نظور یافتن الگویی خاص در فایل‌های مختلف مورد استفاده قرار می‌گیرد که به راحتی می‌توان این ابزار را با دستور Regex مورد استفاده قرار داد. وبسایت ReGexr جهت تست آنلاین قواعد Regexخوب نوبت این هست که مقداری دست به کد بشویم. پایتون به صورت پیش فرض و Built-in پکیج کار با Regular Expression دارد که به صورت زیر می توانیم آن را بارگذاری کنیم:import reتوابع مهم قابل استفاده در Regex عبارتند از :Findall()Search()Split()Sub()به عنوان اولین مثال میخواهیم ببینیم که آیا در کل متن موجود (فرض کنید یک جمله و یا یک متن طولانی از یک وب سایت خبری) جمله ای وجود دارد که با کلمه "من" شروع شده است یا خیر؟ تمامی توابع بر روی این جمله تست و اجرا شده است:من، سهیل تهرانی پور ،از آکادمی یادگیری ماشین ایران ، در حال نوشتن مقاله پردازش زبان طبیعی ، در ویرگول هستم(شایان ذکر است می توانید قطعات کد زیر را در یک فایل با پسوند "py." و یا در Jupyter Notebook عیناً Copy-paste کنید و خروجی را مشاهده نمایید.) در ابتدا به بررسی تابع Findall خواهیم پرداخت:import re str = &quotمن، سهیل تهرانی پور،از آکادمی یادگیری ماشین ایران، در حال نوشتن مقاله پردازش زبان طبیعی، در ویرگول هستم&quot x = re.findall(&quot\Aمن&quot, str) print(x) if (x): print(&quotبله، موجود می باشد&quot) else: print(&quotخیر، متاسفانه موجود نیست&quot)خروجی این دستور در پایتون به صورت زیر خواهد بود:['من']بله، موجود می باشددر ادامه برای بررسی مثال دستور Search از پکیج Regex به صورت زیر می توانیم عمل کنیم:import re str = &quotمن، سهیل تهرانی پور،از آکادمی یادگیری ماشین ایران، در حال نوشتن مقاله پردازش زبان طبیعی، در ویرگول هستم&quot x = re.search(&quot[سهیل]&quot, str) print(&quot :کلمه مورد نظر در موقعیت زیر می باشد &quot+&quot\n&quot , x.start()) خروجی این دستور به صورت زیر خواهد بود: کلمه مورد نظر در موقعیت زیر می باشد : 4همانطور که در شکل زیر مشاهده می فرمایید بخشی از کدهای نوشته شده به زبان پایتون در Jupyter Notebook آورده شده است. برای دوستانی که حوصله سر و کله زدن با IDE های مختلف رو ندارند، این بهترین گزینه است. کافیه Anaconda رو از این لینک دانلود کنید و دست به کد بشوید.با Jupyter Notebook زندگی پایتونی بسیار زیبا خواهد بود.در بخش سوم، شاید یکی از مهمترین توابع در پردازش زبان طبیعی (NLP) را خواهیم داشت «تابع Split» که هر رشته به عنوان ورودی را به بخش های کوچکتر بر اساس درخواست ما تقسیم می کند.import re str = &quotمن، سهیل تهرانی پور ،از آکادمی یادگیری ماشین ایران ، در حال نوشتن مقاله پردازش زبان طبیعی ، در ویرگول هستم&quot x = re.split(&quot\s&quot, str) print(x)خروجی این کد به صورت زیر می باشد:در این جا چون تابع Split را با s\ فراخوانی کرده ایم، در جمله ورودی به ازای هر White Space که می بیند، جداسازی را انجام می دهد. ['من،', 'سهیل', 'تهرانی', 'پور', '،از', 'آکادمی', 'یادگیری', 'ماشین', 'ایران', '،', 'در', 'حال', 'نوشتن', 'مقاله', 'پردازش', 'زبان', 'طبیعی', '،', 'در', 'ویرگول', 'هستم']در ادامه تابع مهم دیگری که به ویژه در پیش پردازش متون مورد استفاده قرار می گیرد را بررسی می نماییم. تابع SUB که جهت جایگزینی یک کاراکتر یا رشته با کاراکتر یا رشته دیگر به صورت زیر خواهد بود: در مثال زیر، (فاصله ویرگول) به (ویرگول) تبدیل شده است.import re str = &quotمن، سهیل تهرانی پور ،از آکادمی یادگیری ماشین ایران ، در حال نوشتن مقاله پردازش زبان طبیعی ، در ویرگول هستم&quot x = re.sub(&quot ،&quot, &quot،&quot, str) print(x)خروجی دستور بالا به صورت زیر خواهد بود:من، سهیل تهرانی پور،از آکادمی یادگیری ماشین ایران، در حال نوشتن مقاله پردازش زبان طبیعی، در ویرگول هستمدر مثال زیر به جای «آکادمی یادگیری ماشین ایران» کلمه «Iran Machine Learning» را جایگزین خواهیم نمود:import re str = &quotمن، سهیل تهرانی پور ،از آکادمی یادگیری ماشین ایران ، در حال نوشتن مقاله پردازش زبان طبیعی ، در ویرگول هستم&quot x = re.sub(&quotیادگیری ماشین ایران&quot, &quotIran Machine Learning&quot, str) print(x)از تابع Sub و Split به عنوان توابع اصلی در پیش پردازش متون طبیعی یاد می شود. از آن ها در روزهای بعدی که در مورد NLTK صحبت خواهیم نمود، بیشتر می شنویم.من، سهیل تهرانی پور، قصد دارم تا از طریق ویرگول برای شما بیشتر از NLP بگم تا بتونیم در کنار هم زبان قشنگ فارسی رو جهانی تر کنیم.بیاین با هم یادگیری ماشین، یاد بگیریم. (Keep Calm and Learn Machine Learning)