Bagikan melalui


Pemecahan Masalah Sumber Daya Bahasa dan Praktik Terbaik

Topik ini memberikan praktik dan saran terbaik untuk memvalidasi dan memecahkan masalah implementasi IWordBreaker dan IStemmer Anda.

Topik ini diatur sebagai berikut:

Praktik Terbaik

  • Pastikan bahwa model utas untuk sumber daya bahasa diatur ke "keduanya" dalam registri.
  • Jika memungkinkan, letakkan data bahasa dalam sumber daya di DLL Anda daripada dalam file terpisah. Hal ini membuat DLL lebih mudah diinstal dan lebih aman. Selain itu, menempatkan data bahasa dalam sumber daya akan menghasilkan peningkatan performa untuk komponen sumber daya bahasa tersebut.
  • Minimalkan sumber daya sistem yang digunakan komponen sumber daya bahasa. Misalnya, jika setiap instans objek sumber daya bahasa memerlukan akses baca-saja ke leksikon, pertimbangkan untuk berbagi leksikon di semua instans.
  • Pertimbangkan untuk menggunakan pemecah kata netral untuk menangani teks yang tidak dalam bahasa atau lokal untuk implementasi pemecah kata Anda. Ini akan membantu memastikan bahwa teks diproses secara konsisten di semua bahasa.
  • Periksa semua kode pengembalian dan kembalikan dari fungsi seperti IStemmer::GenerateWordForms dan IWordBreaker::BreakText. Jika pengindeksan gagal, penting untuk meneruskan kesalahan sehingga pengguna diberi tahu dokumen mana yang diindeks.

Menguji Konsistensi Stemmer

Kami menyarankan agar Anda memantau performa implementasi IStemmer untuk konsistensi dalam kondisi berikut:

  • Stemmer bekerja secara konsisten di beberapa panggilan ke IStemmer::Init. Stemmer menginisialisasi ulang dengan parameter yang sama seperti pada inisialisasi sebelumnya, tanpa merilis parameter.
  • Mengingat korpus pengujian yang sama, dan pengulangan kueri yang sama, IStemmer::GenerateWordForms menghasilkan output yang identik dan melakukan panggilan identik ke metode objek IWordFormSink .

Pengujian untuk Input Tidak Valid di Stemmer

Kami menyarankan agar Anda memantau bagaimana metode IStemmer menangani semua kesalahan yang terkait dengan parameter yang tidak valid. Selain itu, kami sarankan Anda memastikan bahwa metode stemmer tidak menimbulkan pengecualian yang tidak tertangani. Stemmer harus menangani kesalahan berikut:

  • Panggil ke IStemmer::Init dengan pfLicense diatur ke NULL. Init gagal dan tidak mengakibatkan pelanggaran akses.
  • Panggil ke IStemmer::GetLicenseToUse dengan parameter ppwcsLicense diatur ke NULL. IStemmer::GetLicenseToUse tidak mengakibatkan pelanggaran akses.
  • Panggil ke IStemmer::GenerateWordForms dengan parameter pwcInBuf diatur ke NULL. IStemmer::GenerateWordForms gagal (mengembalikan E_FAIL) dan tidak mengakibatkan pelanggaran akses.
  • Panggil ke IStemmer::GenerateWordForms dengan parameter cwc sama dengan 0. IStemmer::GenerateWordForms berhasil mengembalikan (mengembalikan S_OK) dan tidak mengakibatkan pelanggaran akses.
  • Panggil ke IStemmer::GenerateWordForms dengan parameter pwcInBuf diatur ke NULL dan parameter cwc sama dengan 0. IStemmer::GenerateWordForms gagal (mengembalikan E_FAIL) dan tidak mengakibatkan pelanggaran akses.

Pengujian Word Breaker Consistency

Kami menyarankan agar Anda memastikan bahwa implementasi IWordBreaker berkinerja konsisten dalam kondisi berikut:

  • Word breaker bekerja secara konsisten di beberapa panggilan ke metode IWordBreaker::Init. Pemecah kata menginisialisasi ulang dengan parameter yang sama seperti pada inisialisasi sebelumnya, tanpa merilis parameter.
  • Mengingat korpus pengujian yang sama, dan pengulangan kueri yang sama, metode IWordBreaker::BreakText menghasilkan output yang identik dan melakukan panggilan identik ke metode objek IWordSink dan IPhraseSink .

Pengujian untuk Input Tidak Valid di pemutus Word

Kami menyarankan agar Anda memastikan bahwa metode IWordBreaker menangani semua kesalahan yang terkait dengan parameter yang tidak valid. Selain itu, kami sarankan Anda memastikan bahwa metode pemecah kata tidak menimbulkan pengecualian yang tidak tertangani. Pemecah kata harus melakukan fungsi berikut dan menangani kesalahan berikut:

  • Panggilan ke IWordBreaker::Init harus mengembalikan LANGUAGE_E_DATABASE_NOT_FOUND atau S_OK.
  • Panggilan ke IWordBreaker::Init berhasil menginisialisasi parameter pfLicense ke FALSE dan memanggil IStemmer::GetLicenseToUse dan tidak mengakibatkan pelanggaran akses.
  • Word breaker tidak membaca melewati akhir parameter awcBuffer dalam metode IWordBreaker::BreakText.
  • Panggil ke IWordBreaker::BreakText dengan pwcInBuf diatur ke NULL. IWordBreaker::BreakText gagal (mengembalikan E_FAIL) dan tidak mengakibatkan pelanggaran akses.
  • Panggil ke IWordBreaker::BreakText dengan parameter cwc sama dengan 0. IWordBreaker::BreakText berhasil mengembalikan (mengembalikan S_OK) dan tidak mengakibatkan pelanggaran akses.
  • Panggil ke metode IWordBreaker::BreakText dengan parameter pwcInBuf diatur ke NULL dan parameter cwc sama dengan 0. IWordBreaker::BreakText gagal (mengembalikan E_FAIL) dan tidak mengakibatkan pelanggaran akses.
  • Frasa yang dihasilkan selama pembuatan indeks berisi jumlah kata yang sama.
  • Frasa dihasilkan selama pembuatan indeks melalui panggilan berturut-turut ke metode IWordFormSink::P utWord dan IWordFormSink::P utAltWord . Pemecah kata hanya menggunakan objek IPhraseSink selama waktu kueri.

Memperluas Sumber Daya Bahasa

Memahami Komponen Sumber Daya Bahasa

Menerapkan Word Breaker dan Stemmer

Pertimbangan Linguistik dan Unicode