Ehsan Bagheri
Ehsan Bagheri
خواندن ۹ دقیقه·۴ سال پیش

ویراستاری (افزونه افیس برای ورد) بخش سوم

ویراستاری منوی خلاصه ساز
ویراستاری منوی خلاصه ساز

افزایش امکانات خلاصه ساز

چیزی که تقریبا همه روی آن تاکید دارند استفاده نکردن از رشته ها برای مقادیر ثابت است. من اینجا قصد ندارم تفاوت مقادیر ثابت و یک رشته را ذکر کنم و هر کسی که دوست داشته باشد میتوانید از گوگل جستجو کند

در عوض من دوست دارم به بخشی از کد خلاصه ساز اشاره کنم به دلیل استرس زمان برای تجزیه جملات انگلیسی و فارسی نوشته شده است. به طور خلاصه این بخش به این صورت کار میکند که سعی در برسی حروف جمله و کاراکترها مینماید و در نهایت تمیز میدهد که جمله فارسی یا انگلیسی است.

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

از طرف دیگر، راه فهم کلمات به جستجوی یک فرهنگ لغت بزرگ و اساساً انجام تطبیق قالب بستگی دارد. در اینجا دو اشکال اصلی وجود دارد:

1- هر یک از زبان‌ها باید یک فرهنگ لغت گسترده از کلمات را در پرونده داشته باشند که مدت زمان نسبتاً طولانی به جستجو می‌طلبد

2- اگر هیچکدام از کلمات موجود در آن نباشد، دنباله های کلمات شکست خواهند خورد. مجموعه آموزش در مجموعه تست‌ها گنجانده شده است.


مشکل تشخیص زبان این است که زبان انسان (کلمات) دارای ساختار است. به عنوان مثال، در انگلیسی، معمولاً حرف "u" پیروی از حرف "q" است، در حالی که در عربی اینگونه نیست. n-gram با گرفتن این ساختار کار می‌کند. بنابراین، ترکیب خاصی از حروف در بعضی از زبانها از سایر زبانها محتمل است. این اساس طبقه بندی n-gram است.


انگرام چیست و چرا به آنها احتیاج داریم؟

مفهومی که در پردازش زبان طبیعی (با نام مستعار NLP) یافت شده است. اول از همه ، بگذارید ببینیم اصطلاح "N-gr" به چه معنی است. معلوم است که ساده ترین بیت است ، یک N-gram به سادگی دنباله ای از کلمات N است. به عنوان مثال ، اجازه دهید نگاهی به مثالهای زیر بیندازیم.

سان فرانسیسکو (2 گرم است)
سه تفنگ دار (یک 3 گرم)
او به آرامی ایستاد (4 گرم است)

اکنون کدامیک از این سه گرم N به طور مکرر دیده اید؟ احتمالاً ، "سان فرانسیسکو" و "سه تفنگ دار". از طرف دیگر ، ممکن است شما ندیده باشید که "او آهسته ایستاده باشد". در اصل ، "او به آرامی ایستاد" نمونه ای از N-گرم است که به طور مثال در جملات به عنوان مثال 1 و 2 رخ نمی دهد.

حال اگر احتمال وقوع N-gram یا احتمال وقوع کلمه بعدی را در توالی کلمات ایجاد کنیم ، می تواند بسیار مفید باشد. چرا؟

اول از همه ، این می تواند در تصمیم گیری كدام گروه های N را به صورت یكدیگر متشكل شود (مانند "سان فرانسیسكو" كه به عنوان یك كلمات جمع می شوند ، كمك می كند. همچنین می تواند به پیش بینی کلمات بعدی کمک کند. اگر بگوییم که جزیی از جمله "لطفا دست خود را تحویل دهید" دارید. بنابراین بیشتر محتمل است که کلمه بعدی "تست" یا "واگذاری" یا "کاغذ" باشد تا کلمه بعدی "مدرسه" باشد.

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

اکنون که این مفهوم را درک کردیم ، می توانیم با آن بسازیم: این مدلN-gram است. در اصل ، یک مدل N-گرم وقوع یک کلمه را بر اساس وقوع کلمات قبلی N - 1 آن پیش بینی می کند. بنابراین در اینجا ما در حال پاسخ دادن به این سؤال هستیم - در تاریخ دنباله ای از کلمات تا چه اندازه باید پیش برویم تا کلمه بعدی را پیش بینی کنیم؟ به عنوان مثال ، یک مدل bigram (N = 2) وقوع کلمه ای را نشان می دهد که فقط کلمه قبلی آن است. مانند N - 1 = 1 در این مورد. به طور مشابه ، یک مدلtrigram (N = 3) وقوع یک کلمه را بر اساس دو کلمه قبلی خود به عنوان N - 1 = 2 در این مورد پیش بینی می کند.

بگذارید راهی را برای تخصیص احتمال به کلماتی که در ادامه دنباله ای از کلمات اتفاق می افتد ، ببینیم. اول از همه ، به نمونه بسیار بزرگی از جملات انگلیسی به نام corpus نیاز داریم.

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

گفت تشکر ازت.
او با عبور از در گفت خداحافظ.
او به سن دیگو رفت.
سن دیگو آب و هوای خوبی دارد.
در سان فرانسیسکو باران می بارد.

بیایید یک مدل bigram فرض کنیم. بنابراین می خواهیم احتمال یک کلمه را فقط بر اساس کلمه قبلی آن بیابیم. به طور کلی ، می توان گفت که این احتمال است

(تعداد دفعاتی که کلمه قبلی "wp" قبل از کلمه"wn" رخ می دهد) / (تعداد کل دفعاتی که کلمه قبلی"wp" در بدنه اتفاق می افتد)

(Count (wp wn))/(Count (wp))

بیایید این کار را با مثال انجام دهیم. برای پیدا کردن احتمال کلمه "ازت" به دنبال کلمه "تشکر" ، می توانیم آنرا به صورت P (ازت | تشکر کنید) بنویسید که یک احتمال شرطی است. این برابر است با:

= (تعداد بار "تشکر" اتفاق می افتد) / (تعداد دفعات "تشکر" رخ می دهد)
= 1/1
= 1

با اطمینان می توانیم بگوییم که هر وقت "تشکر" اتفاق می افتد ، "ازت" دنبال می شود (دلیل این است که ما فقط در یک مجموعه از پنج جمله آموزش دیده ایم و "تشکر" فقط یک بار در متن "تشکر ازت" اتفاق افتاده است). بیایید نمونه ای از مواردی را مشاهده کنیم که کلمه قبل در متن های مختلف رخ می دهد.

بیایید احتمال کلمه "دیگو" را که پس از "سان" آمده است ، محاسبه کنیم. ما می خواهیم P (دیگو | سان) را بیابیم. این بدان معنی است که ما می خواهیم با توجه به کلمه "سان" این احتمال را پیدا کنیم که کلمه بعدی "دیگو" باشد. ما می توانیم این کار را توسط:

= (بارها و بارها "سن دیگو" رخ نمی دهد) / (تعداد دفعات "سان" رخ می دهد)

= 2/3

= 0.67

این امر به این دلیل است که در گروه ما ، یکی از سه "سن" قبلی "فرانسیسکو" دنبال می شد. بنابراین ، P(فرانسیسکو | سان) = 1/3.

در گروه ما ، فقط "دیگو" و "فرانسیسکو" بعد از "سان" با احتمالات 2/3 و 1/3 اتفاق می افتند. بنابراین اگر بخواهیم یک نرم افزار پیش بینی کلمه بعدی را بر اساس بدنه خود و انواع کاربر در "سان" ایجاد کنیم ، دو گزینه خواهیم داشت: "دیگو" به احتمال زیاد و "فرانسیسکو" به احتمال زیاد رتبه بندی نشده است.


به طور کلی ، مدل bigram خوب کار می کند و ممکن است نیازی به استفاده از مدل های تریگرام یا مدلهای N-گرم بالاتر نباشد.

حدس زدن کلمات بعدی
حدس زدن کلمات بعدی



برگردیم به بحث اصلی با فرض اینکه از bigrams استفاده می‌کنید (n = 2) و در حروف الفبای شما 26 حرف وجود دارد، پس فقط 26 ^ 2 = 676 مورد برای آن الفبا وجود دارد که بسیاری از آنها هرگز رخ نمی‌دهند. بنابراین، "پروفایل" (برای استفاده از کلمات ردیاب زبان) برای هر زبان به یک بانک اطلاعاتی بسیار کوچک نیاز دارد. یک طبقه بندی کننده کلمات از کلمات، از طرف دیگر به یک فرهنگ لغت کامل برای هر زبان نیاز دارد تا بتواند اطمینان حاصل کند که یک زبان بر اساس هر جمله گفته شده قابل تشخیص است.

به طور خلاصه - هر پروفایل زبان می‌تواند به سرعت با یک فضای ویژگی نسبتاً کوچک تولید شود. جالب اینجاست که n-gram فقط به این دلیل کار می‌کند که حروف به یک زبان ترسیم نمی‌شوند.

بنابراین سیستم مبتنی بر محاسبه و مقایسه پروفایل های زبان فرکانس های N-gr است. این سیستم با استفاده از داده های آموزشی برای زبان مورد نظر ، یک پروفایل زبان برای N-gram ها ایجاد می کند و بعداً از این پروفایل ها برای شناسایی آن استفاده می کند. با توجه به اینکه یک سند جدید برای طبقه بندی وجود دارد ، سیستم نمایه N-gram این سند (مشخصات سند) را محاسبه می کند و فاصله این پروفایل سند و پروفایل های زبان را برای همه زبانهای پشتیبانی شده مقایسه می کند. مشخصات زبان با حداقل فاصله برای نشان دادن زبان شناسایی شده در نظر گرفته می شود.

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

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

دانلود برنامه از طریق زیر میسر است

https://github.com/ehsan2022002/VirastarE

ویرستارآفیسوردویراستاریواژه پرداز
گاهی که وقت پیدا کنم ... https://www.linkedin.com/in/bagheriehsan
شاید از این پست‌ها خوشتان بیاید