【问题标题】:How to have ngram tokenizer in lucene 5.0?如何在 lucene 5.0 中使用 ngram 标记器?
【发布时间】:2015-05-20 02:54:02
【问题描述】:

我想为字符串生成 ngram 字符。下面是我使用的 Lucene 4.1 库。

    Reader reader = new StringReader(text);
    NGramTokenizer gramTokenizer = new NGramTokenizer(reader, 3, 5); //catch contiguous sequence of 3, 4 and 5 characters

    CharTermAttribute charTermAttribute = gramTokenizer.addAttribute(CharTermAttribute.class);

    while (gramTokenizer.incrementToken()) {
        String token = charTermAttribute.toString();
        System.out.println(token);}

但是,我想使用 Lucene 5.0.0 来做到这一点。与之前的版本相比,Lucene 5.0.0 中的 NGramTokenizer 变化很大,参考http://lucene.apache.org/core/5_0_0/analyzers-common/index.html?org/apache/lucene/analysis/ngram/NGramTokenizer.html

有人知道如何使用 Lucene 5.0.0 做 ngrams 吗?

【问题讨论】:

    标签: lucene nlp


    【解决方案1】:

    以下代码:

      StringReader stringReader = new StringReader("abcd");
      NGramTokenizer tokenizer = new NGramTokenizer(1, 2);
      tokenizer.setReader(stringReader);
      tokenizer.reset();
      CharTermAttribute termAtt = tokenizer.getAttribute(CharTermAttribute.class);
      while (tokenizer.incrementToken()) {
        String token = termAtt.toString();
        System.out.println(token);
      }
    

    将产生:

    a
    ab
    b
    bc
    c
    cd
    d
    

    【讨论】:

    • 谢谢!有用。很高兴知道可以读取StringReader的tokenizer.setReader(stringReader)方法。
    猜你喜欢
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2013-06-20
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多