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

به نام خداسلامامیدوارم حالتون خوب باشه به این آموزش خیلی خوش اومدید.توی این پست یه پروژه ای رو با هم مینویسیم که تقریبا نیاز همه است.خلاصه سازی متن با استفاده از پردازش زبان طبیعی.هدف پروژه ؟هدف ما از این پروژه اینه که یه متن بزرگ(مثلا ۴۰ خطی) رو بهش بدیم و اون برامون متن رو خلاصه کنه.این برنامه خروجیش کاملا باید معنی دار باشه و کلمه ها رو الکی کنار هم قرار نده.البته این برنامه برای متن های فارسی خیلی درست کار نمیکنه ، چون توکنایزری که ما ازش استفاده میکنیم برای زبان انگلیسی هستش. اما تا یه جایی میتونه متن های فارسی رو هم خلاصه کنه.نصب کتابخانه و ماژول های مورد نیاز:برای اینکه کد ها رو بنویسید نیاز به کتابخانه ی 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 spacy.lang.en.stop_words import STOP_WORDS from string import punctuation from heapq import nlargestورودی گرفتن:text = input(&quotpleas enter your text : &quot)جدا کردن متن ورودی و خلاصه شده(البته شما لازم نیست انجام بدید، من همینجوری اضافش کردم):print(&quot-------------------------------------------------------------------------------------------------&quot)جداسازی کلمات از هم و سازگاری دادن ورودی با ماژول:stopwords = list(STOP_WORDS) nlp = spacy.load('en_core_web_sm') doc = nlp(text) tokens = [token.text for token in doc]حذف کلمات اضافی از متن:word_frequencies = {} for word in doc: if word.text.lower() not in stopwords: if word.text.lower() not in punctuation: if word.text not in word_frequencies.keys(): word_frequencies[word.text] = 1 else: word_frequencies[word.text] +=1 max_frequcncy = max(word_frequencies.values())طبیعی کردن متن(نرمال کردن متن):for word in word_frequencies.keys(): word_frequencies[word] = word_frequencies[word]/max_frequcncy sentence_tokens = [sent for sent in doc.sents] sentence_scores = {} for sent in sentence_tokens: for word in sent: if word.text.lower() in word_frequencies.keys(): if sent not in sentence_scores.keys(): sentence_scores[sent] = word_frequencies[word.text.lower()] else: sentence_scores[sent] += word_frequencies[word.text.lower()]معلوم کردن حد برای خلاصه سازی متن:select_length = int(len(sentence_tokens)*0.1) summary = nlargest(select_length,sentence_scores , key = sentence_scores.get) final_summary = [word.text for word in summary] final_summaryکل کد ها به صورت یکجا:import spacy from spacy.lang.en.stop_words import STOP_WORDS from string import punctuation from heapq import nlargest text = input(&quotpleas enter your text : &quot) print(&quot-------------------------------------------------------------------------------------------------&quot) stopwords = list(STOP_WORDS) nlp = spacy.load('en_core_web_sm') doc = nlp(text) tokens = [token.text for token in doc] word_frequencies = {} for word in doc: if word.text.lower() not in stopwords: if word.text.lower() not in punctuation: if word.text not in word_frequencies.keys(): word_frequencies[word.text] = 1 else: word_frequencies[word.text] +=1 max_frequcncy = max(word_frequencies.values()) for word in word_frequencies.keys(): word_frequencies[word] = word_frequencies[word]/max_frequcncy sentence_tokens = [sent for sent in doc.sents] sentence_scores = {} for sent in sentence_tokens: for word in sent: if word.text.lower() in word_frequencies.keys(): if sent not in sentence_scores.keys(): sentence_scores[sent] = word_frequencies[word.text.lower()] else: sentence_scores[sent] += word_frequencies[word.text.lower()] select_length = int(len(sentence_tokens)*0.1) summary = nlargest(select_length,sentence_scores , key = sentence_scores.get) final_summary = [word.text for word in summary] final_summaryنتیجه گیری:توی این مطلب یاد گرفتیم که یه متن رو چگونه با استفاده از پایتون خلاصه کنیماین کار با الگوریتم TextRank انجام میشه که سعی میکنم الگوریتمش رو داخل این وبلاگم قرار بدم.امیدوارم از این مطلب خوشتون اومده باشه.تا آموزش بعدی خدانگهدار