如何规范Lucene中的未知字符?

时间:2014-09-03 14:12:34

标签: java lucene

我正在使用带有以下过滤器链的lucene:

StandardFilter > LowerCaseFilter > GermanNormalizationFilter > ASCIIFoldingFilter

我必须使用哪个额外的过滤器将任何未知字符转换为拉丁字母? 例如像Кадашевская这样的俄语字符串,我希望它们可以转换为拉丁字母等价物,或者将它们删除。

哪种过滤器符合此目的?

目前,过滤器链将字符串规范化为:???????????

1 个答案:

答案 0 :(得分:3)

我相信ICUTransformFilter将是一个不错的选择:

TokenFilter filter = new ICUTransformFilter(
    previousFilter, 
    Transliterator.getInstance("Cyrillic-Latin")
);

我认为将每个可能的角色转换为等同的拉丁角色的想法是无稽之谈(拉的等同于什么?或者♞?)。但是,您也可以将多个转换链接在一起,以尽可能多地进行转换,例如将希腊语转换为拉丁语,将片假名转换为拉丁语:

TokenFilter filter = new ICUTransformFilter(
    previousFilter, 
    Transliterator.getInstance("Cyrillic-Latin;Greek-Latin;Katakana-Latin")
);

您需要为过滤器添加“lucene-analyzers-icu-4.x.x.jar”,以及download and include ICU4J