joermd commited on
Commit
ff95748
·
verified ·
1 Parent(s): 778176a

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +87 -32
index.html CHANGED
@@ -3,12 +3,12 @@
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>تحليل بسيط للنصوص والترجمات</title>
7
  <!-- استيراد Tailwind CSS وFontAwesome -->
8
  <link href="https://cdnjs.cloudflare.com/ajax/libs/tailwindcss/2.2.19/tailwind.min.css" rel="stylesheet">
9
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
10
  <style>
11
- /* تأثيرات خلفية متدرجة وحركة بسيطة */
12
  @keyframes gradient {
13
  0% { background-position: 0% 50%; }
14
  50% { background-position: 100% 50%; }
@@ -18,6 +18,60 @@
18
  background-size: 200% 200%;
19
  animation: gradient 15s ease infinite;
20
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  .spinner {
22
  border: 4px solid #f3f3f3;
23
  border-top: 4px solid #4f46e5;
@@ -30,26 +84,19 @@
30
  0% { transform: rotate(0deg); }
31
  100% { transform: rotate(360deg); }
32
  }
 
33
  /* منطقة سلسلة التفكير */
34
  #chainOfThought {
35
  display: none;
36
- background: #f9fafb;
37
- padding: 0.5rem;
 
38
  border: 1px solid #e5e7eb;
39
  border-radius: 0.5rem;
40
- margin-top: 1rem;
41
  font-size: 0.9rem;
42
  direction: ltr;
43
  text-align: left;
44
  }
45
- /* تظليل الاختلافات */
46
- .highlight {
47
- color: white;
48
- background-color: #ef4444;
49
- padding: 0 3px;
50
- border-radius: 3px;
51
- font-weight: bold;
52
- }
53
  </style>
54
  </head>
55
  <body class="bg-gradient-to-br from-gray-100 via-blue-100 to-indigo-100 min-h-screen">
@@ -57,7 +104,7 @@
57
  <!-- رأس الصفحة -->
58
  <header class="text-center mb-12">
59
  <h1 class="text-5xl font-bold mb-4 animate-gradient">تحليل النصوص والترجمات</h1>
60
- <p class="text-2xl">ترجم النص الهدف إلى العربية مع الاهتمام بالتعليم، ثم قارن مع النص المصدر واخرج الاختلافات (النصوص الناقصة) فقط.</p>
61
  </header>
62
 
63
  <!-- منطقة الإدخال -->
@@ -83,7 +130,7 @@
83
  <!-- منطقة سلسلة التفكير -->
84
  <div id="chainOfThought" class="mt-6">
85
  <strong>سلسلة التفكير:</strong>
86
- <pre id="chainText"></pre>
87
  </div>
88
 
89
  <!-- منطقة النتائج -->
@@ -97,8 +144,8 @@
97
  (function(){
98
  "use strict";
99
 
100
- // برومت بسيط: يطلب من DeepSeek ترجمة النص الهدف إلى العربية مع التعليم، ثم مقارنة النصوص واستخراج الاختلافات (النصوص الناقصة) فقط مع وضعها بين أقواس.
101
- const PROMPT = `ترجم النص الهدف إلى العربية مع الاهتمام بالتعليم، ثم قارن بين النص المصدر والنص الهدف المُترجم واخرج الاختلافات فقط (النصوص الناقصة) مع وضعها بين أقواس ().
102
  النص المصدر:
103
  {source}
104
  النص الهدف:
@@ -112,20 +159,20 @@
112
  document.getElementById('loadingIndicator').classList.add('hidden');
113
  };
114
 
115
- // دالة إرسال الطلب للنموذج
116
  async function analyzeText(source, target) {
117
  const payload = {
118
  model: "deepseek-chat",
119
  messages: [
120
- { role: "system", content: "أنت نموذج DeepSeek. قم بترجمة النص الهدف إلى العربية مع الاهتمام بالتعليم ثم قارن مع النص المصدر واخرج الاختلافات (النصوص الناقصة) فقط مع وضعها بين أقواس ()." },
121
  { role: "user", content: PROMPT.replace("{source}", source).replace("{target}", target) }
122
  ],
123
  temperature: 0.3,
124
  max_tokens: 1024,
125
- stream: false
126
  };
127
 
128
- console.log("Payload:", payload); // للتأكد من إرسال النصوص
129
  try {
130
  const response = await fetch("https://api.deepseek.com/chat/completions", {
131
  method: "POST",
@@ -138,18 +185,26 @@
138
  if (!response.ok) {
139
  throw new Error("حدث خطأ في الاتصال: " + response.statusText);
140
  }
141
- const data = await response.json();
142
- return data.choices[0].message.content.trim();
 
 
 
 
 
 
 
 
 
 
143
  } catch (error) {
144
  throw error;
145
  }
146
  }
147
 
148
- // دالة معالجة النتيجة وتظليل الاختلافات
149
  function processResult(source, analysisOutput) {
150
- // هنا نقوم بتطبيق تظليل بسيط: نضع الاختلافات بين أقواس.
151
- // افترضنا أن الاختلافات تظهر ضمن علامات معينة مثل __النص__ للنص المفقود.
152
- // يمكن تعديل هذا الجزء حسب تنسيق الناتج.
153
  let processed = analysisOutput.replace(/__(.*?)__/g, '<span class="highlight">($1)</span>');
154
  return processed;
155
  }
@@ -162,16 +217,15 @@
162
  alert("يرجى إدخال كلا النصين.");
163
  return;
164
  }
165
- // إظهار مؤشر التحميل
166
- showLoading();
167
  document.getElementById('resultSection').classList.add('hidden');
168
  document.getElementById('chainOfThought').style.display = "none";
 
169
  try {
170
  const analysisOutput = await analyzeText(sourceText, targetText);
171
- // عرض سلسلة التفكير قبل التعليم
172
- document.getElementById('chainText').innerText = analysisOutput;
173
  document.getElementById('chainOfThought').style.display = "block";
174
- // معالجة الناتج (تظليل الاختلافات)
175
  const diffResult = processResult(sourceText, analysisOutput);
176
  document.getElementById('diffResult').innerHTML = diffResult;
177
  document.getElementById('resultSection').classList.remove('hidden');
@@ -181,6 +235,7 @@
181
  hideLoading();
182
  }
183
  });
 
184
  })();
185
  </script>
186
  </body>
 
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>تحليل النصوص والترجمات – وضع Streaming</title>
7
  <!-- استيراد Tailwind CSS وFontAwesome -->
8
  <link href="https://cdnjs.cloudflare.com/ajax/libs/tailwindcss/2.2.19/tailwind.min.css" rel="stylesheet">
9
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
10
  <style>
11
+ /* تأثيرات الخلفية والحركة */
12
  @keyframes gradient {
13
  0% { background-position: 0% 50%; }
14
  50% { background-position: 100% 50%; }
 
18
  background-size: 200% 200%;
19
  animation: gradient 15s ease infinite;
20
  }
21
+ .transition-all { transition: all 0.3s ease-in-out; }
22
+ .animate-scale { transition: transform 0.2s ease-in-out; }
23
+ .animate-scale:hover { transform: scale(1.02); }
24
+ .pulse-animation { animation: pulse 2s infinite; }
25
+ @keyframes pulse {
26
+ 0% { box-shadow: 0 0 0 0 rgba(0,0,0,0.2); }
27
+ 70% { box-shadow: 0 0 0 10px rgba(0,0,0,0); }
28
+ 100% { box-shadow: 0 0 0 0 rgba(0,0,0,0); }
29
+ }
30
+
31
+ /* تنسيق النصوص */
32
+ .text-comparison { line-height: 1.8; white-space: pre-wrap; }
33
+ .highlight {
34
+ color: white;
35
+ background-color: #ef4444;
36
+ padding: 0 3px;
37
+ border-radius: 3px;
38
+ font-weight: bold;
39
+ }
40
+
41
+ /* تقسيم الأسطر */
42
+ .line-item {
43
+ margin-bottom: 1rem;
44
+ padding: 0.5rem;
45
+ border-bottom: 1px dashed #ccc;
46
+ }
47
+ .line-number {
48
+ font-weight: bold;
49
+ color: #4B5563;
50
+ margin-left: 0.5rem;
51
+ }
52
+ .line-text { display: inline-block; }
53
+
54
+ /* تصميم البطاقات */
55
+ .card {
56
+ background-color: #fff;
57
+ border-radius: 1rem;
58
+ box-shadow: 0 10px 25px -5px rgba(0,0,0,0.1);
59
+ padding: 2rem;
60
+ border: 1px solid #f3f4f6;
61
+ }
62
+ .card-hover:hover {
63
+ box-shadow: 0 10px 25px -5px rgba(0,0,0,0.2);
64
+ transform: translateY(-3px);
65
+ }
66
+ .icon { margin-left: 0.5rem; }
67
+ .upload-label {
68
+ display: flex;
69
+ flex-direction: row-reverse;
70
+ align-items: center;
71
+ justify-content: center;
72
+ }
73
+
74
+ /* مؤشر التحميل */
75
  .spinner {
76
  border: 4px solid #f3f3f3;
77
  border-top: 4px solid #4f46e5;
 
84
  0% { transform: rotate(0deg); }
85
  100% { transform: rotate(360deg); }
86
  }
87
+
88
  /* منطقة سلسلة التفكير */
89
  #chainOfThought {
90
  display: none;
91
+ margin-top: 1rem;
92
+ background-color: #f9fafb;
93
+ padding: 1rem;
94
  border: 1px solid #e5e7eb;
95
  border-radius: 0.5rem;
 
96
  font-size: 0.9rem;
97
  direction: ltr;
98
  text-align: left;
99
  }
 
 
 
 
 
 
 
 
100
  </style>
101
  </head>
102
  <body class="bg-gradient-to-br from-gray-100 via-blue-100 to-indigo-100 min-h-screen">
 
104
  <!-- رأس الصفحة -->
105
  <header class="text-center mb-12">
106
  <h1 class="text-5xl font-bold mb-4 animate-gradient">تحليل النصوص والترجمات</h1>
107
+ <p class="text-2xl">ترجم النص الهدف إلى العربية مع التعليم، ثم قارن مع النص المصدر واخرج الاختلافات (النصوص الناقصة) فقط.</p>
108
  </header>
109
 
110
  <!-- منطقة الإدخال -->
 
130
  <!-- منطقة سلسلة التفكير -->
131
  <div id="chainOfThought" class="mt-6">
132
  <strong>سلسلة التفكير:</strong>
133
+ <pre id="chainText" class="whitespace-pre-wrap text-gray-700"></pre>
134
  </div>
135
 
136
  <!-- منطقة النتائج -->
 
144
  (function(){
145
  "use strict";
146
 
147
+ // برومت بسيط: ترجمة النص الهدف إلى العربية مع التعليم، ثم قارن بين النص المصدر والنص الهدف المُترجم واخرج الاختلافات (النصوص الناقصة) فقط مع وضعها بين أقواس.
148
+ const PROMPT = `ترجم النص الهدف إلى العربية مع التعليم، ثم قارن بين النص المصدر والنص الهدف المُترجم واخرج الاختلافات فقط (النصوص الناقصة) مع وضعها بين أقواس ().
149
  النص المصدر:
150
  {source}
151
  النص الهدف:
 
159
  document.getElementById('loadingIndicator').classList.add('hidden');
160
  };
161
 
162
+ // دالة إرسال الطلب إلى DeepSeek مع تفعيل خاصية streaming
163
  async function analyzeText(source, target) {
164
  const payload = {
165
  model: "deepseek-chat",
166
  messages: [
167
+ { role: "system", content: "أنت نموذج DeepSeek؛ ترجم النص الهدف إلى العربية مع التعليم ثم قارن بينه وبين النص المصدر واخرج الاختلافات (النصوص الناقصة) فقط مع وضعها بين أقواس ()." },
168
  { role: "user", content: PROMPT.replace("{source}", source).replace("{target}", target) }
169
  ],
170
  temperature: 0.3,
171
  max_tokens: 1024,
172
+ stream: true
173
  };
174
 
175
+ console.log("Payload:", payload);
176
  try {
177
  const response = await fetch("https://api.deepseek.com/chat/completions", {
178
  method: "POST",
 
185
  if (!response.ok) {
186
  throw new Error("حدث خطأ في الاتصال: " + response.statusText);
187
  }
188
+ // قراءة الاستجابة على شكل تدفق
189
+ const reader = response.body.getReader();
190
+ const decoder = new TextDecoder();
191
+ let result = "";
192
+ while (true) {
193
+ const { done, value } = await reader.read();
194
+ if (done) break;
195
+ result += decoder.decode(value, { stream: true });
196
+ // تحديث سلسلة التفكير بشكل مستمر
197
+ document.getElementById('chainText').innerText = result;
198
+ }
199
+ return result;
200
  } catch (error) {
201
  throw error;
202
  }
203
  }
204
 
205
+ // دالة بسيطة لمعالجة النتيجة: هنا نضع الاختلافات بين أقواس
206
  function processResult(source, analysisOutput) {
207
+ // على سبيل المثال: افترض أن الاختلافات تظهر بين علامتي __ للنص المفقود
 
 
208
  let processed = analysisOutput.replace(/__(.*?)__/g, '<span class="highlight">($1)</span>');
209
  return processed;
210
  }
 
217
  alert("يرجى إدخال كلا النصين.");
218
  return;
219
  }
220
+ // إخفاء النتائج الحالية وإظهار مؤشر التحميل
 
221
  document.getElementById('resultSection').classList.add('hidden');
222
  document.getElementById('chainOfThought').style.display = "none";
223
+ showLoading();
224
  try {
225
  const analysisOutput = await analyzeText(sourceText, targetText);
226
+ // عرض سلسلة التفكير بعد استقبال البيانات
 
227
  document.getElementById('chainOfThought').style.display = "block";
228
+ // معالجة الناتج وتطبيق التظليل
229
  const diffResult = processResult(sourceText, analysisOutput);
230
  document.getElementById('diffResult').innerHTML = diffResult;
231
  document.getElementById('resultSection').classList.remove('hidden');
 
235
  hideLoading();
236
  }
237
  });
238
+
239
  })();
240
  </script>
241
  </body>