如何在 Lucene FrenchAnalyzer 中将最小长度设置为 3?
How to set the minimum length to 3 in the Lucene FrenchAnalyzer?
我不知道如何在 Lucene 法语分析器中将最小字符长度设置为 3,如下所示 Java:
private final FrenchAnalyzer analyzer = new FrenchAnalyzer();
有人知道怎么做吗?
谢谢,
克里斯托夫
FrenchAnalyzer
被声明为final,所以不能扩展。我会通过复制源代码并在副本中添加 LengthFilter
来解决这个问题。
步骤如下(假设您使用的是最新版本的Lucene):
从 GitHub here.
获取来源 class 的副本
根据需要重命名 class(例如 CustomFrenchAnalyzer
)并相应地更改所有 class 的构造函数。
添加以下导入:
import org.apache.lucene.analysis.miscellaneous.LengthFilter;
- 在
createComponents
和normalize
方法中,添加新的长度过滤器。例如,假设您要根据您的问题删除少于 3 个字符的单词:
@Override
protected TokenStream normalize(String fieldName, TokenStream in) {
TokenStream result = new ElisionFilter(in, DEFAULT_ARTICLES);
result = new LowerCaseFilter(result);
// the following line is added:
result = new LengthFilter(result, 3, 9999);
return result;
}
对 createComponents
方法也做同样的事情。
这样,您的自定义 class 将自动利用法语分析器内置的其他功能:
- 法语省略过滤器
- 默认的法语集 stop-words(与 Lucene JAR 捆绑在一起)。
- 等等。
如果需要,它可以使用分析器的任何非空构造函数来构造。
如果您使用的不是兼容版本的 Lucene,则必须找到相关的 Git 分支,或者从 Lucene download page 下载源 JAR 并从那里获取源代码.
我不知道如何在 Lucene 法语分析器中将最小字符长度设置为 3,如下所示 Java:
private final FrenchAnalyzer analyzer = new FrenchAnalyzer();
有人知道怎么做吗?
谢谢, 克里斯托夫
FrenchAnalyzer
被声明为final,所以不能扩展。我会通过复制源代码并在副本中添加 LengthFilter
来解决这个问题。
步骤如下(假设您使用的是最新版本的Lucene):
从 GitHub here.
获取来源 class 的副本根据需要重命名 class(例如
CustomFrenchAnalyzer
)并相应地更改所有 class 的构造函数。添加以下导入:
import org.apache.lucene.analysis.miscellaneous.LengthFilter;
- 在
createComponents
和normalize
方法中,添加新的长度过滤器。例如,假设您要根据您的问题删除少于 3 个字符的单词:
@Override
protected TokenStream normalize(String fieldName, TokenStream in) {
TokenStream result = new ElisionFilter(in, DEFAULT_ARTICLES);
result = new LowerCaseFilter(result);
// the following line is added:
result = new LengthFilter(result, 3, 9999);
return result;
}
对 createComponents
方法也做同样的事情。
这样,您的自定义 class 将自动利用法语分析器内置的其他功能:
- 法语省略过滤器
- 默认的法语集 stop-words(与 Lucene JAR 捆绑在一起)。
- 等等。
如果需要,它可以使用分析器的任何非空构造函数来构造。
如果您使用的不是兼容版本的 Lucene,则必须找到相关的 Git 分支,或者从 Lucene download page 下载源 JAR 并从那里获取源代码.