در این مطلب، روش حذف کلمات توقف متن در پایتون با استفاده از جعبه «ابزار زبان طبیعی» (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 دانلود و نصب شده باشد. در این صورت، با استفاده از قطعه کد زیر، می‌توان لیست زبان‌ها را مشاهده کرد.

import nltk
from nltk.corpus import stopwords
print(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

برای بررسی لیست کلمات توقف در زبان انگلیسی، می‌توان از دستور زیر در شل پایتون استفاده کرد.

import nltk
from nltk.corpus import stopwords
 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

در ادامه، برنامه‌ای ارائه شده است که کاربر می‌توان با استفاده از آن، کلمات توقف (زبان انگلیسی) را از یک تکه متن انگلیسی حذف کند.

from nltk.corpus import stopwords 
from nltk.tokenize import word_tokenize 
  
example_sent = "This is a sample sentence, showing off the stop words filtration."
  
stop_words = set(stopwords.words('english')) 
  
word_tokens = word_tokenize(example_sent) 
  
filtered_sentence = [w for w in word_tokens if not w in stop_words] 
  
filtered_sentence = [] 
  
for w in word_tokens: 
    if w not in stop_words: 
        filtered_sentence.append(w) 
  
print(word_tokens) 
print(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 است. این کار را می‌توان با استفاده از قطعه کد زیر انجام داد.

import io 
from nltk.corpus import stopwords 
from nltk.tokenize import word_tokenize 
#word_tokenize accepts a string as an input, not a file. 
stop_words = set(stopwords.words('english')) 
file1 = open("text.txt") 
line = file1.read()# Use this to read file content as a stream: 
words = line.split() 
for r in words: 
    if not r in stop_words: 
        appendFile = open('filteredtext.txt','a') 
        appendFile.write(" "+r) 
        appendFile.close()

در اینجا، چگونگی حذف کلمات توقف از متن با استفاده از جعبه ابزار پردازش زبان طبیعی پایتون یعنی NLTK، به منظور افزایش کارآمدی پردازش متن، آموزش داده شد.

حذف کلمات توقف متن با استفاده از بسته پایتون stop-words

stop-words یک بسته پایتون برای کلمات توقف است. این بسته که در PyPi موجود و قابل دانلود است [+]، از زبان‌های زیر پشتیبانی می‌کند.

  • عربی
  • بلغاری
  • کاتالان
  • چکی
  • دانمارکی
  • انگلیسی
  • فنلاندی
  • فرانسوی
  • آلمانی
  • مجارستانی
  • اندونزیایی
  • ایتالیایی
  • نروژی
  • لهستانی
  • پرتغالی
  • رومانیایی
  • روسی
  • اسپانیایی
  • سوئدی
  • ترکی
  • اوکراینی

برخی از زبان‌های پشتیبانی شده در بسته stop-words، مشابه با NLTK هستند. هرچند که تفاوت‌هایی نیز در زبان‌های پشتیبانی شده توسط این دو وجود دارد و بنابراین، به پژوهشگران توصیه می‌شود که هر دو این موارد را بررسی کنند. شایان توجه است که بسته stop-words در اصل برای پایتون نسخه ۲ نوشته شده و سپس، به پایتون ۳ پورت و تست شده است.

روش نصب بسته stop-words در پایتون

برای نصب بسته stop-words در پایتون، با استفاده از pip، می‌توان از دستور زیر استفاده کرد.

$ pip install stop-words

برای نصب با استفاده از easy_install می‌توان از دستور زیر استفاده کرد.

$ easy_install stop-words

راه دیگر نصب این بسته، کلون کردن مخزن «گیت» (Git) آن [+] است.

$ git clone --recursive git://github.com/Alir3z4/python-stop-words.git

سپس، باید آن را نصب کرد.

$ python setup.py install

روش کار با بسته stop-words در پایتون

برای فراخوانی بسته stop-words و کار با آن، می‌توان به صورت زیر عمل کرد.

from stop_words import get_stop_words

سپس، با استفاده از دستورهای زیر می‌توان کلمات کلیدی زبان مورد نظر کاربر را (از میان زبان‌های پشتیبانی شده توسط این بسته) استفاده کرد.

stop_words = get_stop_words('en')

یا

stop_words = get_stop_words('english')

کلمات توقف در زبان فارسی برای پردازش زبان فارسی

متأسفانه در حال حاضر، در NLTK به طور پیش‌فرض، فهرست کلمات توقف زبان فارسی وجود ندارد. ولیکن پژوهشگرانی اقدام به تهیه لیستی از کلمات توقف در زبان فارسی کرده‌اند. برای دانلود این فهرست‌ها می‌توان از لینک‌های زیر استفاده کرد.

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۲ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

«الهام حصارکی»، فارغ‌التحصیل مقطع کارشناسی ارشد مهندسی فناوری اطلاعات، گرایش سیستم‌های اطلاعات مدیریت است. او در زمینه هوش مصنوعی و داده‌کاوی، به ویژه تحلیل شبکه‌های اجتماعی، فعالیت می‌کند.