Pemecahan masalah sumber daya bahasa dan praktik terbaik

Topik ini memberikan praktik dan saran terbaik untuk memvalidasi dan memecahkan masalahIWordBreakerdan implementasiIStemmerAnda.

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 mengakibatkan 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 di bawah kondisi-kondisi berikut ini.

  • Stemmer berkinerja 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 objekIWordFormSink.

Pengujian untuk input yang tidak valid di stemmer

Kami menyarankan agar Anda memantau bagaimana metodeIStemmermenangani 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 IStemmer::Init dengan pfLicense diatur ke NULL. Init gagal dan tidak mengakibatkan pelanggaran akses.
  • Panggilan 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 mengembalikan dengan sukses (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.

Menguji konsistensi pemecah Kata

Kami menyarankan agar Anda memastikan bahwa implementasiIWordBreakerberkinerja secara konsisten dalam kondisi berikut:

  • Pemecah kata berfungsi secara konsisten untuk beberapa kali panggilan ke metode IWordBreaker::Init. Pemecah kata menginisialisasi ulang dengan parameter yang sama seperti pada inisialisasi sebelumnya, tanpa merilis parameter.
  • Mengingat corpus pengujian yang sama, dan pengulangan kueri yang sama, metodeIWordBreaker::BreakText menghasilkan output yang identik dan melakukan panggilan identik ke metode IWordSink dan objek IPhraseSink.

Pengujian untuk input yang tidak valid di pemecah kata

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 menjadi FALSE dan memanggil IStemmer::GetLicenseToUse serta tidak mengakibatkan pelanggaran akses.
  • Pemecah kata tidak membaca setelah 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 dikembalikan (mengembalikan S_OK) dan tidak mengakibatkan pelanggaran akses.
  • Panggil ke metodeIWordBreaker::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 IWordFormSink::PutWord dan metode IWordFormSink::PutAltWord. Pemecah kata hanya menggunakan objek IPhraseSink selama proses pencarian.

Memperluas sumber daya bahasa

Memahami Komponen Sumber Daya Bahasa

Menerapkan Sebuah Word Breaker dan Stemmer

Pertimbangan Linguistik dan Unicode