Lucene 停用词和 nGram
Lucene Stopword and nGram
我正在使用 Lucene,我想使用带有停用词的 nGrams。
我在 Lucene 中针对德语停用词分析器编写了自己的分析器。
public class GermanNGramAnalyzer extends StopwordAnalyzerBase {
@Override
protected TokenStreamComponents createComponents(String s) {
NGramTokenizer tokenizer = new NGramTokenizer(4,4); //Tokenizer for nGrams
TokenStream result = new StandardFilter(tokenizer);
result = new LowerCaseFilter(result);
result = new StopFilter(result, this.stopwords);
result = new SetKeywordMarkerFilter(result, this.exclusionSet);
result = new GermanNormalizationFilter(result);
result = new NumberFilter(result);
return new TokenStreamComponents(tokenizer, result);
}
(...)
}
这行得通,但不是我想要的。
如您所见,我们有 4 克,所以它看起来像这样:(空白被屏蔽为“_”)
故居
达斯_
as_h
s_ha
_hau
豪斯
在德语中 "das" 类似于 "the",应该删除。但是当然它不会被删除然后 "das_","as_h","s_ha" 根本不包含 "das"。
所以我想先做一个单词分词器,使用停用词,然后再次合并所有内容,然后像往常一样使用 ngram。
当然我可以"manually"在将字符串放入 Lucene 之前从字符串中删除所有停用词,但我认为使用 Lucene 应该可以做到这一点。
有人有想法吗?
一种可能性是不使用 NGramTokenizer 作为标记器,首先你可以使用 StandardTokenizer 或任何其他好的标记化和然后通过使用 NGramTokenFilter 应用 ngram 的创建,这可以在使用 StopFilter 之后应用。
我正在使用 Lucene,我想使用带有停用词的 nGrams。
我在 Lucene 中针对德语停用词分析器编写了自己的分析器。
public class GermanNGramAnalyzer extends StopwordAnalyzerBase {
@Override
protected TokenStreamComponents createComponents(String s) {
NGramTokenizer tokenizer = new NGramTokenizer(4,4); //Tokenizer for nGrams
TokenStream result = new StandardFilter(tokenizer);
result = new LowerCaseFilter(result);
result = new StopFilter(result, this.stopwords);
result = new SetKeywordMarkerFilter(result, this.exclusionSet);
result = new GermanNormalizationFilter(result);
result = new NumberFilter(result);
return new TokenStreamComponents(tokenizer, result);
}
(...)
}
这行得通,但不是我想要的。 如您所见,我们有 4 克,所以它看起来像这样:(空白被屏蔽为“_”)
故居
达斯_
as_h
s_ha
_hau
豪斯
在德语中 "das" 类似于 "the",应该删除。但是当然它不会被删除然后 "das_","as_h","s_ha" 根本不包含 "das"。
所以我想先做一个单词分词器,使用停用词,然后再次合并所有内容,然后像往常一样使用 ngram。
当然我可以"manually"在将字符串放入 Lucene 之前从字符串中删除所有停用词,但我认为使用 Lucene 应该可以做到这一点。
有人有想法吗?
一种可能性是不使用 NGramTokenizer 作为标记器,首先你可以使用 StandardTokenizer 或任何其他好的标记化和然后通过使用 NGramTokenFilter 应用 ngram 的创建,这可以在使用 StopFilter 之后应用。