Perbandingan Alat Analisis Lucene

104

Bisakah seseorang menjelaskan perbedaan antara penganalisis yang berbeda di dalam Lucene? Saya mendapatkan pengecualian maxClauseCount dan saya memahami bahwa saya dapat menghindari ini dengan menggunakan KeywordAnalyzer tetapi saya tidak ingin mengubah dari StandardAnalyzer tanpa memahami masalah seputar penganalisis. Terima kasih banyak.

Pekerja harian
sumber

Jawaban:

209

Secara umum, penganalisis apa pun di Lucene adalah tokenizer + stemmer + filter stop-words.

Tokenizer membagi teks Anda menjadi beberapa bagian, dan karena penganalisis yang berbeda dapat menggunakan tokenizer yang berbeda, Anda bisa mendapatkan aliran token keluaran yang berbeda , yaitu urutan potongan teks. Misalnya, KeywordAnalyzerAnda menyebutkan tidak membagi teks sama sekali dan mengambil semua bidang sebagai satu token. Pada saat yang sama, StandardAnalyzer(dan sebagian besar penganalisis lainnya) menggunakan spasi dan tanda baca sebagai titik pemisah. Misalnya, untuk frase "Saya sangat senang" itu akan menghasilkan daftar ["i", "am", "very", "happy"] (atau semacamnya). Untuk informasi lebih lanjut tentang penganalisis / pembuat token tertentu, lihat Dokumen Java -nya .

Stemmer digunakan untuk mendapatkan dasar kata yang dimaksud. Itu sangat tergantung pada bahasa yang digunakan. Misalnya, untuk frasa sebelumnya dalam bahasa Inggris akan ada sesuatu seperti ["i", "be", "veri", "happi"] diproduksi, dan untuk bahasa Prancis "Je suis très heureux" semacam penganalisis bahasa Prancis (seperti SnowballAnalyzer, diinisialisasi dengan "Prancis") akan menghasilkan ["je", "être", "tre", "heur"]. Tentu saja, jika Anda akan menggunakan penganalisis dari satu bahasa untuk membendung teks dalam bahasa lain, aturan dari bahasa lain akan digunakan dan stemmer dapat menghasilkan hasil yang salah. Tidak semua sistem gagal, tetapi hasil pencarian mungkin kurang akurat.

KeywordAnalyzertidak menggunakan stemmer, ia melewati semua bidang tanpa modifikasi. Jadi, jika Anda akan mencari beberapa kata dalam teks bahasa Inggris, bukan ide yang baik untuk menggunakan penganalisis ini.

Kata - kata berhenti adalah kata - kata yang paling sering dan hampir tidak berguna. Sekali lagi, ini sangat bergantung pada bahasa. Untuk bahasa Inggris, kata-kata ini adalah "a", "the", "I", "be", "have", dll. Filter kata-berhenti menghapusnya dari aliran token untuk mengurangi noise di hasil penelusuran, jadi akhirnya frasa kami "I saya sangat senang "dengan StandardAnalyzerakan diubah menjadi daftar [" veri "," happi "].

Dan KeywordAnalyzersekali lagi tidak melakukan apa-apa. Jadi, KeywordAnalyzerdigunakan untuk hal-hal seperti ID atau nomor telepon, tetapi tidak untuk teks biasa.

Dan untuk maxClauseCountpengecualian Anda , saya yakin Anda mendapatkannya saat mencari. Dalam kasus ini, kemungkinan besar karena kueri penelusuran yang terlalu kompleks. Cobalah untuk membaginya menjadi beberapa kueri atau gunakan fungsi yang lebih rendah.

ffriend
sumber
1
@ffriend: Saya tidak berpikir Stemmer (menggunakan bola salju atau algoritma lain) dapat mengonversi am -> menjadi karena ini adalah pekerjaan Lemmatizer. Anda dapat memeriksanya di sini snowball.tartarus.org/demo.php
Tho
Jadi, di mana Tika cocok dengan ini? Bukankah secara teknis ini adalah penganalisis?
segera
1
@anon: Tika adalah proyek terpisah dengan beberapa fitur utama. Dengan asumsi yang Anda maksud adalah pengurai Tika, saya akan mengatakan bahwa Tika mengambil aliran byte dan mengeluarkan teks + metadata, sementara penganalisis Lucene mengambil aliran token yang diproses teks dan keluaran. Misalnya, Anda dapat mengurai file PDF atau XML terlebih dahulu dengan Tika, menghasilkan dokumen dengan bidang seperti "judul", "pengarang" dan "teks", lalu menganalisis beberapa atau semua bidang ini dengan penganalisis Lucene.
berteman dengan
hanya bertanya-tanya, "sangat" dan "bahagia" bukanlah kata-kata yang ditolak, mengapa mereka berubah menjadi "veri" dan "happi"? apakah itu untuk mencocokkan i <-> y perbedaan karena kedengarannya mirip?
oguzalb
0

Dalam perspektif saya, saya telah menggunakan StandAnalyzerdan SmartCNAnalyzer. Karena saya harus mencari teks dalam bahasa Cina. Jelas, SmartCnAnalyzerlebih baik dalam menangani bahasa Mandarin. Untuk tujuan yang berbeda, Anda harus memilih penganalisis yang paling tepat.

neal
sumber