حذف کلمات توقف متن در پایتون — راهنمای کاربردی
در این مطلب، روش حذف کلمات توقف متن در پایتون با استفاده از جعبه «ابزار زبان طبیعی» (Natural Language Toolkit | NLTK) و بسته پایتون stop-words بیان شده است. همچنین، فهرست کلمات توقف فارسی نیز به منظور انجام پردازش زبان طبیعی، ارائه شده است.
مقدمهای بر حذف کلمات توقف متن در پایتون
فرایند تبدیل دادهها (دادههای خام) به دادههایی که توسط کامپیوتر قابل درک باشند را «پیشپردازش» (Pre-Processing) میگویند. یکی از اشکال اصلی پیشپردازش، فیلتر کردن دادههای بدون استفاده (غیر مفید و بیهوده) است. در «پردازش زبان طبیعی» (Natural Language Processing)، کلمات بدون استفاده (غیر مفید در حین پردازش) را «کلمات توقف» (Stop words) میگویند.
از دیگر معادلهایی که در زبان فارسی برای کلمات توقف استفاده میشود، میتوان به کلمات بازدارنده، کلمات ممنوعه و یا Stop Word اشاره کرد.
کلمات توقف چه هستند؟
کلمات توقف، در واقع کلماتی هستند که به طور متداول استفاده میشوند و موتورهای جستجو از جمله گوگل، به گونهای برنامهنویسی شدهاند که این کلمات را هم در هنگام ایندکس کردن صفحات وب و هم در هنگام بازیابی آنها در نتیجه یک کوئری جستجو، نادیده بگیرد. از جمله این کلمات متداول میتوان به «از، به، و، را» و چنین مواردی در زبان فارسی و «the, a, an, in» در زبان انگلیسی اشاره کرد.
در هنگام پردازش زبان طبیعی، تمایلی به این وجود ندارد که کلمات توقف در «پایگاه داده» (Data Base) فضا اشغال کنند و یا از زمان ارزشمند پردازش چیزی را به خود اختصاص دهند. به همین دلیل، میتوان این کلمات را به راحتی و با ذخیرهسازی لیست کلمات توقف، حذف کرد.
جعبه ابزار پردازش زبان طبیعی (NLTK) در پایتون
جعبه ابزار پردازش زبان طبیعی در پایتون (Natural Language Toolkit | NLTK) در زمان نگارش این مطلب، دارای لیستی از کلمات توقف برای ۲۳ زبان مختلف است. این لیستها را میتوان از پوشه nltk_data پیدا کرد. home/pratima/nltk_data/corpora/stopwords آدرس پوشه مذکور است (مخاطبان گرامی باید در نظر داشته باشند که در مسیر ارائه شده، باید نام پوشه خانگی یا در واقع همان Home Directory خود را جایگزین کنند).
البته، در ادامه روش مناسبتری نیز برای مشاهده لیست کامل زبانهایی که کلمات توقف آنها در NLTK وجود دارد، ارائه شده است. شایان ذکر است که برای استفاده از این روش، حتما باید NLTK دانلود و نصب شده باشد. در این صورت، با استفاده از قطعه کد زیر، میتوان لیست زبانها را مشاهده کرد.
1import nltk
2from nltk.corpus import stopwords
3print(stopwords.fileids())
خروجی این مورد در زمان نگارش این مطلب (و برای نسخه ۳.۴.۵ که روی سیستم کاربر نصب است، با در نظر داشتن این موضوع که stopwords به صورت جدا و بعدا نصب شده است) به صورت زیر است:
['arabic', 'azerbaijani', 'danish', 'dutch', 'english', 'finnish', 'french', 'german', 'greek', 'hungarian', 'indonesian', 'italian', 'kazakh', 'nepali', 'norwegian', 'portuguese', 'romanian', 'russian', 'slovene', 'spanish', 'swedish', 'tajik', 'turkish']
به طور کلی، توصیه میشود که برای داشتن کاملترین لیست زبانها، حتما آخرین نسخه از NLTK نصب شود. در جدول زیر، نمونهای از متنهای انگلیسی، با و بدون کلمات توقف، را میتوان مشاهده کرد.
متن نمونه با کلمات توقف | متن نمونه بدون کلمات توقف |
FaradarsMag - A Science Portal for Nerds | FaradarsMag, Science, Portal, Nerds |
Can listening be exhausting? | Listening, Exhausting |
I like reading, so I rad. | Like, Reading, Read |
برای بررسی لیست کلمات توقف در زبان انگلیسی، میتوان از دستور زیر در شل پایتون استفاده کرد.
1import nltk
2from nltk.corpus import stopwords
3 set(stopwords.words('english'))
خروجی دستور بالا، به صورت زیر است.
{‘ourselves’, ‘hers’, ‘between’, ‘yourself’, ‘but’, ‘again’, ‘there’, ‘about’, ‘once’, ‘during’, ‘out’, ‘very’, ‘having’, ‘with’, ‘they’, ‘own’, ‘an’, ‘be’, ‘some’, ‘for’, ‘do’, ‘its’, ‘yours’, ‘such’, ‘into’, ‘of’, ‘most’, ‘itself’, ‘other’, ‘off’, ‘is’, ‘s’, ‘am’, ‘or’, ‘who’, ‘as’, ‘from’, ‘him’, ‘each’, ‘the’, ‘themselves’, ‘until’, ‘below’, ‘are’, ‘we’, ‘these’, ‘your’, ‘his’, ‘through’, ‘don’, ‘nor’, ‘me’, ‘were’, ‘her’, ‘more’, ‘himself’, ‘this’, ‘down’, ‘should’, ‘our’, ‘their’, ‘while’, ‘above’, ‘both’, ‘up’, ‘to’, ‘ours’, ‘had’, ‘she’, ‘all’, ‘no’, ‘when’, ‘at’, ‘any’, ‘before’, ‘them’, ‘same’, ‘and’, ‘been’, ‘have’, ‘in’, ‘will’, ‘on’, ‘does’, ‘yourselves’, ‘then’, ‘that’, ‘because’, ‘what’, ‘over’, ‘why’, ‘so’, ‘can’, ‘did’, ‘not’, ‘now’, ‘under’, ‘he’, ‘you’, ‘herself’, ‘has’, ‘just’, ‘where’, ‘too’, ‘only’, ‘myself’, ‘which’, ‘those’, ‘i’, ‘after’, ‘few’, ‘whom’, ‘t’, ‘being’, ‘if’, ‘theirs’, ‘my’, ‘against’, ‘a’, ‘by’, ‘doing’, ‘it’, ‘how’, ‘further’, ‘was’, ‘here’, ‘than’}
شایان توجه است که کاربر میتواند این لیست را با کلمات توقف مورد نظر خود نیز ویرایش کند. در این راستا، باید کلمات انگلیسی مورد نظر خود را در فایل txt. موجود در پوشه کلمات توقف یا همان stopwords، ویرایش کند. برای مشاهده لیست کلمات توقف در زبان عربی، کافی است در دستور ارائه شده در بالا، به جای english، از arabic استفاده شود. برای سایر زبانها نیز به همین صورت عمل میشود.
import nltk from nltk.corpus import stopwords set(stopwords.words('arabic'))
خروجی دستور بالا، کلمات توقف زیر هستند.
{'آه', 'آها', 'آي', 'أف', 'أقل', 'أكثر', 'ألا', 'أم', 'أما', 'أن', 'أنا', 'أنت', 'أنتم', 'أنتما', 'أنتن', 'أنى', 'أو', 'أولئك', 'أولاء', 'أوه', 'أي', 'أين', 'أينما', 'أيها', 'إذ', 'إذا', 'إذما', 'إذن', 'إلا', 'إلى', 'إليك', 'إليكم', 'إليكما', 'إليكن', 'إما', 'إن', 'إنا', 'إنما', 'إنه', 'إي', 'إيه', 'التي', 'الذي', 'الذين', 'اللائي', 'اللاتي', 'اللتان', 'اللتيا', 'اللتين', 'اللذان', 'اللذين', 'اللواتي', 'بخ', 'بس', 'بعد', 'بعض', 'بك', 'بكم', 'بكما', 'بكن', 'بل', 'بلى', 'بما', 'بماذا', 'بمن', 'بنا', 'به',' بها', 'بهم', 'بهما', 'بهن', 'بي',' بيد', 'بين', 'تلك', 'تلكم', 'تلكما', 'ته', 'تي', 'تين', 'تينك', 'ثم', 'ثمة', 'حاشا', 'حبذا', 'حتى', 'حيث', 'حيثما', 'حين', 'خلا', 'دون', 'ذا', 'ذات', 'ذاك', 'ذان', 'ذانك', 'ذلك', 'ذلكم', 'ذلكما', 'ذلكن', 'ذه', 'ذو', 'ذوا', 'ذواتا', 'ذواتي', 'ذي', 'ذين', 'ذينك', 'ريث', 'سوف', 'سوى', 'شتان', 'عدا' ,'عسى', 'عل', 'على', 'عليك', 'عليه', 'عما', 'عن', 'عند', 'غير', 'فإذا', 'فإن', 'فلا', 'فمن', 'في', 'فيم', 'فيما', 'فيه', 'فيها', 'قد', 'كأن', 'كأنما', 'كأي', 'كأين', 'كذا', 'كذلك', 'كل', 'كلا', 'كلاهما', 'كلتا', 'كلما', 'كليكما', 'كليهما', 'كم', 'كما', 'كي', 'كيت', 'كيف', 'كيفما', 'لئن', 'لا', 'لاسيما', 'لدى', 'لست', 'لستم', 'لستما', 'لستن', 'لسن', 'لسنا', 'لعل', 'لك', 'لكم', 'لكما', 'لكن', 'لكنما', 'لكي', 'لكيلا', 'لم', 'لما', 'لن', 'لنا', 'له', 'لها', 'لهم', 'لهما', 'لهن', 'لو', 'لولا', 'لوما', 'لي', 'ليت', 'ليس', 'ليسا', 'ليست', 'ليستا', 'ليسوا', 'ما', 'ماذا', 'متى', 'مذ', 'مع', 'مما', 'ممن', 'من', 'منذ', 'منه', 'منها', 'مه', 'مهما', 'نحن', 'نحو', 'نعم', 'هؤلاء', 'ها', 'هاتان', 'هاته', 'هاتي', 'هاتين', 'هاك', 'هاهنا', 'هذا', 'هذان', 'هذه', 'هذي', 'هذين', 'هكذا', 'هل', 'هلا', 'هم', 'هما' ,'هن', 'هنا', 'هناك', 'هنالك', 'هو', 'هي', 'هيا', 'هيت', 'هيهات', 'وإذ', 'وإذا', 'وإن', 'والذي', 'والذين', 'ولا', 'ولكن', 'ولو', 'وما', 'ومن', 'وهو', 'يا'}
حذف کلمات توقف موجود در یک متن با استفاده از NLTK
در ادامه، برنامهای ارائه شده است که کاربر میتوان با استفاده از آن، کلمات توقف (زبان انگلیسی) را از یک تکه متن انگلیسی حذف کند.
1from nltk.corpus import stopwords
2from nltk.tokenize import word_tokenize
3
4example_sent = "This is a sample sentence, showing off the stop words filtration."
5
6stop_words = set(stopwords.words('english'))
7
8word_tokens = word_tokenize(example_sent)
9
10filtered_sentence = [w for w in word_tokens if not w in stop_words]
11
12filtered_sentence = []
13
14for w in word_tokens:
15 if w not in stop_words:
16 filtered_sentence.append(w)
17
18print(word_tokens)
19print(filtered_sentence)
خروجی قطعه کد بالا به صورت زیر است.
['This', 'is', 'a', 'sample', 'sentence', ',', 'showing', 'off', 'the', 'stop', 'words', 'filtration', '.'] ['This', 'sample', 'sentence', ',', 'showing', 'stop', 'words', 'filtration', '.']
در مثال ارائه شده در این بخش، متنی که حذف کلمات توقف در آن اتفاق میافتاد، به صورت یک «رشته» (String) در کد ارائه شده است. منظور بخش زیر از قطعه کد بالا است.
example_sent = "This is a sample sentence, showing off the stop words filtration."
اما در بسیاری از موارد، نیاز به آن است که کار حذف کلمات توقف در یک فایل متنی صورت بگیرد. روش کار با فایل متنی، در بخش بعدی تشریح شده است.
حذف کلمات توقف موجود در یک فایل متنی با استفاده از NLTK
در کد زیر، فایل text.txt، فایل ورودی اصلی به برنامه محسوب میشود که چنانکه از پسوند آن (یعنی txt.) مشخص است، یک فایل متنی است. هدف حذف کلمات توقف در این متن است.
فایل خروجی، filteredtext.txt است. این کار را میتوان با استفاده از قطعه کد زیر انجام داد.
1import io
2from nltk.corpus import stopwords
3from nltk.tokenize import word_tokenize
4#word_tokenize accepts a string as an input, not a file.
5stop_words = set(stopwords.words('english'))
6file1 = open("text.txt")
7line = file1.read()# Use this to read file content as a stream:
8words = line.split()
9for r in words:
10 if not r in stop_words:
11 appendFile = open('filteredtext.txt','a')
12 appendFile.write(" "+r)
13 appendFile.close()
در اینجا، چگونگی حذف کلمات توقف از متن با استفاده از جعبه ابزار پردازش زبان طبیعی پایتون یعنی NLTK، به منظور افزایش کارآمدی پردازش متن، آموزش داده شد.
حذف کلمات توقف متن با استفاده از بسته پایتون stop-words
stop-words یک بسته پایتون برای کلمات توقف است. این بسته که در PyPi موجود و قابل دانلود است [+]، از زبانهای زیر پشتیبانی میکند.
- عربی
- بلغاری
- کاتالان
- چکی
- دانمارکی
- انگلیسی
- فنلاندی
- فرانسوی
- آلمانی
- مجارستانی
- اندونزیایی
- ایتالیایی
- نروژی
- لهستانی
- پرتغالی
- رومانیایی
- روسی
- اسپانیایی
- سوئدی
- ترکی
- اوکراینی
برخی از زبانهای پشتیبانی شده در بسته stop-words، مشابه با NLTK هستند. هرچند که تفاوتهایی نیز در زبانهای پشتیبانی شده توسط این دو وجود دارد و بنابراین، به پژوهشگران توصیه میشود که هر دو این موارد را بررسی کنند. شایان توجه است که بسته stop-words در اصل برای پایتون نسخه ۲ نوشته شده و سپس، به پایتون ۳ پورت و تست شده است.
روش نصب بسته stop-words در پایتون
برای نصب بسته stop-words در پایتون، با استفاده از pip، میتوان از دستور زیر استفاده کرد.
1$ pip install stop-words
برای نصب با استفاده از easy_install میتوان از دستور زیر استفاده کرد.
1$ easy_install stop-words
راه دیگر نصب این بسته، کلون کردن مخزن «گیت» (Git) آن [+] است.
1$ git clone --recursive git://github.com/Alir3z4/python-stop-words.git
سپس، باید آن را نصب کرد.
1$ python setup.py install
روش کار با بسته stop-words در پایتون
برای فراخوانی بسته stop-words و کار با آن، میتوان به صورت زیر عمل کرد.
1from stop_words import get_stop_words
سپس، با استفاده از دستورهای زیر میتوان کلمات کلیدی زبان مورد نظر کاربر را (از میان زبانهای پشتیبانی شده توسط این بسته) استفاده کرد.
1stop_words = get_stop_words('en')
یا
1stop_words = get_stop_words('english')
کلمات توقف در زبان فارسی برای پردازش زبان فارسی
متأسفانه در حال حاضر، در NLTK به طور پیشفرض، فهرست کلمات توقف زبان فارسی وجود ندارد. ولیکن پژوهشگرانی اقدام به تهیه لیستی از کلمات توقف در زبان فارسی کردهاند. برای دانلود این فهرستها میتوان از لینکهای زیر استفاده کرد.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای داده کاوی و یادگیری ماشین
- آموزش اصول و روشهای داده کاوی (Data Mining)
- مجموعه آموزشهای هوش مصنوعی
- تقلبنامه (Cheat Sheet) تولباکس تحلیل متن در متلب — راهنمای کاربردی
- روشهای متنکاوی — راهنمای کاربردی
- پیش پردازش متن در پایتون — راهنمای جامع
- آموزش پردازش زبان طبیعی پروژه محور — راهنمای کاربردی
^^
سلام
لطفا کدی که برای حذف ایست واژه ها به زبان فارسی با استفاده از لیست های موجود در سایت تان هست را بنویسید؟
با تشکر فراوان