Lucene Analizörlerinin Karşılaştırması


104

Lucene'deki farklı analizörler arasındaki farkı lütfen birisi açıklayabilir mi? Bir maxClauseCount istisnası alıyorum ve bunu bir KeywordAnalyzer kullanarak önleyebileceğimi anlıyorum, ancak analizörleri çevreleyen sorunları anlamadan StandardAnalyzer'dan değiştirmek istemiyorum. Çok teşekkürler.

Yanıtlar:


209

Genel olarak, Lucene'deki herhangi bir analizör, tokenizer + stemmer + stop-word filtresidir.

Tokenizer , metninizi parçalara ayırır ve farklı çözümleyiciler farklı belirteçler kullanabileceğinden, farklı çıktı belirteç akışları , yani metin öbekleri dizisi elde edebilirsiniz . Örneğin , metni hiç bölmediğini ve tüm alanı tek bir belirteç olarak aldığından KeywordAnalyzerbahsettiğiniz . Aynı zamanda, (ve diğer birçok çözümleyici) boşluk ve noktalama işaretlerini ayırma noktaları olarak kullanır. Örneğin, "Çok mutluyum" ifadesi için liste ["i", "am", "çok", "mutlu"] (veya buna benzer bir şey) üretecektir. Spesifik çözümleyiciler / belirteçler hakkında daha fazla bilgi için Java Belgelerine bakın .StandardAnalyzer

Kökler söz konusu bir kelimenin temelini elde etmek için kullanılır. Büyük ölçüde kullanılan dile bağlıdır. Örneğin, İngilizce'deki önceki cümle için ["i", "be", "veri", "happi"] gibi bir şey üretilecek ve Fransız "Je suis très heureux" için bir tür Fransız analizcisi (gibi SnowballAnalyzer, başlatılmış "Fransızca" ile), ["je", "être", "tre", "heur"] üretir. Elbette, bir dilin çözümleyicisini başka bir dildeki metni köklendirmek için kullanırsanız, diğer dilin kuralları kullanılır ve stemmer yanlış sonuçlar verebilir. Bu, tüm sistemde başarısız değildir, ancak arama sonuçları daha az doğru olabilir.

KeywordAnalyzerherhangi bir saplayıcı kullanmaz, tüm alanı değiştirmeden geçer. Bu nedenle, İngilizce metinde bazı kelimeleri arayacaksanız, bu analizörü kullanmak iyi bir fikir değildir.

Durdurma sözcükleri en sık kullanılan ve neredeyse yararsız sözcüklerdir. Yine, büyük ölçüde dile bağlıdır. İngilizce için bu kelimeler "a", "the", "I", "be", "have", vs.'dir. Durdurma kelimeleri filtreleri, arama sonuçlarında gürültüyü azaltmak için bunları simge akışından kaldırır, dolayısıyla son olarak "I ile "çok mutluyum" StandardAnalyzer["veri", "happi"] listesine dönüştürülecek.

Ve KeywordAnalyzeryine hiçbir şey yapmaz. Yani, KeywordAnalyzerkimlik veya telefon numaraları gibi şeyler için kullanılır, ancak normal metin için kullanılmaz.

Ve gelince maxClauseCountistisna, seni aramaya almak inanıyoruz. Bu durumda, büyük olasılıkla çok karmaşık arama sorgusundan kaynaklanmaktadır. Bunu birkaç sorguya bölmeyi deneyin veya daha düşük seviyeli işlevler kullanın.


1
@ffriend: Stemmer'ın (kartopu veya diğer algoritmaları kullanarak) am -> bunu Lemmatizer'ın işi olduğu için dönüştürebileceğini sanmıyorum. Buradan kontrol edebilirsiniz snowball.tartarus.org/demo.php
Tho

Öyleyse Tika bunun neresinde? Teknik olarak bir analizör değil mi?
anon

1
@anon: Tika, birkaç temel özelliğe sahip ayrı bir projedir. Tika ayrıştırıcılarını kastettiğinizi varsayarsak, Lucene çözümleyicileri metin ve çıktı işlenmiş belirteç akışını alırken Tika'nın bayt akışını alıp metin + meta verileri çıkardığını söyleyebilirim. Örneğin, önce PDF veya XML dosyasını Tika ile ayrıştırabilir, "başlık", "yazar" ve "metin" gibi alanlara sahip belgeler oluşturabilir ve sonra bu alanların bir kısmını veya tamamını Lucene çözümleyicileriyle analiz edebilirsiniz.
ffriend

Merak ediyorum, "çok" ve "mutlu" reddedilen kelimeler değil, neden "veri" ve "happi" ye dönüştürülüyorlar? kulağa benzedikleri için i <-> y farklılıkları eşleştirmek için mi?
oguzalb

0

Benim bakış açıma göre StandAnalyzerve kullandım SmartCNAnalyzer. Çince metin aramak zorunda olduğum için. Açıkçası, SmartCnAnalyzerÇince ile başa çıkmada daha iyidir. Farklı amaçlar için, en uygun analizörü seçmelisiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.