LamaAlQarni commited on
Commit
9bebfc5
·
1 Parent(s): 98cde5f

Project Files

Browse files
Dockerfile ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.9
2
+
3
+ RUN useradd -m -u 1000 user
4
+ USER user
5
+ ENV PATH="/home/user/.local/bin:$PATH"
6
+
7
+ WORKDIR /app
8
+
9
+ COPY --chown=user ./requirements.txt requirements.txt
10
+ RUN pip install --no-cache-dir --upgrade -r requirements.txt
11
+
12
+ COPY --chown=user . /app
13
+ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
Procfile ADDED
@@ -0,0 +1 @@
 
 
1
+ web: python app.py
app.py ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, render_template, request, jsonify
2
+ import torch
3
+ import transformers
4
+ from transformers import AutoTokenizer, AutoModel , AutoModelForCausalLM
5
+ from transformers import AutoModelForSeq2SeqLM
6
+ import pickle
7
+ import numpy as np
8
+ import pandas as pd
9
+ import seaborn as sns
10
+ import matplotlib.pyplot as plt
11
+ import nltk
12
+ from nltk.tokenize import word_tokenize
13
+ import re
14
+ import string
15
+ from nltk.corpus import stopwords
16
+ from tashaphyne.stemming import ArabicLightStemmer
17
+ import pyarabic.araby as araby
18
+ from sklearn.feature_extraction.text import TfidfVectorizer
19
+ from flask import Flask, render_template, request, redirect, url_for
20
+ import os
21
+ nltk.download('punkt')
22
+
23
+
24
+ app = Flask(__name__)
25
+
26
+
27
+ with open('tfidf_vectorizer.pkl', 'rb') as f:
28
+ vectorizer = pickle.load(f)
29
+
30
+ with open('svm_model.pkl', 'rb') as f:
31
+ model_classify = pickle.load(f)
32
+
33
+
34
+ model = AutoModelForSeq2SeqLM.from_pretrained("bushra1dajam/AraBART")
35
+ tokenizer = AutoTokenizer.from_pretrained('bushra1dajam/AraBART')
36
+
37
+
38
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
39
+ model.to(device)
40
+
41
+ def summarize_text(text):
42
+ inputs = tokenizer("summarize: " + text, return_tensors="pt", max_length=512, truncation=True)
43
+ inputs = {k: v.to(device) for k, v in inputs.items()}
44
+
45
+ summary_ids = model.generate(
46
+ inputs["input_ids"],
47
+ max_length=512,
48
+ num_beams=8,
49
+ #no_repeat_ngram_size=4, # Prevents larger n-gram repetitions
50
+ early_stopping=True)
51
+ summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
52
+ return summary
53
+
54
+ def remove_numbers(text):
55
+ cleaned_text = re.sub(r'\d+', '', text)
56
+ return cleaned_text
57
+
58
+ def Removing_non_arabic(text):
59
+ text =re.sub(r'[^0-9\u0600-\u06ff\u0750-\u077f\ufb50-\ufbc1\ufbd3-\ufd3f\ufd50-\ufd8f\ufd50-\ufd8f\ufe70-\ufefc\uFDF0-\uFDFD.0-9٠-٩]+', ' ',text)
60
+ return text
61
+
62
+ nltk.download('stopwords')
63
+ ara_punctuations = '''`÷×؛<>_()*&^%][ـ،/:"؟.,'{}~¦+|!”…“–ـ''' + string.punctuation
64
+ stop_words = stopwords.words()
65
+
66
+ def remove_punctuations(text):
67
+ translator = str.maketrans('', '', ara_punctuations)
68
+ text = text.translate(translator)
69
+
70
+ return text
71
+
72
+
73
+ def remove_tashkeel(text):
74
+ text = text.strip()
75
+ text = re.sub("[إأٱآا]", "ا", text)
76
+ text = re.sub("ى", "ي", text)
77
+ text = re.sub("ؤ", "ء", text)
78
+ text = re.sub("ئ", "ء", text)
79
+ text = re.sub("ة", "ه", text)
80
+ noise = re.compile(""" ّ | # Tashdid
81
+ َ | # Fatha
82
+ ً | # Tanwin Fath
83
+ ُ | # Damma
84
+ ٌ | # Tanwin Damm
85
+ ِ | # Kasra
86
+ ٍ | # Tanwin Kasr
87
+ ْ | # Sukun
88
+ ـ # Tatwil/Kashida
89
+ """, re.VERBOSE)
90
+ text = re.sub(noise, '', text)
91
+ text = re.sub(r'(.)\1+', r"\1\1", text)
92
+ return araby.strip_tashkeel(text)
93
+
94
+ arabic_stopwords = stopwords.words("arabic")
95
+ def remove_stop_words(text):
96
+ Text=[i for i in str(text).split() if i not in arabic_stopwords]
97
+ return " ".join(Text)
98
+
99
+ def tokenize_text(text):
100
+ tokens = word_tokenize(text)
101
+ return tokens
102
+
103
+ def Arabic_Light_Stemmer(text):
104
+
105
+ Arabic_Stemmer = ArabicLightStemmer()
106
+ text=[Arabic_Stemmer.light_stem(y) for y in text]
107
+
108
+ return " " .join(text)
109
+
110
+ def preprocess_text(text):
111
+ text = remove_numbers(text)
112
+ text = Removing_non_arabic(text)
113
+ text = remove_punctuations(text)
114
+ text = remove_stop_words(text)
115
+ text = remove_tashkeel(text)
116
+ text = tokenize_text(text)
117
+ text = Arabic_Light_Stemmer(text)
118
+ return text
119
+
120
+ class_mapping = {
121
+ 0: "جنائية",
122
+ 1: "احوال شخصية",
123
+ 2: "عامة"
124
+ }
125
+
126
+
127
+ @app.route('/')
128
+ def index():
129
+ return render_template('index.html')
130
+
131
+ @app.route('/result', methods=['GET', 'POST'])
132
+ def result():
133
+ if request.method == 'POST':
134
+ input_text = request.form['text']
135
+ if input_text:
136
+ prepro = preprocess_text(input_text)
137
+ features = vectorizer.transform([prepro])
138
+ prediction = model_classify.predict(features)
139
+ classifiy = prediction[0]
140
+ classifiy_class = class_mapping.get(classifiy, "لم يتم التعرف")
141
+ summarized_text = summarize_text(input_text)
142
+ return render_template('result.html', classification=classifiy_class, summary=summarized_text, input_text=input_text)
143
+
144
+ return render_template('result.html')
145
+
146
+
147
+
148
+ @app.route('/profile')
149
+ def profile():
150
+ return render_template('profile.html')
151
+
152
+ @app.route('/login', methods=['GET', 'POST'])
153
+ def login():
154
+ return render_template('login.html')
155
+
156
+ @app.route('/create_account', methods=['GET', 'POST'])
157
+ def create_account():
158
+ return render_template('create_account.html')
159
+
160
+
161
+ if __name__ == '__main__':
162
+ app.run(debug=True)
requirements.txt ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Flask==3.0.3
2
+ gunicorn==22.0.0
3
+ Jinja2==3.1.2
4
+ itsdangerous==2.2.0
5
+ MarkupSafe==2.1.3
6
+ Werkzeug==3.0.3
7
+ numpy==1.26.4
8
+ pandas==2.2.2
9
+ scikit-learn==1.5.1
10
+ scipy==1.14.0
11
+ matplotlib==3.9.1
12
+ matplotlib-inline==0.1.6
13
+ Flask-Cors==4.0.1
14
+ Flask-Login==0.6.3
15
+ flask-ngrok==0.0.25
16
+ aiohttp==3.9.5
17
+ python-json-logger==2.0.7
18
+ eventlet==0.36.1
19
+ gevent==24.2.1
20
+ gevent-websocket==0.10.1
21
+ openai==0.28.0
22
+ json5==0.9.14
23
+ Werkzeug==3.0.3
24
+ joblib==1.4.2
25
+ transformers==4.30.0
26
+ torch
27
+ seaborn
28
+ nltk
29
+ tashaphyne
30
+ huggingface-hub==0.26.2
static/images/girl_pic.png ADDED
static/images/lawyer-image.png ADDED
static/images/logo.png ADDED
static/js/Script.js ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function logintoHome(event) {
2
+ // Prevent the form submission
3
+ event.preventDefault();
4
+ // Redirect to the Flask profile route
5
+ window.location.href = '/profile';
6
+ }
7
+
8
+ const casesData = {
9
+ "cases": [
10
+ {
11
+ "type": "جنائية",
12
+ "summary": "قضية سرقة منزل في حي السلام",
13
+ "date": "2024-01-15"
14
+ },
15
+ {
16
+ "type": "جنائية",
17
+ "summary": "حادث مروري في شارع الملك فهد",
18
+ "date": "2024-02-20"
19
+ },
20
+ {
21
+ "type": "أحوال شخصية",
22
+ "summary": "دعوى نفقة وحضانة",
23
+ "date": "2024-01-10"
24
+ },
25
+ {
26
+ "type": "أحوال شخصية",
27
+ "summary": "طلب تعديل زيارة أطفال",
28
+ "date": "2024-03-05"
29
+ },
30
+ {
31
+ "type": "عام",
32
+ "summary": "نزاع تجاري بين شركتين",
33
+ "date": "2024-02-01"
34
+ }
35
+ ]
36
+ };
37
+ function processData(data) {
38
+ const counts = {
39
+ "جنائية": 0,
40
+ "أحوال شخصية": 0,
41
+ "عام": 0
42
+ };
43
+
44
+ data.cases.forEach(caseItem => {
45
+ counts[caseItem.type]++;
46
+ });
47
+
48
+ return {
49
+ labels: Object.keys(counts),
50
+ data: Object.values(counts)
51
+ };
52
+ }
53
+
54
+ // Create doughnut chart
55
+ function createDoughnutChart(processedData) {
56
+ const ctx = document.getElementById('caseChart').getContext('2d');
57
+ new Chart(ctx, {
58
+ type: 'doughnut',
59
+ data: {
60
+ labels: processedData.labels,
61
+ datasets: [{
62
+ data: processedData.data,
63
+ backgroundColor: ['#003366', '#36A2EB', '#8dc9e5'],
64
+ hoverBackgroundColor: ['#40372E', '#A88A6C', '#ADA195'],
65
+ borderWidth: 1
66
+ }]
67
+ },
68
+ options: {
69
+ responsive: true,
70
+ plugins: {
71
+ legend: {
72
+ position: 'bottom',
73
+ labels: {
74
+ font: { size: 14 }
75
+ }
76
+ },
77
+ tooltip: {
78
+ callbacks: {
79
+ label: function(context) {
80
+ const label = context.label || '';
81
+ const value = context.formattedValue;
82
+ const total = context.dataset.data.reduce((a, b) => a + b, 0);
83
+ const percentage = Math.round((context.raw / total) * 100);
84
+ return `${label}: ${value} (${percentage}%)`;
85
+ }
86
+ }
87
+ }
88
+ },
89
+ cutout: '60%'
90
+ }
91
+ });
92
+ }
93
+
94
+ // Display summaries
95
+ function displaySummaries(data) {
96
+ const summariesContainer = document.getElementById('caseSummaries');
97
+ data.cases.forEach(caseItem => {
98
+ const summaryDiv = document.createElement('div');
99
+ let className = '';
100
+ switch(caseItem.type) {
101
+ case 'جنائية':
102
+ className = 'criminal';
103
+ break;
104
+ case 'أحوال شخصية':
105
+ className = 'personal';
106
+ break;
107
+ case 'عام':
108
+ className = 'general';
109
+ break;
110
+ }
111
+ summaryDiv.className = `case-summary ${className}`;
112
+ summaryDiv.innerHTML = `
113
+ <strong>${caseItem.type}</strong>
114
+ <p>${caseItem.summary}</p>
115
+ <small>${new Date(caseItem.date).toLocaleDateString('ar-SA')}</small>
116
+ `;
117
+ summariesContainer.appendChild(summaryDiv);
118
+ });
119
+ }
120
+
121
+ document.addEventListener('DOMContentLoaded', function() {
122
+ const doughnutData = processData(casesData);
123
+ const totalDocuments = casesData.cases.length; // Calculate total number of documents (cases)
124
+
125
+ // Create doughnut chart
126
+ createDoughnutChart(doughnutData);
127
+
128
+ // Display the total number of documents
129
+ document.getElementById('totalDocuments').innerHTML = `إجمالي عدد القضايا: ${totalDocuments}`;
130
+
131
+ // Display case summaries
132
+ displaySummaries(casesData);
133
+ });
static/styles.css ADDED
@@ -0,0 +1,835 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* General Styles for Both Pages */
2
+ * {
3
+ margin: 0;
4
+ padding: 0;
5
+ box-sizing: border-box;
6
+ font-family: 'Cairo', sans-serif;
7
+ }
8
+
9
+ body {
10
+ background-color: #f4f4f9;
11
+ direction: rtl;
12
+ justify-content: center;
13
+ align-items: center;
14
+ margin: 0;
15
+ }
16
+
17
+
18
+ /* Header Styles */
19
+ .header {
20
+ text-align: center;
21
+ width: 100%;
22
+ height: 1; /* Adjust the height to account for the fixed nav */
23
+ background-image: url('/static/images/logo.png');
24
+ background-color: #445a75; /* Set the background color to #445a75 */
25
+ background-size: cover;
26
+ background-repeat: no-repeat;
27
+ background-position: center top;
28
+ position: sticky; /*relative */
29
+ padding: 10px 8%;
30
+ color: #ffffff; /* White text for visibility */
31
+ font-family: Arial, sans-serif;
32
+ }
33
+
34
+ .header h1 {
35
+ color: #ffffff; /* Keep text white for better contrast */
36
+ text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5); /* Subtle text shadow for readability */
37
+ }
38
+
39
+ /* Navigation Bar */
40
+ nav {
41
+ background-color: #f5f5f5; /* Background color for the nav */
42
+ display: flex;
43
+ padding: 1rem 2rem;
44
+ color: #663300;
45
+ font-weight: bold;
46
+ align-items: center;
47
+ justify-content: space-between;
48
+ width: 100%;
49
+ position: sticky; /*sticky */
50
+ top: 0;
51
+ left: 0;
52
+ z-index: 1000;
53
+ height: 80px; /* Define a fixed height for the nav */
54
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); /* Add a subtle shadow */
55
+ }
56
+
57
+ nav.scrolled {
58
+ background-color: #bdd1d038; /* Stable color when scrolled */
59
+ }
60
+
61
+ .logo img {
62
+ width: 110px;
63
+ height: auto;
64
+ }
65
+
66
+ /* Content Section */
67
+ .content {
68
+ padding: 20px;
69
+ padding-top: 250spx; /* Add padding to push content below the fixed nav */
70
+ background-color: #f5f5f5; /* Light gray background for contrast */
71
+ color: #333; /* Dark gray text color */
72
+ font-family: Arial, sans-serif;
73
+ height: 1500px; /* Simulated height for scrolling */
74
+ }
75
+ /* Content Section */
76
+
77
+ .nav-links {
78
+ position: absolute;
79
+ right: 20%;
80
+ list-style: none;
81
+ display: flex;
82
+ justify-content: space-between;
83
+ /* Distributes items evenly */
84
+ gap: 5px;
85
+ /* Ensure there's enough space between navigation items */
86
+ margin-right: 30px;
87
+ margin-left: 40vw;
88
+ font-size: 64px;
89
+ padding:0;
90
+
91
+ }
92
+
93
+ .nav-links li {
94
+ height: fit-content;
95
+ display: flex;
96
+ align-items: center;
97
+ }
98
+
99
+ .nav-links a {
100
+ text-decoration: none;
101
+ color: #663300;
102
+ /* Ensure text is visible with a dark color */
103
+ font-weight: bold;
104
+ font-size: 18px;
105
+ transition: color 0.3s ease;
106
+ /* Add a smooth transition effect */
107
+ padding: 20px;
108
+ }
109
+
110
+ .nav-links a:hover {
111
+ color: #007bff;
112
+ /* Add a hover effect for better user experience */
113
+ }
114
+
115
+ .right-icons {
116
+ display: flex;
117
+ align-items: center;
118
+ gap: 15px;
119
+ }
120
+
121
+ /* Auth Buttons */
122
+ .auth-buttons {
123
+ display: flex;
124
+ gap: 10px;
125
+ }
126
+
127
+ .auth-buttons a {
128
+ text-decoration: none;
129
+ padding: 10px 20px;
130
+ border-radius: 5px;
131
+ font-size: 16px;
132
+ }
133
+
134
+ .auth-buttons .login {
135
+ background-color: #fff;
136
+ border: 1px solid #003366;
137
+ color: #003366;
138
+ }
139
+
140
+ .auth-buttons .create-account {
141
+ background-color: #003366;
142
+ color: #fff;
143
+ }
144
+
145
+ /* About Us Section (Landing Page) */
146
+ .about-us {
147
+ background-color: #fff;
148
+ padding: 50px;
149
+ display: flex;
150
+ justify-content: space-between;
151
+ align-items: center;
152
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
153
+ margin-bottom: 50px;
154
+ background: radial-gradient(circle, rgba(210, 227, 255, 0.2) 50%, transparent 50%);
155
+ border-radius: 25px;
156
+ }
157
+
158
+ .about-us .container {
159
+ display: flex;
160
+ justify-content: space-between;
161
+ align-items: center;
162
+ max-width: 1200px;
163
+ margin: 0 auto;
164
+ }
165
+
166
+ .about-us .image img {
167
+ width: 400px;
168
+ margin-left: 40px;
169
+ /* Move the lawyer image to the right */
170
+ }
171
+
172
+ .about-us .text {
173
+ max-width: 500px;
174
+ text-align: right;
175
+ }
176
+
177
+ .about-us .text h1 {
178
+ font-size: 36px;
179
+ color: #003366;
180
+ /* Darker blue for headings */
181
+ margin-bottom: 20px;
182
+ }
183
+
184
+ .about-us .text p {
185
+ font-size: 18px;
186
+ color: #666;
187
+ line-height: 1.8;
188
+ }
189
+
190
+ /* Goals Section (Landing Page) */
191
+ .goals {
192
+ text-align: center;
193
+ padding: 50px 0;
194
+ }
195
+
196
+ .team {
197
+ text-align: center;
198
+ padding: 50px 0;
199
+ }
200
+ .goals h2 {
201
+ font-size: 36px;
202
+ margin-bottom: 30px;
203
+ color: #003366;
204
+ }
205
+
206
+ .team h2 {
207
+ font-size: 36px;
208
+ margin-bottom: 30px;
209
+ color: #003366;
210
+ }
211
+ .goal-cards {
212
+ display: flex;
213
+ justify-content: space-around;
214
+ flex-wrap: wrap;
215
+ max-width: 1200px;
216
+ margin: 0 auto;
217
+ }
218
+
219
+ .goal-cards .card {
220
+ background-color: #fff;
221
+ padding: 20px;
222
+ width: 250px;
223
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
224
+ border-radius: 10px;
225
+ text-align: center;
226
+ margin-bottom: 20px;
227
+ }
228
+
229
+ .goal-cards .card h3 {
230
+ font-size: 24px;
231
+ margin-bottom: 15px;
232
+ color: #007bff;
233
+ }
234
+
235
+ .goal-cards .card p {
236
+ font-size: 16px;
237
+ color: #666;
238
+ }
239
+
240
+ /* Login Page Layout */
241
+ .login-page {
242
+ display: flex;
243
+ justify-content: center;
244
+ align-items: center;
245
+ padding: 20px;
246
+ }
247
+
248
+
249
+
250
+ .login-container {
251
+ display: flex;
252
+ justify-content: space-between;
253
+ background-color: #fff;
254
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
255
+ border-radius: 10px;
256
+ overflow: hidden;
257
+ max-width: 1000px;
258
+ width: 100%;
259
+ }
260
+
261
+ .quote-section {
262
+ background: radial-gradient(circle, rgba(210, 227, 255, 0.2) 50%, transparent 50%);
263
+ padding: 40px;
264
+ flex: 1;
265
+ display: flex;
266
+ align-items: center;
267
+ justify-content: center;
268
+ font-size: 20px;
269
+ color: #003366;
270
+ line-height: 1.8;
271
+ text-align: center;
272
+ background-color: #f4f4f9;
273
+ }
274
+
275
+ .login-form {
276
+ flex: 1;
277
+ padding: 40px;
278
+ display: flex;
279
+ flex-direction: column;
280
+ justify-content: center;
281
+ }
282
+
283
+ .login-form h2 {
284
+ margin-bottom: 20px;
285
+ color: #003366;
286
+ font-size: 28px;
287
+ }
288
+
289
+ /* Form Styling and Alignment for Login Page */
290
+ .login-form form {
291
+ display: flex;
292
+ flex-direction: column;
293
+ }
294
+
295
+ .login-form .input-group {
296
+ display: flex;
297
+ flex-direction: column;
298
+ margin-bottom: 20px;
299
+ }
300
+
301
+ .login-form label {
302
+ font-size: 18px;
303
+ color: #333;
304
+ margin-bottom: 5px;
305
+ }
306
+
307
+ .login-form input {
308
+ padding: 10px;
309
+ border: 1px solid #ccc;
310
+ border-radius: 5px;
311
+ font-size: 16px;
312
+ }
313
+
314
+ .login-form .login-btn {
315
+ background-color: #003366;
316
+ color: #fff;
317
+ padding: 10px;
318
+ border: none;
319
+ border-radius: 5px;
320
+ font-size: 18px;
321
+ cursor: pointer;
322
+ }
323
+
324
+ .login-form .login-btn:hover {
325
+ background-color: #0056b3;
326
+ }
327
+
328
+ .login-form p {
329
+ margin-top: 10px;
330
+ font-size: 16px;
331
+ }
332
+
333
+ .login-form a {
334
+ color: #007bff;
335
+ text-decoration: none;
336
+ }
337
+
338
+ #cssportal-grid {
339
+ padding: 20px;
340
+ background: rgba(255, 255, 255, 0.08);
341
+ border-radius: 16px;
342
+ box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
343
+ backdrop-filter: blur(2.6px);
344
+ -webkit-backdrop-filter: blur(2.6px);
345
+ position: sticky;
346
+ right: 30%;
347
+ left: 30%;
348
+ z-index: -2;
349
+ display: grid;
350
+ grid-template-columns: 1fr;
351
+ gap: 20px;
352
+ padding: 20px;
353
+ padding-right: 0;
354
+ width: max-content;
355
+ height: auto;
356
+ overflow: hidden;
357
+ margin: 50px auto;
358
+ }
359
+
360
+ /* User profile section */
361
+ #div1 {
362
+ display: flex;
363
+ align-items: center;
364
+ justify-content: flex-start;
365
+ gap: 20px;
366
+ margin-right: 20px;
367
+ flex-direction: row;
368
+ width: fit-content;
369
+ }
370
+
371
+ .user-image img {
372
+ height: 100px;
373
+ width: 100px;
374
+ border-radius: 50%;
375
+ }
376
+
377
+ .user-name h3 {
378
+ color: #000436;
379
+ font-size: 28px;
380
+ }
381
+
382
+ /* Section title */
383
+ .header {
384
+ background-color: #000436;
385
+ color: #FFFFFF;
386
+ padding: 15px;
387
+ width: fit-content;
388
+ margin-top: 20px;
389
+ margin-right: 0;
390
+ font-size: 16px;
391
+ border-radius: 5px;
392
+ border-top-right-radius: 0;
393
+ border-bottom-right-radius: 0;
394
+ font-weight: bold;
395
+ position: sticky;
396
+
397
+ }
398
+
399
+ /* Chart and card section */
400
+ #div2 {
401
+ display: flex;
402
+ justify-content: center;
403
+ align-items: center;
404
+ width: fit-content;
405
+ }
406
+
407
+ #div3 {
408
+ width: auto;
409
+ display: flex;
410
+ flex-direction: row-reverse;
411
+ font-weight: bold;
412
+ position: sticky;
413
+ top: -30px;
414
+
415
+ }
416
+
417
+ #donut_single {
418
+ width: 300px;
419
+ height: 300px;
420
+ }
421
+
422
+ .card {
423
+ background: rgba(255, 255, 255, 0.11);
424
+ border-radius: 16px;
425
+ box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
426
+ backdrop-filter: blur(4.5px);
427
+ -webkit-backdrop-filter: blur(4.5px);
428
+ border: 1px solid rgba(255, 255, 255, 0.3);
429
+ border-radius: 10px;
430
+ padding: 20px;
431
+ }
432
+
433
+ /* Button style */
434
+ .btn {
435
+ font-size: 17px;
436
+ text-transform: uppercase;
437
+ padding: 1em 2.5em;
438
+ border-radius: 6em;
439
+ background-color: rgb(0, 7, 45);
440
+ color: #FFFFFF;
441
+ cursor: pointer;
442
+ transition: all 0.2s;
443
+ }
444
+
445
+ .btn:hover {
446
+ transform: translateY(-3px);
447
+ box-shadow: 0 10px 20px rgba(255, 255);
448
+ }
449
+
450
+
451
+ /* Action Buttons */
452
+ .action-buttons {
453
+ display: flex;
454
+ justify-content: space-between;
455
+ padding: 20px;
456
+ max-width: 1200px;
457
+ margin: 0 auto;
458
+ }
459
+
460
+ .action-buttons .btn {
461
+ padding: 15px 30px;
462
+ border: none;
463
+ font-size: 18px;
464
+ cursor: pointer;
465
+ border-radius: 5px;
466
+ }
467
+
468
+ .action-buttons .btn.previous {
469
+ background-color: #b3815f;
470
+ color: white;
471
+ }
472
+
473
+ .action-buttons .btn.classify {
474
+ background-color: #007bff;
475
+ color: white;
476
+ }
477
+
478
+ .action-buttons .btn:hover {
479
+ opacity: 0.9;
480
+ }
481
+
482
+ .container {
483
+ position: relative;
484
+ top: 50px;
485
+ max-width: 600px;
486
+ margin: 50px auto; /* First value is top/bottom, second is left/right */
487
+ padding: 20px;
488
+ background-color: #fff;
489
+ border-radius: 8px;
490
+ margin-top: 0;
491
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
492
+ }
493
+
494
+ .headerofresult{
495
+ color: #663300;
496
+ text-align: center;
497
+ margin-top: 60px;
498
+ background-color: #ffffff;
499
+ margin-bottom: 0;
500
+ width: fit-content;
501
+ padding: 0 50px 0 50px ;
502
+ position: relative;
503
+ right: 43%;
504
+ border-radius:20px ;
505
+ border-bottom-left-radius:0 ;
506
+ border-bottom-right-radius:0 ;
507
+ border-top: solid 2px #663300;
508
+ top: 50px;
509
+
510
+ }
511
+
512
+ textarea {
513
+ width: 100%;
514
+ height: 200px;
515
+ padding: 10px;
516
+ border-radius: 4px;
517
+ border: 1px solid #ddd;
518
+ margin-bottom: 20px;
519
+ }
520
+
521
+ button {
522
+ display: block;
523
+ width: 100%;
524
+ padding: 10px;
525
+ background-color: #003366;
526
+ color: white;
527
+ border: none;
528
+ border-radius: 4px;
529
+ cursor: pointer;
530
+ }
531
+
532
+ button:hover {
533
+ background-color: #003366;
534
+ }
535
+
536
+ #classification-result {
537
+ margin-top: 20px;
538
+ }
539
+
540
+ #classification-result h3 {
541
+ color: #333;
542
+ }
543
+
544
+ #classification-predict {
545
+ padding: 10px;
546
+ background-color: #f8f9fa;
547
+ border: 1px solid #ddd;
548
+ border-radius: 4px;
549
+ }
550
+
551
+ #summary-result {
552
+ margin-top: 20px;
553
+ }
554
+
555
+ #summary-result h2 {
556
+ color: #333;
557
+ }
558
+
559
+ #summary-text {
560
+ padding: 10px;
561
+ background-color: #f8f9fa;
562
+ border: 1px solid #ddd;
563
+ border-radius: 4px;
564
+ }
565
+
566
+ .dashboard {
567
+ max-width: 1000px; /* Reduce the max-width for a smaller layout */
568
+ margin: 30px auto; /* Reduce margin to make the layout closer to the edges */
569
+ display: flex;
570
+ flex-direction: column;
571
+ gap: 15px;
572
+ padding: 15px;
573
+ }
574
+
575
+ /* Charts Row */
576
+ .charts-row {
577
+ display: flex;
578
+ gap: 20px;
579
+ flex-wrap: wrap;
580
+ justify-content: space-between;
581
+ }
582
+
583
+ /* Chart Container */
584
+ .chart-container {
585
+ flex: 1;
586
+ min-width: 100px; /* Increase min-width for better readability, but keep it small */
587
+ background: white;
588
+ padding: 10px; /* Reduce padding for a smaller container */
589
+ border-radius: 5px;
590
+ box-shadow: 0 1px 5px rgba(0, 0, 0, 0.1); /* Make the shadow smaller and subtler */
591
+ margin: 10px; /* Reduce margin for less spacing between elements */
592
+ }
593
+
594
+ /* Summary Section */
595
+ .summary-section {
596
+ background: white;
597
+ padding: 20px;
598
+ border-radius: 10px;
599
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
600
+ }
601
+ .total-documents {
602
+ font-size: 30px; /* Set the font size */
603
+ font-weight: bold; /* Make the text bold */
604
+ color: #003366; /* Set the text color */
605
+ margin-top: 70px; /* Add space from the chart */
606
+ text-align: center; /* Horizontally center the text */
607
+ padding: 10px; /* Add padding for better spacing */
608
+ background-color: #ffffff; /* Add a background color */
609
+ border-radius: 10px; /* Rounded corners for a soft look */
610
+ width: 100%; /* Make it take the full width */
611
+ max-width: 300px; /* Limit the width to 300px for better presentation */
612
+ margin-left: auto; /* Center the div horizontally */
613
+ margin-right: auto; /* Center the div horizontally */
614
+ display: flex; /* Enable flexbox layout */
615
+ justify-content: center; /* Horizontally center the text */
616
+ align-items: center; /* Vertically center the text */
617
+ height: 300px; /* Set a fixed height for vertical centering */
618
+ box-sizing: border-box; /* Include padding in width/height calculations */
619
+ }
620
+
621
+
622
+ /* Titles */
623
+ .title {
624
+ text-align: center;
625
+ color: #333;
626
+ margin-bottom: 20px;
627
+ font-size: 1.5rem;
628
+ font-weight: bold;
629
+ }
630
+
631
+ /* Case Summary Cards */
632
+ .case-summary {
633
+ margin: 10px 0;
634
+ padding: 40px;
635
+ border-right: 3px solid;
636
+ background: #f8f9fa;
637
+ border-radius: 5px;
638
+ transition: transform 0.2s ease;
639
+ }
640
+
641
+ .case-summary:hover {
642
+ transform: translateX(-5px);
643
+ box-shadow: 2px 2px 8px rgba(0,0,0,0.1);
644
+ }
645
+
646
+ /* Case Type Colors */
647
+ .criminal {
648
+ border-color: #003366;
649
+ }
650
+
651
+ .personal {
652
+ border-color: #36A2EB;
653
+ }
654
+
655
+ .general {
656
+ border-color: #8dc9e5;
657
+ }
658
+
659
+ /* Case Summary Content */
660
+ .case-summary strong {
661
+ display: block;
662
+ margin-bottom: 5px;
663
+ color: #444;
664
+ font-size: 1.1rem;
665
+ }
666
+
667
+ .case-summary p {
668
+ margin: 8px 0;
669
+ color: #666;
670
+ line-height: 1.4;
671
+ }
672
+
673
+ .case-summary small {
674
+ display: block;
675
+ color: #888;
676
+ font-size: 0.9rem;
677
+ margin-top: 5px;
678
+ }
679
+
680
+
681
+ .toggle {
682
+ display: none; /* Keeps the element hidden */
683
+ position: relative;
684
+ left: 10%; /* Moves the element 10% from the left of its containing element */
685
+ }
686
+
687
+ .team {
688
+ text-align: center;
689
+ padding: 50px 0;
690
+ }
691
+
692
+ .team-cards {
693
+ display: flex;
694
+ justify-content: center;
695
+ gap: 20px;
696
+ flex-wrap: wrap;
697
+ }
698
+
699
+ .card {
700
+ background: #fff;
701
+ padding: 20px;
702
+ border-radius: 10px;
703
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
704
+ width: 250px;
705
+ text-align: center;
706
+ }
707
+
708
+ .card .team-img {
709
+ width: 100%;
710
+ height: 200px;
711
+ object-fit: cover;
712
+ border-radius: 10px;
713
+ }
714
+
715
+ .card h3 {
716
+ font-size: 1.2em;
717
+ margin: 10px 0;
718
+ }
719
+
720
+ .card p {
721
+ font-size: 1em;
722
+ color: #555;
723
+ }
724
+
725
+ .linkedin-link {
726
+ display: inline-block;
727
+ margin-top: 10px;
728
+ text-decoration: none;
729
+ color: #0077b5;
730
+ font-weight: bold;
731
+ }
732
+
733
+ .linkedin-link i {
734
+ margin-left: 5px;
735
+ }
736
+
737
+ /* Responsive Design */
738
+ @media (max-width: 768px) {
739
+
740
+ .toggle{
741
+ display: block;
742
+ }
743
+
744
+ .dashboard {
745
+ padding: 10px;
746
+ gap: 15px;
747
+ }
748
+
749
+ .chart-container {
750
+ min-width: 100%;
751
+ }
752
+
753
+ .title {
754
+ font-size: 1.3rem;
755
+ }
756
+
757
+ .case-summary {
758
+ padding: 12px;
759
+ }
760
+
761
+ .container {
762
+ right: 10%;
763
+ }
764
+
765
+ h2{
766
+ right: 30%;
767
+ }
768
+ .nav-links{
769
+ display: none;
770
+ }
771
+
772
+ .nav-links.active{
773
+ display: flex;
774
+ flex-direction: column;
775
+ gap: 20px;
776
+ position: absolute;
777
+ top: 80px;
778
+ right: 0;
779
+ width: 100%;
780
+ padding: 0;
781
+ margin: 0;
782
+ background-color: #f5f5f5;
783
+ }
784
+ .nav-links a{
785
+ font-size: 12px;
786
+ }
787
+ .logo img{
788
+ width: 64px;
789
+ }
790
+ .headerofresult{
791
+ position: sticky;
792
+ text-align: center;
793
+ width: 100%; /* Make the width 100% for smaller screens */
794
+ padding: 0 20px; /* Adjust padding */
795
+ margin-top: 30px; /* Adjust margin */
796
+ font-size: 16px; /* Adjust font size */
797
+ }
798
+ .container {
799
+ position: sticky;
800
+ }
801
+ .charts-row {
802
+ justify-content: center; /* Center content on smaller screens */
803
+ }
804
+
805
+ .chart-container {
806
+ min-width: 200px; /* Adjust min-width for smaller screens */
807
+ padding: 10px; /* Slightly reduce padding on small screens */
808
+ }
809
+
810
+ .login-container {
811
+ flex-direction: column;
812
+ }
813
+
814
+ .quote-section,
815
+ .login-form {
816
+ width: 100%;
817
+ }
818
+
819
+ .about-us .container {
820
+ display: block; /* Stack the content inside the container */
821
+ text-align: center; /* Center-align text for better readability */
822
+ }
823
+ .about-us .image img {
824
+ max-width: 100%; /* Ensure the image doesn't overflow */
825
+ height: auto; /* Maintain the aspect ratio */
826
+ }
827
+
828
+ .auth-buttons a {
829
+ text-decoration: none;
830
+ padding: 9px 10px;
831
+ border-radius: 3px;
832
+ font-size: 10px;
833
+ }
834
+
835
+ }
svm_model.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:56e1780885b58ab910fe9ac58d65ea5f0ddfb81e1527d6e2c0296b39b8a53351
3
+ size 1625610
templates/create_account.html ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="ar">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>إنشاء حساب - Wajeez</title>
8
+ <link rel="icon" href="/static/images/logo.png" type="image/png">
9
+ <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
10
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
11
+ <link href="https://fonts.googleapis.com/css2?family=Cairo:wght@400;700&display=swap" rel="stylesheet">
12
+
13
+ <script>
14
+ // Toggle the navigation menu on small screens
15
+ function toggleMenu() {
16
+ const navLinks = document.getElementById('nav-Links');
17
+ navLinks.classList.toggle('active');
18
+ }
19
+ </script>
20
+ </head>
21
+
22
+ <body>
23
+
24
+ <header>
25
+ <nav>
26
+ <div class="logo">
27
+ <img src="{{ url_for('static', filename='images/logo.png') }}" alt="Wajeez Logo">
28
+ </div>
29
+ <ul class="nav-links" id="nav-Links">
30
+ <li><a href="{{ url_for('index') }}">الرئيسية</a></li>
31
+ </ul>
32
+ <div class="toggle" id="toggleButton" onclick="toggleMenu()">☰</div>
33
+ </nav>
34
+ </header>
35
+
36
+ <main class="login-page">
37
+ <div class="login-container">
38
+ <div class="quote-section">
39
+ <p>قال رسول الله صلى الله عليه وسلم: "من مشى مع مظلوم حتى يُثبت له حقه ثبّت الله قدميه على الصراط يوم
40
+ تزلّ الأقدام"</p>
41
+ </div>
42
+ <div class="login-form">
43
+ <h2>إنشاء حساب</h2>
44
+ <form action="{{ url_for('create_account') }}" method="POST">
45
+ <div class="input-group">
46
+ <label for="username">اسم المستخدم</label>
47
+ <input type="text" id="username" name="username" required>
48
+ </div>
49
+
50
+ <div class="input-group">
51
+ <label for="name">الاسم الكامل</label>
52
+ <input type="text" id="name" name="full_name" required>
53
+ </div>
54
+
55
+ <div class="input-group">
56
+ <label for="email">الإيميل</label>
57
+ <input type="email" id="email" name="email" required>
58
+ </div>
59
+
60
+ <div class="input-group">
61
+ <label for="password">كلمة المرور</label>
62
+ <input type="password" id="password" name="password" required>
63
+ </div>
64
+ <button type="submit" class="login-btn" onclick="logintoHome(event)"> إنشاء حساب</button>
65
+ </form>
66
+ <p>هل لديك حساب بالفعل؟ <a href="/login">تسجيل الدخول</a></p>
67
+ </div>
68
+ </div>
69
+ </main>
70
+
71
+ <script src="{{ url_for('static', filename='js/script.js') }}"></script>
72
+ </body>
73
+
74
+ </html>
templates/index.html ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="ar">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Wajeez</title>
8
+ <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
9
+ <link rel="icon" href="/static/images/logo.png" type="image/png">
10
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
11
+ <link href="https://fonts.googleapis.com/css2?family=Cairo:wght@400;700&display=swap" rel="stylesheet">
12
+ <script>
13
+ function toggleMenu() {
14
+ document.getElementById('nav-Links').classList.toggle('active');
15
+ }
16
+ </script>
17
+ </head>
18
+
19
+ <body>
20
+ <header>
21
+ <nav>
22
+ <div class="logo">
23
+ <img src="{{ url_for('static', filename='images/logo.png') }}" alt="Wajeez Logo">
24
+ </div>
25
+ <ul class="nav-links" id="nav-Links">
26
+ <li><a href="#">الرئيسية</a></li>
27
+ </ul>
28
+ <div class="right-icons">
29
+ <div class="auth-buttons">
30
+ <a href="/login" class="login">تسجيل الدخول</a>
31
+ <a href="/create_account" class="create-account">إنشاء حساب</a>
32
+ </div>
33
+ </div>
34
+ <div class="toggle" id="toggleButton" onclick="toggleMenu()">☰</div>
35
+ </nav>
36
+ </header>
37
+
38
+ <main>
39
+ <section class="about-us">
40
+ <div class="container">
41
+ <div class="text">
42
+ <h1>من نحن؟</h1>
43
+ <p>
44
+ يتميز موقعنا بتوفير أداة متطورة لتصنيف وتلخيص الوثائق القانونية بكفاءة وسرعة سواء كنت محاميا
45
+ مشغولا أو طالبا يدرس القانون. فإننا نوفر لك الوسيلة المثالية لتوفير الوقت والجهد في فحص وفهم
46
+ الوثائق القانونية المعقدة.<br>
47
+ اكتشف الطريقة الجديدة والفعالة لإدارة الوثائق القانونية مع موقعنا.
48
+ </p>
49
+ </div>
50
+ <div class="image">
51
+ <img src="{{ url_for('static', filename='images/lawyer-image.png') }}" alt="Lawyer Image">
52
+ </div>
53
+ </div>
54
+ </section>
55
+ <section class="goals">
56
+ <h2>أهدافنا</h2>
57
+ <div class="goal-cards">
58
+ <div class="card">
59
+ <h3>زيادة الكفاءة في تصنيف</h3>
60
+ <p>زيادة الكفاءة في تصنيف القضايا وتبسيطها بشكل آلي.</p>
61
+ </div>
62
+ <div class="card">
63
+ <h3>توفير الوقت والجهود</h3>
64
+ <p>توفير الوقت والجهود المبذولة في متابعة المستندات القانونية والمعلومات الأساسية.</p>
65
+ </div>
66
+ <div class="card">
67
+ <h3>تعزيز اللغة العربية</h3>
68
+ <p>تعزيز اللغة العربية في مجال الذكاء الاصطناعي ومعالجة الوثائق القانونية.</p>
69
+ </div>
70
+ <div class="card">
71
+ <h3>زيادة كفاءة المحامين</h3>
72
+ <p>زيادة كفاءة وانتاجية المحامين في معالجة قضاياهم المعقدة.</p>
73
+ </div>
74
+ </div>
75
+ </section>
76
+ <section class="team">
77
+ <h2>فريق العمل</h2>
78
+ <div class="team-cards">
79
+ <div class="card">
80
+ <img src="{{ url_for('static', filename='images/girl_pic.png') }}" alt="Team Member 1"
81
+ class="team-img">
82
+ <h3>بشرى بن دعجم</h3>
83
+ <p> مهندسة AI </p>
84
+ <a href="https://www.linkedin.com/in/bushra-dajam" target="_blank" class="linkedin-link">
85
+ <i class="fab fa-linkedin"></i> LinkedIn
86
+ </a>
87
+ </div>
88
+ <div class="card">
89
+ <img src="{{ url_for('static', filename='images/girl_pic.png') }}" alt="Team Member 2"
90
+ class="team-img">
91
+ <h3>ليالي السلمي</h3>
92
+ <p> مهندسة AI </p>
93
+ <a href="https://www.linkedin.com/in/layali-alsolami" target="_blank" class="linkedin-link">
94
+ <i class="fab fa-linkedin"></i> LinkedIn
95
+ </a>
96
+ </div>
97
+ <div class="card">
98
+ <img src="{{ url_for('static', filename='images/girl_pic.png') }}" alt="Team Member 3"
99
+ class="team-img">
100
+ <h3>ريوف القرشي</h3>
101
+ <p>مهندسة AI </p>
102
+ <a href="https://www.linkedin.com/in/reyof-alqurashi-97447b300" target="_blank" class="linkedin-link">
103
+ <i class="fab fa-linkedin"></i> LinkedIn
104
+ </a>
105
+ </div>
106
+ <div class="card">
107
+ <img src="{{ url_for('static', filename='images/girl_pic.png') }}" alt="Team Member 4"
108
+ class="team-img">
109
+ <h3>ايلاف هواري </h3>
110
+ <p> مهندسة AI </p>
111
+ <a href="https://www.linkedin.com/in/elaf-hawwari-24357b307" target="_blank" class="linkedin-link">
112
+ <i class="fab fa-linkedin"></i> LinkedIn
113
+ </a>
114
+ </div>
115
+ <div class="card">
116
+ <img src="{{ url_for('static', filename='images/girl_pic.png') }}" alt="Team Member 4"
117
+ class="team-img">
118
+ <h3>شذا الظاهري</h3>
119
+ <p> مهندسة AI </p>
120
+ <a href="https://www.linkedin.com/in/shatha-aldhahri-1668a02b7" target="_blank" class="linkedin-link">
121
+ <i class="fab fa-linkedin"></i> LinkedIn
122
+ </a>
123
+ </div>
124
+ </div>
125
+ </section>
126
+ </main>
127
+ <script src="{{ url_for('static', filename='js/script.js') }}"></script>
128
+ </body>
129
+
130
+ </html>
templates/login.html ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="ar">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>تسجيل الدخول - Wajeez</title>
8
+ <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
9
+ <link rel="icon" href="/static/images/logo.png" type="image/png">
10
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
11
+ <link href="https://fonts.googleapis.com/css2?family=Cairo:wght@400;700&display=swap" rel="stylesheet">
12
+ <script>
13
+ // Function to toggle the menu on small screens
14
+ function toggleMenu() {
15
+ document.getElementById('nav-Links').classList.toggle('active');
16
+ }
17
+ </script>
18
+ </head>
19
+
20
+ <body>
21
+
22
+ <header>
23
+ <nav>
24
+ <div class="logo">
25
+ <img src="{{ url_for('static', filename='images/logo.png') }}" alt="Wajeez Logo">
26
+ </div>
27
+ <ul class="nav-links" id="nav-Links">
28
+ <li><a href="{{ url_for('index') }}">الرئيسية</a></li>
29
+ </ul>
30
+ <div class="toggle" id="toggleButton" onclick="toggleMenu()">☰</div>
31
+ </nav>
32
+ </header>
33
+
34
+ <main class="login-page">
35
+ <div class="login-container">
36
+ <div class="quote-section">
37
+ <p>قال رسول الله صلى الله عليه وسلم: "من مشى مع مظلوم حتى يُثبت له حقه ثبّت الله قدميه على الصراط يوم تزلّ الأقدام"</p>
38
+ </div>
39
+
40
+ <div class="login-form">
41
+ <h2>تسجيل الدخول</h2>
42
+ <form action="{{ url_for('login') }}" method="POST">
43
+ <div class="input-group">
44
+ <label for="username">اسم المستخدم</label>
45
+ <input type="text" id="username" name="username" required>
46
+ </div>
47
+
48
+ <div class="input-group">
49
+ <label for="password">كلمة المرور</label>
50
+ <input type="password" id="password" name="password" required>
51
+ </div>
52
+
53
+ <button type="submit" class="login-btn" onclick="logintoHome(event)" >تسجيل الدخول</button>
54
+
55
+ </form>
56
+
57
+ <p>ليس لديك حساب؟ <a href="{{ url_for('create_account') }}">إنشاء حساب</a></p>
58
+ </div>
59
+ </div>
60
+ </main>
61
+ <script src="{{ url_for('static', filename='js/script.js') }}"></script>
62
+ </body>
63
+ </html>
templates/profile.html ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="ar">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>الملف الشخصي</title>
8
+ <link rel="icon" href="/static/images/logo.png" type="image/png">
9
+ <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
10
+ <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
11
+ <script>
12
+ // Function to toggle the menu on small screens
13
+ function toggleMenu() {
14
+ document.getElementById('nav-Links').classList.toggle('active');
15
+ }
16
+ </script>
17
+ </head>
18
+
19
+ <body dir="rtl">
20
+ <header>
21
+ <nav>
22
+ <div class="logo">
23
+ <img src="{{ url_for('static', filename='images/logo.png') }}" alt="Wajeez Logo">
24
+ </div>
25
+ <ul class="nav-links" id="nav-Links">
26
+ <li><a href="{{ url_for('index') }}">الرئيسية</a></li>
27
+ <li><a href="{{ url_for('result') }}">صنف ولخص !</a></li>
28
+ </ul>
29
+ <div class="right-icons">
30
+ <div class="auth-buttons">
31
+ <a href="/login" class="login">خروج</a>
32
+ </div>
33
+ </div>
34
+ <div class="toggle" onclick="toggleMenu()">☰</div> <!-- Mobile menu toggle -->
35
+ </nav>
36
+ </header>
37
+
38
+ <div class="dashboard">
39
+ <div class="charts-row">
40
+ <div class="chart-container">
41
+ <h2 class="title">توزيع القضايا حسب النوع</h2>
42
+ <canvas id="caseChart"></canvas>
43
+ </div>
44
+ <div class="chart-container">
45
+ <div id="totalDocuments" class="total-documents"></div>
46
+ </div>
47
+ </div>
48
+
49
+ <div class="summary-section">
50
+ <h2 class="title">ملخص القضايا</h2>
51
+ <div id="caseSummaries"></div>
52
+ </div>
53
+ </div>
54
+
55
+ <!-- Link to your external JavaScript file -->
56
+ <script src="{{ url_for('static', filename='js/script.js') }}"></script>
57
+ </body>
58
+ </html>
templates/result.html ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="ar">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>صنف ولخص</title>
8
+ <Script src="Script.js"></Script>
9
+ <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
10
+ <link rel="icon" href="/static/images/logo.png" type="image/png">
11
+ <script>
12
+ function toggleMenu() {
13
+ document.getElementById('nav-Links').classList.toggle('active');}
14
+ </script>
15
+ </head>
16
+
17
+ <body>
18
+ <header>
19
+ <nav>
20
+ <div class="logo">
21
+ <img src="{{ url_for('static', filename='images/logo.png') }}" alt="Wajeez Logo">
22
+ </div>
23
+ <ul class="nav-links" id="nav-Links">
24
+ <li><a href="{{ url_for('index') }}">الرئيسية</a></li>
25
+ <li><a href="{{ url_for('profile') }}">الملف الشخصي</a></li>
26
+ <li><a href="#">صنف ولخص !</a></li>
27
+ </ul>
28
+ <div class="right-icons">
29
+ <div class="auth-buttons">
30
+ <a href="/login" class="login">خروج</a>
31
+ </div>
32
+ </div>
33
+ <div class="toggle" id="toggleButton" onclick="toggleMenu()">☰</div>
34
+ </nav>
35
+ </header>
36
+
37
+ <div>
38
+ <h2 class="headerofresult">صنف ولخص !</h2>
39
+ </div>
40
+
41
+ <main class="container">
42
+ <form method="POST">
43
+ <textarea name="text" id="text-input"
44
+ placeholder="ادخل النص" >{{ input_text if input_text else '' }}</textarea>
45
+ <button type="submit">ارسال</button>
46
+ </form>
47
+
48
+ {% if classification %}
49
+ <div id="classification-result">
50
+ <h3>تصنيف القضية:</h3>
51
+ <p id="classification-predict">{{ classification }}</p>
52
+ </div>
53
+ {% endif %}
54
+
55
+ {% if summary %}
56
+ <div id="summary-result">
57
+ <h3>ملخص القضية :</h3>
58
+ <p id="summary-text">{{ summary }}</p>
59
+ </div>
60
+ {% endif %}
61
+ </main>
62
+
63
+ <script src="{{ url_for('static', filename='js/script.js') }}"></script>
64
+ </body>
tfidf_vectorizer.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7a69fa5f5c65c4043d928a2b1350315e12709b89b647340ba86b2c08cacefb0d
3
+ size 231319