簡體   English   中英

Java中的自定義分析器,使用edgeNGram令牌過濾器

[英]Custom analyzer in java, using edgeNGram token filter

這是我先前問題的延續。 我正在使用Lucene 3.6.1,並想要創建一個自定義分析器,該分析器會創建如下所示的令牌:-

輸入/輸出文本: foo bar

代幣: f,fo,foo,b,ba,bar

I / P文字: HEllo 123

令牌: h,he,hel,hell,hello,1,12,123

基本上,它將文本轉換為小寫,然后使用邊緣n-gram令牌過濾器。

以下是我的自定義分析器的Java代碼。

@Override
    public TokenStream tokenStream(String fieldName, Reader reader) {
        TokenStream stream = new KeywordTokenizer(reader);
        TokenStream result = new EdgeNGramTokenFilter(stream, EdgeNGramTokenFilter.Side.FRONT, 1, 30);
        //OffsetAttribute offsetAttribute = result.addAttribute(OffsetAttribute.class);
        CharTermAttribute charTermAttribute = result.addAttribute(CharTermAttribute.class);
        try {
            result.reset();
            while (result.incrementToken()) {
                //int startOffset = offsetAttribute.startOffset();
                //int endOffset = offsetAttribute.endOffset();
                System.out.println(charTermAttribute.toString());
            }
            result.end();
            result.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }

但是它在foo bar令牌下面返回。

f
fo
foo
foo 
foo b
foo ba
foo bar

讓我知道我的代碼中缺少什么。

您需要使用StandardTokenizer而不是KeywordTokenizer 后者將簡單地將整個輸入視為單個令牌,而前者將小寫並將輸入拆分為多個令牌。

所以改變這個:

    TokenStream stream = new KeywordTokenizer(reader);

對此:

    TokenStream stream = new StandardTokenizer(reader);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM