Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """ | |
| اختبار معالج النصوص المتكامل | |
| """ | |
| from whisper_text_processor import WhisperTextProcessor | |
| import logging | |
| # إعداد التسجيل | |
| logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') | |
| logger = logging.getLogger(__name__) | |
| def test_text_correction(): | |
| """اختبار تصحيح النصوص""" | |
| logger.info("🧪 بدء اختبار تصحيح النصوص") | |
| # إنشاء معالج النصوص (بدون تحميل نموذج Whisper للاختبار السريع) | |
| processor = WhisperTextProcessor() | |
| # نصوص مرجعية لبناء القاموس | |
| reference_texts = [ | |
| "يهتز غشاء الطبل تنتقل عظيمات السمع الاهتزازات إلى النافذة البيضية", | |
| "يهتز غشاء النافذة البيضية يهتز اللمف الخارجي في القناة الدهليزية", | |
| "يهتز غشاء رايسنر تنتقل الاهتزازات إلى اللمف الداخلي في القناة القوقعية", | |
| "اهتزاز الغشاء القاعدي بشكل موجي" | |
| ] | |
| # إنشاء القاموس | |
| dictionary = processor.create_dictionary(reference_texts) | |
| logger.info(f"تم إنشاء قاموس يحتوي على {len(dictionary)} كلمة") | |
| # نص للاختبار (يحتوي على أخطاء) | |
| test_text = "يحتاز غشاء الطبل تنتقل عظيمات السماء الاحتزازات إلى النافذة البيضية يحتاز الملف الخارجي" | |
| logger.info(f"النص الأصلي: {test_text}") | |
| # تصحيح النص | |
| corrected_text, corrections = processor.correct_text(test_text, max_distance=3, threshold_freq=1) | |
| logger.info(f"النص المصحح: {corrected_text}") | |
| logger.info(f"عدد التصحيحات: {len(corrections)}") | |
| for correction in corrections: | |
| logger.info(f" تصحيح: '{correction['original']}' → '{correction['corrected']}' " | |
| f"(تكرار: {correction['frequency']}, مسافة: {correction['distance']})") | |
| return corrected_text, corrections | |
| def test_text_comparison(): | |
| """اختبار مقارنة النصوص""" | |
| logger.info("🧪 بدء اختبار مقارنة النصوص") | |
| processor = WhisperTextProcessor() | |
| # نصوص للمقارنة | |
| reference_text = "يهتز غشاء الطبل تنتقل عظيمات السمع الاهتزازات إلى النافذة البيضية" | |
| transcribed_text = "يحتاز غشاء الطبل تنتقل عظيمات السماء الاحتزازات إلى النافذة البيضية" | |
| # مقارنة النصوص | |
| comparison_result = processor.compare_texts(reference_text, transcribed_text) | |
| logger.info(f"معدل خطأ الكلمات (WER): {comparison_result['wer_percentage']}") | |
| logger.info(f"معدل خطأ الأحرف (CER): {comparison_result['cer_percentage']}") | |
| logger.info(f"عدد كلمات النص المرجعي: {comparison_result['reference_words']}") | |
| logger.info(f"عدد كلمات النص المستخرج: {comparison_result['transcribed_words']}") | |
| logger.info(f"فرق عدد الكلمات: {comparison_result['word_differences']}") | |
| return comparison_result | |
| def test_html_report(): | |
| """اختبار إنشاء تقرير HTML""" | |
| logger.info("🧪 بدء اختبار إنشاء تقرير HTML") | |
| processor = WhisperTextProcessor() | |
| # بيانات وهمية للاختبار | |
| test_results = { | |
| "audio_path": "/path/to/test_audio.wav", | |
| "reference_text": "يهتز غشاء الطبل تنتقل عظيمات السمع الاهتزازات إلى النافذة البيضية", | |
| "original_transcription": "يحتاز غشاء الطبل تنتقل عظيمات السماء الاحتزازات إلى النافذة البيضية", | |
| "corrected_transcription": "يهتز غشاء الطبل تنتقل عظيمات السمع الاهتزازات إلى النافذة البيضية", | |
| "corrections": [ | |
| {"original": "يحتاز", "corrected": "يهتز", "frequency": 4, "distance": 2}, | |
| {"original": "السماء", "corrected": "السمع", "frequency": 1, "distance": 2}, | |
| {"original": "الاحتزازات", "corrected": "الاهتزازات", "frequency": 2, "distance": 1} | |
| ], | |
| "original_metrics": { | |
| "wer": 0.15, | |
| "cer": 0.08, | |
| "wer_percentage": "15.00%", | |
| "cer_percentage": "8.00%", | |
| "html_diff": "<span>مقارنة النص الأصلي</span>", | |
| "reference_words": 10, | |
| "transcribed_words": 10, | |
| "word_differences": 0 | |
| }, | |
| "corrected_metrics": { | |
| "wer": 0.0, | |
| "cer": 0.0, | |
| "wer_percentage": "0.00%", | |
| "cer_percentage": "0.00%", | |
| "html_diff": "<span>مقارنة النص المصحح</span>", | |
| "reference_words": 10, | |
| "transcribed_words": 10, | |
| "word_differences": 0 | |
| }, | |
| "improvement": { | |
| "wer_improvement": 0.15, | |
| "cer_improvement": 0.08 | |
| }, | |
| "timestamps": [] | |
| } | |
| # إنشاء تقرير HTML | |
| html_report = processor.generate_html_report(test_results) | |
| # حفظ التقرير | |
| with open("/home/ubuntu/test_report.html", "w", encoding="utf-8") as f: | |
| f.write(html_report) | |
| logger.info("تم إنشاء تقرير HTML وحفظه في test_report.html") | |
| return html_report | |
| def main(): | |
| """الدالة الرئيسية للاختبار""" | |
| logger.info("🚀 بدء اختبارات معالج النصوص المتكامل") | |
| try: | |
| # اختبار تصحيح النصوص | |
| corrected_text, corrections = test_text_correction() | |
| # اختبار مقارنة النصوص | |
| comparison_result = test_text_comparison() | |
| # اختبار إنشاء تقرير HTML | |
| html_report = test_html_report() | |
| logger.info("✅ تم إنجاز جميع الاختبارات بنجاح!") | |
| # عرض ملخص النتائج | |
| print("\n" + "="*60) | |
| print("📊 ملخص نتائج الاختبارات") | |
| print("="*60) | |
| print(f"عدد التصحيحات المطبقة: {len(corrections)}") | |
| print(f"معدل خطأ الكلمات: {comparison_result['wer_percentage']}") | |
| print(f"معدل خطأ الأحرف: {comparison_result['cer_percentage']}") | |
| print(f"تم إنشاء تقرير HTML بحجم: {len(html_report)} حرف") | |
| print("="*60) | |
| except Exception as e: | |
| logger.error(f"❌ فشل في الاختبارات: {str(e)}") | |
| raise | |
| if __name__ == "__main__": | |
| main() | |