2015-05-29 35 views
13

Lucene gelen StandardTokenizer nasıl kullanılır:bir böyle StandardTokenizer nasıl kullanılacağını gösteren örnekler yeri vardır 5.x.x

TokenStream tokenStream = new StandardTokenizer(
      Version.LUCENE_36, new StringReader(input)); 

Ama yeni Lucene sürümlerinde bu yapıcı kullanılamıyor. Yeni yapıcı şuna benzer:

StandardTokenizer(AttributeFactory factory) 

Bunun AttributeFactory rolü nedir ve nasıl i Lucene yeni sürümlerinde bir dize tokenize olabilir?

+0

sen denediniz singleton 'AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY' geçen? Ya da parametresiz kurucu kullanın? – sisve

+1

Merhaba Simon ipuçları için teşekkürler. Bu kod ile çalışır: Tokenizer tokenStream = new StandardTokenizer(); tokenStream.setReader (yeni StringReader (giriş)); Filtrenizi uyguladığınızda bir TokenStream alırsınız. TokenStream iş akışı da artık) (reset çağırmanız gerekir değişti; Bu akıştan tüketmeye başlamadan önce. – samy

+0

Bu soru cevaplandı mı? – soulcheck

cevap

17

AttributeFactory, Attribute s kaynakları için AttributeImpl s kaynağı oluşturur. Öznitelikler, StandardTokenizer için veri akışını okuma/izleme için kullanılan temel mekanizma olan TokenStream davranışını yönetir.

Küçük AttributeFactory göre 5.x 4.x değiştiğini

- siz belirtmeden yoksa her iki versiyonda da, daha sonra, AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY İsterseniz bir AttributeFactory ile StandardTokenizer oluşturmak, ya da Sonunda kullanılmaya başlanacak.

büyük fark

da yapıcı bir parçası olarak giriş akışı için bir Reader içinde geçebileceği olmasıydı. Bu 4.x, sen sırayla AttributeFactory gelen özelliklerini yeniden başlatmak zorunda kalacak işlemek istediği her giriş akışı için yeni StreamTokenizer oluşturmak zorunda kalacak demektir.

Hiç Lucene dev değilim, ama benim tahminim bu çoklu akımların okuma karşısında niteliklerin yeniden kullanımını teşvik etmek için bir yeniden yapılanma sadece olmasıdır. Eğer TokenStream ve varsayılan AttributesFactory uygulanması dahili özelliklerine bir göz atacak olursak, oluşturma ve özelliklerini ayarlama ile ilgili yansıma LOT var. Sanırım olsaydı, bir okuyucu alır StreamTokenizer yapıcı sadece bu niteliklerin başlatma nispeten pahalı olması nedeniyle simgeleştiricisine tekrar kullanılmasını ve bunun özelliklerini teşvik etmek çıkarıldı.

DÜZENLEME

uzun gecikmiş bir örnek ekleniyor - yönlendirmeyen için üzgün:

// Define your attribute factory (or use the default) - same between 4.x and 5.x 
AttributeFactory factory = AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY; 

// Create the tokenizer and prepare it for reading 
// Lucene 4.x 
StandardTokenizer tokenizer = 
     new StandardTokenizer(factory, new StringReader("Tokenize me!")); 
tokenizer.reset(); 
// Lucene 5.x 
StandardTokenizer tokenizer = new StandardTokenizer(factory); 
tokenizer.setReader(new StringReader("Tokenizer me!")); 
tokenizer.reset(); 

// Then process tokens - same between 4.x and 5.x 
// NOTE: Here I'm adding a single expected attribute to handle string tokens, 
// but you would probably want to do something more meaningful/elegant 
CharTermAttribute attr = tokenizer.addAttribute(CharTermAttribute.class); 
while(tokenizer.incrementToken()) { 
    // Grab the term 
    String term = attr.toString(); 

    // Do something crazy... 
} 
+0

Kazançımı @RustyBuckets'e sunmak isterim, buna nasıl yaparım? – Filip

+0

@Filip sanırım zaten çok geç, sry sadece cevabı bugün gördüm. RustyBuckets açıklama için teşekkürler, belki de yeni StandardTokenizer'in nasıl kullanılacağına dair basit bir kod örneği ekleyebilirim. Ben şu şekilde kullanıyorum: Tokenizer source = new StandardTokenizer(); source.setReader (yeni StringReader (mytext)); – samy

+0

Evet, plz, örnek olarak bir kod parçacığı gerçekten yararlı olur – higuaro