پایتون و استخراج اطلاعات از گزارشها با RegEx Library


استخراج اطلاعات کلیدی از گزارشها، مقالات و ... امری ضروری است. برای مثال استخراج نام شرکتها و قیمتها از گزارشهای مالی، نام قضات و صلاحیت قضایی آنها از حکمهای دادگاه، شمارههای حساب از شکایات مشتریان، بسیار مهم است. این استخراجات بخشی از فرایند «متنکاوی» (Text Mining) است و در تبدیل دادههای بدون ساختار به دادههای ساختاریافته نقش اساسی دارد. دادههای ساختاریافته بعداً برای اجرای یادگیری ماشین استفاده میشوند.
در این نوع دادهکاوی از رویکردهایی مثل 'lookup'، 'rules' و 'statistical/machine learning' استفاده میشود.
- در رویکردهای برمبنای 'lookup'، کلمات از اسناد ورودی در مقابل یک فرهنگلغت دادههای ازپیشتعریفشده جستوجو میشوند.
- در رویکردهای برمبنای 'rules'، جستوجوی الگوها برای یافتن اطلاعات کلیدی انجام میشود.
- در رویکردهای برمبنای 'statistical'، روشهای نظارتشده/بدون نظارت برای استخراج اطلاعات استفاده میشود.
برای مثال '(Regular expression (RegEx' یک روش جستوجوی الگو و بنابراین بر مبنای 'rules' است.
سینتکس پایه
پایتون، عبارات منظم را با یک کتابخانه بهنام "re" پشتیبانی میکند. جستوجوی الگوها بهجای رشتههای منظم با استفاده از رشتههای خام "r" تعیین شدهاست. کاراکترهای متا و backslashها توسط پایتون تفسیر نمیشوند و مستقیماً به RegEx فرستاده میشوند.
سینتکس پایه را در جدول زیر میبینید.
برای کاربرد RegEx به نمونه کد پایتون زیر توجه کنید.
بهجای "re.search" که تمام تطابقهای دقیق را برمیگرداند، "()re.findall" برای برگرداندن تمام گروههای گرفتهشده میتواند استفاده شود. "re.sub" برای جایگزینی یک الگوی دیگر بهجای الگوی جستوجوی فعلی استفاده میشود. برای بهبود عملکرد، توصیه آن است که ابتدا الگو را با "re.compile" کامپایل کنید و سپس از آبجکت RegEx برای جستوجو استفاده کنید.
مثالهای کاربردی
تصور کنید یک کد برای جستوجوی شماره تلفنهایی مثل 9890251406-91+ در یک سند نوشتهاید. این کد در حالت معمول بیشتر از 10 خط خواهدشد. اما با RegEx در حدود 2/3 این خطوط میشود و قابلیت سفارشیسازی آن نیز بسیار بالا میرود.
در ادامه چند سناریوی رایج را میبینید که RegEx برای حل آن کمک قابل توجهی میکند. توجه کنید که مثالهای زیر میتوانند راههای جایگزین داشته باشند و نتایج همچنان یکسان باشد. خصوصاً با استفاده از کاراکترهایی مثل "d/" بهجای ارقام صفر تا نه. در بیشتر مثالها، الگوهای رسا و ساده تنها برای واضحشدن موضوع و قابلفهم کردن آن استفاده شدهاند.
پیدا کردن ایمیل
پیدا کردن شماره تلفن
دو کد اول فقط در "-" یا "." فرق دارند. بنابراین با استفاده از "(.|-)" میتوانند ترکیب شوند.
یک کد پیچیدهتر برای یافتن شماره تلفن:
پیدا کردن تاریخ
پیدا کردن شماره حساب/کارت اعتباری
ابزارهای توسعه، تست و رفع خطاها
برای کمک به توسعه و تست RegEx امکانات سادهای وجود دارد. برای مثال سایت Regex 101 را امتحان کنید. این سایت به شما امکان میدهد متن خودتان را بگذارید و الگوی RegEx را امتحان کنید. سایتهایی نظیر RegExper به شما نمایشی بصری از الگوی جستوجوی RegEx برای فهم بهتر میدهند. به تصویر زیر برای الگوی جستوجوی PhoneRegex که برای شماره تلفنها استفاده میشود، مراجعه کنید.
تمام الگوهای RegEx که در اینجا استفاده شد، با اصلاحات جزئی میتوانند در زبانهای برنامهنویسی مثل جاوا، پرل و ... استفاده شوند. همچنین در برخی از ویرایشگرهای رایج متون مثل Microsoft Word برای قابلیت «جستوجو-جایگزینی» (Find-Replace) میتوانند استفاده شوند. (گزینه "Use Wildcard" را روشن نگهدارید.)
سخن پایانی
RegEx روشی تطبیقپذیر، قابلانتقال و قدرتمند برای استخراج اطلاعات کلیدی از دادههای متنی است. تسلط روی آن به شما کمک میکند بسیاری از کارهای پیشپاافتاده را خودکار انجام دهید. اگر چه گاهی ممکن است پیچیده شود و توسعه و خطایابی آن دشوار شود. اما قابلیتهای عظیم آن سلاحی ضروری دراختیار هر برنامهنویس (خصوصاً متخصصان تجزیه و تحلیل متن) قرار میدهد.
اگر تمایل به مطالعه بیشتر در مورد این موضوعات را داشته باشید؛ شاید آموزش های زیر نیز برای شما مفید باشند:
- آموزش برنامه نویسی پایتون - فرادرس
- آموزش ساخت ربات تلگرام با پایتون (Python) - فرادرس
- آموزش پایتون گرافیکی (رابط های گرافیکی پایتون)
#
re.compile() دقیقا چکار میکنه؟ doc میگه Help on function compile in module re که خب چندن کمکی نمیکنی به درک کاربردش :/
این دستور در واقع یک الگو اولیه برای استفاده در جستجوهای مختلف ایجاد میکنه و دیگه نیاز نیست هر بار اون الگو نوشته بشه و با متغییر(شی) که به این دستور اشاره میکنه فراخونی میشه.