# برمجة شات بوت بأستعمال لغة بايثون و aiml للذكاء الأصطناعي

**URL:** <https://discourse.aosus.org/t/topic/1055>\
**Category:** البرمجة\
**Created:** [30 مايو 2017، 6:22م UTC](https://discourse.aosus.org/t/topic/1055 "2017-05-30T18:22:04Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![MohdHD](https://discourse.aosus.org/user_avatar/discourse.aosus.org/mohdhd/32/114_2.png) [@MohdHD](https://discourse.aosus.org/u/MohdHD)\
**Post date:** [30 مايو 2017، 6:22م UTC](https://discourse.aosus.org/t/topic/1055/1 "2017-05-30T18:22:04Z")

</div>

![](https://cdn-cf-discourse.aosus.org/original/2X/6/67bd5025e7d7459cdd1a6dfc7df0f2c64c09389e.png)

**السلام عليكم و رحمة الله تعالى و بركاته**

سأشرح في هذه الدورة لغة **AIML** وهي أختصار لــ **A** rtificle **I** ntelligence **M** arkup **L** anguage وهي لغة مبنيه على XML و تستعمل تقنيات الذكاء الاصطناعي لبرمجة الشات بوت.

في هذه الدوره سأتدرج بشرح أساسيات AIML ثم بعد ذلك ساقوم بعمل بوت باستخدام لغة AIML و مكتبة بايثون معده للتعامل مع اللغة.

**اولاً سنقوم بتحميل مكتبة البايثون المطلوبه للتعامل مع AIML**

قم بتحميل الملف التالي [Py3kaiml](https://github.com/mpegman/Py3kAiml)

بعد التحميل قم بفك الضغط عن الملف بأستعمال الأمر

```
unzip pyaiml3-master.zip 

```

بعد ذلك قم بالأنتقال الى المجلد الذي نتج

```
cd pyaiml3-master

```

ثم قم بتثبيت المكتبه

```
sudo python3 setup.py install

```

أو

```
python3 setup.py install --user

```

الان قم بكتابة

```
python3

```

ثم بعد ذلك

```
import aiml

```

اذا لم ينتج اي خطأ اذا فقد تم تثبيت المكتبه بنجاح.

الأن سننتقل الى شرح أساسيات AIML .

## أساسيات لغة AIML

قم بأنشاء ملف نصي ثم قم بتسميته main.aiml سنقوم بكتابة كود aiml في هذا الملف.

لغة aiml من **tags** كتلك التي في xml و html وفي أي ملف aiml لابد من توفر تاغات أساسيه وهي :

- aiml tag
- category tag
- pattern tag
- template tag

**اولا aiml**  
و هو يمثل الجذر و يستخدم لتحديد بداية ملف aiml و نهايته  
كالصيغة التاليه.

```
<aiml>
 .....................
 .....................
 ..................... 
</aiml>

```

ثانيا **category**

و هو تاغ يمثل الوحده المعرفيه بمعنى انه يحتوى على نمط يمثل أدخال المستخدم و الأستجابه في حالة تم مطابقة هذا النمط. حيث يتم كتابه النمط الذي يمثل أدخال المستخد في **\< pattern\>** و الجواب الذي يمثل الأستجابه في **\< template \>**.

فمثلا إذا أردنا عمل برنامج يقوم بالرد على المستخدم بـــ hello user متى ما قام المستخد بأدخال hello bot فسيكون كالتالي:

```xml

<aiml>

<category>

<pattern> HELLO BOT</pattern>

<template> hello user </template>

</category>

</aiml>

```

لأحظ أن نمط الأدخال مكتوب بالحروف الكتابه و بنمط أقصد ان المستخدم اذا ادخل مثلاً Hello Bot أو hello Bot أو HELLO bot فسيتم المطابقة في كل حاله من الاحوال سوى أكانت حروف كبيره او صغير.ثم سيخرج للمستخدم على الشاشه hello user .

**ملاحظه: اللغه تدعم العربيه**

الأن للتشغيل البرنامج السابق سنقوم بكتابة كود بايثون.

```python

import aiml  

kernel = aiml.Kernel() #عمل كائن يمثل نواة البوت

kernel.learn("main.aiml") #تعليم ملف aiml الى البوت 

user_input = input("talk to me >> ") #أدخال المستخدم

bot_output = kernel.respond(user_input) #داله تستقبل أدخال المستخدم ثم تقوم بمعالجته كم موجود في ملف و تُرجع الأستجابه في شكل سلسله نصيه.

print(bot_output) #طباعة استجابة البوت

```

عند تشغيل الاسكربت السابق فأن المخرج كالاتي:

```bash

Loading main.aiml... done (0.08 seconds)
talk to me >> hello bot
hello user

```

الأن و قد انتهينا من أساسيات كتابة aiml و تشغيلها مع البايثون سننتقل الى أستخدامات التاغات الاخرى

سنطلع عن طريقه الحصول على بعص البيانات من المستخدم حيث أن aiml تدعم بعض wildcard مثل **\_** و **\***. فمثلا اذا أردنا الحصول على أسم المستخدم فسيتم عن طريق التالي:

```xml

<aiml>

<category>

<pattern> MY NAME IS *</pattern>

<template> hello <star/>, nice to meet you </template>

</category>

</aiml>

```

حيث نقوم بأستعمال \< /star\> للحصول على مدخل المستخدم. كما يمكن أيضاً استعمالها مع **index** للحصول على عدة مدخلات فمثلا اذا كان هناك نجمتان و أردنا معرفه كليهما فسيتم كالتالي:

```auto

<category>

<pattern>A * IS A *</pattern>

<template> yes of course a <star index="1"/> is a <star index="2"/> </template>

</category>

</aiml>

```

فكما لأحظنا للوصول للمحتوى إحدى النجمتين فأننا نستعمل الخصيصه index و نعطيها قمية تمثل ترتيب النجمه التي نريدها.

فأذا قمنا بتجربه البرنامج الأن فأن المخرج سيكون:

```bash
Loading main.aiml... done (0.08 seconds)
talk to me >> a car is a vehicle
yes of course a car is a vehicle

```

\< set\> و \< get/\>  
تسخدم \< set\> و \< get/\> لحفظ البيانات و جلبها متغيرات و ذلك لحفظ بيانات المسخدم في حالة الحاجه اليها مره اخرى فمثلا اذا أردنا حفظ أسم المستخدم و الأجابه عنه في حالة سئل منه البوت مره اخرى. فسيتم كالتالي:

```xml
<aiml>

<category>

<pattern>MY NAME IS *</pattern>

<template>hello <set name="username"><star/></set></template>

</category>

<category>

<pattern>BYE</pattern>

<template>bye <get name="username" /></template>

</category>

</aiml>

```

و من ثم نقوم بتعديل كود البايثون حيث نحتاج الى أدخال مستمر

```python
import aiml  

kernel = aiml.Kernel()     

kernel.learn("main.aiml")   

while True:
    print(kernel.respond(input("talk to me >> ")))

```

الأن المخرج سيكون كالتالي:

```bash
Loading main.aiml... done (0.08 seconds)
talk to me >> my name is mohamed
hello mohamed
talk to me >> bye
bye mohamed
talk to me >> 

```

Bot Tag  
تستعمل البوت تاغ في ضبط بيانات خاصه بالبوت و ذلك عن طريق كود البايثون فمثلا إذا أرادنا ضبط اسم للبوت فسيكون كالتالي:

```python
import aiml  

kernel = aiml.Kernel()     

kernel.learn("main.aiml")   

kernel.setBotPredicate("botname","alpha")

while True:
    print(kernel.respond(input("talk to me >> ")))

```

كود aiml

```xml
<aiml>

<category>

<pattern>YOU</pattern>

<template>my name is <bot name="botname"/></template>

</category>

</aiml>

```

فأن المخرج سيكون:

```bash
Loading main.aiml... done (0.08 seconds)
talk to me >> you
my name is alpha

```

Random Tag

تسخدم لأعطى المستخدم أجابه عشوائيه من بين أجابات أخرى  
مثلا:

```xml
<aiml>

<category>

<pattern>HELLO</pattern>

<template>

<random>
<li>hello</li>
<li>hi</li>
<li>welcome</li>
</random>

</template>

</category>

</aiml>

```

srai tag تسخدم لأختصار الأنماط فمثلا اذا كان هناك اكثر من نمط لهم نفس الاجابة فيمكن الوصول لأستجابة نمط موجود كالتالي:

```xml
<aiml>

<category>

<pattern>HELLO</pattern>

<template>

<random>
<li>hello</li>
<li>hi</li>
<li>welcome</li>
</random>

</template>

</category>

<pattern>WELCOME</pattern>

<template><srai>HELLO</srai></template>

</category>

</aiml>

```

ايضا يوجد that tag  
و هو تاغ يستخدم للأستجابه لرد محدد فمثلا اذا أرادنا سؤال المستخدم عما اذا كان يحب أفلام الأكشن وجأوب بنعم فسيرد البوت عليه.  
مثال:

```xml
<aiml>

<category>

<pattern>MOVIES</pattern>

<template>
do you like action movies?
</template>

</category>

pattern>YES</pattern>
<that>do you like action movies?<that>
<template>nice, I like them too.</template>

</category>

</aiml>

```

و هكذا نكون قد أنتهينا من هذا الدرس 🙂 أمل أن يكون قد أعجبكم . و قبل أن أختم طبعا من الممتع كتابة اكواد aiml لكن هناك بالفعل أكواد جاهزه على الأنترنت تتكون من الاف الأسطر و تدعم أغلب الممحادثات التي يمكن أن تواجه البوت تجدونها في موقع البوت Alice و في روابط المصادر في الأسفل.

- [Alice.org](http://www.alicebot.org/aiml/aaa/)
- [square-Bear](http://www.square-bear.co.uk/aiml/)
- [Rosie Chatbot](https://github.com/pandorabots/rosie/tree/master/lib/aiml)
- [chatterbots collection](http://www.chatterbotcollection.com/category_contents.php?id_cat=20)
