نمایش نتایج 1 تا 4 از 4

نام تاپیک: چک کردن غلط املایی

  1. #1

    چک کردن غلط املایی

    سلام
    دوستان کدی در جاوا وجود داره که بشه غلط املایی رو در متن انگلیسی تشخیص بده و کلمه درست رو جایگزین کنه؟
    ممنون میشم راهنمایی کنید

  2. #2

    نقل قول: چک کردن غلط املایی

    خواهش میکنم یکی راهنمایی کنه..
    کسی تا حالا انجام نداده؟

  3. #3
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

    نقل قول: چک کردن غلط املایی

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

    1- چک کردن غلط املایی (spell checking):
    اینکه یک کلمه غلط املایی دارد یا خیر سادست. کافیه مجموعه واژگانی داشته باشید و راحت میتونید در یک HashSet ذخیره کنید و رشته ورودی رو کلمه به کلمه استخراج کنید و چک کنید. البته هنگام استخراج کمی پالایش هم لازمه مثلا از نظر بزرگ یا کوچک بودن حروف با مجموعه واژگان یکسان باشد، کاراکترها فقط حروف باشند و بقیه رو حذف کنید و...

    2- تصحیح غلط املایی (spell correction):
    اینکار ساده نیست. در حد سادش در تاپیک دیگه ای بحث شده و میتونید استفاده کنید (https://barnamenevis.org/showthread.php?547938 که البته لینکش حذف کردن و همچنین خودتون هم مشارکت داشتید پس دیدید).
    اما در قسمت اول تشخیص میدید کلمه غلط املایی دارد و میخواهید تصحیحش کنید. تصحیح کلمات وارد حوزه تحقیقاتی میشه و یک روش کامل و ایده آل وجود نداره که بشه یک الگوریتم واحد معرفی کرد و حتی فقط وابسته به الگوریتم نیست. برخی الگوریتم ها هم خیلی پیچیده هستند و گرامر زبان ها رو هم وارد کردند. شاید بهترین نمونه ای که سراغ داشته باشیم سرچ انجین گوگل باشه که نه کدش در دسترسه و اگر باشه هم احتمالا خیلی پیچیده باشه و همچنین گوگل وارد حوزه هوش مصنوعی شده و قطعا از هوش مصنوعی استفاده میکنه. هوش مصنوعی هم نیاز به آموزش داره که گوگل از میلیاردها صفحه اینترنتی برای آموزش موتورش استفاده میکنه. پس به هیچ وجه کار ساده ای نیست.

    علت ساده نبودن این کار:
    فرض کنید من یک کلمه مینویسم wate. حتی شما نمیتونید بگید منظور من چی بوده و غلط املاییش به چه معناست.
    اما فرض کنید من میگم "I wate to play ping-pong" خب الان میتونید بگید غلط املایی تصحیح شدش میشه want. یه جمله دیگه "I drink wate" که اینجا منظورم water بوده.
    خب این دو جمله رو من تو گوگل سرچ کردم و دقیق تصحیحشون کرد. یا حتی ممکنه کلمه به خودی خود غلط املایی نباشه مثلا "do you went anything?" یا "you went to school" با اینکه کلمه went که گذشته go هست کلمه صحیحی است ولی گوگل در مثال اول با توجه به جمله want رو پیشنهاد میکنه. یا good و god که قبلا هم مثال زدم.
    این هم علتش اینه با توجه به جملاتی که در صفحات اینترنتی هست سیستمش رو آموزش داده. پیشرفت هوش مصنوعی هر چند عالی بوده ولی هنوز از هوش انسان ضعیف تره در این موارد.

    با این حال شما نمیتونید دنبال یک راهکار کامل باشید. هر راهکاری نسبی هست و در مواردی موفق و در مواردی ناموفق. اون لینکی که قبلا هم دیدید بعضی جاها موفقه.

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

  4. #4
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

    نقل قول: چک کردن غلط املایی

    مثلا یه راهکار خیلی بد (هر چند از نظر سرعت و حافظه مصرفی اصلا بهینه نیست و پیاده سازیشم اصلا منطقی نیست):

    این داده ساختار درختی رو در نظر بگیر. هر گره یک حرف رو ذخیره میکنه و یک متغیر boolean که بگه مسیر ریشه تا این گره یک کلمه رو تشکیل میده یا نه. سطح اول ریشه که هیچی.
    برای هر کلمه از ریشه کلمه به کلمه پیش میری و اگر به حرفی رسیدی و تمام شد که درست بود خب کلمه درسته (هر چند قبلش با HashSet چک کردی درسته و نیازی نیست این مسیر طولانی و زمان بر طی بشه). اما اگر غلط بود با رفتن به بالا یا پایین و حروف کناریش و... میتونید انواع پیشنهاداتی که نزدیکش هستند رو بدید.

    اما همونطور که گفتم هر راهی خوبی ها و بدی هایی داره. اینم بدی هایی داره به جز حافظه زیادی که میبره (برای بهبود حافظه فکر کنم میشه از B-tree استفاده کرد و کلمه به کلمه ذخیره کرد تا حرف به حرف هر چند بازم درختش خیلی بزرگ میشه)، ممکنه اولین حرف اشتباه باشه و در این صورت پیشنهادات خیلی پرت خواهد بود.

    تو تصویر زیر نمونه درختی که گفتم رو میبینید که برای مجموعه واژگان محدودی ایجاد شده. خب فرض کنید من مینویسم ar اونوقت به یک خونه قرمز میرسم که یعنی این کلمه غلطه (هر چند قبلش با HashSet چک کردیم و میدونیم غلطه). خب میتونیم تو درخت بالا یا پایین بریم و چندتایی بهش پیشنهاد بدیم مثلا بگیم a صحیحه و are. یا نمیدونم اگر کلمه doo بنویسیم باز همین کار رو بکنه و وقتی میره به حرف دوم که رسید مسیر دیگه ای نداره. خب میتونه دو تا کلمه کامل زیر شاخش و فعلی یا بالایی رو پیشنهاد بده. مثلا does و dorm و do و حتی d. و هر چی دورتر مثلا احتمال کمتری پیشنهاد بده. از اینکارا میشه کرد. ولی برای همینم صدتا مثال میتونم بزنم که عملکردش افتضاح باشه. مثلا مینوسم dor ولی چون تو این بیشتر حرف رو کم یا زیاد میکنه، مثلا ممکنه door صحیح باشه (فرض کنید تو این درخت رسم کرده باشم) ولی dorm و do رو زودتر پیشنهاد میده و جوری نیست که وسط کلمه یا اول کلمه رو تصحیح کنه. یا شاید worm (به معنی کرم) نوشته باشم و تو درخت هم این نباشه اما میاد تو شاخه w و wo و wor میچرخه در حالی که حرف اول اگر d بود درست میشد. شاید war رو پیشنهاد بده ولی dorm رو نه!

    توجه: تو عکس زیر does منظورم بوده که doos تو درخت اشتباه نوشتم.

    و نکته پایانی: در گوگل spell checking , spell correction در جاوا رو سرچ کنید، راه ایده آلی وجود نداره و همه اینها رو گفتم که نگید چرا فلان الگوریتم این خروجی رو میده یا فلان. این زمینه تحقیقاتی و پردازش متن هست و شرکت های بزرگ رو اینا کار میکنن و اتفاقا پول خوبی هم توش هست ولی اینجوری نیست که یک نفر کدی بنویسه و عالی کار کنه همیشه. حتی Microsoft Word رو ببینید هم هیچ وقت غلط املایی رو تصحیح نمیکنه بلکه چندتایی پیشنهاد میده که اونم ممکنه کلمه مورد نظرت بینش باشه یا هم نه
    عکس های ضمیمه عکس های ضمیمه
    آخرین ویرایش به وسیله vahid-p : دوشنبه 17 اردیبهشت 1397 در 14:31 عصر

تاپیک های مشابه

  1. غلط املایی
    نوشته شده توسط Gladiator در بخش گفتگو با مسئولین سایت، درخواست و پیشنهاد
    پاسخ: 0
    آخرین پست: جمعه 28 فروردین 1383, 13:12 عصر
  2. ریشه کن کردن سارس: چک کردن مسیرها در کامپایلرهای مختلف ++C
    نوشته شده توسط Anti_Evil در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 5
    آخرین پست: یک شنبه 26 بهمن 1382, 14:28 عصر
  3. چک کردن وضعیت چند باتون قبل از خروج
    نوشته شده توسط Gladiator در بخش برنامه نویسی در Delphi
    پاسخ: 4
    آخرین پست: یک شنبه 11 آبان 1382, 22:53 عصر
  4. چک کردن وجود جدول در بانک اطلاعاتی
    نوشته شده توسط v_shalchian در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 2
    آخرین پست: یک شنبه 30 شهریور 1382, 10:01 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •