عبارات باقاعده و منظم (Regular Expressions)

عبارات باقاعده و منظم (Regular Expressions)یکی از ابزار برنامه‌نویسی جذاب هستند، که بخشی از تکنیک‌های اساسی را در پردازش زبان طبیعی تشکیل می‌دهند و یادگیری آنها برای ساختن یک برنامه کارآمدتر لازم است. یک عبارت باقاعده و منظم مجموعه‌ای از کاراکترها یا الگو است که برای یافتن رشته‌های فرعی در یک رشته مشخص استفاده می‌شود. عبارات باقاعده و منظم در اکثر زبان های برنامه نویسی مانند JavaScript ،Java ،VB ،C# ،C / C++ ،Python ،Perl ،Ruby ،Delphi ،R ،Tcl و… وجود دارند.

از این عبارات برای اعتبارسنجی داده‌ها، کاوش داده، استخراج ویژگی از متن، جایگزینی رشته ،تغییر داده‌ها و نام فایل‌ها و … استفاده می‌شود. به عبارات منظم regex نیز گفته می‌شود.

برای مثال عبارات باقاعده و منظم برای استخراج همه هشتگ‌ها از توییتر، به دست آوردن id ایمیل‌ها یا شماره تلفن‌ها و غیره استفاده می‌شود. درواقع برای کار با هر محتوای متنی که بسیار بزرگ است و ساختار مشخصی ندارند (unstructured) بسیار مفید است.

ذکر این نکته اغراق‌آمیز نخواهد بود که بدون درک اصطلاحات منظم، ساختن یک سیستم مبتنی بر NLP نظیر chat bots ، مکالمه و … امکان‌پذیر نیست.

 

 

بررسی دقیق‌تر regex:

به عبارت ساده‌تر، عبارات باقاعده و منظم “دستورالعملی”هستند، که در مورد چگونگی مطابقت یا جایگزینی مجموعه رشته‌ها استفاده می‌شود. بیایید با برخی از اصول اولیه در اصطلاحات عادی شروع کنیم.

اصطلاحات اساسی:

1. Brackets []:

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

مثال:

wW]oodchuck –> Woodchuck or woodchuck]:با قرار دادن w, W در براکت می‌توان کلمه را با حرف کوچک یا بزرگ شروع کرد.

2 . dash :

با اضافه کردن یک خط تیره می‌توانید یک محدوده را مشخص کنید.

مثال:

A-Z] → machtes an upper case letter] :در اینجا چون در داخل براکت A-Z قرار دارد، پس به ‌سادگی می‌توان به هر یک از حروف الفبا دسترسی داشت.

3. caret ^:

برای استفاده از مفهوم متمم یا یک کاراکتر معمولی از “^” استفاده می‌شود. زمانی که داخل براکت استفاده شود مفهوم متمم و زمانی که داخل براکت نباشد یک کاراکتر معمولی است.

مثال:

A-Z] –> not an upper case letter^]: در اینجا به دلیل وجود”^” ، خروجی یک حرف بزرگ نیست.

“aˆb –> the pattern “aˆb:در اینجا ^ یک کاراکتر معمولی است.

4.question mark ?:

قرار دادن علامت “?” در جمله یک سؤال درباره بودن یا نبودن حرف قبل از علامت “?” است.

مثال:

woodchucks? –> woodchuck or woodchucks: با قرار دادن علامت ?انتهای جمله بعد از “s” درواقع می‌پرسد حرف “s” در خروجی باشد یا نباشد.

5. period .:

کاراکترهای بین دو عبارت را برمی‌گرداند.

مثال:

(beg.n –> Match any character between beg and n (e.g. begin, begun: با قرار دادن “.” در میان عبارت این خاصیت را ایجاد می‌کند که برای تکمیل عبارت به‌جای “.” هر یک از حروف می‌توانند قرار گیرند.

6. * or +:

استفاده از کاراکترهای ” * ” یا “+” این امکان را ایجاد می‌کنند که یک یا چند کاراکتر قبلی را اضافه کنید.

مثال:

(oo*h! → 0 or more of a previous character (e.g. ooh!, ooooh! با قرار دادن “*” بعد از “o”می‌تواند یک یا چند بار “o” را تکرار کند.

(o+h! → 1 or more of a previous character (e.g. ooh!, ooooooh! مشابه مثال بالا با قرار دادن “+” بعد از “o” می‌تواند یک یا چند بار “o” را تکرار کند

7. Anchors: 

برای اثبات چیزی درباره رشته یا روند تطبیق استفاده می‌شود. اینها در واقع راهی کوتاه برای نوشتن مجموعه کاراکترهای متداول در عبارات منظم هستند. همانطور که در مثال‌های زیر مشاهده می‌کنید، در پاسخ به سؤالات عمومی‌تر کمک می‌کنند.

معادل الگو

الگو
هرکاراکتری به جز کاراکترهای خط اول را بر می گرداند

.

[a-z A-Z 0-9]

w\\

[a-z A-Z 0-9^]

W\\

[0-9]

d\\

[0-9^]

D\\

8. POSIX character classes :

اگر می‌خواهید کلاس خاصی با خاصیت‌های دلخواه داشته باشید، کلاس‌های POSIX مفید هستند.

مثال:

alpha:]] → alphabetic characters:]] در مثال بالا مشاهده می‌کنید که عبارت سمت چپ یک دنباله کوچک از کاراکترها است که با مجموعه بزرگ‌تری از کاراکترها در سمت راست مطابقت دارد.

دستورات برای کار با عبارات باقاعده منظم:

1. (strsplit(x, split: روشی برای جدا کردن کلمات در یک جمله است.

مثال:

richard3 <- “now is the winter of our discontent”

strsplit(richard3, “ “) # the second argument specifies the space

در مثال بالا کلمات جمله بالا را با یک space جدا می‌کند.

2.   (grep(pattern, x, ignore.case = FALSE, value = FALSE :

grep به معنی قاپیدن و ربودن است که به شما امکان می‌دهد بسته به پارامترهای تنظیم‌شده، یک کلمه یا مجموعه کلمات موردنظر خود را “grab ” کنید.

مثال:

(“grep.ex <- c(“some like Python”, “some prefer R”, “some like both

grep(“both”, grep.ex) # in numerical form

در مثال بالا می‌گوییم شماره جمله‌ای را برگرداند که حاوی کلمه”both”باشد.

grep(“both”, grep.ex, value=TRUE) #prints the character string itself

در مثال بالا می‌گوییم خود جمله‌ای را برگرداند نه فقط شماره جمله را.

3. (gsub(pattern, replacement, x, ignore.case= FALSE:به شما امکان می‌دهد یک کلمه را با حرف دیگری جایگزین کنید.

مثال:

“?r_and_j <- “O Romeo, Romeo, wherefore art thou Romeo

(gsub(“Romeo”, “Superman”, r_and_j, ignore.case = FALSE

در مثال بالا جای کلمه “Romeo” ،“Superman” قرار می‌دهند.

به‌طور خلاصه، عبارات باقاعده و منظم را می‌توان به‌عنوان ابزاری مفید با کاربردهای عملی بسیاری معرفی و استفاده کرد که در اجرای برنامه‌های NLP نقش بسیار اساسی دارد. همچنین می‌توان regex را برای سایر برنامه‌های کاربردی، مانند بررسی تطابق اطلاعات ورودی توسط کاربر با فرم معیارهایی که در نظر داریم، به کار ببریم.

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.