Either try as much as you wish or wish as much as you try
خلاصه سازی متن با پردازش زبان طبیعی
به نام خدا
سلام
امیدوارم حالتون خوب باشه
به این آموزش خیلی خوش اومدید.
توی این پست یه پروژه ای رو با هم مینویسیم که تقریبا نیاز همه است.
خلاصه سازی متن با استفاده از پردازش زبان طبیعی.
هدف پروژه ؟
هدف ما از این پروژه اینه که یه متن بزرگ(مثلا ۴۰ خطی) رو بهش بدیم و اون برامون متن رو خلاصه کنه.
این برنامه خروجیش کاملا باید معنی دار باشه و کلمه ها رو الکی کنار هم قرار نده.
البته این برنامه برای متن های فارسی خیلی درست کار نمیکنه ، چون توکنایزری که ما ازش استفاده میکنیم برای زبان انگلیسی هستش. اما تا یه جایی میتونه متن های فارسی رو هم خلاصه کنه.
نصب کتابخانه و ماژول های مورد نیاز:
برای اینکه کد ها رو بنویسید نیاز به کتابخانه ی 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 spacy.lang.en.stop_words import STOP_WORDS
from string import punctuation
from heapq import nlargest
ورودی گرفتن:
text = input("pleas enter your text : ")
جدا کردن متن ورودی و خلاصه شده(البته شما لازم نیست انجام بدید، من همینجوری اضافش کردم):
print("-------------------------------------------------------------------------------------------------")
جداسازی کلمات از هم و سازگاری دادن ورودی با ماژول:
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("pleas enter your text : ")
print("-------------------------------------------------------------------------------------------------")
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 انجام میشه که سعی میکنم الگوریتمش رو داخل این وبلاگم قرار بدم.
امیدوارم از این مطلب خوشتون اومده باشه.
تا آموزش بعدی خدانگهدار
مطلبی دیگر از این انتشارات
استخراج کلمات کلیدی با پردازش زبان طبیعی
مطلبی دیگر از این انتشارات
NLP چیه
مطلبی دیگر از این انتشارات
کتابخانه های مورد نیاز برای NLP