├── images
├── knn.png
├── pca.png
├── formol.jpg
├── images.jpeg
├── khodro.png
├── rabei.png
├── Naivebais.png
├── chameleon.jpg
├── images-1.png
├── integrate.png
├── oghlidosi.png
├── all-algorithem.gif
├── Calinski-Harabasz.png
├── internal-measure.png
├── Logestic-Regression.jpg
├── Tree-in-Machine-Learning.png
├── An-example-of-random-forest-classifier.png
├── principal-component-analysis-pca-featured.png
├── selvaraj_confusion_matrix_precision_recall.webp
├── SVM-classifier-model-SVM-support-vector-machine.png
└── MultiLayer-Perceptron-MLP-sturcture-334-MultiLayer-Perceptron-Classifier-MultiLayer.png
├── ChatBot
├── words.pkl
├── classes.pkl
├── response.mp3
├── words_fa.pkl
├── classes_fa.pkl
├── chatbot_model.h5
├── chatbot_model_fa.h5
├── README.md
├── ecommerce
├── khodro.ipynb
├── makemodel.py
├── TalkAi.md
├── main.py
└── Persian_Health_Chatbot_Article.md
├── NeuralComputing
├── 10-K-Fold-Cross-Validation.png
├── Session_3.md
├── Session_5.md
└── Quize.md
├── language-translator-ml-codes
├── s2s
│ ├── saved_model.pb
│ ├── keras_metadata.pb
│ └── variables
│ │ ├── variables.index
│ │ └── variables.data-00000-of-00001
├── training_data.pkl
└── langTraining.py
├── agi
├── len_file.py
├── main.py
├── train.py
├── finetune.py
├── analyze.py
├── quality_sound.py
├── finetun_wac.py
├── repair_sound.py
└── fine_tuning_DeepSeek_Llama_80.py
├── Dr-rabiee
├── index.ipynb
├── CTMC.md
└── main.ipynb
├── LICENSE
├── Course
├── QT
│ ├── README.md
│ ├── 01_window.md
│ ├── 02_basic_widgets.md
│ ├── 03_signals_slots.md
│ ├── 04_layouts.md
│ ├── 10_stylesheet.md
│ ├── 07_calculator.md
│ ├── 06_file_dialog.md
│ ├── 05_menus_toolbar.md
│ ├── 08_text_editor.md
│ ├── 09_advanced_widgets.md
│ └── qt-document.rts
├── blob_setiment_pos_neg.ipynb
├── Bagging_Boosting.md
└── NLTK
│ └── NLTK.md
├── README.md
├── دوره-متوسطه--ماشین-لرنینگ.md
├── مقدماتی-ماشین-لرنینگ.md
├── سطح-پیشرفته-هوش-مصنوعی.md
├── Mr_Salmani.md
├── Genetic.md
├── main.py
├── سطح-پیشرفته-پایتون.md
├── gold.md
├── test.ipynb
├── سرفصل_آموزش_پایتون_مقدماتی.md
├── ترم-دوم-سطح-متوسطه.md
├── Alborz.md
├── Dr_Akbari
└── Varianse_classes.md
├── more.html
├── index.html
├── main.html
├── dr-akbari2.md
└── Insurance.md
/images/knn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/knn.png
--------------------------------------------------------------------------------
/images/pca.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/pca.png
--------------------------------------------------------------------------------
/ChatBot/words.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/ChatBot/words.pkl
--------------------------------------------------------------------------------
/images/formol.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/formol.jpg
--------------------------------------------------------------------------------
/images/images.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/images.jpeg
--------------------------------------------------------------------------------
/images/khodro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/khodro.png
--------------------------------------------------------------------------------
/images/rabei.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/rabei.png
--------------------------------------------------------------------------------
/ChatBot/classes.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/ChatBot/classes.pkl
--------------------------------------------------------------------------------
/ChatBot/response.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/ChatBot/response.mp3
--------------------------------------------------------------------------------
/ChatBot/words_fa.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/ChatBot/words_fa.pkl
--------------------------------------------------------------------------------
/images/Naivebais.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/Naivebais.png
--------------------------------------------------------------------------------
/images/chameleon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/chameleon.jpg
--------------------------------------------------------------------------------
/images/images-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/images-1.png
--------------------------------------------------------------------------------
/images/integrate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/integrate.png
--------------------------------------------------------------------------------
/images/oghlidosi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/oghlidosi.png
--------------------------------------------------------------------------------
/ChatBot/classes_fa.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/ChatBot/classes_fa.pkl
--------------------------------------------------------------------------------
/ChatBot/chatbot_model.h5:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/ChatBot/chatbot_model.h5
--------------------------------------------------------------------------------
/images/all-algorithem.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/all-algorithem.gif
--------------------------------------------------------------------------------
/ChatBot/chatbot_model_fa.h5:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/ChatBot/chatbot_model_fa.h5
--------------------------------------------------------------------------------
/images/Calinski-Harabasz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/Calinski-Harabasz.png
--------------------------------------------------------------------------------
/images/internal-measure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/internal-measure.png
--------------------------------------------------------------------------------
/images/Logestic-Regression.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/Logestic-Regression.jpg
--------------------------------------------------------------------------------
/images/Tree-in-Machine-Learning.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/Tree-in-Machine-Learning.png
--------------------------------------------------------------------------------
/NeuralComputing/10-K-Fold-Cross-Validation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/NeuralComputing/10-K-Fold-Cross-Validation.png
--------------------------------------------------------------------------------
/language-translator-ml-codes/s2s/saved_model.pb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/language-translator-ml-codes/s2s/saved_model.pb
--------------------------------------------------------------------------------
/language-translator-ml-codes/training_data.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/language-translator-ml-codes/training_data.pkl
--------------------------------------------------------------------------------
/images/An-example-of-random-forest-classifier.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/An-example-of-random-forest-classifier.png
--------------------------------------------------------------------------------
/language-translator-ml-codes/s2s/keras_metadata.pb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/language-translator-ml-codes/s2s/keras_metadata.pb
--------------------------------------------------------------------------------
/images/principal-component-analysis-pca-featured.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/principal-component-analysis-pca-featured.png
--------------------------------------------------------------------------------
/images/selvaraj_confusion_matrix_precision_recall.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/selvaraj_confusion_matrix_precision_recall.webp
--------------------------------------------------------------------------------
/images/SVM-classifier-model-SVM-support-vector-machine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/SVM-classifier-model-SVM-support-vector-machine.png
--------------------------------------------------------------------------------
/language-translator-ml-codes/s2s/variables/variables.index:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/language-translator-ml-codes/s2s/variables/variables.index
--------------------------------------------------------------------------------
/language-translator-ml-codes/s2s/variables/variables.data-00000-of-00001:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/language-translator-ml-codes/s2s/variables/variables.data-00000-of-00001
--------------------------------------------------------------------------------
/images/MultiLayer-Perceptron-MLP-sturcture-334-MultiLayer-Perceptron-Classifier-MultiLayer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pydevcasts/MLHub/HEAD/images/MultiLayer-Perceptron-MLP-sturcture-334-MultiLayer-Perceptron-Classifier-MultiLayer.png
--------------------------------------------------------------------------------
/agi/len_file.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | # مسیر پوشه
4 | folder_path = './wav' # مسیر پوشه خود را مشخص کنید
5 |
6 | # شمارش فایلها
7 | file_count = len([f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))])
8 |
9 | print(f"Number of files in '{folder_path}': {file_count}")
--------------------------------------------------------------------------------
/Dr-rabiee/index.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "id": "1c075aed",
6 | "metadata": {},
7 | "source": [
8 | ""
9 | ]
10 | },
11 | {
12 | "cell_type": "markdown",
13 | "id": "0df3ed7e",
14 | "metadata": {},
15 | "source": [
16 | "\n"
17 | ]
18 | }
19 | ],
20 | "metadata": {
21 | "language_info": {
22 | "name": "python"
23 | }
24 | },
25 | "nbformat": 4,
26 | "nbformat_minor": 5
27 | }
28 |
--------------------------------------------------------------------------------
/ChatBot/README.md:
--------------------------------------------------------------------------------
1 | # MLHub ChatBot
2 |
3 | Welcome to the MLHub ChatBot repository! This project provides a modular framework for building AI-powered chatbots. It is designed to help developers create intelligent conversational agents using machine learning techniques.
4 |
5 |
6 | ## Features
7 |
8 | - **Modular Design**: Easily modify and extend the chatbot functionality.
9 | - **Machine Learning Integration**: Seamlessly incorporate machine learning models for enhanced responses.
10 | - **User-Friendly Documentation**: Comprehensive guides to help you get started quickly.
11 | - **Sample Data**: Includes example datasets for training and testing your chatbot.
12 |
13 | ## Installation
14 |
15 | To get started with the MLHub ChatBot, follow these steps:
16 |
17 | 1. **Clone the repository**:
18 | ```bash
19 | git clone https://github.com/pydevcasts/MLHub.git
20 | cd MLHub/ChatBot
21 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) [2024] Siyamak Abasnezhad
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6 |
7 | 1. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8 |
9 | 2. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10 |
--------------------------------------------------------------------------------
/Course/QT/README.md:
--------------------------------------------------------------------------------
1 | این کامیت نسخهی اولیهی کتاب «آموزش PyQt6 — گامبهگام برای مبتدیان» را اضافه میکند.
2 | مخاطب هدف، دانشجویان و برنامهنویسان تازهکار هستند و مطالب به صورت ساده و پروژهمحور ارائه شدهاند.
3 |
4 | محتوا:
5 | - صفحه ۱: ساخت اولین پنجره گرافیکی با کلاسهای اصلی
6 | - صفحه ۲: ویجتهای پایه (دکمه، برچسب، ورودی متن) با مثال عملی
7 | - صفحه ۳: سیگنال و اسلات با تغییر متن برچسب
8 | - صفحه ۴: چیدمانها و ساخت فرم ورود
9 | - صفحه ۵: منو و نوارابزار با پنجرهی اصلی
10 | - صفحه ۶: باز و ذخیرهسازی فایل با پنجرهی انتخاب فایل
11 | - صفحه ۷: پروژه ماشینحساب ساده (چهار عمل اصلی)
12 | - صفحه ۸: پروژه دفترچه یادداشت ساده با باز/ذخیره
13 | - صفحه ۹: ویجتهای پیشرفته (تقویم، اسلایدر، نوار پیشرفت)
14 | - صفحه ۱۰: زیباسازی رابط کاربری با استایلشیت
15 |
16 | ویژگیها:
17 | - تمرکز بر مثالهای عملی و کدهای قابل اجرا
18 | - کامنتهای کد به زبان انگلیسی برای خوانایی بهتر
19 | - پرهیز از مقدمه و جمعبندی طولانی؛ تمرکز بر مطالب کاربردی
20 | - رعایت راستچین با عدم شروع خطوط با عبارتهای انگلیسی
21 |
22 | ساختار فایلها:
23 | - docs/book/pyqt6/01_window.md
24 | - docs/book/pyqt6/02_basic_widgets.md
25 | - docs/book/pyqt6/03_signals_slots.md
26 | - docs/book/pyqt6/04_layouts.md
27 | - docs/book/pyqt6/05_menus_toolbar.md
28 | - docs/book/pyqt6/06_file_dialog.md
29 | - docs/book/pyqt6/07_calculator.md
30 | - docs/book/pyqt6/08_text_editor.md
31 | - docs/book/pyqt6/09_advanced_widgets.md
32 | - docs/book/pyqt6/10_stylesheet.md
33 | - README.md با توضیح نحوه اجرا و پیشنیازها (اختیاری)
34 |
35 | اعتبار:
36 | - نویسنده: سیامک عباسنژاد
37 |
--------------------------------------------------------------------------------
/agi/main.py:
--------------------------------------------------------------------------------
1 |
2 | # from analyze import *
3 | import pandas as pd
4 | import re
5 | from analyze import process_data
6 | import string
7 | from sklearn.model_selection import train_test_split
8 | from sklearn.feature_extraction.text import TfidfVectorizer
9 |
10 | # فرض کنید که df قبلاً ایجاد شده است و شامل ستون 'text' است
11 | df = process_data()
12 | # 1. پاکسازی متنها
13 | def clean_text(text):
14 | # تبدیل به حروف کوچک
15 | text = text.lower()
16 | # حذف نشانهگذاری
17 | text = re.sub(f"[{re.escape(string.punctuation)}]", "", text)
18 | # حذف کلمات بیمعنی (stop words)
19 | # برای این کار میتوانید از یک لیست از کلمات بیمعنی استفاده کنید
20 | # به عنوان مثال:
21 | stop_words = set(['و', 'در', 'به', 'از', 'که', 'این', 'برای', 'است', 'با', 'هم', 'اما', 'اگر'])
22 | text = ' '.join(word for word in text.split() if word not in stop_words)
23 | return text
24 |
25 | # پاکسازی متنها
26 | df['cleaned_text'] = df['text'].apply(clean_text)
27 |
28 | # 2. تبدیل دادهها به فرمت مناسب
29 | # استفاده از TF-IDF برای تبدیل متن به ویژگیهای عددی
30 | tfidf_vectorizer = TfidfVectorizer(max_features=5000) # میتوانید تعداد ویژگیها را تنظیم کنید
31 | X = tfidf_vectorizer.fit_transform(df['cleaned_text']).toarray() # ویژگیهای عددی
32 | y = df['audio_file'] # یا هر برچسب دیگری که دارید
33 |
34 | # تقسیم دادهها به مجموعههای آموزشی و آزمایشی
35 | X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
36 |
37 | # نمایش ابعاد دادهها
38 | print(f"Training data shape: {X_train.shape}")
39 | print(f"Testing data shape: {X_test.shape}")
40 |
41 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # MLHub Repository Overview
3 |
4 | ## Introduction
5 | The **MLHub** repository, hosted on GitHub, is a comprehensive resource for machine learning practitioners. It aims to provide tools, libraries, and examples that facilitate the development and deployment of machine learning models.
6 |
7 | ## Key Features
8 | - **Diverse Libraries**: The repository includes a variety of libraries for different machine learning tasks, including TensorFlow and PyTorch.
9 | - **Example Implementations**: Users can find practical examples demonstrating how to implement various machine learning algorithms and techniques.
10 | - **Documentation**: Well-structured documentation is available to help users understand the functionalities and usage of the provided tools.
11 |
12 | ## Installation
13 | To get started with MLHub, you can clone the repository using the following command:
14 |
15 | ```bash
16 | git clone https://github.com/pydevcasts/MLHub.git
17 | ```
18 |
19 | ## Usage
20 | After cloning the repository, you can explore the different directories for specific tools and examples. The documentation provides detailed instructions on how to use each component effectively.
21 |
22 | ## Contribution
23 | The project encourages contributions from the community. If you have ideas for improvements or new features, feel free to fork the repository and submit a pull request.
24 |
25 | ## Conclusion
26 | MLHub is a valuable resource for anyone interested in machine learning. Its well-organized structure and comprehensive examples make it an excellent starting point for both beginners and experienced developers.
27 |
28 |
29 |
--------------------------------------------------------------------------------
/Course/QT/01_window.md:
--------------------------------------------------------------------------------
1 | ## صفحه ۱ – اولین پنجره گرافیکی در PyQt6
2 |
3 | برای شروع یادگیری PyQt6 لازم نیست مقدمات طولانی بخوانید. کافی است بدانید این ابزار یکی از قدرتمندترین فریمورکهای پایتون برای ساخت نرمافزارهای دسکتاپ با رابط کاربری گرافیکی است. حالا بیایید اولین پنجرهی گرافیکی خودمان را بسازیم. ✨
4 |
5 | ### ساختار اصلی برنامهها در PyQt6
6 |
7 | هر برنامهی PyQt6 معمولاً شامل دو بخش اصلی است:
8 |
9 | * شیء اصلی برنامه که وظیفهی مدیریت رویدادها را بر عهده دارد.
10 | * یک پنجره یا ویجت که بهعنوان رابط کاربری به کاربر نمایش داده میشود.
11 |
12 | ### مثال: ساخت اولین پنجره
13 |
14 | ```python
15 | import sys
16 | from PyQt6.QtWidgets import QApplication, QWidget
17 |
18 | # ایجاد یک برنامه
19 | app = QApplication(sys.argv)
20 |
21 | # ایجاد یک پنجره ساده
22 | window = QWidget()
23 | window.setWindowTitle("اولین برنامه PyQt6")
24 | window.resize(400, 300)
25 |
26 | # نمایش پنجره
27 | window.show()
28 |
29 | # اجرای برنامه
30 | sys.exit(app.exec())
31 | ```
32 |
33 | ### توضیح خط به خط
34 |
35 | * `QApplication` همیشه باید در ابتدای برنامه ساخته شود چون مدیریت رویدادها و اجرای کل نرمافزار را بر عهده دارد.
36 | * `QWidget` سادهترین نوع پنجره است که میتوان روی آن دکمهها و سایر ویجتها را قرار داد.
37 | * `setWindowTitle` عنوان پنجره را مشخص میکند.
38 | * `resize` اندازهی پنجره را تغییر میدهد (عرض و ارتفاع).
39 | * `show` باعث نمایش پنجره روی صفحه میشود.
40 | * در پایان با `app.exec()` برنامه وارد حلقهی اجرا میشود و تا وقتی که پنجره بسته نشود، فعال خواهد بود.
41 |
42 | ✨ حالا شما اولین پنجرهی گرافیکی خود را در PyQt6 ساختهاید. وقتی این کد را اجرا کنید، یک پنجرهی خالی باز میشود که نقطهی شروع همهی برنامههای گرافیکی است.
43 |
44 |
--------------------------------------------------------------------------------
/دوره-متوسطه--ماشین-لرنینگ.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## سرفصلهای دوره متوسطه ماشین لرنینگ
4 |
5 | ---
6 |
7 | ### جلسه ۱: مرور و تکمیل مباحث دوره مقدماتی
8 |
9 | * مرور مفاهیم پایه و کار با دادهها
10 | * یادآوری رگرسیون خطی و لجستیک
11 | * رفع اشکالات و تمرینهای تکمیلی
12 |
13 | ### جلسه ۲: پردازش پیشرفته دادهها
14 |
15 | * Feature Engineering (مهندسی ویژگیها)
16 | * مدیریت دادههای گمشده و دادههای نامتوازن
17 | * تبدیل دادهها: نرمالسازی، استانداردسازی، کدگذاری ویژگیهای دستهای (One-Hot Encoding)
18 |
19 | ### جلسه ۳: الگوریتمهای طبقهبندی پیشرفته
20 |
21 | * درخت تصمیم (Decision Tree) و مفاهیم آن
22 | * ماشین بردار پشتیبان (Support Vector Machine - SVM)
23 | * K-نزدیکترین همسایه (K-NN)
24 |
25 | ### جلسه ۴: الگوریتمهای تجمیعی (Ensemble Methods)
26 |
27 | * Bagging و Random Forest
28 | * Boosting و Gradient Boosting
29 | * مزایا و معایب هر روش
30 |
31 | ### جلسه ۵: الگوریتمهای یادگیری بدون نظارت
32 |
33 | * خوشهبندی (Clustering) و انواع آن
34 | * الگوریتم K-Means
35 | * الگوریتمهای دیگر مثل DBSCAN
36 |
37 | ### جلسه ۶: کاهش ابعاد (Dimensionality Reduction)
38 |
39 | * اصول و ضرورت کاهش ابعاد
40 | * الگوریتم تحلیل مولفههای اصلی (PCA)
41 | * نمونههای کاربردی
42 |
43 | ### جلسه ۷: ارزیابی و بهینهسازی مدلها
44 |
45 | * Cross Validation (اعتبارسنجی متقابل)
46 | * تنظیم هایپرپارامترها با Grid Search و Random Search
47 | * روشهای مقابله با Overfitting و Underfitting
48 |
49 | ### جلسه ۸: مدیریت دادههای پیچیده
50 |
51 | * کار با دادههای متنی (مقدمه)
52 | * آشنایی با دادههای زمانی و سریهای زمانی
53 | * معرفی دادههای ساختاریافته و نیمهساختاریافته
54 |
55 | ### جلسه ۹: پروژه عملی متوسطه
56 |
57 | * انتخاب یک پروژه چالشبرانگیز (مثلاً تحلیل احساسات متن، پیشبینی فروش، تشخیص تقلب)
58 | * آمادهسازی دادهها و پیادهسازی مدلهای پیشرفته
59 | * ارزیابی و بهبود مدل
60 |
61 |
62 |
--------------------------------------------------------------------------------
/Course/QT/02_basic_widgets.md:
--------------------------------------------------------------------------------
1 | ## صفحه ۲ – ویجتهای پایه در PyQt6
2 |
3 | تا اینجا یک پنجرهی خالی ساختیم. اما یک پنجرهی خالی به درد ما نمیخورد! 😅 حالا وقت آن است که عناصر اصلی یا همان **ویجتها** را به پنجره اضافه کنیم.
4 |
5 | ### مهمترین ویجتهای پایه:
6 |
7 | * دکمه (QPushButton) ➡️ برای انجام عملیات
8 | * برچسب (QLabel) ➡️ برای نمایش متن
9 | * ورودی متن (QLineEdit) ➡️ برای گرفتن داده از کاربر
10 |
11 | ### مثال: اضافه کردن چند ویجت ساده
12 |
13 | ```python
14 | import sys
15 | from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit
16 |
17 | app = QApplication(sys.argv)
18 |
19 | # Create main window
20 | window = QWidget()
21 | window.setWindowTitle("Basic Widgets Example")
22 | window.resize(400, 300)
23 |
24 | # Create a label
25 | label = QLabel("Hello PyQt6!", window)
26 | label.move(50, 50) # Set position
27 |
28 | # Create a button
29 | button = QPushButton("Click Me", window)
30 | button.move(50, 100)
31 |
32 | # Create a text input
33 | text_input = QLineEdit(window)
34 | text_input.move(50, 150)
35 | text_input.resize(200, 30) # Set width and height
36 |
37 | # Show the window
38 | window.show()
39 |
40 | sys.exit(app.exec())
41 | ```
42 |
43 | ### توضیحات:
44 |
45 | * `QLabel` یک برچسب ساده برای نمایش متن است.
46 | * `QPushButton` یک دکمه ایجاد میکند.
47 | * `QLineEdit` یک جعبهی متنی است که کاربر میتواند چیزی در آن تایپ کند.
48 | * متد `move(x, y)` مکان ویجت را روی پنجره مشخص میکند.
49 | * متد `resize(w, h)` اندازهی ویجت را تغییر میدهد.
50 |
51 | 💡 با اجرای این برنامه، شما یک برچسب، یک دکمه و یک ورودی متن خواهید داشت.
52 |
53 | ---
54 |
55 | ✅ حالا با ویجتهای پایه آشنا شدید. در صفحهی بعد، یاد میگیریم چطور این ویجتها را به هم متصل کنیم تا با کلیک روی دکمه، متن برچسب تغییر کند. این همان **مفهوم سیگنال و اسلات** در PyQt6 است. 🔄
56 |
57 |
--------------------------------------------------------------------------------
/مقدماتی-ماشین-لرنینگ.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## سرفصلهای دوره مقدماتی ماشین لرنینگ
4 |
5 | ---
6 |
7 | ### جلسه ۱: معرفی یادگیری ماشین
8 |
9 | * آشنایی با مفهوم یادگیری ماشین
10 | * انواع یادگیری ماشین (نظارت شده، بدون نظارت، تقویتی)
11 | * کاربردهای عملی ماشین لرنینگ در دنیای واقعی
12 |
13 | ### جلسه ۲: مقدمهای بر پایتون برای دادهکاوی
14 |
15 | * نصب و راهاندازی محیط برنامهنویسی (Jupyter Notebook یا VSCode)
16 | * آشنایی با ساختارهای پایه پایتون (لیست، دیکشنری، حلقهها، شرطها)
17 |
18 | ### جلسه ۳: آشنایی با NumPy
19 |
20 | * مفهوم آرایهها و عملیات عددی
21 | * ایجاد، تغییر شکل و ایندکسینگ آرایهها
22 | * توابع ریاضی پایه در NumPy
23 |
24 | ### جلسه ۴: آشنایی با Pandas
25 |
26 | * ساختارهای دادهای Series و DataFrame
27 | * خواندن و نوشتن دادهها از فایل CSV
28 | * انتخاب، فیلتر کردن و مرتبسازی دادهها
29 |
30 | ### جلسه ۵: آمار پایه و مفاهیم احتمالات
31 |
32 | * میانگین، میانه، واریانس و انحراف معیار
33 | * توزیعهای آماری ساده
34 | * مفاهیم پایه احتمالات و متغیرهای تصادفی
35 |
36 | ### جلسه ۶: پاکسازی و آمادهسازی دادهها (Data Cleaning)
37 |
38 | * شناسایی دادههای گمشده و نحوه پرکردن یا حذف آنها
39 | * مدیریت دادههای تکراری
40 | * نرمالسازی و استانداردسازی دادهها
41 |
42 | ### جلسه ۷: مصورسازی دادهها با Matplotlib و Seaborn
43 |
44 | * رسم نمودارهای خطی، میلهای و پراکندگی
45 | * نمایش توزیع دادهها با هیستوگرام و نمودار جعبهای (Boxplot)
46 | * ترکیب نمودارها و شخصیسازی ظاهر آنها
47 |
48 | ### جلسه ۸: معرفی الگوریتمهای یادگیری نظارت شده
49 |
50 | * رگرسیون خطی (Linear Regression) — تئوری و پیادهسازی ساده
51 | * رگرسیون لجستیک (Logistic Regression) — کاربرد در دستهبندی
52 |
53 | ### جلسه ۹: آموزش و ارزیابی مدل
54 |
55 | * تقسیم داده به مجموعه آموزش و آزمون
56 | * مفهوم overfitting و underfitting
57 | * معیارهای سنجش مدل: دقت (Accuracy)، دقت تفکیکی (Precision)، فراخوانی (Recall)، امتیاز F1
58 |
59 | ### جلسه ۱۰: پروژه عملی مقدماتی
60 |
61 | * انتخاب یک مسئله ساده (مثلاً پیشبینی قیمت خانه یا دستهبندی ایمیلها)
62 | * جمعآوری و آمادهسازی داده
63 | * پیادهسازی الگوریتمهای یادگیری نظارت شده
64 | * ارزیابی مدل و تحلیل نتایج
65 |
66 |
67 |
--------------------------------------------------------------------------------
/سطح-پیشرفته-هوش-مصنوعی.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## سرفصلهای دوره پیشرفته ماشین لرنینگ
4 |
5 | ---
6 |
7 | ### جلسه ۱: مرور کلی و آمادهسازی
8 |
9 | * مرور نکات کلیدی دوره متوسطه
10 | * معرفی ابزارها و محیطهای کاری پیشرفته (مثل Google Colab، محیطهای GPU)
11 | * آشنایی با کتابخانههای Deep Learning (TensorFlow, PyTorch)
12 |
13 | ### جلسه ۲: مقدمات یادگیری عمیق
14 |
15 | * ساختار و مفهوم شبکههای عصبی مصنوعی (Artificial Neural Networks)
16 | * Perceptron و Multi-Layer Perceptron (MLP)
17 | * الگوریتم پسانتشار خطا (Backpropagation)
18 |
19 | ### جلسه ۳: بهینهسازی شبکههای عصبی
20 |
21 | * توابع هزینه (Loss Functions)
22 | * بهینهسازها (Optimizers) مثل SGD، Adam
23 | * تکنیکهای جلوگیری از Overfitting (Dropout، Early Stopping)
24 |
25 | ### جلسه ۴: شبکههای کانولوشنی (CNN)
26 |
27 | * آشنایی با معماری CNN
28 | * لایههای کانولوشن، Pooling و Fully Connected
29 | * کاربرد CNN در پردازش تصویر
30 |
31 | ### جلسه ۵: شبکههای بازگشتی (RNN) و انواع آن
32 |
33 | * مفهوم و ساختار RNN
34 | * مشکلات RNN معمولی و معرفی LSTM و GRU
35 | * کاربرد در پردازش دادههای ترتیبی و متنی
36 |
37 | ### جلسه ۶: یادگیری انتقالی (Transfer Learning)
38 |
39 | * مفهوم و کاربرد انتقال یادگیری
40 | * استفاده از مدلهای پیشآموزش دیده (Pretrained Models)
41 | * فاینتیونینگ مدلها
42 |
43 | ### جلسه ۷: یادگیری تقویتی (Reinforcement Learning) مقدماتی
44 |
45 | * اصول یادگیری تقویتی
46 | * عناصر کلیدی: عامل (Agent)، محیط (Environment)، پاداش (Reward)
47 | * الگوریتمهای پایه
48 |
49 | ### جلسه ۸: بهینهسازی مدلهای پیچیده و کار با دادههای بزرگ
50 |
51 | * آموزش مدلهای بزرگ با GPU
52 | * روشهای کاهش زمان آموزش
53 | * مدیریت حافظه و دادههای حجیم
54 |
55 | ### جلسه ۹: ارزیابی مدلهای یادگیری عمیق
56 |
57 | * معیارهای عملکرد در مسائل مختلف (کلاسبندی، تشخیص شی، ترجمه)
58 | * روشهای تست و اعتبارسنجی مدلهای عمیق
59 |
60 | ### جلسه ۱۰: پروژه نهایی پیشرفته
61 |
62 | * پروژههای پیشنهادی:
63 |
64 | * تشخیص تصویر با CNN (مثلاً تشخیص اشیاء یا بیماریهای پزشکی)
65 | * تحلیل متن با RNN یا مدلهای Transformer (مثلاً تحلیل احساسات یا ترجمه)
66 | * ساخت مدل یادگیری تقویتی ساده (مثلاً بازی یا ربات ساده)
67 | * پیادهسازی، آموزش، ارزیابی و بهینهسازی پروژه
68 |
69 | ---
70 |
71 |
--------------------------------------------------------------------------------
/Course/QT/03_signals_slots.md:
--------------------------------------------------------------------------------
1 | ## صفحه ۳ – سیگنالها و اسلاتها در PyQt6
2 |
3 | تا الان فقط ویجتهای ثابت ساختیم. اما یک برنامهی واقعی باید **واکنشپذیر** باشد؛ یعنی وقتی کاربر روی دکمه کلیک کرد یا متنی نوشت، تغییری در برنامه رخ بدهد. در PyQt6 این کار با **Signal** و **Slot** انجام میشود.
4 |
5 | ### مفهوم سیگنال و اسلات
6 |
7 | * **سیگنال (Signal):** یک رویداد است که توسط ویجت ارسال میشود. مثلاً وقتی روی دکمه کلیک میکنیم، سیگنال "کلیک شد" فرستاده میشود.
8 | * **اسلات (Slot):** یک تابع یا متد است که به سیگنال وصل میشود و وقتی سیگنال رخ داد، اجرا میشود.
9 |
10 | ---
11 |
12 | ### مثال: تغییر متن برچسب با کلیک روی دکمه
13 |
14 | ```python
15 | import sys
16 | from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit
17 |
18 | app = QApplication(sys.argv)
19 |
20 | # Create main window
21 | window = QWidget()
22 | window.setWindowTitle("Signal and Slot Example")
23 | window.resize(400, 300)
24 |
25 | # Create a label
26 | label = QLabel("Waiting for action...", window)
27 | label.move(50, 50)
28 |
29 | # Create a text input
30 | text_input = QLineEdit(window)
31 | text_input.move(50, 100)
32 | text_input.resize(200, 30)
33 |
34 | # Create a button
35 | button = QPushButton("Change Label", window)
36 | button.move(50, 150)
37 |
38 | # Define slot function
39 | def change_label_text():
40 | user_text = text_input.text() # Get text from input
41 | label.setText(user_text) # Set label text
42 |
43 | # Connect signal (button click) to slot (function)
44 | button.clicked.connect(change_label_text)
45 |
46 | # Show the window
47 | window.show()
48 |
49 | sys.exit(app.exec())
50 | ```
51 |
52 | ---
53 |
54 | ### توضیح کد:
55 |
56 | * وقتی کاربر روی دکمه کلیک میکند، سیگنال `clicked` ارسال میشود.
57 | * ما با `.connect` این سیگنال را به تابع `change_label_text` وصل کردیم.
58 | * تابع ما متن وارد شده در `QLineEdit` را میگیرد و در `QLabel` نمایش میدهد.
59 |
60 | 📌 حالا برنامهی شما تعاملپذیر شده است! کاربر متنی در ورودی مینویسد، روی دکمه کلیک میکند و متن برچسب تغییر میکند. ✨
61 |
62 | ---
63 |
64 | ✅ تا اینجا توانستیم ویجتها را به هم متصل کنیم.
65 | در **صفحه ۴** میرویم سراغ چیزی بسیار کاربردیتر: **مدیریت چیدمانها (Layouts)** برای اینکه برنامه مرتب و حرفهای دیده شود. 🖼️
66 |
67 |
--------------------------------------------------------------------------------
/Course/QT/04_layouts.md:
--------------------------------------------------------------------------------
1 | ## صفحه ۴ – مدیریت چیدمانها در PyQt6
2 |
3 | ### چرا Layout مهم است؟
4 |
5 | * باعث میشود ویجتها بهطور خودکار مرتب شوند.
6 | * اگر کاربر اندازهی پنجره را تغییر دهد، ویجتها بهطور مناسب جابهجا یا تغییر اندازه میدهند.
7 | * ظاهر نرمافزار حرفهایتر میشود.
8 |
9 | ---
10 |
11 | ### انواع Layoutهای پرکاربرد
12 |
13 | * **QVBoxLayout** ➡️ چیدمان عمودی (از بالا به پایین)
14 | * **QHBoxLayout** ➡️ چیدمان افقی (از چپ به راست)
15 | * **QGridLayout** ➡️ چیدمان جدولی (ردیف و ستون)
16 |
17 | ---
18 |
19 | ### مثال: فرم ورود با Layout
20 |
21 | ```python
22 | import sys
23 | from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout
24 |
25 | app = QApplication(sys.argv)
26 |
27 | # Create main window
28 | window = QWidget()
29 | window.setWindowTitle("Login Form with Layout")
30 | window.resize(300, 200)
31 |
32 | # Create widgets
33 | label_user = QLabel("Username:")
34 | input_user = QLineEdit()
35 |
36 | label_pass = QLabel("Password:")
37 | input_pass = QLineEdit()
38 | input_pass.setEchoMode(QLineEdit.EchoMode.Password) # Hide password
39 |
40 | login_button = QPushButton("Login")
41 |
42 | # Create vertical layout
43 | layout = QVBoxLayout()
44 | layout.addWidget(label_user)
45 | layout.addWidget(input_user)
46 | layout.addWidget(label_pass)
47 | layout.addWidget(input_pass)
48 | layout.addWidget(login_button)
49 |
50 | # Set layout for window
51 | window.setLayout(layout)
52 |
53 | # Show the window
54 | window.show()
55 |
56 | sys.exit(app.exec())
57 | ```
58 |
59 | ---
60 |
61 | ### توضیح کد
62 |
63 | * در این مثال به جای استفاده از `move`، همهی ویجتها را به یک **چیدمان عمودی** (QVBoxLayout) اضافه کردیم.
64 | * متد `addWidget` ویجتها را به ترتیب به Layout اضافه میکند.
65 | * با `setLayout` کل چیدمان به پنجره داده میشود.
66 | * برای ورودی رمز عبور از ویژگی `setEchoMode` استفاده کردیم تا کاراکترهای واردشده بهصورت نقطه نمایش داده شوند. 🔒
67 |
68 | ---
69 |
70 | 📌 نتیجه:
71 | شما یک **فرم ورود ساده** دارید که کاملاً مرتب و واکنشپذیر است. اگر پنجره را کوچک و بزرگ کنید، ویجتها همچنان منظم باقی میمانند. ✨
72 |
73 | ---
74 |
75 | ✅ حالا که با چیدمانها آشنا شدید، در **صفحه ۵** یاد میگیریم چطور یک **منو و نوار ابزار** بسازیم تا برنامه حرفهایتر شود. 🛠️
76 |
77 |
--------------------------------------------------------------------------------
/agi/train.py:
--------------------------------------------------------------------------------
1 | import os
2 | import numpy as np
3 | import pandas as pd
4 | import librosa
5 | import matplotlib.pyplot as plt
6 | from sklearn.model_selection import train_test_split
7 | from sklearn.preprocessing import LabelEncoder
8 | from keras.models import Sequential
9 | from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
10 | from keras.utils import to_categorical
11 |
12 | # 1. بارگذاری دادهها
13 | audio_folder = './clips'
14 | tsv_folder = './text'
15 | texts = {}
16 |
17 | # پردازش فایلهای TSV
18 | for tsv_file in os.listdir(tsv_folder):
19 | if tsv_file.endswith('.tsv'):
20 | tsv_path = os.path.join(tsv_folder, tsv_file)
21 | df_tsv = pd.read_csv(tsv_path, sep='\t', header=0)
22 |
23 | if {'path', 'sentence'}.issubset(df_tsv.columns):
24 | for index, row in df_tsv.iterrows():
25 | audio_file_name = row['path']
26 | sentence_text = row['sentence']
27 | texts[audio_file_name] = sentence_text
28 |
29 | # ایجاد DataFrame
30 | df = pd.DataFrame(list(texts.items()), columns=['audio_file', 'text'])
31 |
32 | # 2. ایجاد Spectrogram
33 | def create_spectrogram(file_name):
34 | audio, sr = librosa.load(file_name, sr=None)
35 | spectrogram = librosa.feature.melspectrogram(y=audio, sr=sr)
36 | spectrogram_db = librosa.power_to_db(spectrogram, ref=np.max)
37 | return spectrogram_db
38 |
39 | # ایجاد Spectrogram برای هر فایل صوتی
40 | df['spectrogram'] = df['audio_file'].apply(lambda x: create_spectrogram(os.path.join(audio_folder, x)))
41 |
42 | # 3. آمادهسازی دادهها برای CNN
43 | X = np.array(list(df['spectrogram']))
44 | y = df['text']
45 | le = LabelEncoder()
46 | y_encoded = le.fit_transform(y)
47 | y_categorical = to_categorical(y_encoded)
48 |
49 | # تقسیم دادهها
50 | X_train, X_test, y_train, y_test = train_test_split(X, y_categorical, test_size=0.2, random_state=42)
51 |
52 | # 4. ساخت مدل CNN
53 | model = Sequential()
54 | model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(X_train.shape[1], X_train.shape[2], 1)))
55 | model.add(MaxPooling2D(pool_size=(2, 2)))
56 | model.add(Flatten())
57 | model.add(Dense(64, activation='relu'))
58 | model.add(Dense(len(le.classes_), activation='softmax'))
59 |
60 | model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
61 |
62 | # 5. آموزش مدل
63 | model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test))
64 |
65 | # 6. ارزیابی مدل
66 | loss, accuracy = model.evaluate(X_test, y_test)
67 | print(f"Test accuracy: {accuracy} and Loss: {loss}")
--------------------------------------------------------------------------------
/Mr_Salmani.md:
--------------------------------------------------------------------------------
1 | ### **تشریح پروژه و برآورد هزینه و زمان**
2 |
3 | #### **توضیحات پروژه:**
4 | این پروژه یک **پلتفرم مدیریت کسبوکار گروهی** است که برای مدیران و کارکنان طراحی شده و شامل امکانات زیر میشود:
5 |
6 | 1. **صفحه نمایش لوگو (2-3 ثانیه)**
7 | - نمایش لوگو به مدت ۲ تا ۳ ثانیه قبل از ورود به صفحه ورود.
8 |
9 | 2. **صفحه ورود:**
10 | - امکان انتخاب نقش (مدیر/کارکنان).
11 | - فیلدهای نام کاربری و رمز عبور.
12 | - تبلیغات متغیر و تصاویر پسزمینه سنتی/مینیاتوری.
13 | - قابلیت بازیابی رمز عبور.
14 |
15 | 3. **داشبورد اصلی:**
16 | - شامل ۵ گزینه اصلی: **افزودن مشتری، پنل ارسال پیامک، درگاه پرداخت، گزارشات، پشتیبانی (چت باکس)**.
17 | - امکان تغییر تصویر پسزمینه توسط کاربر (ثابت پس از تغییر).
18 |
19 | 4. **مدیریت مشتریان:**
20 | - ثبت مشخصات مشتری (نام، شماره تماس، آدرس، کد ملی، تاریخ تولد، نحوه آشنایی و...).
21 | - ارسال **پیامک خوشامدگویی و کارت ویزیت الکترونیکی** پس از ثبت مشتری.
22 |
23 | 5. **پنل پیامک:**
24 | - اتصال به سامانه پیامک انبوه.
25 | - امکان ارسال پیامک خودکار و تنظیم پیامهای از پیش تعریفشده (شامل یادآوری پرداخت، قرار ملاقات و...).
26 |
27 | 6. **سیستم گزارشگیری:**
28 | - گزارش عملکرد کارکنان بر اساس فیلترهای مختلف (نام مشتری، تاریخ فعالیت، جنسیت، کد ملی و...).
29 | - امکان **سورت/فیلتر چندلایه** (ترکیب نام مشتری + تاریخ فعالیت).
30 | - نمایش اطلاعات در قالب جدول با امکان تنظیم ستونها توسط مدیر.
31 | - **هشدارهای روزانه** برای پیگیری امور.
32 |
33 | 7. **امکانات جانبی:**
34 | - نمایش رویدادهای مهم و آخرین تغییرات در داشبورد.
35 | - امکان نصب پلتفرم روی **وبسایت یا پیج اینستاگرام** برای دریافت درخواست مشاوره از مشتریان.
36 |
37 | ---
38 |
39 | ### **برآورد هزینه (بر اساس قیمتهای ایران):**
40 | | بخش پروژه | هزینه (تومان) |
41 | |------------------------------------------|---------------------|
42 | | طراحی UI/UX (لوگو، صفحات ورود، داشبورد) | ۲۵ میلیون |
43 | | توسعه فرانتاند (رابط کاربری) | ۳۰ میلیون |
44 | | توسعه بکاند (سرور، دیتابیس، امنیت) | ۵۰ میلیون |
45 | | یکپارچهسازی پیامک و درگاه پرداخت | ۱۵ میلیون |
46 | | تست و راهاندازی | ۱۰ میلیون |
47 | | **مجموع** | **۱۳۰ میلیون تومان** |
48 |
49 | #### **نکات مالی:**
50 | - قیمت نهایی بستگی به **پیچیدگی طراحی، تعداد ماژولها و دستمزد برنامهنویس** احتمال تغییر دارد.
51 | - هزینه میزبانی (هاستینگ) و دامنه سالانه **حدود ۵ میلیون تومان** اضافه میشود.
52 |
53 | ---
54 |
55 | ### **تخمین زمان تحویل (ددلاین):**
56 | - **تحلیل نیازها و طراحی:** ۲ هفته
57 | - **توسعه فرانتاند:** ۴ هفته
58 | - **توسعه بکاند:** ۶ هفته
59 | - **تست و رفع خطا:** ۲ هفته
60 | - **تحویل نهایی:** **حدود ۳ ماه**
61 |
62 | ---
63 |
--------------------------------------------------------------------------------
/Genetic.md:
--------------------------------------------------------------------------------
1 |
2 | ---
3 |
4 | ### 🔹 مرحله ۱: پایههای لازم (Fundamentals)
5 |
6 | #### ۱. برنامهنویسی
7 | - **پایتون (Python)**: زبان اصلی در بیوانفورماتیک و هوش مصنوعی.
8 | - متغیرها، حلقهها، شرطها
9 | - توابع، کلاسها (شیگرایی)
10 | - کار با کتابخانههای علمی: `NumPy`, `Pandas`, `Matplotlib`, `Seaborn`
11 | - کار با فایلهای بیولوژیکی: FASTA, FASTQ, BAM, VCF
12 | - کار با کتابخانههای بیوانفورماتیک: `Biopython`
13 |
14 | > 💡 تمرین: تحلیل توالی DNA، شمارش نوکلئوتیدها، تبدیل به RNA/پروتئین، یافتن ژنها
15 |
16 | ---
17 |
18 | #### ۲. ریاضیات و آمار
19 | - **آمار و احتمالات**: توزیعها، آزمون فرض، p-value، FDR، معنیداری آماری
20 | - **جبر خطی**: بردارها، ماتریسها، ضرب ماتریسی، ویژهمقدارها — مهم برای یادگیری ماشین
21 | - **حسابان (Calculus)**: مشتق، گرادیان — برای درک بهینهسازی در مدلهای AI
22 |
23 | ---
24 |
25 | ### 🔹 مرحله ۲: یادگیری ماشین (Machine Learning)
26 |
27 | #### ۳. مفاهیم پایه یادگیری ماشین
28 | - تفاوت یادگیری نظارتشده، نظارتنشده، تقویتی
29 | - تقسیم داده: train/test/validation
30 | - Overfitting و Regularization
31 | - ارزیابی مدل: دقت، recall، F1-score، AUC-ROC
32 |
33 | #### ۴. الگوریتمهای کلیدی
34 | - Regression (Linear, Logistic)
35 | - Decision Trees, Random Forest
36 | - Support Vector Machines (SVM)
37 | - Clustering (K-Means, Hierarchical)
38 | - PCA و تحلیل مؤلفههای اصلی (برای کاهش ابعاد دادههای ژنومی)
39 | - Neural Networks مقدماتی (Perceptron, MLP)
40 |
41 | > 🛠️ ابزار: `scikit-learn` در پایتون
42 |
43 | ---
44 |
45 | ### 🔹 مرحله ۳: هوش مصنوعی پیشرفته (Deep Learning)
46 |
47 | #### ۵. شبکههای عصبی عمیق
48 | - Dense layers, activation functions (ReLU, sigmoid)
49 | - Backpropagation و بهینهسازی (SGD, Adam)
50 | - Dropout, Batch Normalization
51 |
52 | #### ۶. شبکههای خاص برای دادههای بیولوژیکی
53 | - **CNN (Convolutional Neural Networks)**: برای تشخیص الگوهای محلی در توالی DNA/RNA
54 | - **RNN / LSTM / GRU**: برای دادههای توالیمحور (مثل توالی ژنی، RNA-seq)
55 | - **Transformers**: برای مدلسازی طولانیمدت (مثل در مدلهای پیشبینی اسپلایسینگ)
56 |
57 | > 🛠️ ابزار: `TensorFlow` یا `PyTorch`
58 |
59 | ---
60 |
61 | ### 🔹 مرحله ۴: کاربرد در بیوانفورماتیک و ژنتیک
62 |
63 | #### ۷. تحلیل دادههای ژنومی با AI
64 | - پیشبینی اگزون/اینtron با مدلهای ML
65 | - تشخیص جهشهای پاتوژنیک (pathogenic variants)
66 | - پیشبینی بیان ژن (Gene Expression) با شبکههای عصبی
67 | - eQTL analysis با مدلهای آماری و ML
68 |
69 | #### ۸. Single-cell RNA-seq analysis
70 | - Clustering سلولها با UMAP/t-SNE
71 | - استفاده از مدلهای deep learning برای طبقهبندی سلولها
72 | - Trajectory inference با مدلهای پویا
73 |
74 | #### ۹. پیشبینی ساختار پروتئین
75 | - معرفی AlphaFold و RoseTTAFold
76 | - کار با مدلهای pre-trained برای پیشبینی ساختار
77 |
78 | #### ۱۰. Genomic Variant Interpretation
79 | - استفاده از مدلهایی مثل DeepSEA, Enformer برای پیشبینی اثر جهشها روی تنظیم ژن
80 |
81 | ---
82 |
--------------------------------------------------------------------------------
/Course/QT/10_stylesheet.md:
--------------------------------------------------------------------------------
1 | ## صفحه ۱۰ – زیباسازی رابط کاربری با StyleSheet
2 |
3 | در PyQt6 شما میتونید از **StyleSheet** استفاده کنید. این سیستم تقریباً مثل CSS در طراحی وب عمل میکنه و میشه باهاش رنگها، فونتها، اندازهها و ظاهر ویجتها رو تغییر داد.
4 |
5 | ---
6 |
7 | ### مثال ۱: تغییر رنگ دکمهها
8 |
9 | ```python
10 | import sys
11 | from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
12 |
13 | app = QApplication(sys.argv)
14 |
15 | window = QWidget()
16 | window.setWindowTitle("Styled Buttons")
17 | window.resize(300, 200)
18 |
19 | layout = QVBoxLayout()
20 |
21 | button1 = QPushButton("Green Button")
22 | button2 = QPushButton("Red Button")
23 |
24 | # Apply styles
25 | button1.setStyleSheet("background-color: green; color: white; font-size: 16px; padding: 8px;")
26 | button2.setStyleSheet("background-color: red; color: white; font-weight: bold;")
27 |
28 | layout.addWidget(button1)
29 | layout.addWidget(button2)
30 |
31 | window.setLayout(layout)
32 | window.show()
33 | sys.exit(app.exec())
34 | ```
35 |
36 | 📌 نتیجه: یک دکمه سبز و یک دکمه قرمز خواهید داشت، با فونت و استایل متفاوت.
37 |
38 | ---
39 |
40 | ### مثال ۲: تغییر استایل ویجتها
41 |
42 | ```python
43 | import sys
44 | from PyQt6.QtWidgets import QApplication, QWidget, QLineEdit, QVBoxLayout, QLabel
45 |
46 | app = QApplication(sys.argv)
47 |
48 | window = QWidget()
49 | window.setWindowTitle("Styled Widgets")
50 | window.resize(300, 200)
51 |
52 | layout = QVBoxLayout()
53 |
54 | label = QLabel("Username:")
55 | textbox = QLineEdit()
56 |
57 | # Apply styles
58 | label.setStyleSheet("font-size: 14px; color: navy;")
59 | textbox.setStyleSheet("""
60 | border: 2px solid gray;
61 | border-radius: 5px;
62 | padding: 5px;
63 | font-size: 14px;
64 | """)
65 |
66 | layout.addWidget(label)
67 | layout.addWidget(textbox)
68 |
69 | window.setLayout(layout)
70 | window.show()
71 | sys.exit(app.exec())
72 | ```
73 |
74 | 📌 نتیجه: لیبل با رنگ آبی و فونت زیباتر نمایش داده میشه و جعبهی متنی هم دارای حاشیه گرد و استایل حرفهای خواهد بود.
75 |
76 | ---
77 |
78 | ### نکتههای مهم در استفاده از StyleSheet
79 |
80 | ✅ میتونید برای هر ویجت جداگانه استایل تعریف کنید.
81 | ✅ میتونید کلاس یا نام مشخص برای ویجت بذارید و مثل CSS برای همه یکجا استایل اعمال کنید.
82 | ✅ میتونید انیمیشن و جلوههای گرافیکی ساده بسازید.
83 |
84 | ---
85 |
86 | ✨ حالا دیگه نه تنها میتونید برنامههای کاربردی با PyQt6 بسازید، بلکه میتونید ظاهرشون رو هم شیک و حرفهای طراحی کنید.
87 |
88 | ---
89 |
90 | 📕🎉 به همین ترتیب کتاب ما به پایان رسید:
91 |
92 | * از آشنایی با PyQt6 شروع کردیم.
93 | * ویجتهای ساده مثل دکمهها و لیبلها رو شناختیم.
94 | * پروژههای واقعی مثل ماشین حساب 🧮 و دفترچه یادداشت 📝 ساختیم.
95 | * ویجتهای پیشرفته مثل تقویم 📅، اسلایدر 🎚️ و ProgressBar 🔄 رو یاد گرفتیم.
96 | * و در نهایت با StyleSheet یاد گرفتیم ظاهر برنامههامون رو زیباتر کنیم. 🎨
97 |
98 |
--------------------------------------------------------------------------------
/Course/QT/07_calculator.md:
--------------------------------------------------------------------------------
1 | ## صفحه ۷ – پروژه ماشین حساب ساده
2 |
3 | ماشین حساب ما شامل دکمههای اعداد، چهار عمل اصلی و یک نمایشگر خواهد بود.
4 |
5 | ---
6 |
7 | ### کد پروژه
8 |
9 | ```python
10 | import sys
11 | from PyQt6.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton, QLineEdit
12 | from PyQt6.QtCore import Qt
13 |
14 | class Calculator(QWidget):
15 | def __init__(self):
16 | super().__init__()
17 |
18 | # Set window properties
19 | self.setWindowTitle("Simple Calculator")
20 | self.resize(300, 400)
21 |
22 | # Create display
23 | self.display = QLineEdit()
24 | self.display.setAlignment(Qt.AlignmentFlag.Right) # Align text to right
25 | self.display.setReadOnly(True) # User cannot type directly
26 |
27 | # Create grid layout
28 | grid = QGridLayout()
29 | grid.addWidget(self.display, 0, 0, 1, 4) # Span display across 4 columns
30 |
31 | # Buttons for calculator
32 | buttons = [
33 | ('7', 1, 0), ('8', 1, 1), ('9', 1, 2), ('/', 1, 3),
34 | ('4', 2, 0), ('5', 2, 1), ('6', 2, 2), ('*', 2, 3),
35 | ('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('-', 3, 3),
36 | ('0', 4, 0), ('.', 4, 1), ('=', 4, 2), ('+', 4, 3),
37 | ]
38 |
39 | # Add buttons to grid
40 | for text, row, col in buttons:
41 | button = QPushButton(text)
42 | button.clicked.connect(self.on_button_clicked)
43 | grid.addWidget(button, row, col)
44 |
45 | self.setLayout(grid)
46 |
47 | def on_button_clicked(self):
48 | # Get text of clicked button
49 | button = self.sender()
50 | text = button.text()
51 |
52 | if text == "=":
53 | try:
54 | result = str(eval(self.display.text()))
55 | self.display.setText(result)
56 | except Exception:
57 | self.display.setText("Error")
58 | else:
59 | self.display.setText(self.display.text() + text)
60 |
61 | app = QApplication(sys.argv)
62 | window = Calculator()
63 | window.show()
64 | sys.exit(app.exec())
65 | ```
66 |
67 | ---
68 |
69 | ### توضیح کد
70 |
71 | * از **QGridLayout** استفاده کردیم تا دکمهها مانند صفحهکلید ماشین حساب مرتب شوند.
72 | * نمایشگر برنامه با **QLineEdit** ساخته شده که فقط خروجی نشان میدهد.
73 | * وقتی روی دکمهای کلیک میکنیم، متن آن به محتوای نمایشگر اضافه میشود.
74 | * وقتی روی دکمه "=" میزنیم، رشتهی موجود با دستور `eval` محاسبه و نتیجه نمایش داده میشود.
75 | * اگر خطایی رخ دهد (مثلاً کاربر تقسیم بر صفر بزند)، خروجی "Error" نمایش داده میشود.
76 |
77 | ---
78 |
79 | 📌 نتیجه:
80 | برنامهی شما حالا یک ماشین حساب ساده دارد که چهار عمل اصلی (+, -, \*, /) را انجام میدهد. 🧮
81 |
82 | ---
83 |
84 | ✅ در **صفحه ۸** یک پروژهی دیگر خواهیم ساخت: **دفترچه یادداشت ساده (Text Editor)** با قابلیت نوشتن متن، ذخیرهسازی و باز کردن فایل. 📝
85 |
86 |
--------------------------------------------------------------------------------
/Course/QT/06_file_dialog.md:
--------------------------------------------------------------------------------
1 | ## صفحه ۶ – باز کردن و ذخیرهسازی فایل در PyQt6
2 |
3 | یکی از قابلیتهای اساسی نرمافزارها این است که بتوانیم فایل باز کنیم یا اطلاعات را در فایلی ذخیره کنیم. در PyQt6 این کار بهسادگی با ویجت **QFileDialog** انجام میشود.
4 |
5 | ---
6 |
7 | ### مثال: برنامهی ساده برای باز و ذخیره فایل
8 |
9 | ```python
10 | import sys
11 | from PyQt6.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction, QFileDialog
12 |
13 | class MainWindow(QMainWindow):
14 | def __init__(self):
15 | super().__init__()
16 |
17 | # Set window properties
18 | self.setWindowTitle("Open and Save File Example")
19 | self.resize(500, 400)
20 |
21 | # Create text editor as central widget
22 | self.editor = QTextEdit()
23 | self.setCentralWidget(self.editor)
24 |
25 | # Create menu bar
26 | menu_bar = self.menuBar()
27 | file_menu = menu_bar.addMenu("File")
28 |
29 | # Create actions
30 | open_action = QAction("Open", self)
31 | save_action = QAction("Save", self)
32 | exit_action = QAction("Exit", self)
33 |
34 | # Add actions to File menu
35 | file_menu.addAction(open_action)
36 | file_menu.addAction(save_action)
37 | file_menu.addSeparator()
38 | file_menu.addAction(exit_action)
39 |
40 | # Connect actions
41 | open_action.triggered.connect(self.open_file)
42 | save_action.triggered.connect(self.save_file)
43 | exit_action.triggered.connect(self.close)
44 |
45 | def open_file(self):
46 | # Show open file dialog
47 | file_path, _ = QFileDialog.getOpenFileName(self, "Open File", "", "Text Files (*.txt)")
48 | if file_path:
49 | with open(file_path, "r", encoding="utf-8") as f:
50 | self.editor.setText(f.read())
51 |
52 | def save_file(self):
53 | # Show save file dialog
54 | file_path, _ = QFileDialog.getSaveFileName(self, "Save File", "", "Text Files (*.txt)")
55 | if file_path:
56 | with open(file_path, "w", encoding="utf-8") as f:
57 | f.write(self.editor.toPlainText())
58 |
59 | app = QApplication(sys.argv)
60 | window = MainWindow()
61 | window.show()
62 | sys.exit(app.exec())
63 | ```
64 |
65 | ---
66 |
67 | ### توضیح کد
68 |
69 | * متد `getOpenFileName` یک پنجرهی انتخاب فایل باز میکند و مسیر فایل انتخابی را برمیگرداند.
70 | * متد `getSaveFileName` مسیر ذخیره فایل را از کاربر میگیرد.
71 | * از `QTextEdit` بهعنوان ویرایشگر متنی استفاده کردیم و متن باز شده را در آن قرار دادیم.
72 | * هنگام ذخیرهسازی، محتوای داخل `QTextEdit` در فایل نوشته میشود.
73 |
74 | ---
75 |
76 | 📌 نتیجه:
77 | حالا یک برنامهی کوچک دارید که میتواند فایل متنی را باز کند یا آن را ذخیره کند. درست مثل یک **دفترچه یادداشت ساده**. 📝
78 |
79 | ---
80 |
81 | ✅ در **صفحه ۷** اولین پروژهی کوچک و کامل خودمان را میسازیم: **ماشین حساب ساده** با عملیات جمع، تفریق، ضرب و تقسیم. ➕➖✖️➗
82 |
83 |
--------------------------------------------------------------------------------
/Dr-rabiee/CTMC.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | فرض کنید یک مرکز تلفن با **۲ خط (m = 2)** داریم. نرخ ورود تماسها:
4 |
5 | * $\lambda = 5$ تماس در دقیقه
6 | و نرخ سرویس:
7 | * $\mu = 3$ تماس در دقیقه برای هر خط مشغول.
8 |
9 | ### خواستهها:
10 |
11 | **الف)** فضای حالت سیستم را بنویسید.
12 | **ب)** معادلات توازن سراسری (GBE) را بنویسید.
13 | **ج)** احتمال اشغال کامل خطوط (یعنی $P_{\text{block}} = \pi_2$) را حساب کنید.
14 |
15 | ---
16 |
17 | ## ✅ پاسخ:
18 |
19 | ### 🔹 الف) فضای حالت
20 |
21 | تعداد خطوط اشغالشده ممکن است بین 0 تا 2 باشد. پس:
22 |
23 | $$
24 | S = \{0, 1, 2\}
25 | $$
26 |
27 | ---
28 |
29 | ### 🔹 ب) معادلات توازن سراسری (GBE)
30 |
31 | در حالت پایدار، جریان ورودی به هر حالت برابر است با جریان خروجی از آن.
32 |
33 | ---
34 |
35 | #### 🔸 حالت 0:
36 |
37 | ورودی: از حالت 1 با نرخ $\mu = 3$
38 | خروجی: به حالت 1 با نرخ $\lambda = 5$
39 |
40 | $$
41 | \pi_1 \cdot \mu = \pi_0 \cdot \lambda
42 | \Rightarrow 3\pi_1 = 5\pi_0 \tag{1}
43 | $$
44 |
45 | ---
46 |
47 | #### 🔸 حالت 1:
48 |
49 | ورودی: از حالت 0 با نرخ $\lambda = 5$، از حالت 2 با نرخ $2\mu = 6$
50 | خروجی: به حالت 0 با نرخ 3، به حالت 2 با نرخ 5
51 |
52 | $$
53 | \pi_0 \cdot \lambda + \pi_2 \cdot 2\mu = \pi_1 \cdot (\lambda + \mu)
54 | \Rightarrow 5\pi_0 + 6\pi_2 = 8\pi_1 \tag{2}
55 | $$
56 |
57 | ---
58 |
59 | #### 🔸 حالت 2:
60 |
61 | ورودی: از حالت 1 با نرخ $\lambda = 5$
62 | خروجی: به حالت 1 با نرخ $2\mu = 6$
63 |
64 | $$
65 | \pi_1 \cdot \lambda = \pi_2 \cdot 2\mu
66 | \Rightarrow 5\pi_1 = 6\pi_2 \tag{3}
67 | $$
68 |
69 | ---
70 |
71 | #### 🔸 شرط نرمالسازی:
72 |
73 | $$
74 | \pi_0 + \pi_1 + \pi_2 = 1 \tag{4}
75 | $$
76 |
77 | ---
78 |
79 | ### 🔹 ج) حل معادلات برای پیدا کردن $\pi_2$
80 |
81 | از (1):
82 |
83 | $$
84 | \pi_1 = \frac{5}{3} \pi_0
85 | $$
86 |
87 | از (3):
88 |
89 | $$
90 | \pi_2 = \frac{5}{6} \pi_1 = \frac{5}{6} \cdot \frac{5}{3} \pi_0 = \frac{25}{18} \pi_0
91 | $$
92 |
93 | حالا در (4) جایگذاری کنیم:
94 |
95 | $$
96 | \pi_0 + \pi_1 + \pi_2 = 1
97 | \Rightarrow \pi_0 + \frac{5}{3}\pi_0 + \frac{25}{18}\pi_0 = 1
98 | $$
99 |
100 | هممخرج:
101 |
102 | $$
103 | \pi_0 \left(1 + \frac{5}{3} + \frac{25}{18}\right) = 1
104 | \Rightarrow \pi_0 \cdot \frac{18 + 30 + 25}{18} = 1
105 | \Rightarrow \pi_0 \cdot \frac{73}{18} = 1
106 | \Rightarrow \pi_0 = \frac{18}{73}
107 | $$
108 |
109 | ---
110 |
111 | حالا:
112 |
113 | $$
114 | \pi_1 = \frac{5}{3} \cdot \frac{18}{73} = \frac{30}{73}, \quad
115 | \pi_2 = \frac{25}{18} \cdot \frac{18}{73} = \frac{25}{73}
116 | $$
117 |
118 | ---
119 |
120 | ### 🎯 نتیجه نهایی:
121 |
122 | * $\pi_0 = \frac{18}{73} \approx 0.2466$
123 | * $\pi_1 = \frac{30}{73} \approx 0.4110$
124 | * $\pi_2 = \frac{25}{73} \approx 0.3425$
125 |
126 | ---
127 |
128 | ### ✅ پاسخ بخش (ج):
129 |
130 | احتمال انسداد تماس جدید = **احتمال اشغال کامل خطوط** =
131 |
132 | $$
133 | \boxed{P_{\text{block}} = \pi_2 = \frac{25}{73} \approx 34.25\%}
134 | $$
135 |
136 | ---
137 |
--------------------------------------------------------------------------------
/agi/finetune.py:
--------------------------------------------------------------------------------
1 | !pip install transformers datasets evaluate soundfile librosa accelerate>=0.21.0
2 | from datasets import load_dataset, Audio
3 |
4 | minds = load_dataset("PolyAI/minds14", name="en-US", split="train")
5 | minds = minds.train_test_split(test_size=0.2)
6 | minds = minds.remove_columns(["path", "transcription", "english_transcription", "lang_id"])
7 | minds["train"][0]
8 | labels = minds["train"].features["intent_class"].names
9 | label2id, id2label = dict(), dict()
10 | for i, label in enumerate(labels):
11 | label2id[label] = str(i)
12 | id2label[str(i)] = label
13 | id2label[str(2)]
14 | from transformers import AutoFeatureExtractor
15 |
16 | feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base")
17 | minds = minds.cast_column("audio", Audio(sampling_rate=16_000))
18 | minds["train"][0]
19 | def preprocess_function(examples):
20 | audio_arrays = [x["array"] for x in examples["audio"]]
21 | inputs = feature_extractor(
22 | audio_arrays, sampling_rate=feature_extractor.sampling_rate, max_length=16000, truncation=True
23 | )
24 | return inputs
25 | encoded_minds = minds.map(preprocess_function, remove_columns="audio", batched=True)
26 | encoded_minds = encoded_minds.rename_column("intent_class", "label")
27 | import evaluate
28 |
29 | accuracy = evaluate.load("accuracy")
30 | import numpy as np
31 |
32 |
33 | def compute_metrics(eval_pred):
34 | predictions = np.argmax(eval_pred.predictions, axis=1)
35 | return accuracy.compute(predictions=predictions, references=eval_pred.label_ids)
36 | from transformers import AutoModelForAudioClassification, TrainingArguments, Trainer
37 |
38 | num_labels = len(id2label)
39 | model = AutoModelForAudioClassification.from_pretrained(
40 | "facebook/wav2vec2-base", num_labels=num_labels, label2id=label2id, id2label=id2label
41 | )
42 | training_args = TrainingArguments(
43 | output_dir="my_awesome_mind_model",
44 | evaluation_strategy="epoch",
45 | save_strategy="epoch",
46 | learning_rate=3e-5,
47 | per_device_train_batch_size=32,
48 | gradient_accumulation_steps=4,
49 | per_device_eval_batch_size=32,
50 | num_train_epochs=2,
51 | warmup_ratio=0.1,
52 | logging_steps=10,
53 | load_best_model_at_end=True,
54 | metric_for_best_model="accuracy",
55 | #push_to_hub=True,
56 | )
57 |
58 | trainer = Trainer(
59 | model=model,
60 | args=training_args,
61 | train_dataset=encoded_minds["train"],
62 | eval_dataset=encoded_minds["test"],
63 | tokenizer=feature_extractor,
64 | compute_metrics=compute_metrics,
65 | )
66 |
67 | model = trainer.train()
68 | from datasets import load_dataset, Audio
69 |
70 | dataset = load_dataset("PolyAI/minds14", name="en-US", split="train")
71 | dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))
72 | sampling_rate = dataset.features["audio"].sampling_rate
73 | audio_file = dataset[0]["audio"]["path"]
74 | from transformers import pipeline
75 |
76 | classifier = pipeline("audio-classification", model="./my_awesome_mind_model/checkpoint-6/")
77 | classifier(audio_file)
--------------------------------------------------------------------------------
/Course/QT/05_menus_toolbar.md:
--------------------------------------------------------------------------------
1 | ## صفحه ۵ – منوها و نوار ابزار در PyQt6
2 |
3 | بیشتر نرمافزارهایی که استفاده میکنیم (مثل ورد، مرورگر یا حتی نوتپد) دارای **منو** هستند؛ جایی که گزینههایی مثل *File → Open → Save* یا *Help → About* قرار دارند. در PyQt6 ساخت منوها بسیار ساده است و با چند خط کد انجام میشود.
4 |
5 | ---
6 |
7 | ### ساختار اصلی منو
8 |
9 | برای استفاده از منو و نوار ابزار باید بهجای QWidget از **QMainWindow** استفاده کنیم، چون این کلاس امکاناتی مثل منوبار و استاتوسبار را به ما میدهد.
10 |
11 | ---
12 |
13 | ### مثال: ساخت یک منوی ساده
14 |
15 | ```python
16 | import sys
17 | from PyQt6.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction
18 |
19 | class MainWindow(QMainWindow):
20 | def __init__(self):
21 | super().__init__()
22 |
23 | # Set window properties
24 | self.setWindowTitle("Menu Example")
25 | self.resize(500, 400)
26 |
27 | # Create a text editor as central widget
28 | self.editor = QTextEdit()
29 | self.setCentralWidget(self.editor)
30 |
31 | # Create menu bar
32 | menu_bar = self.menuBar()
33 |
34 | # Create File menu
35 | file_menu = menu_bar.addMenu("File")
36 |
37 | # Create actions
38 | new_action = QAction("New", self)
39 | open_action = QAction("Open", self)
40 | save_action = QAction("Save", self)
41 | exit_action = QAction("Exit", self)
42 |
43 | # Add actions to File menu
44 | file_menu.addAction(new_action)
45 | file_menu.addAction(open_action)
46 | file_menu.addAction(save_action)
47 | file_menu.addSeparator() # Add a separator line
48 | file_menu.addAction(exit_action)
49 |
50 | # Connect exit action
51 | exit_action.triggered.connect(self.close)
52 |
53 | app = QApplication(sys.argv)
54 | window = MainWindow()
55 | window.show()
56 | sys.exit(app.exec())
57 | ```
58 |
59 | ---
60 |
61 | ### توضیح کد
62 |
63 | * بهجای QWidget از QMainWindow استفاده کردیم.
64 | * با `menuBar()` یک نوار منو ساختیم.
65 | * با `addMenu("File")` منوی File را ایجاد کردیم.
66 | * هر گزینه داخل منو یک **Action** است که با QAction ساخته میشود.
67 | * با `addSeparator()` خط جداکننده ایجاد کردیم.
68 | * در نهایت، گزینهی Exit را به تابع `close` وصل کردیم تا با انتخاب آن، برنامه بسته شود.
69 |
70 | ---
71 |
72 | ### افزودن نوار ابزار (ToolBar)
73 |
74 | میتوانیم همان Actionها را در یک **نوار ابزار** هم قرار دهیم:
75 |
76 | ```python
77 | # Create a toolbar and add actions
78 | tool_bar = self.addToolBar("Main Toolbar")
79 | tool_bar.addAction(new_action)
80 | tool_bar.addAction(open_action)
81 | tool_bar.addAction(save_action)
82 | ```
83 |
84 | با این کار، یک نوار ابزار زیر منو ظاهر میشود و گزینهها بهصورت دکمه نمایش داده خواهند شد. 🛠️
85 |
86 | ---
87 |
88 | 📌 نتیجه:
89 | برنامهی شما حالا منوی File دارد که شامل گزینههای New، Open، Save و Exit است. همچنین میتوانید با اضافه کردن ToolBar نرمافزارتان را حرفهایتر کنید. ✨
90 |
91 | ---
92 |
93 | ✅ در **صفحه ۶** میخواهیم سراغ یکی از پرکاربردترین بخشها برویم: **باز کردن و ذخیرهسازی فایل با QFileDialog**. 📂
94 |
95 | ---
96 |
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | # class Node:
2 | # def __init__(self, value=0, next=None):
3 | # self.value = value
4 | # self.next = next
5 |
6 |
7 | # class LinkedList:
8 | # def __init__(self, head=None):
9 | # self.head = head
10 |
11 | # def to_string(self):
12 | # node = self.head
13 | # while node is not None:
14 | # print(node.value, end = " -> ")
15 | # if type(node.value) == str:
16 | # raise TypeError("invalid type of value ...")
17 | # node = node.next
18 | # if node is None:
19 | # print("null ..")
20 |
21 | # node1 = Node(value=1)
22 | # node2 = Node(value=2)
23 | # node3 = Node(value=3)
24 |
25 | # node1.next = node2
26 | # node2.next = node3
27 | # ll = LinkedList(head=node1)
28 | # ll.to_string()
29 |
30 | # # class Node:
31 | # # def __init__(self, data):
32 | # # self.data = data #data node
33 | # # self.next = None #pointer to next node
34 |
35 |
36 | # # class LinkedList:
37 | # # def __init__(self):
38 | # # self.head = None #head of list
39 |
40 | # # def append(self, data):
41 | # # new_node = Node(data) #create new node
42 | # # if self.head is None:
43 | # # self.head=new_node
44 | # # else:
45 |
46 | # # current = self.head
47 | # # while current.next:
48 | # # current = current.next
49 | # # current.next = new_node
50 |
51 | # # def print_list(self):
52 | # # current =self.head
53 | # # while current:
54 | # # print(current.data, end = " -> ")
55 | # # current= current.next
56 | # # print("None")
57 |
58 | # # ll = LinkedList()
59 | # # ll.append(10)
60 | # # ll.append(20)
61 | # # ll.append(30)
62 | # # ll.print_list()
63 |
64 | # class Queue:
65 | # def __init__(self):
66 | # self.items = []
67 |
68 | # def enqueue(self, item):
69 | # self.items.append(item)
70 |
71 | # def dequeue(self):
72 | # if not self.is_empty():
73 | # return self.items.pop(0)
74 | # return None
75 | # def front(self):
76 | # if not self.is_empty():
77 | # return self.items[0]
78 |
79 | # def is_empty(self):
80 | # return len(self.items) == 0
81 |
82 | # q = Queue()
83 | # q.enqueue(1)
84 | # q.enqueue(2)
85 | # q.enqueue(3)
86 | # print(q.dequeue())
87 | # print(q.dequeue())
88 | # print(q.dequeue())
89 | # print(q.front())
90 | # print(q.is_empty())
91 |
92 |
93 | # x = "hello, how"
94 |
95 | # p= x.split(",")
96 | # print(len(p))
97 |
98 | def quick_sort(arr):
99 | if len(arr) <= 1:
100 | return arr
101 | pivot = arr[len(arr) // 2]
102 | left = [i for i in arr if i < pivot] #logn
103 | mid = [i for i in arr if i == pivot] #n
104 | right = [i for i in arr if i > pivot] #logn
105 | return quick_sort(left) + mid + quick_sort(right)
106 | print(quick_sort([34,7,23,32,5,62]))
107 |
--------------------------------------------------------------------------------
/Course/QT/08_text_editor.md:
--------------------------------------------------------------------------------
1 | ## صفحه ۸ – پروژه دفترچه یادداشت ساده (Text Editor) 📝
2 |
3 | در این پروژه از ویجت **QTextEdit** برای نوشتن متن استفاده میکنیم و با کمک **QFileDialog** امکان باز و ذخیره فایل را فراهم میکنیم. همچنین یک منوی ساده برای مدیریت عملیات ایجاد میکنیم.
4 |
5 | ---
6 |
7 | ### کد پروژه
8 |
9 | ```python
10 | import sys
11 | from PyQt6.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction, QFileDialog
12 |
13 | class TextEditor(QMainWindow):
14 | def __init__(self):
15 | super().__init__()
16 |
17 | # Set window properties
18 | self.setWindowTitle("Simple Text Editor")
19 | self.resize(600, 400)
20 |
21 | # Create text editor
22 | self.editor = QTextEdit()
23 | self.setCentralWidget(self.editor)
24 |
25 | # Create menu bar
26 | menu_bar = self.menuBar()
27 | file_menu = menu_bar.addMenu("File")
28 |
29 | # Create actions
30 | open_action = QAction("Open", self)
31 | save_action = QAction("Save", self)
32 | clear_action = QAction("Clear", self)
33 | exit_action = QAction("Exit", self)
34 |
35 | # Add actions to menu
36 | file_menu.addAction(open_action)
37 | file_menu.addAction(save_action)
38 | file_menu.addAction(clear_action)
39 | file_menu.addSeparator()
40 | file_menu.addAction(exit_action)
41 |
42 | # Connect actions
43 | open_action.triggered.connect(self.open_file)
44 | save_action.triggered.connect(self.save_file)
45 | clear_action.triggered.connect(self.clear_text)
46 | exit_action.triggered.connect(self.close)
47 |
48 | def open_file(self):
49 | # Open file dialog
50 | file_path, _ = QFileDialog.getOpenFileName(self, "Open File", "", "Text Files (*.txt)")
51 | if file_path:
52 | with open(file_path, "r", encoding="utf-8") as f:
53 | self.editor.setText(f.read())
54 |
55 | def save_file(self):
56 | # Save file dialog
57 | file_path, _ = QFileDialog.getSaveFileName(self, "Save File", "", "Text Files (*.txt)")
58 | if file_path:
59 | with open(file_path, "w", encoding="utf-8") as f:
60 | f.write(self.editor.toPlainText())
61 |
62 | def clear_text(self):
63 | # Clear editor content
64 | self.editor.clear()
65 |
66 | app = QApplication(sys.argv)
67 | window = TextEditor()
68 | window.show()
69 | sys.exit(app.exec())
70 | ```
71 |
72 | ---
73 |
74 | ### توضیح کد
75 |
76 | * `QTextEdit` یک ویجت چند خطی برای نوشتن و ویرایش متن است.
77 | * از **منوی File** برای مدیریت عملیات استفاده کردیم: باز کردن، ذخیره کردن، پاک کردن متن و خروج.
78 | * اکشن "Clear" محتوای ادیتور را خالی میکند.
79 | * فایلهای متنی با انکدینگ UTF-8 باز و ذخیره میشوند.
80 |
81 | ---
82 |
83 | 📌 نتیجه:
84 | حالا یک دفترچه یادداشت ساده دارید که میتواند متن را ویرایش کند، در فایل ذخیره کند و دوباره باز کند. درست مثل یک **نوتپد کوچک**. ✨
85 |
86 | ---
87 |
88 | ✅ در **صفحه ۹** به سراغ ویجتهای پیشرفتهتر میرویم مثل **تقویم (QCalendarWidget) 📅، اسلایدر (QSlider) 🎚️ و ProgressBar 🔄** که در خیلی از نرمافزارهای حرفهای کاربرد دارند.
89 |
90 |
--------------------------------------------------------------------------------
/سطح-پیشرفته-پایتون.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 🧠 **سرفصل کامل پایتون – سطح پیشرفته (ترم سوم)**
4 |
5 | **هدف کلی:** توانمندسازی هنرجو برای توسعه نرمافزارهای حرفهای، تسلط بر مفاهیم پیشرفته برنامهنویسی، بهینهسازی، طراحی ساختارهای نرمافزاری و آمادهسازی برای پروژههای واقعی.
6 |
7 | ---
8 |
9 | ### **۱. مروری عمیق بر برنامهنویسی شیگرا**
10 |
11 | * بازبینی مفاهیم کلاس و وراثت
12 | * چندریختی (Polymorphism) و وراثت چندگانه
13 | * ترکیب (Composition) در مقابل وراثت
14 | * پیادهسازی الگوهای طراحی (Design Patterns) ساده مانند Singleton و Factory
15 |
16 | ---
17 |
18 | ### **۲. متدهای جادویی پیشرفته (Advanced Magic Methods)**
19 |
20 | * متدهای `__getitem__`, `__setitem__`, `__iter__`, `__next__`, `__contains__`
21 | * پیادهسازی iterator و generator سفارشی
22 | * استفاده از متدهای `__call__`, `__enter__`, `__exit__` برای ساخت context manager
23 | * بارگذاری عملگرها (operator overloading) با متدهایی مانند `__add__`, `__eq__`, `__lt__`
24 |
25 | ---
26 |
27 | ### **۳. برنامهنویسی تابعگرا پیشرفته**
28 |
29 | * closures و decorators
30 | * توابع بازگشتی بهینه (مانند tail recursion)
31 | * توابع تو در تو و مدیریت بازگشت مقدار
32 | * استفاده از کتابخانههای استاندارد `functools`, `itertools`, `operator`
33 |
34 | ---
35 |
36 | ### **۴. مدیریت حافظه و بهینهسازی عملکرد**
37 |
38 | * بررسی مدیریت حافظه با ماژولهای `sys` و `gc`
39 | * تفاوت نوعهای mutable و immutable
40 | * مدیریت منابع با context manager
41 | * بررسی و بهینهسازی کارایی کد با `timeit` و `cProfile`
42 |
43 | ---
44 |
45 | ### **۵. تست و دیباگ حرفهای**
46 |
47 | * تست واحد (Unit Testing) با ابزارهای `unittest` و `pytest`
48 | * نوشتن تستهای خودکار و استفاده از `assert`
49 | * مدیریت خطا و استثناها در تستها
50 | * لاگگیری و تحلیل رفتار برنامه با ماژول `logging`
51 |
52 | ---
53 |
54 | ### **۶. کار با پایگاه دادهها**
55 |
56 | * ارتباط با پایگاه دادههای SQLite و PostgreSQL با ماژولهای `sqlite3` و `psycopg2`
57 | * نوشتن و بهینهسازی کوئریها
58 | * آشنایی مقدماتی با ORM و استفاده از `SQLAlchemy`
59 | * معرفی اولیه به پایگاه داده NoSQL و کار با `pymongo` (MongoDB)
60 |
61 | ---
62 |
63 | ### **۷. شبکه و ارتباطات**
64 |
65 | * ساخت کلاینت و سرور ساده با ماژول `socket`
66 | * آشنایی با پروتکلهای TCP و UDP
67 | * مدیریت ارسال و دریافت دادهها
68 | * آشنایی با ارسال درخواستهای HTTP با `requests` (بدون تمرکز بر APIهای پیشرفته)
69 |
70 | ---
71 |
72 | ### **۸. کار با فایلهای پیشرفته**
73 |
74 | * کار با فایلهای باینری
75 | * فشردهسازی و بازکردن فایلها با ماژولهای `zipfile` و `gzip`
76 | * خواندن و نوشتن فایلهای Excel با `openpyxl` یا `pandas` (در حد خواندن و نوشتن فایلها، بدون تحلیل داده)
77 |
78 | ---
79 |
80 | ### **۹. پردازش دادهها و مصورسازی ساده**
81 |
82 | * آشنایی کلی با `pandas` و `numpy` (فقط برای کار با دادهها، بدون ورود به یادگیری ماشین)
83 | * مصورسازی دادهها با `matplotlib`
84 | * تحلیل آماری ساده و استخراج گزارش از دادهها
85 |
86 | ---
87 |
88 | ### **۱۰. پروژه پایانی سطح پیشرفته**
89 |
90 | **پروژههای پیشنهادی:**
91 |
92 | * سامانه مدیریت کتابخانه با پایگاه داده و رابط متنی
93 | * خزنده وب (Web Crawler) ساده برای استخراج و ذخیره دادهها
94 | * ساخت Task Scheduler برای زمانبندی وظایف با قابلیت لاگگیری
95 | * پیادهسازی یک REST API ساده با فریمورکهای وب مانند Flask یا FastAPI (بدون کاربرد ماشین لرنینگ)
96 |
97 | ---
98 |
99 |
--------------------------------------------------------------------------------
/gold.md:
--------------------------------------------------------------------------------
1 |
2 | # امکانات وباپلیکیشن ✨
3 |
4 | ## 1. اپلیکیشن موبایل 📱
5 | - **طراحی اپلیکیشن موبایل**: ارائه اپلیکیشن برای کاربران اندروید و iOS جهت دسترسی آسانتر.
6 | - **ناوبری آسان**: طراحی رابط کاربری ساده و کاربرپسند برای سهولت استفاده.
7 |
8 | ## 2. امکانات اصلی وباپلیکیشن 🏛️
9 | - **ثبتنام و احراز هویت آنلاین**: کاربران میتوانند به سادگی ثبتنام کرده و هویت خود را تأیید کنند.
10 | - **خرید و فروش طلای آبشده**: امکان خرید و فروش طلای آبشده به صورت آنلاین با رابط کاربری آسان.
11 | - **سرمایهگذاری با مبالغ کم**: امکان سرمایهگذاری در طلا با مبالغ پایین برای جذب کاربران بیشتر.
12 | - **کارمزد پایین و شفافیت معاملات**: ارائه اطلاعات شفاف درباره کارمزدها به کاربران.
13 | - **نقدشوندگی بالا**: تضمین نقدشوندگی بالا برای راحتی کاربران در خرید و فروش.
14 | - **آموزش و راهنما**: ارائه مطالب آموزشی و ویدیوئی برای آشنایی بیشتر کاربران با امکانات وباپلیکیشن.
15 | - **اعلانها و پاپ آپ**: اطلاعرسانی به کاربران از طریق اعلانها و پاپ آپهای مناسب.
16 | - **امتیازدهی و نظرسنجی**: امکان امتیازدهی و نظرسنجی از کاربران برای بهبود خدمات.
17 | - **سوالات متداول**: ارائه بخش سوالات متداول برای پاسخ به سوالات رایج کاربران.
18 | - **صفحه تماس با ما**: امکان ارتباط کاربران با تیم پشتیبانی از طریق فرم تماس یا اطلاعات تماس.
19 | - **پشتیبانی آنلاین**: وجود راهنما و چت آنلاین برای کمک به کاربران.
20 | - **صفحه درباره ما**: ارائه اطلاعات درباره تاریخچه و اهداف برای افزایش اعتماد کاربران.
21 | - **صفحه مجوزها**: ارائه اطلاعات درباره مجوزهای اخذ شده و مجوزهای قانونی برای افزایش اعتبار وباپلیکیشن.
22 |
23 | ## 3. گزارشگیری و داشبورد 📊
24 | - **نمایش موجودی طلا و کیف پول**: داشبورد کاربر باید موجودی طلا و وضعیت کیف پول را بهصورت واضح نشان دهد.
25 | - **گزارش تراکنشها**: امکان مشاهده تاریخچه تمامی تراکنشها به صورت تفصیلی.
26 | - **نمودار تغییرات قیمت طلا**: نمایش نمودارهای زنده از تغییرات قیمت طلا برای تحلیل بهتر.
27 | - **محاسبه خودکار**: محاسبه خودکار موجودی و سود و زیان کاربران بهصورت لحظهای.
28 | - **صفحه واریز پول**: ارائه صفحهای برای واریز پول به حساب کاربری با روشهای مختلف پرداخت.
29 | - **صفحه برداشت پول**: امکان برداشت پول از حساب کاربری به روشهای مختلف و ارائه اطلاعات لازم برای این فرآیند.
30 | - **صفحه دریافت طلا با طرحهای مختلف**: ارائه صفحهای مشابه فروشگاه که در آن کاربران میتوانند طرحهای مختلف طلا را مشاهده و خریداری کنند. این صفحه باید شامل توضیحات، قیمت، و تصاویری از هر طرح باشد و امکان افزودن به سبد خرید و نهایی کردن خرید نیز فراهم شود.
31 | - **ارسال تیکت**: ارسال تیکت برای کمک به کاربران.
32 |
33 | ## 4. حساب کاربری 🔑
34 | - **حساب کاربری شخصی**: هر کاربر باید بتواند یک حساب کاربری شخصی داشته باشد تا بتواند اطلاعات خود را ویرایش کند.
35 | - **امکان اضافه کردن کارت بانکی**: کاربران باید بتوانند کارت بانکی خود را به حساب کاربری اضافه کنند.
36 | - **خروج امن از حساب**: امکان خروج امن از حساب کاربری با یک کلیک.
37 |
38 | ## 5. امنیت و مجوزها 🔒
39 | - **گرفتن مجوزها**: اخذ مجوزهای لازم مانند اینماد برای تأمین اعتبار و اعتماد بیشتر به وباپلیکیشن.
40 | - **لینک شبکههای اجتماعی**: امکان ارتباط با شبکههای اجتماعی برای افزایش تعامل.
41 | - **روشهای امنیتی**: استفاده از پروتکلهای امنیتی پیشرفته برای حفاظت از اطلاعات کاربران.
42 |
43 | ## 6. امکانات اضافی 🌟
44 | - **سئو سازی و تولید محتوا**: بهینهسازی محتوا برای موتورهای جستجو به منظور جذب کاربران جدید.
45 | - **انتقال و دریافت طلا**: قابلیت انتقال طلا به دیگر کاربران یا دریافت طلا از آنها.
46 | - **نظرسنجی از کاربران**: امکان نظرسنجی برای جمعآوری بازخورد و بهبود خدمات.
47 |
48 |
--------------------------------------------------------------------------------
/ChatBot/ecommerce:
--------------------------------------------------------------------------------
1 | import json
2 | import random
3 | import nltk
4 | from nltk.stem import WordNetLemmatizer
5 | import numpy as np
6 | import tensorflow as tf
7 | from tensorflow import keras
8 | from tensorflow.keras import layers
9 |
10 | # Download necessary NLTK resources
11 | nltk.download('punkt')
12 | nltk.download('wordnet')
13 |
14 | # Load the intents data from the JSON file
15 | with open('data.json') as file:
16 | data = json.load(file)
17 |
18 | # Initialize the lemmatizer
19 | lemmatizer = WordNetLemmatizer()
20 | documents = []
21 | classes = []
22 | words = []
23 |
24 | # Process the intents data
25 | for intent in data['intents']:
26 | for pattern in intent['patterns']:
27 | # Tokenize each word in the pattern
28 | word_list = nltk.word_tokenize(pattern)
29 | words.extend(word_list)
30 | documents.append((word_list, intent['tag']))
31 | if intent['tag'] not in classes:
32 | classes.append(intent['tag'])
33 |
34 | # Lemmatize and lower the words, and remove duplicates
35 | words = [lemmatizer.lemmatize(w.lower()) for w in words]
36 | words = sorted(set(words))
37 | classes = sorted(set(classes))
38 |
39 | # Prepare training data
40 | training = []
41 | output_empty = [0] * len(classes)
42 |
43 | for doc in documents:
44 | bag = []
45 | pattern_words = doc[0]
46 | pattern_words = [lemmatizer.lemmatize(word.lower()) for word in pattern_words]
47 |
48 | # Create the bag of words
49 | for w in words:
50 | bag.append(1) if w in pattern_words else bag.append(0)
51 |
52 | # Create the output row for the current intent
53 | output_row = list(output_empty)
54 | output_row[classes.index(doc[1])] = 1
55 |
56 | training.append(bag + output_row)
57 |
58 | # Convert training data to a NumPy array
59 | training = np.array(training)
60 | X_train = training[:, :-len(classes)]
61 | y_train = training[:, -len(classes):]
62 |
63 | # Build the model
64 | model = keras.Sequential()
65 | model.add(layers.Dense(128, input_shape=(len(X_train[0]),), activation='relu'))
66 | model.add(layers.Dense(64, activation='relu'))
67 | model.add(layers.Dense(len(y_train[0]), activation='softmax'))
68 |
69 | # Compile the model
70 | model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
71 | # Train the model
72 | model.fit(X_train, y_train, epochs=200, batch_size=5, verbose=1)
73 |
74 | # Function to predict the intent of the input sentence
75 | def predict_class(sentence):
76 | p = [lemmatizer.lemmatize(word.lower()) for word in nltk.word_tokenize(sentence)]
77 | bag = [0] * len(words)
78 | for s in p:
79 | for i, w in enumerate(words):
80 | if w == s:
81 | bag[i] = 1
82 | res = model.predict(np.array([bag]), verbose=0)
83 | return classes[np.argmax(res)]
84 |
85 | # Function to get a response based on the predicted intent
86 | def get_response(intent):
87 | for i in data['intents']:
88 | if i['tag'] == intent:
89 | return random.choice(i['responses'])
90 |
91 | # Chat loop for user interaction
92 | while True:
93 | user_input = input("You: ")
94 | if user_input.lower() == "goodbye":
95 | print("Chatbot: Goodbye!")
96 | break
97 | intent = predict_class(user_input)
98 | response = get_response(intent)
99 | print("Chatbot:", response)
100 |
--------------------------------------------------------------------------------
/test.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 16,
6 | "id": "425eadf1",
7 | "metadata": {},
8 | "outputs": [
9 | {
10 | "data": {
11 | "text/plain": [
12 | "array([[1, 2],\n",
13 | " [3, 4],\n",
14 | " [6, 7],\n",
15 | " [8, 9]])"
16 | ]
17 | },
18 | "execution_count": 16,
19 | "metadata": {},
20 | "output_type": "execute_result"
21 | }
22 | ],
23 | "source": [
24 | "import numpy as np\n",
25 | "\n",
26 | "# print(np.__version__)\n",
27 | "arr = [[1,2,3,4],[6,7,8,9]]\n",
28 | "b = 2\n",
29 | "\n",
30 | "# \n",
31 | "# np.array(arr) + np.array(b)\n",
32 | "# np.array(arr).shape\n",
33 | "# np.zeros((2,2))\n",
34 | "np.array(arr).reshape(4,2)"
35 | ]
36 | },
37 | {
38 | "cell_type": "code",
39 | "execution_count": 23,
40 | "id": "83d3a69c",
41 | "metadata": {},
42 | "outputs": [
43 | {
44 | "data": {
45 | "text/plain": [
46 | "[array([[2, 3]]), array([[8, 9]])]"
47 | ]
48 | },
49 | "execution_count": 23,
50 | "metadata": {},
51 | "output_type": "execute_result"
52 | }
53 | ],
54 | "source": [
55 | "a = np.array([[2,3],[8,9]])\n",
56 | "b = np.array([[22,33],[88,99]])\n",
57 | "np.vsplit(a, 2)\n"
58 | ]
59 | },
60 | {
61 | "cell_type": "code",
62 | "execution_count": 156,
63 | "id": "9eb0f525",
64 | "metadata": {},
65 | "outputs": [
66 | {
67 | "data": {
68 | "text/plain": [
69 | "array([[0.0407288 , 0.85546058, 0.70365786, 0.47417383, 0.09783416,\n",
70 | " 0.49161588],\n",
71 | " [0.47347177, 0.17320187, 0.43385165, 0.39850473, 0.6158501 ,\n",
72 | " 0.63509365]])"
73 | ]
74 | },
75 | "execution_count": 156,
76 | "metadata": {},
77 | "output_type": "execute_result"
78 | }
79 | ],
80 | "source": [
81 | "# for i in np.nditer(a):\n",
82 | "# print(i)\n",
83 | "# np.linalg.det(a)\n",
84 | "# np.random.rand(5)\n",
85 | "# np.datetime64(\"2025-12-12\")\n",
86 | "# c = [1,2,3]\n",
87 | "# type(np.asarray(c))\n",
88 | "# np.arange(1,10,2)\n",
89 | "# np.logspace(1,10,num=5)\n",
90 | "# x = np.array([[1,2,3],[4,5,6]])\n",
91 | "# np.mean(x)\n",
92 | "# np.std(x)\n",
93 | "# np.dot(a, b)\n",
94 | "# y = x.view()\n",
95 | "# x[0] = 111\n",
96 | "# x\n",
97 | "# y\n",
98 | "arr = [1,5,9,8,7,5]\n",
99 | "np.random.rand(2,6)\n",
100 | "# np.random.uniform(2,7)\n",
101 | "# np.random.normal(0,1,5)\n",
102 | "# np.random.seed(42)\n",
103 | "# x = np.random.choice(arr, size=3,replace=False)\n",
104 | "# np.random.uniform(1,101,size=5)\n"
105 | ]
106 | }
107 | ],
108 | "metadata": {
109 | "kernelspec": {
110 | "display_name": "Python (GAN)",
111 | "language": "python",
112 | "name": "gan"
113 | },
114 | "language_info": {
115 | "codemirror_mode": {
116 | "name": "ipython",
117 | "version": 3
118 | },
119 | "file_extension": ".py",
120 | "mimetype": "text/x-python",
121 | "name": "python",
122 | "nbconvert_exporter": "python",
123 | "pygments_lexer": "ipython3",
124 | "version": "3.12.9"
125 | }
126 | },
127 | "nbformat": 4,
128 | "nbformat_minor": 5
129 | }
130 |
--------------------------------------------------------------------------------
/agi/analyze.py:
--------------------------------------------------------------------------------
1 | import os
2 | import pandas as pd
3 | # Paths for audio files and text files
4 | audio_folder = './wav'
5 | tsv_folder = './text'
6 |
7 | # def process_data():
8 | # Load audio files
9 | audio_files = {f for f in os.listdir(audio_folder) if f.endswith('.mp3') or f.endswith('.wav')}
10 |
11 | # Dictionary to store text data
12 | texts = {}
13 |
14 | # Process TSV files
15 | for tsv_file in os.listdir(tsv_folder):
16 | if tsv_file.endswith('.tsv'):
17 | tsv_path = os.path.join(tsv_folder, tsv_file)
18 | df_tsv = pd.read_csv(tsv_path, sep='\t', header=0)
19 |
20 | # Display number of columns and their names
21 | print(f"Processing {tsv_file}:")
22 | print(f"Number of columns: {df_tsv.shape[1]}")
23 | print(f"Columns: {df_tsv.columns.tolist()}")
24 |
25 | # Check if required columns exist
26 | if {'path', 'sentence'}.issubset(df_tsv.columns):
27 | for index, row in df_tsv.iterrows():
28 | audio_file_name = row['path']
29 | sentence_text = row['sentence']
30 | texts[audio_file_name] = sentence_text
31 |
32 | # Create a DataFrame from processed data
33 | df = pd.DataFrame(list(texts.items()), columns=['audio_file', 'text'])
34 |
35 | # Check if audio files exist
36 | df['audio_exists'] = df['audio_file'].apply(lambda x: x in audio_files)
37 |
38 | # Show missing audio files
39 | missing_audio = df[~df['audio_exists']]
40 | if not missing_audio.empty:
41 | print("Missing audio files:")
42 | print(missing_audio[['audio_file']])
43 |
44 | # Display total number of unique audio files and texts
45 | print(f"Total unique audio files: {df['audio_file'].nunique()}")
46 | print(f"Total texts: {df['text'].count()}")
47 |
48 | # Check if voting columns exist
49 | if {'up_votes', 'down_votes'}.issubset(df_tsv.columns):
50 | print("Up votes distribution:")
51 | print(df_tsv['up_votes'].describe())
52 |
53 | print("Down votes distribution:")
54 | print(df_tsv['down_votes'].describe())
55 |
56 | # Calculate total votes
57 | df_tsv['total_votes'] = df_tsv['up_votes'] + df_tsv['down_votes']
58 | print("Total votes distribution:")
59 | print(df_tsv['total_votes'].describe())
60 |
61 | # Analyze sentences
62 | if 'sentence' in df_tsv.columns:
63 | df_tsv['sentence_length'] = df_tsv['sentence'].apply(len)
64 | df_tsv['word_count'] = df_tsv['sentence'].apply(lambda x: len(x.split()))
65 |
66 | print("Sentence length distribution:")
67 | print(df_tsv['sentence_length'].describe())
68 |
69 | print("Word count distribution:")
70 | print(df_tsv['word_count'].describe())
71 |
72 | print("Sample sentences with their lengths and word counts:")
73 | print(df_tsv[['sentence', 'sentence_length', 'word_count']].head())
74 |
75 | # الگو برای شناسایی ترجمه نشده
76 | pattern = r'(?i)(N/A|None|ترجمه نشده)' # به صورت غیر حساس به حروف بزرگ و کوچک
77 |
78 | # پیدا کردن خطوطی که شامل این الگو هستند
79 | untranslated_rows = df_tsv[df_tsv['sentence'].str.contains(pattern, na=False)]
80 |
81 | # نمایش نتایج
82 | print(f"untranslated_rows:{untranslated_rows}")
83 | # return df
84 |
--------------------------------------------------------------------------------
/Dr-rabiee/main.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": null,
6 | "id": "cb28db31",
7 | "metadata": {},
8 | "outputs": [],
9 | "source": [
10 | "! pip install scipy"
11 | ]
12 | },
13 | {
14 | "cell_type": "code",
15 | "execution_count": 5,
16 | "id": "edf116e4",
17 | "metadata": {},
18 | "outputs": [
19 | {
20 | "name": "stdout",
21 | "output_type": "stream",
22 | "text": [
23 | "Definite integral value: 2.3333333333333335\n",
24 | "Estimated error: 2.590520390792032e-14\n"
25 | ]
26 | }
27 | ],
28 | "source": [
29 | "import numpy as np\n",
30 | "from scipy import integrate\n",
31 | "\n",
32 | "# Define the function to be integrated\n",
33 | "def f(x):\n",
34 | " \"\"\"\n",
35 | " Define the function f(x) = x^2.\n",
36 | "\n",
37 | " Args:\n",
38 | " x (float or numpy.ndarray): The input value or array of values.\n",
39 | "\n",
40 | " Returns:\n",
41 | " float or numpy.ndarray: The result of x^2.\n",
42 | " \"\"\"\n",
43 | " return x**2\n",
44 | "\n",
45 | "# Calculate the definite integral from 1 to 2\n",
46 | "result, error = integrate.quad(f, 1, 2)\n",
47 | "\n",
48 | "# Print the result\n",
49 | "print(\"Definite integral value:\", result)\n",
50 | "print(\"Estimated error:\", error)\n"
51 | ]
52 | },
53 | {
54 | "cell_type": "code",
55 | "execution_count": 2,
56 | "id": "258b7614",
57 | "metadata": {},
58 | "outputs": [
59 | {
60 | "name": "stdout",
61 | "output_type": "stream",
62 | "text": [
63 | "Manual integral value: 2.333333333333333\n"
64 | ]
65 | }
66 | ],
67 | "source": [
68 | "\n",
69 | "# Manual calculation of the definite integral\n",
70 | "def manual_integration(lower_limit, upper_limit):\n",
71 | " \"\"\"\n",
72 | " Calculate the definite integral of x^2 manually.\n",
73 | "\n",
74 | " The antiderivative of x^2 is x^3 / 3.\n",
75 | " This function calculates the definite integral using the limits of integration.\n",
76 | "\n",
77 | " Args:\n",
78 | " lower_limit (float): The lower limit of integration.\n",
79 | " upper_limit (float): The upper limit of integration.\n",
80 | "\n",
81 | " Returns:\n",
82 | " float: The result of the definite integral.\n",
83 | " \"\"\"\n",
84 | " # The antiderivative of the function x^2 is x^3 / 3\n",
85 | " upper_value = (upper_limit**3) / 3\n",
86 | " lower_value = (lower_limit**3) / 3\n",
87 | " return upper_value - lower_value\n",
88 | "\n",
89 | "manual_result = manual_integration(1, 2)\n",
90 | "\n",
91 | "print(\"Manual integral value:\", manual_result)\n"
92 | ]
93 | }
94 | ],
95 | "metadata": {
96 | "kernelspec": {
97 | "display_name": "Python (GAN)",
98 | "language": "python",
99 | "name": "gan"
100 | },
101 | "language_info": {
102 | "codemirror_mode": {
103 | "name": "ipython",
104 | "version": 3
105 | },
106 | "file_extension": ".py",
107 | "mimetype": "text/x-python",
108 | "name": "python",
109 | "nbconvert_exporter": "python",
110 | "pygments_lexer": "ipython3",
111 | "version": "3.12.9"
112 | }
113 | },
114 | "nbformat": 4,
115 | "nbformat_minor": 5
116 | }
117 |
--------------------------------------------------------------------------------
/ChatBot/khodro.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "\n",
8 | ""
9 | ]
10 | },
11 | {
12 | "cell_type": "code",
13 | "execution_count": 1,
14 | "metadata": {},
15 | "outputs": [
16 | {
17 | "name": "stdout",
18 | "output_type": "stream",
19 | "text": [
20 | "Defect prediction: No defect\n"
21 | ]
22 | }
23 | ],
24 | "source": [
25 | "import pandas as pd\n",
26 | "from sklearn.naive_bayes import GaussianNB\n",
27 | "import matplotlib.pyplot as plt\n",
28 | "import seaborn as sns\n",
29 | "# Creating the dataset\n",
30 | "data = {\n",
31 | " 'Year': [2011, 2011, 2011, 2011, 2012, 2012, 2012, 2011, 2012, 2012],\n",
32 | " 'Type': ['Sport', 'Sport', 'Sport', 'Sport', 'Sport', 'SUV', 'SUV', 'SUV', 'SUV', 'Sport'],\n",
33 | " 'Color': ['Red', 'Red', 'Yellow', 'Yellow', 'Yellow', 'Yellow', 'Yellow', 'Red', 'Red', 'Red'],\n",
34 | " 'Defect': [1, 0, 1, 0, 1, 0, 1, 0, 0, 1] # 1 for has defect and 0 for does not\n",
35 | "}\n",
36 | "\n",
37 | "# Convert the data into a DataFrame\n",
38 | "df = pd.DataFrame(data)\n",
39 | "\n",
40 | "# Encode categorical features as numeric\n",
41 | "df['Type'] = df['Type'].apply(lambda x: 1 if x == 'Sport' else 0)\n",
42 | "df['Color'] = df['Color'].apply(lambda x: 1 if x == 'Red' else 0)\n",
43 | "\n",
44 | "# Separate features and labels\n",
45 | "X = df[['Year', 'Type', 'Color']]\n",
46 | "y = df['Defect']\n",
47 | "\n",
48 | "# Create and train the model\n",
49 | "model = GaussianNB()\n",
50 | "model.fit(X, y)\n",
51 | "\n",
52 | "# Predict for a new sample (Year 2011, Type SUV, Color Red)\n",
53 | "new_data = pd.DataFrame({\n",
54 | " 'Year': [2011],\n",
55 | " 'Type': [0], # SUV = 0\n",
56 | " 'Color': [1] # Red = 1\n",
57 | "})\n",
58 | "\n",
59 | "prediction = model.predict(new_data)\n",
60 | "\n",
61 | "# Display the result\n",
62 | "result = \"Has defect\" if prediction[0] == 1 else \"No defect\"\n",
63 | "print(f\"Defect prediction: {result}\")\n",
64 | "\n",
65 | "\n",
66 | "\n",
67 | "# # Create a count of defects based on Type and Color\n",
68 | "# defect_counts = df.groupby(['Type', 'Color'])['Defect'].sum().reset_index()\n",
69 | "\n",
70 | "# # Plotting\n",
71 | "# # plt.figure(figsize=(10, 6))\n",
72 | "# sns.barplot(data=defect_counts, x='Type', y='Defect', hue='Color', palette='muted')\n",
73 | "\n",
74 | "# # Adding labels and title\n",
75 | "# plt.xlabel('Type (0: SUV, 1: Sport)')\n",
76 | "# plt.ylabel('Number of Defects')\n",
77 | "# plt.title('Number of Defects by Type and Color')\n",
78 | "# plt.xticks(ticks=[0, 1], labels=['SUV', 'Sport'])\n",
79 | "# plt.legend(title='Color', labels=['Yellow', 'Red'])\n",
80 | "# plt.grid(True)\n",
81 | "# plt.show()"
82 | ]
83 | }
84 | ],
85 | "metadata": {
86 | "kernelspec": {
87 | "display_name": "venv",
88 | "language": "python",
89 | "name": "python3"
90 | },
91 | "language_info": {
92 | "codemirror_mode": {
93 | "name": "ipython",
94 | "version": 3
95 | },
96 | "file_extension": ".py",
97 | "mimetype": "text/x-python",
98 | "name": "python",
99 | "nbconvert_exporter": "python",
100 | "pygments_lexer": "ipython3",
101 | "version": "3.12.3"
102 | }
103 | },
104 | "nbformat": 4,
105 | "nbformat_minor": 2
106 | }
107 |
--------------------------------------------------------------------------------
/Course/blob_setiment_pos_neg.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "colab": {
6 | "provenance": [],
7 | "authorship_tag": "ABX9TyMJQb7bvKS74wOtDvhCKSzo",
8 | "include_colab_link": true
9 | },
10 | "kernelspec": {
11 | "name": "python3",
12 | "display_name": "Python 3"
13 | },
14 | "language_info": {
15 | "name": "python"
16 | }
17 | },
18 | "cells": [
19 | {
20 | "cell_type": "markdown",
21 | "metadata": {
22 | "id": "view-in-github",
23 | "colab_type": "text"
24 | },
25 | "source": [
26 | ""
27 | ]
28 | },
29 | {
30 | "cell_type": "code",
31 | "source": [
32 | "!pip install textblob"
33 | ],
34 | "metadata": {
35 | "colab": {
36 | "base_uri": "https://localhost:8080/"
37 | },
38 | "id": "EnWtxODyMQDh",
39 | "outputId": "3c9549b2-f497-40d9-bed3-304b8c8f4470"
40 | },
41 | "execution_count": null,
42 | "outputs": [
43 | {
44 | "output_type": "stream",
45 | "name": "stdout",
46 | "text": [
47 | "Requirement already satisfied: textblob in /usr/local/lib/python3.11/dist-packages (0.19.0)\n",
48 | "Requirement already satisfied: nltk>=3.9 in /usr/local/lib/python3.11/dist-packages (from textblob) (3.9.1)\n",
49 | "Requirement already satisfied: click in /usr/local/lib/python3.11/dist-packages (from nltk>=3.9->textblob) (8.1.8)\n",
50 | "Requirement already satisfied: joblib in /usr/local/lib/python3.11/dist-packages (from nltk>=3.9->textblob) (1.4.2)\n",
51 | "Requirement already satisfied: regex>=2021.8.3 in /usr/local/lib/python3.11/dist-packages (from nltk>=3.9->textblob) (2024.11.6)\n",
52 | "Requirement already satisfied: tqdm in /usr/local/lib/python3.11/dist-packages (from nltk>=3.9->textblob) (4.67.1)\n"
53 | ]
54 | }
55 | ]
56 | },
57 | {
58 | "cell_type": "code",
59 | "execution_count": null,
60 | "metadata": {
61 | "colab": {
62 | "base_uri": "https://localhost:8080/"
63 | },
64 | "id": "GMxOCKfDMLye",
65 | "outputId": "a9b6c41f-8a38-4106-a715-676833b381f7"
66 | },
67 | "outputs": [
68 | {
69 | "output_type": "stream",
70 | "name": "stdout",
71 | "text": [
72 | "Polarity: -0.4, Subjectivity: 0.9\n",
73 | "احساس منفی\n"
74 | ]
75 | }
76 | ],
77 | "source": [
78 | "\n",
79 | "# نصب کتابخانه\n",
80 | "# !pip install textblob\n",
81 | "\n",
82 | "from textblob import TextBlob\n",
83 | "\n",
84 | "# متن نمونه\n",
85 | "text = \"I hate this product! It's absolutely wonderful.I am frusrated\"\n",
86 | "\n",
87 | "# تحلیل احساسات\n",
88 | "blob = TextBlob(text)\n",
89 | "sentiment = blob.sentiment\n",
90 | "\n",
91 | "print(f\"Polarity: {sentiment.polarity}, Subjectivity: {sentiment.subjectivity}\")\n",
92 | "\n",
93 | "if sentiment.polarity > 0:\n",
94 | " print(\"احساس مثبت\")\n",
95 | "elif sentiment.polarity < 0:\n",
96 | " print(\"احساس منفی\")\n",
97 | "else:\n",
98 | " print(\"احساس خنثی\")"
99 | ]
100 | }
101 | ]
102 | }
--------------------------------------------------------------------------------
/agi/quality_sound.py:
--------------------------------------------------------------------------------
1 | # import os
2 | # import librosa
3 | # import numpy as np
4 | # import pandas as pd
5 |
6 | # audio_folder = './clips'
7 | # low_quality_files = []
8 |
9 | # def check_audio_quality(file_path):
10 | # try:
11 | # audio, sr = librosa.load(file_path, sr=None)
12 |
13 | # # محاسبه RMS
14 | # rms = np.sqrt(np.mean(audio**2))
15 |
16 | # # محاسبه سطح نویز (SNR)
17 | # noise_level = np.mean(np.abs(audio))
18 | # snr = 20 * np.log10(rms / noise_level) if noise_level > 0 else -np.inf
19 |
20 | # # معیارهای کیفیت
21 | # if rms < 0.01 or snr < 10: # این مقادیر میتوانند بر اساس نیاز شما تغییر کنند
22 | # return True # کیفیت پایین
23 | # else:
24 | # return False # کیفیت خوب
25 | # except Exception as e:
26 | # print(f"Error processing {file_path}: {e}")
27 | # return False
28 |
29 | # # بررسی همه فایلهای صوتی در پوشه
30 | # for audio_file in os.listdir(audio_folder):
31 | # if audio_file.endswith('.wav') or audio_file.endswith('.mp3'):
32 | # file_path = os.path.join(audio_folder, audio_file)
33 | # if check_audio_quality(file_path):
34 | # low_quality_files.append(audio_file)
35 |
36 | # # نمایش فایلهای با کیفیت پایین
37 | # print(f"Files with low quality:{len(low_quality_files)}")
38 | # # for file in low_quality_files:
39 | # # print(file)
40 |
41 |
42 | import os
43 | import librosa
44 | import numpy as np
45 | import pandas as pd
46 |
47 | audio_folder = './wav'
48 | low_quality_files = []
49 |
50 | def calculate_snr(audio):
51 | """محاسبه نسبت سیگنال به نویز (SNR)"""
52 | signal_power = np.mean(audio**2)
53 | noise_power = np.var(audio)
54 | if noise_power == 0:
55 | return np.inf # اگر نویز وجود نداشته باشد
56 | snr = 10 * np.log10(signal_power / noise_power)
57 | return snr
58 |
59 | def calculate_thd(audio, sr, n_harmonics=5):
60 | """محاسبه اعوجاج هارمونیک کل (THD)"""
61 | fft = np.fft.fft(audio)
62 | magnitude = np.abs(fft)
63 | fundamental = np.max(magnitude)
64 | harmonic_indices = np.arange(2, n_harmonics + 2)
65 | harmonic_magnitudes = magnitude[harmonic_indices]
66 | thd = np.sqrt(np.sum(harmonic_magnitudes**2)) / fundamental
67 | return thd
68 |
69 | def calculate_spectral_flatness(audio):
70 | """محاسبه Spectral Flatness"""
71 | spectrum = np.abs(np.fft.fft(audio))
72 | geometric_mean = np.exp(np.mean(np.log(spectrum + 1e-10)))
73 | arithmetic_mean = np.mean(spectrum)
74 | flatness = geometric_mean / arithmetic_mean
75 | return flatness
76 |
77 | def check_audio_quality(file_path):
78 | try:
79 | audio, sr = librosa.load(file_path, sr=None)
80 |
81 | # محاسبه SNR
82 | snr = calculate_snr(audio)
83 |
84 | # محاسبه THD
85 | thd = calculate_thd(audio, sr)
86 |
87 | # محاسبه Spectral Flatness
88 | flatness = calculate_spectral_flatness(audio)
89 |
90 | # معیارهای کیفیت
91 | if snr < 20 or thd > 0.1 or flatness < 0.1: # مقادیر قابل تنظیم
92 | return True # کیفیت پایین
93 | else:
94 | return False # کیفیت خوب
95 | except Exception as e:
96 | print(f"Error processing {file_path}: {e}")
97 | return False
98 |
99 | # بررسی همه فایلهای صوتی در پوشه
100 | for audio_file in os.listdir(audio_folder):
101 | if audio_file.endswith('.wav') or audio_file.endswith('.mp3'):
102 | file_path = os.path.join(audio_folder, audio_file)
103 | if check_audio_quality(file_path):
104 | low_quality_files.append(audio_file)
105 |
106 | # نمایش فایلهای با کیفیت پایین
107 | print(f"Files with low quality: {len(low_quality_files)}")
108 | # for file in low_quality_files:
109 | # print(file)
--------------------------------------------------------------------------------
/سرفصل_آموزش_پایتون_مقدماتی.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## **سرفصل کامل پایتون – سطح مقدماتی (ترم اول)**
4 |
5 | **هدف کلی:** آشنایی کامل با ساختار زبان پایتون، درک مفاهیم پایه برنامهنویسی، تسلط بر انواع دادههای داخلی، ساختارهای شرطی و تکرار، و نوشتن برنامههای ساده.
6 |
7 | ---
8 |
9 | ### **۱. مقدمه و آمادهسازی محیط توسعه**
10 |
11 | * آشنایی با پایتون و کاربردهای آن
12 | * نصب پایتون و محیط توسعه (VS Code / PyCharm)
13 | * اجرای کدهای پایتون در فایل و در حالت تعاملی (REPL / Shell)
14 | * مفهوم برنامهنویسی و الگوریتم
15 |
16 | ---
17 |
18 | ### **۲. مفاهیم پایه و متغیرها**
19 |
20 | * تعریف متغیر و نامگذاری آنها
21 | * تفاوت بین مقداردهی و مقایسه
22 | * بررسی نوع داده با `type()`
23 | * تبدیل نوع داده (Type Casting)
24 |
25 | ---
26 |
27 | ### **۳. انواع دادههای عددی (Numeric Types)**
28 |
29 | * نوع `int` و `float`
30 | * عملیات ریاضی: جمع، تفریق، ضرب، تقسیم، توان، باقیمانده، تقسیم صحیح
31 | * اولویت عملگرها
32 | * استفاده از توابع `round()`, `abs()`, `pow()`, `divmod()`
33 |
34 | ---
35 |
36 | ### **۴. نوع دادهی رشتهای (String)**
37 |
38 | * تعریف رشته با کوتیشنها
39 | * اتصال رشتهها با `+`
40 | * ضرب رشته در عدد
41 | * ایندکسگذاری و برش (Slicing)
42 | * توابع و متدهای پرکاربرد: `len()`, `upper()`, `lower()`, `strip()`, `replace()`, `find()`
43 | * قالببندی رشتهها با f-string و `.format()`
44 |
45 | ---
46 |
47 | ### **۵. نوع دادهی بولی (Boolean) و عملگرهای منطقی**
48 |
49 | * معرفی `True` و `False`
50 | * عملگرهای مقایسهای: `==`, `!=`, `<`, `>`, `<=`, `>=`
51 | * عملگرهای منطقی: `and`, `or`, `not`
52 | * کاربرد در شرطها
53 |
54 | ---
55 |
56 | ### **۶. ساختارهای شرطی**
57 |
58 | * دستور `if`, `else`, `elif`
59 | * بلاکهای کد و تورفتگی (indentation)
60 | * شرطهای تودرتو (nested conditions)
61 | * اپراتور شرطی کوتاه (ternary expression)
62 |
63 | ---
64 |
65 | ### **۷. نوع دادهی لیست (List)**
66 |
67 | * تعریف لیست و دسترسی به عناصر
68 | * برش و ایندکس منفی
69 | * تغییر، افزودن و حذف عناصر
70 | * متدهای رایج: `append()`, `insert()`, `remove()`, `pop()`, `sort()`, `reverse()`
71 | * استفاده از `in` و `len()`
72 |
73 | ---
74 |
75 | ### **۸. حلقهها (Loops)**
76 |
77 | * استفاده از `for` در پیمایش لیست و رشته
78 | * استفاده از `range()` در تکرار عددی
79 | * استفاده از `while` برای تکرار شرطی
80 | * دستورات `break` و `continue`
81 |
82 | ---
83 |
84 | ### **۹. نوع دادهی تاپل (Tuple) و تفاوت آن با لیست**
85 |
86 | * تعریف و ویژگیهای Tuple (غیرقابل تغییر بودن)
87 | * تبدیل لیست به تاپل و بالعکس
88 | * استفاده از Tuple برای بازگرداندن چند مقدار از تابع
89 |
90 | ---
91 |
92 | ### **۱۰. نوع دادهی دیکشنری (Dictionary)**
93 |
94 | * تعریف دیکشنری با کلید و مقدار
95 | * افزودن، ویرایش، حذف آیتمها
96 | * پیمایش دیکشنری با `for`
97 | * متدهای رایج: `keys()`, `values()`, `items()`
98 |
99 | ---
100 |
101 | ### **۱۱. نوع مجموعه (Set)**
102 |
103 | * تعریف Set و ویژگیهای آن (عدم تکرار، بدون ترتیب)
104 | * عملیات ریاضی روی مجموعهها: اجتماع، اشتراک، تفاضل
105 | * متدهای `add()`, `update()`, `remove()`, `discard()`
106 |
107 | ---
108 |
109 | ### **۱۲. توابع (Functions)**
110 |
111 | * تعریف تابع با `def`
112 | * پارامتر و مقدار بازگشتی با `return`
113 | * تفاوت پارامتر و آرگومان
114 | * مفهوم Scope متغیرها (global و local)
115 | * توابع پیشفرض پایتون مثل `len()`, `sum()`, `max()`, `min()`
116 |
117 | ---
118 |
119 | ### **۱۳. دریافت ورودی از کاربر**
120 |
121 | * استفاده از `input()`
122 | * تبدیل رشته به عدد با `int()` یا `float()`
123 | * نوشتن برنامههای تعاملی ساده
124 |
125 | ---
126 |
127 | ### **۱۴. آشنایی اولیه با فایلها**
128 |
129 | * باز کردن فایل با `open()`
130 | * خواندن و نوشتن فایل متنی با `read()`, `write()`
131 | * بستن فایل با `close()` یا استفاده از `with`
132 |
133 | ---
134 |
135 | ### **۱۵. تمرین نهایی و پروژه**
136 |
137 | **پروژههای پیشنهادی:**
138 |
139 | * ماشینحساب ساده با ورودی از کاربر
140 | * دفترچه نمرات دانشآموزان با لیست و دیکشنری
141 | * برنامه تبدیل واحد (مثلاً تبدیل دما)
142 | * ساخت یک بازی ساده حدس عدد
143 |
144 | ---
145 |
146 |
--------------------------------------------------------------------------------
/ترم-دوم-سطح-متوسطه.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## **سرفصل کامل پایتون – سطح متوسطه (ترم دوم)**
4 |
5 | **هدف کلی:** ارتقاء مهارتهای کدنویسی با پایتون از طریق یادگیری اصول طراحی برنامههای ساختیافته، شیگرا و توانایی استفاده از ابزارها و کتابخانههای استاندارد پایتون.
6 |
7 | ---
8 |
9 | ### **۱. مرور مفاهیم مقدماتی**
10 |
11 | * مروری بر انواع دادهها، شرطها، حلقهها، توابع
12 | * تمرین برای تسلط بر مفاهیم قبلی با برنامههای ترکیبی
13 |
14 | ---
15 |
16 | ### **۲. توابع پیشرفته**
17 |
18 | * پارامترهای پیشفرض، موقعیتی و کلیدواژهای
19 | * آرگومانهای `*args` و `**kwargs`
20 | * توابع بازگشتی (Recursive)
21 | * تعریف توابع در توابع دیگر (Nested functions)
22 |
23 | ---
24 |
25 | ### **۳. ماژولها و بستهها**
26 |
27 | * وارد کردن ماژولهای استاندارد (`math`, `random`, `datetime`, `os`)
28 | * ایجاد و استفاده از ماژول سفارشی
29 | * ساختار بسته (Package) و فایل `__init__.py`
30 | * نصب پکیج با `pip` و استفاده از پکیجهای خارجی
31 |
32 | ---
33 |
34 | ### **۴. مدیریت خطا و استثناها (Exception Handling)**
35 |
36 | * معرفی انواع خطاهای رایج
37 | * استفاده از `try`, `except`, `else`, `finally`
38 | * تعریف خطای سفارشی با کلاس
39 |
40 | ---
41 |
42 | ### **۵. برنامهنویسی شیگرا (OOP)**
43 |
44 | * تعریف کلاس و شی (Object)
45 | * سازنده (`__init__`)
46 | * متدها و ویژگیها
47 | * وراثت (Inheritance)
48 | * روشهای خاص مثل `__str__`, `__len__`
49 | * مفهوم Encapsulation و دسترسی به متغیرهای خصوصی
50 |
51 | ---
52 |
53 | ### **۶. کار با فایلها (File Handling)**
54 |
55 | * خواندن و نوشتن فایلهای متنی
56 | * خواندن و نوشتن فایلهای CSV
57 | * استفاده از ماژول `os` برای مدیریت فایلها و پوشهها
58 | * کار با فایلهای JSON با `json` module
59 |
60 | ---
61 |
62 |
63 | ### **۷. ساختارهای داده پیشرفته**
64 |
65 | * لیست تو در تو (Nested Lists) و نحوه پیمایش آنها
66 | * دیکشنری تو در تو و استفاده کاربردی از آن در برنامههای ساختاریافته
67 | * ترکیب ساختارها برای مدلسازی دادهها (لیست از دیکشنری، دیکشنری از لیست، و ترکیبات آنها)
68 | * آشنایی با `collections` و ساختارهای خاص مانند `defaultdict`، `Counter`
69 |
70 |
71 | ---
72 |
73 |
74 | ### **۸. برنامهنویسی تابعگرا مقدماتی**
75 |
76 | * توابع `lambda`, `map`, `filter`, `reduce`
77 | * استفاده از `enumerate`, `zip`
78 | * Comprehension در لیست و دیکشنری
79 |
80 | ---
81 |
82 | ### **۹. آشنایی اولیه با کتابخانههای کاربردی**
83 |
84 | * `datetime` برای مدیریت تاریخ و زمان
85 | * `random` برای تولید مقادیر تصادفی
86 | * `math` برای توابع ریاضی خاص
87 | * `statistics` برای محاسبات آماری ساده
88 |
89 | ---
90 |
91 | ### **۱۰. پروژه پایانی سطح متوسطه**
92 |
93 |
94 | ### **۱. سیستم مدیریت دانشآموزان (Student Management System)**
95 |
96 | * استفاده از کلاسها برای تعریف دانشآموز
97 | * ذخیره اطلاعات در فایل متنی یا CSV
98 | * امکان افزودن، ویرایش، جستجو و حذف دانشآموز
99 | * نمایش میانگین نمرات و گزارشگیری ساده
100 |
101 | ---
102 |
103 | ### **۲. دفترچه تلفن هوشمند (Smart Contact Book)**
104 |
105 | * کلاس برای مخاطبین با ویژگیهایی مثل نام، شماره، ایمیل
106 | * جستجوی سریع بر اساس نام یا شماره
107 | * ذخیرهسازی دادهها در فایل JSON
108 | * استفاده از منو برای رابط کاربری متنی
109 |
110 | ---
111 |
112 | ### **۳. بازی حدس کلمه (Word Guess Game)**
113 |
114 | * استفاده از لیست و توابع برای مدیریت کلمات
115 | * امکان انتخاب تصادفی کلمه از فایل
116 | * شمارش دفعات تلاش و نمایش نتایج
117 | * افزودن سطح سختی (مثلاً طول کلمه، تعداد فرصتها)
118 |
119 | ---
120 |
121 | ### **۴. برنامه مدیریت کارها (To-Do List App)**
122 |
123 | * استفاده از دیکشنری یا لیست برای ذخیره کارها
124 | * قابلیت تعیین وضعیت انجامشده و تاریخ انجام
125 | * ذخیره دادهها بین اجراها با فایل JSON یا CSV
126 | * اعمال فیلتر برای نمایش فقط کارهای انجامنشده
127 |
128 | ---
129 |
130 | ### **۵. ماشین حساب پیشرفته (Advanced Calculator)**
131 |
132 | * پیادهسازی با استفاده از کلاسها و توابع جداگانه برای عملیاتها
133 | * پشتیبانی از عملیاتهای ریاضی ترکیبی، توان، ریشه، درصد
134 | * ورودی از کاربر با بررسی خطاها
135 | * امکان نمایش تاریخچه عملیاتها
136 |
137 | ---
138 |
139 |
140 |
--------------------------------------------------------------------------------
/Course/QT/09_advanced_widgets.md:
--------------------------------------------------------------------------------
1 | ## صفحه ۹ – ویجتهای پیشرفته در PyQt6
2 |
3 | ### ۱. تقویم (QCalendarWidget) 📅
4 |
5 | این ویجت یک تقویم کامل نمایش میدهد و کاربر میتواند یک تاریخ انتخاب کند.
6 |
7 | ```python
8 | import sys
9 | from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QCalendarWidget, QLabel
10 |
11 | app = QApplication(sys.argv)
12 |
13 | window = QWidget()
14 | window.setWindowTitle("Calendar Example")
15 | window.resize(400, 300)
16 |
17 | layout = QVBoxLayout()
18 |
19 | calendar = QCalendarWidget()
20 | label = QLabel("Select a date")
21 |
22 | # Update label when date is changed
23 | calendar.selectionChanged.connect(lambda: label.setText(calendar.selectedDate().toString()))
24 |
25 | layout.addWidget(calendar)
26 | layout.addWidget(label)
27 |
28 | window.setLayout(layout)
29 | window.show()
30 | sys.exit(app.exec())
31 | ```
32 |
33 | 📌 نتیجه: کاربر میتواند تاریخ را از تقویم انتخاب کند و همان تاریخ در برچسب نمایش داده میشود.
34 |
35 | ---
36 |
37 | ### ۲. اسلایدر (QSlider) 🎚️
38 |
39 | اسلایدر برای گرفتن عددی بین یک بازه استفاده میشود (مثلاً تنظیم صدا یا روشنایی).
40 |
41 | ```python
42 | import sys
43 | from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QSlider, QLabel
44 | from PyQt6.QtCore import Qt
45 |
46 | app = QApplication(sys.argv)
47 |
48 | window = QWidget()
49 | window.setWindowTitle("Slider Example")
50 | window.resize(300, 200)
51 |
52 | layout = QVBoxLayout()
53 |
54 | slider = QSlider(Qt.Orientation.Horizontal)
55 | slider.setMinimum(0)
56 | slider.setMaximum(100)
57 | slider.setValue(50)
58 |
59 | label = QLabel("Value: 50")
60 |
61 | # Update label when slider moves
62 | slider.valueChanged.connect(lambda value: label.setText(f"Value: {value}"))
63 |
64 | layout.addWidget(slider)
65 | layout.addWidget(label)
66 |
67 | window.setLayout(layout)
68 | window.show()
69 | sys.exit(app.exec())
70 | ```
71 |
72 | 📌 نتیجه: یک اسلایدر افقی نمایش داده میشود که مقدارش بین ۰ تا ۱۰۰ تغییر میکند و مقدار فعلی در برچسب نشان داده میشود.
73 |
74 | ---
75 |
76 | ### ۳. Progress Bar 🔄
77 |
78 | این ویجت برای نمایش وضعیت پیشرفت یک عملیات (مثل دانلود یا نصب) استفاده میشود.
79 |
80 | ```python
81 | import sys
82 | from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QProgressBar, QPushButton
83 | from PyQt6.QtCore import QTimer
84 |
85 | class ProgressExample(QWidget):
86 | def __init__(self):
87 | super().__init__()
88 |
89 | self.setWindowTitle("Progress Bar Example")
90 | self.resize(300, 150)
91 |
92 | self.layout = QVBoxLayout()
93 |
94 | self.progress = QProgressBar()
95 | self.progress.setValue(0)
96 |
97 | self.button = QPushButton("Start")
98 |
99 | self.layout.addWidget(self.progress)
100 | self.layout.addWidget(self.button)
101 | self.setLayout(self.layout)
102 |
103 | # Timer to update progress
104 | self.timer = QTimer()
105 | self.timer.timeout.connect(self.update_progress)
106 |
107 | self.button.clicked.connect(self.start_progress)
108 | self.value = 0
109 |
110 | def start_progress(self):
111 | self.value = 0
112 | self.progress.setValue(0)
113 | self.timer.start(100)
114 |
115 | def update_progress(self):
116 | self.value += 5
117 | self.progress.setValue(self.value)
118 | if self.value >= 100:
119 | self.timer.stop()
120 |
121 | app = QApplication(sys.argv)
122 | window = ProgressExample()
123 | window.show()
124 | sys.exit(app.exec())
125 | ```
126 |
127 | 📌 نتیجه: با کلیک روی دکمه، نوار پیشرفت شروع به پر شدن میکند تا به ۱۰۰ برسد.
128 |
129 | ---
130 |
131 | ✅ حالا شما با چند ویجت پیشرفتهی کاربردی آشنا شدید که تقریباً در همهی نرمافزارهای جدی استفاده میشوند.
132 |
133 | ---
134 |
135 | در **صفحه ۱۰** یاد میگیریم چطور با استفاده از **StyleSheet** ظاهر برنامههایمان را زیباتر کنیم؛ مثل تغییر رنگها، فونتها و طراحی ظاهری مدرن. 🎨✨
136 |
137 |
--------------------------------------------------------------------------------
/ChatBot/makemodel.py:
--------------------------------------------------------------------------------
1 | import random
2 | import json
3 | import pickle
4 |
5 | import nltk
6 | # Download all NLTK resources (this may take some time)
7 | # nltk.download('all')
8 | from nltk.stem import WordNetLemmatizer
9 | from tensorflow.keras.models import Sequential
10 | from tensorflow.keras.layers import Dense, Dropout
11 | from tensorflow.keras.optimizers import SGD
12 |
13 | import numpy as np
14 |
15 | import nltk
16 | nltk.download('punkt') # دانلود دادههای punkt برای توکنسازی
17 | nltk.download('punkt_tab') # دانلود دادههای punkt_tab برای توکنسازی جملات
18 | nltk.download('wordnet') # دانلود دادههای wordnet
19 |
20 | # Initialize the lemmatizer
21 | lemmatizer = WordNetLemmatizer()
22 |
23 | # Load intents from the intents.json file
24 | intents = json.loads(open("intents_fa.json").read())
25 |
26 | # Initialize lists to hold words, classes, and documents
27 | words = []
28 | classes = []
29 | documents = []
30 |
31 | # Define characters to ignore in the input
32 | ignore_letters = ["?", "!", ".", ","]
33 |
34 | # Process each intent in the intents file
35 | for intent in intents["intents"]:
36 | for pattern in intent["patterns"]:
37 | # Tokenize each pattern and add to the word list and documents
38 | word_list = nltk.word_tokenize(pattern) # تقسیم متن به کلمات
39 | words.extend(word_list)
40 | documents.append((word_list, intent["tag"]))
41 |
42 | # Add the intent tag to classes if it's not already present
43 | if intent["tag"] not in classes:
44 | classes.append(intent["tag"])
45 |
46 | # Lemmatize words and remove ignored characters
47 | words = [lemmatizer.lemmatize(word)
48 | for word in words if word not in ignore_letters]
49 |
50 | # Sort and remove duplicates from words and classes
51 | words = sorted(set(words))
52 | classes = sorted(set(classes))
53 |
54 | # Save the processed words and classes to files
55 | pickle.dump(words, open('words_fa.pkl', 'wb'))
56 | pickle.dump(classes, open('classes_fa.pkl', 'wb'))
57 |
58 | # Prepare the dataset for training
59 | dataset = []
60 | template = [0] * len(classes) # Initialize output template
61 |
62 | # Create the bag of words and output rows for each document
63 | for document in documents:
64 | bag = []
65 | word_patterns = document[0] #feature
66 | word_patterns = [lemmatizer.lemmatize(word.lower())
67 | for word in word_patterns]
68 |
69 | # Create a bag of words representation
70 | for word in words:
71 | bag.append(1) if word in word_patterns else bag.append(0)
72 |
73 | # Create the output row for the corresponding class
74 | output_row = list(template)
75 | output_row[classes.index(document[1])] = 1 #document[1] ==>label
76 | dataset.append([bag, output_row])
77 |
78 |
79 | # Shuffle the dataset to ensure randomness during training
80 | random.shuffle(dataset)
81 | dataset = np.array(dataset, dtype=object)
82 |
83 | # Split the dataset into training features and labels
84 | train_x = list(dataset[:, 0])
85 | train_y = list(dataset[:, 1])
86 |
87 | # Build the neural network model
88 | model = Sequential()
89 | model.add(Dense(256, input_shape=(len(train_x[0]),), activation='relu')) # First hidden layer
90 | model.add(Dropout(0.5)) # Dropout layer to prevent overfitting
91 | model.add(Dense(128, activation='relu')) # Second hidden layer
92 | model.add(Dropout(0.5)) # Dropout layer
93 | model.add(Dense(len(train_y[0]), activation='softmax')) # Output layer with softmax activation
94 |
95 | # Compile the model with SGD optimizer and categorical crossentropy loss
96 | sgd = SGD(learning_rate=0.01, momentum=0.9, nesterov=True)
97 | model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
98 |
99 | # Train the model on the training data
100 | hist = model.fit(np.array(train_x), np.array(train_y), epochs=200, batch_size=5, verbose=1)
101 |
102 | # Save the trained model to a file
103 | model.save("chatbot_model_fa.h5", hist)
104 | print("Done!") # Indicate that training is complete
105 |
--------------------------------------------------------------------------------
/ChatBot/TalkAi.md:
--------------------------------------------------------------------------------
1 |
2 | ## مراحل توسعه سیستم هوش مصنوعی دستور اطاعت گفتاری
3 |
4 | ### 1. **تعریف دقیق اهداف**
5 | - **تعیین ویژگیها:** مشخص کنید که چه ویژگیهایی باید در سیستم وجود داشته باشد. به عنوان مثال:
6 | - پردازش دستورات صوتی
7 | - پاسخگویی سریع و کارآمد
8 | - قابلیت یادگیری از تعاملات کاربران
9 |
10 | ### 2. **جمعآوری و پردازش دادهها**
11 | - **دادههای صوتی:** جمعآوری دادههای صوتی شامل دستورات گفتاری و تعاملات کاربران.
12 | - **تنوع دادهها:** اطمینان حاصل کنید که دادهها شامل لهجهها و زبانهای مختلف باشند.
13 | - **پیشپردازش دادهها:** دادهها را برای آموزش مدل آماده کنید (پاکسازی، نرمالسازی، و غیره).
14 | - **آموزش مدل:** مدل را با استفاده از دادههای جمعآوری شده آموزش دهید و به آن اجازه دهید تا الگوهای گفتاری را یاد بگیرد.
15 |
16 |
17 | ### 3. **مدلسازی و یادگیری ماشین**
18 | - **انتخاب الگوریتم:** الگوریتمهای مناسب برای پردازش صوت و یادگیری عمیق را انتخاب کنید. به عنوان مثال:
19 | - شبکههای عصبی کانولوشن (CNN) برای پردازش صوت
20 | - شبکههای عصبی بازگشتی (RNN) یا LSTM برای پردازش توالیهای زمانی
21 | - مدلهای پردازش زبان طبیعی (NLP): برای تحلیل متن و تولید پاسخ، میتوانید از مدلهای NLP مانند BERT یا GPT استفاده کنید.
22 | از مدلهای یادگیری عمیق برای پردازش صوت و تحلیل زبان طبیعی استفاده کنید. به عنوان مثال:**Speech-to-Text:** برای تبدیل صوت
23 | به متن از مدلهای ASR (Automatic Speech Recognition) استفاده کنید
24 | - از الگوریتمهای یادگیری تقویتی مانند (DQN/PPO/A3C)استفاده کنید تا مدل بتواند از تعاملات خود با محیط یاد بگیرد.
25 |
26 |
27 |
28 | ## مراحل کلی برای پردازش دستورات صوتی عمومی
29 |
30 | ### 1. **تعریف دامنه و نوع دستورات**
31 | - **دستورات عمومی:** سیستم باید قادر باشد به دستورات عمومی مانند:
32 | - سوالات اطلاعاتی (مثلاً "آب و هوا امروز چطوره؟")
33 | - درخواستها (مثلاً "لطفاً موسیقی پخش کن.")
34 | - دستورات کنترلی (مثلاً "چراغها را خاموش کن.")
35 | - **تنوع فیلدها:** در نظر داشته باشید که سیستم باید به دستورات مرتبط با فیلدهای مختلف مانند:
36 | - پزشکی
37 | - مالی
38 | - آموزشی
39 | - سرگرمی
40 | - خدمات مشتری
41 | - و غیره پاسخ دهد.
42 |
43 | ### 2. **جمعآوری دادههای متنوع**
44 |
45 | - **دستورات صوتی:** ابتدا باید مجموعهای از دستورات صوتی که میخواهید سیستم به آنها پاسخ دهد، جمعآوری کنید. این دستورات میتوانند
46 | شامل سوالات، درخواستها و دستورات کنترلی باشند.
47 | - **تنوع:** اطمینان حاصل کنید که دادهها شامل تنوع لهجهها، سنین و جنسیتهای مختلف باشد.
48 |
49 | - **متن دستورات:** برای هر دستور صوتی، متن مربوط به آن را تهیه کنید. این کار به شما کمک میکند تا مدلهای تبدیل صوت به متن (ASR) را آموزش دهید.
50 | - **تنوع در متن:** متنها باید شامل فرمهای مختلف بیان دستورات باشند تا سیستم بتواند به خوبی یاد بگیرد.
51 |
52 | - **پاسخهای صوتی:** برای هر دستور، پاسخ صوتی مناسب را جمعآوری کنید. این پاسخها باید واضح و مرتبط با دستور باشند.
53 | - **تنوع در پاسخها:** سعی کنید از گویندگان مختلف برای ضبط پاسخها استفاده کنید تا تنوع بیشتری داشته باشید.
54 |
55 | - **متن پاسخها:** متنهای مربوط به پاسخهای صوتی را نیز جمعآوری کنید. این کار به شما کمک میکند تا مدلهای پردازش زبان طبیعی (NLP) را آموزش دهید.
56 |
57 | ### 3. **پیشپردازش دادهها**
58 | - **تنظیم دادهها:** دادهها را پاکسازی و نرمالسازی کنید. این شامل حذف نویز و تبدیل دادههای صوتی به فرمتهای مناسب است.
59 | - **تنوع لهجه و زبان:** اطمینان حاصل کنید که دادهها شامل لهجهها و زبانهای مختلف هستند.
60 |
61 | ### 5. **پیادهسازی سیستم**
62 | - **توسعه نرمافزار:** نرمافزاری بسازید که قابلیت دریافت دستورات صوتی را داشته باشد و به طور خودکار آنها را پردازش کند.
63 | - **تست و اعتبارسنجی:** سیستم را با کاربران واقعی تست کنید و عملکرد آن را ارزیابی کنید.
64 |
65 | ### 6. **یادگیری از تعاملات کاربران**
66 | - **جمعآوری بازخورد:** از کاربران بخواهید تا بازخورد دهند و دادههای جدیدی از تعاملات آنها جمعآوری کنید.
67 | - **مدلهای یادگیری:** از تکنیکهای یادگیری تقویتی و یادگیری آنلاین برای بهبود عملکرد سیستم استفاده کنید.
68 |
69 | ### 7. **گسترش و تخصصیسازی**
70 | - **توسعه قابلیتهای جدید:** بر اساس نیازهای جدید و بازخورد کاربران، قابلیتهای جدیدی به سیستم اضافه کنید.
71 | - **تخصصیسازی برای صنایع مختلف:** سیستم را برای کاربردهای خاص در صنایع مختلف تخصصی کنید.
72 |
73 |
74 |
--------------------------------------------------------------------------------
/Course/Bagging_Boosting.md:
--------------------------------------------------------------------------------
1 | ### **🌟 طبقهبندیکنندههای Ensemble (ترکیبی) 🌟**
2 |
3 | طبقهبندیکنندههای Ensemble روشهایی هستند که چندین مدل یادگیری ماشین را ترکیب میکنند تا پیشبینیهای بهتری ارائه دهند. دو روش اصلی این طبقهبندیکنندهها عبارتند از **Bagging** و **Boosting**.
4 |
5 | ---
6 |
7 | ### **1. Bagging (Bootstrap Aggregating) 🤝✨**
8 |
9 | **ایده**: ایجاد چندین زیرمجموعه از دادهها و آموزش مدلها بر روی این زیرمجموعهها. سپس ترکیب پیشبینیها برای کاهش واریانس. 🎯
10 |
11 | #### **مثال داوران 🏆🎉**:
12 |
13 | **هدف**: انتخاب بهترین بازیکن از ۴ بازیکن (A، B، C، D) توسط ۵ داور.
14 |
15 | 1. **گروهبندی داوران**:
16 |
17 | - گروه ۱: داور ۱، داور ۲، داور ۳
18 | - گروه ۲: داور ۳، داور ۴، داور ۵
19 |
20 | 2. **رایگیری در هر گروه**:
21 |
22 | | بازیکن | امتیاز گروه ۱ | امتیاز گروه ۲ |
23 | |--------|----------------|----------------|
24 | | A | 7 | 6 |
25 | | B | 8 | 7 |
26 | | C | 6 | 8 |
27 | | D | 5 | 5 |
28 |
29 | 3. **انتخاب بهترین بازیکن در هر گروه**:
30 |
31 | - گروه ۱: بازیکن B (با امتیاز ۸)
32 | - گروه ۲: بازیکن C (با امتیاز ۸)
33 |
34 | 4. **رایگیری نهایی**:
35 |
36 | | بازیکن | امتیاز گروه ۱ | امتیاز گروه ۲ | میانگین امتیاز |
37 | |--------|----------------|----------------|------------------|
38 | | A | 7 | 6 | 6.5 |
39 | | B | 8 | 7 | 7.5 |
40 | | C | 6 | 8 | 7 |
41 | | D | 5 | 5 | 5 |
42 |
43 | - **برنده نهایی**: بازیکن B (با میانگین امتیاز ۷.۵)
44 |
45 | ---
46 |
47 | ### **2. Boosting 🚀🌈**
48 |
49 | **ایده**: آموزش مدلها به صورت ترتیبی. هر مدل جدید سعی میکند اشتباهات مدل قبلی را اصلاح کند. 🔄
50 |
51 | #### **مثال داوران **:
52 |
53 | 1. **رایگیری اولیه**:
54 |
55 | | بازیکن | امتیاز داور ۱ | امتیاز داور ۲ | امتیاز داور ۳ | امتیاز داور ۴ | امتیاز داور ۵ | مجموع امتیاز |
56 | |--------|----------------|----------------|----------------|----------------|----------------|---------------|
57 | | A | 6 | 7 | 5 | 6 | 7 | 31 |
58 | | B | 7 | 6 | 6 | 7 | 6 | 32 |
59 | | C | 5 | 5 | 7 | 8 | 8 | 33 |
60 | | D | 4 | 4 | 4 | 5 | 4 | 21 |
61 |
62 | - **بهترین بازیکن (تا اینجا)**: بازیکن C (با امتیاز ۳۳) 🌟
63 |
64 | 2. **اصلاح نظر داوران**: فرض کنید داوران به بازیکن C بیش از حد امتیاز دادهاند. ❗
65 |
66 | 3. **رایگیری دوباره**:🌈✨
67 |
68 | | بازیکن | امتیاز داور ۱ (اصلاح شده) | امتیاز داور ۲ (اصلاح شده) | امتیاز داور ۳ (اصلاح شده) | امتیاز داور ۴ (اصلاح شده) | امتیاز داور ۵ (اصلاح شده) | مجموع امتیاز |
69 | |--------|----------------------------|----------------------------|----------------------------|----------------------------|----------------------------|---------------|
70 | | A | 7 | 8 | 6 | 7 | 8 | 36 |
71 | | B | 8 | 7 | 7 | 8 | 7 | 37 |
72 | | C | 4 | 4 | 6 | 7 | 7 | 28 |
73 | | D | 5 | 5 | 5 | 6 | 5 | 26 |
74 |
75 | - **بهترین بازیکن (بعد از اصلاح)**: بازیکن B (با امتیاز ۳۷) 🎉🥇
76 |
77 | ---
78 |
79 | ### **خلاصه 📚🌟**
80 |
81 | - **Bagging**: چندین زیرمجموعه از دادهها ایجاد و مدلها آموزش داده میشوند. پیشبینیها ترکیب میشوند.
82 | - **Boosting**: مدلها به صورت ترتیبی آموزش داده میشوند و هر مدل جدید سعی میکند اشتباهات مدل قبلی را اصلاح کند. 🚀
83 |
84 |
85 |
--------------------------------------------------------------------------------
/Alborz.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ## 📘 بخش اول: آموزش عمومی (پودمانهای رسمی مدرسه – همه دانشآموزان)
5 |
6 | این بخش مطابق کتاب درسی فناوری اطلاعات و ارتباطات است.
7 |
8 | ### 🔹 پودمان ۱: شهروند الکترونیکی
9 |
10 | * آشنایی با شبکه و اینترنت
11 | * کار با ایمیل (ارسال، دریافت، مدیریت)
12 | * امنیت و اخلاق در فضای مجازی
13 |
14 | ### 🔹 پودمان ۲: نوآوری و فناوری
15 |
16 | * تأثیر فناوری بر زندگی روزمره
17 | * خلاقیت و ایدهپردازی
18 |
19 | ### 🔹 پودمان ۳: کاربرد فناوری اطلاعات و ارتباطات
20 |
21 | * نرمافزارهای اداری (Word, PowerPoint, Excel مقدماتی)
22 | * مدیریت فایلها و پوشهها
23 | * کاربرد فناوری در مشاغل مختلف
24 |
25 | ### 🔹 پودمان ۴: جستجو و جمعآوری اطلاعات
26 |
27 | * موتورهای جستجو
28 | * شیوههای صحیح جستجو
29 | * ارزیابی و انتخاب منابع معتبر
30 |
31 | ### 🔹 پودمان ۵: مستندسازی
32 |
33 | * تایپ ۱۰ انگشتی مقدماتی
34 | * کار با Word و PowerPoint
35 | * تنظیم جدول، تصویر و نمودار
36 |
37 | ### 🔹 پودمان ۶: اشتراکگذاری اطلاعات
38 |
39 | * ایجاد و ویرایش ارائه (PowerPoint)
40 | * کار گروهی و اشتراکگذاری فایلها
41 |
42 | ### 🔹 پودمان ۷: برنامهنویسی (پایتون)
43 |
44 | * مفاهیم پایه الگوریتم
45 | * دستورات شرطی و حلقه
46 | * طراحی پروژههای ساده
47 |
48 | ---
49 |
50 | ## 🚀 بخش دوم: سرفصلهای تکمیلی (ویژهی کلاس خصوصی و مسابقه خوارزمی)
51 |
52 | این بخش مخصوص دانشآموزان مستعد است و خارج از ساعات رسمی مدرسه آموزش داده میشود:
53 |
54 | ### ۱. مهارتهای پیشرفته برنامهنویسی (پایتون)
55 |
56 | * الگوریتم و فلوچارت
57 | * لیستها، تاپلها و دیکشنریها
58 | * توابع و ماژولها
59 | * پروژههای کوچک: ماشین حساب، بازیهای ساده
60 |
61 | ### ۲. طراحی وب مقدماتی
62 | اینکه بچهها رو به دو گروه **Front-end** و **Back-end** تقسیم کنید هم باعث میشه مسئولیتپذیری و کار تیمی رو یاد بگیرن، هم پروژههاشون واقعیتر بشه (چون مسابقه خوارزمی روی *پروژه محور بودن* خیلی تأکید داره).
63 |
64 | ---
65 |
66 | ## 🔹 گروه اول: Front-end (طراحی ظاهر و تجربه کاربر)
67 |
68 | 🔸 **سرفصلها:**
69 |
70 | * آشنایی با ساختار HTML (تگها، لینک، تصویر، جدول، فرمها)
71 | * استایلدهی با CSS (رنگها، فونتها، Flexbox و Grid ساده)
72 | * آشنایی با JavaScript و فریمورک Vue.js
73 | * استفاده از فریمورک سبک مثل Bootstrap برای طراحی واکنشگرا
74 | * آشنایی با Git, Github
75 | * پروژه: طراحی یک صفحه شخصی یا وبلاگ ساده با امکان نمایش مقالات/عکسها
76 |
77 | ---
78 |
79 | ## 🔹 گروه دوم: Back-end (منطق و مدیریت دادهها)
80 |
81 | 🔸 **سرفصلها:**
82 |
83 | * مفاهیم پایهی سرور و پایگاه داده (توضیح ساده برای سطح راهنمایی)
84 | * آشنایی بافریمورک Python (Django خیلی سبک)
85 | * ایجاد یک API ساده برای دریافت و ذخیره دادهها
86 | * کار با فایل JSON یا دیتابیس ساده (SQLite)
87 | * آشنایی با Git, Github
88 | * پروژه: ذخیره و نمایش دادهها (مثلاً فرم ثبتنام دانشآموزان یا دفترچه یادداشت آنلاین)
89 |
90 | ---
91 |
92 | ## 🔹 پروژهی مشترک (ترکیب Front + Back)
93 |
94 | برای تمرین کار گروهی، میتونید بچهها رو در قالب یک پروژه مشترک قرار داد:
95 |
96 | **مثال پروژه:**
97 | 🌐 یک وبسایت ساده "کتابخانه آنلاین"
98 |
99 | * تیم فرانتاند → طراحی ظاهر سایت (صفحه اصلی، صفحه معرفی کتابها، فرم ثبتنام)
100 | * تیم بکاند → ساخت بخش ورود اطلاعات کتابها و ذخیره در دیتابیس + API برای نمایش کتابها در سایت
101 |
102 | ---
103 |
104 | 📌 **مزایا برای مسابقه خوارزمی:**
105 |
106 | * دانشآموزان یاد میگیرن کار تیمی کنن (که توی داوری امتیاز بالایی داره).
107 | * پروژه هم ظاهر جذاب داره هم منطق فنی (ترکیب Front و Back امتیاز ویژه داره).
108 | * میتونن در روز مسابقه پروژه رو به صورت عملی اجرا و دفاع کنن.
109 |
110 | ---
111 |
112 |
113 | ### ۳. هوش مصنوعی و داده
114 |
115 | * آشنایی مفهومی با هوش مصنوعی
116 | * کار با دادهها در پایتون (pandas, matplotlib)
117 | * کار با برخی از الگوریتمهای هوش مصنوعی
118 | * پروژه: تحلیل داده و پیش بینی مدل ساخته شده(مثل نمرات کلاسی یا جدول لیگ ورزشی و یاتشخیص بیماری ..)
119 |
120 | ### ۴. تفکر خلاق و ایدهپردازی
121 |
122 | * طراحی و ارائه ایدهها
123 | * کار تیمی برای حل یک مسئله واقعی
124 | * آمادهسازی پروژه برای ارائه در مسابقه
125 |
126 | ### ۵. تمرینهای مسابقهای
127 |
128 | * انجام نمونه پروژههای برگزیده سالهای قبل مسابقه خوارزمی
129 | * تمرین ارائه شفاهی پروژه در مقابل دیگران
130 | * مدیریت زمان و کار گروهی
131 |
132 | ---
133 |
134 |
135 | * در کلاس رسمی، **پودمانهای درسی کتاب** را پیش میبریم.
136 | * برای کلاسهای خصوصی، یک مسیر پروژهمحور طراحی میکنم (مثلاً ساخت یک وبسایت یا طراحی یک بازی در پایتون یا درسطح پیشرفته دستیار هوش مصنوعی) تا دانشآموزان آماده مسابقه شوند.
137 |
138 | ---
139 |
140 |
141 |
--------------------------------------------------------------------------------
/agi/finetun_wac.py:
--------------------------------------------------------------------------------
1 | import json
2 | import torch
3 | import torchaudio
4 | from datasets import Dataset
5 | from transformers import (
6 | Wav2Vec2Processor, Wav2Vec2ForCTC, Wav2Vec2Config,
7 | AutoFeatureExtractor, TrainingArguments, Trainer,
8 | get_scheduler
9 | )
10 |
11 | # Load the Wav2Vec2 model configuration and model weights
12 | config = Wav2Vec2Config.from_pretrained("facebook/wav2vec2-large-960h")
13 | model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-large-960h")
14 | processor = Wav2Vec2Processor.from_pretrained("facebook/wav2vec2-large-960h")
15 | feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-large-960h")
16 |
17 | # Enable gradient checkpointing to save memory during training
18 | model.gradient_checkpointing_enable()
19 |
20 | # Function to load data from a JSON file
21 | def load_data(json_path):
22 | with open(json_path, 'r', encoding='utf-8') as f:
23 | data = json.load(f)
24 | return Dataset.from_dict({
25 | "file_path": [item["file_path"] for item in data],
26 | "text": [item["text"] for item in data]
27 | })
28 |
29 | # Function to preprocess the audio data
30 | def preprocess_data(batch):
31 | speech_array, sampling_rate = torchaudio.load(batch["file_path"])
32 | resampler = torchaudio.transforms.Resample(orig_freq=sampling_rate, new_freq=16000)
33 | speech_array = resampler(speech_array).squeeze().numpy()
34 | audio = feature_extractor(speech_array, sampling_rate=16000, return_tensors="pt")
35 | batch["input_values"] = audio["input_values"][0]
36 | batch["labels"] = processor.tokenizer(batch["text"], return_tensors="pt").input_ids[0]
37 | return batch
38 |
39 | # Load and preprocess training data
40 | dataset = load_data("transcript_list.json")
41 | dataset = dataset.map(preprocess_data, remove_columns=["file_path", "text"])
42 |
43 | # Load and preprocess validation data
44 | val_dataset = load_data("validation_transcript_list.json")
45 | val_dataset = val_dataset.map(preprocess_data, remove_columns=["file_path", "text"])
46 |
47 | # Function for collating batches of data
48 | def collate_fn(batch):
49 | input_values = [torch.tensor(item["input_values"]) for item in batch]
50 | labels = [torch.tensor(item["labels"]) for item in batch]
51 | input_values = torch.nn.utils.rnn.pad_sequence(input_values, batch_first=True, padding_value=0.0)
52 | labels = torch.nn.utils.rnn.pad_sequence(labels, batch_first=True, padding_value=-100)
53 | return {"input_values": input_values, "labels": labels}
54 |
55 | # Training configuration settings
56 | training_args = TrainingArguments(
57 | output_dir="./wav2vec2_finetuned",
58 | per_device_train_batch_size=3, # Adjusted batch size
59 | gradient_accumulation_steps=2,
60 | save_steps=400,
61 | logging_steps=100,
62 | learning_rate=1e-4, # Updated learning rate
63 | weight_decay=0.005,
64 | save_total_limit=2,
65 | num_train_epochs=4,
66 | fp16=False,
67 | push_to_hub=False,
68 | eval_steps=500,
69 | report_to="none",
70 | )
71 |
72 | # Move the model to CPU or GPU based on availability
73 | device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
74 | model.to(device)
75 |
76 | # Define the optimizer
77 | optimizer = torch.optim.AdamW(model.parameters(), lr=training_args.learning_rate)
78 |
79 | # Define the learning rate scheduler
80 | num_training_steps = len(dataset) // training_args.per_device_train_batch_size * training_args.num_train_epochs
81 | scheduler = get_scheduler(
82 | "linear",
83 | optimizer=optimizer,
84 | num_warmup_steps=int(0.1 * num_training_steps), # 10% warmup
85 | num_training_steps=num_training_steps,
86 | )
87 |
88 | # Define the Trainer for model training
89 | trainer = Trainer(
90 | model=model,
91 | eval_dataset=val_dataset,
92 | args=training_args,
93 | train_dataset=dataset,
94 | tokenizer=processor,
95 | data_collator=collate_fn,
96 | optimizers=(optimizer, scheduler)
97 | )
98 |
99 | # Start the training process
100 | try:
101 | for epoch in range(training_args.num_train_epochs):
102 | trainer.train()
103 | torch.cuda.empty_cache()
104 | eval_results = trainer.evaluate()
105 | except RuntimeError as e:
106 | if 'out of memory' in str(e):
107 | print("Out of memory error. Consider alternatives like smaller models or CPU training.")
108 | torch.cuda.empty_cache()
109 |
110 | # Save the trained model and processor
111 | model.save_pretrained("./wav2vec2_finetuned")
112 | processor.save_pretrained("./wav2vec2_finetuned")
--------------------------------------------------------------------------------
/Dr_Akbari/Varianse_classes.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ---
4 |
5 | # 🎯 هدف:
6 |
7 | تحلیل ویژگیها با استفاده از **تحلیل واریانس بین کلاسها** و سپس بررسی فاصله داده تست از میانگین ویژگیها در هر کلاس.
8 |
9 | ---
10 |
11 | ## 🧾 دادهها
12 |
13 | ### ✅ دادههای آموزشی (ویژگیها + کلاس):
14 |
15 | | نمونه | F1 | F2 | F3 | F4 | کلاس |
16 | | ----- | -- | -- | -- | -- | ---- |
17 | | x1 | 1 | 2 | 8 | 9 | 1 |
18 | | x2 | 2 | 3 | 7 | 7 | 1 |
19 | | x3 | 3 | 4 | 6 | 5 | 1 |
20 | | x4 | 4 | 5 | 5 | 6 | 1 |
21 | | x5 | 5 | 6 | 4 | 8 | 2 |
22 | | x6 | 6 | 7 | 3 | 9 | 2 |
23 | | x7 | 7 | 8 | 2 | 7 | 2 |
24 | | x8 | 8 | 9 | 2 | 5 | 2 |
25 |
26 | ### ✅ داده تست:
27 |
28 | $$
29 | \text{test} = (1.5,\ 7,\ 2,\ 7)
30 | $$
31 |
32 | ---
33 |
34 | ## ✅ گام 1: نرمالسازی دادهها در بازه $[-1, 1]$
35 |
36 | فرمول نرمالسازی:
37 |
38 | $$
39 | x' = \left( \frac{x - x_{\min}}{x_{\max} - x_{\min}} \times 2 \right) - 1
40 | $$
41 |
42 | ### 🔍 حداقل و حداکثر برای هر ویژگی:
43 |
44 | | ویژگی | min | max |
45 | | ----- | --- | --- |
46 | | F1 | 1 | 8 |
47 | | F2 | 2 | 9 |
48 | | F3 | 2 | 8 |
49 | | F4 | 5 | 9 |
50 |
51 | ### 🔢 نرمالسازی داده تست:
52 |
53 | * F1:
54 |
55 | $$
56 | \left( \frac{1.5 - 1}{7} \times 2 \right) - 1 = \frac{1}{7} - 1 = -\frac{6}{7}
57 | $$
58 |
59 | * F2:
60 |
61 | $$
62 | \left( \frac{7 - 2}{7} \times 2 \right) - 1 = 2 - 1 = 1
63 | $$
64 |
65 | * F3:
66 |
67 | $$
68 | \left( \frac{2 - 2}{6} \times 2 \right) - 1 = 0 - 1 = -1
69 | $$
70 |
71 | * F4:
72 |
73 | $$
74 | \left( \frac{7 - 5}{4} \times 2 \right) - 1 = 1 - 1 = 0
75 | $$
76 |
77 | ✅ **داده تست نرمالشده**:
78 |
79 | $$
80 | \text{test}' = \left( -\frac{6}{7},\ 1,\ -1,\ 0 \right)
81 | $$
82 |
83 | ---
84 |
85 | ## ✅ گام 2: میانگین ویژگیها در هر کلاس
86 |
87 | ### کلاس 1 (x1 تا x4):
88 |
89 | | ویژگی | مقادیر | میانگین |
90 | | ----- | ------------- | ------- |
91 | | F1 | \[1, 2, 3, 4] | 2.5 |
92 | | F2 | \[2, 3, 4, 5] | 3.5 |
93 | | F3 | \[8, 7, 6, 5] | 6.5 |
94 | | F4 | \[9, 7, 5, 6] | 6.75 |
95 |
96 | ### کلاس 2 (x5 تا x8):
97 |
98 | | ویژگی | مقادیر | میانگین |
99 | | ----- | ------------- | ------- |
100 | | F1 | \[5, 6, 7, 8] | 6.5 |
101 | | F2 | \[6, 7, 8, 9] | 7.5 |
102 | | F3 | \[4, 3, 2, 2] | 2.75 |
103 | | F4 | \[8, 9, 7, 5] | 7.25 |
104 |
105 | ---
106 |
107 | ## ✅ گام 3: نرمالسازی میانگینهای هر کلاس
108 |
109 | ### نرمالسازی کلاس 1:
110 |
111 | * F1:
112 |
113 | $$
114 | \left( \frac{2.5 - 1}{7} \times 2 \right) - 1 = \frac{3}{7} - 1 = -\frac{4}{7}
115 | $$
116 |
117 | * F2:
118 |
119 | $$
120 | \left( \frac{3.5 - 2}{7} \times 2 \right) - 1 = \frac{3}{7} - 1 = -\frac{4}{7}
121 | $$
122 |
123 | * F3:
124 |
125 | $$
126 | \left( \frac{6.5 - 2}{6} \times 2 \right) - 1 = \frac{9}{6} - 1 = 0.5
127 | $$
128 |
129 | * F4:
130 |
131 | $$
132 | \left( \frac{6.75 - 5}{4} \times 2 \right) - 1 = \frac{3.5}{4} \times 2 - 1 = 1.75 - 1 = 0.75
133 | $$
134 |
135 | ### نرمالسازی کلاس 2:
136 |
137 | * F1:
138 |
139 | $$
140 | \left( \frac{6.5 - 1}{7} \times 2 \right) - 1 = \frac{11}{7} - 1 = \frac{4}{7}
141 | $$
142 |
143 | * F2:
144 |
145 | $$
146 | \left( \frac{7.5 - 2}{7} \times 2 \right) - 1 = \frac{11}{7} - 1 = \frac{4}{7}
147 | $$
148 |
149 | * F3:
150 |
151 | $$
152 | \left( \frac{2.75 - 2}{6} \times 2 \right) - 1 = \frac{1.5}{6} \times 2 - 1 = 0.5 - 1 = -0.75
153 | $$
154 |
155 | * F4:
156 |
157 | $$
158 | \left( \frac{7.25 - 5}{4} \times 2 \right) - 1 = 1.125 - 1 = 0.125
159 | $$
160 |
161 | ---
162 |
163 | ## ✅ گام 4: محاسبه فاصله بین داده تست و میانگینهای نرمالشده
164 |
165 | \| ویژگی | تست (نرمال) | \$\bar{f}\_j^+\$ (نرمال) | \$\bar{f}\_j^-\$ (نرمال) | \$| \text{test} - \bar{f}\_j^+ |\$ | \$| \text{test} - \bar{f}\_j^- |\$ |
166 | \|--------|----------------|--------------------------|--------------------------|------------------------------|------------------------------|
167 | \| F1 | \$-\frac{6}{7}\$ | \$-\frac{4}{7}\$ | \$\frac{4}{7}\$ | \$\frac{2}{7}\$ | \$\frac{10}{7}\$ |
168 | \| F2 | 1 | \$-\frac{4}{7}\$ | \$\frac{4}{7}\$ | \$\frac{11}{7}\$ | \$\frac{3}{7}\$ |
169 | \| F3 | -1 | 0.5 | -0.75 | \$1.5\$ | \$0.25\$ |
170 | \| F4 | 0 | 0.75 | 0.125 | \$0.75\$ | \$0.125\$ |
171 |
172 | ---
173 |
174 | ## ✅ نتیجهگیری:
175 |
176 | | ویژگی | فاصله از کلاس 1 | فاصله از کلاس 2 | نزدیکتر به |
177 | | ----- | --------------- | --------------- | ----------- |
178 | | F1 | 0.286 | 1.429 | کلاس 1 |
179 | | F2 | 1.571 | 0.429 | کلاس 2 |
180 | | F3 | 1.5 | 0.25 | کلاس 2 |
181 | | F4 | 0.75 | 0.125 | کلاس 2 |
182 |
183 | 🔍 نتیجه نهایی: داده تست به کلاس 2 نزدیکتر است، بهخصوص در ویژگیهای **F2، F3 و F4**.
184 |
185 | ---
186 |
--------------------------------------------------------------------------------
/more.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |