استخراج کلمات کلیدی با پردازش زبان طبیعی

به نام خداسلامامیدوارم حالتون خوب باشهدیدید بعد اینکه توی ویرگول یه پست مینویسی آخرش میگه کلمات کلیدی پستت رو بنویس(همون tag)ما با استفاده از پردازش زبان طبیعی و زبان برنامه نویسی پایتون همین کار رو میخوایم انجام بدیم، اما به صورت خودکار.keyword چیست؟کلمات کلیدی یا keywords به کلماتی گفته میشن که یه متن رو با همون کلمات معرفی کنه، یعنی چی؟مثلا ما یه جمله داریم که اینه:i saw an notebook in stationery yesterdayحالا میخوایم با چند تا کلمه این جمله رو معرفی کنیم:حرف های اضافه و فعل و فاعل رو حذف و اسم ها و تاریخ ها رو در نظر میگیریم:notebook , stationery , yesterdayالان یکم به این سه تا کلمه فکر کنید، با این سه تا کلمه میشه میشه اون جمله بالایی رو معرفی کرد؟کاربردش چیه؟یکی از کاربرد هاش گزینه ی سرچ گوگل هستش، شما وقتی یه جستجویی انجام میدید سایت هایی رو برای شما میاره که کلمات کلیدی جستجوی شما بهشون بخوره.یا یکی دیگش همین ویرگوله، که خودتون احتمالا میدونید.نصب کتابخانه و ماژول مورد نیاز:برای اینکه کد ها رو بنویسید نیاز به کتابخانه ی spacy و ماژول خودش رو نیاز داریدبرای این کار باید این کار رو انجام بدید:اگر مثل من از آناکوندا و ژوپیتر نوت بوک استفاده میکنید این دستور رو داخل آنکوندا پرامپت به ترتیب وارد کنید:conda install -c conda-forge spacyوpython -m spacy download en_core_web_smو اگر از IDE هایی مثل vscode و خود IDE پایتون استفاده میکنید این دستورات رو به ترتیب داخل CMD وارد کنید:pip install -U pip setuptools wheelpip install -U spacypython -m spacy download en_core_web_smکد نویسی مرحله به مرحله:ایمپورت کردن کتابخانه های مورد نیاز:import spacy from collections import Counter from string import punctuationحالا وقت لود کردن ماژوله:nlp = spacy.load('en_core_web_sm')حالا با استفاده از یه تابع معلوم میکنیم که چه اجزایی از جمله مهم تر از بقیه هستند:def keywords(text): result = [] pos_tag = ['ADJ', 'NOUN','DATE'] doc = nlp(text.lower()) for token in doc: if(token.text in nlp.Defaults.stop_words or token.text in punctuation): continue if(token.pos_ in pos_tag): result.append(token.text) return resultتوی این بخش از کاربر ورودی میگیریم:txt = keywords(input(&quotpleas enter the text: &quot))چاپ کردن خروجی:tags = [('' + x[0]) for x in Counter(txt).most_common(5)] print(', '.join(tags))البته توی این بخش میتونید توی خط اولش اون 5 رو تغییر بدید اون نشان دهنده ی تعداد کلمات کلیدی ای هستش که قراره براتون چاپ کنه.کل کد ها:import spacy from collections import Counter from string import punctuation nlp = spacy.load('en_core_web_sm') def keywords(text): result = [] pos_tag = ['ADJ', 'NOUN','DATE'] doc = nlp(text.lower()) for token in doc: if(token.text in nlp.Defaults.stop_words or token.text in punctuation): continue if(token.pos_ in pos_tag): result.append(token.text) return result txt = keywords(input(&quotpleas enter the text: &quot)) print(&quotkeywords:&quot) tags = [('' + x[0]) for x in Counter(txt).most_common(5)] print(', '.join(tags))تست برنامه:ما برای تست خروجی همون متنی رو که اول توی بخش keywords چیست داده بودم رو به برنامه میدیم.pleas enter the text: i saw an notebook in stationery yesterdaykeywords:notebook, stationery, yesterdayهمینطور که میبینید برنامه ورودی رو گرفته و کلمات کلیدی رو پایینش چاپ کرده.البته چون جمله کوچیک بود برای من ۳ تا کلمه ی کلیدی استخراج کرد، اما ما توی خط یکی مونده به آخر برنامه حداکثر ۵ تا کلمه ی کلیدی برای تعیین کردیم، شما میتونید تغییرش بدید، مثلا اگر متنتون خیلی گنده بود میتونید حداکثر رو به ۱۰ تا تغییر بدید تا نوشتتون بهتر معرفی بشه.به پایان این مطلب رسیدیم.امیدوارم از این آموزش خوشتون اومده باشه و به دردتون خورده باشه.تا آموزش بعدی خدانگهدار