当前位置: 首页 > 面试题库 >

Java Lucene NGramTokenizer

井唯
2023-03-14
问题内容

我正在尝试将字符串标记化为ngram。奇怪的是,在NGramTokenizer的文档中,我没有看到将返回标记化的单个ngram的方法。实际上,我在NGramTokenizer类中仅看到两个返回String
Objects的方法。

这是我的代码:

Reader reader = new StringReader("This is a test string");
NGramTokenizer gramTokenizer = new NGramTokenizer(reader, 1, 3);
  1. 被标记的ngram在哪里?
  2. 如何获取字符串/单词的输出?

我希望我的输出像:这是一个测试字符串。这是一个测试字符串。这是一个测试字符串。


问题答案:

我不认为您会找到想要查找返回String的方法的内容。您需要处理Attribute。

应该像这样工作:

Reader reader = new StringReader("This is a test string");
NGramTokenizer gramTokenizer = new NGramTokenizer(reader, 1, 3);
CharTermAttribute charTermAttribute = gramTokenizer.addAttribute(CharTermAttribute.class);
gramTokenizer.reset();

while (gramTokenizer.incrementToken()) {
    String token = charTermAttribute.toString();
    //Do something
}
gramTokenizer.end();
gramTokenizer.close();

不过,如果此后需要重用,请确保将Tokenizer重置()。

每个注释的单词而不是字符的标记分组:

Reader reader = new StringReader("This is a test string");
TokenStream tokenizer = new StandardTokenizer(Version.LUCENE_36, reader);
tokenizer = new ShingleFilter(tokenizer, 1, 3);
CharTermAttribute charTermAttribute = tokenizer.addAttribute(CharTermAttribute.class);

while (tokenizer.incrementToken()) {
    String token = charTermAttribute.toString();
    //Do something
}


 类似资料:

相关阅读

相关文章

相关问答