File size: 10,601 Bytes
dfdd9cb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
# 📡 وثائق API - Whisper Text Processor

دليل شامل لاستخدام API معالج النصوص المتكامل

## 🌐 معلومات عامة

### Base URL
```
https://YOUR_USERNAME-whisper-text-processor.hf.space
```

### Content-Type
```
application/json
```

### Authentication
لا يتطلب API مصادقة حالياً (قد يتغير في المستقبل)

## 📋 نقاط النهاية (Endpoints)

### 1. فحص حالة الخادم

#### `GET /health`

فحص حالة الخادم والتأكد من أن جميع المكونات تعمل بشكل صحيح.

**المعاملات:** لا توجد

**الاستجابة:**
```json
{
  "status": "healthy",
  "message": "خادم معالج النصوص يعمل بشكل طبيعي",
  "processor_loaded": true
}
```

**مثال:**
```bash
curl -X GET "https://your-space.hf.space/health"
```

---

### 2. تصحيح النصوص

#### `POST /correct-text`

تصحيح النص المدخل باستخدام قاموس مرجعي مبني من النصوص المرجعية.

**المعاملات:**
```json
{
  "text": "string",              // النص المراد تصحيحه (مطلوب)
  "reference_texts": ["string"], // قائمة النصوص المرجعية (مطلوب)
  "max_distance": 3,           // أقصى مسافة للتصحيح (اختياري)
  "threshold_freq": 1          // الحد الأدنى لتكرار الكلمة (اختياري)
}
```

**الاستجابة:**
```json
{
  "success": true,
  "message": "تم تصحيح النص بنجاح",
  "data": {
    "original_text": "يحتاز غشاء الطبل",
    "corrected_text": "يهتز غشاء الطبل",
    "corrections": [
      {
        "original": "يحتاز",
        "corrected": "يهتز",
        "frequency": 4,
        "distance": 2
      }
    ],
    "corrections_count": 1
  }
}
```

**مثال:**
```bash
curl -X POST "https://your-space.hf.space/correct-text" \
     -H "Content-Type: application/json" \
     -d '{
       "text": "يحتاز غشاء الطبل تنتقل عظيمات السماء",
       "reference_texts": [
         "يهتز غشاء الطبل تنتقل عظيمات السمع الاهتزازات",
         "يهتز غشاء النافذة البيضية يهتز اللمف الخارجي"
       ],
       "max_distance": 3,
       "threshold_freq": 1
     }'
```

---

### 3. مقارنة النصوص

#### `POST /compare-texts`

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

**المعاملات:**
```json
{
  "reference_text": "string",    // النص المرجعي (مطلوب)
  "transcribed_text": "string"   // النص المستخرج (مطلوب)
}
```

**الاستجابة:**
```json
{
  "success": true,
  "message": "تم مقارنة النصوص بنجاح",
  "data": {
    "wer": 0.3,
    "cer": 0.076,
    "wer_percentage": "30.00%",
    "cer_percentage": "7.69%",
    "html_diff": "<span>HTML مع الاختلافات المظللة</span>",
    "reference_words": 10,
    "transcribed_words": 10,
    "word_differences": 0
  }
}
```

**مثال:**
```bash
curl -X POST "https://your-space.hf.space/compare-texts" \
     -H "Content-Type: application/json" \
     -d '{
       "reference_text": "يهتز غشاء الطبل تنتقل عظيمات السمع",
       "transcribed_text": "يحتاز غشاء الطبل تنتقل عظيمات السماء"
     }'
```

---

### 4. معالجة الملفات الصوتية

#### `POST /process-audio`

معالجة شاملة للملف الصوتي تتضمن تحويل الصوت إلى نص، التصحيح، والمقارنة.

**المعاملات (multipart/form-data):**
- `audio_file`: ملف صوتي (مطلوب)
- `reference_text`: النص المرجعي (مطلوب)
- `reference_texts`: نصوص مرجعية إضافية كـ JSON string (اختياري)
- `max_distance`: أقصى مسافة للتصحيح (اختياري، افتراضي: 3)
- `threshold_freq`: الحد الأدنى لتكرار الكلمة (اختياري، افتراضي: 1)

**الاستجابة:**
```json
{
  "success": true,
  "message": "تم معالجة الملف الصوتي بنجاح",
  "data": {
    "audio_path": "/path/to/audio.wav",
    "reference_text": "النص المرجعي",
    "original_transcription": "النص المستخرج الأصلي",
    "corrected_transcription": "النص المصحح",
    "corrections": [...],
    "original_metrics": {
      "wer": 0.15,
      "cer": 0.08,
      "wer_percentage": "15.00%",
      "cer_percentage": "8.00%"
    },
    "corrected_metrics": {
      "wer": 0.0,
      "cer": 0.0,
      "wer_percentage": "0.00%",
      "cer_percentage": "0.00%"
    },
    "improvement": {
      "wer_improvement": 0.15,
      "cer_improvement": 0.08
    },
    "timestamps": [...]
  }
}
```

**مثال:**
```bash
curl -X POST "https://your-space.hf.space/process-audio" \
     -F "audio_file=@audio.wav" \
     -F "reference_text=يهتز غشاء الطبل تنتقل عظيمات السمع" \
     -F "reference_texts=[\"نص إضافي 1\", \"نص إضافي 2\"]" \
     -F "max_distance=3" \
     -F "threshold_freq=1"
```

---

### 5. إنشاء تقرير HTML

#### `POST /generate-report`

إنشاء تقرير HTML شامل يحتوي على جميع نتائج المعالجة مع تصميم تفاعلي.

**المعاملات (multipart/form-data):**
- `audio_file`: ملف صوتي (مطلوب)
- `reference_text`: النص المرجعي (مطلوب)
- `reference_texts`: نصوص مرجعية إضافية كـ JSON string (اختياري)

**الاستجابة:**
```html
<!DOCTYPE html>
<html dir="rtl" lang="ar">
<head>
    <meta charset="UTF-8">
    <title>تقرير معالجة النصوص</title>
    <!-- CSS styles -->
</head>
<body>
    <!-- تقرير HTML كامل مع النتائج والإحصائيات -->
</body>
</html>
```

**مثال:**
```bash
curl -X POST "https://your-space.hf.space/generate-report" \
     -F "audio_file=@audio.wav" \
     -F "reference_text=يهتز غشاء الطبل" \
     -o report.html
```

---

## 🔧 أكواد الاستجابة

### نجح الطلب
- `200 OK`: تم تنفيذ الطلب بنجاح

### أخطاء العميل
- `400 Bad Request`: معاملات غير صحيحة أو مفقودة
- `422 Unprocessable Entity`: بيانات غير صالحة

### أخطاء الخادم
- `500 Internal Server Error`: خطأ في الخادم أو المعالج

## 📝 أمثلة متقدمة

### 1. معالجة متعددة اللغات
```python
import requests

# تصحيح نص عربي
response = requests.post(
    "https://your-space.hf.space/correct-text",
    json={
        "text": "السلام عليكم ورحمة الله وبركاته",
        "reference_texts": ["السلام عليكم ورحمة الله وبركاته"]
    }
)
```

### 2. معالجة دفعية
```python
import asyncio
import aiohttp

async def process_multiple_texts(texts, reference_texts):
    async with aiohttp.ClientSession() as session:
        tasks = []
        for text in texts:
            task = session.post(
                "https://your-space.hf.space/correct-text",
                json={
                    "text": text,
                    "reference_texts": reference_texts
                }
            )
            tasks.append(task)
        
        responses = await asyncio.gather(*tasks)
        return [await r.json() for r in responses]
```

### 3. تحليل الأداء
```python
import time
import requests

def benchmark_api():
    start_time = time.time()
    
    response = requests.post(
        "https://your-space.hf.space/compare-texts",
        json={
            "reference_text": "نص طويل للاختبار...",
            "transcribed_text": "نص طويل مع أخطاء..."
        }
    )
    
    end_time = time.time()
    processing_time = end_time - start_time
    
    print(f"وقت المعالجة: {processing_time:.2f} ثانية")
    return response.json()
```

## 🛡️ أفضل الممارسات

### 1. إدارة الأخطاء
```python
import requests
from requests.exceptions import RequestException

def safe_api_call(url, data):
    try:
        response = requests.post(url, json=data, timeout=30)
        response.raise_for_status()
        return response.json()
    except RequestException as e:
        print(f"خطأ في API: {e}")
        return None
```

### 2. تحسين الأداء
```python
# استخدام session للطلبات المتعددة
session = requests.Session()
session.headers.update({"Content-Type": "application/json"})

# إعادة استخدام الاتصال
for text in texts:
    response = session.post(url, json={"text": text, ...})
```

### 3. التعامل مع الملفات الكبيرة
```python
# رفع ملفات صوتية كبيرة
with open("large_audio.wav", "rb") as f:
    files = {"audio_file": f}
    data = {"reference_text": "النص المرجعي"}
    
    response = requests.post(
        "https://your-space.hf.space/process-audio",
        files=files,
        data=data,
        timeout=300  # مهلة أطول للملفات الكبيرة
    )
```

## 🔍 استكشاف الأخطاء

### أخطاء شائعة وحلولها

#### 1. خطأ 400 - Bad Request
```json
{
  "detail": "يجب أن يكون الملف من نوع صوتي"
}
```
**الحل:** تأكد من أن الملف المرفوع هو ملف صوتي صالح (.wav, .mp3, .m4a, إلخ)

#### 2. خطأ 500 - Internal Server Error
```json
{
  "detail": "معالج النصوص غير متاح"
}
```
**الحل:** الخادم قيد التحميل أو إعادة التشغيل، حاول مرة أخرى بعد دقائق

#### 3. خطأ Timeout
**الحل:** زيادة مهلة الطلب أو تقليل حجم الملف الصوتي

## 📊 حدود الاستخدام

### الحدود الحالية
- **حجم الملف الصوتي**: حتى 25 MB
- **طول النص**: حتى 10,000 حرف
- **عدد النصوص المرجعية**: حتى 50 نص
- **معدل الطلبات**: 100 طلب/دقيقة

### نصائح للتحسين
- استخدم ملفات صوتية مضغوطة
- قسم النصوص الطويلة إلى أجزاء
- استخدم التخزين المؤقت للنتائج المتكررة

---

**ملاحظة:** هذه الوثائق قابلة للتحديث. راجع الإصدار الأحدث على GitHub.