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

نام تاپیک: هوش مصنوعی در برنامه چت با روبات

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1
    کاربر دائمی آواتار _behnam_
    تاریخ عضویت
    مهر 1389
    محل زندگی
    سونای ایران ( بوشهر )
    پست
    988

    نقل قول: هوش مصنوعی در برنامه چت با روبات

    نقل قول نوشته شده توسط xxxxx_xxxxx مشاهده تاپیک
    این کار اشکالی نداره، اما یک کار اضافی هست.

    بحث عبارات باقاعده که مفصله ولی برای مثال همین khobi و khoooooooobi رو توضیح میدم.

    بعد از اینکه کتابخونه مذکور رو اضافه کردید، کد زیر رو بنویسید:

    Dim objRegExp As RegExp
    Dim collMatches As MatchCollection
    Set objRegExp = New RegExp

    objRegExp.Pattern = "kho*bi"
    Set collMatches = objRegExp.Execute("khoooooooooooooobi")
    MsgBox collMatches(0)
    به همین سادگی به همین خوشمزگی!
    Pattern ما اینجا kho*bi هست. علامت ستاره (*) یکی از کاراکترهای ویژه هست به معنی تکرار. یعنی کاراکتر قبلیش (حرف o) در صورت تکرار پذیرفته است.
    رشته موردنظرتون رو برای تطبیق باید بدید به متود Execute. خروجیش روی یک مجموعه Set میشه که برای دسترسی به عناصر اون مجموعه باید از For Each استفاده کنید. اما چون اینجا یک تطبیق بیشتر نداریم، نیازی به For Each نیست و مستقیم Index شماره 0 رو نمایش میدیم.

    به طور پیشفرض به حروف کوچک و بزرگ حساس هست. برای Insensitive کردن باید خاصیت IgnoreCase رو True کنید:
    objRegExp.IgnoreCase = True
    موفق باشید/
    یه مشکل هست . اگه کلمه همخونی نداشته باشه اررور میده . چطوری جلو اررور رو بگیرم ؟

  2. #2
    VIP آواتار xxxxx_xxxxx
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    X place
    سن
    34
    پست
    4,768

    نقل قول: هوش مصنوعی در برنامه چت با روبات

    نقل قول نوشته شده توسط _behnam_ مشاهده تاپیک
    یه مشکل هست . اگه کلمه همخونی نداشته باشه اررور میده . چطوری جلو اررور رو بگیرم ؟
    دو راه دارید.
    یکی اینکه قبل از ارسال رشته موردنظرتون به متود Execute ابتدا اونو به متود Test بدید. متود Test کارش این هست که بررسی کنه ببینه آیا چیزی تطبیق میکنه یا نه. اگر جواب مثبت باشه، True برمیگردونه، در غیر اینصورت False.
    If objRegExp.Test("khooooooobi") = True Then
    این کارو باید قبل از Execute انجام بدید.
    ترجیحاً رشته خودتون رو توی یک متغیر قرار بدید و اون متغیر رو به این متودها بدید. نه اینطوری که من نوشتم.

    راه دوم اینه که قبل از اینکه آیتم شماره 0 رو نمایش بدید، ببرسی کنید ببینید اصلاً MatchCollection شما آیتمی داره یا نه:
    If collMatches.Count > 0 Then MsgBox collMatches(0)
    Property پیشفرض در MatchCollection همون Item هست. من برای خلاصه سازی، Item رو نمی نویسم. وگرنه اصلش اینطوریه:
    If collMatches.Count > 0 Then MsgBox collMatches.Item(0)
    کلاس RegExp انعطاف پذیری بالایی داره. به طور مثال شما میتونید توی برنامه تون، کل جمله ای که کاربر به روبات میگه رو با یکبار ارسال به متود Execute تحلیل کنید. برای تحلیل رشته های چندخطی باید خاصیت MultiLine رو True کنید. و برای اینکه اگر بیش از یک تطبیق در رشته تون وجود داشت، همه اش رو برگردونه باید خاصیت Global رو True کنید. و برای اینکه به همه آیتم های تطبیق شده دسترسی داشته باشید خیلی راحت با یک For Each میتونید همشون رو دریافت کنید.

    موفق باشید/
    الگوریتم هایی که تاریخچه خود را فراموش می کنند، محکوم به تکرار آن هستند.

برچسب های این تاپیک

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

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