مجله خبری برنامه‌نویسی پایتون

مرکز آموزش و رقابت برنامه نویسی پایتون

مجله خبری برنامه‌نویسی پایتون

مرکز آموزش و رقابت برنامه نویسی پایتون

مجله خبری برنامه‌نویسی پایتون

زبان پایتون (Python) در سال ۱۹۹۱ توسط یک برنامه‌نویس هلندی به نام گیدو ون روسوم (Guido van Rossum) ابداع شد و از آن زمان تا کنون رشد قابل ملاحظه‌ای را شاهد بوده است.

اگر چه وی در آن زمان گفته بود: «من به هیچ وجه قصد ندارم زبانی بسازم که به طور گسترده مورد استفاده قرار بگیرد» ولی اکنون و با گذشت نزدیک به سه دهه از آن تاریخ، پایتون تقریباً تمام رقبای خود را کنار زده و به اندازه‌ای محبوبیت یافته که حتی افراد مبتدی نیز کدنویسی را با آن شروع می‌کنند.

در یک سال گذشته، «Python» یکی از کلماتی بود که شهروندان آمریکایی بسیار زیاد در گوگل جستجو کرده‌اند، حتی بیشتر از نام ستاره‌های تلویزیونی.

۲۰ مطلب با موضوع «متن کاوی» ثبت شده است

❇️ در درس سوم میخواهیم در مورد عبارتهای منظم و پردازش روی متن های آزاد صحبت کنیم. هنگامی که شما در حال پردازش متن آزاد هستید، عبارتها و الگوهای منظم نقش مهمی را ایفا خواهند کرد. بنابراین بگذارید یک مثال بزنیم.


❇️ متن زیر یکی از توییتهای سخنگوی سازمان ملل می باشد:


»> text12 = '"Ethics are built right into the ideals and objectives of the United Nations" #UNSG @ NY Society for Ethical Culture bit.ly/2guVelr @UN and @UN_Women'


❇️ در این متن یک اصطلاح مشاهده می شود که با # مشخص شدند و یک سری کلمات که با @ مشخص شدند و همچنین یک لینکی رو مشاهده میکنید. اگر بخواهیم این موارد رو استخراج کنیم، گام اول اینه که ما بیاییم با متد split کلمات رو از هم جدا کنیم


»> text13 = text12.split(' ')


»> text13


['"Ethics', 'are', 'built', 'right', 'into', 'the', 'ideals', 'and', 'objectives', 'of', 'the', 'United', 'Nations"', '#UNSG', '@', 'NY', 'Society', 'for', 'Ethical', 'Culture', 'bit.ly/2guVelr', '@UN', 'and', '@UN_Women']


❇️ حالا چگونه میتونیم هشتک ها  و ات ساین ها رو پیدا کنیم، خوب بریم تو بخش بعدی و این کلمات خاص رو پیدا کنیم



❇️ پیدا کردن عبارتهای خاص

🔸هشتک ها

با استفاده از حلقه for و متد startswith  میتوانیم کلماتی که با هشتگ شروع میگردند را استخراج کنیم.

»> [w for w in text13 if w.startswith('#')]
['#UNSG']

🔸 ات ساین

( کلماتی که با @ شروع میگردند) : همان دستور بالا رو مینویسیم فقط بجای شارپ از ات ساین استفاده میکنیم:

»> [w for w in text13 if w.startswith('@')]
['@', '@UN', '@UN_Women']

اتفاقی که در بالا افتاد کلمه بعد از @ نیومده و دلیلش فاصله ای است که بین @ و کلمه بعدش بود. حالا برای این مشکل باید چیکار کنیم. عبارت های خاص در این بخش لزوما باید یک کلمه ای باشد که با @ چسبیده باشد. و اگر @ به تنهایی وارد شد را نباید بعنوان یک عبارت خاص در نظر گرفت. در بخش بعدی راه حلی را ارائه خواهیم داد.


📗کار با متون در جملات

📕تقسیم جملات به کلمات و کلمات به کارکتر

📒پیدا کردن کلمات منحصر به فرد(حذف موارد تکراری)

📘کار با متن در سندهای فایل


دریافت کدهای درس دوم
حجم: 3.08 کیلوبایت


✅ کار با فایل های متنی بزرگ


🔹 اگر بخواهیم فایل متنی مثل یک فایل نوت پد رو با پسوند txt رو بخوانیم باید از دستور open استفاده کنیم. فرمت دستور open به این صورت است که ورودی اول باید نام فایل یا آدرس محلی که فایل متنی در آنجا قرار دارد، باشد. ورودی دوم مد r هست که برای خوندن استفاده میشه و ورودی سوم رو هم از utf8 استفاده میکنیم، دلیل گذاشتن این ورودی سوم اینه که اگر شما این ساختار رو مشخص نکنید پایتون در خروجی یکسری کارکترهای اضافی در ابتدا نمایش خواهد داد.مثال رو ببنیم:


>>> f = open('D:\Text mining\week-1\Lesson-2\humans.txt','r',encoding='utf-8-sig')



🔹 اگر بخواهیم فایل فوق رو بصورت خط به خط بخونیم باید از دستور readline بصورت زیر استفاده کنیم. (در برنامه نویسی انتهای هر خط با n/ مشخص میشه)


>>> f.readline()

'Python is an interpreted high-levelprogramming\n'


▪️نکته ای که در این بخش هست اینه که با هر بار اجرای دستور فوق یک خط خوانده می شود. دقت کنید که پایتون زمانی انتهای خط را تشخیص خواهد داد که دکمه اینتر زده شود.بنابراین اگر پارگراف نوشته شد اما فقط در انتهای پارگراف اینتر زده شد، تمام پارگراف را یک خط تشخیص خواهد داد.


🔹 خواندن کل فایل : برای اینکه مشخص کنیم از کجای فایل متن رو باید بخونیم میتونیم از تابع seek برای اینکار استفاده کنیم. دقت کنید که عبارت داخل پرانتر تابع seek اندیس شروع خوندن رو نشون میده که پیش فرض صفر خواهد بود. حالا ما در این مثال هم میخواهیم از ابتدا شروع کنیم کل فایل رو بخونیم، بنابراین داریم :


>>> f.seek(0)

0

>>> text9 = f.read()

>>> len(text9)

2672


▪️همانطور که در بالا میبینید کل فایل از اندیس صفر شروع به خوندن میکنیم و تعداد کارکترهای که داخل متنمون قرار داشت 2672 بود.


🔹حالا اگر بخواهیم کل فایل رو خط به خط جدا کنیم و در یک لیستی قرار بدهیم کافیه از تابع splitlines برای اینکار بصورت زیر استفاده کنیم


>>> text10 = text9.splitlines()

>>> len(text10)

21

>>> text10[0]

'Python is an interpreted high-levelprogramming'


▪️تعداد خطهای این فایل 21 بود و با اندیس میتونیم هر خطی که خواستیم در خروجی نمایش بدهیم.


✅ عملیات روی فایل

🔹 اولین دستور همون تابع open است که در تایپک قبلی مثالش رو زدیم و برای باز کردن فایل ازش استفاده میکنیم .

f = open(filename,mode)

🔹توابعی که برای خواندن خط به خط فایل،یا کل فایل،یا اینکه تعداد کارکتری خاصی از فایل رو بخونیم.این توابع بصورت زیر هستند

f.readline()
f.read()
f.read(n)

🔹برای مشخص کردن موقعیت فایل از تابع seek استفاده میکنیم

f.seek(n)

🔹برای نوشتن در یک فایل از تابع write استفاده خواهیم کرد.

f.write(message)

🔹و برای بستن فایل هم از تابع close استفاده خواهیم کرد.دقت کنید بعد از پایان کار با فایل، باید با این دستور فایل باز شده رو ببندید.

f.close()

🔹و اگر میخواهید چک کنید که فایلتون بسته شده یا خیر میتونید از تابع closed برای اینکار استفاده کنید .و در پاسخ true یا false خواهد داد.

f.closed

🔻  حذف n/ از انتهای خطوط

🔹همانطور که در مثال دیده بودید وقتی یک فایل رو میخونیم یک n/ در انتهای خط به معنای پایان خط نمایش داده می شود برای اینکه بتونیم حذفش کنیم کافیه دستور rstrip که قبلا هم در موردش توضیح دادیم و گفتیم از انتها یک کارکتر رو حذف خواهد کرد استفاده میکنیم.مثال زیر رو ببنید

>>> f = open('D:\Text mining\week-1\Lesson-2\humans.txt','r',encoding='utf-8-sig')

>>> text11 = f.readline()
>>> text11
'Python is an interpreted high-levelprogramming\n'

>>> text11.rstrip()
'Python is an interpreted high-levelprogramming'

✅ مثالهای گوناگون


🔹 تابع split بصورت پیش فرض رشته ها رو از طریق space یا همون فاصله جدا میکنه و کلمات رو استخراج میکنه، اما ما میتونیم داخل پرانتز کارکتر دلخواه خودمون رو بعنوان میعار جدا کردن در نظر بگیریم. مثال زیر رو ببنید:


>>> text4 = "ouagadougou"

>>> text5 = text4.split('ou')

>>> text5

['', 'agad', 'g', '']


▪️خوب در مثال بالا رشته رو بر اساس کارکتر ou جدا کرد.دقت کنید که ما text4 رو نمیتونیم بر اساس میعار فاصله جدا کنیم چون هیچ فاصله ای در این رشته وجود نداره و اگر داخل پرانتر دستور split خالی باشه به ارور خواهیم خورد.


🔹 در دوره مقدماتی در مورد لیست صحبت کردیم و اگر بخواهیم text4 رو تبدیل به لیست کنیم کارکتر به کارکتر داخل یک لیست برامون قرار میده.


>>> list(text4)

['o', 'u', 'a', 'g', 'a', 'd', 'o', 'u', 'g', 'o', 'u']


🔹با استفاده از حلقه for هم امکان ایجاد لیست فوق وجود داره، مثال رو ببنید.


>>> [c for c in text4]

['o', 'u', 'a', 'g', 'a', 'd', 'o', 'u', 'g', 'o', 'u']


🔹 حالا اگر بخواهیم دوباره ou رو به text5 متصل کنیم از دستور join برای اینکار استفاده میکنیم.و نحوه استفاده بصورت زیر خواهد بود


>>> 'ou'.join(text5)

'ouagadougou'



🔹یک رشته جدید تو این مثال خواهیم زد که ابتدای رشته دوتا فاصله وجود داره؛ ما اول میاییم با دستور split کلمات رو جدا میکنیم و اتفاقی که میفته فاصله های ابتدایی رو بعنوان یک کلمه مجزا درنظر میگیره


>>> text6 = '  a quick brown fox jumped over the lazy dog'

>>> text6.split(' ')

['', '', 'a', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog']



🔹حالا اگر بخواهیم این فاصله های اضافی رو برداریم و با توجه به اینکه این موضوع برای مباحث متن کاوی مهم هست که موارد اضافه رو حذف کنیم از دستور strip برای اینکار استفاده خواهیم کرد.


>>> text7 = text6.strip()

>>> text7.split(' ')

['a', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog']



▪️همانطور که در بالا مشاهده میکنیم دیگر فاصله ها در لیست ما قرار ندارند.



مثال دستور find و replace


🔹 در متن جدید میخواهیم کارکتر o رو پیدا کنیم اگر از دستور find استفاده کنیم اولین کارکتر o در متن رو پیدا میکنه و اندیسش رو بعنوان خروجی برمیگردونه. (اندیس در پایتون از صفر شروع میشه)


>>> text8 = "a quick brown fox jumped over the lazy dog"

>>> text8.find('o')

10


🔹 اگر دستور rfind برای اینکار استفاده کنید آخرین کارکتر o در رشته رو پیدا میکنه، بعبارتی از آخر رشته جستجو رو انجام میده.


>>> text8.rfind('o')

40


🔹 و برای جایگزینی کارکتر o با مقدار صفر (0) میتونیم از دستور replace بصورت زیر استفاده کنیم


>>> text8.replace('o','0')

'a quick br0wn f0x jumped 0ver the lazy d0g'

✅ معرفی توابع پایتون برای رشته ها


🔹 تو تایپیک قبل در مورد اینکه چه توابعی برای کلمات در پایتون وجود داره رو گفتیم، الان میخواهیم توابع رو برای رشته ها بگیم. باز یک تعریف کلی داریم و مثال ها رو تو بخش های بعدی خواهیم زد.


1️⃣ تبدیل کردن به حروف کوچک و بزرگ رشته ها و همچنین تبدیل یک رشته به حالت titlecase


s.upper()  ;  s.lower()  ;  s.title()


🔹 نکته ای که در توابع بالا نسبت به توابع مربوط به کلمات هست اینه که ما اینجا is رو نداریم. و در واقع اینجا نماییم بررسی کنیم که، آیا رشته ما با حروف بزرگ تشکیل شده یا کوچک.بلکه اینجا کار تبدیل کردن رو انجام خواهیم داد.


2️⃣ جدا کردن کلمات که بارها تو اسلایدهای قبل ازش استفاده کردیم و در بخش های بعدی هم استفاده خواهیم کرد.


s.split()


3️⃣حالا اگر بخواهیم یک سند رو یا یک پارگراف رو بر اساس خطوط جدا کنیم میتونیم از تایع زیر استفاده کنیم.


s.splitlines()


🔹نکته ای که اینجا هست و شاید براتون سوال باشه اینه چطور میتونیم در IDLE پایتون، یک رشته رو در چند خط بنویسیم.برای اینکار کافیه کوتیشن که برای رشته در ابتدا و انتهاش بکار برده میشه بجای یکی از سه تا استفاده کنیم.


>>> s="""how are

you today"""

>>> s

'how are\nyou today'


4️⃣ تابع join برای اتصال رشته ها به هم هست که ما تو بخش های بعدی مثال های خواهیم زد.


s.join()


5️⃣ تابع بعدی برای حذف می باشد وقتی از strip استفاده میکنیم و داخل پرانتر کارکتری رو وارد میکنیم سبب میشه که اون کارکتر از کل رشته حذف بشه و اگر از rsrtip استفاده کنیم از انتهای رشته فقط یک موردش حذف خواهد شد . حالا مثالهای رو در بخش های بعدی خواهید دید.


s.strip()  ;  s.rstrip()


6️⃣ دستور بعدی برای یافتن یک رشته یا کارکتر داخل رشته دیگه استفاده میشه.اگر عبارت داخل پرانتر در رشته بود اندیس شروع اون عبارت رو بعنوان خروجی برمیگردونه. اما یک تفاوت اساسی در rfind وجود داره اینه که در این تابع حتما باید کلمه مورد نظر بصورت جدا باشه.ما برای این مورد خاص همینجا یک مثال میزنیم


s.find()  ;  s.rfind()


مثال 


>>> s1 = "this is really a string example....wow!!!";

>>> s2 = "is";

>>> s1.find(s2)

2

>>> s1.rfind(s2)

5


🔸 خوب تو مثال بالا کاملا تفاوت این دو تابع مشخصه که ما در rfind کلماتی رو پیدا میکنیم که مجزا باشند و ترکیب شده با حروف دیگری نباشند.


7️⃣ آخرین دستور این بخش دستور جایگزینی یا همون replace هست که میاد تو رشته میگرده و اگر عبارت u  وجود داشت با v جایگزین خواهد کرد.


s.replace(u,v)


🔘 در آخر باید بگم حتما مثالهای گوناگونی برای این بخش خواهیم زد. تا تمام این توابع، کامل توضیح داده باشیم


✅ معرفی توابع پایتون برای کلمات


🔹 در این بخش یک تعریف کلی از این توابع خواهیم داشت و در بخش های بعدی مثال های رو بیان خواهیم کرد.


1️⃣ کلماتی که با یک حرف خاص شروع خواهند شد.


s.startswith()


2️⃣ کلماتی که با یک حرف خاص به اتمام می رسند.(در بخش قبل مثال زدیم)


s.endswith()


3️⃣ بررسی وجود یک کلمه در داخل رشته با دستور in


T in s


4️⃣ تشخیص حروف بزرگ و کوچک در کلمات و همچنین یافتن کلماتی که با حرف بزرگ شروع خواهند شد.


s.isupper()  ;  s.islower()  ;  s.istitle()


5️⃣تشخیص حروف الفبا یا عدد.


s.isalpha()  ;  s.isdigit()  ;  s.isalnum()


▪️تابع اول برای تشخیص حروف الفبا در رشته می باشد که شامل عدد و کارکترهای خاص نباشد.

▪️تابع دوم تشخیص عدد در رشته می باشد.

▪️و تایع سوم میتونه شامل الفبا و عدد باشد اما کارکترهای خاص مثل فاصله و ... را شامل نخواهد شد.


🔸 خروجی سه تا تابع فوق True یا False می باشد.


🔹 در بخش های بعدی برای هر یک از موارد بالا مثال های خواهیم زد.


✅ پیدا کردن کلماتی که یکبار در جمله تکرار شدند یا حذف کلمات تکراری در جملات


▪️ پایتون تابعی به نام set داره که میاد کلماتی که در جمله تکرار شدند رو حذف میکنه. ما در اینجا یک مثال جدید خواهیم زد:


>>> text3 = "To be or not to be"

>>> text3 = text3.split(' ')

>>> len(text3)

6



▪️همانطور که در کد بالا مشاهده میکنیم جمله ما در ابتدا 6 کلمه بود و دو از این کلمات تکراری هست یکی to و دیگری be. حالا اگر بخواهیم با استفاده از set این کلمات تکراری رو حذف کنیم ببنیم چه اتفاقی خواهد افتاد:


>>> len(set(text3))

5

>>> set(text3)

{'not', 'be', 'to', 'To', 'or'}


▪️همانطور که در بالا مشاهده میکنید کد فوق be رو حذف کرد اما to رو نه. قبلا تو پایتون مقدماتی تاکید کردیم که پایتون برای حروف بزرگ و کوچک تفاوت قائل هستش و این دلیل حذف نشدن کلمه to و To هست.خوب راه حل چیه؟


▪️ راه حل اینه که ابتدا بیاییم کل جمله رو تبدیل به حروف کوچک کنیم سپس کلمات تکراری رو حذف کنیم. بوسیله کد زیر:


>>> len(set(w.lower() for w in text3))

4

>>> set(w.lower() for w in text3)

{'to', 'not', 'be', 'or'}


▪️ ابتدا توسط تابع lower تمام حروف رو در یک حلقه for کوچک کردیم بعد از تابع set برای حذف تکراریها استفاده میکنه و در نهایت هم طولش رو نمایش میده و در خط بعد کارکترهای یکتا رو چاپ میکنه.


برای نمایش تصویر در سایز بزرگتر بر روی تصویر کلیک کنید.



✅ پیدا کردن کلمات با ویژگی های خاص


1️⃣ اگر بخواهیم کلماتی که بیش از سه حرف داشته باشند رو، کلمات طولانی بنامیم. با استفاده از حلقه for و تابع len میتوانیم این کلمات رو از جمله فوق استخراج کنیم.


>>> [w for w in text2 if len(w)>3]

['Ethics', 'built', 'right', 'into', 'ideals', 'objectives', 'United', 'Nations.']


▪️ همانطور که در نتیجه مشاهده میکنید تمام کلمات بیش از سه حرف هستند


2️⃣ معمولا در زبان انگلیسی حرف اول اسامی و یا اولین کلمه موجود در جمله با حروف بزرگ نوشته می شود. حالا اگر بخواهیم این کلمات را از جمله استخراج کنیم؛ تابع ()istitle در پایتون اینکار رو برامون انجام میده.


>>> [w for w in text2 if w.istitle()]

['Ethics', 'United', 'Nations.']


▪️ تمام کلماتی که با کارکتر بزرگ شروع میگردند را نمایش داد.


3️⃣ در پایتون اگر بخواهیم کلماتی که به یک کارکتر خاص ختم می شوند رو نمایش بدهیم کافیه از تابع ()endswith استفاده کنیم. داخل پرانتز کارکتری که میخواهیم بهش ختم بشه رو وارد میکنیم. مثال زیر رو ببینید.


>>> [w for w in text2 if w.endswith('s')]

['Ethics', 'ideals', 'objectives']


▪️ نمایش تمام کلماتی که به s ختم می شوند


❇️ در درس اول، در مورد اینکه چرا متن ابزاری مفیدی بر ما هست، و کجاها استفاده شد و چه حجمی از متن رو ما داریم و از این دیتاهای متنی چه استفاده ای میکنیم خدمتتون عرض کردیم.

❇️ در درس دوم در مورد ساختار اولیه متن بررسی های انجام میدهیم و با استفاده از زبان پایتون، عملیات و توابعی که بر روی متن قابل استفاده هستند رو بیان خواهیم کرد.


✅ ساختار اولیه متن

1️⃣ جملات یا رشته های ورودی ( در واقع جملات از یکسری کلمات تشکیل شده است)
2️⃣ کلمات یا نشانه ها ( کلمات از کارکترها تشکیل شده و منظور از نشانه ها علائم نگارشی مثل نقطه، فاصله و ... هست)
3️⃣کارکترها (که کوچکترین جز یک متن رو تشکیل خواهد داد)
4️⃣ سندهای متنی یا فایل های بزرگتر (شما اگر یک سند word در نظر بگیرید از یکسری جملات تشکیل شده که ممکنه تعداد این جملات بسیار زیاد باشه که فایل های بزرگی بوجود خواهد آورد)

◀️ در این درس بر روی این ساختارهای اولیه متن و ویژگی هاش میپردازیم

✅ مثال : در ابتدا یک متن ایجاد میکنیم و داخل متغیر text1 ذخیره میکنیم.

>>> text1 = "Ethics are built right into the ideals and objectives of the United Nations."

▪️برای اینکه طول متن را بدست آوردیم از تابع len برای اینکار استفاده خواهیم کرد.

>>> len(text1)
76

▪️و اگر بخواهیم کلمات داخل متن رو جدا کنیم،میتوانیم از تابع ()split برای اینکار استفاده کنیم، دقت کنید که مقدار داخل پرانتز، کارکتری خواهد بود که سبب جدا شدن کلمات میگردند،که در اینجا باید از اسپس (فاصله) استفاده کنیم

>>> text2 = text1.split(' ')
>>> len(text2)
13

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

>>> text2
['Ethics', 'are', 'built', 'right', 'into', 'the', 'ideals', 'and', 'objectives', 'of', 'the', 'United', 'Nations.']

ادامه دارد...

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