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

به نام خدا

سلام

امیدوارم حالتون خوب باشه

دیدید بعد اینکه توی ویرگول یه پست مینویسی آخرش میگه کلمات کلیدی پستت رو بنویس(همون 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 wheel

pip install -U spacy

python -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 yesterday
keywords:
notebook, stationery, yesterday

همینطور که میبینید برنامه ورودی رو گرفته و کلمات کلیدی رو پایینش چاپ کرده.

البته چون جمله کوچیک بود برای من ۳ تا کلمه ی کلیدی استخراج کرد، اما ما توی خط یکی مونده به آخر برنامه حداکثر ۵ تا کلمه ی کلیدی برای تعیین کردیم، شما میتونید تغییرش بدید، مثلا اگر متنتون خیلی گنده بود میتونید حداکثر رو به ۱۰ تا تغییر بدید تا نوشتتون بهتر معرفی بشه.





به پایان این مطلب رسیدیم.

امیدوارم از این آموزش خوشتون اومده باشه و به دردتون خورده باشه.


تا آموزش بعدی خدانگهدار