我正在尝试将字符串标记化为ngram。奇怪的是,在NGramTokenizer的文档中,我没有看到将返回标记化的单个ngram的方法。实际上,我在NGramTokenizer类中仅看到两个返回String
Objects的方法。
这是我的代码:
Reader reader = new StringReader("This is a test string");
NGramTokenizer gramTokenizer = new NGramTokenizer(reader, 1, 3);
我希望我的输出像:这是一个测试字符串。这是一个测试字符串。这是一个测试字符串。
我不认为您会找到想要查找返回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
}