سؤال

أحصل على ملف مشفرة UTF-8 يحتوي على نص عربي ويجب علي البحث عنه.

مشكلتي هي درعيات، وكيفية البحث تخطيها؟

مثل إذا قمت بتحميل هذا النص في Internet Explorer (تحويل النص في HTML OCCourse)، أي أنه يتخطى تلك الدروع؟

أي مساعدة؟

Edit1.: يتم إجراء البحث ببساطة عن طريق التعليمات البرمجية التالية:

 var m1 : TMemo; //contains utf-8 data)
     m2 : TMemo; // contains results

 ...

      m2.lines.BeginUpdate;
      for s in m1.Lines do
      begin
        if pos(eSearch.Text,s)>0 then
           begin
           m2.Lines.Add(s);
           end;
      end;
      m2.Lines.EndUpdate;

Edit2.: مثال على بيانات Unicode:

قل هو الله أحد إذا كنت تبحث فقط عن الرسائل بدون دروعية قل كلمة قل.

هل كانت مفيدة؟

المحلول

أجد أن الدروع ليست هي المشكلة الوحيدة.

أود أن أفعل بدائل الأحرف، واستبدالها عن طريق سلاسل فارغة، وأود أن تطبيع النص "أ" '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '" وبعد

للبحث، أود أيضا استخدام Stemmer ضوء مثل "Khoja Stemmer" (Java Source هنا)

الطريقة الأكثر تقدما هي أن تفعل ذلك مثل تريك:

  • إزالة علامات الترقيم
  • إزالة التشكيل (حروف العلة ضعيفة أساسا) معظم الكائنات لا تحتوي على حروف العلة الضعيفة.
  • بعض من إدخالات القاموس احتوى على حروف العلة الضعيفة. هذا جعل كل شيء متسق.
  • إزالة غير الحروف
  • استبدال الأول أو أ مع عارية alif.
  • استبدال آ مع ا
  • استبدال التسلسل إيء مع ء
  • استبدال النهائي ى مع لي
  • استبدال النهائي ة مع ه
  • قطاع 6 بادئة: مقالات محددة (فال آال، بال، والي، ال) و (و) من بدايات الكلمات الطبيعية
  • قطاع 10 لاحقات من نهايات الكلمات اتجين، هاء، ه، ه، ح، من

أود أن أفهرص النص هذا النص المعدل (للمذكرات التي قمت بتخزين مؤشر الكلمة في النص الأصلي)، وقم بنفس الشيء لاستعلام البحث.

أود أيضا البحث في Memo1.Text وليس الخطوط واحدا تلو الآخر، قد يكون البحث عن كلمات متعددة قد تكون في نهاية السطر ومغلفة إلى السطر التالي.

نصائح أخرى

على Vista +، ربما يمكنك (ليس لدي أي خبرة مع اللغة العربية) تعني مع الخيار linguistic_ignoredIalitic.

norm_ignorenonspace قد يساعد أيضا. ثم مرة أخرى، ربما لا.

بدلا من ذلك (لكنني مجرد التخمين) قد تكون قادرا على تحليل سلاسلك مع getstringtypeex. وإزالة دروعيا يدويا. ربما يجب عليك الاتصال foldstring. أو multibytetetewidechar. مع العلم map_composite أولا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top